JPH08249195A - 命令スレッドを処理するための方法およびシステム - Google Patents

命令スレッドを処理するための方法およびシステム

Info

Publication number
JPH08249195A
JPH08249195A JP8011322A JP1132296A JPH08249195A JP H08249195 A JPH08249195 A JP H08249195A JP 8011322 A JP8011322 A JP 8011322A JP 1132296 A JP1132296 A JP 1132296A JP H08249195 A JPH08249195 A JP H08249195A
Authority
JP
Japan
Prior art keywords
instruction
instructions
execution
thread
fork
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP8011322A
Other languages
English (en)
Other versions
JP3048910B2 (ja
Inventor
Pradeep Kumar Dubey
プラデープ・クマル・ダビー
Charles Robert Moore
チャールズ・ロバーツ・モア
Terence Matthew Potter
テレンス・マシュー・ポター
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH08249195A publication Critical patent/JPH08249195A/ja
Application granted granted Critical
Publication of JP3048910B2 publication Critical patent/JP3048910B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Abstract

(57)【要約】 【課題】 命令スレッドを処理するための方法およびシ
ステムを提供する。 【解決手段】 特定の命令を含む第1組の命令の実行が
処理システムによって開始される。特定の命令は第2組
の命令の指示を含む。特定の命令の実行と、処理システ
ムが第1のタイプであることに応答して、処理システム
は、第2組の実行を開始しながら、第1組の実行を続行
する。特定の命令の実行と、処理システムが第2のタイ
プであることに応答して、処理システムは、第2組の実
行を開始せずに、第1組の実行を続行する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、一般的には情報処
理システムに関し、より具体的には命令スレッドを処理
するための方法およびシステムに関する。
【0002】
【従来の技術】市販のマイクロプロセッサは、現在、単
一プロセッサ・アーキテクチャを使用している。このア
ーキテクチャは、共通する1組のアーキテクチャ上可視
のレジスタを共用する1つまたは複数の機能ユニット
(分岐ユニット、ロード/ストア・ユニット、整数演算
ユニット、浮動小数点演算ユニットなど)を含むことが
できる。(レジスタは、そのプロセッサのアセンブリ・
レベルのプログラマか、またはより上位レベルのプログ
ラムをマシンのアセンブリ・レベルに変換するプロセッ
サのコンパイラにとってアクセス可能であれば、アーキ
テクチャ上可視であると見なされる。)
【0003】コンピュータ・システムでは、コンパイラ
またはアセンブリ・プログラマにより生成された命令
は、実行時以前に命令メモリに1つのシーケンスとして
置かれ、そこから取り出して実行することができる。こ
のシーケンスは静的順序と呼ばれている。動的順序は、
コンピュータがこのような命令を実行する順序である。
動的順序は静的順序である場合もあれば、そうではない
場合もある。(以下の説明で使用する「コンパイル時」
という表現は、実行時以前の処理のタイミングを意味す
る。ただし、このような処理はコンパイラによって行わ
れる可能性が非常に高いが、アセンブリ・レベル・プロ
グラミングなどの他の手段が代わりに使用されることも
あることに留意されたい。)
【0004】先行技術のスカラー・コンピュータすなわ
ち非スーパースカラー・コンピュータ、または一度に1
つずつ命令を実行するマシンには、順次追跡順序と呼ば
れる固有の動的実行順序が備わっている。この順次追跡
順序で命令Aを別の命令Bより先行させると、このよう
な命令Aは、命令Bより早期の命令とも呼ばれる。この
ようなコンピュータは、制御命令が検出されるまで、そ
の静的順序で命令を実行する。この検出時点では、元の
順次順序から外れた(不連続)位置から命令を取り出す
ことができる。その後、次の制御命令が検出されるま
で、命令はもう一度、静的順次順序で実行される。制御
命令とは、以降の命令取出しを不連続位置から強制的に
始めさせることにより、順次命令取出しを変更する可能
性のある命令である。制御命令としては、分岐、ジャン
プなどの命令がある。
【0005】先行技術のマシンの中には、プログラムの
依存関係に違反しなければ、順次追跡順序から外れた命
令を実行できるものもある。このようなマシンは、順次
追跡順序の順に命令を取り出すか、または順次追跡順序
で同時に命令グループを取り出す。しかし、このような
マシンは、順次追跡順序から外れた命令を取り出すこと
はしない。たとえば、順次追跡順序で命令Aが命令Bよ
り先行する場合、先行技術のマシンでは、命令Aの次に
命令Bを順に取り出すか、または命令AとBを同時に取
り出すことができるが、命令Aより前に命令Bを取り出
すことはない。このような制約は単一プログラム・カウ
ンタを備えたマシンの特徴である。したがって、このよ
うな制約のあるマシンは、単一スレッドまたはユニスレ
ッド・マシンと言われている。このようなマシンは、順
次追跡順序で先行する命令を取り出す前に順次追跡順序
で後続の命令を取り出すことができない。
【0006】発明者らが把握している現行世代の市販マ
イクロプロセッサは、単一スレッドの制御の流れを備え
ている。このようなプロセッサは、所与のプログラムの
様々な部分の制御とデータからの独立性を活用する能力
が制限されている。重要な制限としては、以下のものが
ある。 ○ 単一スレッドとは、マシンが複数の命令からなる単
一シーケンスの取出しに制限され、プログラム制御の複
数の流れ(スレッド)を同時に追跡できないことを意味
する。 ○ さらに単一スレッド制御とは、データ非依存命令が
まとめて取り出すべきスレッド内で時間的に十分接近し
ていて(たとえば、複数の命令を命令バッファに同時に
取り出す場合)、データ独立性を検出するためにまとめ
て検査される場合のみ、データ独立性を活用できること
を意味する。 ○ 上記の制限は、制御非依存命令とデータ非依存命令
をまとめてグループ化するためにコンパイラを頼りにす
ることを意味する。 ○ 先行技術のマイクロプロセッサの中には、制御流れ
推測という何らかの形態の制御命令(分岐)予測を含む
ものがある。この場合、制御命令の結果が正しく推測さ
れたと期待して、順次追跡順序で制御命令に続く命令を
取り出して実行することができる。制御流れの推測は、
より高度の並列性を活用するために必要な技法としてす
でに認められている。しかし、制御への依存性に関する
知識が欠けているため、単一スレッド動的推測は、制御
流れ推測誤り(不良推測)が発生するまで先読みする能
力しか拡張することができない。不良推測が行われる
と、多くの実行サイクルが浪費される可能性がある。制
御依存性分析のハードウェア・コストを無視しても、単
一スレッド制御流れ推測により制御への依存性を実行時
に学習することはよく見ても適用範囲が制限されること
に留意されたい。ここで使用する適用範囲とは、命令間
の制御およびデータの依存関係を同時に検査することが
できる命令の数を意味する。通常、実行時よりコンパイ
ル時に得られる適用範囲の方がかなり大きくなる可能性
がある。 ○ 制御流れに関するコンパイル時推測は、実行時推測
より適用範囲がかなり大きくなる可能性があるが、制御
依存性分析から利益を得る場合もある。しかし、単一ス
レッドの実行時制限により、コンパイラは、実行時に並
列性が活用可能になるように非推論命令とともに推論命
令をまとめてグループ化する必要がある。
【0007】実行時により多くの並列性を発揮するため
にコンパイル時制御流れ推測を使用することについて
は、上記に述べた。現行マシンのコンパイラは、この推
測をコード化する能力が制限されている。保護と格上げ
のような一般に使用される手法では、単一スレッド実行
の早期に推論実行すべき一部の命令をパーコレーション
するためにコンパイラを頼りにしている。また、このよ
うな手法では、制御流れ推測を推論命令にコード化する
必要もある。この手法には、次のような重要な制限があ
る。 ○ 通常、かなり浅い制御流れ推測をコード化するため
にすべての命令で十分な未使用ビットを見つけることは
非常に難しいことである。逆方向互換性の制約(いかな
る変換も行わずに古い2進コードを実行できる能力)が
あるため、制御流れ推測のコード化を含めるために命令
コード化を任意に再配置(新しいアーキテクチャを意味
する)することができないことに留意されたい。 ○ 前述のパーコレーション技法は、推測誤りを処理す
るために余分なコードまたはコード・コピーあるいはそ
の両方を必要とする場合が多い。その結果、コードが拡
大する。 ○ アーキテクチャ上、推論命令によって発生する例外
の順次処理や、割込みの精密処理が必要になる場合が多
い。しかし、前述のパーコレーション技法は上方推論コ
ード・モーションを使用するので、このような順序外推
論実行のコンテキストでこれらを実施することは非常に
難しい場合が多い。パーコレーションした命令を区別
し、その元の位置を追跡するには、特殊な機構が必要で
ある。ただし、外部命令の観点から見ると、精密割込み
処理の制約下では順次追跡順序から外れた命令実行は推
論的と見なすことができることに留意されたい。しか
し、制約はあるもののより広く使用される意味では、命
令(より正確には、その命令の特定の動的インスタン
ス)が順次追跡順序の一部であると設定する前に命令処
理が開始される場合、またはある命令のオペランドの妥
当性を確立する前にそのオペランドが提供される場合
に、実行が推論的と見なされる。
【0008】制御依存性を知らないと、ネストされたル
ープのパフォーマンスにとって特に高価なものになる場
合がある。たとえば、外側反復がデータ依存の内側ルー
プ反復とは無関係の制御とデータであるようなネストさ
れたループについて検討する。外側ループ反復とは無関
係の制御およびデータの知識が活用されない場合は、内
側ループに関する順次制御流れ推測のため、その取出し
および実行を遅延させなければならない。さらに、この
ように制御依存性の知識が欠けているため、制御および
データ非依存の内側ループ反復の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)をわずかに変更
したバージョンである。]
【0011】前述のように、単一制御流れを備えたマシ
ンは、推論または非推論あるいはその両方のデータ非依
存命令をまとめてグループ化するためにコンパイラに頼
らなければならない。しかし、すべてのデータおよび制
御非依存命令を効率よくまとめてグループ化するには、
コンパイラは、適切なコード化のためにアーキテクチャ
化した十分なレジスタを必要とする。このため、レジス
タ圧力は高まり、追加のスピル・コードのオーバヘッド
のためにこのようなコード・モーションが実を結ばなく
なるような点を上回っている。
【0012】大規模並列アーキテクチャの実現を主な目
的とする、複数スレッドを備えたプロセッサを構築する
ために、研究の試みがいくつか行われてきた。複数スレ
ッドを管理するというオーバヘッドは、実行の並行性が
追加されるというパフォーマンス上の利得を潜在的に上
回る可能性がある。スレッド管理に関連するオーバヘッ
ドとしては、以下のものがある。 ○ 明示または暗黙同期プリミティブによる、データお
よび制御依存性のための部分順序の管理と通信 ○ 別のスレッドが使用するためにあるスレッドが生成
した値の通信 ○ 静的すなわちコンパイル時のスレッド・スケジュー
リングと、動的すなわち実行時のスレッド・スケジュー
リングとの対照に関連するトレードオフ。静的スレッド
・スケジューリングは、実行時のハードウェアを簡略化
するが、フレキシビリティが低く、実現したマシンのス
レッド資源をコンパイラに公表してしまうため、各種の
実施態様に対応する再コンパイルを必要とする。これに
対して、動的スレッド・スケジューリングは様々な実施
態様に適応可能で、いずれも同じ実行可能命令を共用す
るが、追加の実行時ハードウェア・サポートを必要とす
る。
【0013】さらに詳述する前に、以下の一連の作業用
定義は非常に有用である。 ○ スレッド:単一命令順序付け制御(単一プログラム
・カウンタを意味するが、必ずしもそれを必要としな
い)と共用される1組のアーキテクチャ上可視のマシン
状態とを使用して実行可能な命令のシーケンス。 ○ 順次追跡順序:プログラム命令の実行シーケンスの
動的順序であって、一度に1つずつ命令を実行する単一
制御スレッド非推論マシン上でそのプログラムを完全実
行した結果得られるもの。 ○ メイン・スレッドと将来スレッド:所与の時点での
1組のスレッドのうち、順次追跡順序で最も早い命令を
実行するスレッドをメイン・スレッドという。残りのス
レッドは将来スレッドという。
【0014】
【発明が解決しようとする課題】命令スレッドを処理す
るための方法およびシステムにおいて、特定の命令を含
む第1組の命令の実行が処理システムによって開始され
る。特定の命令は第2組の命令の指示を含む。特定の命
令の実行と、第1のタイプである処理システムとに応答
して、処理システムは、第2組の実行を開始しながら第
1組の実行を続行する。特定の命令の実行と、第2のタ
イプである処理システムとに応答して、処理システム
は、第2組の実行を開始せずに第1組の実行を続行す
る。
【0015】
【課題を解決するための手段】本発明の技術的利点の1
つは、既存の命令セット・アーキテクチャ(「IS
A」)の基本概念によって整合性が達成される点であ
る。
【0016】本発明のもう1つの技術的利点は、ISA
間で順方向および逆方向互換性が達成される点である。
【0017】本発明の実施例およびその利点は、以下の
説明と添付図面を参照することによりさらによく理解さ
れる。
【0018】
【発明の実施の形態】本発明の実施例およびその利点
は、添付図面の図1ないし図24を参照することにより
さらによく理解される。添付図面の同様の部分および対
応部分には、同様の英数字が使用されている。
【0019】本発明の一目的は、様々な命令スレッドを
同時に取り出して実行するための改良された方法および
装置である。
【0020】本発明の一目的は、1つまたは複数の制御
およびデータ依存関係を備えた様々な命令スレッドを同
時に取り出して実行するための改良された方法および装
置である。
【0021】本発明の一目的は、1つまたは複数の制御
およびデータ依存関係を備えた様々な命令スレッドを同
時に取り出して推論実行するための改良された方法およ
び装置である。
【0022】本発明の一目的は、コンピュータ・アーキ
テクチャの様々な実施態様上で1つまたは複数の制御お
よびデータ依存関係を備えた様々な命令スレッドを同時
に取り出して推論実行するための改良された方法および
装置である。
【0023】本発明は、複数の命令スレッドの推論並列
実行を可能にする、コンピュータ内の中央演算処理装置
(CPU)の改良策である。本発明では、CPUの命令
セットに追加され、並列実行のために潜在的将来スレッ
ドを示すために実行時以前にプログラムに挿入される、
新規のフォーク−中断命令を開示する。これは、コンパ
イラによって実行されることが好ましい。
【0024】CPUは、1つまたは複数の命令キャッシ
ュ・ポートを備えた命令キャッシュと、その命令キャッ
シュ内の命令を独立してアドレス指定できる1つまたは
複数のプログラム・カウンタからなるバンクとを有す
る。プログラム・カウンタが1つの命令をアドレス指定
すると、アドレス指定された命令は、命令キャッシュ・
ポートにポートされる。さらにCPUは、1つまたは複
数のディスパッチャも有する。ディスパッチャは、命令
キャッシュ・ポートにポートされた命令をそのディスパ
ッチャに関連する命令バッファで受け取る。また、ディ
スパッチャは、そのバッファ内の命令間の依存関係も分
析する。CPU内のスレッド管理ユニットは、すべての
スレッド間通信を管理し、プログラム依存関係に違反す
る将来スレッドを破棄する。CPUスケジューラは、C
PU内のすべてのディスパッチャから命令を受け取り、
CPU内の1つまたは複数の機能ユニットでの命令の並
列実行をスケジューリングする。通常、メイン・プログ
ラム・スレッド内の命令の実行は1つのプログラム・カ
ウンタが追跡し、将来スレッドの並列実行は残りのプロ
グラム・カウンタが追跡することになる。命令のポーテ
ィングとその機能ユニット上での実行は、推論方式で実
行することができる。
【0025】本発明は、複数のプログラム位置からの命
令を同時に取り出して、推論し、実行し、その結果、複
数の制御スレッドを追跡するように従来の単一スレッド
推論スーパースカラーCPUを強化するために、フォー
ク−中断命令を提案している。
【0026】図1は、本発明で提案した方法を実行する
と思われる典型的なプロセッサ編成のハードウェアのブ
ロック図である。実行方法については、後述する。図1
の詳細説明は以下の通りである。
【0027】ブロック100は、プロセッサ上で実行す
るためのプログラム・データおよび命令を保持する、プ
ロセッサの中央演算処理装置(CPU)のメモリ・ユニ
ットである。このメモリ・ユニットは、このメモリ・ユ
ニットの頻繁に使用する命令およびデータ部分が通常、
命令キャッシュ・ユニット(ブロック110)とデータ
・キャッシュ・ユニット(ブロック170)にそれぞれ
保管されるように、キャッシュ・ユニットとのインタフ
ェースが取られている。あるいは、命令キャッシュとデ
ータ・キャッシュは、単一一体化ユニットに統合するこ
とができる。キャッシュ・ユニットのアクセス時間は、
通常、メモリ・ユニットのアクセス時間よりかなり短
い。上記のようなメモリ・ユニットとキャッシュ・ユニ
ットは当技術分野では周知のものである。たとえば、メ
イン・メモリとそのポートをキャッシュ・メモリとその
ポートに使用することにより、キャッシュ・ユニットを
置き換えることができる。また、キャッシュは、周知の
ように、複数のキャッシュまたは1つまたは複数のレベ
ルを備えたキャッシュで構成することもできる。
【0028】ブロック110は、プロセッサ上で実行す
るためのプログラム命令を保持する、プロセッサ(CP
U)の命令キャッシュ・ユニットである。これは、FOR
K、SKIP、SUSPEND、UNCOND_SUSPEND(ブロック112)
など、本発明で提案した新しい命令を含む。上記および
その他の新しい命令の意味の詳細については、後述す
る。
【0029】命令キャッシュの複数ポートP1、P2、
・・・、PN(ブロック115−1、115−2、・・
・、115−N)を含むブロック115は、現行技術で
は新規のものである。この複数ポートにより、並列実行
される命令スレッドへの命令の同時ポーティングが可能
になる。あるいは、単一幅広ポートを使用して所与のス
レッドに複数の命令をポートし、そのスレッドがポート
された命令を実行していて使用中の間に、同じポートを
使用して、複数の命令を別のスレッドにポートすること
も可能である。
【0030】ブロック120は、プログラム・カウンタ
PC1、PC2、・・・、PCN(ブロック120−
1、120−2、・・・、120−N)からなるバンク
である。これらのカウンタは、当技術分野で周知であれ
ば、どのカウンタであってもよい。それぞれのプログラ
ム・カウンタは所与のスレッドの実行を追跡する。現在
までに設計されたすべての商用CPUは、所与のプログ
ラムについて、単一命令スレッドの実行だけを制御する
必要がある。このため、現行技術および従来技術は単一
プログラム・カウンタに制限されており、したがって、
複数プログラム・カウンタからなるバンクは本発明の新
規の態様である。それぞれのプログラム・カウンタは、
命令キャッシュ内の1つまたは複数の連続命令をアドレ
ス指定することができる。図1および図2のブロック図
に示す好ましい実施例では、それぞれのプログラム・カ
ウンタが1つの命令キャッシュ・ポートに関連づけられ
ている。あるいは、各種のプログラム・カウンタが1つ
の命令キャッシュ・ポートを共用することもできる。
【0031】さらに、好ましい実施例では、特定のプロ
グラム・カウンタがメイン・スレッドに関連づけられ、
残りのプログラム・カウンタが将来スレッドの実行を追
跡する。図1のPC1(ブロック120−1)は、メイ
ン・スレッド・プログラム・カウンタである。残りのプ
ログラム・カウンタは、将来スレッド・プログラム・カ
ウンタ(ブロック120−2、・・・、120−N)と
呼ぶ。
【0032】ブロック130は新規のスレッド管理(T
M)ユニットを示しているが、これは、新しいスレッド
をフォークすることができる新しい命令の実行と、組合
せプロセス(後述する)によるスレッド間通信の処理と
を担当する。
【0033】また、このユニットは、1つまたは複数の
将来スレッドの命令の一部または全部を破棄することも
できる。さらにこのユニットは、1つまたは複数の推測
の結果として、いずれかの将来スレッドが実行した1つ
または複数の命令をプログラム依存関係の違反のために
破棄する必要があるかどうかを判定することもできる。
実行時に推測が行われる場合は、推測ユニットによって
TMユニットにそれが連絡される。たとえば、ディスパ
ッチャ・ブロック(後述するブロック140)内の分岐
命令結果の推測は、TMユニットに連絡する必要があ
る。コンパイル時に推測が行われ、命令としてコード化
される場合は、このような命令をデコードするブロック
140のディスパッチャによってそれがTMユニットに
連絡される。その結果、推論方式で複数スレッドを実行
できるようになることは、本発明の固有の特徴である。
【0034】また、メイン・スレッドと将来スレッドの
並列取出しおよび実行とは、提案したマシンがその順次
追跡順序から外れる命令を取り出して実行できることを
意味することにも留意されたい。このマシンのこのよう
な固有の特徴により、単一プログラム・カウンタのため
にその順次追跡順序から外れる命令を取り出すことがで
きない先行技術のマシンとは区別される。
【0035】ブロック140は、ディスパッチャ−1、
ディスパッチャ−2、・・・、ディスパッチャ−N(ブ
ロック140−1、140−2、・・・、140−N)
という複数のディスパッチャからなるバンクを示し、そ
れぞれのディスパッチャは1つの特定のプログラム・カ
ウンタに関連づけられ、その結果、そのディスパッチャ
に関連する命令バッファ(ブロック141−1、141
−2、・・・、141−N)で命令キャッシュ・ポート
の1つから命令を受け取ることができる。また、ディス
パッチャは、そのバッファ内の命令間の依存関係をデコ
ードして分析することもできる。さらにディスパッチャ
は、後述するSKIP、FSKIP、またはSKPMGの各命令の意味
の実現も担当する。
【0036】ディスパッチャが検出する命令は、スレッ
ドをフォークまたは中断することができるが、スレッド
管理ユニット(ブロック130)に転送される。このT
Mユニットは、対応するプログラム・カウンタに適切な
開始命令をロードすることにより、将来スレッドの活動
化を担当する。また、TMユニットは、UNCOND_SUSPEND
命令を検出したときに将来スレッド・ディスパッチャを
中断する。
【0037】順序外実行のための実行時依存性分析の実
施技法は、当技術分野では周知である。メイン・プログ
ラム・カウンタに関連し、そのため、メイン・スレッド
に関連するディスパッチャは、メイン・スレッド・ディ
スパッチャと呼ばれる。図1のディスパッチャ−1(ブ
ロック140−1)はメイン・スレッド・ディスパッチ
ャである。残りのディスパッチャ(ブロック140−
2、・・・、140−N)は将来プログラム・カウンタ
および将来スレッドに関連し、将来スレッド・ディスパ
ッチャと呼ばれる。
【0038】本発明で提案するディスパッチャのバンク
の新規の態様は、1つのディスパッチャのバッファ内の
命令の実行時依存性分析を他のディスパッチャのものと
は無関係に(したがって並列に)実行できる点である。
これは、指定の条件下で命令スレッドの非依存性を保証
することができるコンパイル時依存性分析によって可能
になる。したがって、一方で、実行時依存性分析はコン
パイル時分析の方が潜在的に適用範囲がかなり広いこと
による恩恵を受けることになる(適用範囲が広いという
ことは、相互依存性について多数の命令を同時に検査で
きる能力を意味する)。もう一方で、コンパイル時分析
はフォーク−中断機構による恩恵を受けるが、この機構
により実行時結果に関する推測によって独立スレッドを
明示的に識別することができる。実行時またはコンパイ
ル時の依存性分析技法は当技術分野では周知であるが、
実行時依存性分析ハードウェアにコンパイル時依存性分
析を明示推論方式で連絡することは、本発明の新規な点
である。
【0039】ブロック150は、ディスパッチャのバン
ク(ブロック140)内のすべてのディスパッチャから
命令を受け取って、機能ユニット(ブロック180)の
1つで実行するためにそれぞれの命令をスケジューリン
グする、スケジューラである。1つまたは複数のディス
パッチャから同一サイクル中に受け取ったすべての命令
は、互いに独立していると想定する。このようなスケジ
ューラも、スーパースカラー・マシンの先行技術では周
知である。代替実施例では、このスケジューラを1組の
スケジューラに分割し、それぞれが機能ユニット(ブロ
ック180)の規定のサブセットを制御するようにする
こともできる。
【0040】ブロック160は、1組のレジスタ・セッ
トを含むレジスタ・ファイルである。このセットは、ア
ーキテクチャ上可視のレジスタ・セットと、アーキテク
チャ上不可視のレジスタとにさらに分割される。アーキ
テクチャ上可視すなわちアーキテクチャ化したレジスタ
とは、マシンのアセンブリ・レベルのプログラマ(また
はコンパイラ)にとってアクセス可能なレジスタの固定
セットを意味する。レジスタ・ファイルのアーキテクチ
ャ上可視のサブセットは、通常、すべてのスレッド(メ
イン・スレッドと将来スレッド)に共通するはずであ
る。アーキテクチャ上不可視のレジスタはCPUの様々
な物理レジスタを含み、そのサブセットはアーキテクチ
ャ化したレジスタにマッピングされる。すなわち、アー
キテクチャ化したレジスタに関連する値を含む。レジス
タ・ファイルは、多くの命令を実行するための機能ユニ
ットにオペランドを提供し、実行の結果も受け取る。こ
のようなレジスタ・ファイルは先行技術では周知であ
る。
【0041】組合せプロセス(後述する)の実施態様の
一部として、TMユニット(ブロック130)はレジス
タ・ファイルとやりとりし、組合せ後にすべてのアーキ
テクチャ化したレジスタが適切な非アーキテクチャ化物
理レジスタに関連づけられるようにする。
【0042】ブロック170は、命令によってソース・
オペランドとして使用されるデータ値の一部と、実行さ
れた命令によって生成されるデータ値の一部とを保持す
る、プロセッサのデータ・キャッシュ・ユニットであ
る。複数の機能ユニットが複数のメモリ常駐データ値を
同時に要求し、複数のメモリ束縛結果を同時に生成する
可能性があるので、データ・キャッシュは通常、マルチ
ポート化されているはずである。マルチポート化データ
・キャッシュは先行技術では周知である。
【0043】ブロック180は、複数の機能ユニット
(機能ユニット−1、機能ユニット−2、機能ユニット
−K)からなるバンクであり、それぞれのユニットは一
部またはすべてのタイプの命令を実行することができ
る。機能ユニットは、レジスタ・ファイル(ブロック1
60)またはデータ・キャッシュ(ブロック170)か
ら入力ソース・オペランドを受け取り、そこに出力結果
を書き込む。図1および図2に示す好ましい実施例で
は、すべての機能ユニットが同一であり、そのため、ど
のような命令も実行することができる。あるいは、バン
ク内の複数の機能ユニットを非対称にして、特定のユニ
ットが所与のサブセットの命令だけを実行できるように
することもできる。スケジューラ(ブロック150)
は、この非対称を認識し、適切に命令をスケジューリン
グする必要がある。このようなトレードオフも先行技術
では一般的である。
【0044】ブロック190は、アーキテクチャによっ
て有効な順序と見なされる順序での命令実行の完了を担
当する命令完了ユニットである。CPUが順序外の命令
を実行できるとしても、それを同一順序で完了できるか
どうかは、アーキテクチャ上の制約による。将来スレッ
ド・ディスパッチャによる実行のためにスケジューリン
グされた命令は、推論スレッドの場合にTMユニット
(ブロック130)が将来スレッドの妥当性を確認した
あとでのみ、完了ユニットによる完了の対象となる。
【0045】本発明では、コンパイル時に命令シーケン
スに挿入可能な新しい命令をいくつか提案する。このよ
うな命令の意味の詳細は以下の通りである。
【0046】1.FORK この命令は、1つまたは複数の命令スレッドの開始アド
レス(複数も可)を識別する。識別されたそれぞれの命
令スレッドは将来スレッドと呼ばれる。このような将来
スレッドは、FORKのあとに順に続く一連の命令シーケン
スを引き続き実行するフォーキング・スレッドと同時に
実行することができる。将来スレッド用の開始CPU状
態は、FORK命令を検出した時点のCPU状態のコピーで
ある。
【0047】2.UNCOND_SUSPEND この命令を検出すると、将来スレッドは、無条件にその
スレッドを中断し、フォーキング・スレッドとの組合せ
を待たなければならない。これは、たとえば、無条件中
断命令後の命令が別のスレッド上の何らかの命令との重
要なデータ依存性を有する場合に必要になる可能性があ
る。提案したこの命令は他のいかなる属性も必要としな
いので、SUSPEND命令(後述する)とも組み合わせるこ
とが可能である。すなわち、SUSPEND命令のコード化の
1つは単に無条件中断を指定することができるだけにな
る。
【0048】3.SUSPEND この命令を検出すると、将来スレッドは、引き続きその
命令取出しと実行を続行することができるが、第1のSU
SPEND命令に関連するコンパイル時指定条件が実行時に
偽と評価された場合は、そのプログラムの順次追跡順序
での第1のSUSPEND命令と第2のSUSPEND命令またはUNCO
ND_SUSPEND命令との間の一連の命令シーケンスの結果が
破棄される。
【0049】以下の命令を簡略化するため、SUSPEND命
令の依存領域という用語は、SUSPEND命令後の最初の命
令から始まり、他のSUSPEND命令を検出した時点またはU
NCOND_SUSPEND命令を検出時点に終了する、順次追跡順
序での一連の命令シーケンスであると定義する。
【0050】4.SKIP この命令を検出すると、将来スレッドは、次のコンパイ
ル時指定数の命令(通常はスピル・ロード)をデコード
し、対応するソース・レジスタと宛先レジスタに有効の
マークを付けることによってこれらの命令の実行を引き
受けることができるが、このスレッドはその命令に関連
する動作を実際に実行する必要はない。メイン・スレッ
ドはこの命令をNOPとして取り扱う。
【0051】5.FORK_SUSPEND この命令の命令コードは、将来スレッドの先頭を識別す
るアドレスと、一連の数値(N1、N2、・・・、N
n)とに関連づけられ、それぞれの数値には条件が付い
ている場合もあれば付いていない場合もある。所与の一
連のn個の数値は、FORK命令に関連するアドレスから始
まる命令のn個の連続グループを意味する。関連条件が
一切付いていない数値は、対応するグループの命令を将
来スレッドとして無条件に実行できることを意味する。
関連条件が付いている数値は、コンパイル時指定条件が
実行時に真と評価された場合のみ、対応するグループの
命令の将来スレッドによる実行が有効になるはずである
ことを意味する。
【0052】6.FORK_S_SUSPEND この命令の命令コードは、将来スレッドの先頭を識別す
るアドレスと、数値sと、一連の数値(N1、N2、・
・・、Nn)とに関連づけられ、それぞれの数値には条
件が付いている場合もあれば付いていない場合もある。
所与の一連のn個の数値は、FORK命令に関連するアドレ
スから始まる命令のn個の連続グループを意味する。関
連条件が一切付いていない数値は、対応するグループの
命令を将来スレッドとして無条件に実行できることを意
味する。関連条件が付いている数値は、コンパイル時指
定条件が実行時に真と評価された場合のみ、対応するグ
ループの命令の将来スレッドによる実行が有効になるは
ずであることを意味する。関連数値sは、スレッドの先
頭にあって、対応するソース・レジスタと宛先レジスタ
に有効のマークを付けるためにデコード可能なs個の命
令を意味するが、このスレッドはその命令に関連する動
作を実際に実行する必要はない。
【0053】7.FORK_M_SUSPEND この命令の命令コードは、将来スレッドの先頭を識別す
るアドレスと、1組のマスク(M1、M2、・・・、M
n)とに関連づけられ、それぞれのマスクには条件が付
いている場合もあれば付いていない場合もある。関連条
件が一切付いていないマスクは、将来スレッドの実行用
の有効なソース・オペランドを無条件に保持する、1組
のアーキテクチャ化レジスタを表している。関連条件が
付いているマスクは、コンパイル時指定条件が実行時に
真と評価された場合のみ、将来スレッドの実行用の有効
なソース・オペランドを保持すると想定することができ
る、1組のアーキテクチャ化レジスタを意味する。
【0054】8.FSKIP この命令の命令コードは、1つのマスクと、数値sとに
関連づけられている。この命令を検出すると、将来スレ
ッドは、次のs個の命令の取出し、デコード、実行をス
キップすることができる。さらに将来スレッドは、1組
の定義済みレジスタ・セットに有効なオペランドを保持
しているというマークを付けるためにこのマスクを使用
する。メイン・スレッドはこの命令をNOPとして取り
扱う。
【0055】9.SKPMG この命令を検出すると、将来スレッドは、次のコンパイ
ル時指定数の命令(通常はスピル・ロード)をデコード
し、対応するソース・レジスタと宛先レジスタに有効の
マークを付けることができるが、このスレッドはその命
令に関連する動作を実際に実行する必要はない。この命
令がメイン・スレッドによって検出された場合は、将来
スレッドが個のSKPMG命令のアドレスの先頭に事前にフ
ォークされているかどうかを判定するために検査が行わ
れる。フォークされている場合は、メイン・スレッドと
対応する将来スレッドという2つのスレッドのマシン状
態を適切に組み合わせることにより、メイン・スレッド
が対応する将来スレッドと組み合わされ、メイン・スレ
ッドは、将来スレッドが中断された命令に続く命令から
実行を再開する。このアドレスへの事前フォークが一切
ない場合は、メイン・スレッドは、この命令に続く一連
の命令シーケンスを引き続き実行する。このような命令
の重要性については後述する。
【0056】新しい命令の形式の詳細説明:新しい命令
の形式を示す図5ないし図13の詳細説明は以下の通り
である。
【0057】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)とを含む。
【0058】2.UNCOND_SUSPEND 図6のUNCOND_SUSPEND命令(ブロック20)は、1つの
命令コード・フィールドを含む。
【0059】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)としてコー
ド化するために条件フィールドを使用することができ
る。この特定の条件フィールド・コード化の意味につい
ては、以下に詳述する。
【0060】モード・フィールドは、2通りの方法のう
ちの1つで条件フィールド内の1組の条件を解釈するた
めに使用する。モード・フィールドが有効(V)に設定
されている場合は、スレッド管理ユニットは、SUSPEND
命令に関連する<cond_1>〜<cond_n>のうち、コンパイル
時指定条件のいずれか1つが実行時に偽と評価された場
合に、SUSPEND命令に関連する依存領域内の1組の命令
の結果を破棄する。モード・フィールドが無効(I)に
設定されている場合は、スレッド管理ユニットは、SUSP
END命令に関連する<cond_1>〜<cond_n>というコンパイ
ル時指定条件のすべてが実行時に真と評価された場合
に、SUSPEND命令に関連する依存領域内の1組の命令の
結果を破棄する。直観的に言えば、コンパイラは、フォ
ーク点から組合せ点までの優良経路をコード化するため
に有効モード設定を使用し、フォーク点から組合せ点ま
での不良経路をコード化するために無効モード設定を使
用するはずである。
【0061】一連の条件のうちの第1の条件cond_1は、
SUSPEND命令を含む将来スレッドをフォークしたあとで
実行時にフォーキング・スレッドによって検出された第
1の固有の条件付き分岐に関連づけられ、一連の条件の
うちの第2の条件cond_2は、SUSPEND命令を含む将来ス
レッドをフォークしたあとで実行時にフォーキング・ス
レッドによって検出された第2の固有の条件ブランチに
関連づけられ、以下同様になる。異なる命令位置に常駐
する分岐だけが固有と見なされる。さらに、好ましい実
施例では特定の分岐結果のコンパイル時推測をコード化
する条件は、実行(T)、非実行(N)、無指定(X)
のいずれかにすることができる。あるいは、これらの条
件に関連する推測は、実行(T)または非実行(N)の
いずれかになるように制限することができる。
【0062】条件コード化形式をさらに明確にするた
め、以下のコード化例を検討する。
【0063】○ SUSPEND V, T X N このコード化は、推測が該当する場合のみ、この条件付
き中断命令のあとに続く命令が有効であることを意味す
る。すなわち、SUSPEND命令に関連する<cond_1>〜<cond
_n>というコンパイル時指定条件のすべてが実行時に真
と評価された場合に、SUSPEND命令に関連する依存領域
内の1組の命令の結果である。第1の制御流れ条件で
は、SUSPEND命令を含むスレッドをフォークしたあとで
実行時にフォーキング・スレッドによって検出された第
1の固有の条件付き分岐が実行されると想定する。第2
のこのような分岐は、どちらに進んでもよい(すなわ
ち、制御非依存分岐)とコンパイラによって認められ、
第3のこのような分岐は、非実行であるとコンパイラに
よって想定されている。
【0064】○ 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のこの
ような分岐は、実行であると想定されている。
【0065】ただし、フォーク後で組合せ前の領域内の
フォーキング・スレッド・コードがループなしになるよ
うに制限されている場合は、フォーク後にフォーキング
・スレッド内で検出される分岐の動的シーケンスがすべ
て固有のものになるはずであることに留意されたい。す
なわち、このような状況では、第1の固有の条件付き分
岐は単に第1の動的検出条件付き分岐になり、第2の固
有の条件付き分岐は単に第2の動的検出条件付き分岐に
なり、以下同様になるはずである。
【0066】上記の条件形式は、FORK_SUSPEND、FORK_S
_SUSPEND、FORK_M_SUSPENDの各命令の場合にコンパイル
時推測条件を指定する際にも使用する。好ましい実施例
では、FORK_SUSPEND、FORK_S_SUSPEND、FORK_M_SUSPEND
の各命令で使用する条件フィールド・コード化におい
て、SUSPEND命令に関連する<cond_1>〜<cond_n>のう
ち、コンパイル時指定条件のいずれか1つが実行時に偽
と評価された場合に、スレッド管理ユニットがSUSPEND
命令に関連する依存領域内の1組の命令の結果を破棄す
ることを意味する、有効モード・フィールド設定を想定
している。
【0067】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命令のコンテキストで前述したものと同じであ
る。
【0068】5.SKIP <n> 図9のSKIP命令(ブロック50)は、命令コード(ブロ
ック51)と、SKIP命令のコンテキストで前述したよう
に、この命令以降で実行をスキップすることができる命
令の数を指定するカウント・フィールド(ブロック5
2)とを含む。
【0069】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命令のコンテキストで前述したものと同
じである。
【0070】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命令のコンテキストで
前述したものと同じである。
【0071】8.FSKIP <mask> <n> 図12のFSKIP命令(ブロック80)は、命令コード・
フィールド(ブロック81)と、1組のレジスタを定義
するマスク・フィールド(ブロック82)と、FSKIP命
令のコンテキストで前述したように、完全にスキップす
ることができる命令の数を指定するカウント・フィール
ド(ブロック83)とを含む。
【0072】9.SKPMG <n> 図13のSKPMG命令(ブロック90)は、命令コード・
フィールド(ブロック91)と、SKPMG命令のコンテキ
ストで前述したように、この命令以降で実行をスキップ
することができる命令の数を指定するカウント・フィー
ルド(ブロック92)とを含む。
【0073】組合せアクション:フォーク済みスレッド
とフォーキング・スレッドとの組合せ:対応するフォー
キング・スレッド(たとえば、メイン・スレッド)がフ
ォーク済み(将来)スレッドの先頭に達すると、フォー
ク済み将来スレッドがフォーキング・スレッドと組み合
わされる。この組合せは、フォーク済みスレッドによっ
て定義されたCPU状態が置き換えられ、残りの状態が
フォーキング・スレッドから保持されるように、2つの
スレッドのCPU状態を組み合わせることによって実施
される。通常、あるスレッドのCPU状態は、そのスレ
ッドによって使用され定義されるアーキテクチャ上可視
のレジスタを含むはずである。フォーキング・スレッド
・プログラム・カウンタは、組み合わされたフォーク済
みスレッドによって正しく実行された命令が再実行され
ず、組み合わされたフォーク済みスレッドによって実行
されていない命令が適切に実行されるように実行を続行
するために更新される。この場合、正しく実行された命
令とは、重要なプログラム依存関係に違反しないような
命令を意味する。フォーキング・スレッドは、組み合わ
されたスレッドの最新実行点を過ぎても実行を続行し、
組み合わされた将来スレッドによって正しく実行された
命令は、組合せプロセスの終わりに完了の対象となる。
組み合わされた将来スレッドに関連する資源は、組合せ
プロセスの終わりに解放される。ただし、組合せの時点
では、フォーク済み将来スレッドがすでに中断されてい
るか、まだ活発に実行中であるかのいずれかであること
に留意されたい。いずれも場合も、組合せプロセスが終
わると、組み合わされた将来スレッドが効果的に存在を
停止する。また、UNCOND_SUSPENDなどの明示的な中断プ
リミティブがない場合は、組合せが行われるまでフォー
ク済み将来スレッドがいつも実行を続けるはずであるこ
とにも留意されたい。
【0074】フォークの任意選択性:本発明で提案した
命令の新規の特徴は、コンパイル時にそれを使用する場
合、実行時CPU資源に関するいかなる想定も必要とし
ない点である。実際の実施態様の積極性に応じて、特定
のCPUが将来スレッドを実際にフォークできる場合も
あれば、できない場合もある。すなわち、CPUの観点
から見ると、FORK命令の検出に応答して実行時に実際に
フォークするかどうかは、完全に任意選択である。この
ような命令のユーザ(たとえば、コンパイラ)は、保留
の将来スレッドの数を追跡する必要がなく、また、実行
時に確かに従う(すなわち、将来スレッドをフォークす
る)べき特定のフォークを想定することもできない。
【0075】コンパイラは、個別の(将来)スレッドと
して実行可能な制御およびデータ非依存コード領域を識
別する。ただし、コンパイラは、このようなスレッドが
並列実行されることを想定するような追加の再構造化ま
たは最適化を一切実行しない。たとえば、コンパイラ
は、挿入されたFORK命令のいずれかが実行時にCPUに
よって無視されると、正しいプログラム実行の保証が必
要になるはずのスピル・コードを保持する。スピル・コ
ードとは、アーキテクチャ上可視のCPUレジスタの内
容を命令キャッシュ内の所与の位置に格納し、その後、
別の介入格納を行わずに同じ位置の内容を再ロードする
ためにコンパイル時に挿入される1組の命令を意味す
る。ただし、スピル・コードの実行は、将来スレッドと
してそれを実行している間は冗長になる可能性があるこ
とに留意されたい。将来スレッド実行中のこのようなス
ピル・コードの処理を最適化するため、本発明はSKIP命
令とFSKIPおよびSKPMGなどのその変形態様を追加してい
る。これらは、冗長なスピル・コードの実行を低減また
は解消するためのコンパイル時のヒントを可能にするも
のである。この新しい命令の意味の詳細は、前述の通り
である。
【0076】FORK命令の任意選択性の直接的な結果とし
て、それぞれが0個またはそれ以上のスレッドをフォー
クできる、この強化型マシン・アーキテクチャの各種実
施態様に応じて再コンパイルする必要がないことに留意
されたい。同様に、新しい命令のいずれも含まない古い
2進コードについても、再コンパイルの必要はない。
【0077】将来スレッドでの複数条件付き中断の解
釈: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命令との間にすべての命
令の結果を破棄できるだけである。
【0078】組合せ点の識別の簡略化:コンパイル時に
は、将来スレッド内のすべてのスピル・ロードをグルー
プ化し、そのグループを将来スレッドの実行が始まるブ
ロックの先頭に移動させることが可能な場合もある。す
べての潜在的将来スレッドの最初の実行が新しいSKPMG
命令になるようにさらにコンパイラが保証する場合、こ
の命令は、スキップ可能なスピル・ロードの標識ならび
に将来スレッドの開始用のマーカの両方の役割を果た
す。この命令の意味については、前述の通りである。た
だし、(SKPMGの形での)このような将来スレッド・マ
ーカがない場合、メイン・スレッドは、絶えずその命令
アドレスをすべての事前フォーク済み将来スレッドと照
らし合わせて検査し、組合せが必要かどうかを検出する
必要がある場合もあることに留意されたい。また、スキ
ップされる命令の数がゼロであっても、この解釈では将
来スレッド・マーカの追加機能を果たすので、コンパイ
ラはこのSKPMG命令を挿入しなければならない。
【0079】図3および図4は、1次実行方法(PE
M)と呼ばれる本発明の実行方法の諸ステップを示す流
れ図である。本発明の方法の説明とともに、図3および
図4の詳細説明を以下に示す。
【0080】1.フォーク点の検出(ブロック21
0):本発明で提案した新しい命令とは無関係に、当技
術分野で既知の技法を使用して静的順序の命令シーケン
スを生成する。この命令シーケンスを分析して、1組の
フォーク点を判定する。フォーク点とは、静的命令シー
ケンス中の位置であって、使用可能なマシン状態が順次
追跡順序で後から(ただし、フォーク点の直後ではな
い)現れる1組または複数組の命令の並列実行を開始で
きる位置を意味する。フォーク点の識別には、先行技術
で既知の技法を使用して対応するプログラム依存性グラ
フ(制御依存性グラフとデータ依存性グラフの組合せ)
の一部または全部に基づいて行う、データおよび制御依
存性分析が含まれる。たとえば、分岐命令を解決する
と、実質的に分岐命令に制御依存している命令のスレッ
ド用のフォーク点に到達することができる。
【0081】2.FORKの挿入(ブロック220):コン
パイル時に潜在的フォーク点のうちの0個またはそれ以
上に0個またはそれ以上のFORK命令を挿入する。この位
置では、FORK命令は、フォーク点に関連する0個または
それ以上の潜在的将来スレッドの開始アドレスを識別す
ることができる。特定のFORK命令とそのフォーク済み将
来スレッド(複数も可)との関連づけがある場合は、そ
の関連づけが前述のTMユニットによって管理される。
【0082】3.静的シーケンスのロード(ブロック2
30):固定位置から始まるメモリ・システム(図1の
ブロック100)に前のステップ(FORKの挿入、ブロッ
ク220)後に生成した静的順序の命令シーケンスをロ
ードする。この固定位置では、メモリ・システムと中央
演算処理装置の命令キャッシュとのインタフェースが取
られ、静的シーケンスの続きが定期的に命令キャッシュ
に転送される。
【0083】4.取出しと組合せ検査(ブロック24
0):現行アドレス以降について、メイン・プログラム
・カウンタ(すなわち、メイン・スレッドとして)によ
りシーケンスをアドレス指定し、プログラム・カウンタ
を更新することにより、命令キャッシュから命令シーケ
ンスを取り出す。命令キャッシュ内で見つからない命令
はメイン・メモリからキャッシュに取り出される。命令
の取出しとともに、現行命令取出しアドレス以降につい
て、組み合わされていない1つまたは複数の将来スレッ
ドがあるかどうかを判定するための検査も行われる。こ
の暗黙の組合せ検査の実行は、TMユニット(図1のブ
ロック130)も担当する。この検査は通常、組み合わ
されていない(保留)すべての将来スレッドの開始アド
レスとそれぞれの命令取出しアドレスとの比較を含むは
ずである。
【0084】5.スレッド妥当性検査(ブロック25
0):1つまたは複数の将来スレッドが別の実行スレッ
ド(たとえば、メイン・スレッド)の命令取出しアドレ
スに事前にフォークされていると前のステップ(ブロッ
ク240)で判定された場合は、1つまたは複数の推測
の結果、プログラム依存関係の違反のためにこのような
将来スレッドのそれぞれによって実行された命令の一部
または全部を破棄する必要があるかどうかを確認するた
めに、追加の検査がTMユニットによって行われる。
【0085】6.組合せ(ブロック260):前のステ
ップ(スレッド妥当性検査、ブロック250)で識別さ
れたフォーク済み将来スレッドのうち、有効に実行され
た部分が、前述の組合せ動作によりメイン・スレッドと
組み合わされる。
【0086】7.デコード(ブロック270):取り出
した命令をディスパッチャでデコードする。その命令の
うちの1つまたは複数がFORK命令としてデコードされた
かどうかを確認するために検査する。
【0087】8.メイン・スレッドの実行(ブロック2
80):前のステップ(デコード、ブロック270)で
いずれかの命令がFORK以外の命令としてデコードされた
場合、(図1のブロック140を使用して)命令依存関
係を分析し、適切な機能ユニット(図2のブロック18
0)上で実行するために(図1のブロック150を使用
して)それらをスケジューリングすることにより、実行
を続行する。
【0088】9.完了(ブロック290):前述のよう
に、完了ユニット(図2のブロック190)により命令
実行を完了する。ステップ4〜9に記載した取出し、デ
コード、実行のプロセスは続行される。
【0089】10.フォーク能力の判定(ブロック30
0):上記のブロック270に関連するステップ(デコ
ード)で命令がFORK命令としてデコードされた場合は、
追加の将来スレッドをフォークするために使用可能なマ
シン資源があるかどうかを判定するための検査が行われ
る。将来スレッドをフォークするのに必要なマシン資源
としては、使用可能なプログラム・カウンタと、スレッ
ド状態を保管するために使用可能な内部バッファ空間な
どがある。
【0090】11.フォーク(ブロック310):使用
可能な資源がある場合は、FORK命令に関連するアドレス
(複数も可)を将来プログラム・カウンタ(複数も可)
にロードすることにより、TMユニットが将来スレッド
(複数も可)をフォークする。これにより将来スレッド
(複数も可)の実行が始まるが、将来スレッドの開始マ
シン状態(プログラム・カウンタを除く)は、フォーク
点でのメイン・スレッド(関連FORK命令をデコードする
スレッド)のものと同じになる。
【0091】12.将来スレッドの実行(ブロック32
0):上記のステップ(4)〜(8)と同様に、フォー
キング・スレッドの実行と並行して将来スレッドの実行
が続行される。ただし、メイン・プログラム・カウンタ
とメイン・スレッド・ディスパッチャの代わりに、将来
プログラムカウンタの1つと将来スレッド・ディスパッ
チャの1つをそれぞれ使用し、メイン・スレッドをフォ
ーキング・スレッドと呼ぶ。
【0092】13.将来スレッドの停止(ブロック33
0):将来スレッドがフォーキング・スレッドと組み合
わされた後、または将来スレッドがTMユニットによっ
て破棄された後、将来スレッドの実行が中断され、関連
資源が解放される。
【0093】前述の1次実行方法(PEM)の強化例を
いくつか以下に説明する。
【0094】代替実施例1: 1.PEMのステップ(2)は、以下の追加サブステッ
プを有する。 ○ すべての将来スレッドの終わりにUNCOND_SUSPEND命
令が挿入される。
【0095】2.PEMのステップ(12)は、以下の
追加サブステップを有する。UNCOND_SUSPEND命令を検出
すると、その対応将来スレッドの実行中に将来スレッド
は無条件にそのスレッドを中断する。
【0096】3.PEMのステップ(8)は、以下の追
加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにUNCOND_SUS
PEND命令が検出された場合は、その命令は無視される。
【0097】代替実施例2: 1.代替実施例1を含むPEMのステップ(1)は、以
下の追加サブステップを有する。 ○ すべてのUNCOND_SUSPEND命令に対応して、対応将来
スレッドに0個またはそれ以上のSUSPEND命令を挿入す
ることができ、そこでそれぞれのSUSPEND命令が1つの
条件に関連づけられる。
【0098】2.代替実施例1を含むPEMのステップ
(2)は、以下の追加サブステップを有する。 ○ SUSPEND命令に関連するコンパイル時指定条件が実
行時に真と評価される場合のみ、SUSPEND命令に関連す
る依存領域内の1組の命令が対応将来スレッドでの実行
に有効であると見なされる。したがって、将来スレッド
の実行が条件付き中断命令を検出するときまでに関連推
測が無効であると分かっている場合には、条件付き中断
点で(TMユニットによって)将来スレッドを強制的に
中断することもできる。
【0099】3.代替実施例1を含むPEMのステップ
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにSUSPEND命
令が検出された場合は、その命令は無視される。
【0100】代替実施例3: 1.代替実施例2を含むPEMのステップ(1)は、以
下の追加サブステップを有する。 ○ 0個またはそれ以上のSKIP命令を将来スレッドに挿
入することができ、そこで、それぞれのSKIP命令が数値
sに関連づけられる。
【0101】2.代替実施例2を含むPEMのステップ
(2)は、以下の追加サブステップを有する。 ○ その対応将来スレッドの実行中に関連数値sを含む
SKIP命令を検出すると、この命令に続く次のs個の命令
だけをデコードする必要が生じ、これらの命令の残りの
実行はスキップすることができる。これらの命令で使用
するソース・レジスタと宛先レジスタは、有効オペラン
ドを保持するものとしてマークを付けることができる
が、いずれかの機能ユニット上で実行するためにこれら
のs個の命令をスケジューリングする必要はない。
【0102】3.代替実施例2を含むPEMのステップ
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにSKIP命令が
検出された場合は、その命令は無視される。
【0103】代替実施例4: 1.代替実施例2を含むPEMのステップ(1)は、以
下の追加サブステップを有する。 ○ 0個またはそれ以上のFSKIP命令を将来スレッドに
挿入することができ、そこで、それぞれのFSKIP命令
が、1組のアーキテクチャ化レジスタを定義するマスク
と、数値sとに関連づけられる。
【0104】2.代替実施例2を含むPEMのステップ
(2)は、以下の追加サブステップを有する。 ○ その対応将来スレッドの実行中にマスクと数値sを
含むFSKIP命令を検出すると、この命令に続く次のs個
の命令をスキップすることができる。すなわち、これら
の命令は、取出し、デコード、または実行を行う必要が
ない。マスクで識別されたレジスタは、有効オペランド
を保持するものとしてマークを付けることができる。
【0105】3.代替実施例2を含むPEMのステップ
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにFSKIP命令
が検出された場合は、その命令は無視される。
【0106】代替実施例5: 1.代替実施例2を含むPEMのステップ(1)は、以
下の追加サブステップを有する。 ○ すべての将来スレッドの先頭に1つのSKPMG命令が
挿入され、そこで、それぞれのSKPMG命令が数値sに関
連づけられる。
【0107】2.代替実施例2を含むPEMのステップ
(2)は、以下の追加サブステップを有する。 ○ その対応将来スレッドの実行中に関連数値sを含む
SKPMG命令を検出すると、この命令に続く次のs個の命
令だけをデコードする必要が生じ、これらの命令の残り
の実行はスキップすることができる。これらの命令で使
用するソース・レジスタと宛先レジスタは、有効オペラ
ンドを保持するものとしてマークを付けることができる
が、いずれかの機能ユニット上で実行するためにこれら
のs個の命令をスケジューリングする必要はない。
【0108】3.代替実施例2を含むPEMのステップ
(3)は、以下の追加サブステップを有する。 ○ その対応将来スレッド以外のスレッドが(たとえ
ば、メイン・スレッド内で)実行するためにSKPMG命令
が検出された場合は、SKPMG命令の命令アドレス以降に
ついて、将来スレッドがすでにフォークされているかど
うかを判定するための組合せ検査が行われる。
【0109】4.PEMのステップ(4)の暗黙の組合
せ検査はここでは不要であり、そのため除去される。
【0110】代替実施例6: 1.PEMのFORKの挿入ステップ(すなわち、ステップ
3)は、以下のステップに置き換えられる。 ○ 0個またはそれ以上の潜在的フォーク点に0個また
はそれ以上のFORK_SUSPEND命令を挿入する。その場合、
FORK_SUSPEND命令は、関連の潜在的将来スレッドの開始
アドレスを識別するアドレスと、一連の数値とを含み、
それぞれの数値には条件が付いている場合もあれば付い
ていない場合もある。所与の一連の数値は、FORK_SUSPE
ND命令に関連するアドレスから始まる命令の連続グルー
プを意味する。特定のFORK_SUSPEND命令とそのフォーク
済み将来スレッドとの関連づけがある場合は、前述のT
Mユニットによってその関連づけが管理される。
【0111】2.PEMのフォーク能力の判定ステップ
(すなわち、ステップ10)は、以下のステップに置き
換えられる。 ○ 命令がFORK_SUSPEND命令としてデコードされた場合
は、追加の将来スレッドをフォークするために使用可能
なマシン資源があるかどうかを判定するための検査が行
われる。
【0112】3.PEMのフォーク・ステップ(すなわ
ち、ステップ11)は、以下のステップに置き換えられ
る。 ○ 使用可能な資源がある場合は、FORK_SUSPEND命令に
関連するアドレス(複数も可)を将来プログラム・カウ
ンタ(複数も可)にロードすることにより、将来スレッ
ドをフォークする。
【0113】4.PEMの将来スレッドの実行ステップ
(すなわち、ステップ12)は、以下の追加サブステッ
プを有する。 ○ FORK_SUSPEND命令に関連する数値列は、以下のよう
に対応将来スレッドの実行を制御する。数値たとえばn
に関連条件が一切付いていない場合は、n個の命令から
なる対応グループを将来スレッドとして無条件に実行で
きることを意味し、数値たとえばmに関連条件が付いて
いる場合は、コンパイル時指定条件が実行時に真と評価
される場合のみ、m個の命令からなる対応グループの将
来スレッド実行が有効になるはずである。
【0114】代替実施例7: 1.PEMのFORKの挿入ステップ(すなわち、ステップ
3)は、以下のステップに置き換えられる。 ○ 0個またはそれ以上の潜在的フォーク点に0個また
はそれ以上のFORK_S_SUSPEND命令を挿入する。その場
合、FORK_S_SUSPEND命令は、関連の潜在的将来スレッド
の開始アドレスを識別するアドレスと、数値たとえばs
と、一連の数値とを含み、それぞれの数値には条件が付
いている場合もあれば付いていない場合もある。所与の
一連の数値は、FORK_S_SUSPEND命令に関連するアドレス
から始まる命令の連続グループを意味する。
【0115】2.PEMのフォーク能力の判定ステップ
(すなわち、ステップ10)は、以下のステップに置き
換えられる。 ○ 命令がFORK_S_SUSPEND命令としてデコードされた場
合は、追加の将来スレッドをフォークするために使用可
能なマシン資源があるかどうかを判定するための検査が
行われる。
【0116】3.PEMのフォーク・ステップ(すなわ
ち、ステップ11)は、以下のステップに置き換えられ
る。 ○ 使用可能な資源がある場合は、FORK_S_SUSPEND命令
に関連するアドレス(複数も可)を将来プログラム・カ
ウンタ(複数も可)にロードすることにより、将来スレ
ッドをフォークする。
【0117】4.PEMの将来スレッドの実行ステップ
(すなわち、ステップ12)は、以下の追加サブステッ
プを有する。 ○ FORK_S_SUSPEND命令に関連する数値列は、以下のよ
うに対応将来スレッドの実行を制御する。対応スレッド
を将来スレッドとして実行している間は最初のs個の命
令だけをデコードすることができ、これらの命令で使用
するソース・レジスタと宛先レジスタは、有効オペラン
ドを保持するものとしてマークを付けることができる
が、いずれかの機能ユニット上で実行するためにこれら
のs個の命令をスケジューリングする必要はない。さら
に、数値たとえばnに関連条件が一切付いていない場合
は、n個の命令からなる対応グループを将来スレッドと
して無条件に実行できることを意味し、数値たとえばm
に関連条件が付いている場合は、コンパイル時指定条件
が実行時に真と評価される場合のみ、m個の命令からな
る対応グループの将来スレッド実行が有効になるはずで
ある。
【0118】代替実施例8: 1.PEMのFORKの挿入ステップ(すなわち、ステップ
3)は、以下のステップに置き換えられる。 ○ 0個またはそれ以上の潜在的フォーク点に0個また
はそれ以上のFORK_M_SUSPEND命令を挿入する。その場
合、FORK_M_SUSPEND命令は、関連の潜在的将来スレッド
の開始アドレスを識別するアドレスと、1組のマスクと
を含み、それぞれのマスクには条件が付いている場合も
あれば付いていない場合もある。
【0119】2.PEMのフォーク能力の判定ステップ
(すなわち、ステップ10)は、以下のステップに置き
換えられる。 ○ 命令がFORK_M_SUSPEND命令としてデコードされた場
合は、追加の将来スレッドをフォークするために使用可
能なマシン資源があるかどうかを判定するための検査が
行われる。
【0120】3.PEMのフォーク・ステップ(すなわ
ち、ステップ11)は、以下のステップに置き換えられ
る。 ○ 使用可能な資源がある場合は、FORK_M_SUSPEND命令
に関連するアドレス(複数も可)を将来プログラム・カ
ウンタ(複数も可)にロードすることにより、将来スレ
ッドをフォークする。
【0121】4.PEMの将来スレッドの実行ステップ
(すなわち、ステップ12)は、以下の追加サブステッ
プを有する。 ○ FORK_M_SUSPEND命令に関連するマスク列は、以下の
ように対応将来スレッドの実行を制御する。対応スレッ
ドを将来スレッドとして実行している間、FORK_M_SUSPE
NDに関連し、条件が一切付いていないマスクは、将来ス
レッドの実行のための有効ソース・オペランドを無条件
に保持する1組のアーキテクチャ化レジスタを表し、条
件に関連するマスクは、コンパイル時指定条件が実行時
に真と評価される場合のみ、将来スレッドの実行のため
の有効ソース・オペランドを保持すると想定することが
できる1組のアーキテクチャ化レジスタを意味する。命
令のソース・レジスタ・オペランドに関連するコンパイ
ル時指定条件が実行時に真に該当しない場合は、TMユ
ニットが将来スレッド内の命令の一部または全部の結果
を破棄する。
【0122】代替実施例9: 1.PEMのメイン・スレッドの実行ステップ(すなわ
ち、ステップ8)は、以下の追加サブステップを有す
る。 ○ スレッド実行中のすべての分岐解決(すなわち、条
件付き分岐を実行するかどうかの判定と、関連目標アド
レス)はTMユニットに連絡される。TMユニットはこ
の情報を使用して、間違った分岐アドレスにフォークさ
れた将来スレッドと依存スレッドを破棄する必要がある
かどうかを判定する。これにより、後述するように命令
の制御依存ブロックの同時実行が可能になる。
【0123】代替実施例10: 1.PEMの取出しと組合せ検査ステップ(すなわち、
ステップ4)は、以下の追加サブステップを有する。 ○ 事前にフォークされたスレッドのいずれかが既定の
タイムアウト期間より長い間、組み合わされずにいたか
どうかを確認する検査を含むように、組合せ検査が拡張
される。このようなスレッドはすべてTMユニットによ
って破棄される。
【0124】新しい命令のコード化の詳細説明:図14
ないし図17は、新しい命令の一部の好ましいコード化
例を示している。ビット位置0は最上位ビット位置を意
味し、ビット位置31は最下位ビット位置を意味する。
【0125】1.FORK(図14) この命令(ブロック111)では、ビット0〜5を使用
して1次命令コード4を使用している。将来スレッドの
開始アドレスの相対アドレスはビット位置6〜29の2
4ビットのアドレス・フィールドにコード化される。最
後の2ビットであるビット位置30と31は、FORK命令
の代替形式のコード化を行うための拡張命令コード・フ
ィールドとして使用される。この2ビットは、FORK命令
のこのバージョンでは0に設定される。
【0126】2.UNCOND_SUSPEND(図15) この命令(ブロック222)では、ビット位置0〜5の
1次命令コード19を使用している。拡張命令コード・
フィールドのビット21〜30は、それを同じ1次命令
コードを含む他の命令と区別するために514に設定さ
れている。ビット31は、この無条件中断命令を条件付
き中断(SUSPEND)命令と区別するために0に設定され
ている。
【0127】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命令
のコンテキストで既に前述した通りである。
【0128】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
個の命令の数を意味する。
【0129】例 図18ないし図20は、本発明で提案した命令の一部を
コード・シーケンスのサンプルで使用した場合を示して
いる。図示のコード・シーケンスは、任意で分岐命令で
終わる、非分岐命令のブロックに分割されている。使用
する命令ニーモニックは、本発明で導入したもの(たと
えば、FORK)か、またはPowerPCアーキテクチャ
(PowerPCはIBMの商標である)のものかのい
ずれかである。条件付き分岐で終わるコードシーケンス
のブロックは、分岐を実行しない場合に制御の転送先に
なるブロックに続く辺Nと、分岐を実行する場合に制御
の転送先になるブロックに続くもう1つの辺Tとを有す
る。
【0130】図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から始まる将来スレッドと組み合わされる。
【0131】アーキテクチャ化レジスタ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に至る場
合はこれらの経路のいずれも優良と見なされるはずであ
る。
【0132】フォークの任意選択性を保証するために、
図19のブロックB12の先頭にあるスピル・ロードが
コンパイラによって保存されていることに留意された
い。また、B12が将来スレッドとして実行される場合
は、スピル・ロードの冗長実行を最適化するために図1
9でSKIP命令が使用されることにも留意されたい。
【0133】図20は、複数の命令からなる制御依存ブ
ロック間で推測するためにFORK命令とSUSPEND命令を使
用する場合を示している。FORK命令は、ブロックB10
0から制御依存ブロックB200とB300にフォーク
するために使用されている。制御依存ブロックB200
とB300は、推論実行され、並列である。メイン・ス
レッドはブロックB100を実行するが、フォーク済み
将来スレッドはブロックB200とブロックB300を
実行する。ブロックB100の終わりにある分岐を解決
すると、TMユニットは間違った分岐結果に関して条件
付けされた将来スレッドを破棄する。たとえば、分岐を
実行する場合、B200から始まる将来スレッドが破棄
される。
【0134】潜在的利点 この項では、上記で提案した命令が前述の諸問題を解決
するのにどのように役立つかを詳しく説明する。
【0135】1.命令取出しのボトルネックの緩和 上記の例に示したように、提案したフォーク命令と中断
命令は、現行スーパースカラー・プロセッサの命令取出
しのボトルネックに対処する新規の方法を提供する。コ
ンパイラは、これらの命令を使用して、任意の距離にあ
る(動的に)制御非依存ブロックを指し示すことができ
る。制御非依存とは、プログラム制御がフォーク点に達
した場合に、これらの将来ブロックに達するように拘束
される(当然のことながら、予測できないような流れの
変更を行うことができる割込みは一切ないものと想定す
る)ことを意味する。したがって、そのブロックの制御
依存性が解決されるとただちに(制御の流れを待たず
に)命令を取り出すことができる。また、その制御依存
性が得られる分岐(制御の流れが得られる分岐ではな
い)が間違って予測された場合のみ、推論方式で取り出
した命令を破棄しなければならない。たとえば、ブロッ
クB9の命令は、ブロックB1でのその共用制御依存性
が解決されるか、推測された直後に、ブロックB3の命
令とともに取り出すことができる。さらに、ブロックB
9からの命令は、ブロックB3の終わりにある分岐が間
違って予測された場合ではなく、ブロックB1の終わり
にある制御依存分岐が間違って予測された場合のみ、無
駄な取出しと見なすか、破棄しなければならない。制御
依存性の概念を持たない従来のスーパースカラーは、ブ
ロックB7とB9がブロックB3の終わりにある分岐の
従来の制御流れ推測により取り出され、その後、これが
予測謝りであると判明した場合、ブロックB7(または
B6)ならびにB9のその推論取出しを破棄するはずで
ある。
【0136】2.制御非依存ブロック間でのデータ非依
存性の活用 これらのブロックに至る可能性のあるすべての制御流れ
経路とはデータ非依存でもある制御非依存ブロックの命
令は、このような制御非依存ブロックへの複数フォーク
を介して、同時かつ非推論方式で実行することができ
る。たとえば、ブロックB9(B3とは制御非依存であ
る)の最初の3つの命令は、ブロックB3、B6、B7
(B3からB9への1組の制御流れ経路上の1組の基本
ブロック)の命令とはデータ非依存である。したがっ
て、これらの命令は、提案したフォーク命令と中断命令
を使用して、非推論方式で取り出して実行することがで
きる。
【0137】3.制御非依存ブロック間でのデータ依存
性の推測 将来スレッドの活動とメイン・スレッドの活動とのオー
バラップを高めるためには、将来スレッド内の潜在的デ
ータ依存性に関する何らかの形式の推測が必要である。
図18および図19の例を検討する。この場合、ブロッ
クB1〜B11にはレジスタ4の定義が1つしかない。
これはブロックB10で定義されている。メイン・スレ
ッドの制御の流れについて推測する、すなわち、メイン
・スレッドの制御の流れがブロックB10に達しないと
想定すると、ブロックB12の先頭から始まる将来スレ
ッドとブロックB1に継続するメイン・スレッドとのオ
ーバラップを高めることが可能である。ブロックB10
の違反命令に至る正確な制御の流れは、提案した条件付
き中断命令の一部として、<TXT>としてコード化さ
れる。ただし、制御流れの推測はコンパイル時に行わ
れ、このため、静的分岐予測(またはプロファイル主導
あるいはその両方)の技法だけに基づいて行われること
に留意されたい。また、この場合の正味効果は、条件付
き中断命令と無条件中断命令との間の命令を推論方式で
格上げすることと同様であることにも留意されたい。し
かし、それぞれの保護された(格上げされた)命令の一
部として制御流れ条件をコード化する、保護された(ま
たは格上げされた)命令の既知の技法とは異なり、提案
した技法では、条件付き中断命令と無条件中断命令とを
使用して1群の命令用の条件をコード化する。この手法
の重要な利点としては以下のものがある。
【0138】○ アーキテクチャ上の影響が小さいこと 前に示したように、提案した方式の主な利点は、そのア
ーキテクチャ上の影響が相対的に最小限であることであ
る。フォーク命令と中断命令(そのうち、フォーク命令
だけが1次命令コード空間を必要とする)の追加を除
き、既存の命令コード化は影響を受けない。したがっ
て、格上げ手法とは異なり、提案した方式では、制御流
れの推測をコード化するために格上げしたそれぞれの命
令の命令コードで使用可能なビット数に依存しない。
【0139】○ 推測した制御流れのコード化の正確さ 新しい(中断)命令では制御流れの推測が排他的にコー
ド化されるので、より多くのビット数を使用してそれを
正確にコード化することができる。たとえば、格上げ方
式では、想定した流れ経路に沿って格上げした命令の深
さをコード化するためにのみ、ある妥協点に達しなけれ
ばならなかった(それぞれの分岐は想定した結果ビット
を有し、最も可能性の高い追跡経路を示していた)。こ
の妥協点は、格上げしたそれぞれの命令の命令コードに
収容できるように、推測した制御流れを簡潔にコード化
するために必要であった。この妥協点の結果、制御非依
存分岐の予測を誤ると、推論方式で実行し格上げした命
令が不必要に破棄されてしまった。本明細書で提案した
手法では、推測した制御流れ経路に沿った制御非依存分
岐が、NまたはTではなくXによって正しくコード化さ
れる。このため、将来スレッドで推論方式で実行された
命令は、制御非依存分岐の予測を誤っても破棄されな
い。
【0140】○ 小規模なコード拡大 典型的なパーコレーションおよび格上げ技法では、想定
した追跡から外れる経路でのコード・コピーまたはパッ
チアップ・コードが必要になる場合が多い。これは、コ
ード・サイズの大幅な拡大に至る可能性がある。提案し
た技法はこれらのオーバヘッドのいずれも持たないの
で、唯一のコード拡大は、1組の命令によって共用され
るフォーク命令と中断命令によるものである。
【0141】○ 順次例外処理の実施の単純化 提案した技法には上方コード・モーションが一切なく、
推論方式で実行したコードは依然としてその元の位置だ
けにとどまっている。したがって、メイン・スレッドが
命令の原因である例外を含む将来スレッドと組み合わさ
れるまで、例外処理を容易に遅延させることができる。
すなわち、例外を引き起こす可能性のある推論命令の元
の位置に明示的にマークを付ける必要もなく、正しい順
序で例外を処理することができる。
【0142】○ 正確な割込みの実施の単純化 この提案の固有のメイン・スレッドは、順次プログラム
順序で完了する最後の命令をいつも正確に把握してい
る。したがって、割込みを正確に処理するために重要な
余分なハードウェアを設ける必要は全くない。
【0143】4.コンパイルとマシン実施態様との結合
解除 前述のように、フォークの任意選択性のため、提案した
アーキテクチャのコンパイルは、多数の活動スレッドが
可能なマシンを想定して行うことができることに留意さ
れたい。しかも、実際のマシン実施態様は、使用可能な
マシン資源に応じて、このようなフォークのほとんどま
たはこのようなフォークの一部に従うか、このようなフ
ォークのいずれにも従わないかを選択することができ
る。したがって、このコンテキストの大部分では、マシ
ン実施態様からコンパイルを結合解除することができ
る。これは、少数または多数の活動スレッドが可能なマ
シンについて個別に再コンパイルする必要がないことも
意味する。
【0144】5.ループ反復の並列実行 提案したフォーク命令と中断命令は、ネストしたループ
での反復並列性を効率よく活用するためにも使用するこ
とができる。たとえば、SPECint92ベンチマークの1つ
から前述したサンプル・ループについて検討する。この
ループの内側ループ反復は、前の反復に対して制御とデ
ータの両面で依存している。しかし、内側ループのそれ
ぞれの活動化(すなわち、外側ループ反復)は前のもの
とは無関係である。このため、前のものが完了するまで
待たずに、しかも内部ループの何らかの制御およびデー
タ非依存反復の予測を誤ったときに外側ループ反復から
実行した命令を不必要に破棄せずに、マシンが内側ルー
プの活動化を何度も開始できるようにするため、提案し
たフォーク命令(外側ループ・ボディを開始する)をコ
ンパイラが使用することは可能である。
【0145】6.レジスタ・プレッシャの緩和 互いにデータ非依存でもある制御非依存基本ブロック内
の命令は、取り出すことも実行することもできない。起
こりうる明らかな疑問は、このようなデータおよび制御
非依存命令が、同一基本ブロック内にまとめて入れるの
に十分なほどパーコレーションされていないのかという
ことである。優良コンパイラはこのようなパーコレーシ
ョンを実施しようと最善を尽くすはずであるが、必ずこ
れらの命令をまとめてグループ化できるわけではない。
前述のように、すべてのデータおよび制御非依存命令を
効率よくまとめてグループ化できるようにするには、コ
ンパイラは、適切なコード化を行うのに十分なアーキテ
クチャ化レジスタを有する必要がある。たとえば、図1
8および図19で使用する例の推測上のマシンが4つの
アーキテクチャ化レジスタ、すなわちレジスタ1〜レジ
スタ4しか提供しないものと想定する。このようなマシ
ン用のコンパイラは、追加のスピル・コードを挿入せず
に、制御およびデータ非依存命令を基本ブロックB1お
よびB12に単純にグループ化することはできない。フ
ォーク機構により、コンパイラは追加のスピル・コード
がなくても基礎となるデータ非依存性を伝えることがで
きる。事実、既存のスピル・コードの一部は、B12が
実行時に実際にフォークされると冗長(たとえば、基本
ブロックB12内の最初の2つのロード)になる可能性
がある。このようなスピル・コードは、前述のようにSK
IP命令を使用して最適化することができる。
【0146】7.制御依存ブロック間の推測 これまでの説明でフォークを使用したのは、制御非依存
ブロックの並列実行の場合だけであった。この概念は、
制御依存ブロックを含むようにさらに拡張することがで
きる。さらにこれは、両方の分岐経路を推論方式で実行
できる能力を意味する。追加の実施コストが必要ではあ
るが、このような推測はいずれもアーキテクチャに対し
てこれ以上影響を及ぼすことはない。この形式の推測の
追加の有用性は、ある程度は(1つの分岐経路に沿っ
て)現行推論スーパースカラーにすでに使用されている
が、さらに検討する必要がある。図20で使用する例
は、どちらもB100に対して制御依存しているブロッ
クB200およびB300のような制御依存ブロック間
で推測するためにフォーク命令と中断命令を使用する場
合を示している。ブロックB100のフォークも、両方
の分岐経路に沿って推測し、実行時の実際の制御の流れ
(B200またはB300)に基づいて適切に命令を破
棄するためのものである。
【0147】8.スレッド管理の簡略化 ○ スレッド間の同期:固有のメイン・スレッドと残り
の将来スレッドという概念は、スレッド間の同期を簡略
化した機構を提供し、低いオーバヘッドを意味する。明
示的な中断点では、将来スレッドは単にそれ自体を中断
し、メイン・スレッドの制御が将来スレッドに到達する
のを待つだけである。あるいは、その実行中の様々な時
点で将来スレッドが他のスレッドとの明示的スレッド間
同期を試みることもできる。しかし、このようにスレッ
ド間同期がさらに精巧になると、ハードウェア/ソフト
ウェアのオーバヘッドが増すことを意味する。
【0148】○ スレッド間通信:アーキテクチャ化マ
シン状態のコピーによるフォークと、前述の組合せ動作
の概念により、オーバヘッドの低いスレッド間通信の機
構が提供される。オーバヘッドがこれよりかなり高い代
替機構は、たとえば、メッセージにより、活動スレッド
間の連続通信プロトコルを提供する明示通信プリミティ
ブをもたらすことができる。
【0149】○ スレッドのスケジューリング:本発明
で提案した機構では、結果的に(前述のように)フォー
クの任意選択性が得られるが、FORK命令に応答してスレ
ッドをスケジューリング(フォーク)するために実行時
スレッド・スケジューリング・ハードウェアを必要とし
ないので、動的スレッド・スケジューリングも簡略化さ
れる。したがって、スレッド・スケジューリング・ハー
ドウェハは、すべてのFORK命令が暗示する将来スレッド
(複数も可)の待ち行列化と管理を負担する必要がな
い。このため、再コンパイルせずに各種のマシン実施態
様に適合できることなど、その他の利点により、静的ス
レッド・スケジューリングに対する動的スレッドのハー
ドウェア・オーバヘッドが引き下げられている。
【0150】代替実施例11:以下の説明は、例示のア
ーキテクチャ内でのマルチスカラー(マルチスレッド
化)処理の順方向および逆方向互換実施態様について説
明するものである。
【0151】その分岐プロセッサ命令セット内の例示の
命令セット・アーキテクチャ(「ISA」)はローカル
分割(フォーク)命令を含む。このローカル分割命令
は、それ以外には使用されない分岐オプション(「B
O」)フィールドにコード化される。あるいは、このロ
ーカル分割命令は、「ノー・オペレーション」(「NO
P」)命令にコード化することもできる。プログラムさ
れた命令シーケンスの制御の流れでのローカル分割命令
の検出に応答して、プロセッサは、複数の命令からなる
指定のコード・ブロック(または「セット」)の推論実
行を開始する。
【0152】このようにして、ローカル分割命令はプロ
セッサにとって「ヒント」として機能する。ローカル分
割命令は、プロセッサがもっと遅い時期に制御の流れで
指定のコード・ブロックを検出する可能性があること
と、そのもっと遅い時期に先立って指定のコード・ブロ
ックの実行を推論方式で開始する方がプロセッサにとっ
て有利になる可能性があることをプロセッサに示す。し
たがって、プロセッサ(第1のタイプのプロセッサ)が
もっと遅い時期に制御の流れで指定のコード・ブロック
を検出した場合、プロセッサはすでに指定のコード・ブ
ロックの少なくとも一部を実行しており、指定のコード
・ブロックを並列コードとして実行することになる。に
もかかわらず、プロセッサは指定のコード・ブロックを
推論方式で実行するので、その指定のコード・ブロック
は順次コードの効果を達成する。
【0153】この実施例の重要な態様では、ローカル分
割命令は、それより遅れているプロセッサ・アーキテク
チャによる処理との互換性を有している。このような遅
れたプロセッサ・アーキテクチャでは、プロセッサ(第
2のタイプのプロセッサ)は分割命令を単に命令キャッ
シュ線接触命令として解釈する。あるいは、かなり遅れ
たプロセッサ・アーキテクチャでは、プロセッサは分割
命令を無条件分岐命令として(あるいはNOP命令とし
て)解釈する。
【0154】PowerPCマイクロプロセッサ・アー
キテクチャでは、ローカル分割命令内でのBOコード化
例は、BO=1z11z、0011y、0111yであ
る。遅れているプロセッサ・アーキテクチャでは、この
ようなBOのコード化は無効である。にもかかわらず、
この実施例の重要な態様では、遅れているプロセッサ・
アーキテクチャにより動作するプロセッサは、制御の流
れでこのような無効なBOのコード化をプロセッサが検
出したことに応答して「無効動作」割込みを生成するこ
とはない。むしろ、制御の流れでこのような無効なBO
のコード化を検出したことに応答して、プロセッサ(遅
れているプロセッサ・アーキテクチャにより動作する)
は、そのBOのコード化がそれぞれ1z1zz、001
zy、または011zyである場合と同じように命令を
処理する。
【0155】したがって、この実施例の重要な態様で
は、プロセッサ(遅れているプロセッサ・アーキテクチ
ャにより動作する第2のタイプのプロセッサ)が制御の
流れでローカル分割命令を検出したことに応答して、プ
ロセッサは、より基本的な分岐機能を実行し、その結
果、通常の命令処理は順次経路(第1組の命令)または
目標経路(第2組の命令)のいずれかに沿って続行さ
れ、両方に沿って続行されることはない。
【0156】比較すると、プロセッサがこの実施例のよ
り進歩したプロセッサ・アーキテクチャにより動作する
場合、プロセッサ(第1のタイプのプロセッサ)は、制
御の流れでのローカル分割命令の検出に応答して、より
有利に動作する。このようなプロセッサの場合、通常の
命令実行は、目標経路または順次経路のいずれかの指定
経路(第1組の命令)に沿って続行される。さらに、指
定外経路に沿った第1のアドレスが推論取出しアドレス
として使用されるように、推論経路命令実行が指定外経
路(第2組の命令)に沿って開始される。したがって、
この状況では、プロセッサは2つの経路に沿って同時に
命令を実行し、一方の経路(第1組の命令)は非推論方
式で実行され、もう一方の経路(第2組の命令)は推論
方式で実行される。これは、特定の時期に単一経路(第
1組の命令)だけが非推論方式で実行される、遅れてい
るプロセッサ・アーキテクチャにより動作するプロセッ
サとは区別可能である。
【0157】実施例のより進歩したプロセッサ・アーキ
テクチャによれば、プロセッサが制御の流れで複数のロ
ーカル分割命令を検出した場合、プロセッサは3つ以上
の経路を同時に実行することができる。この実施例で
は、ローカル分割命令の意味が、ネストされた分割命令
と、単一非推論経路からの複数の分割命令を完全にサポ
ートしている。
【0158】実施例の進歩したプロセッサは、推論経路
が非推論になるまで、その経路に沿って実行したどの命
令についてもその結果を(アーキテクチャ化レジスタ
に)コミットしない。むしろ、このような結果は、アー
キテクチャ化レジスタにコミットされるまで、一時的に
名前変更バッファに格納される。順次プログラム順序と
一致して、非推論経路と推論経路との依存関係は、推論
経路命令が非推論経路命令の後に続く場合と同じように
ハードウェアによって検出され処理される。プロセッサ
が非推論経路に沿ってすべての命令を取り出し、推論経
路の第1の命令を取り出そうと試み、推論経路の第1の
命令の前にすべての命令の結果を(アーキテクチャ化レ
ジスタに)コミットしたことに応答して、プロセッサ
は、推論経路に沿って実行した命令の結果のうち使用可
能なものを(アーキテクチャ化レジスタに)コミットす
る。このようにして、推論経路は非推論経路になる。プ
ロセッサは推論経路に沿ってすでに命令を実行している
ので、このような命令の再取出しは行わない。これは、
推論経路の「結合」と呼ばれる。どのような特定の時期
でも、単一マイクロプロセッサで実行される非推論経路
はせいぜい1つである。にもかかわらず、実施例の進歩
したプロセッサでは、非推論経路によって1つまたは複
数の推論経路を同時に(並列に)推論方式で実行するこ
とができる。最適化したソフトウェアはプロセッサが処
理可能な推論経路の数を参照して設計することができる
が、プロセッサが処理可能な推論経路の数とは無関係に
ソフトウェアを設計できることは有利である。
【0159】代替実施例11に関連する依存関係の前提
事項と実施上の問題:パフォーマンスを改善するため、
実施例では様々なプロトコルをサポートしている。ロー
カル分割命令の目標は、現在の非推論命令経路の後でプ
ロセッサが検出する可能性のある1つまたは複数の命令
経路についてプロセッサにソフトウェア上の「ヒント」
を提供することである。これは、明示ソフトウェア分岐
予測の変形である。通常、ハードウェアは(資源および
サイクル時間によって)複数の命令を並列に同時処理す
るための機会を検出する際に使用する小さい時間ウィン
ドウに限定されるので、これは有利である。比較する
と、ソフトウェア・コンパイラは通常、もっと大きい時
間ウィンドウを自由に分析することができる。
【0160】このような大きい時間ウィンドウ内では、
ハードウェアに比べ、ソフトウェアの方がより多くの情
報を分析することができ、複数命令経路(またはスレッ
ド)の実行時に並列性を達成するためにより容易く命令
コード・シーケンスを操作することができる。
【0161】代替実施例11a:この代替実施例では、
プロセッサ・ハードウェアが依存関係の前提事項を頼り
にしない。ハードウェアは、推論経路と非推論経路との
レジスタおよびメモリ両方の依存関係を調整する。ただ
し、2つの経路間に依存関係がある場合は、ローカル分
割プリミティブを実施してもパフォーマンスの向上がほ
とんどまたはまったく達成されないこともあり得る。
【0162】この代替実施例では、プロセッサは推論方
式でのメモリへの格納を行わない。プロセッサが推論ス
トア用のストア待ち行列を含むことは可能である。ま
た、プロセッサは、同時に実行した推論コード経路と非
推論コード経路とのメモリ依存関係も調整する。したが
って、プロセッサが非推論経路でストア動作を検出し、
推論経路でロード動作を検出する場合、プロセッサは、
ロード動作が正しい情報を含むように2つの動作を解決
する。メモリの別名化が起こるとプロセッサのパフォー
マンスが最適レベルを下回る可能性があるが、プロセッ
サのこのパフォーマンス態様は、ローカル分割プリミテ
ィブを実施してもマイナスの影響を受けることはない。
【0163】さらにプロセッサは、推論経路と非推論経
路とのレジスタ依存関係を調整する。プロセッサ・ハー
ドウェアは、2つの経路間のレジスタ依存関係を検出
し、このような依存関係を適当に解決する。プロセッサ
が推論経路と非推論経路とのレジスタ依存関係を調整で
きる能力は、ローカル分割プリミティブを実施してもマ
イナスの影響を受けることはない。
【0164】代替実施例11b:この代替実施例では、
プロセッサ・ハードウェアが様々な依存関係の前提事項
を実施する。ハードウェアは、推論経路と非推論経路と
のメモリ依存関係を調整する。ただし、2つの経路間に
メモリ依存関係が存在する場合は、ローカル分割プリミ
ティブを実施してもパフォーマンスの向上がほとんどま
たはまったく達成されないこともあり得る。
【0165】この代替実施例では、プロセッサは推論方
式でのメモリへの格納を行わない。プロセッサが推論ス
トア用のストア待ち行列を含むことは可能である。ま
た、プロセッサは、同時に実行した推論コード経路と非
推論コード経路とのメモリ依存関係も調整する。したが
って、プロセッサが非推論経路でストア動作を検出し、
推論経路でロード動作を検出する場合、プロセッサは、
ロード動作が正しい情報を含むように2つの動作を解決
する。メモリの別名化が起こるとプロセッサのパフォー
マンスが最適レベルを下回る可能性があるが、プロセッ
サのこのパフォーマンス態様は、ローカル分割プリミテ
ィブを実施してもマイナスの影響を受けることはない。
【0166】プロセッサは、推論経路と非推論経路との
レジスタ依存関係を認めない。プログラムがレジスタ依
存関係を頼りにする場合、ローカル分割プリミティブを
実施するプロセッサ・ハードウェアが生成する結果は、
ローカル分割プリミティブを実施しないプロセッサ・ハ
ードウェアとは異なる可能性がある。
【0167】代替実施例11c:この代替実施例では、
プロセッサ・ハードウェアがより多くの依存関係の前提
事項を実施する。ハードウェアは、推論経路と非推論経
路とのメモリ依存関係もレジスタ依存関係も調整しな
い。
【0168】プロセッサは、推論方式でのメモリへの格
納を行わない。プロセッサが推論ストア用のストア待ち
行列を含むことは可能である。
【0169】プロセッサは、推論経路と非推論経路との
依存関係を認めない。プログラムがこのような依存関係
を頼りにする場合、ローカル分割プリミティブを実施す
るプロセッサ・ハードウェアが生成する結果は、ローカ
ル分割プリミティブを実施しないプロセッサ・ハードウ
ェアとは異なる可能性がある。
【0170】代替実施例11のコード構造例:ローカル
分割プリミティブでの使用に適した(制御流れの観点か
ら見た)コード構造の例を以下に示す。
【0171】図21を参照すると、ローカル分割プリミ
ティブの主な使い方は、制御流れ図の2つの独立強接続
領域(「SCR」)の並列実行である。図21のBとC
は、2つの独立SCRである。Bの最後の命令は、C周
辺で分岐するための条件付き分岐命令である。ローカル
分割命令はAの終わり、Bの上に追加される。このロー
カル分割命令は、目標推論ブロックとしてCの先頭を指
し示す(図21の薄いグレイの点線は推論経路であ
る)。このようにして、ソフトウェアは、介入分岐の数
または2つのSCRであるBとCの初期アドレス間の距
離にかかわらず、Bと並列にCの推論実行を開始するよ
う、プロセッサ・ハードウェアに命令する。Bの終わり
の条件付き分岐が実行されると、Cの推論実行による結
果はいずれもプロセッサのアーキテクチャ化レジスタに
コミットされない。しかし、Bの終わりの条件付き分岐
が実行されない場合は、Cの実行による推論結果はプロ
セッサのアーキテクチャ化レジスタにコミットされ、プ
ロセッサはCの経路から命令の実行を続行する。このプ
ロセッサはBとCとの依存関係を調整する。
【0172】図22を参照すると、ローカル分割プリミ
ティブのもう1つの使い方はループのアンロールであ
る。ループの早い時期に反復間依存関係を解決すること
は可能である。その場合、ローカル分割命令はハードウ
ェアでループをアンロールするのに有用である。このル
ープは、2つのセクション、すなわちBとCに分割され
る。この例では、反復n+1(B(n+1))のB部分
は反復n(B(n))のB部分に依存するが、反復n
(C(n))のC部分には依存しない。そのような状況
では、B(n)が完了するとただちにB(n+1)を開
始することができる。
【0173】このような状況の例としては、プロセッサ
がループの開始時にアドレス・レジスタを更新し、次に
レジスタにデータをロードし、データを操作し、ループ
の第2部でそのデータをメモリに書き戻すというループ
がある。この場合、アドレス・レジスタの更新後に、ル
ープの次の反復の実行を推論方式で開始することができ
る。このようにして、プロセッサは、長い遅延事象にも
かかわらず、命令の実行を続行する。たとえば、単一推
論経路の実行を開始することにより、プロセッサは、反
復nでキャッシュまたは変換索引バッファ(「TL
B」)のミスが発生しても、ループの反復n+1を開始
することができる。nとn+1の両方の反復でキャッシ
ュ・ミスが発生した場合、ローカル分割命令は、(適当
にパイプライン化したバスにより)直列ではなく並列に
そのミスを解決するよう、プロセッサに命令することが
できる。
【0174】したがって、図22では、ローカル分割命
令がBの終わり、Cの上に追加される。このローカル分
割命令は、目標推論ブロックとしてBの先頭を指し示す
(図22の薄いグレイの点線は推論経路である)。この
ようにして、ソフトウェアは、C(n)と並列にB(n
+1)の推論実行を開始するよう、プロセッサ・ハード
ウェアに命令する。ループ閉鎖分岐が実行されると、B
(n+1)の実行による推論結果はいずれもプロセッサ
のアーキテクチャ化レジスタにコミットされ、プロセッ
サは反復n+1の経路から命令の実行を続行する。しか
し、ループ閉鎖分岐が実行されない場合は、反復n+1
の推論実行による結果はいずれもプロセッサのアーキテ
クチャ化レジスタにコミットされない。このプロセッサ
はB(n+1)とC(n)との依存関係を調整する。
【0175】代替実施例11のハードウェア実現例:複
数の命令スレッドを並列に実行するためのプロセッサ・
ハードウェアの例を以下に示す。実施例のローカル分割
技法を実施するために、様々な代替ハードウェアが可能
である。複数の命令スレッドを並列に実行するため、命
令キャッシュは2重ポートにすることができる。あるい
は、以下の例のように、プロセッサが2つのスレッド間
を仲裁する。実施例によるローカル分割プリミティブの
場合、幅広いスーパースカラー・プロセッサ実施態様で
より積極的に実行ユニットを使用することにより、プロ
セッサ全体の命令処理スループットを大幅に増加するこ
とが可能である。
【0176】図23を参照すると、命令取出し器は、一
度に2つの異なる命令スレッドから取り出すことができ
る。それぞれの命令には1ビット・タグが関連づけられ
ている。この1ビット・タグは、その関連命令が属する
スレッドを指定する。いずれかの特定の時期に、2つの
スレッドのうちの一方が最も可能性の高い経路と見なさ
れるので、そのスレッド方が命令取出しと実行資源スケ
ジューリングの両方について優先順位が高くなる。
【0177】プロセッサは1次取出し経路に沿って命令
を実行するので、プロセッサが第1のスレッドと並列に
第2のスレッドの実行を開始するような状況が2通りあ
る。第1の状況では、プロセッサが未解決の条件付き分
岐を検出する。その場合、最も可能性の高い(予測)経
路が1次取出し器(非推論経路命令取出し器)で取り出
され、可能性の低い経路が2次取出し器(推論経路命令
取出し器)で取り出される。第2の状況では、プロセッ
サが1次取出し器でローカル分割命令を検出する。1次
取出し器でのローカル分割命令の検出に応答して、2次
取出し器が(2次取出し器によって取り出された命令の
影響とともに)除去され、2次取出し器がローカル分割
命令に指定した推論取出しアドレスにリセットされる。
プロセッサが(このような分割の結果得られる)推論経
路命令スレッドのアドレスをレジスタに保管することは
注目に値する。
【0178】プロセッサが命令スレッドを推論方式で実
行している間に、プロセッサが追加のローカル分割命令
を検出する場合、プロセッサは新しい命令スレッドへの
追加の分割を開始しない。むしろ、プロセッサは、追加
のローカル分割命令後も続行し、それを通常の分岐命令
と同じように処理する。これは、プロセッサには2つの
取出し器しか含まれていないので、新しい命令スレッド
に使用可能な取出し器資源がそれ以上存在しないからで
ある。にもかかわらず、プロセッサは、(追加のローカ
ル分割命令に指定された)新しい命令スレッド・アドレ
スを保管し、スレッドが結合され、空いている取出し器
資源が使用可能になったときに、その追加分割を開始す
ることができる。分岐ユニットは、(1次取出し器から
と2次取出し器内の)両方のスレッド用の分岐プロセッ
サ命令を処理し、サイクル当たり2つの取出しアドレス
を生成する。プロセッサはこの2つの取出しアドレスを
仲裁して命令キャッシュ(たとえば、インタリーブ・キ
ャッシュ)に入れ、(待ち行列が満杯になる程度に応じ
て)一般に非推論アドレスの方が優先順位が高くなる。
【0179】図24を参照すると、プロセッサは、命令
待ち行列から複数の整数実行ユニットと浮動小数点実行
ユニットに命令をディスパッチする。明確にするため、
図24では整数ユニットのみ示している。n個の整数実
行ユニットがある場合、プロセッサは単一サイクルでn
個の整数命令をディスパッチすることが好ましい。特定
のサイクル中に1次(非推論)命令待ち行列から(n−
k)個の命令しかディスパッチ可能ではない場合、2次
(推論)待ち行列がk個の命令をディスパッチして
「穴」を埋める。このようにして、プロセッサは、本来
はアイドル状態のサイクル中にその資源をより十分に使
用することにより、全体的なスループットの向上を達成
する。第2のスレッドを処理できる能力を持たない同様
のプロセッサが達成する最大パフォーマンスに比べ、1
次(非推論)経路の実行時間が増えないことは注目に値
する。2つまたはそれ以上の整数実行ユニットと1つの
分岐ユニットを備えた典型的なプロセッサは、1〜1.
5(整数コードの場合)の平均IPCを達成するので、
このようなプロセッサには(平均で)0.5を上回るア
イドル実行ユニットが存在する。追加の実行ユニットを
使用中の状態に維持するための技法がある場合は、この
ようなユニットを追加すると有利である可能性がある。
【0180】プロセッサは、命令をディスパッチする場
合、その命令にタグを割り当てる。そのタグは、命令が
発生した経路を識別するものである。さらに、その命令
が推論実行経路または非推論実行経路の一部であるかど
うかを示すために、そのタグにマークが付けられる。プ
ロセッサの完了ユニットが非推論実行経路からの命令を
完了すると、プロセッサは命令の結果(複数も可)をプ
ロセッサのアーキテクチャ化汎用レジスタ(「GP
R」)またはメモリに書き戻す。完了ユニットが推論実
行経路からの命令を完了すると、プロセッサは命令の結
果(複数も可)をシャドウ・レジスタ(複数も可)に格
納する。
【0181】この例のシャドウ構造は、推論GPRと推
論ストア待ち行列である。経路が推論から非推論に変化
すると、プロセッサは、その経路の命令の結果(シャド
ウ構造に格納されているもの)をコミットし、推論GP
RがアーキテクチャGPRにコピーされ、推論ストア待
ち行列がメモリにコピーされるようにする。プロセッサ
は推論ストア待ち行列のメモリの一貫性を維持する。ス
トア待ち行列が満杯で、プロセッサが推論実行経路でス
トア命令を検出する場合、プロセッサは推論ストア命令
を実行しない。むしろ、プロセッサは、推論経路の結合
(その時点でプロセッサはストア待ち行列をメモリにコ
ピーする)または取消し(その時点でプロセッサはスト
ア待ち行列を除去する)ができるようになるまで、推論
経路の実行を停止する。
【0182】さらにこの例のプロセッサは、推論実行経
路と非推論実行経路とのデータ依存関係を検出し、その
依存関係から回復する。このためにプロセッサは、推論
方式で読み取られたレジスタと、推論方式で読み取られ
たメモリ・アドレスを監視し、依存関係を検出する。
【0183】ある例では、プロセッサが依存関係を検出
したことに応答して、プロセッサは単に推論経路を破棄
するだけである。より好ましい例では、プロセッサは推
論経路を破棄し、次に推論経路の先頭(すなわち、ロー
カル分割命令の推論目標アドレス)から同じ推論経路を
再実行する。この推論目標アドレスは、結合アドレスと
して使用した経路タグとしてそのマシン状態にプロセッ
サによって事前に格納されている。この2つの例には同
じ欠点がある。すなわち、ソフトウェアが独立コード・
ブロックの終わりを識別するための明示的な同期機構が
存在しないことである。したがって、プロセッサが依存
命令を取り出して実行し、それにより、推論経路全体が
破棄されることが起こりうる。この結果、難しいスケジ
ューリング問題が発生するが、それは、(この2つの例
によれば)ソフトウェアによるローカル分割命令のスケ
ジューリングの時期を、独立コードの何らかの推論実行
を可能にするために十分早い時期だが、経路が結合され
るかまたは依存関係が解決される前にデータ依存関係を
有する命令まで推論実行が及ばないように十分遅い時期
にする必要があるからである。
【0184】実施例における依存関係回復の最小限の要
件は以下の通りである。プログラムのデータ依存関係グ
ラフは、「<」を使用した部分命令順序付けとして示す
ことができる。この場合、A<B(A小なることB)
は、AがBに依存するか、またはAがCに依存し、C<
BになるようなCが存在することを意味する。依存関係
が検出された場合、プロセッサはその依存関係の原因と
なる命令より先行する命令だけを再実行することが好ま
しい。また、注目すべきことに、制御依存関係は別の部
分命令順序付けを定義し、再実行された命令が別の制御
経路を取る場合はプロセッサが制御依存関係を適当に処
理する(たとえば、正確な割込みと分岐が適当に処理さ
れる)。したがって、実施例のプロセッサは、その依存
関係の影響を受ける命令だけを再実行する。これによ
り、前述のスケジューリング問題が緩和される。
【0185】代替実施例11の要約:ローカル分割命令
は、極端に複雑かつ高価なハードウェアを使用せずにプ
ロセッサが複数の独立命令経路を処理できるようにする
ことにより、並列性をアンロックするために使用するプ
リミティブである。このプリミティブにより、プロセッ
サ・ハードウェアが並列実行するための独立経路をコン
パイル済みソフトウェアで指定することができる。この
プリミティブを既存の命令セット・アーキテクチャ
(「ISA」)を追加して細密並列性をアンロックでき
ることは有利である。
【0186】この技法はいくつかの利点を達成する。第
1に、この技法は既存ISAの基本概念との一貫性を達
成する。第2に、この技法は順方向および逆方向の互換
性を達成する。したがって、コンパイル済みソフトウェ
アがローカル分割プリミティブを含むか、除外するかに
かかわらず、また、プロセッサがローカル分割プリミテ
ィブ自体を実行できるほど十分に進歩したものであるか
どうかにかかわらず、このようなソフトウェアは既存I
SAと一致するどのプロセッサでも(再コンパイルなし
に)実行可能である。第3に、コンパイル済みソフトウ
ェアがローカル分割プリミティブを含む場合、このよう
なソフトウェアは、ローカル分割プリミティブ自体を実
行できるほど十分に進歩していないプロセッサでも(再
コンパイルなしに)実行可能であり、ローカル分割プリ
ミティブを除外するコンパイル済みソフトウェアと比較
して、パフォーマンスの低下はほとんどまたはまったく
発生しない。
【0187】まとめとして、本発明の構成に関して以下
の事項を開示する。
【0188】(1)処理システムによる特定の命令を含
む第1組の命令の実行を開始するステップであって、前
記特定の命令が第2組の命令の指示を含むステップと、
前記特定の命令の実行と、前記処理システムが第1のタ
イプであることに応答して、前記第2組の実行を開始し
ながら、前記処理システムによる前記第1組の実行を続
行するステップと、前記特定の命令の実行と、前記処理
システムが第2のタイプであることに応答して、前記第
2組の実行を開始せずに、前記処理システムによる前記
第1組の実行を続行するステップとを含むことを特徴と
する、命令スレッドを処理する方法。 (2)前記第2組の実行を開始しながら、前記処理シス
テムによる前記第1組の実行を続行する前記ステップ
が、前記第2組の推論実行を開始するステップを含むこ
とを特徴とする、上記(1)に記載の方法。 (3)前記第1組の実行の1つまたは複数の結果に応答
して、前記第2組の前記推論実行の1つまたは複数の結
果を1つまたは複数のアーキテクチャ化レジスタに選択
的にコミットするステップをさらに含むことを特徴とす
る、上記(2)に記載の方法。 (4)前記特定の命令が分岐命令としてコード化される
ことを特徴とする、上記(1)に記載の方法。 (5)前記特定の命令がNOP命令としてコード化され
ることを特徴とする、上記(1)に記載の方法。 (6)前記第2組の実行を開始せずに、前記処理システ
ムによる前記第1組の実行を続行する前記ステップが、
前記特定の命令を命令キャッシュ線接触命令として実行
するステップを含むことを特徴とする、上記(1)に記
載の方法。 (7)前記第2組の実行を開始せずに、前記処理システ
ムによる前記第1組の実行を続行する前記ステップが、
前記特定の命令を無条件分岐命令として実行するステッ
プを含むことを特徴とする、上記(1)に記載の方法。 (8)前記第2組の実行を開始せずに、前記処理システ
ムによる前記第1組の実行を続行する前記ステップが、
前記特定の命令をNOP命令として実行するステップを
含むことを特徴とする、上記(1)に記載の方法。 (9)処理システムによる特定の命令を含む第1組の命
令の実行を開始する回路であって、前記特定の命令が第
2組の命令の指示を含む回路と、前記特定の命令の実行
と、前記処理システムが第1のタイプであることに応答
して、前記第2組の実行を開始しながら、前記処理シス
テムによる前記第1組の実行を続行する回路と、前記特
定の命令の実行と、前記処理システムが第2のタイプで
あることに応答して、前記第2組の実行を開始せずに、
前記処理システムによる前記第1組の実行を続行する回
路とを含む処理システムを含むことを特徴とする、命令
スレッドを処理するためのシステム。 (10)前記処理システムが前記第1のタイプであり、
前記第2組を推論方式で実行することを特徴とする、上
記(9)に記載のシステム。 (11)前記処理システムがさらに、前記第1組の実行
の1つまたは複数の結果に応答して、前記第2組の前記
推論実行の1つまたは複数の結果を1つまたは複数のア
ーキテクチャ化レジスタに選択的にコミットするように
動作することを特徴とする、上記(10)に記載のシス
テム。 (12)前記特定の命令が分岐命令としてコード化され
ることを特徴とする、上記(9)に記載のシステム。 (13)前記特定の命令がNOP命令としてコード化さ
れることを特徴とする、上記(9)に記載のシステム。 (14)前記処理システムが前記第2のタイプであり、
前記特定の命令を命令キャッシュ線接触命令として実行
することを特徴とする、上記(9)に記載のシステム。 (15)前記処理システムが前記第2のタイプであり、
前記特定の命令を無条件分岐命令として実行することを
特徴とする、上記(9)に記載のシステム。 (16)前記処理システムが前記第2のタイプであり、
前記特定の命令をNOP命令として実行することを特徴
とする、上記(9)に記載のシステム。
【図面の簡単な説明】
【図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組のブロック図である。
【図15】FORK、UNCOND_SUSPEND、SUSPEND、FORK_SUSP
ENDの各命令の形式構造のコード化の好ましい実施例を
示す1組のブロック図である。
【図16】FORK、UNCOND_SUSPEND、SUSPEND、FORK_SUSP
ENDの各命令の形式構造のコード化の好ましい実施例を
示す1組のブロック図である。
【図17】FORK、UNCOND_SUSPEND、SUSPEND、FORK_SUSP
ENDの各命令の形式構造のコード化の好ましい実施例を
示す1組のブロック図である。
【図18】本発明で提案した命令の一部をアセンブリ・
コード・サンプルで使用した場合を示す図である。
【図19】本発明で提案した命令の一部をアセンブリ・
コード・サンプルで使用した場合を示す図である。
【図20】本発明で提案した命令の一部をアセンブリ・
コード・サンプルで使用した場合を示す図である。
【図21】2つの独立した強接続領域(「SCR」)を
並列実行するためにローカル分割命令を使用する方法を
示す図である。
【図22】ループ・アンロールのためにローカル分割命
令を使用する方法を示す図である。
【図23】代替実施例11による命令取出しユニットの
ブロック図である。
【図24】代替実施例11による完了制御論理装置のブ
ロック図である。
【符号の説明】
100 メモリ 110 命令キャッシュ 115 ポート 120 プログラム・カウンタ 130 スレッド管理ユニット 140 ディスパッチャ 141 命令バッファ 150 スケジューラ 160 レジスタ・ファイル 170 データ・キャッシュ 190 完了ユニット
───────────────────────────────────────────────────── フロントページの続き (72)発明者 チャールズ・ロバーツ・モア アメリカ合衆国78750 テキサス州オース チン ロイヤルウッド・ドライブ 8802 (72)発明者 テレンス・マシュー・ポター アメリカ合衆国78731 テキサス州オース チン トゥイン・レッジ・コーヴ 6107

