(57)【要約】【課題】すべてのスタックモジュールにより消費されるアドレス空間全体の成長を制御することは不可能である。【解決手段】プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックモジュール２７２を配置し、そのソフトウエアプログラムの第２のファンクションコールに応じて、第２のスタックモジュール２７４を配置し、その第１のスタックモジュール２７２に対して、その第２のスタックモジュール２７４を非連続に配置する方法および装置を提供する。【選択図】図３
2006323824.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックモジュールを配置するステップと、
前記ソフトウエアプログラムの第２のファンクションコールに応じて、第２のスタックモジュールを配置するステップと、
を含み、
前記第２のスタックモジュールは、前記第１のスタックモジュールに対して、非連続に配置されることを特徴とする方法。
【請求項２】
前記第１のスタックモジュールおよび前記第２のスタックモジュールは、一以上のスタックフレーム、またはスタックフレームの一部分を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記第１のファンクションコールは、前記第２のファンクションコールを呼び出すことを特徴とする請求項１または２に記載の方法。
【請求項４】
他のファンクションコールにより呼び出された、ソフトウエアプログラムのそれぞれのファンクションコールに応じて、単一のスタックフレームを含むスタックモジュールを非連続に配置するステップをさらに含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第１のファンクションコールが、第１のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールの一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置するステップをさらに含むことを特徴とする請求項１から４のいずれかに記載の方法。
【請求項６】
前記第１のファンクションコールおよび前記第２のファンクションコールが、同一のプログラムモジュールの一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置せずに、前記第１のスタックモジュールを用いるステップをさらに含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第１のファンクションコールが、第１のプログラムモジュールセット内のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールセット内のプログラムモジュールの一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置するステップをさらに含むことを特徴とする請求項１から４のいずれかに記載の方法。
【請求項８】
前記第１のファンクションコールおよび前記第２のファンクションコールが、同一のプログラムモジュールセット内の一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置せずに、前記第１のスタックモジュールを用いるステップをさらに含むことを特徴とする請求項７に記載の方法。
【請求項９】
プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックフレームを配置するステップと、
前記ソフトウエアプログラムの前記第１のファンクションコールによる、第２のファンクションコールの呼出に応じて、第２のスタックフレームを配置するステップと、
前記第２のスタックフレームを、前記第１のファンクションコールのための領域および前記第２のファンクションコールのための領域に分割するステップと、
を含むことを特徴とする方法。
【請求項１０】
前記第２のスタックフレームは、
（ｉ）前記第１のファンクションコールの間に生成された一以上のレジスタ値を記録することが可能な汎用レジスタ領域と、
（ｉｉ）前記第１のファンクションコールの間に生成された一以上の変数値を記録することが可能なローカル変数領域と、
（ｉｉｉ）前記第１のファンクションコールの間に、前記第２のファンクションコールによる使用を目的として生成された一以上のパラメータ値を格納することが可能なパラメータリスト領域と、
（ｉｖ）前記第１のファンクションコールが呼び出されたときに実行されている前記プログラムの一部分に戻る際に、第１のファンクションコールが使用するためのリンクレジスタ値を記録することが可能なリンクレジスタ記録領域と、
（ｖ）前記第１のスタックフレームの逆方向チェイン領域へのポインタを記録することが可能な逆方向チェイン領域と、
のうち少なくとも一つを含むことを特徴とする請求項９に記載の方法。
【請求項１１】
前記第２のスタックフレームを分割するステップは、前記第１のファンクションコールのための、前記汎用レジスタ領域と前記ローカル変数領域とのうち少なくとも一つと、前記第２のファンクションコールのための、前記パラメータリスト領域と前記リンクレジスタ記録領域と前記逆方向チェイン領域とのうち少なくとも一つと、に分割することを特徴とする請求項１０に記載の方法。
【請求項１２】
前記第２のファンクションコールのための前記第２のスタックフレームの領域を、前記第１のファンクションコールのための前記第２のスタックフレームの領域に対して、非連続にするステップをさらに含むことを特徴とする請求項９から１１のいずれかに記載の方法。
【請求項１３】
前記第１のファンクションコールのための前記第２のスタックフレームの領域を、前記第１のスタックフレームに連続させるステップをさらに含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックモジュールを配置するステップと、
前記ソフトウエアプログラムの前記第１のファンクションコールによる第２のファンクションコールの呼出に応じて、第２のスタックモジュールを配置するステップと、
前記第１のスタックモジュールに対して非連続に、前記第２のスタックモジュールを保存するステップと、
前記第２のファンクションコールから前記第１のファンクションコールに戻ったことを受けて、前記第２のスタックモジュールを削除するステップと、
を含むことを特徴とする方法。
【請求項１５】
前記第１のスタックモジュールおよび前記第２のスタックモジュールは、一以上のスタックフレーム、またはスタックフレームの一部分を含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックモジュールを配置するステップと、
前記第１のファンクションコールによる第２のファンクションコールの呼出に応じて、第２のスタックモジュールを配置するステップと、
前記プロセッサシステムのメモリ内における前記第１のスタックモジュールのアドレスを示すリターン情報を、前記第２のスタックモジュール内に加えるステップと、
前記第１のスタックモジュールに対して非連続に、前記第２のスタックモジュールを保存するステップと、
を含むことを特徴とする方法。
【請求項１７】
前記第２のファンクションコールによる、前記第２のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第１のスタックモジュールの配置場所を確認すること、および前記第１のスタックモジュールをロードすることのうち少なくとも一つを実施するステップと、
前記第２のファンクションコールから前記第１のファンクションコールに戻るステップと、
をさらに含むことを特徴とする請求項１６に記載の方法。
【請求項１８】
前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第１のファンクションコールが、第１のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールの一部分であるとき、前記第２のスタックモジュールを配置するステップをさらに含むことを特徴とする請求項１６または１７に記載の方法。
【請求項１９】
前記ソフトウエアプログラムの一部分である第１のプログラムモジュールについての前記メモリ内におけるアドレスを示すリターン情報を、前記第２のスタックモジュール内に加えるステップと、
前記第２のファンクションコールによる、前記第２のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第１のスタックモジュールの配置場所を確認すること、および前記第１のスタックモジュールをロードすることのうち少なくとも一つを実施するステップと、
前記第２のファンクションコールによる、前記第２のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第１のプログラムモジュールの配置場所を確認すること、および前記第１のプログラムモジュールをロードすることのうち少なくとも一つを実施するステップと、
をさらに含むことを特徴とする請求項１６に記載の方法。
【請求項２０】
前記第２のファンクションコールから前記第１のファンクションコールに戻るステップをさらに含むことを特徴とする請求項１９に記載の方法。
【請求項２１】
前記第２のスタックモジュールを削除するステップをさらに含むことを特徴とする請求項２０に記載の方法。
【請求項２２】
前記第１のスタックモジュールを含むメモリとは別のまたは不連続のメモリ領域内に、前記第２のスタックモジュールを保存することを特徴とする請求項１６から２１のいずれかに記載の方法。
【請求項２３】
前記第１のスタックモジュールおよび前記第２のスタックモジュールは、一以上のスタックフレーム、またはスタックフレームの一部分を含むことを特徴とする請求項１６から２２のいずれかに記載の方法。
【請求項２４】
プロセッサシステム内のプロセッサによる動作の実行を可能にするプログラムであって、
当該動作は、
プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックモジュールを配置するステップと、
前記ソフトウエアプログラムの前記第１のファンクションコールによる、第２のファンクションコールの呼出に応じて、第２のスタックモジュールを配置するステップと、
前記第２のスタックモジュールを、前記第１のスタックモジュールに対して非連続に保存するステップと、
を含むことを特徴とするプログラム。
【請求項２５】
他のファンクションコールにより呼び出された、ソフトウエアプログラムのそれぞれのファンクションコールに応じて、単一のスタックフレームを含むスタックモジュールを非連続に配置するステップと、
前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第１のファンクションコールが、第１のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールの一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置するステップと、
前記プログラムモジュールが、複数のプログラムモジュールセットにグループ分けされ、前記第１のファンクションコールが、第１のプログラムモジュールセット内のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールセット内のプログラムモジュールの一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置するステップと、
のうち少なくとも一つのステップをさらに含むことを特徴とする請求項２４に記載のプログラム。
【請求項２６】
プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックフレームを配置するステップと、
前記ソフトウエアプログラムの前記第１のファンクションコールによる、第２のファンクションコールの呼出に応じて、第２のスタックフレームを配置するステップと、
前記第２のスタックフレームを、前記第１のファンクションコールのための領域および前記第２のファンクションコールのための領域に分割するステップと、
をさらに含むことを特徴とする請求項２４または２５に記載のプログラム。
【請求項２７】
前記第２のスタックフレームは、
（ｉ）前記第１のファンクションコールの間に生成された一以上のレジスタ値を記録することが可能な汎用レジスタ領域と、
（ｉｉ）前記第１のファンクションコールの間に生成された一以上の変数値を記録することが可能なローカル変数領域と、
（ｉｉｉ）前記第１のファンクションコールの間に、前記第２のファンクションコールによる使用を目的として生成された一以上のパラメータ値を格納することが可能なパラメータリスト領域と、
（ｉｖ）前記第１のファンクションコールが呼び出されたときに実行されている前記プログラムの一部分に戻る際に、第１のファンクションコールが使用するためのリンクレジスタ値を記録することが可能なリンクレジスタ記録領域と、
（ｖ）前記第１のスタックフレームの逆方向チェイン領域へのポインタを記録することが可能な逆方向チェイン領域と、
のうち少なくとも一つを含み、
前記第２のスタックフレームを分割するステップは、前記第１のファンクションコールのための、前記汎用レジスタ領域と前記ローカル変数領域とのうち少なくとも一つと、前記第２のファンクションコールのための、前記パラメータリスト領域と前記リンクレジスタ記録領域と前記逆方向チェイン領域とのうち少なくとも一つと、に分割することを特徴
とする請求項２６に記載のプログラム。
【請求項２８】
前記第２のファンクションコールから前記第１のファンクションコールに戻ったことを受けて、前記第２のスタックモジュールを削除するステップをさらに含むことを特徴とする請求項２４から２７のいずれかに記載のプログラム。
【請求項２９】
前記プロセッサシステムのメモリ内における前記第１のスタックモジュールのアドレスを示すリターン情報を、前記第２のスタックモジュール内に加えるステップと、
前記第２のファンクションコールによる、前記第２のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第１のスタックモジュールの配置場所を確認すること、および前記第１のスタックモジュールをロードすることのうち少なくとも一つを実施するステップと、
前記第２のファンクションコールから前記第１のファンクションコールに戻るステップと、
をさらに含むことを特徴とする請求項２４から２８のいずれかに記載のプログラム。
【請求項３０】
前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第１のファンクションコールが、第１のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールの一部分であって、
前記動作は、
前記メモリ内における前記第１のプログラムモジュールのアドレスを示すリターン情報を、前記第２のスタックモジュール内に加えるステップと、
前記第２のファンクションコールによる、前記第２のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第１のスタックモジュールの配置場所を確認すること、および前記第１のスタックモジュールをロードすることのうち少なくとも一つを実施するステップと、
前記第２のファンクションコールによる、前記第２のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第１のプログラムモジュールの配置場所を確認すること、および前記第１のプログラムモジュールをロードすることのうち少なくとも一つを実施するステップと、
前記第２のファンクションコールから前記第１のファンクションコールに戻るステップと、
のうち少なくとも一つのステップをさらに含むことを特徴とする請求項２９に記載のプログラム。
【請求項３１】
メインメモリに動作可能に接続される少なくとも一つのプロセッサと、
前記少なくとも一つのプロセッサに接続されるローカルメモリと、
を含み、
前記少なくとも一つのプロセッサは、
（ｉ）ソフトウエアプログラムの第１のファンクションコールに応じて、前記ローカルメモリ内に第１のスタックモジュールを配置する機能と、
（ｉｉ）前記ソフトウエアプログラムの前記第１のファンクションコールによる、第２のファンクションコールの呼出に応じて、第２のスタックモジュールを配置する機能と、
（ｉｉｉ）前記第２のスタックモジュールを、前記ローカルメモリ内における前記第１のスタックモジュールに対して非連続に保存する機能と、
を有することを特徴とする装置。
【請求項３２】
前記少なくとも一つのプロセッサは、
前記ローカルメモリ内における前記第１のスタックモジュールのアドレスを示すリターン情報を、前記第２のスタックモジュール内に加える機能と、
前記第２のスタックモジュール内の前記リターン情報を用いて、前記ローカルメモリ内における前記第１のスタックモジュールの配置場所を確認すること、および前記第１のスタックモジュールをロードすることのうち少なくとも一つを実施する機能と、
前記第２のファンクションコールから前記第１のファンクションコールに戻る機能と、
のうち少なくとも一つの機能をさらに有することを特徴とする請求項３１に記載の装置。
【請求項３３】
前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第１のファンクションコールが、第１のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールの一部分であって、
前記少なくとも一つのプロセッサは、
（ｉ）前記メモリ内における前記第１のプログラムモジュールのアドレスを示すリターン情報を、前記第２のスタックモジュールに加える機能と、
（ｉｉ）前記第２のスタックモジュール内の前記リターン情報を用いて、前記メモリ内における前記第１のスタックモジュールの配置場所を確認すること、および前記第１のスタックモジュールをロードすることのうち少なくとも一つを実施する機能と、
（ｉｉｉ）前記第２のスタックモジュール内の前記リターン情報を用いて、前記メモリ内における前記第１のプログラムモジュールの配置場所を確認すること、および前記第１のプログラムモジュールをロードすることのうち少なくとも一つを実施する機能と、
（ｉｖ）前記第２のファンクションコールから前記第１のファンクションコールに戻る機能と、
のうち少なくとも一つの機能をさらに有することを特徴とする請求項３２に記載の装置。
【請求項３４】
前記少なくとも一つのプロセッサは、前記第２のファンクションコールから前記第１のファンクションコールに戻ったことを受けて、前記第２のスタックモジュールを削除する機能をさらに有することを特徴とする請求項３１から３３のいずれかに記載の装置。
【請求項３５】
前記メインメモリとの通信を可能にする並列のプロセッサをさらに複数含み、
前記複数のプロセッサのそれぞれは、ハードウエアキャッシュメモリでないローカルメモリと、命令実行パイプラインとを有することを特徴とする請求項３１から３４のいずれかに記載の装置。
【請求項３６】
前記複数のプロセッサのそれぞれは、プロセッサ自身のローカルメモリ内においては前記一以上のソフトプログラムを実行できる一方、前記メインメモリ内においては前記一以上のプログラムの実行が禁止されることを特徴とする請求項３５に記載の装置。
【請求項３７】
前記プロセッサとそのプロセッサに関連付けられたローカルメモリは、一つの共通の集積回路として一体化されることを特徴とする請求項３５または３６に記載の装置。
【請求項３８】
前記プロセッサ、そのプロセッサに関連付けられたローカルメモリ、および前記メインメモリは、一つの共通の集積回路として一体化されることを特徴とする請求項３５または３６に記載の装置。
【請求項３９】
請求項２４から請求項３０のいずれかのプログラムを格納する記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ内においてデータ転送を実行する方法および装置に関する。
【背景技術】
【０００２】
最先端のコンピュータアプリケーションがますます複雑になり、処理システム（プロセッサシステム）に対する需要は絶えず増大しているため、近年、より速いコンピュータによる処理データスループットについて強い要望がある。そうした中、特にグラフィックスアプリケーションは、望ましい視覚結果を実現するために、比較的短い時間内で膨大な数のデータアクセス、データ計算、およびデータ操作を必要とし、処理システムに対する要求は最も高い。このようなアプリケーションは毎秒何千メガビットものデータ処理という非常に高速な処理を必要とする。いくつかの処理システムは一つのプロセッサを用いて高速な処理速度を実現する一方、他の処理システムはマルチプロセッサアーキテクチャを用いて実装される。マルチプロセッサシステムにおいて、複数のサブプロセッサは並列に（少なくとも協調して）動作し、所望の処理結果を達成できる。
【０００３】
プロセッサシステムにおける重要な部分は、スタックの構成およびスタックの管理である。従来のプロセッサシステムでは、スタックフレームは、ファンクションコールが行われたときに、プログラム情報を格納するためにメモリ内に形成される。一般的なスタックフレームには、汎用レジスタ記録領域、ローカル変数（local variable；自動変数）記録領域、パラメータリスト領域、リンクレジスタ記録領域、および逆方向チェイン記録領域が含まれる。汎用レジスタ記録領域は、プロセッサシステムの汎用レジスタ内に含まれる、呼出元のファンクションのためのデータを格納するために用いられる。ローカル変数記録領域は、プロセッサシステムのメモリ内に含まれる、呼出元のファンクションのための変数データを格納するために用いられる。パラメータリスト記録領域は、呼出先のファンクションに受け渡すための、呼出元のファンクションのためのデータを格納するために用いられる。リンクレジスタ記録領域は、呼出元のファンクションが完了したときに、戻りアドレスを再構築できるように、リンクレジスタの値を格納するために用いられる。逆方向チェイン記録領域は、前のスタックフレームの逆方向チェインへのポインタ値を格納するために用いられる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来のプロセッサシステムにおけるスタック管理に対するアプローチに関して、スタックが相当数に増えれば、プロセッサシステムのメモリ内の貴重なスペースが占有されてしまうという問題がある。プロセッサシステムにおけるローカルメモリ（の容量）は比較的小さいため、制御されていないスタックの増加は問題になりうる。メモリ管理用のハードウエアを用いる従来のスタック配置技術によれば、まず小さなスタックスペースから始まり、スタックがそのスタックスペースより大きくなったときにページを追加する。このような技術では、確かにスタック内の使用されていないページを解放することができるが、すべてのスタックモジュールにより消費されるアドレス空間全体の成長を制御することは不可能である。
【課題を解決するための手段】
【０００５】
実施の形態に係る一以上の態様は、プロセッサシステム上で実行されているアプリケーションプログラムの一以上のパラメータに従って、一以上のスタックモジュールを配置する（または、スタックを分割する）ステップを提供する。例えば、それらスタックモジュールは、それぞれのファンクションコールに対応して、あるいは、それぞれの「．ｔｅｘｔ」モジュール（テキストモジュール）に対応して、あるいは、そのプログラムの「．ｔｅｘｔ」モジュールの集合に対応して、個別に形成されうる。スタックモジュールを複数有することにより、もはや必要でないスタックモジュールを削除する、および／または（より大きな容量のシステムメモリなどの）他のメモリにスタックモジュールを移動させることができる。その結果、プロセッサシステムのローカルメモリ内のメモリスペースを確保できる。
【０００６】
スタックフレームは、呼出元のファンクションに関連付けられたデータと、呼出先のファンクションに関連付けられたデータとを分けるラインに沿って分割されうる。例えば、汎用レジスタ記録領域およびローカル変数記録領域については、呼出元のファンクションに関連付けられ、一方、パラメータリスト領域、リンクレジスタ記録領域、および逆方向チェイン記録領域については、呼出元のファンクションに関連付けられる。その結果、ローカル変数記録領域とパラメータリスト領域との間でスタックフレームの分割を行うことにより、二つの個別のスタックモジュールを構築してもよい。呼出元のファンクションに関連付けられた、プログラムモジュールおよびスタックモジュールの配置場所に関する情報は、呼出先のファンクションに対応する新規のスタックモジュール内に記録されうる。
【０００７】
本発明の一以上の態様によれば、プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックモジュールを配置するステップと、前記ソフトウエアプログラムの第２のファンクションコールに応じて、第２のスタックモジュールを配置するステップと、を提供でき、前記第２のスタックモジュールは、前記第１のスタックモジュールに対して、非連続に配置される。前記第１のファンクションコールは、前記第２のファンクションコールを呼び出すことが好ましい。
【０００８】
本発明の一以上の別の態様は、他のファンクションコールにより呼び出された、ソフトウエアプログラムのそれぞれのファンクションコールに応じて、単一のスタックフレームを含むスタックモジュールを非連続に配置するステップを含んでもよい。
【０００９】
本発明の一以上の別の態様は、前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第１のファンクションコールが、第１のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールの一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置するステップを含んでもよい。好適には、前記第１のファンクションコールおよび前記第２のファンクションコールが、同一のプログラムモジュールの一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置せずに、前記第１のスタックモジュールが用いられる。
【００１０】
本発明の一以上の別の態様は、前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第１のファンクションコールが、第１のプログラムモジュールセット内のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールセット内のプログラムモジュールの一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置するステップを含んでもよい。前記第１のファンクションコールおよび前記第２のファンクションコールが、同一のプログラムモジュールセット内の一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置せずに、前記第１のスタックモジュールを用いるステップを含んでもよい。
【００１１】
本発明の一以上の態様によれば、プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックフレームを配置するステップと、前記ソフトウエアプログラムの前記第１のファンクションコールによる、第２のファンクションコールの呼出に応じて、第２のスタックフレームを配置するステップと、前記第２のスタックフレームを、前記第１のファンクションコールのための領域および前記第２のファンクションコールのための領域に分割するステップと、を提供できる。
【００１２】
前記第２のスタックフレームは、（ｉ）前記第１のファンクションコールの間に生成された一以上のレジスタ値を記録することが可能な汎用レジスタ領域と、（ｉｉ）前記第１のファンクションコールの間に生成された一以上の変数値を記録することが可能なローカル変数領域と、（ｉｉｉ）前記第１のファンクションコールの間に、前記第２のファンクションコールによる使用を目的として生成された一以上のパラメータ値を格納することが可能なパラメータリスト領域と、（ｉｖ）前記第１のファンクションコールが呼び出されたときに実行されている前記プログラムの一部分に戻る際に、第１のファンクションコールが使用するためのリンクレジスタ値を記録することが可能なリンクレジスタ記録領域と、（ｖ）前記第１のスタックフレームの逆方向チェイン領域へのポインタを記録することが可能な逆方向チェイン領域と、のうち少なくとも一つを含んでもよい。
【００１３】
前記第２のスタックフレームを分割するステップは、前記第１のファンクションコールのための、前記汎用レジスタ領域と前記ローカル変数領域とのうち少なくとも一つと、前記第２のファンクションコールのための、前記パラメータリスト領域と前記リンクレジスタ記録領域と前記逆方向チェイン領域とのうち少なくとも一つと、に分割することが好ましい。
【００１４】
本発明の一以上の態様によれば、プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックモジュールを配置するステップと、前記ソフトウエアプログラムの前記第１のファンクションコールによる、第２のファンクションコールの呼出に応じて、第２のスタックモジュールを配置するステップと、前記第１のスタックモジュールに対して非連続に、前記第２のスタックモジュールを保存するステップと、前記第２のファンクションコールから前記第１のファンクションコールに戻ったことを受けて、前記第２のスタックモジュールを削除するステップと、を提供できる。
【００１５】
本発明の一以上の態様によれば、プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックモジュールを配置するステップと、前記第１のファンクションコールによる第２のファンクションコールの呼出に応じて、第２のスタックモジュールを配置するステップと、前記プロセッサシステムのメモリ内における前記第１のスタックモジュールのアドレスを示すリターン情報を、前記第２のスタックモジュール内に加えるステップと、前記第１のスタックモジュールに対して非連続に、前記第２のスタックモジュールを保存するステップと、を提供できる。
【００１６】
本発明の一以上の別の態様は、前記第２のファンクションコールによる、前記第２のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第１のスタックモジュールの配置場所を確認すること、および前記第１のスタックモジュールをロードすることのうち少なくとも一つを実施するステップと、前記第２のファンクションコールから前記第１のファンクションコールに戻るステップと、を含んでもよい。本発明の一以上の別の態様は、前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第１のファンクションコールが、第１のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールの一部分であるとき、前記第２のスタックモジュールを配置するステップを含んでもよい。
【００１７】
本発明の一以上の別の態様は、前記第２のスタックモジュールを削除するステップを含んでもよく、前記第１のスタックモジュールを含むメモリとは別のまたは不連続のメモリ領域内に、前記第２のスタックモジュールを保存してもよい。
【００１８】
本発明の一以上の態様は、プロセッサシステム内のプロセッサによる動作の実行を可能にするプログラムである。そのプログラムにより実行される動作は、プロセッサシステム上で実行されているソフトウエアプログラムの第１のファンクションコールに応じて、第１のスタックモジュールを配置するステップと、前記ソフトウエアプログラムの前記第１のファンクションコールによる第２のファンクションコールの呼出に応じて、第２のスタックモジュールを配置するステップと、前記第２のスタックモジュールを、前記第１のスタックモジュールに対して非連続に保存するステップと、を含んでもよい。
【００１９】
一以上の別の態様に係るそのソフトウエアプログラムによれば、（ｉ）他のファンクションコールにより呼び出された、ソフトウエアプログラムのそれぞれのファンクションコールに応じて、単一のスタックフレームを含むスタックモジュールを非連続に配置するステップと、（ｉｉ）前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第１のファンクションコールが、第１のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールの一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置するステップと、（ｉｉｉ）前記プログラムモジュールが、複数のプログラムモジュールセットにグループ分けされ、前記第１のファンクションコールが、第１のプログラムモジュールセット内のプログラムモジュールの一部分であり、さらに、前記第２のファンクションコールが、第２のプログラムモジュールセット内のプログラムモジュールの一部分であるとき、前記第１のファンクションコールによる前記第２のファンクションコールの呼出に応じて、前記第２のスタックモジュールを配置するステップと、を提供できる。
【００２０】
本発明の一以上の態様は装置である。その装置は、メインメモリに動作可能に接続される少なくとも一つのプロセッサと、前記少なくとも一つのプロセッサに接続されるローカルメモリと、を含み、前記少なくとも一つのプロセッサは、（ｉ）ソフトウエアプログラムの第１のファンクションコールに応じて、前記ローカルメモリ内に第１のスタックモジュールを配置する機能と、（ｉｉ）前記ソフトウエアプログラムの前記第１のファンクションコールによる第２のファンクションコールの呼出に応じて、第２のスタックモジュールを配置する機能と、（ｉｉｉ）前記第２のスタックモジュールを、前記ローカルメモリ内における前記第１のスタックモジュールに対して非連続に保存する機能と、を有する。
【００２１】
本発明の上記以外の態様、特徴、および利点は、添付図面とともに以下の詳細な説明により当業者には明確に理解される。
【発明を実施するための最良の形態】
【００２２】
現在のところ好適である図面を例示として添付するが、本発明は図面と同一の構成および手段に限定するものではない。
【００２３】
図において同一の符号は同一の要素を示すものとする。図１は、実施の形態に係る一以上の態様の実施に適したプロセッサシステム１００を示す。簡潔および明確にするために、図１の構成図を参照し装置１００を用いて説明するが、同一の主旨を有する様々な態様の方法にその説明を簡単に適用できるのは言うまでもない。
【００２４】
装置１００は、プロセッサ１０２と、ローカルメモリ１０４と、メインメモリ１０６（例えば、ＤＲＡＭ）と、バス１０８とを備えるのが好ましい。プロセッサ１０２は、システムメモリ１０６からのデータの要求を可能にし、そのデータを操作することで所望の結果への達成を可能にする任意の既知の技術を用いて実装されてもよい。例えば、プロセッサ１０２はソフトウエアおよび／またはファームウエアを実行可能な、標準マイクロプロセッサや分散型のマイクロプロセッサなどの任意の既知のマイクロプロセッサを用いることで実装されてもよい。例として、プロセッサ１０２は、ピクセルデータなどのデータを要求し操作できるグラフィックプロセッサであってもよい。なお、そのピクセルデータには、グレースケール情報や、カラー情報や、テクスチャデータや、ポリゴン情報や、ビデオフレーム情報などが含まれる。
【００２５】
ローカルメモリ１０４は、プロセッサ１０２がローカルメモリ１０４内のプログラムコードを実行できるよう、さらに、実行しないのであれば、ローカルメモリ１０４内のデータを操作できるよう、システムメモリ１０６とは対照的にそのプロセッサ１０２に近い場所に設けられる。ローカルメモリ１０４は、従来のハードウェアキャッシュメモリではないことが好ましく、ローカルメモリ１０４には、ハードウェアキャッシュメモリ機能を実現するための、チップ内蔵またはチップ外に設けられたハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラなどが無いことが好ましい。チップ上の実装面積はしばしば限られているので、ローカルメモリ１０４のサイズは、システムメモリ１０６のサイズより遥かに小さい。プロセッサ１０２は、プログラムの実行とデータの操作のために、バス１０８を介してシステムメモリ１０６からそのローカルメモリ１０４にデータ（プログラムデータを含みうる）をコピーするためのデータアクセスリクエストを提供することが好ましい。データアクセスを容易にするメカニズムは、メモリインタフェース１１０内のダイレクトメモリアクセスコントローラ（ＤＭＡＣ）を用いて実装されるのが好ましい。
【００２６】
図２は、プロセッサシステム１００によりスタックが用いられる様子を示す。スタックは、他のプログラムコードを処理するために、プログラム内の後の処理または操作に必要な情報を格納するために用いられるデータ領域またはバッファである。例えば、プロセッサシステム１００上で実行されているプログラムコードが、そのプログラムにおける他の部分に分岐することを示すファンクションコールに到達する場合、そのプログラムにより処理および／または使用されている所定の情報は、その情報が後で再び呼び出されることができるよう、そのファンクションコールが完了した後に、スタック上にプッシュされる。そのスタックは、一般的なプッシュダウンリスト（push-down list）であり、すなわち、新たな情報がスタック上にプッシュされたとき、古い情報はスタック上の下方に押し下げられる。そのプログラムは、ＬＩＦＯ（last-in-first-out）に基づいて、要素群をそのスタックから取り出す。
【００２７】
スタックは、一以上のスタックフレームを含みうるが、ここでは、２つのスタックフレーム２００、２５０のみを図示することとする。第１のスタックフレーム２００は、そのプログラムのある部分、例えば、第１のファンクションコールの間に生成される一以上のレジスタ値を記録することが可能な汎用レジスタ領域２０２を含みうる。次のファンクションの呼び出しが完了したとき、これらレジスタ値をスタックから取り出し、その結果、そのプログラムのもとの部分（例えば第１のファンクションコール）を完了できる。第１のスタックフレーム２００はまた、第１のファンクションコールの間に生成された一以上の変数値を格納することが可能なローカル変数領域２０４を含みうる。次のファンクションの呼び出しが完了したとき、これら変数値をスタックから取り出すことができ、そのプログラムのもとの部分を完了できる。
【００２８】
第１のスタックフレーム２００は、第１のファンクションコールの間に生成された、第２のファンクションコールなどの次のファンクションコールが使用するための一以上のパラメータ値を記録できるパラメータリスト領域２０６を含みうる。そのパラメータは、第２のファンクションコール内での使用のためにスタックからデータを取り出すことによって、第２のファンクションコールに受け渡される。第１のスタックフレーム２００はまた、リンクレジスタ記録領域２０８を含みうる。そのリンクレジスタ記録領域２０８には、第１のファンクションコールが呼び出されたときに実行されたプログラムのある部分に戻る際に、第１のファンクションコールが使用するためのリンクレジスタ値を記録できる。第１のスタックフレーム２００はまた、前のスタックフレームの逆方向チェイン領域へのポインタを記録することが可能な逆方向チェイン領域２１０を含みうる。
【００２９】
第２のスタックフレーム２５０は、第１のスタックフレーム２００と同様の領域の集合を有してもよい。ここで、第２のスタックフレーム２５０の逆方向チェイン領域２６０には、第１のスタックフレーム２００の逆方向チェイン領域２１０へのポインタが含まれる。
【００３０】
ここで、上述では、スタックは、実際のデータがスタック上に繰り返しプッシュされるコールバイバリュー（call-by-value；値によるファンクションコール）技術により用いられることを想定している。ここで、スタックはまた、コールバイリファレンス（call-by-reference；参照によるファンクションコール）技術を用いて実装されてもよい。その技術では、データそのもののかわりに、データへのポインタがスタック上にプッシュされる。したがって、スタック上にデータを入れることや、スタックを使用することについての本明細書における任意の議論は、コールバイバリュー技術およびコールバイリファレンス技術の両方を意図している。
【００３１】
一般的に、あるファンクションが次のファンクションを呼び出すとき（呼び出されたファンクションを「呼出先のファンクション」と呼ぶ）、呼出元のファンクションはスタックフレームを生成できる。例えば、第１のスタックフレーム２００が、プロセッサシステム１００上で実行されている、第１のファンクションを呼び出すプログラムにより生成されたと想定すれば、第２のファンクションの呼出により第２のスタックフレーム２５０が生成されうる。第２のファンクションが第１のファンクションにより呼び出されたとき、リンクレジスタの値が、第２のスタックフレーム２５０内のリンクレジスタ記録領域２５８内に保存される。あるファンクションが呼び出されるとき、そのリンクレジスタには、そのプログラムに関連付けられた戻りアドレス（retuen address;リターンアドレス）が格納される。そのリンクレジスタは、呼出元のファンクションに関連付けられた新たな戻りアドレスに更新されるものであり、その結果、プログラムは、呼出先のファンクションが完了した後に、呼出元のファンクションに戻ることができる。したがって、第１のファンクションが呼び出されたときにそのプログラムに関連付けられた以前の戻りアドレスは、スタック上に格納される必要がある。
【００３２】
次に、呼出元のファンクションは、自身が用いていたデータをスタック２５０上に格納できる。例えば、プロセッサシステム１００のハードウエアレジスタ内の値は、レジスタ記録領域２５２内に格納でき、呼出元のファンクションにより用いられるローカル変数は、スタック２５０内のローカル変数記録領域２５４内に格納できる。呼出元のファンクションは、呼出先のファンクションに受け渡すためのデータを、パラメータ記録領域２５６内に格納できる。その結果、呼出先のファンクションは、そのデータを操作により取り出すことができ、その後（該当すれば、）呼出元のファンクションに戻ることができる。
【００３３】
次に、スタックポインタが、逆方向チェイン領域２６０にポイントするように構成されるとともに、逆方向チェイン領域２６０のポイント先が、前のスタックフレーム２００内の逆方向チェイン領域２１０になるように構成される。この場合、プログラムは、呼出先のファンクションにジャンプでき、そこで、スタックフレーム２５０のパラメータ記録領域２５６内に格納された任意のデータに対する操作など、さらなる処理が実施される。
【００３４】
図３に示すごとく、プロセッサシステム１００上で実行されるプログラムは、複数のプログラムモジュール、例えば、第１のモジュール２７０を含みうる。第１のモジュール２７０は、複数のファンクションである、ファンクションＡ、ファンクションＢ、・・・、ファンクションＮを含みうる。プロセッサシステム１００は、ファンクションバイファンクション（function-by-function）に基づいて（ファンクション単位で）、複数のスタックモジュール（複数のスタックモジュールのそれぞれは、一以上のスタックフレームを有するか、スタックフレームの一部分を有する）を分離して（個別に）配置できる。特に、プロセッサシステム１００は、第１のファンクション、例えばファンクションＡの呼出に応じて、第１のスタックモジュール、例えばスタックモジュール２７２を配置できるのが好ましい。プロセッサシステム１００は、第２のファンクション、例えばファンクションＢの呼出に応じて、第２のスタックモジュール、例えばスタックモジュール２７４を配置できるのが好ましい。上述した例によれば、ファンクションＡが呼出元のファンクションであり、ファンクションＢを呼び出す。図３の構成図に示すごとく、本実施の形態に係る一以上の態様によれば、単一のスタックフレームを含むスタックモジュールは、それらファンクションが、同一のプログラムモジュールの一部分であるか、あるいは別のプログラムモジュール内に含まれるかにかかわらず、ソフトウエアプログラムのそれぞれのファンクションコールに応じて、個別に（分離されて）生成される。
【００３５】
第１のスタックモジュール２７２と第２のスタックモジュール２７４は、ローカルメモリ１０４内において、お互いに非連続であるのが好ましい。従来のスタック管理技術と異なり、ファンクションＢに関連付けられたスタックモジュール２７４のスタックフレームは、ファンクションＡに関連付けられたスタックモジュール２７２のスタックフレームに隣接して付加されるのではない。むしろ、これらスタックフレームをそれぞれ、非連続であるスタックモジュール２７２やスタックモジュール２７４の一部分にできる。
【００３６】
図４は、本実施の形態に係る一以上の別の態様に従って、プロセッサシステム１００が好適に、モジュールバイモジュール（module-by-module）に基づいて（モジュール単位で）、複数のスタックモジュールを分離して（個別に）配置する様子を示す。とりわけ、プロセッサシステム１００は、複数のスタックフレームである、例えば、スタックフレームＡ、スタックフレームＢ、・・・、スタックフレームＮを含みうるスタックモジュール２７８を配置できるのが好ましい。スタックモジュール２７８内のそれぞれのスタックフレームは、プロセッサシステム１００上で実行されているプログラム内の一つのプログラムモジュール２７０内の複数のファンクション（ファンクションＡ、ファンクションＢ、・・・、ファンクションＮ）のそれぞれによるファンクションコールに応じて、生成される。
【００３７】
モジュール２７０内の一以上のファンクションが、プログラム内の別のプログラムモジュール（図示せず）内の関数を呼び出すとき、スタックモジュールが分離されて配置されるのが好ましい（図示せず）。一例として、プログラムモジュールは、プロセッサシステム１００上で実行されている実行可能形式のプログラムを生成するために用いられる、「．ｔｅｘｔ」ファイル（テキストファイル）を表してもよい。一つのモジュール、例えばプログラムモジュール２７０内の複数のファンクションのうちの一つが、そのプログラムモジュール２７０と同一のプログラムモジュール内の別のファンクションを呼び出すときは、分離された（個別の）スタックモジュールを生成しないのが好ましい。
【００３８】
図５は、本実施の形態に係る一以上の別の態様に従って、プロセッサシステム１００が好適に、マルチモジュールバイモジュール（multi-module-by-module）に基づいて（複数モジュールをまとめたモジュールセット単位で）、複数のスタックモジュールを分離して（個別に）配置する様子を示す。とりわけ、プロセッサシステム１００上で実行されているプログラムは、複数の実行可能形式のプログラムモジュールである、プログラムモジュール２８０やプログラムモジュール２８２などを含みうる。ここでは、それらプログラムモジュールは、複数のプログラムモジュールセットにグループ分けされる。図５において、モジュール２８０およびモジュール２８２は、同一セット内にあると想定している。モジュール２８０やモジュール２８２のそれぞれに含まれる任意のファンクションが、同一のモジュールセット内の他のファンクションを呼び出す場合、結果として生じるスタックフレームは、同一のスタックモジュール２８４内の一部分とされるのが好ましい。同一のモジュールセット内の一以上のファンクションが、そのモジュールセット外部のファンクションを呼び出すとき、他のスタックモジュール（図示しない）が、スタックモジュール２８４から分離されて（個別に）配置されるのが好ましい。
【００３９】
ファンクションコールに応じてスタックモジュールが非連続に配置されるところのモード（例えば、ファンクションバイファンクション、モジュールバイモジュール、または、マルチモジュールバイモジュール）に関係なく、それぞれのモジュールごとにスタックを分離するために、スタックは分割されるのが好ましい。スタックは、呼出元のファンクションに対応する領域および呼出先のファンクションに対応する領域に分割される。例えば、それぞれのスタックモジュールを生成することを目的としてスタックフレーム２５０が分割されると想定すれば、パラメータ記録領域２５６、リンクレジスタ記録領域２５８および逆方向チェイン領域２６０には呼出先のファンクションが関連付けられ、一方、レジスタ記録領域２５２およびローカル変数記録領域２５４には、呼出元のファンクションが関連付けられうる。実際には、パラメータ記録領域２５６、リンクレジスタ記録領域２５８および逆方向チェイン領域２６０を、分離されたスタックモジュールの一部分とすることができるようにスタックフレームが分割される。なおその分離されたスタックモジュールは、ローカルメモリ１０４内の非連続である領域に格納可能であり、これにより、いくつかの有利な結果を達成できる。
【００４０】
図６は、実施の形態の一以上の態様において実施されうる様々な処理ステップを示すフローチャートである。図６の一以上の処理ステップは、図３、図４および／または図５について上述したモードやシナリオのいずれかが生じたときに、一以上の実施の形態において用いられるものであり、それにより、スタックモジュールを分離して配置できる。動作３００において、リンクレジスタの内容が、現在のスタックモジュールのリンクレジスタ記録領域２５８内に記録されるのが好ましい。このスタックモジュールは、この例において、少なくとも部分的には、スタックフレーム２５０により形成される。次に、汎用レジスタの内容が、現在のスタックモジュールのレジスタ記録領域２５２内に記録される（動作３０２）。動作３０４では、ローカル変数値の内容が、現在のスタックモジュールのローカル変数記録領域２５４内に記録されるのが好ましい。この点について、スタックフレーム２５０は、呼出元のファンクションに対して有用な情報を含み、その結果、現存の（または現在の）スタックモジュールの一部分にできる。
【００４１】
動作３０６では、新たなスタックモジュールが生成されるのが好ましく、そのスタックモジュールは、現存のスタックモジュールに対して非連続であるのが好ましい。動作３０８では、呼出先のファンクションに受け渡すためのパラメータは、新たなスタックモジュールのパラメータ記録領域２５６内に記録されるのが好ましい。ここで、図２は、パラメータ記録領域２５６を、レジスタ記録領域２５２およびローカル変数記録領域２５４に連続しているものとして示すものであるが、「２６２’」として示すパラメータ記録領域は、それら領域（レジスタ記録領域２５２およびローカル変数記録領域２５４）に対して、非連続に設けられるのが好ましい。動作３１０では、逆方向チェイン領域２６０内の値は、前の逆方向チェイン領域２１０をポイントするよう設定されるのが好ましく、スタックポインタは逆方向チェイン領域２６０をポイントするよう設定されるのが好ましい。
【００４２】
それぞれのスタックモジュールは、ローカルメモリ１０４内において非連続に設けられるのが好ましいため、呼出先のファンクションから呼出元のファンクションに戻るときに、前のプログラムモジュールおよび前のスタックモジュールに対する配置位置情報を取り出すことができるよう、新たなスタックモジュールは、この情報を含むのが好ましい（動作３１２）。一例として、前のプログラムモジュールが配置されたところのアドレス（番地）に関する情報を、逆方向チェイン領域２６０内に記録できる。実際には、逆方向チェイン領域２６０は、例えば、１２８ビット幅を有し、それにより、それらビットのうち限られた数のビットが前の逆方向チェイン領域２１０へのポインタに割り当てられる。その結果、ローカルメモリ１０４内における前のプログラムの場所、および／または前のスタックモジュール内の前のプログラムの場所を特定するために用いられうる相当数のビットが残される。これらビットのうちのあるビットは、そのスタックモジュールを、一以上の他のスタックモジュールに対して非連続に設けられたスタックモジュールであると特定するために割り当てられてもよい。
【００４３】
動作３１４では、呼出先のファンクションがその一部である次のプログラムモジュールが、ローカルメモリ１０４内にロードされているかどうかについての決定がなされうる。次のプログラムモジュールがロードされたとき、そのプログラムは、呼出先のファンクションにジャンプし、実行できる。
【００４４】
実施の形態に係る一以上の態様によれば、前のスタックモジュールは、ローカルメモリ１０４から取り除くのが好ましく、メインメモリ１０６などの分離された（別のまたは不連続の）メモリ内に保存される。これにより、プログラムコードの実行、および／またはデータの保存のためのスペースをローカルメモリ１０４内に確保できる。実際には、スタックモジュールを非連続にできることにより、そのスタックモジュールを一時的に他の場所に保存でき、さらに、この場合、次の使用のために、後のタイミングにおいて、ローカルメモリ１０４内に戻すことができる。
【００４５】
図７は、実施の形態の一以上の態様に係るプロセッサシステム１００により実施されうる処理ステップを示すフローチャートである。特に、図７に示す一以上の処理ステップは、呼出先のファンクションから呼出元のファンクションに戻るために実施されうる。動作３１６および動作３１８では、前のプログラムモジュールがローカルメモリ１０４内にロードされているか否か、および前のスタックモジュールがローカルメモリ１０４内にロードされているか否かについての決定がなされる。この決定は、次のスタックモジュール内の逆方向チェイン領域２６０内の配置場所情報にアクセスすることにより実施され、ローカルメモリ１０４内のその場所（配置場所情報が示す場所）をチェックし、前のプログラムモジュールおよび／または前のスタックモジュールが存在するか否かについての決定をする。上述したように、前のスタックモジュールは、ローカルメモリ１０４内のスペースを確保するため、一時的にメインメモリ１０６に移動されている場合がある。さらに、前のプログラムモジュールもまた同様に、同じ理由で、メインメモリ１０６に一時的に移動されている場合がある。
【００４６】
いずれにしても、前のプログラムモジュールおよび前のスタックモジュールが、ローカルメモリ１０４内に存在するとき、処理フローは、動作３２０に進むのが好ましい。動作３２０では、前のスタックモジュールの逆方向チェイン領域２１０へのスタックポインタが設定されるのが好ましい。次に、リンクレジスタ記録領域２５８の内容が、リンクレジスタ内に設定されるのが好ましい（動作３２２）。その場合、呼出元のファンクションが再開される。ここで、これは、呼出元のファンクションまたはモジュールが一貫した（一貫して同じ）場所にロードされることを表す。他の実施の形態では、リンクレジスタ記録領域２５８に含まれるリンクレジスタの内容は、リンクレジスタに設定される前に更新されうる。そのため、呼出元のファンクションをロードする場所を変更できる。さらなる実施の形態では、リンクレジスタ記録領域２５８内にその値が記録される前に、リンクレジスタの値を更新することができ、それによっても、同一の効果を達成できる。
【００４７】
実施の形態に係る一以上の別の態様によれば、現在のスタックモジュール（すなわち、呼出元のファンクションによる、呼出先のファンクションの呼出に応じて配置されたスタックモジュール）は、その配置が解除され、削除され、その他の場合では、ローカルメモリ１０４から分離されうる。それにより、プログラムの実行、および／またはデータの記録のためのメモリスペースをより多く確保できる。その後、呼出元のファンクションが再開される（動作３２６）。ここで、この場合、現在のプログラムモジュール（すなわち、呼出先のファンクション）は、使用されなくなる（用済みである）。したがって、そのようなプログラムモジュールは用済みであるとしてマーキングされ、ローカルメモリ１０４からそのモジュールを移動させるか否かについての決定がなされる。
【００４８】
最新のスタックモジュールを配置し、一以上の他のスタックモジュールに対して非連続に、そのスタックモジュールを保存することにより、そのスタックモジュールを暫定的に、システムメモリ１０６などの一時的なメモリ領域内に移動することが可能になる。これにより、ローカルメモリ１０４内のスペースを自由に使えるようにできる点で有用である。さらに、これにより、もはや用済みであるスタックモジュールを削除または、他の場合では、そのローカルメモリ１０４から分離でき、その結果、ローカルメモリ１０４内のさらなるスペースを確保できる。従来のスタック管理技術では、これらの望ましい結果を達成することは不可能である。
【００４９】
一例として、実施の形態に係る一以上の態様は、限られたスタックスペース（スタック用のスペース）の管理を実現するために用いられる。スタックモジュールが順次、固定されたスタックスペース内に加えられると仮定すれば、相当数の入れ子構造のファンクションがコールされたとき、そのスタックスペースは非常に狭くなり、結果として生じるすべてのスタックモジュールを対処することができない。ある態様によれば、一以上の現存するスタックモジュールが、一時的に他のメモリスペース（例えば、システムメモリ）に移動されることで、スタックスペースを広げることができる。さらに、スタックモジュールが、もはや用済みである（例えば、呼出先のファンクションがそのタスクを完了し、プログラムの実行により呼出元のファンクションに戻った）とき、そのスタックモジュールを削除することが可能である。
【００５０】
図８は、実施の形態に係るさらなる一以上の態様の実施に適用したマルチプロセッサシステム１００Ａの構成を示す。そのシステム１００Ａは、バス１０８を介して接続された、複数のプロセッサ１０２Ａ〜１０２Ｄと、それらプロセッサに関連付けられたローカルメモリ１０４Ａ〜１０４Ｄと、共有メモリ１０６とを備える。共有メモリ１０６は、本明細書において、メインメモリやシステムメモリとも称されうる。４つのプロセッサ１０２を例として示すが、本発明の主旨および範囲を逸脱しない限り、いかなる数のプロセッサを用いてもよい。プロセッサ１０２のそれぞれの構成は同一であってもよいし、異なってもよい。
【００５１】
ローカルメモリ１０４は、それぞれのプロセッサ１０２と同一チップ（同一の半導体基板）上に設けられるのが好ましい。ローカルメモリ１０４は、従来のハードウェアキャッシュメモリではないことが好ましい。なお、そのローカルメモリ１０４には、ハードウェアキャッシュメモリ機能を実現するための、チップ内蔵またはチップ外に設けられたハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラなどは存在しない。
【００５２】
プロセッサ１０２は、プログラムの実行とデータの操作のために、バス１０８を介してシステムメモリ１０６からそれぞれのローカルメモリ１０４にデータ（プログラムデータを含みうる）をコピーするためのデータアクセスを要求することが好ましい。データアクセスを容易にするメカニズムは、図示しないダイレクトメモリアクセスコントローラ（ＤＭＡＣ）を用いて実装されてもよい。それぞれのプロセッサのＤＭＡＣは、他の実施の形態について上述したＤＭＡＣと実質的に同様の機能を有するのが好ましい。
【００５３】
システムメモリ１０６は、広帯域メモリ接続（図示せず）を通じてプロセッサ１０２に接続されるダイナミックランダムアクセスメモリ（ＤＲＡＭ）であるのが好ましい。そのシステムメモリ１０６は、好適にはダイナミックランダムアクセスメモリだが、スタティックランダムアクセスメモリ（ＳＲＡＭ）、磁気ランダムアクセスメモリ（ＭＲＡＭ）、光学メモリ、またはホログラフィックメモリ等の他の手段を用いて実装してもよい。
【００５４】
それぞれのプロセッサ１０２は、好適にはパイプライン処理を用いて実装される。なお、パイプライン処理においては、パイプライン型の方法で論理命令が処理される。そのパイプラインは命令が処理される任意の数のステージに分割されるが、一般的には、一つ以上の命令をフェッチするステージ、その命令をデコードするステージ、命令間の依存性をチェックするステージ、その命令を出力するステージ、その命令を実行するステージを有する。この点に関連して、そのプロセッサ１０２には、命令バッファ、命令デコード回路、依存性チェック回路、命令出力回路、および実行段階が含まれる。
【００５５】
一以上の実施の形態では、プロセッサ１０２およびローカルメモリ１０４は、共通の半導体基板上に一体的に設けられてもよい。一以上の他の実施の形態では、共有メモリ１０６もまた共通の半導体基板上に一体的に設けられてもよく、あるいは、分離されて設けられてもよい。
【００５６】
一以上の他の実施の形態では、一つ以上のプロセッサ１０２はメインプロセッサとして機能し、また、他のプロセッサ１０２に動作可能に接続されるとともに、バス１０８を介して共有メモリ１０６に接続されうる。そのメインプロセッサは、他のプロセッサ１０２によるデータの処理のスケジューリングと調整を行うことができる。なお、メインプロセッサは、他のプロセッサ１０２と異なり、ハードウエアキャッシュメモリに接続されうる。このハードウエアキャッシュメモリは、共有メモリ１０６と、プロセッサ１０２のローカルメモリ１０４の一つ以上とのうち少なくとも一つから取得されたデータをキャッシュできる。メインプロセッサは、プログラムの実行とデータの操作のために、ダイレクト・メモリ・アクセス（ＤＭＡ）技術などの任意の既知の技術を用いて、バス１０８を介してシステムメモリ１０６からキャッシュメモリ内にデータ（プログラムデータを含みうる）をコピーするためのデータアクセスを要求することが好ましい。
【００５７】
ここで、上述した一つ以上の特徴の実現に適した、好適なマルチプロセッサシステムのコンピュータアーキテクチャについて説明する。一つ以上の実施形態によれば、マルチプロセッサシステムは、ゲームシステムや、ホームターミナルや、ＰＣシステムや、サーバシステムや、ワークステーションなどの豊富なメディアを有するアプリケーションのスタンドアロン型処理および／または分散型処理のためのシングルチップソリューションとして実装できる。一部のアプリケーション、例えば、アプリーケーションがゲームシステムおよびホームターミナルである場合、リアルタイムの演算が必要である。例えば、リアルタイムの分散型ゲームアプリケーションにおいて、ネットワークを経由した画像復元、３Ｄコンピューターグラフィック、音声生成、ネットワーク通信、物理シミュレーション、人工知能計算のうち一つ以上は、ユーザにリアルタイムの感覚を体験させるために十分の速さで実行されなければならない。したがって、マルチプロセッサシステムにおける各プロセッサは、短く、かつ予測可能な時間内でタスクを終了させなければならない。
【００５８】
この目的を達成するために、このコンピュータアーキテクチャによれば、マルチプロセッサのコンピュータシステムのすべてのプロセッサは、共通のコンピュータモジュール（またはセル）から構成される。この共通のコンピュータモジュールは、共通の構成を有し、同一の命令セットアーキテクチャを用いるのが好ましい。マルチプロセッサのコンピュータシステムは、コンピュータプロセッサを用いて、１以上のクライアント、サーバ、ＰＣ、携帯端末、ゲーム機、ＰＤＡ、セットトップボックス、アプリケーション、デジタルテレビおよび他のデバイスから構成されうる。
【００５９】
必要に応じて、複数のコンピュータシステムをそれぞれネットワークのメンバとしてもよい。一貫性のあるモジュール構造により、マルチプロセッサコンピュータシステムによってアプリケーションおよびデータの効率的な高速処理が可能となり、かつネットワークを利用すれば、ネットワークを介してアプリケーションおよびデータの迅速な伝送ができる。またこの構造により、様々なサイズおよび処理能力をもつネットワークメンバの形成、ならびにこれらメンバによって処理されるアプリケーションの準備を簡略化できる。
【００６０】
図９は、基本的な処理モジュールであるプロセッサ要素（ＰＥ）５００を示す。ＰＥ５００は、Ｉ／Ｏインタフェース５０２と、処理ユニット（ＰＵ）５０４と、複数のサブ処理ユニット５０８、すなわち、サブ処理ユニット５０８Ａと、サブ処理ユニット５０８Ｂと、サブ処理ユニット５０８Ｃと、サブ処理ユニット５０８Ｄとを含む。ローカル（すなわち内部）ＰＥバス５１２は、ＰＵ５０４、ＳＰＵ群５０８、およびメモリインタフェース５１１間のデータおよびアプリケーションの伝送を行う。ローカルＰＥバス５１２は、例えば従来構成でもよいし、またはパケットスイッチネットワークとして実装することもできる。パケットスイッチネットワークとして実装するとより多くのハードウェアが必要になるが、利用可能な帯域が広がる。
【００６１】
ＰＥ５００はディジタルロジック回路を実装する各種方法を利用して構成できる。ただし好適には、ＰＥ５００はシリコン基板上の相補的金属酸化膜半導体（ＣＭＯＳ）を用いる一つの集積回路として構成される。基板の他の材料には、ガリウム砒素、ガリウムアルミニウム砒素、および広範な種類の不純物を用いた他のいわゆるＩＩＩ−Ｂ族化合物が含まれる。ＰＥ５００はまた、超伝導材料を用いて高速単一磁束量子（ＲＳＦＱ）ロジック回路等として実装することもできる。
【００６２】
ＰＥ５００は、広帯域メモリ接続５１６を介して共有（メイン）メモリ（ＤＲＡＭ）５１４に密接に関連付けられる。メモリ５１４は好適にはダイナミックランダムアクセスメモリ（ＤＲＡＭ）だが、スタティックランダムアクセスメモリ（ＳＲＡＭ）、磁気ランダムアクセスメモリ（ＭＲＡＭ）、光学メモリ、またはホログラフィックメモリ等の他の手段を用いて実装してもよい。
【００６３】
ＰＵ５０４およびサブ処理ユニット５０８は、それぞれ、ダイレクトメモリアクセス（ＤＭＡ）機能を有するメモリフローコントローラ（ＭＦＣ）と接続されることが望ましい。ＭＦＣは、メモリインタフェース５１１と協働して、ＤＲＡＭ５１４、ＰＥ５００におけるサブ処理ユニット５０８、ＰＵ５０４間のデータの転送を円滑にするものである。ここで、ＤＭＡＣおよび／またはメモリインタフェース５１１は、サブ処理ユニット５０８とＰＵ５０４とから独立して設置されるようにしてもよいし、一体化されるようにしてもよい。実際に、ＤＡＭＣの機能および／またはメモリインタフェース５１１の機能は、サブ処理ユニット５０８およびＰＵ５０４の一つ以上（好ましくはすべて）に一体化できる。ここで、ＤＲＡＭ５１４もまた、ＰＥ５００から独立して設置されるようにしてもよいし、一体化されるようにしてもよい。例えば、ＤＲＡＭ５１４は図に示すようにチップ外部に設けられるようにしてもよく、集積方式でチップ内蔵されるようにしてもよい。
【００６４】
ＰＵ５０４は、例えばスタンドアロン式のデータおよびアプリケーション処理が可能な標準的なプロセッサでもよい。動作時には、ＰＵ５０４はサブ処理ユニット群によるデータおよびアプリケーションの処理のスケジューリングおよび調整を行う。サブ処理ユニット群は、好適には、一命令複数データ（ＳＩＭＤ）プロセッサである。ＰＵ５０４の制御下で、サブ処理ユニット群はデータおよびアプリケーションの処理を並列に、かつ独立して行う。ＰＵ５０４としては、ＲＩＳＣ（ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ−ｓｅｔ  ｃｏｍｐｕｔｉｎｇ）技術を用いるマイクロプロセッサアーキテクチャとなるＰｏｗｅｒＰＣ（登録商標）コアを用いることが好ましい。ＲＩＳＣは単純な命令の組み合わせによって比較的複雑な命令を実行するものである。したがって、プロセッサのタイミングは、比較的簡単かつ速いオペレーションに基づきうる。これは、決められたクロック速度においてより多くの命令を実行することを可能とする。
【００６５】
ここで、ＰＵ５０４は、サブ処理ユニット５０８のうちの一つとして実装されてもよい。この場合、このサブ処理ユニット５０８は、メイン処理ユニットによる処理、すなわち各々のサブ処理ユニット５０８によるデータとアプリケーションの処理のスケジューリングと統合処理を行うものとすればよい。さらに、ＰＥ５００内において、複数のＰＵを実装してもよい。
【００６６】
このモジュール構造では、あるコンピュータシステムで使用されるＰＥ５００の数は、そのシステムが必要とする処理能力に基づく。例えば、サーバは４つのＰＥ群５００、ワークステーションは二つのＰＥ群５００、ＰＤＡは一つのＰＥ５００を使用しうる。あるソフトウェアセルの処理に割り当てられるＰＥ５００のサブ処理ユニットの数は、セル内のプログラムおよびデータの複雑さおよび規模によって異なる。
【００６７】
図１０は、サブ処理ユニット（ＳＰＵ）５０８の好適な構造と機能を示す図である。サブ処理ユニット５０８のアーキテクチャは、汎用プロセッサ（多数のアプリケーションにおいて高い平均性能を実現するように設計されているもの）と特殊用途のプロセッサ（一つのアプリケーションにおいて高い性能を実現するように設計されている）との間に位置するものであることが望ましい。サブ処理ユニット５０８は、ゲームアプリケーション、メディアアプリケーション、ブロードバンドシステムなどにおいて高い性能を実現すると共に、リアルタイムアプリケーションのプログラマに高度な制御自由度を提供するように設計されている。サブ処理ユニット５０８の一部の機能として、グラフィック構造パイプライン、サーフェス分割、高速フーリエ変換、画像処理キーワード、ストリーム処理、ＭＰＥＧエンコード／デコード、暗号化、復号化、デバイスドライバー拡張、モデリング、ゲームフィジクス、コンテンツ制作、音声合成および音声処理などを挙げることができる。
【００６８】
サブ処理ユニット５０８は、すなわちＳＰＵコア５１０Ａとメモリフローコントローラ（ＭＦＣ）５１０Ｂという二つの基本機能ユニットを有する。ＳＰＵコア５１０Ａは、プログラムの実行、データの操作などを担うものであり、一方、ＭＦＣ５１０Ｂは、ＳＰＵコア５１０Ａと、システムのＤＲＡＭ５１４との間のデータ転送に関連する機能を担うものである。
【００６９】
ＳＰＵコア５１０Ａはローカルメモリ５５０と、命令（インストラクション）ユニット（ＩＵ）５５２と、レジスタ５５４と、一つ以上の浮動小数点処理ステージ５５６と、一つ以上の固定小数点処理ステージ５５８とを有する。ローカルメモリ５５０は、ＳＲＡＭのようなシングルポートのＲＡＭを用いて実装されることが望ましい。メモリへのアクセスのレイテンシを軽減するために、従来のほとんどのプロセッサはキャッシュを用いるが、ＳＰＵコア５１０Ａは、キャッシュよりも、比較的小さいローカルメモリ５５０を用いる。実際には、リアルタイムのアプリケーション（およびここで言及したほかのアプリケーション）のプログラマに、予測可能で、かつ一致したメモリアクセスのレイテンシを提供するために、サブ処理ユニット５０８Ａ内においてキャッシュメモリアーキテクチャを用いることは好ましくない。キャッシュメモリのキャッシュヒット／ミス値は、数サイクルから数百サイクルの範囲内で変化する、予測困難な、メモリアクセス回数を生じさせる。このようなメモリアクセスの回数の予測困難性は、例えばリアルタイムアプリケーションのプログラミングに望まれるアクセスタイミングの予測可能性を下げる。データ演算を伴うＤＭＡ転送をオーバーラップすることで、ローカルメモリＳＲＡＭ５５０内のレイテンシを補うことができる。これはリアルタイムアプリケーションのプログラミングに高い制御自由度を提供する。ＤＭＡ転送と関連するレイテンシおよび命令のオーバーヘッドが、キャッシュミスにより生じたレイテンシより長いため、ＳＲＡＭローカルメモリアプローチは、ＤＭＡ転送サイズが十分大きいかつ十分予測可能なとき（例えばデータが要求される前にＤＭＡコマンドを発行することができるとき）において優位性を提供する。
【００７０】
サブ処理ユニット５０８のうちのいずれか一つの上で実行されるプログラムは、ローカルアドレスを用いて、関連するローカルメモリ５５０を参照する。なお、ローカルメモリ５５０の各場所にはシステムの全体のメモリマップ上におけるリアルアドレス（ＲＡ）が付与されている。これは、特権レベルのソフトウェアがローカルメモリ５５０を一つの処理における実効アドレス（ＥＡ）にマッピングすることを可能とし、それによって二つのローカルメモリ５５０間のＤＭＡ転送が容易になる。ＰＵ５０４は、実効アドレスを用いてローカルメモリ５５０に直接アクセスすることもできる。ローカルメモリ５５０は、５５６キロバイトの容量を有し、レジスタ５５４の容量は１２８×１２８ビットであることが望ましい。
【００７１】
ＳＰＵコア５１０Ａは、演算パイプラインを用いて実装されることが望ましく、その中において論理命令がパイプライン方式で処理される。パイプラインは、命令を処理する任意の数のステージに分けることができるが、通常、パイプラインは、一つ以上の命令のフェッチ、命令のデコード、命令間の従属関係のチェック、命令の発行、および命令の実行から構成される。これに関連して、命令ユニット５５２は、命令バッファと、命令デコード回路と、従属関係チェック回路と、命令発行回路とを含む。
【００７２】
命令バッファは、ローカルメモリ５５０と接続されており、命令がフェッチされたときにこれらの命令を一時的に格納することができる複数のレジスタを有することが好ましい。命令バッファは、すべての命令が一つのグループとして（すなわち実質的に大量に）レジスタから出力されるように動作することが好ましい。命令バッファはいかなるサイズであってもよいが、レジスタの数がおよそ２または３以下となるようにするサイズであることが好ましい。
【００７３】
通常、デコード回路は命令を細分化すると共に、対応する命令の機能を果たす論理・マイクロオペレーションを発生させる。例えば、論理・マイクロペレーションは、計算オペレーションと論理オペレーションの指定、ローカルメモリ５５０へのロードオペレーションとストアオペレーションの指定、レジスタソースオペランドおよび／または即値データオペランドの指定などを行うことができる。デコード回路は、ターゲットのレジスタのアドレスや、構造リソースや、機能ユニットおよび／またはバスなどのような、命令が用いるリソースを指定してもよい。デコード回路は、リソースが必要とされる命令パイプラインのステージを示す情報を提供してもよい。命令デコード回路は、同時に大量に、命令バッファのレジスタの数と同じ数の命令をデコードするように動作可能であることが好ましい。
【００７４】
従属関係チェック回路は、チェック対象となる命令のオペランドがパイプラン内の他の命令のオペランドに従属するか否かを判定するためのチェックを行うデジタルロジックを含む。従属するならば、チェック対象となる命令は、これらの他のオペランドが（例えば、これらの他の命令の実行の完了を許可することによって）更新されるまで、実行されるべきではない。従属関係チェック回路は、デコード回路から同時に送信されてきた複数の命令の従属関係を判定することが好ましい。
【００７５】
命令発行回路は、浮動小数点処理ステージ５５６および／または固定小数点処理ステージ５５８に命令を発行することができる。
【００７６】
レジスタ５５４は、１２８―エントリレジスタファイルのような、比較的大きな統合レジスタファイルとして実装されることが好ましい。これは、レジスタ不足を回避するためのレジスタのリネームを必要とせずに、深くパイプライン化された高周波数の実行を可能とする。ハードウェアのリネームは、一般的に処理システムにおける実装面積と電力の高い割合を消費する。したがって、ソフトウェアによるループアンローリングまたは他のインターリーブ技術によってレイテンシがカバーされるような場合において、優位性のあるオペレーションを実現できる。
【００７７】
ＳＰＵコア５１０Ａは、クロックサイクル毎に複数の命令を発行するようなスーパースカラアーキテクチャで実装されることが好ましい。ＳＰＵコア５１０Ａは、命令バッファから同時に送信される命令の数、例えば２と３の間（クロックサイクル毎に二つまたは３つの命令が発行されることを意味する）に対応する程度のスーパースカラとして動作可能であることが好ましい。必要とされる処理能力に応じた多少なりの数の浮動小数点処理ステージ５５６と固定小数点処理ステージ５５８を用いることができる。好適な実施の形態では、浮動小数点処理ステージ５５６と固定小数点処理ステージ５５８の望ましいスピードは、それぞれ、毎秒３２ギガ浮動小数点オペレーション（３２  ＧＦＬＯＰＳ）と毎秒３２ギガオペレーション（３２  ＧＯＰＳ）である。
【００７８】
ＭＦＣ５１０Ｂは、バスインターフェースユニット（ＢＩＵ）５６４と、メモリマネジメントユニット（ＭＭＵ）５６２と、ダイレクトメモリアクセスコントローラ（ＤＭＡＣ）５６０とを有することが望ましい。低電力消費の設計目的を達成するために、ＭＦＣ５１０Ｂは、ＤＭＡＣ５６０を除いて、ＳＰＵコア５１０Ａおよびバス５１２の半分の周波数（半分のスピード）で動作することが好ましい。ＭＦＣ５１０Ｂは、バス５１２からサブ処理ユニット５０８に入るデータと命令を操作することができ、ＤＭＡＣのためのアドレス変換と、データ一貫性のためのスヌープオペレーションとを提供する。ＢＩＵ５６４は、バス５１２とＭＭＵ５６２とＤＭＡＣ５６０との間のインターフェースを提供する。したがって、サブ処理ユニット５０８（ＳＰＵコア５１０ＡとＭＦＣ５１０Ｂを含む）とＤＭＡＣ５６０は、物理的および／または論理的にバス５１２と接続されている。
【００７９】
ＭＭＵ５６２は、メモリアクセスのために実効アドレス（ＤＭＡコマンドから取得される）をリアルアドレスへ変換することができるようにすることが望ましい。例えば、ＭＭＵ５６２は、実効アドレスの比較的高いオーダのビットをリアルアドレスのビットに変換できる。なお、比較的低いオーダアドレスビットについては、変換不可であると共に、物理的におよび論理的にリアルアドレスの形成およびメモリへのアクセスのリクエストに用いられるようにすることが好ましい。具体的には、ＭＭＵ５６２は、６４ビットのメモリマネジメントモジュールをベースにして実装でき、４Ｋバイト、６４Ｋバイト、１メガバイト、１６メガバイトのページサイズと２５６ＭＢのセグメントサイズを有する２６４のバイトの実効アドレス空間を提供することができる。ＭＭＵ５６２は、ＤＭＡコマンドのために、２６５までの仮想メモリと、２４２バイト（４テラバイト）の物理メモリをサポート可能であることが好ましい。ＭＭＵ５６２のハードウェアは、８−エントリの完全連想ＳＬＢ、２５６−エントリの４ウェイセット連想ＴＬＢ、ＴＬＢのための４×４代替マネジメントテーブル（ＲＭＴ）を含むものとすることができる。なお、ＲＭＴはハードウェアＴＬＢミスのハンドリングに用いられるものである。
【００８０】
ＤＭＡＣ５６０は、ＳＰＵコア５１０ＡからのＤＭＡコマンドと、一つ以上の、ＰＵ５０４および／または他のＳＰＵのような他のデバイスからのＤＭＡコマンドとを管理することができることが望ましい。ＤＭＡコマンドは下記の３つのカテゴリがある。すなわち、ローカルメモリ５５０から共有メモリ５１４へデータを移動させるＰｕｔコマンド、共有メモリ５１４からローカルメモリ５５０へデータを移動させるＧｅｔコマンド、ＳＬＩコマンドと同期コマンドとを含むストレージコントロールコマンドである。同期コマンドは、アトミックコマンド、送信コマンド、専用のバリアコマンドを含むものとすることができる。ＤＭＡコマンドに応じて、ＭＭＵ５６２は実効アドレスをリアルアドレスに変換し、このリアルアドレスはＢＩＵ５６４に転送される。
【００８１】
ＳＰＵコア５１０Ａはチャンネルインターフェースとデータインターフェースとを用いて、ＤＭＡＣ５６０内のインターフェースと通信（ＤＭＡコマンド、ステータスなどの送信）することが好ましい。ＳＰＵコア５１０Ａは、チャンネルインターフェースを介してＤＭＡコマンドをＤＭＡＣ５６０内のＤＭＡキューに送信する。いったん、ＤＭＡキューに格納されたＤＭＡコマンドは、ＤＭＡＣ５６０内の発行ロジックと完了ロジックにより操作される。一つのＤＭＡコマンドのためのすべてのバス・トランザクションが完了すると、チャンネルインターフェースを介して、一つの完了信号がＳＰＵコア５１０Ａに返送される。
【００８２】
図１１は、ＰＵ５０４の好ましい構造と機能を示す図である。ＰＵ５０４は、ＰＵコア５０４Ａとメモリフローコントローラ、すなわちＭＦＣ５０４Ｂとの二つの基本機能ユニットを有する。ＰＵコア５０４Ａは、プログラムの実行、データの操作、マルチプロセッサ管理機能などを担うものであり、一方、ＭＦＣ５０４Ｂは、ＰＵコア５０４Ａと、システム１００のメモリスペースとの間のデータ転送に関連する機能を担うものである。
【００８３】
ＰＵコア５０４Ａは、Ｌ１キャッシュ５７０と、命令ユニット５７２と、レジスタ５７４と、少なくとも一つの浮動小数点処理ステージ５７６と、少なくとも一つの固定小数点処理ステージ５７８とを有する。Ｌ１キャッシュ５７０は、共有メモリ１０６、プロセッサ１０２、あるいはＭＦＣ５０４Ｂにおけるほかの部分のメモリスペースから受信したデータのキャッシング機能を提供する。ＰＵコア５０４Ａはスーパーパイプラインとして実装されることが好ましいため、命令ユニット５７２は、フェッチ、デコード、従属関係のチェック、発行などを含む多数のステージを有する命令パイプラインとして実装されることが好ましい。ＰＵコア５０４Ａは、スーパースカラ構造を有することが好ましく、それによって、クロックサイクル毎に命令ユニット５７２から２以上の命令が発行される。高い演算パワーを実現するために、浮動小数点処理ステージ５７６と固定小数点処理ステージ５７８は、パイプライン方式の多数のステージを有する。必要とされる処理能力に応じた多少なりの浮動小数点処理ステージ５７６と固定小数点処理ステージ５７８とを用いることができる。
【００８４】
ＭＦＣ５０４Ｂは、バスインターフェースユニット（ＢＩＵ）５８０と、Ｌ２キャッシュ５８２と、キャッシュ不可ユニット（ＮＣＵ）５８４と、コアインターフェースユニット（ＣＩＵ）５８６と、メモリマネジメントユニット（ＭＭＵ）５８８とを有する。低電力消費の設計目的を達成するために、ＭＦＣ５０４Ｂのほとんどは、ＰＵコア５０４Ａとバス１０８の半分の周波数（半分のスピード）で動作することが好ましい。
【００８５】
ＢＩＵ５８０は、バス１０８と、Ｌ２キャッシュ５８２と、ＮＣＵ５８４のロジックブロックとの間のインターフェースを提供する。ＢＩＵ５８０は、完全一致のメモリオペレーションを実行するために、マスターデバイスとして動作してもよく、バス１０８上のスレーブデバイスとして動作してもよい。マスターデバイスとして動作する場合、ＢＩＵ５８０は、Ｌ２キャッシュ５８２とＮＣＵ５８４の代わりに、バス１０８へのロードリクエストとストアリクエストを発信する。ＢＩＵ５８０は、バス１０８へ送ることができるコマンドの総数を限定するコマンドのフローコントロールメカニズムを実装してもよい。バス１０８上のデータオペレーションは、８ビートになるように設計されることができ、そして、ＢＩＵ５８０は、キャッシュラインが１２８バイト前後であり、一貫性と同期の精度が１２８ＫＢであるように設計されることが好ましい。
【００８６】
Ｌ２キャッシュ５８２（およびそれをサポートするハードウェアロジック）は、５１２ＫＢデータをキャッシュするように設計されることが好ましい。例えば、Ｌ２キャッシュ５８２は、キャッシュ可能なロードとストア、データのプリフェッチ、命令フェッチ、命令のプリフェッチ、キャッシュオペレーション、バリアオペレーションを操作できる。Ｌ２キャッシュ５８２は、８ウエイセットアソシエイティブシステムであることが好ましい。Ｌ２キャッシュ５８２は、６つのキャストアウトキュー（例えば６つのＲＣマシン）に合わせた６つのリロードキューと、８つの（６４バイトの幅の）ストアキューとを有することができる。Ｌ２キャッシュ５８２は、Ｌ１キャッシュ５７０の中の一部または全てのデータのバックアップコピーを提供するように動作してもよい。これは特に、処理ノードがホットスワップ（動作中に変更）されたときの、復元状況において有用である。この構成は、Ｌ１キャッシュ５７０が、ほぼポート無しにさらに速く動作することを可能にするとともに、キャッシュ間の転送を速くすることができる（リクエストがＬ２キャッシュ５８２で止まることができるから）。この構成は、Ｌ２キャッシュ５８２にキャッシュ一貫性のマネジメントを及ばしめるメカニズムも提供する。
【００８７】
ＮＣＵ５８４はインターフェースによってＣＩＵ５８６と、Ｌ２キャッシュ５８２と、ＢＩＵ５８０と接続されており、通常、ＰＵコア５０４Ａとメモリシステム間のキャッシュ不可なオペレーションのキューまたはバッファ回路として機能する。ＮＣＵ５８４は、ＰＵコア５０４Ａとの通信のうちの、Ｌ２キャッシュ５８２によって扱わない全ての通信を操作することが好ましい。ここで、Ｌ２キャッシュ５８２によって扱わないものとしては、キャッシュ不可なロードとストアや、バリアオペレーションや、キャッシュ一貫性オペレーションなどを挙げることができる。低電力消費の設計目的を達成するために、ＮＣＵ５８４は、半分のスピードで動作することが好ましい。
【００８８】
ＣＩＵ５８６は、ＭＦＣ５０４ＢとＰＵコア５０４Ａとの境界線上に配置され、浮動小数点処理ステージ５７６、固定小数点処理ステージ５７８、命令ユニット５７２、ＭＭＵ５８８から、Ｌ２キャッシュ５８２とＮＣＵ５８４へ送られるリクエストのためのルーティング、アービトレイション、フローコントロールポイントとして動作する。ＰＵコア５０４ＡとＭＭＵ５８８はフルスピードで動作し、Ｌ２キャッシュ５８２とＮＣＵ５８４は２：１のスピード比で動作可能であることが好ましい。こうすることによって、ＣＩＵ５８６に周波数境界線が存在することになり、この境界線は、その一つの機能により、二つの周波数領域間にリクエストの転送およびデータのリロードをする際に、周波数の交錯を適切に操作する。
【００８９】
ＣＩＵ５８６は、ロードユニット、ストアユニット、リロードユニットの３つの機能ブロックから構成される。さらに、データをプリフェッチする機能がＣＩＵ５８６により実行される。この機能は、ロードユニットの一部の機能であることが好ましい。ＣＩＵ５８６は、下記の動作を実行可能であることが好ましい：（ｉ）ＰＵコア５０４ＡとＭＭＵ５８８からのロードリクエストとストアリクエストを受信する、（ｉｉ）これらのリクエストをフルスピードクロック周波数から半分のスピードに変換する（２：１クロック周波数変換）、（ｉｉｉ）キャッシュ可能なリクエストとキャッシュ不可なリクエストとをそれぞれＬ２キャッシュ５８２とＮＣＵ５８４へルーティングする、（ｉｖ）Ｌ２キャッシュ５８２とＮＣＵ５８４へのリクエストが均等になるように調整する、（ｖ）リクエストが目標時間内に受信されると共に、オーバーフローが発生しないための、Ｌ２キャッシュ５８２とＮＣＵ５８４へ送信するリクエストのフローコントロールを提供する、（ｖｉ）ロードリターンデータを受信すると共に、これらのデータを浮動小数点処理ステージ５７６、固定小数点処理ステージ５７８、命令ユニット５７２、またはＭＭＵ５８８へルーティングする、（ｖｉｉ）スヌープリクエストを浮動小数点処理ステージ５７６、固定小数点処理ステージ５７８、命令ユニット５７２、またはＭＭＵ５８８へ転送する、（ｖｉｉｉ）ロードリターンデータとスヌープトラフィックを半分のスピードからフルスピードへ変換する。
【００９０】
ＭＭＵ５８８は、第２レベルアドレス変換手段のごとく、ＰＵコア５０４Ａのためにアドレス変換を提供することが好ましい。変換の第１レベルは、ＰＵコア５０４Ａ内において、セパレート命令と、ＭＭＵ５８８より遥かに小さくてかつ速いデータＥＲＡＴ（実効アドレスからリアルアドレスへの変換）アレイとにより提供されることが好ましい。
【００９１】
ＰＵ５０４は６４ビットで実装され、４〜６ＧＨz、１０Ｆ０４（Ｆａｎ−ｏｕｔ−ｏｆ−ｆｏｕｒ）で動作することが好ましい。レジスタは６４ビットの長さを有することが好ましく（特定用途のための一つまたはより多くのレジスタが６４ビットより小さいかもしれないが）、実効アドレスは６４ビットの長さを有することが好ましい。命令ユニット５７２、レジスタ５７４、浮動小数点処理ステージ５７６と固定小数点処理ステージ５７８はＲＩＳＣコンピューティング技術を達成するためにＰｏｗｅｒＰＣ技術により実装されることが好ましい。
【００９２】
このコンピュータシステムのモジュラー構造のさらなる詳細については、米国特許第６５２６４９１号公報に記載されている。このモジュール構造によれば、そのネットワークのメンバにより使用されるＰＥの数は、そのメンバが必要とする処理能力に基づく。例えば、サーバは４つのＰＥ、ワークステーションは二つのＰＥ、ＰＤＡは一つのＰＥを使用しうる。あるソフトウェアセルの処理に割り当てられるＰＥのＡＰＵの数は、セル内のプログラムおよびデータの複雑さおよび規模によって異なる。
【００９３】
本発明に係る少なくとも一つの別の態様によれば、上述した方法および装置は、例えば、図に示す適切なハードウエアを用いて実現できる。そのようなハードウエアは任意の既知の技術を用いて実装できる。なお、その既知の技術として、例えば、標準のデジタル回路、ソフトウエアおよび／またはファームウエアプログラムを実行できる任意の既知のプロセッサ、プログラム可能な読み出し専用メモリ群（ＰＲＯＭ群）、プログラム可能なアレイ論理デバイス群（ＰＡＬ群）などの一以上のプログラム可能なデジタルデバイスまたはシステムが挙げられる。さらに図内の装置は、ある機能ブロックに分割されて示されているが、そのようなブロックは別々の回路で実装でき、および／または、一以上の機能ユニットに結合させることができる。さらに、本発明に係る様々な態様は、適切な記憶メディアや（フロッピー（登録商標）ディスク、メモリチップなどの）持ち運び可能な、および／または配布のためのメディア上に保存可能なソフトウエアおよび／またはファームウエアプログラムにより実装される。
【００９４】
ここでは本発明の具体例について説明したが、これらの実施例は単に本発明の趣旨と応用を示すものである。したがって、請求項により定義された本発明の主旨および範囲から逸脱しないかぎり、上述した実施形態に対して様々な変更を加えることができる。
【図面の簡単な説明】
【００９５】
【図１】実施の形態の一つ以上の態様において適用されうるプロセッサシステムのの構成を示す図である。
【図２】図１のプロセッサシステムにより用いられうる二つのスタックフレームの構成を示す図である。
【図３】実施の形態の一つ以上の態様においてファンクションバイファンクションに基づいて、複数の分離されたスタックモジュールを用いるプロセッサシステムの構成を示す図である。
【図４】実施の形態の一つ以上の態様においてモジュールバイモジュールに基づいて、複数の分離されたスタックモジュールを用いるプロセッサシステムの構成を示す図である。
【図５】実施の形態の一つ以上の態様においてマルチモジュールバイモジュールに基づいて、複数の分離されたスタックモジュールを用いるプロセッサシステムの構成を示す図である。
【図６】実施の形態の一つ以上の態様において図１のプロセッサシステムにより実施されうる処理ステップを示すフローチャートである。
【図７】実施の形態の一つ以上の態様において図１のプロセッサシステムにより実施されうるさらなる処理ステップを示すフローチャートである。
【図８】実施の形態の一つ以上の態様において適用されうる２以上のサブプロセッサを有するマルチプロセッサシステムの構成を示す図である。
【図９】実施の形態の一つ以上の別の態様を実施するために用いられうる好適なプロセッサ要素（ＰＥ）の構成を示す図である。
【図１０】実施の形態の一つ以上の別の態様に従って構成されうる図９のシステムのサブ処理ユニット（ＳＰＵ）の構成の一例を示す図である。
【図１１】実施の形態の一つ以上の別の態様に従って構成されうる図９のシステムの処理ユニット（ＰＵ）の構成の一例を示す図である。
【符号の説明】
【００９６】
１００  プロセッサシステム，装置、    １００Ａ  マルチプロセッサシステム、    １０２，１０２Ａ，１０２Ｂ，１０２Ｃ，１０２Ｄ  プロセッサ、    １０４，１０４Ａ，１０４Ｂ，１０４Ｃ，１０４Ｄ，５５０  ローカルメモリ、    １０６，５１４  共有メモリ，メインメモリ、    ２００  第１のスタックフレーム、    ２０２，２５２  レジスタ記録領域、    ２０４，２５４  ローカル変数記録領域、    ２０６，２５６  パラメータ記録領域、    ２０８，２５８  リンクレジスタ記録領域、    ２１０，２６０  逆方向チェイン領域、    ２５０  第２のスタックフレーム、    ２７０，２８０，２８２  モジュール、    ２７２，２７４，２７６，２７８，２８４  スタックモジュール。
【図１】
2006323824.tif 000003
【図２】
2006323824.tif 000004
【図３】
2006323824.tif 000005
【図４】
2006323824.tif 000006
【図５】
2006323824.tif 000007
【図６】
2006323824.tif 000008
【図７】
2006323824.tif 000009
【図８】
2006323824.tif 000010
【図９】
2006323824.tif 000011
【図１０】
2006323824.tif 000012
【図１１】
2006323824.tif 000013