JPH08249183A - 推論並列命令スレッドの実行 - Google Patents
推論並列命令スレッドの実行Info
- Publication number
- JPH08249183A JPH08249183A JP8011080A JP1108096A JPH08249183A JP H08249183 A JPH08249183 A JP H08249183A JP 8011080 A JP8011080 A JP 8011080A JP 1108096 A JP1108096 A JP 1108096A JP H08249183 A JPH08249183 A JP H08249183A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- thread
- instructions
- fork
- future
- 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
Links
- 238000012545 processing Methods 0.000 claims abstract description 17
- 238000004891 communication Methods 0.000 claims abstract description 11
- 238000000034 method Methods 0.000 claims description 65
- 230000001419 dependent effect Effects 0.000 claims description 24
- 230000003068 static effect Effects 0.000 claims description 21
- 239000000872 buffer Substances 0.000 claims description 14
- 239000003550 marker Substances 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 17
- 230000008901 benefit Effects 0.000 description 10
- 238000001514 detection method Methods 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 230000004913 activation Effects 0.000 description 4
- 238000001994 activation Methods 0.000 description 4
- 238000003780 insertion Methods 0.000 description 4
- 230000037431 insertion Effects 0.000 description 4
- 238000005325 percolation Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000033001 locomotion Effects 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000010200 validation analysis Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 239000013256 coordination polymer Substances 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- HCTVWSOKIJULET-LQDWTQKMSA-M phenoxymethylpenicillin potassium Chemical compound [K+].N([C@H]1[C@H]2SC([C@@H](N2C1=O)C([O-])=O)(C)C)C(=O)COC1=CC=CC=C1 HCTVWSOKIJULET-LQDWTQKMSA-M 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
Abstract
(57)【要約】
【課題】 複数の命令スレッドの推論並列実行を可能に
する、コンピュータ内の中央演算処理装置(CPU)を
提供する。 【解決手段】 このCPUは、CPUの命令セットに追
加され、並列実行用の潜在的な将来スレッドを示すため
に実行時以前にプログラムに挿入される、フォーク−中
断命令を使用する。このCPUは、1つまたは複数の命
令キャッシュ・ポートを備えた命令キャッシュと、1つ
または複数のプログラム・カウンタからなるバンクと、
1つまたは複数のディスパッチャからなるバンクと、ス
レッド間通信を処理し、依存関係に違反する将来スレッ
ドを破棄するスレッド管理ユニットと、すべてのスレッ
ドに共通する1組のアーキテクチャ化レジスタと、CP
U内の1つまたは複数の機能ユニット上での命令の並列
実行をスケジューリングするスケジューラとを有する。
する、コンピュータ内の中央演算処理装置(CPU)を
提供する。 【解決手段】 このCPUは、CPUの命令セットに追
加され、並列実行用の潜在的な将来スレッドを示すため
に実行時以前にプログラムに挿入される、フォーク−中
断命令を使用する。このCPUは、1つまたは複数の命
令キャッシュ・ポートを備えた命令キャッシュと、1つ
または複数のプログラム・カウンタからなるバンクと、
1つまたは複数のディスパッチャからなるバンクと、ス
レッド間通信を処理し、依存関係に違反する将来スレッ
ドを破棄するスレッド管理ユニットと、すべてのスレッ
ドに共通する1組のアーキテクチャ化レジスタと、CP
U内の1つまたは複数の機能ユニット上での命令の並列
実行をスケジューリングするスケジューラとを有する。
Description
【0001】
【発明の属する技術分野】本発明は、コンピュータ・シ
ステム上での複数の命令からなる並列スレッドの実行の
分野に関する。より具体的には、本発明は、コンピュー
タ・プログラム内のどの命令スレッドを並列に実行でき
るかを判定し、この並列実行を推論方式で実施すること
に関する。
ステム上での複数の命令からなる並列スレッドの実行の
分野に関する。より具体的には、本発明は、コンピュー
タ・プログラム内のどの命令スレッドを並列に実行でき
るかを判定し、この並列実行を推論方式で実施すること
に関する。
【0002】
【従来の技術】市販のマイクロプロセッサは、現在、単
一プロセッサ・アーキテクチャを使用している。このア
ーキテクチャは、共通する1組のアーキテクチャ上可視
のレジスタを共用する1つまたは複数の機能ユニット
(分岐ユニット、ロード/ストア・ユニット、整数演算
ユニット、浮動小数点演算ユニットなど)を含むことが
できる。(レジスタは、そのプロセッサのアセンブリ・
レベルのプログラマか、またはより上位レベルのプログ
ラムをマシンのアセンブリ・レベルに変換するプロセッ
サのコンパイラにとってアクセス可能であれば、アーキ
テクチャ上可視であると見なされる。)
一プロセッサ・アーキテクチャを使用している。このア
ーキテクチャは、共通する1組のアーキテクチャ上可視
のレジスタを共用する1つまたは複数の機能ユニット
(分岐ユニット、ロード/ストア・ユニット、整数演算
ユニット、浮動小数点演算ユニットなど)を含むことが
できる。(レジスタは、そのプロセッサのアセンブリ・
レベルのプログラマか、またはより上位レベルのプログ
ラムをマシンのアセンブリ・レベルに変換するプロセッ
サのコンパイラにとってアクセス可能であれば、アーキ
テクチャ上可視であると見なされる。)
【0003】コンピュータ・システムでは、コンパイラ
またはアセンブリ・プログラマにより生成された命令
は、実行時以前に命令メモリに1つのシーケンスとして
置かれ、そこから取り出して実行することができる。こ
のシーケンスは静的順序と呼ばれている。動的順序は、
コンピュータがこのような命令を実行する順序である。
動的順序は静的順序である場合もあれば、そうではない
場合もある。(以下の説明で使用する「コンパイル時」
という表現は、実行時以前の処理のタイミングを意味す
る。ただし、このような処理はコンパイラによって行わ
れる可能性が非常に高いが、アセンブリ・レベル・プロ
グラミングなどの他の手段が代わりに使用されることも
あることに留意されたい。)
またはアセンブリ・プログラマにより生成された命令
は、実行時以前に命令メモリに1つのシーケンスとして
置かれ、そこから取り出して実行することができる。こ
のシーケンスは静的順序と呼ばれている。動的順序は、
コンピュータがこのような命令を実行する順序である。
動的順序は静的順序である場合もあれば、そうではない
場合もある。(以下の説明で使用する「コンパイル時」
という表現は、実行時以前の処理のタイミングを意味す
る。ただし、このような処理はコンパイラによって行わ
れる可能性が非常に高いが、アセンブリ・レベル・プロ
グラミングなどの他の手段が代わりに使用されることも
あることに留意されたい。)
【0004】先行技術のスカラー・コンピュータすなわ
ち非スーパースカラー・コンピュータ、または一度に1
つずつ命令を実行するマシンには、順次追跡順序と呼ば
れる固有の動的実行順序が備わっている。この順次追跡
順序で命令Aを別の命令Bより先行させると、このよう
な命令Aは、命令Bより早期の命令とも呼ばれる。この
ようなコンピュータは、制御命令が検出されるまで、そ
の静的順序で命令を実行する。この検出時点では、元の
順次順序から外れた(不連続)位置から命令を取り出す
ことができる。その後、次の制御命令が検出されるま
で、命令はもう一度、静的順次順序で実行される。制御
命令とは、以降の命令取出しを不連続位置から強制的に
始めさせることにより、順次命令取出しを変更する可能
性のある命令である。制御命令としては、分岐、ジャン
プなどの命令がある。
ち非スーパースカラー・コンピュータ、または一度に1
つずつ命令を実行するマシンには、順次追跡順序と呼ば
れる固有の動的実行順序が備わっている。この順次追跡
順序で命令Aを別の命令Bより先行させると、このよう
な命令Aは、命令Bより早期の命令とも呼ばれる。この
ようなコンピュータは、制御命令が検出されるまで、そ
の静的順序で命令を実行する。この検出時点では、元の
順次順序から外れた(不連続)位置から命令を取り出す
ことができる。その後、次の制御命令が検出されるま
で、命令はもう一度、静的順次順序で実行される。制御
命令とは、以降の命令取出しを不連続位置から強制的に
始めさせることにより、順次命令取出しを変更する可能
性のある命令である。制御命令としては、分岐、ジャン
プなどの命令がある。
【0005】先行技術のマシンの中には、プログラムの
依存関係に違反しなければ、順次追跡順序から外れた命
令を実行できるものもある。このようなマシンは、順次
追跡順序の順に命令を取り出すか、または順次追跡順序
で同時に命令グループを取り出す。しかし、このような
マシンは、順次追跡順序から外れた命令を取り出すこと
はしない。たとえば、順次追跡順序で命令Aが命令Bよ
り先行する場合、先行技術のマシンでは、命令Aの次に
命令Bを順に取り出すか、または命令AとBを同時に取
り出すことができるが、命令Aより前に命令Bを取り出
すことはない。このような制約は単一プログラム・カウ
ンタを備えたマシンの特徴である。したがって、このよ
うな制約のあるマシンは、単一スレッドまたはユニスレ
ッド・マシンと言われている。このようなマシンは、順
次追跡順序で先行する命令を取り出す前に順次追跡順序
で後続の命令を取り出すことができない。
依存関係に違反しなければ、順次追跡順序から外れた命
令を実行できるものもある。このようなマシンは、順次
追跡順序の順に命令を取り出すか、または順次追跡順序
で同時に命令グループを取り出す。しかし、このような
マシンは、順次追跡順序から外れた命令を取り出すこと
はしない。たとえば、順次追跡順序で命令Aが命令Bよ
り先行する場合、先行技術のマシンでは、命令Aの次に
命令Bを順に取り出すか、または命令AとBを同時に取
り出すことができるが、命令Aより前に命令Bを取り出
すことはない。このような制約は単一プログラム・カウ
ンタを備えたマシンの特徴である。したがって、このよ
うな制約のあるマシンは、単一スレッドまたはユニスレ
ッド・マシンと言われている。このようなマシンは、順
次追跡順序で先行する命令を取り出す前に順次追跡順序
で後続の命令を取り出すことができない。
【0006】発明者らが把握している現行世代の市販マ
イクロプロセッサは、単一スレッドの制御の流れを備え
ている。このようなプロセッサは、所与のプログラムの
様々な部分の制御とデータからの独立性を活用する能力
が制限されている。重要な制限としては、以下のものが
ある。 ○ 単一スレッドとは、マシンが複数の命令からなる単
一シーケンスの取出しに制限され、プログラム制御の複
数の流れ(スレッド)を同時に追跡できないことを意味
する。 ○ さらに単一スレッド制御とは、データ非依存命令が
まとめて取り出すべきスレッド内で時間的に十分接近し
ていて(たとえば、複数の命令を命令バッファに同時に
取り出す場合)、データ独立性を検出するためにまとめ
て検査される場合のみ、データ独立性を活用できること
を意味する。 ○ 上記の制限は、制御非依存命令とデータ非依存命令
をまとめてグループ化するためにコンパイラを頼りにす
ることを意味する。 ○ 先行技術のマイクロプロセッサの中には、制御流れ
推測という何らかの形態の制御命令(分岐)予測を含む
ものがある。この場合、制御命令の結果が正しく推測さ
れたと期待して、順次追跡順序で制御命令に続く命令を
取り出して実行することができる。制御流れの推測は、
より高度の並列性を活用するために必要な技法としてす
でに認められている。しかし、制御への依存性に関する
知識が欠けているため、単一スレッド動的推測は、制御
流れ推測誤り(不良推測)が発生するまで先読みする能
力しか拡張することができない。不良推測が行われる
と、多くの実行サイクルが浪費される可能性がある。制
御依存性分析のハードウェア・コストを無視しても、単
一スレッド制御流れ推測により制御への依存性を実行時
に学習することはよく見ても適用範囲が制限されること
に留意されたい。ここで使用する適用範囲とは、命令間
の制御およびデータの依存関係を同時に検査することが
できる命令の数を意味する。通常、実行時よりコンパイ
ル時に得られる適用範囲の方がかなり大きくなる可能性
がある。 ○ 制御流れに関するコンパイル時推測は、実行時推測
より適用範囲がかなり大きくなる可能性があるが、制御
依存性分析から利益を得る場合もある。しかし、単一ス
レッドの実行時制限により、コンパイラは、実行時に並
列性が活用可能になるように非推論命令とともに推論命
令をまとめてグループ化する必要がある。
イクロプロセッサは、単一スレッドの制御の流れを備え
ている。このようなプロセッサは、所与のプログラムの
様々な部分の制御とデータからの独立性を活用する能力
が制限されている。重要な制限としては、以下のものが
ある。 ○ 単一スレッドとは、マシンが複数の命令からなる単
一シーケンスの取出しに制限され、プログラム制御の複
数の流れ(スレッド)を同時に追跡できないことを意味
する。 ○ さらに単一スレッド制御とは、データ非依存命令が
まとめて取り出すべきスレッド内で時間的に十分接近し
ていて(たとえば、複数の命令を命令バッファに同時に
取り出す場合)、データ独立性を検出するためにまとめ
て検査される場合のみ、データ独立性を活用できること
を意味する。 ○ 上記の制限は、制御非依存命令とデータ非依存命令
をまとめてグループ化するためにコンパイラを頼りにす
ることを意味する。 ○ 先行技術のマイクロプロセッサの中には、制御流れ
推測という何らかの形態の制御命令(分岐)予測を含む
ものがある。この場合、制御命令の結果が正しく推測さ
れたと期待して、順次追跡順序で制御命令に続く命令を
取り出して実行することができる。制御流れの推測は、
より高度の並列性を活用するために必要な技法としてす
でに認められている。しかし、制御への依存性に関する
知識が欠けているため、単一スレッド動的推測は、制御
流れ推測誤り(不良推測)が発生するまで先読みする能
力しか拡張することができない。不良推測が行われる
と、多くの実行サイクルが浪費される可能性がある。制
御依存性分析のハードウェア・コストを無視しても、単
一スレッド制御流れ推測により制御への依存性を実行時
に学習することはよく見ても適用範囲が制限されること
に留意されたい。ここで使用する適用範囲とは、命令間
の制御およびデータの依存関係を同時に検査することが
できる命令の数を意味する。通常、実行時よりコンパイ
ル時に得られる適用範囲の方がかなり大きくなる可能性
がある。 ○ 制御流れに関するコンパイル時推測は、実行時推測
より適用範囲がかなり大きくなる可能性があるが、制御
依存性分析から利益を得る場合もある。しかし、単一ス
レッドの実行時制限により、コンパイラは、実行時に並
列性が活用可能になるように非推論命令とともに推論命
令をまとめてグループ化する必要がある。
【0007】実行時により多くの並列性を発揮するため
にコンパイル時制御流れ推測を使用することについて
は、上記に述べた。現行マシンのコンパイラは、この推
測をコード化する能力が制限されている。保護と格上げ
のような一般に使用される手法では、単一スレッド実行
の早期に推論実行すべき一部の命令をパーコレーション
するためにコンパイラを頼りにしている。また、このよ
うな手法では、制御流れ推測を推論命令にコード化する
必要もある。この手法には、次のような重要な制限があ
る。 ○ 通常、かなり浅い制御流れ推測をコード化するため
にすべての命令で十分な未使用ビットを見つけることは
非常に難しいことである。逆方向互換性の制約(いかな
る変換も行わずに古い2進コードを実行できる能力)が
あるため、制御流れ推測のコード化を含めるために命令
コード化を任意に再配置(新しいアーキテクチャを意味
する)することができないことに留意されたい。 ○ 前述のパーコレーション技法は、推測誤りを処理す
るために余分なコードまたはコード・コピーあるいはそ
の両方を必要とする場合が多い。その結果、コードが拡
大する。 ○ アーキテクチャ上、推論命令によって発生する例外
の順次処理や、割込みの精密処理が必要になる場合が多
い。しかし、前述のパーコレーション技法は上方推論コ
ード・モーションを使用するので、このような順序外推
論実行のコンテキストでこれらを実施することは非常に
難しい場合が多い。パーコレーションした命令を区別
し、その元の位置を追跡するには、特殊な機構が必要で
ある。ただし、外部命令の観点から見ると、精密割込み
処理の制約下では順次追跡順序から外れた命令実行は推
論的と見なすことができることに留意されたい。しか
し、制約はあるもののより広く使用される意味では、命
令(より正確には、その命令の特定の動的インスタン
ス)が順次追跡順序の一部であると設定する前に命令処
理が開始される場合、またはある命令のオペランドの妥
当性を確立する前にそのオペランドが提供される場合
に、実行が推論的と見なされる。
にコンパイル時制御流れ推測を使用することについて
は、上記に述べた。現行マシンのコンパイラは、この推
測をコード化する能力が制限されている。保護と格上げ
のような一般に使用される手法では、単一スレッド実行
の早期に推論実行すべき一部の命令をパーコレーション
するためにコンパイラを頼りにしている。また、このよ
うな手法では、制御流れ推測を推論命令にコード化する
必要もある。この手法には、次のような重要な制限があ
る。 ○ 通常、かなり浅い制御流れ推測をコード化するため
にすべての命令で十分な未使用ビットを見つけることは
非常に難しいことである。逆方向互換性の制約(いかな
る変換も行わずに古い2進コードを実行できる能力)が
あるため、制御流れ推測のコード化を含めるために命令
コード化を任意に再配置(新しいアーキテクチャを意味
する)することができないことに留意されたい。 ○ 前述のパーコレーション技法は、推測誤りを処理す
るために余分なコードまたはコード・コピーあるいはそ
の両方を必要とする場合が多い。その結果、コードが拡
大する。 ○ アーキテクチャ上、推論命令によって発生する例外
の順次処理や、割込みの精密処理が必要になる場合が多
い。しかし、前述のパーコレーション技法は上方推論コ
ード・モーションを使用するので、このような順序外推
論実行のコンテキストでこれらを実施することは非常に
難しい場合が多い。パーコレーションした命令を区別
し、その元の位置を追跡するには、特殊な機構が必要で
ある。ただし、外部命令の観点から見ると、精密割込み
処理の制約下では順次追跡順序から外れた命令実行は推
論的と見なすことができることに留意されたい。しか
し、制約はあるもののより広く使用される意味では、命
令(より正確には、その命令の特定の動的インスタン
ス)が順次追跡順序の一部であると設定する前に命令処
理が開始される場合、またはある命令のオペランドの妥
当性を確立する前にそのオペランドが提供される場合
に、実行が推論的と見なされる。
【0008】制御依存性を知らないと、ネストされたル
ープのパフォーマンスにとって特に高価なものになる場
合がある。たとえば、外側反復がデータ依存の内側ルー
プ反復とは無関係の制御とデータであるようなネストさ
れたループについて検討する。外側ループ反復とは無関
係の制御およびデータの知識が活用されない場合は、内
側ループに関する順次制御流れ推測のため、その取出し
および実行を遅延させなければならない。さらに、この
ように制御依存性の知識が欠けているため、制御および
データ非依存の内側ループ反復の1つの予測を誤ったと
きに、外側ループから推論実行される命令を不必要に破
棄する場合もある。また、内側ループの制御流れがデー
タに依存し、そのため、極めて予測不能である場合に
は、内側ループの制御流れ推測について予測誤りが発生
する確率が非常に高くなる可能性があることにも留意さ
れたい。このような例としては、以下のものがある。
ープのパフォーマンスにとって特に高価なものになる場
合がある。たとえば、外側反復がデータ依存の内側ルー
プ反復とは無関係の制御とデータであるようなネストさ
れたループについて検討する。外側ループ反復とは無関
係の制御およびデータの知識が活用されない場合は、内
側ループに関する順次制御流れ推測のため、その取出し
および実行を遅延させなければならない。さらに、この
ように制御依存性の知識が欠けているため、制御および
データ非依存の内側ループ反復の1つの予測を誤ったと
きに、外側ループから推論実行される命令を不必要に破
棄する場合もある。また、内側ループの制御流れがデー
タに依存し、そのため、極めて予測不能である場合に
は、内側ループの制御流れ推測について予測誤りが発生
する確率が非常に高くなる可能性があることにも留意さ
れたい。このような例としては、以下のものがある。
【0009】/* 環境リストを検査する */ for (fp = xlenv; fp; fp = cdr (fp) ) for (ep = car (fp); ep; ep = cdr (ep) ) if (sym == car (car (ep) ) ) cdr (car (ep) ) = new_p;
【0010】これは二重にネストされたループであっ
て、内側ループは連係リストを詳しく検討し、その反復
はどちらも前の反復に依存する制御とデータである。し
かし、内側ループのそれぞれの活動化(すなわち、外側
ループの反復)は前の反復とは無関係である。[これ
は、SPECint92ベンチマークの1つ(Li)で最も頻繁に
実行されるループの1つ(Xlgetvalue)をわずかに変更
したバージョンである。]
て、内側ループは連係リストを詳しく検討し、その反復
はどちらも前の反復に依存する制御とデータである。し
かし、内側ループのそれぞれの活動化(すなわち、外側
ループの反復)は前の反復とは無関係である。[これ
は、SPECint92ベンチマークの1つ(Li)で最も頻繁に
実行されるループの1つ(Xlgetvalue)をわずかに変更
したバージョンである。]
【0011】前述のように、単一制御流れを備えたマシ
ンは、推論または非推論あるいはその両方のデータ非依
存命令をまとめてグループ化するためにコンパイラに頼
らなければならない。しかし、すべてのデータおよび制
御非依存命令を効率よくまとめてグループ化するには、
コンパイラは、適切なコード化のためにアーキテクチャ
化した十分なレジスタを必要とする。このため、レジス
タ圧力は高まり、追加のスピル・コードのオーバヘッド
のためにこのようなコード・モーションが実を結ばなく
なるような点を上回っている。
ンは、推論または非推論あるいはその両方のデータ非依
存命令をまとめてグループ化するためにコンパイラに頼
らなければならない。しかし、すべてのデータおよび制
御非依存命令を効率よくまとめてグループ化するには、
コンパイラは、適切なコード化のためにアーキテクチャ
化した十分なレジスタを必要とする。このため、レジス
タ圧力は高まり、追加のスピル・コードのオーバヘッド
のためにこのようなコード・モーションが実を結ばなく
なるような点を上回っている。
【0012】大規模並列アーキテクチャの実現を主な目
的とする、複数スレッドを備えたプロセッサを構築する
ために、研究の試みがいくつか行われてきた。複数スレ
ッドを管理するというオーバヘッドは、実行の並行性が
追加されるというパフォーマンス上の利得を潜在的に上
回る可能性がある。スレッド管理に関連するオーバヘッ
ドとしては、以下のものがある。 ○ 明示または暗黙同期プリミティブによる、データお
よび制御依存性のための部分順序の管理と通信 ○ 別のスレッドが使用するためにあるスレッドが生成
した値の通信 ○ 静的すなわちコンパイル時のスレッド・スケジュー
リングと、動的すなわち実行時のスレッド・スケジュー
リングとの対照に関連するトレードオフ。静的スレッド
・スケジューリングは、実行時のハードウェアを簡略化
するが、フレキシビリティが低く、実現したマシンのス
レッド資源をコンパイラに公表してしまうため、各種の
実施態様に対応する再コンパイルを必要とする。これに
対して、動的スレッド・スケジューリングは様々な実施
態様に適応可能で、いずれも同じ実行可能命令を共用す
るが、追加の実行時ハードウェア・サポートを必要とす
る。
的とする、複数スレッドを備えたプロセッサを構築する
ために、研究の試みがいくつか行われてきた。複数スレ
ッドを管理するというオーバヘッドは、実行の並行性が
追加されるというパフォーマンス上の利得を潜在的に上
回る可能性がある。スレッド管理に関連するオーバヘッ
ドとしては、以下のものがある。 ○ 明示または暗黙同期プリミティブによる、データお
よび制御依存性のための部分順序の管理と通信 ○ 別のスレッドが使用するためにあるスレッドが生成
した値の通信 ○ 静的すなわちコンパイル時のスレッド・スケジュー
リングと、動的すなわち実行時のスレッド・スケジュー
リングとの対照に関連するトレードオフ。静的スレッド
・スケジューリングは、実行時のハードウェアを簡略化
するが、フレキシビリティが低く、実現したマシンのス
レッド資源をコンパイラに公表してしまうため、各種の
実施態様に対応する再コンパイルを必要とする。これに
対して、動的スレッド・スケジューリングは様々な実施
態様に適応可能で、いずれも同じ実行可能命令を共用す
るが、追加の実行時ハードウェア・サポートを必要とす
る。
【0013】定義 さらに詳述する前に、以下の一連の作業定義は非常に有
用である。 ○ スレッド: 単一命令順序付け制御(単一プログラ
ム・カウンタを意味する)と共用される1組のアーキテ
クチャ上可視のマシン状態とを使用して実行可能な命令
のシーケンス。 ○ 順次追跡順序:プログラム命令の実行シーケンスの
動的順序であって、一度に1つずつ命令を実行する単一
制御スレッド非推論マシン上でそのプログラムを完全実
行した結果得られるもの。 ○ メイン・スレッドと将来スレッド:所与の時点での
1組のスレッドのうち、順次追跡順序で最も早い命令を
実行するスレッドをメイン・スレッドという。残りのス
レッドは将来スレッドという。
用である。 ○ スレッド: 単一命令順序付け制御(単一プログラ
ム・カウンタを意味する)と共用される1組のアーキテ
クチャ上可視のマシン状態とを使用して実行可能な命令
のシーケンス。 ○ 順次追跡順序:プログラム命令の実行シーケンスの
動的順序であって、一度に1つずつ命令を実行する単一
制御スレッド非推論マシン上でそのプログラムを完全実
行した結果得られるもの。 ○ メイン・スレッドと将来スレッド:所与の時点での
1組のスレッドのうち、順次追跡順序で最も早い命令を
実行するスレッドをメイン・スレッドという。残りのス
レッドは将来スレッドという。
【0014】
【発明が解決しようとする課題】本発明の一目的は、様
々な命令スレッドを同時に取り出して実行するための改
良された方法および装置である。
々な命令スレッドを同時に取り出して実行するための改
良された方法および装置である。
【0015】本発明の一目的は、1つまたは複数の制御
およびデータ依存関係を備えた様々な命令スレッドを同
時に取り出して実行するための改良された方法および装
置である。
およびデータ依存関係を備えた様々な命令スレッドを同
時に取り出して実行するための改良された方法および装
置である。
【0016】本発明の一目的は、1つまたは複数の制御
およびデータ依存関係を備えた様々な命令スレッドを同
時に取り出して推論実行するための改良された方法およ
び装置である。
およびデータ依存関係を備えた様々な命令スレッドを同
時に取り出して推論実行するための改良された方法およ
び装置である。
【0017】本発明の一目的は、コンピュータ・アーキ
テクチャの様々な実施態様上で1つまたは複数の制御お
よびデータ依存関係を備えた様々な命令スレッドを同時
に取り出して推論実行するための改良された方法および
装置である。
テクチャの様々な実施態様上で1つまたは複数の制御お
よびデータ依存関係を備えた様々な命令スレッドを同時
に取り出して推論実行するための改良された方法および
装置である。
【0018】
【課題を解決するための手段】本発明は、複数の命令ス
レッドの推論並列実行を可能にする、コンピュータ内の
中央演算処理装置(CPU)の改良策である。本発明で
は、CPUの命令セットに追加され、並列実行のために
潜在的将来スレッドを示すために実行時以前にプログラ
ムに挿入される、新規のフォーク−中断命令を開示す
る。これは、コンパイラによって実行されることが好ま
しい。
レッドの推論並列実行を可能にする、コンピュータ内の
中央演算処理装置(CPU)の改良策である。本発明で
は、CPUの命令セットに追加され、並列実行のために
潜在的将来スレッドを示すために実行時以前にプログラ
ムに挿入される、新規のフォーク−中断命令を開示す
る。これは、コンパイラによって実行されることが好ま
しい。
【0019】CPUは、1つまたは複数の命令キャッシ
ュ・ポートを備えた命令キャッシュと、その命令キャッ
シュ内の命令を独立してアドレス指定できる1つまたは
複数のプログラム・カウンタからなるバンクとを有す
る。プログラム・カウンタが1つの命令をアドレス指定
すると、アドレス指定された命令は、命令キャッシュ・
ポートにポートされる。さらにCPUは、1つまたは複
数のディスパッチャも有する。ディスパッチャは、命令
キャッシュ・ポートにポートされた命令をそのディスパ
ッチャに関連する命令バッファで受け取る。また、ディ
スパッチャは、そのバッファ内の命令間の依存関係も分
析する。CPU内のスレッド管理ユニットは、すべての
スレッド間通信を管理し、プログラム依存関係に違反す
る将来スレッドを破棄する。CPUスケジューラは、C
PU内のすべてのディスパッチャから命令を受け取り、
CPU内の1つまたは複数の機能ユニットでの命令の並
列実行をスケジューリングする。通常、メイン・プログ
ラム・スレッド内の命令の実行は1つのプログラム・カ
ウンタが追跡し、将来スレッドの並列実行は残りのプロ
グラム・カウンタが追跡することになる。命令のポーテ
ィングとその機能ユニット上での実行は、推論方式で実
行することができる。
ュ・ポートを備えた命令キャッシュと、その命令キャッ
シュ内の命令を独立してアドレス指定できる1つまたは
複数のプログラム・カウンタからなるバンクとを有す
る。プログラム・カウンタが1つの命令をアドレス指定
すると、アドレス指定された命令は、命令キャッシュ・
ポートにポートされる。さらにCPUは、1つまたは複
数のディスパッチャも有する。ディスパッチャは、命令
キャッシュ・ポートにポートされた命令をそのディスパ
ッチャに関連する命令バッファで受け取る。また、ディ
スパッチャは、そのバッファ内の命令間の依存関係も分
析する。CPU内のスレッド管理ユニットは、すべての
スレッド間通信を管理し、プログラム依存関係に違反す
る将来スレッドを破棄する。CPUスケジューラは、C
PU内のすべてのディスパッチャから命令を受け取り、
CPU内の1つまたは複数の機能ユニットでの命令の並
列実行をスケジューリングする。通常、メイン・プログ
ラム・スレッド内の命令の実行は1つのプログラム・カ
ウンタが追跡し、将来スレッドの並列実行は残りのプロ
グラム・カウンタが追跡することになる。命令のポーテ
ィングとその機能ユニット上での実行は、推論方式で実
行することができる。
【0020】
【発明の実施の形態】本発明は、複数のプログラム位置
からの命令を同時に取り出して、推論し、実行し、その
結果、複数の制御スレッドを追跡するように従来の単一
スレッド推論スーパースカラーCPUを強化するため
に、フォーク−中断命令を提案している。
からの命令を同時に取り出して、推論し、実行し、その
結果、複数の制御スレッドを追跡するように従来の単一
スレッド推論スーパースカラーCPUを強化するため
に、フォーク−中断命令を提案している。
【0021】図1は、本発明で提案した方法を実行する
と思われる典型的なプロセッサ編成のハードウェアのブ
ロック図である。実行方法については、後述する。図1
の詳細説明は以下の通りである。
と思われる典型的なプロセッサ編成のハードウェアのブ
ロック図である。実行方法については、後述する。図1
の詳細説明は以下の通りである。
【0022】ブロック100は、プロセッサ上で実行す
るためのプログラム・データおよび命令を保持する、プ
ロセッサの中央演算処理装置(CPU)のメモリ・ユニ
ットである。このメモリ・ユニットは、このメモリ・ユ
ニットの頻繁に使用する命令およびデータ部分が通常、
命令キャッシュ・ユニット(ブロック110)とデータ
・キャッシュ・ユニット(ブロック170)にそれぞれ
保管されるように、キャッシュ・ユニットとのインタフ
ェースが取られている。あるいは、命令キャッシュとデ
ータ・キャッシュは、単一一体化ユニットに統合するこ
とができる。キャッシュ・ユニットのアクセス時間は、
通常、メモリ・ユニットのアクセス時間よりかなり短
い。上記のようなメモリ・ユニットとキャッシュ・ユニ
ットは当技術分野では周知のものである。たとえば、メ
イン・メモリとそのポートをキャッシュ・メモリとその
ポートに使用することにより、キャッシュ・ユニットを
置き換えることができる。また、キャッシュは、周知の
ように、複数のキャッシュまたは1つまたは複数のレベ
ルを備えたキャッシュで構成することもできる。
るためのプログラム・データおよび命令を保持する、プ
ロセッサの中央演算処理装置(CPU)のメモリ・ユニ
ットである。このメモリ・ユニットは、このメモリ・ユ
ニットの頻繁に使用する命令およびデータ部分が通常、
命令キャッシュ・ユニット(ブロック110)とデータ
・キャッシュ・ユニット(ブロック170)にそれぞれ
保管されるように、キャッシュ・ユニットとのインタフ
ェースが取られている。あるいは、命令キャッシュとデ
ータ・キャッシュは、単一一体化ユニットに統合するこ
とができる。キャッシュ・ユニットのアクセス時間は、
通常、メモリ・ユニットのアクセス時間よりかなり短
い。上記のようなメモリ・ユニットとキャッシュ・ユニ
ットは当技術分野では周知のものである。たとえば、メ
イン・メモリとそのポートをキャッシュ・メモリとその
ポートに使用することにより、キャッシュ・ユニットを
置き換えることができる。また、キャッシュは、周知の
ように、複数のキャッシュまたは1つまたは複数のレベ
ルを備えたキャッシュで構成することもできる。
【0023】ブロック110は、プロセッサ上で実行す
るためのプログラム命令を保持する、プロセッサ(CP
U)の命令キャッシュ・ユニットである。これは、FOR
K、SKIP、SUSPEND、UNCOND_SUSPEND(ブロック112)
など、本発明で提案した新しい命令を含む。上記および
その他の新しい命令の意味の詳細については、後述す
る。
るためのプログラム命令を保持する、プロセッサ(CP
U)の命令キャッシュ・ユニットである。これは、FOR
K、SKIP、SUSPEND、UNCOND_SUSPEND(ブロック112)
など、本発明で提案した新しい命令を含む。上記および
その他の新しい命令の意味の詳細については、後述す
る。
【0024】命令キャッシュの複数ポートP1、P2、
・・・、PN(ブロック115−1、115−2、・・
・、115−N)を含むブロック115は、現行技術で
は新規のものである。この複数ポートにより、並列実行
される命令スレッドへの命令の同時ポーティングが可能
になる。あるいは、単一幅広ポートを使用して所与のス
レッドに複数の命令をポートし、そのスレッドがポート
された命令を実行していて使用中の間に、同じポートを
使用して、複数の命令を別のスレッドにポートすること
も可能である。
・・・、PN(ブロック115−1、115−2、・・
・、115−N)を含むブロック115は、現行技術で
は新規のものである。この複数ポートにより、並列実行
される命令スレッドへの命令の同時ポーティングが可能
になる。あるいは、単一幅広ポートを使用して所与のス
レッドに複数の命令をポートし、そのスレッドがポート
された命令を実行していて使用中の間に、同じポートを
使用して、複数の命令を別のスレッドにポートすること
も可能である。
【0025】ブロック120は、プログラム・カウンタ
PC1、PC2、・・・、PCN(ブロック120−
1、120−2、・・・、120−N)からなるバンク
である。これらのカウンタは、当技術分野で周知であれ
ば、どのカウンタであってもよい。それぞれのプログラ
ム・カウンタは所与のスレッドの実行を追跡する。現在
までに設計されたすべての商用CPUは、所与のプログ
ラムについて、単一命令スレッドの実行だけを制御する
必要がある。このため、現行技術および従来技術は単一
プログラム・カウンタに制限されており、したがって、
複数プログラム・カウンタからなるバンクは本発明の新
規の態様である。それぞれのプログラム・カウンタは、
命令キャッシュ内の1つまたは複数の連続命令をアドレ
ス指定することができる。図1および図2のブロック図
に示す好ましい実施例では、それぞれのプログラム・カ
ウンタが1つの命令キャッシュ・ポートに関連づけられ
ている。あるいは、各種のプログラム・カウンタが1つ
の命令キャッシュ・ポートを共用することもできる。
PC1、PC2、・・・、PCN(ブロック120−
1、120−2、・・・、120−N)からなるバンク
である。これらのカウンタは、当技術分野で周知であれ
ば、どのカウンタであってもよい。それぞれのプログラ
ム・カウンタは所与のスレッドの実行を追跡する。現在
までに設計されたすべての商用CPUは、所与のプログ
ラムについて、単一命令スレッドの実行だけを制御する
必要がある。このため、現行技術および従来技術は単一
プログラム・カウンタに制限されており、したがって、
複数プログラム・カウンタからなるバンクは本発明の新
規の態様である。それぞれのプログラム・カウンタは、
命令キャッシュ内の1つまたは複数の連続命令をアドレ
ス指定することができる。図1および図2のブロック図
に示す好ましい実施例では、それぞれのプログラム・カ
ウンタが1つの命令キャッシュ・ポートに関連づけられ
ている。あるいは、各種のプログラム・カウンタが1つ
の命令キャッシュ・ポートを共用することもできる。
【0026】さらに、好ましい実施例では、特定のプロ
グラム・カウンタがメイン・スレッドに関連づけられ、
残りのプログラム・カウンタが将来スレッドの実行を追
跡する。図1のPC1(ブロック120−1)は、メイ
ン・スレッド・プログラム・カウンタである。残りのプ
ログラム・カウンタは、将来スレッド・プログラム・カ
ウンタ(ブロック120−2、・・・、120−N)と
呼ぶ。
グラム・カウンタがメイン・スレッドに関連づけられ、
残りのプログラム・カウンタが将来スレッドの実行を追
跡する。図1のPC1(ブロック120−1)は、メイ
ン・スレッド・プログラム・カウンタである。残りのプ
ログラム・カウンタは、将来スレッド・プログラム・カ
ウンタ(ブロック120−2、・・・、120−N)と
呼ぶ。
【0027】ブロック130は新規のスレッド管理(T
M)ユニットを示しているが、これは、新しいスレッド
をフォークすることができる新しい命令の実行と、組合
せプロセス(後述する)によるスレッド間通信の処理と
を担当する。
M)ユニットを示しているが、これは、新しいスレッド
をフォークすることができる新しい命令の実行と、組合
せプロセス(後述する)によるスレッド間通信の処理と
を担当する。
【0028】また、このユニットは、1つまたは複数の
将来スレッドの命令の一部または全部を破棄することも
できる。さらにこのユニットは、1つまたは複数の推測
の結果として、いずれかの将来スレッドが実行した1つ
または複数の命令をプログラム依存関係の違反のために
破棄する必要があるかどうかを判定することもできる。
実行時に推測が行われる場合は、推測ユニットによって
TMユニットにそれが連絡される。たとえば、ディスパ
ッチャ・ブロック(後述するブロック140)内の分岐
命令結果の推測は、TMユニットに連絡する必要があ
る。コンパイル時に推測が行われ、命令としてコード化
される場合は、このような命令をデコードするブロック
140のディスパッチャによってそれがTMユニットに
連絡される。その結果、推論方式で複数スレッドを実行
できるようになることは、本発明の固有の特徴である。
将来スレッドの命令の一部または全部を破棄することも
できる。さらにこのユニットは、1つまたは複数の推測
の結果として、いずれかの将来スレッドが実行した1つ
または複数の命令をプログラム依存関係の違反のために
破棄する必要があるかどうかを判定することもできる。
実行時に推測が行われる場合は、推測ユニットによって
TMユニットにそれが連絡される。たとえば、ディスパ
ッチャ・ブロック(後述するブロック140)内の分岐
命令結果の推測は、TMユニットに連絡する必要があ
る。コンパイル時に推測が行われ、命令としてコード化
される場合は、このような命令をデコードするブロック
140のディスパッチャによってそれがTMユニットに
連絡される。その結果、推論方式で複数スレッドを実行
できるようになることは、本発明の固有の特徴である。
【0029】また、メイン・スレッドと将来スレッドの
並列取出しおよび実行とは、提案したマシンがその順次
追跡順序から外れる命令を取り出して実行できることを
意味することにも留意されたい。このマシンのこのよう
な固有の特徴により、単一プログラム・カウンタのため
にその順次追跡順序から外れる命令を取り出すことがで
きない先行技術のマシンとは区別される。
並列取出しおよび実行とは、提案したマシンがその順次
追跡順序から外れる命令を取り出して実行できることを
意味することにも留意されたい。このマシンのこのよう
な固有の特徴により、単一プログラム・カウンタのため
にその順次追跡順序から外れる命令を取り出すことがで
きない先行技術のマシンとは区別される。
【0030】ブロック140は、ディスパッチャ−1、
ディスパッチャ−2、・・・、ディスパッチャ−N(ブ
ロック140−1、140−2、・・・、140−N)
という複数のディスパッチャからなるバンクを示し、そ
れぞれのディスパッチャは1つの特定のプログラム・カ
ウンタに関連づけられ、その結果、そのディスパッチャ
に関連する命令バッファ(ブロック141−1、141
−2、・・・、141−N)で命令キャッシュ・ポート
の1つから命令を受け取ることができる。また、ディス
パッチャは、そのバッファ内の命令間の依存関係をデコ
ードして分析することもできる。さらにディスパッチャ
は、後述するSKIP、FSKIP、またはSKPMGの各命令の意味
の実現も担当する。
ディスパッチャ−2、・・・、ディスパッチャ−N(ブ
ロック140−1、140−2、・・・、140−N)
という複数のディスパッチャからなるバンクを示し、そ
れぞれのディスパッチャは1つの特定のプログラム・カ
ウンタに関連づけられ、その結果、そのディスパッチャ
に関連する命令バッファ(ブロック141−1、141
−2、・・・、141−N)で命令キャッシュ・ポート
の1つから命令を受け取ることができる。また、ディス
パッチャは、そのバッファ内の命令間の依存関係をデコ
ードして分析することもできる。さらにディスパッチャ
は、後述するSKIP、FSKIP、またはSKPMGの各命令の意味
の実現も担当する。
【0031】ディスパッチャが検出する命令は、スレッ
ドをフォークまたは中断することができるが、スレッド
管理ユニット(ブロック130)に転送される。このT
Mユニットは、対応するプログラム・カウンタに適切な
開始命令をロードすることにより、将来スレッドの活動
化を担当する。また、TMユニットは、UNCOND_SUSPEND
命令を検出したときに将来スレッド・ディスパッチャを
中断する。
ドをフォークまたは中断することができるが、スレッド
管理ユニット(ブロック130)に転送される。このT
Mユニットは、対応するプログラム・カウンタに適切な
開始命令をロードすることにより、将来スレッドの活動
化を担当する。また、TMユニットは、UNCOND_SUSPEND
命令を検出したときに将来スレッド・ディスパッチャを
中断する。
【0032】順序外実行のための実行時依存性分析の実
施技法は、当技術分野では周知である。メイン・プログ
ラム・カウンタに関連し、そのため、メイン・スレッド
に関連するディスパッチャは、メイン・スレッド・ディ
スパッチャと呼ばれる。図1のディスパッチャ−1(ブ
ロック140−1)はメイン・スレッド・ディスパッチ
ャである。残りのディスパッチャ(ブロック140−
2、・・・、140−N)は将来プログラム・カウンタ
および将来スレッドに関連し、将来スレッド・ディスパ
ッチャと呼ばれる。
施技法は、当技術分野では周知である。メイン・プログ
ラム・カウンタに関連し、そのため、メイン・スレッド
に関連するディスパッチャは、メイン・スレッド・ディ
スパッチャと呼ばれる。図1のディスパッチャ−1(ブ
ロック140−1)はメイン・スレッド・ディスパッチ
ャである。残りのディスパッチャ(ブロック140−
2、・・・、140−N)は将来プログラム・カウンタ
および将来スレッドに関連し、将来スレッド・ディスパ
ッチャと呼ばれる。
【0033】本発明で提案するディスパッチャのバンク
の新規の態様は、1つのディスパッチャのバッファ内の
命令の実行時依存性分析を他のディスパッチャのものと
は無関係に(したがって並列に)実行できる点である。
これは、指定の条件下で命令スレッドの非依存性を保証
することができるコンパイル時依存性分析によって可能
になる。したがって、一方で、実行時依存性分析はコン
パイル時分析の方が潜在的に適用範囲がかなり広いこと
による恩恵を受けることになる(適用範囲が広いという
ことは、相互依存性について多数の命令を同時に検査で
きる能力を意味する)。もう一方で、コンパイル時分析
はフォーク−中断機構による恩恵を受けるが、この機構
により実行時結果に関する推測によって独立スレッドを
明示的に識別することができる。実行時またはコンパイ
ル時の依存性分析技法は当技術分野では周知であるが、
実行時依存性分析ハードウェアにコンパイル時依存性分
析を明示推論方式で連絡することは、本発明の新規な点
である。
の新規の態様は、1つのディスパッチャのバッファ内の
命令の実行時依存性分析を他のディスパッチャのものと
は無関係に(したがって並列に)実行できる点である。
これは、指定の条件下で命令スレッドの非依存性を保証
することができるコンパイル時依存性分析によって可能
になる。したがって、一方で、実行時依存性分析はコン
パイル時分析の方が潜在的に適用範囲がかなり広いこと
による恩恵を受けることになる(適用範囲が広いという
ことは、相互依存性について多数の命令を同時に検査で
きる能力を意味する)。もう一方で、コンパイル時分析
はフォーク−中断機構による恩恵を受けるが、この機構
により実行時結果に関する推測によって独立スレッドを
明示的に識別することができる。実行時またはコンパイ
ル時の依存性分析技法は当技術分野では周知であるが、
実行時依存性分析ハードウェアにコンパイル時依存性分
析を明示推論方式で連絡することは、本発明の新規な点
である。
【0034】ブロック150は、ディスパッチャのバン
ク(ブロック140)内のすべてのディスパッチャから
命令を受け取って、機能ユニット(ブロック180)の
1つで実行するためにそれぞれの命令をスケジューリン
グする、スケジューラである。1つまたは複数のディス
パッチャから同一サイクル中に受け取ったすべての命令
は、互いに独立していると想定する。このようなスケジ
ューラも、スーパースカラー・マシンの先行技術では周
知である。代替実施例では、このスケジューラを1組の
スケジューラに分割し、それぞれが機能ユニット(ブロ
ック180)の規定のサブセットを制御するようにする
こともできる。
ク(ブロック140)内のすべてのディスパッチャから
命令を受け取って、機能ユニット(ブロック180)の
1つで実行するためにそれぞれの命令をスケジューリン
グする、スケジューラである。1つまたは複数のディス
パッチャから同一サイクル中に受け取ったすべての命令
は、互いに独立していると想定する。このようなスケジ
ューラも、スーパースカラー・マシンの先行技術では周
知である。代替実施例では、このスケジューラを1組の
スケジューラに分割し、それぞれが機能ユニット(ブロ
ック180)の規定のサブセットを制御するようにする
こともできる。
【0035】ブロック160は、1組のレジスタ・セッ
トを含むレジスタ・ファイルである。このセットは、ア
ーキテクチャ上可視のレジスタ・セットと、アーキテク
チャ上不可視のレジスタとにさらに分割される。アーキ
テクチャ上可視すなわちアーキテクチャ化したレジスタ
とは、マシンのアセンブリ・レベルのプログラマ(また
はコンパイラ)にとってアクセス可能なレジスタの固定
セットを意味する。レジスタ・ファイルのアーキテクチ
ャ上可視のサブセットは、通常、すべてのスレッド(メ
イン・スレッドと将来スレッド)に共通するはずであ
る。アーキテクチャ上不可視のレジスタはCPUの様々
な物理レジスタを含み、そのサブセットはアーキテクチ
ャ化したレジスタにマッピングされる。すなわち、アー
キテクチャ化したレジスタに関連する値を含む。レジス
タ・ファイルは、多くの命令を実行するための機能ユニ
ットにオペランドを提供し、実行の結果も受け取る。こ
のようなレジスタ・ファイルは先行技術では周知であ
る。
トを含むレジスタ・ファイルである。このセットは、ア
ーキテクチャ上可視のレジスタ・セットと、アーキテク
チャ上不可視のレジスタとにさらに分割される。アーキ
テクチャ上可視すなわちアーキテクチャ化したレジスタ
とは、マシンのアセンブリ・レベルのプログラマ(また
はコンパイラ)にとってアクセス可能なレジスタの固定
セットを意味する。レジスタ・ファイルのアーキテクチ
ャ上可視のサブセットは、通常、すべてのスレッド(メ
イン・スレッドと将来スレッド)に共通するはずであ
る。アーキテクチャ上不可視のレジスタはCPUの様々
な物理レジスタを含み、そのサブセットはアーキテクチ
ャ化したレジスタにマッピングされる。すなわち、アー
キテクチャ化したレジスタに関連する値を含む。レジス
タ・ファイルは、多くの命令を実行するための機能ユニ
ットにオペランドを提供し、実行の結果も受け取る。こ
のようなレジスタ・ファイルは先行技術では周知であ
る。
【0036】組合せプロセス(後述する)の実施態様の
一部として、TMユニット(ブロック130)はレジス
タ・ファイルとやりとりし、組合せ後にすべてのアーキ
テクチャ化したレジスタが適切な非アーキテクチャ化物
理レジスタに関連づけられるようにする。
一部として、TMユニット(ブロック130)はレジス
タ・ファイルとやりとりし、組合せ後にすべてのアーキ
テクチャ化したレジスタが適切な非アーキテクチャ化物
理レジスタに関連づけられるようにする。
【0037】ブロック170は、命令によってソース・
オペランドとして使用されるデータ値の一部と、実行さ
れた命令によって生成されるデータ値の一部とを保持す
る、プロセッサのデータ・キャッシュ・ユニットであ
る。複数の機能ユニットが複数のメモリ常駐データ値を
同時に要求し、複数のメモリ束縛結果を同時に生成する
可能性があるので、データ・キャッシュは通常、マルチ
ポート化されているはずである。マルチポート化データ
・キャッシュは先行技術では周知である。
オペランドとして使用されるデータ値の一部と、実行さ
れた命令によって生成されるデータ値の一部とを保持す
る、プロセッサのデータ・キャッシュ・ユニットであ
る。複数の機能ユニットが複数のメモリ常駐データ値を
同時に要求し、複数のメモリ束縛結果を同時に生成する
可能性があるので、データ・キャッシュは通常、マルチ
ポート化されているはずである。マルチポート化データ
・キャッシュは先行技術では周知である。
【0038】ブロック180は、複数の機能ユニット
(機能ユニット−1、機能ユニット−2、機能ユニット
−K)からなるバンクであり、それぞれのユニットは一
部またはすべてのタイプの命令を実行することができ
る。機能ユニットは、レジスタ・ファイル(ブロック1
60)またはデータ・キャッシュ(ブロック170)か
ら入力ソース・オペランドを受け取り、そこに出力結果
を書き込む。図1および図2に示す好ましい実施例で
は、すべての機能ユニットが同一であり、そのため、ど
のような命令も実行することができる。あるいは、バン
ク内の複数の機能ユニットを非対称にして、特定のユニ
ットが所与のサブセットの命令だけを実行できるように
することもできる。スケジューラ(ブロック150)
は、この非対称を認識し、適切に命令をスケジューリン
グする必要がある。このようなトレードオフも先行技術
では一般的である。
(機能ユニット−1、機能ユニット−2、機能ユニット
−K)からなるバンクであり、それぞれのユニットは一
部またはすべてのタイプの命令を実行することができ
る。機能ユニットは、レジスタ・ファイル(ブロック1
60)またはデータ・キャッシュ(ブロック170)か
ら入力ソース・オペランドを受け取り、そこに出力結果
を書き込む。図1および図2に示す好ましい実施例で
は、すべての機能ユニットが同一であり、そのため、ど
のような命令も実行することができる。あるいは、バン
ク内の複数の機能ユニットを非対称にして、特定のユニ
ットが所与のサブセットの命令だけを実行できるように
することもできる。スケジューラ(ブロック150)
は、この非対称を認識し、適切に命令をスケジューリン
グする必要がある。このようなトレードオフも先行技術
では一般的である。
【0039】ブロック190は、アーキテクチャによっ
て有効な順序と見なされる順序での命令実行の完了を担
当する命令完了ユニットである。CPUが順序外の命令
を実行できるとしても、それを同一順序で完了できるか
どうかは、アーキテクチャ上の制約による。将来スレッ
ド・ディスパッチャによる実行のためにスケジューリン
グされた命令は、推論スレッドの場合にTMユニット
(ブロック130)が将来スレッドの妥当性を確認した
あとでのみ、完了ユニットによる完了の対象となる。
て有効な順序と見なされる順序での命令実行の完了を担
当する命令完了ユニットである。CPUが順序外の命令
を実行できるとしても、それを同一順序で完了できるか
どうかは、アーキテクチャ上の制約による。将来スレッ
ド・ディスパッチャによる実行のためにスケジューリン
グされた命令は、推論スレッドの場合にTMユニット
(ブロック130)が将来スレッドの妥当性を確認した
あとでのみ、完了ユニットによる完了の対象となる。
【0040】本発明では、コンパイル時に命令シーケン
スに挿入可能な新しい命令をいくつか提案する。このよ
うな命令の意味の詳細は以下の通りである。
スに挿入可能な新しい命令をいくつか提案する。このよ
うな命令の意味の詳細は以下の通りである。
【0041】1.FORK この命令は、1つまたは複数の命令スレッドの開始アド
レス(複数も可)を識別する。識別されたそれぞれの命
令スレッドは将来スレッドと呼ばれる。このような将来
スレッドは、FORKのあとに順に続く一連の命令シーケン
スを引き続き実行するフォーキング・スレッドと同時に
実行することができる。将来スレッド用の開始CPU状
態は、FORK命令を検出した時点のCPU状態のコピーで
ある。
レス(複数も可)を識別する。識別されたそれぞれの命
令スレッドは将来スレッドと呼ばれる。このような将来
スレッドは、FORKのあとに順に続く一連の命令シーケン
スを引き続き実行するフォーキング・スレッドと同時に
実行することができる。将来スレッド用の開始CPU状
態は、FORK命令を検出した時点のCPU状態のコピーで
ある。
【0042】2.UNCOND_SUSPEND この命令を検出すると、将来スレッドは、無条件にその
スレッドを中断し、フォーキング・スレッドとの組合せ
を待たなければならない。これは、たとえば、無条件中
断命令後の命令が別のスレッド上の何らかの命令との重
要なデータ依存性を有する場合に必要になる可能性があ
る。提案したこの命令は他のいかなる属性も必要としな
いので、SUSPEND命令(後述する)とも組み合わせるこ
とが可能である。すなわち、SUSPEND命令のコード化の
1つは単に無条件中断を指定することができるだけにな
る。
スレッドを中断し、フォーキング・スレッドとの組合せ
を待たなければならない。これは、たとえば、無条件中
断命令後の命令が別のスレッド上の何らかの命令との重
要なデータ依存性を有する場合に必要になる可能性があ
る。提案したこの命令は他のいかなる属性も必要としな
いので、SUSPEND命令(後述する)とも組み合わせるこ
とが可能である。すなわち、SUSPEND命令のコード化の
1つは単に無条件中断を指定することができるだけにな
る。
【0043】3.SUSPEND この命令を検出すると、将来スレッドは、引き続きその
命令取出しと実行を続行することができるが、第1のSU
SPEND命令に関連するコンパイル時指定条件が実行時に
偽と評価された場合は、そのプログラムの順次追跡順序
での第1のSUSPEND命令と第2のSUSPEND命令またはUNCO
ND_SUSPEND命令との間の一連の命令シーケンスの結果が
破棄される。
命令取出しと実行を続行することができるが、第1のSU
SPEND命令に関連するコンパイル時指定条件が実行時に
偽と評価された場合は、そのプログラムの順次追跡順序
での第1のSUSPEND命令と第2のSUSPEND命令またはUNCO
ND_SUSPEND命令との間の一連の命令シーケンスの結果が
破棄される。
【0044】以下の命令を簡略化するため、SUSPEND命
令の依存領域という用語は、SUSPEND命令後の最初の命
令から始まり、他のSUSPEND命令を検出した時点またはU
NCOND_SUSPEND命令を検出時点に終了する、順次追跡順
序での一連の命令シーケンスであると定義する。
令の依存領域という用語は、SUSPEND命令後の最初の命
令から始まり、他のSUSPEND命令を検出した時点またはU
NCOND_SUSPEND命令を検出時点に終了する、順次追跡順
序での一連の命令シーケンスであると定義する。
【0045】4.SKIP この命令を検出すると、将来スレッドは、次のコンパイ
ル時指定数の命令(通常はスピル・ロード)をデコード
し、対応するソース・レジスタと宛先レジスタに有効の
マークを付けることによってこれらの命令の実行を引き
受けることができるが、このスレッドはその命令に関連
する動作を実際に実行する必要はない。メイン・スレッ
ドはこの命令をNOPとして取り扱う。
ル時指定数の命令(通常はスピル・ロード)をデコード
し、対応するソース・レジスタと宛先レジスタに有効の
マークを付けることによってこれらの命令の実行を引き
受けることができるが、このスレッドはその命令に関連
する動作を実際に実行する必要はない。メイン・スレッ
ドはこの命令をNOPとして取り扱う。
【0046】5.FORK_SUSPEND この命令の命令コードは、将来スレッドの先頭を識別す
るアドレスと、一連の数値(N1、N2、・・・、N
n)とに関連づけられ、それぞれの数値には条件が付い
ている場合もあれば付いていない場合もある。所与の一
連のn個の数値は、FORK命令に関連するアドレスから始
まる命令のn個の連続グループを意味する。関連条件が
一切付いていない数値は、対応するグループの命令を将
来スレッドとして無条件に実行できることを意味する。
関連条件が付いている数値は、コンパイル時指定条件が
実行時に真と評価された場合のみ、対応するグループの
命令の将来スレッドによる実行が有効になるはずである
ことを意味する。
るアドレスと、一連の数値(N1、N2、・・・、N
n)とに関連づけられ、それぞれの数値には条件が付い
ている場合もあれば付いていない場合もある。所与の一
連のn個の数値は、FORK命令に関連するアドレスから始
まる命令のn個の連続グループを意味する。関連条件が
一切付いていない数値は、対応するグループの命令を将
来スレッドとして無条件に実行できることを意味する。
関連条件が付いている数値は、コンパイル時指定条件が
実行時に真と評価された場合のみ、対応するグループの
命令の将来スレッドによる実行が有効になるはずである
ことを意味する。
【0047】6.FORK_S_SUSPEND この命令の命令コードは、将来スレッドの先頭を識別す
るアドレスと、数値sと、一連の数値(N1、N2、・
・・、Nn)とに関連づけられ、それぞれの数値には条
件が付いている場合もあれば付いていない場合もある。
所与の一連のn個の数値は、FORK命令に関連するアドレ
スから始まる命令のn個の連続グループを意味する。関
連条件が一切付いていない数値は、対応するグループの
命令を将来スレッドとして無条件に実行できることを意
味する。関連条件が付いている数値は、コンパイル時指
定条件が実行時に真と評価された場合のみ、対応するグ
ループの命令の将来スレッドによる実行が有効になるは
ずであることを意味する。関連数値sは、スレッドの先
頭にあって、対応するソース・レジスタと宛先レジスタ
に有効のマークを付けるためにデコード可能なs個の命
令を意味するが、このスレッドはその命令に関連する動
作を実際に実行する必要はない。
るアドレスと、数値sと、一連の数値(N1、N2、・
・・、Nn)とに関連づけられ、それぞれの数値には条
件が付いている場合もあれば付いていない場合もある。
所与の一連のn個の数値は、FORK命令に関連するアドレ
スから始まる命令のn個の連続グループを意味する。関
連条件が一切付いていない数値は、対応するグループの
命令を将来スレッドとして無条件に実行できることを意
味する。関連条件が付いている数値は、コンパイル時指
定条件が実行時に真と評価された場合のみ、対応するグ
ループの命令の将来スレッドによる実行が有効になるは
ずであることを意味する。関連数値sは、スレッドの先
頭にあって、対応するソース・レジスタと宛先レジスタ
に有効のマークを付けるためにデコード可能なs個の命
令を意味するが、このスレッドはその命令に関連する動
作を実際に実行する必要はない。
【0048】7.FORK_M_SUSPEND この命令の命令コードは、将来スレッドの先頭を識別す
るアドレスと、1組のマスク(M1、M2、・・・、M
n)とに関連づけられ、それぞれのマスクには条件が付
いている場合もあれば付いていない場合もある。関連条
件が一切付いていないマスクは、将来スレッドの実行用
の有効なソース・オペランドを無条件に保持する、1組
のアーキテクチャ化レジスタを表している。関連条件が
付いているマスクは、コンパイル時指定条件が実行時に
真と評価された場合のみ、将来スレッドの実行用の有効
なソース・オペランドを保持すると想定することができ
る、1組のアーキテクチャ化レジスタを意味する。
るアドレスと、1組のマスク(M1、M2、・・・、M
n)とに関連づけられ、それぞれのマスクには条件が付
いている場合もあれば付いていない場合もある。関連条
件が一切付いていないマスクは、将来スレッドの実行用
の有効なソース・オペランドを無条件に保持する、1組
のアーキテクチャ化レジスタを表している。関連条件が
付いているマスクは、コンパイル時指定条件が実行時に
真と評価された場合のみ、将来スレッドの実行用の有効
なソース・オペランドを保持すると想定することができ
る、1組のアーキテクチャ化レジスタを意味する。
【0049】8.FSKIP この命令の命令コードは、1つのマスクと、数値sとに
関連づけられている。この命令を検出すると、将来スレ
ッドは、次のs個の命令の取出し、デコード、実行をス
キップすることができる。さらに将来スレッドは、1組
の定義済みレジスタ・セットに有効なオペランドを保持
しているというマークを付けるためにこのマスクを使用
する。メイン・スレッドはこの命令をNOPとして取り
扱う。
関連づけられている。この命令を検出すると、将来スレ
ッドは、次のs個の命令の取出し、デコード、実行をス
キップすることができる。さらに将来スレッドは、1組
の定義済みレジスタ・セットに有効なオペランドを保持
しているというマークを付けるためにこのマスクを使用
する。メイン・スレッドはこの命令をNOPとして取り
扱う。
【0050】9.SKPMG この命令を検出すると、将来スレッドは、次のコンパイ
ル時指定数の命令(通常はスピル・ロード)をデコード
し、対応するソース・レジスタと宛先レジスタに有効の
マークを付けることができるが、このスレッドはその命
令に関連する動作を実際に実行する必要はない。この命
令がメイン・スレッドによって検出された場合は、将来
スレッドが個のSKPMG命令のアドレスの先頭に事前にフ
ォークされているかどうかを判定するために検査が行わ
れる。フォークされている場合は、メイン・スレッドと
対応する将来スレッドという2つのスレッドのマシン状
態を適切に組み合わせることにより、メイン・スレッド
が対応する将来スレッドと組み合わされ、メイン・スレ
ッドは、将来スレッドが中断された命令に続く命令から
実行を再開する。このアドレスへの事前フォークが一切
ない場合は、メイン・スレッドは、この命令に続く一連
の命令シーケンスを引き続き実行する。このような命令
の重要性については後述する。
ル時指定数の命令(通常はスピル・ロード)をデコード
し、対応するソース・レジスタと宛先レジスタに有効の
マークを付けることができるが、このスレッドはその命
令に関連する動作を実際に実行する必要はない。この命
令がメイン・スレッドによって検出された場合は、将来
スレッドが個のSKPMG命令のアドレスの先頭に事前にフ
ォークされているかどうかを判定するために検査が行わ
れる。フォークされている場合は、メイン・スレッドと
対応する将来スレッドという2つのスレッドのマシン状
態を適切に組み合わせることにより、メイン・スレッド
が対応する将来スレッドと組み合わされ、メイン・スレ
ッドは、将来スレッドが中断された命令に続く命令から
実行を再開する。このアドレスへの事前フォークが一切
ない場合は、メイン・スレッドは、この命令に続く一連
の命令シーケンスを引き続き実行する。このような命令
の重要性については後述する。
【0051】新しい命令の形式の詳細説明:新しい命令
の形式を示す図5ないし図13の詳細説明は以下の通り
である。
の形式を示す図5ないし図13の詳細説明は以下の通り
である。
【0052】1.FORK <addr_1>, <addr_2>, ..., <add
r_n> 図5のFORK命令(ブロック10)は、1つの命令コード
・フィールド(ブロック11)と、それぞれが1つの将
来スレッドの開始命令アドレスを識別する1つまたは複
数のアドレス・フィールドaddr_1、addr_2、・・・、ad
dr_n(ブロック12−1、12−2、・・・、12−
n)とを含む。
r_n> 図5のFORK命令(ブロック10)は、1つの命令コード
・フィールド(ブロック11)と、それぞれが1つの将
来スレッドの開始命令アドレスを識別する1つまたは複
数のアドレス・フィールドaddr_1、addr_2、・・・、ad
dr_n(ブロック12−1、12−2、・・・、12−
n)とを含む。
【0053】2.UNCOND_SUSPEND 図6のUNCOND_SUSPEND命令(ブロック20)は、1つの
命令コード・フィールドを含む。
命令コード・フィールドを含む。
【0054】3.SUSPEND <mode>, <cond_1> <cond_2>
... <cond_n> 図7のSUSPEND命令(ブロック30)は、SUSPEND命令コ
ード・フィールド(ブロック31)と、モード・フィー
ルド(ブロック32)と、条件フィールド(ブロック3
3)とを含む。本発明の好ましい実施例では、1つまた
は複数の分岐からなるシーケンスの結果に関するコンパ
イル時推測をcond_1、cond_2、・・・、cond_n(ブロッ
ク33−1、33−2、・・・、33−n)としてコー
ド化するために条件フィールドを使用することができ
る。この特定の条件フィールド・コード化の意味につい
ては、以下に詳述する。
... <cond_n> 図7のSUSPEND命令(ブロック30)は、SUSPEND命令コ
ード・フィールド(ブロック31)と、モード・フィー
ルド(ブロック32)と、条件フィールド(ブロック3
3)とを含む。本発明の好ましい実施例では、1つまた
は複数の分岐からなるシーケンスの結果に関するコンパ
イル時推測をcond_1、cond_2、・・・、cond_n(ブロッ
ク33−1、33−2、・・・、33−n)としてコー
ド化するために条件フィールドを使用することができ
る。この特定の条件フィールド・コード化の意味につい
ては、以下に詳述する。
【0055】モード・フィールドは、2通りの方法のう
ちの1つで条件フィールド内の1組の条件を解釈するた
めに使用する。モード・フィールドが有効(V)に設定
されている場合は、スレッド管理ユニットは、SUSPEND
命令に関連する<cond_1>〜<cond_n>のうち、コンパイル
時指定条件のいずれか1つが実行時に偽と評価された場
合に、SUSPEND命令に関連する依存領域内の1組の命令
の結果を破棄する。モード・フィールドが無効(I)に
設定されている場合は、スレッド管理ユニットは、SUSP
END命令に関連する<cond_1>〜<cond_n>というコンパイ
ル時指定条件のすべてが実行時に真と評価された場合
に、SUSPEND命令に関連する依存領域内の1組の命令の
結果を破棄する。直観的に言えば、コンパイラは、フォ
ーク点から組合せ点までの優良経路をコード化するため
に有効モード設定を使用し、フォーク点から組合せ点ま
での不良経路をコード化するために無効モード設定を使
用するはずである。
ちの1つで条件フィールド内の1組の条件を解釈するた
めに使用する。モード・フィールドが有効(V)に設定
されている場合は、スレッド管理ユニットは、SUSPEND
命令に関連する<cond_1>〜<cond_n>のうち、コンパイル
時指定条件のいずれか1つが実行時に偽と評価された場
合に、SUSPEND命令に関連する依存領域内の1組の命令
の結果を破棄する。モード・フィールドが無効(I)に
設定されている場合は、スレッド管理ユニットは、SUSP
END命令に関連する<cond_1>〜<cond_n>というコンパイ
ル時指定条件のすべてが実行時に真と評価された場合
に、SUSPEND命令に関連する依存領域内の1組の命令の
結果を破棄する。直観的に言えば、コンパイラは、フォ
ーク点から組合せ点までの優良経路をコード化するため
に有効モード設定を使用し、フォーク点から組合せ点ま
での不良経路をコード化するために無効モード設定を使
用するはずである。
【0056】一連の条件のうちの第1の条件cond_1は、
SUSPEND命令を含む将来スレッドをフォークしたあとで
実行時にフォーキング・スレッドによって検出された第
1の固有の条件付き分岐に関連づけられ、一連の条件の
うちの第2の条件cond_2は、SUSPEND命令を含む将来ス
レッドをフォークしたあとで実行時にフォーキング・ス
レッドによって検出された第2の固有の条件ブランチに
関連づけられ、以下同様になる。異なる命令位置に常駐
する分岐だけが固有と見なされる。さらに、好ましい実
施例では特定の分岐結果のコンパイル時推測をコード化
する条件は、実行(T)、非実行(N)、無指定(X)
のいずれかにすることができる。あるいは、これらの条
件に関連する推測は、実行(T)または非実行(N)の
いずれかになるように制限することができる。
SUSPEND命令を含む将来スレッドをフォークしたあとで
実行時にフォーキング・スレッドによって検出された第
1の固有の条件付き分岐に関連づけられ、一連の条件の
うちの第2の条件cond_2は、SUSPEND命令を含む将来ス
レッドをフォークしたあとで実行時にフォーキング・ス
レッドによって検出された第2の固有の条件ブランチに
関連づけられ、以下同様になる。異なる命令位置に常駐
する分岐だけが固有と見なされる。さらに、好ましい実
施例では特定の分岐結果のコンパイル時推測をコード化
する条件は、実行(T)、非実行(N)、無指定(X)
のいずれかにすることができる。あるいは、これらの条
件に関連する推測は、実行(T)または非実行(N)の
いずれかになるように制限することができる。
【0057】条件コード化形式をさらに明確にするた
め、以下のコード化例を検討する。
め、以下のコード化例を検討する。
【0058】○ SUSPEND V, T X N このコード化は、推測が該当する場合のみ、この条件付
き中断命令のあとに続く命令が有効であることを意味す
る。すなわち、SUSPEND命令に関連する<cond_1>〜<cond
_n>というコンパイル時指定条件のすべてが実行時に真
と評価された場合に、SUSPEND命令に関連する依存領域
内の1組の命令の結果である。第1の制御流れ条件で
は、SUSPEND命令を含むスレッドをフォークしたあとで
実行時にフォーキング・スレッドによって検出された第
1の固有の条件付き分岐が実行されると想定する。第2
のこのような分岐は、どちらに進んでもよい(すなわ
ち、制御非依存分岐)とコンパイラによって認められ、
第3のこのような分岐は、非実行であるとコンパイラに
よって想定されている。
き中断命令のあとに続く命令が有効であることを意味す
る。すなわち、SUSPEND命令に関連する<cond_1>〜<cond
_n>というコンパイル時指定条件のすべてが実行時に真
と評価された場合に、SUSPEND命令に関連する依存領域
内の1組の命令の結果である。第1の制御流れ条件で
は、SUSPEND命令を含むスレッドをフォークしたあとで
実行時にフォーキング・スレッドによって検出された第
1の固有の条件付き分岐が実行されると想定する。第2
のこのような分岐は、どちらに進んでもよい(すなわ
ち、制御非依存分岐)とコンパイラによって認められ、
第3のこのような分岐は、非実行であるとコンパイラに
よって想定されている。
【0059】○ SUSPEND I, N T X N T X T このコード化は、推測が該当する場合のみ、この条件付
き中断命令のあとに続く命令が無効であることを意味す
る。すなわち、SUSPEND命令に関連する<cond_1>〜<cond
_n>というコンパイル時指定条件のすべてが実行時に真
と評価された場合にのみ、SUSPEND命令に関連する依存
領域内の1組の命令の結果が破棄される。第1の制御流
れ条件では、SUSPEND命令を含むスレッドをフォークし
たあとで実行時にフォーキング・スレッドによって検出
された第1の固有の条件付き分岐が実行されないと想定
する。第2のこのような分岐は、実行であるとコンパイ
ラによって想定され、第3のこのような分岐は、どちら
に進んでもよい(すなわち、制御非依存分岐)とコンパ
イラによって認められ、第4のこのような分岐は、非実
行であるとコンパイラによって想定され、第5のこのよ
うな分岐は、実行であると想定され、第6のこのような
分岐は、どちらに進んでもよいと認められ、第7のこの
ような分岐は、実行であると想定されている。
き中断命令のあとに続く命令が無効であることを意味す
る。すなわち、SUSPEND命令に関連する<cond_1>〜<cond
_n>というコンパイル時指定条件のすべてが実行時に真
と評価された場合にのみ、SUSPEND命令に関連する依存
領域内の1組の命令の結果が破棄される。第1の制御流
れ条件では、SUSPEND命令を含むスレッドをフォークし
たあとで実行時にフォーキング・スレッドによって検出
された第1の固有の条件付き分岐が実行されないと想定
する。第2のこのような分岐は、実行であるとコンパイ
ラによって想定され、第3のこのような分岐は、どちら
に進んでもよい(すなわち、制御非依存分岐)とコンパ
イラによって認められ、第4のこのような分岐は、非実
行であるとコンパイラによって想定され、第5のこのよ
うな分岐は、実行であると想定され、第6のこのような
分岐は、どちらに進んでもよいと認められ、第7のこの
ような分岐は、実行であると想定されている。
【0060】ただし、フォーク後で組合せ前の領域内の
フォーキング・スレッド・コードがループなしになるよ
うに制限されている場合は、フォーク後にフォーキング
・スレッド内で検出される分岐の動的シーケンスがすべ
て固有のものになるはずであることに留意されたい。す
なわち、このような状況では、第1の固有の条件付き分
岐は単に第1の動的検出条件付き分岐になり、第2の固
有の条件付き分岐は単に第2の動的検出条件付き分岐に
なり、以下同様になるはずである。
フォーキング・スレッド・コードがループなしになるよ
うに制限されている場合は、フォーク後にフォーキング
・スレッド内で検出される分岐の動的シーケンスがすべ
て固有のものになるはずであることに留意されたい。す
なわち、このような状況では、第1の固有の条件付き分
岐は単に第1の動的検出条件付き分岐になり、第2の固
有の条件付き分岐は単に第2の動的検出条件付き分岐に
なり、以下同様になるはずである。
【0061】上記の条件形式は、FORK_SUSPEND、FORK_S
_SUSPEND、FORK_M_SUSPENDの各命令の場合にコンパイル
時推測条件を指定する際にも使用する。好ましい実施例
では、FORK_SUSPEND、FORK_S_SUSPEND、FORK_M_SUSPEND
の各命令で使用する条件フィールド・コード化におい
て、SUSPEND命令に関連する<cond_1>〜<cond_n>のう
ち、コンパイル時指定条件のいずれか1つが実行時に偽
と評価された場合に、スレッド管理ユニットがSUSPEND
命令に関連する依存領域内の1組の命令の結果を破棄す
ることを意味する、有効モード・フィールド設定を想定
している。
_SUSPEND、FORK_M_SUSPENDの各命令の場合にコンパイル
時推測条件を指定する際にも使用する。好ましい実施例
では、FORK_SUSPEND、FORK_S_SUSPEND、FORK_M_SUSPEND
の各命令で使用する条件フィールド・コード化におい
て、SUSPEND命令に関連する<cond_1>〜<cond_n>のう
ち、コンパイル時指定条件のいずれか1つが実行時に偽
と評価された場合に、スレッド管理ユニットがSUSPEND
命令に関連する依存領域内の1組の命令の結果を破棄す
ることを意味する、有効モード・フィールド設定を想定
している。
【0062】4.FORK_SUSPEND <addr>, <N1,cond_1>
... <Nn,cond_n> 図8のFORK_SUSPEND命令(ブロック40)は、命令コー
ド・フィールド(ブロック41)と、アドレス・フィー
ルド(ブロック42)と、それぞれが1つのカウント・
フィールドと1つまたは複数の条件とに関連づけられて
いる1つまたは複数の条件フィールド(ブロック43−
1、43−2、・・・、43−n)とを含む。条件用の
好ましい形式は、有効モード・フィールドを想定し、SU
SPEND命令のコンテキストで前述したものと同じであ
る。
... <Nn,cond_n> 図8のFORK_SUSPEND命令(ブロック40)は、命令コー
ド・フィールド(ブロック41)と、アドレス・フィー
ルド(ブロック42)と、それぞれが1つのカウント・
フィールドと1つまたは複数の条件とに関連づけられて
いる1つまたは複数の条件フィールド(ブロック43−
1、43−2、・・・、43−n)とを含む。条件用の
好ましい形式は、有効モード・フィールドを想定し、SU
SPEND命令のコンテキストで前述したものと同じであ
る。
【0063】5.SKIP <n> 図9のSKIP命令(ブロック50)は、命令コード(ブロ
ック51)と、SKIP命令のコンテキストで前述したよう
に、この命令以降で実行をスキップすることができる命
令の数を指定するカウント・フィールド(ブロック5
2)とを含む。
ック51)と、SKIP命令のコンテキストで前述したよう
に、この命令以降で実行をスキップすることができる命
令の数を指定するカウント・フィールド(ブロック5
2)とを含む。
【0064】6.FORK_S_SUSPEND <addr>, <N>, <N1,co
nd_1> ... <Nn,cond_n> 図10のFORK_S_SUSPEND命令(ブロック60)は、命令
コード・フィールド(ブロック61)と、アドレス・フ
ィールド(ブロック62)と、(SKIP命令のコンテキス
トで)前述した意味で実行をスキップすることができ
る、スレッドの先頭にある命令の数を指定するカウント
・フィールド(ブロック63)と、それぞれが1つのカ
ウント・フィールドと1つまたは複数の条件とに関連づ
けられている1つまたは複数の条件フィールド(ブロッ
ク64−1、64−2、・・・、64−n)とを含む。
条件用の好ましい形式は、有効モード・フィールドを想
定し、SUSPEND命令のコンテキストで前述したものと同
じである。
nd_1> ... <Nn,cond_n> 図10のFORK_S_SUSPEND命令(ブロック60)は、命令
コード・フィールド(ブロック61)と、アドレス・フ
ィールド(ブロック62)と、(SKIP命令のコンテキス
トで)前述した意味で実行をスキップすることができ
る、スレッドの先頭にある命令の数を指定するカウント
・フィールド(ブロック63)と、それぞれが1つのカ
ウント・フィールドと1つまたは複数の条件とに関連づ
けられている1つまたは複数の条件フィールド(ブロッ
ク64−1、64−2、・・・、64−n)とを含む。
条件用の好ましい形式は、有効モード・フィールドを想
定し、SUSPEND命令のコンテキストで前述したものと同
じである。
【0065】7.FORK_M_SUSPEND <addr>, <M1,cond_1>
... <Mn,cond_n> 図11のFORK_M_SUSPEND命令(ブロック70)は、命令
コード・フィールド(ブロック71)と、アドレス・フ
ィールド(ブロック72)と、それぞれが1つのマスク
・フィールドと1つまたは複数の条件とに関連づけられ
ている1つまたは複数の条件フィールド(ブロック73
−1、73−2、・・・、73−n)とを含む。それぞ
れのマスク・フィールドは、有効なソース・オペランド
を保持する1組のアーキテクチャ化レジスタを指定する
レジスタ・マスクを含むが、関連条件は実行時に適用さ
れるものとする。条件用の好ましい形式は、有効モード
・フィールドを想定し、SUSPEND命令のコンテキストで
前述したものと同じである。
... <Mn,cond_n> 図11のFORK_M_SUSPEND命令(ブロック70)は、命令
コード・フィールド(ブロック71)と、アドレス・フ
ィールド(ブロック72)と、それぞれが1つのマスク
・フィールドと1つまたは複数の条件とに関連づけられ
ている1つまたは複数の条件フィールド(ブロック73
−1、73−2、・・・、73−n)とを含む。それぞ
れのマスク・フィールドは、有効なソース・オペランド
を保持する1組のアーキテクチャ化レジスタを指定する
レジスタ・マスクを含むが、関連条件は実行時に適用さ
れるものとする。条件用の好ましい形式は、有効モード
・フィールドを想定し、SUSPEND命令のコンテキストで
前述したものと同じである。
【0066】8.FSKIP <mask> <n> 図12のFSKIP命令(ブロック80)は、命令コード・
フィールド(ブロック81)と、1組のレジスタを定義
するマスク・フィールド(ブロック82)と、FSKIP命
令のコンテキストで前述したように、完全にスキップす
ることができる命令の数を指定するカウント・フィール
ド(ブロック83)とを含む。
フィールド(ブロック81)と、1組のレジスタを定義
するマスク・フィールド(ブロック82)と、FSKIP命
令のコンテキストで前述したように、完全にスキップす
ることができる命令の数を指定するカウント・フィール
ド(ブロック83)とを含む。
【0067】9.SKPMG <n> 図13のSKPMG命令(ブロック90)は、命令コード・
フィールド(ブロック91)と、SKPMG命令のコンテキ
ストで前述したように、この命令以降で実行をスキップ
することができる命令の数を指定するカウント・フィー
ルド(ブロック92)とを含む。
フィールド(ブロック91)と、SKPMG命令のコンテキ
ストで前述したように、この命令以降で実行をスキップ
することができる命令の数を指定するカウント・フィー
ルド(ブロック92)とを含む。
【0068】組合せアクション:フォーク済みスレッド
とフォーキング・スレッドとの組合せ:対応するフォー
キング・スレッド(たとえば、メイン・スレッド)がフ
ォーク済み(将来)スレッドの先頭に達すると、フォー
ク済み将来スレッドがフォーキング・スレッドと組み合
わされる。この組合せは、フォーク済みスレッドによっ
て定義されたCPU状態が置き換えられ、残りの状態が
フォーキング・スレッドから保持されるように、2つの
スレッドのCPU状態を組み合わせることによって実施
される。通常、あるスレッドのCPU状態は、そのスレ
ッドによって使用され定義されるアーキテクチャ上可視
のレジスタを含むはずである。フォーキング・スレッド
・プログラム・カウンタは、組み合わされたフォーク済
みスレッドによって正しく実行された命令が再実行され
ず、組み合わされたフォーク済みスレッドによって実行
されていない命令が適切に実行されるように実行を続行
するために更新される。この場合、正しく実行された命
令とは、重要なプログラム依存関係に違反しないような
命令を意味する。フォーキング・スレッドは、組み合わ
されたスレッドの最新実行点を過ぎても実行を続行し、
組み合わされた将来スレッドによって正しく実行された
命令は、組合せプロセスの終わりに完了の対象となる。
組み合わされた将来スレッドに関連する資源は、組合せ
プロセスの終わりに解放される。ただし、組合せの時点
では、フォーク済み将来スレッドがすでに中断されてい
るか、まだ活発に実行中であるかのいずれかであること
に留意されたい。いずれも場合も、組合せプロセスが終
わると、組み合わされた将来スレッドが効果的に存在を
停止する。また、UNCOND_SUSPENDなどの明示的な中断プ
リミティブがない場合は、組合せが行われるまでフォー
ク済み将来スレッドがいつも実行を続けるはずであるこ
とにも留意されたい。
とフォーキング・スレッドとの組合せ:対応するフォー
キング・スレッド(たとえば、メイン・スレッド)がフ
ォーク済み(将来)スレッドの先頭に達すると、フォー
ク済み将来スレッドがフォーキング・スレッドと組み合
わされる。この組合せは、フォーク済みスレッドによっ
て定義されたCPU状態が置き換えられ、残りの状態が
フォーキング・スレッドから保持されるように、2つの
スレッドのCPU状態を組み合わせることによって実施
される。通常、あるスレッドのCPU状態は、そのスレ
ッドによって使用され定義されるアーキテクチャ上可視
のレジスタを含むはずである。フォーキング・スレッド
・プログラム・カウンタは、組み合わされたフォーク済
みスレッドによって正しく実行された命令が再実行され
ず、組み合わされたフォーク済みスレッドによって実行
されていない命令が適切に実行されるように実行を続行
するために更新される。この場合、正しく実行された命
令とは、重要なプログラム依存関係に違反しないような
命令を意味する。フォーキング・スレッドは、組み合わ
されたスレッドの最新実行点を過ぎても実行を続行し、
組み合わされた将来スレッドによって正しく実行された
命令は、組合せプロセスの終わりに完了の対象となる。
組み合わされた将来スレッドに関連する資源は、組合せ
プロセスの終わりに解放される。ただし、組合せの時点
では、フォーク済み将来スレッドがすでに中断されてい
るか、まだ活発に実行中であるかのいずれかであること
に留意されたい。いずれも場合も、組合せプロセスが終
わると、組み合わされた将来スレッドが効果的に存在を
停止する。また、UNCOND_SUSPENDなどの明示的な中断プ
リミティブがない場合は、組合せが行われるまでフォー
ク済み将来スレッドがいつも実行を続けるはずであるこ
とにも留意されたい。
【0069】フォークの任意選択性:本発明で提案した
命令の新規の特徴は、コンパイル時にそれを使用する場
合、実行時CPU資源に関するいかなる想定も必要とし
ない点である。実際の実施態様の積極性に応じて、特定
のCPUが将来スレッドを実際にフォークできる場合も
あれば、できない場合もある。すなわち、CPUの観点
から見ると、FORK命令の検出に応答して実行時に実際に
フォークするかどうかは、完全に任意選択である。この
ような命令のユーザ(たとえば、コンパイラ)は、保留
の将来スレッドの数を追跡する必要がなく、また、実行
時に確かに従う(すなわち、将来スレッドをフォークす
る)べき特定のフォークを想定することもできない。
命令の新規の特徴は、コンパイル時にそれを使用する場
合、実行時CPU資源に関するいかなる想定も必要とし
ない点である。実際の実施態様の積極性に応じて、特定
のCPUが将来スレッドを実際にフォークできる場合も
あれば、できない場合もある。すなわち、CPUの観点
から見ると、FORK命令の検出に応答して実行時に実際に
フォークするかどうかは、完全に任意選択である。この
ような命令のユーザ(たとえば、コンパイラ)は、保留
の将来スレッドの数を追跡する必要がなく、また、実行
時に確かに従う(すなわち、将来スレッドをフォークす
る)べき特定のフォークを想定することもできない。
【0070】コンパイラは、個別の(将来)スレッドと
して実行可能な制御およびデータ非依存コード領域を識
別する。ただし、コンパイラは、このようなスレッドが
並列実行されることを想定するような追加の再構造化ま
たは最適化を一切実行しない。たとえば、コンパイラ
は、挿入されたFORK命令のいずれかが実行時にCPUに
よって無視されると、正しいプログラム実行の保証が必
要になるはずのスピル・コードを保持する。スピル・コ
ードとは、アーキテクチャ上可視のCPUレジスタの内
容を命令キャッシュ内の所与の位置に格納し、その後、
別の介入格納を行わずに同じ位置の内容を再ロードする
ためにコンパイル時に挿入される1組の命令を意味す
る。ただし、スピル・コードの実行は、将来スレッドと
してそれを実行している間は冗長になる可能性があるこ
とに留意されたい。将来スレッド実行中のこのようなス
ピル・コードの処理を最適化するため、本発明はSKIP命
令とFSKIPおよびSKPMGなどのその変形態様を追加してい
る。これらは、冗長なスピル・コードの実行を低減また
は解消するためのコンパイル時のヒントを可能にするも
のである。この新しい命令の意味の詳細は、前述の通り
である。
して実行可能な制御およびデータ非依存コード領域を識
別する。ただし、コンパイラは、このようなスレッドが
並列実行されることを想定するような追加の再構造化ま
たは最適化を一切実行しない。たとえば、コンパイラ
は、挿入されたFORK命令のいずれかが実行時にCPUに
よって無視されると、正しいプログラム実行の保証が必
要になるはずのスピル・コードを保持する。スピル・コ
ードとは、アーキテクチャ上可視のCPUレジスタの内
容を命令キャッシュ内の所与の位置に格納し、その後、
別の介入格納を行わずに同じ位置の内容を再ロードする
ためにコンパイル時に挿入される1組の命令を意味す
る。ただし、スピル・コードの実行は、将来スレッドと
してそれを実行している間は冗長になる可能性があるこ
とに留意されたい。将来スレッド実行中のこのようなス
ピル・コードの処理を最適化するため、本発明はSKIP命
令とFSKIPおよびSKPMGなどのその変形態様を追加してい
る。これらは、冗長なスピル・コードの実行を低減また
は解消するためのコンパイル時のヒントを可能にするも
のである。この新しい命令の意味の詳細は、前述の通り
である。
【0071】FORK命令の任意選択性の直接的な結果とし
て、それぞれが0個またはそれ以上のスレッドをフォー
クできる、この強化型マシン・アーキテクチャの各種実
施態様に応じて再コンパイルする必要がないことに留意
されたい。同様に、新しい命令のいずれも含まない古い
2進コードについても、再コンパイルの必要はない。
て、それぞれが0個またはそれ以上のスレッドをフォー
クできる、この強化型マシン・アーキテクチャの各種実
施態様に応じて再コンパイルする必要がないことに留意
されたい。同様に、新しい命令のいずれも含まない古い
2進コードについても、再コンパイルの必要はない。
【0072】将来スレッドでの複数条件付き中断の解
釈:FORK命令に応答してフォークされた将来スレッド
が、無条件中断を検出する前に一連の条件付き中断を検
出する可能性がある。それぞれの条件付き中断は、いま
だに共通のフォーク点に関連してしかも他の条件付き中
断とは無関係に解釈されている。したがって、各種の制
御流れ推測を将来スレッドの様々な部分に関連づけるこ
とは可能である。ここでSUSPEND命令Aについて検討す
る。FORK、SUSPEND、UNCOND_SUSPEND、FORK_S_SUSPEN
D、FORK_M_SUSPEND、またはSKPMG命令以外のいくつかの
命令の後で、別のSUSPEND命令BがAの後に続くと想定
する。通常、SUSPEND命令Bの後にはUNCOND_SUSPEND命
令が続くはずである。ここで、SUSPEND命令Aに関連す
るコンパイル時条件が実行時に偽になると判定されてい
ると想定する。コンパイルを簡略化し、将来スレッドで
の状態維持を低減するために、本発明の好ましい実施例
では、破棄の時期を命令AとBとの間に限定するのでは
なく、命令AとUNCOND_SUSPEND命令との間にすべての命
令の結果を破棄できるだけである。
釈:FORK命令に応答してフォークされた将来スレッド
が、無条件中断を検出する前に一連の条件付き中断を検
出する可能性がある。それぞれの条件付き中断は、いま
だに共通のフォーク点に関連してしかも他の条件付き中
断とは無関係に解釈されている。したがって、各種の制
御流れ推測を将来スレッドの様々な部分に関連づけるこ
とは可能である。ここでSUSPEND命令Aについて検討す
る。FORK、SUSPEND、UNCOND_SUSPEND、FORK_S_SUSPEN
D、FORK_M_SUSPEND、またはSKPMG命令以外のいくつかの
命令の後で、別のSUSPEND命令BがAの後に続くと想定
する。通常、SUSPEND命令Bの後にはUNCOND_SUSPEND命
令が続くはずである。ここで、SUSPEND命令Aに関連す
るコンパイル時条件が実行時に偽になると判定されてい
ると想定する。コンパイルを簡略化し、将来スレッドで
の状態維持を低減するために、本発明の好ましい実施例
では、破棄の時期を命令AとBとの間に限定するのでは
なく、命令AとUNCOND_SUSPEND命令との間にすべての命
令の結果を破棄できるだけである。
【0073】組合せ点の識別の簡略化:コンパイル時に
は、将来スレッド内のすべてのスピル・ロードをグルー
プ化し、そのグループを将来スレッドの実行が始まるブ
ロックの先頭に移動させることが可能な場合もある。す
べての潜在的将来スレッドの最初の実行が新しいSKPMG
命令になるようにさらにコンパイラが保証する場合、こ
の命令は、スキップ可能なスピル・ロードの標識ならび
に将来スレッドの開始用のマーカの両方の役割を果た
す。この命令の意味については、前述の通りである。た
だし、(SKPMGの形での)このような将来スレッド・マ
ーカがない場合、メイン・スレッドは、絶えずその命令
アドレスをすべての事前フォーク済み将来スレッドと照
らし合わせて検査し、組合せが必要かどうかを検出する
必要がある場合もあることに留意されたい。また、スキ
ップされる命令の数がゼロであっても、この解釈では将
来スレッド・マーカの追加機能を果たすので、コンパイ
ラはこのSKPMG命令を挿入しなければならない。
は、将来スレッド内のすべてのスピル・ロードをグルー
プ化し、そのグループを将来スレッドの実行が始まるブ
ロックの先頭に移動させることが可能な場合もある。す
べての潜在的将来スレッドの最初の実行が新しいSKPMG
命令になるようにさらにコンパイラが保証する場合、こ
の命令は、スキップ可能なスピル・ロードの標識ならび
に将来スレッドの開始用のマーカの両方の役割を果た
す。この命令の意味については、前述の通りである。た
だし、(SKPMGの形での)このような将来スレッド・マ
ーカがない場合、メイン・スレッドは、絶えずその命令
アドレスをすべての事前フォーク済み将来スレッドと照
らし合わせて検査し、組合せが必要かどうかを検出する
必要がある場合もあることに留意されたい。また、スキ
ップされる命令の数がゼロであっても、この解釈では将
来スレッド・マーカの追加機能を果たすので、コンパイ
ラはこのSKPMG命令を挿入しなければならない。
【0074】図3および図4は、1次実行方法(PE
M)と呼ばれる本発明の実行方法の諸ステップを示す流
れ図である。本発明の方法の説明とともに、図3および
図4の詳細説明を以下に示す。
M)と呼ばれる本発明の実行方法の諸ステップを示す流
れ図である。本発明の方法の説明とともに、図3および
図4の詳細説明を以下に示す。
【0075】1.フォーク点の検出(ブロック21
0):本発明で提案した新しい命令とは無関係に、当技
術分野で既知の技法を使用して静的順序の命令シーケン
スを生成する。この命令シーケンスを分析して、1組の
フォーク点を判定する。フォーク点とは、静的命令シー
ケンス中の位置であって、使用可能なマシン状態が順次
追跡順序で後から(ただし、フォーク点の直後ではな
い)現れる1組または複数組の命令の並列実行を開始で
きる位置を意味する。フォーク点の識別には、先行技術
で既知の技法を使用して対応するプログラム依存性グラ
フ(制御依存性グラフとデータ依存性グラフの組合せ)
の一部または全部に基づいて行う、データおよび制御依
存性分析が含まれる。たとえば、分岐命令を解決する
と、実質的に分岐命令に制御依存している命令のスレッ
ド用のフォーク点に到達することができる。
0):本発明で提案した新しい命令とは無関係に、当技
術分野で既知の技法を使用して静的順序の命令シーケン
スを生成する。この命令シーケンスを分析して、1組の
フォーク点を判定する。フォーク点とは、静的命令シー
ケンス中の位置であって、使用可能なマシン状態が順次
追跡順序で後から(ただし、フォーク点の直後ではな
い)現れる1組または複数組の命令の並列実行を開始で
きる位置を意味する。フォーク点の識別には、先行技術
で既知の技法を使用して対応するプログラム依存性グラ
フ(制御依存性グラフとデータ依存性グラフの組合せ)
の一部または全部に基づいて行う、データおよび制御依
存性分析が含まれる。たとえば、分岐命令を解決する
と、実質的に分岐命令に制御依存している命令のスレッ
ド用のフォーク点に到達することができる。
【0076】2.FORKの挿入(ブロック220):コン
パイル時に潜在的フォーク点のうちの0個またはそれ以
上に0個またはそれ以上のFORK命令を挿入する。この位
置では、FORK命令は、フォーク点に関連する0個または
それ以上の潜在的将来スレッドの開始アドレスを識別す
ることができる。特定のFORK命令とそのフォーク済み将
来スレッド(複数も可)との関連づけがある場合は、そ
の関連づけが前述のTMユニットによって管理される。
パイル時に潜在的フォーク点のうちの0個またはそれ以
上に0個またはそれ以上のFORK命令を挿入する。この位
置では、FORK命令は、フォーク点に関連する0個または
それ以上の潜在的将来スレッドの開始アドレスを識別す
ることができる。特定のFORK命令とそのフォーク済み将
来スレッド(複数も可)との関連づけがある場合は、そ
の関連づけが前述のTMユニットによって管理される。
【0077】3.静的シーケンスのロード(ブロック2
30):固定位置から始まるメモリ・システム(図1の
ブロック100)に前のステップ(FORKの挿入、ブロッ
ク220)後に生成した静的順序の命令シーケンスをロ
ードする。この固定位置では、メモリ・システムと中央
演算処理装置の命令キャッシュとのインタフェースが取
られ、静的シーケンスの続きが定期的に命令キャッシュ
に転送される。
30):固定位置から始まるメモリ・システム(図1の
ブロック100)に前のステップ(FORKの挿入、ブロッ
ク220)後に生成した静的順序の命令シーケンスをロ
ードする。この固定位置では、メモリ・システムと中央
演算処理装置の命令キャッシュとのインタフェースが取
られ、静的シーケンスの続きが定期的に命令キャッシュ
に転送される。
【0078】4.取出しと組合せ検査(ブロック24
0):現行アドレス以降について、メイン・プログラム
・カウンタ(すなわち、メイン・スレッドとして)によ
りシーケンスをアドレス指定し、プログラム・カウンタ
を更新することにより、命令キャッシュから命令シーケ
ンスを取り出す。命令キャッシュ内で見つからない命令
はメイン・メモリからキャッシュに取り出される。命令
の取出しとともに、現行命令取出しアドレス以降につい
て、組み合わされていない1つまたは複数の将来スレッ
ドがあるかどうかを判定するための検査も行われる。こ
の暗黙の組合せ検査の実行は、TMユニット(図1のブ
ロック130)も担当する。この検査は通常、組み合わ
されていない(保留)すべての将来スレッドの開始アド
レスとそれぞれの命令取出しアドレスとの比較を含むは
ずである。
0):現行アドレス以降について、メイン・プログラム
・カウンタ(すなわち、メイン・スレッドとして)によ
りシーケンスをアドレス指定し、プログラム・カウンタ
を更新することにより、命令キャッシュから命令シーケ
ンスを取り出す。命令キャッシュ内で見つからない命令
はメイン・メモリからキャッシュに取り出される。命令
の取出しとともに、現行命令取出しアドレス以降につい
て、組み合わされていない1つまたは複数の将来スレッ
ドがあるかどうかを判定するための検査も行われる。こ
の暗黙の組合せ検査の実行は、TMユニット(図1のブ
ロック130)も担当する。この検査は通常、組み合わ
されていない(保留)すべての将来スレッドの開始アド
レスとそれぞれの命令取出しアドレスとの比較を含むは
ずである。
【0079】5.スレッド妥当性検査(ブロック25
0):1つまたは複数の将来スレッドが別の実行スレッ
ド(たとえば、メイン・スレッド)の命令取出しアドレ
スに事前にフォークされていると前のステップ(ブロッ
ク240)で判定された場合は、1つまたは複数の推測
の結果、プログラム依存関係の違反のためにこのような
将来スレッドのそれぞれによって実行された命令の一部
または全部を破棄する必要があるかどうかを確認するた
めに、追加の検査がTMユニットによって行われる。
0):1つまたは複数の将来スレッドが別の実行スレッ
ド(たとえば、メイン・スレッド)の命令取出しアドレ
スに事前にフォークされていると前のステップ(ブロッ
ク240)で判定された場合は、1つまたは複数の推測
の結果、プログラム依存関係の違反のためにこのような
将来スレッドのそれぞれによって実行された命令の一部
または全部を破棄する必要があるかどうかを確認するた
めに、追加の検査がTMユニットによって行われる。
【0080】6.組合せ(ブロック260):前のステ
ップ(スレッド妥当性検査、ブロック250)で識別さ
れたフォーク済み将来スレッドのうち、有効に実行され
た部分が、前述の組合せ動作によりメイン・スレッドと
組み合わされる。
ップ(スレッド妥当性検査、ブロック250)で識別さ
れたフォーク済み将来スレッドのうち、有効に実行され
た部分が、前述の組合せ動作によりメイン・スレッドと
組み合わされる。
【0081】7.デコード(ブロック270):取り出
した命令をディスパッチャでデコードする。その命令の
うちの1つまたは複数がFORK命令としてデコードされた
かどうかを確認するために検査する。
した命令をディスパッチャでデコードする。その命令の
うちの1つまたは複数がFORK命令としてデコードされた
かどうかを確認するために検査する。
【0082】8.メイン・スレッドの実行(ブロック2
80):前のステップ(デコード、ブロック270)で
いずれかの命令がFORK以外の命令としてデコードされた
場合、(図1のブロック140を使用して)命令依存関
係を分析し、適切な機能ユニット(図2のブロック18
0)上で実行するために(図1のブロック150を使用
して)それらをスケジューリングすることにより、実行
を続行する。
80):前のステップ(デコード、ブロック270)で
いずれかの命令がFORK以外の命令としてデコードされた
場合、(図1のブロック140を使用して)命令依存関
係を分析し、適切な機能ユニット(図2のブロック18
0)上で実行するために(図1のブロック150を使用
して)それらをスケジューリングすることにより、実行
を続行する。
【0083】9.完了(ブロック290):前述のよう
に、完了ユニット(図2のブロック190)により命令
実行を完了する。ステップ4〜9に記載した取出し、デ
コード、実行のプロセスは続行される。
に、完了ユニット(図2のブロック190)により命令
実行を完了する。ステップ4〜9に記載した取出し、デ
コード、実行のプロセスは続行される。
【0084】10.フォーク能力の判定(ブロック30
0):上記のブロック270に関連するステップ(デコ
ード)で命令がFORK命令としてデコードされた場合は、
追加の将来スレッドをフォークするために使用可能なマ
シン資源があるかどうかを判定するための検査が行われ
る。将来スレッドをフォークするのに必要なマシン資源
としては、使用可能なプログラム・カウンタと、スレッ
ド状態を保管するために使用可能な内部バッファ空間な
どがある。
0):上記のブロック270に関連するステップ(デコ
ード)で命令がFORK命令としてデコードされた場合は、
追加の将来スレッドをフォークするために使用可能なマ
シン資源があるかどうかを判定するための検査が行われ
る。将来スレッドをフォークするのに必要なマシン資源
としては、使用可能なプログラム・カウンタと、スレッ
ド状態を保管するために使用可能な内部バッファ空間な
どがある。
【0085】11.フォーク(ブロック310):使用
可能な資源がある場合は、FORK命令に関連するアドレス
(複数も可)を将来プログラム・カウンタ(複数も可)
にロードすることにより、TMユニットが将来スレッド
(複数も可)をフォークする。これにより将来スレッド
(複数も可)の実行が始まるが、将来スレッドの開始マ
シン状態(プログラム・カウンタを除く)は、フォーク
点でのメイン・スレッド(関連FORK命令をデコードする
スレッド)のものと同じになる。
可能な資源がある場合は、FORK命令に関連するアドレス
(複数も可)を将来プログラム・カウンタ(複数も可)
にロードすることにより、TMユニットが将来スレッド
(複数も可)をフォークする。これにより将来スレッド
(複数も可)の実行が始まるが、将来スレッドの開始マ
シン状態(プログラム・カウンタを除く)は、フォーク
点でのメイン・スレッド(関連FORK命令をデコードする
スレッド)のものと同じになる。
【0086】12.将来スレッドの実行(ブロック32
0):上記のステップ(4)〜(8)と同様に、フォー
キング・スレッドの実行と並行して将来スレッドの実行
が続行される。ただし、メイン・プログラム・カウンタ
とメイン・スレッド・ディスパッチャの代わりに、将来
プログラムカウンタの1つと将来スレッド・ディスパッ
チャの1つをそれぞれ使用し、メイン・スレッドをフォ
ーキング・スレッドと呼ぶ。
0):上記のステップ(4)〜(8)と同様に、フォー
キング・スレッドの実行と並行して将来スレッドの実行
が続行される。ただし、メイン・プログラム・カウンタ
とメイン・スレッド・ディスパッチャの代わりに、将来
プログラムカウンタの1つと将来スレッド・ディスパッ
チャの1つをそれぞれ使用し、メイン・スレッドをフォ
ーキング・スレッドと呼ぶ。
【0087】13.将来スレッドの停止(ブロック33
0):将来スレッドがフォーキング・スレッドと組み合
わされた後、または将来スレッドがTMユニットによっ
て破棄された後、将来スレッドの実行が中断され、関連
資源が解放される。
0):将来スレッドがフォーキング・スレッドと組み合
わされた後、または将来スレッドがTMユニットによっ
て破棄された後、将来スレッドの実行が中断され、関連
資源が解放される。
【0088】前述の1次実行方法(PEM)の強化例を
いくつか以下に説明する。
いくつか以下に説明する。
【0089】代替実施例1: 1.PEMのステップ(2)は、以下の追加サブステッ
プを有する。 ○ すべての将来スレッドの終わりにUNCOND_SUSPEND命
令が挿入される。
プを有する。 ○ すべての将来スレッドの終わりにUNCOND_SUSPEND命
令が挿入される。
【0090】2.PEMのステップ(12)は、以下の
追加サブステップを有する。 UNCOND_SUSPEND命令を検出すると、その対応将来スレッ
ドの実行中に将来スレッドは無条件にそのスレッドを中
断する。
追加サブステップを有する。 UNCOND_SUSPEND命令を検出すると、その対応将来スレッ
ドの実行中に将来スレッドは無条件にそのスレッドを中
断する。
【0091】3.PEMのステップ(8)は、以下の追
加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにUNCOND_SUS
PEND命令が検出された場合は、その命令は無視される。
加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにUNCOND_SUS
PEND命令が検出された場合は、その命令は無視される。
【0092】代替実施例2: 1.代替実施例1を含むPEMのステップ(1)は、以
下の追加サブステップを有する。 ○ すべてのUNCOND_SUSPEND命令に対応して、対応将来
スレッドに0個またはそれ以上のSUSPEND命令を挿入す
ることができ、そこでそれぞれのSUSPEND命令が1つの
条件に関連づけられる。
下の追加サブステップを有する。 ○ すべてのUNCOND_SUSPEND命令に対応して、対応将来
スレッドに0個またはそれ以上のSUSPEND命令を挿入す
ることができ、そこでそれぞれのSUSPEND命令が1つの
条件に関連づけられる。
【0093】2.代替実施例1を含むPEMのステップ
(2)は、以下の追加サブステップを有する。 ○ SUSPEND命令に関連するコンパイル時指定条件が実
行時に真と評価される場合のみ、SUSPEND命令に関連す
る依存領域内の1組の命令が対応将来スレッドでの実行
に有効であると見なされる。したがって、将来スレッド
の実行が条件付き中断命令を検出するときまでに関連推
測が無効であると分かっている場合には、条件付き中断
点で(TMユニットによって)将来スレッドを強制的に
中断することもできる。
(2)は、以下の追加サブステップを有する。 ○ SUSPEND命令に関連するコンパイル時指定条件が実
行時に真と評価される場合のみ、SUSPEND命令に関連す
る依存領域内の1組の命令が対応将来スレッドでの実行
に有効であると見なされる。したがって、将来スレッド
の実行が条件付き中断命令を検出するときまでに関連推
測が無効であると分かっている場合には、条件付き中断
点で(TMユニットによって)将来スレッドを強制的に
中断することもできる。
【0094】3.代替実施例1を含むPEMのステップ
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにSUSPEND命
令が検出された場合は、その命令は無視される。
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにSUSPEND命
令が検出された場合は、その命令は無視される。
【0095】代替実施例3: 1.代替実施例2を含むPEMのステップ(1)は、以
下の追加サブステップを有する。 ○ 0個またはそれ以上のSKIP命令を将来スレッドに挿
入することができ、そこで、それぞれのSKIP命令が数値
sに関連づけられる。
下の追加サブステップを有する。 ○ 0個またはそれ以上のSKIP命令を将来スレッドに挿
入することができ、そこで、それぞれのSKIP命令が数値
sに関連づけられる。
【0096】2.代替実施例2を含むPEMのステップ
(2)は、以下の追加サブステップを有する。 ○ その対応将来スレッドの実行中に関連数値sを含む
SKIP命令を検出すると、この命令に続く次のs個の命令
だけをデコードする必要が生じ、これらの命令の残りの
実行はスキップすることができる。これらの命令で使用
するソース・レジスタと宛先レジスタは、有効オペラン
ドを保持するものとしてマークを付けることができる
が、いずれかの機能ユニット上で実行するためにこれら
のs個の命令をスケジューリングする必要はない。
(2)は、以下の追加サブステップを有する。 ○ その対応将来スレッドの実行中に関連数値sを含む
SKIP命令を検出すると、この命令に続く次のs個の命令
だけをデコードする必要が生じ、これらの命令の残りの
実行はスキップすることができる。これらの命令で使用
するソース・レジスタと宛先レジスタは、有効オペラン
ドを保持するものとしてマークを付けることができる
が、いずれかの機能ユニット上で実行するためにこれら
のs個の命令をスケジューリングする必要はない。
【0097】3.代替実施例2を含むPEMのステップ
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにSKIP命令が
検出された場合は、その命令は無視される。
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにSKIP命令が
検出された場合は、その命令は無視される。
【0098】代替実施例4: 1.代替実施例2を含むPEMのステップ(1)は、以
下の追加サブステップを有する。 ○ 0個またはそれ以上のFSKIP命令を将来スレッドに
挿入することができ、そこで、それぞれのFSKIP命令
が、1組のアーキテクチャ化レジスタを定義するマスク
と、数値sとに関連づけられる。
下の追加サブステップを有する。 ○ 0個またはそれ以上のFSKIP命令を将来スレッドに
挿入することができ、そこで、それぞれのFSKIP命令
が、1組のアーキテクチャ化レジスタを定義するマスク
と、数値sとに関連づけられる。
【0099】2.代替実施例2を含むPEMのステップ
(2)は、以下の追加サブステップを有する。 ○ その対応将来スレッドの実行中にマスクと数値sを
含むFSKIP命令を検出すると、この命令に続く次のs個
の命令をスキップすることができる。すなわち、これら
の命令は、取出し、デコード、または実行を行う必要が
ない。マスクで識別されたレジスタは、有効オペランド
を保持するものとしてマークを付けることができる。
(2)は、以下の追加サブステップを有する。 ○ その対応将来スレッドの実行中にマスクと数値sを
含むFSKIP命令を検出すると、この命令に続く次のs個
の命令をスキップすることができる。すなわち、これら
の命令は、取出し、デコード、または実行を行う必要が
ない。マスクで識別されたレジスタは、有効オペランド
を保持するものとしてマークを付けることができる。
【0100】3.代替実施例2を含むPEMのステップ
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにFSKIP命令
が検出された場合は、その命令は無視される。
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにFSKIP命令
が検出された場合は、その命令は無視される。
【0101】代替実施例5: 1.代替実施例2を含むPEMのステップ(1)は、以
下の追加サブステップを有する。 ○ すべての将来スレッドの先頭に1つのSKPMG命令が
挿入され、そこで、それぞれのSKPMG命令が数値sに関
連づけられる。
下の追加サブステップを有する。 ○ すべての将来スレッドの先頭に1つのSKPMG命令が
挿入され、そこで、それぞれのSKPMG命令が数値sに関
連づけられる。
【0102】2.代替実施例2を含むPEMのステップ
(2)は、以下の追加サブステップを有する。 ○ その対応将来スレッドの実行中に関連数値sを含む
SKPMG命令を検出すると、この命令に続く次のs個の命
令だけをデコードする必要が生じ、これらの命令の残り
の実行はスキップすることができる。これらの命令で使
用するソース・レジスタと宛先レジスタは、有効オペラ
ンドを保持するものとしてマークを付けることができる
が、いずれかの機能ユニット上で実行するためにこれら
のs個の命令をスケジューリングする必要はない。
(2)は、以下の追加サブステップを有する。 ○ その対応将来スレッドの実行中に関連数値sを含む
SKPMG命令を検出すると、この命令に続く次のs個の命
令だけをデコードする必要が生じ、これらの命令の残り
の実行はスキップすることができる。これらの命令で使
用するソース・レジスタと宛先レジスタは、有効オペラ
ンドを保持するものとしてマークを付けることができる
が、いずれかの機能ユニット上で実行するためにこれら
のs個の命令をスケジューリングする必要はない。
【0103】3.代替実施例2を含むPEMのステップ
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにSKPMG命令
が検出された場合は、SKPMG命令の命令アドレス以降に
ついて、将来スレッドがすでにフォークされているかど
うかを判定するための組合せ検査が行われる。
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにSKPMG命令
が検出された場合は、SKPMG命令の命令アドレス以降に
ついて、将来スレッドがすでにフォークされているかど
うかを判定するための組合せ検査が行われる。
【0104】4.PEMのステップ(4)の暗黙の組合
せ検査はここでは不要であり、そのため除去される。
せ検査はここでは不要であり、そのため除去される。
【0105】代替実施例6: 1.PEMのFORKの挿入ステップ(すなわち、ステップ
3)は、以下のステップに置き換えられる。 ○ 0個またはそれ以上の潜在的フォーク点に0個また
はそれ以上のFORK_SUSPEND命令を挿入する。その場合、
FORK_SUSPEND命令は、関連の潜在的将来スレッドの開始
アドレスを識別するアドレスと、一連の数値とを含み、
それぞれの数値には条件が付いている場合もあれば付い
ていない場合もある。所与の一連の数値は、FORK_SUSPE
ND命令に関連するアドレスから始まる命令の連続グルー
プを意味する。特定のFORK_SUSPEND命令とそのフォーク
済み将来スレッドとの関連づけがある場合は、前述のT
Mユニットによってその関連づけが管理される。
3)は、以下のステップに置き換えられる。 ○ 0個またはそれ以上の潜在的フォーク点に0個また
はそれ以上のFORK_SUSPEND命令を挿入する。その場合、
FORK_SUSPEND命令は、関連の潜在的将来スレッドの開始
アドレスを識別するアドレスと、一連の数値とを含み、
それぞれの数値には条件が付いている場合もあれば付い
ていない場合もある。所与の一連の数値は、FORK_SUSPE
ND命令に関連するアドレスから始まる命令の連続グルー
プを意味する。特定のFORK_SUSPEND命令とそのフォーク
済み将来スレッドとの関連づけがある場合は、前述のT
Mユニットによってその関連づけが管理される。
【0106】2.PEMのフォーク能力の判定ステップ
(すなわち、ステップ10)は、以下のステップに置き
換えられる。 ○ 命令がFORK_SUSPEND命令としてデコードされた場合
は、追加の将来スレッドをフォークするために使用可能
なマシン資源があるかどうかを判定するための検査が行
われる。
(すなわち、ステップ10)は、以下のステップに置き
換えられる。 ○ 命令がFORK_SUSPEND命令としてデコードされた場合
は、追加の将来スレッドをフォークするために使用可能
なマシン資源があるかどうかを判定するための検査が行
われる。
【0107】3.PEMのフォーク・ステップ(すなわ
ち、ステップ11)は、以下のステップに置き換えられ
る。 ○ 使用可能な資源がある場合は、FORK_SUSPEND命令に
関連するアドレス(複数も可)を将来プログラム・カウ
ンタ(複数も可)にロードすることにより、将来スレッ
ドをフォークする。
ち、ステップ11)は、以下のステップに置き換えられ
る。 ○ 使用可能な資源がある場合は、FORK_SUSPEND命令に
関連するアドレス(複数も可)を将来プログラム・カウ
ンタ(複数も可)にロードすることにより、将来スレッ
ドをフォークする。
【0108】4.PEMの将来スレッドの実行ステップ
(すなわち、ステップ12)は、以下の追加サブステッ
プを有する。 ○ FORK_SUSPEND命令に関連する数値列は、以下のよう
に対応将来スレッドの実行を制御する。数値たとえばn
に関連条件が一切付いていない場合は、n個の命令から
なる対応グループを将来スレッドとして無条件に実行で
きることを意味し、数値たとえばmに関連条件が付いて
いる場合は、コンパイル時指定条件が実行時に真と評価
される場合のみ、m個の命令からなる対応グループの将
来スレッド実行が有効になるはずである。
(すなわち、ステップ12)は、以下の追加サブステッ
プを有する。 ○ FORK_SUSPEND命令に関連する数値列は、以下のよう
に対応将来スレッドの実行を制御する。数値たとえばn
に関連条件が一切付いていない場合は、n個の命令から
なる対応グループを将来スレッドとして無条件に実行で
きることを意味し、数値たとえばmに関連条件が付いて
いる場合は、コンパイル時指定条件が実行時に真と評価
される場合のみ、m個の命令からなる対応グループの将
来スレッド実行が有効になるはずである。
【0109】代替実施例7: 1.PEMのFORKの挿入ステップ(すなわち、ステップ
3)は、以下のステップに置き換えられる。 ○ 0個またはそれ以上の潜在的フォーク点に0個また
はそれ以上のFORK_S_SUSPEND命令を挿入する。その場
合、FORK_S_SUSPEND命令は、関連の潜在的将来スレッド
の開始アドレスを識別するアドレスと、数値たとえばs
と、一連の数値とを含み、それぞれの数値には条件が付
いている場合もあれば付いていない場合もある。所与の
一連の数値は、FORK_S_SUSPEND命令に関連するアドレス
から始まる命令の連続グループを意味する。
3)は、以下のステップに置き換えられる。 ○ 0個またはそれ以上の潜在的フォーク点に0個また
はそれ以上のFORK_S_SUSPEND命令を挿入する。その場
合、FORK_S_SUSPEND命令は、関連の潜在的将来スレッド
の開始アドレスを識別するアドレスと、数値たとえばs
と、一連の数値とを含み、それぞれの数値には条件が付
いている場合もあれば付いていない場合もある。所与の
一連の数値は、FORK_S_SUSPEND命令に関連するアドレス
から始まる命令の連続グループを意味する。
【0110】2.PEMのフォーク能力の判定ステップ
(すなわち、ステップ10)は、以下のステップに置き
換えられる。 ○ 命令がFORK_S_SUSPEND命令としてデコードされた場
合は、追加の将来スレッドをフォークするために使用可
能なマシン資源があるかどうかを判定するための検査が
行われる。
(すなわち、ステップ10)は、以下のステップに置き
換えられる。 ○ 命令がFORK_S_SUSPEND命令としてデコードされた場
合は、追加の将来スレッドをフォークするために使用可
能なマシン資源があるかどうかを判定するための検査が
行われる。
【0111】3.PEMのフォーク・ステップ(すなわ
ち、ステップ11)は、以下のステップに置き換えられ
る。 ○ 使用可能な資源がある場合は、FORK_S_SUSPEND命令
に関連するアドレス(複数も可)を将来プログラム・カ
ウンタ(複数も可)にロードすることにより、将来スレ
ッドをフォークする。
ち、ステップ11)は、以下のステップに置き換えられ
る。 ○ 使用可能な資源がある場合は、FORK_S_SUSPEND命令
に関連するアドレス(複数も可)を将来プログラム・カ
ウンタ(複数も可)にロードすることにより、将来スレ
ッドをフォークする。
【0112】4.PEMの将来スレッドの実行ステップ
(すなわち、ステップ12)は、以下の追加サブステッ
プを有する。 ○ FORK_S_SUSPEND命令に関連する数値列は、以下のよ
うに対応将来スレッドの実行を制御する。対応スレッド
を将来スレッドとして実行している間は最初のs個の命
令だけをデコードすることができ、これらの命令で使用
するソース・レジスタと宛先レジスタは、有効オペラン
ドを保持するものとしてマークを付けることができる
が、いずれかの機能ユニット上で実行するためにこれら
のs個の命令をスケジューリングする必要はない。さら
に、数値たとえばnに関連条件が一切付いていない場合
は、n個の命令からなる対応グループを将来スレッドと
して無条件に実行できることを意味し、数値たとえばm
に関連条件が付いている場合は、コンパイル時指定条件
が実行時に真と評価される場合のみ、m個の命令からな
る対応グループの将来スレッド実行が有効になるはずで
ある。
(すなわち、ステップ12)は、以下の追加サブステッ
プを有する。 ○ FORK_S_SUSPEND命令に関連する数値列は、以下のよ
うに対応将来スレッドの実行を制御する。対応スレッド
を将来スレッドとして実行している間は最初のs個の命
令だけをデコードすることができ、これらの命令で使用
するソース・レジスタと宛先レジスタは、有効オペラン
ドを保持するものとしてマークを付けることができる
が、いずれかの機能ユニット上で実行するためにこれら
のs個の命令をスケジューリングする必要はない。さら
に、数値たとえばnに関連条件が一切付いていない場合
は、n個の命令からなる対応グループを将来スレッドと
して無条件に実行できることを意味し、数値たとえばm
に関連条件が付いている場合は、コンパイル時指定条件
が実行時に真と評価される場合のみ、m個の命令からな
る対応グループの将来スレッド実行が有効になるはずで
ある。
【0113】代替実施例8: 1.PEMのFORKの挿入ステップ(すなわち、ステップ
3)は、以下のステップに置き換えられる。 ○ 0個またはそれ以上の潜在的フォーク点に0個また
はそれ以上のFORK_M_SUSPEND命令を挿入する。その場
合、FORK_M_SUSPEND命令は、関連の潜在的将来スレッド
の開始アドレスを識別するアドレスと、1組のマスクと
を含み、それぞれのマスクには条件が付いている場合も
あれば付いていない場合もある。
3)は、以下のステップに置き換えられる。 ○ 0個またはそれ以上の潜在的フォーク点に0個また
はそれ以上のFORK_M_SUSPEND命令を挿入する。その場
合、FORK_M_SUSPEND命令は、関連の潜在的将来スレッド
の開始アドレスを識別するアドレスと、1組のマスクと
を含み、それぞれのマスクには条件が付いている場合も
あれば付いていない場合もある。
【0114】2.PEMのフォーク能力の判定ステップ
(すなわち、ステップ10)は、以下のステップに置き
換えられる。 ○ 命令がFORK_M_SUSPEND命令としてデコードされた場
合は、追加の将来スレッドをフォークするために使用可
能なマシン資源があるかどうかを判定するための検査が
行われる。
(すなわち、ステップ10)は、以下のステップに置き
換えられる。 ○ 命令がFORK_M_SUSPEND命令としてデコードされた場
合は、追加の将来スレッドをフォークするために使用可
能なマシン資源があるかどうかを判定するための検査が
行われる。
【0115】3.PEMのフォーク・ステップ(すなわ
ち、ステップ11)は、以下のステップに置き換えられ
る。 ○ 使用可能な資源がある場合は、FORK_M_SUSPEND命令
に関連するアドレス(複数も可)を将来プログラム・カ
ウンタ(複数も可)にロードすることにより、将来スレ
ッドをフォークする。
ち、ステップ11)は、以下のステップに置き換えられ
る。 ○ 使用可能な資源がある場合は、FORK_M_SUSPEND命令
に関連するアドレス(複数も可)を将来プログラム・カ
ウンタ(複数も可)にロードすることにより、将来スレ
ッドをフォークする。
【0116】4.PEMの将来スレッドの実行ステップ
(すなわち、ステップ12)は、以下の追加サブステッ
プを有する。 ○ FORK_M_SUSPEND命令に関連するマスク列は、以下の
ように対応将来スレッドの実行を制御する。対応スレッ
ドを将来スレッドとして実行している間、FORK_M_SUSPE
NDに関連し、条件が一切付いていないマスクは、将来ス
レッドの実行のための有効ソース・オペランドを無条件
に保持する1組のアーキテクチャ化レジスタを表し、条
件に関連するマスクは、コンパイル時指定条件が実行時
に真と評価される場合のみ、将来スレッドの実行のため
の有効ソース・オペランドを保持すると想定することが
できる1組のアーキテクチャ化レジスタを意味する。命
令のソース・レジスタ・オペランドに関連するコンパイ
ル時指定条件が実行時に真に該当しない場合は、TMユ
ニットが将来スレッド内の命令の一部または全部の結果
を破棄する。
(すなわち、ステップ12)は、以下の追加サブステッ
プを有する。 ○ FORK_M_SUSPEND命令に関連するマスク列は、以下の
ように対応将来スレッドの実行を制御する。対応スレッ
ドを将来スレッドとして実行している間、FORK_M_SUSPE
NDに関連し、条件が一切付いていないマスクは、将来ス
レッドの実行のための有効ソース・オペランドを無条件
に保持する1組のアーキテクチャ化レジスタを表し、条
件に関連するマスクは、コンパイル時指定条件が実行時
に真と評価される場合のみ、将来スレッドの実行のため
の有効ソース・オペランドを保持すると想定することが
できる1組のアーキテクチャ化レジスタを意味する。命
令のソース・レジスタ・オペランドに関連するコンパイ
ル時指定条件が実行時に真に該当しない場合は、TMユ
ニットが将来スレッド内の命令の一部または全部の結果
を破棄する。
【0117】代替実施例9: 1.PEMのメイン・スレッドの実行ステップ(すなわ
ち、ステップ8)は、以下の追加サブステップを有す
る。 ○ スレッド実行中のすべての分岐解決(すなわち、条
件付き分岐を実行するかどうかの判定と、関連目標アド
レス)はTMユニットに連絡される。TMユニットはこ
の情報を使用して、間違った分岐アドレスにフォークさ
れた将来スレッドと依存スレッドを破棄する必要がある
かどうかを判定する。これにより、後述するように命令
の制御依存ブロックの同時実行が可能になる。
ち、ステップ8)は、以下の追加サブステップを有す
る。 ○ スレッド実行中のすべての分岐解決(すなわち、条
件付き分岐を実行するかどうかの判定と、関連目標アド
レス)はTMユニットに連絡される。TMユニットはこ
の情報を使用して、間違った分岐アドレスにフォークさ
れた将来スレッドと依存スレッドを破棄する必要がある
かどうかを判定する。これにより、後述するように命令
の制御依存ブロックの同時実行が可能になる。
【0118】代替実施例10: 1.PEMの取出しと組合せ検査ステップ(すなわち、
ステップ4)は、以下の追加サブステップを有する。 ○ 事前にフォークされたスレッドのいずれかが既定の
タイムアウト期間より長い間、組み合わされずにいたか
どうかを確認する検査を含むように、組合せ検査が拡張
される。このようなスレッドはすべてTMユニットによ
って破棄される。
ステップ4)は、以下の追加サブステップを有する。 ○ 事前にフォークされたスレッドのいずれかが既定の
タイムアウト期間より長い間、組み合わされずにいたか
どうかを確認する検査を含むように、組合せ検査が拡張
される。このようなスレッドはすべてTMユニットによ
って破棄される。
【0119】新しい命令のコード化の詳細説明:図14
ないし図17は、新しい命令の一部の好ましいコード化
例を示している。ビット位置0は最上位ビット位置を意
味し、ビット位置31は最下位ビット位置を意味する。
ないし図17は、新しい命令の一部の好ましいコード化
例を示している。ビット位置0は最上位ビット位置を意
味し、ビット位置31は最下位ビット位置を意味する。
【0120】1.FORK(図14) この命令(ブロック111)では、ビット0〜5を使用
して1次命令コード4を使用している。将来スレッドの
開始アドレスの相対アドレスはビット位置6〜29の2
4ビットのアドレス・フィールドにコード化される。最
後の2ビットであるビット位置30と31は、FORK命令
の代替形式のコード化を行うための拡張命令コード・フ
ィールドとして使用される。この2ビットは、FORK命令
のこのバージョンでは0に設定される。
して1次命令コード4を使用している。将来スレッドの
開始アドレスの相対アドレスはビット位置6〜29の2
4ビットのアドレス・フィールドにコード化される。最
後の2ビットであるビット位置30と31は、FORK命令
の代替形式のコード化を行うための拡張命令コード・フ
ィールドとして使用される。この2ビットは、FORK命令
のこのバージョンでは0に設定される。
【0121】2.UNCOND_SUSPEND(図15) この命令(ブロック222)では、ビット位置0〜5の
1次命令コード19を使用している。拡張命令コード・
フィールドのビット21〜30は、それを同じ1次命令
コードを含む他の命令と区別するために514に設定さ
れている。ビット31は、この無条件中断命令を条件付
き中断(SUSPEND)命令と区別するために0に設定され
ている。
1次命令コード19を使用している。拡張命令コード・
フィールドのビット21〜30は、それを同じ1次命令
コードを含む他の命令と区別するために514に設定さ
れている。ビット31は、この無条件中断命令を条件付
き中断(SUSPEND)命令と区別するために0に設定され
ている。
【0122】3.SUSPEND(図16) この命令(ブロック333)では、ビット位置0〜5の
1次命令コード19を使用している。拡張命令コード・
フィールドのビット21〜30は、それを同じ1次命令
コードを含む他の命令と区別するために514に設定さ
れている。ビット31は、この条件付き中断命令を無条
件中断(UNCOND_SUSPEND)命令と区別するために1に設
定されている。コンパイル時分岐推測は、実行、非実
行、無指定のいずれかになる。したがって、ビット位置
7〜20を使用して7つのコンパイル時分岐推測C1〜
C7のそれぞれについて、2ビットずつ使用する。この
シーケンスの第1の条件C1(ビット7と8)は、SUSP
END命令を含む将来スレッドのフォーク後に実行時にフ
ォーキング・スレッドによって検出される第1の固有の
条件付き分岐に関連づけられ、このシーケンスの第7の
条件C7は、SUSPEND命令を含む将来スレッドのフォー
ク後に実行時にフォーキング・スレッドによって検出さ
れる第7の固有の条件付き分岐に関連づけられている。
モード・フィールドはビット位置6にコード化される。
このコード化に関連する意味については、SUSPEND命令
のコンテキストで既に前述した通りである。
1次命令コード19を使用している。拡張命令コード・
フィールドのビット21〜30は、それを同じ1次命令
コードを含む他の命令と区別するために514に設定さ
れている。ビット31は、この条件付き中断命令を無条
件中断(UNCOND_SUSPEND)命令と区別するために1に設
定されている。コンパイル時分岐推測は、実行、非実
行、無指定のいずれかになる。したがって、ビット位置
7〜20を使用して7つのコンパイル時分岐推測C1〜
C7のそれぞれについて、2ビットずつ使用する。この
シーケンスの第1の条件C1(ビット7と8)は、SUSP
END命令を含む将来スレッドのフォーク後に実行時にフ
ォーキング・スレッドによって検出される第1の固有の
条件付き分岐に関連づけられ、このシーケンスの第7の
条件C7は、SUSPEND命令を含む将来スレッドのフォー
ク後に実行時にフォーキング・スレッドによって検出さ
れる第7の固有の条件付き分岐に関連づけられている。
モード・フィールドはビット位置6にコード化される。
このコード化に関連する意味については、SUSPEND命令
のコンテキストで既に前述した通りである。
【0123】4.FORK_SUSPEND(図17) この命令(ブロック444)でも、ビット位置0〜5で
上記のFORK命令に使用したものと同じ1次命令コード4
を使用している。しかし、拡張命令コード・フィールド
(ビット30と31)は、それをFORK命令と区別するた
めに1に設定されている。将来スレッドの開始アドレス
の相対アドレスはビット位置20〜29の10ビットの
アドレス・フィールドにコード化される。コンパイル時
分岐推測は、実行、非実行、無指定のいずれかになる。
したがって、4つのコンパイル時分岐推測C1〜C4の
それぞれについて、2ビットずつ使用する。このシーケ
ンスの第1の条件C1は、SUSPEND命令を含む将来スレ
ッドのフォーク後に実行時にフォーキング・スレッドに
よって検出される第1の固有の条件付き分岐に関連づけ
られ、このシーケンスの第4の条件C4は、SUSPEND命
令を含む将来スレッドのフォーク後に実行時にフォーキ
ング・スレッドによって検出される第4の固有の条件付
き分岐に関連づけられている。第1の数値N1(ビット
6〜8)は、C1(ビット9と10)とC2(ビット1
1と12)の両方に関連する条件が実行時に真に該当す
ると評価されると想定して、将来スレッドの開始アドレ
スから始まる有効な命令の数を意味する。これに対し
て、N2(ビット13〜15)は、C3(ビット16と
17)とC4(ビット18と19)の両方に関連する条
件が実行時に真に該当すると評価されると想定して、将
来スレッドの開始アドレスから始まる有効な命令+N1
個の命令の数を意味する。
上記のFORK命令に使用したものと同じ1次命令コード4
を使用している。しかし、拡張命令コード・フィールド
(ビット30と31)は、それをFORK命令と区別するた
めに1に設定されている。将来スレッドの開始アドレス
の相対アドレスはビット位置20〜29の10ビットの
アドレス・フィールドにコード化される。コンパイル時
分岐推測は、実行、非実行、無指定のいずれかになる。
したがって、4つのコンパイル時分岐推測C1〜C4の
それぞれについて、2ビットずつ使用する。このシーケ
ンスの第1の条件C1は、SUSPEND命令を含む将来スレ
ッドのフォーク後に実行時にフォーキング・スレッドに
よって検出される第1の固有の条件付き分岐に関連づけ
られ、このシーケンスの第4の条件C4は、SUSPEND命
令を含む将来スレッドのフォーク後に実行時にフォーキ
ング・スレッドによって検出される第4の固有の条件付
き分岐に関連づけられている。第1の数値N1(ビット
6〜8)は、C1(ビット9と10)とC2(ビット1
1と12)の両方に関連する条件が実行時に真に該当す
ると評価されると想定して、将来スレッドの開始アドレ
スから始まる有効な命令の数を意味する。これに対し
て、N2(ビット13〜15)は、C3(ビット16と
17)とC4(ビット18と19)の両方に関連する条
件が実行時に真に該当すると評価されると想定して、将
来スレッドの開始アドレスから始まる有効な命令+N1
個の命令の数を意味する。
【0124】例 図18ないし図20は、本発明で提案した命令の一部を
コード・シーケンスのサンプルで使用した場合を示して
いる。図示のコード・シーケンスは、任意で分岐命令で
終わる、非分岐命令のブロックに分割されている。使用
する命令ニーモニックは、本発明で導入したもの(たと
えば、FORK)か、またはPowerPCアーキテクチャ
(PowerPCはIBMの商標である)のものかのい
ずれかである。条件付き分岐で終わるコードシーケンス
のブロックは、分岐を実行しない場合に制御の転送先に
なるブロックに続く辺Nと、分岐を実行する場合に制御
の転送先になるブロックに続くもう1つの辺Tとを有す
る。
コード・シーケンスのサンプルで使用した場合を示して
いる。図示のコード・シーケンスは、任意で分岐命令で
終わる、非分岐命令のブロックに分割されている。使用
する命令ニーモニックは、本発明で導入したもの(たと
えば、FORK)か、またはPowerPCアーキテクチャ
(PowerPCはIBMの商標である)のものかのい
ずれかである。条件付き分岐で終わるコードシーケンス
のブロックは、分岐を実行しない場合に制御の転送先に
なるブロックに続く辺Nと、分岐を実行する場合に制御
の転送先になるブロックに続くもう1つの辺Tとを有す
る。
【0125】図18および図19は、複数の命令からな
る制御非依存ブロック間で推測するために本発明で提案
した命令を使用する場合を示している。図18および図
19のB1とB12のような様々な制御非依存ブロック
の同時取出し、デコード、推測、実行を可能にするため
に、FORK、SUSPEND、UNCOND_SUSPENDの各命令が使用さ
れている。制御がブロックB0からB1に達すると、ブ
ロックB1のFORK命令を使用して、制御非依存ブロック
B12とB1との並行実行を開始する。ただし、B1を
実行するメイン・スレッドはいくつかの経路の1つをた
どることができるが、それらの経路はいずれも将来スレ
ッドとして実行されるブロックB12に到達することに
留意されたい。同様に、ブロックB1の終わりにある分
岐の解決によってB3に至る場合には、制御非依存B9
の並行実行のためにFORK命令が使用される。ブロックB
3を実行するスレッドは、ブロックB6またはB7の実
行後にB9から始まる将来スレッドと組み合わされる。
る制御非依存ブロック間で推測するために本発明で提案
した命令を使用する場合を示している。図18および図
19のB1とB12のような様々な制御非依存ブロック
の同時取出し、デコード、推測、実行を可能にするため
に、FORK、SUSPEND、UNCOND_SUSPENDの各命令が使用さ
れている。制御がブロックB0からB1に達すると、ブ
ロックB1のFORK命令を使用して、制御非依存ブロック
B12とB1との並行実行を開始する。ただし、B1を
実行するメイン・スレッドはいくつかの経路の1つをた
どることができるが、それらの経路はいずれも将来スレ
ッドとして実行されるブロックB12に到達することに
留意されたい。同様に、ブロックB1の終わりにある分
岐の解決によってB3に至る場合には、制御非依存B9
の並行実行のためにFORK命令が使用される。ブロックB
3を実行するスレッドは、ブロックB6またはB7の実
行後にB9から始まる将来スレッドと組み合わされる。
【0126】アーキテクチャ化レジスタ2とメモリ位置
mem6それぞれの更新の結果発生する重要な依存関係
を観察するために、ブロックB9とB12を実行する将
来スレッドで無条件中断すなわちUNCOND_SUSPEND命令が
使用される。ブロックB3の終わりにある分岐の結果と
して、フォーキング・スレッド(ブロックB3を実行す
るもの)が実行時にブロックB7に移行し、ブロックB
6(レジスタ3を更新するもの)を回避すると想定し
て、次の2つの命令を推論実行するために、ブロックB
9では条件付き中断すなわちSUSPEND命令が使用され
る。同様に、制御がブロックB10(レジスタ4を更新
するもの)に移行しないと想定して、次の4つの命令を
推論実行するためにSUSPEND命令が使用される。ただ
し、回避される経路、すなわちブロックB2とB10を
介してブロックB1のフォーク点からブロックB12の
組合せ点に至る経路は、経路表現TXTを使用してコン
パイル時にコード化されることに留意されたい。この表
現は、フォーク点後の第1の固有の条件付き分岐すなわ
ちB1の終わりにある分岐が実行され、第2の分岐すな
わちB2の終わりにある分岐はどちらにも進むことがで
き、B8の終わりにある分岐も実行されることを意味す
る。ただし、この場合、複数の優良経路(すなわち、レ
ジスタ4を一切更新しない経路)が存在することに留意
されたい。ブロックB2の終わりにある分岐はブロック
B4またはブロックB5のいずれかに進むことができ、
B8の終わりにある分岐が実行されず、B11に至る場
合はこれらの経路のいずれも優良と見なされるはずであ
る。
mem6それぞれの更新の結果発生する重要な依存関係
を観察するために、ブロックB9とB12を実行する将
来スレッドで無条件中断すなわちUNCOND_SUSPEND命令が
使用される。ブロックB3の終わりにある分岐の結果と
して、フォーキング・スレッド(ブロックB3を実行す
るもの)が実行時にブロックB7に移行し、ブロックB
6(レジスタ3を更新するもの)を回避すると想定し
て、次の2つの命令を推論実行するために、ブロックB
9では条件付き中断すなわちSUSPEND命令が使用され
る。同様に、制御がブロックB10(レジスタ4を更新
するもの)に移行しないと想定して、次の4つの命令を
推論実行するためにSUSPEND命令が使用される。ただ
し、回避される経路、すなわちブロックB2とB10を
介してブロックB1のフォーク点からブロックB12の
組合せ点に至る経路は、経路表現TXTを使用してコン
パイル時にコード化されることに留意されたい。この表
現は、フォーク点後の第1の固有の条件付き分岐すなわ
ちB1の終わりにある分岐が実行され、第2の分岐すな
わちB2の終わりにある分岐はどちらにも進むことがで
き、B8の終わりにある分岐も実行されることを意味す
る。ただし、この場合、複数の優良経路(すなわち、レ
ジスタ4を一切更新しない経路)が存在することに留意
されたい。ブロックB2の終わりにある分岐はブロック
B4またはブロックB5のいずれかに進むことができ、
B8の終わりにある分岐が実行されず、B11に至る場
合はこれらの経路のいずれも優良と見なされるはずであ
る。
【0127】フォークの任意選択性を保証するために、
図19のブロックB12の先頭にあるスピル・ロードが
コンパイラによって保存されていることに留意された
い。また、B12が将来スレッドとして実行される場合
は、スピル・ロードの冗長実行を最適化するために図1
9でSKIP命令が使用されることにも留意されたい。
図19のブロックB12の先頭にあるスピル・ロードが
コンパイラによって保存されていることに留意された
い。また、B12が将来スレッドとして実行される場合
は、スピル・ロードの冗長実行を最適化するために図1
9でSKIP命令が使用されることにも留意されたい。
【0128】図20は、複数の命令からなる制御依存ブ
ロック間で推測するためにFORK命令とSUSPEND命令を使
用する場合を示している。FORK命令は、ブロックB10
0から制御依存ブロックB200とB300にフォーク
するために使用されている。制御依存ブロックB200
とB300は、推論実行され、並列である。メイン・ス
レッドはブロックB100を実行するが、フォーク済み
将来スレッドはブロックB200とブロックB300を
実行する。ブロックB100の終わりにある分岐を解決
すると、TMユニットは間違った分岐結果に関して条件
付けされた将来スレッドを破棄する。たとえば、分岐を
実行する場合、B200から始まる将来スレッドが破棄
される。
ロック間で推測するためにFORK命令とSUSPEND命令を使
用する場合を示している。FORK命令は、ブロックB10
0から制御依存ブロックB200とB300にフォーク
するために使用されている。制御依存ブロックB200
とB300は、推論実行され、並列である。メイン・ス
レッドはブロックB100を実行するが、フォーク済み
将来スレッドはブロックB200とブロックB300を
実行する。ブロックB100の終わりにある分岐を解決
すると、TMユニットは間違った分岐結果に関して条件
付けされた将来スレッドを破棄する。たとえば、分岐を
実行する場合、B200から始まる将来スレッドが破棄
される。
【0129】潜在的利点 この項では、上記で提案した命令が前述の諸問題を解決
するのにどのように役立つかを詳しく説明する。
するのにどのように役立つかを詳しく説明する。
【0130】1.命令取出しのボトルネックの緩和 上記の例に示したように、提案したフォーク命令と中断
命令は、現行スーパースカラー・プロセッサの命令取出
しのボトルネックに対処する新規の方法を提供する。コ
ンパイラは、これらの命令を使用して、任意の距離にあ
る(動的に)制御非依存ブロックを指し示すことができ
る。制御非依存とは、プログラム制御がフォーク点に達
した場合に、これらの将来ブロックに達するように拘束
される(当然のことながら、予測できないような流れの
変更を行うことができる割込みは一切ないものと想定す
る)ことを意味する。したがって、そのブロックの制御
依存性が解決されるとただちに(制御の流れを待たず
に)命令を取り出すことができる。また、その制御依存
性が得られる分岐(制御の流れが得られる分岐ではな
い)が間違って予測された場合のみ、推論方式で取り出
した命令を破棄しなければならない。たとえば、ブロッ
クB9の命令は、ブロックB1でのその共用制御依存性
が解決されるか、推測された直後に、ブロックB3の命
令とともに取り出すことができる。さらに、ブロックB
9からの命令は、ブロックB3の終わりにある分岐が間
違って予測された場合ではなく、ブロックB1の終わり
にある制御依存分岐が間違って予測された場合のみ、無
駄な取出しと見なすか、破棄しなければならない。制御
依存性の概念を持たない従来のスーパースカラーは、ブ
ロックB7とB9がブロックB3の終わりにある分岐の
従来の制御流れ推測により取り出され、その後、これが
予測謝りであると判明した場合、ブロックB7(または
B6)ならびにB9のその推論取出しを破棄するはずで
ある。
命令は、現行スーパースカラー・プロセッサの命令取出
しのボトルネックに対処する新規の方法を提供する。コ
ンパイラは、これらの命令を使用して、任意の距離にあ
る(動的に)制御非依存ブロックを指し示すことができ
る。制御非依存とは、プログラム制御がフォーク点に達
した場合に、これらの将来ブロックに達するように拘束
される(当然のことながら、予測できないような流れの
変更を行うことができる割込みは一切ないものと想定す
る)ことを意味する。したがって、そのブロックの制御
依存性が解決されるとただちに(制御の流れを待たず
に)命令を取り出すことができる。また、その制御依存
性が得られる分岐(制御の流れが得られる分岐ではな
い)が間違って予測された場合のみ、推論方式で取り出
した命令を破棄しなければならない。たとえば、ブロッ
クB9の命令は、ブロックB1でのその共用制御依存性
が解決されるか、推測された直後に、ブロックB3の命
令とともに取り出すことができる。さらに、ブロックB
9からの命令は、ブロックB3の終わりにある分岐が間
違って予測された場合ではなく、ブロックB1の終わり
にある制御依存分岐が間違って予測された場合のみ、無
駄な取出しと見なすか、破棄しなければならない。制御
依存性の概念を持たない従来のスーパースカラーは、ブ
ロックB7とB9がブロックB3の終わりにある分岐の
従来の制御流れ推測により取り出され、その後、これが
予測謝りであると判明した場合、ブロックB7(または
B6)ならびにB9のその推論取出しを破棄するはずで
ある。
【0131】2.制御非依存ブロック間でのデータ非依
存性の活用 これらのブロックに至る可能性のあるすべての制御流れ
経路とはデータ非依存でもある制御非依存ブロックの命
令は、このような制御非依存ブロックへの複数フォーク
を介して、同時かつ非推論方式で実行することができ
る。たとえば、ブロックB9(B3とは制御非依存であ
る)の最初の3つの命令は、ブロックB3、B6、B7
(B3からB9への1組の制御流れ経路上の1組の基本
ブロック)の命令とはデータ非依存である。したがっ
て、これらの命令は、提案したフォーク命令と中断命令
を使用して、非推論方式で取り出して実行することがで
きる。
存性の活用 これらのブロックに至る可能性のあるすべての制御流れ
経路とはデータ非依存でもある制御非依存ブロックの命
令は、このような制御非依存ブロックへの複数フォーク
を介して、同時かつ非推論方式で実行することができ
る。たとえば、ブロックB9(B3とは制御非依存であ
る)の最初の3つの命令は、ブロックB3、B6、B7
(B3からB9への1組の制御流れ経路上の1組の基本
ブロック)の命令とはデータ非依存である。したがっ
て、これらの命令は、提案したフォーク命令と中断命令
を使用して、非推論方式で取り出して実行することがで
きる。
【0132】3.制御非依存ブロック間でのデータ依存
性の推測 将来スレッドの活動とメイン・スレッドの活動とのオー
バラップを高めるためには、将来スレッド内の潜在的デ
ータ依存性に関する何らかの形式の推測が必要である。
図18および図19の例を検討する。この場合、ブロッ
クB1〜B11にはレジスタ4の定義が1つしかない。
これはブロックB10で定義されている。メイン・スレ
ッドの制御の流れについて推測する、すなわち、メイン
・スレッドの制御の流れがブロックB10に達しないと
想定すると、ブロックB12の先頭から始まる将来スレ
ッドとブロックB1に継続するメイン・スレッドとのオ
ーバラップを高めることが可能である。ブロックB10
の違反命令に至る正確な制御の流れは、提案した条件付
き中断命令の一部として、<TXT>としてコード化さ
れる。ただし、制御流れの推測はコンパイル時に行わ
れ、このため、静的分岐予測(またはプロファイル主導
あるいはその両方)の技法だけに基づいて行われること
に留意されたい。また、この場合の正味効果は、条件付
き中断命令と無条件中断命令との間の命令を推論方式で
格上げすることと同様であることにも留意されたい。し
かし、それぞれの保護された(格上げされた)命令の一
部として制御流れ条件をコード化する、保護された(ま
たは格上げされた)命令の既知の技法とは異なり、提案
した技法では、条件付き中断命令と無条件中断命令とを
使用して1群の命令用の条件をコード化する。この手法
の重要な利点としては以下のものがある。
性の推測 将来スレッドの活動とメイン・スレッドの活動とのオー
バラップを高めるためには、将来スレッド内の潜在的デ
ータ依存性に関する何らかの形式の推測が必要である。
図18および図19の例を検討する。この場合、ブロッ
クB1〜B11にはレジスタ4の定義が1つしかない。
これはブロックB10で定義されている。メイン・スレ
ッドの制御の流れについて推測する、すなわち、メイン
・スレッドの制御の流れがブロックB10に達しないと
想定すると、ブロックB12の先頭から始まる将来スレ
ッドとブロックB1に継続するメイン・スレッドとのオ
ーバラップを高めることが可能である。ブロックB10
の違反命令に至る正確な制御の流れは、提案した条件付
き中断命令の一部として、<TXT>としてコード化さ
れる。ただし、制御流れの推測はコンパイル時に行わ
れ、このため、静的分岐予測(またはプロファイル主導
あるいはその両方)の技法だけに基づいて行われること
に留意されたい。また、この場合の正味効果は、条件付
き中断命令と無条件中断命令との間の命令を推論方式で
格上げすることと同様であることにも留意されたい。し
かし、それぞれの保護された(格上げされた)命令の一
部として制御流れ条件をコード化する、保護された(ま
たは格上げされた)命令の既知の技法とは異なり、提案
した技法では、条件付き中断命令と無条件中断命令とを
使用して1群の命令用の条件をコード化する。この手法
の重要な利点としては以下のものがある。
【0133】○ アーキテクチャ上の影響が小さいこと 前に示したように、提案した方式の主な利点は、そのア
ーキテクチャ上の影響が相対的に最小限であることであ
る。フォーク命令と中断命令(そのうち、フォーク命令
だけが1次命令コード空間を必要とする)の追加を除
き、既存の命令コード化は影響を受けない。したがっ
て、格上げ手法とは異なり、提案した方式では、制御流
れの推測をコード化するために格上げしたそれぞれの命
令の命令コードで使用可能なビット数に依存しない。
ーキテクチャ上の影響が相対的に最小限であることであ
る。フォーク命令と中断命令(そのうち、フォーク命令
だけが1次命令コード空間を必要とする)の追加を除
き、既存の命令コード化は影響を受けない。したがっ
て、格上げ手法とは異なり、提案した方式では、制御流
れの推測をコード化するために格上げしたそれぞれの命
令の命令コードで使用可能なビット数に依存しない。
【0134】○ 推測した制御流れのコード化の正確さ 新しい(中断)命令では制御流れの推測が排他的にコー
ド化されるので、より多くのビット数を使用してそれを
正確にコード化することができる。たとえば、格上げ方
式では、想定した流れ経路に沿って格上げした命令の深
さをコード化するためにのみ、ある妥協点に達しなけれ
ばならなかった(それぞれの分岐は想定した結果ビット
を有し、最も可能性の高い追跡経路を示していた)。こ
の妥協点は、格上げしたそれぞれの命令の命令コードに
収容できるように、推測した制御流れを簡潔にコード化
するために必要であった。この妥協点の結果、制御非依
存分岐の予測を誤ると、推論方式で実行し格上げした命
令が不必要に破棄されてしまった。本明細書で提案した
手法では、推測した制御流れ経路に沿った制御非依存分
岐が、NまたはTではなくXによって正しくコード化さ
れる。このため、将来スレッドで推論方式で実行された
命令は、制御非依存分岐の予測を誤っても破棄されな
い。
ド化されるので、より多くのビット数を使用してそれを
正確にコード化することができる。たとえば、格上げ方
式では、想定した流れ経路に沿って格上げした命令の深
さをコード化するためにのみ、ある妥協点に達しなけれ
ばならなかった(それぞれの分岐は想定した結果ビット
を有し、最も可能性の高い追跡経路を示していた)。こ
の妥協点は、格上げしたそれぞれの命令の命令コードに
収容できるように、推測した制御流れを簡潔にコード化
するために必要であった。この妥協点の結果、制御非依
存分岐の予測を誤ると、推論方式で実行し格上げした命
令が不必要に破棄されてしまった。本明細書で提案した
手法では、推測した制御流れ経路に沿った制御非依存分
岐が、NまたはTではなくXによって正しくコード化さ
れる。このため、将来スレッドで推論方式で実行された
命令は、制御非依存分岐の予測を誤っても破棄されな
い。
【0135】○ 小規模なコード拡大 典型的なパーコレーションおよび格上げ技法では、想定
した追跡から外れる経路でのコード・コピーまたはパッ
チアップ・コードが必要になる場合が多い。これは、コ
ード・サイズの大幅な拡大に至る可能性がある。提案し
た技法はこれらのオーバヘッドのいずれも持たないの
で、唯一のコード拡大は、1組の命令によって共用され
るフォーク命令と中断命令によるものである。
した追跡から外れる経路でのコード・コピーまたはパッ
チアップ・コードが必要になる場合が多い。これは、コ
ード・サイズの大幅な拡大に至る可能性がある。提案し
た技法はこれらのオーバヘッドのいずれも持たないの
で、唯一のコード拡大は、1組の命令によって共用され
るフォーク命令と中断命令によるものである。
【0136】○ 順次例外処理の実施の単純化 提案した技法には上方コード・モーションが一切なく、
推論方式で実行したコードは依然としてその元の位置だ
けにとどまっている。したがって、メイン・スレッドが
命令の原因である例外を含む将来スレッドと組み合わさ
れるまで、例外処理を容易に遅延させることができる。
すなわち、例外を引き起こす可能性のある推論命令の元
の位置に明示的にマークを付ける必要もなく、正しい順
序で例外を処理することができる。
推論方式で実行したコードは依然としてその元の位置だ
けにとどまっている。したがって、メイン・スレッドが
命令の原因である例外を含む将来スレッドと組み合わさ
れるまで、例外処理を容易に遅延させることができる。
すなわち、例外を引き起こす可能性のある推論命令の元
の位置に明示的にマークを付ける必要もなく、正しい順
序で例外を処理することができる。
【0137】○ 正確な割込みの実施の単純化 この提案の固有のメイン・スレッドは、順次プログラム
順序で完了する最後の命令をいつも正確に把握してい
る。したがって、割込みを正確に処理するために重要な
余分なハードウェアを設ける必要は全くない。
順序で完了する最後の命令をいつも正確に把握してい
る。したがって、割込みを正確に処理するために重要な
余分なハードウェアを設ける必要は全くない。
【0138】4.コンパイルとマシン実施態様との結合
解除 前述のように、フォークの任意選択性のため、提案した
アーキテクチャのコンパイルは、多数の活動スレッドが
可能なマシンを想定して行うことができることに留意さ
れたい。しかも、実際のマシン実施態様は、使用可能な
マシン資源に応じて、このようなフォークのほとんどま
たはこのようなフォークの一部に従うか、このようなフ
ォークのいずれにも従わないかを選択することができ
る。したがって、このコンテキストの大部分では、マシ
ン実施態様からコンパイルを結合解除することができ
る。これは、少数または多数の活動スレッドが可能なマ
シンについて個別に再コンパイルする必要がないことも
意味する。
解除 前述のように、フォークの任意選択性のため、提案した
アーキテクチャのコンパイルは、多数の活動スレッドが
可能なマシンを想定して行うことができることに留意さ
れたい。しかも、実際のマシン実施態様は、使用可能な
マシン資源に応じて、このようなフォークのほとんどま
たはこのようなフォークの一部に従うか、このようなフ
ォークのいずれにも従わないかを選択することができ
る。したがって、このコンテキストの大部分では、マシ
ン実施態様からコンパイルを結合解除することができ
る。これは、少数または多数の活動スレッドが可能なマ
シンについて個別に再コンパイルする必要がないことも
意味する。
【0139】5.ループ反復の並列実行 提案したフォーク命令と中断命令は、ネストしたループ
での反復並列性を効率よく活用するためにも使用するこ
とができる。たとえば、SPECint92ベンチマークの1つ
から前述したサンプル・ループについて検討する。この
ループの内側ループ反復は、前の反復に対して制御とデ
ータの両面で依存している。しかし、内側ループのそれ
ぞれの活動化(すなわち、外側ループ反復)は前のもの
とは無関係である。このため、前のものが完了するまで
待たずに、しかも内部ループの何らかの制御およびデー
タ非依存反復の予測を誤ったときに外側ループ反復から
実行した命令を不必要に破棄せずに、マシンが内側ルー
プの活動化を何度も開始できるようにするため、提案し
たフォーク命令(外側ループ・ボディを開始する)をコ
ンパイラが使用することは可能である。
での反復並列性を効率よく活用するためにも使用するこ
とができる。たとえば、SPECint92ベンチマークの1つ
から前述したサンプル・ループについて検討する。この
ループの内側ループ反復は、前の反復に対して制御とデ
ータの両面で依存している。しかし、内側ループのそれ
ぞれの活動化(すなわち、外側ループ反復)は前のもの
とは無関係である。このため、前のものが完了するまで
待たずに、しかも内部ループの何らかの制御およびデー
タ非依存反復の予測を誤ったときに外側ループ反復から
実行した命令を不必要に破棄せずに、マシンが内側ルー
プの活動化を何度も開始できるようにするため、提案し
たフォーク命令(外側ループ・ボディを開始する)をコ
ンパイラが使用することは可能である。
【0140】6.レジスタ・プレッシャの緩和 互いにデータ非依存でもある制御非依存基本ブロック内
の命令は、取り出すことも実行することもできない。起
こりうる明らかな疑問は、このようなデータおよび制御
非依存命令が、同一基本ブロック内にまとめて入れるの
に十分なほどパーコレーションされていないのかという
ことである。優良コンパイラはこのようなパーコレーシ
ョンを実施しようと最善を尽くすはずであるが、必ずこ
れらの命令をまとめてグループ化できるわけではない。
前述のように、すべてのデータおよび制御非依存命令を
効率よくまとめてグループ化できるようにするには、コ
ンパイラは、適切なコード化を行うのに十分なアーキテ
クチャ化レジスタを有する必要がある。たとえば、図1
8および図19で使用する例の推測上のマシンが4つの
アーキテクチャ化レジスタ、すなわちレジスタ1〜レジ
スタ4しか提供しないものと想定する。このようなマシ
ン用のコンパイラは、追加のスピル・コードを挿入せず
に、制御およびデータ非依存命令を基本ブロックB1お
よびB12に単純にグループ化することはできない。フ
ォーク機構により、コンパイラは追加のスピル・コード
がなくても基礎となるデータ非依存性を伝えることがで
きる。事実、既存のスピル・コードの一部は、B12が
実行時に実際にフォークされると冗長(たとえば、基本
ブロックB12内の最初の2つのロード)になる可能性
がある。このようなスピル・コードは、前述のようにSK
IP命令を使用して最適化することができる。
の命令は、取り出すことも実行することもできない。起
こりうる明らかな疑問は、このようなデータおよび制御
非依存命令が、同一基本ブロック内にまとめて入れるの
に十分なほどパーコレーションされていないのかという
ことである。優良コンパイラはこのようなパーコレーシ
ョンを実施しようと最善を尽くすはずであるが、必ずこ
れらの命令をまとめてグループ化できるわけではない。
前述のように、すべてのデータおよび制御非依存命令を
効率よくまとめてグループ化できるようにするには、コ
ンパイラは、適切なコード化を行うのに十分なアーキテ
クチャ化レジスタを有する必要がある。たとえば、図1
8および図19で使用する例の推測上のマシンが4つの
アーキテクチャ化レジスタ、すなわちレジスタ1〜レジ
スタ4しか提供しないものと想定する。このようなマシ
ン用のコンパイラは、追加のスピル・コードを挿入せず
に、制御およびデータ非依存命令を基本ブロックB1お
よびB12に単純にグループ化することはできない。フ
ォーク機構により、コンパイラは追加のスピル・コード
がなくても基礎となるデータ非依存性を伝えることがで
きる。事実、既存のスピル・コードの一部は、B12が
実行時に実際にフォークされると冗長(たとえば、基本
ブロックB12内の最初の2つのロード)になる可能性
がある。このようなスピル・コードは、前述のようにSK
IP命令を使用して最適化することができる。
【0141】7.制御依存ブロック間の推測 これまでの説明でフォークを使用したのは、制御非依存
ブロックの並列実行の場合だけであった。この概念は、
制御依存ブロックを含むようにさらに拡張することがで
きる。さらにこれは、両方の分岐経路を推論方式で実行
できる能力を意味する。追加の実施コストが必要ではあ
るが、このような推測はいずれもアーキテクチャに対し
てこれ以上影響を及ぼすことはない。この形式の推測の
追加の有用性は、ある程度は(1つの分岐経路に沿っ
て)現行推論スーパースカラーにすでに使用されている
が、さらに検討する必要がある。図20で使用する例
は、どちらもB100に対して制御依存しているブロッ
クB200およびB300のような制御依存ブロック間
で推測するためにフォーク命令と中断命令を使用する場
合を示している。ブロックB100のフォークも、両方
の分岐経路に沿って推測し、実行時の実際の制御の流れ
(B200またはB300)に基づいて適切に命令を破
棄するためのものである。
ブロックの並列実行の場合だけであった。この概念は、
制御依存ブロックを含むようにさらに拡張することがで
きる。さらにこれは、両方の分岐経路を推論方式で実行
できる能力を意味する。追加の実施コストが必要ではあ
るが、このような推測はいずれもアーキテクチャに対し
てこれ以上影響を及ぼすことはない。この形式の推測の
追加の有用性は、ある程度は(1つの分岐経路に沿っ
て)現行推論スーパースカラーにすでに使用されている
が、さらに検討する必要がある。図20で使用する例
は、どちらもB100に対して制御依存しているブロッ
クB200およびB300のような制御依存ブロック間
で推測するためにフォーク命令と中断命令を使用する場
合を示している。ブロックB100のフォークも、両方
の分岐経路に沿って推測し、実行時の実際の制御の流れ
(B200またはB300)に基づいて適切に命令を破
棄するためのものである。
【0142】8.スレッド管理の簡略化 ○ スレッド間の同期:固有のメイン・スレッドと残り
の将来スレッドという概念は、スレッド間の同期を簡略
化した機構を提供し、低いオーバヘッドを意味する。明
示的な中断点では、将来スレッドは単にそれ自体を中断
し、メイン・スレッドの制御が将来スレッドに到達する
のを待つだけである。あるいは、その実行中の様々な時
点で将来スレッドが他のスレッドとの明示的スレッド間
同期を試みることもできる。しかし、このようにスレッ
ド間同期がさらに精巧になると、ハードウェア/ソフト
ウェアのオーバヘッドが増すことを意味する。
の将来スレッドという概念は、スレッド間の同期を簡略
化した機構を提供し、低いオーバヘッドを意味する。明
示的な中断点では、将来スレッドは単にそれ自体を中断
し、メイン・スレッドの制御が将来スレッドに到達する
のを待つだけである。あるいは、その実行中の様々な時
点で将来スレッドが他のスレッドとの明示的スレッド間
同期を試みることもできる。しかし、このようにスレッ
ド間同期がさらに精巧になると、ハードウェア/ソフト
ウェアのオーバヘッドが増すことを意味する。
【0143】○ スレッド間通信:アーキテクチャ化マ
シン状態のコピーによるフォークと、前述の組合せ動作
の概念により、オーバヘッドの低いスレッド間通信の機
構が提供される。オーバヘッドがこれよりかなり高い代
替機構は、たとえば、メッセージにより、活動スレッド
間の連続通信プロトコルを提供する明示通信プリミティ
ブをもたらすことができる。
シン状態のコピーによるフォークと、前述の組合せ動作
の概念により、オーバヘッドの低いスレッド間通信の機
構が提供される。オーバヘッドがこれよりかなり高い代
替機構は、たとえば、メッセージにより、活動スレッド
間の連続通信プロトコルを提供する明示通信プリミティ
ブをもたらすことができる。
【0144】○ スレッドのスケジューリング: 本発
明で提案した機構では、結果的に(前述のように)フォ
ークの任意選択性が得られるが、FORK命令に応答してス
レッドをスケジューリング(フォーク)するために実行
時スレッド・スケジューリング・ハードウェアを必要と
しないので、動的スレッド・スケジューリングも簡略化
される。したがって、スレッド・スケジューリング・ハ
ードウェアは、すべてのFORK命令が暗示する将来スレッ
ド(複数も可)の待ち行列化と管理を負担する必要がな
い。動的スレッド・スケジューリングのオーバヘッドが
このように低下しているので、再コンパイルせずに各種
のマシン実施態様に適合できることなど、その他の利点
により、静的スレッド・スケジューリングに比べ、それ
がより魅力的なものになる。
明で提案した機構では、結果的に(前述のように)フォ
ークの任意選択性が得られるが、FORK命令に応答してス
レッドをスケジューリング(フォーク)するために実行
時スレッド・スケジューリング・ハードウェアを必要と
しないので、動的スレッド・スケジューリングも簡略化
される。したがって、スレッド・スケジューリング・ハ
ードウェアは、すべてのFORK命令が暗示する将来スレッ
ド(複数も可)の待ち行列化と管理を負担する必要がな
い。動的スレッド・スケジューリングのオーバヘッドが
このように低下しているので、再コンパイルせずに各種
のマシン実施態様に適合できることなど、その他の利点
により、静的スレッド・スケジューリングに比べ、それ
がより魅力的なものになる。
【0145】まとめとして、本発明の構成に関して以下
の事項を開示する。
の事項を開示する。
【0146】(1)コンピュータ内の中央演算処理装置
において、 a.複数の命令を有する命令キャッシュ・メモリであっ
て、その命令キャッシュが1つまたは複数の命令キャッ
シュ・ポートをさらに有する命令キャッシュ・メモリ
と、 b.複数のプログラム・カウンタからなるプログラム・
カウンタ・バンクであって、それぞれのプログラム・カ
ウンタが命令キャッシュ内の1つまたは複数の命令を独
立してアドレス指定し、アドレス指定した命令を命令キ
ャッシュ・ポートの1つにポーティングすることができ
る、プログラム・カウンタ・バンクと、 c.複数のディスパッチャからなり、それぞれのディス
パッチャが命令バッファを1つずつ有し、それぞれのデ
ィスパッチャが1つまたは複数の命令キャッシュ・ポー
トから命令を受け取り、受け取った命令をその命令バッ
ファに入れ、命令をデコードし、その関連バッファ内の
命令間の依存関係を分析することができる、ディスパッ
チャ・バンクと、 d.それぞれのスレッドがプログラム・カウンタの1つ
を使用して実行した一連の命令シーケンスを有する、1
つまたは複数のスレッドをフォークし、0または1つ以
上のスレッド間通信を処理するスレッド管理ユニット
と、 e.すべてのディスパッチャから命令を受け取り、1つ
または複数の機能ユニット上で実行するために命令をス
ケジューリングするスケジューラと、 f.すべてのスレッド内の命令によってアクセス可能な
1つまたは複数のアーキテクチャ化レジスタからなる固
定セットを含むレジスタ・ファイルとを含み、それによ
り、1つまたは複数の命令スレッドが機能ユニットによ
って並列に実行されることを特徴とする、中央演算処理
装置。 (2)プログラム・カウンタ・バンク内のプログラム・
カウンタの1つがメイン・スレッド内の命令を追跡し、
メイン・スレッドが順次追跡順序で最も早いスレッドで
あることを特徴とする、上記(1)に記載の装置。 (3)1つまたは複数のディスパッチャが、そのディス
パッチャが分析中に解決できない1つまたは複数の依存
関係について推測し、スレッド管理ユニットが、1つま
たは複数の推測の結果として、プログラム依存関係の違
反のために将来スレッドのいずれかによって実行された
1つまたは複数の命令を破棄する必要があるかどうかを
判定することができ、スレッド管理ユニットがこのよう
な違反命令を破棄することを特徴とする、上記(2)に
記載の装置。 (4)スレッド管理ユニットは、FORK命令が検出された
ときに指定のアドレスから始まる将来スレッドをフォー
クすることができ、FORK命令がコンパイル時に命令スレ
ッドに挿入され、FORK命令が1つまたは複数の将来スレ
ッドの先頭を識別することを特徴とする、上記(3)に
記載の装置。 (5)FORK命令が1つの命令コード・フィールドと1つ
または複数のアドレス・フィールドとを含み、それぞれ
のアドレスが将来スレッドの開始位置を識別することを
特徴とする、上記(4)に記載の装置。 (6)FORK命令の命令コード・フィールドがビット0〜
5を含み、アドレス・フィールドがビット6〜29を含
み、拡張命令コード・フィールドがビット30と31と
を含むことを特徴とする、上記(5)に記載の装置。 (7)スレッド管理ユニットは、FORK命令が検出された
ときに指定のアドレスから始まる将来スレッドをフォー
クすることができ、UNCOND_SUSPEND命令が検出されたと
きにその将来スレッドを無条件に中断し、FORK命令とUN
COND_SUSPEND命令がコンパイル時に挿入されることを特
徴とする、上記(3)に記載の装置。 (8)FORK命令が1つの命令コード・フィールドと1つ
または複数のアドレス・フィールドとを含み、それぞれ
のアドレスが将来スレッドの開始位置を識別し、UNCOND
_SUSPEND命令が1つの命令コード・フィールドを含むこ
とを特徴とする、上記(7)に記載の装置。 (9)FORK命令の命令コード・フィールドがビット0〜
5を含み、アドレス・フィールドがビット6〜29を含
み、拡張命令コード・フィールドがビット30と31と
を含み、UNCOND_SUSPENDの命令コードがビット0〜5を
含む1つの1次命令コード・フィールドと、ビット21
〜31を含む1つの拡張命令コード・フィールドとを有
することを特徴とする、上記(8)に記載の装置。 (10)1つまたは複数のSUSPEND命令を有し、将来ス
レッドの1つの実行中にSUSPEND命令が検出され、SUSPE
ND命令に関連するコンパイル時指定条件が実行時に偽と
評価された場合にスレッド管理ユニットがSUSPEND命令
に関連する依存性領域内の1組の命令の結果を破棄し、
SUSPEND命令がコンパイル時に挿入されることを特徴と
する、上記(7)に記載に装置。 (11)SUSPEND命令が、1つのSUSPEND命令コード・フ
ィールドと、1つのモードビットと、1つの条件フィー
ルドとを含むことを特徴とする、上記(10)に記載の
装置。 (12)SUSPEND命令コードが、ビット0〜5を含む1
つの1次命令コード・フィールドと、ビット6を占有す
る1つのモード・フィールドと、ビット6〜20を占有
し、それぞれが2ビットの長さの7つの条件サブフィー
ルドから構成される1つの条件フィールドと、ビット2
1〜31を含む1つの拡張命令コード・フィールドとを
有することを特徴とする、上記(11)に記載の装置。 (13)スレッド管理ユニットは、FORK_SUSPEND命令が
検出されたときに指定のアドレスから始まる将来スレッ
ドをフォークすることができ、FORK_SUSPEND命令がコン
パイル時に命令スレッドに挿入され、FORK_SUSPEND命令
が1組または複数組の命令を識別することができ、それ
ぞれの組の命令がそれぞれの組の命令の有効実行を判定
する関連条件を任意で有することを特徴とする、上記
(3)に記載の装置。 (14)FORK_SUSPEND命令が、1つの命令コード・フィ
ールドと、1つのアドレス・フィールドと、1つまたは
複数の条件フィールドとを含み、それぞれの条件フィー
ルドが1つのカウント・フィールドと1つまたは複数の
条件とを有することを特徴とする、上記(13)に記載
の装置。 (15)FORK_SUSPEND命令が、ビット0〜5を含む1つ
の命令コードと、ビット6〜8を含む第1のカウント・
フィールドと、第1のカウント・フィールドに関連し、
ビット9〜10および11〜12をそれぞれ含む2つの
条件とを有する第1の条件フィールドと、ビット13〜
15を含む第2のカウント・フィールドと、第2のカウ
ント・フィールドに関連し、ビット16〜17および1
8〜19をそれぞれ含む2つの条件とを有する第2の条
件フィールドと、ビット20〜29を含む1つのアドレ
ス・フィールドと、ビット30および31を含む1つの
拡張命令コード・フィールドとを有することを特徴とす
る、上記(14)に記載の装置。 (16)SKIP命令を検出したときに、将来スレッドが、
SKIP命令によって指定された複数の命令をデコードし、
実行を行わずに識別された命令の実行を引き受けること
を特徴とする、上記(10)に記載の装置。 (17)SKIP命令が1つの命令コード・フィールドと1
つのカウント・フィールドとを含むことを特徴とする、
上記(16)に記載の装置。 (18)スレッド管理ユニットは、FORK_S_SUSPEND命令
が検出されたときに指定のアドレスから始まる将来スレ
ッドをフォークすることができ、FORK_S_SUSPEND命令が
コンパイル時に命令スレッドに挿入され、FORK_S_SUSPE
ND命令が1組または複数組の命令を識別することがで
き、それぞれの組の命令がそれぞれの組の命令の有効実
行を判定する関連条件を任意で有し、スレッドに開始時
に複数の命令を識別するスキップ・カウント・フィール
ドをさらに有し、実行を行わずに識別された命令の実行
を引き受けることを特徴とする、上記(3)に記載の装
置。 (19)FORK_S_SUSPEND命令が、1つの命令コード・フ
ィールドと、1つのアドレス・フィールドと、1つのス
キップ・カウント・フィールドと、1つまたは複数の条
件フィールドとを含み、それぞれの条件フィールドが1
つのカウント・フィールドと1つまたは複数の条件とを
有することを特徴とする、上記(18)に記載の装置。 (20)スレッド管理ユニットは、FORK_M_SUSPEND命令
が検出されたときに指定のアドレスから始まる将来スレ
ッドをフォークすることができ、FORK_M_SUSPEND命令が
コンパイル時に命令スレッドに挿入され、FORK_M_SUSPE
ND命令が1組のレジスタ・マスクを識別することがで
き、マスクに関連する条件がある場合にその条件が実行
時に該当するのであれば、それぞれのマスクが有効ソー
ス・オペランドを保持する複数のアーキテクチャ化レジ
スタからなるサブセットを識別することを特徴とする、
上記(3)に記載の装置。 (21)FORK_M_SUSPEND命令が、1つの命令コード・フ
ィールドと、1つのアドレス・フィールドと、1つまた
は複数の条件フィールドとを含み、それぞれの条件フィ
ールドが1つのレジスタ・マスクと1つまたは複数の条
件とを有することを特徴とする、上記(20)に記載の
装置。 (22)FSKIP命令を検出したときに、将来スレッド・
ディスパッチャが取出しと、その結果、この命令に続く
指定の数の命令の実行をスキップし、FSKIP命令が有効
オペランドを保持する1組のアーキテクチャ化レジスタ
を指定するレジスタ・マスクを識別することができ、メ
イン・スレッド・ディスパッチャがこれをNOPとして
扱い、FSKIP命令がコンパイル時に命令スレッドに挿入
されることを特徴とする、上記(10)に記載の装置。 (23)FSKIP命令が、1つの命令コード・フィールド
と、1つのマスク・フィールドと、1つのカウント・フ
ィールドとを含むことを特徴とする、上記(22)に記
載の装置。 (24)SKPMG命令を検出したときに、将来スレッド
が、SKPMG命令によって指定された複数の命令をデコー
ドし、実行を行わずに識別された命令の実行を引き受
け、メイン・スレッド・ディスパッチャがこの命令を潜
在的将来スレッドの開始アドレス用のマーカとして扱
い、SKPMG命令がコンパイル時に命令スレッドに挿入さ
れることを特徴とする、上記(10)に記載の装置。 (25)SKPMG命令が1つの命令コード・フィールドと
1つのカウント・フィールドとを含むことを特徴とす
る、上記(24)に記載の装置。 (26)スレッド管理ユニットが任意でフォークするこ
とができることを特徴とする、上記(1)に記載の装
置。 (27)命令キャッシュがメイン・メモリで置き換えら
れることを特徴とする、上記(1)に記載の装置。 (28)中央演算処理装置を備えたコンピュータ・シス
テム上で命令を実行する方法において、(a)複数の命
令からなる静的シーケンスをコンパイル時に生成し、そ
の命令の静的シーケンスを分析して1組のフォーク点を
判定するステップと、(b)コンパイル時に0個または
それ以上のFORK命令を0個またはそれ以上のフォーク点
に挿入するステップと、(c)メモリ内の固定位置から
始まるメイン・メモリにその命令の静的シーケンスをロ
ードし、その静的シーケンスのサブシーケンスを命令キ
ャッシュに転送するステップと、(d)現行アドレスか
ら始まるメイン・プログラム・カウンタによりそのシー
ケンスをアドレス指定することにより、命令キャッシュ
から命令シーケンスをメイン・スレッドとして取り出
し、現行アドレスから始まり、まだ組み合わされていな
い1つまたは複数の将来スレッドがあるかどうかを判定
するために検査するステップと、(e)組み合わされて
いない将来スレッドの妥当性を検査するステップと、
(f)0個またはそれ以上の組み合わされていない将来
スレッドの有効に実行された部分をメイン・スレッドに
組み合わせるステップと、(g)取り出した命令をディ
スパッチャでデコードし、1つまたは複数の命令がFORK
命令としてデコードされたかどうかを確認するために検
査するステップと、(h)命令がFORK命令以外の命令と
してデコードされた場合に、命令依存関係を分析し、適
切な機能ユニット上で実行するために命令をスケジュー
リングすることにより、メイン・スレッドを実行するス
テップと、(i)完了ユニットにより命令実行を完了
し、ステップ(d)からこのステップまでを繰り返すス
テップと、(j)命令がFORK命令としてデコードされた
場合に、追加の将来スレッドをフォークするために使用
可能なマシン資源があるかどうかを判定するために検査
するステップと、(k)使用可能資源がある場合に、FO
RK命令に関連するアドレスを将来プログラム・カウンタ
にロードすることにより、将来スレッドをフォークする
ステップと、(l)それぞれメイン・プログラム・カウ
ンタとメイン・スレッド・ディスパッチャの代わりに将
来プログラム・カウンタの1つと将来スレッド・ディス
パッチャの1つを使用することによってステップ(d)
〜(h)を実行することにより、フォーキング・スレッ
ドの実行と並列して将来スレッドを実行し、将来スレッ
ドがメイン・スレッドと組み合わされるか、または将来
スレッドがスレッド管理ユニットによって消去された場
合に、将来スレッドの実行を中断するステップとを含む
ことを特徴とする方法。 (29)前記ステップ(b)が、(b.1) すべての
将来スレッドの終わりにUNCOND_SUSPEND命令を挿入する
という追加のサブステップを有し、前記ステップ(l)
が、(l.1) UNCOND_SUSPEND命令を検出したときに
将来スレッドの実行を中断するという追加のサブステッ
プを有し、前記ステップ(h)が、(h.1) その対
応将来スレッド以外のスレッドによって実行するために
検出された場合に、UNCOND_SUSPEND命令をNOPとして
扱うという追加のサブステップを有することを特徴とす
る、上記(28)に記載の方法。 (30)前記ステップ(b)が、(b.2) すべての
UNCOND_SUSPEND命令に対応する0個またはそれ以上のSU
SPEND命令を挿入するという追加のサブステップを有
し、前記ステップ(l)が、(l.2) SUSPEND命令
に関連するコンパイル時指定条件が実行時に偽と評価さ
れた場合に、SUSPEND命令に関連する依存性領域内の1
組の命令を破棄するという追加のサブステップを有し、
前記ステップ(h)が、(h.2) その対応将来スレ
ッド以外のスレッドによって実行するために検出された
場合に、SUSPEND命令をNOPとして扱うという追加の
サブステップを有することを特徴とする、上記(29)
に記載の方法。 (31)前記ステップ(b)が、(b.3) 0個また
はそれ以上のSKIP命令を将来スレッドに挿入するという
追加のサブステップを有し、前記ステップ(l)が、
(l.3) SKIP命令に続く指定の数の命令をデコード
し、将来スレッドとしての実行中に、実行を行わずにそ
の指定の数の命令の実行を引き受けるという追加のサブ
ステップを有し、前記ステップ(h)が、(h.3)
その対応将来スレッド以外のスレッドによって実行する
ために検出された場合に、SKIP命令をNOPとして扱う
という追加のサブステップを有することを特徴とする、
上記(30)に記載の方法。 (32)前記ステップ(b)が、(b.4) 0個また
はそれ以上のFSKIP命令を将来スレッドに挿入するとい
う追加のサブステップを有し、前記ステップ(l)が、
(l.4) 将来スレッドとしての実行中にFSKIP命令
に続く指定の数の命令の取出しをスキップし、関連マス
クで識別されたレジスタに有効オペランドを保持するも
のとしてマークを付けるという追加のサブステップを有
し、前記ステップ(h)が、(h.4) その対応将来
スレッド以外のスレッドによって実行するために検出さ
れた場合に、FSKIP命令をNOPとして扱うという追加
のサブステップを有することを特徴とする、上記(3
0)に記載の方法。 (33)前記ステップ(b)が、(b.5) すべての
将来スレッドの先頭にSKPMG命令を挿入するという追加
のサブステップを有し、前記ステップ(l)が、(l.
5) SKIP命令に続く指定の数の命令をデコードし、将
来スレッドとしての実行中に、実行を行わずにその指定
の数の命令の実行を引き受けるという追加のサブステッ
プを有し、前記ステップ(h)が、(h.5) その対
応将来スレッド以外のスレッドによって実行するために
SKPMGが検出された場合に、SKPMG命令の命令アドレス以
降について、過去に将来スレッドがフォークされたかど
うかを判定するために検査するという追加のサブステッ
プを有し、前記ステップ(d)が、(d.1) メイン
・プログラム・カウンタによりそのシーケンスをアドレ
ス指定することにより、命令キャッシュから命令シーケ
ンスを取り出すというステップで置き換えられることを
特徴とする、上記(30)に記載の方法。 (34)前記ステップ(b)が、(b.6) 0個また
はそれ以上のFORK_SUSPEND命令を0個またはそれ以上の
潜在的フォーク点に挿入するというステップで置き換え
られ、前記ステップ(j)が、(j.1) 命令がFORK
_SUSPEND命令としてデコードされた場合に、追加の将来
スレッドをフォークするために使用可能なマシン資源が
あるかどうかを判定するために検査するというステップ
で置き換えられ、前記ステップ(k)が、(k.1)
使用可能資源がある場合に、FORK_SUSPEND命令に関連す
るアドレス(複数も可)を将来プログラム・カウンタ
(複数も可)にロードすることにより、将来スレッドを
フォークするというステップで置き換えられ、前記ステ
ップ(l)が、(l.6) 関連するコンパイル時指定
条件が実行時に真に該当しない場合に、将来スレッド内
の命令の一部または全部の結果を破棄するという追加の
サブステップを有することを特徴とする、上記(28)
に記載の方法。 (35)前記ステップ(b)が、(b.7) 0個また
はそれ以上のFORK_S_SUSPEND命令を0個またはそれ以上
の潜在的フォーク点に挿入するというステップで置き換
えられ、前記ステップ(j)が、(j.2) 命令がFO
RK_S_SUSPEND命令としてデコードされた場合に、追加の
将来スレッドをフォークするために使用可能なマシン資
源があるかどうかを判定するために検査するというステ
ップで置き換えられ、前記ステップ(k)が、(k.
2) 使用可能資源がある場合に、FORK_S_SUSPEND命令
に関連するアドレス(複数も可)を将来プログラム・カ
ウンタ(複数も可)にロードすることにより、将来スレ
ッドをフォークするというステップで置き換えられ、前
記ステップ(l)が、(l.7) 将来スレッドの先頭
にある指定の数の命令をデコードし、これらの命令の実
行を行わずに指定の数の命令の実行を引き受け、関連す
るコンパイル時指定条件が実行時に真に該当しない場合
に、将来スレッド内の命令の一部または全部の結果を破
棄するという追加のサブステップを有することを特徴と
する、上記(28)に記載の方法。 (36)前記ステップ(b)が、(b.8) 0個また
はそれ以上のFORK_M_SUSPEND命令を0個またはそれ以上
の潜在的フォーク点に挿入するというステップで置き換
えられ、前記ステップ(j)が、(j.3) 命令がFO
RK_M_SUSPEND命令としてデコードされた場合に、追加の
将来スレッドをフォークするために使用可能なマシン資
源があるかどうかを判定するために検査するというステ
ップで置き換えられ、前記ステップ(k)が、(k.
3) 使用可能資源がある場合に、FORK_M_SUSPEND命令
に関連するアドレス(複数も可)を将来プログラム・カ
ウンタ(複数も可)にロードすることにより、将来スレ
ッドをフォークするというステップで置き換えられ、前
記ステップ(l)が、(l.8) 命令のソース・レジ
スタ・オペランドに関連するコンパイル時指定条件が実
行時に真に該当しない場合に、将来スレッド内の命令の
一部または全部の結果を破棄するという追加のサブステ
ップを有することを特徴とする、上記(28)に記載の
方法。 (37)前記ステップ(h)が、(h.6) スレッド
実行中のすべての分岐解決をTMユニットに連絡し、T
Mユニットがこの情報を使用して、間違った分岐アドレ
スにフォークされた将来スレッドとすべての依存スレッ
ドを破棄する必要があるかどうかを判定するという追加
のサブステップを有することを特徴とする、上記(2
8)に記載の方法。 (38)前記ステップ(d)が、(d.2) TMユニ
ットが、事前フォーク済みスレッドのいずれかが既定の
タイムアウト期間より長い間、組み合わされない状態を
維持していたかどうかを判定するために検査し、このよ
うなスレッドを破棄するという追加のサブステップを有
することを特徴とする、上記(28)に記載の方法。
において、 a.複数の命令を有する命令キャッシュ・メモリであっ
て、その命令キャッシュが1つまたは複数の命令キャッ
シュ・ポートをさらに有する命令キャッシュ・メモリ
と、 b.複数のプログラム・カウンタからなるプログラム・
カウンタ・バンクであって、それぞれのプログラム・カ
ウンタが命令キャッシュ内の1つまたは複数の命令を独
立してアドレス指定し、アドレス指定した命令を命令キ
ャッシュ・ポートの1つにポーティングすることができ
る、プログラム・カウンタ・バンクと、 c.複数のディスパッチャからなり、それぞれのディス
パッチャが命令バッファを1つずつ有し、それぞれのデ
ィスパッチャが1つまたは複数の命令キャッシュ・ポー
トから命令を受け取り、受け取った命令をその命令バッ
ファに入れ、命令をデコードし、その関連バッファ内の
命令間の依存関係を分析することができる、ディスパッ
チャ・バンクと、 d.それぞれのスレッドがプログラム・カウンタの1つ
を使用して実行した一連の命令シーケンスを有する、1
つまたは複数のスレッドをフォークし、0または1つ以
上のスレッド間通信を処理するスレッド管理ユニット
と、 e.すべてのディスパッチャから命令を受け取り、1つ
または複数の機能ユニット上で実行するために命令をス
ケジューリングするスケジューラと、 f.すべてのスレッド内の命令によってアクセス可能な
1つまたは複数のアーキテクチャ化レジスタからなる固
定セットを含むレジスタ・ファイルとを含み、それによ
り、1つまたは複数の命令スレッドが機能ユニットによ
って並列に実行されることを特徴とする、中央演算処理
装置。 (2)プログラム・カウンタ・バンク内のプログラム・
カウンタの1つがメイン・スレッド内の命令を追跡し、
メイン・スレッドが順次追跡順序で最も早いスレッドで
あることを特徴とする、上記(1)に記載の装置。 (3)1つまたは複数のディスパッチャが、そのディス
パッチャが分析中に解決できない1つまたは複数の依存
関係について推測し、スレッド管理ユニットが、1つま
たは複数の推測の結果として、プログラム依存関係の違
反のために将来スレッドのいずれかによって実行された
1つまたは複数の命令を破棄する必要があるかどうかを
判定することができ、スレッド管理ユニットがこのよう
な違反命令を破棄することを特徴とする、上記(2)に
記載の装置。 (4)スレッド管理ユニットは、FORK命令が検出された
ときに指定のアドレスから始まる将来スレッドをフォー
クすることができ、FORK命令がコンパイル時に命令スレ
ッドに挿入され、FORK命令が1つまたは複数の将来スレ
ッドの先頭を識別することを特徴とする、上記(3)に
記載の装置。 (5)FORK命令が1つの命令コード・フィールドと1つ
または複数のアドレス・フィールドとを含み、それぞれ
のアドレスが将来スレッドの開始位置を識別することを
特徴とする、上記(4)に記載の装置。 (6)FORK命令の命令コード・フィールドがビット0〜
5を含み、アドレス・フィールドがビット6〜29を含
み、拡張命令コード・フィールドがビット30と31と
を含むことを特徴とする、上記(5)に記載の装置。 (7)スレッド管理ユニットは、FORK命令が検出された
ときに指定のアドレスから始まる将来スレッドをフォー
クすることができ、UNCOND_SUSPEND命令が検出されたと
きにその将来スレッドを無条件に中断し、FORK命令とUN
COND_SUSPEND命令がコンパイル時に挿入されることを特
徴とする、上記(3)に記載の装置。 (8)FORK命令が1つの命令コード・フィールドと1つ
または複数のアドレス・フィールドとを含み、それぞれ
のアドレスが将来スレッドの開始位置を識別し、UNCOND
_SUSPEND命令が1つの命令コード・フィールドを含むこ
とを特徴とする、上記(7)に記載の装置。 (9)FORK命令の命令コード・フィールドがビット0〜
5を含み、アドレス・フィールドがビット6〜29を含
み、拡張命令コード・フィールドがビット30と31と
を含み、UNCOND_SUSPENDの命令コードがビット0〜5を
含む1つの1次命令コード・フィールドと、ビット21
〜31を含む1つの拡張命令コード・フィールドとを有
することを特徴とする、上記(8)に記載の装置。 (10)1つまたは複数のSUSPEND命令を有し、将来ス
レッドの1つの実行中にSUSPEND命令が検出され、SUSPE
ND命令に関連するコンパイル時指定条件が実行時に偽と
評価された場合にスレッド管理ユニットがSUSPEND命令
に関連する依存性領域内の1組の命令の結果を破棄し、
SUSPEND命令がコンパイル時に挿入されることを特徴と
する、上記(7)に記載に装置。 (11)SUSPEND命令が、1つのSUSPEND命令コード・フ
ィールドと、1つのモードビットと、1つの条件フィー
ルドとを含むことを特徴とする、上記(10)に記載の
装置。 (12)SUSPEND命令コードが、ビット0〜5を含む1
つの1次命令コード・フィールドと、ビット6を占有す
る1つのモード・フィールドと、ビット6〜20を占有
し、それぞれが2ビットの長さの7つの条件サブフィー
ルドから構成される1つの条件フィールドと、ビット2
1〜31を含む1つの拡張命令コード・フィールドとを
有することを特徴とする、上記(11)に記載の装置。 (13)スレッド管理ユニットは、FORK_SUSPEND命令が
検出されたときに指定のアドレスから始まる将来スレッ
ドをフォークすることができ、FORK_SUSPEND命令がコン
パイル時に命令スレッドに挿入され、FORK_SUSPEND命令
が1組または複数組の命令を識別することができ、それ
ぞれの組の命令がそれぞれの組の命令の有効実行を判定
する関連条件を任意で有することを特徴とする、上記
(3)に記載の装置。 (14)FORK_SUSPEND命令が、1つの命令コード・フィ
ールドと、1つのアドレス・フィールドと、1つまたは
複数の条件フィールドとを含み、それぞれの条件フィー
ルドが1つのカウント・フィールドと1つまたは複数の
条件とを有することを特徴とする、上記(13)に記載
の装置。 (15)FORK_SUSPEND命令が、ビット0〜5を含む1つ
の命令コードと、ビット6〜8を含む第1のカウント・
フィールドと、第1のカウント・フィールドに関連し、
ビット9〜10および11〜12をそれぞれ含む2つの
条件とを有する第1の条件フィールドと、ビット13〜
15を含む第2のカウント・フィールドと、第2のカウ
ント・フィールドに関連し、ビット16〜17および1
8〜19をそれぞれ含む2つの条件とを有する第2の条
件フィールドと、ビット20〜29を含む1つのアドレ
ス・フィールドと、ビット30および31を含む1つの
拡張命令コード・フィールドとを有することを特徴とす
る、上記(14)に記載の装置。 (16)SKIP命令を検出したときに、将来スレッドが、
SKIP命令によって指定された複数の命令をデコードし、
実行を行わずに識別された命令の実行を引き受けること
を特徴とする、上記(10)に記載の装置。 (17)SKIP命令が1つの命令コード・フィールドと1
つのカウント・フィールドとを含むことを特徴とする、
上記(16)に記載の装置。 (18)スレッド管理ユニットは、FORK_S_SUSPEND命令
が検出されたときに指定のアドレスから始まる将来スレ
ッドをフォークすることができ、FORK_S_SUSPEND命令が
コンパイル時に命令スレッドに挿入され、FORK_S_SUSPE
ND命令が1組または複数組の命令を識別することがで
き、それぞれの組の命令がそれぞれの組の命令の有効実
行を判定する関連条件を任意で有し、スレッドに開始時
に複数の命令を識別するスキップ・カウント・フィール
ドをさらに有し、実行を行わずに識別された命令の実行
を引き受けることを特徴とする、上記(3)に記載の装
置。 (19)FORK_S_SUSPEND命令が、1つの命令コード・フ
ィールドと、1つのアドレス・フィールドと、1つのス
キップ・カウント・フィールドと、1つまたは複数の条
件フィールドとを含み、それぞれの条件フィールドが1
つのカウント・フィールドと1つまたは複数の条件とを
有することを特徴とする、上記(18)に記載の装置。 (20)スレッド管理ユニットは、FORK_M_SUSPEND命令
が検出されたときに指定のアドレスから始まる将来スレ
ッドをフォークすることができ、FORK_M_SUSPEND命令が
コンパイル時に命令スレッドに挿入され、FORK_M_SUSPE
ND命令が1組のレジスタ・マスクを識別することがで
き、マスクに関連する条件がある場合にその条件が実行
時に該当するのであれば、それぞれのマスクが有効ソー
ス・オペランドを保持する複数のアーキテクチャ化レジ
スタからなるサブセットを識別することを特徴とする、
上記(3)に記載の装置。 (21)FORK_M_SUSPEND命令が、1つの命令コード・フ
ィールドと、1つのアドレス・フィールドと、1つまた
は複数の条件フィールドとを含み、それぞれの条件フィ
ールドが1つのレジスタ・マスクと1つまたは複数の条
件とを有することを特徴とする、上記(20)に記載の
装置。 (22)FSKIP命令を検出したときに、将来スレッド・
ディスパッチャが取出しと、その結果、この命令に続く
指定の数の命令の実行をスキップし、FSKIP命令が有効
オペランドを保持する1組のアーキテクチャ化レジスタ
を指定するレジスタ・マスクを識別することができ、メ
イン・スレッド・ディスパッチャがこれをNOPとして
扱い、FSKIP命令がコンパイル時に命令スレッドに挿入
されることを特徴とする、上記(10)に記載の装置。 (23)FSKIP命令が、1つの命令コード・フィールド
と、1つのマスク・フィールドと、1つのカウント・フ
ィールドとを含むことを特徴とする、上記(22)に記
載の装置。 (24)SKPMG命令を検出したときに、将来スレッド
が、SKPMG命令によって指定された複数の命令をデコー
ドし、実行を行わずに識別された命令の実行を引き受
け、メイン・スレッド・ディスパッチャがこの命令を潜
在的将来スレッドの開始アドレス用のマーカとして扱
い、SKPMG命令がコンパイル時に命令スレッドに挿入さ
れることを特徴とする、上記(10)に記載の装置。 (25)SKPMG命令が1つの命令コード・フィールドと
1つのカウント・フィールドとを含むことを特徴とす
る、上記(24)に記載の装置。 (26)スレッド管理ユニットが任意でフォークするこ
とができることを特徴とする、上記(1)に記載の装
置。 (27)命令キャッシュがメイン・メモリで置き換えら
れることを特徴とする、上記(1)に記載の装置。 (28)中央演算処理装置を備えたコンピュータ・シス
テム上で命令を実行する方法において、(a)複数の命
令からなる静的シーケンスをコンパイル時に生成し、そ
の命令の静的シーケンスを分析して1組のフォーク点を
判定するステップと、(b)コンパイル時に0個または
それ以上のFORK命令を0個またはそれ以上のフォーク点
に挿入するステップと、(c)メモリ内の固定位置から
始まるメイン・メモリにその命令の静的シーケンスをロ
ードし、その静的シーケンスのサブシーケンスを命令キ
ャッシュに転送するステップと、(d)現行アドレスか
ら始まるメイン・プログラム・カウンタによりそのシー
ケンスをアドレス指定することにより、命令キャッシュ
から命令シーケンスをメイン・スレッドとして取り出
し、現行アドレスから始まり、まだ組み合わされていな
い1つまたは複数の将来スレッドがあるかどうかを判定
するために検査するステップと、(e)組み合わされて
いない将来スレッドの妥当性を検査するステップと、
(f)0個またはそれ以上の組み合わされていない将来
スレッドの有効に実行された部分をメイン・スレッドに
組み合わせるステップと、(g)取り出した命令をディ
スパッチャでデコードし、1つまたは複数の命令がFORK
命令としてデコードされたかどうかを確認するために検
査するステップと、(h)命令がFORK命令以外の命令と
してデコードされた場合に、命令依存関係を分析し、適
切な機能ユニット上で実行するために命令をスケジュー
リングすることにより、メイン・スレッドを実行するス
テップと、(i)完了ユニットにより命令実行を完了
し、ステップ(d)からこのステップまでを繰り返すス
テップと、(j)命令がFORK命令としてデコードされた
場合に、追加の将来スレッドをフォークするために使用
可能なマシン資源があるかどうかを判定するために検査
するステップと、(k)使用可能資源がある場合に、FO
RK命令に関連するアドレスを将来プログラム・カウンタ
にロードすることにより、将来スレッドをフォークする
ステップと、(l)それぞれメイン・プログラム・カウ
ンタとメイン・スレッド・ディスパッチャの代わりに将
来プログラム・カウンタの1つと将来スレッド・ディス
パッチャの1つを使用することによってステップ(d)
〜(h)を実行することにより、フォーキング・スレッ
ドの実行と並列して将来スレッドを実行し、将来スレッ
ドがメイン・スレッドと組み合わされるか、または将来
スレッドがスレッド管理ユニットによって消去された場
合に、将来スレッドの実行を中断するステップとを含む
ことを特徴とする方法。 (29)前記ステップ(b)が、(b.1) すべての
将来スレッドの終わりにUNCOND_SUSPEND命令を挿入する
という追加のサブステップを有し、前記ステップ(l)
が、(l.1) UNCOND_SUSPEND命令を検出したときに
将来スレッドの実行を中断するという追加のサブステッ
プを有し、前記ステップ(h)が、(h.1) その対
応将来スレッド以外のスレッドによって実行するために
検出された場合に、UNCOND_SUSPEND命令をNOPとして
扱うという追加のサブステップを有することを特徴とす
る、上記(28)に記載の方法。 (30)前記ステップ(b)が、(b.2) すべての
UNCOND_SUSPEND命令に対応する0個またはそれ以上のSU
SPEND命令を挿入するという追加のサブステップを有
し、前記ステップ(l)が、(l.2) SUSPEND命令
に関連するコンパイル時指定条件が実行時に偽と評価さ
れた場合に、SUSPEND命令に関連する依存性領域内の1
組の命令を破棄するという追加のサブステップを有し、
前記ステップ(h)が、(h.2) その対応将来スレ
ッド以外のスレッドによって実行するために検出された
場合に、SUSPEND命令をNOPとして扱うという追加の
サブステップを有することを特徴とする、上記(29)
に記載の方法。 (31)前記ステップ(b)が、(b.3) 0個また
はそれ以上のSKIP命令を将来スレッドに挿入するという
追加のサブステップを有し、前記ステップ(l)が、
(l.3) SKIP命令に続く指定の数の命令をデコード
し、将来スレッドとしての実行中に、実行を行わずにそ
の指定の数の命令の実行を引き受けるという追加のサブ
ステップを有し、前記ステップ(h)が、(h.3)
その対応将来スレッド以外のスレッドによって実行する
ために検出された場合に、SKIP命令をNOPとして扱う
という追加のサブステップを有することを特徴とする、
上記(30)に記載の方法。 (32)前記ステップ(b)が、(b.4) 0個また
はそれ以上のFSKIP命令を将来スレッドに挿入するとい
う追加のサブステップを有し、前記ステップ(l)が、
(l.4) 将来スレッドとしての実行中にFSKIP命令
に続く指定の数の命令の取出しをスキップし、関連マス
クで識別されたレジスタに有効オペランドを保持するも
のとしてマークを付けるという追加のサブステップを有
し、前記ステップ(h)が、(h.4) その対応将来
スレッド以外のスレッドによって実行するために検出さ
れた場合に、FSKIP命令をNOPとして扱うという追加
のサブステップを有することを特徴とする、上記(3
0)に記載の方法。 (33)前記ステップ(b)が、(b.5) すべての
将来スレッドの先頭にSKPMG命令を挿入するという追加
のサブステップを有し、前記ステップ(l)が、(l.
5) SKIP命令に続く指定の数の命令をデコードし、将
来スレッドとしての実行中に、実行を行わずにその指定
の数の命令の実行を引き受けるという追加のサブステッ
プを有し、前記ステップ(h)が、(h.5) その対
応将来スレッド以外のスレッドによって実行するために
SKPMGが検出された場合に、SKPMG命令の命令アドレス以
降について、過去に将来スレッドがフォークされたかど
うかを判定するために検査するという追加のサブステッ
プを有し、前記ステップ(d)が、(d.1) メイン
・プログラム・カウンタによりそのシーケンスをアドレ
ス指定することにより、命令キャッシュから命令シーケ
ンスを取り出すというステップで置き換えられることを
特徴とする、上記(30)に記載の方法。 (34)前記ステップ(b)が、(b.6) 0個また
はそれ以上のFORK_SUSPEND命令を0個またはそれ以上の
潜在的フォーク点に挿入するというステップで置き換え
られ、前記ステップ(j)が、(j.1) 命令がFORK
_SUSPEND命令としてデコードされた場合に、追加の将来
スレッドをフォークするために使用可能なマシン資源が
あるかどうかを判定するために検査するというステップ
で置き換えられ、前記ステップ(k)が、(k.1)
使用可能資源がある場合に、FORK_SUSPEND命令に関連す
るアドレス(複数も可)を将来プログラム・カウンタ
(複数も可)にロードすることにより、将来スレッドを
フォークするというステップで置き換えられ、前記ステ
ップ(l)が、(l.6) 関連するコンパイル時指定
条件が実行時に真に該当しない場合に、将来スレッド内
の命令の一部または全部の結果を破棄するという追加の
サブステップを有することを特徴とする、上記(28)
に記載の方法。 (35)前記ステップ(b)が、(b.7) 0個また
はそれ以上のFORK_S_SUSPEND命令を0個またはそれ以上
の潜在的フォーク点に挿入するというステップで置き換
えられ、前記ステップ(j)が、(j.2) 命令がFO
RK_S_SUSPEND命令としてデコードされた場合に、追加の
将来スレッドをフォークするために使用可能なマシン資
源があるかどうかを判定するために検査するというステ
ップで置き換えられ、前記ステップ(k)が、(k.
2) 使用可能資源がある場合に、FORK_S_SUSPEND命令
に関連するアドレス(複数も可)を将来プログラム・カ
ウンタ(複数も可)にロードすることにより、将来スレ
ッドをフォークするというステップで置き換えられ、前
記ステップ(l)が、(l.7) 将来スレッドの先頭
にある指定の数の命令をデコードし、これらの命令の実
行を行わずに指定の数の命令の実行を引き受け、関連す
るコンパイル時指定条件が実行時に真に該当しない場合
に、将来スレッド内の命令の一部または全部の結果を破
棄するという追加のサブステップを有することを特徴と
する、上記(28)に記載の方法。 (36)前記ステップ(b)が、(b.8) 0個また
はそれ以上のFORK_M_SUSPEND命令を0個またはそれ以上
の潜在的フォーク点に挿入するというステップで置き換
えられ、前記ステップ(j)が、(j.3) 命令がFO
RK_M_SUSPEND命令としてデコードされた場合に、追加の
将来スレッドをフォークするために使用可能なマシン資
源があるかどうかを判定するために検査するというステ
ップで置き換えられ、前記ステップ(k)が、(k.
3) 使用可能資源がある場合に、FORK_M_SUSPEND命令
に関連するアドレス(複数も可)を将来プログラム・カ
ウンタ(複数も可)にロードすることにより、将来スレ
ッドをフォークするというステップで置き換えられ、前
記ステップ(l)が、(l.8) 命令のソース・レジ
スタ・オペランドに関連するコンパイル時指定条件が実
行時に真に該当しない場合に、将来スレッド内の命令の
一部または全部の結果を破棄するという追加のサブステ
ップを有することを特徴とする、上記(28)に記載の
方法。 (37)前記ステップ(h)が、(h.6) スレッド
実行中のすべての分岐解決をTMユニットに連絡し、T
Mユニットがこの情報を使用して、間違った分岐アドレ
スにフォークされた将来スレッドとすべての依存スレッ
ドを破棄する必要があるかどうかを判定するという追加
のサブステップを有することを特徴とする、上記(2
8)に記載の方法。 (38)前記ステップ(d)が、(d.2) TMユニ
ットが、事前フォーク済みスレッドのいずれかが既定の
タイムアウト期間より長い間、組み合わされない状態を
維持していたかどうかを判定するために検査し、このよ
うなスレッドを破棄するという追加のサブステップを有
することを特徴とする、上記(28)に記載の方法。
【図1】本発明の方法を実行すると思われる典型的なプ
ロセッサ編成のハードウェアのブロック図である。
ロセッサ編成のハードウェアのブロック図である。
【図2】本発明の方法を実行すると思われる典型的なプ
ロセッサ編成のハードウェアのブロック図である。
ロセッサ編成のハードウェアのブロック図である。
【図3】本発明の方法の諸ステップを示す流れ図であ
る。
る。
【図4】本発明の方法の諸ステップを示す流れ図であ
る。
る。
【図5】FORK命令の形式構造を示すブロック図である。
【図6】UNCOND_SUSPEND命令の形式構造を示すブロック
図である。
図である。
【図7】SUSPEND命令の形式構造を示すブロック図であ
る。
る。
【図8】FORK_SUSPEND命令の形式構造を示すブロック図
である。
である。
【図9】SKIP命令の形式構造を示すブロック図である。
【図10】FORK_S_SUSPEND命令の形式構造を示すブロッ
ク図である。
ク図である。
【図11】FORK_M_SUSPEND命令の形式構造を示すブロッ
ク図である。
ク図である。
【図12】FSKIP命令の形式構造を示すブロック図であ
る。
る。
【図13】SKPMG命令の形式構造を示すブロック図であ
る。
る。
【図14】FORK、UNCOND_SUSPEND、SUSPEND、FORK_SUSP
ENDの各命令の形式構造のコード化の好ましい実施例を
示す1組のブロック図である。
ENDの各命令の形式構造のコード化の好ましい実施例を
示す1組のブロック図である。
【図15】FORK、UNCOND_SUSPEND、SUSPEND、FORK_SUSP
ENDの各命令の形式構造のコード化の好ましい実施例を
示す1組のブロック図である。
ENDの各命令の形式構造のコード化の好ましい実施例を
示す1組のブロック図である。
【図16】FORK、UNCOND_SUSPEND、SUSPEND、FORK_SUSP
ENDの各命令の形式構造のコード化の好ましい実施例を
示す1組のブロック図である。
ENDの各命令の形式構造のコード化の好ましい実施例を
示す1組のブロック図である。
【図17】FORK、UNCOND_SUSPEND、SUSPEND、FORK_SUSP
ENDの各命令の形式構造のコード化の好ましい実施例を
示す1組のブロック図である。
ENDの各命令の形式構造のコード化の好ましい実施例を
示す1組のブロック図である。
【図18】本発明で提案した命令の一部をアセンブリ・
コード・サンプルで使用した場合を示す図である。
コード・サンプルで使用した場合を示す図である。
【図19】本発明で提案した命令の一部をアセンブリ・
コード・サンプルで使用した場合を示す図である。
コード・サンプルで使用した場合を示す図である。
【図20】本発明で提案した命令の一部をアセンブリ・
コード・サンプルで使用した場合を示す図である。
コード・サンプルで使用した場合を示す図である。
100 メモリ 110 命令キャッシュ 115 ポート 120 プログラム・カウンタ 130 スレッド管理ユニット 140 ディスパッチャ 141 命令バッファ 150 スケジューラ 160 レジスタ・ファイル 170 データ・キャッシュ 190 完了ユニット
───────────────────────────────────────────────────── フロントページの続き (72)発明者 チャールズ・マーシャル・バートン アメリカ合衆国07641 ニュージャージー 州ハワース プロスペクト・アベニュー 28 (72)発明者 チャオ=メイ・チュアン アメリカ合衆国95014 カリフォルニア州 キュパーティノ レインボウ・ドライブ 7585 (72)発明者 リン・フエ・ラム アメリカ合衆国10598 ニューヨーク州ヨ ークタウン・ハイツ ブラックベリー・レ ーン 770 (72)発明者 ジョン・ケヴィン・オブライエン アメリカ合衆国10590 ニューヨーク州サ ウス・サーレム サーレム・ヒル・ロード ピー・オー・ボックス 370 (72)発明者 キャスリン・メアリー・オブライエン アメリカ合衆国10590 ニューヨーク州サ ウス・サーレム サーレム・ヒル・ロード ピー・オー・ボックス 370
Claims (38)
- 【請求項1】コンピュータ内の中央演算処理装置におい
て、 a.複数の命令を有する命令キャッシュ・メモリであっ
て、その命令キャッシュが1つまたは複数の命令キャッ
シュ・ポートをさらに有する命令キャッシュ・メモリ
と、 b.複数のプログラム・カウンタからなるプログラム・
カウンタ・バンクであって、それぞれのプログラム・カ
ウンタが命令キャッシュ内の1つまたは複数の命令を独
立してアドレス指定し、アドレス指定した命令を命令キ
ャッシュ・ポートの1つにポーティングすることができ
る、プログラム・カウンタ・バンクと、 c.複数のディスパッチャからなり、それぞれのディス
パッチャが命令バッファを1つずつ有し、それぞれのデ
ィスパッチャが1つまたは複数の命令キャッシュ・ポー
トから命令を受け取り、受け取った命令をその命令バッ
ファに入れ、命令をデコードし、その関連バッファ内の
命令間の依存関係を分析することができる、ディスパッ
チャ・バンクと、 d.それぞれのスレッドがプログラム・カウンタの1つ
を使用して実行した一連の命令シーケンスを有する、1
つまたは複数のスレッドをフォークし、0または1つ以
上のスレッド間通信を処理するスレッド管理ユニット
と、 e.すべてのディスパッチャから命令を受け取り、1つ
または複数の機能ユニット上で実行するために命令をス
ケジューリングするスケジューラと、 f.すべてのスレッド内の命令によってアクセス可能な
1つまたは複数のアーキテクチャ化レジスタからなる固
定セットを含むレジスタ・ファイルとを含み、 それにより、1つまたは複数の命令スレッドが機能ユニ
ットによって並列に実行されることを特徴とする、中央
演算処理装置。 - 【請求項2】プログラム・カウンタ・バンク内のプログ
ラム・カウンタの1つがメイン・スレッド内の命令を追
跡し、メイン・スレッドが順次追跡順序で最も早いスレ
ッドであることを特徴とする、請求項1に記載の装置。 - 【請求項3】1つまたは複数のディスパッチャが、その
ディスパッチャが分析中に解決できない1つまたは複数
の依存関係について推測し、スレッド管理ユニットが、
1つまたは複数の推測の結果として、プログラム依存関
係の違反のために将来スレッドのいずれかによって実行
された1つまたは複数の命令を破棄する必要があるかど
うかを判定することができ、スレッド管理ユニットがこ
のような違反命令を破棄することを特徴とする、請求項
2に記載の装置。 - 【請求項4】スレッド管理ユニットは、FORK命令が検出
されたときに指定のアドレスから始まる将来スレッドを
フォークすることができ、FORK命令がコンパイル時に命
令スレッドに挿入され、FORK命令が1つまたは複数の将
来スレッドの先頭を識別することを特徴とする、請求項
3に記載の装置。 - 【請求項5】FORK命令が1つの命令コード・フィールド
と1つまたは複数のアドレス・フィールドとを含み、そ
れぞれのアドレスが将来スレッドの開始位置を識別する
ことを特徴とする、請求項4に記載の装置。 - 【請求項6】FORK命令の命令コード・フィールドがビッ
ト0〜5を含み、アドレス・フィールドがビット6〜2
9を含み、拡張命令コード・フィールドがビット30と
31とを含むことを特徴とする、請求項5に記載の装
置。 - 【請求項7】スレッド管理ユニットは、FORK命令が検出
されたときに指定のアドレスから始まる将来スレッドを
フォークすることができ、UNCOND_SUSPEND命令が検出さ
れたときにその将来スレッドを無条件に中断し、FORK命
令とUNCOND_SUSPEND命令がコンパイル時に挿入されるこ
とを特徴とする、請求項3に記載の装置。 - 【請求項8】FORK命令が1つの命令コード・フィールド
と1つまたは複数のアドレス・フィールドとを含み、そ
れぞれのアドレスが将来スレッドの開始位置を識別し、
UNCOND_SUSPEND命令が1つの命令コード・フィールドを
含むことを特徴とする、請求項7に記載の装置。 - 【請求項9】FORK命令の命令コード・フィールドがビッ
ト0〜5を含み、アドレス・フィールドがビット6〜2
9を含み、拡張命令コード・フィールドがビット30と
31とを含み、UNCOND_SUSPENDの命令コードがビット0
〜5を含む1つの1次命令コード・フィールドと、ビッ
ト21〜31を含む1つの拡張命令コード・フィールド
とを有することを特徴とする、請求項8に記載の装置。 - 【請求項10】1つまたは複数のSUSPEND命令を有し、
将来スレッドの1つの実行中にSUSPEND命令が検出さ
れ、SUSPEND命令に関連するコンパイル時指定条件が実
行時に偽と評価された場合にスレッド管理ユニットがSU
SPEND命令に関連する依存性領域内の1組の命令の結果
を破棄し、SUSPEND命令がコンパイル時に挿入されるこ
とを特徴とする、請求項7に記載に装置。 - 【請求項11】SUSPEND命令が、1つのSUSPEND命令コー
ド・フィールドと、1つのモードビットと、1つの条件
フィールドとを含むことを特徴とする、請求項10に記
載の装置。 - 【請求項12】SUSPEND命令コードが、ビット0〜5を
含む1つの1次命令コード・フィールドと、ビット6を
占有する1つのモード・フィールドと、ビット6〜20
を占有し、それぞれが2ビットの長さの7つの条件サブ
フィールドから構成される1つの条件フィールドと、ビ
ット21〜31を含む1つの拡張命令コード・フィール
ドとを有することを特徴とする、請求項11に記載の装
置。 - 【請求項13】スレッド管理ユニットは、FORK_SUSPEND
命令が検出されたときに指定のアドレスから始まる将来
スレッドをフォークすることができ、FORK_SUSPEND命令
がコンパイル時に命令スレッドに挿入され、FORK_SUSPE
ND命令が1組または複数組の命令を識別することがで
き、それぞれの組の命令がそれぞれの組の命令の有効実
行を判定する関連条件を任意で有することを特徴とす
る、請求項3に記載の装置。 - 【請求項14】FORK_SUSPEND命令が、1つの命令コード
・フィールドと、1つのアドレス・フィールドと、1つ
または複数の条件フィールドとを含み、それぞれの条件
フィールドが1つのカウント・フィールドと1つまたは
複数の条件とを有することを特徴とする、請求項13に
記載の装置。 - 【請求項15】FORK_SUSPEND命令が、ビット0〜5を含
む1つの命令コードと、ビット6〜8を含む第1のカウ
ント・フィールドと、第1のカウント・フィールドに関
連し、ビット9〜10および11〜12をそれぞれ含む
2つの条件とを有する第1の条件フィールドと、ビット
13〜15を含む第2のカウント・フィールドと、第2
のカウント・フィールドに関連し、ビット16〜17お
よび18〜19をそれぞれ含む2つの条件とを有する第
2の条件フィールドと、ビット20〜29を含む1つの
アドレス・フィールドと、ビット30および31を含む
1つの拡張命令コード・フィールドとを有することを特
徴とする、請求項14に記載の装置。 - 【請求項16】SKIP命令を検出したときに、将来スレッ
ドが、SKIP命令によって指定された複数の命令をデコー
ドし、実行を行わずに識別された命令の実行を引き受け
ることを特徴とする、請求項10に記載の装置。 - 【請求項17】SKIP命令が1つの命令コード・フィール
ドと1つのカウント・フィールドとを含むことを特徴と
する、請求項16に記載の装置。 - 【請求項18】スレッド管理ユニットは、FORK_S_SUSPE
ND命令が検出されたときに指定のアドレスから始まる将
来スレッドをフォークすることができ、FORK_S_SUSPEND
命令がコンパイル時に命令スレッドに挿入され、FORK_S
_SUSPEND命令が1組または複数組の命令を識別すること
ができ、それぞれの組の命令がそれぞれの組の命令の有
効実行を判定する関連条件を任意で有し、スレッドに開
始時に複数の命令を識別するスキップ・カウント・フィ
ールドをさらに有し、実行を行わずに識別された命令の
実行を引き受けることを特徴とする、請求項3に記載の
装置。 - 【請求項19】FORK_S_SUSPEND命令が、1つの命令コー
ド・フィールドと、1つのアドレス・フィールドと、1
つのスキップ・カウント・フィールドと、1つまたは複
数の条件フィールドとを含み、それぞれの条件フィール
ドが1つのカウント・フィールドと1つまたは複数の条
件とを有することを特徴とする、請求項18に記載の装
置。 - 【請求項20】スレッド管理ユニットは、FORK_M_SUSPE
ND命令が検出されたときに指定のアドレスから始まる将
来スレッドをフォークすることができ、FORK_M_SUSPEND
命令がコンパイル時に命令スレッドに挿入され、FORK_M
_SUSPEND命令が1組のレジスタ・マスクを識別すること
ができ、マスクに関連する条件がある場合にその条件が
実行時に該当するのであれば、それぞれのマスクが有効
ソース・オペランドを保持する複数のアーキテクチャ化
レジスタからなるサブセットを識別することを特徴とす
る、請求項3に記載の装置。 - 【請求項21】FORK_M_SUSPEND命令が、1つの命令コー
ド・フィールドと、1つのアドレス・フィールドと、1
つまたは複数の条件フィールドとを含み、それぞれの条
件フィールドが1つのレジスタ・マスクと1つまたは複
数の条件とを有することを特徴とする、請求項20に記
載の装置。 - 【請求項22】FSKIP命令を検出したときに、将来スレ
ッド・ディスパッチャが取出しと、その結果、この命令
に続く指定の数の命令の実行をスキップし、FSKIP命令
が有効オペランドを保持する1組のアーキテクチャ化レ
ジスタを指定するレジスタ・マスクを識別することがで
き、メイン・スレッド・ディスパッチャがこれをNOP
として扱い、FSKIP命令がコンパイル時に命令スレッド
に挿入されることを特徴とする、請求項10に記載の装
置。 - 【請求項23】FSKIP命令が、1つの命令コード・フィ
ールドと、1つのマスク・フィールドと、1つのカウン
ト・フィールドとを含むことを特徴とする、請求項22
に記載の装置。 - 【請求項24】SKPMG命令を検出したときに、将来スレ
ッドが、SKPMG命令によって指定された複数の命令をデ
コードし、実行を行わずに識別された命令の実行を引き
受け、メイン・スレッド・ディスパッチャがこの命令を
潜在的将来スレッドの開始アドレス用のマーカとして扱
い、SKPMG命令がコンパイル時に命令スレッドに挿入さ
れることを特徴とする、請求項10に記載の装置。 - 【請求項25】SKPMG命令が1つの命令コード・フィー
ルドと1つのカウント・フィールドとを含むことを特徴
とする、請求項24に記載の装置。 - 【請求項26】スレッド管理ユニットが任意でフォーク
することができることを特徴とする、請求項1に記載の
装置。 - 【請求項27】命令キャッシュがメイン・メモリで置き
換えられることを特徴とする、請求項1に記載の装置。 - 【請求項28】中央演算処理装置を備えたコンピュータ
・システム上で命令を実行する方法において、(a)複
数の命令からなる静的シーケンスをコンパイル時に生成
し、その命令の静的シーケンスを分析して1組のフォー
ク点を判定するステップと、(b)コンパイル時に0個
またはそれ以上のFORK命令を0個またはそれ以上のフォ
ーク点に挿入するステップと、(c)メモリ内の固定位
置から始まるメイン・メモリにその命令の静的シーケン
スをロードし、その静的シーケンスのサブシーケンスを
命令キャッシュに転送するステップと、(d)現行アド
レスから始まるメイン・プログラム・カウンタによりそ
のシーケンスをアドレス指定することにより、命令キャ
ッシュから命令シーケンスをメイン・スレッドとして取
り出し、現行アドレスから始まり、まだ組み合わされて
いない1つまたは複数の将来スレッドがあるかどうかを
判定するために検査するステップと、(e)組み合わさ
れていない将来スレッドの妥当性を検査するステップ
と、(f)0個またはそれ以上の組み合わされていない
将来スレッドの有効に実行された部分をメイン・スレッ
ドに組み合わせるステップと、(g)取り出した命令を
ディスパッチャでデコードし、1つまたは複数の命令が
FORK命令としてデコードされたかどうかを確認するため
に検査するステップと、(h)命令がFORK命令以外の命
令としてデコードされた場合に、命令依存関係を分析
し、適切な機能ユニット上で実行するために命令をスケ
ジューリングすることにより、メイン・スレッドを実行
するステップと、(i)完了ユニットにより命令実行を
完了し、ステップ(d)からこのステップまでを繰り返
すステップと、(j)命令がFORK命令としてデコードさ
れた場合に、追加の将来スレッドをフォークするために
使用可能なマシン資源があるかどうかを判定するために
検査するステップと、(k)使用可能資源がある場合
に、FORK命令に関連するアドレスを将来プログラム・カ
ウンタにロードすることにより、将来スレッドをフォー
クするステップと、(l)それぞれメイン・プログラム
・カウンタとメイン・スレッド・ディスパッチャの代わ
りに将来プログラム・カウンタの1つと将来スレッド・
ディスパッチャの1つを使用することによってステップ
(d)〜(h)を実行することにより、フォーキング・
スレッドの実行と並列して将来スレッドを実行し、将来
スレッドがメイン・スレッドと組み合わされるか、また
は将来スレッドがスレッド管理ユニットによって消去さ
れた場合に、将来スレッドの実行を中断するステップと
を含むことを特徴とする方法。 - 【請求項29】前記ステップ(b)が、 (b.1) すべての将来スレッドの終わりにUNCOND_S
USPEND命令を挿入するという追加のサブステップを有
し、 前記ステップ(l)が、 (l.1) UNCOND_SUSPEND命令を検出したときに将来
スレッドの実行を中断するという追加のサブステップを
有し、 前記ステップ(h)が、 (h.1) その対応将来スレッド以外のスレッドによ
って実行するために検出された場合に、UNCOND_SUSPEND
命令をNOPとして扱うという追加のサブステップを有
することを特徴とする、 請求項28に記載の方法。 - 【請求項30】前記ステップ(b)が、 (b.2) すべてのUNCOND_SUSPEND命令に対応する0
個またはそれ以上のSUSPEND命令を挿入するという追加
のサブステップを有し、 前記ステップ(l)が、 (l.2) SUSPEND命令に関連するコンパイル時指定
条件が実行時に偽と評価された場合に、SUSPEND命令に
関連する依存性領域内の1組の命令を破棄するという追
加のサブステップを有し、 前記ステップ(h)が、 (h.2) その対応将来スレッド以外のスレッドによ
って実行するために検出された場合に、SUSPEND命令を
NOPとして扱うという追加のサブステップを有するこ
とを特徴とする、 請求項29に記載の方法。 - 【請求項31】前記ステップ(b)が、 (b.3) 0個またはそれ以上のSKIP命令を将来スレ
ッドに挿入するという追加のサブステップを有し、 前記ステップ(l)が、 (l.3) SKIP命令に続く指定の数の命令をデコード
し、将来スレッドとしての実行中に、実行を行わずにそ
の指定の数の命令の実行を引き受けるという追加のサブ
ステップを有し、 前記ステップ(h)が、 (h.3) その対応将来スレッド以外のスレッドによ
って実行するために検出された場合に、SKIP命令をNO
Pとして扱うという追加のサブステップを有することを
特徴とする、 請求項30に記載の方法。 - 【請求項32】前記ステップ(b)が、 (b.4) 0個またはそれ以上のFSKIP命令を将来ス
レッドに挿入するという追加のサブステップを有し、 前記ステップ(l)が、 (l.4) 将来スレッドとしての実行中にFSKIP命令
に続く指定の数の命令の取出しをスキップし、関連マス
クで識別されたレジスタに有効オペランドを保持するも
のとしてマークを付けるという追加のサブステップを有
し、 前記ステップ(h)が、 (h.4) その対応将来スレッド以外のスレッドによ
って実行するために検出された場合に、FSKIP命令をN
OPとして扱うという追加のサブステップを有すること
を特徴とする、 請求項30に記載の方法。 - 【請求項33】前記ステップ(b)が、 (b.5) すべての将来スレッドの先頭にSKPMG命令
を挿入するという追加のサブステップを有し、 前記ステップ(l)が、 (l.5) SKIP命令に続く指定の数の命令をデコード
し、将来スレッドとしての実行中に、実行を行わずにそ
の指定の数の命令の実行を引き受けるという追加のサブ
ステップを有し、 前記ステップ(h)が、 (h.5) その対応将来スレッド以外のスレッドによ
って実行するためにSKPMGが検出された場合に、SKPMG命
令の命令アドレス以降について、過去に将来スレッドが
フォークされたかどうかを判定するために検査するとい
う追加のサブステップを有し、 前記ステップ(d)が、 (d.1) メイン・プログラム・カウンタによりその
シーケンスをアドレス指定することにより、命令キャッ
シュから命令シーケンスを取り出すというステップで置
き換えられることを特徴とする、 請求項30に記載の方法。 - 【請求項34】前記ステップ(b)が、 (b.6) 0個またはそれ以上のFORK_SUSPEND命令を
0個またはそれ以上の潜在的フォーク点に挿入するとい
うステップで置き換えられ、 前記ステップ(j)が、 (j.1) 命令がFORK_SUSPEND命令としてデコードさ
れた場合に、追加の将来スレッドをフォークするために
使用可能なマシン資源があるかどうかを判定するために
検査するというステップで置き換えられ、 前記ステップ(k)が、 (k.1) 使用可能資源がある場合に、FORK_SUSPEND
命令に関連するアドレス(複数も可)を将来プログラム
・カウンタ(複数も可)にロードすることにより、将来
スレッドをフォークするというステップで置き換えら
れ、 前記ステップ(l)が、 (l.6) 関連するコンパイル時指定条件が実行時に
真に該当しない場合に、将来スレッド内の命令の一部ま
たは全部の結果を破棄するという追加のサブステップを
有することを特徴とする、 請求項28に記載の方法。 - 【請求項35】前記ステップ(b)が、 (b.7) 0個またはそれ以上のFORK_S_SUSPEND命令
を0個またはそれ以上の潜在的フォーク点に挿入すると
いうステップで置き換えられ、 前記ステップ(j)が、 (j.2) 命令がFORK_S_SUSPEND命令としてデコード
された場合に、追加の将来スレッドをフォークするため
に使用可能なマシン資源があるかどうかを判定するため
に検査するというステップで置き換えられ、 前記ステップ(k)が、 (k.2) 使用可能資源がある場合に、FORK_S_SUSPE
ND命令に関連するアドレス(複数も可)を将来プログラ
ム・カウンタ(複数も可)にロードすることにより、将
来スレッドをフォークするというステップで置き換えら
れ、 前記ステップ(l)が、 (l.7) 将来スレッドの先頭にある指定の数の命令
をデコードし、これらの命令の実行を行わずに指定の数
の命令の実行を引き受け、関連するコンパイル時指定条
件が実行時に真に該当しない場合に、将来スレッド内の
命令の一部または全部の結果を破棄するという追加のサ
ブステップを有することを特徴とする、 請求項28に記載の方法。 - 【請求項36】前記ステップ(b)が、 (b.8) 0個またはそれ以上のFORK_M_SUSPEND命令
を0個またはそれ以上の潜在的フォーク点に挿入すると
いうステップで置き換えられ、 前記ステップ(j)が、 (j.3) 命令がFORK_M_SUSPEND命令としてデコード
された場合に、追加の将来スレッドをフォークするため
に使用可能なマシン資源があるかどうかを判定するため
に検査するというステップで置き換えられ、 前記ステップ(k)が、 (k.3) 使用可能資源がある場合に、FORK_M_SUSPE
ND命令に関連するアドレス(複数も可)を将来プログラ
ム・カウンタ(複数も可)にロードすることにより、将
来スレッドをフォークするというステップで置き換えら
れ、 前記ステップ(l)が、 (l.8) 命令のソース・レジスタ・オペランドに関
連するコンパイル時指定条件が実行時に真に該当しない
場合に、将来スレッド内の命令の一部または全部の結果
を破棄するという追加のサブステップを有することを特
徴とする、 請求項28に記載の方法。 - 【請求項37】前記ステップ(h)が、 (h.6) スレッド実行中のすべての分岐解決をTM
ユニットに連絡し、TMユニットがこの情報を使用し
て、間違った分岐アドレスにフォークされた将来スレッ
ドとすべての依存スレッドを破棄する必要があるかどう
かを判定するという追加のサブステップを有することを
特徴とする、 請求項28に記載の方法。 - 【請求項38】前記ステップ(d)が、 (d.2) TMユニットが、事前フォーク済みスレッ
ドのいずれかが既定のタイムアウト期間より長い間、組
み合わされない状態を維持していたかどうかを判定する
ために検査し、このようなスレッドを破棄するという追
加のサブステップを有することを特徴とする、 請求項28に記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/383,331 US5812811A (en) | 1995-02-03 | 1995-02-03 | Executing speculative parallel instructions threads with forking and inter-thread communication |
US383331 | 1995-02-03 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08249183A true JPH08249183A (ja) | 1996-09-27 |
JP3093626B2 JP3093626B2 (ja) | 2000-10-03 |
Family
ID=23512642
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP08011080A Expired - Fee Related JP3093626B2 (ja) | 1995-02-03 | 1996-01-25 | 中央演算処理装置および命令を実行する方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US5812811A (ja) |
EP (1) | EP0725334A1 (ja) |
JP (1) | JP3093626B2 (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6978460B2 (en) | 2001-03-07 | 2005-12-20 | Renesas Technology Corp. | Processor having priority changing function according to threads |
JP2007504535A (ja) * | 2003-08-28 | 2007-03-01 | ミップス テクノロジーズ インコーポレイテッド | マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令 |
US7243345B2 (en) | 2001-07-12 | 2007-07-10 | Nec Corporation | Multi-thread executing method and parallel processing system |
US7281250B2 (en) | 2001-07-12 | 2007-10-09 | Nec Corporation | Multi-thread execution method and parallel processor system |
KR20170130383A (ko) * | 2015-03-27 | 2017-11-28 | 인텔 코포레이션 | 사용자-레벨 포크 및 조인 프로세서, 방법, 시스템, 및 명령어 |
Families Citing this family (127)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2882475B2 (ja) * | 1996-07-12 | 1999-04-12 | 日本電気株式会社 | スレッド実行方法 |
JP3139392B2 (ja) * | 1996-10-11 | 2001-02-26 | 日本電気株式会社 | 並列処理システム |
AU6586898A (en) | 1997-03-21 | 1998-10-20 | University Of Maryland | Spawn-join instruction set architecture for providing explicit multithreading |
US6009270A (en) * | 1997-04-08 | 1999-12-28 | Advanced Micro Devices, Inc. | Trace synchronization in a processor |
US6314530B1 (en) | 1997-04-08 | 2001-11-06 | Advanced Micro Devices, Inc. | Processor having a trace access instruction to access on-chip trace memory |
US6003066A (en) * | 1997-08-14 | 1999-12-14 | International Business Machines Corporation | System for distributing a plurality of threads associated with a process initiating by one data processing station among data processing stations |
US6032245A (en) * | 1997-08-18 | 2000-02-29 | International Business Machines Corporation | Method and system for interrupt handling in a multi-processor computer system executing speculative instruction threads |
WO1999009472A1 (en) * | 1997-08-18 | 1999-02-25 | Koninklijke Philips Electronics N.V. | Data processing device with relative jump instruction |
US6021488A (en) * | 1997-09-23 | 2000-02-01 | International Business Machines Corp. | Data processing system having an apparatus for tracking a status of an out-of-order operation and method thereof |
US6463522B1 (en) * | 1997-12-16 | 2002-10-08 | Intel Corporation | Memory system for ordering load and store instructions in a processor that performs multithread execution |
US6182210B1 (en) * | 1997-12-16 | 2001-01-30 | Intel Corporation | Processor having multiple program counters and trace buffers outside an execution pipeline |
US6240509B1 (en) * | 1997-12-16 | 2001-05-29 | Intel Corporation | Out-of-pipeline trace buffer for holding instructions that may be re-executed following misspeculation |
US6772324B2 (en) * | 1997-12-17 | 2004-08-03 | Intel Corporation | Processor having multiple program counters and trace buffers outside an execution pipeline |
US6106575A (en) * | 1998-05-13 | 2000-08-22 | Microsoft Corporation | Nested parallel language preprocessor for converting parallel language programs into sequential code |
US6292822B1 (en) | 1998-05-13 | 2001-09-18 | Microsoft Corporation | Dynamic load balancing among processors in a parallel computer |
US6513108B1 (en) | 1998-06-29 | 2003-01-28 | Cisco Technology, Inc. | Programmable processing engine for efficiently processing transient data |
US6101599A (en) * | 1998-06-29 | 2000-08-08 | Cisco Technology, Inc. | System for context switching between processing elements in a pipeline of processing elements |
US6260190B1 (en) * | 1998-08-11 | 2001-07-10 | Hewlett-Packard Company | Unified compiler framework for control and data speculation with recovery code |
US6862635B1 (en) * | 1998-11-13 | 2005-03-01 | Cray Inc. | Synchronization techniques in a multithreaded environment |
US6480818B1 (en) | 1998-11-13 | 2002-11-12 | Cray Inc. | Debugging techniques in a multithreaded environment |
US6314471B1 (en) * | 1998-11-13 | 2001-11-06 | Cray Inc. | Techniques for an interrupt free operating system |
US6952827B1 (en) * | 1998-11-13 | 2005-10-04 | Cray Inc. | User program and operating system interface in a multithreaded environment |
US6173386B1 (en) | 1998-12-14 | 2001-01-09 | Cisco Technology, Inc. | Parallel processor with debug capability |
US7020879B1 (en) * | 1998-12-16 | 2006-03-28 | Mips Technologies, Inc. | Interrupt and exception handling for multi-streaming digital processors |
US7237093B1 (en) | 1998-12-16 | 2007-06-26 | Mips Technologies, Inc. | Instruction fetching system in a multithreaded processor utilizing cache miss predictions to fetch instructions from multiple hardware streams |
US6389449B1 (en) * | 1998-12-16 | 2002-05-14 | Clearwater Networks, Inc. | Interstream control and communications for multi-streaming digital processors |
US7035997B1 (en) | 1998-12-16 | 2006-04-25 | Mips Technologies, Inc. | Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors |
US7529907B2 (en) | 1998-12-16 | 2009-05-05 | Mips Technologies, Inc. | Method and apparatus for improved computer load and store operations |
US7257814B1 (en) | 1998-12-16 | 2007-08-14 | Mips Technologies, Inc. | Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors |
US6920562B1 (en) | 1998-12-18 | 2005-07-19 | Cisco Technology, Inc. | Tightly coupled software protocol decode with hardware data encryption |
US6321379B1 (en) | 1998-12-23 | 2001-11-20 | Cray Inc. | Method and system for target register allocation |
US6415433B1 (en) | 1998-12-23 | 2002-07-02 | Cray Inc. | Method and system for identifying locations to move portions of the computer program |
US6430676B1 (en) * | 1998-12-23 | 2002-08-06 | Cray Inc. | Method and system for calculating instruction lookahead |
US6230313B1 (en) * | 1998-12-23 | 2001-05-08 | Cray Inc. | Parallelism performance analysis based on execution trace information |
US6665688B1 (en) | 1998-12-23 | 2003-12-16 | Cray Inc. | Method and system for automatically regenerating data on-demand |
US6353829B1 (en) | 1998-12-23 | 2002-03-05 | Cray Inc. | Method and system for memory allocation in a multiprocessing environment |
US6564372B1 (en) * | 1999-02-17 | 2003-05-13 | Elbrus International Limited | Critical path optimization-unzipping |
JP2000305795A (ja) * | 1999-04-20 | 2000-11-02 | Nec Corp | 並列処理装置 |
US6353881B1 (en) | 1999-05-17 | 2002-03-05 | Sun Microsystems, Inc. | Supporting space-time dimensional program execution by selectively versioning memory updates |
US6247027B1 (en) * | 1999-05-17 | 2001-06-12 | Sun Microsystems, Inc. | Facilitating garbage collection during object versioning for space and time dimensional computing |
WO2000070451A1 (en) * | 1999-05-17 | 2000-11-23 | Sun Microsystems, Inc. | Parallel join operation to support space and time dimensional program execution |
US6463526B1 (en) * | 1999-06-07 | 2002-10-08 | Sun Microsystems, Inc. | Supporting multi-dimensional space-time computing through object versioning |
WO2001016702A1 (en) | 1999-09-01 | 2001-03-08 | Intel Corporation | Register set used in multithreaded parallel processor architecture |
US6529983B1 (en) | 1999-11-03 | 2003-03-04 | Cisco Technology, Inc. | Group and virtual locking mechanism for inter processor synchronization |
US6345351B1 (en) | 1999-11-12 | 2002-02-05 | Telefonaktiebolaget Lm Ericsson(Publ) | Maintenance of speculative state of parallel executed jobs in an information processing system |
US6665708B1 (en) | 1999-11-12 | 2003-12-16 | Telefonaktiebolaget Lm Ericsson (Publ) | Coarse grained determination of data dependence between parallel executed jobs in an information processing system |
US7518993B1 (en) * | 1999-11-19 | 2009-04-14 | The United States Of America As Represented By The Secretary Of The Navy | Prioritizing resource utilization in multi-thread computing system |
US7512724B1 (en) * | 1999-11-19 | 2009-03-31 | The United States Of America As Represented By The Secretary Of The Navy | Multi-thread peripheral processing using dedicated peripheral bus |
US6687729B1 (en) * | 1999-12-20 | 2004-02-03 | Unisys Corporation | System and method for providing a pool of reusable threads for performing queued items of work |
DE10000960C1 (de) * | 2000-01-12 | 2001-12-20 | Infineon Technologies Ag | Datenverarbeitungsvorrichtung |
US6910123B1 (en) * | 2000-01-13 | 2005-06-21 | Texas Instruments Incorporated | Processor with conditional instruction execution based upon state of corresponding annul bit of annul code |
US6775752B1 (en) | 2000-02-21 | 2004-08-10 | Hewlett-Packard Development Company, L.P. | System and method for efficiently updating a fully associative array |
JP3641997B2 (ja) * | 2000-03-30 | 2005-04-27 | 日本電気株式会社 | プログラム変換装置及び方法並びに記録媒体 |
US7093109B1 (en) | 2000-04-04 | 2006-08-15 | International Business Machines Corporation | Network processor which makes thread execution control decisions based on latency event lengths |
US6931641B1 (en) | 2000-04-04 | 2005-08-16 | International Business Machines Corporation | Controller for multiple instruction thread processors |
US7343602B2 (en) * | 2000-04-19 | 2008-03-11 | Hewlett-Packard Development Company, L.P. | Software controlled pre-execution in a multithreaded processor |
US6505269B1 (en) | 2000-05-16 | 2003-01-07 | Cisco Technology, Inc. | Dynamic addressing mapping to eliminate memory resource contention in a symmetric multiprocessor system |
US6721944B2 (en) | 2000-05-31 | 2004-04-13 | Sun Microsystems, Inc. | Marking memory elements based upon usage of accessed information during speculative execution |
JP2004518183A (ja) | 2000-07-14 | 2004-06-17 | クリアウオーター・ネツトワークス・インコーポレイテツド | マルチスレッド・システムにおける命令のフェッチとディスパッチ |
US7681018B2 (en) | 2000-08-31 | 2010-03-16 | Intel Corporation | Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set |
US7139898B1 (en) * | 2000-11-03 | 2006-11-21 | Mips Technologies, Inc. | Fetch and dispatch disassociation apparatus for multistreaming processors |
US7035998B1 (en) | 2000-11-03 | 2006-04-25 | Mips Technologies, Inc. | Clustering stream and/or instruction queues for multi-streaming processors |
US7031989B2 (en) | 2001-02-26 | 2006-04-18 | International Business Machines Corporation | Dynamic seamless reconfiguration of executing parallel software |
US6928645B2 (en) * | 2001-03-30 | 2005-08-09 | Intel Corporation | Software-based speculative pre-computation and multithreading |
JP3630118B2 (ja) * | 2001-07-12 | 2005-03-16 | 日本電気株式会社 | スレッド終了方法及び装置並びに並列プロセッサシステム |
JP3702815B2 (ja) | 2001-07-12 | 2005-10-05 | 日本電気株式会社 | プロセッサ間レジスタ継承方法及びその装置 |
WO2003007153A2 (en) * | 2001-07-13 | 2003-01-23 | Sun Microsystems, Inc. | Facilitating efficient join operations between a head thread and a speculative thread |
US7676588B2 (en) * | 2001-10-05 | 2010-03-09 | International Business Machines Corporation | Programmable network protocol handler architecture |
US7072970B2 (en) * | 2001-10-05 | 2006-07-04 | International Business Machines Corporation | Programmable network protocol handler architecture |
CN1212567C (zh) * | 2002-03-28 | 2005-07-27 | 徐肇昌 | 软件模拟序网n+1个并行程序的结构和方法 |
US7493607B2 (en) | 2002-07-09 | 2009-02-17 | Bluerisc Inc. | Statically speculative compilation and execution |
US7516458B2 (en) * | 2002-07-31 | 2009-04-07 | Sap Aktiengesellschaft | Job management in presence of implicit dependency |
US6965986B2 (en) * | 2002-09-19 | 2005-11-15 | International Business Machines Corporation | Method and apparatus for implementing two-tiered thread state multithreading support with high clock rate |
US7096470B2 (en) * | 2002-09-19 | 2006-08-22 | International Business Machines Corporation | Method and apparatus for implementing thread replacement for optimal performance in a two-tiered multithreading structure |
US20040103414A1 (en) * | 2002-11-27 | 2004-05-27 | Vomlehn David M. | Method and apparatus for interprocess communications |
US7502910B2 (en) * | 2003-01-28 | 2009-03-10 | Sun Microsystems, Inc. | Sideband scout thread processor for reducing latency associated with a main processor |
US20040148489A1 (en) * | 2003-01-28 | 2004-07-29 | Sun Microsystems, Inc. | Sideband VLIW processor |
US20040194109A1 (en) * | 2003-03-25 | 2004-09-30 | Tibor Boros | Multi-threaded time processing unit for telecommunication systems |
US20050050113A1 (en) * | 2003-08-21 | 2005-03-03 | International Business Machines Corporation | System and method for facilitating data flow between synchronous and asynchronous processes |
US7418585B2 (en) * | 2003-08-28 | 2008-08-26 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
US7376954B2 (en) * | 2003-08-28 | 2008-05-20 | Mips Technologies, Inc. | Mechanisms for assuring quality of service for programs executing on a multithreaded processor |
US7849297B2 (en) * | 2003-08-28 | 2010-12-07 | Mips Technologies, Inc. | Software emulation of directed exceptions in a multithreading processor |
US7870553B2 (en) | 2003-08-28 | 2011-01-11 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
CN1842770A (zh) * | 2003-08-28 | 2006-10-04 | 美普思科技有限公司 | 一种在处理器中挂起和释放执行过程中计算线程的整体机制 |
US7836450B2 (en) | 2003-08-28 | 2010-11-16 | Mips Technologies, Inc. | Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts |
US9032404B2 (en) | 2003-08-28 | 2015-05-12 | Mips Technologies, Inc. | Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor |
US7711931B2 (en) * | 2003-08-28 | 2010-05-04 | Mips Technologies, Inc. | Synchronized storage providing multiple synchronization semantics |
US7594089B2 (en) | 2003-08-28 | 2009-09-22 | Mips Technologies, Inc. | Smart memory based synchronization controller for a multi-threaded multiprocessor SoC |
US7496921B2 (en) * | 2003-08-29 | 2009-02-24 | Intel Corporation | Processing block with integrated light weight multi-threading support |
US20050114850A1 (en) * | 2003-10-29 | 2005-05-26 | Saurabh Chheda | Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control |
US7574341B1 (en) * | 2003-11-12 | 2009-08-11 | Hewlett-Packard Development Company, L.P. | Speculative expectation based event verification |
US7996671B2 (en) | 2003-11-17 | 2011-08-09 | Bluerisc Inc. | Security of program executables and microprocessors based on compiler-architecture interaction |
US20050144602A1 (en) * | 2003-12-12 | 2005-06-30 | Tin-Fook Ngai | Methods and apparatus to compile programs to use speculative parallel threads |
US20060212874A1 (en) * | 2003-12-12 | 2006-09-21 | Johnson Erik J | Inserting instructions |
US8607209B2 (en) * | 2004-02-04 | 2013-12-10 | Bluerisc Inc. | Energy-focused compiler-assisted branch prediction |
US20050198627A1 (en) * | 2004-03-08 | 2005-09-08 | Intel Corporation | Loop transformation for speculative parallel threads |
US8074051B2 (en) | 2004-04-07 | 2011-12-06 | Aspen Acquisition Corporation | Multithreaded processor with multiple concurrent pipelines per thread |
US7665070B2 (en) * | 2004-04-23 | 2010-02-16 | International Business Machines Corporation | Method and apparatus for a computing system using meta program representation |
US20060075404A1 (en) * | 2004-10-06 | 2006-04-06 | Daniela Rosu | Method and system for scheduling user-level I/O threads |
US8521570B2 (en) * | 2004-12-28 | 2013-08-27 | Sap Aktiengesellschaft | Integration of distributed business process models |
US7747993B2 (en) * | 2004-12-30 | 2010-06-29 | Michigan Technological University | Methods and systems for ordering instructions using future values |
US7269715B2 (en) * | 2005-02-03 | 2007-09-11 | International Business Machines Corporation | Instruction grouping history on fetch-side dispatch group formation |
US7475223B2 (en) * | 2005-02-03 | 2009-01-06 | International Business Machines Corporation | Fetch-side instruction dispatch group formation |
US20060229638A1 (en) * | 2005-03-29 | 2006-10-12 | Abrams Robert M | Articulating retrieval device |
JP4318664B2 (ja) * | 2005-05-12 | 2009-08-26 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置およびタスク実行方法 |
US7627864B2 (en) * | 2005-06-27 | 2009-12-01 | Intel Corporation | Mechanism to optimize speculative parallel threading |
US7823141B1 (en) * | 2005-09-30 | 2010-10-26 | Oracle America, Inc. | Using a concurrent partial inspector loop with speculative parallelism |
US8205200B2 (en) * | 2005-11-29 | 2012-06-19 | Intel Corporation | Compiler-based scheduling optimization hints for user-level threads |
US8301870B2 (en) * | 2006-07-27 | 2012-10-30 | International Business Machines Corporation | Method and apparatus for fast synchronization and out-of-order execution of instructions in a meta-program based computing system |
US7469406B2 (en) * | 2006-07-31 | 2008-12-23 | Sap Ag | Process suspension through process model design |
US8572633B2 (en) * | 2006-07-31 | 2013-10-29 | Sap Ag | Exception handling for collaborating process models |
US9478062B2 (en) * | 2006-09-19 | 2016-10-25 | Imagination Technologies Limited | Memory allocation in distributed memories for multiprocessing |
US20080126766A1 (en) * | 2006-11-03 | 2008-05-29 | Saurabh Chheda | Securing microprocessors against information leakage and physical tampering |
WO2008115336A1 (en) * | 2007-03-22 | 2008-09-25 | David Van Tassel | Clip alarm |
US9317290B2 (en) | 2007-05-04 | 2016-04-19 | Nvidia Corporation | Expressing parallel execution relationships in a sequential programming language |
US20080320146A1 (en) * | 2007-06-21 | 2008-12-25 | Microsoft Corporation | Establishing interaction between a process and a server process |
US8874457B2 (en) * | 2010-11-17 | 2014-10-28 | International Business Machines Corporation | Concurrent scheduling of plan operations in a virtualized computing environment |
US8904118B2 (en) | 2011-01-07 | 2014-12-02 | International Business Machines Corporation | Mechanisms for efficient intra-die/intra-chip collective messaging |
US20120179896A1 (en) | 2011-01-10 | 2012-07-12 | International Business Machines Corporation | Method and apparatus for a hierarchical synchronization barrier in a multi-node system |
US9195550B2 (en) * | 2011-02-03 | 2015-11-24 | International Business Machines Corporation | Method for guaranteeing program correctness using fine-grained hardware speculative execution |
US10078515B2 (en) * | 2011-10-03 | 2018-09-18 | International Business Machines Corporation | Tracking operand liveness information in a computer system and performing function based on the liveness information |
WO2013113595A1 (en) * | 2012-01-31 | 2013-08-08 | International Business Machines Corporation | Major branch instructions with transactional memory |
US9280398B2 (en) * | 2012-01-31 | 2016-03-08 | International Business Machines Corporation | Major branch instructions |
US9229722B2 (en) * | 2012-01-31 | 2016-01-05 | International Business Machines Corporation | Major branch instructions with transactional memory |
WO2014142704A1 (en) * | 2013-03-15 | 2014-09-18 | Intel Corporation | Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture |
US9471318B2 (en) * | 2013-03-15 | 2016-10-18 | International Business Machines Corporation | System management and instruction counting |
EP3343351B1 (en) * | 2016-12-28 | 2023-04-26 | Waseda University | Parallel program generating method and parallelization compiling apparatus |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6393041A (ja) * | 1986-10-07 | 1988-04-23 | Mitsubishi Electric Corp | 計算機 |
US4937783A (en) * | 1987-08-17 | 1990-06-26 | Advanced Micro Devices, Inc. | Peripheral controller for executing multiple event-count instructions and nonevent-count instructions in a prescribed parallel sequence |
GB8817912D0 (en) * | 1988-07-27 | 1988-09-01 | Int Computers Ltd | Data processing apparatus |
US4974155A (en) * | 1988-08-15 | 1990-11-27 | Evans & Sutherland Computer Corp. | Variable delay branch system |
US5165025A (en) * | 1988-10-06 | 1992-11-17 | Lass Stanley E | Interlacing the paths after a conditional branch like instruction |
EP0394624B1 (en) * | 1989-04-24 | 1997-06-18 | International Business Machines Corporation | Multiple sequence processor system |
US5353418A (en) * | 1989-05-26 | 1994-10-04 | Massachusetts Institute Of Technology | System storing thread descriptor identifying one of plural threads of computation in storage only when all data for operating on thread is ready and independently of resultant imperative processing of thread |
EP0473714A1 (en) * | 1989-05-26 | 1992-03-11 | Massachusetts Institute Of Technology | Parallel multithreaded data processing system |
US5471593A (en) * | 1989-12-11 | 1995-11-28 | Branigin; Michael H. | Computer processor with an efficient means of executing many instructions simultaneously |
US5179702A (en) * | 1989-12-29 | 1993-01-12 | Supercomputer Systems Limited Partnership | System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling |
US5230068A (en) * | 1990-02-26 | 1993-07-20 | Nexgen Microsystems | Cache memory system for dynamically altering single cache memory line as either branch target entry or pre-fetch instruction queue based upon instruction sequence |
US5261063A (en) * | 1990-12-07 | 1993-11-09 | Ibm Corp. | Pipeline apparatus having pipeline mode eecuting instructions from plural programs and parallel mode executing instructions from one of the plural programs |
US5265213A (en) * | 1990-12-10 | 1993-11-23 | Intel Corporation | Pipeline system for executing predicted branch target instruction in a cycle concurrently with the execution of branch instruction |
US5261097A (en) * | 1991-03-11 | 1993-11-09 | Digital Equipment Corporation | Computer system and method for executing command scripts using multiple synchronized threads |
US5287467A (en) * | 1991-04-18 | 1994-02-15 | International Business Machines Corporation | Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit |
US5386560A (en) * | 1991-05-23 | 1995-01-31 | International Business Machines Corporation | Execution of page data transfer by PT processors and issuing of split start and test instructions by CPUs coordinated by queued tokens |
JP2908598B2 (ja) * | 1991-06-06 | 1999-06-21 | 松下電器産業株式会社 | 情報処理装置 |
US5430850A (en) * | 1991-07-22 | 1995-07-04 | Massachusetts Institute Of Technology | Data processing system with synchronization coprocessor for multiple threads |
US5247675A (en) * | 1991-08-09 | 1993-09-21 | International Business Machines Corporation | Preemptive and non-preemptive scheduling and execution of program threads in a multitasking operating system |
JPH05204656A (ja) * | 1991-11-30 | 1993-08-13 | Toshiba Corp | スレッド固有データ保持方法 |
US5353419A (en) * | 1992-01-09 | 1994-10-04 | Trustees Of The University Of Pennsylvania | Memory-side driven anticipatory instruction transfer interface with processor-side instruction selection |
US5404469A (en) * | 1992-02-25 | 1995-04-04 | Industrial Technology Research Institute | Multi-threaded microprocessor architecture utilizing static interleaving |
US5421022A (en) * | 1993-06-17 | 1995-05-30 | Digital Equipment Corporation | Apparatus and method for speculatively executing instructions in a computer system |
-
1995
- 1995-02-03 US US08/383,331 patent/US5812811A/en not_active Expired - Fee Related
- 1995-06-26 EP EP95109931A patent/EP0725334A1/en not_active Withdrawn
-
1996
- 1996-01-25 JP JP08011080A patent/JP3093626B2/ja not_active Expired - Fee Related
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6978460B2 (en) | 2001-03-07 | 2005-12-20 | Renesas Technology Corp. | Processor having priority changing function according to threads |
US7243345B2 (en) | 2001-07-12 | 2007-07-10 | Nec Corporation | Multi-thread executing method and parallel processing system |
US7281250B2 (en) | 2001-07-12 | 2007-10-09 | Nec Corporation | Multi-thread execution method and parallel processor system |
JP2007504535A (ja) * | 2003-08-28 | 2007-03-01 | ミップス テクノロジーズ インコーポレイテッド | マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令 |
JP4818918B2 (ja) * | 2003-08-28 | 2011-11-16 | ミップス テクノロジーズ インコーポレイテッド | マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令 |
KR20170130383A (ko) * | 2015-03-27 | 2017-11-28 | 인텔 코포레이션 | 사용자-레벨 포크 및 조인 프로세서, 방법, 시스템, 및 명령어 |
CN107408036A (zh) * | 2015-03-27 | 2017-11-28 | 英特尔公司 | 用户级分叉与结合处理器、方法、系统和指令 |
CN107408036B (zh) * | 2015-03-27 | 2021-08-31 | 英特尔公司 | 用户级分叉与结合处理器、方法、系统和指令 |
Also Published As
Publication number | Publication date |
---|---|
US5812811A (en) | 1998-09-22 |
JP3093626B2 (ja) | 2000-10-03 |
EP0725334A1 (en) | 1996-08-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3093626B2 (ja) | 中央演算処理装置および命令を実行する方法 | |
JP3048910B2 (ja) | 命令スレッドを処理するための方法 | |
US5778219A (en) | Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations | |
US5692169A (en) | Method and system for deferring exceptions generated during speculative execution | |
EP0738962B1 (en) | Computer processing unit employing aggressive speculative prefetching of instruction and data | |
US5881280A (en) | Method and system for selecting instructions for re-execution for in-line exception recovery in a speculative execution processor | |
US8301870B2 (en) | Method and apparatus for fast synchronization and out-of-order execution of instructions in a meta-program based computing system | |
US8412914B2 (en) | Macroscalar processor architecture | |
EP0855058B1 (en) | Programmable branch prediction system and method for computer systems | |
US5901308A (en) | Software mechanism for reducing exceptions generated by speculatively scheduled instructions | |
US6539541B1 (en) | Method of constructing and unrolling speculatively counted loops | |
US5627981A (en) | Software mechanism for accurately handling exceptions generated by instructions scheduled speculatively due to branch elimination | |
US6463579B1 (en) | System and method for generating recovery code | |
US20050055541A1 (en) | Method and apparatus for efficient utilization for prescient instruction prefetch | |
JP2001282549A (ja) | プログラム変換装置及び方法並びに記録媒体 | |
Fisher et al. | Instruction-level parallel processing | |
US7757224B2 (en) | Software support for dynamically extensible processors | |
US20020035722A1 (en) | Interactive instruction scheduling and block ordering | |
US20070136561A1 (en) | Systems, Methods, And Computer Program Products For Packing Instructions Into Register Files | |
WO2009076324A2 (en) | Strand-based computing hardware and dynamically optimizing strandware for a high performance microprocessor system | |
US20050240897A1 (en) | Method and apparatus for a computing system using meta program representation | |
US20180032333A1 (en) | Atomic Line Multi-Tasking | |
US20030145190A1 (en) | Compiler algorithm to implement speculative stores | |
JP2001243070A (ja) | プロセッサ及び分岐予測方法並びにコンパイル方法 | |
Theobald et al. | A Superstrand Architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20070728 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080728 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |