JP2002251282A - プロセッサにおけるループの処理 - Google Patents

プロセッサにおけるループの処理

Info

Publication number
JP2002251282A
JP2002251282A JP2002023484A JP2002023484A JP2002251282A JP 2002251282 A JP2002251282 A JP 2002251282A JP 2002023484 A JP2002023484 A JP 2002023484A JP 2002023484 A JP2002023484 A JP 2002023484A JP 2002251282 A JP2002251282 A JP 2002251282A
Authority
JP
Japan
Prior art keywords
loop
processor
register
iterations
instruction
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
JP2002023484A
Other languages
English (en)
Inventor
Nigel Peter Topham
ナイジェル・ピーター・トファム
Raymond Malcolm Livesley
レイモンド・マルコム・ライブズリー
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
Priority claimed from GB0102461A external-priority patent/GB2355094B/en
Priority claimed from GB0124562A external-priority patent/GB0124562D0/en
Application filed by Siroyan Ltd filed Critical Siroyan Ltd
Publication of JP2002251282A publication Critical patent/JP2002251282A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • 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 or 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
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

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

Abstract

(57)【要約】 【課題】 プロセッサにおいて、ソフトウェアでパイプ
ライン処理されるループを処理する。 【解決手段】 複数のレジスタ20は、実行される複数
の命令によって発生されかつ消費される値を記憶する。
レジスタ名前変更装置32は、ループの実行中にレジス
タの名前を変更する。ループがゼロの反復を要求するイ
ベントにおいて、レジスタの名前は予め決められた方法
で変更されて、レジスタ割り当てを、ループが1つ以上
の反復を有する通常の場合に発生するものと整合させ
る。これは、ループのエピローグフェーズのみを実行
し、ループスケジュールにおける複数の命令をそれらの
結果がコミットしないようにオフにすることにより達成
される。エピローグフェーズにおける複数の命令の発行
は、予め決められた名前の変更を自動的に実行する。エ
ピローグ反復の回数は、ループをスタートアップするた
めに用いられるループ命令において指定されてもよい。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、プロセッサにおけ
るループの処理に関する。
【0002】
【従来の技術】ハイパフォーマンスコンピューティング
では、通常、ハイレートでの命令の実行が目標のマシン
(例えばマイクロプロセッサ)に要求される。実行時間
は、多くの場合、アプリケーションプログラム内の複数
のループ構造によって支配される。ハイレートでの命令
の実行を可能にするために、プロセッサは複数の個別の
実行装置を含んでもよく、上記各個別の装置を用いるこ
とで、他の複数の実行装置による複数の命令の実行と平
行して、1つ又はそれ以上の命令を実行することができ
る。
【0003】そのような複数の実行装置は、複数の個別
のステージから構成されるいわゆるソフトウェアパイプ
ラインを提供するために用いられることが可能である。
各ソフトウェアパイプラインのステージは、特定の実行
装置に対する、固定された物理的な対応を持たない。む
しろ、アプリケーションプログラムにおけるループ構造
がコンパイルされるとき、ループの個別の反復を構成す
る複数の機械語命令は、ソフトウェアパイプラインのス
ケジュールに従って、異なる複数の実行装置による実行
に対してスケジュールが決定される。このスケジュール
は複数の逐次的なステージに分割され、複数の命令は、
複数の反復が、逐次的な反復に係る複数の開始の間の選
択されたループ開始インターバルを有して、複数の異な
る実行装置によってオーバーラップする方法で実行され
ることを可能にするようにスケジュールが決定される。
従って、反復iの第1のステージが終了し、その反復が
第2のステージに入るとき、次の反復i+1の実行は、
反復i+1の第1のステージで開始される。このよう
に、反復i+1の第1のステージにおける命令は、反復
iの第2のステージにおける命令の実行に対して並列に
実行される。
【0004】そのようなソフトウェアでパイプライン処
理されるループには、通常、パイプラインにおける複数
の異なる命令の間で通信されなければならない、複数の
ループ変数値、すなわち、ループの各異なる反復におい
て再評価されなければならない複数の表現が存在する。
そのような複数のループ変数値を扱うために、それら
を、いわゆる回転するレジスタファイルに記憶すること
ができる。この場合、各ループ変数値は、回転するレジ
スタファイル内の論理的レジスタ番号に割り当てられ、
この論理的レジスタ番号は、1つの反復から次の反復に
向かう間に変化しない。回転するレジスタファイル内で
は、各論理的レジスタ番号は、レジスタファイル内の物
理的レジスタにマッピングされ、このマッピングは、新
しい反復が開始される毎に、すなわち、パイプラインの
境界が交差される毎に回転される。従って、複数の異な
る反復における対応する複数の命令はすべて、同一の論
理的レジスタ番号を参照することができ、コンパイルさ
れる複数の命令を簡単化するとともに、1回の反復によ
って発生される値が、異なる反復の続いて実行される命
令によって上書きされることを防止する。
【0005】これらの事項については、特開2001−
282532号公報として公開されている本願出願人の
同時係属中の日本国特許出願に詳述されており、その内
容の全体は参照によってここに含まれる。特に、その出
願は、値発生命令が発行される毎にマッピングが回転さ
れる、代替のレジスタ名前変更方法について記述してい
る。
【0006】
【発明が解決しようとする課題】いずれの名前変更方法
においても、ループ本体が1回又はそれ以上の回数だけ
実行される通常の場合と比較して、ソフトウェアでパイ
プライン処理されるループのループ本体がまったく実行
されない特殊な場合では、レジスタロケーションの不整
合が発生しうるという問題が生じる。ソフトウェアパイ
プラインループのループ本体がまったく実行されないこ
の特殊な場合は、例えば、ループ命令が、反復するルー
プをセットアップする一方、ループ制御変数は開始値か
ら終了値へとインクリメントして変化されるが、終了値
自体は、実行中にループ命令が遭遇される時点において
開始値よりも小さい変数である場合に生じることがあ
る。この特殊な場合では、結果的に、複数のレジスタロ
ケーションは、ループ本体が1回又はそれ以上の回数だ
け実行されるときに後続するものとは整合しない。
【0007】
【課題を解決するための手段】本発明の1つの実施形態
では、プロセッサは、ソフトウェアでパイプライン処理
されるループを実行するように動作可能である。上記プ
ロセッサは、実行される複数の命令によって発生されか
つ消費される複数の値を記憶するために、複数のレジス
タを有するレジスタ装置を備えている。上記複数のレジ
スタの名前は、ループの実行中に、例えばソフトウェア
パイプラインの境界が交差される毎に又は値発生命令が
発行される毎に変更される。
【0008】1つの実施形態において、上記プロセッサ
はループ処理装置も備え、上記ループ処理装置は、ソフ
トウェアでパイプライン処理されるループがゼロの反復
を要求するイベントにおいて、上記複数のレジスタの名
前を予め決められた方法で変更させる。この予め決めら
れた名前変更は、好ましくは、ライブイン値がライブア
ウト値になるようにループが1回又はそれ以上の反復を
要求するときにライブイン値が存在していたレジスタと
同じレジスタに、当該ライブイン値がゼロの反復の場合
に存在するというものである。
【0009】1つの実施形態において、上記ループ処理
装置は、ループがゼロの反復を要求するイベントにおい
て、ループのエピローグフェーズを実行させる。上記エ
ピローグフェーズは、通常、ゼロでない反復のループに
係るすべての反復が開始されたとき(又はループの内側
の終了(exit)命令が実行されたとき)に入られる。こ
のエピローグフェーズは、1つ又はそれ以上のエピロー
グ反復を備えることがある。
【0010】エピローグ反復の回数(エピローグ反復計
数値又はEIC)は、演算における名前変更方法に依存
する。例えば、ソフトウェアパイプラインの境界が交差
される毎に複数のレジスタの名前が変更される場合で
は、EICは、ソフトウェアパイプラインステージの数
よりも1だけ少ない数であってもよい。各エピローグ反
復は、1つ又はそれ以上のレジスタの名前変更演算を発
生させる。
【0011】従って、エピローグフェーズの実行は、ラ
イブイン値が、ゼロの反復のループの後に、ゼロでない
反復のループが実行されたときにライブイン値が存在し
ていたレジスタと同じレジスタにおいて発見されるよう
に、複数のレジスタの名前が自動的に変更されることを
可能にする。
【0012】1つの実施形態において、エピローグフェ
ーズにおけるレジスタの名前変更演算の回数は、ループ
自体の反復計数値(IC)とは独立に指定することがで
きる。このことは、コンパイラが、プロセッサによって
実行されるオブジェクトプログラムにおける、必要なレ
ジスタの名前変更演算の回数を指定することを可能にす
る。
【0013】1つの実施形態において、エピローグフェ
ーズにおける反復回数(すなわちEIC)は、上記IC
とは独立に指定することができる。このことは、コンパ
イラが、プロセッサによって実行されるオブジェクトプ
ログラムにおける、必要なエピローグ反復の回数を指定
することを可能にする。
【0014】上記EICは、プロセッサによって実行可
能な命令において指定されてもよい。1つの実施形態に
おいて、この命令は、ソフトウェアでパイプライン処理
されるループのスタートアップの間に実行されるループ
命令である。
【0015】上記ループ命令は、上記EICが指定され
るフィールドを有していてもよい。これは、EICとI
Cとが独立して指定されてもよいように、ループ命令の
ICフィールドとは分離されている可能性がある。
【0016】1つの実施形態において、上記ループ処理
装置は、ループを開始するとき(例えばこのようなルー
プ命令が実行されるとき)にループに対するICを受信
し、受信されたICがゼロであれば、それは、エピロー
グフェーズのみを実行させる。受信されたICがゼロで
ないとき、それは、ループのプロローグフェーズ及びカ
ーネルフェーズを通常の方法で実行させる。
【0017】1つの実施形態において、上記プロセッサ
は、例えば、本願出願人の同時係属中の英国特許出願公
開第2363480号公報に詳述されているように、複
数の命令の叙述された実行を有し、この内容の全体は参
照によってここに含まれている。
【0018】このようなプロセッサにおいては、ループ
に係る異なるソフトウェアパイプラインステージに対し
てそれぞれ対応する述語レジスタが存在してもよい。述
語レジスタが第1の状態(例えば1)を有するとき、そ
れの対応するソフトウェアパイプラインステージはイネ
ーブルにされ、例えば、当該ステージの複数の命令は通
常通りに実行されてそれらの結果は出力して格納される
(コミットされる)。述語レジスタが第2の状態(例え
ば0)を有するとき、それの対応するソフトウェアパイ
プラインステージはディスエーブルにされ、例えば、そ
の命令は実行されてもよいがそれの結果はコミットされ
ない。
【0019】1つの実施形態において、上記ループ処理
装置は、受信されたICに依存して上記複数の述語レジ
スタを開始するように動作可能である。
【0020】1つの実施形態において、上記ループ処理
装置は、ICがゼロであるときは上記複数の述語レジス
タを1つの方向へと開始し、ICがゼロでないときは上
記複数の述語レジスタを少なくとも1つの他の方向へと
開始するように動作可能である。
【0021】1つの実施形態において、ICがゼロであ
るとき、ループの複数のステージに対応するすべての述
語レジスタは第2の状態に初期化されるのに対して、I
Cがゼロでないとき、第1のパイプライン状態に対応す
る述語レジスタは第1の状態に初期化され、後続のステ
ージに対応する各述語レジスタは第2の状態に初期化さ
れる。このことは、ゼロの反復計数値の場合にはエピロ
ーグフェーズが即時に開始するが、通常(ゼロでない反
復計数値)の場合には最初にプロローグフェーズ及びカ
ーネルフェーズに入られることを意味している。
【0022】1つの実施形態において、第1のパイプラ
インステージに対応する述語レジスタの状態は第2のパ
イプラインステージに対応する述語レジスタにシフトさ
れ、以下同様にシフトされる。この方法において、上記
複数のパイプラインステージは、プロローグ、カーネル
及びエピローグのフェーズにおいて必要とされるように
連続してイネーブルにされかつディスエーブルにされる
ことが可能である。
【0023】1つの実施形態において、第1のパイプラ
インステージに対応する述語レジスタの状態は、シード
レジスタに依存して設定される。この場合、上記ループ
処理装置は、好ましくは、受信されたICに依存して上
記シードレジスタを異なるように初期化する。
【0024】1つの実施形態において、上記ループ処理
装置は、受信されたICがゼロ又は1であるとき上記シ
ードレジスタを第2の状態に初期化し、受信されたIC
が2又はそれ以上であるとき上記シードレジスタを第1
の状態に初期化する。
【0025】本発明の第2の態様は、プロセッサのため
のコンパイル方法に関する。
【0026】1つの実施形態において、当該コンパイル
方法は、ソフトウェアでパイプライン処理されるループ
がゼロの反復計数値を有するイベントにおいて、上記プ
ロセッサによって実行されるレジスタの名前変更をオブ
ジェクトプログラムにおいて指定することを備える。
【0027】1つの実施形態において、上記プロセッサ
は、ゼロの反復計数値の場合にループのエピローグフェ
ーズのみを実行し、当該コンパイル方法は、エピローグ
フェーズにおいて実行されるレジスタの名前変更演算の
回数を指定する情報をオブジェクトプログラムに含むこ
とを必要とする。
【0028】1つの実施形態において、上記プロセッサ
は、ゼロの反復計数値の場合にループのエピローグフェ
ーズのみを実行し、当該コンパイル方法は、エピローグ
フェーズにおいて実行される反復回数を指定する情報を
オブジェクトプログラムに含むことを必要とする。
【0029】1つの実施形態において、当該情報はオブ
ジェクトプログラムに含まれる命令において指定され
る。1つの実施形態において、この命令は、ソフトウェ
アでパイプライン処理されるループのスタートアップの
間に実行されるループ命令である。
【0030】当該ループ命令は、EICが指定されるフ
ィールドを有していてもよい。これは、EICとICと
が独立して指定されてもよいように、ループ命令のIC
フィールドとは分離されている可能性がある。
【0031】本発明の第3の態様は、プロセッサによる
実行のためのオブジェクトプログラムに関する。
【0032】1つの実施形態において、上記プロセッサ
は、ゼロの反復計数値の場合にループのエピローグフェ
ーズのみを実行し、上記オブジェクトプログラムは、エ
ピローグフェーズにおいて実行される反復回数を指定す
る情報を含んでいる。
【0033】1つの実施形態において、上記プロセッサ
は、ゼロの反復計数値の場合にループのエピローグフェ
ーズのみを実行し、上記オブジェクトプログラムは、エ
ピローグフェーズにおいて実行される反復回数を指定す
る情報を含んでいる。
【0034】1つの実施形態において、当該情報は上記
オブジェクトプログラムに含まれる命令において指定さ
れる。1つの実施形態において、この命令は、ソフトウ
ェアでパイプライン処理されるループのスタートアップ
の間に実行されるループ命令である。
【0035】上記ループ命令は、EICが指定されるフ
ィールドを有していてもよい。これは、EICとICと
が独立して指定されてもよいように、ループ命令のIC
フィールドとは分離されている可能性がある。
【0036】本発明を具体化するオブジェクトプログラ
ムは、それ自体によって提供されるか、キャリア媒体に
よって伝送されることが可能である。上記キャリア媒体
は、記録媒体(例えばディスク又はCD−ROM)又は
信号のような伝送媒体であってもよい。
【0037】本発明の他の態様は、上述のようなコンパ
イル方法を実行するためのコンパイル装置と、コンピュ
ータ上で実行されるときにこのようなコンパイル方法を
当該コンピュータに実行させ、及び/又はコンピュータ
内にロードされているときに当該コンピュータをこうし
たコンパイル装置にならしめるコンピュータプログラム
とに関連している。本発明を具体化するコンパイル方法
は、コンピュータプログラムに従って動作する汎用コン
ピュータのような電子的なデータ処理手段によって実行
される。
【0038】本発明を具体化するコンピュータプログラ
ムは、それ自体によって提供されるか、キャリア媒体に
よって伝送されることが可能である。上記キャリア媒体
は、記録媒体(例えばディスク又はCD−ROM)又は
信号のような伝送媒体であってもよい。
【0039】
【発明の実施の形態】以下、添付の図面が実施例として
参照される。
【0040】図1は、本発明の実施形態に係るプロセッ
サの構成要素を示す。この実施例において、上記プロセ
ッサは、ソフトウェアのパイプライン処理と巡回的なレ
ジスタの名前変更とを実行するためのハードウェアサポ
ートを有する超長命令語(very long instruction wor
d; VLIW)プロセッサである。プロセッサ1は、命
令発行装置10と、スケジュール記憶装置12と、第
1、第2及び第3の各実行装置14,16及び18と、
レジスタファイル20とを含む。命令発行装置10は、
それぞれ第1、第2及び第3の実行装置14,16及び
18に接続された3つの発行スロットIS1,IS2及
びIS3を有する。第1のバス22は、3つの実行装置
14,16及び18のすべてを、レジスタファイル20
に接続する。第2のバス24は、第1及び第2の装置1
4及び16(しかしこの実施形態では第3の実行装置1
8は除く)を、この実施例では外部のランダムアクセス
メモリ(RAM)装置であるメモリ26に接続する。上
記メモリ26は、それに代わって、プロセッサ1の内部
のRAMであることができる。
【0041】ところで、図1は、複数の実行装置をレジ
スタファイル20及びメモリ26に接続する、共有され
たバス22及び24を図示しているが、それに代わっ
て、各実行装置がレジスタファイル及びメモリへのそれ
ら自身の独立した接続を有してもよいことが理解されよ
う。
【0042】プロセッサ1は、一連の処理サイクルを実
行する。各処理サイクルにおいて、命令発行装置10
は、発行スロットIS1乃至IS3のそれぞれにおいて
1つの命令を発行することができる。上記複数の命令
は、スケジュール記憶装置12に記憶された(以下に説
明される)ソフトウェアパイプラインのスケジュールに
従って発行される。
【0043】命令発行装置10によって異なる複数の発
行スロットにおいて発行された複数の命令は、対応する
実行装置14,16及び18によって実行される。この
実施形態において、実行装置のそれぞれは、同時に1つ
よりも多くの命令を実行できるので、新しい命令を実行
することは、関係した実行装置に発行された以前の命令
の実行の完了前に開始することができる。
【0044】複数の命令を実行するために、各実行装置
14,16及び18は、第1のバス22を介して各レジ
スタファイル20へのアクセスを有する。ゆえに、レジ
スタファイル20に含まれた複数のレジスタに保持され
る複数の値は、実行装置14,16及び18によって読
み出されかつ書き込まれることが可能である。またさら
に、第1及び第2の実行装置14及び16は、外部メモ
リ26の複数のメモリロケーションに記憶される複数の
値に係る読み出し及び書き込みをイネーブルにするよう
に、第2のバス24を介して外部メモリ26へのアクセ
スを有する。第3の実行装置18は、外部メモリ26へ
のアクセスを持たず、そのため、この実施形態では、レ
ジスタファイル20に含まれた値を操作することだけが
可能である。
【0045】図1のプロセッサは、明確に区別される複
数のループの反復からの複数の命令をオーバーラップさ
せてループの合計実行時間を短縮させようという技術で
あるソフトウェアパイプライン処理を実行する能力があ
る。各反復は、各パイプラインステージにゼロの命令又
はそれ以上の命令が存在する複数のパイプラインステー
ジに仕切られる。
【0046】下記の例は、各パイプラインステージが1
サイクルの長さである、ループの単一のパイプライン処
理される反復の概念図である。
【0047】
【表1】 ―――――――――――――――――――――――――――――――――――― stage 1: ld4 r4=[r5] stage 2: --//empty stage stage 3: add r7=r4,r9 stage 4: st4 [r6]=r7 ――――――――――――――――――――――――――――――――――――
【0048】ここで、ステージ1における命令は、論理
的レジスタ5番によって指示されたメモリアドレスに含
まれる4バイトの値を論理的レジスタ4番にロードする
ロード命令である。
【0049】パイプラインステージ2には、命令が存在
しない(空きステージ)。パイプラインステージ3にお
ける命令は、論理的レジスタ4番及び9番の内容を互い
に加算して結果を論理的レジスタ7番に記憶する加算命
令である。ステージ4における命令は、論理的レジスタ
7番の内容を論理的レジスタ6番によって指示されたメ
モリロケーションに記憶する記憶命令である。
【0050】ループのソフトウェアでパイプライン処理
される実行の間は、予め決められた数のサイクルの後に
新しい反復が開始される。連続する反復の開始の間のサ
イクル数は、開始間隔(II)と呼ばれる。モジュロス
ケジューリングは、反復間隔のIIが定数であり、かつ
ループのすべての反復が同一のスケジュールを有する、
特別な形式のソフトウェアパイプライン処理である。本
実施例では、IIは1個のサイクルであることが仮定さ
れている。
【0051】また本実施例では、ループは合計5回の反
復を必要とすることも仮定される。これら5回の反復
は、図2に概念的に示されている。パイプラインの反復
の各ステージは、IIサイクルの長さであることが分か
る。また、反復1における最初のld4命令の発行から
反復5における最後のst4命令の発行まで、X乃至X
+7の8個のサイクルが必要とされることが分かる。こ
れらの8個のサイクルでは、合計15個の命令が発行さ
れる。
【0052】ソフトウェアでパイプライン処理されるル
ープは、プロローグフェーズ、カーネルフェーズ及びエ
ピローグフェーズの3つのフェーズを有している。図3
には、本実施例におけるこれらのフェーズのそれぞれの
開始が示されている。
【0053】プロローグフェーズの間は、新しいループ
の反復がIIサイクル毎に開始されてパイプラインが充
填される。プロローグフェーズの第1のサイクルの間
は、反復1のステージ1が実行される。第2のサイクル
の間は、反復2のステージ1と反復1のステージ2とが
実行され、以後同様に続く。
【0054】カーネルフェーズの開始(反復pの開始、
ここで、pはパイプラインステージの数である。)まで
に、パイプラインは満杯(full)となる。反復4のステ
ージ1、反復3のステージ2、反復2のステージ3及び
反復1のステージ4が実行される。
【0055】カーネルフェーズの間は、IIサイクル毎
に新しいループの反復が開始され、かつ他の反復が完了
される。
【0056】最終的に、エピローグフェーズの開始にお
いては、開始すべき新しいループの反復は存在せず、す
でに進行中である反復は継続して完了し、パイプライン
から抜け出す。本実施例では、開始すべき新しいループ
の反復が存在せず、反復3が終了に至るので、X+5の
サイクルにおいてエピローグフェーズが開始する。この
ように、本実施例では、反復3乃至5はエピローグフェ
ーズの間に完了される。
【0057】本実施例では、反復2におけるロード命令
は、反復1におけるロード命令の結果が(反復1におけ
る加算命令によって)消費される前に発行される。従っ
て、ループの連続する反復に属する複数のロードは、既
存の生きている(有効な)値に上書きすることを防止す
るように、異なるレジスタを目標とする必要がある。
【0058】モジュロスケジューリングは、複数のルー
プの反復が逐次的でなく並行して実行されるように調整
することをコンパイラに許す。しかしながら、複数の反
復の重複する実行は、通常、ループのアンロール(展
開)と、複数のレジスタに係るソフトウェア名前変更と
を必要とする。これは、コードの複製を生成し、生きて
いる(有効な)入力値及び出力値を処理するための複雑
な方法を必要とする。アンロールの必要を取り除くため
には、すべての反復にそれ自体のレジスタのセットが提
供されるように、ループの反復の間に値を記憶するため
に用いられる複数のレジスタの名前を、反復が進行する
ときに変更されるように調整することができる。このレ
ジスタの名前変更の一実施例はレジスタ回転と呼ばれて
いる。この技術では、論理的レジスタ番号と物理的レジ
スタアドレスとの間のマッピングが、回転する方法で変
化される。マッピングの回転をトリガーするイベント
は、ソフトウェアパイプラインの境界の交差、すなわち
1つのパイプラインステージから次のパイプラインステ
ージへの交差であるか、又は値発生命令の発行であるこ
とが可能である。これらの事項については、本願出願人
の同時係属中の日本国特許出願公開の特開2001−2
82532号公報に詳述され、その内容の全体は参照に
よってここに含まれる。レジスタの名前変更の使用を通
して、ソフトウェアパイプライン処理は、格段に低減さ
れたオーバーヘッドで、よりずっと多様なループに、小
さいループと大きいループの両方に適用されることが可
能である。
【0059】実行時にレジスタの名前変更をトリガーす
るイベントはコンパイラによって前もって知られている
ので、コンパイラは、ループの複数の反復で用いられる
複数の値を保持するために用いられる複数のレジスタへ
のアクセスを必要とする複数の命令において適当な論理
的レジスタ番号を指定することができる。例えば、ソフ
トウェアパイプラインの境界が交差される毎にレジスタ
名前変更方法が複数のレジスタの名前を変更させる場合
には、ループスケジュールのステージnにおける命令に
よってレジスタaに配置された値は、ステージn+1に
おける命令によってレジスタa+1からアクセス可能で
あることが知られている(これは、論理的レジスタ番号
が、より低い番号を付けられたレジスタからより高い番
号を付けられたレジスタに回転することを仮定してい
る)。
【0060】実際には、コンパイラのタスクは、ループ
の異なる反復に属する複数の命令の間の依存関係と、ル
ープ内部の命令とループ外の命令との間の依存関係とに
よって複雑にされる。ループより前に定義され、ループ
の本体内部で使用される値は“ライブイン値(live-in
value)”と呼ばれる。ループ本体の内部で定義されか
つループより後に使用される値は、“ライブアウト値
(live-out value)”と呼ばれる。同様に、“回帰値”
又は“回帰定義値”は、ループの1つの反復において定
義されかつループの後続する反復において使用される値
である。通常、このような回帰値はまた、ループの開始
に先立って第1の反復のための値を割り当てられること
を必要とするので、ループ本体に対するライブイン値で
ある。“再定義値”は、ループに先行して前もって定義
された値の再定義である。
【0061】これらの複雑さにも関わらず、コンパイラ
が、ライブイン値、ライブアウト値、回帰値又は再定義
値の各インスタンスをとり、ループの入力として使用さ
れるべきレジスタと、ループの各ステージで使用される
複数のレジスタと、ループから値が現れるレジスタとを
評価することは可能であるものと期待されている。
【0062】しかしながら、実際には、反復計数値がゼ
ロであるような特殊な場合において、ループは通常は完
全にバイパスされ、かつレジスタは回転しないことが発
見されている。これは、ライブアウト値になるいずれの
ライブイン値も、この特殊な場合においては、反復計数
値がゼロでない通常の場合においてループからライブア
ウト値が現れるレジスタとは異なるレジスタ内に存在す
るらしいことを意味する。
【0063】ソフトウェアパイプラインループのループ
本体がまったく実行されないこの特殊な場合は、例え
ば、ループ命令が反復するループをセットアップする一
方、ループ制御変数が開始値から終了値へとインクリメ
ントして変化されるが、終了値自体は、実行中にループ
命令が遭遇される時点において開始値よりも小さい変数
であるときに発生する可能性がある。次に、図4及び5
を参照して、この特殊な場合が、ループ本体が1回又は
それ以上の回数だけ実行される場合に後続するものとは
整合しないレジスタロケーションを結果的にもたらす方
法について説明する。
【0064】複数の値発生命令の発行が名前変更を発生
させる例について考察する。ソフトウェアでパイプライ
ン処理されるループスケジュールは、v個の値発生命令
と、p個のソフトウェアパイプラインステージとを有し
ている。ループがn回反復すれば、レジスタファイル
は、当該ループの実行中にv(n+p−1)回だけ回転
される。コンパイラはこの情報を使用して、ループの内
側で発生された後にループの外側で引き続き使用される
複数の値のレジスタファイルにおけるロケーションを予
測する。通常、それは、ループの最後の反復によって発
生され、引き続きループの外側で必要とされる値であ
る。最後の反復によって発生されるこのような各値は、
実際に、ループ反復計数値nとは独立なロケーションで
あり、かつ、ループ反復計数値nが0より大きいならば
ループから出ても不変であるロケーションを有してい
る。ループの最後の反復は、ループスケジュールがp回
発行されることを必要とする。ゆえに、最後の反復の開
始とループの最後の終了(exit)との間には、ループの
pv回の回転が存在する。任意の値がループへのエント
リで生きていて(有効であって)かつループからの出口
で生きていれば(有効であれば)、少なくともpv個の
回転レジスタが存在しなければならない。
【0065】図4には、ループの一実施例が示されてい
る。この実施例では、スカラー変数sは、ループへのエ
ントリに先行して初期化され(ライン1)、ループ本体
内で1回の回帰を有し(ライン4)、またループが完了
した後にも使用される(ライン7)。ゆえに、その存続
時間はループ全体に広がっている。
【0066】前述したように、コンパイラは、各反復に
おいて、ライン4のコードが、先行する反復で発生され
たsの値を論理的レジスタS番から読み出し、かつ現
在の反復で発生される新しい値sを論理的レジスタS
番に書き込むように調整する。これらのレジスタ番号
は、レジスタファイルをv回だけ回転させた後に、先行
する反復においてレジスタSに書き込まれた値が、い
までは、現在の反復におけるレジスタSで利用可能と
なっているように選択される。
【0067】図4のライン1で定義されているsの初期
値は、適当なレジスタSに書き込まれる必要があり、
かつ、Sは、最初の反復がライン4でSから読み出
すときに、ライン1でSに書き込まれた値はこのとき
レジスタSにおいてアクセス可能であるべくすでに回
転されているように選択される必要がある。最初の反復
におけるライン1とライン4の間の正確な回転数は、ラ
イン4が発生するソフトウェアパイプラインステージ
と、ループスケジュール内部でsを使用する命令の位置
とに依存する。Sにおける値をSに移動させるため
に必要な回転数をqとする。
【0068】論理的レジスタS番へのsの最後の書き
込みは、ループの最後の反復のライン4において発生す
る。この最後に書き込まれた値は、ライン7においてル
ープから出た後に論理的レジスタS番から読み出され
る。Sにおける値をSに移動させるために必要な回
転数をtとする。
【0069】これらのレジスタS,S,S及びS
間の関係は、図5に概略的に示されている。図5にお
いて、円周はレジスタファイルの回転する領域(すなわ
ち、名前を変更可能なレジスタの数−後の図6を参照)
を表している。回転する領域のサイズ(すなわち、図5
の円周の長さ)は、pv個のレジスタであることが仮定
されていて、これは、ライブアウト値でもあるライブイ
ン値が少なくとも1つは存在するときに必要とされるレ
ジスタの数である。回転する領域における個別のレジス
タは、円周の周囲に等しい間隔を互いに有して分離され
ている。
【0070】(ライン4における)sの読み出しは、ソ
フトウェアパイプラインステージkで発生することが仮
定されている。ここで、0≦k≦p−1である。また、
(ライン4における)sの読み出しはスケジュールの時
間中にw回の回転が起こったときに発生することも仮定
されている。ここで、0≦w≦v−1である。ゆえに次
式が成り立つ。
【0071】
【数1】q=kv+w
【数2】t=v(p−k−1)+v−w
【0072】このことから、ライン1におけるsの初め
の定義から、sを用いる終了後の(post-exit)値要求
命令がそれを発見することを期待できる位置までの回転
数は、q+t−vで与えられ、これは単にv(p−1)
である。
【0073】従って、ループが実行される前にsが書き
込まれる初めの論理的レジスタSを与えられたとすれ
ば、コンパイラは、ループが完了した後で、sの最後に
書き込まれた値が論理的レジスタS+v(p−1)番
において発見されるということを認識している。しかし
ながら、このことは、図4のライン2におけるループ制
御変数Nが実行時に0又は負であると発見されるときに
発生しうる、ループ本体がまったく実行されない特殊な
場合には適用されない。この特殊な場合では、ライン7
で必要とされるsの値は、他のすべての場合におけるよ
うにレジスタS +v(p−1)で発見されるよりは、
むしろ単にSにおいて発見される。実行時にNがゼロ
又は負になりうる可能性に対処するために、コンパイラ
がコンパイルされるコードに複数の特別な命令を補足す
る必要があるので、この不整合は不便である。コンパイ
ラがこの種の特別な対策をとらなければならないことは
除去することが望ましい。
【0074】従って、本実施例(値発生命令が発行され
る毎にレジスタ名前変更方法が名前の変更に関与する)
では、本発明に係るプロセッサは、実行時にループ反復
計数値がゼロであることが発見され、ゆえにループ本体
がまったく実行されないとすると、プロセッサがループ
の終了部を通過して処理を継続する前に、レジスタファ
イルがv(p−1)回だけ回転されるように調整されて
いる。このことは、ループから出た後の最初の命令の発
行の前に、v(p−1)個のシーケンス番号をスキップ
するという効果を有している。このことは、ループスケ
ジュールの命令を、実際には命令を実行することなくp
−1回発行することにより、首尾良く達成されることが
可能である。各値発生命令を発行する動作はレジスタフ
ァイルを回転させるので、ループスケジュールの各完全
な発行(complete issue)はレジスタファイルをv回だ
け回転する。この方法で、ループ反復計数値がゼロにな
るとき、sの初期値は所望通りに論理的レジスタS
v(p−1)において利用可能にされる。
【0075】以後詳述される通り、p−1回の命令の発
行は、ソフトウェアでパイプライン処理されるループの
シャットダウンモードに対して実質的にまっすぐ進ませ
ることと、付加的な(大域的な)述語を偽に設定してい
ずれの命令も実行されないようにすることとによって達
成されることが可能である。
【0076】また本発明は、他のレジスタ名前変更方法
が用いられるとき、例えばソフトウェアパイプラインの
境界が交差される毎に、プロセッサが名前を変更可能な
複数のレジスタの名前を変更する技術の方法が用いられ
るときにも適用可能である。この場合、プロセッサは、
ゼロの反復計数値のイベントにおいてレジスタをp−1
個のレジスタだけ回転するように調整されてもよい。
【0077】またこの場合には、プロセッサはゼロの反
復計数値のイベントにおいて1つ又はそれ以上の名前を
変更可能なレジスタをスキップするが、スキップされる
レジスタの数は、値発生命令の数とは独立であり、か
つ、ソフトウェアパイプラインステージの数に依存す
る。好ましくは、スキップされるレジスタの数はp−1
個である。
【0078】ところで、複数のシーケンスオフセット
が、複数の値発生命令に基づいて、レジスタ名前変更方
法で正しく計算されるためには、叙述された実行(下記
参照)に起因してオフされる複数の命令が、なお複数の
値の番号付けを進行させる必要があることは理解される
であろう。しかしながら、このことが、ループ内の中間
の値を記憶するために必要とされるレジスタの数を増大
させることは決してない。
【0079】上述の技術は、複数の回帰値(先行する任
意の反復においてそれ自体の関数として計算される任意
のループ変数値)がループの外側において正しい順序で
初期化されるならば、ソフトウェアパイプライン処理と
関連して正しく動作する。
【0080】次に、本発明の好ましい実施形態について
より詳細に説明する。
【0081】図6は、図1のプロセッサにおけるレジス
タファイル20と関連した回路とをより詳細に示してい
る。
【0082】図6では、レジスタファイル20は合計N
個のレジスタを有し、そのうちのより小さな番号を付け
られたK個のレジスタは静的にアドレス指定された領域
20Sを構成し、より大きな番号を付けられたN−K個
のレジスタは動的にアドレス指定された(名前を変更可
能な、又は回転する)領域20Rを構成している。静的
にアドレス指定された領域20Sの複数のレジスタは複
数のループ不変値を記憶するために使用される一方、名
前を変更可能な領域20Rの複数のレジスタは複数のル
ープ変数値を記憶するために使用される。2つの領域の
境界は、プログラム可能であってもよい。
【0083】図1に示されたように、命令発行装置10
は、レジスタファイル回路に対してRENAME(名前
変更又はリネーム)信号を供給する。
【0084】使用中のレジスタ名前変更方法が、値発生
命令が発行される毎に名前の変更を行うものであれば、
値発生命令が発行される時を検出する値発生命令検出装
置30が提供されている。値発生命令検出装置30は、
便宜的には図1の命令発行装置10内に包含されてい
る。このような命令の発行を検出すると、値発生命令検
出装置30はRENAME信号を発生する。
【0085】使用中のレジスタ名前変更方法が、新しい
反復の実行が開始される毎に、すなわちIIプロセッサ
サイクル毎に名前の変更を行うものであれば、命令発行
装置10はIIプロセッササイクル毎にRENAME信
号を発生する。
【0086】RENAME信号は、レジスタ名前変更装
置32に印加される。レジスタ名前変更装置32は、マ
ッピングオフセット値OFFSETを記憶するマッピン
グオフセット記憶装置34に接続されている。RENA
ME信号に応答して、レジスタ名前変更装置32は、マ
ッピングオフセット記憶装置34に記憶されたマッピン
グオフセット値OFFSETを1だけデクリメントす
る。
【0087】マッピングオフセット記憶装置34に記憶
されたマッピングオフセット値OFFSETは、マッピ
ング装置36に印加される。マッピング装置36はま
た、論理的レジスタ識別子(R)を受信し、かつ物理的
レジスタアドレス(P)を出力する。論理的レジスタ識
別子(数)は、0からN−1までの範囲の整数である。
マッピング装置36は、論理的レジスタ識別子から物理
的レジスタアドレスに対する全単射のマッピングを実現
する。各物理的レジスタアドレスもまた0乃至N−1の
範囲の整数であり、実際のハードウェアレジスタのうち
の1つを直接に識別する。
【0088】ある命令が論理的レジスタR番をそのオペ
ランドのうちの1つとして指定し、かつ、Rが、その両
端を含むものとして0乃至K−1の範囲に存在するなら
ば物理的レジスタ番号は、そのオペランドの論理的レジ
スタ番号と同一である。しかしながら、RがK乃至N−
1の範囲内に存在するならば、そのオペランドの物理的
レジスタアドレスは、次式のようなPによって与えられ
る。
【0089】
【数3】P=K+│R−K+OFFSET│N−K
【0090】この表記では、│y│はxを法としたy
であることを意味している。
【0091】従って、マッピングオフセット値OFFS
ETを変化させることは、複数の命令において指定され
た複数の論理的レジスタ識別子と、レジスタファイル2
0の部分20Rにおける複数の実際の物理的レジスタと
の間のマッピングを変化させる効果を有する。このこと
は、結果として、複数のレジスタの名前を変更する。
【0092】図1のプロセッサは、2つの異なるモー
ド、すなわちスカラーモードとVLIWモードで動作可
能である。スカラーモードでは、プロセッササイクル毎
に単一の命令が発行されて、実行装置14、16及び1
8のうちのただ1つによって実行される。このただ1つ
の実行装置(例えば装置14)は、“マスター”実行装
置と呼ばれてもよい。VLIWモードでは、プロセッサ
サイクル毎に単一のVLIW命令パケットが発行され、
この命令パケットは、命令発行装置10によって同じサ
イクルにおいて発行されるべき複数の命令を含んでい
る。これらの命令は、異なる発行スロット(図1のIS
1乃至IS3)から並行して発行され、並行して動作す
る2つ又はそれ以上の実行装置によって実行される。
【0093】図7は、スカラーモード及びVLIWモー
ド間の可能な遷移とともに、異なるタイプのVLIWコ
ードセクションを概略的に示している。図5が示すよう
に、スカラーモードからVLIWモードへの遷移は、V
LIWへの分岐(bv)命令に係るマスター実行装置に
よる実行によって生じさせられる。VLIWモードから
スカラーモードへの遷移は、VLIWからの復帰(r
v)命令に係る任意の1つの実行装置による実行によっ
て生じさせられる。
【0094】VLIWスケジュール内のコードは、論理
的には、2つの異なるタイプのコードセクション、すな
わちリニアセクションとループセクションとから構成さ
れている。各セクションは、1つ又はそれ以上のVLI
Wパケットを備えている。各VLIWスケジュールへエ
ントリすると、プロセッサはリニアセクションの実行を
開始する。このことは、ループ命令を実行することによ
って、後続のループセクションを開始することができ
る。
【0095】図8は、本発明の好ましい実施形態におけ
るループ命令のフォーマットを示している。図8が示す
ように、ループ命令40は、反復計数値フィールド40
Aと、エピローグ反復計数値フィールド40Bと、サイ
ズフィールド40Cとを含む様々なフィールドを有して
いる。サイズフィールド40Cにおいて指定される11
ビット値のsize(サイズ)は、ループセクションの
長さを定義している。反復計数値フィールド40Aによ
って指定される5ビットのオペランドAdは、反復計数
値(IC)を含むアドレスレジスタを識別している。I
Cは、ループ中の反復回数である。
【0096】フィールド40Bによって指定される5ビ
ット値のeicは、エピローグ反復計数値(EIC)で
ある。EICは、ループのエピローグフェーズにおける
反復回数、すなわちエピローグフェーズの間に完了され
る反復回数である。図2及び図3を参照して上述された
実施例では、IC=5及びEIC=3である。図6から
は、ループ命令40が、IC及びEICをそれぞれ指定
するための別々のフィールド40A及び40Bを有する
ので、これらのパラメータは互いに独立に設定されうる
ことが理解されよう。典型的には、EIC=p−1であ
り、ここで、pはパイプラインステージの数である。後
により詳細に説明される通り、ループ命令のフィールド
40A乃至40Cに保持される値は、ループのスタート
アップの間に、プロセッサの様々なループ制御レジスタ
を初期化するために使用される。
【0097】ループ命令は、次のように書くことができ
る。
【0098】
【数4】loop P, Ad, size, eic
【0099】ループセクションは自動的に反復し、ルー
プの反復回数がループ命令によって指定されたICに到
達するときに終了する。終了(exit)命令を実行するこ
とによって、ICが到達される前にループセクションか
らの早い終了を強制することも可能である。ループセク
ションが終了するとき、常に、後続のリニアセクション
に進む。このことは、別のループセクションを開始する
ことか、又はrv命令の実行によってVLIWスケジュ
ールを終了することができる。VLIWスケジュールが
終了すると、プロセッサはスカラーモードに戻るように
切り換えられる。ところで、図7に示されるように、プ
ロセッサはリセットされると初めにスカラーモードに入
る。
【0100】プロセッサ1は、ループのスタートアップ
及び実行を制御するための様々な制御レジスタを有して
いる。これらのレジスタのうちで、反復計数値レジスタ
(ICレジスタ)50及びループコンテキストレジスタ
52が図9に示されている。これらのループ制御レジス
タ及び他のループ制御レジスタに関するさらなる情報
は、本願出願人の同時係属中の英国特許出願公開第23
62733号公報(日本国特許出願の特願2001−1
56624号に対応する。)に開示され、その内容の全
体は参照によってここに含まれる。
【0101】ループのスタートアップの間に、ループ命
令のフィールド40AのアドレスレジスタオペランドA
dによって定義された反復計数値ICは、ICレジスタ
50にコピーされる。IC値は、終了(exit)命令がル
ープのカーネルフェーズを早まって終了することはない
という条件で、ループのエピローグフェーズより前に開
始される最大の反復回数を示す。
【0102】ループコンテキストレジスタ52は、回転
制御フィールド52Aと、ループ計数値フィールド52
Bと、EICフィールド52Cと、ループサイズフィー
ルド52Dとを有している。フィールド52C及び52
Dにおける値EIC及びLSizeは、ループのスター
トアップの間に、ループ命令のフィールド40B及び4
0Cによって指定された値eic及びsizeを用いて
初期化される。ループ計数値フィールドは、現在のルー
プの反復の終了部に達する前に、さらに実行されるべき
VLIWパケットの数を定義する値LCntを指定す
る。これは、LSizeと同じ値に初期化され、ループ
内でパケットが発行される毎にデクリメントされる。こ
れは、各新しい反復が開始されるときにLSizeから
再ロードされる。
【0103】エピローグフェーズの間、フィールド52
CにおけるEIC値は、新しいエピローグ反復が開始さ
れる毎にデクリメントされる。
【0104】回転制御フィールド52Aは、レジスタの
回転が現在の反復に対してイネーブル又はディスエーブ
ルのいずれにされるべきかを示すために、ループ制御回
路により自動的に設定される単一のビットRを保持して
いる。このビットは、コンテキストの切り換えの境界に
わたるレジスタ回転状態を記録するためだけに用いられ
る、すなわちプロセッサの状態の保存及び復元を目的と
している。
【0105】レジスタ50及び52と他のループ制御レ
ジスタがループ命令の実行によっていったん初期化され
ると、プロセッサはVLIWループモードに入る。この
モードにおいて、それはループセクションコードを繰り
返し実行し、各新しい反復の開始に先行して、ループの
継続条件が引き続いて真を保持していることをチェック
する。
【0106】ループの実行中に、命令の実行を制御する
ために複数の述語レジスタが用いられる。次に、図10
(a)乃至10(c)、図11及び図12を参照して、
この制御が実行される方法について説明する。
【0107】図10(a)は、スケジューリングに先行
するループを示している。図10(b)は、5個のパイ
プラインステージ(ステージ1乃至5)にスケジューリ
ングした後のループを示している。図10(c)は、図
10(b)のパイプライン処理されるループスケジュー
ルの7つの重複する反復の空間−時間グラフを示してい
る。図10(c)はまた、実行のプロローグフェーズ、
カーネルフェーズ及びエピローグフェーズを示してい
る。
【0108】ループのプロローグフェーズの間には、各
パイプラインステージにおける複数の命令は、体系的な
方法でイネーブルにされる必要がある。同様に、エピロ
ーグフェーズの間には、各パイプラインステージにおけ
る複数の命令は、体系的にディスエーブルにされる必要
がある。このイネーブルにすることとディスエーブルに
することとは、述語(predication)を用いて効果的に
達成されることが可能である。
【0109】次に図11を参照すると、重複された複数
の反復(それぞれ5個のステージより成る)は、図10
に示されたものに対応している。また図11には、5個
の述語レジスタP1乃至P5のセットが示されている。
これらの述語レジスタP1乃至P5は、パイプライン処
理されるループスケジュール内のパイプラインステージ
1乃至5にそれぞれ対応し、述語レジスタに記憶された
各状態は、ループの実行中に1つのステージから次のス
テージへと変化することができる。これらの述語レジス
タは、プロセッサ1の各実行装置14、16、18に関
連付けられている。
【0110】ソフトウェアでパイプライン処理されるス
ケジュールにおける各命令は、述語レジスタP1乃至P
5のうちの1つに対する識別子である述語番号を用いて
タグ付けされている。図11の実施例では、パイプライ
ンスケジュールのステージ1乃至5における(複数の)
命令はそれぞれ、述語レジスタ識別子P1乃至P5を用
いてタグ付けされる。
【0111】命令発行装置10によって命令が発行され
るとき、最初に、(命令のタグによって識別された)そ
の命令に対応する述語レジスタの状態の真偽が決定され
る。対応する述語レジスタの状態が偽であれば、命令は
自動的にNOP命令に変換される。対応する述語レジス
タの状態が真であれば、命令は通常通りに実行される。
【0112】ゆえに、この方法の場合は、パイプライン
ステージiにおけるすべての命令は、述語識別子Piを
用いてタグ付けされる。本方法が正しく動作するために
は、ループの実行中に、パイプラインステージiがイネ
ーブルにされる必要があるときはいつでも、述語レジス
タPiの状態がiの関連するすべての値に対して必ず真
であるように調整される必要がある。このことは、イネ
ーブルにするステージ及びディスエーブルにするステー
ジに対してループの実行を制御する機構を提供する。
【0113】図11は、ループの実行中に各ソフトウェ
アパイプラインステージに対する述語レジスタの状態が
どのように変化するかを示している。ループの開始に先
行して、述語レジスタP1乃至P5のそれぞれは状態0
(偽の状態)でロードされる。第1の反復の開始に先行
して、状態1(真の状態)が第1の述語レジスタP1に
ロードされ、従って、各反復の第1のステージ内に含ま
れるすべての命令をイネーブルにする。他のすべての述
語レジスタP2乃至P5は状態0を維持するので、第2
乃至第5のパイプラインステージ内に含まれる命令はい
ずれも、最初のIIサイクルの間は実行されない。
【0114】第2の反復の開始に先行して、第2の述語
レジスタP2にも状態1がロードされ、従って、ループ
スケジュールの第2のステージ内に含まれるすべての命
令をイネーブルにする。述語レジスタP1は引き続き状
態1を有しているので、第1のステージ内に含まれる複
数の命令もまた、第2のIIサイクルの間に実行され
る。第3乃至第5のパイプラインステージ内に含まれる
命令はいずれもまだ要求されていないので、述語レジス
タP3乃至P5は引き続き状態0にある。
【0115】プロローグフェーズの間、連続する各述語
レジスタは順に状態1に変化され、5個の述語レジスタ
がすべて状態1を保持しかつすべてのステージがイネー
ブルにされるまで、各パイプラインステージを体系的な
方法でイネーブルにする。このことは、すべてのパイプ
ラインステージからの命令が異なる反復において実行さ
れているカーネルフェーズの開始にマークを付ける。す
べての述語レジスタは、カーネルフェーズ全体を通じて
状態1を有する。
【0116】エピローグステージの間、複数のパイプラ
インステージは、ステージ1で開始してステージ5で終
了するような体系的な方法で、ディスエーブルにされる
必要がある。ゆえに、各パイプラインステージの境界に
先行して、状態0は、述語レジスタP1乃至P5のそれ
ぞれに対してP1で開始して順番に引き続いてロードさ
れる。ゆえに、複数のパイプラインステージは体系的な
方法でディスエーブルにされ、従って、ループの正しい
シャットダウンを保証する。
【0117】図11が示す述語レジスタからは、動的パ
ターンを明らかに見ることができる。本願出願人の同時
係属中の英国特許出願公開第2363480号公報で
は、それの図12に示された述語ファイル回路によって
このパターンが利用されている。英国特許出願公開第2
363480号(日本国特許出願の特願2001−17
2447号に対応する。)公報の内容の全体は、参照に
よってここに含まれる。
【0118】図12では、述語レジスタファイル135
は、n個の述語レジスタP0乃至Pn−1を有してい
る。述語レジスタP0及びP1はそれぞれ、0及び1に
永続的にプリセットされている。述語レジスタP3乃至
Pn−1は、ループ制御を目的とした述語レジスタとし
て用いることに利用可能である。レジスタP2は、以下
に説明される理由によって予約されている。nビットの
レジスタ131(以下、“ループマスク”レジスタと呼
ぶ。)は、実際にはループ制御の目的の述語レジスタと
して使用されるn−3個の述語レジスタP3乃至Pn−
1のサブセット136を識別するために使用される。ル
ープマスクレジスタ131は、述語レジスタファイル1
35におけるn個の述語レジスタにそれぞれ対応するn
ビットを保持している。
【0119】述語レジスタPiがサブセット136内に
包含されるものとすれば、ループマスクレジスタ131
における対応するビットiは値“1”に設定される。逆
に、述語レジスタPiがサブセット136内に包含され
ないものとすれば、ループマスクレジスタ131におけ
る対応するビットiは値“0”に設定される。典型的に
は、ループマスクレジスタ131は、ビット3から先の
任意の位置で開始し、かつ最大の長さがn−3である、
単一の連続する1のシーケンスを含む。
【0120】この実施例では、ループマスクレジスタ1
31のビット14乃至25が1に設定され、他のすべて
のビットは0に設定されているので、この場合では、サ
ブセット136はレジスタP14乃至P25を備えてい
る。
【0121】述語レジスタ識別子は、ループセクション
における各命令に添付されて、述語レジスタファイル1
35のサブセット136内の述語レジスタのうちの1つ
を直接に識別する。例えば、32個の述語レジスタが存
在するときは、述語レジスタ識別子は、命令内に含まれ
た5ビットのフィールドの形式をとることができる。
【0122】ある特定のパイプラインステージ内のすべ
ての命令に対する識別子は、それらのすべてが、対応す
る述語レジスタの値に従ってイネーブル又はディスエー
ブルのいずれかにされるように、同じであってもよい。
しかしながら、特定のステージに関連付けられた(例え
ば、if/then/else又は比較命令に関連付け
られた)1つより多くの述語レジスタが存在することも
ある。
【0123】各連続的なループの反復の開始に先行し
て、サブセット136の各述語レジスタの内容がそのす
ぐ右の述語レジスタの内容に設定される、シフト演算が
実行される。シフトするサブセットのすぐ右の述語レジ
スタ(図12におけるP13)は、シードレジスタ13
7である。従って、各シフト演算においては、シフトす
るレジスタのサブセット136に係る最初の述語レジス
タ(P14)の内容は、シードレジスタ(“シード”)
の内容に設定される。
【0124】例えば、図11を参照すると、ループの実
行のプロローグフェーズ及びカーネルフェーズの間は、
シードレジスタ137は状態“1”にプリセットされて
いる一方、エピローグステージの間は、シードレジスタ
137は、ループのシャットダウンを実行するために状
態“0”にプリセットされている。シフトが発生すると
き、シードは最も右のレジスタ(P14)にコピーされ
るが、シード自体は変更せずに残る。
【0125】ループのセットアップ処理の間は、ループ
マスクレジスタ131の内容が使用されて、述語レジス
タのシフトするサブセット136とシードレジスタ13
7とを初期化する。後述されるように、これらの初期値
は、反復計数値に依存するとともに、ループマスクレジ
スタ131における実際のビットパターンに依存する。
【0126】次に、図13(a)乃至13(d)を参照
すると、図13(a)は再び、図12の実施例における
ループマスクレジスタ131を示している。図13
(b)は、ループ命令によって指定された反復計数値が
ゼロである場合は、シードレジスタ137とシフトする
サブセット136内のすべての述語レジスタとがクリア
されることを示している。
【0127】図13(c)が示すように、ループ命令に
よって指定された反復計数値が1であれば、シードレジ
スタ137はクリアされ、かつ、シードレジスタ137
のすぐ左の述語レジスタを除いて、シフトするサブセッ
ト136内のすべての述語レジスタがクリアされる。シ
ードレジスタ137のすぐ左の述語レジスタは、1に設
定される。
【0128】図13(d)が示すように、ループ命令に
よって指定された反復計数値が1より大きいとき、シー
ドレジスタ137と、シフトするサブセット136にお
けるシードレジスタ137のすぐ左の述語レジスタとは
両方とも1に設定される。シフトするサブセット内の他
のすべての述語レジスタは、ゼロに設定される。
【0129】このように、1つ又はそれ以上の反復を有
する任意のループに対するループのセットアップ処理
は、述語レジスタファイル135のシフトするサブセッ
ト136に対して、値00...01を割り当てる。
【0130】ループの実行中に、各反復の終わりにおい
てシフトするサブセット136は左へ1つの場所だけシ
フトされ、シードレジスタはシフトするサブセット13
6の右手側の終端部にコピーされる。また、各反復の終
わりに、ICレジスタ50は1だけデクリメントされ
る。
【0131】ICレジスタ50がゼロに到達するとき、
シードレジスタ137はクリアされ、ループのエピロー
グフェーズが開始する。エピローグフェーズにおける反
復回数は、ループコンテキストレジスタ52に含まれる
EICによって決定され、このEICは、ループのセッ
トアップ処理の一部としてループ命令により設定されて
いる。
【0132】任意の時点で、ループ自体は、終了(exi
t)命令を実行することにより早いシャットダウンを開
始することができる。終了命令が実行され、かつその関
連付けられた述語レジスタが1に設定されると、プロセ
ッサは、現在の反復が完了した時点でICレジスタ50
をクリアしかつシードレジスタをクリアすることによ
り、ループのエピローグフェーズに入る。しかしなが
ら、終了命令がループのパイプラインステージiに現れ
る場合は、すべての、取消できない、状態を変化する演
算が、ループスケジュールのパイプラインステージiに
又はこれより先に現れなければならず、かつそれらがス
テージiにあれば、それらは終了命令よりも前に発行さ
れなければならない。
【0133】プロセッサがエピローグフェーズにあると
きは、命令は通常通りに発行される。各反復の終わりに
おいて、述語レジスタのサブセット136はシフトさ
れ、ループコンテキストレジスタ52内のEIC値はデ
クリメントされる。プロセッサは、それがループの反復
の終わりに到達し、かつICレジスタ50とループコン
テキストレジスタ52内のEIC値とが両方ともゼロに
なるとき、ループモードから出る。
【0134】使用中のレジスタ名前変更方法が、パイプ
ラインの境界が交差される毎に名前の変更を行うもので
あれば、ループによって実行される名前変更演算の回数
(回転数)は、常にIC+EICになる。使用中のレジ
スタ名前変更方法が、値発生命令が発行される毎に名前
を変更するものであれば、ループによって実行される名
前変更演算の回数(回転数)は、常に(IC+EIC)
vになる。ここで、vはループスケジュールにおける値
発生命令の数である。
【0135】本願出願人の同時係属中の英国特許出願公
開第2363480号公報には、ループの順序付け(se
quencing)の間に述語レジスタファイル135上で複数
の演算を実行するための論理回路の一実施例が記述され
ている。そのアプリケーションでは、初期化演算は以下
の擬似コードで表わされた。
【0136】
【表2】 ―――――――――――――――――――――――――――――――――――― For all i from 2 to n-1:(2乃至n−1のすべてのiについて:) ――――――――――――――――――――――――――――――――――――
【0137】本発明のある実施形態では、初期化演算
は、シードレジスタ137とサブセット136の最初の
レジスタとが、ICに依存するとともに、ループマスク
レジスタ131の内容に依存して設定されるように、反
復計数値を考慮に入れて(例えばループ命令において指
定されるように)変形されている。変形された擬似コー
ドは、次のようになる。
【0138】
【表3】 ―――――――――――――――――――――――――――――――――――― For all i from 3 to n-1:(3乃至n−1のすべてのiについて:) if Li=1 and Li-1=0 Pi=(IC≠0) Pi-1=(IC>1) else if Li=1 and Li-1=1 Pi=0 ――――――――――――――――――――――――――――――――――――
【0139】英国特許出願公開第2363480号公報
に記述されているように、この初期化演算と、プロセッ
サの実行中に述語レジスタファイルに対して要求される
他の任意の演算とを実行するための回路は、標準的な論
理設計技術を用いて実装され、各述語レジスタに関連付
けられたオペレーティング装置の一部として使用するた
めの有限状態機械をもたらすことができる。Pの次の
状態の計算に対する入力は、この場合、英国特許出願公
開第2363480号公報に記述された様々な選択信号
及びループマスクレジスタのビットに加えて、ICを含
んでいる。
【0140】上述のように、本発明を具体化するプロセ
ッサは、ループ反復計数値が実行時においてゼロである
ことが発見され、ゆえにループ本体がまったく実行され
ない場合には、プロセッサがループの終了部を通過して
処理を継続する前に、レジスタファイルが所定の回数だ
け回転されるように調整されている。このことは、ルー
プから出た後の最初の命令の発行の前に、名前を変更可
能な予め決められた数のレジスタをスキップするという
効果を有している。これは、便利なことには、実際には
命令を実行することなくループスケジュールの命令をp
−1回発行することにより達成されることが可能であ
る。
【0141】p−1回の命令の発行は、ソフトウェアで
パイプライン処理されるループのシャットダウンモード
に実際上まっすぐ進ませることと、付加的な(大域的
な)述語を偽に設定していずれの命令も実行されないよ
うにすることとによって達成されることが可能である。
【0142】上述のように、本発明の実施形態は、通常
の場合と例外(ゼロの反復)の場合の両方のレジスタの
割り当てが同じであり、コンパイラは追加のコードを供
給して例外の場合に対処する必要がないという優位点を
有している。このことは全体のコードサイズを減少させ
る。それはまた、例外の場合をチェックする必要を取り
除き、このことが導入したであろう処理のオーバーヘッ
ドを防止する。最後に、コンパイラ又はプログラマーに
よって生成されるコードが簡単化される。
【図面の簡単な説明】
【図1】 本発明の実施形態に係るプロセッサの構成要
素を示す図である。
【図2】 図1のプロセッサによる、複数の命令のソフ
トウェアでパイプライン処理される実行を説明する際に
用いる表である。
【図3】 ソフトウェアでパイプライン処理されるルー
プの実行の異なるフェーズを説明する際に用いる表であ
る。
【図4】 ループを含むハイレベル命令の一例を示す図
である。
【図5】 図4のループを実行する際に用いられるレジ
スタを表す概略図である。
【図6】 本発明の一実施形態に係る図1のプロセッサ
の構成要素を示す図である。
【図7】 図1のプロセッサにおけるソフトウェアでパ
イプライン処理されるループの実行を説明する際に用い
られる概略図である。
【図8】 好ましい実施形態におけるループ命令のフォ
ーマットの一例を示す図である。
【図9】 一実施形態におけるループ処理装置の構成要
素を示す図である。
【図10】 ソフトウェアでパイプライン処理されるル
ープの一例を説明する際に用いられる概略図であって、
(a)はスケジューリングに先行するループを示し、
(b)は5個のパイプラインステージにスケジューリン
グした後のループを示し、(c)は(b)のパイプライ
ン処理されるループスケジュールの7つの重複する反復
の空間−時間グラフと、実行のプロローグフェーズ、カ
ーネルフェーズ及びエピローグフェーズとを示す図であ
る。
【図11】 本発明の好ましい実施形態におけるソフト
ウェアでパイプライン処理されるループの実行を制御す
るために複数の述語レジスタが使用される方法を説明す
る際に用いられる概略図である。
【図12】 本発明の好ましい実施形態における述語レ
ジスタ回路の構成要素を示す図である。
【図13】 異なる反復計数値に対して述語レジスタが
初期化される方法を説明する際に用いられる概略図であ
って、(a)は図12のループマスクレジスタ131を
示し、(b)は反復計数値ICが0であるときの図12
の述語レジスタファイル135を示し、(c)は反復計
数値ICが1であるときの述語レジスタファイル135
を示し、(d)は反復計数値ICが1より大きいときの
述語レジスタファイル135を示す図である。
【符号の説明】
1…プロセッサ、 10…命令発行装置、 12…スケジュール記憶装置、 14,16, 18…実行装置、 20…レジスタファイル、 20R…名前を変更可能な領域、 24S…静的にアドレス指定された領域、 22,24…バス、 26…外部メモリ、 30…値発生命令検出装置、 32…レジスタ名前変更装置、 34…マッピングオフセット記憶装置、 36…マッピング装置、 40…ループ命令、 40A…反復計数値フィールド、 40B…エピローグ反復計数値フィールド、 40C…サイズフィールド、 50…反復計数値レジスタ、 52…ループコンテキストレジスタ、 131…ループマスクレジスタ、 135…述語レジスタファイル、 136…述語レジスタのサブセット、 137…シードレジスタ、 IS1,IS2,IS3…命令発行スロット、 P0乃至Pn−1…述語レジスタ。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 レイモンド・マルコム・ライブズリー イギリス、アールジー42・5キューゼッ ト、バークシャー、ビンフィールド、ライ ハースト・レイン、コークリー・ミード Fターム(参考) 5B013 BB07 DD05 5B033 AA10 AA13 AA14 BE05 DD01 5B081 CC25