Claims (16)

    【特許請求の範囲】
  1. 【請求項1】処理システムによる特定の命令を含む第1
    組の命令の実行を開始するステップであって、前記特定
    の命令が第2組の命令の指示を含むステップと、 前記特定の命令の実行と、前記処理システムが第1のタ
    イプであることに応答して、前記第2組の実行を開始し
    ながら、前記処理システムによる前記第1組の実行を続
    行するステップと、 前記特定の命令の実行と、前記処理システムが第2のタ
    イプであることに応答して、前記第2組の実行を開始せ
    ずに、前記処理システムによる前記第1組の実行を続行
    するステップとを含むことを特徴とする、命令スレッド
    を処理する方法。
  2. 【請求項2】前記第2組の実行を開始しながら、前記処
    理システムによる前記第1組の実行を続行する前記ステ
    ップが、前記第2組の推論実行を開始するステップを含
    むことを特徴とする、請求項1に記載の方法。
  3. 【請求項3】前記第1組の実行の1つまたは複数の結果
    に応答して、前記第2組の前記推論実行の1つまたは複
    数の結果を1つまたは複数のアーキテクチャ化レジスタ
    に選択的にコミットするステップをさらに含むことを特
    徴とする、請求項2に記載の方法。
  4. 【請求項4】前記特定の命令が分岐命令としてコード化
    されることを特徴とする、請求項1に記載の方法。
  5. 【請求項5】前記特定の命令がNOP命令としてコード
    化されることを特徴とする、請求項1に記載の方法。
  6. 【請求項6】前記第2組の実行を開始せずに、前記処理
    システムによる前記第1組の実行を続行する前記ステッ
    プが、前記特定の命令を命令キャッシュ線接触命令とし
    て実行するステップを含むことを特徴とする、請求項1
    に記載の方法。
  7. 【請求項7】前記第2組の実行を開始せずに、前記処理
    システムによる前記第1組の実行を続行する前記ステッ
    プが、前記特定の命令を無条件分岐命令として実行する
    ステップを含むことを特徴とする、請求項1に記載の方
    法。
  8. 【請求項8】前記第2組の実行を開始せずに、前記処理
    システムによる前記第1組の実行を続行する前記ステッ
    プが、前記特定の命令をNOP命令として実行するステ
    ップを含むことを特徴とする、請求項1に記載の方法。
  9. 【請求項9】処理システムによる特定の命令を含む第1
    組の命令の実行を開始する回路であって、 前記特定の命令が第2組の命令の指示を含む回路と、 前記特定の命令の実行と、前記処理システムが第1のタ
    イプであることに応答して、前記第2組の実行を開始し
    ながら、前記処理システムによる前記第1組の実行を続
    行する回路と、 前記特定の命令の実行と、前記処理システムが第2のタ
    イプであることに応答して、前記第2組の実行を開始せ
    ずに、前記処理システムによる前記第1組の実行を続行
    する回路とを含む処理システムを含むことを特徴とす
    る、 命令スレッドを処理するためのシステム。
  10. 【請求項10】前記処理システムが前記第1のタイプで
    あり、前記第2組を推論方式で実行することを特徴とす
    る、請求項9に記載のシステム。
  11. 【請求項11】前記処理システムがさらに、前記第1組
    の実行の1つまたは複数の結果に応答して、前記第2組
    の前記推論実行の1つまたは複数の結果を1つまたは複
    数のアーキテクチャ化レジスタに選択的にコミットする
    ように動作することを特徴とする、請求項10に記載の
    システム。
  12. 【請求項12】前記特定の命令が分岐命令としてコード
    化されることを特徴とする、請求項9に記載のシステ
    ム。
  13. 【請求項13】前記特定の命令がNOP命令としてコー
    ド化されることを特徴とする、請求項9に記載のシステ
    ム。
  14. 【請求項14】前記処理システムが前記第2のタイプで
    あり、前記特定の命令を命令キャッシュ線接触命令とし
    て実行することを特徴とする、請求項9に記載のシステ
    ム。
  15. 【請求項15】前記処理システムが前記第2のタイプで
    あり、前記特定の命令を無条件分岐命令として実行する
    ことを特徴とする、請求項9に記載のシステム。
  16. 【請求項16】前記処理システムが前記第2のタイプで
    あり、前記特定の命令をNOP命令として実行すること
    を特徴とする、請求項9に記載のシステム。
