(57)【要約】マルチストリ−ミングプロセッサ（７１１）は一つ以上の命令スレッドを流すための複数のストリ−ム（４０１）と、ストリームからの命令を処理するための一組の機能リソ−ス（１０７）と、プロセッサのストリームによって共有される選択されたメモリ位置をロックするためのロック機構とを有し、ハードウエアロック機構（８１３、８１５、８１７、８１９）は、原子性のあるメモリシーケンスを開始するときにロックを設定しかつ原子性のあるメモリシーケンスを完了するときにロックをクリアするよう動作する。好ましい実施形態では、ロック機構は、プロセッサの各ストリームと関連づけられた一以上の格納位置（７１３）を含み、各格納位置は、メモリアドレス、ロックビットおよびストールビットを格納できる。以上のように動作する装置を使って本発明を実施する方法もまた教示する。
2004503864.tif 000002
【特許請求の範囲】
【請求項１】
一以上の命令スレッドを流すための複数のストリ−ムと、
ストリームからの命令を処理するための一組の機能リソースと、
プロセッサのストリームによって共有される選択したメモリ位置をロックするためのロック機構であり、原始性のあるメモリシーケンスを開始するときにロックをセットしかつ原始性のあるメモリシーケンスを完了するときにロックをクリアするよう動作するハードウエアロック機構とを備えるマルチストリーミングプロセッサ。
【請求項２】
ロック機構が、プロセッサの各ストリームに関連づけられた一以上の格納位置を含み、各格納位置が、メモリアドレス、ロックビット、ストールビットを格納できる、請求項１に記載のマルチストリ−ミングプロセッサ。
【請求項３】
ストリームが原子性のあるメモリシーケンスをはじめるとき前記ストリームに関連づけられた格納位置に対象メモリアドレスが書き込まれ、かつロックビットがセットされ、ストリームに関連づけられたすべての他の格納位置がサーチされ、合致する格納位置についてロックビットがセットされた合致するメモリアドレスが見つかると、前記ストリームがストールビットをセットし、ストールビットがクリアされるまで前記ストリームがストールする、請求項２に記載のマルチストリーミングプロセッサ。
【請求項４】
ストリームが原子性のあるシーケンスを実施し、アクセスされたメモリ位置に前記シーケンスの変更された結果を格納すると、前記ストリームのための関連づけられた格納位置においてロックビットがクリアされ、ロック機構においてストリームに関連づけられたメモリ位置ですべてのストールビットがクリアされ、他のストリームが原子性のあるシーケンスを開始することを可能にする、請求項３に記載のマルチストリーミングプロセッサ。
【請求項５】
ストリームが原子性のあるメモリシーケンスを開始すると、対象メモリアドレスが前記ストリームに関連づけられた格納位置に書き込まれ、ロックビットがセットされ、ストリームに関連づけられたすべての他の格納位置がサーチされ、合致する格納位置についてロックビットがセットされた合致するメモリアドレスが見つからない場合、前記ストリームは前記原子性のあるシーケンスを続ける、請求項２に記載のマルチストリ−ミングプロセッサ。
【請求項６】
前記ロック機構が、製造の間にマルチストリ−ミングプロセッサに設置されるハードウェアを含んで実現される請求項２に記載のマルチストリ−ミングプロセッサ。
【請求項７】
前記ロック機構が、ファームウエアまたはソフトウェアを含んで実現される請求項４に記載のマルチストリ−ミングプロセッサ。
【請求項８】
前記格納位置が、前記プロセッサが原子性のあるメモリシーケンスを実施する前記ストリ−ムによって共有されるメモリのメモリ位置を割り当てられる、請求項２に記載のマルチストリ−ミングプロセッサ。
【請求項９】
マルチストリ−ミングプロセッサ上で、原子性のあるメモリシーケンスを実現するための方法であって、
（ａ）格納位置を、ロックビットとスト−ルビットを含む、前記マルチストリーミングプロセッサの前記ストリ−ムの各々と関連付けるステップと、
（ｂ）ストリ−ムによって原子性のあるメモリシーケンスを始める際に、関連づけられた格納位置にシーケンスで修正されるメモリアドレスを書き込み、ロックビットをセットするステップと、
（ｃ）他のストリームに関連づけられた全ての格納位置を該格納位置の中に格納されたメモリアドレスおよびロックビットの状態についてサーチするステップと、
（ｄ）セットされたロックビットをも有するメモリアドレスとの合致が何ら見つからないときに、前記原子性のあるシーケンスを完了へと継続するステップと、
（ｅ）セットされたロックビットを有するメモリアドレスとの合致が見つかったときに、前記ストリームについて前記ストールビットをセットし、前記ストールビットがクリアされるまで前記ストリームについての操作をストールするステップと
を含む方法。
【請求項１０】
前記原子性のあるシーケンスの終わりに格納操作を完了する際、格納位置に格納された合致するメモリアドレスを有するストリームのためのすべてのストールビットをクリアし、他のストリームが原子性のある操作を継続できるようにするステップ（ｆ）をさらに含む、請求項９に記載の方法。
【請求項１１】
前記格納位置が前記マルチストリーミングプロセッサ上に実現されたハードウエアレジスタであり、メモリアドレスが前記マルチストリーミングプロセッサのオンチップメモリ内に位置する請求項９に記載の方法。
【請求項１２】
前記格納位置が、前記マルチストリ−ミングプロセッサが原子性のあるメモリシーケンスを実施する同じメモリ内の予約された位置である、請求項９に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータシステムのメモリ操作の分野に属し、より詳細にはダイナミックマルチストリーミング（ＤＭＳ）プロセッサにより実行されるメモリ操作に関する。
【０００２】
（関連文献の相互参照）
本出願は、優先権主張の基礎となる同時継続特許出願すなわち１９９８年１２月１６日に出願された米国特許出願第０９／２１６０１７号、１９９９年１月２７日に出願された同第０９／２４００１２号、１９９９年３月２２日に出願された同第０９／２７３８１０号および１９９９年５月１４日に出願された同第０９／３１２３０２号の一部継続出願（ＣＩＰ）であり、これらの４つの出願は、いずれも、参照によりその全体が本明細書に組み込まれる。
【０００３】
（発明の背景）
複数のスレッドを処理することができるマルチストリ−ミングプロセッサは、当技術分野において知られており、かなりの研究開発の対象となっている。本発明はこの分野の先行する成果に着目し、その成果の上に立って、装置および方法における新規かつ自明でない改善を当技術分野にもたらすものである。本発明者は、この特許出願により、マルチストリ−ミングプロセッサの技術分野における多くの発表された論文を列挙した情報開示ステートメントを提供しており、これら論文は、ともに、本明細書で開示される本発明のいくつかの態様について付加的な背景および文脈を提供する。
【０００４】
定義として、この明細書では、処理システムを参照してストリームとは、命令スレッドをサポートしかつ処理するためのプロセッサのハードウエア性能とみなす。スレッドは、ストリ−ム内で実行する実際のソフトウェアである。例えば、デスクトップコンピュータを動かすためのＣＰＵとして実現されるマルチストリ−ミングプロセッサは、２つ以上のアプリケーション、例えばワードプロセッサプログラムとオブジェクト指向ドローイングプログラムなど、からのスレッドを同時に処理することができる。もう一つの例として、マルチストリーミング能力があるプロセッサは、パケット交換ネットワークのルータなどのように、規則的な人間の指示なしで機械を動かすことができる。例えば、あるルータでは、ネットワークのデータパケットを処理し、転送するための一以上のスレッドがあってもよく、ほかのスレッドはネットワークに接続されたほかのルータおよびサーバとのサービス品質（ＱＯＳ）ネゴシエーションのためであってよく、またほかのスレッドは経路指定表などを維持するためであってよい。複数の並列スレッドを処理するどんなマルチストリーミングプロセッサでも最大の能力は、プロセッサがサポートするハードウェアストリ−ムの数で固定される。
【０００５】
単一のスレッドを動作させるマルチストリ−ミングプロセッサは、未使用で空きのストリ−ムを有する単一ストリームプロセッサとして動作する。議論のため、ストリ−ムは、ストリ−ムがスレッドをサポートする時は全てアクティブである考え、そうでない場合は非アクティブであると考える。相互参照セクションで列挙するいろいろな関連ケースにおけるように、そして、ＩＤＳにより提供されかつ相互参照出願の少なくとも一つに含まれた文献におけるように、スーパースケーラプロセッサもまた当技術分野において知られている。このスーパースケーラプロセッサという用語は、一つ以上のタイプの複数の機能ユニットと、複数の機能ユニットに並列命令を出す能力とを有するプロセッサを指す。今日つくられる大部分の中央処理装置（ＣＰＵ）は、それぞれのタイプの単一機能ユニット以上を有しており、この定義によるスーパースケーラプロセッサである。いくつかのＣＰＵは、例えば、複数の浮動小数点ユニット、インテジャ−ユニット、論理ユニット、ロード／格納ユニットその他を含む、多くのそのようなユニットを有する。マルチストリ−ミングスーパースケーラプロセッサも同様に当技術分野において知られている。
【０００６】
発明者は、上述のタイプを含むがこれに限られないすべてのタイプのマルチストリ−ミングプロセッサについてのアーキテクチャにおいて放置された分野があることを確認した。放置された分野は、並列ストリ−ム間の通信と、１つのアクティブなストリ−ムがアクティブなもしくはそうでない他のストリ−ムに行使できる制御タイプとであり、そのため、複数の並列スレッドのアクティビティを調整できるようにし、かつ、機能ユニットへのアクセスのようなアクティビティの処理における多様なニーズに応ずるためにダイナミックに共有できるようにする。放置された具体的な領域は、複数のストリ−ムが存在する中での外部割込みおよび内部割込みのマッピングおよび取り扱いであり、また例外処理である。
【０００７】
発明者に知られているダイナミックマルチストリ−ミング（ＤＭＳ）プロセッサは、複数のスレッドを処理するための複数のストリームを有し、かつ、一以上のストリームの優先順位コードの優先順位レコードを含む命令スケジューラを有する。優先順位コードは、いくつかの実施形態では、リソースへの関連アクセスを決定し、並びに、任意の時点でアクセスを有するストリームを決定する。他の実施形態では、優先順位はダイナミックに決定されて、動作中に変えられる。これは、チップ上の処理統計などのさまざまな基準により、一以上の優先順位アルゴリズムを実行することにより、ストリームのローディングに従ったチップ外からの入力により、もしくはこれらと他の方法との組み合わせによりなされる。ある実施形態では、特別なコードがストリ−ムをディスエーブルするために使われ、そしてストリ−ムは、例えばチップ上のイベント、処理統計、チップ外からの入力、およびプロセッサ割込みなど様々な方法により動的にイネーブルおよびディスエーブルされる。ＩＰルータおよびデジタル信号処理装置を含むいくつかの具体的な適用を教示する。
【０００８】
上述のＤＭＳプロセッサは、命令プロセッサ（ＩＰ）、ＩＰによって処理されるべきスレッドコンテキストなどのデータを格納するためのレジスタファイル、およびレジスタファイルおよびＩＰに結合されたレジスタ転送ユニット（ＲＴＵ）を有する処理システムによってさらに高度化される。レジスタファイルは、ＲＴＵおよびＩＰの両方から読み書き可能な様々な状態をとりうる。ＩＰとＲＴＵはレジスタファイルの制御をとり、レジスタファイルの状態に応じて部分的にそれらの機能を実施し、処理後にレジスタファイルを開放するとき状態を設定する。ＤＭＳプロセッサによって使われる処理システムは、特にマルチストリーミングプロセッサに適用可能であり、ストリ−ムより多くのレジスタファイルが実装され、ストリーム中の少なくとも一のアイドルなレジスタファイルがデータのバックグラウンドロードおよびロード解除を遂行するのを可能にする。
【０００９】
上述のＤＭＳプロセッサのさらなる高度化は、独特なストリーム間制御機構を活用し、これにより、任意のストリームが他の任意のストリーム動作に影響を与えることができる。いろいろな実施形態で、ストリ−ム間制御機構は、他のストリ−ムをイネーブルまたはディスエーブルすること、他のストリ−ムをスリープモードに入れるかスリープモードから他のストリ−ムを呼びさますこと、機能リソースへのアクセスに関して他のストリームのために優先順位を設定すること、および他のストリームによる機能リソースへのアクセスを許可もしくはブロックすることのうちの一以上を遂行するための機構を含む。マスターモードがこの高度化においては教示され、そこでは、一つのストリームがマスター状態を許可され、他のストリームに関する任意ですべての利用可能な制御機構を他のストリームからの干渉なしに働かせることができる。監視モードも同様に教示され、そこでは、制御されるストリームに応じて、制御特権を変更もしくは撤回できる制御が、最小から最大まで与えられうる。マスター状態とストリーム間制御階層とが少なくとも一のオンチップビットマップによって記録され、補正される機構を含む様々な機構が開示される。この機構においては、各ストリームは各他のストリームについての制御特権を許可もしくは撤回するビットマップを維持かつ編集するが、設定はマスターストリーム以外のあらゆるストリームに有効であり、マスターストリームは設定を無視する。
【００１０】
上述のＤＭＳプロセッサに関連した開示において教示されるもう一つの特徴は、割り込み処理に関係がある。割り込みハンドラーの論理が供給され、割り込みおよび例外を検出して一以上の特定のストリームにマッピングする。いくつかの実施形態では、一の割り込みまたは例外が二以上のストリームにマッピングされることがあり、他の実施形態では、二以上の割り込みもしくは例外が一のストリームにマッピングされることがある。マッピングは静的でプロセッサデザインで決定され、プログラマブルであり、データは格納されかつ補正可能でもよく、もしくは条件付かつ動的でもよく、割り込み論理は、マッピングを決定する変数を感知するアルゴリズムを実行する。割り込みは、アクティブなストリームによって生成されたプロセッサソフトウエア（内部）の割り込み外の装置によって生成される外部割り込みであってもよく、もしくは変数に基づき条件付であってもよい。割り込みが認められた後、割り込みもしくは例外がマッピングされたストリームが、適当なサービスルーチンに誘導される。同期的方法においては、割り込みがマッピングされたすべてのストリームが割り込みを認めるまでなんら誘導は発生しない。
【００１１】
本発明は、二以上の処理ストリームが一のメモリリソースを共有するシステムにおいて、メモリ操作の原子性を実現する装置および方法を提供する。本発明は、より詳細には、本発明者に知られかつ以上でおよび本明細書の他の開示で述べたＤＭＳプロセッサを活用するようなシステムに関する。これに関して、原子性とは、各関係しているストリームが、すべての関係しているストリームに配慮しながら不可分の操作の効果を有するリード−更新−ライト操作を実施できることをいう。
【００１２】
多くの場合、メモリのリードおよびライト機能のシーケンスは他のプロセッサに配慮すると原子的ではありえないことはデータ処理技術では良く知られている。これは、典型的には、２つのプロセッサが同時に同一メモリ位置にアクセスしているときに起こり得る。原子性を保証する機構がなければ、メモリの同じ位置をインクリメントするようプログラムされた２つの別個のプロセッサが、１のみインクリメントしてその位置の値をリードおよびライトしうる。たとえば、あるメモリ位置の値が４でインクリメントの値が１であるとする。一の単一ストリームプロセッサによる単一のリード、インクリメント、ライトシーケンスは値５をもたらす。もし、二つのプロセッサが別個の時間にインクリメントすれば、２つのインクリメント操作を反映して値は６となり、正しい結果となる。しかしながら２つのプロセッサが同時にインクリメントを試行すると、その値は一度だけインクリメントされ、メモリに値５を残し、望まない結果となる。
【００１３】
よく知られたＭＩＰＳアーキテクチャならびに他の既知のアーキテクチャは、同時に一のメモリ位置をインクリメントしようとする二以上のプロセッサの上述の例における望まない結果が起こらないよう保証する方法を提供する。ＭＩＰＳは例えば、ロードに関連づけられた命令と条件付格納命令とを含む操作のシーケンスが、原子的であるか、さもなければ失敗し、失敗したことを示すメカニズムを提供する。ロードに関連づけられた命令とその条件付格納命令との間のメモリ位置のなんらかの更新はメモリを更新することなく条件付格納を失敗させる。ついで、全体のシーケンスを繰り返すべくまた別の試行がなされる。
【００１４】
ＤＭＳプロセッサにおいては、２本のストリームが原子的にメモリ位置のリードと更新を試行しているとき、リード−更新−ライトシーケンスが成功裏に完了しうるまでプロセッサリソースを用いて繰り返しループしないことが望ましい。
【００１５】
明らかに必要とされるのは、単一のメモリリソースを共有するＤＭＳプロセッサに関する上述の非効率の問題に対処しながら原子性を保証する新しい方法および装置である。そのような方法および装置は、メモリ操作の原子性を考慮に入れると同時にオンチップリソースの不必要で反復的な使用を防ぐことによってさらにＤＭＳプロセッサの処理速度を最適化する機会を提供する。
【００１６】
（発明の概要）
本発明の好ましい実施形態では、一以上の命令スレッドを流すための複数のストリームと、ストリームからの命令を処理するための一組の機能リソースと、プロセッサのストリームによって共有される選択したメモリ位置をロックするためのロック機構であり、原子性のあるメモリシーケンスを開始するときにロックをセットしかつ原子性のあるメモリシーケンスを完了するときにロックをクリアするよう動作する、ハードウエアロック機構とを含むマルチストリーミングプロセッサが提供される。好ましい実施形態では、ロック機構は、プロセッサの各ストリームと関連づけられた一以上の格納位置を含み、各格納位置は、メモリアドレス、ロックビット、およびストールビットを格納できる。
【００１７】
発明の好ましい実施形態によるプロセッサにおいて、ストリームが原子性のあるメモリシーケンスを開始すると、当該ストリームに関連づけられた格納位置に対象メモリアドレスが書き込まれ、ロックビットがセットされ、ストリームと関連づけられた全てのほかの格納位置がサーチされ、合致した格納位置についてロックビットがセットされたメモリアドレスの合致が見つかった場合、ストリームはストールビットをセットし、ストールビットがクリアされるまでストリームはストールする。また、ストリームが原子性のあるシーケンスを実施し、アクセスされるメモリ位置にシーケンスの更新された結果を格納すると、当該ストリームについて関連づけられた格納位置のロックビットがクリアされ、ロック機構においてストリームに関連づけられたメモリ位置の全てのストールビットがクリアされ、他のストリームが原子性のあるシーケンスを開始するのを可能にする。さらに、ストリームが原子性のあるメモリシーケンスを開始すると、対象メモリアドレスが、当該ストリームに関連づけられた格納位置に書き込まれ、ロックビットがセットされ、ストリームに関連づけられた全てのほかの格納位置がサーチされ、合致した格納位置についてロックビットがセットされたメモリアドレスの合致が見つからない場合には、ストリームは原子性のあるシーケンスを継続する。
【００１８】
好ましい実施形態では、ロック機構が、製造の間にマルチストリ−ミングプロセッサに設置されたハードウェアを含んで実現される。他の実施形態では、ロック機構が、ファームウエアもしくはソフトウエアを含んで実現されてもよい。また、いくつかの実施形態では、格納位置が、原子性のあるメモリシーケンスをプロセッサが実施するストリームにより共有されるメモリのメモリ位置を予約されてもよい。
【００１９】
発明のもう一つの態様においては、マルチストリ−ミングプロセッサ上で原子性のあるメモリシーケンスを実現する方法が提供され、その方法は、（ａ）格納位置を、ロックビットとスト−ルビットを含む、マルチストリーミングプロセッサのストリ−ムの各々と関連付けるステップと、（ｂ）ストリ−ムによって原子性のあるメモリシーケンスを始める際に、関連づけられた格納位置にシーケンスで修正されるメモリアドレスを書き込み、ロックビットをセットするステップと、（ｃ）他のストリームに関連づけられた全ての格納位置を該格納位置の中に格納されたメモリアドレスおよびロックビットの状態についてサーチするステップと、（ｄ）セットされたロックビットをも有するメモリアドレスとの合致が何ら見つからないときに、当該原子性のあるシーケンスを完了へと継続するステップと、（ｅ）セットされたロックビットを有するメモリアドレスとの合致が見つかったときに、当該ストリームについてストールビットをセットし、当該ストールビットがクリアされるまで当該ストリームについての操作をストールするステップとを含む。
【００２０】
好ましい実施形態では、前記原子性のあるシーケンスの終わりに格納操作を完了する際、格納位置に格納された合致するメモリアドレスを有するストリームのためのすべてのストールビットをクリアし、他のストリームが原子性のある操作を継続できるようにするさらなるステップ（ｆ）がある。
【００２１】
いくつかの実施形態では、前記格納位置はマルチストリーミングプロセッサ上に実現されたハードウエアレジスタであり、メモリアドレスはマルチストリーミングプロセッサのオンチップメモリ内に位置する。他の実施形態では、格納位置は、マルチストリ−ミングプロセッサが原子性のあるメモリシーケンスを実施する同じメモリ内の予約された位置である。
【００２２】
以下で開示される本発明を実施可能にする詳細の実施形態において、競合するストリームによる不必要な操作を伴うことなく、全く原子的に同期メモリ操作が実施されるＤＭＳプロセッサのためのシステムが、最初に提供される。
【００２３】
（好ましい実施形態の説明）
同じプロセッサにおいて動作している複数のアクティブなストリームは、サポートするスレッドの性質によってしばしば関連づけられる。したがって、１つのストリ−ム（アクティブなストリ−ム）で動作しているスレッドが一つ以上の他のアクティブなストリ−ムの機能を開始および／または制御するのを可能にされるならば、利点となりうる。アクティブなストリ−ムは、同一のタスク上の作業を共有することがあり、したがって、データを伝達する効率的な方法を必要とする場合がある。１つのアクティブなストリ−ムが、一時的に特定の処理リソースのまたは全体のスループットを排他的に使用することを必要とするかもしれない。アクティブなそのようなストリ−ムは、その具体的な要求を主張する一方で他のアクティブなストリ−ムがより少ないリソースでできるだけ能率的に動作を継続するのを可能にする方法を必要とする。これらは、全てのマルチストリ−ミングプロセッサでの問題である。この概念と以後の説明において、アクティブストリ−ムは具体的なスレッドを実行しているストリームであり、また、スレッドコンテキストがレジスタファイルによってアクティブストリームに結合されていることも再び思い出すとよい。
【００２４】
優先権主張の基礎となる米国特許出願第０９／２１６０１７号明細書で記述されるように、マルチストリ−ミングプロセッサは２つ以上の命令スレッドを並列に実行するための物理的ストリームリソースと、同様に複数のレジスタファイルも有する。本発明は、全てのそのようなプロセッサに、さらには他の方法でマルチストリ−ミングを達成しうるプロセッサにも適応する。本発明のいろいろな実施形態で、編集可能な特徴の組がアクティブなストリームのために維持され、これらの特徴が、当該の具体的なストリームの上に他のアクティブなストリームによって実施されうる制御の形式を調節する。便宜上もしくは特別な理由によって、これらの編集可能な特徴は、様々な実施形態においていくつかの形式のいずれか一つをとりうる。
【００２５】
好ましい実施形態では、編集可能な特徴は、プロセッサチップの上のシリコンで実現される。というのもこの構成が動作における大変早いアクセスを可能にするからである。本発明は、しかしながらこれに限らず、そのような特徴は他の方法で格納および編集可能である。編集可能な特徴は、様々な状況および実施形態において、ストリームに特定のもしくはコンテキストに特定のものとしてマッピングされてもよい。
【００２６】
１つの典型的な実施形態では、ビットマップが維持され、個々のビットすなわちビットの組み合わせのバイナリ値が個々のストリームと関連づけられかつストリーム間通信および制御に関する特定の意味を割り当てられ、ある特定の時刻におけるストリーム間の管理階層、各ストリームのプロセッサリソースへのアクセス、およびマスタストリーム、イネーブルおよびディスエーブルモード、およびスリープモードのための状態制御などを示し、そのさらなる詳細を以下に述べる。
【００２７】
上述のビットマップで、いくつかの管理制御ビットは、他のいずれかのアクティブなストリ−ムがそれぞれの個々のアクティブなストリ−ムの上に行使しうる制御の形式を調節する。アクティブなストリ−ムは、慎重に定義された限度の範囲内で、自身の制御ビットをセットおよびリセットすることができ、適切なパーミッションにより他のアクティブなストリ−ムもまたそうすることができる。あらゆる時点で、マスタースレッドはストリ−ムで実行することができ、このとき、ストリームはマスタースレッドを実行する間マスターストリームとされ、マスターストリームはスレーブストリームに対して完全な制御を有し、スレーブストリームの制御ビットをいつでも無効にすることができる。実行中のマスターストリームが一以上ある場合、それぞれは異なる指定されたスレーブストリームを持ちうる。適切な制御の設定により、アクティブなストリームは、他のアクティブなストリームの管理者として動作しえ、（典型的には）一時的に他のアクティブストリームの実行を制御しそれらと通信する。さらに、マスターストリームおよび管理ストリームは、直接もしくはストリームの優先順位を更新することによって、アクティブなスレーブストリームがどの処理リソースを用い得るかということに対する制御を有する。
【００２８】
図１Ａは、本発明の一実施形態によるマルチストリーミングプロセッサを一般化した図であり、０から３のラベルがついた４つのストリ−ム１０３へ複数のスレッドから命令を提供している命令キャッシュ１０１を示しており、この４つのストリームから命令スケジューラがアクティブなストリ−ムから機能リソ−ス１０７へ命令をディスパッチする。この場合４つであるがより多くてもよい複数のレジスタファイルの組１０９が、処理中にアクティブなストリームと関連づけられるべきスレッドコンテキストを格納するなどの処理に用いるために示される。レジスタファイルおよびデータキャッシュ１１１へもしくはこれらからのデータの流れおよび機能リソースは、レジスタ転送ユニット（ＲＴＵ）を含むことができ、これは参照により本明細書に組み込まれる優先権の基礎となる米国特許出願第０９／２４００１２号明細書に教示されるとおりである。
【００２９】
この実施形態では、独特なストリ−ム間制御ビットマップ１１５が個々のビットを格納し、これが、いくつかの場合には、ビットの組合せからなるバイナリ値が、個々のストリームと関連づけられ、以上で紹介したストリーム間通信および制御に関する特定の意味を割り当てられる。共有システムバス１１３は、命令キャッシュおよびデ−タキャッシュを結合する。示した図は典型的かつ一般的であり、当業者は、なしうる多くの変形形態が存在することを認識するであろう。本目的のための重要性は、同時に複数のスレッドをサポートするよう適合された複数のストリームということにある。
【００３０】
ストリーム間制御ビットマップ１１５が、ストリーム間制御を定義し構成する制御設定の参照リポジトリであることは上述した。この参照において、いくかの例では単一のビットが、他の例では二以上のビットにより表されるバイナリ値が共有されるシステムリソースについてのアクティブストリームの優先順位、特定のストリームへの固定したリソース割当、およびアクティブリソース間の制御階層などを定義する。一の例示的な実施形態における特定の制御特性を以下に示す。
【００３１】
本発明のこの実施形態における制御の一の態様においては、アクティブストリームは、当該ストリームに独特の制御参照データをセットおよび編集できる。他の態様においては、一のストリームが、他のストリームについての制御参照データを変更することができる。後者の態様では、各特定のストリームは、どのほかのストリームがその特定のストリームについてのどの制御データを編集しうるかを制御できる。
【００３２】
図１Ｂは、図１Ａのビットマップ１１５の部分であり、この場合はストリーム０である一のストリームによって許された許可の状態を示すビットの組を示し、他のストリームがストリーム０に一意に関連づけられた制御ビットを変更できるよう、もしくは、ストリーム０に関する特定の制御機能を働かせるよう許可する。この実施形態における同様のビットマップがストリーム１、２および３の各々について存在し、この説明では一つの例で十分である。このマトリックスにおいては、ストリーム１、２および３の各々について列があり、制御の定義のために行がある。やはり、これらのビットはアクティブストリーム０によってセットすることができ、ビットマップを編集する原因は、ストリーム０の機能に関連し、この機能は、ストリーム０で動作中のスレッドの性質によって定義される。ビットマップはしかしながら、マルチストリーミングプロセッサにおいてストリームに関連づけられた物理的リソースであり、ストリーム間制御および協調のいくつかの形式および程度を可能にするために存在する。
【００３３】
図１Ｂの左から最初の行は管理とラベルづけされ、管理許可を示す。ストリーム１および２のための列の論理１は、ストリーム０が、ストリーム１および２に対して管理アクセスを許すがストリーム３には許さないことを示す。管理アクセスは、これらのほかのストリームがその瞬間のストリームの制御データを編集できることを意味する。示した設定により、ストリーム０についてのストリーム間制御データはストリーム０（自身）によりまたストリーム１および２により編集することができるがストリーム３によっては編集できない。各アクティブストリームがそれ自身の制御データを編集できるので、ストリーム１および２についての許可は、アクティブなストリーム０によっていつでも撤廃することができ、またいつでも再許可することができる。
【００３４】
ストリーム０が一以上のストリームにそれ自身の制御データ構成を編集するためのアクセスを許可することができる状況の例としては、ストリーム０が非常に低い優先順位スレッドを実行中かもしくはスレッドを全く実行しておらず新しいスレッドのために単に利用可能であるかという場合である。
【００３５】
図１Ｂの第二の行はイネーブルとラベルづけされる。ストリーム０はこの行のビットを用いてストリーム０がディスエーブルされている場合に他のストリームがストリーム０をイネーブルするパーミッションを与えるようにする。この場合には、この行には論理１が全くなく、したがってストリーム１、２もしくは３のいずれもストリーム０をイネーブルすることができない。図１Ｂの最初の行に関する上述の管理編集アクセスの許可と、かかるイネーブルもしくはディスエーブルなどの許可との間には明確な違いがある。第一の場合には、パーミッションが、その瞬間のストリームのための制御データを他のストリームがセットするのを許可し、広い視点でストリーム間の制御階層を再構成する。第二の例では、制御データへのアクセスが全く他のストリームには許されず、しかしながら、他のストリームはその瞬間のストリームのためのイネーブルもしくはディスエーブルなど特定の形式の制御を働かせるためのパーミッションを与えられる。イネーブルの右の次のビット行はディスエーブルであり、その例としての設定は、ストリーム１および３が、ストリーム０をディスエーブルするためのパーミッションを、その時点では与えられていることを示す。
【００３６】
次のビット行は優先順位とラベルづけされ、ストリームについてのこの行の論理１は、ストリーム０が他のストリームにストリーム０のための優先順位をセットするためのパーミッションを与えることを示す。この場合、ストリーム０は、いずれのストリームもその優先順位をセットすることを許していない。優先順位は、本発明の実施形態では、典型的には、プロセッサリソースへのアクセスを示すためにセットされる。次のビット行は、割り込みとラベルづけされ、他のストリームがストリーム０に割り込めることを意味する。この場合、ストリーム２は割り込み特権を与えられている。
【００３７】
本明細書の教示を与えられれば、当業者にとっては、示したマトリックスおよび特定の行の意味でなされうる様々な改訂が存在することは明らかであろう。マトリックスの図示が例示的なものであることおよびどのビットがどのストリームに関係しどの制御機能およびリソースに関係するかについての取り決めが維持される限りは、示したビットが、同様に、２バイトレジスタの個々のビットでありうることなども明らかであろう。
【００３８】
本発明の好ましい実施形態では、ストリーム間制御は、複数のストリームとさらに複数の機能リソースを有するプロセッサを意味する、マルチストリーミングスーパースケーラプロセッサについて述べる。そのようなプロセッサは、例えば、いくつかのインテージャー処理ユニット、いくつかの浮動小数点処理ユニット、いくつかの分岐ユニットなどを有することができる。ビットマップ１１５（図１Ａ）によって示されるストリーム間制御構成は、本発明の実施形態において、なんらかのストリームへなんらかのリソースを予約するためおよび他のストリームによる同一のリソースの使用を制限するためにセットすることができる。
【００３９】
図１Ｃは、ストリーム０についての瞬間的なリソース割当を示すビット列である。やはり、同様のリソース割当構成が、すべてのほかのリソースについて同様に存在しうるが、説明のためには一つで十分である。この場合、４つのインテジャーユニット、４つの浮動小数点ユニット、および４つの分岐ユニットがある。瞬間的な設定は、ストリーム０がインテジャーユニット１、２および３とブランチユニット１への予約されたアクセスを有することを示す。逆に、この設定は、ストリーム０がインテジャー４、あらゆる浮動小数点ユニット、および分岐ユニット１、２もしくは３にアクセスできないことを意味する。アクティブストリームとしてのストリーム０は他のストリームへの制御ビット設定を許したり否定したりすることを含むそれ自身の構成をセットできるので、ストリーム０（もしくはなんらかのアクティブストリーム）は、特定の瞬間に、特定のリソースを予約することができる。やはり、当業者にとっては、図示した構造が例示的なものであり、数多くの方法で変更しうることは明らかである。
【００４０】
いくつかの場合には、固定の割当およびスーパースケーラプロセッサにおけるリソースの分割に頼るかわりに、リソースを優先順位によってストリームに割り当てることによりもしくはいくつかのリソースのための割当と他のリソースのための優先順位管理の混合により、よりよい結果をえることができる。固定の割当により、図１Ｃに示されるように、一定時間の間、リソースを排他的に分配することができるが、もちろん分配は、それぞれのアクティブストリームによってそれ自身の割当のために、もしくは他のアクティブストリームによって許可が与えられた場合に何時でも編集（変更）することができる。
【００４１】
図１Ｄは、ストリ−ム０についての優先順位設定に専用の、図１Ａのビットマップ１１５の一部を図示する。この場合、優先順位は０から７まで変わることができ、したがって、優先順位レベルを示すビットのバイナリ値によるそれぞれの優先順位レベル設定のために３ビットが必要となる。ある実施形態では、３つの異なる種類の優先順位があり、実行優先順位、割り込み優先順位およびリソース優先順位と呼ばれる。すべての３つのタイプの優先順位は、図１Ｄにいくつかの形式で図示するが、図示したより多いもしくは少ない粒度もありうる。
【００４２】
図１Ｄにおいて、トップの列は実行優先順位を示す。この設定は、ストリームが当該ストリームにおいてどのスレッドを実行できるかを決定する。すなわち、スレッドは、固有に一定の優先順位を有してもよく優先順位を割り当てられてもよく、図１Ｄに示された実行優先順位はストリームによって編集され得、もしくは管理アクティブストリームによってストリームのために編集される。ストリームの実行優先順位より高い優先順位を有するスレッドのみが当該ストリームにおいて実行することができる。優先順位を有するスレッドの概念は、様々な方法で実現しうる。いくつかの好ましい実施形態では、スレッドは、割り当てられかつ変更可能な優先順位をもつスレッドコンテキストによって優先順位をもつ。すなわち、コンテキストがレジスタファイルにロードされると、そのコンテキストは事前設計されたもしくは決定された粒度の優先順位番号を割り当てられることができ、そのコンテキストがアクティブになりかつストリームと関連づけられたときにストリームへとコールされた（もしくはされる）スレッドは、このとき、レジスタファイルに格納されたコンテキストの優先順位を有するものとみなすことができる。いくつかの場合には、以下の説明においてより明らかにされるように、コンテキストはレジスタファイル以外のメモリに格納することができ、より後の時間に、最初のもしくはさらなる処理のためにレジスタファイルへと引き出すことができる。格納されたコンテキストは、同様にコンテキストの優先順位レベルをもつことができる。
【００４３】
図１Ｄのトップから２つめの列は、ストリーム０についての割り込み優先順位を示す。示した割り込み優先順位は３であり、３以上の優先順位レベルを有する割り込みのみがストリーム０に割り込めることを意味する。やはり、スレッドを有してアクティブであるときのストリーム自身もしくはアクティブな管理ストリームは、優先順位レベルを編集することができる。
【００４４】
インテジャー、浮動小数点、およびブランチとラベルづけされた、図１Ｄのストリーム０についての優先順位レベル設定の下３つの列は、いくつかのタイプのプロセッサリソースへのアクセスのについてストリーム０の優先順位レベルを示す。これらの３つがすべてのタイプのプロセッサリソースを構成するわけではなく、したがっていくつかの実施形態ではリソース優先順位についてより多くの列がありうることは、当業者には明らかである。
【００４５】
その時点で、図示されたストリーム０は、インテジャーユニットについて７の（最も高い）優先順位を有しており、浮動小数点ユニットについて４の優先順位レベルを有しており、ブランチユニットについて３の優先順位レベルを有する。これらの設定は例としてのものであり、代替実施形態では、他のプロセッサリソースのために維持される優先順位がおそらくあってもよい。本発明の様々な実施形態においては、一時的に固定されたリソース割当が排他的に用いられてもよく、他の実施形態においては、優先順位が排他的に用いられてもよく、さらに他の実施形態においては、以上の２つの混合が用いられてもよい。リソース優先順位は、リソースについて競合になった場合に、最高の優先順位をもったアクティブなストリームがそのリソースを奪うことを意味する。
【００４６】
本発明のこの実施形態においては、他の制御ビットは、制御階層および状態を示すために用いられる。図１Ｅは、ストリーム０のためのそのような制御ビットを示す。この例では、図１Ｅのストリーム０についての制御ビットは、ストリーム０がその瞬間的な時に、マスタースレッドを実行しておりかつイネーブルされているがスリープモードにはないことを示す。これらのビットは表示的なものであり、主に他の動作しているアクティブストリームの参照のためのものである。例えば、あるアクティブストリームが他のストリームをディスエーブルすると、その過程で、動作しているストリームが、従属するストリームのイネーブル／ディスエーブルビットをセットする。もし、アクティブストリームが自分自身をスリープモードにするときは、そのスリープビットをセットしてからスリープモードに移り、アクティブなストリームが制御ビットをチェックすることによってそのストリームがスリープモードにあることを知り得る。あるアクティブなストリームが他のストリームに働きかけ得る制御は、いくつかの例では制御構成にビットをセットすることにより、たとえば他のストリームについてのリソース割当および／または優先順位を編集することなどにより、成し遂げられ、他の例では、他の方法で、たとえばアクティブでないストリームの新しいスレッドを開始するなど、ソフトウエア割込みを発行することを通じて成し遂げられる。
【００４７】
マスターストリームは、マスタースレッドを実行するがゆえにマスターストリームであり、アクティブなマスターストリームは、マスターストリームにとってスレーブのストリームであるほかのストリームに対して完全なアクセスと制御を有する。必ずしも、なんらかのストリームが制御構成を編集するためのパーミッションをマスターストリームに与える必要はない。マスターストリームは様々な義務を有することがあり、その一つが、好ましい実施形態では、マルチストリーミングプロセッサの最初のセットアップである。本発明の実施形態によるプロセッサを活用するシステムにおけるスタートアップおよびリセットの際、マスターストリームは、通常、ブート過程のなんらかのポイントで呼び出され、例えばストリームのための初期優先順位をセットするため、監視ビットをセットするため、および特定のストリームの特定のスレッドを開始するために動作する。いくつかのケースではなんらかのデフォルト設定が専用のＢＩＯＳコードを実行することによってなされるので、これらの義務は、システムごとに変わることができまた変わり、マスタースレッドは、さらなるセットアップ義務などのために呼び出され得る。
【００４８】
セットアップの後は、マスタースレッドは、通常、プロセッサのストリームの中で実行しつづけることを要しない。その終了まで達成したマスタースレッドは、それが占有するストリームで他のスレッドを開始するようセットしてリタイアすることができ、もしくは、他のアクティブストリームが割り込みサービスルーチン、他の種類の有用な機能などを実行するために使用するのに利用可能であるままにアクティブでないストリームを残して単にリタイアすることができる。マスタースレッドはいくつかの理由でリタイアした後に呼び戻される。例えば、リソース競合は、マスターストリームに解決を要求することがあり、割込みもしくは例外がマスターストリームに解決を要求することがある。いくつかのシステムのマスターストリームがオペレーティングシステムもしくはその一部、またはシステムＢＩＯＳによりロードされアクティブになったルーチンを実行していることがありうることも当業者には明らかである。本発明の実施形態によるいくつかのシステムでは、すべてのストリーム間制御機能をディスエーブルにし、プロセッサが本明細書で教示する制御能力のないプロセッサとして動作するることを可能にすることもできる。
【００４９】
いくつかの実施形態で、特定の固定された機能性があってもよい。例えば、本発明によるプロセッサは、常に１つのストリ−ムをマスターストリ−ムとし他のストリームはそうしないように配線することができる。配線は、特定の機能性が、シリコン装置およびそれらの接続において実現されるハードウエアリソースによって事前設定されることを意味する。他のスレッドを特定のストリームへ特別に割当ることを設定することもできる。そのような場合には、特定のリソース優先順位および／または割り当てを設定することができ、もしくは本明細書で教示するストリーム間機能性のいずれか他のものも設定することができる。そのような事前設定は、たとえばネットワークルータなどの高度に専用化したシステム用途にとっては非常に望ましい。
【００５０】
本明細書の教示に従って、当業者にとっては、制御データを表現し、格納し、アクセスする多くの方法が存在することが明らかである。ここで提供する図示は例としてのものである。好ましい実施形態では、制御データマップを直接プロセッサチップ上のシリコン装置に実現する。とりわけ制御データへのアクセスが早いという理由からこのような構成が好まれる。しかしながら、いくつかの実施形態では、制御ビットマップはシステムのいずれかのアクセス可能なメモリ装置、たとえばＲＡＭの他に使用されない部分やフラッシュカードメモリなどにもあってよい。
【００５１】
本発明の実施形態によるシステムにおけるマスタスレッドの概念および存在を上述してきた。すべてのほかのスレッドはマスタースレッドのスレーブであり、したがって、一のマスターストリーム以外の全てのアクティブストリームは、マスターにとってスレーブストリームである。しかしながら、マスタおょびスレーブ以外のほかの制御レベルも存在する。上の教示から推測できるように、特定のストリームに監視制御を許し、他のストリームへの監視責任を果たすことを期待することができる。上述の本発明の実施形態における監視ビットの状態は、監視制御の粒度を反映する。
【００５２】
マスタスレッドが最初のセットアップおよびスレッドのストリームへのロードなどの目的を追求しえ、衝突や例外を解決するために戻りうることは上述した。しかしながら、いずれかほかのプロセッサシステムと全く同様に、全体のシステム機能は一以上のアプリケーションを実行するためのものである。汎用コンピュータにおいては、多くのアプリケーションがありえ、コンピュータの使用も同様に多い。利用者は、インターネットをブラウズし、電子メールを送受信し、絵をかき、写真を処理し、文書を作成し、さらに多くを行うことができる。通常、各アプリケーションは特定の機能に専用であり、アプリケーションスレッドは、アプリケーションが呼ばれたときに、プロセッサの一以上のストリームを占有する。
【００５３】
例えば、パケットデータネットワークのデータルータなどのより専用のシステムでは、比較的アプリケーションは少なく、機械の機能は、通常、ユーザが開始する以外のいくつかの方法で配列される。例えば、データルータでは、機能を、処理し転送するために受信したデータの性質に従って呼び出すことができる。
【００５４】
本発明のある一態様によれば、すべての実施形態において要求するわけではないが、ソフトウエアを、本発明の実施形態によるマルチストリーミングプロセッサの新規で独特の制御機能を最大限に利用するために特別に高度化することができる。また、プロセッサで実行しているいくかのソフトウエアをこの発明の実施形態により高度化することができ、他のソフトウエアは高度化することができない。通常、本発明の実施形態によるマルチストリーミングプロセッサに組み込まれた新しい制御および状態機能と協働するための特定のコードを有する、少なくともオペレーティングシステムもしくはマスタスレッドまたはその両方が存在する。
【００５５】
図１Ａから１Ｅを参照して上述した制御データリソースおよび機能が与えられれば、全てのストリームが対等で全く公平なものから多くの機能が事前設定された可変でない高度に専用のものまで、実現しうる広い構成バリエーションがある。たとえば、本発明によるいくつかのプロセッサでは、一のストリームたとえばストリーム０は設計により常にマスタストリームであってもよい。マスターストリームが全てのプロセッサリソースへの完全なアクセスを有しかつ全てのほかのストリームの制御データを操作できる一方、他のどのストリームもマスターストリームの制御機能を変更できないので、図１Ｂから１Ｅのストリームのために示し上述したデータビットおよび値は、専用のマスターストリームに対して実現する必要がない。
【００５６】
上述の説明および例としてのアーキテクチャが与えられれば、本発明以前には利用可能でなく、現在では実施されうるストリーム間通信および制御機能の広いバリエーションがある。例えば、いずれか一のアクティブストリームが、その必要性からそれ自身のリソース割当および優先順位を操作することができ、これはそのストリームで実行するスレッドの性質および他のストリームで実行するためのもしくは実際に実行している利用可能なほかのスレッドの性質に、密接に関係する。また、アクティブストリームは、可能な影響についての事前の知識により他のストリームを開始し、イネーブルし、ディスエーブルし、割込み、分岐およびジョインすることができる、というのは、各アクティブストリームは他のストリームのための制御データ設定をチェックできるからである。提供される大きな利点は、プロセッサリソースの単なる使用よりもむしろ実時間効率を最大化する能力である。すなわち、ここで、システムの目的について取り上げることができる。プロセッサは、歴史的に、プロセッサリソースを最大化するよう設計されてきており、しばしば、正しくない仮定においては、最大化により同様にシステムの目的を必ず取り上げる。しかしながら、マルチストリーミングプロセッサが低い優先順位のタスクを効率的に達成するのに十分にかかわる一方より高い優先順位のタスクが不適当な注意を受け、従ってシステムの目的を適当には取り上げないことを理解するのは容易である。
【００５７】
本発明の実施形態では、並列に実行する他のスレッドを必要とする、もしくはそのスレッドによって高度化されうることがあるスレッド（アプリケーション）を実行するアクティブストリームは、従属スレッドを呼び出し、利用可能なストリームで開始することができる。一例は、ＭＰＥＧビデオクリップを有するＷＥＢページにアクセスしているＷＥＢブラウザである。本発明の実施形態によるプロセッサの一のストリームにおいて実行するブラウザは、利用可能な一のストリームで実行するためにＭＰＥＧプレイヤーを呼び出すことができる。データ制御ビットおよび値の状態は、ＭＰＥＧプレイヤーのストリームの選択においてブラウザストリームをガイドする。ブラウザは、例えば、より高い優先順位を有するスレッドを実行するアクティブストリームを組み入れることはできない。しかしながら、いつでも割り込みできるという制御データビットを設定しているストリームは組み入れることができる。
【００５８】
この実施形態の動作を、新しいスレッドをフォークするなどの典型的なタスクを成し遂げるための一連の操作を追うことによって説明することができる。スレッドは、他のストリームで実行するために他のスレッドをフォークすることができる。例えば、オペレーティングシステムは、アプリケーションプログラムをフォークすることを望むことがあり、もしくは、アプリケーションがサブタスクすなわちスレッドをフォークする必要がある場合がある。例外に遭遇したスレッドはその例外を処理するためのプロセスをフォークすることができる。
【００５９】
本発明の実施形態におけるフォークおよびジョイン操作のための好ましい方法を図２Ａに示す。図１Ａのストリーム１のスレッドが新しいスレッドをフォークしているものとする。このため、監視スレッドとしてのストリーム１は、ステップ２０１で使用するアイドルストリームを要求し、ステップ２０２でそのようなストリームが利用可能になるまで待つ。ほとんどの場合、待つことにはならない。ストリーム１は、例えばステップ２０３におけるストリーム２などの、利用可能なストリームの番号を受け取る。いくつかの状況においては、待つ限界が必要とされ、その限界の後は、いずれのストリームも利用可能にならないと、代替的なアクションが採用される。しかしながら、この例については、ストリームがすぐさま利用可能であるもしくは妥当な間隔で利用可能になるものと想定される。
【００６０】
新しいスレッドを実行すべくストリーム２を初期化するため、アクティブストリーム１は、新しいスレッドにおける最初の命令のアドレスを割り当てられたストリームのプログラムカウンタにロードし、かつ、新しいスレッドのコンテキストのほかの構成要素をステップ２０４でプロセッサリソースの適当な要素にロードして、ステップ２０５でストリーム２のために優先順位マップをセットする。ストリーム１は、ステップ２０６においてストリーム２のための監視制御ビット１０７をセットすることもできる。（あるいは、ストリーム２で実行する新しいスレッドはステップ２０８の後でそのビットを設定することもできる）。ストリーム２は、監視スレッドがスーパバイザとして動作するのを可能にするようセットされた監視制御ビットを有しなければならず、スーパバイザの監視制御ビットは制御されるスレッドがスーパバイザに割り込むのを可能にするようセットされなければならない。これらの初期化ステップがなされると、監視スレッドは、ステップ２０７においてストリーム２の新しいスレッドを開始する。あるいは、ストリーム２を内部もしくは外部イベントを待っているスリープモードにおくことができる。新しいスレッドは、ステップ２０８でストリーム２で実行を始める。ステップ２０９およびステップ２１０で両方のストリームが独立かつ平行に、ジョインが要求されるまで実行する。この例では、ストリーム１で実行するスレッドが最初に終了するものと仮定する。
【００６１】
監視スレッドがフォークされたスレッドをジョインする必要があるとき、まず、フォークされたスレッドがいまだ実行中かどうかを調べるようチェックする。もし、実行中であれば、監視スレッドは、ステップ２１１でそれ自身をスリープにおく命令を実行し、ストリーム制御ビット１１８のスリープビットをセットする、ついで、フォークされたスレッドからのジョインソフトウエア割込みを待つ。フォークされたスレッドは、ステップ２１２でジョイン割込みを送り、監視スレッドは、割込みを受け、ステップ２１３で目を覚ます。スーパバイザはジョイン操作をステップ２１４で完了する。最後に、フォークされたスレッドはステップ２１５で終了し、他のスレッドによる利用のためにそのストリームを解放する。
【００６２】
図２Ｂは、フォークされたストリームが監視ストリームより前に終了するもう一方の場合について図示する。この場合、フォークされたストリームが終了すると、すぐにジョイン割込みを送る（ステップ２１６）。その割込みは監視ストリームが終了するまで保留されたままとなり、ついで、ステップ２１７で割り込みがサービスされ、ジョインが完了する。レジスタが、「電子プロセッサのためのレジスタ転送ユニット」と題され、１９９９年１月２７日に出願された同時継続の優先権主張の基礎となる出願に記載されるようにバックグラウンドでロードされ、格納される場合、コンテキストがいまだロードされていない新しいスレッドをフォークするプロセスは、図２で示すステップから図３で示すように修正される。
【００６３】
図３に示すように、プログラムカウンタおよびコンテキストをセットするためのステップ２０４が除外されていることを除けば、ステップは、図２Ａおよび図２Ｂにおけるステップと同一である。ステップ２０６の後に、新しいステップ３０１において、スーパバイザは、レジスタ転送ユニット（ＲＴＵ）に、新しいストリームのためにコンテキストをロードするよう知らせる。これらの動作が完了すると、スーパバイザはステップ２０９で他の操作を続けることができる。
【００６４】
ＲＴＵは、ステップ３０２でコンテキストの切り替えを行う。ＲＴＵが新しいストリームのコンテキストをロードすると、ＲＴＵは新しくロードしたレジスタファイルをアクティブにすることができ、やはり監視ストリームとは独立にステップ２０８において新しいストリームを開始することができる。図２のステップ２０７は、したがって除去される。残りのステップは図２Ａと同一であり、スーパバイザが最初に終わるものと想定する。そうでない場合は、図２Ｂと同一である。同時継続出願の図２と同様に、ストリーム２によって先に利用されたレジスタファイルはセーブされる。上述の実施形態は、本発明の範囲内で実施され得る多くの実施形態の例示的なものである。当業者は、本明細書で最初に教示される強力なアーキテクチャコンセプトが、シングルチップシステム、マイクロプロセッサ、コントローラ、ルータ、デジタル信号プロセッサ（ＤＳＰ）、ルーティングスイッチおよび他のネットワーク装置および他の特殊用途のために設計されたプロセッサを含むがこれらに限られない、多くのタイプのプロセッサに適用可能であることを認識するであろう。この発明の教示を、簡単なワンチップ完結システムから複雑なスーパーコンピュータプロセッサまでの、あらゆるサイズのプロセッサと関連して実施することができる。本発明は、小さいシステムのために簡単な高度に専用化した形式で実現することができ、もしくは、大きいシステムのために複雑で洗練された形式で実現することができる。マスタおよび監視ストリームがスレーブストリームのリソースの使用を制御するよう定義およびイネーブルすることにより、プロセッサを、特定のソフトウエアおよびソフトウエアの組合せの要件に合わせるため、例えば、厳格なタイミング要件に合わせるために、動的に構成することができる。例えば、ストリームにプロセッサ全体の能力のあるパーセント、すなわち特定のリソース又はリソースクラスの利用率がが保証される。したがって、新しいアーキテクチャにより、処理リソースの効率的な使用と特定スレッドの実行の最適化のバランスをとることができる。
【００６５】
優先順位の使用のさらなる例として、図１Ａによるプロセッサを具体化するパケットデータネットワークで使用するためのルータを考える。ルータプロセッサの各ストリームは、ストリーム０でマスタとして実行する制御プログラムを除き、３つの異なるタイプの別個のパケットフローを処理する。３つのスレーブストリームの各々が、パケットのタイムリーな転送に関する異なるサービス保証を有する異なるプロトコルを用いてパケットを処理する。特定のプロトコルおよび処理されているサービスクラスに対して、インテジャーユニットへのアクセスがサービス保証を満たすことに関して大きな影響をもつことを想定する。したがって、マスタは、最も高いサービス保証を有するストリーム１の優先順位マップを値６に設定し、ストリーム１に他のストリーム（マスタを除く）より高い、インテジャーユニットへのアクセス優先順位をあたえる。次に最も厳しいサービス保証を有するストリーム３は、より低い優先順位５を有し、ストリーム２が最も低い優先順位３を有する。最初に優先順位をセットした後、マスターは各プロトコルのスループットをモニタし、サービス保証が満たされているのを保証し、必要なときにさらに優先順位を修正する。したがって、スーパバイザは、多種多様なプロトコルおよびサービスクラスのサービス保証を満たすように必要とされる優先順位を修正することにより、スレッドの現在の必要に基づいて動的にリソースをストリームに割り当てることができる。サービス保証がハードウエアではなく監視ソフトウエアを用いて満たされるため、新しい要求が出てきたときに、ルータを容易にアップグレードすることができる。
【００６６】
優先順位の利用の他の例を、さらに、データルータシステムにより説明することができる。データパケットを処理するためにストリームから一以上のスレッドが利用可能である、４つのストリームを有するシステムを考える。コンテキストが、レジスタファイルにロードされてしまっており、着信するデータパケットを処理するための４つのストリームの各々においてスレッドを開始するためストリームと関連づけられていると想定する。
【００６７】
データルータの分野で知られているように、すべてのデータパケットが同等の処理を必要とするわけではない。いくつかのパケットは受信されたときに転送することだけが必要である。他のパケットは、異なるフォーマットへ再構成する必要がある。さらに他のものは、例えば、暗号化／解読する必要がある。そのパケットを処理するためのワークフローを決定するパケットのタイプは、通常、パケットのヘッダに含まれ、スレッドコンテキストがレジスタファイルにロードされ、レジスタファイルがストリーム（アクティブストリーム）と関連づけられかつデータパケットについて処理が開始された後にのみ、タイプおよび処理の範囲がプロセッサに既知となる。
【００６８】
本発明の好ましい実施形態においては、図１Ｄに示し、上述したとおり、各ストリームは、より高い優先順位を有するプロセスのみがそのストリームで実行することができるということを意味する実行優先順位を有するものとされる。一態様において、プロセッサの各ストリームについての実行優先順位は、図１Ａのビットマップ１１５の一部における３つの編集可能なビットとして維持される。例としてのデータルータの場合、パケットが処理されるべく到着すると、パケットのためのコンテキストがレジスタファイルにロードされる。これは、優先権の基礎となる米国特許出願第０９／２４００１２号明細書の教示によるレジスタ転送ユニット（ＲＴＵ）により好ましい実施形態で行うことができる。
【００６９】
直前に述べたように、パケットの性質を知り得る以前にデータパケットの処理を開始する必要がある。したがって、パケットが到着し、レジスタファイルがロードされると、各コンテキストは、最初の高い優先順位を与えられる。例えば、７段階では、各々の最初のコンテキストは６の優先順位を割り当てられる。
【００７０】
次に、ストリームが利用可能になると、レジスタファイルの優先順位およびストリームの実行優先順位に従って、レジスタファイルがストリームと関連づけられる。レジスタファイルをストリームと関連づけると、ストリームにおけるコンテキストスレッドを開始し、アクティブなストリームとなる。次に、ストリームの優先順位が、ロードされたコンテキストの高い優先順位（この例では６）に設定される。新しくロードされたパケットの処理が開始すると、そのパケットが実際にファーストパケットであり、高い優先順位が実際に適切であることを決定でき、この場合、処理を完了まで続ける。本発明では、パケットの処理の完了時に、ストリームで開始される次のコンテキストが最高の優先順位を有する待ちコンテキストであることが望ましい。これを、この例では、コンテキストがロードしもしくは実行優先順位が０となるまで実行優先順位を選択的に低くすることにより行う。０に到達する唯一の場合は、任意の優先順位の待ちコンテキストが全くない場合である。この状況では、ストリームは、コンテキストが利用可能になるまで、アイドルのままである。
【００７１】
この例では、パケットの処理の終了時に、実行優先順位が６の場合、実行レベルは５に、次いで４などとリセットされ、これにより、ロードされる次のコンテキストが最も高い優先順位レベルを有する待ちコンテキストであることを保証する。処理が開始すると、しかしながら、パケットが中間の優先順位に値するタイプであることを決定することがある。このとき、ストリームで実行中のスレッドは、実行優先順位をたぶん４に下げる。優先順位４より高い待ちコンテキストがない場合、アクティブストリームは、データパケットを完了まで処理しつづけ、上述の例に従い、完了すると、ストリームは実行優先順位を３、ついで２、などと新しいコンテキストがロードされるまで実行優先順位を下げる。しかしながら、新しいパケットが到着すると、新しいコンテキストは６の初期優先順位を与えられるので、新しいパケットの到着はコンテキスト切り替えを強制し、ストリームのより遅いパケットの操作を止め、そのかわりに、新しい、より高い優先順位のデータパケットの処理を開始し、ストリームの実行優先順位を６にリセットする。
【００７２】
コンテキスト切り替えが起こる場合、セーブされるコンテキストはまだ優先順位４を有しており、上述のように、通常ＲＴＵの制御下で、さらなる処理のためストリームに再割当される機会を待つ。もちろん、新しく着信するデータパケットがより速いパケットである保証はないが、そうである一定の確率がある。新しいパケットがより速いパケットであると、システムの目的が高められる。そうでない場合、次に、やはり、目下優先順位レベル６であるアクティブストリームが自身の実行優先順位を再び下げる、新しくロードされたパケットの実行を潜在的に遅らせ、より速いパケットを処理しようとする。新しいパケットは、例えば、解読を要求するとても遅いパケットであることがある。このとき、アクティブストリームは、実行優先順位を２に下げ、新しいパケットが処理のために到着した場合、コンテキスト切り替えをやはり強制し、この場合、コンテキストは、遅いパケットのために２の優先順位でセーブされ、遅いパケットは、ついで、優先順位による処理機会を待つ。ストリームが実行優先順位２で実行中で、新しいパケット（６）は到着せず、しかし、４の優先順位を持った待ちコンテキストがある場合、４のコンテキストが、２の実行優先順位をもつストリームより優先する、などとなる。
【００７３】
このように、たとえコンテキストがロードされかつ各新しく着信するデータパケットについて処理が開始するまでタイプを知りえないとしても、パケットをタイプに従う優先順位により処理することができ、データルーティングアプリケーションにおけるシステム目的を達成するための新しい方法を提供する一方、プロセッサの効率を保証する。
【００７４】
他の多くの有用な機能が、ストリーム間制御および通信に関して本発明の教示と整合する。例えば、専用アプリケーションのための、固定マスタ／スーパバイザと固定スレーブストリームを伴う簡単な２ストリームコントローラにおいては、スレーブストリームのための単一のスーパバイザ制御ビットにより、マスタストリームに、リソース制御の有用なタイプ、例えば、浮動小数点ユニットへのアクセスを許す一方で、監視制御ビットを用いて重要な期間の間、そのような制御をスレーブが停止できるようにする。
【００７５】
監視制御ビットおよびストリーム制御ビット機構を通じて、あるストリームが他のストリームに対して及ぼし得る制御のタイプには制限がない。システムの目的に依存して、単一タイプの制御もしくは多くの数の制御が適切となる。付加的な制御が、例えば、グローバルレジスタやグローバルメモリの共有、メモリ保護、割込み優先順位、割込みマスクへのアクセス、割込みもしくは例外とストリームの間のマップへのアクセスを調節することができる。一以上の低パワーモードを有するプロセッサにおいては、パワー制御へのアクセスを追加の監視制御ビットおよびストリーム制御ビットを介して調節することができ、もしくはそのような制御をマスタースレッドを実行中のストリームのために排他的に予約することもできる。
【００７６】
あるストリームが他のストリームのリソースに対して及ぼし得る制御のタイプはまた多くの形式をとることができる。最も簡単な形式のうちのひとつにおいては、固定マスタ／スーパバイザと固定スレーブストリームとをもつ例えば専用アプリケーションで用いるための簡単な２ストリームコントローラでは、スレーブストリームのための単一のストリーム制御ビットは、マスタが全てのリソースの完全な利用を必要とするときに、命令シーケンスの間スレーブをディスエーブルにする能力をマスターストリームに与える。
【００７７】
優先権の基礎となる米国特許出願第０９／２１６０１７号明細書に記載された任意の形式の優先順位およびスケジューリングを、本発明による新しい教示と組み合わせて実施することができる。そのような優先順位が実現されなくても、一時的に一以上のリソースへのほかのストリームのアクセスを直接ブロックすることによりより簡単な制御の形式を働かせることができる。この場合、優先順位を表す監視制御ビットはリソース制御を表すビットで置き換えることができる。優先順位マップは、一時的に一以上のリソースもしくはクラスまたはリソースへのアクセスを拒否するために使用する一以上の制御ビットで置き換えることができる。例えば、あるストリームが浮動小数点ユニットの排他的な使用を必要とするとき、そのストリームは他のストリームのスーパバイザとなることができ、ストリームが排他的なアクセスを必要とする間、他のストリームの各々における浮動小数点ユニットへのアクセスを拒否するリソース制御ビットを設定することができる。他の部分的にブロックされたストリームが浮動小数点命令に出くわした場合、命令スケジューラが命令の実行を、そのストリームのための浮動小数点リソース制御ビットが監視ストリームによってリセットされるまで、停止する。
【００７８】
マルチストリ−ミングプロセッサでの割込みと例外処理
割り込みと例外の分野について、上のまとめた開示において短くではあるが説明した。しかしながら、すべての多くの新しい程度の自由度およびそれによってもたらされた多様性により、複数のストリームの存在は、割込みと例外が関係するかなりの複雑さをもたらす。本発明者は、すべてのタイプのマルチストリーミングプロセッサのアーキテクチャにおいて重要な見落とされた分野が存在することを確認しており、この分野には、上述のタイプには限られず、プロセッサ外の装置、例外、およびストリーム間通信を収容するための一般的な方法として、個々のストリームによる割込みの柔軟で順番に沿った取扱いを含む。したがって、本発明者は、割込みおよび例外の調整とマッピングを介して機能性を拡張するため独特かつ強力な装置および方法をさらに提供する。これらの新しい技術を、以下に、実施可能となるように詳細に述べる。
【００７９】
割り込みおよび例外に関する本発明の実施形態において、発明者はいくつかのタイプを認識する。
外部：割り込みが、プリンタインターフェース、モデム、もしくは他のＩ／Ｏ装置などプロセッサ外の装置によって生成される。
内部：コードのセクションを迅速に呼び出したりスレッド間で通信するなどの目的で意図的に割り込みを発生する特別な命令をプロセッサによって実行する。そのような割込みはソフトウエア割込みとしても知られる。
例外：命令の実行もしくはハードウエアエラーが原因で、特別な例外イベントが処理中におこる。例えば、命令がある数を０で割ろうとすることがあり、戻りのスタックがオーバーフローすることがあり、メモリからフェッチしようとする試行がメモリパリティエラーを起こすことがある。
【００８０】
ソフトウエア割込みの領域においては、マルチストリームプロセッサのコンテキストで、本発明の実施形態では、あるストリームで実行しているスレッドは、他のストリームに割り込むことができる。本明細書の説明では、ある（アクティブな）ストリームが、アクティブであってもよく、アクティブでなくともよい、他のストリームに割り込むことができるとされる。この機構は、本発明の実施形態において、特別のイベントの処理を始めるためにもしくはコードシーケンスの特定の場所で使用される。いくつかの例では、アクティブストリームは、このストリーム間割込み能力を用いてプロセッサの制御を得、他のストリームのスレッドの実行に対して優先権を得たり、実行をストップするようにする。他の例では、ストリーム間割込みを、あるストリームによって用い、いくつかのタスクが性能もしくは応答を改善するため他のストリームによって実施されるように要求することができる。内部の、ストリーム対ストリーム割込みの例として、アプリケーションが他のスレッドもしくはタスクを実行する繰り返しのかつ頻繁な必要があるような場合における、あるストリームでのアプリケーションプログラム（スレッド）の実行を想像することができる。通常、従来技術におけるそのようなプロセスは、タスクを呼び出し、コンテキストを切り替え、タスクを処理し、ついで元のスレッドにもどるために別のコンテキスト切り替えを実施することによって達成された。本発明の実施形態では、各ストリームのための専用のレジスタを有しているので、主なアプリケーションをあるストリームにマッピングすることができ、他のタスクを別のストリームにマッピングすることができ、タスクが必要なときに第一のストリームが第二のストリームを割り込みし、かなりのプロセッサオーバーヘッドを回避する。
【００８１】
当業者は、これがストリーム間割込みの多くある例の一つにすぎないことを理解するであろう。そのようなマッピングとストリーム間活動を達成するために必要な方法およびハードウエアの構造を、以下により詳細に説明する。
【００８２】
ストリーム間割込みの機構の拡張において、本発明の実施形態では、アクティブなストリームは、例外処理を他のストリームに明渡すことができる。このプロセスでは、例外に直面しているストリームが、例外処理のためにマッピングされたストリームに割り込み、例外処理ストリームが完了するまで待った後それ自身の処理を続ける。この独特の能力が、特に実時間システムでは重要であり、コンテキストをかえるオーバーヘッドを回避することができる。このとき、構造化された例外処理をハードウエアで実施することもできる。
【００８３】
外的割込み
図４は、本発明の一実施形態の一般的な割込みマッピングおよび処理を示すアーキテクチャの図である。この図において、０、１、２および３とラベルづけされたストリーム４０１は、図１Ａのストリーム１０３と同じ４つのストリームである。外的割込みのために、プロセッサは、プロセッサ外の装置によって生成される外部割込み４０５を検出するための割込み検出論理４０３を含む。割り込み検出論理は、割込み論理４０７と通信する。いくつかの実施形態における論理４０７は割り込みマッピングデータ４０９と通信し、マッピングデータ４０９はいくつかの実施形態において図１Ａの制御マップ１１５の一部である場合もあるが、いくつかの実施形態ではプロセッサ上もしくは外の別個のエンティティであることもある。割り込み論理は個別のストリームに割り込み、個別のストリームは論理パス４１１によって応答する（認める）。
【００８４】
外部割込みとしては、上で短く述べたように、割り込み（４０５）が、プロセッサ外のソースによって生成され、本発明の実施形態に従い割り込み検出論理４０３によってマルチストリームプロセッサにおいて検出される。この検出はいくつかの方法のいずれかで行ってもよい。外部装置は、例えば、プロセッサへの入力ピンを有するそれぞれの専用割込み線に働きかけることができ、検出を、例えば電圧変化のリードエッジもしくはトレールエッジで行うことができる。割り込み発行のほかの手段については、本発明者に知られている。
【００８５】
一度外部割込みが検出されると、論理４０３が割り込みの受け取りを論理４０７に通知する。マルチストリーミングプロセッサの技術分野で新しいいくつかの可能な機構の一つに従い割り込みを処理することはこの実施形態の論理４０７のタスクである。詳細には、割込み論理４０７が割り込みを受け取り、割り込みのタイプおよび以下の機構の任意の組合せに応じて、どのストリームもしくは複数のストリームに割り込むかを決定する。
静的マッピング：割り込みが特定のストリームにマッピングされ、このマッピングは固定であり変更可能でない。例えば、３つのタイプの割込みと２つのストリーム。タイプ１の割込みがストリーム２にマッピングされ、タイプ２の割込みがストリーム１にマッピングされ、タイプ３の割込みはストリーム１および２の両方にマッピングされる。好ましい実施形態では、この種の静的マッピングを論理４０７（配線）で特定の論理装置により達成し、設計時に固定する。
プログラマブルマッピング：割り込みが特定のストリームに、プログラミングビットマップもしくはデータストレージによりマッピングされる。この変形形態では、割込みマップ４０９があり、割り込み論理４０７がこのマップを参照して受け取った割り込みにつき、どのストリームもしくは複数のストリームに割り込むべきかを決定する。このマッピングは一般に、ブートアップ時もしくはオペレーティングシステムによってなされ、割込みが起こる前に固定される。一度割り込みが検出されると、このマッピングが照会され、適切なストリームが割り込まれる。例えば、３つのタイプの割込みと２つのストリームを想定する。タイプ１の割込みはストリーム２にマッピングすることができ、タイプ２の割込みはストリーム１にマッピングすることができ、タイプ３の割込みはストリーム１および２の両方にマッピングすることができる。後の時点で、ストリームが異なるスレッドを実行すると、タイプ１およびタイプ２はともにストリーム１にマッピングされ、タイプ３はストリーム１および２の両方にマッピングされる。この場合、マップ（４０９）は、マッピングを変更するためにオペレーティングシステムなどのソフトウエアによって変更される。
動的もしくは条件付マッピング：この場合、割込みは論理を用いることによって特定のストリームにマッピングされ、この論理は、割込みが起こった時点でのマシンの状態を認識し、割込みが発生したという事実および、例えば、割り込みのタイプなどのほかのパラメータによってもマッピングを生成する。マッピングは、割込みが起こるたびに動的に生成される。動的なマッピングのため、処理するアルゴリズム（ファームウエアもしくはソフトウエアルーチン）があってもよく、もしくは論理が、論理４０７に通知される割込みの結果を変えるためにセット可能なビットおよびレジスタをもっていてもよい。例えば、割込みマッピングアルゴリズムは、割込みをアクティブでないストリームにマッピングすることもでき、アクティブでないストリームがないときには、もっとも低い優先順位のスレッドを実行中のストリームへマッピングすることができる。
【００８６】
一度論理４０７がマッピングを決定すると、ストリームは論理パス４１１で割り込まれる。当業者は、一度決定がなされると、割り込みがストリームへ発行されるいくつかの方法が存在することを認めるであろう。一度割り込みがストリームもしくは複数のストリームへ発行されると、ストリームは割り込みサービスルーチンを実行させるためにレディであることを認めなければならない。割り込みサービスルーチンに誘導することは、通常の技能をもった当業者にとってよく知られたプロセスである。この認容は異なるストリームについて異なる時間に起こりうる。あらゆる遅延は現在そのストリームで実行しているコードに起因し、もしくはストリームがその割込みを一時的にマスクすることもある。その割込みは、しかしながら、外部ソースが割り込みを働かせる間はペンディングのままである。割り込み検知論理４０３がこの振る舞いを制御する。複数のストリームが割り込みを認容するよう要求される場合、割込み論理は、すべてのストリームが認容するまで待ってから外部認容を送る。この振る舞いは、必要に応じて修正できる。すなわち、外部認容は、一のストリームのみか、他の任意の組合せで割込みを認識したのちに起こり得る。
【００８７】
各ストリームが割り込みを認容すると、割込み論理は適切なサービスベクトルをそのストリームに送る。このベクトルは、ストリームの各々について同一でも異なっていてもよい。ストリームが受け取ったベクトルに依存して、関連する割込みサービスルーチンがストリームにロードされ、実行を始める。したがって、異なるストリームは同一の割込みに対して異なる応答もしくは異なる振る舞いをなしうる。例えば、オーディオ装置が２つのストリームに割り込み、その一方が割り込みサービスルーチンに誘導し、オーディオデータをハードディスクドライブに格納する。他のストリームはオーディオ再生ルーチンに誘導することができ、オーディオデータを直接スピーカに向けることができる。
【００８８】
割り込まれた各ストリームがその割込みサービスルーチンを終了した後、ストリームは通常、どのスレッドであれ、割込みが発生する前に実行していたスレッドに戻る。やはり、異なるストリームは、戻るために異なる時間をかけることができる。
【００８９】
内部割込み
短く上述したように、内部割込みは、一般に、オペレーティングシステムからの特定の機能性を要求するためもしくはサブルーチンを実行するためにプログラムによって使われるソフトウエア割込みである。本発明の実施形態において、これらの割込みは、外部割込みについては、上述した程度の機能性により振る舞うよう管理される。アクティブストリームによって発行されるソフトウエア割込みは論理４０７によって処理され、割込み論理はこれらの割込みを取扱い、上述の３つのタイプに応じて割込みをマッピングする。マッピングに関するほかの変形形態は、割込みがソフト割込みを実行しているストリームにのみマッピングされるという特別な場合である。残りのステップは上記と同様である。
【００９０】
同期割込み
同期割込みは、上の場合の変形すなわち内部および外部の両方の割込みである。同期割込みは誘導段階において異なる振る舞いをする。同期割込みの場合、割込み論理は、割込みサービスルーチンを実行するためにストリームを誘導するのは、割込みがマッピングされた全てのストリームから認容を受信した後である。この振る舞いは、割込みへの応答を同期して開始することを要求するためである。例えば、デバッグ用割込み、すなわち、ストリームのうちの一で実行しているスレッドにブレークポイントがセットされたと考えられたい。デバッガは、安定した点、すなわちすべてのストリームがそれらの実行するいかなるスレッドの実行も停止している時点でのシステムの状態を見たいと思う場合がある。したがって、割込み論理は、全てのストリームに割込みを生成するが、すべてのストリームが認容を生成してはじめてストリームをデバッガサービスルーチンに誘導する。しかしながら、たとえその論理がすべてのストリームが追いつくのを待ったとしても、認容するストリームはさらなる実行を停止される。
【００９１】
例外
例外はストリームで実行中のコードによって生成され、通常エラー条件を示す。例外は常に実行するコードと同期しており、すなわち例外を生成するストリームは常に同じポイントで例外を生成する。しかしながら、例外に対する多くの異なった応答がありうる。
【００９２】
セルフ応答：これは、標準の非マルチストリーミングプロセッサにおけると同じである。ここでは、例外を生成するストリームが何を実行していてもストップし、例外処理ルーチンに誘導し、そこから実行コードを開始する。実行処理ルーチンが終了すると、ストリームは通常例外が起こったもとのコードの位置にもどり、元のスレッドが実行を続ける。
【００９３】
他のストリームへのブロッキングの送信：ここでは、例外を生成するストリームが現在のスレッドの実行を停止するが、例外そのものの認容は行わない。そのかわり例外が全てのほかのストリームにブロードキャストされる。例外を認容するようプログラムされもしくはマッピングされたいずれのストリームもこれを行って、例外処理ルーチンの実行を開始する。いずれのストリームも例外を認容しない場合、マスタスレッドに例外が送られる。マスタスレッドがすでに実行している場合、この時点でマスタスレッドは例外処理ルーチンに誘導する。マスタスレッドが実行中でない場合は、マスタスレッドはアクティブにされ、実行のためにストリームを割り当てられ、ついで例外を処理する。マスタスレッドは、他のスレッドがしない場合にも、常にあらゆる例外を認容することができる。このように構造化された例外処理をハードウエアで実現することができる。一度例外ルーチンが戻ると、元のストリームが通知され、ついでその実行を再び始めることができる。この方法は、主として、すべてのストリームがある例外を処理するために必要なすべてのハードウエアリソースにアクセスできず、したがって能力のないストリームが能力のある一のストリームに例外を伝達しなければならないという理由にもとづいて実現されている。
【００９４】
他のストリームへのノンブロッキングの送信：この方法は、上述のものと類似しているが、例外を生成する元のストリームはブロックされない。元のストリームは例外を生成しかつ実行しつづける。例外処理は他のストリームもしくはマスタスレッドによって完了するよう保証される。この方法は、一般にオーバーフローなどの致命的でない例外に用いられる。例として、オーバーフロー例外について考えると、オーバーフローを生成するストリームが、例外を生成しかつ実行しつづけることを示すフラグをセットする。他のストリームは、例外を認容し、特定の値がオーバーフローした回数をカウントするカウンタを更新する。
【００９５】
いずれの例外も、上述の３つのカテゴリのいずれかにマッピングすることができる。このマッピングは、やはり割り込みについてと同一の技術を用いて行うことができる。例外も同期することができ、例外処理ルーチンは、例外がマッピングされるすべてのストリームが実行をストップしてしまい、例外を認容するまでは実行されない。
【００９６】
マルチストリームプロセッサに関するソフトウエアおよびハードウエア割込みおよび例外処理を伴う、上述の機構の実現は、いくつかの（プログラムマッピングの）例では、変更可能な制御ファイルを通じて部分的に達成される。図１Ａを参照すると、ストリーム間制御ビットマップ１１５が記載され、単一ビットの状態と複数ビットのビット値が、特定のストリームおよびイネーブル、ディスエーブル、優先順位などの機能と関連づけられる。割り込みおよび例外のマッピングおよび処理のいくつかの実施形態では、このビットマップは、割込みおよび例外の処理とマッピングに関する本明細書に記載された機能に拡張される。先に述べたように、ビットマップ１１５は、ビット値がアクティブストリームによって変更されうるような方法でハードウエアとしてマルチストリームプロセッサチップ上に実現されうる。他の実施形態では、ローカルメモリのファイルを、複数の割込み、割込み、および例外パラメータをマッピングするために用いることができる。そのようなビットマップの一部をマッピングのために用いる実施形態では、イネーブル、ディスエーブル、優先順位などが図１Ｂから図１Ｅに関して上の説明でマップしたように、単一のビットもしくは複数ビットのビット値を使用して、ストリームを割り込みおよび例外にマッピングすることができる。
【００９７】
本発明の趣旨および範囲内で上述の実施形態でなされうる多くの変形形態が存在することは当業者には明らかである。例えば、提供した例を超えて、ストリーム間の監視特性および関係を記録し、修正しうる多くの方法がある。また同様に、実施し得る制御の粒度に広い範囲などが存在する。
【００９８】
スレッド同期
背景セクションで述べたように、ＭＩＰＳアーキテクチャもしくは他の既知の慣例は、カウンタをインクリメントするなど、プロセッサがメモリの単一の値に原子性のあるリード−修正−ライト操作を実施するよう試行する際に、原子性を実現するために用いることができる。
【００９９】
本発明の実施形態においては、ＤＭＳプロセッサで実行する別個のストリームによってメモリ操作の原子性を実現するための方法を提供する。
【０１００】
図５は、原子性が従来のＭＩＰＳ命令の使用により実現される、従来の解決策を示す図である。図５は、２つの単一ストリーミングプロセッサ、すなわちプロセッサ５１５（プロセッサＡ）とプロセッサ５１７（プロセッサＢ）を示し、それぞれが共有メモリ５１１の同一のメモリ位置５１３をインクリメントする。
【０１０１】
この例で、メモリ位置５１３はメモリカウンタの値を格納し、以降カウンタ５１３と呼ぶことにする。図５でも、一連のＭＩＰＳ命令がカウンタ５１３をインクリメントするために図示される。原子性の実現がなければ、起こりうる問題は、たとえば、もし、プロセッサ５１５がカウンタ５１３の値を読み、その値のインクリメントに進む場合、プロセッサ５１７は、第一のプロセッサが新しい値を格納する前に、同じカウンタ値を読み込むということである。この場合、カウンタの１だけのインクリメントが起こり得る。
【０１０２】
ＭＩＰＳアーキテクチャは、この状況に対処するための標準的方法を有している。当技術分野で知られる従来の方法はリンクされたロードおよび条件つき格納（Ｌｏａｄ　Ｌｉｎｋｅｄ　ａｎｄ　Ｓｔｏｒｅ　Ｃｏｎｄｉｔｉｏｎａｌ）命令を利用する。図５によって示される例において逐次のＭＩＰＳ命令に従い、プロセッサ５１５およびプロセッサ５１７が共にブロック５１９および５２１に示されるように、カウンタ５１３をインクリメントするよう試行していると想定する。ＭＩＰＳアーキテクチャの当業者は、ブロック５１９および５２１で示された命令行の各々によって意図された機能性を認識するであろう。
【０１０３】
示したように、プロセッサ５１７はカウンタ５１３を読むことができ、カウンタ５１３に格納された値をインクリメントすることもできるが、結果を格納することはできない、というのも、プロセッサ５１５が最初にインクリメントされた値を格納することになっていたからである。ブロック５２１に示される、プロセッサ５１７のためのリンクされたロード、条件つき格納シーケンスに従って、条件付格納命令の後のブランチ命令に留意されたい。プロセッサ５１５が最初にカウンタ５１３に書くことになっていたので、ブロック５１９で示したようにプロセッサ５１５は書くのに成功する。この条件は、他のどのプロセッサもプロセッサ５１５以前にはそのカウンタに書かない限り、存在する。同一のカウンタ５１３に書こうとするプロセッサ５１７は、プロセッサ５１５がその値を書いた後、ブロック５２１の格納命令後に含まれる失敗したという言葉によって示すように、格納するのに失敗する。ここで、ブロック５２１の第４行目に示される、ブランチ（ＢＲ）命令は、プロセッサ５１７にリンクされたロード命令（第一行）に戻り、再実行して、カウンタ値を再ロードするよう強制する。ＭＩＰＳのリンクされたロードおよび条件付格納命令シーケンスおよび他の命令セットの実質的効果は、すべての場合において、２つの異なるプロセッサがカウンタ５１３をインクリメントしようとすると、カウンタが正しく２回インクリメントされるということである。
【０１０４】
リンクされたロード、条件付格納命令シーケンスの問題は、上の例にしたがい、第２のプロセッサ（５１７）がプロセッサリソースを使用して、不必要な命令シーケンスを実施することである。これは、シングルストリーミングプロセッサに関する限りは大きな問題ではない。というのも、第二のプロセッサが第一のプロセッサが終了するまで単に待てばよいからである。しかしながら、本発明者にとって関心のある状況が存在し、リンクされたロード、条件付格納の標準的動作でも、図５のプロセッサＡおよびプロセッサＢにＤＭＳプロセッサ内のストリームが置き換えられたなら、大変な問題を生じ得る。
【０１０５】
図６は、ＤＭＳプロセッサの基本要素および動作を示す図である。本発明者に既知のそのようなプロセッサでは、命令は、通常、命令キャッシュ６０１から複数の動作ストリーム６０３へ取り出される。ＤＭＳプロセッサにおいては、各ストリームは、ソフトウエアスレッドを実行できるハードウエア機能である。スケジューラ６０５は、ストリームのための実行をプロセッサの機能リソースにマッピングする。このＤＭＳプロセッサにおいて、複数のストリームを実行する上で用いるために複数のレジスタファイル６０９が提供され、各動作ストリームは関連づけられたレジスタファイルをもつことができる。この独特なプロセッサのある実施形態では、レジスタファイルの数がストリームの数を超え、したがって、ストリーム動作に割り込むことなくコンテキスト切り替えが実施できる。
【０１０６】
スケジューラ６０５は機能リソース６０７へのアクセスを許す。いくつかの実施形態では、背景セクションで述べたように、リソースへのアクセスは様々な優先順位状態に応じてストリームに対して与えることができる。いくつかの実施形態におけるストリーム間制御ビットマップ６１５が、動作中にストリーム０から３がお互いをマイクロ管理できるように提供される。ＤＭＳプロセッサのこの例では、複数のストリームが、同時にもしくは非常に近接した時間にデータキャッシュ６１１の同一のメモリ位置を読んでかつインクリメントもしくは変更しようとする。この状況は、同一のメモリ位置の内容を読みかつ変更しようとする二以上の別個のプロセッサが、間違った結果を招き得るのと同一の困難性を招き得る。従来のＭＩＰＳ命令シーケンス（ＬＬ−ＳＣ）が原子性を実現するために用いられる場合、原子性のあるリード−修正−ライトシーケンスを実行しようとする複数のストリームの一以上が繰り返し再実行シーケンスに分岐して戻ることがあり、これにより、図５の例で示したように、プロセッサリソースを不必要に使うことになる。この場合は、しかしながら、別個のプロセッサの場合と反対に、一以上のストリームによる繰り返しのループはプロセッサの効率に影響を及ぼしうる。
【０１０７】
この状況において原子性と効率性を実現するために、本発明者は、原子性のあるリード−修正−ライトシーケンスが終わり、実行の結果を元のメモリ位置に格納するまではメモリ位置をロックする独特の方法を提供する。
【０１０８】
図７は、４つのストリーム（Ｓ１からＳ４）をもつ単一のＤＭＳプロセッサ７１１を図示するブロック図であり、２つのストリームがメモリリソース７１３にアクセスするモードで動作しており、本発明の実施形態によるハードウエアロック機能により高度化されている。
【０１０９】
本発明の実施形態によるＤＭＳプロセッサの中では、特定のメモリ位置に関する原子性のあるシーケンスを開始することを意味する命令を実行しているストリームが、そのメモリ位置にロックを生成し、そのロックは、原子性のあるシーケンスを終了する書戻し命令の実行の際に解放される。命令シーケンスは、ＭＩＰＳのリンクされたロード、条件付格納命令であってもよい。ＤＭＳプロセッサ内で実行するマルチスレッドのコードは、通常のワードを格納する命令を用いることによってなど、条件付格納命令を用いることなく原子性を保証することができる。しかしながら、マルチプロセッサＭＩＰＳ実装との互換性のために、ほとんどのソフトウエアが条件付格納命令を使用しつづけることが期待される。
【０１１０】
再び図７を参照すると、Ｓ３が最初にＬＬ命令をアドレス７１５に対して実行するストリームであれば、ストリームＳ３は上述のようにメモリ位置をロックさせる。Ｓ３に関する全体の原子のあるリード−修正−ライト操作は、以下のように書ける。
2004503864.tif 000003
【０１１１】
ハードウエアロック機構により、条件付格納命令は、いずれもまれである割り込みもしくはＴＬＢエントリの置き換えの場合を除き、常に成功する。他のストリームが同じ命令シーケンスを使って同じメモリ位置をインクリメントしようとする場合、第一のストリームが原子性のあシーケンスを完了するまでそのストリームはストールする。
【０１１２】
割込みは、原子性のあるシーケンス内でのストリームについてディスエーブルされる必要はなく、ストールされたストリームについてもディスエーブルされる必要はない。ストリームが現在ＬＬ命令の実行でストールされている場合、割込みを取り除くことができ、ロックビットおよびストールビットをクリアしかつＥＰＣはＬＬ命令をさす（すなわち、ＬＬ命令は割り込みサービスルーチンが戻ると再び実行される）。
【０１１３】
本発明の実施形態におけるＤＭＳプロセッサ内のメモリロックは、好ましい実施形態では、プロセッサのストリームの各々につきＤＭＳプロセッサに付加された一のレジスタの使用を通じて達成される。各ストリームのためのレジスタは、実行中のストリームの各々のために必要に応じてメモリアドレスを格納するために用いられる。さらに、ロックビットがあり、メモリアドレスがロックされていることを示し、そしてストールビットがあり、関連するストリームがストールされていることを示す。これらのレジスタおよび特別のビットを、本例（図６を参照）の４ストリームＤＭＳプロセッサのハードウエア構成を示す図８に図示する。好ましい実施形態では、４つ以上のストリームと４つ以上の関連するレジスタがあってもよい。
【０１１４】
本発明の実施形態においては、（例えば）ＬＬ命令があるストリームによって実行されると、関連するアドレスレジスタがそのストリームについて更新され、ロックビットがセットされる。加えて、全てのほかのＬＬアドレスレジスタのサーチが行われる。アドレスの合致が見つかると、ロックビットがセットされ、同一のメモリ位置について原子性のあるリード−修正−ライトシーケンスを他のストリームが開始したことを示し、第一のストリームがそのストールビットをセットし、ストールする。
【０１１５】
ストリームがストア操作を実施すると、そのストリームのためのロックビットがクリアされる。ロックビットがクリアされるといつでも、そのメモリアドレスについてストールしていたいずれのストリームのストールビットもやはりクリアされ、これによりストールされたストリームのための（例えば）ＬＬ命令をそのストリームについて完了することが可能になる。この場合、ＬＬ命令は再実行され、その結果は、指定されたレジスタ宛先に置かれる。
【０１１６】
（例えば）条件付格納命令が実行されると、もし関連ロックビットがセットされていなければ、そのＳＣ命令は失敗し、メモリ位置への格納は行われない。これは、通常、メモリ位置のためのＴＬＢエントリが置き換えられていた場合、割込みが取り除かれた場合、例外が発生していた場合、もしくはＬＬとＳＣの間に別のメモリ命令が存在した場合にのみ起こる。正当にデザインされたソフトウエアは原子性のあるリード−修正−ライトシーケンスを実現して、ＬＬ命令とＳＣ命令との間にメモリ操作が入らずかつ例外が発生しないようにすべきである。
【０１１７】
複数のストリームが同一のメモリ位置についてストールしている場合、ストールしていないストリームのためのロックビットがクリアされたときに再実行するために、全てＬＬ命令をスケジュールする。複数のＬＬ命令が同一のサイクルでディスパッチされ、かつメモリアドレスが合致し、かついずれのＬＬアドレスレジスタも合致しない場合、一がストールし、他が進むことになる。ＬＬ命令および格納命令が同一のサイクルで同一のアドレスにディスパッチされる場合、他にストール条件が存在しないと仮定すると、ＬＬ命令はメモリ位置の古い内容を得、格納はメモリ位置を新しいデータで書き換える。
【０１１８】
上述のハードウエア技法を用いれば、原子性は、リード−修正−ライトシーケンスに関して、ＤＭＳプロセッサの異なるストリームによって実現され、不必要なリソースの使用を排除することにより同様にある程度の最適化も実現される。
【０１１９】
休眠命令
上述のように、カウンタをインクリメントする例などメモリ位置が自動的に更新される必要があるのみであるＤＭＳプロセッサにおける状況では、すべての動作を単一のＬＬ／ＳＣシーケンスによって実現することができる。この場合には、ＤＭＳプロセッサはカウンタのインクリメントを望む第二のプロセッサを、第一のスレッドが格納を完了してしまうまでストールさせる。このストールはとても短く、ＳＣが失敗しても、カウンタをリロードするのに全くＣＰＵサイクルが浪費されない。
【０１２０】
いくつかの場合には、しかしながら、メモリロケーションについて、ビジーウェイトもしくはスピンロックをする必要があるかもしれない。例えば、テーブルにエントリを追加する必要がある場合、複数のメモリ位置が整合性のある方法で修正されかつ更新されなければならないことがある。この操作は、全テーブルのロックの実現にＬＬ／ＳＣシーケンスの使用を要求する。
【０１２１】
当技術分野では、セマフォ上のビジーウェイトは、通常、以下のような方法でＭＩＰＳにおいて実現されている。
2004503864.tif 000004
【０１２２】
この場合、スレッドは、０（セマフォがアンロックされていることを示す）であるリード結果で成功するまで、ＬＬ命令でアドレス指定されたメモリ位置上でビジーウエイトしている。その点では、セマフォをロックする１がメモリ位置に書かれる。好ましい実施形態では、複数のストリームがこのコードを実行するとき、最初のストリームがセマフォをセットし、続行する。この同じコードを実行している他のストリームは継続してメモリ位置をテストしながらビジーウェイトする。第二のストリームがセマフォを含むメモリ位置をロックしたため、このコードを実行する第三のストリームはストールする。アンロック操作は、対象とするアドレスに以下のように０を単に格納することで実現される。
Ｕ１：　　　　ＳＷ　　　０，（Ｔ０）
【０１２３】
このようなビジーウェイト状況では、（第二のストリームについて）反復的にメモリ位置をテストする、もしくは（第三のストリームおよびそれ以降のストリームについて）ストリームを完全にストールしてＣＰＵサイクルを浪費するより、各ストリームを明示的にストールするほうがより効率的である。
【０１２４】
これらの状況でＣＰＵの効率を増大させるために、本発明の一実施形態において休眠命令が提供され、メモリ位置の待ちが数命令より長くなることが予測される場合に用いられる。上述の例を以下のように書き換えることができる。
2004503864.tif 000005
【０１２５】
休眠命令は待つべきサイクル数である一の引数をとる。ストリームは、その期間だけ待ち、ついで再び実行のためにレディとなる。休眠命令は、休眠命令実行されるストリームに関連づけられたロックビットをクリアし、同一のメモリ位置のためにセットされたほかのストリームのあらゆるストールビットをクリアする。これにより、その同一のメモリ位置でストールされていたほかのストリームが先に進むことができる。
【０１２６】
割込みが休眠中に発生すると、スリープしているスレッドは、休眠命令の後の命令にセットされたＥＰＣを有する割り込みをサービスする。休眠命令はブランチの遅延スロットに置くことはできない。カウントフィールドがすべて１にセットされると、カウントするサイクルはなく、コンテキストは割り込まれるまで待つ。
【０１２７】
明示的なストールを強制することにより、休眠命令は、プロセッサリソースのより効率的な使用を可能にする。ビジーウェイトがとても長くなりそうな場合は、ストリームは、自身の状態をセーブし、他のスレッドに切り替えて、自分で先行するほうがよい場合がある。
【０１２８】
マルチプロセッサの考慮
本発明の実施形態によってイネーブルされた複数のＤＭＳプロセッサが共有メモリから共に実行する環境では、通常のＬＬ／ＳＣスレッドの同期機構は、ソフトウエアの観点から、単一のストリーミングプロセッサについてと同様に働く。ＬＬおよびＳＣ命令の対象であるメモリ位置は、共有されかつコヒーレントであるが排他的でないものとして構成されたページになければならない。ＳＣ命令が実行されると、ＳＣ命令は、無効信号を、システムのほかのキャッシュに送る。これにより、他のあらゆるプロセッサ上のＳＣ命令が失敗させる。コヒーレントなキャッシュの無効化はワードベースではなくキャッシュラインベースで起こり、したがって、メモリ位置が実際には修正されておらず、近くの位置だけが他のプロセッサによって修正されているときには、ＳＣ命令が一のプロセッサで失敗することが起こり得る。
【０１２９】
代替実施形態では、上述のロック機構は、各ストリームに関連づけられた一以上のレジスタで実現することができる。この場合、所与のストリームについて同時にセットされる複数のロックを有することが可能である。所与のロックについてのロックビットは、関連するストリームが、ロックビットのセットされたメモリ位置についてのＳＣ命令を実行するときにのみクリアされる。
【０１３０】
別の代替実施形態では、ロック機構は、レジスタの使用を通じてよりはむしろ、共有メモリリソースそれ自体の中に実現することができる。たとえば、共有キャッシュメモリはロックビットと各格納されるキャッシュラインのためのストリーム番号とを含むことができる。この場合、各キャッシュラインは、それがロックされているかどうかおよびどのストリームがそれをロックしたかを記録する。この実施形態のキャッシュラインはまたどのストリームがロックを待ってストールされているかを記録する。
【０１３１】
当業者には、実施可能なように詳細に上の例で説明した本発明による方法および装置が、スレッド処理およびストリーム割り当てに関して存在しうる内部優先順位の状態にかかわらず、いずれのＤＭＳプロセッサの中でも利用できることは明らかである。４つのみの処理ストリームを図６および図７に記載したＤＭＳプロセッサで示したが、この仕様のＤＭＳプロセッサには実際には８つの処理ストリームがある。発明者は、本発明の説明の複雑さを減らすため、この明細書において４ストリームだけを示すことを選択した。
【０１３２】
本発明の方法および装置は、共有メモリの同一のメモリアドレスにアクセスするよう試行する２つ以上のストリームがあるときはいつでも実施できる。本発明の趣旨および範囲は頭記の特許請求の範囲によってのみ制限される。
【図面の簡単な説明】
【図１Ａ】本発明の実施形態によるマルチストリ−ミングプロセッサの一般化された図である。
【図１Ｂ】本発明の実施形態による、制御認可データを例示している典型的なビットマップである
【図１Ｃ】本発明の実施形態による、ストリ−ムのためのリソース割当を示す図である。
【図１Ｄ】本発明の実施形態による、ストリ−ムのための優先順位を例示する図である。
【図１Ｅ】本発明の実施形態による、１つのストリ−ムのための制御インジケーターを示す図である。
【図２Ａ】一のストリーム中のスレッドが他のストリーム中のスレッドをフォークして後にジョインする方法を図示するフローチャートである。
【図２Ｂ】一のストリーム中のスレッドが他のストリーム中のスレッドをフォークして後にジョインする別の方法を図示するフローチャートである。
【図３】一のストリーム中のスレッドが特別のレジスタ転送を含むプロセッサの他のストリーム中のスレッドをフォークする方法を図示するフローチャートである。
【図４】本発明の実施形態において、割り込みマッピングと処理を図示するアーキテクチャの図である。
【図５】従来技術によるＭＩＰＳアーキテクチャによって原子性が実現される共有メモリにおいて単一位置をインクリメントしようとする２つのプロセッサを図示するブロック図である。
【図６】本発明者に知られかつ本発明に従って用いられるＤＭＳプロセッサの構成要素および相互接続性を図示するブロック図である。
【図７】本発明の一実施形態により、同一メモリ位置をインクリメントしようとする２以上のストリームを有する単一のＤＭＳプロセッサを図示するブロック図である。
【図８】本発明の一実施形態によるハードウエアロック機構を図示するデータテーブルである。
【図１Ａ】
2004503864.tif 000006
【図１Ｂ】
2004503864.tif 000007
【図１Ｃ】
2004503864.tif 000008
【図１Ｄ】
2004503864.tif 000009
【図１Ｅ】
2004503864.tif 000010
【図２Ａ】
2004503864.tif 000011
【図２Ｂ】
2004503864.tif 000012
【図３】
2004503864.tif 000013
【図４】
2004503864.tif 000014
【図５】
2004503864.tif 000015
【図６】
2004503864.tif 000016
【図７】
2004503864.tif 000017
【図８】
2004503864.tif 000018
【国際公開パンフレット】
2004503864.tif 000019
2004503864.tif 000020
2004503864.tif 000021
2004503864.tif 000022
2004503864.tif 000023
2004503864.tif 000024
2004503864.tif 000025
2004503864.tif 000026
2004503864.tif 000027
2004503864.tif 000028
2004503864.tif 000029
2004503864.tif 000030
2004503864.tif 000031
2004503864.tif 000032
2004503864.tif 000033
2004503864.tif 000034
2004503864.tif 000035
2004503864.tif 000036
2004503864.tif 000037
2004503864.tif 000038
2004503864.tif 000039
2004503864.tif 000040
2004503864.tif 000041
2004503864.tif 000042
2004503864.tif 000043
2004503864.tif 000044
2004503864.tif 000045
2004503864.tif 000046
2004503864.tif 000047
2004503864.tif 000048
2004503864.tif 000049
2004503864.tif 000050
2004503864.tif 000051
2004503864.tif 000052
2004503864.tif 000053
2004503864.tif 000054
2004503864.tif 000055
2004503864.tif 000056
2004503864.tif 000057
2004503864.tif 000058
2004503864.tif 000059
2004503864.tif 000060
2004503864.tif 000061
2004503864.tif 000062
2004503864.tif 000063
2004503864.tif 000064
2004503864.tif 000065
2004503864.tif 000066
2004503864.tif 000067
2004503864.tif 000068
2004503864.tif 000069
2004503864.tif 000070
2004503864.tif 000071
2004503864.tif 000072
2004503864.tif 000073
2004503864.tif 000074
【国際調査報告】
2004503864.tif 000075