Claims (38)

    【特許請求の範囲】
  1. 【請求項1】 ソフトウェアでパイプライン処理される
    ループを実行するように動作可能なプロセッサであっ
    て、 実行される複数の命令によって発生されかつ消費される
    複数の値を記憶する複数のレジスタと、 上記ループの実行中に上記複数のレジスタの名前を変更
    するレジスタ名前変更手段と、 ソフトウェアでパイプライン処理されるループがゼロの
    反復を要求するイベントにおいて、上記複数のレジスタ
    の名前を予め決められた方法で変更させるように動作可
    能なループ処理手段とを備えたプロセッサ。
  2. 【請求項2】 上記ループ処理手段は、ライブイン値が
    ライブアウト値になるように上記ループが1つ又はそれ
    以上の反復を要求するときにライブイン値が存在してい
    たレジスタと同じレジスタに、当該ライブイン値がゼロ
    の反復の場合に存在するように上記複数のレジスタの名
    前を変更させる請求項1記載のプロセッサ。
  3. 【請求項3】 上記ループ処理手段は、上記ループがゼ
    ロの反復を要求するイベントにおいて上記ループのエピ
    ローグフェーズのみを実行させるように動作可能である
    請求項1又は2記載のプロセッサ。
  4. 【請求項4】 上記エピローグフェーズは1つ又はそれ
    以上のエピローグ反復を備え、各エピローグ反復は、上
    記レジスタ名前変更手段によって1つ又はそれ以上のレ
    ジスタの名前変更演算を実行させるように動作する請求
    項3記載のプロセッサ。
  5. 【請求項5】 上記レジスタ名前変更手段は、新しい反
    復が開始される毎に上記複数のレジスタの名前を変更す
    るように動作可能であり、上記エピローグフェーズにお
    いて実行される上記レジスタの名前変更演算の総数はソ
    フトウェアパイプラインステージの数より1だけ少ない
    請求項4記載のプロセッサ。
  6. 【請求項6】 上記レジスタ名前変更手段は、値発生命
    令が発行される毎に上記複数のレジスタの名前を変更す
    るように動作可能であり、上記エピローグフェーズにお
    いて実行される上記レジスタの名前変更演算の総数は、
    反復毎に発行される値発生命令の数とソフトウェアパイ
    プラインステージの数より1だけ少ない数との積である
    請求項4記載のプロセッサ。
  7. 【請求項7】 上記エピローグ反復の回数は、ソフトウ
    ェアパイプラインステージの数より1だけ少ない請求項
    4乃至6のうちの任意の1つに記載のプロセッサ。
  8. 【請求項8】 上記エピローグフェーズにおけるレジス
    タの名前変更演算の回数は、上記ループ自体の反復計数
    値とは独立に指定可能である請求項3乃至7のうちの任
    意の1つに記載のプロセッサ。
  9. 【請求項9】 上記エピローグ反復の回数は、上記ルー
    プ自体の反復計数値とは独立に指定可能である請求項4
    乃至8のうちの任意の1つに記載のプロセッサ。
  10. 【請求項10】 上記エピローグ反復の回数は、上記プ
    ロセッサによって実行可能な命令において指定される請
    求項9記載のプロセッサ。
  11. 【請求項11】 上記エピローグ反復の回数は、ソフト
    ウェアでパイプライン処理されるループのスタートアッ
    プの間に実行されるループ命令において指定される請求
    項9記載のプロセッサ。
  12. 【請求項12】 上記ループの反復回数もまた、上記ル
    ープ命令において独立に指定される請求項11記載のプ
    ロセッサ。
  13. 【請求項13】 上記ループ命令は、上記エピローグ反
    復の回数が指定されるフィールドを有する請求項11記
    載のプロセッサ。
  14. 【請求項14】 上記ループ命令は、上記ループの反復
    回数が指定される別個のフィールドを有する請求項13
    記載のプロセッサ。
  15. 【請求項15】 上記ループ処理手段は、上記ループを
    開始するときにループにおける反復回数を指定する反復
    計数値を受信するように動作可能であり、上記指定され
    た回数がゼロであれば上記エピローグフェーズのみを実
    行させ、上記指定された回数がゼロでなければ上記ルー
    プのプロローグフェーズ、カーネルフェーズ及びエピロ
    ーグフェーズを実行させるように動作可能である請求項
    3乃至14のうちの任意の1つに記載のプロセッサ。
  16. 【請求項16】 上記プロセッサは複数の命令の叙述さ
    れた実行に適応され、上記プロセッサは上記ループの異
    なるソフトウェアパイプラインステージにそれぞれ対応
    する複数の述語レジスタをさらに備え、各述語レジスタ
    は、その対応するソフトウェアパイプラインステージが
    イネーブルにされる第1の状態と、その対応するソフト
    ウェアパイプラインステージがディスエーブルにされる
    第2の状態との間で切り換え可能であり、 上記ループ処理手段は、上記ループにおける反復回数に
    依存して上記複数の述語レジスタを開始させるように動
    作可能である先行する任意の請求項記載のプロセッサ。
  17. 【請求項17】 上記ループ処理手段は、上記複数の述
    語レジスタを、上記ループにおける反復回数がゼロであ
    るときは1つの方向に開始させ、上記ループにおける反
    復回数がゼロでないときは少なくとも1つの他の方向へ
    開始させるように動作可能である請求項16記載のプロ
    セッサ。
  18. 【請求項18】 上記ループにおける反復回数がゼロで
    あるとき、上記ループの複数のステージに対応するすべ
    ての述語レジスタは上記第2の状態に初期化されるのに
    対し、上記ループにおける反復回数がゼロでないとき、
    上記第1のパイプラインの状態に対応する述語レジスタ
    は上記第1の状態に初期化され、かつ後続のステージに
    対応する各述語レジスタは上記第2の状態に初期化され
    る請求項16又は17記載のプロセッサ。
  19. 【請求項19】 上記第1のパイプラインステージに対
    応する述語レジスタの状態を上記第2のパイプラインス
    テージに対応する述語レジスタへとシフトし、かつ後続
    の各パイプラインステージに対応する述語レジスタに関
    しても同様にシフトするように動作可能であり、上記第
    1のパイプラインステージに対応する述語レジスタの状
    態をシードレジスタに依存して設定するように動作可能
    なシフト手段をさらに備え、 上記ループ処理手段は、上記ループにおける反復回数に
    依存して、上記シードレジスタを異なるように初期化す
    るように動作可能である請求項16、17又は18記載
    のプロセッサ。
  20. 【請求項20】 上記ループ処理手段は、上記ループに
    おける反復回数がゼロ又は1であるときは上記シードレ
    ジスタを上記第2の状態に初期化し、上記ループにおけ
    る反復回数が2又はそれ以上であるときは上記シードレ
    ジスタを上記第1の状態に初期化する請求項19記載の
    プロセッサ。
  21. 【請求項21】 ソフトウェアでパイプライン処理され
    るループがゼロの反復計数値を有するイベントにおい
    て、当該プロセッサによって実行されるレジスタの名前
    変更をオブジェクトプログラムにおいて指定することを
    備えた、プロセッサのためのコンパイル方法。
  22. 【請求項22】 上記プロセッサは、ゼロの反復計数値
    の場合には上記ループのエピローグフェーズのみを実行
    し、上記コンパイル方法は、上記エピローグフェーズに
    おいて実行されるレジスタの名前変更演算の回数を指定
    する情報を上記オブジェクトプログラムに含むことを必
    要とする請求項21記載のコンパイル方法。
  23. 【請求項23】 上記プロセッサは、ゼロの反復計数値
    の場合には上記ループのエピローグフェーズのみを実行
    し、上記コンパイル方法は、上記エピローグフェーズに
    おいて実行される反復回数を指定する情報を上記オブジ
    ェクトプログラムに含むことを必要とする請求項21記
    載のコンパイル方法。
  24. 【請求項24】 上記情報は、上記オブジェクトプログ
    ラムに含まれる命令において指定される請求項22又は
    23記載のコンパイル方法。
  25. 【請求項25】 上記命令は、ソフトウェアでパイプラ
    イン処理されるループのスタートアップの間に実行され
    るループ命令である請求項24記載のコンパイル方法。
  26. 【請求項26】 上記ループ命令はまた、上記ループに
    おける反復回数を独立に指定する請求項25記載のコン
    パイル方法。
  27. 【請求項27】 ソフトウェアでパイプライン処理され
    るループのエピローグフェーズにおいて実行される反復
    回数を指定する情報を含み、プロセッサによって実行さ
    れるオブジェクトプログラム。
  28. 【請求項28】 上記プロセッサは、上記ループがゼロ
    の反復計数値を有するイベントにおいて上記ループのエ
    ピローグフェーズのみを実行し、上記オブジェクトプロ
    グラムは、上記エピローグフェーズにおいて実行される
    反復回数を指定する情報を含む請求項27記載のオブジ
    ェクトプログラム。
  29. 【請求項29】 上記情報は、上記オブジェクトプログ
    ラムに含まれる命令において指定される請求項28記載
    のオブジェクトプログラム。
  30. 【請求項30】 上記命令は、ソフトウェアでパイプラ
    イン処理されるループのスタートアップの間に実行され
    るループ命令である請求項29記載のオブジェクトプロ
    グラム。
  31. 【請求項31】 上記ループ命令はまた、上記ループの
    反復計数値を独立に指定する請求項30記載のオブジェ
    クトプログラム。
  32. 【請求項32】 コンピュータ上で実行されるときは、
    上記コンピュータにプロセッサのためのコンパイル方法
    を実行させるコンピュータプログラムであって、上記コ
    ンピュータプログラムは、ソフトウェアでパイプライン
    処理されるループがゼロの反復計数値を有するイベント
    において、上記プロセッサによって実行されるレジスタ
    の名前変更をオブジェクトプログラムにおいて指定する
    ための部分を指定する名前変更情報を備えたコンピュー
    タプログラム。
  33. 【請求項33】 キャリア媒体によって伝送される請求
    項27乃至32のうちの任意の1つに記載のプログラ
    ム。
  34. 【請求項34】 上記キャリア媒体は記録媒体である請
    求項33記載のプログラム。
  35. 【請求項35】 上記キャリア媒体は伝送媒体である請
    求項33記載のプログラム。
  36. 【請求項36】 ソフトウェアでパイプライン処理され
    るループがゼロの反復計数値を有するイベントにおい
    て、当該プロセッサによって実行されるレジスタの名前
    変更をオブジェクトプログラムにおいて指定する手段を
    備えた、プロセッサのためのコンパイル装置。
  37. 【請求項37】 当該ループのエピローグフェーズにお
    いて実行される反復回数を指定する情報を含む、ソフト
    ウェアでパイプライン処理されるループをスタートアッ
    プさせるためにプロセッサによって実行可能であるルー
    プ命令。
  38. 【請求項38】 さらに上記ループの反復計数値を独立
    に指定する請求項37記載のループ命令。
JP2002023484A 2001-01-31 2002-01-31 プロセッサにおけるループの処理 Pending JP2002251282A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
GB0102461 2001-01-31
GB0102461A GB2355094B (en) 2000-02-08 2001-01-31 Communicating instruction results in processors and compiling methods for processors
GB0124562 2001-10-12
GB0124562A GB0124562D0 (en) 2001-10-12 2001-10-12 Handling of loops in processors

Publications (1)

Publication Number Publication Date
JP2002251282A true JP2002251282A (ja) 2002-09-06

Family

ID=26245660

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002023484A Pending JP2002251282A (ja) 2001-01-31 2002-01-31 プロセッサにおけるループの処理

Country Status (4)

Country Link
EP (1) EP1296226A2 (ja)
JP (1) JP2002251282A (ja)
CN (1) CN1372190A (ja)
GB (1) GB2371900A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009053861A (ja) * 2007-08-24 2009-03-12 Panasonic Corp プログラム実行制御装置
CN103226511A (zh) * 2012-01-25 2013-07-31 三星电子株式会社 用于软件流水程序的硬件调试设备和方法

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7020769B2 (en) * 2003-09-30 2006-03-28 Starcore, Llc Method and system for processing a loop of instructions
CN104321747B (zh) * 2012-04-19 2017-11-17 西门子公司 用于多核/众核可编程逻辑控制器的时间裕隙应用流水线平衡
CN103513961B (zh) * 2012-06-18 2017-07-11 中兴通讯股份有限公司 片内缓存方法及装置
US9170792B2 (en) * 2013-05-30 2015-10-27 Intel Corporation Dynamic optimization of pipelined software
CN106227508A (zh) * 2016-07-25 2016-12-14 中国科学院计算技术研究所 一种无回边数据流循环方法、系统、装置、芯片
CN112000370B (zh) 2020-08-27 2022-04-15 北京百度网讯科技有限公司 循环指令的处理方法、装置、设备和存储介质
CN116841622B (zh) * 2023-09-01 2023-11-24 上海燧原智能科技有限公司 一种地址自增访存指令的生成方法、装置、设备及介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3583656B2 (ja) * 1999-07-05 2004-11-04 富士通株式会社 ループ最適化動作を行うvliwプロセッサ

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009053861A (ja) * 2007-08-24 2009-03-12 Panasonic Corp プログラム実行制御装置
CN103226511A (zh) * 2012-01-25 2013-07-31 三星电子株式会社 用于软件流水程序的硬件调试设备和方法
JP2013152716A (ja) * 2012-01-25 2013-08-08 Samsung Electronics Co Ltd ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法
US9542188B2 (en) 2012-01-25 2017-01-10 Samsung Electronics Co., Ltd. Hardware debugging apparatus and method for software pipelined program
CN103226511B (zh) * 2012-01-25 2017-08-04 三星电子株式会社 用于软件流水程序的硬件调试设备和方法