JP8011322A 1995-02-03 1996-01-25 命令スレッドを処理するための方法 Expired - Fee Related JP3048910B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US383282 1995-02-03
US08/383,282 US5724565A (en) 1995-02-03 1995-02-03 Method and system for processing first and second sets of instructions by first and second types of processing systems

Publications (2)

Publication Number Publication Date
JPH08249195A true JPH08249195A (ja) 1996-09-27
JP3048910B2 JP3048910B2 (ja) 2000-06-05

Family

ID=23512445

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8011322A Expired - Fee Related JP3048910B2 (ja) 1995-02-03 1996-01-25 命令スレッドを処理するための方法

Country Status (3)

Country Link
US (1) US5724565A (ja)
EP (1) EP0725335A1 (ja)
JP (1) JP3048910B2 (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007504535A (ja) * 2003-08-28 2007-03-01 ミップス テクノロジーズ インコーポレイテッド マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令
JP2007504541A (ja) * 2003-08-28 2007-03-01 ミップス テクノロジーズ インコーポレイテッド プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
US7472258B2 (en) 2003-04-21 2008-12-30 International Business Machines Corporation Dynamically shared group completion table between multiple threads
US7594089B2 (en) 2003-08-28 2009-09-22 Mips Technologies, Inc. Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
US7676664B2 (en) 2003-08-28 2010-03-09 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

Families Citing this family (111)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5944816A (en) * 1996-05-17 1999-08-31 Advanced Micro Devices, Inc. Microprocessor configured to execute multiple threads including interrupt service routines
US5857103A (en) * 1996-06-14 1999-01-05 Sun Microsystems, Inc. Method and apparatus for addressing extended registers on a processor in a computer system
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US6282663B1 (en) * 1997-01-22 2001-08-28 Intel Corporation Method and apparatus for performing power management by suppressing the speculative execution of instructions within a pipelined microprocessor
AU6586898A (en) * 1997-03-21 1998-10-20 University Of Maryland Spawn-join instruction set architecture for providing explicit multithreading
US6314511B2 (en) * 1997-04-03 2001-11-06 University Of Washington Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
US5913049A (en) * 1997-07-31 1999-06-15 Texas Instruments Incorporated Multi-stream complex instruction set microprocessor
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
US6249910B1 (en) * 1998-05-04 2001-06-19 Hewlett-Packard Company Apparatus and method for incrementally update static single assignment form for cloned variable name definitions
US6317820B1 (en) * 1998-06-05 2001-11-13 Texas Instruments Incorporated Dual-mode VLIW architecture providing a software-controlled varying mix of instruction-level and task-level parallelism
US6192515B1 (en) * 1998-07-17 2001-02-20 Intel Corporation Method for software pipelining nested loops
US6286027B1 (en) 1998-11-30 2001-09-04 Lucent Technologies Inc. Two step thread creation with register renaming
US6154832A (en) * 1998-12-04 2000-11-28 Advanced Micro Devices, Inc. Processor employing multiple register sets to eliminate interrupts
US6275749B1 (en) * 1998-12-22 2001-08-14 Philips Electronics North America Corporation Interrupt-controlled thread processing
US6230313B1 (en) * 1998-12-23 2001-05-08 Cray Inc. Parallelism performance analysis based on execution trace information
TW530262B (en) * 1999-02-08 2003-05-01 Matsushita Electric Ind Co Ltd Control method for procedure execution
US6564372B1 (en) * 1999-02-17 2003-05-13 Elbrus International Limited Critical path optimization-unzipping
US6341371B1 (en) * 1999-02-23 2002-01-22 International Business Machines Corporation System and method for optimizing program execution in a computer system
US6338133B1 (en) 1999-03-12 2002-01-08 International Business Machines Corporation Measured, allocation of speculative branch instructions to processor execution units
JP2000305795A (ja) * 1999-04-20 2000-11-02 Nec Corp 並列処理装置
US6535905B1 (en) 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6542991B1 (en) 1999-05-11 2003-04-01 Sun Microsystems, Inc. Multiple-thread processor with single-thread interface shared among threads
US6507862B1 (en) * 1999-05-11 2003-01-14 Sun Microsystems, Inc. Switching method in a multi-threaded processor
US6938147B1 (en) * 1999-05-11 2005-08-30 Sun Microsystems, Inc. Processor with multiple-thread, vertically-threaded pipeline
US6247027B1 (en) * 1999-05-17 2001-06-12 Sun Microsystems, Inc. Facilitating garbage collection during object versioning for space and time dimensional computing
US6542921B1 (en) 1999-07-08 2003-04-01 Intel Corporation Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
US6574725B1 (en) 1999-11-01 2003-06-03 Advanced Micro Devices, Inc. Method and mechanism for speculatively executing threads of instructions
US6675380B1 (en) * 1999-11-12 2004-01-06 Intel Corporation Path speculating instruction scheduler
JP2001147819A (ja) * 1999-11-19 2001-05-29 Fujitsu Ltd 最適化装置および記録媒体
US6573900B1 (en) * 1999-12-06 2003-06-03 Nvidia Corporation Method, apparatus and article of manufacture for a sequencer in a transform/lighting module capable of processing multiple independent execution threads
US6496925B1 (en) 1999-12-09 2002-12-17 Intel Corporation Method and apparatus for processing an event occurrence within a multithreaded processor
US6889319B1 (en) 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US6357016B1 (en) 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
US7051329B1 (en) 1999-12-28 2006-05-23 Intel Corporation Method and apparatus for managing resources in a multithreaded processor
US7058065B2 (en) 2000-02-08 2006-06-06 Mips Tech Inc Method and apparatus for preventing undesirable packet download with pending read/write operations in data packet processing
US7065096B2 (en) 2000-06-23 2006-06-20 Mips Technologies, Inc. Method for allocating memory space for limited packet head and/or tail growth
US7139901B2 (en) * 2000-02-08 2006-11-21 Mips Technologies, Inc. Extended instruction set for packet processing applications
US7076630B2 (en) 2000-02-08 2006-07-11 Mips Tech Inc Method and apparatus for allocating and de-allocating consecutive blocks of memory in background memo management
US7649901B2 (en) * 2000-02-08 2010-01-19 Mips Technologies, Inc. Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing
US20010052053A1 (en) * 2000-02-08 2001-12-13 Mario Nemirovsky Stream processing unit for a multi-streaming processor
US7032226B1 (en) 2000-06-30 2006-04-18 Mips Technologies, Inc. Methods and apparatus for managing a buffer of events in the background
US7058064B2 (en) * 2000-02-08 2006-06-06 Mips Technologies, Inc. Queueing system for processors in packet routing operations
US7502876B1 (en) 2000-06-23 2009-03-10 Mips Technologies, Inc. Background memory manager that determines if data structures fits in memory with memory state transactions map
US7165257B2 (en) * 2000-02-08 2007-01-16 Mips Technologies, Inc. Context selection and activation mechanism for activating one of a group of inactive contexts in a processor core for servicing interrupts
US7042887B2 (en) 2000-02-08 2006-05-09 Mips Technologies, Inc. Method and apparatus for non-speculative pre-fetch operation in data packet processing
US7155516B2 (en) * 2000-02-08 2006-12-26 Mips Technologies, Inc. Method and apparatus for overflowing data packets to a software-controlled memory when they do not fit into a hardware-controlled memory
US7082552B2 (en) * 2000-02-08 2006-07-25 Mips Tech Inc Functional validation of a packet management unit
US7856633B1 (en) 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US7343602B2 (en) * 2000-04-19 2008-03-11 Hewlett-Packard Development Company, L.P. Software controlled pre-execution in a multithreaded processor
US6766444B1 (en) * 2000-11-02 2004-07-20 Intel Corporation Hardware loops
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
US6898694B2 (en) * 2001-06-28 2005-05-24 Intel Corporation High instruction fetch bandwidth in multithread processor using temporary instruction cache to deliver portion of cache line in subsequent clock cycle
JP3702813B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US7047395B2 (en) * 2001-11-13 2006-05-16 Intel Corporation Reordering serial data in a system with parallel processing flows
US6874080B2 (en) * 2001-11-19 2005-03-29 Intel Corporation Context processing by substantially simultaneously selecting address and instruction of different contexts
US6895497B2 (en) * 2002-03-06 2005-05-17 Hewlett-Packard Development Company, L.P. Multidispatch CPU integrated circuit having virtualized and modular resources and adjustable dispatch priority
US6988187B2 (en) * 2002-03-21 2006-01-17 Sony Computer Entertainment Inc. Counting instructions to skip in superscaler processor
US8024735B2 (en) 2002-06-14 2011-09-20 Intel Corporation Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US7219241B2 (en) * 2002-11-30 2007-05-15 Intel Corporation Method for managing virtual and actual performance states of logical processors in a multithreaded processor using system management mode
US7404067B2 (en) * 2003-09-08 2008-07-22 Intel Corporation Method and apparatus for efficient utilization for prescient instruction prefetch
US7392516B2 (en) * 2004-08-05 2008-06-24 International Business Machines Corporation Method and system for configuring a dependency graph for dynamic by-pass instruction scheduling
US20060080661A1 (en) * 2004-10-07 2006-04-13 International Business Machines Corporation System and method for hiding memory latency
US7506325B2 (en) 2004-10-07 2009-03-17 International Business Machines Corporation Partitioning processor resources based on memory usage
US7747993B2 (en) * 2004-12-30 2010-06-29 Michigan Technological University Methods and systems for ordering instructions using future values
US20060229638A1 (en) * 2005-03-29 2006-10-12 Abrams Robert M Articulating retrieval device
US7627864B2 (en) * 2005-06-27 2009-12-01 Intel Corporation Mechanism to optimize speculative parallel threading
EP2477109B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US8677105B2 (en) 2006-11-14 2014-03-18 Soft Machines, Inc. Parallel processing of a sequential program using hardware generated threads and their instruction groups executing on plural execution units and accessing register file segments using dependency inheritance vectors across multiple engines
US20080184019A1 (en) * 2007-01-30 2008-07-31 International Business Machines Corporation Method for embedding short rare code sequences in hot code without branch-arounds
US8832702B2 (en) 2007-05-10 2014-09-09 Freescale Semiconductor, Inc. Thread de-emphasis instruction for multithreaded processor
US8095932B2 (en) * 2007-08-14 2012-01-10 Intel Corporation Providing quality of service via thread priority in a hyper-threaded microprocessor
US8413151B1 (en) 2007-12-19 2013-04-02 Nvidia Corporation Selective thread spawning within a multi-threaded processing system
US8615770B1 (en) 2008-08-29 2013-12-24 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US8959497B1 (en) * 2008-08-29 2015-02-17 Nvidia Corporation System and method for dynamically spawning thread blocks within multi-threaded processing systems
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US9189233B2 (en) * 2008-11-24 2015-11-17 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
CN102063289B (zh) * 2010-09-07 2013-10-16 中国科学技术大学 串行程序线程级推测执行能力评估方法和评估器
EP3156896B1 (en) 2010-09-17 2020-04-08 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
US9052890B2 (en) * 2010-09-25 2015-06-09 Intel Corporation Execute at commit state update instructions, apparatus, methods, and systems
KR101638225B1 (ko) 2011-03-25 2016-07-08 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 명령어 시퀀스 코드 블록의 실행
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
KR101636602B1 (ko) 2011-03-25 2016-07-05 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
TWI666551B (zh) 2011-05-20 2019-07-21 美商英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
KR101639854B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 상호접속 구조
US9417855B2 (en) 2011-09-30 2016-08-16 Intel Corporation Instruction and logic to perform dynamic binary translation
WO2013077876A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. A microprocessor accelerated code optimizer
EP2783280B1 (en) 2011-11-22 2019-09-11 Intel Corporation An accelerated code optimizer for a multiengine microprocessor
US8943252B2 (en) 2012-08-16 2015-01-27 Microsoft Corporation Latency sensitive software interrupt and thread scheduling
KR20150130510A (ko) 2013-03-15 2015-11-23 소프트 머신즈, 인크. 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9632825B2 (en) 2013-03-15 2017-04-25 Intel Corporation Method and apparatus for efficient scheduling for asymmetrical execution units
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
CN105210040B (zh) 2013-03-15 2019-04-02 英特尔公司 用于执行分组成块的多线程指令的方法
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9633409B2 (en) * 2013-08-26 2017-04-25 Apple Inc. GPU predication
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
US9583116B1 (en) 2014-07-21 2017-02-28 Superpowered Inc. High-efficiency digital signal processing of streaming media
JP6443125B2 (ja) * 2015-02-25 2018-12-26 富士通株式会社 コンパイラプログラム、コンピュータプログラム及びコンパイラ装置
US10503550B2 (en) 2017-09-30 2019-12-10 Intel Corporation Dynamic performance biasing in a processor

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05233283A (ja) * 1992-02-19 1993-09-10 Nec Corp 並列命令実行方式
JPH05265755A (ja) * 1992-03-24 1993-10-15 Nec Corp 並列命令実行方式

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5381033A (en) * 1976-12-27 1978-07-18 Fujitsu Ltd Instruction look-ahead control system
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
US4953078A (en) * 1987-10-28 1990-08-28 Digital Equipment Corporation Apparatus and method for multi-threaded program execution in a microcoded data processing system
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
DE69030931T2 (de) * 1989-04-24 1998-01-15 Ibm Mehrfachsequenzprozessorsystem
JPH02287626A (ja) * 1989-04-28 1990-11-27 Toshiba Corp パイプライン方式の分岐命令制御装置
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
GB2234613B (en) * 1989-08-03 1993-07-07 Sun Microsystems Inc Method and apparatus for switching context of state elements in a microprocessor
JPH0650465B2 (ja) * 1989-10-16 1994-06-29 株式会社東芝 分岐制御回路
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
JPH0433021A (ja) * 1990-05-24 1992-02-04 Nec Corp 分岐命令制御方式
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
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
JP3146077B2 (ja) * 1991-11-15 2001-03-12 松下電器産業株式会社 プロセッサ
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
JPH05224926A (ja) * 1992-02-14 1993-09-03 Kobe Nippon Denki Software Kk 条件分岐命令制御方式
JPH07200289A (ja) * 1993-12-28 1995-08-04 Fujitsu Ltd 情報処理装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05233283A (ja) * 1992-02-19 1993-09-10 Nec Corp 並列命令実行方式
JPH05265755A (ja) * 1992-03-24 1993-10-15 Nec Corp 並列命令実行方式

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7472258B2 (en) 2003-04-21 2008-12-30 International Business Machines Corporation Dynamically shared group completion table between multiple threads
JP2007504535A (ja) * 2003-08-28 2007-03-01 ミップス テクノロジーズ インコーポレイテッド マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令
JP2007504539A (ja) * 2003-08-28 2007-03-01 ミップス テクノロジーズ インコーポレイテッド プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
JP2007504541A (ja) * 2003-08-28 2007-03-01 ミップス テクノロジーズ インコーポレイテッド プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
US7594089B2 (en) 2003-08-28 2009-09-22 Mips Technologies, Inc. Smart memory based synchronization controller for a multi-threaded multiprocessor SoC
US7610473B2 (en) 2003-08-28 2009-10-27 Mips Technologies, Inc. Apparatus, method, and instruction for initiation of concurrent instruction streams in a multithreading microprocessor
US7676664B2 (en) 2003-08-28 2010-03-09 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7676660B2 (en) 2003-08-28 2010-03-09 Mips Technologies, Inc. System, method, and computer program product for conditionally suspending issuing instructions of a thread
US7694304B2 (en) 2003-08-28 2010-04-06 Mips Technologies, Inc. Mechanisms for dynamic configuration of virtual processor resources
JP4818919B2 (ja) * 2003-08-28 2011-11-16 ミップス テクノロジーズ インコーポレイテッド プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
JP4818918B2 (ja) * 2003-08-28 2011-11-16 ミップス テクノロジーズ インコーポレイテッド マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令
US9032404B2 (en) 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor

Also Published As

Publication number Publication date
EP0725335A1 (en) 1996-08-07
US5724565A (en) 1998-03-03
JP3048910B2 (ja) 2000-06-05

Similar Documents

Publication Publication Date Title
JP3048910B2 (ja) 命令スレッドを処理するための方法
US5812811A (en) Executing speculative parallel instructions threads with forking and inter-thread communication
US9311095B2 (en) Using register last use information to perform decode time computer instruction optimization
US9483267B2 (en) Exploiting an architected last-use operand indication in a system operand resource pool
US8301870B2 (en) Method and apparatus for fast synchronization and out-of-order execution of instructions in a meta-program based computing system
US7404067B2 (en) Method and apparatus for efficient utilization for prescient instruction prefetch
JP6095670B2 (ja) コンピュータ・システム内のオペランド活性情報の維持
US5778219A (en) Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
US8412914B2 (en) Macroscalar processor architecture
US6631514B1 (en) Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
US5881280A (en) Method and system for selecting instructions for re-execution for in-line exception recovery in a speculative execution processor
US9697002B2 (en) Computer instructions for activating and deactivating operands
Schlansker et al. EPIC: An architecture for instruction-level parallel processors
US20050240897A1 (en) Method and apparatus for a computing system using meta program representation
US7430737B2 (en) Processor and method for supporting compiler directed multithreading management
FitzRoy-Dale The VLIW and EPIC processor architectures
Franklin et al. Multiscalar Processor—Register Data Flow
Gontmakher et al. An architecture and programming model for Extremely Fine Grain Parallelization
Theobald et al. A Superstrand Architecture
Uht et al. Levo: A Resource-Flow Computer
Dimitriou et al. Hardware support for multithreaded execution of loops with limited parallelism

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees