JP2001282532A - プロセッサにおける通信命令結果及びプロセッサのためのコンパイル方法 - Google Patents

プロセッサにおける通信命令結果及びプロセッサのためのコンパイル方法

Info

Publication number
JP2001282532A
JP2001282532A JP2001032090A JP2001032090A JP2001282532A JP 2001282532 A JP2001282532 A JP 2001282532A JP 2001032090 A JP2001032090 A JP 2001032090A JP 2001032090 A JP2001032090 A JP 2001032090A JP 2001282532 A JP2001282532 A JP 2001282532A
Authority
JP
Japan
Prior art keywords
value
instruction
instructions
processor
register
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
JP2001032090A
Other languages
English (en)
Inventor
Nigel Peter Topham
ナイジェル・ピーター・トファム
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.)
Siroyan Ltd
Original Assignee
Siroyan Ltd
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 Siroyan Ltd filed Critical Siroyan Ltd
Publication of JP2001282532A publication Critical patent/JP2001282532A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4452Software pipelining
    • 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/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming

Landscapes

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

Abstract

(57)【要約】 【課題】 レジスタ割り当てにおけるコンパイラのタス
クを単純化し、命令のセットをよりコンパクトにする。 【解決手段】 ソフトウェアでパイプラインを実行する
プロセッサ1は、実行される複数の命令を予め決められ
たシーケンスで発行する命令発行装置10を含む。命令
のシーケンスは、実行時に各値を発生する複数の値発生
命令を含む。命令実行装置14,16及び18は発行さ
れた命令を実行する。レジスタファイル20は複数のレ
ジスタを有し、実行された命令が発生した複数の値を記
憶する。動作中に、プロセッサ1は、値発生命令が発生
した複数の値を、各値発生命令が発行された順序に従
い、各シーケンス番号に割り当てる。発生された各値
は、その値に割り当てられたシーケンス番号に依存して
その発生された値を記憶するために、複数のレジスタの
うちの1つに割り当てられる。上記複数のレジスタは、
値発生命令が発行される毎に名前を変更されてもよい。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プロセッサにおけ
る複数の通信命令結果と、プロセッサのためのコンパイ
ル方法とに関する。特に、本発明は、マイクロプロセッ
サのようなプロセッサにおける命令結果を記憶するため
に複数のレジスタを割り当てることに関する。
【0002】
【従来の技術】ハイパフォーマンスコンピューティング
において、ハイレートでの命令の実行が、通常、目標の
マシン(例えばマイクロプロセッサ)に要求される。実
行時間は、しばしば、アプリケーションプログラム内の
複数のループ構造によって支配される。ハイレートでの
命令の実行を可能にするために、プロセッサは、複数の
個別の実行装置を含んでもよく、上記各個別の装置を用
いることで、他の複数の実行装置による複数の命令の実
行と平行して、1つ又はそれよりも多くの命令を実行す
ることができる。
【0003】そのような複数の実行装置は、複数の個別
のステージから構成されるいわゆるソフトウェアパイプ
ラインを提供するために用いることができる。各ソフト
ウェアパイプラインのステージは、特定の実行装置への
固定された物理的な対応を持たない。むしろ、アプリケ
ーションプログラムにおけるループ構造がコンパイルさ
れるとき、ループの個別の反復を構成する複数の機械語
命令は、ソフトウェアパイプラインのスケジュールに従
って、異なる複数の実行装置による実行に対してスケジ
ュールが決定されている。このスケジュールは複数の逐
次的なステージに分割され、複数の命令は、複数の逐次
的な反復に係る複数の開始の間の、選択されたループ開
始インターバルを有して、複数の異なる実行装置によっ
て、オーバーラップする方法で実行されるべき複数の反
復を可能にするような方法でスケジュールが決定され
る。従って、反復iの第1のステージが終了し、その反
復が第2のステージに入るとき、次の反復i+1の実行
は、反復i+1の第1のステージで開始される。従っ
て、反復i+1の第1のステージにおける複数の命令
は、反復iの第2のステージにおける複数の命令の実行
に対して、並列に実行される。
【0004】そのようなソフトウェアでパイプライン処
理された複数のループにおいて、通常は、パイプライン
における複数の異なる命令の間で通信されなければなら
ない、複数のループ可変値、すなわち、ループの各異な
る反復において再評価されなければならない複数の表現
が存在する。そのような複数のループ可変値に関して、
それらを、いわゆる回転するレジスタファイルに記憶す
ることができる。この場合、各ループ可変値は、回転す
るレジスタファイル内の論理的なレジスタ番号に割り当
てられ、この論理的なレジスタ番号は、1つの反復から
次の反復に向かう間に変化しない。回転するレジスタフ
ァイルの内側で、各論理的なレジスタ番号は、レジスタ
ファイル内の物理的なレジスタにマッピングされ、この
マッピングは、新しい反復が開始される毎に、すなわ
ち、パイプラインの境界が交差される毎に回転される。
従って、複数の異なる反復における対応する複数の命令
はすべて、同一の論理的なレジスタ番号を参照すること
ができ、1回の反復によって発生される値が、異なる反
復の続いて実行される命令によって上書きされることを
防止すると同時に、コンパイルされた複数の命令を単純
化する。
【0005】
【発明が解決しようとする課題】以上に考察されたプロ
セッサについて、回転するレジスタファイル内の複数の
レジスタを、ループ計算において発生される複数の値に
割り当てることにおけるコンパイラのタスクは、本願明
細書において後でより詳細に説明されるように複雑であ
る。ゆえに、ループ計算内で、ループ可変値を含む、複
数の中間の値を識別するための機構であって、回転する
レジスタファイル内で複数のレジスタを割り当てること
のコンパイラのタスクを単純化できる機構を提供するこ
とが望ましい。また、そこにおいて複数の命令がよりコ
ンパクトになる、プロセッサのための命令セットを提供
することも望ましい。
【0006】
【課題を解決するための手段】本発明の第1の態様によ
れば、実行されるべき複数の命令を予め決められたシー
ケンスで発行する命令発行手段を含み、複数の命令にて
なる上記シーケンスは、実行されるときに各値を発生す
る、予め選択された複数の値発生命令を含み、上記発行
された複数の命令を実行する命令実行手段と、複数のレ
ジスタを有し、上記実行された複数の命令によって発生
された複数の値を記憶するレジスタ手段と、上記複数の
値発生命令によって発生された上記複数の値を、それら
の各値発生命令の発行の順序に従って、各シーケンス番
号に割り当てるシーケンス番号割り当て手段と、上記発
生された各値を、その値に割り当てられたシーケンス番
号に依存して、その発生された値を記憶するための上記
複数のレジスタのうちの1つに割り当てるレジスタ割り
当て手段とを含むプロセッサが提供されている。
【0007】そのようなプロセッサに対し、複数のレジ
スタを割り当てることのコンパイラのタスクは単純化さ
れる。例えば、レジスタ手段は回転するレジスタファイ
ルの形式であってもよく、複数のレジスタは、予め選択
された複数の値発生命令の内の1つが発行される毎に、
再マッピングされてもよい(名前を変更されてもよ
い)。また、複数の値発生命令が、それらの各発生され
た値を記憶するためにあて先レジスタを特定する必要が
ないので、そのようなプロセッサのための命令セット
は、よりコンパクトであることができる。
【0008】本発明の第2の態様によれば、複数のハイ
レベルプログラム命令のシーケンスを、プロセッサによ
って実行されるべき対応する複数のローレベル命令のシ
ーケンスに変換するためのコンパイル方法が提供され、
上記方法は、上記対応するシーケンスに係るどの上記複
数のローレベル命令が予め選択された複数の値発生命令
であり、どれが予め選択された複数の値要求命令である
かを決定するステップを含み、上記各値発生命令は、実
行されるときに、値を発生する命令であり、上記各値要
求命令は、実行されるときに、以前に発行された値発生
命令によって発生された上記値を要求する命令であり、
上記方法は、それらの各値発生命令が実行中に発行され
る順序に従って、上記発生された複数の値を各シーケン
ス番号に割り当てるステップと、実行中の上記プロセッ
サによる使用のために上記各値要求命令を情報を用いて
符号化して、その命令によって要求された上記発生され
た値を識別するステップとを含み、その情報は、その発
生された値に割り当てられた上記シーケンス番号に依存
する。
【0009】本発明の第3の態様によれば、コンピュー
タ上で動作するとき、上記コンピュータに、本発明に係
る上述の第2の実施形態を具体化するコンパイル方法を
実行させるコンピュータプログラムが提供される。
【0010】本発明の第4の態様によれば、コンピュー
タ上で動作するとき、上記コンピュータに対して、複数
のハイレベルプログラム命令のシーケンスを、プロセッ
サによって実行されるべき対応する複数のローレベル命
令のシーケンスに変換するコンパイル方法を実行させる
コンピュータプログラムが提供され、上記コンピュータ
プログラムは、上記対応するシーケンスに係るどの上記
複数のローレベル命令が予め選択された複数の値発生命
令であり、どれが予め選択された複数の値要求命令であ
るかを決定する決定部を含み、上記各値発生命令は、実
行されるときに、値を発生する命令であり、上記各値要
求命令は、実行されるときに、以前に発行された値発生
命令によって発生された上記値を要求する命令であり、
上記コンピュータプログラムは、それらの各値発生命令
が実行中に発行される順序に従って、上記発生された複
数の値を各シーケンス番号に割り当てる割り当て部と、
上記プロセッサによる使用のために各値要求命令を情報
を用いて符号化して、その命令によって要求された上記
発生された値を識別する符号化部とを含み、その情報
は、その発生された値に割り当てられた上記シーケンス
番号に依存する。
【0011】
【発明の実施の形態】以下、添付された図面を実施例と
して参照する。
【0012】図1は、本発明の実施形態に係るプロセッ
サの構成要素を図示する。この実施例において、上記プ
ロセッサは、ソフトウェアのパイプライン処理と巡回的
なレジスタの名前の変更とを実行するためのハードウェ
アサポートを有する超長命令語(very long instructio
n word; VLIW)プロセッサである。プロセッサ1
は、命令発行装置10と、スケジュール記憶装置12
と、各第1、第2及び第3の実行装置14,16及び1
8と、レジスタファイル20とを含む。命令発行装置1
0は、それぞれ第1、第2及び第3の実行装置14,1
6及び18に接続された3つの発行スロットIS1,I
S2及びIS3を有する。第1のバス22は、3つの実
行装置14,16及び18のすべてを、レジスタファイ
ル20に接続する。第2のバス24は、第1及び第2の
装置14及び16(しかしこの実施形態では第3の実行
装置18は除く)を、この実施例では外部のランダムア
クセスメモリ(RAM)装置であるメモリ26に接続す
る。上記メモリ26は、それに代わって、プロセッサ1
の内部のRAMであることができる。
【0013】ちなみに、図1は、複数の実行装置をレジ
スタファイル20及びメモリ26に接続する、共有され
たバス22及び24を図示しているが、それに代わっ
て、各実行装置がレジスタファイル及びメモリへのそれ
ら自身の個別の接続を有することが理解されよう。
【0014】プロセッサ1は、一連の処理サイクルを実
行する。各処理サイクルにおいて、命令発行装置10
は、発行スロットIS1乃至IS3のそれぞれにおい
て、1つの命令を発行できる。上記複数の命令は、スケ
ジュール記憶装置12に記憶された(以下に説明され
る)ソフトウェアパイプラインのスケジュールに従って
発行される。
【0015】異なる複数の発行スロットにおいて、命令
発行装置10によって発行された複数の命令は、対応す
る実行装置14,16及び18によって実行される。こ
の実施形態において、実行装置のそれぞれは、同時に1
つよりも多くの命令を実行することができるので、新し
い命令を実行することは、関係した実行装置に発行され
た以前の命令の実行の完了前に開始することができる。
【0016】複数の命令を実行するために、各実行装置
14,16及び18は、第1のバスを介して各レジスタ
ファイル20へのアクセスを有する。ゆえに、レジスタ
ファイル20に含まれた複数のレジスタに保持される複
数の値は、実行装置14,16及び18によって読み出
し、かつ書き込むことができる。またさらに、第1及び
第2の装置14及び16は、外部メモリ26の複数の記
憶場所に記憶される複数の値に係る読み出し及び書き込
みをイネーブルするように、第2のバス24を介して外
部メモリ26へのアクセスを有する。第3の実行装置1
8は、外部メモリ26へのアクセスを持たず、そのた
め、この実施形態において、レジスタファイル20に含
まれた複数の値を操作することだけが可能である。
【0017】次に、図1のプロセッサの動作をより詳細
に説明し、プロセッサに対する複数のコンパイル命令の
ためのコンパイル処理を、特定の実施例に関して説明す
る。この特定の実施例において、ハイレベル言語Cで記
述されたアプリケーションプログラムが以下の単純なル
ープを含むことが仮定されている。
【0018】
【数1】1:for(i=0;i<m;i++) 2: dy(i)=dy(i)+da*dx(i)
【0019】そのようなループは、線形代数を実行する
ために用いられる複数のアプリケーションプログラム
(パッケージ)において、非常に一般的に見出だされ
る。このループにおいて、アレーdyの各素子dy
(i)(i=0,1,...m−1)は、一定値da
と、別のアレーdxの対応する素子dx(i)との積に
よって増加させられる。
【0020】図1のプロセッサのためにこのループをコ
ンパイルする処理は、図2に図示されたように、シンボ
ル的なデータフローグラフの生成から始まる。次のステ
ップは、図2のデータフローグラフを、図1のプロセッ
サの実際の機械語命令に近い形式に変換することのさま
ざまな最適化を実行することである。この最適化のステ
ップの間に、コンパイラは、ループ内で何の値が変化し
たかということ(ループ可変値)と、何の値が同じまま
残っているかということ(ループ不変値)とを決定す
る。例えば、daの値はループの継続時間全体を通じて
変更されない。
【0021】アレーdx及びdyは外部メモリ26(図
1)における複数の記憶場所の中に記憶され、従って、
図2のデータフローグラフにおけるそれらへの参照記号
は、対応する複数のメモリアクセス動作に変換されなけ
ればならない。従って、各アレーdx及びdyは、アレ
ーの複数の素子が記憶されている外部メモリ26の複数
の記憶場所を指示するために、少なくとも1つのポイン
タを必要とする。そのような各ポインタはレジスタファ
イル20のレジスタに保持される。
【0022】一定値daは、メモリにおけるその位置へ
の同様のポインタを用いて扱うことができるが、上記値
はループ不変値であるので、ループの実行中に、それを
レジスタファイル20のそれ自身のレジスタに直接に保
持することはより便利かつ高速である。最後に、最適化
処理において、コンパイラは、自動インクリメントアド
レス指定モードのような、利用可能なプロセッサ命令に
係る任意の有利な特徴を考慮する。
【0023】最適化処理から結果的に得られる図2のデ
ータフローグラフの内部コンパイラ表現の一実施例が図
3に示されている。図3は、個別の機械語命令と、それ
らの依存関係を図示する(第1の命令から第2の命令へ
の矢印のポインティングは、上記第2の命令が上記第1
の命令を実行した結果に依存していることを示す)。ま
た、図3における各矢印は、そこから矢印が指示する命
令の実行を完了するために要求されるプロセッササイク
ルの数を示す数を、それに関連付けた。
【0024】図3における第1の命令I1は、ロード命
令“ld v0,(r1++)”である。この命令は、
レジスタファイル20のレジスタv0に、アレー素子d
x(i)の値をロードするために用いられる。上記値
は、レジスタファイルの別のレジスタr1によって指示
される、外部メモリ26の中の記憶場所から読み出され
る。命令I1における“r1”の後の“++”は、レジ
スタr1によって指示された記憶場所から読み出した後
で、レジスタr1は外部メモリ26における次に続いた
位置を指示するようにインクリメントされるべきである
ことを示している。これは、プロセッサ1の自動インク
リメントアドレス指定モードに係る特徴の利点を持つコ
ンパイラの1つの例である。
【0025】第2の命令I2は、乗算命令“mul v
1,r3,v0”である。この乗算命令は、第1の命令
I1においてレジスタv0にロードされたdx(i)の
値を、レジスタファイル20のもう1つのレジスタr3
に保持されたdaの値によって乗算するために用いられ
る。上記乗算の結果は、レジスタファイル20のレジス
タv1に記憶される。
【0026】図3における第3の命令I3は、もう1つ
のロード命令“ld v2,(r2++)”である。こ
の第2のロード命令は、レジスタファイル20のレジス
タr2によって指示された記憶場所に保持されたアレー
素子dy(i)の値を、レジスタファイル20のレジス
タv2にロードするために用いられる。また、この第2
のロード命令は、読み出し動作の後にレジスタr2を自
動的にインクリメントする自動インクリメントアドレス
指定モードの命令であり、従って、次にそれは、その場
所が読み出されると直ちに、次の記憶場所を指示する。
【0027】図3における第4の命令I4は、加算命令
“add v3,v1,v2”である。この命令は、レ
ジスタv1及びv2に保持された各値(すなわち、da
*dx(i)及びdy(i))をともに加算し、その結
果をレジスタファイル20の別のレジスタv3の中に記
憶する。
【0028】図3における第5の命令I5は、記憶命令
“st v3,(r4++)”である。この命令は、レ
ジスタv3に保持された値を、レジスタファイル20に
含まれた別のレジスタr4によって指示された、外部メ
モリ26の中の、dy(i)のための記憶場所に記憶す
るために用いられる。
【0029】第2のロード命令I3においてdy(i)
が読み出される(レジスタr2によって指示された)記
憶場所は、記憶命令I5においてdy(i)が書き込ま
れるところと同一の(レジスタr4によって指示され
た)記憶場所でなければならない。ゆえに、第2のロー
ド命令I3と記憶命令I5との双方において、dy
(i)を指示するために単一のレジスタ(例えばr2)
を用いることはより好適であると考えられる。しかしな
がら、この例において、ソフトウェアでパイプライン処
理をすることが、結果的に、(後の記述から明らかにな
るように)次の反復における第2のロード命令I3が現
在の反復における記憶命令I5の前に実行されることを
もたらすので、単一のレジスタを用いることは不可能で
ある。記憶命令I5が、dy(i)を指示するためにロ
ード命令I3と同一のレジスタr2を用いることになっ
ていれば、レジスタr2は、それが現在の反復の記憶命
令I5によって用いられる前に、次の反復のロード命令
I3によってインクリメントされる。この理由のため
に、dy(i)を指示するために図3において2つのレ
ジスタr2及びr4が用いられ、上記2つのレジスタは
各反復の開始部分において同一の値を有し、それぞれは
反復の過程の間に1回だけインクリメントされるが、r
4をインクリメントすることはレジスタ2のそれと比較
して延期される。
【0030】図3において、命令I1乃至I4によって
発生された結果はすべて、異なる反復において互いに区
別されなければならないループ可変値である。この理由
のために、これらの中間の値は、一時的なレジスタ識別
子(数)v0乃至v3に割り当てられる。これらは最後
のレジスタ割り当てではないが、コンパイラによって適
用される複数の命令結果(データフローグラフにおける
矢印)に対する一時的なラベルに過ぎない。一方、レジ
スタr1乃至r4は最後の(永久の)レジスタ番号を割
り当てられるが、それは、レジスタr1乃至r4に対し
てあて先指定される計算結果が、1回の反復よりも長く
ならない待ち時間及び存続時間を有するため、すなわ
ち、与えられた反復においてr1が再び書き込まれるこ
とを必要とする時まで、以前の反復においてr1に記憶
された発生された値は、他の反復によってはもはや必要
とされないためである。
【0031】概念的には、図3に図示されたループの1
つの反復を実行する処理は、前任者(predecessor)を
持たないノードにおいて開始する木(ツリー)の複数の
ノードを評価し、木の根(ルート)に向かって動作する
ことを伴う。ゆえに、この場合、図3において、実行の
順序はI1からI5へと向かう。
【0032】コンパイル処理の次のステージは、ソフト
ウェアパイプラインのスケジュールを生成することであ
る。
【0033】ソフトウェアのパイプライン処理の第1の
フェーズは、ループ開始インターバル(II)、すなわ
ち、ループの逐次的な複数の反復に係る開始の間の間隔
を決定することを伴う。このループ開始インターバル
は、データフローグラフにおける任意のサイクルの存在
と同様に、実行する命令数と比較して、プロセッサ中で
利用可能な資源に依存する。例えば、図1のプロセッサ
は、3つの命令発行スロットIS1乃至IS3と3つの
実行装置14,16及び18とを有し、上記実行装置の
中で第1及び第2の実行装置14及び16のみが外部メ
モリ26にアクセスすることができる。また、それは、
実行装置が、それらが異なるタスクを実行するために個
別に最適化されているという意味で、「特別な」装置と
してもよい場合である。例えば、複数の実行装置の内の
特定のものだけが特定のタイプの命令を実行できるとし
てもよい。
【0034】本実施例において、利用可能な資源を考慮
して、ループ開始インターバルIIが2つのプロセッサ
サイクルとして決定されることを仮定する。また、第3
の実行装置18のみが、加算及び乗算命令を実行するた
めに必要な資源(例えば、演算論理装置ALU)を備え
ていると仮定する。
【0035】この第1のフェーズの後で、次のフェーズ
は、いわゆるモジュロのスケジューリングの拘束条件
(modulo scheduling constraint)に従うスケジュール
を生成することである。この拘束条件は、1つの反復を
形成する複数の命令(すなわち、図3における命令I1
乃至I5)に関する。各利用可能な発行スロットに対し
て、サイクルyにおいて同一の発行スロットからの発行
に対してスケジュールが決定された命令が存在しないと
き、かつそのときに限って、ある命令は、サイクルxに
おいて関連したスロットからの発行に対してスケジュー
ルが決定されてもよい。ここで、yはIIを法としてx
に等しい。このモジュロ拘束条件は、条件を満たすなら
ば、各発行スロットが、プロセッササイクル毎に1つの
命令の最大値を発行することを保証する。
【0036】以下の表1は、図3の木構造に対応するモ
ジュロスケジューリング表を示す。表1は、ループの1
つの反復を作成する5つの命令I1乃至I5がどのよう
にスケジュールが決定されるかを示している。特に、表
の列3乃至5は、各命令が発行されているときのスケジ
ュールにおけるサイクルと、それが発生しているところ
のソフトウェアパイプラインのステージと、それによっ
て命令が発行されている発行スロット(すなわち、命令
を実行する実行装置)とを示す。表1において、最後の
4つの列は論理的なレジスタ番号を示し、網掛けは、図
5、図6(A)及び図6(B)を参照して後に詳細に説
明されるように、値の存続時間を示すために用いられて
いる。
【0037】
【表1】
【0038】表1に示されたように、モジュロのスケジ
ューリングの拘束条件のために、どの2つの命令も、同
一の発行スロットにおいて、互いに複数2個のサイクル
だけ離れてスケジュールが決定されることができない。
従って、サイクル0においていったん第1のロード命令
I1が発行スロット1からの発行に対してスケジュール
が決定されたときは、次の命令、すなわちサイクル2に
おいて発行されるべき乗算命令I2は、発行スロット1
とは異なる発行スロットに、この場合は発行スロット3
にスケジュールが決定されなければならない。発行スロ
ット3は、この例において第3の実行装置18のみが乗
算命令を実行することができるので選択された。同様
に、サイクル3においていったん第2のロード命令I3
が発行スロット1からの発行のためにスケジュールが決
定されたときは、次の命令、すなわちサイクル5におけ
る発行のためにスケジュールが決定される加算命令I4
は、スロット1とは異なるスロット、この場合では再び
スロット3から発行されなければならない。記憶命令I
5である第5の命令は、サイクル9において発行される
ように要求される。モジュロ拘束条件のために、これ
は、発行スロット1又は発行スロット3のいずれにおい
ても発行することができず、従って発行スロット2に割
り当てなければならない。
【0039】表1におけるスケジュールは1つの反復の
みに関するということが理解されよう。すべてのIIサ
イクルで、もう1つの反復が同一のスケジュールに従っ
て開始される。従って、現在の反復がステージ1にある
とき、直接に先行する反復はステージ2にあり、その前
の反復はステージ3にあり、その前の反復はステージ4
にあり、かつ、その前の反復はステージ5にある。複数
の命令は、すべてのIIサイクルで各発行スロットが同
一の命令を発行するように、すべての反復において、複
数の同じ発行スロットによる発行に対してスケジュール
が決定される。
【0040】図4は、第1乃至第6の異なる反復(i=
0乃至i=5)が互いにどのようにオーバーラップして
いるかを図示している。図4において、表記法は以下の
ようになる。
【0041】L1は第1のロード命令I1を示す。Mは
乗算命令I2を示す。L2は第2のロード命令I3を示
す。Aは加算命令I4を示す。Sは記憶命令I5を示
す。
【0042】サイクル0において、第1の反復(i=
0)は、発行スロット1から第1のロード命令L1の発
行を開始する。サイクル1において開始される命令は存
在しない。サイクル2において、第2の命令(i=1)
の実行は、発行スロット1からのロード命令L1の発行
によって開始される。また、同時に、第1の反復の乗算
命令Mは発行スロット3から発行される。サイクル3に
おいて、第1の反復の第2のロード命令L2のみが発行
される。第1の反復のL2の発行のときに、第2の反復
のL1が未だ完了していないということは理解されよ
う。それより、この実施形態において、図1のプロセッ
サにおける第1の実行装置14が、これら2つのロード
命令を互いに並列に実行できなければならないことが従
う。
【0043】サイクル4において、第3の反復(i=
2)の実行は、その反復の第1のロード命令L1をスロ
ット1から発行することによって開始される。それと同
時に、第2の反復の乗算命令Mが発行スロット3から発
行される。
【0044】すべての反復に対するすべての動作が完了
するまで、実行はこの方法で継続する。
【0045】反復を実行することに係るパイプライン処
理の性質を、図4から見ることができる。例えば、サイ
クル8において、第5の反復(i=4)は表1のスケジ
ュールのステージ1に存在し、それと同時に、第4の反
復(i=3)はステージ2に存在し、第3の反復(i=
2)はステージ3に存在し、第2の反復(i=1)はス
テージ4に存在し、かつ、第1の反復(i=0)はステ
ージ5に存在する。
【0046】上述のように、“v0”乃至“v3”は、
複数のレジスタに割り当てられた一時的な識別子(ラベ
ル)に過ぎない。これらの一時的なレジスタ識別子は、
複数の命令によって特定されるべき論理的なレジスタ識
別子に翻訳されなければならない。この翻訳のタスク
は、複数のレジスタが実行時間にプロセッサによって割
り当てられる方法を考慮して、コンパイラによって実行
される。
【0047】本発明の実施形態に係るプロセッサに対し
てこのタスクがどのように実行されるかを説明する前
に、最初に、以前に考察された、本発明の実施形態では
ないプロセッサに対してタスクがどのように実行される
かについて、図5、図6(A)及び図6(B)を参照し
て説明を与える。
【0048】図5は、以前に考察されたプロセッサにお
けるレジスタファイル120の一部の概略的な表示を示
す。図5に図示された部分120Rは、ループ可変値を
保持するためにプロセッサによって用いられる部分であ
る。また、レジスタファイル120は、ループ不変値を
保持するためにもう1つの部分(図5には図示せず。)
を有していてもよい。
【0049】図5に図示されたように、部分120R
は、レジスタファイル20において逐次的なアドレスで
配置された複数(本実施例では16個)のレジスタr0
乃至r15を備える。
【0050】レジスタファイル120において、ある命
令において特定された論理的なレジスタ識別子は、マッ
ピングオフセットOFFSETを用いて物理的なレジス
タアドレスにマッピングされる。例えば、図5に図示さ
れたように、マッピングオフセットOFFSETは10
であり、このことは、論理的なレジスタ識別子s0が物
理的なレジスタr10にマッピングされることを意味す
る。論理的なレジスタ識別子s1は、物理的なレジスタ
r11にマッピングされる、などである。上記マッピン
グは、例えば、OFFSETが10に等しいとき論理的
なレジスタ識別子s6が物理的なレジスタr0にマッピ
ングされるように、部分120Rを「ラップアラウン
ド」する。
【0051】図5のレジスタファイルを有する、以前に
考察されたプロセッサにおいて、ソフトウェアパイプラ
インを実行することが用いられるとき、新しい反復の実
行が開始される毎に、すなわちすべてのIIプロセッサ
サイクル毎に、マッピングオフセット値OFFSETは
変化される。マッピングオフセット値を変化すること
は、複数の命令において特定された複数の論理的なレジ
スタ識別子と、レジスタファイル20の部分20Rにお
ける実際の複数の物理的なレジスタとの間のマッピング
を変化させることの効果を有する。このことは複数のレ
ジスタの名前を変更することに等しい。
【0052】ソフトウェアでパイプライン処理された方
法で実行される複数の命令(すなわち、本実施例におい
て表1に示された5つの命令)は、実行されている特定
の反復に関わりなく、複数の同じ論理的なレジスタ識別
子を保持することを必要とする。しかしながら、そのと
き、複数のレジスタの名前を変更することは、任意の与
えられた反復において発生された各ループ可変値を、上
記値が必要とされる限り(すなわち、表1における4つ
の最後の列のうちの関連した1つにおいて、網掛けで図
示された上記値の存続時間に対して)、その値を要求し
ている任意の他の命令によって必要に応じてアクセス可
能なそれ自身のレジスタに提供するものでなければなら
ない。
【0053】例えば、表1に図示されたように、サイク
ル0において発行された第1のロード命令によって発生
された値を記憶するためのレジスタは、一時的なレジス
タ識別子v0を割り当てられ、関連した、発生された値
は、乗算命令の入力オペランドのうちの1つとしてサイ
クル2において必要とされるので、3つのプロセッササ
イクルのうちの最小の存続時間を有する。同様に、サイ
クル2において発行された乗算命令によって発生された
値は、一時的なレジスタ識別子v1を割り当てられ、こ
の発生された値は、サイクル5において加算命令によっ
て必要とされるので、4つのプロセッササイクルのうち
の最小の存続時間を有する。
【0054】以前に考察されたプロセッサにおけるすべ
てのIIサイクルごとの複数の物理的なレジスタの名前
の変更と、値の存続時間とを考慮して、以前に考察され
たプロセッサに対して、コンパイラは、本実施例におい
て複数のループ可変値を保持するために用いられる複数
のレジスタを識別するために、9つの異なる論理的なレ
ジスタ識別子s0乃至s8を用いることを必要とすると
いうことがわかる。
【0055】次に図6(A)及び図6(B)を参照し
て、以前に考察されたプロセッサに対して、一時的なレ
ジスタ識別子v0乃至v3が、コンパイラによって、表
1に示された論理的なレジスタ識別子s0乃至s8に翻
訳される方法を説明する。図6(A)及び図6(B)に
おいて、最初にマッピングオフセット値OFFSETが
10であることが仮定されている。第1の反復(i=
0)が開始されるとき、第1のロード命令は、ロードさ
れた値を記憶するための物理的なレジスタを割り当てら
れることを必要とする。この値がレジスタを要求する最
初の値であるとき、そのレジスタは、レジスタファイル
120内で物理的なレジスタr10にマッピングされて
いる論理的なレジスタ識別子s0を用いて特定される。
【0056】以前に考察されたプロセッサにおける複数
のレジスタの名前の最初の変更は、プロセッササイクル
2の開始部分において発生し、その結果、OFFSET
は1だけデクリメントされて9になる。
【0057】2つの命令、すなわち第1の反復の乗算命
令と第2の反復の第1のロード命令とが、サイクル2に
おいて発行される。乗算命令は、第1の反復の第1のロ
ード命令によって発生された値を要求する。サイクル2
の開始部分において発生した複数のレジスタの名前を変
更したことを理由として、物理的なレジスタr10から
その値を検索するために論理的なレジスタ識別子s1を
用いなければならない。第2の反復の第1のロード命令
における論理的なレジスタ識別子は、第1の反復の第1
のロード命令におけるそれと同一(s0)でなければな
らない。また、第1の反復における乗算命令は、その結
果を記憶するためのレジスタに提供されなければならな
い。現在使用中であるレジスタr9及びr10の後段に
おける最初の空きレジスタは、論理的なレジスタ識別子
s2に対応するレジスタr11になる。
【0058】サイクル3において、第1の反復の第2の
ロード命令が発行される。この命令は、そのロードされ
た値を記憶するためのレジスタを要求する。レジスタr
9乃至r11がすでに使用中になった後に、最初の空き
レジスタはレジスタr12になる。しかしながら、後述
される理由によって、r12は、後に続く反復において
発生される値のためにコンパイラによって予約されなけ
ればならず、そのため、第1の反復の第2のロード命令
によって発生された、ロードされた値は、論理的なレジ
スタ識別子s4を要求するレジスタr13に割り当てら
れる。
【0059】以前に考察されたプロセッサにおける複数
のレジスタの名前の次の変更は、プロセッササイクル4
の開始部分において発生し、その結果、OFFSETは
再び1だけデクリメントされ、値8を有する。
【0060】サイクル4において、第2の反復の乗算命
令及び第3の反復の第1のロード命令が発行される。こ
れらの命令に対する論理的なレジスタ識別子は、以前の
乗算命令及び第1のロード命令に対するものと同一であ
る。物理的なレジスタr10は、以前の反復においてそ
のレジスタに記憶されたループ可変値の存続時間はサイ
クル2で満了するので、第2の反復の乗算命令の結果を
記憶するために再利用できる。
【0061】サイクル5において、発行された命令は、
第1の反復の加算命令及び第2の反復の第2のロード命
令である。加算命令に対する複数の入力オペランドは、
レジスタr11及びr13に含まれ、論理的なレジスタ
識別子s3及びs5を指定する加算命令を必要とする。
レジスタr13が使用中になった後の最初の空きレジス
タであるレジスタr14は、加算命令の結果に係る記憶
装置に対して割り当てられる。このレジスタは論理的な
レジスタ識別子s6によって特定される。
【0062】レジスタr12が第1の反復においてスキ
ップされなければならない理由を以下に示す。第2の反
復の第2のロード命令の結果を記憶するためのレジスタ
を割り当てるために用いられる論理的なレジスタ識別子
s4は、対応する第1の反復の第2のロード命令におい
て特定された論理的なレジスタ識別子と同一でなければ
ならない。第1の反復においてs4がr12にマッピン
グされたならば、第2の反復においてs4はr11にマ
ッピングする。しかしながら、このことは、第1の反復
の乗算命令によって発生された値を記憶するレジスタで
あるr11が、サイクル5の開始部分において未だ使用
中であるので、実行できない。
【0063】結果として得られる、図3の命令I1乃至
I5に対応する翻訳された命令のセットは、それ自身、
図6(A)の下部に図示されている。
【0064】一時的なレジスタ識別子v0乃至v3を論
理的なレジスタ識別子s0乃至s8に翻訳することにお
けるコンパイラのタスクは、図6(A)及び図6(B)
から、以前に考察されたプロセッサに対して複雑なもの
であることが分かる。明らかに利用可能なレジスタr1
2は、例えば、第2のロード命令の発生された値を記憶
するために、第1の反復において割り当てることができ
ず、このことは、後に続くサイクルにおいてコンフリク
トをもたらす。
【0065】以下の表2は、表1に対応するが、本発明
の実施形態に係るモジュロスケジューリング表を示す。
【0066】
【表2】
【0067】表2において、各個別の反復に対して要求
される5つの命令は、表1と同一のサイクル及び発行ス
ロットにおいてスケジュールが決定されるが、各命令の
フォーマットは、変化され、かつ単純化されている。
【0068】再び図3を参照すると、静的にスケジュー
ルが決定されたプロセッサにおいて、図3の木のノード
が評価される順序は、コンパイラによって固定されてい
る。ゆえに、コンパイラは、プログラムの実行中に、値
が発生され、かつ消費される、正確な順序を認識してい
る。この知識を用いて、コンパイラは、現在の命令が発
行されたとき達したシーケンス番号に対するそれらのシ
ーケンス番号によって、以前に計算された複数の値に参
照記号をつけることができる。
【0069】ソフトウェアでパイプライン処理されたル
ープスケジュールの実行中に発生された各値は、コンパ
イルする間にコンパイラによってシーケンス番号を割り
当てられる。例えば、発生された第1の値はシーケンス
番号0を有し、続いて発生された値は、増大する続きの
順序で番号を与えられる。ループスケジュールがソフト
ウェアでパイプライン処理されたとき、同時にループア
クティブのk回の反復が存在する。ここで、kは、スケ
ジューリングが実行された後の、ソフトウェアパイプラ
インのステージ数である。上記k回の反復は、以前の反
復の後の各逐次的な反復を開始するIIのサイクルを用
いて、時間についてオーバーラップする方法で実行され
る。
【0070】図7は、以前に記述された図4の表を再び
表すが、コンパイルする間に複数のシーケンス番号が複
数の値にどのように割り当てられるかを説明するため
に、ある複数の命令に対して括弧でくくられた数が付加
されている。
【0071】図7におけるサイクル8において、第5の
反復(i=4)に係る第1のロード命令が発行される。
このロード命令は値発生命令であり、上記値発生命令
は、その反復に係る後に続く乗算命令Mによって必要と
される値dx(i)を発生する。図7に図示されたよう
に、サイクル8の第1のロード命令L1によって発生さ
れた値に対して、コンパイラによって与えられるシーケ
ンス番号が0であることを仮定する。
【0072】また、サイクル8において、第5の反復の
第1のロード命令L1と同時に、もう1つの値発生命令
が命令発行装置10によって発行される。その、他の命
令とは、先行する(第4の)反復の乗算命令Mである。
同時に発行されたその値発生命令は発行スロット3から
発行され、上記発行スロット3は複数の発行スロットの
予め決められた順序(1→2→3)において発行スロッ
ト1の後に存在し、従って、コンパイラは、第1のロー
ド命令L1によって発生された値に割り当てられたシー
ケンス番号の後の次のシーケンス番号、すなわちシーケ
ンス番号1に、乗算命令によって発生された値を割り当
てる。
【0073】従って、任意の与えられたサイクルにおい
て、2つ又はそれよりも多くの値発生命令が複数の異な
る発行スロットから発行されてもよいが、コンパイラ
は、それらの命令によって発生された複数の値に、複数
の異なるシーケンス番号を系統的に割り当てることがで
きる。同時に発行された複数の命令に係る複数の発行ス
ロットの予め決められた順序で複数のシーケンス番号を
割り当てることによって、上記割り当てを系統化(予測
可能化)する。
【0074】サイクル9において、発行スロット1は、
もう1つの値発生命令、すなわち第4の反復の第2のロ
ード命令L2を発行する。従って、この命令によって発
生された値はシーケンス番号2を割り当てられる。同様
に、第3の反復の加算命令Aはサイクル9において発行
スロット3から発行される。再び、この命令は値発生命
令であり、従って、上記命令によって発生された値は、
シーケンス番号を割り当てられなければならない。サイ
クル9において加算命令によって発生された値に割り当
てられるシーケンス番号は3であるが、それは、関連し
た加算命令に対する発行スロット(発行スロット3)
が、同時に発行された他の値発生命令(第4の反復のL
2)が発行された発行スロット(スロット1)に(複数
の発行スロットの予め決められた順序で)続くからであ
る。
【0075】サイクル9においても発行される、第1の
反復に対する記憶命令は、値発生命令ではない。実際
に、それは値消費命令である。従って、記憶命令に関連
付けられたいかなる値に割り当てられるシーケンス番号
も存在しない。
【0076】サイクル10において、2つの値発生命
令、すなわち新しい反復(第6の反復)の第1のロード
命令L1と以前の(第5の)反復の乗算命令とが、命令
発行装置10によって同時に発行される。L1はスロッ
ト1から発行されるので、それによって発生される値
は、次のシーケンス番号、すなわち4を割り当てられ
る。乗算命令はスロット3から発行され、その発生され
た値はシーケンス番号5を割り当てられる。
【0077】実行時間における、プロセッサによる複数
の命令のシーケンスの実行中に、プロセッサは、複数の
レジスタを複数の発生された値に、それらの値を発生す
る複数の値発生命令の発行の順序に従って割り当て、そ
のため、図7におけるシーケンス番号0乃至5を有する
上記発生された値は、図8に図示されたレジスタに割り
当てられる。
【0078】再び表2を参照して、次に、表2における
乗算命令の形式を説明する。この乗算命令は、“@5”
として特定される第1のオペランドと、“r3”として
特定される第2のオペランドとを有する。第2のオペラ
ンドは簡単であって、単純に、表1にあるようなレジス
タr3の内容を示している。このレジスタはループ不変
値daを記憶する。第1のオペランドに対する参照記号
“@5”は、第1のオペランドに対して要求された値
が、現在のシーケンス番号よりも小さいシーケンス番号
5を有する値であることを示している。図7のサイクル
10の乗算命令が発行されるとき、割り当てられたシー
ケンス番号は5に達する。ゆえに、参照記号“@5”か
ら、プロセッサは、それが、その割り当てられたシーケ
ンス番号が現在のシーケンス番号より小さい5である
値、すなわち、サイクル8において発行された第1のロ
ード命令L1によって発行された値を、第1のオペラン
ドとして用いなければならないことを実行時間において
認識している。また、それは、L1の結果を記憶するた
めに割り当てられたレジスタが、レジスタファイル20
の名前の変更が可能な部分において最後に割り当てられ
たレジスタ、すなわち論理的なレジスタ識別子5を有す
るレジスタの前の5つのレジスタであるということを認
識している。
【0079】従って、乗算命令Mのような値要求命令に
よって必要とされる各入力値は、その入力値に割り当て
られたシーケンス番号と、値要求命令が発行される時点
に達したシーケンス番号との間の差によって正確に特定
することができる。この差(例えば“@5”)はシーケ
ンスオフセットと呼んでもよい。
【0080】図9は、発生された複数の値に対するシー
ケンス番号割り当てとレジスタ割り当てと識別の機能を
実行する本発明の一実施形態に係る図1のプロセッサの
複数の構成要素をより詳細に図示する。
【0081】図9において、レジスタファイル20は合
計でN個のレジスタを有し、そのうち、より小さな番号
を付けられたK個のレジスタは、静的にアドレス指定さ
れた領域20Sを形成し、より大きな番号を付けられた
N−K個のレジスタは、動的にアドレス指定された(名
前の変更が可能な)領域20Rを形成する。この名前の
変更が可能な領域は、一般に、図5に関してすでに説明
された部分120Rと同様である。静的にアドレス指定
された領域20Sの複数のレジスタは、複数のループ不
変値を記憶するために用いられ、そのとき、名前の変更
が可能な領域20Rの複数のレジスタは、複数のループ
可変値を記憶するために用いられる。2つの領域の間の
境界はプログラム可能であってもよい。表2の例におい
て、レジスタr1乃至r4は、静的にアドレス指定され
た領域20Sに存在し、境界は、名前の変更が可能な領
域がr5(すなわちK=5)において開始するようにプ
ログラムされる。
【0082】値発生命令がいつ発行されるかを検出する
値発生命令検出装置30が設けられる。値発生命令検出
装置30は、都合のよいように、図1の命令発行装置1
0に含まれている。そのような命令の発行を検出する
と、値発生命令検出装置30はRENAME信号を発生
する。RENAME信号は、レジスタ名前変更装置32
に適用される。レジスタ名前変更装置32は、マッピン
グオフセット値OFFSETを記憶するマッピングオフ
セット記憶装置34に接続される。RENAME信号に
応答して、レジスタ名前変更装置32は、マッピングオ
フセット記憶装置34に記憶されたマッピングオフセッ
ト値OFFSETを1だけデクリメントする。
【0083】マッピングオフセット記憶装置34に記憶
されたマッピングオフセット値OFFSETは、マッピ
ング装置36に適用される。また、マッピング装置36
は、論理的なレジスタ識別子(R)を受信し、物理的な
レジスタアドレス(P)を出力する。論理的なレジスタ
識別子(数)は、0乃至N−1の範囲の整数である。マ
ッピング装置36は、複数の論理的なレジスタ識別子か
ら複数の物理的なレジスタアドレスへの全単射のマッピ
ングを実現する。各物理的なレジスタアドレスもまた0
乃至N−1の範囲の整数であり、実際のハードウェアの
複数のレジスタのうちの1つを直接に識別する。
【0084】ある命令が論理的なレジスタ番号Rをその
複数のオペランドのうちの1つであると特定し、かつ、
Rが、その両端を含むものとして0乃至K−1の範囲に
存在するならば、物理的なレジスタ番号は、そのオペラ
ンドの論理的なレジスタ番号と同一である。しかしなが
ら、RがK乃至N−1の範囲に存在するならば、そのオ
ペランドの論理的なレジスタ番号は次式のようなPによ
って与えられる。
【0085】
【数2】P=K+|R−K+OFFSET|N−K
【0086】この表記において、|y|は、xを法と
するy(y modulo x)を意味する。
【0087】名前の変更が可能な複数のレジスタのうち
の1つに記憶装置を要求する値を発生する値発生命令が
発行されるとき、名前の変更が可能な領域20Rにおけ
る次の空きレジスタは、発生される予定の値に自動的に
割り当てられる。そのレジスタは、単純に、論理的なレ
ジスタ番号0を有する、すなわち物理的なレジスタ番号
【数3】K+|OFFSET−K|N−K を有するレジスタである。命令を実行する実行装置は、
割り当てられたレジスタの物理的なレジスタ番号を通知
され、そのため、最終的に値が発生されるときに、それ
を、関連する物理的なレジスタの中に記憶することがで
きる。次いで、マッピングオフセット値OFFSET
は、検出装置30によって発行されたRENAME信号
に従って、1だけデクリメントされる。
【0088】名前の変更が可能な複数のレジスタのうち
の1つに記憶された値を要求する値要求命令が発行され
るとき、要求された値を記憶するレジスタは、最後に割
り当てられたレジスタに関連したそのシーケンスオフセ
ットを用いて、その命令において特定される。論理的な
レジスタ識別子Rを提供するために、このシーケンスオ
フセットを直接に用いることができる。ゆえに、上記シ
ーケンスオフセットはマッピング装置30に適用され、
従って上記マッピング装置30は、対応する物理的なレ
ジスタ番号Pを発生する。例えば、図8において、反復
i=4の乗算命令が発行されるときに最後に割り当てら
れたレジスタは、論理的なレジスタ識別子R=0を有す
るレジスタである。この乗算命令は、発生された値dx
(4)が、論理的なレジスタ識別子R=5を有するレジ
スタに保持されることを要求する。従って、シーケンス
オフセット“@5”は、要求されたレジスタの論理的な
レジスタ識別子(5)を直接に提供する。
【0089】ちなみに、発行された命令が、値発生命令
と値要求命令との双方でありうることが理解されよう。
【0090】次に図10を参照して、複数のハイレベル
プログラム命令のシーケンスを、図1のプロセッサによ
って実行されるべき複数のローレベル命令の対応するシ
ーケンスに変換することに用いるためのコンパイル方法
の複数の構成要素を、以下に説明する。プロセッサがソ
フトウェアでパイプライン処理される実行をサポートす
る場合において、コンパイル方法は、ソフトウェアパイ
プラインのスケジュールを発生するために、図2、図3
及び表1を参照して前に述べられた複数のステップを含
んでもよい。
【0091】図10における第1のステップS1におい
て、コンパイラは、対応するシーケンスのどのローレベ
ル命令が予め選択された値発生命令であり、対応するシ
ーケンスのどのローレベル命令が予め選択された値要求
命令であるかを決定する。例えば、図3における命令I
1乃至I4はすべて、予め選択された値発生命令であ
る。それに加えて、命令I2、I4及びI5はすべて、
以前に発行された複数の値発生命令に係る複数の発生さ
れた値を要求する、予め選択された値要求命令である。
【0092】ステップS2において、コンパイラは、複
数の値発生命令に係る複数の発生された値に、それらの
命令の発行された順序で、複数のシーケンス番号を割り
当てる。割り当てられた複数のシーケンス番号は、以前
に図7を参照して説明された、ソフトウェアパイプライ
ンのループの場合におけるすべてのオーバーラップする
反復を反映しなければならない。
【0093】次いでステップS3において、各値要求す
る命令は、関連した値要求命令によって要求された発生
された値に割り当てられたシーケンス番号に依存した、
上述されたシーケンスオフセットのような情報を用いて
符号化される。
【0094】本発明の実施形態に係るコンパイル方法
は、コンピュータプログラムに従って動作する汎用コン
ピュータによって実装することができる。このコンピュ
ータプログラムは、記憶媒体(例えばフロッピー(登録
商標)ディスク又はCD−ROM)又は信号のような、
任意の適当な伝送媒体によって伝送してもよい。そのよ
うな伝送信号は、インターネットのような通信ネットワ
ークを介してダウンロードされる信号であることができ
る。添付されたコンピュータプログラムに係る請求項
は、それ自身がコンピュータプログラムであるように、
又は上述の形式のうちの任意のコンピュータプログラム
を包含するように解釈されるものとする。
【0095】各入力値に対するシーケンスオフセットを
計算することにおけるコンパイラのタスクは、与えられ
た値要求命令に対して、シーケンスオフセットが、関連
した入力値に割り当てられたシーケンス番号と、命令が
発行されたとき達した割り当てられたシーケンス番号と
の間の単純な差であるというように、単純である。この
ことは、コンパイラのタスクを、レジスタファイルの回
転する(名前の変更が可能な)部分におけるレジスタ割
り当てに関して、さらにより単純かつ短時間で実行でき
るものにする。
【0096】それに加えて、表2における各命令は、特
定されることを必要とするあて先レジスタが存在しない
ので、表1におけるその対応する命令よりも短い。この
ことは、符号をよりコンパクトにし、実行をより高速に
することができる。
【0097】本発明に係るもう1つの実施形態は、2つ
又はそれよりも多くのレジスタ名前変更モードを有する
プロセッサを提供することができる。例えば、図11に
図示されたように、プロセッサは、現在選択されたレジ
スタの名前変更モードをユーザ登録するために用いられ
る、第1及び第2のモードビットM1及びM2を有する
モードレジスタを備えてもよい。モードレジスタ40
は、例えば、図9におけるレジスタ名前変更装置32に
設けられてもよい。第1のモードビットM1は、レジス
タの名前の変更がイネーブルされたか、又はディスエー
ブルされたかを制御するために用いられる。第2のモー
ドビットM2は、第1のモードビットM1がレジスタの
名前の変更がイネーブルされていることを示していると
きのみ、有効である。この場合、第2のモードビットM
2は、2つの利用可能なレジスタの名前変更モードのう
ちのどちらを用いるものとするかを制御するために用い
られる。これら2つのの利用可能なモードのうちの1つ
は、表2と図7乃至図9を参照して記述された、値発生
命令が発行される毎に複数のレジスタが名前を変更され
るモードである。他の利用可能なレジスタの名前変更モ
ードは、他の任意の適当なレジスタの名前変更モードで
あってもよい。例えば、他の利用可能なモードは、図
5、図6(A)及び図6(B)を参照して記述された、
以前に考察されたモードであってもよく、上記モードに
おいて、ソフトウェアパイプラインの境界が交差される
毎に、すなわち全てのIIプロセッササイクルで、複数
のレジスタは名前を変更される。ここで、IIは、上述
のループ開始インターバルである。
【0098】もちろん、レジスタの名前の変更をディス
エーブルする能力を提供することを全く望まないとき
は、第1のモードビットM1を省略することができる。
同様に、値発生命令の発行に基づいて、単純にレジスタ
の名前の変更をイネーブルするかディスエーブルするか
を望むときは、第2のモードビットM2を省略してもよ
い。
【0099】上記の、又はそれぞれのモードビットは、
実行時間において、例えばプログラムの制御の元で、動
的に変化してもよい。
【0100】次に、表2及び図7乃至図9を参照して記
述された基本的なレジスタの名前を変更する技術に係る
オプションの拡張を、図12及び図13を参照して以下
に説明する。このオプションの拡張は、ループ本体が1
回又はそれより多くの回数だけ実行される通常の場合と
比較して、ソフトウェアでパイプライン処理されたルー
プ本体が全く実行されない特別な場合に発生することが
ある、可能なレジスタ位置の不整合を克服することを意
図している。ソフトウェアパイプラインのループ本体が
全く実行されないというこの特別な場合は、例えば、ル
ープ命令が、ループが反復すると設定し、それと同時
に、ループ制御変数が開始値から終了値へと増大するよ
うに変化されるが、終了値はそれ自身が、実行中にルー
プ命令が発生したときに開始値よりも小さい変数である
というときに、発生することがある。この特別な場合
は、結果的に、以下に説明されるように、ループ本体が
1回又はそれよりも多くの回数だけ実行されるときに、
後に続くものと不整合である複数のレジスタ位置をもた
らす。
【0101】v個の値発生命令とp個のソフトウェアパ
イプラインのステージを有するソフトウェアでパイプラ
イン処理されたループスケジュールについて考察する。
例えば、表2のスケジュールにおいて、v=4であり、
p=5である。ループがn回反復するとき、レジスタフ
ァイルは、ループの実行中に、v(n+p−1)回だけ
回転される。コンパイラは、ループの内側で発生され、
続いてループの外側で使用される複数の値の、レジスタ
ファイルにおける位置を予測するためにこの情報を用い
る。通常は、ループの最後の反復において発生された複
数の値が、続いて、ループの外側において要求される。
最後の反復において発生されたそのような各値は、実際
に、ループ反復の計数値nと独立な位置であり、かつ、
ループ反復の計数値nが0よりも大きいならばループか
らの出口について不変な位置を有する。ループの最後の
反復は、ループのスケジュールがp回だけ発行されるこ
とを要求する。ゆえに、最後の反復の開始と、ループか
らの最後の出口との間に、ループのpv回の回転が存在
する。任意の値が、ループへのエントリの時点で有効で
あり、かつ、ループからの出口の時点で有効であると
き、少なくともpv個の回転するレジスタが存在しなけ
ればならない。
【0102】以前の反復においてそれ自身の関数として
計算された、ループの1つの反復において発生された任
意の値は、回帰(recurrence)と呼ばれる。そのような
複数の回帰は、ループエントリに先行して初期化され、
次いで、ループが完了された後に用いられる。図12に
ループの1つの実施例が図示されている。この実施例に
おいて、スカラー変数sは、ループへのエントリに先行
して初期化され(ライン1)、ループ本体の中に回帰を
有し(ライン4)、また、ループが完了された後に使用
される(ライン7)。ゆえに、その存続時間はループ全
体に広がっている。
【0103】前述されたように、各反復において、ライ
ン4におけるコードが、論理的なレジスタ番号Sから
以前の反復において発生されたsの値を読み出し、論理
的なレジスタ番号Sに現在の反復において発生された
新しい値sを書き込むように、コンパイラは配置する。
これらのレジスタ番号は、レジスタファイルをv回だけ
回転させた後に、以前の反復においてレジスタ番号S
に書き込まれた値が、いまでは、現在の反復においてレ
ジスタ番号Sにおいて利用可能であるように、選択さ
れる。
【0104】図12のライン1で定義されているsの初
期値は、適当なレジスタSに書き込まれなければなら
ず、Sは次のように選択されなければならない。すな
わち、第1の反復がライン4でSから読み出すとき、
ライン1でSに書き込まれた値は、今やレジスタS
においてアクセス可能であるように回転された。第1の
反復におけるライン1とライン4の間の正確な回転数
は、ライン4が発生するソフトウェアパイプラインのス
テージと、ループスケジュール内でsを用いる命令の位
置とに依存する。Sにおける値をSに動かすために
要求される回転数をqとする。
【0105】論理的なレジスタ番号Sへのsの最後の
書き込みは、ループの最後の反復のライン4で発生す
る。この最後に書き込まれた値は、ライン7においてル
ープから出た後で、論理的なレジスタ番号Sから読み
出される。Sにおける値をS に動かすために要求さ
れる回転数をtとする。
【0106】これらのレジスタS,S,S及びS
の間の関係は、図13において概略的に図示されてい
る。図13において、円周は、レジスタファイルの回転
する領域を表す。回転する領域(すなわち図13の円
周)のサイズはpv個のレジスタであると仮定されて、
上記のサイズは、少なくとも1つの、ループからの出口
の時点でも有効な、ループへのエントリの時点で有効で
ある値が存在するときに必要とされるレジスタ数であ
る。回転する領域における個別のレジスタは、円周の周
囲に等しい間隔を互いに有して分離されている。
【0107】(ライン4における)sの読み出しは、ソ
フトウェアパイプラインのステージkにおいて発生する
と仮定されている。ここで、次式が成立する。
【0108】
【数4】0≦k≦p−1
【0109】また、(ライン4における)sの読み出し
は、スケジュールの時間中にw回の回転が発生したとき
に発生すると仮定されている。ここで、次式が成立す
る。
【0110】
【数5】0≦w≦v−1
【0111】ゆえに、次式が成り立つ。
【0112】
【数6】q=kv+w
【数7】t=v(p−k−1)+v−w
【0113】このことから、ライン1におけるsの初期
の定義から、sを用いる出口の後の(post-exit)値要
求命令がそれを発見することを期待できる位置への回転
数は、q+t−vによって与えられ、それは単純にv
(p−1)である。
【0114】従って、ループが実行される前にsが書き
込まれた、初期の論理的なレジスタSを与えられたと
すれば、コンパイラは、ループが完了された後で、最後
に書き込まれたsの値が、論理的なレジスタ番号S
v(p−1)において発見されたことを認識している。
しかしながら、このことは、図12のライン2のループ
制御変数Nが実行時間に0又は負であると発見されると
きに発生することがある、ループの本体が全く実行され
ない特別な場合には適用されない。この特別な場合に
は、ライン7で必要とされるsの値は、他の全ての場合
におけるようにレジスタS+v(p−1)において発
見されるよりは、むしろ単純にSにおいて発見され
る。実行時間にNが0又は負である可能性に対処するた
めに、コンパイラが複数の特別な命令を用いてコンパイ
ルされたコードを補う必要があるので、この不整合は不
便である。コンパイラがこの種の特別な尺度を取らなけ
ればならないことを除去することが望まれる。
【0115】従って、上述されたレジスタの名前を変更
する方法の拡張において、実行時間にループ反復計数値
が0であると発見され、ゆえにループ本体が全く実行さ
れないときに、プロセッサがループの終了を経過し、か
つ実行の継続を行う前に、レジスタファイルはv(p−
1)回だけ回転されるように、プロセッサは配置され
る。これは、ループから出た後の第1の命令の発行の前
に、v(p−1)個のシーケンス番号をスキップするこ
との効果を有する。これは、都合のよいことには、命令
を実際に実行することなく、ループスケジュールの命令
をp−1回だけ発行することによって達成できる。各値
発生命令の発行の動作はレジスタファイルを回転し、従
って、ループスケジュールの完了の各発行はレジスタフ
ァイルをv回だけ回転する。この方法で、ループ反復計
数値がゼロであるとき、sの初期値は所望されるよう
に、論理的なレジスタS+v(p−1)において利用
可能にされる。
【0116】p−1回の命令の発行は、ソフトウェアで
パイプライン処理されたループのシャットダウンモード
にまっすぐに進ませることと、複数の命令のうちの任意
の命令が実行されることを防止するために、付加的な
(大域的な)叙述を誤りに設定することとによって達成
することができる。
【0117】上述の拡張は、プロセッサに、ループ反復
計数値がゼロである場合に、実行時間に特別な動作を実
行しなければならないようにさせる。しかしながら、こ
のことは通常はありそうにない出現(occurrence)であ
るので、典型的な実行時間ペナルティは小さい。
【0118】また、拡張は、他のレジスタの名前を変更
する技術、例えば図5、図6(A)及び図6(B)を参
照して記述された、以前に考察された技術が用いられて
いるときも適用可能である。この場合、プロセッサはゼ
ロ反復計数値の事象において、複数のレジスタをp−1
個のレジスタだけ回転させるように配置される。
【0119】従って、本発明のもう1つの態様は、(値
発生命令の発行ごとの代わりに)ソフトウェアパイプラ
インの境界が交差される毎に、名前の変更が可能な複数
のレジスタの名前を変更するプロセッサであり、かつ、
ゼロ反復計数値の事象において、1つ又はそれより多く
の名前の変更が可能なレジスタをスキップするプロセッ
サを提供できる。そのようなプロセッサにおいて、スキ
ップされたレジスタの数は、値発生命令の数と独立であ
り、ソフトウェアパイプラインのステージ数に依存す
る。好ましくは、スキップされたレジスタの数はp−1
である。
【0120】ちなみに、正確に計算されるべきシーケン
スオフセットに対して、叙述された実行のためにオフさ
れる複数の命令は、複数の値の番号付けに未だ先行して
いなければならないことが理解されよう。しかしなが
ら、これは、決して、ループ内の複数の中間の値を記憶
するために必要とされるレジスタの数を増大させない。
【0121】上記の技術は、複数の回帰値(任意の以前
の反復においてそれ自身の関数として計算された任意の
ループ可変値)がループの外側で正しい順序で初期化さ
れたならば、ソフトウェアのパイプライン処理と関連し
て正しく動作する。
【0122】各値要求命令に含まれた情報は、シーケン
スオフセットである必要がない。要求された値を保持す
るレジスタの識別を、現在達したシーケンス番号とは異
なるその割り当てられたシーケンス番号を直接に用い
て、又はいくつかの基準点に関して用いて、特定するこ
とができる。同様に、レジスタ割り当てをより柔軟にす
るために、値要求命令において、割り当てられたシーケ
ンス番号に依存した情報を特定することができる。例え
ば、発生された値を記憶するために0とは異なる論理的
なレジスタ番号を示すために、シーケンスオフセット
(例えば“@−2”)を特定することができる。また、
割り当てられたシーケンス番号に基づいて、あて先レジ
スタを明示的に特定することができる。
【0123】発生された複数の値に割り当て可能な複数
のシーケンス番号は、例えば255の限界値を有し、そ
のため、上記限界値に達した後でシーケンスは再び0か
ら開始することが理解されよう。
【0124】以上の記述は、実施例として、ソフトウェ
アパイプラインの実行が可能なVLIWプロセッサに関
連するが、本発明はこれらの特徴を有さないプロセッサ
に対しても適用可能であることが理解されよう。本発明
の実施形態に係るプロセッサは、マルチメディアアプリ
ケーション、ネットワークルータ、動画の携帯電話機、
インテリジェント自動車、ディジタルテレビジョン、音
声認識、3Dゲームなどにおいて用いるための、高度に
集積化された「システム・オン・ア・チップ」(SO
C)におけるプロセッサ「コア」として含んでもよい。
【図面の簡単な説明】
【図1】 本発明を実施形態に係るプロセッサの構成要
素を示す図である。
【図2】 コンパイル処理において用いられる、シンボ
ル的なデータフローグラフを示す概略図である。
【図3】 上記コンパイル処理において用いられる、図
2のグラフの木構造で表された内部表現を示す概略図で
ある。
【図4】 プロセッサにより複数の命令をソフトウェア
でパイプライン処理された実行の説明に用いるための表
である。
【図5】 以前に考察されたプロセッサに含まれるレジ
スタファイルの一部を表現する概略図である。
【図6(A)】 図5における以前に考察されたプロセ
ッサに対し、コンパイル処理において複数のレジスタが
どのように指定されるかを説明することに用いるための
表である。
【図6(B)】 図5における以前に考察されたプロセ
ッサに対し、コンパイル処理において複数のレジスタが
どのように指定されるかを説明することに用いるための
表である。
【図7】 本発明の実施形態に係るプロセッサにより複
数の命令をソフトウェアでパイプライン処理された実行
の説明に用いるための表である。
【図8】 図7の実行において複数のレジスタがどのよ
うに割り当てられるかを説明する概略図である。
【図9】 本発明の一実施形態に係る図1のプロセッサ
の構成要素を示す図である。
【図10】 本発明の実施形態に係るコンパイル処理の
説明に用いるためのフローチャートである。
【図11】 本発明のもう1つの実施形態に係るプロセ
ッサにおけるモードレジスタの構成要素を示す図であ
る。
【図12】 ループを含むハイレベル命令の一実施例を
示す図である。
【図13】 図12のループを実行することに用いられ
る複数のレジスタを表す概略図である。
【符号の説明】
1…プロセッサ、 10…命令発行装置、 12…スケジュール記憶装置、 14,16, 18…実行装置、 20…レジスタファイル、 20R,24S…レジスタファイルの領域、 22,24…バス、 26…外部メモリ、 30…値発生命令検出装置、 32…レジスタ名前変更装置、 34…マッピングオフセット記憶装置、 36…マッピング装置、 40…モードレジスタ、 IS1,IS2,IS3…命令発行スロット、 M1,M2…モードビット。
───────────────────────────────────────────────────── フロントページの続き (51)Int.Cl.7 識別記号 FI テーマコート゛(参考) G06F 9/44 322G

Claims (25)

    【特許請求の範囲】
  1. 【請求項1】 実行されるべき複数の命令を予め決めら
    れたシーケンスで発行する命令発行手段を含み、複数の
    命令にてなる上記シーケンスは、実行されるときに各値
    を発生する、予め選択された複数の値発生命令を含み、 上記発行された複数の命令を実行する命令実行手段と、 複数のレジスタを有し、上記実行された複数の命令によ
    って発行された複数の値を記憶するレジスタ手段と、 上記複数の値発生命令によって発生された上記複数の値
    を、それらの各値発生命令の発行の順序に従って、各シ
    ーケンス番号に割り当てるシーケンス番号割り当て手段
    と、 上記発生された各値を、その値に割り当てられたシーケ
    ンス番号に依存して、その発生された値を記憶するため
    の上記複数のレジスタのうちの1つに割り当てるレジス
    タ割り当て手段とを含むプロセッサ。
  2. 【請求項2】 上記レジスタ割り当て手段は、上記発生
    された各値を、実行されるときにその値を発生する上記
    値発生命令に含まれた情報と独立に、その上記レジスタ
    に割り当てるように動作可能である請求項1記載のプロ
    セッサ。
  3. 【請求項3】 上記複数の命令のシーケンスは、実行さ
    れたときに、上記複数の値発生命令のうちの以前に発行
    された1つに係る上記発生された値を要求する、少なく
    とも1つの予め選択された値要求命令をさらに含み、上
    記プロセッサは、そのような値要求命令の実行中に、上
    記以前に発行された命令に係る上記発生された値に割り
    当てられた上記シーケンス番号に依存し、上記値要求命
    令に含まれた情報を用い、その値を記憶するように割り
    当てられた上記レジスタを識別するように動作可能であ
    る割り当てられたレジスタ識別手段をさらに含む請求項
    1又は2記載のプロセッサ。
  4. 【請求項4】 上記情報は、上記予め決められたシーケ
    ンスでの上記値要求命令の発行の時点における最後に割
    り当てられたシーケンス番号と、上記以前に発行された
    命令に係る上記発生された値に割り当てられた上記シー
    ケンス番号との間の差を表すシーケンスオフセットであ
    る請求項3記載のプロセッサ。
  5. 【請求項5】 上記レジスタ手段は、 上記発生された複数の値を記憶するように割り当て可能
    な複数の物理的なレジスタのセットと、 上記命令実行手段によって特定される論理的なレジスタ
    識別子を、上記セットのうちの対応する各物理的なレジ
    スタにマッピングするマッピング手段と、 上記プロセッサの動作中に、上記複数の論理的なレジス
    タ識別子と上記対応する複数の物理的なレジスタとの間
    の上記マッピングを動的に変化させるレジスタ名前変更
    手段とを含む先行する任意の請求項記載のプロセッサ。
  6. 【請求項6】 上記レジスタ割り当て手段は、上記各値
    発生命令に係る上記発生された値を、その値発生命令の
    発行の時点で適用可能な上記マッピングにおいて、予め
    決められた論理的なレジスタ識別子を有する上記複数の
    物理的なレジスタのうちの1つに割り当てるように動作
    可能である請求項5記載のプロセッサ。
  7. 【請求項7】 上記レジスタ名前変更手段は、そのよう
    な値発生命令が発行される毎に、上記マッピングを変化
    させるように動作可能である請求項5又は6記載のプロ
    セッサ。
  8. 【請求項8】 上記レジスタ名前変更手段は、そのよう
    な値発生命令が発行されるときに上記マッピングが変化
    されないディスエーブルドモードと、そのような値発生
    命令が発行される毎に上記マッピングが変化されるイネ
    ーブルドモードとの間で選択的に切り換え可能である請
    求項7記載のプロセッサ。
  9. 【請求項9】 上記レジスタ名前変更手段は、そのよう
    な名前発生命令が発行される毎に上記マッピングが変化
    される第1の名前変更モードと、上記第1の名前変更モ
    ードとは異なる第2の名前変更モードとの間で選択的に
    切り換え可能である請求項7又は8記載のプロセッサ。
  10. 【請求項10】 上記第2の名前変更モードにおいて、
    ソフトウェアでパイプライン処理されるループの実行中
    にソフトウェアのパイプライン処理の境界が交差される
    毎に、上記マッピングは変化される請求項9記載のプロ
    セッサ。
  11. 【請求項11】 上記レジスタ名前変更手段が上記複数
    のモードのうちのいずれを有するかを特定するように、
    1つ又はそれよりも多くのモードビットを有するモード
    レジスタをさらに備えた請求項8乃至10のうちの1つ
    に記載のプロセッサ。
  12. 【請求項12】 上記セットのうちの上記複数の物理的
    なレジスタは、レジスタファイルの名前の変更が可能な
    領域において、連続的なアドレスで1つずつ隣接して配
    置され、 上記マッピング手段は、特定された論理的なレジスタ識
    別子を、マッピングオフセットを用いて、その対応する
    物理的なレジスタにマッピングするように動作可能であ
    り、上記マッピングオフセットは、上記特定された論理
    的なレジスタ識別子と、上記名前の変更が可能な領域に
    おける、上記対応する物理的なレジスタの上記アドレス
    との間の変化する差を表す請求項5乃至11のうちの1
    つに記載のプロセッサ。
  13. 【請求項13】 上記レジスタ名前変更手段は、上記マ
    ッピングオフセットをインクリメント又はデクリメント
    することによって、上記マッピングを変化するように動
    作可能である請求項12記載のプロセッサ。
  14. 【請求項14】 上記論理的なレジスタ識別子は上記シ
    ーケンスオフセットによって直接に提供される請求項4
    に従属されるとして解釈されたときの請求項12又は1
    3記載のプロセッサ。
  15. 【請求項15】 上記命令発行手段は、複数の命令発行
    スロットを有し、上記複数の命令発行スロットのうちの
    各異なる1つずつにおいて複数の命令を同時に発行する
    ように動作可能であり、 上記命令実行手段は、上記複数の命令発行スロットにそ
    れぞれ対応し、その上記対応する命令発行点において発
    行された上記複数の命令を実行するようにそれぞれ動作
    可能である複数の命令実行装置を有する先行する任意の
    請求項記載のプロセッサ。
  16. 【請求項16】 上記シーケンス番号割り当て手段は、
    2つ又はそれよりも多くの値発生命令が各異なる命令発
    行スロットにおいて同時に発行されたとき、そのような
    各異なる複数のシーケンス番号を、それらの命令が発行
    される上記各命令発行スロットに割り当てられた、予め
    決められた発行スロットの順序に従って、それらの2つ
    又はそれよりも多くの値発生命令に係る上記発生された
    複数の値に割り当てるように動作可能である請求項15
    記載のプロセッサ。
  17. 【請求項17】 上記プロセッサはソフトウェアでパイ
    プライン処理された方法において上記シーケンスの複数
    の命令を実行するように動作可能であり、上記予め選択
    された複数の値発生命令は、実行されたときに複数のル
    ープ可変値を発生する複数の命令を含む先行する任意の
    請求項記載のプロセッサ。
  18. 【請求項18】 複数の反復のゼロ番号を要求する上記
    複数の命令の実行中にソフトウェアでパイプライン処理
    されたループが発見された事象において、上記シーケン
    ス番号割り当て手段に、上記第1の命令の発行前に1つ
    又はそれよりも多くの上記シーケンス番号をループに従
    ってスキップさせるように動作可能であるループ取り扱
    い手段をさらに備えた先行する任意の請求項記載のプロ
    セッサ。
  19. 【請求項19】 上記スキップされたシーケンス番号の
    数は、上記ループの反復毎に発行された上記複数の値発
    生命令の数と、上記ループにおいてソフトウェアでパイ
    プライン処理されたステージ数とに依存する請求項18
    記載のプロセッサ。
  20. 【請求項20】 上記ループ取り扱い手段は、上記事象
    において、上記ループにおいてソフトウェアでパイプラ
    イン処理するステージ数に依存して、上記ループに係る
    複数の命令を複数回だけ発行させると同時に、上記命令
    実行手段がそれらの命令を実行することを禁止するよう
    に動作可能であり、それによって、上記ループ内の上記
    値発生命令は上記複数回だけ発行される請求項18又は
    19記載のプロセッサ。
  21. 【請求項21】 複数のハイレベルプログラム命令のシ
    ーケンスを、プロセッサによって実行されるべき対応す
    る複数のローレベル命令のシーケンスに変換するための
    コンパイル方法であって、 上記対応するシーケンスに係るどの上記複数のローレベ
    ル命令が予め選択された複数の値発生命令であり、どれ
    が予め選択された複数の値要求命令であるかを決定する
    ステップを含み、上記各値発生命令は、実行されるとき
    に、値を発生する命令であり、上記各値要求命令は、実
    行されるときに、以前に発行された値発生命令によって
    発生された上記値を要求する命令であり、 それらの各値発生命令が実行中に発行される順序に従っ
    て、上記発生された複数の値を各シーケンス番号に割り
    当てるステップと、 実行中の上記プロセッサによる使用のために上記各値要
    求命令を情報を用いて符号化して、その命令によって要
    求された上記発生された値を識別するステップとを含
    み、その情報は、その発生された値に割り当てられた上
    記シーケンス番号に依存する方法。
  22. 【請求項22】 上記符号化するステップにおいて、上
    記情報は、上記対応するシーケンスにおける上記値要求
    命令が発行される時点において、最新の上記発生された
    値に割り当てられた上記シーケンス番号と、その命令に
    よって要求された上記発生された値に割り当てられた上
    記シーケンス番号との間の差を表すシーケンスオフセッ
    トである請求項21記載の方法。
  23. 【請求項23】 上記符号化するステップにおいて、上
    記各値発生命令は、上記発生された値をどこに記憶する
    かを識別するように、プロセッサによる使用のためのい
    かなる情報も用いずに符号化された請求項21又は22
    記載の方法。
  24. 【請求項24】 上記複数のハイレベルプログラム命令
    のシーケンスはループ構造を含み、 上記ループ構造を分析し、上記ループ構造に係る上記複
    数のハイレベルプログラム命令を、ソフトウェアのパイ
    プライン処理に従ってプロセッサによって反復的に実行
    されるべき上記複数のローレベル命令のスケジュールに
    変換するステップと、 上記スケジュールにおける上記複数の命令のうちの1つ
    が、その上記発生された値がループ可変値であるような
    値発生命令であるとき、その命令に係る上記発生された
    値を、異なる複数の反復における異なる複数のシーケン
    ス番号に割り当てるステップとをさらに含む請求項21
    乃至23のうちの1つに記載の方法。
  25. 【請求項25】 コンピュータ上で動作するときに、上
    記コンピュータに対して、複数のハイレベルプログラム
    命令のシーケンスを、プロセッサによって実行されるべ
    き対応する複数のローレベル命令のシーケンスに変換す
    るコンパイル方法を実行させるコンピュータプログラム
    を伝送する記録媒体であって、 上記コンピュータプログラムは、 上記対応するシーケンスに係るどの上記複数のローレベ
    ル命令が予め選択された複数の値発生命令であり、どれ
    が予め選択された複数の値要求命令であるかを決定する
    決定部を含み、上記各値発生命令は、実行されるとき
    に、値を発生する命令であり、上記各値ハイ要求命令
    は、実行されるときに、以前に発行された値発生命令に
    よって発生された上記値を要求する命令であり、 それらの各値発生命令が実行中に発行される順序に従っ
    て、上記発生された複数の値を各シーケンス番号に割り
    当てる割り当て部と、 上記プロセッサによる使用のために各値要求命令を情報
    を用いて符号化して、その命令によって要求された上記
    発生された値を識別する符号化部とを含み、その情報
    は、その発生された値に割り当てられた上記シーケンス
    番号に依存する記録媒体。
JP2001032090A 2000-02-08 2001-02-08 プロセッサにおける通信命令結果及びプロセッサのためのコンパイル方法 Pending JP2001282532A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB0002848.0A GB0002848D0 (en) 2000-02-08 2000-02-08 Communicating instruction results in processors and compiling methods for processors
GB0002848 2000-02-08

Publications (1)

Publication Number Publication Date
JP2001282532A true JP2001282532A (ja) 2001-10-12

Family

ID=9885153

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001032090A Pending JP2001282532A (ja) 2000-02-08 2001-02-08 プロセッサにおける通信命令結果及びプロセッサのためのコンパイル方法

Country Status (5)

Country Link
US (1) US6826677B2 (ja)
EP (1) EP1124182A3 (ja)
JP (1) JP2001282532A (ja)
CN (1) CN1308274A (ja)
GB (2) GB0002848D0 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015520905A (ja) * 2013-05-30 2015-07-23 インテル・コーポレーション パイプライン化されたスケジュールにおけるエイリアスレジスタ割り当て
JP2016519375A (ja) * 2013-05-30 2016-06-30 インテル コーポレイション パイプラインソフトウェアの動的な最適化

Families Citing this family (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE0002440D0 (sv) 2000-06-28 2000-06-28 Virtutech Ab Interpreter
GB2380825B (en) 2001-10-12 2004-07-14 Siroyan Ltd Processors and compiling methods for processors
CA2365375A1 (en) * 2001-12-18 2003-06-18 Ibm Canada Limited-Ibm Canada Limitee Optimizing source code for iterative execution
US7200738B2 (en) 2002-04-18 2007-04-03 Micron Technology, Inc. Reducing data hazards in pipelined processors to provide high processor utilization
US20030237080A1 (en) * 2002-06-19 2003-12-25 Carol Thompson System and method for improved register allocation in an optimizing compiler
US7058938B2 (en) * 2003-03-05 2006-06-06 Intel Corporation Method and system for scheduling software pipelined loops
JP2005129001A (ja) * 2003-09-30 2005-05-19 Toshiba Corp プログラム実行装置、マイクロプロセッサ及びプログラム実行方法
US7493481B1 (en) * 2004-05-17 2009-02-17 Netxen, Inc. Direct hardware processing of internal data structure fields
US7673294B2 (en) * 2005-01-18 2010-03-02 Texas Instruments Incorporated Mechanism for pipelining loops with irregular loop control
US7761691B2 (en) * 2005-10-27 2010-07-20 National Tsing Hua University Method for allocating registers using simulated annealing controlled instruction scheduling
KR100662846B1 (ko) 2005-11-09 2007-01-02 삼성전자주식회사 데이터 처리 시스템 및 데이터 처리방법
US7840954B2 (en) * 2005-11-29 2010-11-23 International Business Machines Corporation Compilation for a SIMD RISC processor
WO2007143278A2 (en) 2006-04-12 2007-12-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
EP2523101B1 (en) * 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US7809930B2 (en) * 2007-01-24 2010-10-05 Arm Limited Selective suppression of register renaming
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
CN101770387B (zh) * 2008-12-26 2013-03-13 北京中电华大电子设计有限责任公司 一种含有配对寄存器的寄存器分配方法
CN101894013B (zh) * 2010-07-16 2013-07-31 中国科学院计算技术研究所 处理器内指令级流水线控制方法及其系统
KR101685247B1 (ko) 2010-09-17 2016-12-09 소프트 머신즈, 인크. 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측
WO2012135050A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9766893B2 (en) 2011-03-25 2017-09-19 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
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
TWI603198B (zh) 2011-05-20 2017-10-21 英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
US9442772B2 (en) 2011-05-20 2016-09-13 Soft Machines Inc. Global and local interconnect structure comprising routing matrix to support the execution of instruction sequences by a plurality of engines
CN104040491B (zh) 2011-11-22 2018-06-12 英特尔公司 微处理器加速的代码优化器
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
US9417930B2 (en) * 2012-04-19 2016-08-16 Siemens Aktiengesellschaft Time slack application pipeline balancing for multi/many-core PLCs
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
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
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
KR102063656B1 (ko) 2013-03-15 2020-01-09 소프트 머신즈, 인크. 블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
WO2014151043A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for emulating a guest centralized flag architecture by using a native distributed flag architecture
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source 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
US9424011B2 (en) * 2014-04-01 2016-08-23 International Business Machines Corporation Recursive expression simplification
US9841974B2 (en) * 2014-04-25 2017-12-12 Avago Technologies General Ip (Singapore) Pte. Ltd. Renaming with generation numbers
US20160070662A1 (en) * 2014-09-04 2016-03-10 National Instruments Corporation Reordering a Sequence of Memory Accesses to Improve Pipelined Performance
GB2539410B (en) * 2015-06-15 2017-12-06 Bluwireless Tech Ltd Data processing
GB2539411B (en) 2015-06-15 2017-06-28 Bluwireless Tech Ltd Data processing
CN105354117B (zh) * 2015-10-26 2018-10-19 清华大学 超标量处理器中指令相关性检测的方法
CN106293627B (zh) * 2016-07-27 2019-01-11 珠海市杰理科技股份有限公司 寄存器调用及调用指令编码的方法、装置
CN109188994B (zh) * 2017-06-30 2021-06-08 沈阳新松机器人自动化股份有限公司 一种梯形图编译方法及相应的plc系统
CN108052347B (zh) * 2017-12-06 2021-07-20 北京中科睿芯智能计算产业研究院有限公司 一种执行指令选择的装置、方法及指令映射方法
US11366646B2 (en) * 2020-01-23 2022-06-21 Huawei Technologies Co., Ltd. Method and apparatus for predicting and scheduling copy instruction for software pipelined loops
US20240086162A1 (en) * 2022-09-09 2024-03-14 Microsoft Technology Licensing, Llc Interleaved machine instruction placement in memory
CN116400982B (zh) * 2023-05-26 2023-08-08 摩尔线程智能科技(北京)有限责任公司 配置中继寄存器模块的方法和装置、计算设备和可读介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5826055A (en) * 1991-07-08 1998-10-20 Seiko Epson Corporation System and method for retiring instructions in a superscalar microprocessor
US5628021A (en) * 1992-12-31 1997-05-06 Seiko Epson Corporation System and method for assigning tags to control instruction processing in a superscalar processor
GB9305263D0 (en) * 1993-03-15 1993-05-05 Univ Westminster Parrallel computation
US6205538B1 (en) * 1994-08-24 2001-03-20 Sun Microsystems, Inc. Instruction result labeling in a counterflow pipeline processor
US5911057A (en) * 1995-12-19 1999-06-08 Texas Instruments Incorporated Superscalar microprocessor having combined register and memory renaming circuits, systems, and methods
JP2933026B2 (ja) * 1996-08-30 1999-08-09 日本電気株式会社 複数命令並列発行/実行管理装置
GB2317464A (en) * 1996-09-23 1998-03-25 Advanced Risc Mach Ltd Register addressing in a data processing apparatus

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015520905A (ja) * 2013-05-30 2015-07-23 インテル・コーポレーション パイプライン化されたスケジュールにおけるエイリアスレジスタ割り当て
JP2016519375A (ja) * 2013-05-30 2016-06-30 インテル コーポレイション パイプラインソフトウェアの動的な最適化

Also Published As

Publication number Publication date
US6826677B2 (en) 2004-11-30
US20010016901A1 (en) 2001-08-23
CN1308274A (zh) 2001-08-15
GB0002848D0 (en) 2000-03-29
GB0102461D0 (en) 2001-03-14
EP1124182A3 (en) 2005-08-03
GB2355094B (en) 2002-05-01
EP1124182A2 (en) 2001-08-16
GB2355094A (en) 2001-04-11

Similar Documents

Publication Publication Date Title
JP2001282532A (ja) プロセッサにおける通信命令結果及びプロセッサのためのコンパイル方法
US6944853B2 (en) Predicated execution of instructions in processors
JPH0922362A (ja) コンピュータシステムおよびコンピュータ制御方法
JPH09282179A (ja) オーバーヘッド命令を最小限にする最適化コンパイラにおける命令スケジューリングの方法および装置
US7512771B2 (en) Mapping circuitry and method comprising first and second candidate output value producing units, an in-range value determining unit, and an output value selection unit
US11720332B2 (en) Compiling a program from a graph
US7302557B1 (en) Method and apparatus for modulo scheduled loop execution in a processor architecture
Kessler Scheduling expression DAGs for minimal register need
JP2002532775A (ja) インタープリタプログラム実行方法
EP3065051A1 (en) Flow control for language-embedded programming in general-purpose computing on graphics processing units
US6954927B2 (en) Hardware supported software pipelined loop prologue optimization
US8549466B2 (en) Tiered register allocation
US7316012B2 (en) System, method, and apparatus for spilling and filling rotating registers in software-pipelined loops
JP2002251282A (ja) プロセッサにおけるループの処理
US11762641B2 (en) Allocating variables to computer memory
JP7383390B2 (ja) 情報処理ユニット、情報処理装置、情報処理方法及びプログラム
US11675572B2 (en) Sharing data structures
Nicolau et al. Fine-grain compilation for pipelined machines
Schwarz et al. Engineering an optimized instruction set architecture for AMIDAR processors
Popp et al. Automatic HAL generation for embedded multiprocessor systems
Kästner et al. Integer linear programming vs. graph-based methods in code generation
Naini A dedicated data flow architecture for hardware compilation
JP4330582B2 (ja) Mapコンパイラによるパイプライン化されたループ構造