Also Published As

Publication number Publication date
EP1296226A2 (en) 2003-03-26
GB0202155D0 (en) 2002-03-20
GB2371900A (en) 2002-08-07
CN1372190A (zh) 2002-10-02

Similar Documents

Publication Publication Date Title
US8161266B2 (en) Replicating opcode to other lanes and modifying argument register to others in vector portion for parallel operation
US6944853B2 (en) Predicated execution of instructions in processors
EP2680132B1 (en) Staged loop instructions
US5710902A (en) Instruction dependency chain indentifier
US20020144092A1 (en) Handling of loops in processors
JP3976082B2 (ja) 異なった幅のvliwプロセッサコマンド
EP1124182A2 (en) Communicating instruction results in processors and compiling methods for processors
US7979637B2 (en) Processor and method for executing data transfer process
US6754806B2 (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
JP4202244B2 (ja) Vliw型dsp,及びその動作方法
JPH1165844A (ja) パイプラインバイパス機能を有するデータ処理装置
JPH11194948A (ja) コンパイラ最適化アルゴリズム
US5727177A (en) Reorder buffer circuit accommodating special instructions operating on odd-width results
JP2002251282A (ja) プロセッサにおけるループの処理
JPH11272474A (ja) レジスタの複数割当てを利用した演算の処理中に割込み可能な複数実行装置
Muthukumar et al. Software pipelining of nested loops
JP2874351B2 (ja) 並列パイプライン命令処理装置
EP3690639B1 (en) Information processing apparatus, program, and information processing method
JP7383390B2 (ja) 情報処理ユニット、情報処理装置、情報処理方法及びプログラム
JP2006506727A (ja) コピーレジスタファイルを有するvliw
JPH06290057A (ja) ループ最適化方法
JP2806093B2 (ja) ロード・ストア処理装置
JP2001195252A (ja) マスク技術による無効で分岐効率向上を図るプロセッサ