JP2006323824A - プロセッサシステム内においてスタックを分離して管理する方法および装置 - Google Patents

プロセッサシステム内においてスタックを分離して管理する方法および装置 Download PDF

Info

Publication number
JP2006323824A
JP2006323824A JP2006050358A JP2006050358A JP2006323824A JP 2006323824 A JP2006323824 A JP 2006323824A JP 2006050358 A JP2006050358 A JP 2006050358A JP 2006050358 A JP2006050358 A JP 2006050358A JP 2006323824 A JP2006323824 A JP 2006323824A
Authority
JP
Japan
Prior art keywords
function call
stack
module
program
stack module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2006050358A
Other languages
English (en)
Other versions
JP4219369B2 (ja
Inventor
Tatsuya Iwamoto
達也 岩本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Publication of JP2006323824A publication Critical patent/JP2006323824A/ja
Application granted granted Critical
Publication of JP4219369B2 publication Critical patent/JP4219369B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies

Abstract

【課題】すべてのスタックモジュールにより消費されるアドレス空間全体の成長を制御することは不可能である。
【解決手段】プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックモジュール272を配置し、そのソフトウエアプログラムの第2のファンクションコールに応じて、第2のスタックモジュール274を配置し、その第1のスタックモジュール272に対して、その第2のスタックモジュール274を非連続に配置する方法および装置を提供する。
【選択図】図3

Description

本発明は、マルチプロセッサ内においてデータ転送を実行する方法および装置に関する。
最先端のコンピュータアプリケーションがますます複雑になり、処理システム(プロセッサシステム)に対する需要は絶えず増大しているため、近年、より速いコンピュータによる処理データスループットについて強い要望がある。そうした中、特にグラフィックスアプリケーションは、望ましい視覚結果を実現するために、比較的短い時間内で膨大な数のデータアクセス、データ計算、およびデータ操作を必要とし、処理システムに対する要求は最も高い。このようなアプリケーションは毎秒何千メガビットものデータ処理という非常に高速な処理を必要とする。いくつかの処理システムは一つのプロセッサを用いて高速な処理速度を実現する一方、他の処理システムはマルチプロセッサアーキテクチャを用いて実装される。マルチプロセッサシステムにおいて、複数のサブプロセッサは並列に(少なくとも協調して)動作し、所望の処理結果を達成できる。
プロセッサシステムにおける重要な部分は、スタックの構成およびスタックの管理である。従来のプロセッサシステムでは、スタックフレームは、ファンクションコールが行われたときに、プログラム情報を格納するためにメモリ内に形成される。一般的なスタックフレームには、汎用レジスタ記録領域、ローカル変数(local variable;自動変数)記録領域、パラメータリスト領域、リンクレジスタ記録領域、および逆方向チェイン記録領域が含まれる。汎用レジスタ記録領域は、プロセッサシステムの汎用レジスタ内に含まれる、呼出元のファンクションのためのデータを格納するために用いられる。ローカル変数記録領域は、プロセッサシステムのメモリ内に含まれる、呼出元のファンクションのための変数データを格納するために用いられる。パラメータリスト記録領域は、呼出先のファンクションに受け渡すための、呼出元のファンクションのためのデータを格納するために用いられる。リンクレジスタ記録領域は、呼出元のファンクションが完了したときに、戻りアドレスを再構築できるように、リンクレジスタの値を格納するために用いられる。逆方向チェイン記録領域は、前のスタックフレームの逆方向チェインへのポインタ値を格納するために用いられる。
従来のプロセッサシステムにおけるスタック管理に対するアプローチに関して、スタックが相当数に増えれば、プロセッサシステムのメモリ内の貴重なスペースが占有されてしまうという問題がある。プロセッサシステムにおけるローカルメモリ(の容量)は比較的小さいため、制御されていないスタックの増加は問題になりうる。メモリ管理用のハードウエアを用いる従来のスタック配置技術によれば、まず小さなスタックスペースから始まり、スタックがそのスタックスペースより大きくなったときにページを追加する。このような技術では、確かにスタック内の使用されていないページを解放することができるが、すべてのスタックモジュールにより消費されるアドレス空間全体の成長を制御することは不可能である。
実施の形態に係る一以上の態様は、プロセッサシステム上で実行されているアプリケーションプログラムの一以上のパラメータに従って、一以上のスタックモジュールを配置する(または、スタックを分割する)ステップを提供する。例えば、それらスタックモジュールは、それぞれのファンクションコールに対応して、あるいは、それぞれの「.text」モジュール(テキストモジュール)に対応して、あるいは、そのプログラムの「.text」モジュールの集合に対応して、個別に形成されうる。スタックモジュールを複数有することにより、もはや必要でないスタックモジュールを削除する、および/または(より大きな容量のシステムメモリなどの)他のメモリにスタックモジュールを移動させることができる。その結果、プロセッサシステムのローカルメモリ内のメモリスペースを確保できる。
スタックフレームは、呼出元のファンクションに関連付けられたデータと、呼出先のファンクションに関連付けられたデータとを分けるラインに沿って分割されうる。例えば、汎用レジスタ記録領域およびローカル変数記録領域については、呼出元のファンクションに関連付けられ、一方、パラメータリスト領域、リンクレジスタ記録領域、および逆方向チェイン記録領域については、呼出元のファンクションに関連付けられる。その結果、ローカル変数記録領域とパラメータリスト領域との間でスタックフレームの分割を行うことにより、二つの個別のスタックモジュールを構築してもよい。呼出元のファンクションに関連付けられた、プログラムモジュールおよびスタックモジュールの配置場所に関する情報は、呼出先のファンクションに対応する新規のスタックモジュール内に記録されうる。
本発明の一以上の態様によれば、プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックモジュールを配置するステップと、前記ソフトウエアプログラムの第2のファンクションコールに応じて、第2のスタックモジュールを配置するステップと、を提供でき、前記第2のスタックモジュールは、前記第1のスタックモジュールに対して、非連続に配置される。前記第1のファンクションコールは、前記第2のファンクションコールを呼び出すことが好ましい。
本発明の一以上の別の態様は、他のファンクションコールにより呼び出された、ソフトウエアプログラムのそれぞれのファンクションコールに応じて、単一のスタックフレームを含むスタックモジュールを非連続に配置するステップを含んでもよい。
本発明の一以上の別の態様は、前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第1のファンクションコールが、第1のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールの一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置するステップを含んでもよい。好適には、前記第1のファンクションコールおよび前記第2のファンクションコールが、同一のプログラムモジュールの一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置せずに、前記第1のスタックモジュールが用いられる。
本発明の一以上の別の態様は、前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第1のファンクションコールが、第1のプログラムモジュールセット内のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールセット内のプログラムモジュールの一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置するステップを含んでもよい。前記第1のファンクションコールおよび前記第2のファンクションコールが、同一のプログラムモジュールセット内の一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置せずに、前記第1のスタックモジュールを用いるステップを含んでもよい。
本発明の一以上の態様によれば、プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックフレームを配置するステップと、前記ソフトウエアプログラムの前記第1のファンクションコールによる、第2のファンクションコールの呼出に応じて、第2のスタックフレームを配置するステップと、前記第2のスタックフレームを、前記第1のファンクションコールのための領域および前記第2のファンクションコールのための領域に分割するステップと、を提供できる。
前記第2のスタックフレームは、(i)前記第1のファンクションコールの間に生成された一以上のレジスタ値を記録することが可能な汎用レジスタ領域と、(ii)前記第1のファンクションコールの間に生成された一以上の変数値を記録することが可能なローカル変数領域と、(iii)前記第1のファンクションコールの間に、前記第2のファンクションコールによる使用を目的として生成された一以上のパラメータ値を格納することが可能なパラメータリスト領域と、(iv)前記第1のファンクションコールが呼び出されたときに実行されている前記プログラムの一部分に戻る際に、第1のファンクションコールが使用するためのリンクレジスタ値を記録することが可能なリンクレジスタ記録領域と、(v)前記第1のスタックフレームの逆方向チェイン領域へのポインタを記録することが可能な逆方向チェイン領域と、のうち少なくとも一つを含んでもよい。
前記第2のスタックフレームを分割するステップは、前記第1のファンクションコールのための、前記汎用レジスタ領域と前記ローカル変数領域とのうち少なくとも一つと、前記第2のファンクションコールのための、前記パラメータリスト領域と前記リンクレジスタ記録領域と前記逆方向チェイン領域とのうち少なくとも一つと、に分割することが好ましい。
本発明の一以上の態様によれば、プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックモジュールを配置するステップと、前記ソフトウエアプログラムの前記第1のファンクションコールによる、第2のファンクションコールの呼出に応じて、第2のスタックモジュールを配置するステップと、前記第1のスタックモジュールに対して非連続に、前記第2のスタックモジュールを保存するステップと、前記第2のファンクションコールから前記第1のファンクションコールに戻ったことを受けて、前記第2のスタックモジュールを削除するステップと、を提供できる。
本発明の一以上の態様によれば、プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックモジュールを配置するステップと、前記第1のファンクションコールによる第2のファンクションコールの呼出に応じて、第2のスタックモジュールを配置するステップと、前記プロセッサシステムのメモリ内における前記第1のスタックモジュールのアドレスを示すリターン情報を、前記第2のスタックモジュール内に加えるステップと、前記第1のスタックモジュールに対して非連続に、前記第2のスタックモジュールを保存するステップと、を提供できる。
本発明の一以上の別の態様は、前記第2のファンクションコールによる、前記第2のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第1のスタックモジュールの配置場所を確認すること、および前記第1のスタックモジュールをロードすることのうち少なくとも一つを実施するステップと、前記第2のファンクションコールから前記第1のファンクションコールに戻るステップと、を含んでもよい。本発明の一以上の別の態様は、前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第1のファンクションコールが、第1のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールの一部分であるとき、前記第2のスタックモジュールを配置するステップを含んでもよい。
本発明の一以上の別の態様は、前記第2のスタックモジュールを削除するステップを含んでもよく、前記第1のスタックモジュールを含むメモリとは別のまたは不連続のメモリ領域内に、前記第2のスタックモジュールを保存してもよい。
本発明の一以上の態様は、プロセッサシステム内のプロセッサによる動作の実行を可能にするプログラムである。そのプログラムにより実行される動作は、プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックモジュールを配置するステップと、前記ソフトウエアプログラムの前記第1のファンクションコールによる第2のファンクションコールの呼出に応じて、第2のスタックモジュールを配置するステップと、前記第2のスタックモジュールを、前記第1のスタックモジュールに対して非連続に保存するステップと、を含んでもよい。
一以上の別の態様に係るそのソフトウエアプログラムによれば、(i)他のファンクションコールにより呼び出された、ソフトウエアプログラムのそれぞれのファンクションコールに応じて、単一のスタックフレームを含むスタックモジュールを非連続に配置するステップと、(ii)前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第1のファンクションコールが、第1のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールの一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置するステップと、(iii)前記プログラムモジュールが、複数のプログラムモジュールセットにグループ分けされ、前記第1のファンクションコールが、第1のプログラムモジュールセット内のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールセット内のプログラムモジュールの一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置するステップと、を提供できる。
本発明の一以上の態様は装置である。その装置は、メインメモリに動作可能に接続される少なくとも一つのプロセッサと、前記少なくとも一つのプロセッサに接続されるローカルメモリと、を含み、前記少なくとも一つのプロセッサは、(i)ソフトウエアプログラムの第1のファンクションコールに応じて、前記ローカルメモリ内に第1のスタックモジュールを配置する機能と、(ii)前記ソフトウエアプログラムの前記第1のファンクションコールによる第2のファンクションコールの呼出に応じて、第2のスタックモジュールを配置する機能と、(iii)前記第2のスタックモジュールを、前記ローカルメモリ内における前記第1のスタックモジュールに対して非連続に保存する機能と、を有する。
本発明の上記以外の態様、特徴、および利点は、添付図面とともに以下の詳細な説明により当業者には明確に理解される。
現在のところ好適である図面を例示として添付するが、本発明は図面と同一の構成および手段に限定するものではない。
図において同一の符号は同一の要素を示すものとする。図1は、実施の形態に係る一以上の態様の実施に適したプロセッサシステム100を示す。簡潔および明確にするために、図1の構成図を参照し装置100を用いて説明するが、同一の主旨を有する様々な態様の方法にその説明を簡単に適用できるのは言うまでもない。
装置100は、プロセッサ102と、ローカルメモリ104と、メインメモリ106(例えば、DRAM)と、バス108とを備えるのが好ましい。プロセッサ102は、システムメモリ106からのデータの要求を可能にし、そのデータを操作することで所望の結果への達成を可能にする任意の既知の技術を用いて実装されてもよい。例えば、プロセッサ102はソフトウエアおよび/またはファームウエアを実行可能な、標準マイクロプロセッサや分散型のマイクロプロセッサなどの任意の既知のマイクロプロセッサを用いることで実装されてもよい。例として、プロセッサ102は、ピクセルデータなどのデータを要求し操作できるグラフィックプロセッサであってもよい。なお、そのピクセルデータには、グレースケール情報や、カラー情報や、テクスチャデータや、ポリゴン情報や、ビデオフレーム情報などが含まれる。
ローカルメモリ104は、プロセッサ102がローカルメモリ104内のプログラムコードを実行できるよう、さらに、実行しないのであれば、ローカルメモリ104内のデータを操作できるよう、システムメモリ106とは対照的にそのプロセッサ102に近い場所に設けられる。ローカルメモリ104は、従来のハードウェアキャッシュメモリではないことが好ましく、ローカルメモリ104には、ハードウェアキャッシュメモリ機能を実現するための、チップ内蔵またはチップ外に設けられたハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラなどが無いことが好ましい。チップ上の実装面積はしばしば限られているので、ローカルメモリ104のサイズは、システムメモリ106のサイズより遥かに小さい。プロセッサ102は、プログラムの実行とデータの操作のために、バス108を介してシステムメモリ106からそのローカルメモリ104にデータ(プログラムデータを含みうる)をコピーするためのデータアクセスリクエストを提供することが好ましい。データアクセスを容易にするメカニズムは、メモリインタフェース110内のダイレクトメモリアクセスコントローラ(DMAC)を用いて実装されるのが好ましい。
図2は、プロセッサシステム100によりスタックが用いられる様子を示す。スタックは、他のプログラムコードを処理するために、プログラム内の後の処理または操作に必要な情報を格納するために用いられるデータ領域またはバッファである。例えば、プロセッサシステム100上で実行されているプログラムコードが、そのプログラムにおける他の部分に分岐することを示すファンクションコールに到達する場合、そのプログラムにより処理および/または使用されている所定の情報は、その情報が後で再び呼び出されることができるよう、そのファンクションコールが完了した後に、スタック上にプッシュされる。そのスタックは、一般的なプッシュダウンリスト(push-down list)であり、すなわち、新たな情報がスタック上にプッシュされたとき、古い情報はスタック上の下方に押し下げられる。そのプログラムは、LIFO(last-in-first-out)に基づいて、要素群をそのスタックから取り出す。
スタックは、一以上のスタックフレームを含みうるが、ここでは、2つのスタックフレーム200、250のみを図示することとする。第1のスタックフレーム200は、そのプログラムのある部分、例えば、第1のファンクションコールの間に生成される一以上のレジスタ値を記録することが可能な汎用レジスタ領域202を含みうる。次のファンクションの呼び出しが完了したとき、これらレジスタ値をスタックから取り出し、その結果、そのプログラムのもとの部分(例えば第1のファンクションコール)を完了できる。第1のスタックフレーム200はまた、第1のファンクションコールの間に生成された一以上の変数値を格納することが可能なローカル変数領域204を含みうる。次のファンクションの呼び出しが完了したとき、これら変数値をスタックから取り出すことができ、そのプログラムのもとの部分を完了できる。
第1のスタックフレーム200は、第1のファンクションコールの間に生成された、第2のファンクションコールなどの次のファンクションコールが使用するための一以上のパラメータ値を記録できるパラメータリスト領域206を含みうる。そのパラメータは、第2のファンクションコール内での使用のためにスタックからデータを取り出すことによって、第2のファンクションコールに受け渡される。第1のスタックフレーム200はまた、リンクレジスタ記録領域208を含みうる。そのリンクレジスタ記録領域208には、第1のファンクションコールが呼び出されたときに実行されたプログラムのある部分に戻る際に、第1のファンクションコールが使用するためのリンクレジスタ値を記録できる。第1のスタックフレーム200はまた、前のスタックフレームの逆方向チェイン領域へのポインタを記録することが可能な逆方向チェイン領域210を含みうる。
第2のスタックフレーム250は、第1のスタックフレーム200と同様の領域の集合を有してもよい。ここで、第2のスタックフレーム250の逆方向チェイン領域260には、第1のスタックフレーム200の逆方向チェイン領域210へのポインタが含まれる。
ここで、上述では、スタックは、実際のデータがスタック上に繰り返しプッシュされるコールバイバリュー(call-by-value;値によるファンクションコール)技術により用いられることを想定している。ここで、スタックはまた、コールバイリファレンス(call-by-reference;参照によるファンクションコール)技術を用いて実装されてもよい。その技術では、データそのもののかわりに、データへのポインタがスタック上にプッシュされる。したがって、スタック上にデータを入れることや、スタックを使用することについての本明細書における任意の議論は、コールバイバリュー技術およびコールバイリファレンス技術の両方を意図している。
一般的に、あるファンクションが次のファンクションを呼び出すとき(呼び出されたファンクションを「呼出先のファンクション」と呼ぶ)、呼出元のファンクションはスタックフレームを生成できる。例えば、第1のスタックフレーム200が、プロセッサシステム100上で実行されている、第1のファンクションを呼び出すプログラムにより生成されたと想定すれば、第2のファンクションの呼出により第2のスタックフレーム250が生成されうる。第2のファンクションが第1のファンクションにより呼び出されたとき、リンクレジスタの値が、第2のスタックフレーム250内のリンクレジスタ記録領域258内に保存される。あるファンクションが呼び出されるとき、そのリンクレジスタには、そのプログラムに関連付けられた戻りアドレス(retuen address;リターンアドレス)が格納される。そのリンクレジスタは、呼出元のファンクションに関連付けられた新たな戻りアドレスに更新されるものであり、その結果、プログラムは、呼出先のファンクションが完了した後に、呼出元のファンクションに戻ることができる。したがって、第1のファンクションが呼び出されたときにそのプログラムに関連付けられた以前の戻りアドレスは、スタック上に格納される必要がある。
次に、呼出元のファンクションは、自身が用いていたデータをスタック250上に格納できる。例えば、プロセッサシステム100のハードウエアレジスタ内の値は、レジスタ記録領域252内に格納でき、呼出元のファンクションにより用いられるローカル変数は、スタック250内のローカル変数記録領域254内に格納できる。呼出元のファンクションは、呼出先のファンクションに受け渡すためのデータを、パラメータ記録領域256内に格納できる。その結果、呼出先のファンクションは、そのデータを操作により取り出すことができ、その後(該当すれば、)呼出元のファンクションに戻ることができる。
次に、スタックポインタが、逆方向チェイン領域260にポイントするように構成されるとともに、逆方向チェイン領域260のポイント先が、前のスタックフレーム200内の逆方向チェイン領域210になるように構成される。この場合、プログラムは、呼出先のファンクションにジャンプでき、そこで、スタックフレーム250のパラメータ記録領域256内に格納された任意のデータに対する操作など、さらなる処理が実施される。
図3に示すごとく、プロセッサシステム100上で実行されるプログラムは、複数のプログラムモジュール、例えば、第1のモジュール270を含みうる。第1のモジュール270は、複数のファンクションである、ファンクションA、ファンクションB、・・・、ファンクションNを含みうる。プロセッサシステム100は、ファンクションバイファンクション(function-by-function)に基づいて(ファンクション単位で)、複数のスタックモジュール(複数のスタックモジュールのそれぞれは、一以上のスタックフレームを有するか、スタックフレームの一部分を有する)を分離して(個別に)配置できる。特に、プロセッサシステム100は、第1のファンクション、例えばファンクションAの呼出に応じて、第1のスタックモジュール、例えばスタックモジュール272を配置できるのが好ましい。プロセッサシステム100は、第2のファンクション、例えばファンクションBの呼出に応じて、第2のスタックモジュール、例えばスタックモジュール274を配置できるのが好ましい。上述した例によれば、ファンクションAが呼出元のファンクションであり、ファンクションBを呼び出す。図3の構成図に示すごとく、本実施の形態に係る一以上の態様によれば、単一のスタックフレームを含むスタックモジュールは、それらファンクションが、同一のプログラムモジュールの一部分であるか、あるいは別のプログラムモジュール内に含まれるかにかかわらず、ソフトウエアプログラムのそれぞれのファンクションコールに応じて、個別に(分離されて)生成される。
第1のスタックモジュール272と第2のスタックモジュール274は、ローカルメモリ104内において、お互いに非連続であるのが好ましい。従来のスタック管理技術と異なり、ファンクションBに関連付けられたスタックモジュール274のスタックフレームは、ファンクションAに関連付けられたスタックモジュール272のスタックフレームに隣接して付加されるのではない。むしろ、これらスタックフレームをそれぞれ、非連続であるスタックモジュール272やスタックモジュール274の一部分にできる。
図4は、本実施の形態に係る一以上の別の態様に従って、プロセッサシステム100が好適に、モジュールバイモジュール(module-by-module)に基づいて(モジュール単位で)、複数のスタックモジュールを分離して(個別に)配置する様子を示す。とりわけ、プロセッサシステム100は、複数のスタックフレームである、例えば、スタックフレームA、スタックフレームB、・・・、スタックフレームNを含みうるスタックモジュール278を配置できるのが好ましい。スタックモジュール278内のそれぞれのスタックフレームは、プロセッサシステム100上で実行されているプログラム内の一つのプログラムモジュール270内の複数のファンクション(ファンクションA、ファンクションB、・・・、ファンクションN)のそれぞれによるファンクションコールに応じて、生成される。
モジュール270内の一以上のファンクションが、プログラム内の別のプログラムモジュール(図示せず)内の関数を呼び出すとき、スタックモジュールが分離されて配置されるのが好ましい(図示せず)。一例として、プログラムモジュールは、プロセッサシステム100上で実行されている実行可能形式のプログラムを生成するために用いられる、「.text」ファイル(テキストファイル)を表してもよい。一つのモジュール、例えばプログラムモジュール270内の複数のファンクションのうちの一つが、そのプログラムモジュール270と同一のプログラムモジュール内の別のファンクションを呼び出すときは、分離された(個別の)スタックモジュールを生成しないのが好ましい。
図5は、本実施の形態に係る一以上の別の態様に従って、プロセッサシステム100が好適に、マルチモジュールバイモジュール(multi-module-by-module)に基づいて(複数モジュールをまとめたモジュールセット単位で)、複数のスタックモジュールを分離して(個別に)配置する様子を示す。とりわけ、プロセッサシステム100上で実行されているプログラムは、複数の実行可能形式のプログラムモジュールである、プログラムモジュール280やプログラムモジュール282などを含みうる。ここでは、それらプログラムモジュールは、複数のプログラムモジュールセットにグループ分けされる。図5において、モジュール280およびモジュール282は、同一セット内にあると想定している。モジュール280やモジュール282のそれぞれに含まれる任意のファンクションが、同一のモジュールセット内の他のファンクションを呼び出す場合、結果として生じるスタックフレームは、同一のスタックモジュール284内の一部分とされるのが好ましい。同一のモジュールセット内の一以上のファンクションが、そのモジュールセット外部のファンクションを呼び出すとき、他のスタックモジュール(図示しない)が、スタックモジュール284から分離されて(個別に)配置されるのが好ましい。
ファンクションコールに応じてスタックモジュールが非連続に配置されるところのモード(例えば、ファンクションバイファンクション、モジュールバイモジュール、または、マルチモジュールバイモジュール)に関係なく、それぞれのモジュールごとにスタックを分離するために、スタックは分割されるのが好ましい。スタックは、呼出元のファンクションに対応する領域および呼出先のファンクションに対応する領域に分割される。例えば、それぞれのスタックモジュールを生成することを目的としてスタックフレーム250が分割されると想定すれば、パラメータ記録領域256、リンクレジスタ記録領域258および逆方向チェイン領域260には呼出先のファンクションが関連付けられ、一方、レジスタ記録領域252およびローカル変数記録領域254には、呼出元のファンクションが関連付けられうる。実際には、パラメータ記録領域256、リンクレジスタ記録領域258および逆方向チェイン領域260を、分離されたスタックモジュールの一部分とすることができるようにスタックフレームが分割される。なおその分離されたスタックモジュールは、ローカルメモリ104内の非連続である領域に格納可能であり、これにより、いくつかの有利な結果を達成できる。
図6は、実施の形態の一以上の態様において実施されうる様々な処理ステップを示すフローチャートである。図6の一以上の処理ステップは、図3、図4および/または図5について上述したモードやシナリオのいずれかが生じたときに、一以上の実施の形態において用いられるものであり、それにより、スタックモジュールを分離して配置できる。動作300において、リンクレジスタの内容が、現在のスタックモジュールのリンクレジスタ記録領域258内に記録されるのが好ましい。このスタックモジュールは、この例において、少なくとも部分的には、スタックフレーム250により形成される。次に、汎用レジスタの内容が、現在のスタックモジュールのレジスタ記録領域252内に記録される(動作302)。動作304では、ローカル変数値の内容が、現在のスタックモジュールのローカル変数記録領域254内に記録されるのが好ましい。この点について、スタックフレーム250は、呼出元のファンクションに対して有用な情報を含み、その結果、現存の(または現在の)スタックモジュールの一部分にできる。
動作306では、新たなスタックモジュールが生成されるのが好ましく、そのスタックモジュールは、現存のスタックモジュールに対して非連続であるのが好ましい。動作308では、呼出先のファンクションに受け渡すためのパラメータは、新たなスタックモジュールのパラメータ記録領域256内に記録されるのが好ましい。ここで、図2は、パラメータ記録領域256を、レジスタ記録領域252およびローカル変数記録領域254に連続しているものとして示すものであるが、「262’」として示すパラメータ記録領域は、それら領域(レジスタ記録領域252およびローカル変数記録領域254)に対して、非連続に設けられるのが好ましい。動作310では、逆方向チェイン領域260内の値は、前の逆方向チェイン領域210をポイントするよう設定されるのが好ましく、スタックポインタは逆方向チェイン領域260をポイントするよう設定されるのが好ましい。
それぞれのスタックモジュールは、ローカルメモリ104内において非連続に設けられるのが好ましいため、呼出先のファンクションから呼出元のファンクションに戻るときに、前のプログラムモジュールおよび前のスタックモジュールに対する配置位置情報を取り出すことができるよう、新たなスタックモジュールは、この情報を含むのが好ましい(動作312)。一例として、前のプログラムモジュールが配置されたところのアドレス(番地)に関する情報を、逆方向チェイン領域260内に記録できる。実際には、逆方向チェイン領域260は、例えば、128ビット幅を有し、それにより、それらビットのうち限られた数のビットが前の逆方向チェイン領域210へのポインタに割り当てられる。その結果、ローカルメモリ104内における前のプログラムの場所、および/または前のスタックモジュール内の前のプログラムの場所を特定するために用いられうる相当数のビットが残される。これらビットのうちのあるビットは、そのスタックモジュールを、一以上の他のスタックモジュールに対して非連続に設けられたスタックモジュールであると特定するために割り当てられてもよい。
動作314では、呼出先のファンクションがその一部である次のプログラムモジュールが、ローカルメモリ104内にロードされているかどうかについての決定がなされうる。次のプログラムモジュールがロードされたとき、そのプログラムは、呼出先のファンクションにジャンプし、実行できる。
実施の形態に係る一以上の態様によれば、前のスタックモジュールは、ローカルメモリ104から取り除くのが好ましく、メインメモリ106などの分離された(別のまたは不連続の)メモリ内に保存される。これにより、プログラムコードの実行、および/またはデータの保存のためのスペースをローカルメモリ104内に確保できる。実際には、スタックモジュールを非連続にできることにより、そのスタックモジュールを一時的に他の場所に保存でき、さらに、この場合、次の使用のために、後のタイミングにおいて、ローカルメモリ104内に戻すことができる。
図7は、実施の形態の一以上の態様に係るプロセッサシステム100により実施されうる処理ステップを示すフローチャートである。特に、図7に示す一以上の処理ステップは、呼出先のファンクションから呼出元のファンクションに戻るために実施されうる。動作316および動作318では、前のプログラムモジュールがローカルメモリ104内にロードされているか否か、および前のスタックモジュールがローカルメモリ104内にロードされているか否かについての決定がなされる。この決定は、次のスタックモジュール内の逆方向チェイン領域260内の配置場所情報にアクセスすることにより実施され、ローカルメモリ104内のその場所(配置場所情報が示す場所)をチェックし、前のプログラムモジュールおよび/または前のスタックモジュールが存在するか否かについての決定をする。上述したように、前のスタックモジュールは、ローカルメモリ104内のスペースを確保するため、一時的にメインメモリ106に移動されている場合がある。さらに、前のプログラムモジュールもまた同様に、同じ理由で、メインメモリ106に一時的に移動されている場合がある。
いずれにしても、前のプログラムモジュールおよび前のスタックモジュールが、ローカルメモリ104内に存在するとき、処理フローは、動作320に進むのが好ましい。動作320では、前のスタックモジュールの逆方向チェイン領域210へのスタックポインタが設定されるのが好ましい。次に、リンクレジスタ記録領域258の内容が、リンクレジスタ内に設定されるのが好ましい(動作322)。その場合、呼出元のファンクションが再開される。ここで、これは、呼出元のファンクションまたはモジュールが一貫した(一貫して同じ)場所にロードされることを表す。他の実施の形態では、リンクレジスタ記録領域258に含まれるリンクレジスタの内容は、リンクレジスタに設定される前に更新されうる。そのため、呼出元のファンクションをロードする場所を変更できる。さらなる実施の形態では、リンクレジスタ記録領域258内にその値が記録される前に、リンクレジスタの値を更新することができ、それによっても、同一の効果を達成できる。
実施の形態に係る一以上の別の態様によれば、現在のスタックモジュール(すなわち、呼出元のファンクションによる、呼出先のファンクションの呼出に応じて配置されたスタックモジュール)は、その配置が解除され、削除され、その他の場合では、ローカルメモリ104から分離されうる。それにより、プログラムの実行、および/またはデータの記録のためのメモリスペースをより多く確保できる。その後、呼出元のファンクションが再開される(動作326)。ここで、この場合、現在のプログラムモジュール(すなわち、呼出先のファンクション)は、使用されなくなる(用済みである)。したがって、そのようなプログラムモジュールは用済みであるとしてマーキングされ、ローカルメモリ104からそのモジュールを移動させるか否かについての決定がなされる。
最新のスタックモジュールを配置し、一以上の他のスタックモジュールに対して非連続に、そのスタックモジュールを保存することにより、そのスタックモジュールを暫定的に、システムメモリ106などの一時的なメモリ領域内に移動することが可能になる。これにより、ローカルメモリ104内のスペースを自由に使えるようにできる点で有用である。さらに、これにより、もはや用済みであるスタックモジュールを削除または、他の場合では、そのローカルメモリ104から分離でき、その結果、ローカルメモリ104内のさらなるスペースを確保できる。従来のスタック管理技術では、これらの望ましい結果を達成することは不可能である。
一例として、実施の形態に係る一以上の態様は、限られたスタックスペース(スタック用のスペース)の管理を実現するために用いられる。スタックモジュールが順次、固定されたスタックスペース内に加えられると仮定すれば、相当数の入れ子構造のファンクションがコールされたとき、そのスタックスペースは非常に狭くなり、結果として生じるすべてのスタックモジュールを対処することができない。ある態様によれば、一以上の現存するスタックモジュールが、一時的に他のメモリスペース(例えば、システムメモリ)に移動されることで、スタックスペースを広げることができる。さらに、スタックモジュールが、もはや用済みである(例えば、呼出先のファンクションがそのタスクを完了し、プログラムの実行により呼出元のファンクションに戻った)とき、そのスタックモジュールを削除することが可能である。
図8は、実施の形態に係るさらなる一以上の態様の実施に適用したマルチプロセッサシステム100Aの構成を示す。そのシステム100Aは、バス108を介して接続された、複数のプロセッサ102A〜102Dと、それらプロセッサに関連付けられたローカルメモリ104A〜104Dと、共有メモリ106とを備える。共有メモリ106は、本明細書において、メインメモリやシステムメモリとも称されうる。4つのプロセッサ102を例として示すが、本発明の主旨および範囲を逸脱しない限り、いかなる数のプロセッサを用いてもよい。プロセッサ102のそれぞれの構成は同一であってもよいし、異なってもよい。
ローカルメモリ104は、それぞれのプロセッサ102と同一チップ(同一の半導体基板)上に設けられるのが好ましい。ローカルメモリ104は、従来のハードウェアキャッシュメモリではないことが好ましい。なお、そのローカルメモリ104には、ハードウェアキャッシュメモリ機能を実現するための、チップ内蔵またはチップ外に設けられたハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラなどは存在しない。
プロセッサ102は、プログラムの実行とデータの操作のために、バス108を介してシステムメモリ106からそれぞれのローカルメモリ104にデータ(プログラムデータを含みうる)をコピーするためのデータアクセスを要求することが好ましい。データアクセスを容易にするメカニズムは、図示しないダイレクトメモリアクセスコントローラ(DMAC)を用いて実装されてもよい。それぞれのプロセッサのDMACは、他の実施の形態について上述したDMACと実質的に同様の機能を有するのが好ましい。
システムメモリ106は、広帯域メモリ接続(図示せず)を通じてプロセッサ102に接続されるダイナミックランダムアクセスメモリ(DRAM)であるのが好ましい。そのシステムメモリ106は、好適にはダイナミックランダムアクセスメモリだが、スタティックランダムアクセスメモリ(SRAM)、磁気ランダムアクセスメモリ(MRAM)、光学メモリ、またはホログラフィックメモリ等の他の手段を用いて実装してもよい。
それぞれのプロセッサ102は、好適にはパイプライン処理を用いて実装される。なお、パイプライン処理においては、パイプライン型の方法で論理命令が処理される。そのパイプラインは命令が処理される任意の数のステージに分割されるが、一般的には、一つ以上の命令をフェッチするステージ、その命令をデコードするステージ、命令間の依存性をチェックするステージ、その命令を出力するステージ、その命令を実行するステージを有する。この点に関連して、そのプロセッサ102には、命令バッファ、命令デコード回路、依存性チェック回路、命令出力回路、および実行段階が含まれる。
一以上の実施の形態では、プロセッサ102およびローカルメモリ104は、共通の半導体基板上に一体的に設けられてもよい。一以上の他の実施の形態では、共有メモリ106もまた共通の半導体基板上に一体的に設けられてもよく、あるいは、分離されて設けられてもよい。
一以上の他の実施の形態では、一つ以上のプロセッサ102はメインプロセッサとして機能し、また、他のプロセッサ102に動作可能に接続されるとともに、バス108を介して共有メモリ106に接続されうる。そのメインプロセッサは、他のプロセッサ102によるデータの処理のスケジューリングと調整を行うことができる。なお、メインプロセッサは、他のプロセッサ102と異なり、ハードウエアキャッシュメモリに接続されうる。このハードウエアキャッシュメモリは、共有メモリ106と、プロセッサ102のローカルメモリ104の一つ以上とのうち少なくとも一つから取得されたデータをキャッシュできる。メインプロセッサは、プログラムの実行とデータの操作のために、ダイレクト・メモリ・アクセス(DMA)技術などの任意の既知の技術を用いて、バス108を介してシステムメモリ106からキャッシュメモリ内にデータ(プログラムデータを含みうる)をコピーするためのデータアクセスを要求することが好ましい。
ここで、上述した一つ以上の特徴の実現に適した、好適なマルチプロセッサシステムのコンピュータアーキテクチャについて説明する。一つ以上の実施形態によれば、マルチプロセッサシステムは、ゲームシステムや、ホームターミナルや、PCシステムや、サーバシステムや、ワークステーションなどの豊富なメディアを有するアプリケーションのスタンドアロン型処理および/または分散型処理のためのシングルチップソリューションとして実装できる。一部のアプリケーション、例えば、アプリーケーションがゲームシステムおよびホームターミナルである場合、リアルタイムの演算が必要である。例えば、リアルタイムの分散型ゲームアプリケーションにおいて、ネットワークを経由した画像復元、3Dコンピューターグラフィック、音声生成、ネットワーク通信、物理シミュレーション、人工知能計算のうち一つ以上は、ユーザにリアルタイムの感覚を体験させるために十分の速さで実行されなければならない。したがって、マルチプロセッサシステムにおける各プロセッサは、短く、かつ予測可能な時間内でタスクを終了させなければならない。
この目的を達成するために、このコンピュータアーキテクチャによれば、マルチプロセッサのコンピュータシステムのすべてのプロセッサは、共通のコンピュータモジュール(またはセル)から構成される。この共通のコンピュータモジュールは、共通の構成を有し、同一の命令セットアーキテクチャを用いるのが好ましい。マルチプロセッサのコンピュータシステムは、コンピュータプロセッサを用いて、1以上のクライアント、サーバ、PC、携帯端末、ゲーム機、PDA、セットトップボックス、アプリケーション、デジタルテレビおよび他のデバイスから構成されうる。
必要に応じて、複数のコンピュータシステムをそれぞれネットワークのメンバとしてもよい。一貫性のあるモジュール構造により、マルチプロセッサコンピュータシステムによってアプリケーションおよびデータの効率的な高速処理が可能となり、かつネットワークを利用すれば、ネットワークを介してアプリケーションおよびデータの迅速な伝送ができる。またこの構造により、様々なサイズおよび処理能力をもつネットワークメンバの形成、ならびにこれらメンバによって処理されるアプリケーションの準備を簡略化できる。
図9は、基本的な処理モジュールであるプロセッサ要素(PE)500を示す。PE500は、I/Oインタフェース502と、処理ユニット(PU)504と、複数のサブ処理ユニット508、すなわち、サブ処理ユニット508Aと、サブ処理ユニット508Bと、サブ処理ユニット508Cと、サブ処理ユニット508Dとを含む。ローカル(すなわち内部)PEバス512は、PU504、SPU群508、およびメモリインタフェース511間のデータおよびアプリケーションの伝送を行う。ローカルPEバス512は、例えば従来構成でもよいし、またはパケットスイッチネットワークとして実装することもできる。パケットスイッチネットワークとして実装するとより多くのハードウェアが必要になるが、利用可能な帯域が広がる。
PE500はディジタルロジック回路を実装する各種方法を利用して構成できる。ただし好適には、PE500はシリコン基板上の相補的金属酸化膜半導体(CMOS)を用いる一つの集積回路として構成される。基板の他の材料には、ガリウム砒素、ガリウムアルミニウム砒素、および広範な種類の不純物を用いた他のいわゆるIII−B族化合物が含まれる。PE500はまた、超伝導材料を用いて高速単一磁束量子(RSFQ)ロジック回路等として実装することもできる。
PE500は、広帯域メモリ接続516を介して共有(メイン)メモリ(DRAM)514に密接に関連付けられる。メモリ514は好適にはダイナミックランダムアクセスメモリ(DRAM)だが、スタティックランダムアクセスメモリ(SRAM)、磁気ランダムアクセスメモリ(MRAM)、光学メモリ、またはホログラフィックメモリ等の他の手段を用いて実装してもよい。
PU504およびサブ処理ユニット508は、それぞれ、ダイレクトメモリアクセス(DMA)機能を有するメモリフローコントローラ(MFC)と接続されることが望ましい。MFCは、メモリインタフェース511と協働して、DRAM514、PE500におけるサブ処理ユニット508、PU504間のデータの転送を円滑にするものである。ここで、DMACおよび/またはメモリインタフェース511は、サブ処理ユニット508とPU504とから独立して設置されるようにしてもよいし、一体化されるようにしてもよい。実際に、DAMCの機能および/またはメモリインタフェース511の機能は、サブ処理ユニット508およびPU504の一つ以上(好ましくはすべて)に一体化できる。ここで、DRAM514もまた、PE500から独立して設置されるようにしてもよいし、一体化されるようにしてもよい。例えば、DRAM514は図に示すようにチップ外部に設けられるようにしてもよく、集積方式でチップ内蔵されるようにしてもよい。
PU504は、例えばスタンドアロン式のデータおよびアプリケーション処理が可能な標準的なプロセッサでもよい。動作時には、PU504はサブ処理ユニット群によるデータおよびアプリケーションの処理のスケジューリングおよび調整を行う。サブ処理ユニット群は、好適には、一命令複数データ(SIMD)プロセッサである。PU504の制御下で、サブ処理ユニット群はデータおよびアプリケーションの処理を並列に、かつ独立して行う。PU504としては、RISC(reduced instruction−set computing)技術を用いるマイクロプロセッサアーキテクチャとなるPowerPC(登録商標)コアを用いることが好ましい。RISCは単純な命令の組み合わせによって比較的複雑な命令を実行するものである。したがって、プロセッサのタイミングは、比較的簡単かつ速いオペレーションに基づきうる。これは、決められたクロック速度においてより多くの命令を実行することを可能とする。
ここで、PU504は、サブ処理ユニット508のうちの一つとして実装されてもよい。この場合、このサブ処理ユニット508は、メイン処理ユニットによる処理、すなわち各々のサブ処理ユニット508によるデータとアプリケーションの処理のスケジューリングと統合処理を行うものとすればよい。さらに、PE500内において、複数のPUを実装してもよい。
このモジュール構造では、あるコンピュータシステムで使用されるPE500の数は、そのシステムが必要とする処理能力に基づく。例えば、サーバは4つのPE群500、ワークステーションは二つのPE群500、PDAは一つのPE500を使用しうる。あるソフトウェアセルの処理に割り当てられるPE500のサブ処理ユニットの数は、セル内のプログラムおよびデータの複雑さおよび規模によって異なる。
図10は、サブ処理ユニット(SPU)508の好適な構造と機能を示す図である。サブ処理ユニット508のアーキテクチャは、汎用プロセッサ(多数のアプリケーションにおいて高い平均性能を実現するように設計されているもの)と特殊用途のプロセッサ(一つのアプリケーションにおいて高い性能を実現するように設計されている)との間に位置するものであることが望ましい。サブ処理ユニット508は、ゲームアプリケーション、メディアアプリケーション、ブロードバンドシステムなどにおいて高い性能を実現すると共に、リアルタイムアプリケーションのプログラマに高度な制御自由度を提供するように設計されている。サブ処理ユニット508の一部の機能として、グラフィック構造パイプライン、サーフェス分割、高速フーリエ変換、画像処理キーワード、ストリーム処理、MPEGエンコード/デコード、暗号化、復号化、デバイスドライバー拡張、モデリング、ゲームフィジクス、コンテンツ制作、音声合成および音声処理などを挙げることができる。
サブ処理ユニット508は、すなわちSPUコア510Aとメモリフローコントローラ(MFC)510Bという二つの基本機能ユニットを有する。SPUコア510Aは、プログラムの実行、データの操作などを担うものであり、一方、MFC510Bは、SPUコア510Aと、システムのDRAM514との間のデータ転送に関連する機能を担うものである。
SPUコア510Aはローカルメモリ550と、命令(インストラクション)ユニット(IU)552と、レジスタ554と、一つ以上の浮動小数点処理ステージ556と、一つ以上の固定小数点処理ステージ558とを有する。ローカルメモリ550は、SRAMのようなシングルポートのRAMを用いて実装されることが望ましい。メモリへのアクセスのレイテンシを軽減するために、従来のほとんどのプロセッサはキャッシュを用いるが、SPUコア510Aは、キャッシュよりも、比較的小さいローカルメモリ550を用いる。実際には、リアルタイムのアプリケーション(およびここで言及したほかのアプリケーション)のプログラマに、予測可能で、かつ一致したメモリアクセスのレイテンシを提供するために、サブ処理ユニット508A内においてキャッシュメモリアーキテクチャを用いることは好ましくない。キャッシュメモリのキャッシュヒット/ミス値は、数サイクルから数百サイクルの範囲内で変化する、予測困難な、メモリアクセス回数を生じさせる。このようなメモリアクセスの回数の予測困難性は、例えばリアルタイムアプリケーションのプログラミングに望まれるアクセスタイミングの予測可能性を下げる。データ演算を伴うDMA転送をオーバーラップすることで、ローカルメモリSRAM550内のレイテンシを補うことができる。これはリアルタイムアプリケーションのプログラミングに高い制御自由度を提供する。DMA転送と関連するレイテンシおよび命令のオーバーヘッドが、キャッシュミスにより生じたレイテンシより長いため、SRAMローカルメモリアプローチは、DMA転送サイズが十分大きいかつ十分予測可能なとき(例えばデータが要求される前にDMAコマンドを発行することができるとき)において優位性を提供する。
サブ処理ユニット508のうちのいずれか一つの上で実行されるプログラムは、ローカルアドレスを用いて、関連するローカルメモリ550を参照する。なお、ローカルメモリ550の各場所にはシステムの全体のメモリマップ上におけるリアルアドレス(RA)が付与されている。これは、特権レベルのソフトウェアがローカルメモリ550を一つの処理における実効アドレス(EA)にマッピングすることを可能とし、それによって二つのローカルメモリ550間のDMA転送が容易になる。PU504は、実効アドレスを用いてローカルメモリ550に直接アクセスすることもできる。ローカルメモリ550は、556キロバイトの容量を有し、レジスタ554の容量は128×128ビットであることが望ましい。
SPUコア510Aは、演算パイプラインを用いて実装されることが望ましく、その中において論理命令がパイプライン方式で処理される。パイプラインは、命令を処理する任意の数のステージに分けることができるが、通常、パイプラインは、一つ以上の命令のフェッチ、命令のデコード、命令間の従属関係のチェック、命令の発行、および命令の実行から構成される。これに関連して、命令ユニット552は、命令バッファと、命令デコード回路と、従属関係チェック回路と、命令発行回路とを含む。
命令バッファは、ローカルメモリ550と接続されており、命令がフェッチされたときにこれらの命令を一時的に格納することができる複数のレジスタを有することが好ましい。命令バッファは、すべての命令が一つのグループとして(すなわち実質的に大量に)レジスタから出力されるように動作することが好ましい。命令バッファはいかなるサイズであってもよいが、レジスタの数がおよそ2または3以下となるようにするサイズであることが好ましい。
通常、デコード回路は命令を細分化すると共に、対応する命令の機能を果たす論理・マイクロオペレーションを発生させる。例えば、論理・マイクロペレーションは、計算オペレーションと論理オペレーションの指定、ローカルメモリ550へのロードオペレーションとストアオペレーションの指定、レジスタソースオペランドおよび/または即値データオペランドの指定などを行うことができる。デコード回路は、ターゲットのレジスタのアドレスや、構造リソースや、機能ユニットおよび/またはバスなどのような、命令が用いるリソースを指定してもよい。デコード回路は、リソースが必要とされる命令パイプラインのステージを示す情報を提供してもよい。命令デコード回路は、同時に大量に、命令バッファのレジスタの数と同じ数の命令をデコードするように動作可能であることが好ましい。
従属関係チェック回路は、チェック対象となる命令のオペランドがパイプラン内の他の命令のオペランドに従属するか否かを判定するためのチェックを行うデジタルロジックを含む。従属するならば、チェック対象となる命令は、これらの他のオペランドが(例えば、これらの他の命令の実行の完了を許可することによって)更新されるまで、実行されるべきではない。従属関係チェック回路は、デコード回路から同時に送信されてきた複数の命令の従属関係を判定することが好ましい。
命令発行回路は、浮動小数点処理ステージ556および/または固定小数点処理ステージ558に命令を発行することができる。
レジスタ554は、128―エントリレジスタファイルのような、比較的大きな統合レジスタファイルとして実装されることが好ましい。これは、レジスタ不足を回避するためのレジスタのリネームを必要とせずに、深くパイプライン化された高周波数の実行を可能とする。ハードウェアのリネームは、一般的に処理システムにおける実装面積と電力の高い割合を消費する。したがって、ソフトウェアによるループアンローリングまたは他のインターリーブ技術によってレイテンシがカバーされるような場合において、優位性のあるオペレーションを実現できる。
SPUコア510Aは、クロックサイクル毎に複数の命令を発行するようなスーパースカラアーキテクチャで実装されることが好ましい。SPUコア510Aは、命令バッファから同時に送信される命令の数、例えば2と3の間(クロックサイクル毎に二つまたは3つの命令が発行されることを意味する)に対応する程度のスーパースカラとして動作可能であることが好ましい。必要とされる処理能力に応じた多少なりの数の浮動小数点処理ステージ556と固定小数点処理ステージ558を用いることができる。好適な実施の形態では、浮動小数点処理ステージ556と固定小数点処理ステージ558の望ましいスピードは、それぞれ、毎秒32ギガ浮動小数点オペレーション(32 GFLOPS)と毎秒32ギガオペレーション(32 GOPS)である。
MFC510Bは、バスインターフェースユニット(BIU)564と、メモリマネジメントユニット(MMU)562と、ダイレクトメモリアクセスコントローラ(DMAC)560とを有することが望ましい。低電力消費の設計目的を達成するために、MFC510Bは、DMAC560を除いて、SPUコア510Aおよびバス512の半分の周波数(半分のスピード)で動作することが好ましい。MFC510Bは、バス512からサブ処理ユニット508に入るデータと命令を操作することができ、DMACのためのアドレス変換と、データ一貫性のためのスヌープオペレーションとを提供する。BIU564は、バス512とMMU562とDMAC560との間のインターフェースを提供する。したがって、サブ処理ユニット508(SPUコア510AとMFC510Bを含む)とDMAC560は、物理的および/または論理的にバス512と接続されている。
MMU562は、メモリアクセスのために実効アドレス(DMAコマンドから取得される)をリアルアドレスへ変換することができるようにすることが望ましい。例えば、MMU562は、実効アドレスの比較的高いオーダのビットをリアルアドレスのビットに変換できる。なお、比較的低いオーダアドレスビットについては、変換不可であると共に、物理的におよび論理的にリアルアドレスの形成およびメモリへのアクセスのリクエストに用いられるようにすることが好ましい。具体的には、MMU562は、64ビットのメモリマネジメントモジュールをベースにして実装でき、4Kバイト、64Kバイト、1メガバイト、16メガバイトのページサイズと256MBのセグメントサイズを有する264のバイトの実効アドレス空間を提供することができる。MMU562は、DMAコマンドのために、265までの仮想メモリと、242バイト(4テラバイト)の物理メモリをサポート可能であることが好ましい。MMU562のハードウェアは、8−エントリの完全連想SLB、256−エントリの4ウェイセット連想TLB、TLBのための4×4代替マネジメントテーブル(RMT)を含むものとすることができる。なお、RMTはハードウェアTLBミスのハンドリングに用いられるものである。
DMAC560は、SPUコア510AからのDMAコマンドと、一つ以上の、PU504および/または他のSPUのような他のデバイスからのDMAコマンドとを管理することができることが望ましい。DMAコマンドは下記の3つのカテゴリがある。すなわち、ローカルメモリ550から共有メモリ514へデータを移動させるPutコマンド、共有メモリ514からローカルメモリ550へデータを移動させるGetコマンド、SLIコマンドと同期コマンドとを含むストレージコントロールコマンドである。同期コマンドは、アトミックコマンド、送信コマンド、専用のバリアコマンドを含むものとすることができる。DMAコマンドに応じて、MMU562は実効アドレスをリアルアドレスに変換し、このリアルアドレスはBIU564に転送される。
SPUコア510Aはチャンネルインターフェースとデータインターフェースとを用いて、DMAC560内のインターフェースと通信(DMAコマンド、ステータスなどの送信)することが好ましい。SPUコア510Aは、チャンネルインターフェースを介してDMAコマンドをDMAC560内のDMAキューに送信する。いったん、DMAキューに格納されたDMAコマンドは、DMAC560内の発行ロジックと完了ロジックにより操作される。一つのDMAコマンドのためのすべてのバス・トランザクションが完了すると、チャンネルインターフェースを介して、一つの完了信号がSPUコア510Aに返送される。
図11は、PU504の好ましい構造と機能を示す図である。PU504は、PUコア504Aとメモリフローコントローラ、すなわちMFC504Bとの二つの基本機能ユニットを有する。PUコア504Aは、プログラムの実行、データの操作、マルチプロセッサ管理機能などを担うものであり、一方、MFC504Bは、PUコア504Aと、システム100のメモリスペースとの間のデータ転送に関連する機能を担うものである。
PUコア504Aは、L1キャッシュ570と、命令ユニット572と、レジスタ574と、少なくとも一つの浮動小数点処理ステージ576と、少なくとも一つの固定小数点処理ステージ578とを有する。L1キャッシュ570は、共有メモリ106、プロセッサ102、あるいはMFC504Bにおけるほかの部分のメモリスペースから受信したデータのキャッシング機能を提供する。PUコア504Aはスーパーパイプラインとして実装されることが好ましいため、命令ユニット572は、フェッチ、デコード、従属関係のチェック、発行などを含む多数のステージを有する命令パイプラインとして実装されることが好ましい。PUコア504Aは、スーパースカラ構造を有することが好ましく、それによって、クロックサイクル毎に命令ユニット572から2以上の命令が発行される。高い演算パワーを実現するために、浮動小数点処理ステージ576と固定小数点処理ステージ578は、パイプライン方式の多数のステージを有する。必要とされる処理能力に応じた多少なりの浮動小数点処理ステージ576と固定小数点処理ステージ578とを用いることができる。
MFC504Bは、バスインターフェースユニット(BIU)580と、L2キャッシュ582と、キャッシュ不可ユニット(NCU)584と、コアインターフェースユニット(CIU)586と、メモリマネジメントユニット(MMU)588とを有する。低電力消費の設計目的を達成するために、MFC504Bのほとんどは、PUコア504Aとバス108の半分の周波数(半分のスピード)で動作することが好ましい。
BIU580は、バス108と、L2キャッシュ582と、NCU584のロジックブロックとの間のインターフェースを提供する。BIU580は、完全一致のメモリオペレーションを実行するために、マスターデバイスとして動作してもよく、バス108上のスレーブデバイスとして動作してもよい。マスターデバイスとして動作する場合、BIU580は、L2キャッシュ582とNCU584の代わりに、バス108へのロードリクエストとストアリクエストを発信する。BIU580は、バス108へ送ることができるコマンドの総数を限定するコマンドのフローコントロールメカニズムを実装してもよい。バス108上のデータオペレーションは、8ビートになるように設計されることができ、そして、BIU580は、キャッシュラインが128バイト前後であり、一貫性と同期の精度が128KBであるように設計されることが好ましい。
L2キャッシュ582(およびそれをサポートするハードウェアロジック)は、512KBデータをキャッシュするように設計されることが好ましい。例えば、L2キャッシュ582は、キャッシュ可能なロードとストア、データのプリフェッチ、命令フェッチ、命令のプリフェッチ、キャッシュオペレーション、バリアオペレーションを操作できる。L2キャッシュ582は、8ウエイセットアソシエイティブシステムであることが好ましい。L2キャッシュ582は、6つのキャストアウトキュー(例えば6つのRCマシン)に合わせた6つのリロードキューと、8つの(64バイトの幅の)ストアキューとを有することができる。L2キャッシュ582は、L1キャッシュ570の中の一部または全てのデータのバックアップコピーを提供するように動作してもよい。これは特に、処理ノードがホットスワップ(動作中に変更)されたときの、復元状況において有用である。この構成は、L1キャッシュ570が、ほぼポート無しにさらに速く動作することを可能にするとともに、キャッシュ間の転送を速くすることができる(リクエストがL2キャッシュ582で止まることができるから)。この構成は、L2キャッシュ582にキャッシュ一貫性のマネジメントを及ばしめるメカニズムも提供する。
NCU584はインターフェースによってCIU586と、L2キャッシュ582と、BIU580と接続されており、通常、PUコア504Aとメモリシステム間のキャッシュ不可なオペレーションのキューまたはバッファ回路として機能する。NCU584は、PUコア504Aとの通信のうちの、L2キャッシュ582によって扱わない全ての通信を操作することが好ましい。ここで、L2キャッシュ582によって扱わないものとしては、キャッシュ不可なロードとストアや、バリアオペレーションや、キャッシュ一貫性オペレーションなどを挙げることができる。低電力消費の設計目的を達成するために、NCU584は、半分のスピードで動作することが好ましい。
CIU586は、MFC504BとPUコア504Aとの境界線上に配置され、浮動小数点処理ステージ576、固定小数点処理ステージ578、命令ユニット572、MMU588から、L2キャッシュ582とNCU584へ送られるリクエストのためのルーティング、アービトレイション、フローコントロールポイントとして動作する。PUコア504AとMMU588はフルスピードで動作し、L2キャッシュ582とNCU584は2:1のスピード比で動作可能であることが好ましい。こうすることによって、CIU586に周波数境界線が存在することになり、この境界線は、その一つの機能により、二つの周波数領域間にリクエストの転送およびデータのリロードをする際に、周波数の交錯を適切に操作する。
CIU586は、ロードユニット、ストアユニット、リロードユニットの3つの機能ブロックから構成される。さらに、データをプリフェッチする機能がCIU586により実行される。この機能は、ロードユニットの一部の機能であることが好ましい。CIU586は、下記の動作を実行可能であることが好ましい:(i)PUコア504AとMMU588からのロードリクエストとストアリクエストを受信する、(ii)これらのリクエストをフルスピードクロック周波数から半分のスピードに変換する(2:1クロック周波数変換)、(iii)キャッシュ可能なリクエストとキャッシュ不可なリクエストとをそれぞれL2キャッシュ582とNCU584へルーティングする、(iv)L2キャッシュ582とNCU584へのリクエストが均等になるように調整する、(v)リクエストが目標時間内に受信されると共に、オーバーフローが発生しないための、L2キャッシュ582とNCU584へ送信するリクエストのフローコントロールを提供する、(vi)ロードリターンデータを受信すると共に、これらのデータを浮動小数点処理ステージ576、固定小数点処理ステージ578、命令ユニット572、またはMMU588へルーティングする、(vii)スヌープリクエストを浮動小数点処理ステージ576、固定小数点処理ステージ578、命令ユニット572、またはMMU588へ転送する、(viii)ロードリターンデータとスヌープトラフィックを半分のスピードからフルスピードへ変換する。
MMU588は、第2レベルアドレス変換手段のごとく、PUコア504Aのためにアドレス変換を提供することが好ましい。変換の第1レベルは、PUコア504A内において、セパレート命令と、MMU588より遥かに小さくてかつ速いデータERAT(実効アドレスからリアルアドレスへの変換)アレイとにより提供されることが好ましい。
PU504は64ビットで実装され、4〜6GHz、10F04(Fan−out−of−four)で動作することが好ましい。レジスタは64ビットの長さを有することが好ましく(特定用途のための一つまたはより多くのレジスタが64ビットより小さいかもしれないが)、実効アドレスは64ビットの長さを有することが好ましい。命令ユニット572、レジスタ574、浮動小数点処理ステージ576と固定小数点処理ステージ578はRISCコンピューティング技術を達成するためにPowerPC技術により実装されることが好ましい。
このコンピュータシステムのモジュラー構造のさらなる詳細については、米国特許第6526491号公報に記載されている。このモジュール構造によれば、そのネットワークのメンバにより使用されるPEの数は、そのメンバが必要とする処理能力に基づく。例えば、サーバは4つのPE、ワークステーションは二つのPE、PDAは一つのPEを使用しうる。あるソフトウェアセルの処理に割り当てられるPEのAPUの数は、セル内のプログラムおよびデータの複雑さおよび規模によって異なる。
本発明に係る少なくとも一つの別の態様によれば、上述した方法および装置は、例えば、図に示す適切なハードウエアを用いて実現できる。そのようなハードウエアは任意の既知の技術を用いて実装できる。なお、その既知の技術として、例えば、標準のデジタル回路、ソフトウエアおよび/またはファームウエアプログラムを実行できる任意の既知のプロセッサ、プログラム可能な読み出し専用メモリ群(PROM群)、プログラム可能なアレイ論理デバイス群(PAL群)などの一以上のプログラム可能なデジタルデバイスまたはシステムが挙げられる。さらに図内の装置は、ある機能ブロックに分割されて示されているが、そのようなブロックは別々の回路で実装でき、および/または、一以上の機能ユニットに結合させることができる。さらに、本発明に係る様々な態様は、適切な記憶メディアや(フロッピー(登録商標)ディスク、メモリチップなどの)持ち運び可能な、および/または配布のためのメディア上に保存可能なソフトウエアおよび/またはファームウエアプログラムにより実装される。
ここでは本発明の具体例について説明したが、これらの実施例は単に本発明の趣旨と応用を示すものである。したがって、請求項により定義された本発明の主旨および範囲から逸脱しないかぎり、上述した実施形態に対して様々な変更を加えることができる。
実施の形態の一つ以上の態様において適用されうるプロセッサシステムのの構成を示す図である。 図1のプロセッサシステムにより用いられうる二つのスタックフレームの構成を示す図である。 実施の形態の一つ以上の態様においてファンクションバイファンクションに基づいて、複数の分離されたスタックモジュールを用いるプロセッサシステムの構成を示す図である。 実施の形態の一つ以上の態様においてモジュールバイモジュールに基づいて、複数の分離されたスタックモジュールを用いるプロセッサシステムの構成を示す図である。 実施の形態の一つ以上の態様においてマルチモジュールバイモジュールに基づいて、複数の分離されたスタックモジュールを用いるプロセッサシステムの構成を示す図である。 実施の形態の一つ以上の態様において図1のプロセッサシステムにより実施されうる処理ステップを示すフローチャートである。 実施の形態の一つ以上の態様において図1のプロセッサシステムにより実施されうるさらなる処理ステップを示すフローチャートである。 実施の形態の一つ以上の態様において適用されうる2以上のサブプロセッサを有するマルチプロセッサシステムの構成を示す図である。 実施の形態の一つ以上の別の態様を実施するために用いられうる好適なプロセッサ要素(PE)の構成を示す図である。 実施の形態の一つ以上の別の態様に従って構成されうる図9のシステムのサブ処理ユニット(SPU)の構成の一例を示す図である。 実施の形態の一つ以上の別の態様に従って構成されうる図9のシステムの処理ユニット(PU)の構成の一例を示す図である。
符号の説明
100 プロセッサシステム,装置、 100A マルチプロセッサシステム、 102,102A,102B,102C,102D プロセッサ、 104,104A,104B,104C,104D,550 ローカルメモリ、 106,514 共有メモリ,メインメモリ、 200 第1のスタックフレーム、 202,252 レジスタ記録領域、 204,254 ローカル変数記録領域、 206,256 パラメータ記録領域、 208,258 リンクレジスタ記録領域、 210,260 逆方向チェイン領域、 250 第2のスタックフレーム、 270,280,282 モジュール、 272,274,276,278,284 スタックモジュール。

Claims (39)

  1. プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックモジュールを配置するステップと、
    前記ソフトウエアプログラムの第2のファンクションコールに応じて、第2のスタックモジュールを配置するステップと、
    を含み、
    前記第2のスタックモジュールは、前記第1のスタックモジュールに対して、非連続に配置されることを特徴とする方法。
  2. 前記第1のスタックモジュールおよび前記第2のスタックモジュールは、一以上のスタックフレーム、またはスタックフレームの一部分を含むことを特徴とする請求項1に記載の方法。
  3. 前記第1のファンクションコールは、前記第2のファンクションコールを呼び出すことを特徴とする請求項1または2に記載の方法。
  4. 他のファンクションコールにより呼び出された、ソフトウエアプログラムのそれぞれのファンクションコールに応じて、単一のスタックフレームを含むスタックモジュールを非連続に配置するステップをさらに含むことを特徴とする請求項3に記載の方法。
  5. 前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第1のファンクションコールが、第1のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールの一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置するステップをさらに含むことを特徴とする請求項1から4のいずれかに記載の方法。
  6. 前記第1のファンクションコールおよび前記第2のファンクションコールが、同一のプログラムモジュールの一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置せずに、前記第1のスタックモジュールを用いるステップをさらに含むことを特徴とする請求項5に記載の方法。
  7. 前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第1のファンクションコールが、第1のプログラムモジュールセット内のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールセット内のプログラムモジュールの一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置するステップをさらに含むことを特徴とする請求項1から4のいずれかに記載の方法。
  8. 前記第1のファンクションコールおよび前記第2のファンクションコールが、同一のプログラムモジュールセット内の一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置せずに、前記第1のスタックモジュールを用いるステップをさらに含むことを特徴とする請求項7に記載の方法。
  9. プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックフレームを配置するステップと、
    前記ソフトウエアプログラムの前記第1のファンクションコールによる、第2のファンクションコールの呼出に応じて、第2のスタックフレームを配置するステップと、
    前記第2のスタックフレームを、前記第1のファンクションコールのための領域および前記第2のファンクションコールのための領域に分割するステップと、
    を含むことを特徴とする方法。
  10. 前記第2のスタックフレームは、
    (i)前記第1のファンクションコールの間に生成された一以上のレジスタ値を記録することが可能な汎用レジスタ領域と、
    (ii)前記第1のファンクションコールの間に生成された一以上の変数値を記録することが可能なローカル変数領域と、
    (iii)前記第1のファンクションコールの間に、前記第2のファンクションコールによる使用を目的として生成された一以上のパラメータ値を格納することが可能なパラメータリスト領域と、
    (iv)前記第1のファンクションコールが呼び出されたときに実行されている前記プログラムの一部分に戻る際に、第1のファンクションコールが使用するためのリンクレジスタ値を記録することが可能なリンクレジスタ記録領域と、
    (v)前記第1のスタックフレームの逆方向チェイン領域へのポインタを記録することが可能な逆方向チェイン領域と、
    のうち少なくとも一つを含むことを特徴とする請求項9に記載の方法。
  11. 前記第2のスタックフレームを分割するステップは、前記第1のファンクションコールのための、前記汎用レジスタ領域と前記ローカル変数領域とのうち少なくとも一つと、前記第2のファンクションコールのための、前記パラメータリスト領域と前記リンクレジスタ記録領域と前記逆方向チェイン領域とのうち少なくとも一つと、に分割することを特徴とする請求項10に記載の方法。
  12. 前記第2のファンクションコールのための前記第2のスタックフレームの領域を、前記第1のファンクションコールのための前記第2のスタックフレームの領域に対して、非連続にするステップをさらに含むことを特徴とする請求項9から11のいずれかに記載の方法。
  13. 前記第1のファンクションコールのための前記第2のスタックフレームの領域を、前記第1のスタックフレームに連続させるステップをさらに含むことを特徴とする請求項12に記載の方法。
  14. プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックモジュールを配置するステップと、
    前記ソフトウエアプログラムの前記第1のファンクションコールによる第2のファンクションコールの呼出に応じて、第2のスタックモジュールを配置するステップと、
    前記第1のスタックモジュールに対して非連続に、前記第2のスタックモジュールを保存するステップと、
    前記第2のファンクションコールから前記第1のファンクションコールに戻ったことを受けて、前記第2のスタックモジュールを削除するステップと、
    を含むことを特徴とする方法。
  15. 前記第1のスタックモジュールおよび前記第2のスタックモジュールは、一以上のスタックフレーム、またはスタックフレームの一部分を含むことを特徴とする請求項14に記載の方法。
  16. プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックモジュールを配置するステップと、
    前記第1のファンクションコールによる第2のファンクションコールの呼出に応じて、第2のスタックモジュールを配置するステップと、
    前記プロセッサシステムのメモリ内における前記第1のスタックモジュールのアドレスを示すリターン情報を、前記第2のスタックモジュール内に加えるステップと、
    前記第1のスタックモジュールに対して非連続に、前記第2のスタックモジュールを保存するステップと、
    を含むことを特徴とする方法。
  17. 前記第2のファンクションコールによる、前記第2のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第1のスタックモジュールの配置場所を確認すること、および前記第1のスタックモジュールをロードすることのうち少なくとも一つを実施するステップと、
    前記第2のファンクションコールから前記第1のファンクションコールに戻るステップと、
    をさらに含むことを特徴とする請求項16に記載の方法。
  18. 前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第1のファンクションコールが、第1のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールの一部分であるとき、前記第2のスタックモジュールを配置するステップをさらに含むことを特徴とする請求項16または17に記載の方法。
  19. 前記ソフトウエアプログラムの一部分である第1のプログラムモジュールについての前記メモリ内におけるアドレスを示すリターン情報を、前記第2のスタックモジュール内に加えるステップと、
    前記第2のファンクションコールによる、前記第2のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第1のスタックモジュールの配置場所を確認すること、および前記第1のスタックモジュールをロードすることのうち少なくとも一つを実施するステップと、
    前記第2のファンクションコールによる、前記第2のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第1のプログラムモジュールの配置場所を確認すること、および前記第1のプログラムモジュールをロードすることのうち少なくとも一つを実施するステップと、
    をさらに含むことを特徴とする請求項16に記載の方法。
  20. 前記第2のファンクションコールから前記第1のファンクションコールに戻るステップをさらに含むことを特徴とする請求項19に記載の方法。
  21. 前記第2のスタックモジュールを削除するステップをさらに含むことを特徴とする請求項20に記載の方法。
  22. 前記第1のスタックモジュールを含むメモリとは別のまたは不連続のメモリ領域内に、前記第2のスタックモジュールを保存することを特徴とする請求項16から21のいずれかに記載の方法。
  23. 前記第1のスタックモジュールおよび前記第2のスタックモジュールは、一以上のスタックフレーム、またはスタックフレームの一部分を含むことを特徴とする請求項16から22のいずれかに記載の方法。
  24. プロセッサシステム内のプロセッサによる動作の実行を可能にするプログラムであって、
    当該動作は、
    プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックモジュールを配置するステップと、
    前記ソフトウエアプログラムの前記第1のファンクションコールによる、第2のファンクションコールの呼出に応じて、第2のスタックモジュールを配置するステップと、
    前記第2のスタックモジュールを、前記第1のスタックモジュールに対して非連続に保存するステップと、
    を含むことを特徴とするプログラム。
  25. 他のファンクションコールにより呼び出された、ソフトウエアプログラムのそれぞれのファンクションコールに応じて、単一のスタックフレームを含むスタックモジュールを非連続に配置するステップと、
    前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第1のファンクションコールが、第1のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールの一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置するステップと、
    前記プログラムモジュールが、複数のプログラムモジュールセットにグループ分けされ、前記第1のファンクションコールが、第1のプログラムモジュールセット内のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールセット内のプログラムモジュールの一部分であるとき、前記第1のファンクションコールによる前記第2のファンクションコールの呼出に応じて、前記第2のスタックモジュールを配置するステップと、
    のうち少なくとも一つのステップをさらに含むことを特徴とする請求項24に記載のプログラム。
  26. プロセッサシステム上で実行されているソフトウエアプログラムの第1のファンクションコールに応じて、第1のスタックフレームを配置するステップと、
    前記ソフトウエアプログラムの前記第1のファンクションコールによる、第2のファンクションコールの呼出に応じて、第2のスタックフレームを配置するステップと、
    前記第2のスタックフレームを、前記第1のファンクションコールのための領域および前記第2のファンクションコールのための領域に分割するステップと、
    をさらに含むことを特徴とする請求項24または25に記載のプログラム。
  27. 前記第2のスタックフレームは、
    (i)前記第1のファンクションコールの間に生成された一以上のレジスタ値を記録することが可能な汎用レジスタ領域と、
    (ii)前記第1のファンクションコールの間に生成された一以上の変数値を記録することが可能なローカル変数領域と、
    (iii)前記第1のファンクションコールの間に、前記第2のファンクションコールによる使用を目的として生成された一以上のパラメータ値を格納することが可能なパラメータリスト領域と、
    (iv)前記第1のファンクションコールが呼び出されたときに実行されている前記プログラムの一部分に戻る際に、第1のファンクションコールが使用するためのリンクレジスタ値を記録することが可能なリンクレジスタ記録領域と、
    (v)前記第1のスタックフレームの逆方向チェイン領域へのポインタを記録することが可能な逆方向チェイン領域と、
    のうち少なくとも一つを含み、
    前記第2のスタックフレームを分割するステップは、前記第1のファンクションコールのための、前記汎用レジスタ領域と前記ローカル変数領域とのうち少なくとも一つと、前記第2のファンクションコールのための、前記パラメータリスト領域と前記リンクレジスタ記録領域と前記逆方向チェイン領域とのうち少なくとも一つと、に分割することを特徴
    とする請求項26に記載のプログラム。
  28. 前記第2のファンクションコールから前記第1のファンクションコールに戻ったことを受けて、前記第2のスタックモジュールを削除するステップをさらに含むことを特徴とする請求項24から27のいずれかに記載のプログラム。
  29. 前記プロセッサシステムのメモリ内における前記第1のスタックモジュールのアドレスを示すリターン情報を、前記第2のスタックモジュール内に加えるステップと、
    前記第2のファンクションコールによる、前記第2のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第1のスタックモジュールの配置場所を確認すること、および前記第1のスタックモジュールをロードすることのうち少なくとも一つを実施するステップと、
    前記第2のファンクションコールから前記第1のファンクションコールに戻るステップと、
    をさらに含むことを特徴とする請求項24から28のいずれかに記載のプログラム。
  30. 前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第1のファンクションコールが、第1のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールの一部分であって、
    前記動作は、
    前記メモリ内における前記第1のプログラムモジュールのアドレスを示すリターン情報を、前記第2のスタックモジュール内に加えるステップと、
    前記第2のファンクションコールによる、前記第2のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第1のスタックモジュールの配置場所を確認すること、および前記第1のスタックモジュールをロードすることのうち少なくとも一つを実施するステップと、
    前記第2のファンクションコールによる、前記第2のスタックモジュール内の前記リターン情報の使用により、前記メモリ内における前記第1のプログラムモジュールの配置場所を確認すること、および前記第1のプログラムモジュールをロードすることのうち少なくとも一つを実施するステップと、
    前記第2のファンクションコールから前記第1のファンクションコールに戻るステップと、
    のうち少なくとも一つのステップをさらに含むことを特徴とする請求項29に記載のプログラム。
  31. メインメモリに動作可能に接続される少なくとも一つのプロセッサと、
    前記少なくとも一つのプロセッサに接続されるローカルメモリと、
    を含み、
    前記少なくとも一つのプロセッサは、
    (i)ソフトウエアプログラムの第1のファンクションコールに応じて、前記ローカルメモリ内に第1のスタックモジュールを配置する機能と、
    (ii)前記ソフトウエアプログラムの前記第1のファンクションコールによる、第2のファンクションコールの呼出に応じて、第2のスタックモジュールを配置する機能と、
    (iii)前記第2のスタックモジュールを、前記ローカルメモリ内における前記第1のスタックモジュールに対して非連続に保存する機能と、
    を有することを特徴とする装置。
  32. 前記少なくとも一つのプロセッサは、
    前記ローカルメモリ内における前記第1のスタックモジュールのアドレスを示すリターン情報を、前記第2のスタックモジュール内に加える機能と、
    前記第2のスタックモジュール内の前記リターン情報を用いて、前記ローカルメモリ内における前記第1のスタックモジュールの配置場所を確認すること、および前記第1のスタックモジュールをロードすることのうち少なくとも一つを実施する機能と、
    前記第2のファンクションコールから前記第1のファンクションコールに戻る機能と、
    のうち少なくとも一つの機能をさらに有することを特徴とする請求項31に記載の装置。
  33. 前記ソフトウエアプログラムが、複数の実行可能形式のプログラムモジュールを含み、前記第1のファンクションコールが、第1のプログラムモジュールの一部分であり、さらに、前記第2のファンクションコールが、第2のプログラムモジュールの一部分であって、
    前記少なくとも一つのプロセッサは、
    (i)前記メモリ内における前記第1のプログラムモジュールのアドレスを示すリターン情報を、前記第2のスタックモジュールに加える機能と、
    (ii)前記第2のスタックモジュール内の前記リターン情報を用いて、前記メモリ内における前記第1のスタックモジュールの配置場所を確認すること、および前記第1のスタックモジュールをロードすることのうち少なくとも一つを実施する機能と、
    (iii)前記第2のスタックモジュール内の前記リターン情報を用いて、前記メモリ内における前記第1のプログラムモジュールの配置場所を確認すること、および前記第1のプログラムモジュールをロードすることのうち少なくとも一つを実施する機能と、
    (iv)前記第2のファンクションコールから前記第1のファンクションコールに戻る機能と、
    のうち少なくとも一つの機能をさらに有することを特徴とする請求項32に記載の装置。
  34. 前記少なくとも一つのプロセッサは、前記第2のファンクションコールから前記第1のファンクションコールに戻ったことを受けて、前記第2のスタックモジュールを削除する機能をさらに有することを特徴とする請求項31から33のいずれかに記載の装置。
  35. 前記メインメモリとの通信を可能にする並列のプロセッサをさらに複数含み、
    前記複数のプロセッサのそれぞれは、ハードウエアキャッシュメモリでないローカルメモリと、命令実行パイプラインとを有することを特徴とする請求項31から34のいずれかに記載の装置。
  36. 前記複数のプロセッサのそれぞれは、プロセッサ自身のローカルメモリ内においては前記一以上のソフトプログラムを実行できる一方、前記メインメモリ内においては前記一以上のプログラムの実行が禁止されることを特徴とする請求項35に記載の装置。
  37. 前記プロセッサとそのプロセッサに関連付けられたローカルメモリは、一つの共通の集積回路として一体化されることを特徴とする請求項35または36に記載の装置。
  38. 前記プロセッサ、そのプロセッサに関連付けられたローカルメモリ、および前記メインメモリは、一つの共通の集積回路として一体化されることを特徴とする請求項35または36に記載の装置。
  39. 請求項24から請求項30のいずれかのプログラムを格納する記録媒体。
JP2006050358A 2005-02-28 2006-02-27 プロセッサシステム内においてスタックを分離して管理する方法および装置 Active JP4219369B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/068,242 US7685601B2 (en) 2005-02-28 2005-02-28 Methods and apparatus for segmented stack management in a processor system

Publications (2)

Publication Number Publication Date
JP2006323824A true JP2006323824A (ja) 2006-11-30
JP4219369B2 JP4219369B2 (ja) 2009-02-04

Family

ID=36572411

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006050358A Active JP4219369B2 (ja) 2005-02-28 2006-02-27 プロセッサシステム内においてスタックを分離して管理する方法および装置

Country Status (4)

Country Link
US (1) US7685601B2 (ja)
EP (1) EP1696318B1 (ja)
JP (1) JP4219369B2 (ja)
DE (1) DE602006018379D1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8478970B2 (en) 2009-08-31 2013-07-02 Electronics And Telecommunications Research Institute Accessing value for local variable from function call stack upon offset matching with instruction extracted stack pointer offset or from cache
WO2014014200A1 (ko) * 2012-07-20 2014-01-23 주식회사 안랩 컴퓨터 시스템과, 컴퓨터 시스템의 주소 이동 방법 및 컴퓨터 시스템의 시스템함수 모니터링 방법

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060155955A1 (en) * 2005-01-10 2006-07-13 Gschwind Michael K SIMD-RISC processor module
US7814166B2 (en) * 2006-01-27 2010-10-12 Sony Computer Entertainment Inc. Methods and apparatus for virtualizing an address space
EP1881404A1 (fr) * 2006-07-20 2008-01-23 Gemplus Procédé de protection dynamique des données lors de l'exécution d'un code logiciel en langage intermédiaire dans un appareil numérique
US8397088B1 (en) 2009-07-21 2013-03-12 The Research Foundation Of State University Of New York Apparatus and method for efficient estimation of the energy dissipation of processor based systems
US8930955B2 (en) * 2012-02-10 2015-01-06 International Business Machines Corporation Controlling growth in virtual disks via utilization of previously used and free disk block space
US9292292B2 (en) * 2013-06-20 2016-03-22 Advanced Micro Devices, Inc. Stack access tracking
US9367310B2 (en) 2013-06-20 2016-06-14 Advanced Micro Devices, Inc. Stack access tracking using dedicated table
US9250878B1 (en) 2014-11-24 2016-02-02 Red Hat, Inc. Function attribute for dynamic stack allocation
TWI566099B (zh) * 2014-12-30 2017-01-11 鴻海精密工業股份有限公司 具有整合功能的電子裝置及多裝置整合控制方法
MX2020002104A (es) 2017-08-24 2020-09-18 Lutron Tech Co Llc Seguridad de pilas para operaciones definidas independientemente.
WO2020154219A1 (en) * 2019-01-21 2020-07-30 John Rankin Systems and methods for controlling machine operations
US11526357B2 (en) 2019-01-21 2022-12-13 Rankin Labs, Llc Systems and methods for controlling machine operations within a multi-dimensional memory space
US11782762B2 (en) * 2019-02-27 2023-10-10 Qualcomm Incorporated Stack management
US20220129301A1 (en) * 2020-10-28 2022-04-28 Mastercard International Incorporated Architectural design for universal software automation pipelines
CN113238800B (zh) * 2021-05-25 2022-06-28 上海安路信息科技股份有限公司 堆栈帧结构和函数调用方法及系统

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6119206A (en) * 1996-02-12 2000-09-12 Sun Microsystems, Inc. Design of tags for lookup of non-volatile registers
US5835958A (en) 1996-10-29 1998-11-10 Sun Microsystems, Inc. Method and apparatus for dynamically sizing non-contiguous runtime stacks
US5995752A (en) * 1998-02-03 1999-11-30 International Business Machines Corporation Use of language instructions and functions across multiple processing sub-environments
US6006323A (en) * 1998-05-20 1999-12-21 Industrial Technology Research Institute Intelligent multiple stack management unit
US6353881B1 (en) * 1999-05-17 2002-03-05 Sun Microsystems, Inc. Supporting space-time dimensional program execution by selectively versioning memory updates
US6990567B1 (en) * 2000-12-22 2006-01-24 Lsi Logic Corporation Use of internal general purpose registers of a processor as a Java virtual machine top of stack and dynamic allocation of the registers according to stack status
US6526491B2 (en) 2001-03-22 2003-02-25 Sony Corporation Entertainment Inc. Memory protection system and method for computer architecture for broadband networks
US6976254B2 (en) 2001-11-28 2005-12-13 Esmertec Ag Inter-method control transfer for execution engines with memory constraints
GB2399897B (en) * 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8478970B2 (en) 2009-08-31 2013-07-02 Electronics And Telecommunications Research Institute Accessing value for local variable from function call stack upon offset matching with instruction extracted stack pointer offset or from cache
KR101283469B1 (ko) 2009-08-31 2013-07-12 한국전자통신연구원 프로세서 명령어의 메모리 액세스 방법 및 장치
WO2014014200A1 (ko) * 2012-07-20 2014-01-23 주식회사 안랩 컴퓨터 시스템과, 컴퓨터 시스템의 주소 이동 방법 및 컴퓨터 시스템의 시스템함수 모니터링 방법

Also Published As

Publication number Publication date
EP1696318B1 (en) 2010-11-24
EP1696318A1 (en) 2006-08-30
US7685601B2 (en) 2010-03-23
US20060195824A1 (en) 2006-08-31
DE602006018379D1 (de) 2011-01-05
JP4219369B2 (ja) 2009-02-04

Similar Documents

Publication Publication Date Title
JP4219369B2 (ja) プロセッサシステム内においてスタックを分離して管理する方法および装置
JP4322259B2 (ja) マルチプロセッサシステムにおけるローカルメモリへのデータアクセスを同期化する方法および装置
JP4346612B2 (ja) 情報処理方法および装置
JP3802042B2 (ja) キャッシュメモリ実装方法および装置、キャッシュメモリシステム
JP4386373B2 (ja) ロジカルパーティショニングされた処理環境におけるリソース管理のための方法および装置
US7689784B2 (en) Methods and apparatus for dynamic linking program overlay
JP5668014B2 (ja) プロセッサにおけるタスクおよびデータ管理
JP4421561B2 (ja) ハイブリッドdmaキュー及びdmaテーブルのデータ処理方法、装置及びシステム
KR100881810B1 (ko) 외부 장치로부터 프로세서의 메모리로의 주소 번역을 위한방법 및 기구
JP4243318B2 (ja) ソフトウェアとハードウエアで同時にキャッシュフィルする方法と装置
US7818724B2 (en) Methods and apparatus for instruction set emulation
JP2006146921A (ja) 追跡バッファでブックマークを使用するための方法及びシステム
JP2006172468A (ja) システム内部のデータ転送を処理する装置および方法
JP2006221638A (ja) タスク変更アプリケーションプログラミングインタフェースを提供する方法及び装置
JP2006260556A (ja) ラッチポイントを制御することにより、演算処理能力を改善する方法、装置ならびにシステム
JP4024271B2 (ja) マルチプロセッサシステムにおいて命令を処理するための方法と装置
JP4583327B2 (ja) 分散型のマルチプロセッサシステム内において一貫性管理を行う方法、システムおよび装置
JP2006260555A (ja) 命令の従属関係検査の深度を利用して処理能力の改善するための方法および装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080520

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080722

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20081111

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20081111

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111121

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4219369

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121121

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121121

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131121

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250