JPH10187464A - マルチスカラ・プログラムを作成する方法およびシステム - Google Patents

マルチスカラ・プログラムを作成する方法およびシステム

Info

Publication number
JPH10187464A
JPH10187464A JP34343597A JP34343597A JPH10187464A JP H10187464 A JPH10187464 A JP H10187464A JP 34343597 A JP34343597 A JP 34343597A JP 34343597 A JP34343597 A JP 34343597A JP H10187464 A JPH10187464 A JP H10187464A
Authority
JP
Japan
Prior art keywords
thread
multiscalar
threads
data
instructions
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.)
Pending
Application number
JP34343597A
Other languages
English (en)
Inventor
A Carl James
ジェイムズ・エイ・カール
Marric Soumumiya
ソウムミャ・マリック
G Mcdonald Robert
ロバート・ジー・マクドナルド
L Sworthaut Edward
エドワード・エル・スォートハウト
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 JPH10187464A publication Critical patent/JPH10187464A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 マルチスカラ・データ処理のための改良され
た方法およびシステムを提供すること。 【解決手段】 選択された命令セット・アーキテクチャ
の複数の命令からマルチスカラ・プログラムを作成する
方法およびシステムを提供する。この方法によると、複
数の命令のそれぞれを、単一の入口点と複数の可能な出
口点とをそれぞれ有する複数のスレッドのうちの少なく
とも1つに割り当てる。次に複数のスレッドを記述する
スレッド・コードを作成する。このスレッド・コード
は、各データ構造体が複数のスレッドのうちのそれぞれ
1つのスレッドに関連づけられた複数のデータ構造体を
含む。前記複数のデータ構造体のそれぞれは、複数の可
能な出口点のうちの1つの選択に応答して処理される次
のデータ構造体を指定する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明の技術分野は、一般に
データ処理のための方法およびシステムに関し、詳細に
はマルチスカラ・データ処理のための方法およびシステ
ムに関する。
【0002】
【従来の技術】データ処理システムの開発では、同時に
複数の命令を実行することができるようにすることによ
ってデータ処理システムのパフォーマンス能力を大幅に
強化することが可能であることが明らかになっている。
この認識から、いくつかのプロセッサ・パラダイムが開
発され、そのそれぞれが複数の命令の同時実行を可能に
する。
【0003】スーパースカラ・プロセッサ・パラダイム
は、単一のプロセッサが、複数の命令を同時に処理する
ことができる複数の実行ユニットを備えるものである。
したがって、スーパースカラ・プロセッサは、命令を記
憶する命令キャッシュと、固定小数点命令を実行する少
なくとも1つの固定小数点ユニット(FXU)と、浮動
小数点命令を実行する浮動小数点ユニット(FPU)
と、ロードおよびストア命令を実行するロード/ストア
・ユニット(LSU)と、分岐命令を実行する分岐処理
ユニット(BPU)と、命令キャッシュから命令をフェ
ッチし、各命令を個別に検査し、各命令を好機に、場合
によっては非プログラム順序で、適切な実行ユニットに
ディスパッチして処理させるシーケンサとを備えること
ができる。さらに、スーパースカラ・プロセッサは一般
に、オペランドと実行ユニットによって実行された処理
命令の結果とを一時的に格納する限定された1組のアー
キテクチャ・レジスタを備える。命令間のデータ依存関
係を解決するために、シーケンサの制御下でアーキテク
チャ・レジスタの名前を付け替える。
【0004】最新のスーパスカラ・プロセッサは、主と
して条件付き分岐命令の動的予測に基づく命令の投機的
実行を可能にすることによって、1サイクル当たり1〜
2命令(IPC)のパフォーマンスを実現することがで
きる。スーパースカラ・プロセッサは、実行の前にプロ
グラムの制御フロー・グラフ(CFG)(すなわち基本
ブロックをリンクする制御関係)を事前に知らないた
め、IPCパフォーマンスは分岐予測確度によって必然
的に制限される。したがって、スーパースカラ・パラダ
イムのパフォーマンスを向上させるには、すでに確度が
高い分岐予測機構の確度を向上させるだけでなく、より
広い命令発行帯域幅もサポートする必要があり、それに
は命令を解析し、命令の依存関係および反依存関係を解
決するための指数関数的に複雑なシーケンサ回路が必要
である。スーパースカラ・パラダイムのパフォーマンス
上のボトルネックを克服する本質的な困難さのために、
ますます先鋭的で複雑化しているスーパースカラ・プロ
セッサの開発の収益率は、IPCパフォーマンスに換算
すると漸減している。
【0005】1つの代替処理パラダイムは、並列データ
処理システムおよび多重処理データ処理システムによっ
て実現されるものであるが、それらの間にはいくつかの
相違があると同時にいくつかの共通した特性を持ってい
る。並列データ処理システムおよび多重プロセッサ・デ
ータ処理システムは、それぞれ一般的には複数の同じプ
ロセッサを含むため、以下、まとめて複数プロセッサ・
システムと呼ぶ。これらのシステムはシステム・バスを
介してプロセッサがアクセスすることができる共有メモ
リからのプログラムを実行する。共有メモリは、処理結
果およびオペランドのための大域記憶域の役割も果た
し、処理結果およびオペランドは、異なるプロセッサ上
で実行されている命令間のデータの依存関係および反依
存関係が適切に解決されるように保証する複雑な同期化
機構によって管理される。スーパースカラ・プロセッサ
と同様に、複数プロセッサ・システムにもいくつかのパ
フォーマンス上のボトルネックがある。
【0006】複数プロセッサ・システムにおける重大な
パフォーマンス上のボトルネックは、プロセッサがシス
テム・バスを介して共有メモリに結果を記憶したり、共
有メモリからオペランドを取り出したりする際に生じる
待ち時間である。したがって、待ち時間を最小限にし、
それによって効率的な動作を実現するために、複数プロ
セッサ・システム用のコンパイラは、プログラムをいく
つかの命令グループ(タスク)に分け、それらの間の制
御およびデータの依存関係を特定し、最小限にする必要
がある。次に、それらのタスクを複数プロセッサの1つ
に割り当てて実行させる。しかし、このタスク割振り手
法は、多くのアルゴリズムに特有の命令レベル並列性
(ILP)を利用するには適さない。複数プロセッサ・
システムにおけるもう一つのパフォーマンス低下原因
は、実行のために後続タスクをディスパッチする前に、
タスク間の制御依存関係を解決する必要があることであ
る。複数プロセッサ・システムは投機的タスク実行をサ
ポートすることができないため、複数プロセッサ・シス
テム内のプロセッサは、タスク間制御依存関係が解決さ
れるのを待つ間、遊休サイクルを生じる可能性がある。
さらに、複数プロセッサ・システム用のソフトウェアの
開発は、プログラム内でフォーク情報を明示的にコード
化する必要があり、それによって複数プロセッサ・コー
ドは異なるアーキテクチャを備えたシステムに容易に移
植することができなくなるため、複雑化する。
【0007】上述の従来のスーパースカラ・パラダイム
および複数プロセッサ・パラダイムの欠点に対処し、克
服するために、最近、ハードウェア要素およびソフトウ
ェア要素の両方を含む新しい先鋭的な「マルチスカラ」
パラダイムが提案された。一般に、提案されているハー
ドウェアは、各処理ユニットがシーケンサと、プロセッ
サ間通信のための相互接続機構と、1組のレジスタとに
結合された、処理ユニットの集まりを備えている。提案
されたマルチスカラ・パラダイムによると、CFGの点
からプログラムを解析してプログラムを動的命令シーケ
ンスの連続領域を含む複数のタスクに区分化するコンパ
イラを設ける。従来の複数プロセッサ・タスクとは異な
り、マルチスカラ・コンパイラによって作成されたタス
クは、高い制御依存関係およびデータ依存関係を呈する
場合もあれば呈しない場合もある。重要なのは、シーケ
ンサがプログラムのCFGを走査して、タスクの内容を
調べなくても実行のために処理ユニットにタスクを投機
的に割り当てることができるようにするために、コンパ
イラが命令セット・アーキテクチャ(ISA)コード空
間内のタスク・ディスクリプタでCFGの詳細をコード
化する点である。
【0008】提案されたマルチスカラ・パラダイムによ
ると、プログラム内の各タスクを解析して、実行中に各
タスクがどのレジスタ値を作成する可能性があるかを調
べるコンパイラによって、レジスタ依存関係が静的に解
決される。コンパイラは次に、タスク・ディスクリプタ
内の関連づけられたレジスタ予約マスク内に各タスクに
よって作成される可能性があるレジスタ値を指定する。
所与のタスクが参照するレジスタ予約は、プログラム順
序でその所与のタスクに先行する並列実行タスクに関連
づけられたレジスタ予約マスクの共用体である。プログ
ラムの実行中、並列実行タスクによって作成される可能
性のあるレジスタ値に依存して命令を実行する処理ユニ
ットは、そのレジスタ値が転送されるかまたは先行タス
クが予約を解放するまで停止する。レジスタが解放され
るかまたは停止した処理ユニットが転送レジスタ値を受
け取ると、停止した処理ユニットのレジスタ予約マスク
内でレジスタの予約がクリアされ、停止した処理ユニッ
トは実行を再開する。レジスタ値の転送をトリガするた
めに、コンパイラはタスク内の各命令にタグ・ビットを
付加する。特定のレジスタ値を作成するタスク内の最後
の命令に付随するタグ・ビットは、プログラム順でその
タスクに後続するすべての並列実行タスクにそのレジス
タ値が転送されることを示す。一方、レジスタの解放
は、基本ISAに付加されるかまたはISA内の既存の
命令をオーバーロードすることによって作成される特殊
な解放命令によって示される。
【0009】提案されたマルチスカラ・パラダイムは、
レジスタ依存関係とは異なり、メモリ依存関係を静的に
解決することを試みず、ロードおよびストア命令を投機
実行することができるようにする。次に動的検査を行っ
て、後続タスクによって前にロードされた記憶場所にス
トアする先行タスクがないように保証する。そのような
依存関係違反が検出された場合、投機ロードを含むタス
クおよびすべての後続タスクの実行が打ち切られ、適切
な回復操作が行われる。この提案されたマルチスカラ・
アーキテクチャの詳細は、G.S.Sohi、S.E.
Breach、およびT.N.Vijaykumarに
よる「Multiscalar Processor
s」(Proc.ISCA'95 Int'l Symp
osiumon Computer Architec
ture,June,1995,pp414−425)
に記載されている。
【0010】提案されたマルチスカラ・パラダイムは、
比較的単純なスケジューリング・ハードウェアを使用し
て命令をディスパッチすることができる広い命令窓を実
現することができ、タスク間データ依存関係および予測
誤り分岐の影響をより受けにくく、ほとんどの順次プロ
グラムに存在すると考えられるILPを利用することが
できるという点で、他のパラダイムの欠点の多くを克服
する。しかし、提案されたマルチスカラ・アーキテクチ
ャにはいくつか欠点もある。第1に、タスク同期化を処
理するためにプログラムに解放命令および他のマルチス
カラ命令を挿入しているので、コード・バイナリの下位
互換性が犠牲になる。第2に、有用な仕事をまったくし
ない大量のマルチスカラ命令がプログラムに挿入される
ことによって、実際には従来のスーパースカラ・プロセ
ッサを使用した方がパフォーマンスが高くなるほどマル
チスカラのパフォーマンスが低下する可能性があること
が、マルチスカラ・シミュレーションによってわかって
いる。第3に、先行タスクから後続タスクへの処理結果
の転送をトリガするために提案されているプログラム内
の各命令に追加のビットを付加することによって、必然
的に命令経路幅が広がり、ハードウェアの複雑さが増
す。第4に、提案されているマルチスカラ・パラダイム
には、メモリへのロードおよびストアの依存関係を処理
する機構がない。第5に、提案されているマルチスカラ
・アーキテクチャでは、最も古いタスクを除くすべての
タスクが投機実行され、その結果、タスク予測確度が9
0%であったとしても、5番目のタスクより後のタスク
の予測確度は60%を下回ることになる。
【0011】
【発明が解決しようとする課題】したがって明らかなよ
うに、提案されているマルチスカラ・プロセッサ・パラ
ダイムの上記およびその他の欠点を克服する改善された
マルチスカラ・アーキテクチャを提供することが望まし
いであろう。
【0012】したがって、本発明の目的はデータ処理の
ための改良された方法およびシステムを提供することで
ある。
【0013】本発明の他の目的は、マルチスカラ・デー
タ処理のための改良された方法およびシステムを提供す
ることである。
【0014】
【課題を解決するための手段】上記の目的は、以下に述
べるようにして達成される。選択された命令セット・ア
ーキテクチャの複数の命令からマルチスカラ・プログラ
ムを作成する方法およびシステムを提供する。この方法
によると、各命令を、それぞれが単一の入口点と複数の
可能な出口点とを有する複数のスレッドのうちの少なく
とも1つに割り当てる。次に、複数のスレッドを記述す
るスレッド・コードを作成する。このスレッド・コード
は、それぞれが複数のスレッドのうちの1つに関連づけ
られた複数のデータ構造を含む。複数のデータ構造のそ
れぞれは、複数の可能な出口点のうちの1つの選択に応
答して処理される次のデータ構造を指定する。
【0015】本発明の上記およびその他の目的、特徴、
ならびに利点は、以下の詳細な説明を読めば明らかにな
ろう。
【0016】
【発明の実施の形態】本明細書で開示するマルチスカラ
処理パラダイムは、マルチスカラ・ハードウェアおよび
ソフトウェアの両方のアーキテクチャに改良を加えるこ
とによって、以前に提案されたマルチスカラ・パラダイ
ムの多くの欠点を克服する。マルチスカラ・プロセッサ
・ハードウェアの動作を理解しやすくするために、ま
ず、改良されたマルチスカラ・ソフトウェア・アーキテ
クチャについて概説する。
【0017】ソフトウェア・アーキテクチャ 図1を参照すると、マルチスカラ・プログラムを作成す
るプロセスを示す概念図が図示されている。図のよう
に、いくつかの高水準命令12を含む通常の高水準言語
(たとえばC++)プログラム10が、処理のためにマ
ルチスカラ・コンパイラ14に入力される。最初のパス
中に、マルチスカラ・コンパイラ14は各高水準命令1
2を、特定のプログラム順序で配列された1つまたは複
数の実行可能命令セット・アーキテクチャ(ISA)命
令16に変換する。さらに、マルチスカラ・コンパイラ
14は、ISA命令16を、それぞれが論理的に連続し
たISA命令16のグループを含む1つまたは複数のス
レッド18に区分化する。以下、本明細書では、「スレ
ッド」という用語を使用して、単一の入口点と複数の可
能な出口点とを有するマルチスカラ・プログラム内の1
つまたは複数の論理的に連続した命令のセットを指す。
言い換えると、スレッドを実行するとき、スレッド内の
最初の命令は常に実行されるが、そのスレッドからの可
能な実行経路は複数ある。重要なのは、本明細書で開示
するマルチスカラ・ソフトウェア・アーキテクチャは、
各ISA命令16を複数のスレッド18に組み込むこと
ができるようにし、従来の複数プロセッサ・ソフトウェ
ア・アーキテクチャでは必要になる明示的にプログラム
されたフォークを使用しないことである。基本ブロック
20が分岐命令によって終了する順次ISA命令のセッ
トであるという点で、スレッド18は基本ブロック20
から区別することができる。基本ブロック20には出口
点が2つしかないが、2つ以上の入口点を持つことがで
きる。マルチスカラ・コンパイラ14の最初のパスによ
って生成されるスレッド18のセットは、命令コード
(Iコード)ストリーム22を形成する。
【0018】(並列処理システムや多重プロセッサ・シ
ステムで処理されるスレッドとは異なり)スレッド18
は必ずしもデータおよび制御独立とは限らないため、複
数のスレッドの並列実行を可能にするために、実行中
に、プログラム10のCFGとスレッド間データ依存関
係とを記述する情報をマルチスカラ・プロセッサに提供
しなければならない。したがって、第2のパス中に、マ
ルチスカラ・コンパイラ14は、それぞれが複数のスレ
ッド18のうちの1つに関連づけられた複数のスレッド
・ディスクリプタ32を含むスレッド・コード(Tコー
ド)ストリーム30を生成する。各スレッド・ディスク
リプタ32は、マルチスカラ・スレッド・スケジューリ
ングと、スレッド予測と、スレッド同期化とをサポート
するために必要な情報を提供する。この情報は(図1に
図示するように)対応するスレッド18および後続スレ
ッド・ディスクリプタ32の両方を指すポインタを含
む。Iコード・ストリーム22とTコード・ストリーム
30とが組合わさって、図5を参照しながら後述するマ
ルチスカラ・データ処理システムによって実行可能なマ
ルチスカラ・プログラム34を構成する。
【0019】図3を参照すると、スレッド18に関連す
るスレッド・ディスクリプタ32の実施例の詳細図が図
示されている。図のように、スレッド・ディスクリプタ
32は、複数の32ビット項目を含むデータ構造であ
る。最初の32ビット項目は、ハードウェア維持スレッ
ド・ポインタ(TP)が示すアドレスからのオフセット
によってスレッド18内の最初のISA命令16のアド
レスを示す24ビットのIコード・ポインタ40を含
む。前述のように、Iコード・ポインタ40によって指
されているISA命令16が、スレッド18内で最初に
実行される命令になる。最初の32ビット項目には、関
連づけられているスレッド18内の可能な出口点の数を
示す4ビットも含まれる。
【0020】図のように、スレッド・ディスクリプタ3
2は、24ビットの出口ポインタ46をそれぞれ含む少
なくとも2つの32ビット項目も含む。各出口ポインタ
46にはスレッド18の可能な1つの出口点が関連づけ
られており、その関連づけられた現スレッド18の出口
点をとるかまたはとると予測された場合に、次に実行さ
れるスレッド18に関連づけられたスレッド・ディスク
リプタ32のTP相対アドレスを示す。出口ポインタ4
6を含む32ビット項目は、追加の出口情報を提供する
ために後で定義することができる8ビットの予約セクシ
ョンも含む。参照番号44で示されている予約32ビッ
ト項目を定義することによって、本明細書で開示するマ
ルチスカラ・アーキテクチャに加えられる将来の改良に
も対応することができる。
【0021】スレッド・ディスクリプタ32はさらに、
実行中にマルチスカラ・プロセッサ・ハードウェアによ
ってスレッド18に動的に挿入される補助拡張命令が入
った拡張リスト60を指す24ビットのIコード拡張ポ
インタ42を含む。拡張リスト60の長さ(すなわちそ
の中の項目数)は、32ビット項目の最後の8ビットに
よって指定される。次に拡張リスト60を参照すると、
各拡張リスト項目62には、Iコード・ポインタ(IC
P)40からのオフセットによって、スレッド18内の
ISA命令16のアドレスを指示する16ビットのアド
レス識別子64が入っている。指示された命令アドレス
によって、6ビットのopコード66によって定義され
た拡張命令を動的に挿入するスレッド18内の場所が指
定される。最後に、各拡張リスト項目62には、任意選
択でパラメータ68および70を含めることができる。
opコード66によって定義された拡張命令のタイプに
応じて、パラメータ68および70を使用して、その拡
張命令をアドレス識別子64によって指示されたISA
命令16の前に実行するか、後で実行するか、またはそ
のISA命令16と共に実行するかを示すことができ
る。当業者ならわかるように、1つのISA命令アドレ
スに複数の拡張命令を関連づけることができる。
【0022】以下に、スレッド・スケジューリング、ス
レッド予測、およびスレッド同期化に対応するために、
マルチスカラ・コンパイラ14が拡張リスト60に入れ
ることができるいくつかの拡張命令を示す。 SetExit(出口設定):スレッドの可能な出口点
をマークする。 SetStop(終了設定):もしとられた場合にマル
チスカラ実行が終了する、可能な出口点をマークする。 SetFlag(フラグ設定):レジスタまたはメモリ
のデータを後続のスレッドが使用できることを示す特定
のハードウェア維持同期化フラグ(SF)を設定する。 WaitFlag(フラグ待ち):指定SFが設定され
るまで、スレッド内の1つまたは複数の指定された命令
の実行を遅らせる。 ChainFlag(フラグ連鎖):第1のSFの設定
に応答して第2のSFを設定する。 マルチスカラ・コンパイラ14は、スレッド間データ・
ハザードによる不利を最小限にするために、SetFl
ag拡張命令およびWaitFlag拡張命令を使用し
てあらゆるスレッド間レジスタ・データ依存関係を解決
する(ただし、図5を参照しながら後述するようにハー
ドウェア・サポートも使用可能である)。したがって、
マルチスカラ・コンパイラ14は、データ値を生成する
スレッドの拡張リスト60内にSetFlag拡張命令
を作成し、そのデータ値を使用するスレッドの拡張リス
ト60内にWaitFlag拡張命令を作成することが
好ましい。さらに、2つのスレッド間の実行経路が制御
独立でない場合、マルチスカラ・コンパイラ14は、デ
ータ依存関係(または可能性のあるデータ依存関係)が
解決されたらただちに使用側のスレッドの実行を進行さ
せることができるように保証するために、代替実行経路
内にSetFlag拡張命令を作成する。
【0023】たとえば、図4を参照すると、マルチスカ
ラ・コンパイラ14によってSetFlagおよびWa
itFlag拡張命令が作成されるマルチスカラ・プロ
グラムの断片が図示されている。図のように、スレッド
Cには、レジスタGPR1およびGPR2の和を計算し
てGPR3に格納するように指定したISA命令86が
含まれている。スレッドFには、GPR3とGPR4と
の和を計算してGPR1に格納するように指定するIS
A命令88が含まれている。したがって、この例では、
スレッドCはGPR3の値の生成側であり、スレッドF
はGPR3の値の使用側である。マルチスカラ・プログ
ラム80のコンパイル中に、マルチスカラ・コンパイラ
14はWaitFlag拡張命令を、ISA命令88の
命令アドレスに関連づけられたスレッドFの拡張リスト
60に入れる。WaitFlag拡張命令は、指定され
たSFが設定されるまでISA命令88の実行(および
場合によってはスレッドF内の他の命令)が停止される
ように、WaitFlag拡張命令がスレッドFのIS
A命令88の前に入れられるように指定する。さらに、
マルチスカラ・コンパイラ14は、ISA命令86の命
令アドレスに関連づけられたスレッドCの拡張リスト6
0にSetFlag拡張命令を挿入する。SetFla
g拡張命令は、スレッドCにISA命令86の後に入れ
られるように指定する。さらに、マルチスカラ・コンパ
イラ14は、スレッドEの拡張リスト60にSetFl
ag拡張命令を挿入し、それによって、実行中に制御が
スレッドBからスレッドEに、さらにスレッドFに渡っ
た場合にスレッドFの実行がWaitFlag拡張命令
によって無用に停止されないようにする。
【0024】可能性のあるレジスタ・データ依存関係が
SetFlagおよびWaitFlag拡張命令を使用
して常に検出され、同期化されるのとは異なり、マルチ
スカラ・コンパイラ14はSetFlagおよびWai
tFlag拡張命令を使用して、あいまいさのないメモ
リ・データ・アクセス(すなわち目的アドレスを静的に
判断することができるため依存関係があるとわかってい
るメモリ・データ・アクセス)を同期化するだけであ
る。その他のメモリ・データ・アクセスはマルチスカラ
・コンパイラ14によって依存関係がないと見なされ、
データ不整合を防ぐために後述するマルチスカラ・プロ
セッサ・ハードウェアによって監視される。
【0025】再び図3を参照すると、スレッド・ディス
クリプタ32は任意選択により、ナビゲーション命令5
0のセットを指す24ビットのナビゲーション・ポイン
タ48が入った項目を含むことができる。図5を参照し
ながら後述するマルチスカラ・データ処理システムの実
施例によると、マルチスカラ・プロセッサのスレッド・
スケジューリング・ハードウェアはナビゲーション命令
50を使用してIコード・ストリーム22のCFGを非
投機的に走査する。
【0026】再び図4を参照すると、マルチスカラ・プ
ログラム80は、非投機的スレッド・スケジューリング
を容易にするために、マルチスカラ・コンパイラ14が
ナビゲーション命令50のセットを作成することができ
る事例も示す。図のように、マルチスカラ・プログラム
80のスレッドAには、変数Xを特定の値に設定するI
SA命令82が含まれている。スレッドBには、Xの値
が0以上である場合にスレッドEに制御を渡し、Xの値
が0未満の場合にスレッドCに制御を渡すようにするI
SA命令84が入っている。このマルチスカラ・プログ
ラム80を以前に提案されたマルチスカラ・プロセッサ
で実行したとすれば、シーケンサ・ハードウェアは単に
スレッドBの出口の1つを予測し、ISA命令84の実
行の前にスレッドCとEのうちの指示された一方を処理
要素に割り当てることになる。それに対して、本明細書
で開示するマルチスカラ・パラダイムによると、マルチ
スカラ・コンパイラ14はISA命令82を条件設定命
令として識別し、ISA命令84をISA命令82によ
って設定された条件に依存するスレッド間制御フロー命
令として識別する。次に、マルチスカラ・コンパイラ1
4はスレッドBのスレッド・ディスクリプタ32に、や
はりマルチスカラ・コンパイラ14によって作成された
ナビゲーション命令50のセットを指すナビゲーション
・ポインタ48を挿入する。マルチスカラ・コンパイラ
14がスレッドBのために作成するナビゲーション命令
50のセットは以下のように表すことができる。 これらのナビゲーション命令を実行時にナビゲーション
・ポインタ48を介してスレッド・スケジューラ・ハー
ドウェアに提供することによって、スレッド・スケジュ
ーラはスレッドCとEのうちの一方を非投機的実行のた
めに処理要素に対してスケジュールすることができる。
したがって、この場合、出口予測誤りによる不利がまっ
たくなくなる。マルチスカラ・コンパイラ14は、この
ような制御フロー情報をif−then−else構成
やループ構成を含む他のタイプのスレッド間制御フロー
命令についても提供することができる。重要なのは、マ
ルチスカラ・コンパイラ14によって生成されたナビゲ
ーション命令50が、拡張リスト60内の拡張ポインタ
64によって代替的にアクセスできることである。さら
に、ナビゲーション命令50は、スレッド・スケジュー
ラに変わってマルチスカラ・プロセッサの処理要素内で
実行することができる。
【0027】次に図2を参照すると、一実施例において
マルチスカラ・コンパイラ14がTコード・ストリーム
30を作成する方法の概要を示す高水準論理フローチャ
ートが図示されている。図のように、このプロセスはマ
ルチスカラ・コンパイラ14が高水準命令12をISA
命令16に変換し、ISA命令16を、前述のようにそ
れぞれが1つの入口点と複数の可能な出口点とを含む1
つまたは複数のスレッド18に区分化すると、それに応
答してブロック90から開始する。プロセスは次にブロ
ック91に進み、マルチスカラ・コンパイラ14が各ス
レッド18に関連づけられた空のスレッド・ディスクリ
プタ32を作成する。プロセスはブロック91からブロ
ック92に進み、マルチスカラ・コンパイラ14はスレ
ッド18の各可能な出口点の後にプログラム順序で次に
実行するスレッドを識別する。マルチスカラ・コンパイ
ラは出口点情報を使用して、スレッド・ディスクリプタ
32に適切な出口ポインタおよび出口カウントを挿入す
る。次に、プロセスはブロック93に進み、マルチスカ
ラ・コンパイラ14は、ISA命令16がアクセスする
レジスタIDおよびメモリ・アドレスを解析することに
よってスレッド間データ依存関係を識別する。ブロック
94に示すように、マルチスカラ・コンパイラ14はブ
ロック92で確認した出口情報とブロック93で収集し
たデータ依存関係情報とを使用して、それぞれのスレッ
ド18に関連する拡張リスト60を作成する。前述のよ
うに、拡張リスト60には、マルチスカラ・プロセッサ
・ハードウェアが識別されたスレッド間データ依存関係
を解決するため、およびスレッドの可能な出口点を識別
するために使用する拡張命令が入っている。マルチスカ
ラ・コンパイラは、各スレッド・ディスクリプタ32内
に、関連する拡張リスト60を参照するIコード拡張ポ
インタ42も作成する。プロセスは次にブロック94か
らブロック95に進み、マルチスカラ・コンパイラ14
は、各スレッド境界に隣接する制御フロー命令を解析
し、スレッドの出口点を予測する前に制御フロー命令が
依存する条件を解決することができるかどうかを判断す
る。図4を参照しながら前述したように、出口予測の前
に解決することができる制御フロー条件の検出に応答し
て、マルチスカラ・コンパイラ14は、スレッド・スケ
ジューラによって、またはスレッド・スケジューラに変
わって実行可能なナビゲーション命令50のセットを作
成し、スレッド・ディスクリプタ32内にナビゲーショ
ン・ポインタ48を挿入する。プロセスはブロック95
から、図14を参照しながら後述する任意選択ブロック
96に進んだ後、ブロック97で終了する。
【0028】再び図3を参照すると、マルチスカラ・プ
ログラム34の選択的マルチスカラ実行を可能にするた
めに、Iコード・ストリーム22は先頭付近に、ハード
ウェアTPの値を初期設定してスレッド18の並列実行
をトリガする少なくとも1つのSetTP命令を含むこ
とが好ましい。従来のプロセッサ・パラダイムとのソフ
トウェア互換性を維持するために、SetTP命令は、
ノー・オペレーション命令または分岐命令の代替形式な
ど、ISA内のめったに使用しない命令をオーバーロー
ドすることが好ましい。Iコード・ストリーム22は、
先頭付近だけでなく、その分散した場所にもSetTP
命令を含むことが好ましい。これらの追加のSetTP
命令は、マルチスカラ実行の例外またはその他の割込み
の後にスレッド18の並列実行を再開することができる
ようにし、スレッド18が並列実行されている場合には
ハードウェアによって無視される。
【0029】以上、改良されたマルチスカラ・ソフトウ
ェア・アーキテクチャの実施例の概要を説明したので、
次にハードウェア・アーキテクチャについて説明する。
【0030】ハードウェア・アーキテクチャ 図5を参照すると、マルチスカラ・データ処理システム
の実施例が図示されている。図のように、マルチスカラ
・データ処理システムは、システム・バス114を介し
てマルチスカラ・データ処理システムのシステム・メモ
リ112およびその他の図示されていない構成要素に結
合されたマルチスカラ・プロセッサ100を含む。図の
ように、マルチスカラ・プロセッサ100はプロセッサ
・インタフェース回路120を含み、プロセッサ・イン
タフェース回路120は、システム・バス114と統合
二次(L2)キャッシュ122との間でデータおよび命
令を伝達するために必要なラッチおよび支持回路を含
む。統合キャッシュであるL2キャッシュ122には、
実行中にマルチスカラ・プロセッサ100が使用するよ
うに、システム・メモリ112に入っているデータおよ
び命令の両方の一部のコピーが格納される。L2キャッ
シュ122およびシステム・メモリ112に格納されて
いるデータの間のコヒーレンシは、従来のキャッシュ・
コヒーレンシ・プロトコルを使用して維持される。マル
チスカラ・プロセッサ100はさらにアーキテクチャ・
レジスタ・ファイル124を含む。このアーキテクチャ
・レジスタ・ファイル124は、データおよび条件情報
のためのレジスタ記憶域を提供するほかに、マルチスカ
ラ・プロセッサ100が現在非投機的に実行している命
令アドレスを示す命令ポインタ(IP)126を含む。
以下で詳述するように、マルチスカラ・プロセッサ10
0は複数のスレッドを並列に実行することができ、一般
にはそのうちの1つのスレッドだけが非投機的に実行さ
れる。したがって、IP126はその非投機スレッド内
の現在の実行点をマークする。マルチスカラ・プロセッ
サ100の実行回路内で維持される情報とは異なり、ア
ーキテクチャ・レジスタ・ファイル124、L2キャッ
シュ122、およびプロセッサ・インタフェース回路1
20内の情報はコミット状態にある。すなわち、その情
報は割込み時にマルチスカラ・プロセッサ100が戻る
ことができる非投機的な整合性のある機械状態を構成す
る。
【0031】図5を続けて参照すると、マルチスカラ・
プロセッサ100の実行回路はスレッド・スケジューラ
130と、増減可能な数の同一処理要素(PE)とを含
み、この実施例ではPE132、134、136、およ
び138が含まれている。前述のマルチスカラ・ソフト
ウェア・アーキテクチャに従い、スレッド・スケジュー
ラ130は、並列実行のために複数のスレッドをPE1
32〜138に割り当てるために、マルチスカラ・プロ
グラムのTコード・ストリーム内のスレッド・ディスク
リプタを処理する。アクセス待ち時間を短縮するため
に、スレッド・スケジューラ130は、スレッド・ディ
スクリプタを格納するTコード・キャッシュ144を備
え、それによってIコード・ストリームおよびTコード
・ストリームのための別々のフェッチ経路を確立するこ
とができる。前述のように、通常は、PE132〜13
8のうちの1つのPEだけが一度に非投機的に実行す
る。実行スレッドの中でプログラム順序で最も早期に現
れるスレッドである(IP126が指す命令を含むスレ
ッドでもある)非投機的スレッドは、スレッド・スケジ
ューラ130によって維持されるスレッド・ポインタ
(TP)142によって示される。
【0032】スレッド・スケジューラ130は、スレッ
ドの出口を予測するために使用する出口予測機構140
も含む。マルチスカラ・プロセッサ100の第1の実施
例では、出口予測機構140は、マルチスカラ・コンパ
イラ14によって供給される情報に基づいてスレッドの
可能な出口のうちの1つを予測する静的予測機構を含
む。たとえば、マルチスカラ・コンパイラ14は静的に
予測された出口をスレッド・ディスクリプタ内で出口0
としてリストするよう強制され、それによってその出口
を選択すべきであることを出口予測機構140に対して
指示する。あるいは、出口予測機構140は、スーパー
スカラ・プロセッサで分岐解決を予測するために使用さ
れている機構のような履歴ベースの動的予測機構として
実施することもできる。
【0033】図のように、スレッド・スケジューラ13
0はさらに、任意のスレッド番号と共に、スレッド・ス
ケジューラ130によって選択された各出口の出口番号
を記録するスレッド・リスト(TL)146を含む。ス
レッド番号は、スレッド・スケジューラ130とPE1
32〜138との間の通信の際に、選択された出口を含
むスレッドを識別するために使用される。この実施例で
は、スレッド・スケジューラ130は、PE132〜1
38のうちのどの1つまたは複数のPEが空いているか
を4ビットの状態レジスタ148を使用して追跡する。
状態レジスタ148の各ビットの状態によってPE13
2〜138のうちの対応する1つが空いているか使用中
であるかが示される。状態レジスタ148は、スレッド
がPE132〜138のうちの1つにスケジュールされ
るたびに、またはPE132〜138のうちの1つによ
って完了するたびに更新される。
【0034】PE132〜138を参照すると、各PE
の中央構成要素は、割り当てられたスレッド内に含まれ
る命令を実行する実行コア158である。好ましい実施
例では、実行コア158はスーパースカラ回路を含む。
このスーパースカラ回路はスレッド間分岐投機をサポー
トし、各サイクル中に複数のISA命令を非プログラム
順序で実行することができる複数の実行ユニットを含
む。しかし、設計やコスト上の考慮すべき事項に基づい
て、PE132〜138の実行コア158はいくつかの
異なるハードウェア・アーキテクチャのうちのいずれか
1つを使用することもできる。たとえば、実行コア15
8は、ISA命令を順次に実行する単一の実行資源を含
むこともできる。実行コア158を実装するためにどの
ハードウェア・アーキテクチャを使用するかに関係な
く、各実行コア158は命令のフェッチおよびディスパ
ッチを行う命令シーケンサと、命令を実行する少なくと
も1つの実行資源とを含む。
【0035】関連づけられた命令キャッシュ150と、
データ・キャッシュ156と、GPRキャッシュ154
とによって、各実行コア158にローカル記憶域を提供
し、実行中にそれに関連づけられた実行コア158が必
要とするISA命令と、メモリ・データ値と、データお
よび条件レジスタ値をそれぞれ記憶する。各実行コア1
58は、実行中のスレッドに関連する拡張リストを格納
するCAM160にも結合されている。拡張リスト内の
拡張命令は、図9を参照しながら後述する方法に従っ
て、関連づけられた実行コア158によって実行される
スレッドに動的に挿入される。
【0036】PE132〜138のそれぞれは、GPR
キャッシュ154およびデータ・キャッシュ156の両
方に結合された通信/同期論理回路152をさらに含
む。通信/同期論理回路152は、ローカル通信および
同期機構170を介したPE間通信およびPE−L2間
通信によってレジスタおよびメモリのデータ・コヒーレ
ンシ(すなわち関連づけられたPEにとってのデータ可
用性)を維持する。ローカル通信および同期機構170
は、待ち時間を短縮するために、レジスタ通信用の4本
の並列アドレス・バスと、メモリ通信用の少なくとも1
本のアドレス・バスとを備えることが好ましい。ローカ
ル通信および同期機構170を介した通信は、アービト
レーション論理回路172の制御下で行われる。ローカ
ル通信および同期機構170の詳細は、J.L.Hen
essyおよびD.A.Pattersonの「Com
puter Architecture:A Quan
titative Approach」(第2版、Mo
rgan KaufmannPublishers,I
nc.,pp.655−693)に記載されている。通
信/同期論理回路152によって行われるPE間および
PE−L2間通信は、図13および図14に図示するデ
ータ・コヒーレンシ・プロトコルによって管理される。
【0037】次に図13および図14を参照すると、レ
ジスタおよびメモリの両方のデータについてマルチスカ
ラ・プロセッサ100によって実施されるデータ・コヒ
ーレンシ・プロトコルを共に示す2つの状態図が図示さ
れている。わかりやすいように、図13にはローカル
(PE内)事象に関係するデータ・コヒーレンシ・プロ
トコルの部分が図示され、図14にはローカル通信およ
び同期機構170から受け取った外部(PE間)事象に
関係するデータ・コヒーレンシ・プロトコルの部分が図
示されている。データ・コヒーレンシ・プロトコルは5
つの状態を含むため、データ・キャッシュ156内の各
データ・ワードおよびGPRキャッシュ154内の各レ
ジスタの状態は3状態ビットを使用して追跡することが
好ましい。当業者なら、以下の説明を読めば、データ・
コヒーレンシ・プロトコルはディレクトリ・ベースのコ
ヒーレンシ機構を使用してマルチスカラ・プロセッサ1
00内で実施することもできることがわかるであろう。
【0038】まず、図13を参照すると、マルチスカラ
・プログラムの実行が開始されるとき、各PE132〜
138のGPRキャッシュ154およびデータ・キャッ
シュ156内のすべてのデータ記憶位置は最初は無効状
態500である。スレッド内の命令の受信に応答して、
PE内の実行コア158がそのローカルGPRキャッシ
ュ154またはデータ・キャッシュ156に対して命令
の実行に必要なデータを要求する。要求されたデータに
関連づけられたデータ記憶位置が無効状態500の場
合、要求されたデータはローカルには存在しないことを
意味し、通信/同期論理回路152は、必要なデータの
レジスタ番号またはメモリ・アドレスを示す読取り要求
をローカル通信および同期機構170にブロードキャス
トし、それが各PE132〜138によってスヌープさ
れる。図14に図示するように、有効状態502、ダー
ティ状態504、有効ハザード状態506、またはダー
ティ・ハザード状態508である要求されたレジスタ・
データまたはメモリ・データを有するPE内の通信/同
期論理回路152は、要求されたデータの所有を示すこ
とによってその読取り要求に応答する。要求されたデー
タが無効状態500であるPEは応答しない。アービト
レーション論理回路172が、スレッド・スケジューラ
130から入手したスレッド発行順序情報に基づいて、
プログラム順序で最も近い先行スレッドを実行している
応答PEに対して、要求データをローカル通信および同
期機構170に入れるように通知する。しかし、ローカ
ル通信および同期機構170にブロードキャストされた
読取り要求に応答するPEがない場合、要求側PE内の
通信/同期論理回路152はアーキテクチャ・レジスタ
・ファイル124またはL2キャッシュ122からそれ
ぞれ要求されたレジスタ・データまたはメモリ・データ
を取り出す。再び図13を参照すると、要求されたデー
タが要求側PEのGPRキャッシュ154またはデータ
・キャッシュ156に読み込まれると、通信/同期論理
回路152はそのデータ記憶位置の状態を無効状態50
0から有効状態502に更新する。有効状態502のデ
ータは、PEが「所有」しており、したがって後続の命
令のオペランドとして使用することができる。
【0039】図のように、通信/同期論理回路152
は、無効状態500または有効状態502のレジスタ・
データ記憶位置またはメモリ・データ記憶位置を、その
データ記憶位置にデータを書き込むストアまたは他の命
令のローカル実行に応答して、ダーティ(変更済み)状
態504に更新する。ダーティ状態504のレジスタ記
憶位置またはメモリ記憶位置は、その記憶位置に書き込
む命令のローカル実行に応答して状態を変更しない。ダ
ーティ状態504のデータ記憶位置もPEによって所有
されており、したがって後続の命令のオペランドの供給
源として使用することができるという点で、ダーティ状
態504は有効状態502と似ている。しかし、有効状
態502のデータ記憶位置とは異なり、ダーティ状態5
04のデータ記憶位置は、修正されたデータ記憶位置を
更新するためにスレッド完了中にライトバック信号の受
信に応答して通信/同期論理回路152によってアーキ
テクチャ・レジスタ・ファイル124およびL2キャッ
シュ122に書き戻される(すなわちコミット状態)。
重要なのは、スレッド完了の後に、有効状態502のデ
ータ記憶位置は状態遷移せず、ローカルまたは他のPE
内で実行される後続スレッドがアクセスすることができ
る有効データをGPRキャッシュ154およびデータ・
キャッシュ156に残しておくことである。
【0040】再び図14を参照すると、データ・コヒー
レンシ・プロトコルは有効ハザード状態506およびダ
ーティ・ハザード状態508を使用して、論理プログラ
ム順序で将来のスレッドを実行するPEによって書き込
まれたデータ記憶位置をマークする。したがって、通信
/同期論理回路152は、将来のスレッドを実行するP
Eからの書込み要求を受け取るとそれに応答して、有効
状態502のデータ記憶位置を有効ハザード状態506
に更新し、ダーティ状態504のデータ記憶位置をダー
ティ・ハザード状態508に更新する。ローカル事象お
よび外部事象に応答する有効ハザード状態506および
ダーティ・ハザード状態508の意味は、ライトバック
信号への応答を除けば、それぞれ有効状態502および
ダーティ状態504の意味と同じである。有効ハザード
状態506は将来のスレッドによって書き込まれた(し
たがって現行スレッドの実行後には有効ではない可能性
がある)ローカルで変更されていないデータ記憶位置を
マークしているため、有効ハザード状態506のデータ
記憶位置は通信/同期論理回路152によるライトバッ
ク信号の受信に応答して無効状態500に更新される。
同様に、ダーティ・ハザード状態508のデータ記憶位
置は、その内容がアーキテクチャ・レジスタ・ファイル
124またはL2キャッシュ122に書き戻された後で
無効状態500に更新される。
【0041】図14を参照すると、通信/同期論理回路
152は、例外の発生、またはデータ・ハザードもしく
は制御ハザードの検出に応答して生成されたリセット信
号の受信に応答して、すべてのローカル・データ記憶位
置の状態を無効状態500に更新する。前述のように、
すべてのローカル・データ記憶位置の状態を無効状態5
00に設定することによって、GPRキャッシュ154
およびデータ・キャッシュ156内のすべてのデータが
破棄される。
【0042】再び図5を参照すると、マルチスカラ・プ
ロセッサ100は、PE132〜138に結合され、ス
レッド間データ整合性、すなわち、マルチスカラ・プロ
グラムの実行によって順次スカラ実行の下で得られるも
のと同じ結果が得られることを検証する大域整合バッフ
ァ182をさらに含む。
【0043】マルチスカラ・プロセッサ100のこの実
施例では、実行コア158がストア命令を待ち行列化
し、ロード命令を優先実行して、メモリ・データ待ち時
間が最小になるようにするため、メモリ・データ不整合
が発生する可能性がある。メモリ・アクセスがデータ独
立であることを暗黙に仮定しているこの実施例では、メ
モリ・アクセスが実際にはスレッド間で依存している場
合にデータ不整合が生じる可能性がある。スレッド間メ
モリ・データ不整合を検出するために、大域整合バッフ
ァ182は、ロード命令およびストア命令の相対的実行
順序が保持されるように、ロード命令の目的アドレスお
よびスレッド番号と、ストア命令の目的アドレスおよび
スレッド番号とを格納する。次に、大域整合バッファ1
82は、PE132〜138によって実行された各スト
ア命令の目的アドレスを格納してあるロード・アドレス
と比較する。目的アドレスの一致が見つかり、(1)ロ
ード命令のスレッド番号が論理プログラム順序でストア
命令のスレッド番号の後にあり、(2)ロード命令を含
むスレッド内に目的アドレスへのストアを実行する中間
ストアがなく、それによってロード命令がストア命令に
依存していたことを示す場合、大域整合バッファ182
は取消し信号を発生することによって、データ不整合
(ハザード)が検出されたことを通知する。大域整合バ
ッファ182が発生した取消し信号に応答して、そのロ
ード命令を含むスレッドの後のすべてのスレッドが取り
消され、そのロード命令を含むスレッドが正しいメモリ
・データを使用して再実行される。
【0044】データ不整合の検出によるスレッドの取消
しは、設計上の考慮点に応じて、少なくとも2つの方法
で処理することができる。第1の実施例では、取消し信
号は、不整合データをロードしたスレッドを実行してい
るPEに関連づけられたスレッド・スケジューラ130
内の整合性ビットをセットする。図11を参照しながら
後述するように、整合性ビットは後で、不整合データを
ロードしたスレッドの完了中に処理される。この手法に
は、整合性ビットをスレッド処理中に1回調べるだけで
済むという利点がある。しかし、データ不整合が比較的
頻繁に発生したり、スレッドの実行の早期に発生する場
合、この手法ではスレッド取消しの前に大量の無益な作
業が行われるようになる。別法として、第2の実施例で
は、大域整合バッファ182が発生した取消し信号によ
って、不整合データをロードしたスレッドを実行してい
るPE内でビットをセットすることができる。この実施
例では、各PE132〜138が各サイクル中にその整
合性ビットを検査する必要があり、それによって待ち時
間が増大するが、この第2の実施例は、データ不整合を
できるだけ早期に検出して修正し、その結果、無益な作
業によって消費されるプロセッサ・サイクル数が最小限
になるという利点がある。
【0045】SetFlag/WaitFlag拡張命
令によってスレッド間レジスタ依存関係を識別する際の
マルチスカラ・コンパイラ14の誤りを修正するため、
または、マルチスカラ・コンパイラ14が統計的に最も
確率の高い実行経路にのみSetFlag/WaitF
lag拡張命令を挿入することができるようにするため
に、大域整合バッファ182は、スレッド間レジスタ・
データ整合性を保証する機構をさらに含むことが好まし
い。このレジスタ・データ機構には、メモリ・データ・
アクセスを処理する機構と同様に、「読取り」命令およ
び「書込み」命令の相対的実行順序を保持するようにし
てレジスタ・データの読取りおよび書込みを行う命令の
レジスタ番号およびスレッド番号が格納される。次に、
大域整合バッファ182が、命令によってデータが書き
込まれたレジスタ番号を、プログラム順序で「書込み」
命令を含むスレッドの後に続くスレッドによって前に読
み取られたすべてのレジスタの番号と比較する。この比
較によって、先行スレッド内の「書込み」命令が、同じ
レジスタを参照した「読取り」命令よりも後で実行さ
れ、「読取り」命令を含むスレッドが同じレジスタへの
中間「書込み」を含まないことがわかった場合、大域整
合バッファ182はデータ不整合が発生したことを通知
し、それによってメモリ・データ不整合の検出に関して
前述した方式で適切な修正処置をとることができるよう
にする。
【0046】最後に、マルチスカラ・プロセッサ100
は、PE132〜138がレジスタのためのスレッド間
データ整合性サポートとあいまいさのないメモリ・アク
セスとを実現するために使用する共用資源である大域同
期化フラグ(SF)180を含む。データの正しさは大
域整合バッファ182によって保証されるので、データ
の正しさのためには必要ではないが、大域SF180に
よって提供されるデータ整合性サポートは、識別された
依存関係についてデータ投機を禁止し、それによって投
機誤りによって生じるパフォーマンス上の不利を回避す
ることによってプロセッサ・パフォーマンスを向上させ
る。
【0047】次に図6を参照すると、レジスタのスレッ
ド間データ整合性とあいまいさのないメモリ・アクセス
とを保証するためにマルチスカラ・コンパイラ14によ
ってコンパイル中にスレッドに割り当てられる32個の
1ビット・フラグを含む大域SF180が詳細に図示さ
れている。スレッドがスレッド・スケジューラ130に
よって実行のためにPE132〜138の1つにスケジ
ュールされるとそのスレッドに割り当てられていたSF
がクリアされる(論理ゼロにリセットされる)。SF
は、データ値の生成に応答したSetFlag拡張命令
の実行など、同期化事象の発生に応答して論理1にセッ
トされる。SFを設定することによって、WaitFl
ag拡張命令によって停止された後続スレッドに、同期
化事象の発生に応じた計算を行うことができることを通
知する。重要なのは、最も古い(非投機的)スレッド
は、レジスタのスレッド間データ整合性およびあいまい
さのないメモリ・アクセスが保証されるため、すべての
WaitFlag拡張命令を無視することである。
【0048】マルチスカラ動作 次に図7を参照すると、マルチスカラ・プロセッサ10
0によるスレッドのパイプライン処理の概念タイミング
図が図示されている。図のように、プロセッサ100に
よるスレッドの処理は、スレッド・スケジューリング・
ステージと、スレッド実行ステージと、スレッド完了ス
テージとに分けられる。待ち時間の影響を隠すために、
マルチスカラ実行中、スレッドの処理におけるステージ
は他のスレッドの処理における同一のステージまたは異
なるステージと重なり合わされる。
【0049】スレッド処理のスレッド・スケジューリン
グ・ステージでは、スレッド・スケジューラ130によ
ってスレッドが実行のためにPE132〜138のうち
の1つに割り当てられる。上記で述べ、後で図8を参照
しながら詳述するように、スレッド・スケジューラ13
0は、ナビゲーション・コードの予測または実行によっ
てスケジュール済みのスレッドの出口点を選択すると、
選択した出口点によって指示されるスレッドを実行のた
めにPE132〜138の1つに割り当てる。
【0050】スレッド実行ステージでは、PEが割り当
てられたスレッドを実行する。PEが必要なレジスタま
たはメモリのデータを要求するために先行スレッドを実
行中のPEと通信するのは、この実行段階である。図9
を参照しながら後述するように、拡張命令がPEの実行
ストリームに動的に挿入されるのもスレッド実行ステー
ジ中である。スレッド・スケジューラ130によって選
択された出口がスレッドの実行によって確定した場合、
スレッドはスレッド完了ステージに入る。しかし、実行
時にスレッド・スケジューラ130によって選択された
出口とは異なるスレッドの出口がとられた場合、それよ
り後続のスレッドはすべて取り消される。
【0051】後で図11を参照しながら詳述するよう
に、スレッド処理の完了ステージ中に、正常に完了する
スレッドのすべての修正されたレジスタおよびメモリ・
データが、アーキテクチャ・レジスタ・ファイル124
およびL2キャッシュ122に書き戻される。必要なす
べてのデータがスレッド実行ステージ中に後続のスレッ
ドを実行するPEに転送されるため、スレッド完了ステ
ージは他の処理ステージと完全に重なり合い、それによ
って待ち時間が隠蔽される。
【0052】次に図8を参照すると、図5に示すマルチ
スカラ・データ処理システムの実施例による、スレッド
を実行のためにスケジュールする方法の高水準論理フロ
ーチャートが図示されている。図8に示すプロセスにつ
いて、図12に図示されているマルチスカラ・プログラ
ム例を参照しながら説明する。図のように、プロセス
は、図5に示すマルチスカラ・データ処理システムのオ
ペレーティング・システムが、選択されたコマンドに応
答してマルチスカラ・プログラム400をロードするブ
ロック200から始まる。プロセスは次に、ブロック2
00からブロック202に進み、マルチスカラ・プロセ
ッサ100は、PE132〜138のうちの1つのPE
上でISA命令402から始まるISA命令を実行す
る。次に、プロセスはブロック204に進み、ISA命
令404などのSetTP命令が実行されたかどうかを
判断する。実行されていない場合、ブロック204から
ブロック202に戻るプロセスによって示されているよ
うに、PE132〜138のうちの1つのPE上でIS
A命令のスカラ実行が続行される。
【0053】再びブロック204を参照すると、スレッ
ド・ディスクリプタ406の基底アドレスを指定するS
etTP命令404の実行に応答して、プロセスはブロ
ック204からブロック210に進む。ブロック210
では、マルチスカラ・プロセッサ100がスレッド・デ
ィスクリプタ406の基底アドレスをスレッド・スケジ
ューラ130のTP142にロードすることによって、
マルチスカラ・プログラム400のマルチスカラ実行を
開始する。次に、ブロック212に示すように、スレッ
ド・スケジューラ130はスレッド・ディスクリプタ4
06内に指定されているIコード・ポインタとIコード
拡張ポインタとを、現在TL146内で割り振られてい
るスレッド番号と競合しないスレッド番号と共にPE1
32〜138のうちの空いている1つのPEに渡す。ブ
ロック213に示すように、次に状態レジスタ148が
更新され、スレッドが割り当てられたPEが使用中であ
ることを示す。
【0054】プロセスはブロック213から214に進
み、スレッド・ディスクリプタ406にナビゲーション
・ポインタが含まれているかどうかを判断する。前述の
ように、スレッド・ディスクリプタ406内にナビゲー
ション・ポインタがある場合は、マルチスカラ・コンパ
イラ14が、スレッド406の可能な出口点のうちのど
れをとるかを決定するスレッド間制御依存関係を解決す
るために実行することができるナビゲーション命令のセ
ットを作成したことを示している。スレッド・ディスク
リプタ406にナビゲーション・ポインタが含まれてい
ないとスレッド・スケジューラ130が判断した場合、
それに応答してプロセスはブロック216に進み、出口
予測機構140がスレッド408の出口を予測する。プ
ロセスは次にブロック216からブロック220に進
む。しかし、ブロック214で、スレッド・ディスクリ
プタ406にナビゲーション・ポインタが含まれている
と判断された場合、それに応答してスレッド・スケジュ
ーラ130はそのナビゲーション・ポインタによって指
し示されたナビゲーション命令のセットをロードし、ブ
ロック218に示すようにスレッド408の出口を決定
するためにナビゲーション命令を実行する。当業者なら
わかるように、スレッド・スケジューラ130でナビゲ
ーション命令を実行するためには、スレッド・スケジュ
ーラ130内に簡単な算術演算および制御フロー実行回
路を組み込む必要がある。また、スレッド・スケジュー
ラ130に変わってPE132〜138のうちの1つの
PE内でナビゲーション命令を実行することも可能であ
る。ブロック216または218のいずれかでスレッド
408の出口を決定した後、プロセスはブロック220
に進み、選択された出口番号をスレッド番号と共にTL
146に入力する。プロセスは次にブロック230に進
む。
【0055】ブロック230は、ブロック216および
218のうちの一方で選択された出口がスレッド・ディ
スクリプタ406でマルチスカラ実行の終了点としてマ
ークされているかどうかを判断する。終了点としてマー
クされている場合、プロセスはブロック202に戻り、
マルチスカラ・プロセッサ100は再びPE132〜1
38のうちの1つのPEを使用してマルチスカラ・プロ
グラム400内のISA命令を実行する。しかし、ブロ
ック230で、選択された出口がマルチスカラ・コンパ
イラ14によってマルチスカラ実行の終了点としてマー
クされていないと判断された場合、それに応答して、プ
ロセスはブロック232に進む。ブロック232では、
スレッド・スケジューラ130が、選択された出口に関
連づけられたスレッド・ディスクリプタ406内の出口
ポインタによって指し示されたスレッド・ディスクリプ
タ410をロードする。その後、プロセスは前述のブロ
ック212に戻る。
【0056】次に図9を参照すると、マルチスカラ・プ
ロセッサ100の各PE132〜138内で命令のフェ
ッチおよびディスパッチを行う方法の高水準論理フロー
チャートが図示されている。記載されているプロセス
は、PE132〜138のそれぞれによって個々に使用
されるものであるが、説明を簡単にするためにPE13
2のみについて言及する。図のように、プロセスはPE
132がスレッド・スケジューラ130からIコード・
ポインタと、Iコード拡張ポインタと、スレッド番号と
を受け取るとそれに応答してブロック250から始ま
る。プロセスは次にブロック252および254に進
み、PE132はIコード・ポインタによって指定され
たIコードを命令キャッシュ150にロードし、Iコー
ド拡張ポインタによって指定された拡張リストをCAM
160にロードする。次に、プロセスはブロック256
に進み、実行コア158内の命令シーケンサが、次に実
行するISA命令の命令アドレスを決定する。次に、ブ
ロック258に示すように、ブロック256で計算され
た命令アドレスを使用して1つまたは複数の命令が命令
キャッシュ150からフェッチされる。プロセスはブロ
ック258からブロック260に進み、ブロック258
でフェッチされたいずれかの命令の命令アドレスが、C
AM160内に記憶されている拡張命令の命令アドレス
と一致しているかどうかを判断する。一致するものがな
い場合、プロセスはブロック264に進む。しかし、命
令キャッシュ150からフェッチされたISA命令の命
令アドレスと一致するものがCAM160内にあると判
断された場合、それに応答してCAM160は拡張命令
のopコードを実行コア158の命令シーケンサに供給
し、命令シーケンサはその拡張命令opコードを拡張命
令によって指示された命令ストリーム内の点に挿入す
る。プロセスは次にブロック264に進み、実行コア1
58の命令シーケンサが1つまたは複数のISA命令お
よび拡張命令を実行のために実行資源にディスパッチす
る。その後、プロセスは前述のブロック256に戻る。
【0057】次に図10を参照すると、PE132の実
行コア158内で命令を実行する方法の高水準論理フロ
ーチャートが図示されている。図のように、プロセス
は、実行コア158の実行資源が命令シーケンサによっ
てディスパッチされた少なくとも1つの命令を受け取る
とそれに応答してブロック280から開始される。その
後、プロセスはブロック282に進み、実行コア158
の実行資源が命令をデコードする。次に、ブロック28
4で、ディスパッチされた命令がWaitFlag拡張
命令であるかどうかを判断する。WaitFlag拡張
命令である場合、プロセスはブロック285に進み、実
行しているスレッドが最も古い(非投機的)スレッドで
あるかどうかが実行コア158によって判断される。た
とえば、実行コア158は、PE132〜138内で実
行するスレッドの順序づけを追跡するスレッド・スケジ
ューラ130に照会することによって、最も古いスレッ
ドを実行しているかどうかを判断することができる。実
行コア158が最も古いスレッドを実行していると判断
した場合、データ整合性が保証されているため、その判
断に応答してWaitFlag拡張命令は単に廃棄され
る。しかし、実行コア158が最も古いスレッドを実行
していないと判断された場合、それに応答してプロセス
はブロック286に進み、実行コア158は、大域SF
180のうちの指定された1つの大域SFが設定される
まで少なくとも1つの命令の実行を停止することによっ
て、WaitFlag拡張命令を実行する。好ましい実
施例によると、WaitFlag拡張命令は、スレッド
内の後続ISA命令またはすべてのISA命令を停止す
べきかどうかを指定する。プロセスは次に、実行資源が
次の命令を受け取るまで、ブロック308で終了する。
【0058】ブロック284に戻って、ディスパッチさ
れた命令がWaitFlag拡張命令ではないと判断さ
れた場合、それに応答してプロセスはブロック288に
進み、ディスパッチされた命令がSetFlag拡張命
令であるかどうかが判断される。SetFlag命令で
ある場合、プロセスはブロック290に進み、実行コア
158がSetFlag拡張命令によって指示された大
域SF180のうちの1つを設定する。プロセスはその
後、ブロック308に進み、実行資源が次の命令を受け
取るまで終了する。
【0059】ブロック288で、ディスパッチされた命
令がSetFlag拡張命令ではないと判断された場
合、プロセスはブロック300に進み、ディスパッチさ
れた命令がSetExit拡張命令であるかどうかが判
断される。SetExit命令である場合、プロセスは
ブロック302に進み、実行コア158は実行中のスレ
ッドのスレッド番号と、SetExit拡張命令によっ
てマークされた出口番号とをスレッド・スケジューラ1
30に通知する。実行コア158は、拡張リスト60内
のSetExit拡張命令のパラメータから該当する出
口番号を判断することが好ましい。次に、PE132は
ブロック308でスレッドの実行を終了し、スレッド番
号および出口番号をスレッド・スケジューラ130に送
ることによって、図11に示すスレッド完了プロセスを
開始する。
【0060】ブロック300で、ディスパッチされた命
令がSetExit拡張命令ではないと判断された場
合、それに応答してプロセスはブロック304に進み、
ディスパッチされた命令がSetStop拡張命令であ
るかどうかを判断する。SetStop拡張命令である
場合、プロセスはブロック306に進み、PE132が
スレッド・スケジューラ130にマルチスカラ・プログ
ラムのマルチスカラ実行を停止するように通知する。そ
の後、PE132はブロック308でスレッドの実行を
終了し、前述のようにして図11に示すスレッド完了プ
ロセスを開始する。したがって、図12に示すように、
スレッド420の出口でSetStop拡張命令が実行
された場合、マルチスカラ・プログラム400の実行が
1つのPE上でスカラ方式で続行される。
【0061】再び図10を参照すると、ブロック304
で、ディスパッチされた命令がSetStop拡張命令
ではないと判断された場合、それに応答して、プロセス
はブロック310〜318に進み、実行コア158によ
ってISA命令が実行される。まずブロック310を参
照すると、実行コア158からの読取り信号に応答し
て、ISA命令を実行するのに必要なソース・データが
すべてGPRキャッシュ154およびデータ・キャッシ
ュ156内でデータ・コヒーレンシ状態502〜508
のいずれかの状態でローカルに使用可能かどうかが判断
される。使用可能な場合、プロセスはブロック315に
進み、実行コア158は必要なデータにローカルでアク
セスすることができることを示す。しかし、必要なデー
タをローカルで所有していないと判断された場合、それ
に応答してプロセスはブロック311に進み、通信/同
期論理回路152が必要なメモリ・アドレスまたはレジ
スタ番号を示す読取り要求をローカル通信および同期機
構170を介して他のPEに送る。前述のように、デー
タ・コヒーレンシ状態502〜508のいずれかの状態
の要求されたデータを有するPEが、要求されたデータ
の所有を示すことによって読取り要求に応答する。次
に、アービトレーション論理回路172が、論理プログ
ラム順序で最も近い先行スレッドを実行する応答PE
に、要求データをローカル通信および同期機構170に
送るように指示する。ブロック312に示すように、P
Eが読取り要求に応答した場合、プロセスはブロック3
14に進む。しかし、PE132〜138のいずれも読
取り要求に応答しない場合、プロセスはブロック313
に進み、PEは必要なデータをコミット状態、すなわち
L2キャッシュ122またはアーキテクチャ・レジスタ
・ファイル124からフェッチする。次にプロセスはブ
ロック314に進み、通信/同期論理回路152が、要
求されたデータが入っているローカルのデータ記憶位置
のデータ・コヒーレンシ状態を有効状態502に更新す
る。その後、プロセスはブロック315に進む。
【0062】ブロック315では、通信/同期論理回路
がISA命令のデータを入手するためにアクセスされた
メモリ・アドレスおよびレジスタ番号を大域整合バッフ
ァ182に通知する。前述のように、大域整合バッファ
182は、プログラム順序で現行スレッドより先行する
スレッドによって書き込まれたデータ記憶位置と後で比
較するために、それらのデータ記憶位置識別子を記録す
る。プロセスは次にブロック316に進み、実行コア1
58の実行資源がISA命令を実行し、場合によっては
結果データを生成し、それがローカルのデータ記憶位置
に書き込まれる。ブロック317に示すように、通信/
同期論理回路は次に、ISA命令の実行によって書き込
まれるレジスタ番号またはメモリ・アドレスがある場合
は、それを示す書込み要求をブロードキャストする。図
14を参照しながら前述したように、プログラム順序で
通知スレッドより後のスレッドを実行しており、有効状
態502またはダーティ状態504の指示されたデータ
記憶位置を有するPE内の通信/同期論理回路152
は、指示されたデータ記憶位置を有効ハザード状態50
6およびダーティ・ハザード状態508のうちの適切な
一方に更新する。データ依存関係がないか検査するため
に、ブロック317でブロードキャストされたデータ記
憶位置識別子も大域整合バッファ182によって処理さ
れる。プロセスはブロック317からブロック318に
進み、通信/同期論理回路152は必要であればISA
命令の実行に応答して書き込まれたデータ記憶位置のロ
ーカル状態を更新する。その後、プロセスはブロック3
08に進み、次の命令が実行のために実行コア158の
実行資源にディスパッチされるまで終了する。
【0063】図11を参照すると、マルチスカラ・プロ
セッサ100内でのスレッド完了の方法を示す高水準フ
ローチャートが図示されている。例示の実施例によれ
ば、スレッドは論理プログラム順に完了される。図のよ
うに、プロセスはスレッド・スケジューラ130がPE
132〜138の1つからスレッド番号および出口番号
を受信するとそれに応答してブロック320で開始され
る。プロセスは次にブロック321に進み、指定された
スレッドの実行中にデータ依存関係が検出されたかどう
かが判断される。依存関係が検出された場合、プロセス
はブロック328に進み、スレッド・スケジューラが通
知PEにリセット信号を送ってローカル・データを無効
化し、指定されたスレッドを通知PE内で実行するため
にスケジュールし直す。その後、プロセスはブロック3
44で終了する。再びブロック321を参照して、指定
されたスレッドの実行中にデータ依存関係が検出されな
かったと判断された場合、それに応答してプロセスはブ
ロック322に進む。
【0064】ブロック322では、スレッド・スケジュ
ーラ130が通知PEから受け取った実際の出口番号を
TL146内の指示されたスレッド番号に関連づけられ
た選択された出口番号と比較する。ブロック324に示
すように、次に、通知PEによって示された実際の出口
番号がTL146内のスレッド番号に関連づけられた予
測出口番号と一致するかどうかが判断される。一致する
場合、プロセスは後述するブロック340に進む。しか
し、実際の出口番号がTL146内に記録された出口番
号と一致しない場合、プロセスはブロック330に進
み、スレッド・スケジューラ130が、プログラム順序
で指定スレッドより後続のスレッドを実行しているすべ
てのPEにリセット信号を送る。ブロック330に示す
ように、制御(データではない)ハザードが発生する
と、すべての後続投機スレッドを取り消す必要がある。
プロセスは次にブロック332に進み、スレッド・スケ
ジューラ130は状態レジスタ148を更新して、実行
が取り消されたPEに空きのマークを付ける。次に、プ
ロセスはブロック334に進み、スレッド・スケジュー
ラ130は(図8に示す方法に従って)正しい実行経路
内でスレッドをスケジュールする。プロセスは次にブロ
ック340に進む。
【0065】ブロック340で、スレッド・スケジュー
ラ130は通知PEにライトバック信号を送る。PE
は、ライトバック信号の受信に応答してダーティ状態5
04およびダーティ・ハザード状態508のデータをす
べて、アーキテクチャ・レジスタ・ファイル124およ
びL2キャッシュ122のうちの該当する一方に書き戻
す。さらに、L2キャッシュ122内の更新された記憶
位置の状態を有効とマークする。プロセスは次にブロッ
ク340からブロック342に進み、スレッド・スケジ
ューラ130は、通知PEが空き状態であることを示す
ように状態レジスタ148を更新する。さらに、完了し
たスレッドの実際の出口点に関連づけられた出口ポイン
タによって示されたスレッド・ディスクリプタを指すよ
うにTP142が更新される。その後、プロセスはブロ
ック344で終了する。
【0066】以上で述べたスレッド処理のプロセスで、
マルチスカラ・プログラムの実行中に発生する例外はス
カラ実行モードでのみ処理される。したがって、図12
の符号430で示すように、PE132〜138は例外
の発生に応答して、単にスレッドの実行を終了し、アイ
ドル状態に戻る。次に、PE132〜138のうちの1
つで適切な例外ハンドラが実行される。その後、符号4
32に示すように、PE132〜138のうちの1つで
マルチスカラ・プログラム400内のISA命令の1つ
のスカラ実行が再開される。ISA命令の実行は、前述
のようにSetTP命令434の実行によってTP14
2がスレッド・ディスクリプタ436の基底アドレスで
初期化され、それによって複数のスレッドの同時実行が
再開されるまでスカラ・モードで続行される。
【0067】非プログラム順序(アウト・オブ・オー
ダ)動作 上記では、マルチスカラ・プログラム内のスレッドがス
レッド・スケジューラ130によって論理プログラム順
序に従ってPE132〜138に割り当てられるものと
仮定した。しかし、非プログラム順序スレッドの多くが
先行スレッドにデータ依存していない場合、投機的非プ
ログラム順序実行のためにスレッドをPE132〜13
8にスケジュールすることによってさらに高いレベルの
ILPを実現することができる。
【0068】非プログラム順序スレッド実行をサポート
するためには、前述のソフトウェアおよびハードウェア
・アーキテクチャにいくつかの強化を加えることが望ま
しい。まず、図15を参照すると、スレッドの非プログ
ラム順序実行をサポートするためにマルチスカラ・コン
パイラ14によって生成されるスレッド・ディスクリプ
タの実施例が図示されている。図3と図15を比較する
と明らかなように、図15に図示されているスレッド・
ディスクリプタ32は図3に図示されているものと同じ
であるが、メタスレッド・リスト・ポインタ43が組み
込まれている点が異なる。メタスレッド・リスト・ポイ
ンタ43は、1つまたは複数の24ビット・メタスレッ
ド・ポインタ53を含むメタスレッド・リスト51の、
TP142を基準にした基底アドレスを示す24ビット
・ポインタである。図のように、各メタスレッド・ポイ
ンタ53は、非プログラム順序実行のためにPE132
〜138の1つにスケジュールされるメタスレッド55
に関連づけられたスレッド・ディスクリプタ32の基底
アドレスを指定する。Iコード・ポインタ40によって
指し示されるスレッド18とは異なり、メタスレッド・
ポインタ53によって間接的に指定されるメタスレッド
55は、論理的には、論理プログラム順序で先行するス
レッド18の後には続かない。メタスレッド55は、実
行経路がスレッド18に達した後は、図2のブロック9
6でマルチスカラ・コンパイラ14によって先行スレッ
ドから制御独立のものとして識別されるスレッドである
(すなわち、各メタスレッド55はスレッド18のどの
出口がとられるかに関係なく実行される)。したがっ
て、メタスレッド55は、マルチスカラ・プロセッサ1
00内のハードウェアがメタスレッド55と先行スレッ
ドとの間にある識別されていないデータ依存関係を検出
して修正するという前提に基づいて、スレッドの論理順
序づけに関して非プログラム順序で実行することができ
る。
【0069】この実施例によると、メタスレッドと先行
スレッドとの間のデータ依存関係は、スレッド完了時に
スレッド領域ごとに処理され、その際各メタスレッド
は、当該メタスレッドと、プログラム順序で次のメタス
レッドより論理的に先行する後続スレッドがある場合に
はそれらのすべての後続スレッドとを含むスレッド領域
を定義する。たとえば、図16を参照すると、論理プロ
グラム順序で示されているスレッド522〜534を含
むマルチスカラ・プログラム520が図示されている。
図のように、スレッド522は、もしとられればスレッ
ド524が実行される第1の可能な出口点540と、も
しとられればスレッド526が実行される第2の可能な
出口点542とを含む。スレッド534は、実行中に可
能な出口点540および542のうちのどちらが実際に
とられるかに関係なく実行されるため、マルチスカラ・
コンパイラ14はスレッド522に関連するスレッド・
ディスクリプタ32内にメタスレッド・ポインタ43を
作成することによって、スレッド534をスレッド52
2のメタスレッド子として指定する。図のように、スレ
ッド522と、メタスレッド534より前のすべての論
理的後続スレッドとが第1のスレッド領域550を構成
し、メタスレッド534と、次のメタスレッドより前の
すべての論理的後続スレッドとが第2のスレッド領域5
52を構成する。
【0070】マルチスカラ・プロセッサ100が第1の
スレッド領域550と第2のスレッド領域552との間
の境界を識別することができるようにするために、マル
チスカラ・コンパイラ14は、(プログラム順スレッド
実行の場合のように)メタスレッド534のスレッド・
ディスクリプタの基底アドレスを指定する可能な出口点
544に関連づけられた出口ポインタをスレッド532
のスレッド・ディスクリプタ内に作成する。さらに、マ
ルチスカラ・コンパイラ14は、出口ポインタに続く8
ビットの予約セクション内に領域境界出口識別子を作成
することによって、スレッド532の可能な出口点54
4が第1のスレッド領域550と第2のスレッド領域5
52との間のスレッド領域境界を越えることを示す。
【0071】非プログラム順序スレッド処理をサポート
するために、マルチスカラ・プロセッサ100に2つの
主なハードウェア強化を加える。第1に、スレッド・ス
ケジューラ130を修正して、前述のスレッド・スケジ
ューリング・ハードウェアの4つのインスタンスを組み
込む。スレッド・スケジューラ130の各インスタンス
を、PE132〜138がその中で実行している可能性
のある4つのスレッド領域のうちの特定の1つのスレッ
ド領域に関連づける。スレッド・スケジューラ130の
各インスタンスが別個のTL146を使用して、関連づ
けられたスレッド領域内で行われた出口予測を追跡す
る。TL146とは異なり、TP142と、状態レジス
タ148と、出口予測機構140とは、スレッド・スケ
ジューラ130の4つのインスタンスの間で共用され
る。
【0072】第2に、大域整合バッファ182は、PE
132〜138が実行できる4つの可能なスレッド領域
のうちの1つにそれぞれ関連づけられた4つのスレッド
領域バッファを含むことが好ましい。プログラム順実行
に関して前述した大域整合バッファ182の実施例と同
様に、各スレッド領域バッファには、関連づけられたス
レッド領域内のスレッドがデータを読取るレジスタ番号
およびメモリ・アドレスと、関連づけられたスレッド領
域内のスレッドがデータを書き込むレジスタ番号および
メモリ・アドレスとが蓄積される。これらのデータ記憶
位置識別子は、上述のように領域内データ整合性を検出
するのに利用される。さらに、図19を参照しながら後
述するように、スレッド領域内のスレッドによって書き
込まれたデータ記憶位置の識別子をスレッド完了中に使
用して、すべての領域間データ依存関係が守られている
かどうかを検証する。
【0073】次に図17を参照すると、非プログラム順
序スレッド実行をサポートするマルチスカラ・プロセッ
サ内でスレッドをスケジュールする方法を示す高水準論
理フローチャートが図示されている。図17には、スレ
ッド・スケジューラ130の4つのインスタンスのそれ
ぞれが、それに関連づけられたスレッド領域内のスレッ
ドをスケジュールするために実行するステップが図示さ
れている。図のように、プロセスはブロック600から
始まり、その後ブロック602〜620に進み、図8の
ブロック202〜220を参照しながら説明したように
して、スレッド・スケジューラ130の第1のインスタ
ンスがスレッド・ディスクリプタをロードし、PE13
2〜138のうちの1つのPE内で関連づけられたスレ
ッドの実行を開始し、スレッドの出口のうちの1つを選
択し、TL146に出口選択値を格納する。
【0074】プロセスはブロック620からブロック6
30に進み、選択した出口の出口タイプによって、マル
チスカラ実行を終了させるように指定されているかどう
かを判断する。そのように指定されている場合、プロセ
スはブロック602に戻り、PE132〜138のうち
の1つのPEによってスカラ実行が再開される。しか
し、ブロック630で、選択された出口の出口タイプに
よってマルチスカラ実行の終了が指定されていない場
合、それに応答してプロセスはブロック632に進み、
スレッド・スケジューラ130の第1のインスタンス
が、現在ロードされているスレッド・ディスクリプタに
メタスレッド・リスト・ポインタ43が含まれているか
どうかを判断する。含まれていない場合、プロセスは後
述するブロック640に進む。しかし、スレッド・ディ
スクリプタにメタスレッド・リスト・ポインタ43が含
まれていると判断された場合、それに応答してプロセス
はブロック634に進み、スレッド・スケジューラ13
0の第1のインスタンスが新しいスレッド領域を割り振
り、メタスレッド・リスト51内のメタスレッド・ポイ
ンタ53をスレッド・スケジューラ130の第2のイン
スタンスに渡し、それによってスレッド・スケジューラ
130の第2のインスタンスがメタスレッド55に関連
づけられたスレッド・ディスクリプタをロードし、図1
7のブロック612に示されているスレッド・スケジュ
ーリング・プロセスを開始することができるようにす
る。次にプロセスはブロック634からブロック636
に進み、スレッド・スケジューラ130の第1のインス
タンスによって、メタスレッド・リスト51内にメタス
レッド・ポインタが他にもあるかどうかが判断される。
他にもメタスレッド・ポインタがある場合、プロセスは
ブロック634に戻り、スレッド・スケジューラ130
の第1のインスタンスが次のメタスレッド・ポインタ5
3をスレッド・スケジューラ130の第3のインスタン
スに渡す。再びブロック636を参照して、メタスレッ
ド・リスト51内のすべてのメタスレッド・ポインタ5
3がスレッド・スケジューラ130の他のインスタンス
に渡されたと判断された場合、それに応答してプロセス
はブロック636からブロック640に進む。
【0075】ブロック640では、選択された出口点の
出口タイプが、2つのスレッド領域間の境界を定義する
現行スレッドの出口点を示しているかどうかが判断され
る。示していない場合、プロセスはブロック642に進
み、スレッド・スケジューラ130の第1のインスタン
スは選択された出口点に関連づけられた出口ポインタに
よって指示されるスレッド・ディスクリプタをロードす
る。次にプロセスはブロック612に戻り、スレッド・
スケジューラの第1のインスタンスが新しいスレッド・
ディスクリプタを処理する。ブロック640に戻って、
選択された出口点の出口タイプが、選択された出口点が
スレッド領域の境界を定義していることを示している場
合、それに応答してプロセスはブロック650に進み、
スレッド・スケジューラ130の第1のインスタンスは
スレッドのスケジューリングを停止し、それに関連づけ
られたスレッド領域が完了するのを待つ。当然ながら、
ブロック650でスレッド・スケジューラ130の第1
のインスタンスが待機している間にそのスレッド領域内
でデータ・ハザードまたは制御ハザードが検出された場
合、スレッド・スケジューラ130の第1のインスタン
スは適切なスレッドをスケジューリングすることによっ
て、検出されたハザードから回復する。ブロック650
の次にプロセスはブロック652に進み、スレッド・ス
ケジューラ130の第1のインスタンスは、ブロック6
34を参照しながら前述したようにして新しいスレッド
領域が割り振られるのを待つ。スレッド・スケジューラ
130の第1のインスタンスがメタスレッド・ポインタ
53を受け取ると、それに応答してプロセスは前述のブ
ロック612に戻る。
【0076】次に図18を参照すると、非プログラム順
序スレッド実行をサポートするマルチスカラ・プロセッ
サのPE内で命令を実行する方法を示す高水準論理フロ
ーチャートが図示されている。図のように、プロセス
は、図9を参照しながら説明した方法に従って、実行コ
ア158の実行資源にディスパッチされた命令を受け取
るとそれに応答してブロック680で開始する。プロセ
スは次にブロック682〜706に進む。これらのブロ
ックは図10のブロック282〜306に対応してお
り、したがってここでは詳述しない。
【0077】ブロック704で、ディスパッチされた命
令がSetStop拡張命令ではないと判断され、それ
によってディスパッチされた命令がISA命令であるこ
とが示された場合、それに応答してプロセスはブロック
710に進む。ブロック710では、ディスパッチされ
たISA命令を実行するのに必要なソース・データがい
ずれかのデータ・コヒーレンシ状態502〜508でロ
ーカルで使用可能かどうかが判断される。使用可能な場
合、プロセスはブロック715に進み、これについては
後述する。しかし、ISA命令を実行するのに必要なす
べてのソース・データがGPRキャッシュ154および
データ・キャッシュ156内でローカルに使用可能では
ない場合、プロセスはブロック711に進み、通信/同
期論理回路152がローカル通信および同期機構170
を介して、必要なデータが入っているメモリ・アドレス
またはレジスタ番号と、PEが実行しているスレッド領
域の番号とを示す読取り要求を他のPEに送る。ローカ
ル通信および同期機構170をスヌープしているPE
が、同じスレッド領域内の先行スレッドを実行してお
り、データ・コヒーレンシ状態502〜508のうちの
1つである要求データを持っている場合、そのPEが読
取り要求に応答する。ブロック712に示すように、必
要なデータが要求側PEと同じスレッド領域内のスレッ
ドを実行している他のPEから入手可能な場合、プロセ
スはブロック714に進む。しかし、ブロック712で
必要なデータが同一スレッド領域内で実行している他の
PEから入手することができないと判断された場合、そ
れに応答して、プロセスはブロック713に進み、要求
側PEは必要なデータをL2キャッシュ122またはア
ーキテクチャ・レジスタ・ファイル124からフェッチ
する。プロセスは次にブロック714に進み、通信/同
期論理回路152がアクセスされたデータの状態を有効
状態502に更新する。その後、プロセスはブロック7
15に進む。
【0078】ブロック715では、通信/同期論理回路
152がISA命令のオペランドを入手するためにアク
セスした各データ記憶位置の識別子を大域整合バッファ
182内の該当するスレッド領域バッファに送る。次
に、ブロック716に示すように、実行コア158の実
行資源がISA命令を実行する。プロセスは次にブロッ
ク717に進み、通信/同期論理回路152が、ISA
命令の実行に応答して書き込まれたメモリ・アドレスま
たはレジスタ番号を同じスレッド領域内のすべての後続
スレッドに示す書込み要求をローカル通信および同期機
構170でブロードキャストする。さらに、ブロック7
18に示すように、通信/同期論理回路152が、現行
スレッド領域に関連づけられたスレッド領域バッファに
ISA命令によって書き込まれた各データ記憶位置のレ
ジスタ番号またはメモリ・アドレスを記録する。図19
を参照しながら後述するように、現行スレッド領域内の
すべてのスレッドが完了すると、スレッド領域バッファ
内の情報を使用して領域間データ依存関係を修正する。
次にプロセスはブロック718からブロック719に進
み、通信/同期論理回路152が、ISA命令の実行に
応答して書き込まれたデータのローカル状態を更新す
る。その後、プロセスはブロック708で終了する。
【0079】次に図19を参照すると、非プログラム順
序スレッド実行をサポートするマルチスカラ・プロセッ
サ内でのスレッド完了の方法を示す高水準論理フローチ
ャートが図示されている。図のように、プロセスは実行
されたスレッドが属するスレッド領域に関連づけられた
スレッド・スケジューラ130のインスタンスがスレッ
ド番号および出口番号を受け取ると、それに応答してブ
ロック820から開始する。プロセスはブロック820
からブロック821に進み、指定されたスレッドの実行
中にデータ依存関係が検出されたかどうかが判断され
る。検出された場合、プロセスはブロック828に進
み、スレッド・スケジューラ130のインスタンスが、
通知PEにリセット信号を送ってすべてのローカル・デ
ータを無効化し、指定されたスレッドを通知PEによっ
て実行するように再スケジュールする。プロセスは次に
ページ連結符号Bを介してブロック844に進み、終了
する。
【0080】再びブロック821を参照すると、指定さ
れたスレッドの実行中にデータ依存関係が検出されなか
ったと判断されると、それに応答してプロセスはブロッ
ク822に進み、実行されたスレッドの実際の出口点に
関連づけられた出口ポインタの出口タイプが、その出口
点によってスレッド領域境界が定義されていることを示
しているかどうかが判断される。境界が定義されている
ことを示している場合、プロセスはブロック838に進
み、スレッド・スケジューラ130のインスタンスが、
現行スレッド領域内のスレッドによって書き込まれたす
べてのデータ記憶位置の識別子を、現行スレッド領域に
関連づけられたスレッド領域バッファから、直後のスレ
ッド領域内のすべてのスレッドにブロードキャストさせ
る。図14を参照しながら説明したように、後続スレッ
ド領域内のスレッドを実行するPEは、ブロードキャス
ト書込み要求を使用して有効状態502およびダーティ
状態504のデータ記憶位置のデータ・コヒーレンシ状
態を、それぞれ有効ハザード状態506およびダーティ
・ハザード状態508に更新する。さらに、現行スレッ
ド領域内のスレッドによって書き込まれたデータ記憶位
置の識別子が、直後のスレッド領域に関連づけられたス
レッド領域バッファに転送され、それによって大域整合
バッファ182が、直後のスレッド領域と現行スレッド
領域との間にスレッド間データ依存関係がないかどうか
を調べることができるようになる。プロセスは次にブロ
ック840に進む。
【0081】再びブロック822を参照すると、実行さ
れたスレッドによってとられた実際の出口がスレッド領
域境界を定義していないと判断された場合、それに応答
してプロセスはブロック824に進み、スレッド・スケ
ジューラ130のインスタンスが、通知PEから受け取
った実際の出口番号をTL146内のスレッド番号に関
連づけられた出口番号と比較する。次にブロック826
で、通知PEによって示された実際の出口番号がTL1
46内のスレッド番号に関連づけられた選択された出口
番号と一致しているかどうかを判断する。一致している
場合、プロセスはブロック840に進み、これについて
は後述する。しかし、実際の出口番号と選択された出口
番号が一致していない場合、プロセスはブロック824
からブロック830に進み、スレッド・スケジューラ1
30のインスタンスは現行スレッド領域内の完了スレッ
ドより後続のスレッドを実行しているすべてのPEにリ
セット信号を送る。したがって、プログラム順実行の場
合と異なり、非プログラム順序実行中に制御ハザードが
検出されても、同じスレッド領域内のすべての後続スレ
ッドだけを取り消せば済み、すべての後続スレッドを取
り消す必要はない。プロセスはブロック830からブロ
ック832に進み、スレッド・スケジューラ130のイ
ンスタンスは状態レジスタ148を更新して、実行が取
り消されたPEに空き状態のマークを付ける。次にプロ
セスはブロック834に進み、スレッド・スケジューラ
130のインスタンスは図17に示す方法に従って正し
い実行経路内でスレッドをスケジュールする。プロセス
は次にブロック840に進む。
【0082】ブロック840で、スレッド・スケジュー
ラ130のインスタンスは、通知PEにライトバック信
号を送り、通知PEはライトバック信号を受け取ると、
ダーティ(修正された)レジスタおよびメモリ・アドレ
スをL2キャッシュ122およびアーキテクチャ・ファ
イル124に書き戻す。プロセスは次にブロック842
に進み、スレッド・スケジューラ130のインスタンス
は状態レジスタ148を更新して、通知PEが空き状態
であることを示す。さらに、TP142を、完了したス
レッドの出口点に関連づけられたスレッドを指すように
更新する。プロセスは次にブロック844で終了する。
【0083】以上の説明から明らかなように、本明細書
で開示するマルチスカラ・ソフトウェア・アーキテクチ
ャおよびハードウェア・アーキテクチャは、従来技術の
スーパースカラ、マルチプロセッサ、およびマルチスカ
ラ・データ処理システムに優る多くの利点を備える。I
コード・ストリームと並列し、しかもIコード・ストリ
ームからは分離したTコード・ストリーム内にリンクさ
れたスレッド・ディスクリプタを設けることによって、
本発明のマルチスカラ・ソフトウェア・アーキテクチャ
は、従来技術のマルチスカラ・システムでプログラム長
が長くなることによって生じるパフォーマンスの低下を
回避する。Tコード・ストリームおよびIコード・スト
リームのために別々の処理経路を維持し、Iコード・ス
トリーム内の補助命令の動的挿入をサポートするハード
ウェアおよびソフトウェアを設けることによって、本明
細書に記載のマルチスカラ・ソフトウェア・アーキテク
チャと従来のプロセッサによって実行可能なスカラ・オ
ブジェクト・コードとの間の下位互換性を保証する。さ
らに、Iコード・ストリーム内に補助命令を動的に挿入
し、複数のスレッド内に単一の命令を組み込むことがで
きることによって、単一の命令を複数命令拡張に関連づ
けることができる。第1のスレッド内の命令であって、
特定のレジスタ値を生成し、したがってこの第1のスレ
ッドの拡張リスト内のSetFlag拡張命令に関連づ
けられている命令を、第2のスレッドにも組み込んで、
第2のスレッドの拡張リスト内の第2のSetFlag
拡張命令に関連づけることができる。
【0084】さらに、SetFlag/WaitFla
gパラダイムによって提供されるデータ整合サポートに
よって、レジスタ・アクセスおよび曖昧さのないメモリ
・アクセスの両方に使用可能な単一の実行制御機構を使
用して複数の命令を同期化することができる。従来技術
のデータ処理システムと異なり、本明細書で開示するハ
ードウェア・アーキテクチャおよびソフトウェア・アー
キテクチャは、スレッド・スケジューラで実行可能なナ
ビゲーション命令の生成によって複数のスレッドの投機
的実行および非投機的実行の両方をサポートする。スレ
ッド・スケジューラによるナビゲーション命令の実行に
より、出口予測誤りに応答して廃棄される投機的作業の
量が減少し、それによってIPCパフォーマンスが向上
する。
【0085】さらに、非プログラム順スレッド処理に関
する上記の説明から、マルチスカラ・プログラムをこの
ようにしてスレッド領域に区分化するといくつかの利点
があることがわかるであろう。第1に、領域間スレッド
対話および領域内スレッド対話に異なるプロトコルを使
用することによって領域間スレッド対話が最小限にな
る。実施例によると、非プログラム順スレッド処理のス
レッド実行ステージでスレッド間データ・コヒーレンシ
通信およびSetFlag/WaitFlag拡張命令
を使用して、同じスレッド領域内のスレッド間のデータ
・コヒーレンシおよびレジスタ・データ・コヒーレンシ
を維持する。しかし、異なるスレッド領域内のスレッド
は領域間のデータ独立性および制御独立性を前提にして
実行されるため、異なるスレッド領域内のスレッド間の
データ・コヒーレンシ通信がなくなり、レジスタ・デー
タ整合性の検証は、スレッド領域の論理プログラム順序
に従って行われるスレッド処理のスレッド完了ステージ
まで延期される。
【0086】第2に、データ整合性の検証をスレッド・
ライトバックまで遅らせることには、メタスレッドによ
って行われた計算が、メタスレッドの実行が見かけ上依
存している誤って予測された実行経路内のスレッドの投
機的実行に応答して廃棄されないという利点がある。た
とえば、図16において、スレッド534内の命令がス
レッド526内の命令への見かけのレジスタデータ依存
関係があり、スレッド522の可能な出口点542が予
測された場合、スレッド522の出口点の予測が誤って
いたと判断されると、スレッド領域552内のスレッド
534および後続スレッドは取り消されない。
【0087】第3に、非プログラム順スレッド処理中の
データ・ハザードの検出に応答して行われる回復活動に
伴うパフォーマンス上の不利は、プログラム順スレッド
処理中の制御ハザードまたはデータ・ハザードの検出に
応答して行われる回復活動よりも潜在的に小さい。上記
で説明し、図11のブロック330に図示されているよ
うに、プログラム順スレッド処理の場合、スレッド・ラ
イトバック中の制御ハザードを検出すると、処理中のス
レッドに続くすべてのスレッドを取り消す必要がある。
それに対して、スレッド領域内のスレッド間に制御ハザ
ードが検出された場合は、同じスレッド領域内の後続ス
レッドだけを取り消せば済む。したがって、制御独立の
作業の廃棄がなくなる。
【0088】第4に、各スレッド領域に共用資源の別々
のインスタンスを割り振ることによって、スレッド領域
はSF180などの有限の共用資源の使用効率を向上さ
せる。たとえば、SF180がそれぞれ32のSFの4
つのインスタンスを含み、SF180の各インスタンス
がスレッド領域0〜3のうちの1つのスレッド領域によ
って識別され、その結果、PEは、SFを設定するため
にスレッド領域番号およびSF番号の両方を送らなけれ
ばならないとする。さらに、再び図16を参照して、ス
レッド領域0内にあるスレッド522に、SF4を設定
する関連づけられたSetFlag拡張命令を有する
「書込み」命令が含まれ、スレッド領域0内にあるスレ
ッド532に、SF4が設定されるまで「読取り」命令
の実行を遅らせる関連づけられたWaitFlag拡張
命令を有する「読取り」命令が含まれているとする。こ
の実施例では、スレッド522の直後に実行するために
PE132〜138のうちの1つのPEに対してスケジ
ュールされたメタスレッド534にSF4をターゲット
とする関連づけられたSetFlag拡張命令を有する
命令が含まれている場合であっても、スレッド532内
の「読取り」命令のデータ整合性が保証される。したが
って、スレッドをスレッド領域に編成することによっ
て、異なる領域内のスレッド間の共用資源の競合が防止
され、非プログラム順序スレッドによる共用資源の使用
を追跡するために必要なプロセッサ・ハードウェアの複
雑さが最小限になる。
【0089】一実施例を特に示し、説明したが、当業者
ならこの実施例の精神および範囲から逸脱することな
く、態様および詳細に様々な変更を加えることができる
ことがわかるであろう。たとえば、実施例の態様につい
て、データ処理システム内で実施可能な特定の「方法ス
テップ」に関して説明したが、当業者なら上記の説明か
ら、この実施例はデータ処理システムと共に使用するコ
ンピュータ・プログラム製品として実施することもでき
ることがわかるであろう。そのようなコンピュータ・プ
ログラム製品は、(a)書込み不能記憶媒体(たとえば
CD−ROM)に永続的に記憶された情報、(b)書込
み可能記憶媒体(フロッピィ・ディスケットまたはハー
ド・ディスク・ドライブ)上に変更可能に記憶された情
報、または(c)コンピュータ網や電話網などの通信媒
体を介してコンピュータに伝達される情報など、様々な
信号担持媒体を介してコンピュータに送り込むことがで
きる。したがって、そのような信号担持媒体が、実施例
の方法機能を指示するコンピュータ可読命令を伝達する
場合は、代替実施態様となるものと理解されたい。
【0090】まとめとして、本発明の構成に関して以下
の事項を開示する。
【0091】(1)選択された命令セット・アーキテク
チャの複数の命令からマルチスカラ・プログラムを作成
する方法であって、前記複数の命令のそれぞれを、単一
の入口点および複数の可能な出口点をそれぞれ有する複
数のスレッドのうちの少なくとも1つのスレッドに割り
当てるステップと、前記複数のスレッドを記述し、且つ
それぞれが前記複数のスレッドの1つに関連づけられた
複数のデータ構造を含むスレッド・コードを作成するス
テップとを備え、前記複数のデータ構造のそれぞれが、
前記複数の可能な出口点のうちの1つの選択に応答し
て、処理される次のデータ構造を指定し、前記スレッド
・コードおよび前記複数の命令が組合わさって前記マル
チスカラ・プログラムを構成する、マルチスカラ・プロ
グラム作成方法。 (2)前記次のデータ構造がポインタによって指定され
ることを特徴とする、上記(1)に記載の方法。 (3)前記複数のデータ構造のうちの少なくとも1つ
が、実行中に前記複数のスレッドのうちの関連づけられ
た1つのスレッドに動的に挿入される補助命令のセット
の標識を含むことを特徴とする、上記(1)に記載の方
法。 (4)前記複数のデータ構造のそれぞれが、前記複数の
スレッドのうちの関連づけられた1つのスレッドの基底
アドレスの標識を含むことを特徴とする、上記(1)に
記載の方法。 (5)前記複数の命令のうちの少なくとも1つの命令
が、前記複数のデータ構造のうちの特定のデータ構造を
指定する開始命令を含む、上記(1)に記載の方法。 (6)マルチスカラ・プログラムを作成するシステムで
あって、選択された命令セット・アーキテクチャの複数
の命令の供給に応答して、前記複数の命令のそれぞれ
を、単一の入口点および複数の可能な出口点をそれぞれ
有する複数のスレッドのうちの少なくとも1つに割り当
てる手段と、それぞれが前記複数のスレッドの1つに関
連づけられた複数のデータ構造を含み、前記複数のデー
タ構造のそれぞれが前記複数の可能な出口点のうちの1
つの選択に応答して処理される次のデータ構造を指定す
る、前記複数のスレッドを記述するスレッド・コードを
作成する手段とを含むシステム。 (7)前記次のデータ構造がポインタによって指定され
ることを特徴とする、上記(6)に記載のシステム。 (8)前記複数のデータ構造のそれぞれが、実行中に前
記複数のスレッドのうちの関連づけられた1つのスレッ
ドに動的に挿入される補助命令のセットの標識を含むこ
とを特徴とする、上記(6)に記載のシステム。 (9)前記複数のデータ構造のそれぞれが、前記複数の
スレッドのうちの関連づけられた1つのスレッドの基底
アドレスの標識を含むことを特徴とする、上記(6)に
記載のシステム。 (10)前記複数の命令が、前記複数のデータ構造のう
ちの特定のデータ構造を指定する開始命令を含むことを
特徴とする、上記(6)に記載のシステム。 (11)マルチスカラ・プログラムおよび該マルチスカ
ラ・プログラムを担持する信号担持媒体を含み、前記マ
ルチスカラ・プログラムは、それぞれが、単一の入口点
および複数の可能な出口点をそれぞれ有する複数のスレ
ッドのうちの少なくとも1つに属する、選択された命令
セット・アーキテクチャ内の複数の命令と、前記複数の
スレッドから分離され、前記複数のスレッドの1つにそ
れぞれ関連づけられた複数のデータ構造を含むスレッド
・コードとを含み、前記複数の各データ構造のそれぞれ
が前記複数の可能な出口点のうちの1つの選択に応答し
て処理される次のデータ構造を指定するコンピュータ・
プログラム製品。 (12)前記次のデータ構造がポインタによって指定さ
れることを特徴とする、上記(11)に記載のコンピュ
ータ・プログラム製品。 (13)前記複数のデータ構造のそれぞれが、実行中に
前記複数のスレッドのうちの関連づけられた1つのスレ
ッドに動的に挿入される補助命令のセットの標識を含む
ことを特徴とする、上記(11)に記載のコンピュータ
・プログラム製品。 (14)前記複数のデータ構造のそれぞれが、前記複数
のスレッドのうちの関連づけられた1つのスレッドの基
底アドレスの標識を含むことを特徴とする、上記(1
1)に記載のコンピュータ・プログラム製品。 (15)前記複数の命令が、前記複数のデータ構造のう
ちの特定のデータ構造を指定する開始命令を含むことを
特徴とする、上記(11)に記載のコンピュータ・プロ
グラム製品。 (16)コンパイラおよび該コンパイラを担持する信号
担持媒体を含み、前記コンパイラは、選択された命令セ
ット・アーキテクチャの複数の命令の供給に応答して、
データ処理システムに、前記複数の命令のそれぞれを、
単一の入口点および複数の可能な出口点をそれぞれ有す
る複数のスレッドのうちの少なくとも1つのスレッドに
割り当てさせる命令コードと、前記複数のスレッドの1
つにそれぞれ関連づけられた複数のデータ構造を含み、
前記複数のデータ構造のそれぞれが前記複数の可能な出
口点のうちの1つの選択に応答して処理される次のデー
タ構造を指定する、前記複数のスレッドを記述するスレ
ッド・コードを前記データ処理システムに作成させる命
令コードとを含む、コンピュータ・プログラム製品。 (17)前記次のデータ構造がポインタによって指定さ
れることを特徴とする、上記(16)に記載のコンピュ
ータ・プログラム製品。 (18)前記複数のデータ構造のそれぞれが、実行中に
前記複数のスレッドのうちの関連づけられた1つのスレ
ッドに動的に挿入される少なくとも1つの補助命令のセ
ットの標識を含むことを特徴とする、上記(16)に記
載のコンピュータ・プログラム製品。 (19)前記複数のデータ構造のそれぞれが、前記複数
のスレッドのうちの関連づけられた1つのスレッドの基
底アドレスの標識を含むことを特徴とする、上記(1
6)に記載のコンピュータ・プログラム製品。
【図面の簡単な説明】
【図1】別々の命令コード(Iコード)ストリームおよ
びスレッド・コード(Tコード)ストリームを含むマル
チスカラ・プログラムを作成するプロセスを示す概念図
である。
【図2】マルチスカラ・コンパイラがマルチスカラ・プ
ログラムのTコード・ストリームを作成するためのプロ
セスの実施例を示す高水準論理フローチャートである。
【図3】図1に示すTコード・ストリーム内のスレッド
・ディスクリプタの実施例を示す図である。
【図4】SetFlagおよびWaitFlag拡張命
令によって同期化される、依存関係のある可能性のある
命令セット・アーキテクチャ(ISA)命令を含み、マ
ルチスカラ・コンパイラによって作成されたTコード・
ナビゲーション命令のセットの実行によって解決するこ
とができるスレッド間制御依存関係をさらに含む、マル
チスカラ・プログラムの断片を示す図である。
【図5】マルチスカラ・データ処理システムの実施例を
示すブロック図である。
【図6】図5に示す大域同期化フラグ(SF)を詳細に
示す図である。
【図7】スレッド・パイプラインがスレッド・スケジュ
ーリング・ステージと、スレッド実行ステージとスレッ
ド完了ステージとを含む、マルチスカラ・プログラムの
スレッドのパイプライン処理のタイミング図である。
【図8】スレッドが論理プログラム順序に従って処理さ
れる場合のスレッドのスケジューリング方法を示す高水
準論理フローチャートである。
【図9】処理要素の命令ストリームへの拡張命令の動的
挿入を図示した、処理要素内で命令のフェッチおよびデ
ィスパッチを行う方法を示す高水準論理フローチャート
である。
【図10】スレッドが論理プログラム順序で処理される
場合の処理要素内での命令の実行方法を示す高水準論理
フローチャートである。
【図11】スレッドが論理プログラム順序で処理される
場合のスレッド完了方法を示す高水準論理フローチャー
トである。
【図12】マルチスカラ・プログラムのマルチスカラ実
行がIコード・ストリーム内に埋め込まれたSetTP
命令によって開始される、マルチスカラ・プログラムを
含むスレッド・コード(Tコード)ストリームおよび命
令コード(Iコード)ストリームの実行を示す図であ
る。
【図13】ローカル事象に応答してローカル・レジスタ
およびメモリ・データのコヒーレンシを維持するために
図5に示すマルチスカラ・プロセッサ内で処理要素(P
E)が使用するプロトコルを示す状態図である。
【図14】外部事象に応答してローカル・レジスタおよ
びメモリ・データのコヒーレンシを維持するために図5
に示すマルチスカラ・プロセッサ内でPEが使用するス
ヌープ・プロトコルを示す状態図である。
【図15】スレッドの非プログラム順序実行をサポート
するために使用されるTコード・スレッド・ディスクリ
プタの実施例を示す図である。
【図16】マルチスカラ・プログラム内のスレッドを複
数のスレッド領域に区分化する様子を示す図である。
【図17】非プログラム順序実行のためにスレッドをス
ケジュールする方法を示す高水準論理フローチャートで
ある。
【図18】スレッドを非プログラム順序で処理する場合
の処理要素内の命令実行方法を示す高水準論理フローチ
ャートである。
【図19】スレッドが非プログラム順序で処理される場
合のスレッド完了方法を示す高水準論理フローチャート
である。
【符号の説明】
10 高水準言語プログラム 12 高水準命令 14 マルチスカラ・コンパイラ 16 実行可能命令セット・アーキテクチャ(ISA)
命令 18 スレッド 20 基本ブロック 22 命令コード・ストリーム 30 スレッド・コード・ストリーム 32 スレッド・ディスクリプタ 34 マルチスカラ・プログラム
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ソウムミャ・マリック アメリカ合衆国 78729 テキサス州オー スチンパートリッジ・ベンド・ドライブ 13032 (72)発明者 ロバート・ジー・マクドナルド アメリカ合衆国 78758 テキサス州オー スチングレイシー・ファームズ 2600 ナ ンバー421 (72)発明者 エドワード・エル・スォートハウト アメリカ合衆国 78726 テキサス州オー スチンヨークタウン・トレイル 10729

Claims (19)

    【特許請求の範囲】
  1. 【請求項1】選択された命令セット・アーキテクチャの
    複数の命令からマルチスカラ・プログラムを作成する方
    法であって、 前記複数の命令のそれぞれを、単一の入口点および複数
    の可能な出口点をそれぞれ有する複数のスレッドのうち
    の少なくとも1つのスレッドに割り当てるステップと、 前記複数のスレッドを記述し、且つそれぞれが前記複数
    のスレッドの1つに関連づけられた複数のデータ構造を
    含むスレッド・コードを作成するステップとを備え、 前記複数のデータ構造のそれぞれが、前記複数の可能な
    出口点のうちの1つの選択に応答して、処理される次の
    データ構造を指定し、前記スレッド・コードおよび前記
    複数の命令が組合わさって前記マルチスカラ・プログラ
    ムを構成する、 マルチスカラ・プログラム作成方法。
  2. 【請求項2】前記次のデータ構造がポインタによって指
    定されることを特徴とする、請求項1に記載の方法。
  3. 【請求項3】前記複数のデータ構造のうちの少なくとも
    1つが、実行中に前記複数のスレッドのうちの関連づけ
    られた1つのスレッドに動的に挿入される補助命令のセ
    ットの標識を含むことを特徴とする、請求項1に記載の
    方法。
  4. 【請求項4】前記複数のデータ構造のそれぞれが、前記
    複数のスレッドのうちの関連づけられた1つのスレッド
    の基底アドレスの標識を含むことを特徴とする、請求項
    1に記載の方法。
  5. 【請求項5】前記複数の命令のうちの少なくとも1つの
    命令が、前記複数のデータ構造のうちの特定のデータ構
    造を指定する開始命令を含む、請求項1に記載の方法。
  6. 【請求項6】マルチスカラ・プログラムを作成するシス
    テムであって、 選択された命令セット・アーキテクチャの複数の命令の
    供給に応答して、前記複数の命令のそれぞれを、単一の
    入口点および複数の可能な出口点をそれぞれ有する複数
    のスレッドのうちの少なくとも1つに割り当てる手段
    と、 それぞれが前記複数のスレッドの1つに関連づけられた
    複数のデータ構造を含み、前記複数のデータ構造のそれ
    ぞれが前記複数の可能な出口点のうちの1つの選択に応
    答して処理される次のデータ構造を指定する、前記複数
    のスレッドを記述するスレッド・コードを作成する手段
    とを含むシステム。
  7. 【請求項7】前記次のデータ構造がポインタによって指
    定されることを特徴とする、請求項6に記載のシステ
    ム。
  8. 【請求項8】前記複数のデータ構造のそれぞれが、実行
    中に前記複数のスレッドのうちの関連づけられた1つの
    スレッドに動的に挿入される補助命令のセットの標識を
    含むことを特徴とする、請求項6に記載のシステム。
  9. 【請求項9】前記複数のデータ構造のそれぞれが、前記
    複数のスレッドのうちの関連づけられた1つのスレッド
    の基底アドレスの標識を含むことを特徴とする、請求項
    6に記載のシステム。
  10. 【請求項10】前記複数の命令が、前記複数のデータ構
    造のうちの特定のデータ構造を指定する開始命令を含む
    ことを特徴とする、請求項6に記載のシステム。
  11. 【請求項11】マルチスカラ・プログラムおよび該マル
    チスカラ・プログラムを担持する信号担持媒体を含み、 前記マルチスカラ・プログラムは、 それぞれが、単一の入口点および複数の可能な出口点を
    それぞれ有する複数のスレッドのうちの少なくとも1つ
    に属する、選択された命令セット・アーキテクチャ内の
    複数の命令と、 前記複数のスレッドから分離され、前記複数のスレッド
    の1つにそれぞれ関連づけられた複数のデータ構造を含
    むスレッド・コードとを含み、 前記複数の各データ構造のそれぞれが前記複数の可能な
    出口点のうちの1つの選択に応答して処理される次のデ
    ータ構造を指定するコンピュータ・プログラム製品。
  12. 【請求項12】前記次のデータ構造がポインタによって
    指定されることを特徴とする、請求項11に記載のコン
    ピュータ・プログラム製品。
  13. 【請求項13】前記複数のデータ構造のそれぞれが、実
    行中に前記複数のスレッドのうちの関連づけられた1つ
    のスレッドに動的に挿入される補助命令のセットの標識
    を含むことを特徴とする、請求項11に記載のコンピュ
    ータ・プログラム製品。
  14. 【請求項14】前記複数のデータ構造のそれぞれが、前
    記複数のスレッドのうちの関連づけられた1つのスレッ
    ドの基底アドレスの標識を含むことを特徴とする、請求
    項11に記載のコンピュータ・プログラム製品。
  15. 【請求項15】前記複数の命令が、前記複数のデータ構
    造のうちの特定のデータ構造を指定する開始命令を含む
    ことを特徴とする、請求項11に記載のコンピュータ・
    プログラム製品。
  16. 【請求項16】コンパイラおよび該コンパイラを担持す
    る信号担持媒体を含み、 前記コンパイラは、 選択された命令セット・アーキテクチャの複数の命令の
    供給に応答して、データ処理システムに、前記複数の命
    令のそれぞれを、単一の入口点および複数の可能な出口
    点をそれぞれ有する複数のスレッドのうちの少なくとも
    1つのスレッドに割り当てさせる命令コードと、 前記複数のスレッドの1つにそれぞれ関連づけられた複
    数のデータ構造を含み、前記複数のデータ構造のそれぞ
    れが前記複数の可能な出口点のうちの1つの選択に応答
    して処理される次のデータ構造を指定する、前記複数の
    スレッドを記述するスレッド・コードを前記データ処理
    システムに作成させる命令コードとを含む、 コンピュータ・プログラム製品。
  17. 【請求項17】前記次のデータ構造がポインタによって
    指定されることを特徴とする、請求項16に記載のコン
    ピュータ・プログラム製品。
  18. 【請求項18】前記複数のデータ構造のそれぞれが、実
    行中に前記複数のスレッドのうちの関連づけられた1つ
    のスレッドに動的に挿入される少なくとも1つの補助命
    令のセットの標識を含むことを特徴とする、請求項16
    に記載のコンピュータ・プログラム製品。
  19. 【請求項19】前記複数のデータ構造のそれぞれが、前
    記複数のスレッドのうちの関連づけられた1つのスレッ
    ドの基底アドレスの標識を含むことを特徴とする、請求
    項16に記載のコンピュータ・プログラム製品。
JP34343597A 1996-12-16 1997-12-12 マルチスカラ・プログラムを作成する方法およびシステム Pending JPH10187464A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US76748896A 1996-12-16 1996-12-16
US08/767488 1996-12-16

Publications (1)

Publication Number Publication Date
JPH10187464A true JPH10187464A (ja) 1998-07-21

Family

ID=25079647

Family Applications (1)

Application Number Title Priority Date Filing Date
JP34343597A Pending JPH10187464A (ja) 1996-12-16 1997-12-12 マルチスカラ・プログラムを作成する方法およびシステム

Country Status (2)

Country Link
JP (1) JPH10187464A (ja)
GB (1) GB2321546B (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002530738A (ja) * 1998-11-16 2002-09-17 テレフオンアクチーボラゲツト エル エム エリクソン(パブル) 処理システムのスケジューリング
US6907517B2 (en) 2001-07-12 2005-06-14 Nec Corporation Interprocessor register succession method and device therefor
WO2009101976A1 (ja) * 2008-02-15 2009-08-20 Nec Corporation プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム
JP2016157339A (ja) * 2015-02-25 2016-09-01 富士通株式会社 コンパイラプログラム、コンピュータプログラム及びコンパイラ装置

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7548989B2 (en) 2003-07-01 2009-06-16 International Business Machines Corporation Method and system for maintaining consistency during multi-threaded processing of LDIF data

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002530738A (ja) * 1998-11-16 2002-09-17 テレフオンアクチーボラゲツト エル エム エリクソン(パブル) 処理システムのスケジューリング
US6907517B2 (en) 2001-07-12 2005-06-14 Nec Corporation Interprocessor register succession method and device therefor
WO2009101976A1 (ja) * 2008-02-15 2009-08-20 Nec Corporation プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム
JP5278336B2 (ja) * 2008-02-15 2013-09-04 日本電気株式会社 プログラム並列化装置、プログラム並列化方法及びプログラム並列化プログラム
JP2016157339A (ja) * 2015-02-25 2016-09-01 富士通株式会社 コンパイラプログラム、コンピュータプログラム及びコンパイラ装置

Also Published As

Publication number Publication date
GB2321546A (en) 1998-07-29
GB2321546B (en) 2001-03-28
GB9724439D0 (en) 1998-01-14

Similar Documents

Publication Publication Date Title
US5913925A (en) Method and system for constructing a program including out-of-order threads and processor and method for executing threads out-of-order
US5887166A (en) Method and system for constructing a program including a navigation instruction
US5961639A (en) Processor and method for dynamically inserting auxiliary instructions within an instruction stream during execution
US6212542B1 (en) Method and system for executing a program within a multiscalar processor by processing linked thread descriptors
US11275590B2 (en) Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory
CN113703834B (zh) 基于块的处理器核复合寄存器
US9311095B2 (en) Using register last use information to perform decode time computer instruction optimization
US5721855A (en) Method for pipeline processing of instructions by controlling access to a reorder buffer using a register file outside the reorder buffer
US7263600B2 (en) System and method for validating a memory file that links speculative results of load operations to register values
US6950925B1 (en) Scheduler for use in a microprocessor that supports data-speculative execution
US8028152B2 (en) Hierarchical multi-threading processor for executing virtual threads in a time-multiplexed fashion
US7055021B2 (en) Out-of-order processor that reduces mis-speculation using a replay scoreboard
US7437521B1 (en) Multistream processing memory-and barrier-synchronization method and apparatus
US20160098279A1 (en) Method and apparatus for segmented sequential storage
US9811340B2 (en) Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor
US20080133889A1 (en) Hierarchical instruction scheduler
US20060248319A1 (en) Validating branch resolution to avoid mis-steering instruction fetch
US9690589B2 (en) Computer instructions for activating and deactivating operands
HK1246442A1 (zh) 具有连续块的并行执行的基於块的架构
JP2002508564A (ja) 実行パイプラインの外部に複数のプログラム・カウンタとトレース・バッファを有するプロセッサ
GB2321544A (en) Concurrently executing multiple threads containing data dependent instructions
US7937569B1 (en) System and method for scheduling operations using speculative data operands
US6311267B1 (en) Just-in-time register renaming technique
Hirata et al. Speculative memory: an architectural support for explicit speculations in multithreaded programming
JPH10187464A (ja) マルチスカラ・プログラムを作成する方法およびシステム