JP2007293814A - プロセッサ装置とその処理方法 - Google Patents

プロセッサ装置とその処理方法 Download PDF

Info

Publication number
JP2007293814A
JP2007293814A JP2007029487A JP2007029487A JP2007293814A JP 2007293814 A JP2007293814 A JP 2007293814A JP 2007029487 A JP2007029487 A JP 2007029487A JP 2007029487 A JP2007029487 A JP 2007029487A JP 2007293814 A JP2007293814 A JP 2007293814A
Authority
JP
Japan
Prior art keywords
slack
instruction
predicted
memory
instructions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2007029487A
Other languages
English (en)
Inventor
Ryotaro Kobayashi
良太郎 小林
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.)
Semiconductor Technology Academic Research Center
Original Assignee
Semiconductor Technology Academic Research Center
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 Semiconductor Technology Academic Research Center filed Critical Semiconductor Technology Academic Research Center
Priority to JP2007029487A priority Critical patent/JP2007293814A/ja
Priority to US11/717,063 priority patent/US20070234014A1/en
Publication of JP2007293814A publication Critical patent/JP2007293814A/ja
Priority to US12/634,069 priority patent/US20100095151A1/en
Pending legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)

Abstract

【課題】従来技術に比較して簡単な構成で、ローカル・スラックの予測を行い、高速でプログラム命令の実行を行う。
【解決手段】プロセッサ10は、主記憶装置9のメモリ・アドレスに記憶されかつプロセッサ10で実行される命令のローカル・スラックの予測値である予測スラックを予測し、上記命令をその予測スラックを利用して実行する。所定のしきい値以上の予測スラックを有するストア命令を、当該ストア命令に後続するロード命令とデータの依存関係がないと予測して判断し、当該ストア命令のメモリ・アドレスが判明していなくても上記後続するロード命令を投機的に実行する。
【選択図】図37

Description

本発明は、スラック予測を利用してメモリの曖昧性を除去するプロセッサ装置と、当該プロセッサ装置の処理方法に関する。
近年、クリティカル・パスに関する情報を用いた、マイクロプロセッサの高速化や消費電力の削減に関する研究が数多く行われている(例えば、非特許文献2,3,8,11,13参照。)。クリティカル・パスとは、プログラム全体の実行時間を決定する動的な命令列で構成されるパスである。クリティカル・パス上の命令の実行レイテンシをたとえ1サイクルでも増加させると、プログラム全体の実行サイクル数が増加する。しかし、クリティカル・パス情報は命令がクリティカル・パス上にあるかないかの2通りしかなく、命令は2種類にしか分類できない。また、クリティカル・パス上の命令数は非クリティカル・パス上の命令数よりも大幅に少なく、それぞれのカテゴリ毎に命令処理を分けた場合、負荷バランスが悪い。これらより、クリティカル・パス情報は、適用範囲が狭くなってしまう。
これに対し、クリティカル・パスの代わりに、命令のスラックを用いる手法が提案されている(例えば、非特許文献4,5参照。)。命令のスラックとは、プログラム全体の実行サイクル数を増加させることなく、その命令の実行レイテンシを増加させることのできるサイクル数である。命令のスラックが分かれば、各命令がクリティカル・パス上にあるかどうかだけでなく、クリティカル・パス上にない命令の実行レイテンシを、プログラムの実行に影響しない範囲で、どの程度増加させられるのかが分かる。従って、スラックを用いれば、命令を3種類以上のカテゴリに分けることができ、さらに、各カテゴリに属する命令数の不均衡を緩和することもできる。
各動的命令のスラックは、ある範囲を持った値である。スラックの最小値は常に0である。一方、スラックの最大値(グローバル・スラック(例えば、非特許文献5参照。))は動的に決まる。スラックを最大限利用するためには、グローバル・スラックを求める必要がある。しかし、ある命令のグローバル・スラックを求めるためには、実行レイテンシの増加がプログラム全体の実行サイクル数に与える影響を、プログラムの実行中に調べなければならない。そのため、グローバル・スラックを求めるのは非常に難しい。
そこで、グローバル・スラックではなく、ローカル・スラック(例えば、非特許文献5参照。)を予測する手法が提案された(例えば、非特許文献6,10参照。)。命令のローカル・スラックとは、プログラム全体の実行サイクル数だけでなく、後続命令の実行にも影響を与えないスラックの最大値である。ある命令のローカル・スラックは、依存関係のある後続命令に着目するだけで、容易に求めることができる。従来手法では、ある命令がレジスタ・データ、あるいは、メモリ・データを定義した時刻と、そのデータを最初に参照した時刻の差から、当該命令のローカル・スラックを求め、それを基に、将来のローカル・スラックを予測する。
しかし、従来手法では、データを定義した時刻を保持するためのテーブルと、時刻の差を求めるための演算器を用意する必要がある。また、プログラムの実行と並列に、定義時刻を保持するテーブルの参照/更新や、時刻の引き算を行わなければならない。これらのコストが発生する原因は、データの定義/参照時刻を用いてローカル・スラックを直接計算することにある。
次いで、スラックについて以下に説明する。
図1(a)は従来技術に係るスラックを説明するために用いる複数の命令を含むプログラムの一例を示す図であり、図1(b)は上記プログラムの各命令をプロセッサ装置上で実行する過程を示すタイミングチャートである。図1(a)及び図1(b)において、ノードは命令を示し、エッジは命令間のデータ依存関係を示す。縦軸は命令を実行したサイクルを示す。ノードの長さは命令の実行レイテンシ(実行遅延時間をいう。)を示す。実行レイテンシは、命令i1と命令i4が2サイクル、その他の命令が1サイクルである。
ここで、命令i0のスラックについて考える。命令i0の実行レイテンシを3サイクル増加させた場合、それに直接的、間接的に依存する命令i3、i5の実行が遅れる。その結果、命令i5は、プログラム中、最も最後に実行される命令i6と同時刻に実行される。従って、命令i0の実行レイテンシをこれ以上増加させると、プログラム全体の実行サイクル数が増加する。つまり、命令i0のグローバル・スラックは3である。このように、ある命令のグローバル・スラックを求めるためには、その命令の実行レイテンシの増加が、プログラム全体の実行に与える影響を調べる必要がある。そのため、グローバル・スラックの判定は非常に難しい。
一方、命令i0の実行を2サイクル増加させた場合、後続命令の実行に影響は与えない。しかし、これ以上実行レイテンシを増加させると、直接的、間接的に依存関係にある命令i3と命令i5の実行が遅れる。つまり、命令i0のローカル・スラックは2である。このように、ある命令のローカル・スラックを求めるには、その命令に依存する命令への影響に着目すれば良い。従って、ローカル・スラックは比較的容易に判定することができる。
次いで、従来技術に係るスラック予測方法について以下に説明する。例えば、図1(b)の命令i0がデータを定義した時刻0と、そのデータが命令i3によって最初に参照された時刻3との差から、さらに1を引き、命令i0のローカル・スラックは2であると計算する。そして、それを基に、命令i0を次に実行する場合のローカル・スラックは2であると予測する。
図2は、従来技術に係るローカル・スラック予測機構を備えたプロセッサ装置の構成を示すブロック図である。図2において、プロセッサ10は、主記憶装置9から命令をフェッチするフェッチ・ユニット11と、デコード・ユニット12と、命令ウィンドウ(I−win)13と、レジスタ・ファイル(RF)14と、複数の実行ユニット(EU)15、リオーダ・バッファ(ROB)16とを備えて構成される。プロセッサ10の右側において、従来技術に係るローカル・スラック予測機構を示す。ローカル・スラック予測機構は、レジスタ・データを定義した時刻を保持するためのレジスタ定義表2と、メモリ・データを定義した時刻を保持するためのメモリ定義表3と、これら2つの定義表2,3からの出力を選択的に切り換えて定義時刻を出力するマルチプレクサ4と、定義時刻と現在時刻との差を求めるための演算器である減算器5とを備える。さらに、ローカル・スラック予測機構は、各命令のローカル・スラックを保持するためのスラック表6を備える。ここで、レジスタ定義表2と、メモリ定義表3と、スラック表6とは、各テーブルを記憶するための記憶装置で構成される。
図1(b)の命令i0のローカル・スラックを例に、従来機構の動作を簡単に説明する。命令i0はデータを定義するときに、命令i0自身とともに現在時刻0を定義表に記録する。命令i3はデータを使用するときに、データを定義した命令i0とデータを定義した時刻(定義時刻)0を、定義表2,3から得る。そして、現在時刻3と定義時刻0との差分からさらに1を引くことで、命令i0のローカル・スラック2を求める。求めたスラックは、スラック表6の命令i0に対応するエントリに記録する。命令i0をフェッチ・ユニット11により次にフェッチしたときに、スラック表6を参照し、得られたスラックから、命令i0のローカル・スラックは2であると予測する。
以上のように、従来手法では、定義表2,3と減算器6を用意する必要があり、ハードウェア・コストが増大する。また、プログラムの実行と並列に、定義表2,3の参照及び更新と時刻の引き算を行わなければならないため、高速な動作を必要とし、それが消費電力に大きな影響を及ぼす可能性がある。こうした問題が発生する原因は、データの定義及び参照時刻に着目してローカル・スラックを直接計算することにある。
特開2000−353099号公報。 特開2004−286381号公報。 D. Burger et al., "The Simplescalar Tool Set Version 2.0", Technical Report 1342, Department of Computer Sciences, University of Wisconsin-Madison, June 1997。 千代延昭宏ほか,「低消費電力プロセッサアーキテクチャ向けクリティカルパス予測器の提案」,情報処理学会研究報告,2002−ARC−149,社団法人情報処理学会発行,2002年8月。 B. Fields et al., "Focusing Processor Policies via Critical-Path Prediction", In Proceedings of ISCA-28, June 2001。 B. Fields et al., "Using Interaction Costs for Microarchitectural Bottleneck Analysis", In proceedings of MICRO-36, December 2003。 B. Fields et al., "Slack: Maximizing Performance under Technological Constraints", In Proceedings of ISCA-29, May 2002。 福山智久ほか,「スラック予測を用いた省電力アーキテクチャ向け命令スケジューリング」,先進的計算基盤システムシンポジウム,ACSIS2005, 2005年5月。 J. L. Hennessy et al., "Computer Architecture: A Quantitative Approach", 2nd Edition, Morgan Kaufmann Publishing Incorporated, San Francisco, California, U.S.A., 1996。 小林良太郎ほか,「データフロー・グラフの最長パスに着目したクラスタ化スーパースカラ・プロセッサにおける命令発行機構」,2001年並列処理シンポジウムJSPP2001,2001年6月。 M. Levy, "Samsung Twists ARM Past 1GHz", Microprocessor Report 2002-10-16, October 2002。 劉小路ほか,「クリティカリティ予測のためのスラック予測」,先進的計算基盤システムシンポジウムSACSIS2004,2004年5月。 J. S. Seng et al., "Reducing Power with Dynamic Critical Path Information", In Proceedings of MICRO-34, December 2001。 P. Shivakumar et al., "CACTI 3.0: An Integrated Cache Timing and Power, and Area Model", Compaq WRL Report 2001/2, August 2001。 E. Tune et al., "Dynamic Prediction of Critical Path Instructions", In Proceedings of HPCA-7, January 2001。
上述のように、ロード/ストア命令間には、メモリの曖昧性が存在するため、予測に基づいてストア命令のスラックを利用すると、後続のロードの実行が遅れ、プロセッサの性能に悪影響を与えるという問題点がある。ここで、メモリの曖昧性とは、アクセスする主記憶装置のメモリ・アドレスが分かるまで、ロード/ストア命令間の依存関係が分からないことをいう。
本発明の目的は以上の問題点を解決し、従来技術に比較して簡単な構成で、ローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができるプロセッサ装置及びプロセッサ装置の処理方法を提供することにある。
第1の発明に係るプロセッサ装置は、主記憶装置のメモリ・アドレスに記憶されかつプロセッサ装置で実行される命令のローカル・スラックの予測値である予測スラックを予測し、上記命令をその予測スラックを利用して実行するプロセッサ装置において、
所定のしきい値以上の予測スラックを有するストア命令を、当該ストア命令に後続するロード命令とデータの依存関係がないと予測して判断し、当該ストア命令のメモリ・アドレスが判明していなくても上記後続するロード命令を投機的に実行する制御手段を備えたことを特徴とする。
上記プロセッサ装置において、上記制御手段は、ロード命令のメモリ・アドレスが判明しさらに上記ロード命令に先行するストア命令が、
(1)メモリ・アドレスが判明し、もしくは、
(2)メモリ・アドレスが判明していないが上記ストア命令の予測スラックが上記しきい値以上であるとき、
上記ロード命令と、それに先行しメモリ・アドレスが判明しているストア命令とのアドレス比較を行い、メモリ・アドレスが判明しておらずかつ上記しきい値以上のストア命令に対して当該ロード命令との依存関係が無いと判断したとき、メモリアクセスを行い、そうでなければ、依存するストア命令からフォワーディングによってデータを得ることにより、メモリの依存関係を予測して当該ロード命令を投機的に実行することを特徴とする。
また、上記プロセッサ装置において、上記制御手段は、上記しきい値以上の予測スラックを有するストア命令のメモリ・アドレスが判明した後、当該ストア命令のメモリ・アドレスと、実行を完了した後続するロード命令のメモリ・アドレスとを比較し、当該メモリ・アドレスが一致しなければ、当該メモリ依存の予測は成功と判断してメモリアクセスを行う一方、当該メモリ・アドレスが一致するときは当該メモリ依存の予測は失敗と判断して、当該メモリ・アドレスが一致したロード命令とそれ以降の命令を上記プロセッサ装置からこれらの命令をフラッシュして実行をやり直すことを特徴とする。
第2の発明に係るプロセッサ装置の処理方法は、主記憶装置のメモリ・アドレスに記憶されかつプロセッサ装置で実行される命令のローカル・スラックの予測値である予測スラックを予測し、上記命令をその予測スラックを利用して実行するプロセッサ装置の処理方法において、
所定のしきい値以上の予測スラックを有するストア命令を、当該ストア命令に後続するロード命令とデータの依存関係がないと予測して判断し、当該ストア命令のメモリ・アドレスが判明していなくても上記後続するロード命令を投機的に実行する制御ステップを含むことを特徴とする。
上記プロセッサ装置の処理方法において、上記制御ステップは、ロード命令のメモリ・アドレスが判明しさらに上記ロード命令に先行するストア命令が、
(1)メモリ・アドレスが判明し、もしくは、
(2)メモリ・アドレスが判明していないが上記ストア命令の予測スラックが上記しきい値以上であるとき、
上記ロード命令と、それに先行しメモリ・アドレスが判明しているストア命令とのアドレス比較を行い、メモリ・アドレスが判明しておらずかつ上記しきい値以上のストア命令に対して当該ロード命令との依存関係が無いと判断したとき、メモリアクセスを行い、そうでなければ、依存するストア命令からフォワーディングによってデータを得ることにより、メモリの依存関係を予測して当該ロード命令を投機的に実行することを含むことを特徴とする。
また、上記プロセッサ装置の処理方法において、上記制御ステップは、上記しきい値以上の予測スラックを有するストア命令のメモリ・アドレスが判明した後、当該ストア命令のメモリ・アドレスと、実行を完了した後続するロード命令のメモリ・アドレスとを比較し、当該メモリ・アドレスが一致しなければ、当該メモリ依存の予測は成功と判断してメモリアクセスを行う一方、当該メモリ・アドレスが一致するときは当該メモリ依存の予測は失敗と判断して、当該メモリ・アドレスが一致したロード命令とそれ以降の命令を上記プロセッサ装置からこれらの命令をフラッシュして実行をやり直すことを含むことを特徴とする。
本発明に係るプロセッサ装置とその処理方法によれば、所定のしきい値以上の予測スラックを有するストア命令を、当該ストア命令に後続するロード命令とデータの依存関係がないと予測して判断し、当該ストア命令のメモリ・アドレスが判明していなくても上記後続するロード命令を投機的に実行する。従って、予測が正しければ、ストア命令のスラックの利用によって、当該ストア命令とはデータ依存関係がないロード命令の実行が遅延することはなく、プロセッサ装置の性能への悪影響を抑制することができる。また、スラック予測機構の出力結果を利用するために、ストア命令とロード命令間の依存関係を予測するためのハードウェアを新たに用意する必要がない。それ故、従来技術に比較して簡単な構成で、ローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができる。
以下、本発明に係る実施形態について図面を参照して説明する。なお、以下の各実施形態において、同様の構成要素については同一の符号を付している。また、章及び節の番号は、各実施形態毎に独立に付している。
第1の実施形態.
本発明に係る第1の実施形態では、発見的手法に基づいてローカル・スラックを予測する機構を提案する。この機構では、命令実行時の振る舞いを観測しながら、試行錯誤的にローカル・スラックを予測して行く。これにより、ローカル・スラックを直接計算する必要がなくなる。さらに、本実施形態では、応用例として、ローカル・スラックを用いた機能ユニットの低消費電力化手法を取り上げ、提案機構の効果について評価を行う。
1.ローカル・スラックを発見的に予測する手法.
従来手法に対し、本実施形態では、ローカル・スラックを発見的に予測する手法を提案する。この手法では、命令実行時の振る舞いを観測しながら、予測するローカル・スラック(以下、予測スラックという。)を増減させ、予測スラックを実際のローカル・スラック(以下、ターゲット・スラックという。)に近づけて行く。試行錯誤的に予測を行うため、従来手法のようにローカル・スラックを直接計算する必要はない。
以下では、説明を簡単にするために、まず、提案手法の基本的な動作を説明する。その後、ターゲット・スラックの動的な変化に対応するための修正を加える。最後に提案手法の構成について説明する。
1.1.基本動作.
まず、本実施形態に係る提案手法の基本動作を示す。命令フェッチ時にローカル・スラックを予測し、予測スラックに基づいて命令の実行レイテンシを増加させる。どの命令に対しても、それを初めてフェッチするときには、ローカル・スラックは0であると予測する。つまり、予測スラックの初期値は0とする。その後は、命令実行時の振る舞いを観測しながら、予測スラックを、ターゲット・スラックに到達するまで、徐々に増加させて行く。
すなわち、本予測方法では、具体的には、まず、命令のフェッチに際してその命令の予測スラックを取得し、その取得した予測スラックの分だけその命令の実行レイテンシを増加させる。例えば実行レイテンシが本来「1サイクル」の命令について、その予測スラックが「2」であったときには、その命令の実行レイテンシは「3サイクル」に増加させる。なお、何れの命令についても、プログラムの開始後にその命令が始めてフェッチされたときには、そのローカル・スラックは「0」と予測する。すなわち、すべての命令についてその予測スラックの初期値は「0」に設定されている。その後、実行時における命令の振る舞いを観測し、予測スラックがターゲット・スラックに到達したと推定されるまで、予測スラックを徐々に増加させて行く。
次に、基本動作において、命令実行時の振る舞いを基に、予測スラックがターゲット・スラックに到達したかどうかを判定する方法を説明する。ここで、ある命令の予測スラックを増加させていき、その値がターゲット・スラックに到達したという状況を考える。このとき、当該命令は、実行レイテンシを1サイクルでも増加させると、それに依存する命令の実行を遅れさせてしまう状態にある。また、命令間の依存関係として、制御依存、キャッシュ・ラインを介した依存、レジスタ・データ依存、メモリ・データ依存をあげることができる。従って、予測スラックがターゲット・スラックに到達した命令は、以下のいずれかの振る舞いを見せると考えられる。
(a)分岐予測ミス、
(b)キャッシュ・ミス、
(c)後続命令に対するオペランド・フォワーディング、及び
(d)後続命令に対するストアデータフォワーディング。
まず、上記(a)の分岐予測ミスについて説明する。パイプライン処理を行うプロセッサは、多数の命令を流れ作業的に同時に実行するため、分岐命令で以後に実行される命令列が変更されると、既に処理を開始した後続命令をすべて破棄しなくてはならず、処理効率が低下する。これを防ぐため、以前に当該分岐命令が実行されたときの分岐の発生状況から命令が分岐するか否かを予測し、その予測結果に従って分岐予測先の命令を投機実行するようにしている。ここで予測スラックがターゲット・スラックを上回った状況を考える。こうした状況では、先行命令の実行レイテンシが過剰に増加されて、それに依存する後続命令の実行に遅延が生じる。このような場合、適正な分岐予測ができなくなり、分岐の予測結果を誤り易くなる。そのため、分岐予測ミスが発生したときには、予測スラックがターゲット・スラックを上回ってしまっている可能性が高いと考えることができる。
次に、上記(b)のキャッシュ・ミスについて説明する。多くのプロセッサでは、使用頻度の高いデータ等を、高速なキャッシュ・メモリに蓄積しておくことで、低速な記憶装置へのアクセスを低減し、プロセッサの処理を高速化するようにしている。先行命令の予測スラックがターゲット・スラックを上回った状態となると、こうしたキャッシュ動作を適正に行うことができなくなり、キャッシュ・ミスが発生し易くなる。従って、キャッシュ・ミスが発生したときにも、予測スラックがターゲット・スラックを上回ってしまっている可能性が高いと考えることができる。
続いて、上記(c)及び(d)の後続命令に対するオペランド・フォワーディング及びストアデータフォワーディングについて説明する。先行命令とその先行命令の定義したデータを参照する後続命令との実行間隔が短いと、データの書き込み完了前に後続命令がそのデータを読み込もうとしてデータ・ハザードが発生してしまうことがある。そのため、多段パイプラインを有するプロセッサの多くでは、バイパス回路を設けて、書き込み前のデータを後続命令に直接与えるオペランド・フォワーディングやストアデータフォワーディングを行うことで、そうしたデータ・ハザードを回避するようにしている。こうしたフォワーディングは、先行命令の定義したデータを参照する後続命令が、先行命令の直後に連続して実行されるときに発生する。従って、オペランド・フォワーディングやストアデータフォワーディングが発生したときには、予測スラックがターゲット・スラックと一致していると判断することができる。
本予測方法では、命令実行時の振る舞いが、上記(a)〜(d)のいずれかに該当するとき、予測スラックがターゲット・スラックに到達したと推定し、そうでないときには未到達であると判定するようにしている。こうした予測スラックがターゲット・スラックに到達したとの推定の成立条件を上記(a)〜(d)の論理和条件とし、「ターゲット・スラック到達条件」と呼ぶこととする。なお、上記(a)〜(d)のような命令実行時の振る舞いを検出する機構は、分岐予測、キャッシュ、フォワーディングを行うプロセッサであれば、通常、元より備えられている。そのため、ローカル・スラック予測のためにそうした検出機構を新規追加せずとも、上記到達条件の成立の有無を確認することが可能である。
図3(a)は本発明の第1の実施形態に係るローカル・スラックを発見的に予測する手法を用いたプロセッサ装置の基本動作であって、第1回目の実行動作を示すタイミングチャートであり、図3(b)は上記プロセッサ装置の基本動作であって、第2回目の実行動作を示すタイミングチャートであり、図3(c)は上記プロセッサ装置の基本動作であって、第3回目の実行動作を示すタイミングチャートである。すなわち、上記提案手法の基本動作に基づいて、図1(a)のプログラムを繰り返し実行する過程を図3(a)、図3(b)及び図3(c)に示す。図3(a)、図3(b)及び図3(c)において、各ノードのハッチング部分は、予測スラックに応じて増加させた実行レイテンシを示す。図3(a)、図3(b)及び図3(c)では、説明を簡単にするため、命令i0のローカル・スラックのみを予測の対象とし、予測スラックは1回につき1ずつ増加させるとする。
図3(a)の1回目の実行では、命令i0の予測スラックは0である。この場合、命令i0の実行時の振る舞いは、ターゲット・スラック到達条件のいずれにも該当しないので、予測スラックはターゲット・スラックに未だ到達していない。そこで、命令i0の予測スラックを1だけ増加させる。その結果、図3(b)の2回目の実行では、命令i0の予測スラックは1となる。この場合も、予測スラックはターゲット・スラックに到達していない。そこで、命令i0の予測スラックをさらに1だけ増加させる。これにより、図3(c)の3回目の実行では、命令i0の予測スラックは2となる。その結果命令i0は後続命令に対しオペランド・フォワーディングを行う。これにより、ターゲット・スラック到達条件を満たす。予測スラックはターゲット・スラックに到達したので、これ以上増加させない。以上のようにして命令i0のローカル・スラックを予測する。
1.2.ターゲット・スラックの動的な変化への対応.
基本動作では、ターゲット・スラックの動的な変化に十分に対応することができない。ターゲット・スラックが動的に変化しても、それが予測スラックよりも大きいのであれば、予測スラックは新たなターゲット・スラックを目指して増加するだけなので、問題はない。しかし、ターゲット・スラックが予測スラックより小さくなると、予測スラックは変化することなく、そのままの値を維持するので、ターゲット・スラックを上回った分(スラック予測ミスペナルティ)だけ、後続命令の実行を遅れさせてしまう。これが、性能に悪影響を及ぼす可能性がある。
この問題に対し、まず、ターゲット・スラックが予測スラックよりも小さくなったら、予測スラックを減らすという解決手法を提案する。しかし、ターゲット・スラックが急速に増減を繰り返す場合、この手法を導入しても、予測スラックをターゲット・スラックに追従させることはできない。その結果、ターゲット・スラックが予測スラックよりも小さくなるという状況が頻繁に発生する。そこでさらに、信頼性を導入して、予測スラックの増加は慎重に行い、予測スラックの減少は迅速に行うという解決手法を提案する。
以下では、上記2つの解決方法について詳しく説明する。
1.2.1.予測スラックの減少.
予測スラックの減少を実現する方法として、スラック予測を行わなかった場合の後続命令の実行時刻(後続命令の本来実行されるべき時刻)を利用するという方法が考えられる。後続命令の本来実行されるべき時刻が分かれば、スラック予測のミスにより後続命令の実行時刻が遅れたかどうかを調べることができる。あるいは、ターゲット・スラックを直接計算し、予測スラックと比較することもできる。しかし、いずれにしても、命令の実行時刻を決定しうる様々な要素(資源制約、データ依存、制御依存など)を考慮して、後続命令の本来実行されるべき時刻を計算しなければならないので、簡単に実現することはできない。
そこで本発明者は、上述した「ターゲット・スラック到着条件」に着目する。この条件を用いれば、予測スラックがターゲット・スラックを下回っていることと、ターゲット・スラックに到着したことが容易に分かる。この特徴を利用し、予測スラックがターゲット・スラックに到着したら、その後は逆に、ターゲット・スラックを下回るまで予測スラックを減少させることとする。こうすることにより、非常に簡単な修正で、ターゲット・スラックの動的な減少に対応できるようになる。ターゲット・スラックを下回る分の予測スラックが無駄になるが、十分に許容できると考える。
図4(a)及び図4(b)を用いて、上記基本動作の問題点と、その解決手法について説明する。図4(a)は図3の基本動作の問題点を説明するためのサイクル対スラック特性を示すグラフであり、図4(b)はその問題点の解決手法を説明するためのサイクル対スラック特性を示すグラフである。すなわち、図4(a)及び(b)は、ターゲット・スラックが動的に減少した場合に、予測スラックがどのように変化するのかを示す例である。図4(a)及び(b)において、縦軸はスラックを示し、横軸は時刻を示す。折れ線グラフは、点線がターゲット・スラックの場合、実線が予測スラックの場合である。ハッチング部分は、予測スラックがターゲット・スラックを超えてしまう箇所を示す。図4(a)は上記基本動作の場合、図4(b)は本項で提案する解決手法を導入した場合である。
図4(a)において、予測スラックはターゲット・スラックに到達するまで増加して行く。その後、ターゲット・スラックが減少し、予測スラックより小さくなる。しかし、予測スラックはそのままの値を維持し、後続命令の実行を継続的に遅れさせてしまう。
一方、図4(b)に示すように、修正後の動作では、まず、予測スラックはターゲット・スラックに到達するまで増加して行く。到着後、予測スラックは減少するが、ターゲット・スラックを下回るので、即座に増加に転じ、再びターゲット・スラックに到達する。この変化を、しばらくの間繰り返す。その後、ターゲット・スラックが減少すると、予測スラックは、ターゲット・スラックを下回るまで減少していき、再び増減を繰り返す。こうして、ターゲット・スラックの減少にあわせて予測スラックを減らすことができるようになる。
1.2.2.信頼性の導入.
ターゲット・スラックの急速な変化に対応するため、基本動作をさらに修正する。まず、予測スラック毎に信頼性カウンタを導入する。カウンタ値は、命令がターゲット・スラック到達条件を満たしていれば減少させ、そうでなければ増加させる。そして、カウンタ値が0になったら予測スラックを減少させ、カウンタ値があるしきい値以上になったら予測スラックを増加させる。
予測スラックの増加を慎重に行うため、予測スラックを増加させる際に、カウンタ値を0にリセットすることとする。また、予測スラックの減少を迅速に行うため、命令が「ターゲット・スラック到達条件」を満たしていれば、カウンタ値を0にリセットすることとする。
図5(a)は図4の解決手法の問題点を説明するためのサイクル対スラック特性を示すグラフであり、図5(b)はその問題点の解決手法を説明するためのサイクル対スラック特性を示すグラフである。図5(a)及び(b)を用いて、前項で示した解決手法の問題点と、それを解決するための手法について説明する。図5(a)及び(b)は、ターゲット・スラックが急速に増減を繰り返した場合に、予測スラックがどのように変化するのかを示す例であり、図5(a)は、基本動作に予測スラックの減少を導入した場合を示し、図5(b)は、さらに信頼性も導入した場合を示す。
図5(a)において、予測スラックはターゲット・スラックを目指して変化しようとするが、急速な変化に追従できず、頻繁にターゲット・スラックを超えてしまうことが分かる。一方、図5(b)に示すように、信頼性を導入すると、予測スラックはターゲット・スラックを目指して緩やかに増加していき、ターゲット・スラックに到達する(あるいはそれを超える)と即座に減少するという変化を繰り返す。これにより、予測スラックがターゲット・スラックを超える頻度を下げることができる。
1.3.ハードウェア構成.
図6は、本発明の第1の実施形態に係るスラック表20を備えたプロセッサ10の構成を示すブロック図である。図6において、プロセッサ10の右側部分は、本発明者の提案するローカル・スラック予測機構であり、提案機構は、予測スラックを保持するためのスラック表20で構成される。スラック表20は記憶装置で構成され、命令のプログラム・カウンタ値(PC:その命令を記憶する主記憶装置9のメモリ・アドレスをいう。)をインデクスとし、各エントリは対応する命令の予測スラックと、ターゲット・スラック到達条件の信頼性を保持する。
図6において、プロセッサ10は、フェッチ・ユニット11と、デコード・ユニット12と、命令ウィンドウ(I−win)13と、レジスタ・ファイル(RF)14と、実行ユニット(EU)15と、リオーダ・バッファ(ROB)16とを備えて構成されている。プロセッサ10を構成する各ユニットの機能は次の通りである。フェッチ・ユニット11は、主記憶装置9からの命令の読み込みを行う。デコード・ユニット12は、読み込まれた命令の内容の解析(デコード)し、命令ウィンドウ13及びリオーダ・バッファ16にそれぞれ格納する。命令ウィンドウ13は、実行前の命令を一時的に格納するバッファ(メモリ)であり、プロセッサ10の制御回路は、命令ウィンドウ13のバッファから命令を取り出して、実行ユニット15に順次投入する。一方、リオーダ・バッファ16は、命令を格納するFIFO(First-In First-Out)式のスタックメモリであり、格納された命令の中で格納の順が最も早い命令の実行が終了すると、その命令が取り出される(コミットされる)。ここで、コミットとは、実行結果によってプロセッサ状態を更新することをいう。また、FIFO17は、スラック表20からフェッチ・ユニット11により取得された後、デコード・ユニット12から出力される予測スラッグと信頼性を各タイミングでセットとして入力し記憶しスラック表20に出力する。なお、レジスタ・ファイル14は、命令の実行に必要なデータや命令の実行結果、実行中、実行予定の命令のアドレス・インデクス等をそれぞれ格納する各種レジスタの実体となっている。
命令は、フェッチ時にプログラム・カウンタ値(PC)をインデクスとしてスラック表を参照し、対応するエントリから予測スラックを得る。そして、コミットするときに、命令実行時の振る舞いを基にしてスラック表を更新する。スラック表の更新に関係するパラメータとその内容を以下に示す。ただし、予測スラックの最小値Vmin=0、信頼性の最小値Cmin=0である。
(1)Vmax:予測スラックの最大値、
(2)Vmin:予測スラックの最小値(=0)、
(3)Vinc:予測スラックの1回あたりの増加量、
(4)Vdec:予測スラックの1回あたりの減少量、
(5)Cmax:信頼性の最大値、
(6)Cmin:信頼性の最小値(=0)、
(7)Cth:信頼性のしきい値、
(8)Cinc:信頼性の1回あたりの増加量、及び
(9)Cdec:信頼性の1回あたりの減少量。
スラック表20の更新の流れを以下に示す。上述のターゲット・スラック到達条件が成立していれば信頼性を0にリセットし、そうでなければ、増加量Cincだけ増加させる。信頼性がしきい値Cth以上になったら、予測スラックを増加量Vincだけ増加させ、信頼性を0にリセットする。一方、信頼性が0になったら、予測スラックを減少量Vdecだけ減少させる。なお、1.2.節において、ターゲット・スラック到達条件が成立すれば信頼性を0にリセットするとしたので、Cdec=Cthである。さらに、予測スラックを増加させる際に、信頼性を0にリセットするとしたので、Cmax=Cthである。
5.スラック予測機構の評価.
本章では、まず評価モデル、評価環境について述べる。次に、評価結果について述べる。
5.1.評価モデル.
以下のモデルについて評価した。
(1)NO−DELAYモデル:予測スラックに基づいた実行レイテンシの増加を行わないモデルである。
(2)Bモデル:提案手法の基本動作のみ行うモデルである。
(3)BCnモデル:提案手法の基本動作に、信頼性を導入したモデルである。モデルに付加した数値nは、信頼性のしきい値Cthを表す。
(4)BDモデル:提案手法の基本動作に、予測スラックの減少を導入したモデルである。
(5)BDCnモデル:提案手法の基本動作に、予測スラックの減少と信頼性を導入したモデルである。モデルに付加した数値nは、信頼性のしきい値Cthを表す。
Bモデル、BCnモデル、BDモデル、BDCnモデルは、提案方式を基にしたモデルであるため、これらを提案モデルと呼ぶこととする。
2.2.評価環境.
シミュレータには、公知のSimple Scalar Tool Set(例えば、非特許文献1参照。)のスーパースカラ・プロセッサ用シミュレータを用い、提案方式を組み込んで評価した。命令セットには公知のMIPSR10000を拡張した公知のSimpleScalar/PISAを用いた。ベンチマーク・プログラムは、公知のSPECint2000のbzip2、gcc、gzip、mcf、parser、perlbmk、vortex、vprの8本を使用した。gccでは1G命令、その他では2G命令をスキップした後、100M命令を実行した。測定条件を表1に示す。従来方式との比較のため、スラック表のエントリ数は、従来方式(例えば、非特許文献10参照。)と同一とした。
Figure 2007293814
スラック表の更新に関するパラメータおいて、変化させ得るものは、最大値Vmax、増加量Vinc、減少量Vdec、しきい値Cth、増加量Cincである。これらの組合せは膨大な数になるので、幾つかのパラメータをある値に固定する。まず、増加量Cincとしきい値Cthの比はスラックを増加させる頻度を表すので、増加量Cinc=1に固定し、しきい値Cthだけを変化させることとする。次に、予測スラックをできるだけターゲット・スラックに近づけるために、増加量Vinc=1に固定する。最後に、予測スラックをできるだけ早く減少させるために、減少量Vdec=Vmaxに固定する。以上より、本章では、最大値Vmaxとしきい値Cthだけを変化させて、提案方式の評価を行うこととする。ただし、比較を容易にするため、しきい値Cthは、5、15の2通りに、最大値Vmaxは、1、5、15の3通りに制限する。
2.3.スラック予測精度.
ここでは、まず、各動的実行命令に対し、実際のスラック(以下、実スラックという。)を測定する。具体的には、NO−DELAYモデルにおいて、ある命令がレジスタ・データ、あるいは、メモリ・データを定義した時刻と、そのデータを最初に参照した時刻の差から、当該命令のローカル・スラックを求める。そのため、データを定義しない命令(分岐命令)のスラックは無限大となる。
図7は、図6の提案機構の実施例のシミュレーション結果であって、各プログラムにおける実スラックに対する実行命令数に占める割合を示すグラフである。すなわち、図7に実スラックの累積分布を示す。図7の縦軸は、全実行命令数に占める割合を示し、その横軸は実スラックを示す。折れ線グラフは、実線がベンチマーク平均を示し、点線が各ベンチマークを示す。実スラックが32サイクルの点において、上から順にvpr、bzip、gzip、parser、平均、perlbmk、gcc、vortex、mcfの場合である。
図7に示すように、実スラック0の命令は平均52.7%存在する。実スラックが増えるにつれて、実行命令数に占める割合は徐々に飽和して行く。また、実スラックが、30サイクル以上存在する命令は平均28.9%存在することが分かる。しかし、通常のプロセッサで、命令の実行レイテンシを数十サイクル以上増加させると、それらの命令がプロセッサ内のバッファ(リオーダ・バッファ(ROB)16、命令ウィンドウ(I−win)13等)を占有するため、性能が大幅に低下する(例えば、非特許文献10参照。)。こうした大きなスラックをどのように利用するのかは、今のところ十分には検討されていない。
図8、図9及び図10はそれぞれ、図6の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Vmax=1,5,15における各モデルに対する実行命令数に占める割合(スラック予測精度)を示すグラフである。すなわち、図8乃至図10において、各提案モデルのスラック予測精度を測定した結果をベンチマーク平均で示す。図8乃至図10の縦軸は全実行命令数に占める割合を示し、その横軸はモデルを示す。棒グラフは、6つの部分からなり、上の4つが、スラックをn(nは1以上)と予測した場合、下の2つが、スラックを0と予測した場合である。スラックをnと予測した場合、上から順に、予測スラックnが実スラックm(mは1以上)を超えた場合(n>m)、実スラック0を超えた場合(n>0)、実スラックを下回った場合(n<m)、実スラックと一致した場合(n=m)である。一方、スラックを0と予測した場合、上から順に、実スラックを下回った場合(0<m)、実スラックと一致した場合(0=m)である。ただし、予測スラックの最大値Vmax=1の場合、予測スラックnが実スラックmを上回る場合はないので、棒グラフは5つの部分からなる。これ以降、予測スラックと実スラックが一致することを、予測がヒットすると呼ぶ。
図8乃至図10より、予測がヒットする割合はBモデルが最も低いことが分かる。これに対し、予測スラックの減少を導入したモデル(BDモデル)と、信頼性を導入したモデル(BCnモデル)は、どちらもヒット率向上に効果があることが分かる。また、両者をともに導入したモデル(BDCnモデル)は、さらに高い効果が得られる。信頼性を導入したモデルの場合、信頼性のしきい値(モデルに付加した数字)が高い程、ヒット率は高くなる。なお、予測がヒットするのは、予測スラックの最大値Vmax=1のBモデルを除くと、実スラックが0の場合がほとんどである。この場合、スラックは利用できない。
予測スラックが実スラックを上回る場合、実スラックを超えるスラックを利用してしまうことになる。従って、予測ミスによるペナルティが発生する。図8乃至図10より、予測ミスペナルティの発生率は、ヒット率が高いほど下げることができる。一方、予測スラックが実スラックを下回る場合、予測ミスペナルティは発生しない。この場合、予測スラックが1以上あれば、スラックを利用することができる。図8乃至図10より、予測ミスペナルティを発生させることなく、スラックを利用できる割合は、ヒット率が高いほど下がってしまうが、その変化は比較的緩やかである。これらより、提案機構は、予測スラックが1以上となる割合を単純に減少させようとしているのではなく、主に予測ミスペナルティの発生率が減少するように、予測スラックを変化させていることが分かる。
次に、予測スラックの最大値Vmaxの影響について考察する。図8乃至図10より、予測スラックの最大値Vmaxを変化させた場合、予測スラックが0である割合、及び、1以上である割合はあまり変化しない。このことから、スラックが1以上ある(又はスラックがない)と予測する命令の数は、予測スラックの最大値Vmaxにあまり依存していないことが分かる。また、予測スラックが1以上である命令の内訳は、予測スラックの最大値Vmaxを1から5に増加させたときには変化するものの、予測スラックの最大値Vmaxを5から15に増加させたときには、あまり変化しないことが分かる。これらより、予測スラックの最大値Vmaxがある程度大きくなると、予測スラックと実スラックの大小関係はあまり変化しなくなることが分かる。
2.4.実スラックと予測スラックの差.
前節の評価により、実スラックと予測スラックの大小関係を知ることができた。しかし、これだけでは、両者の差が実際にどの程度あるのかが分からない。そこで、実スラックから予測スラックを引いた値の累積分布を測定する。測定では、まず、NO−DELAYモデルにおいて、各動的実行命令の実スラックをすべて採取する。そして、各提案モデルにおいて、採取した実スラックから、これに対応する予測スラックを引いた値を求める。
図11、図12及び図13はそれぞれ、図6の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Vmax=1,5,15において各モデルにおける実スラックと予測スラックの差に対する実行命令数に占める割合を示すグラフである。図11乃至図13の縦軸は、全実行命令数に占める割合をベンチマーク平均で示し、その横軸は実スラックから予測スラックを引いた値を示す。この値が負の場合、予測スラックが実スラックを上回っていることを示す。0の場合、スラック予測がヒットしていることを示す。正の場合、予測スラックが実スラックを下回っていることを示す。横軸の最小値は、実スラックの最小値0から、予測スラックの最大値Vmaxを引いた値となる。図11において、折れ線グラフは、一番上のグラフがBモデル、ほぼ重なっているグラフがBC15モデルとBDモデル、一番下のグラフがBDC15モデルの場合である。一方、図12及び図13において、折れ線グラフは、上から順に、Bモデル、BC15モデル、BDモデル、BDC15モデルの場合である。各モデルの比較を容易にするため、しきい値Cth=5の場合の結果は省略する。
図11乃至図13から明らかなように、予測スラックの減少や信頼性の導入を行うと、予測ミスペナルティの発生率だけでなく、予測ミスペナルティの大きさも抑制できることが分かる。また、各モデルの差は、正の領域よりも、負の領域の方が大きい。これは、予測スラックを大きくする効果の差よりも、予測ミスペナルティを小さくする効果の差の方が大きいことを示している。このことから、予測スラックの減少の導入と、信頼性の導入は、目的通り、スラック予測ミスペナルティを削減できていることが分かる。さらに、どのモデルにおいても、予測スラックの最大値Vmaxが大きくなる程、予測ミスペナルティが大きくなることが分かる。この原因は、実スラックが大幅に低下する命令が数多く存在することにある。例えば、予測スラックの最大値Vmax=15の場合、予測スラックの増減しか行わないBモデルにおいて、差が−15サイクルになる命令は、31.1%となる。これは、実スラックが15サイクル以上減少した命令が、31.1%存在していることを示す。
2.5.性能に与える影響.
図14は図6の提案機構の実施例のシミュレーション結果であって、各モデルにおける正規化されたIPC(Instructions Per Clock cycle:1クロック当りに処理できる平均命令数)を示すグラフである。図14の縦軸は、NO−DELAYモデルの場合で正規化したIPCを、ベンチマーク平均で示す。図14の横軸はモデルを示す。3本で組になった棒グラフは、左から順に、予測スラックの最大値Vmaxが1、5、15の場合である。図14より、予測スラックの最大値Vmaxが同一であるモデル同士を比較すると、IPCはBモデルが最も低いことが分かる。また、予測スラックの減少や信頼性を単独で導入したモデルよりも、これらを組み合わせたモデル(BDCnモデル)の方が高い性能を達成することが分かる。なお、信頼性を導入したモデルの場合、信頼性のしきい値(モデルに付加した数字)が高い程、性能は高くなる。
各モデルの性能が低下する原因は、スラック予測ミスペナルティの発生にある。そこで、上記の結果と、スラック予測精度を示した図8乃至図10を比べると、予測スラックの最大値Vmaxが同一であれば、予測スラックが実スラックを上回る(予測ミスペナルティが発生する)割合が低いモデル程、性能が高くなっていることが分かる。
図14より、各モデルにおいては、予測スラックの最大値Vmaxを増加させるほど、IPCが低下することが分かる。しかし、IPCが高いモデル程、IPCの低下率を抑制できることが分かる。この理由は、図11乃至図13から分かるように、予測スラックの減少や信頼性の導入を行うと、予測ミスペナルティの発生率だけでなく、予測ミスペナルティの大きさも抑制できるからである。
図15は図6の提案機構の実施例のシミュレーション結果であって、各モデルにおけるスラック命令数の割合を示すグラフである。図16は図6の提案機構の実施例のシミュレーション結果であって、各モデルにおける平均予測スラックを示すグラフである。すなわち、図15及び図16に、各モデルの予測スラックを評価した結果を示す。図15は、「スラック命令」の数を示す。ここで、「スラック命令」とは、予測スラックに基づいて実行レイテンシを1サイクル以上増加させた命令である。図15の縦軸は、全実行命令数に占めるスラック命令数の割合をベンチマーク平均で示し、その横軸はモデルを示す。一方、図16は、「平均予測スラック」を示す。ここで、「平均予測スラック」とは、予測スラックの合計を、スラック命令数で割ることにより得られる値である。図16の縦軸は、予測スラックの平均値をベンチマーク平均で示し、その横軸はモデルを示す。これらの図15及び図16より、実行レイテンシを増加させることのできた命令の割合と、それらの命令に対して、増加させることのできた実行レイテンシの平均を知ることができる。
図15より、スラック命令数は、モデルの種類や信頼性の閾値に依存し、IPCが高いモデルほど少なくなるが、予測スラックの最大値Vmaxにほとんど依存しない。一方、図16より、平均予測スラックは、予測スラックの最大値Vmaxが高いほど大きくなるが、モデルの種類や信頼性のしきい値によって変化することはあまりない。これらより、予測スラックの最大値Vmaxが同一であるモデル同士を比較すると、増加させた実行レイテンシの合計は、予測スラックの減少や信頼性を導入することで減少し、BDCnモデルにおいて最も少なくなる。また、信頼性を導入したモデルの場合、信頼性のしきい値が高いほど、増加させた実行レイテンシの合計は少なくなる。
しかし、BDCnモデルは、予測スラックの最大値Vmaxの増加によるIPCの低下を最も抑制できる。そのため、性能をあまり低下させること無く、他のモデルよりも予測スラックを増やすことができる場合がある。例えば、IPCの低下が80%程度まで許されるような状況において、BC15モデル、BDモデル、BDC15モデルは、予測スラックの最大値Vmaxをそれぞれ、5、5、15まで増加させることができる。このとき、BDC15モデルは、増加させることのできた実行レイテンシの合計が、BC15モデルよりも15.6%、BDモデルよりも32.6%だけ多くなる。
非特許文献10では、従来手法によってローカル・スラックを予測し、それに基づいて命令の実行レイテンシを1サイクル増加させた場合の性能、及びスラック命令数を測定している。それによると、従来手法では、性能の低下が2.8サイクルのときに、スラック命令数の割合が26.7%になる。
一方、上記の研究とはベンチマーク・プログラムやプロセッサ構成が異なるものの、本実施形態で最も近い評価を行っているのは、BDC15モデルにおいて、予測スラックの最大値Vmax=1とした場合である。この場合、性能の低下が2.5サイクルのときに、スラック命令数の割合が31.6%となる。これより、提案手法は、従来手法と同様の結果を示すことが分かる。
図17は図6の提案機構の別の実施例のシミュレーション結果であって、予測スラックの最大値Vmaxの各値に対するスラック命令数とIPCとの関係を示すグラフである。図18は図6の提案機構の別の実施例のシミュレーション結果であって、IPCに対する予測スラックの総積算値を示すグラフである。
すなわち、図17は、評価におけるスラック命令数とIPCの測定結果を示している。図17の縦軸は、最大値Vmax及びしきい値Cthの値の各組合せにおける、全実行命令数に対するスラック命令数の比率と、スラック予測を一切行わなかったときのIPCに対する測定IPCの比率とを示している。また最大値Vmaxの各値(「1」、「5」、「10」、「15」)のそれぞれにおける4本組の縦棒は、図中左側からそれぞれしきい値Cthが「1」、「5」、「10」、「15」の場合での測定結果をそれぞれ表す。
図17に示されるように、しきい値Cthを増加させるとスラック命令数は減少する。これはしきい値Cthの増加により、予測スラックの増加条件が厳しくなり、予測スラックの増加頻度が低くなるためである。ただし、しきい値Cthを増加すれば、予測スラックがターゲット・スラックを上回る頻度が低くなるため、IPCは向上するようになる。この結果から、上記信頼性の導入によって、上記スラック予測ミスのペナルティによる命令処理性能の低下を抑えられることが確認された。一方、予測スラックの最大値Vmaxを増加させると、予測スラックがより大きい値を取ることが可能となるため、スラック予測ミスのペナルティが大きくなり、処理性能(IPC)は低下するようになる。
図18に、上記測定結果での予測スラックとIPCとの関係を示す。なお、図18の縦軸は、パラメータ(Vmax,Cth)=(1,1)の場合を基準(100)とした予測スラックの総積算値のベンチマーク平均値の比率を示し、その横軸は、スラック予測を一切行わなかったときを基準(100)としたIPCのベンチマーク平均値の比率をそれぞれ示している。なお、図18の各点に付された数字は、しきい値Cthの値を示している。
図18に示されるように、予測スラックの最大値Vmaxを増加させると、処理性能は低下するが、予測スラックは大幅に増大する。また最大値Vmaxとともにしきい値Cthを増加させることで、IPCがほとんど低下せずに、予測スラックが増加するパラメータの組合せも幾つか確認された。例えばパラメータ(Vmax,Cth)=(1,1)の場合に対して、パラメータ(Vmax,Cth)=(5,15)の場合には、IPCの低下をわずか0.3%に留めながらも、予測スラックは約2.2倍となっている。
以上の結果から明らかなように、処理性能は、スラック命令数や予測スラックとトレード・オフの関係にあり、適用対象での要求に応じて、各パラメータの最適値は異なることとなる。
3.スラック予測機構のハードウェアに関する評価.
本実施形態において提案するスラック予測機構のハードウェア量、アクセス時間、消費電力を従来機構と比較する。
3.1.ハードウェア構成.
プロセッサ構成は、前章の評価環境と同じものを用いる。すなわち、図2の従来機構を用い、また、提案機構として前章で評価した図6のBDCモデルを用いる。まず、図2の従来機構で必要となるハードウェアを以下に示す。
(1)テーブルは、スラック表20、メモリ定義表3及びレジスタ定義表2を備える(図2参照)。
(2)演算器は、図2の減算器5(スラック値の計算)、比較器(アドレスの比較)及び比較器(物理レジスタ番号の比較)を備える。なお、2個の比較器は、詳細後述するように、テーブルをパイプライン化したときに必要なハードウェアであって、図2において図示していない。
図2の従来機構において、スラック表20は、命令のスラック値を保持しており、プログラム・カウンタ値(PC)をインデクスとして、フェッチ時に参照し、実行時に更新する。メモリ定義表3は、メモリ・アドレスをインデクスとし、対応するメモリ・アドレスにデータをストアした命令のプログラム・カウンタ値(PC)と、そのデータの定義時刻を保持する。メモリ定義表3は、ストア・アドレスで更新し、ロード・アドレスで参照する。レジスタ定義表2は、物理レジスタ番号をインデクスとし、対応する物理レジスタにデータを書き込んだ命令のプログラム・カウンタ値(PC)とそのデータの定義時刻を保持する。レジスタ定義表2は、命令の実行直前に、命令のソース・レジスタに対応する物理レジスタ番号で参照し、デスティネーション・レジスタに対応する物理レジスタ番号で更新する。減算器5は、定義表から得られた定義時刻と現在時刻との差分をとり、実行した命令のスラックを計算する。比較器(アドレスの比較)と比較器(物理レジスタ番号の比較)はそれぞれ、メモリ定義表3及びレジスタ定義表2を、高速動作のためにパイプライン化したときに必要となる。メモリ定義表3及びレジスタ定義表2のテーブルをパイプライン化した場合、定義時刻の更新が完了する前に、その定義時刻の参照が発生すると、当該テーブルから正しい定義時刻を得ることができない。この問題を解決するためには、定義時刻のフォワーディングを行う必要がある。具体的には、まず、更新に用いるアドレスと参照に用いるアドレスの比較、更新に用いるデスティネーション・レジスタと参照に用いるソース・レジスタの物理レジスタ番号の比較を行う。そして、アドレス、あるいは、物理レジスタ番号が一致すると、それぞれメモリ定義時刻、レジスタ定義時刻のフォワーディングを行う。
次に、提案機構で必要となるハードウェアを以下に示す。
(1)テーブルは、図6に示すように、スラック表20と、信頼性と予測スラックを記録するFIFO17とを備える。
(2)演算器は、図19及び図46に示すように、信頼性加算器40と、信頼性比較器(図19のアンドゲート31及び図46の比較器94に対応し、以下、信頼性比較器94という。)と、予測スラック加算器50と、予測スラック比較器(図19のアンドゲート35及び図46の予測スラック比較器112に対応し、以下、予測スラック比較器112という。)を備える。
提案機構において、スラック表20は、あるプログラム・カウンタ値(PC)のスラック値と信頼性を保持しており、フェッチ時に参照し、コミット時に更新する。FIFO17は、スラック表20から得た信頼性と予測スラックを命令フェッチ順に保持するFIFOであり、ディスパッチ時に書き込み、コミット時に読み出す。これらの値は、スラック表20の更新データを計算するために用いる。このFIFO17は、ROB16と同一エントリとし、命令をROB16に書き込むと同時に、同一のインデクスを用いて、その命令の信頼性と予測スラックがこのFIFO17に書き込まれ、命令をROB16からコミットすると同時に、同一のインデクスを用いて、その命令の信頼性と予測スラックをFIFO17から読み出してスラック表20に出力する。
演算器は予測スラック及び信頼性の更新のために用いる。信頼性加算器40は、信頼性を増加量Cincだけ増加させるために用いる。信頼性比較器94は、増加させた信頼性がしきい値Cth以上になったかどうかを調べるために用いる。予測スラック加算器50は、予測スラックを増加量Vincだけ増加させるために用いる。予測スラック比較器112は、増加させた予測スラックがVmaxを超えたかどうかを調べるために用いる。予測スラックがその最大値Vmaxを超えていたら、予測スラックはその最大値Vmaxにセットされる。なお、信頼性を減少させるときは、0にリセットするだけなので、信頼性を減算するための演算器、及び、信頼性が最小値Cmin以下になったかどうかを調べるための比較器は必要ない。また、本評価では、Vdec=Vmaxとしており、予測スラックを減少させるときは、0にリセットするだけなので、予測スラックを減算するための演算器、及び、予測スラックがVmin以下になったかどうかを調べるための比較器も必要ない。
増加量Cincと増加量Vincはともに1なので、提案機構の加算器40,50は、信頼性、あるいは、予測スラックだけを入力とし、その入力に1を加えるという非常に単純な操作を行うだけでよい。具体的には、入力の第0ビットから第n−1ビットがすべて1であれば、入力の第nビットを反転したものを、出力の第nビットとし、そうでなければ入力の第nビットをそのまま出力の第nビットとする。従って、従来機構の減算器5とは異なり、非常に簡単に実現できる。
増加量CincとVincが、ともに1であることを利用すれば、提案機構の比較器94,112も、簡単化できる。提案機構の加算器40(又は50)は、信頼性(又は予測スラック)に1を加えるだけである。従って、比較器94,112は、加算器40(又は50)の入力データが、Cth−1(又はVmax)と一致するのであれば、加算器40(又は50)の出力がしきい値Cth以上になる(又は最大値Vmaxを超える)と判断することができる。
従来機構と提案機構を正確に比較するためには、それぞれの機構において、スラック予測精度がほとんど変化せず、アクセス時間と消費電力ができるだけ少なくなるようなテーブル構成(エントリ数、連想度、ラインサイズ、ポート数)を知る必要がある。しかし、従来機構において、テーブル(スラック表20、メモリ定義表3、及びレジスタ定義表2)の構成がスラック予測精度に与える影響は、未だ十分に調査されていない。
そこで、本章では、従来機構と提案機構の精度が同程度になるテーブル構成を用いる。具体的には、スラック表20に関しては、前章の評価で用いた構成(エントリ数8K、連想度2)を用いる。しきい値Cthと最大値Vmaxは、どちらも、前章の評価において用いた値において、提案機構のハードウェア量が最も大きくなる値である、15を仮定する。メモリ定義表3とレジスタ定義表2に関しては、前章で精度を比較するために引用した非特許文献10で仮定されている構成を用いる。具体的には、メモリ定義表3はエントリ数が8K、連想度が4、レジスタ定義表2はエントリ数が64、連想度が64とする。
非特許文献10によれば、定義表3,2はプログラム・カウンタ値(PC)の一部を保持する。また、前章の評価結果からも分かるように、動的実行命令のうち、実スラックが30%以下である命令は約7割存在するため、定義時刻を表すために必要なビット数を少なくできる可能性がある。しかし、非特許文献10において、これらの数値に関する具体的な議論は行われていない。そこで、本章では、スラック予測精度を重視し、定義表3,2にはプログラム・カウンタ値(PC)をすべて保持すると仮定する。また、定義時刻を表すために必要なビット数の削減は行わないと仮定する。従って、定義表3,2の各データ・フィールドは、最悪のケースを想定した設定となる。
上記のテーブル構成は、スラック予測精度を重視した構成であるため、アクセス時間と消費電力が過大になる可能性がある。しかし、精度がほぼ同一になることが判明しているテーブル構成を用いて、アクセス時間と消費電力を比較できるという利点がある。
3.2.ハードウェア量の比較.
ハードウェア量の比較は、必要となるテーブルの保持するメモリ・セル数、及び、演算器の入力ビット数と個数を基にして行う。テーブルにおいて、ハードウェア量の大部分を占めるのは、タグ・アレイとデータ・アレイである。そこで、テーブルのハードウェア量を、タグ・アレイとデータ・アレイの保持するメモリ・セル数によって見積もる。表2に、必要となるテーブルのメモリ・セル数とポート数を示す。表2(a)は従来機構の場合を示し、表2(b)は提案機構の場合を示す。
Figure 2007293814
表2には、まず、各テーブルのエントリ数を示し、次に、1エントリあたりのメモリ・セル数を、タグ・フィールドとデータ・フィールドに分けて示す。エントリ数と、1エントリあたりのメモリ・セル数の積が、テーブルの総メモリ・セル数となる。また、表には、各テーブルのポート数も示す。ポート数は、後ほどアクセス時間と消費電力について評価するために用いる。表2では、スラック表20、メモリ定義表3、レジスタ定義表2のエントリ数をそれぞれEslack、Emdef、Erdefと表し、連想度をそれぞれ、Aslack、Amdef、Ardefと表す。同じ条件で比較するため、スラック表のエントリ数と連想度は、提案機構と従来機構で同一としている。Nfetch、Nissue、Ndcport、Ncommitはそれぞれ、フェッチ幅、発行幅、データキャッシュのポート数、コミット幅を表す。Nfetch、Nissue、Ncommitは同一と仮定する。Erobは、ROBのエントリ数を表す。前章の評価環境より、Nfetch=8、EROB=256とする。
時間Tcsは、コンテキスト・スイッチ間隔をサイクル単位で表した値である。従来機構では、時刻を用いてスラックを計算する。スケジューラによって選択されたプロセスが実行を開始した時刻を0とすると、その時刻は、プロセスがコンテキスト・スイッチによってプロセッサ上から退避されるまでカウントされる。従って、時刻を正しく表すためには、log(Tcs)ビット必要となる。LinuxOSにおいて、コンテキスト・スイッチの間隔はmsecオーダーなので、時間Tcsを1msec程度と仮定する。また、非特許文献9に示された、0.13μmプロセス時のARMコアの動作周波数より、プロセッサの動作周波数を1.2GHzと仮定する。これらより、時刻を表現するにはほぼ20ビット必要となる。そこで、以降は、log(Tcs)=20とする。
従来機構と提案機構のスラック表20を比較すると、従来機構は、データ・フィールドのメモリ・セル数がlog(Cth+1)ビット多くなる。しかし、スラック表20以外にもテーブルは存在するので、スラック表20だけでは全テーブルのハードウェア量の大小を判断できない。
そこで、テーブルの各変数に値を代入して全テーブルのハードウェア量を計算する。提案機構のメモリ・セル数は、スラック表の場合229376、FIFOの場合2048となり、合計すると231424となる。一方、従来機構のメモリ・セル数は、スラック表20の場合196608、メモリ定義表3の場合598016、レジスタ定義表2の場合3840となり、合計すると798464となる。従って、提案機構の方が、メモリ・セル数が少なくなる。
なお、上記の評価において、従来機構の定義表は、各データ・フィールドのサイズが、最悪のケースを想定した設定となっているが、このサイズが半分になったとしても、提案機構のメモリ・セル数の方が少ないという結論は変わらない。ただし、前節で説明した通り、正確な比較を行うためには、十分なスラック予測精度が得られるテーブル構成を知る必要があり、今後の課題である。
次に、演算器のハードウェア量を比較する。表3に、演算器の入力ビット数と個数を示す。表3(a)は従来機構の場合、表3(b)は提案機構の場合である。
Figure 2007293814
入力ビット数は、演算器の各入力のビット数を合計したものである。なお、比較器94,112の個数は、定義時刻のフォワーディングを行うパイプライン段数が1段の場合の値である。段数が増加すれば、それに比例して、比較器94,112の個数も増加するが、フォワーディングを行う必要がなければ、比較器も必要ない。
従来機構と提案機構の演算器を比較する。ここでは、提案機構の方が確実にハードウェア量が少なくなることを示すため、従来機構において、定義時刻のフォワーディングは行う必要がない場合を考える。
issue=Ncommit=8なので、提案機構は、従来機構よりも、演算器の数が24個、多くなってしまうことが分かる。しかし、提案機構の演算器は、上述したように、非常に簡単に実現できるため、単純に演算器の個数だけに着目して、ハードウェア量を比較することはできない。そこで、各演算器の構成について詳しく検討する。まず、従来機構の減算器は、log(Tcs)=20なので、入力が20ビットとなる。基本的な回路構成は、入力が20ビットの加算器とほぼ同様である。この加算器を8倍したものが、従来機構のハードウェア量となる。
次に、提案機構の演算器の構成について詳しく検討する。まず、しきい値Cthと最大値Vmaxを、先ほどと同様、どちらも15と仮定すると、提案機構の各演算器は、入力が4ビットとなる。
図19は本発明の第1の実施形態に係る更新ユニット30の構成を示すブロック図である。ここで、図19は、コミットする命令1つあたりに必要となる演算器(これらで構成される回路を更新ユニット30という。)の回路構成を示す。当該更新ユニット30の回路を8倍したものが、提案機構のハードウェア量となる。図19の到達条件フラグRflagは、ターゲット・スラック到達条件が成立しているときに1となり、そうでないときに0となるフラグである。図19の中央のアンドゲート31,35がそれぞれ信頼性比較器94、予測スラック比較器112を構成し、点線で囲われた各部分が加算器40,50を構成し、その他の素子(オアゲート33,37及びマルチプレクサ34,38,39)が制御用の回路である。ここで、入力ビット数が4ビットの場合、信頼性比較器94及び予測スラック比較器112はそれぞれ、入力値の各ビットを、そのまま、あるいは、反転したものを入力とする、4入力のアンドゲート31、アンドゲート35で実現できる。また、提案機構の各加算器40,50は、2個のアンドゲート(41−42;51−52)、4個のインバータ(43−46;53−56)、3つのマルチプレクサ(47−49;57−59)で実現できる。従って、従来機構で必要となる20ビットの減算器よりも十分少ないハードウェア量で実現できるといえる。
3.3.アクセス時間と消費電力に関する比較.
本節では、テーブルのアクセス時間と、1アクセスあたりの消費エネルギーを求めるために、キャッシュ・シミュレータである公知のCACTI(例えば、非特許文献12参照。)を用いる。CACTIによる評価では、非特許文献9のARMコアのデータを基に、プロセスを0.13μm、電源電圧を1.1Vと仮定する。CACTIではテーブルのラインサイズをバイト単位で入力する必要がある。しかし、従来機構のスラック表は、データ・フィールドが4ビットであるため、ラインサイズが1バイトに満たない。そこで、CACTIで評価する場合に限り、データ・フィールドを8ビットと仮定する。しかし、この仮定によって、従来機構のスラック表の規模だけが2倍になってしまうため、このままでは公平な比較ができない。そこで、CACTIで提案機構を評価する場合、スラック値を保持するテーブルである、スラック表20とFIFO17のデータ・フィールドを、8ビットから、16ビットに増加させる。なお、メモリ定義表3とレジスタ定義表2は、スラック値を保持しないので、データ・フィールドの変更は行わない。
上記の仮定によって、提案機構のスラック表20は、アクセス時間が4.1%、消費エネルギーが23%増加する。このことから、従来機構のスラック表20の評価結果も、同程度の誤差が生じていると考えられる。また、提案機構のFIFO17はアクセス時間が4.2%減少し、消費エネルギーが116%増加する。そこで、比較を行う際には、この誤差の影響を考慮する。なお、FIF27Oのアクセス時間が減少する理由は、CACTIが、テーブル構成によって、データ・アレイの分割方法を変えることにある。
まず、提案機構と従来機構のアクセス時間を比較する。既に示したように、スラック予測機構で使用される演算器の規模は、ALU(Arithmetic Logical Unit)よりも小さい。一方、テーブルに関しては、プロセッサ中で用いられるデータキャッシュと同程度(あるいはそれ以上)の規模のものが存在する。そのため、提案機構と従来機構のアクセス時間は、テーブルのアクセス時間で決まると考えることができる。そこで、テーブルのアクセス時間を比較する。
表4にCACTIで測定した、テーブルのアクセス時間を示す。表4(a)が従来機構の場合、表4(b)は提案機構の場合である。
Figure 2007293814
表4より、スラック表20は、メモリ定義表3に比べ、ハードウェア量が少ないにも関わらず、アクセス時間が非常に長くなっていることが分かる。この理由は、テーブルのアクセス時間が、ハードウェア量ではなく、テーブル構成(エントリ数、連想度、ラインサイズ、ポート数など)で決まることにある。
また、動作周波数は1.2GHz(サイクル時間0.83nsec)を仮定しているので、スラック表20、メモリ定義表3、及びレジスタ定義表2に対して高速にアクセスするためには、それぞれを、6段、3段、2段程度にパイプライン化する必要があることが分かる。スラック表20のアクセス時間の測定誤差を考慮したとしても、この段数が減ることはない。しかし、これらのテーブル3,2を6段にパイプライン化したとしても、フェッチした命令の予測スラックを得るために要するサイクル数が非常に長く、それを利用することは困難である。また、メモリ定義表3、及びレジスタ定義表2をパイプライン化すると、定義時刻のフォワーディングを行うために、消費電力が増加してしまうという問題がある。しかし、本節では、これらのテーブル3,2を上記のようにパイプライン化したとして議論をすすめ、これらの問題については、次節で議論する。
さらに、表4より、どちらの機構においてもスラック表20のアクセス時間が最も長いことが分かる。従って、アクセス時間は、提案機構の方が長いことが分かる。スラック表20のアクセス時間には測定誤差があるが、どちらの機構においてもアクセス時間は同程度増加すると考えられるので、この結論に影響はない。
次に、消費電力の比較を行う。ただし、前章の評価結果より、従来機構と提案機構の実行時間はほぼ同一となるので、消費エネルギーを比較すればよい。回路の全消費エネルギーは、1回の動作あたりに必要な消費エネルギーと、動作回数の積で表される。
各回路の動作回数は、前章の評価環境を用いて計測する。前章で用いたシミュレータに従来機構は組み込まれていないので、従来機構の各回路の動作回数は、プロセッサ10の動作から推測する。具体的には、スラック表20の場合、フェッチ時に参照し、命令実行時に更新するので、フェッチした命令数と機能ユニットで実行した命令数の和を動作回数とする。メモリ定義表3の場合、ロード命令の実行時に参照し、ストア命令の実行時に更新するので、ロード/ストア命令の実行回数を、動作回数とする。レジスタ定義表2の場合、実行する命令のソース・レジスタに対応する物理レジスタ番号で参照し、デスティネーション・レジスタに対応する物理レジスタ番号で更新するので、機能ユニット15で実行した命令のソース・レジスタ数とデスティネーション・レジスタ数の和を、動作回数とする。減算器5の場合、時刻からスラックを計算する可能性のある命令、つまり、機能ユニット15で実行した、デスティネーション・レジスタを持つ命令とストア命令の数の和を、動作回数とする。従来機構の比較器については、パイプライン化されたメモリ定義表3及びレジスタ定義表2が存在すると仮定して、各サイクルにおいて、どの命令がどのテーブルの参照/更新を行っているのかをシミュレーションする。そして、同じテーブルに対して参照/更新を行う命令間で、定義時刻のフォワーディングのために必要となる、メモリ・アドレスの比較、あるいは、物理レジスタ番号の比較を行い、その比較回数をそれぞれ、アドレス用比較器、レジスタ番号用比較器の動作回数とする。サイクル時間は0.83nsecを仮定しているので、表4より、メモリ定義表3とレジスタ定義表2はそれぞれ、3段、2段にパイプライン化すると仮定する。
1動作あたりの消費エネルギーは、テーブルの場合CACTIを用いて測定する。一方、演算器の場合、前節で示したハードウェア量を基に、どちらの消費エネルギーの方が大きくなるのかを検討する。
表5に、各回路の動作回数のベンチマーク平均と、テーブルの1動作あたりの消費エネルギーを示す。表5(a)は従来機構の場合を示し、表5(b)は提案機構の場合を示す。
Figure 2007293814
まず、演算器の消費エネルギーを比較する。ここで、演算器の1動作あたりの消費エネルギーは、1回の動作で充放電する負荷容量の平均と、電源電圧の2乗の積で表される。電源電圧は一定である。一方、充放電する負荷容量は、動作時にスイッチしたノードの全容量で表される。この値を正確に求めるためには、演算器を設計し、与えられた入力に対してどのノードがスイッチしたかを調べる必要があり、容易に評価することができない。そこで本節では、比較を簡単に行うために、ハードウェア量が多いほど充放電する負荷容量も増えると仮定する。そして、前節で示したハードウェア量を基に、演算器の1動作あたりの消費エネルギーを比較する。
前節より、提案機構の演算器(更新ユニット30)のハードウェア量は、従来機構の減算器よりも十分少ない。そのため、提案機構の演算器を1回動作させるために必要な消費エネルギーも少ないと判定することができる。また、表5より、演算器の動作回数は提案機構の方が少ない。これらより、提案機構の演算器の全消費エネルギーは、従来機構の減算器よりも少なくなると考えられる。
さらに、従来機構では、定義時刻のフォワーディングを行う必要がある。具体的には、配線を用いて、比較値(アドレス又はレジスタ番号)と定義時刻をブロードキャストし、比較器を用いて、アドレス比較、又はレジスタ番号比較を行い、比較結果が一致すれば、マルチプレクサ4を介して、対応する定義時刻を減算器5に供給するという操作を行う。そのため、1動作あたりの消費エネルギーは無視できないレベルになると考えられる。また、表5より、アドレスの比較回数とレジスタ番号の比較回数はそれぞれ、27M、488Mと多い。
これらより、提案機構の演算器の全消費エネルギーは、従来機構の演算器(減算器、比較器、及び、ブロードキャスト用の配線)の全消費エネルギーよりも、かなり少なくなると考えることができる。
次に、テーブルの消費エネルギーを比較する。役割がほぼ同じであるスラック表20において、1動作あたりの消費エネルギーは、従来機構の方が少なく、動作回数は、提案機構の方が少ないが、スラック表20の全消費エネルギーは、従来機構の方が少なくなる。しかし、テーブル全体の消費エネルギーを合計すると、従来機構の場合1.76J、提案機構の場合1.62Jとなり、提案機構の方が少なくなることが分かる。
ここで、CACTIの測定誤差の影響について考える。スラック表20の消費エネルギーには測定誤差があるが、どちらの機構においても消費エネルギーは同程度増加すると考えられるので、スラック表20の比較結果に影響はないといえる。また、測定誤差によってFIFOの消費エネルギーはより大きく見積もられるが、メモリ定義表3とレジスタ定義表2の消費エネルギーに測定誤差は生じない。これらより、テーブル全体の消費エネルギーに与える影響を考えると、発生する測定誤差は、提案機構に対してより不利に働く。従って、提案機構の消費エネルギーの方が小さいという結論は変わらないといえる。
以上より、消費エネルギーは、演算器とテーブル、いずれにおいても、従来機構の方が大きくなると考えられる。
従来機構のスラック表20は、提案機構よりも消費エネルギーが小さい。そのため、スラック予測精度を低下させることなく、メモリ定義表3とレジスタ定義表2の消費エネルギーを削減することができれば、全テーブルの消費エネルギーを提案機構よりも小さくできる可能性がある。この目的を達成するアプローチとして、回路中で用いられるトランジスタのサイズを小さくし、充放電する負荷容量を減らすという方法が考えられる。この方法では、テーブル構成を変えなくてもよいため、スラック予測精度を低下させることなく、消費エネルギーを削減できる。
しかし、このアプローチでは、トランジスタのサイズを小さくするので、メモリ定義表3とレジスタ定義表2のアクセス時間が長くなってしまう。その結果、これらのテーブルは、パイプライン段数が増加し、定義時刻のフォワーディングに要する消費エネルギーが増加してしまう。このように、高速アクセスに必要となる、定義時刻のフォワーディングは、演算器の消費エネルギーを増大させるだけでなく、上記アプローチによる消費エネルギーの削減も妨げていることが分かる。
3.4.参照の局所性を利用したテーブル構成の最適化.
前節で用いたテーブル構成は、アクセス時間が非常に長くなるため、予測スラックの利用を困難にするという問題と、定義時刻のフォワーディングに関する消費エネルギーを増加させるという問題を引き起こす。これらの問題を解決するためには、テーブル構成(エントリ数、連想度、ラインサイズ、ポート数)を変更する必要がある。しかし、3.1.節で述べた通り、従来機構において、テーブル構成がスラック予測精度に与える影響は明らかにされていない。そのため、テーブル構成を単純に変化させて、アクセス時間や消費電力を測定することはあまり意味が無い。
そこで、本節では、前節で用いたテーブル構成に対して、スラック予測精度に与える影響が少ないと考えられる変更のみを行い、アクセス時間と消費電力がどのように改善されるのかを評価する。なお、提案機構のFIFO17は、他のテーブルよりもアクセス時間が十分に短いため、構成は変更しない。
この目的のために、本発明者は、各テーブルのアクセス・パターンに着目する。まず、スラック表20について、データの参照時と更新時のパターンに分けて考える。スラック表20の参照では、フェッチする命令のプログラム・カウンタ値(PC)をインデクスとして用いる。そのため、命令キャッシュと同様、インデクスとして用いるプログラム・カウンタ値(PC)は、taken(テイクン:「分岐」)と予測した分岐に到達するまで連続しており、参照の局所性が非常に高い。
一方、スラック表20の更新では、従来機構の場合、機能ユニット15で実行した命令のプログラム・カウンタ値(PC)をインデクスとして用いる。従って、インデクスとして用いるプログラム・カウンタ値(PC)は、アウト・オブ・オーダー実行によって不連続になるものの、順番が入れ替わる範囲はプロセッサ10内の命令に限られるので、依然として参照の局所性は高いといえる。また、提案機構の場合、ROB16からコミットした命令のプログラム・カウンタ値(PC)をインデクスとして用いる。従って、インデクスとして用いるプログラム・カウンタ値(PC)は、taken分岐に到達するまで連続しており、更新の局所性は非常に高い。
以上より、スラック表20においては、スラック予測精度にほとんど影響を与えることなく、ラインサイズを増やすことができると考えられる。ただし、キャッシュと同様、ラインサイズを増やしすぎると、ラインの利用効率が下がり、テーブルのミス率が増加するので、そのことを考慮して、ラインサイズを決定する必要がある。
さらに、インデクスとして用いるプログラム・カウンタ値(PC)が連続していることを利用し、ライン単位で参照/更新を行うようにすれば、リード・ポートとライト・ポートの削減ができると考えられる。
ここで、スラック表20のラインサイズを増やし、1ライン上に2命令分のスラック値を保持した場合、ライン単位で参照/更新を行うと、リード・ポートとライト・ポートがどれだけ削減できるかを考える。本節で想定しているプロセッサ10では、Nfetch=8なので、ライン単位で参照/更新を行うのであれば、ポート数は10本(リード・ポート5本、ライト・ポート5本)まで削減できる。それ以上ポートが存在しても、使用することはできない。また、参照/更新の対象となるスラック値は、必ずしもラインの先頭から順番に並んでいる訳ではないので、ポート数をさらに8本まで減らと、参照/更新に失敗する場合が発生してしまう。これらより、ラインサイズが決まれば、削減できるポート数は一意に決まることが分かる。
同様にして、さらにラインサイズを増加させた場合について考えると、1ライン上に4命令分、8命令分のスラック値を保持した場合、ポート数はそれぞれ、6本、4本となることが分かる。ただし、それを超えてラインサイズを増やしても、参照/更新の対象となるスラック値は2つのラインに分かれて存在する可能性があるため、ポート数を4本よりも小さくすることはできない。なお、従来機構の場合、更新時にインデクスとして用いるPCは連続していないので、ライン単位で更新を行ってもライト・ポートの削減はできない。しかし、更新データをバッファに蓄え、そこからフェッチ順に更新して行くという変更を加えれば、比較的容易に更新データの整列ができると考えられる。そこで本節では、従来機構においても、ライト・ポートの削減は可能であると仮定する。
図20は従来技術に係る従来機構のシミュレーション結果であって、ラインサイズに対するスラック長のアクセス時間を示すグラフである。図21は図19の更新ユニット30を備えた提案機構のシミュレーション結果であって、ラインサイズに対するスラック長のアクセス時間を示すグラフである。すなわち、図20及び図21にそれぞれ、従来機構と提案機構において、スラック表20のラインサイズを、2倍(1≦n≦7)に増加させて、アクセス時間を評価した結果を示す。評価にはCACTIを用いる。前節で説明したように、従来機構のスラック表20は、データ・フィールドが4ビットであるため、ラインサイズを増加させない場合、CACTIで評価できない。しかし、上記のようにラインサイズを増加させれば、ラインサイズはバイト単位で増加して行くため、CACTIで評価できるようになる。そこで、本節では、前節とは異なり、データ・フィールドのビット数を変更せずに評価を行う。これにより、前節よりも正確に従来機構と提案機構の比較ができるようになる。
図20及び図21の縦軸は、アクセス時間を示し、その横軸はラインサイズを示す。折れ線グラフは、上側がポート数を削減しない場合、下側がポート数を削減する場合である。図20及び図21から分かるように、ポート数を減らすとアクセス時間が短くなることが分かる。一方、アクセス時間は、ラインサイズの増加にともない最初は減少するが、しばらくすると、逆に増加して行くという傾向にあることが分かる。従って、アクセス時間を減らすのであれば、ポート数を減らし、1ライン上に8命令分か16命令分のスラック値を保持すればよいことが分かる。しかし、1ライン上に、16命令分以上のスラック値を保持しても、これらがすべて同時に必要になることはなく、ラインの利用効率が下がる。そこで、本節では、スラック表20のラインサイズを、8命令分のスラック値を保持できるサイズに変更し、ポート数を削減する。具体的には、従来機構の場合4B(Bはバイトであり、以下同様である。)、提案機構の場合8Bとする。この時、いずれの機構においても、ポート数は4本に削減できる。
次に、メモリ定義表3について考える。メモリ定義表3は、ロード・アドレスとストア・アドレスをインデクスとしてそれぞれ、参照して更新を行う。従って、データキャッシュと同様、参照の局所性が高いといえる。そのため、スラック予測精度にほとんど影響を与えることなく、ラインサイズを増やすことができると考えられる。ただし、先程と同様、ラインサイズを増やしすぎないようにする必要がある。
図22は図19の更新ユニット30を備えた提案機構のシミュレーション結果であって、ラインサイズに対するメモリ定義表のアクセス時間を示すグラフである。すなわち、図22に、メモリ定義表3のラインサイズを変化させて、アクセス時間を評価した結果を示す。図22の縦軸はアクセス時間を示し、図22の横軸はラインサイズを示す。図22から分かるように、アクセス時間は、ラインサイズの増加に伴い減少するが、28Bの時点で減少しなくなり、112B以上では増加してしまうことが分かる。従って、アクセス時間を減らすのであれば、56Bを超えないようにラインサイズを増やせばよいことが分かる。
しかし、ラインサイズを増やしすぎると、ラインの利用効率が下がり、テーブルのミス率が増加してしまう可能性がある。非特許文献7によれば、容量が1K〜256KBのデータキャッシュにおいて、ラインサイズを16Bから256Bまで増加させていった場合、32Bまでであれば、どの容量においても、キャッシュ・ミス率が低下して行くことが示されている。この場合、最小のブロックは4Bなので、ラインサイズが32Bの場合、1ライン上に8ブロック分のデータを保持することを意味する。ベンチマーク等の評価環境が異なるが、本節では、この結果を参考に、テーブルのミス率を増加させないラインサイズの範囲を仮定する。具体的には、メモリ定義表3では、最小のブロックは7B(PC+定義時刻)なので、56B以下のラインサイズであれば、テーブルのミス率は増加しないと仮定する。以上より、本節では、メモリ定義表3のラインサイズを56Bに変更する。
最後に、レジスタ定義表2について考える。レジスタ定義表2は、命令に割り当てられた物理レジスタ番号をインデクスとして、命令の実行直前に参照し更新する。従って、スラック表20や、メモリ定義表3のような参照の局所性はない。そのため、本節では、レジスタ定義表2の構成は変更しない。
表6に、参照の局所性に着目して、テーブル構成を最適化した場合の、アクセス時間と1動作あたりの消費エネルギーを示す。なお、本節では、CACTIで評価する際に、前節で行ったようなデータ・フィールドのビット数の変更を行う必要がない。そこで、そのような変更を行わなかった場合のFIFO17についても、アクセス時間と1動作あたりの消費エネルギーを示す。
Figure 2007293814
表6より、従来機構と提案機構のスラック表は、どちらも、アクセス時間が大幅に減少し、仮定しているサイクル時間0.83nsecと非常に近い値となることが分かる。これにより、パイプライン段数は、従来機構の場合1段に、提案機構の場合2段に減少するので、フェッチした命令のスラック値を利用することは十分可能になる。また、メモリ定義表のアクセス時間が減少し、パイプライン段数が3段から2段になる。これにより、アドレス用比較器の数が段数分減少し、この比較器を動作させる回数が27Mから13Mに減少する。しかし、依然として定義時刻のフォワーディングは必要であり、演算器の全消費エネルギーは、従来機構の方が大きくなる。また、表6より、スラック表20とメモリ定義表3のどちらにおいても、1動作あたりの消費エネルギーが削減されていることが分かる。
次に、スラック予測機構全体のアクセス時間と消費エネルギーについて考える。表4及び表6より、スラック表20のアクセス時間が減少したことによって、従来機構のアクセス時間の方が、提案機構よりも長くなったことが分かる。
表5及び表6を用いて、テーブル構成を最適化した後の消費エネルギーを計算する。なお、スラック表20には、ライン単位で参照/更新を行い、ポート数を4分の1にするという変更が加えられているので、スラック表の動作回数は、表5に示された値の4分の1になると仮定して計算を行う。計算の結果、テーブル全体の消費エネルギーは、従来機構の場合0.37J、提案機構の場合0.06Jとなり、どちらも大幅に減少していることが分かる。なお、前節と同様、スラック表20の消費エネルギーは従来機構の方が小さくなり、テーブル全体の消費エネルギーは提案機構の方が小さくなる。
以上より、参照の局所性を利用して、テーブル構成を最適化することで、スラック表20のアクセス時間に関する問題は解決できることが分かる。また、スラック予測機構の消費エネルギーを大幅に削減できることが分かる。
4.機能ユニットの消費電力の削減.
ローカル・スラック予測の応用例として、予測スラックが1以上ある命令を、より低速でより消費電力の低い機能ユニットで実行することで、性能を大きく低下させることなく機能ユニットの低消費電力化をはかる研究が行われている(例えば、非特許文献6参照。)。そこで、本実施形態においても、上記の低消費電力化を応用例として取り上げ、提案手法の効果を評価する。
4.1.評価環境.
2章で述べた評価環境との違いについて述べる。図23は本発明の第1の実施形態の第1の変形例に係る、スラック表20を備えたプロセッサ10Aの構成を示すブロック図である。
整数演算用の機能ユニット(iALU)として、高速なものと低速なものを2種類用意する。図23において、15aは高速で動作する機能ユニットであり、15bは低速で動作する機能ユニットである。非特許文献9によると、0.13μmプロセスにおけるARMコアは、動作周波数が1.2GHz、600MHzの場合、電源電圧がそれぞれ、1.1V、0.7Vであることが示されている。これを基に、プロセッサの動作周波数を1.2GHz(サイクル時間0.83nsec)とし、高速なiALUと低速なiALUは、実行レイテンシがそれぞれ1サイクル、2サイクル、電源電圧がそれぞれ1.1V、0.7Vとする。評価では、高速なiALUをn個持つモデルを、(nf,(6−n)s)モデルと呼ぶこととする。
提案手法を用いてローカル・スラックを予測する。従来手法に近い条件で評価を行うため、予測スラックの最大値Vmax=1、しきい値Cth=15とし、スラック表20のパラメータをすべて固定する。命令スケジューラが、オペランドの揃った命令から、iALUで実行する命令を選択した後、選択した命令において、予測スラックが1である命令を低速なiALUに、予測スラックが0である命令を高速なiALUに割り当てる。ただし、低速なiALUに空きがなければ高速なiALUに、高速なiALUに空きがなければ低速なiALUに命令を割り当てる。予測スラックは、命令をiALUに割り当てるときにのみ利用し、その他の処理では利用しない。例えば、命令スケジューラが、iALUで実行する命令を選択する際に、予測スラックを利用することはない。また、命令をiALUに割り当てる順番は、命令スケジューラが命令を選択した順番に従っており、予測スラックを利用することはない。
上記の手法では、低速なiALUで命令を実行することで、iALUの消費エネルギーを削減する。しかし、予測スラックが実スラックを上回っている場合は、プロセッサ性能に悪影響を与えてしまう。プロセッサ10において、性能は非常に重要な要素である。そこで、消費エネルギー削減効果と、プロセッサ性能への悪影響を同時に考慮できる指標として、消費エネルギーと、プロセッサの実行時間の積(EDP:Energy Delay Product)を測定する。
プロセッサ10の実行時間は、実行サイクル数とサイクル時間(動作周波数の逆数)の積で表すことができる。一方、機能ユニット15a,15bの消費エネルギーは、iALUで命令を実行した回数と、1実行あたりの消費エネルギーの積で表すことができる。1実行あたりの消費エネルギーは、1回の実行で充放電する負荷容量の平均と、電源電圧の2乗の積で表すことができる。従って、EDPは、次式(1)で表される。
[数1]
EDP=(C・V ・N+C・V ・N)・N/f (1)
ここで、C、Cはそれぞれ、高速なiALU、低速なiALUにおいて、1実行あたりに充放電される負荷容量である。V、Vはそれぞれ、高速なiALU、低速なiALUの電源電圧である。N、Nはそれぞれ、高速なiALU、低速なiALUにおいて命令を実行した回数であり、Ncは実行サイクル数である。fは動作周波数である。
パラメータVf、Vs、fは先程仮定した値を用いる。パラメータN、N、Nは、シミュレーションによって求める。高速なiALUと低速なiALUは、動作周波数と電源電圧が異なるが、実行できる命令の種類は同じである。そこで本節では、ある動的命令をどちらのiALUで実行したとしても、その命令の実行を完了するまでに充放電する負荷容量(動作時にスイッチするノードの全容量)は同じであると仮定し、C=Cとする。
なお、厳密には、回路中でスイッチするノードは、演算の種類(加算、シフト等)や入力値に依存するため、これらが異なると、1回の実行で充放電する負荷容量も変わる。この値を正確に求めるためには、演算器を設計し、与えられた入力に対してどのノードがスイッチしたかを調べる必要があり、容易ではない。そのため、本節の評価では、演算の種類や入力値の違いで発生する負荷容量の変化は考慮しない。
4.2.評価結果
図24は図23のプロセッサ10Aの実施例のシミュレーション結果であって、各プログラムに対する正規化されたIPCを示すグラフである。図25は図23のプロセッサ10Aの実施例のシミュレーション結果であって、各プログラムに対する正規化されたEDP(Energy Delay Product:消費エネルギーと、プロセッサ10Aの実行時間の積)を示すグラフである。すなわち、図24及び図25にそれぞれ、各ベンチマークのIPCとEDPを示す。6本で組になっている棒グラフは、左から順に、(5f/1s)、(4f/2s)、(3f/3s)、(2f/4s)、(1f/5s)、(0f/6s)モデルの場合である。図24の縦軸は(6f/0s)モデル(すべてのiALUが高速なモデル)のIPCで正規化したIPCを示し、図25の縦軸は、(6f/0s)モデルのEDPで正規化したEDPを示す。
図24及び図25より、どのベンチマークにおいても、ほぼ同様の傾向を示すことが分かる。高速なiALUの数を減少させると、ほとんどの場合、EDPは単調に減少して行く。しかし、提案手法は予測スラックに基づいて命令をスケジューリングするため、IPCの減少を抑制できている。(0f/6s)モデル(すべてのiALUが低速なモデル)は、平均でIPCの低下が20.2%、EDPの削減率が41.6%となる。これに対し、(1f/5s)モデルは、EDPの削減率が34.5%もあるにも関わらず、IPCの低下を10.5%まで改善することができる。また、(3f/3s)モデルは、IPCの低下がわずか3.8%であるにも関わらず、EDPの削減率が20.3%にもなる。
非特許文献6では、本実施形態とはベンチマーク・プログラムやプロセッサ構成が異なるものの、スラック予測機構として従来手法を用いて、(3f/3s)モデルを評価している。その結果、4.5%のIPCの低下で、19%のEDPを削減できることを示している。これより、提案手法は、従来手法と同様の結果を示すことが分かる。
以上の評価では、機能ユニットの消費電力にのみ着目している。スラック表の消費電力も考慮すると、プロセッサ全体の消費電力は低下しない可能性が十分あり、今後の課題である。しかし、現状においても、機能ユニットの消費電力を抑えることで、チップ上のホットスポットを削減できるという効果が得られると考える。
4.3.予測スラックの最大値Vmaxを2以上とした場合の応用例.
前節で評価した応用例では、各命令を実行する際の緊急度を3種類以上に分ける事ができるというスラックの利点が活かされていない。そこで、提案するスラック予測機構において、予測スラックの最大値Vmaxを2以上とした場合の応用例を示す。
応用例として、機能ユニットの低消費電力化を行ったプロセッサの性能低下を抑制することが考えられる。例えば、予測スラックの最大値Vmax=2とした(3f/3s)モデルにおいて、命令スケジューラが選択した命令を以下のようにiALUに割り当てる。まず、予測スラックが0である命令を高速なiALUに割り当てる。高速なiALUに空きがない場合は、低速なiALUに割り当てる。次に、予測スラックが2である命令を低速なiALUに割り当てる。低速なiALUに空きがない場合は、高速なiALUに割り当てる。最後に、予測スラックが1である命令を低速なiALUに割り当てる。低速なiALUに空きがない場合は、高速なiALUに割り当てる。これにより、予測スラックが1、あるいは、2である命令の総数が、低速なiALUの数を上回った場合に、緊急度がより高い(予測スラックが1である)命令を優先的に高速なiALUに割り当てることができる。
上記以外にも、予測スラックを基に命令スケジューリングを行い、性能向上をはかるという応用例が考えられる。例えば、Vmax=2とした(3f/3s)モデルにおいて、命令スケジューラに次の修正を加える。すなわち、オペランドの揃った命令から、予測スラックの小さい順に命令を選択し、選択しなかった命令の予測スラックが1か2であれば、それを1だけ減らす。なお、選択されなかった命令の予測スラックを1だけ減らすのは、選択されないことで、その命令の実行開始が1サイクル遅れるからである。この修正により、予測スラックがnである命令の代わりに、予測スラックがn+1以上である命令を選択してしまうということがなくなる。その結果、緊急度に応じた順番で、命令を実行できるようになるため、低消費電力化による性能低下を緩和できる可能性がある。
5.まとめ.
今回、本発明者は発見的手法によってスラックを予測する機構を提案した。命令の振る舞いから間接的にスラックを予測するため、従来手法に対しより単純なハードウェアで実現できる。評価の結果、スラック表の信頼性のしきい値が15の場合、わずか2.5%のIPC低下で、31.6%の命令について実行レイテンシを1サイクル増加させることができると分かった。また、機能ユニットの低消費電力化を行った場合、わずか3.8%のIPC低下で、EDPを20.3%削減できることが分かった。
6.別の実施例のシミュレーション結果
さらに、別の実施例のシミュレーション結果について以下に説明する。
図26は図23のプロセッサ10Aの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたIPCを示すグラフである。図27は図23のプロセッサ10Aの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたEDP(Energy Delay Product:消費エネルギーと、プロセッサの実行時間の積)を示すグラフである。すなわち、図26及び図27に、各モデルでの各ベンチマークでの正規化IPC及び正規化EDPの測定結果を示す。図26の縦軸は、(6f,0s)モデル(全iALUが高速なモデル)でのIPCを基準(100)としたIPCの比率を、図27の縦軸は、同じく(6f,0s)モデル(全iALUが高速なモデル)でのEDPを基準(100)としたEDPの比率をそれぞれ示している。また、図26及び図27における各ベンチマーク・プログラムにおける6本組の縦棒は、図中左側から(5f,1s),(4f,2s),(3f,3s),(2f,4s),(1f,5s),(0f,6s)の各モデルでの測定結果をそれぞれ表すものとなっている。
図26及び図27に示されるように、いずれのベンチマーク・プログラムでも、同様の傾向が見られる。すなわち、高速なiALUの数を減少させると、ほとんどの場合、EDPは単調に減少してゆくようになる。ただし、ローカル・スラックの予測結果に基づいて命令の振り分けを行ったことで、高速なiALUの数の減少に伴うIPCの低下は好適に抑制されている。例えば(0f,6s)モデル、すなわち全iALUが低速なモデルでは、ベンチマーク平均のIPCの低下が20.2%、EDPの削減率は41.6%となっている。これに対して(1f,6s)モデルでは、EDPの削減率が34.5%もあるにも拘わらず、IPCの低下は10.5%に留まっている。さらに(3f,3s)モデルでは、IPCの低下をわずか3.8%としながらも、EDPの削減率は20.3%にもなる。
なお、上記評価では、機能ユニット15の消費電力のみに着目しており、スラック表20の動作に要する消費電力については全く考慮していないため、プロセッサ全体の消費電力の削減効果は上記の結果よりは低くなる。ただし、スラック表20の動作に要する消費電力を十分に低く抑えることさえできれば、プロセッサ全体の消費電力の削減にも十分な効果を期待することができる。最も、機能ユニット15はチップ上における代表的なホットスポットの一つであり、たとえプロセッサ全体の消費電力の削減が適わずとも、機能ユニットの消費電力が抑えられれば、チップ上のホットスポットの分散させることができるという効果は得ることができる。
なお、本実施形態のローカル・スラック予測機構では、フェッチ・ユニット11は、上記実行レイテンシ設定手段としての機能も兼ねている。またスラック表20(厳密にはそのエントリの更新に係る動作回路)が、上記推定手段及び予測スラック更新手段としての機能も兼ね備えるようにしている。
以上説明した本実施形態のローカル・スラックの予測方法、及びローカル・スラック予測機構によれば、次の効果を奏することができる。
(1)予測スラックを計算で直接的に求めるのではなく、命令の実行時の振る舞いを観測しながら、ターゲット・スラックに到達するまで予測スラックを徐々に増加させることで求めているため、予測スラックの直接演算に要する複雑な機構は不要であり、より簡易な構成でローカル・スラックの予測を行うことができる。
(2)プロセッサが元より備える検出機構で検出可能な上記条件(A)〜(D)の命令実行時の振る舞いをローカル・スラック到達条件としたため、ローカル・スラック予測のために格別な検出機構を追加設置せずとも、予測スラックのターゲット・スラックへの到達を確認することができる。
(3)ターゲット・スラック到達条件の成立をもって、予測スラックを減少させるようにしているため、予測スラックの過剰評価による後続命令の実行遅延の発生を好適に抑制することができる。
(4)信頼性カウンタを設置し、予測スラックの増加は慎重に、減少は迅速に行うようにしているため、ターゲット・スラックが頻繁に増減を繰り返す場合にも、予測スラックの過剰評価による後続命令の実行遅延が発生する頻度を低く抑えることができる。
7.スラック表のインデクス手法の拡張
次いで、上記ローカル・スラックの予測方法、及び予測機構の更なる機能の拡張について説明する。プログラム内の分岐命令の振る舞いは多くの場合、その分岐を実行するまでに、どのような関数や命令を実行してきたか(以下、制御フローという。)に依存する。この性質を利用して、分岐命令の結果をより高い精度で予測する手法が提案されている。従来、こうした分岐予測手法は、命令の投機実行の精度向上に利用されているが、ローカル・スラックの予測においても、同様の原理を導入することで、予測精度の更なる向上を期待できる。以下、制御フローを考慮して、スラック予測をさらに精度良く行う手法について説明する。
プログラムは、分岐命令を用いて、どのような関数や命令を実行するのかを決定しているため、プログラム中の分岐条件に着目することで制御フローを単純化することが可能である。具体的には、分岐条件が成立したなら「1」、成立しなかったら「0」として、プログラム中の分岐条件の成立、不成立の履歴(分岐履歴)を記録する。例えば分岐条件がフェッチ順に、成立(1)→成立(1)→不成立(0)→成立(1)であったときの分岐履歴は、新しいもの程下位に記録した場合に「1101」と表される。分岐履歴をスラック予測に利用するために、分岐履歴とその命令のPCとからスラック表へのインデクスを生成する。このようにすれば、プログラム・カウンタ値(PC)と制御フローの双方を考慮して、スラックを予測することができるようになる。例えば、プログラム・カウンタ値(PC)が同じでも、制御フローが異なれば、スラック表の別々のエントリを使用するので、制御フローに応じた予測ができるようになる。
図28は本発明の第1の実施形態の第2の変形例に係る、スラック表20及び2個のインデクス生成回路22A,22Bを備えたプロセッサ10の構成を示すブロック図である。即ち、図28に、制御フローを考慮したスラック予測を行うローカル・スラック予測機構のハードウェア構成の一例を示す。この構成では、図6に例示のものに加え、さらに分岐履歴レジスタ21A、分岐履歴レジスタ21B、及び2つのインデクス生成回路22A,22Bが新たに追加されている。分岐履歴レジスタ21A及び分岐履歴レジスタ21Bは分岐履歴を記録するレジスタである。
また、インデクス生成回路22A,22Bは、入力の違いを除いて同一の回路構成とされている。命令のフェッチ時には、分岐履歴レジスタ21Aからの分岐履歴レジスタ値と、その命令のプログラム・カウンタ値(PC)とを入力として、インデクス生成回路22Aがスラック表20へのインデクスを生成し、スラック表20の参照を行う。一方、命令のコミット時には、分岐履歴レジスタ21Bからの分岐履歴レジスタ値と、その命令のプログラム・カウンタ値(PC)とを入力として、インデクス生成回路22Bがスラック表20へのインデクスを生成し、スラック表20のエントリの更新を行う。以下、これら分岐履歴レジスタ21A,21B及びインデクス生成回路22A,22Bについてさらに詳細に説明する。
まず、分岐履歴レジスタ21A,21Bの分岐履歴の更新動作について説明する。分岐履歴レジスタ21Aは、プロセッサの分岐予測結果に基づき分岐履歴を記録する。具体的な更新動作は、分岐命令がフェッチされると分岐履歴レジスタ21Aの保持する値を1ビット左にシフトするとともに、フェッチ・ユニット11においてその分岐命令の分岐条件が成立と予測されていれば「1」を、不成立と予測されていれば「0」を、分岐履歴レジスタ21Aの最下位ビットに書き込む、という手順で行われる。
一方、分岐履歴レジスタ21Bは、プロセッサの分岐実行結果をもとにして、分岐履歴を記録する。具体的な更新動作は、分岐命令がコミットされると、分岐履歴レジスタ21Bの保持する値を1ビット左にシフトし、その分岐命令の分岐条件が成立したならば「1」を、不成立ならば「0」を、分岐履歴レジスタ21Bの最下位ビットに書き込む、という手順で行われる。
このように、分岐履歴の取り方が2通り存在する理由は、スラックの参照をフェッチ時に行い、スラック表の更新をコミット時に行うという、両分岐履歴レジスタ21A、21Bの分岐履歴を利用する時期の違いにある。フェッチ時には、分岐命令は未だ実行されておらず、プロセッサは、分岐条件が成立するかしないかを予測して、命令をメモリから読み出している。そのため、フェッチ時に使用される分岐履歴レジスタ21Aには、分岐予測に基づいて分岐履歴を記録して行くしかない。一方、コミット時には、分岐命令は既に実行されており、実行結果に基づいて分岐の履歴を記録することができる。
次に、図29乃至図31を参照して、インデクス生成回路22A,22Bによるインデクス生成態様の詳細を説明する。
図29は第1の実施形態に係るスラック予測機構において、制御フローを考慮せずにスラック予測を行うときの動作例を示す図である。すなわち、図29は上記実施形態でのインデクス生成、すなわち命令のPCのみを使用したインデクス生成手法を示している。この場合、プログラム・カウンタ値(PC)の一部のビットを切り出して、それをスラック表20へのインデクスとして使用するようにしている。
図30は図28のスラック予測機構において、制御フローを考慮してスラック予測を行うときの第1の動作例を示す図である。図31は図28のスラック予測機構において、制御フローを考慮してスラック予測を行うときの第2の動作例を示す図である。すなわち、図30は、分岐履歴とプログラム・カウンタ値(PC)とを使用したインデクス生成の一例を示し、図31は同じく分岐履歴とプログラム・カウンタ値(PC)とを使用したインデクス生成のもう一つの例をそれぞれ示す。なお、実際のプロセッサ10への搭載に際しては、双方のインデクス生成回路22A,22Bで共通のインデクス生成手法を採用する必要がある。その理由は、双方のインデクス生成回路22A,22Bで別々のインデクス生成手法を採用すると、スラック表20の更新時と参照時で別々のインデクスが生成されてしまい、スラックを正しく予測できないためである。
図30の場合には、分岐履歴のi個のビットとプログラム・カウンタ値(PC)から切り出したj個のビットとを連結して、インデクスを生成するようにしている。一方、図31の場合には、分岐履歴のi個のビットとPCから切り出した同数(i個)のビットとの排他論理和(EXOR)を排他的論理和ゲート120によりビット毎に取るとともに、そのビット列とプログラム・カウンタ値(PC)からさらに切り出したj個のビットとを連結して、インデクスを生成するようにしている。
なお、図31のように、分岐履歴が単調な場合(すべて成立、あるいは、すべて不成立)でも、PCから切り出したビットとの排他的論理和を取ることで、インデクスの上位ビットが単調とはならないようにすることができ、スラック表20のエントリを有効に活用できるようになる。
例えば、図30及び図31に示されるように、分岐履歴を4ビットとし、プログラム・カウンタ値(PC)から切り出す下位ビットを2ビットとする場合で、プログラム・カウンタ値(PC)から切り出す下位2ビットだけが同じとなる2つの命令(命令1、命令2)のスラックを更新する場合を考えてみる。なお、以下の説明では、命令1及び命令2のPCのうち、インデクスの生成に関係ないビットを省略して表し、また省略しないビットのうちの上位4ビットと下位2ビットとをスペースで区切って表示する。ここで命令1のPCが「…001101…」であり、命令2のPCが「…110001…」であったとする。命令1と命令2の分岐履歴がいずれもすべて成立(1111)となった場合、図30の手法では、スラック表20へのインデクスが、両命令で同じ値(111101)となってしまう。一方、図31の手法では、スラック表20へのインデクスは、命令1では「110001」と、命令2では「001101」と、この場合にも異なった値となる。
このように、図31の手法の方が、エントリを有効活用する上で有利ではあるが、余分な計算が必要されるため、スラック表への要求、すなわちスラック予測のより高い精度を所望するか、機構の簡易さを所望するかによって採用する手法を選択する。いずれにせよ、制御フローを考慮した分岐パターン別の予測スラックを個別記録を行えば、スラック予測の精度をさらに向上可能となる。
8.ターゲット・スラック到達条件の拡張
ターゲット・スラック到達条件として使用可能な命令実行時の振る舞いとしては、上述した到達条件(A)〜(D)以外にも、例えば以下に列記する(E)〜(I)が考えられる。これらの一部又は全部を、ターゲット・スラック到達条件に追加することで、スラックの予測をより正確に行える可能性がある。
(E)当該命令が、命令ウィンドウ13(図6及び図28参照)において最も古い命令となる(当該命令が命令ウィンドウ13内に最も長い間、留まっている)こと。
(F)リオーダ・バッファ16(図6及び図28参照)において最も古い命令となる(当該命令がROB内に最も長い間、留まっている)こと。
(G)当該命令が、前記命令ウィンドウに存在する命令の中で最も古い命令に実行結果を渡す命令となっていること。
(H)当該命令が、同一のサイクルに実行される命令の中で最も多くの後続命令に実行結果を渡す命令となっていること。例えば同一のサイクルに2つの命令が実行され、そのうちの一方が2つの後続命令に実行結果を渡し、残りが5つの後続命令に実行結果を渡したのであれば、後者の命令がターゲット・スラック到達条件を満たしていると判定される。
(I)当該命令の実行結果を渡すことで、実行可能な状態となる後続命令の数が、予め定められた判定値以上となっていること。ここでの実行可能な状態とは、入力データが揃い、いつでも実行を開始できる状態をいう。
これらの到達条件(E)〜(I)について次の命令i1〜i6、すなわち、
命令i1:A=5+3;
命令i2:B=8−3;
命令i3:C=3+A;
命令i4:D=A+C;
命令i5:E=9+B;及び
命令i6:F=7−B;
を実行する場合を例に説明する。
まず、最初のサイクルで命令i1と命令i2とが同時に実行されたとすると、命令i1は命令i3と命令i4に実行結果を渡し、命令i2は命令i5と命令i6に実行結果を渡す。そのため、実行結果を渡す後続命令数はどちらも2つとなるが、命令i4は未だ入力データが揃っていないので、命令i1の実行結果によって実行可能な状態になった命令数は1つ、命令i2の実行結果によって実行可能な状態になった命令数は2つである。なお、上記条件(I)での判定値が「1」であれば、上記条件(I)を満たすのは命令i1と命令i2、判定値が「2」であれば、命令i2のみとなる。
これらの条件(E)〜(I)は、従来、クリティカル・パスを検出するための条件としての使用が提案されたものであるが、ローカル・スラック到達条件としても、十分に利用可能なものである。
9.スラック表の更新に関するパラメータの拡張
上記実施形態では、スラック表の更新に係るパラメータのうち、予測スラック及び信頼性カウンタの1回あたりの減少量Vdec,Cdecをそれぞれ予測スラックの最大値Vmax及びしきい値Cthと同値に固定していた。また予測スラック及び信頼性カウンタの1回あたりの増加量Vinc,Cincをともに「1」に固定するようにしていた。しかしながら、性能低下を抑えることが重要な場合や、予測できるスラックの量をできるだけ大きくしたい場合など、状況に応じて上記パラメータの最適値は変わる。そのため、必ずしも上記のようにパラメータを固定する必要はなく、スラック予測の適用される分野に応じて適宜決定することが望ましい。
上記実施形態では、上記スラック表の更新に係る各パラメータはそれぞれ、命令の種別に依らず、一律の値とされていた。例えば、ロード命令であっても、分岐命令であっても、信頼性のしきい値Cthには同じ値が用いられている。しかしながら、実際には、命令の種別によっては、動的な変化度合やその変化の頻度などのローカル・スラックの挙動に違いがある。典型的な例として分岐命令をあげることができる。分岐命令は、他の命令と比べ、ローカル・スラックの変化する量が非常に激しい。分岐予測が成功したときには、後続命令への影響は非常に小さく、ローカル・スラックは大きくなる傾向にあるが、分岐予測が失敗したときには、誤って実行してしまった命令はすべて破棄され、非常に大きなペナルティを被るため、ローカル・スラックが「0」となる。これは、分岐予測の成功と失敗が入れ替わると、ローカル・スラックが急激に変化することを意味する。従って、分岐命令の場合、信頼性カウンタのしきい値Cthや1回当たりの減少量Cdecは他の命令よりも大きくすることが望ましい。
また、分岐命令以外の種別に属する命令においても、プロセッサ内での動作に特徴があれば、その特徴に適したパラメータの適正値が種別毎にそれぞれ存在すると考えられる。そこで、命令をいくつかのカテゴリにわけ、カテゴリ毎にスラック表の更新に係るパラメータを個別に設定することで、予測精度がさらに向上する可能性がある。例えば、プロセッサ内での動作の違いに着目すると、命令を次の4つのカテゴリ、すなわちロード命令のカテゴリ、ストア命令のカテゴリ、分岐命令のカテゴリ、及びその他命令のカテゴリに分類することができる。
こうして分類した命令の各カテゴリについて、それぞれパラメータを個別に設定する。更新時にはまず、その命令がどのカテゴリに属するかを判定する。この判定は、命令のオペコードを見れば容易に行うことができる。そして、その命令が属するカテゴリの固有のパラメータを用いて、スラック表を更新する。なお、命令のカテゴリの分類態様としては、ロード命令とストア命令とを同じカテゴリとしたり、加算と減算を別々のカテゴリに分けるようにしたり、といった態様も考えられる。命令のどの様に分類するかは、スラック予測の適用される範囲によって変わってくる。なお、このように命令の種別毎に個別のパラメータを使用することとすると、ローカル・スラック予測機構の構成が複雑化するため、これを抑えるには、カテゴリの数を必要最小限まで減らす必要がある。
10.第1の実施形態のまとめ.
以下、本実施形態において、解題を解決するための手段について要約すると、以下のようになる。
本実施形態に係るローカル・スラックの予測方法では、プロセッサで実行される命令を、その命令のローカル・スラックの予測値である予測スラックの値分だけその実行レイテンシを増加させて実行するとともに、前記命令の実行時の振る舞いに基づいて、現状におけるローカル・スラックの適正値であるターゲット・スラックに前記予測スラックが到達したか否かを推定し、到達したとの推定がなされるまで前記予測スラックを前記命令の実行毎に徐々に増加させて行くようにしている。
上記予測方法では、命令のローカル・スラックの予測値(予測スラック)がその実行毎に徐々に増加されてゆく。こうして予測スラックを増加して行けば、その値はやがては、現状のローカル・スラックの適正値(ターゲット・スラック)に到達するようになる。一方、命令の実行時のプロセッサの振る舞いから、予測スラックのターゲット・スラックへの到達を推定するとともに、その到達したとの推定が成立した時点で、予測スラックの増加が止められる。その結果、予測スラックを直接的に計算せずとも、ローカル・スラックを予測することができるようになる。
なお、上記のようなターゲット・スラックへの予測スラックの到達の推定は、その推定の成立条件として、
(A)当該命令の実行時に分岐予測ミスが発生したこと、
(B)当該命令の実行時にキャッシュ・ミスが発生したこと、
(C)後続命令に対するオペランド・フォワーディングが発生したこと、
(D)後続命令に対するストアデータフォワーディングが発生したこと、
(E)当該命令が命令ウィンドウに存在する命令の中で最も古い命令となっていること、
(F)当該命令がリオーダ・バッファに存在する命令の中で最も古い命令となっていること、
(G)当該命令が、前記命令ウィンドウに存在する命令の中で最も古い命令に実行結果を渡す命令となっていること、
(H)当該命令が、同一のサイクルに実行される命令の中で最も多くの後続命令に実行結果を渡す命令となっていること、
(I)当該命令の実行結果を渡すことで、実行可能な状態となる後続命令の数が、予め定められた判定値以上となっていること、
のうちのいずれかを含めるようにしている。
ここで、上記(A)、(B)の振る舞いは、予測スラックがターゲット・スラックを上回り、後続命令の実行が遅延した状態で観測される。また上記(C)、(D)の振る舞いは、予測スラックがターゲット・スラックと一致したときに観測される。よってこれらの振る舞いが観測されたときには、予測スラックがターゲット・スラックに到達したと推定することができる。
一方、上記(E)〜(I)の振る舞いは、従来より、命令がクリティカル・パス上にあるか否かの判定条件として用いられている。予測スラックがターゲット・スラックに到達すると、命令の実行レイテンシをそれ以上1サイクルでも増加させると後続命令の実行に遅延が生じるという、クリティカル・パス上の命令と似た状況となるため、上記到達の推定条件としても用いることが可能である。
なお、それまで予測スラックがターゲット・スラックに一致した状況となっているときにターゲット・スラックが動的に減少すると、予測スラックがターゲット・スラックを上回ってしまい、後続命令の実行が遅延されるという予測ミスのペナルティが発生してしまう。その点、予測スラックがターゲット・スラックに到達したとの推定がなされたときには同予測スラックを減少させるようにすれば、そうしたターゲット・スラックの動的な減少にも対応することができるようになる。
上記推定の成立、不成立をもって直ちに予測スラックを増加・減少させると、ターゲット・スラックが頻繁に増減を繰り返す場合に予測ミスのペナルティの発生頻度が高くなる虞がある。そうした場合にも、予測スラックがターゲット・スラックに到達したとの推定の成立条件の不成立回数が規定の回数となったことを条件に予測スラックを増加させ、同成立条件の成立回数が規定の回数となったことを条件に予測スラックを減少させるようにすれば、ターゲット・スラックが頻繁に増減したときの予測ミスペナルティの頻度の増加を抑えることができる。
この場合、予測スラックを増加させるために必要な成立条件の不成立回数を、同予測スラックを減少させるために必要な成立条件の成立回数よりも大きく設定すれば、予測スラックの増加は慎重に、その減少は迅速に行われるようになる。そのため、ターゲット・スラックが頻繁に増減を繰り返したときの予測ミスペナルティの頻度の増加を効果的に抑制することができる。こうした効果は、予測スラックがターゲット・スラックに到達したとの推定の成立条件の不成立回数が規定の回数となったことを条件に予測スラックを増加させる一方、予測スラックの減少は、成立条件の成立を条件に行うようにしても、同様に得ることができる。
なお、命令の種別によっては、動的な変化度合やその変化の頻度などのローカル・スラックの挙動に違いがある。そこでローカル・スラックをより精度良く予測するには、予測スラックの上限値や、その1回当たりの更新量(増加量や減少量)を、命令の種別毎に異ならせることが望ましい。また、上記推定の成立条件の成立回数、又は不成立回数が規定の回数となったことを条件に予測スラックを更新する場合には、そうした規定の回数を命令の種別毎に異ならせることで、より高い精度で予測を行うことができるようになる。ちなみに、そうした命令の種別としては、例えば、ロード命令、ストア命令、分岐命令及びその他命令の4つのカテゴリに分けることが考えられる。
ところで、命令のローカル・スラックは、その命令の実行に至るまでのプログラムの分岐経路によって大きく変化することがある。その点、当該命令の実行に至るプログラムの分岐パターンの別に予測スラックを個別に設定するようにすれば、命令の実行に至るまでのプログラムの分岐経路毎に個別にローカル・スラックが予測されることとなり、ローカル・スラックをより高い精度で予測することができるようになる。
一方、上記課題を解決するため、本実施形態に係るローカル・スラック予測機構では、プロセッサで実行される命令のローカル・スラックを予測する機構として、各命令のローカル・スラックの予測値である予測スラックが記録保持されるスラック表と、命令の実行に際して前記スラック表を参照してその命令の前記予測スラックを取得するとともに、その取得した予測スラックの分だけ実行レイテンシを増加させる実行レイテンシ設定手段と、前記命令の実行時の振る舞いに基づき、同命令の現状のローカル・スラックの適正値であるターゲット・スラックに前記予測スラックが到達したか否かを推定する推定手段と、前記推定手段により前記予測スラックが前記ターゲット・スラックに到達したとの推定がなされるまで、前記予測スラックを前記命令の実行毎に徐々に増加させる予測スラック更新手段と、を備えるようにしている。
上記構成では、予測スラック更新手段によって命令の予測スラックが、その命令の実行毎に徐々に増加され、実行レイテンシ設定手段によってその命令の実行レイテンシもその実行毎に同様に徐々に増加される。こうして予測スラックがターゲット・スラックに到達すると、命令の実行時のプロセッサの振る舞いがそれを示すものとなり、推定手段によりその旨の推定がなされ、その結果、上記予測スラック更新手段による予測スラックの増加が止められるようになる。そして以上により、直接計算することなく、予測スラックが求められる。
なお、推定手段によるターゲット・スラックへの予測スラックの到達の推定は、例えば、上記(A)〜(I)のいずれか1つ、あるいはそのうちの複数を(すなわち、少なくとも1つを)その推定の成立条件とすることで行うことができる。
また、予測スラックがターゲット・スラックに到達したとの推定の成立条件が成立となったときにそのカウンタ値が増加/減少され、推定の成立条件が不成立となったときにそのカウンタ値が減少/増加される信頼性カウンタを設けるとともに、前記信頼性カウンタのカウンタ値が増加判定値となったことを条件に前記予測スラックを増加させ、同信頼性カウンタのカウンタ値が減算判定値となったことを条件に前記予測スラックを減少させるように予測スラック更新手段をすれば、ターゲット・スラックが頻繁に増減を繰り返したときの予測ミスペナルティの発生頻度の増加を好適に抑制することができる。なお、そうした状態での予測ミスペナルティの発生頻度の増大をより効果的に抑制するには、信頼性カウンタでの推定の成立条件の成立時におけるカウンタ値の増加/減少量を、同推定の成立条件の不成立時における同カウンタ値の減少/増加量よりも大きく設定することが望ましい。
さらに、命令の種別によるローカル・スラックの動的変化の様相の差違に対応してより精度良くローカル・スラックの予測を行うには、更新手段による各命令の予測スラックの1回当たりの更新量(増加量、減少量)を、その命令の種別によって異ならせることが望ましい。また更新手段によって更新される各命令の前記予測スラックには上限値を設定する場合には、その上限値を命令の種別によって異ならせることも有効である。さらには、信頼性カウンタが設けられる場合には、カウンタ値の増加量及び減少量を命令の種別により異ならせることが有効である。ちなみに命令の種別としては、ロード命令、ストア命令、分岐命令及びその他命令の4つのカテゴリに分類することが考えられる。
また、プログラムの分岐履歴を記録する分岐履歴レジスタを設けるとともに、その分岐履歴レジスタを参照して得られる分岐パターンの別に命令の予測スラックをスラック表に個別に記録するようにすることも、予測精度の向上には有効である。
本実施形態に係るローカル・スラックの予測方法及び予測機構によれば、命令のローカル・スラックの予測値(予測スラック)を計算で直接的に求めるのではなく、命令の実行時の振る舞いを観測しながら、適正値に到達するまで予測スラックを徐々に増加させることで求めている。そのため、予測スラックの直接演算に要する複雑な機構は不要であり、より簡易な構成でローカル・スラックの予測を行うことができる。
第2の実施形態.
第2の実施形態では、スラック予測を利用してメモリの曖昧性を除去する手法を提案する。スラックとは、他の命令に影響を与えることなく、その命令の実行レイテンシを増加させることのできるサイクル数である。提案機構では、スラックが予め定めたしきい値以上になったストア命令は、後続するロード命令と依存しないと予測し、ロード命令を投機的に実行する。これにより、ストア命令のスラックを利用しても、後続のロードの実行が遅れることがなくなる。
1.第1の実施形態及び従来技術の問題点.
上述のように、ロード/ストア命令間には、メモリの曖昧性が存在するため、予測に基づいてストア命令のスラックを利用すると、後続のロードの実行が遅れ、プロセッサの性能に悪影響を与えるという問題点がある。ここで、メモリの曖昧性とは、アクセスするメモリ・アドレスが分かるまで、ロード/ストア命令間の依存関係が分からないことをいう。
そこで、本実施形態では、スラックを利用して、ストア命令とロード命令のデータ依存関係を予測し、メモリの曖昧性を投機的に取り除く機構を提案する。この機構では、スラックが予め定めたしきい値以上になったストア命令は、後続するロード命令と依存しないと予測し、ロード命令を投機的に実行する。これにより、ストア命令のスラックを利用しても、後続のロードの実行が遅れることがなくなる。
2.スラック.
スラックに関しては、従来技術及び第1の実施形態において説明した通りであり、ローカル・スラックは、グローバル・スラックとは異なり、求めることだけでなく、利用することも容易である。そこで、本実施形態では、これ以降、「ローカル・スラック」を対象として議論を進める。また、「ローカル・スラック」を、単に、「スラック」と表記する。
3.メモリの曖昧性がスラックの利用に与える影響.
本章では、ストア命令のスラックを利用したときに、メモリの曖昧性が原因で発生する問題について説明する。
図32(a)は、従来技術においてストア命令のスラックを利用したときにメモリの曖昧性が原因で発生する問題点を説明するための図であって、デコード前のプログラムを示す図であり、図32(b)は、従来技術においてストア命令のスラックを利用したときにメモリの曖昧性が原因で発生する問題点を説明するための図であって、デコード後のプログラムを示す図である。
図32(a)において、r1,r2,…はそれぞれ、1番レジスタ、2番レジスタ、…を示す。ストア命令i1は、レジスタr4の値を、レジスタr1の値と3を足して得られるメモリ・アドレスにストアする。ロード命令i5は、レジスタr2の値と8を足して得られるメモリ・アドレスからロードした値を、レジスタr7に書き込む。ロード命令i6は、レジスタr3の値と8を足して得られるメモリ・アドレスからロードした値を、レジスタr8に書き込む。命令i7は、レジスタr7の値と5を足して得られる値を、レジスタr9に書き込む。命令i8は、レジスタr9の値と8を足して得られる値を、レジスタr10に書き込む。
命令i5は命令i1に依存せず、命令i6は命令i1に依存すると仮定する。ただし、プロセッサ10B(図35参照。)内では、メモリの曖昧性のため、アドレス計算が終るまで、それらの依存関係は不明であることに注意されたい。また、命令i7は命令i5で得られた値を、命令i8は命令i7で得られた値をそれぞれ必要とする。
ロード/ストア命令を効率的にスケジューリングする方式として、分離ロード/ストア方式を用いることを仮定する。この方式では、メモリ命令を、アドレス計算部分とメモリアクセス部分の2つに分離し、これらを別々にスケジューリングする。そして、スケジューリングには、ロード及びストアキュー(以下、LSQという。)62と呼ばれる専用のバッファメモリを用いる。なお、アドレス計算にはレジスタ依存しかないので、リザベーション・ステーション14Aを用いてスケジューリングする。一方、メモリアクセスはメモリ依存を満足するようにスケジューリングする。
分離ロード/ストア方式を用いるプロセッサにおいて、図32(a)のプログラムをデコードした後のプログラムを、図32(b)に示す。図32(a)及び(b)において、メモリ命令は、アドレス計算命令(名前にaが付加された命令)とメモリアクセス命令(名前にmが付加された命令)に分離されている。
図33(a)は、プロセッサの処理において、メモリの曖昧性がスラックの利用に与える影響を説明するために用いる図であって、スラックを利用しない場合のプログラムを実行する過程を示すタイミングチャートであり、図33(b)は、プロセッサの処理において、メモリの曖昧性がスラックの利用に与える影響を説明するために用いる図であって、スラックを利用する場合のプログラムを実行する過程を示すタイミングチャートである。
図32(a)及び(b)に示すプログラムを実行する過程を図33(a)及び(b)に示す。図33(a)及び(b)において、縦軸はサイクル数を示し、実線で囲われた矩形部分が、そのサイクルで実行された命令とその実行の内容を示す。
図33(a)は、スラックを利用しない場合の例である。この例では、命令i1a、i5a、i7、i8、i6aはそれぞれ、0、2、5、6サイクル目で実行結果が得られると仮定する。
0サイクル目で、命令i1のアドレスが判明するため、1サイクル目で命令i1のメモリアクセスができる。次に、2サイクル目で、命令i5のアドレスが判明する。この時点で命令i5は、先行ストアである命令i1に依存しないことが判明する。そのため、3サイクル目に、命令i5がメモリアクセスを行う。4サイクル目に、命令i5でロードした値を用いて加算を行う。5サイクル目に、命令i7で求めた値を用いて加算を行う。6サイクル目に、命令i6が、先行ストアである命令i1に依存することが判明する。この時点で命令i1は実行を終了しているため、それに依存している命令i6も実行を開始できる。9サイクル目に、命令i1から、それに依存する命令i6に、ストアデータがフォワーディングされる。
一方、図33(b)は、命令i1のスラックを利用した場合である。この場合、スラックを5と予測し、命令i1aの実行レイテンシを5サイクル増加させたと仮定する。命令i1のスラックを利用したことにより、図33(b)では、命令i1aの実行結果が得られるサイクルが、図33(a)の場合よりも5サイクル遅れる。
2サイクル目で、命令i5のアドレスが判明する。しかし、この時点では、先行ストアである命令i1のアドレスが不明である。自身のアドレスが判明したにも関わらず、先行ストアに依存しているかどうかがわからないため、メモリにアクセスすることができず、実行が遅れてしまう。5サイクル目で、命令i1のアドレスが判明すると、ようやく、命令i5は命令i1に依存していないことが判明する。そのため、6サイクル目で、命令i5がメモリアクセスを行う。これは無駄な実行の遅れとなり、性能に悪影響を与える。
4.スラック予測を利用したメモリの曖昧性の投機的除去.
ストア命令のスラックの利用が、それとは依存関係のないロード命令の実行に与える悪影響を緩和するため、従来手法におけるストア命令のスラックの求め方に着目する。従来手法において、ストア命令のスラックは、当該ストアと依存関係のあるロードにのみ着目して求められる。そのため、ストア命令のスラックがn(n>0)である場合、当該ストアが実行されたnサイクル後に、それに依存するロード命令が実行されることが分かる。
このことから、メモリ命令をアドレス計算とメモリアクセスに分離すると、次の順番で、依存関係のあるストア/ロード命令が実行される可能性が高いと考えられる。まず、ストア命令のアドレスが計算される。その後、ストア命令のメモリアクセスが行われる。そのn−1サイクル後に、それに依存するロード命令のアドレス計算が行われ、その次のサイクルで、メモリアクセスが行われる。
上記の順番でメモリ命令が実行される場合、ストア命令がアドレス計算を行ってから、少なくともnサイクルの間は、ストア命令に依存するロード命令がアドレス計算を行うことはない。従って、その間にアドレスが判明したロード命令は、アドレスを比較しなくても、当該ストア命令に依存しないことが分かる。
以上より、スラックがn(>0)であるストア命令の実行レイテンシを増加させた結果、当該ストア命令のアドレス計算がnサイクル遅れたとしても、その間にアドレスの判明したロード命令は、当該ストア命令に依存しない可能性が高いと考えることができる。
そこで、本発明者は、アドレスの判明したロード命令は、スラックがn(>0)である先行ストア命令に依存しないと予測し、それらのストア命令に関するメモリの曖昧性を投機的に除去する手法を提案する。これにより、ストア命令のスラックの利用が、それとは依存関係のないロード命令の実行に与える悪影響を緩和することができる。
図34は本発明の第2の実施形態に係る、メモリの曖昧性の投機的除去を示すタイミングチャートである。ここで、図34を用いて、提案手法の目的とする動作を説明する。すなわち、図34は提案手法を用いて、図32に示すプログラムを実行するときの過程を示す。図33(b)と同様に、命令i1aのスラックを5と予測し、命令i1aの実行レイテンシを5サイクル増加させる。しかし、図33(b)とは異なり、スラックを用いて、命令i1に関するメモリの曖昧性を投機的に除去する。
2サイクル目で、命令i5のアドレスが判明する。この時点では、先行ストアである命令i1のアドレスが不明である。しかし、命令i1はスラックが0よりも大きい(スラックを持つ)ので、命令i5は命令i1に依存しないと予測する。そして、3サイクル目に、命令i5が投機的にメモリアクセスを行う。以上のようにして、スラックを利用したストア命令とは依存関係のないロード命令の実行が遅れることを防ぐ。
しかし、スラックは予測によって求めるため、メモリ依存関係の予測に失敗する可能性がある。失敗時のペナルティは大きいため、できるだけ慎重に予測を行う必要がある。そこで、ストア命令のスラックがあるしきい値Vth以上になった場合のみ、後続するロード命令は、当該ストア命令に依存しないと予測することとする。
5.提案機構.
本章では4章で示した提案手法を実現する機構について説明する。
5.1.提案機構の概要.
図35は図34のメモリの曖昧性の投機的除去機構(以下、提案機構という。)を備えたプロセッサ10Bの構成を示すブロック図である。図35において、プロセッサ10Bの上側と下側にはそれぞれ、命令キャッシュ11A、データキャッシュ63を示す。プロセッサ20の右側は、フェッチした命令のスラックを予測するスラック予測機構60を示す。プロセッサ10Bの内部は大きく、フロントエンド7、実行コア1A、バックエンド8に分けて構成される。
命令キャッシュ11Aは主記憶装置9からの命令を一時的に記憶した後、デコード・ユニット12に出力する。デコード・ユニット12は命令デコード部12aとタグ割当部12bとから構成され、入力される命令をデコードしかつタグ割り当てした後、実行コア1Aのリザベーション・ステーション14Aに出力する。
実行コア1Aでは、リザベーション・ステーション14Aを用いてアドレス計算をスケジューリングし、機能ユニット61(実行ユニット15に対応する。)でアドレスを計算してLSQ62及びバックエンド8のROB16に出力する。また、実行コア1Aでは、LSQ62を用いてロード命令及び/又はストア命令をスケジューリングし、ロード要求及び/又はストア要求をデータキャッシュ63へと送出する。再オーダ時に、ROB16から出力されるアドレスは、レジスタ・ファイル14を介してリザベーション・ステーション14Aに入力される。
図35の提案機構はLSQ62において実現され、主に、メモリ依存予測機構と、予測ミスからの回復機構に分けることができる。メモリ依存予測機構は、スラックに基づいて、メモリ依存関係を予測し、ロード命令を投機的に実行する。一方、回復機構は、メモリ依存予測の成否を確認し、メモリ依存予測にミスした状態からプロセッサ状態を回復させる。
以下では、まず、メモリ依存予測機構について説明し、その後、回復機構について説明する。
5.2.メモリ依存予測機構.
本実施形態に係る提案機構は、LSQ62に簡単な修正を加えることで、メモリ依存予測機構を実現している。まず、修正後のLSQ62の構成について説明する。
図36は図35のロード及びストアキュー(LSQ)62にエントリされる修正された命令データのフォーマットを示す図である。図36の命令データにおいて、オペコード71、メモリ・アドレス73、タグ75及びストアデータ76に加えて、3個のフラグ72,74,77が追加される。ここで、RaとRdはそれぞれ、アドレス、ストアデータが利用可能であることを示すフラグである。Sflagは提案機構を導入するために新たに追加したストア命令の予測スラックの判定フラグであって、ストア命令の予測スラックがしきい値Vth以上であるかどうかを示すフラグである。ロード命令の場合、フラグSflagに意味はない。フラグSflagは、ストア命令の予測スラックがしきい値Vth以上であれば1にセットし、そうでなければ0にリセットする。フラグSflagのセット/リセットは、ストア命令をLSQ62に割り当てるときに機能ユニット61により行われる。
次に、修正後のLSQ62の動作について説明する。通常のLSQ62では、ロード命令は、自身のアドレスと先行するすべてのストア命令のアドレスが判明すると、アドレスの比較を行う。そして、先行ストアに依存しないことが判明すれば、メモリアクセスを行い、そうでなければ、依存するストアからフォワーディングによってデータを得る。
一方、修正後のLSQ62では、ロード命令は、自身のアドレスが判明し、さらに、先行するストア命令が、もれなく、以下いずれかの条件を満たすと、アドレスの比較を行う。
(1)アドレスが判明している。
(2)アドレスが判明していないが、フラグSflagが1である。
ただし、アドレス比較は、アドレスが判明しているストア命令に対してのみ行う。アドレスが判明しておらず、かつ、フラグSflagが1であるストア命令に対しては、依存関係がないと予測する。アドレス比較の結果、依存するストア命令がないことが判明すれば、メモリアクセスを行い、そうでなければ、依存するストアからフォワーディングによってデータを得る。メモリ依存関係を予測していれば、ロード命令は投機的に実行されたことになる。
5.3.回復機構.
本実施形態に係る提案機構は、メモリ依存関係の予測が正しいかどうかを調べるため、予測の対象となった可能性のあるストア命令、つまり、フラグSflagが1のストア命令は、アドレスが判明した後、予測の成否を確認する。具体的には、当該ストア命令のアドレスと、実行を完了した後続ロード命令のアドレスを比較する。
アドレスが一致しなければ、メモリ依存予測は成功である。ストア命令のスラックの利用によって、当該ストア命令とは依存関係のないロード命令の実行が遅れるのを防ぐことができる。一方、アドレスが一致すれば、メモリ依存予測は失敗である。アドレスが一致したロード命令とそれ以降の命令をプロセッサからフラッシュし、実行をやり直す。実行をやり直すために必要なサイクルが、予測ミスペナルティとなる。
6.LSQ62の処理フロー.
図37はロード命令に対する図35のLSQ62の処理を示すフローチャートである。図37において、従来機構に比較して追加ステップについては、ステップ番号の後に(*)を付加しており、図37では、ステップS7の処理を追加している。なお、図37では、説明を分かりやすくするため、ステップS2からステップS8までの至る部分をループ処置にしているが、通常、この部分は並列に処理される。また、図37及び図38において、アドレスとは、各命令が記憶されている主記憶装置9のメモリ・アドレスをいう。
図37において、まず、ステップS1において、ロード命令がLSQ62とROB16に書き込まれる。次いで、ステップS1Aでは、LSQ62に書き込まれたロード命令のアドレスが判明したか否かが判断され、YESのときはステップS2に進む一方、NOのときはステップS10に進む。ステップS2では、次の先行ストア命令を取得し、ステップS3において先行ストア命令のアドレスが判明したか否かが判断され、YESのときはステップS4に進む一方、NOのときはステップS7に進む。ステップS4では、ロード命令と先行ストア命令のアドレスを比較し、ステップS5においてこれらのアドレスが一致しているか否かが判断され、YESのときはステップS6に進む一方、NOのときはステップS8に進む。ステップS6では、「ストアデータフォワーディング」が実行された後、当該LSQ62の処理を終了する。
ステップS7では、先行ストア命令のフラグSflagが1であるか否か、すなわち、予測スラックがしきい値Vth以上であるが判断され、YESのときはステップS8に進む一方、NOのときはステップS10に戻る。ステップS10では、1サイクルだけ待機した後、ステップS1Aに戻る。ステップS8では、ロード命令と、先行するすべてのストア命令とのアドレス比較が終了したか否かが判断され、NOのときはステップS2に戻る一方、YESのときはメモリアクセスを行った後、当該LSQ62の処理を終了する。
なお、ステップS6における「ストアデータフォワーディング」とは以下の処理をいう。ロード命令が要求するデータが、ストアキュー又はLSQ62などのバッファ枚の先行するストア命令のデータである場合、通常、そのストア命令がリタイアしデータキャッシュ63に書き込みを行い、メモリ依存が解消するのを待つ必要がある。もしもバッファから必要なストアデータが得られれば、この無駄な待ち時間がなくなる。データキャッシュ63に書き込まれる前に、バッファからストアデータを供給することを、「ストアデータフォワーディング」という。これは、実行アドレスによるバッファの連想検索の結果、一致するエントリが見つかった場合、対応するストアデータを出力するようにバッファを修正することにより実現できる。
図38はストア命令に対する図35のLSQ62の処理を示すフローチャートである。図38において、従来機構に比較して追加ステップについては、ステップ番号の後に(*)を付加しており、図38では、ステップS14及びS20−S22の処理を追加している。
図38において、まず、ステップS11において、ストア命令がLSQ62及びROB16に書き込まれた後、ステップS12においてストア命令のアドレスが判明したか否かが判断され、NOのときはステップS13に戻る一方、YESのときはステップS14に進む。ステップS13では、1サイクルだけ待機した後、ステップS12に戻る。ステップS14では、ストア命令のフラグSflagが0であるか否か、すなわち、当該ストア命令の予測スラックがしきい値Vth以上であるか否かが判断され、YESのときはステップS15に進む一方、NOのときはステップS20に進む。ステップS20では、ストア命令と後続するすべてのロード命令のアドレスを比較し、アドレスが一致するロード命令があるか否かは判断され、YESのときはステップS22に進む一方、NOのときはステップS15に進む。ステップS22では、ロード命令とそれ以降の命令をプロセッサ10からフラッシュし(命令データをクリアし)、これらの命令の実行をやり直した後、ステップS15に進む。
ステップS15では、ストア命令のデータが得られているか否かが判断され、YESのときはステップS17に進む一方、NOのときはステップS16に進む。ステップS16では、1サイクルだけ待機した後、ステップS15に戻る。ステップS17では、ストア命令がROB16からリタイアするか否かが判断され、YESのときはステップS19に進む一方、NOのときはステップS18に進む。ステップS18では、1サイクル待機した後、ステップS17に戻る。ステップS19では、メモリアクセスを行った後、当該LSQ62の処理を終了する。
なお、リタイアとは、バックエンド8での処理が終了し、プロセッサ10Bから命令がなくなることをいう。
7.第2の実施形態の効果.
以上説明したように、本発明の第2の実施形態に係るプロセッサとその処理方法によれば、所定のしきい値以上の予測スラックを有するストア命令を、当該ストア命令に後続するロード命令とデータの依存関係がないと予測して判断し、当該ストア命令のメモリ・アドレスが判明していなくても上記後続するロード命令を投機的に実行する。従って、予測が正しければ、ストア命令のスラックの利用によって、当該ストア命令とはデータ依存関係がないロード命令の実行が遅延することはなく、プロセッサ装置の性能への悪影響を抑制することができる。また、スラック予測機構の出力結果を利用するために、ストア命令とロード命令間の依存関係を予測するためのハードウェアを新たに用意する必要がない。それ故、従来技術に比較して簡単な構成で、ローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができる。
第3の実施形態.
本実施形態では、依存関係に基づいてローカル・スラックを共有化する手法を提案する。ローカル・スラックとは、他の命令に影響を与えることなく、その命令の実行レイテンシを増加させることのできるサイクル数である。本実施形態に係る提案機構では、ある命令の持つローカル・スラックを、依存関係のある命令間で共有する。これにより、ローカル・スラックを持たない命令が、スラックを利用できるようになる。
1.従来技術及び第1の実施形態の問題点.
上述のように、従来技術及び第1の実施形態に係る手法では、ローカル・スラックが1以上存在すると予測できる命令の数(スラック命令数)が少なく、スラックを利用できる機会が十分に確保できない。
そこで、本実施形態では、ある命令の持つローカル・スラックを、依存関係のある複数の命令間で共有する手法を提案する。この提案機構では、ローカル・スラックを持つ命令を始点として、ローカル・スラックスを持たない命令間で、依存先から依存元へと、共有可能なスラックが存在するという情報を伝搬させて行く。そしてこの情報を元に、発見的な手法を用いて、各命令が利用するスラックの量を決定する。これにより、ローカル・スラックを持たない命令が、スラックを利用できるようになる。
2.スラック.
図39は、従来技術に係るスラックの説明に用いるプログラムを示すタイミングチャートである。図39において、ノードは命令を示し、エッジは命令間のデータ依存関係を示す。図39の縦軸は命令を実行したサイクルを示す。ノードの長さは命令の実行レイテンシ(実行遅延時間をいう。)を示す。実行レイテンシは、命令i1、i4、i5、i6、i9が2サイクル、その他の命令が1サイクルである。
まず、命令i3のグローバル・スラックについて考える。命令i3の実行レイテンシを7サイクル増加させた場合、それに直接的、間接的にそれぞれ依存する命令i8、命令i10の実行が遅れる。その結果、命令i10は、プログラム中最も最後に実行される命令i11と同時刻に実行される。従って、命令i3の実行レイテンシをこれ以上増加させると、プログラム全体の実行サイクル数が増加する。つまり、命令i3のグローバル・スラックは7である。このように、ある命令のグローバル・スラックを求めるためには、その命令の実行レイテンシの増加が、プログラム全体の実行に与える影響を調べる必要がある。そのため、グローバル・スラックの判定は非常に難しい。
ここで、命令i3に加え、命令i3と間接的に依存関係のある、命令i0のグローバル・スラックに着目する。上記と同様にして、命令i0のグローバル・スラックも7であることが分かる。そこで、これらの命令が、グローバル・スラックを利用して、実行レイテンシを7サイクル増加させると、命令i10は、プログラム中最も最後に実行されるよりも、7サイクル後に実行されてしまう。このように、ある命令がグローバル・スラックを利用すると、他の命令がグローバル・スラックを利用できなくなる可能性がある。そのため、グローバル・スラックは、利用することも難しいといえる。
次に、命令i3のローカル・スラックについて考える。
命令i3の実行を6サイクル増加させた場合、後続命令の実行に影響は与えない。しかし、これ以上実行レイテンシを増加させると、命令i3に直接依存する命令i8の実行が遅れる。つまり、命令i3のローカル・スラックは6である。このように、ある命令のローカル・スラックを求めるには、その命令に依存する命令への影響に着目すれば良い。従って、ローカル・スラックは比較的容易に判定することができる。
ここで、命令i3と間接的に依存関係のある、命令i10のローカル・スラックに着目する。上記と同様にして、命令i10のローカル・スラックは1であることが分かる。3がローカル・スラックを利用したとしても、それに直接依存する命令に影響を与えることはないので、命令i10はローカル・スラックを利用することができる。グローバル・スラックとは異なり、ある命令がローカル・スラックを利用しても、それとは関係なく、他の命令はローカル・スラックを利用することができる。
以上のように、ローカル・スラックは、グローバル・スラックとは異なり、求めることが容易なだけではなく、利用することも容易である。そこで、本実施形態では、これ以降、ローカル・スラックを対象として議論を進める。
3.従来のスラック予測機構.
従来機構の概要について述べる。詳細については、従来技術及び第1の実施形態において詳細説明した。時刻に基づく機構では、ある命令がデータを定義した時刻と、そのデータが他の命令によって参照された時刻の差からローカル・スラックを計算し、次回実行時のローカル・スラックは、計算によって得たローカル・スラックと同じになると予測する。一方、発見的手法に基づく機構では、分岐予測ミスや、フォワーディングといった、命令実行時の振る舞いを観測しながら、予測するローカル・スラック(予測スラック)を増減させ、予測スラックを実際のローカル・スラック(実スラック)に近づけて行く。
どちらの手法も、同程度の予測精度を達成できるが、スラック命令数が少ないという問題点がある。例えば、発見的手法では、4命令発行のプロセッサにおいて、性能低下を10%未満に抑えつつ、予測可能なスラック命令数は、最大で、全実行命令の3〜5割程度である。スラック命令数が少なければ、スラックを利用する機会も制限されてしまう。そこで、スラック命令数を増加させる方策を考えることが重要となる。
4.スラック命令数を増加させる手法.
本章では、ある命令の持つローカル・スラックを、当該命令だけでなく、それ以外の命令も利用する(共有化する)手法を提案する。スラックの共有化によって、ローカル・スラックを持たなかった命令が、スラックを利用できるようにすることができれば、スラック命令数を増加させることができる。
まず、スラックを共有化する命令間には、どのような関係が成り立つのかについて考える。
ローカル・スラックを持たない命令が、実行レイテンシを増加させれば、それに依存する命令の実行に影響を与える。その結果、ある命令の持っていたローカル・スラックが減少したとすれば、これらの命令は、スラックを共有していると考えることができる。このことから本発明者は、スラックを共有化できる命令は、ローカル・スラックを持つ命令の実行に影響を与えうる命令、つまり、直接的、間接的にオペランドを供給する命令であると考えた。
例えば、図39において、命令i3はローカル・スラックを持つ命令である。そして、命令i0、i2は、命令i3に直接的、間接的にオペランドを共有する命令である。これらの命令の実行レイテンシを増加させると、命令i3の利用可能なローカル・スラックは減少する。従って、命令i3の持つローカル・スラックは、命令i0、i2、i3の間で共有化できるということになる。
図40(a)は従来技術の手法に係るスラックの利用を説明するプログラムを示すタイミングチャートであり、図40(b)は本発明の第2の実施形態に係る、スラック命令数を増加させる手法に係るスラックの利用を説明するプログラムを示すタイミングチャートである。
図40(a)及び(b)を用いて、従来手法と、本実施形態に係る共有化手法について説明する。この図40(a)及び(b)は、図39のプログラムにおいて、命令i3のローカル・スラックを利用した場合の動作を示す。図40(a)の従来手法では、命令i3のローカル・スラックを利用するのは、命令i3のみである。一方、図40(b)の提案手法では、命令i3のローカル・スラックを、命令i0、i2、i3の間で共有化していることが分かる。これにより、スラック命令数が増加する。なお、共有化によって、1命令あたりのスラックは減少する。そのため、共有化は、1命令毎に多くのスラックを必要とする応用には向いていないことに注意する必要がある。
次に、スラックを共有化する命令を求める方法について考える。
共有化を実現する手法として、命令間の依存関係を示すデータフローグラフ(DFG:Data Flow Graph)を利用するという方法が考えられる。データフローグラフが分かれば、ある命令の持つローカル・スラックに対し、直接的、間接的にオペランドを供給する命令、つまり、共有化を行う命令を求めることができる。その後は、これらの命令間で、スラックを均等に割る、など、状況に応じて、スラックの分配方法を決めれば良い。しかし、命令間の依存関係は複雑で、さらに、分岐によってその関係が動的に変化するため、データフローグラフを作成するのは容易ではないと考えられる。
そこで、本発明者は、ローカル・スラックを持つ命令を始点とし、依存先から依存元へと依存関係を逆にたどりながら、共有可能なスラックが存在するという情報(共有化情報)を伝搬させて行くこととする。例えば、図39では、共有化情報は、ローカル・スラックを持つ命令i3から命令i2へと伝搬し、その後、命令i2から命令i0へと伝搬することになる。各命令は、自身が直接依存する、スラックを持たない命令に対して、共有化情報を伝搬させるだけで良いため、データフローグラフを作成する方法に比べ、実現ははるかに容易である。
さらに、ローカル・スラックの動的に変化するため、共有化情報の伝搬の速度を変化させることができるようにする。具体的には、命令は、自身の予測スラックがあるしきい値(伝搬のしきい値)以上になったら、共有化情報を伝搬させることとする。これ以降、伝搬のしきい値のことを、伝搬しきい値Pthという。
最後に、スラックの予測方法について考える。予測には2種類ある。ローカル・スラックの予測と、共有化情報を受け取った命令が利用するスラックの予測である。
ローカル・スラックは動的に変化する。共有化を行うと、1命令あたりのスラックは減少するので、ローカル・スラックの動的な変化はさらに複雑になる。この変化に対応するために、ローカル・スラックの予測手法として、予測スラックの増減の緩急を制御できる、発見的ローカル・スラック予測(第1の実施形態参照。)を用いることとする。
共有化できるスラックは動的に変化する。また、共有化情報を受け取った命令は、スラックを共有化できるということしか分からない。これは、発見的ローカル・スラック予測において、予測するスラックは動的に変化し、各命令は予測スラックが実スラックに到達したかどうかしか分からないという状況に非常に似ている。そこで、共有化情報を受け取った命令に対しても、発見的にスラックを予測することとする。
具体的には、以下のようにする。まず、予測スラック毎に信頼性カウンタを導入する。実行時に、共有化情報を受け取った場合、予測スラックは利用可能なスラックに未だ到達していないと判定し、信頼性カウンタを増加させる。そうでなかった場合、予測スラックは利用可能なスラックに到達したと判定し、信頼性カウンタを減少させる。そして、カウンタ値が0になったら予測スラックを減少させ、カウンタ値があるしきい値以上になったら予測スラックを増加させる。
5.提案機構
本章では前章で示した提案手法を実現する機構について説明する。まず、提案機構の概要について述べる。次に、提案機構の各構成要素について説明する。最後に、全体の動作について詳しく説明する。
5.1.提案機構の構成.
図41は、本発明の第3の実施形態に係る、スラック伝搬表80などを備えたプロセッサ10である提案機構の構成を示すブロック図である。本節の説明には関係しないため、プロセッサ10及び更新ユニット30の内部は省略するが、プロセッサ10の詳細構成は図6又は図35に図示され、更新ユニット30の詳細構成は図19又は図46に図示されている。ここで、提案機構は、プロセッサ10に加えて、以下3つの構成要素をさらに備えて構成される。
(1)スラック表20A、
(2)スラック伝搬表80、及び
(3)更新ユニット30。
スラック表20Aは例えばハードディスクメモリなどの記憶装置に格納され、命令毎に、伝搬フラグPflag、予測スラック、信頼性を保持する。プロセッサ10は、主記憶装置9から命令をフェッチすると、フェッチ時にスラック表20Aを参照し、スラック表20Aから得られた予測スラックを、自身の予測スラックとして用いる。伝搬フラグPflagはローカル・スラックの予測の内容を示す。伝搬フラグPflagが0の場合、従来のローカル・スラック予測を行っていることを示し、伝搬フラグPflagが1の場合、共有化情報に基づくスラック予測を行っていることを示す。ローカル・スラックを予測した後でなければ、共有化情報は伝搬できないため、伝搬フラグPflagの初期値は0にセットされる。
スラック伝搬表80は、各命令の持つ共有化情報を、自身が直接依存する、ローカル・スラックを持たない命令に伝搬させるために用いる。このスラック伝搬表80は、命令のデスティネーション・レジスタ番号をインデクスとする。各エントリは、命令毎にローカル・スラックを持たない命令のプログラム・カウンタ値(PC)、予測スラック、信頼性を保持する。また、更新ユニット30は、命令実行時の振る舞いや、共有化情報に基づいて、コミットした命令の予測スラックと信頼性を計算するために用いる。更新ユニット30で計算された値は、スラック表20Aに書き込まれる。
5.2.構成要素の詳細.
プロセッサ10は命令をフェッチすると、フェッチ時にスラック表20Aを参照し、スラック表20Aから自身の予測スラックを得る。そして、命令のコミット時に、伝搬フラグPflag、信頼性、予測スラック、実行時の振る舞いが、更新ユニット30に送られる。命令の伝搬フラグPflagが0であれば、発見的ローカル・スラック予測手法に基づいて、信頼性と予測スラックが計算し、スラック表20Aを更新する。このとき、伝搬フラグPflagを変更しない。
次に、計算によって得たローカル・スラックを用いて、スラック伝搬表80の更新/参照を行う。ここで、伝搬フラグPflagが0で、予測スラックが1以上の場合、命令はローカル・スラックを持つ。また、伝搬フラグPflagが0で、予測スラックが0の場合であっても、信頼性が1以上であれば、命令は次回実行時にローカル・スラックを持つ可能性がある。そこで、これらの場合は、スラック伝搬表80のデスティネーション・レジスタに対応するエントリをクリアする。一方、上記のいずれにも該当しない場合、命令はローカル・スラックを持たず、次回実行時にローカル・スラックを持つ可能性は無いといえる。そこで、この場合は、スラック伝搬表80のデスティネーション・レジスタに対応するエントリに、その命令のプログラム・カウンタ値(PC)、予測スラック、信頼性を書き込む。
命令がローカル・スラックを持つ場合、あるいは、共有化によってスラックを利用できるようになった場合、スラックを伝搬しきい値Pthと比較する。スラックが伝搬しきい値Pth未満である場合、ソース・レジスタ番号でスラック伝搬表80を参照する。参照した結果得られる命令は、共有化情報を受け取らないことが分かる。そこで、この情報に基づき、命令のスラックを予測するとともに、参照したエントリをクリアする。スラックが伝搬しきい値Pth以上である場合、ソース・レジスタ番号に対応する命令は、当該命令から共有化情報を受け取ることが分かる。しかし、当該命令の後続命令からは共有化情報を受け取ることができない可能性がある。そのため、この時点では何も行わない。その後、対応するエントリを再定義する命令をコミットするときに、そのエントリの命令は、依存するすべての命令から、共有化情報を受け取ることが分かる。そこで、この情報に基づき、命令のスラックを予測する。
最後に、共有化情報に基づくスラック予測について説明を行う。共有化情報に基づくスラック予測では、共有化情報を受け取ったかどうかという情報に基づいて、信頼性と予測スラックが計算し、スラック表20Aを更新する。基本的に、発見的ローカル・スラック予測手法と同じ考え方を用いて更新データの計算を行うが、ターゲット・スラック到達条件ではなく、共有化情報を基にしている点が異なる。
以下に、スラック表の更新に関係するパラメータとその内容を示す。なお、予測スラックの最小値Vmin_s=0、信頼性の最小値Cmin_s=0である。
(1)Vmax_s:予測スラックの最大値、
(2)Vmin_s:予測スラックの最小値(=0)、
(3)Vinc_s:予測スラックの1回あたりの増加量、
(4)Vdec_s:予測スラックの1回あたりの減少量、
(5)Cmin_s:信頼性の最小値(=0)、
(6)Cth_s:信頼性のしきい値、
(7)Cinc_s:信頼性の1回あたりの増加量、及び
(8)Cdec_s:信頼性の1回あたりの減少量。
パラメータの種類と内容は、ローカル・スラック予測の場合と同じである。ただし、共有化情報の伝搬には時間がかかるので、パラメータの取るべき値は必ずしも同じになる訳ではない点に注意されたい。
上記のパラメータを用いて、スラック表の更新の流れを説明する。命令が共有化情報を受け取れば信頼性を増加量Cinc_sだけ増加させ、そうでなければ信頼性を減少量Cdec_sだけ減少させる。信頼性がしきい値Cths以上になったら、予測スラックを増加量Vinc_sだけ増加させ、信頼性を0にリセットする。一方、信頼性が0になったら、予測スラックを減少量Vdec_sだけ減少させる。
上記の操作によって、伝搬フラグPflagが0であった命令の予測スラックが1以上になったら、共有化によってスラックが利用できるようになったということなので、伝搬フラグPflagを1とする。逆に、伝搬フラグPflagが1であった命令の予測スラックが0になったら、スラックの共有化ができなくなったということなので、伝搬フラグPflagを0とする。
図42は、図41の更新ユニット30によって実行されるローカル・スラック予測処理を示すフローチャートである。なお、ステップS32,S41については新規な処理であり、ステップ番号の後ろに(*)を付している。ここで、予測スラックと信頼性の数値範囲は、0≦信頼性≦Cth_l,0≦予測スラック≦Vmax_lである。到達条件フラグRflagは第1の実施形態において用いたフラグであって、ターゲット・スラック到達条件が成立しているときに1となり、そうでないときに0となるフラグである。また、判定フラグSflagは第2の実施形態において新たに追加したストア命令の予測スラックの判定フラグであって、ストア命令の予測スラックがしきい値Vth以上であるかどうかを示すフラグである。ここで、ロード命令の場合、フラグSflagに意味はない。フラグSflagは、ストア命令の予測スラックがしきい値Vth以上であれば1にセットし、そうでなければ0にリセットする。フラグSflagのセット/リセットは、ストア命令をLSQ62に割り当てるときに機能ユニット61により行われる。
図42において、まず、ステップS31においてコミットした命令を取得し、ステップS32において伝搬フラグPflag=0であるか否かが判断され、YESのときはステップS33に進む一方、NOのときはステップS41に進む。ステップS33において到達条件フラグRflag=0であるか否かが判断され、YESのときはステップS34に進む一方、NOのときはステップS37に進む。ステップS34において信頼性の値に増加量Cinc_lを加算し、加算結果を信頼性の値として挿入し、ステップS35において信頼性≧Cth_lであるか否かが判断され、YESのときはステップS36に進む一方、NOのときはステップS40に進む。ステップS36では、信頼性の値を0にリセットし、予測スラックの値に増加量Vinc_lを加算し、加算結果を予測スラックの値として挿入した後、ステップS40に進む。一方、ステップS37において信頼性の値から減少量Cdec_lを減算し、減算結果を信頼性の値として挿入した後、ステップS38において信頼性=0であるか否かが判断され、YESのときはステップS39に進む一方、NOのときはステップS40に進む。ステップS39では、信頼性の値を0にリセットし、予測スラックの値に減少量Vdec_lを減算し、減算結果を予測スラックの値として挿入した後、ステップS40に進む。ステップS40において上記の演算結果に基づいてスラック表を更新し、ステップS41において図43の共有化情報の伝搬処理を実行した後、当該ローカル・スラック予測処理を終了する。
図43は、図42のサブルーチンであって、共有化情報の伝搬処理(S41)を示すフローチャートである。
ステップS42において、コミットした命令の予測スラックを伝搬しきい値Pthと比較し、ステップS43において予測スラック≧Pthであるか否かが判断され、YESのときはステップS44に進む一方、NOのときはステップS52に進む。ステップS44においてコミットした命令のデスティネーション・レジスタ番号でスラック伝搬表80を参照し、ステップS45において参照したスラック伝搬表80のエントリからコミットした命令と同じレジスタを定義する先行命令のプログラム・カウンタ値(PC)、予測スラック及び信頼性を読み出し、ステップS46において読み出した情報が有効であるか(クリアされていないか)であるか否かが判断される。ステップS46において、YESのときはステップS47に進む一方、NOのときはステップS49に進む。ステップS47においてコミットした命令と同じレジスタを定義する先行命令のフラグSflagを1にセットし、ステップS48においてコミットした命令と同じレジスタを定義する先行命令のプログラム・カウンタ値(PC)、予測スラック、信頼性及びフラグSflagを更新ユニット30へ送り、ステップS49に進む。
一方、ステップS52では、コミットした命令のソース・レジスタ番号でスラック伝搬表80を参照し、ステップS53において参照したスラック伝搬表80のエントリからコミットした命令の依存元のプログラム・カウンタ値(PC)、予測スラック及び信頼性を読み出す。次いで、ステップS54において、参照したスラック伝搬表80のエントリをクリアし、ステップS55において、コミットした命令の依存元のフラグSflagを0にリセットした後、ステップS56においてコミットした命令の依存元のプログラム・カウンタ値(PC)、予測スラック、信頼性及びフラグSflagを更新ユニット30に送り、ステップS44に進む。
さらに、ステップS49においてコミットした命令の伝搬フラグPflag=1、又はコミットした命令の伝搬フラグPflag=予測スラック=信頼性=0であるか否かが判断され、YESのときはステップS50に進む一方、NOのときはステップS51に進む。ステップS50において参照したスラック伝搬表80のエントリにコミットした命令のPC、予測スラック及び信頼性を書き込み、元のメインルーチンに戻る。一方、ステップS51において参照したスラック伝搬表80のエントリをクリアし、元のメインルーチンに戻る。
図44は、新規な制御フローであって、図41の更新ユニット30によって実行される共有化スラックの予測処理を示すフローチャートである。ここで、予測スラックと信頼性の数値範囲は、0≦信頼性≦Cth_s,0≦予測スラック≦Vmax_sである。
ステップS61において、まず、共有化情報の伝搬処理により、更新ユニット30へ送られてきた命令を取得し、ステップS62においてフラグSflag=1であるか否かが判断され、YESのときはステップS63に進む一方、NOのときはステップS66に進む。ステップS63において信頼性の値に増加量Cinc_sを加算し、加算結果を信頼性の値に挿入し、ステップS64において信頼性≧Cth_s(しきい値)であるか否かが判断され、YESのときはステップS65に進む一方、NOのときはステップS69に進む。ステップS65において信頼性の値を0にリセットし、予測スラックの値に増加量Vinc_sを加算し、加算結果を予測スラックの値として挿入した後、ステップS69に進む。一方、ステップS66において信頼性の値から減少量Cdec_sを減算し、減算結果を信頼性の値として挿入し、ステップS67において信頼性=0であるか否かが判断され、YESのときはステップS68に進む一方、NOのときはステップS69に進む。ステップS68において信頼性の値を0にリセットし、予測スラックの値から減少量Vdec_sを減算し、減算結果を予測スラックの値として挿入した後、ステップS69に進む。ステップS69では、信頼性≧1又は予測スラック≧1であるか否かが判断され、YESのときはステップS70に進む一方、NOのときはステップS71に進む。ステップS70において伝搬フラグPflagを1にセットし、ステップS72に進む。一方、ステップS71では、伝搬フラグPflagを0にリセットし、ステップS72に進む。ステップS72では、上記の演算結果に基づいてスラック表20Aを更新し、当該強化スラックの予測処理を終了する。
以上説明したように、第3の実施形態によれば、共有化情報に基づくスラック予測方法である第2の予測方法を用いて、ローカル・スラックを持つ命令に基づいて、ローカル・スラックを持たない命令間で依存先から依存元へと共有可能なスラックが存在するという共有化情報を伝搬させて行き、当該共有化情報に基づいて所定の発見的な手法を用いて各命令が利用するローカル・スラックの量を決定し、ローカル・スラックを持たない命令がローカル・スラックを利用することができるように制御する。従って、ローカル・スラックを持たない命令がローカル・スラックを利用することができるようになり、従来技術に比較して簡単な構成で、ローカル・スラックを有効にかつ十分に利用してローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができる。
第4の実施形態.
本実施形態では、スラックの分布に着目して、予測精度を向上する手法を提案する。発見的手法を用いてローカル・スラックを予測する機構を提案する。ローカル・スラックとは、他の命令に影響を与えることなく、その命令の実行レイテンシを増加させることのできるサイクル数である。本実施形態に係る提案機構は、分岐予測ミスやオペランド・フォワーディングなど命令実行時の振る舞いを観測しながら、予測するローカル・スラックを増減させ、実際のローカル・スラックに近づけて行くことを特徴とする。
1.従来技術及び第1の実施形態の問題点.
実際のローカル・スラック(実スラック)は動的に変化する。そのため、この変化に対応する手法が提案されている(例えば、非特許文献6及び第1の実施形態参照。)。しかし、実スラックの変化に十分追従できず、性能低下を招く可能性がある。これを防ぐため、予測スラックの増加を緩やかにする手法が提案されている(第1の実施形態参照。)が、スラックが1以上存在すると予測できる命令の数(スラック命令数)が減少してしまうという問題点があった。
そこで、本実施形態では、スラックの分布に着目して、予測精度を向上する手法を提案する。この手法では、従来機構に修正を加え、スラックの値に応じて、スラックの更新に用いるパラメータを変更できるようにする。こうすることにより、スラック命令数を維持したまま、性能低下を抑制できるようになる。
2.スラック.
スラックに関しては、従来技術及び第1の実施形態において詳述した。第1の実施形態において述べた通り、ローカル・スラックは、グローバル・スラックとは異なり、求めることだけでなく、利用することも容易である。そこで、本実施形態では、これ以降、「ローカル・スラック」を対象として議論を進める。また、「ローカル・スラックを」、単に、「スラック」と表記する。
3.第1の実施形態のスラック予測機構.
第1の実施形態に係るスラック予測機構(以下、比較例機構という。)の概要とその問題点について述べる。比較例機構の詳細については、第1の実施形態において詳述した。
時刻に基づく機構では、ある命令がデータを定義した時刻と、そのデータが他の命令によって参照された時刻の差からスラックを計算し、次回実行時のスラックは計算によって得たスラックと同じになると予測する。一方、発見的手法に基づく機構では、分岐予測ミスや、フォワーディングといった、命令実行時の振る舞いを観測しながら、予測スラックを増減させ、予測スラックを実スラックに近づけて行く。どちらの手法も同程度の予測精度を達成できる。
従来手法は、過去のスラックを元にして、次回実行時のスラックを予測する。実際のスラック(実スラック)が動的に変化し、予測したスラック(予測スラック)を下回ると、性能に悪影響を与える。そのため、従来手法は、実スラックの変化に対応する機構を幾つか備えている。しかし、実スラックが急速に増減を繰り返す場合、その変化に十分追従することができない。そこでさらに、発見的手法に基づく機構では、予測スラックの増加を慎重に行い、予測スラックの減少を迅速に行うことで、予測スラックが実スラックをできるだけ超えないようにしている(第1の実施形態参照。)。
しかし、性能低下を防ぐために、予測スラックの増加を緩やかにすると、スラックが1以上あると予測できる命令の数(スラック命令数)が減少してしまうという問題がある。スラック命令数の減少は、スラックを利用する機会の減少を意味する。そのため、スラック命令数を維持しつつ、性能低下を防ぐ仕組みを構築することが重要となる。
4.スラックの予測精度を向上させる手法.
スラックの分布には偏りがある。具体的には、スラックの分布は、0が最も多く、それ以降の値は急速に少なくなるという特徴を持つ。本発明者は、この性質に基づいて、予測スラックの増減の緩急を制御することで、スラック命令数をできるだけ維持しつつ、性能低下を抑制できるのではないかと考えた。本章では、まずスラックの分布について述べ、次にこの分布を利用した、スラックの予測方法を提案する。
4.1.スラックの分布.
本発明者は、スラックの分布を調査するため、プロセッサシミュレータ上で公知のSPECint20のベンチマークを実行し、ある命令がデータを定義した時刻と、そのデータが他の命令によって参照された時刻の差からスラックを計算した。以下では、まず調査環境の詳細を示し、その後、調査結果について述べる。
4.1.1.測定環境.
スラックの分布を調査するために用いた環境について述べる。シミュレータには、公知のSimpleSalr Toolのスーパースカラ・プロセッサ用シミュレータを用いた。命令セットには公知のMIPSR10を拡張したSimpleSalr/PISAを用いた。ベンチマーク・プログラムは、公知のSPECint2000のbzip2、gcc、gzip、mcf、parser、perlbmk、vortex、vprの8本を使用した。プログラムgccでは1G命令、その他のプログラムでは2G命令をスキップした後、10M命令を実行した。表7に測定条件を示す。
Figure 2007293814
4.1.2.調査結果.
図45は、本発明者の調査結果に係る、実スラックに対する実行命令数に占める割合を示すグラフである。図45では調査結果をベンチマーク平均で示す。図45の横軸は全実行命令に占める割合であり、その縦軸はスラックである。図45より、スラックが0である命令の割合が最も多く、スラックが大きくなるに連れて命令の割合は急速に低下して行くことが分かる。
4.2.スラックの分布を利用した予測精度向上手法.
調査結果より、ランダムに値が変化すると仮定すると、スラック予測の成功率は、予測したスラックの値が小さい程高いと考えられる。つまり、予測成功率は、予測スラックが0の場合が最も高く、予測スラックの値が大きくなる程、予測成功率は低くなって行くと考えられる。
そこで、従来の発見的手法に基づく機構に修正を加え、スラックの値に応じて、予測スラックの更新方法を変更できるようにする。例えば、予測スラックは、0から1に増加させる場合は迅速に変化させ、1以上の値から増加させる場合は慎重に行うようにする。これにより、成功する確率を考慮して予測スラックの更新方法を決定できるようになるため、スラック命令数の維持と、性能低下の抑制を同時に実現することができるようになる。また、予測スラックの更新方法の変更は、スラック値に応じて更新パラメータを切り替えるだけで済むため、実現は容易である。なお、更新パラメータを切り替えるポイントは、多数設定することが可能であるが、多くなる程、ハードウェアは複雑度になるので、それを考慮して、設定する必要がある。
5.提案機構の構成.
図46は、第1の実施形態に係る更新ユニット30を備えたプロセッサ10の構成を示すブロック図である。図46は、図19の概要を示すものである。
図46において、更新ユニット30は、2個の加算器40,50と、3個のマルチプレクサ91,92,110と、4個の比較器93,94,111,112とを備えて構成される。ここで、各マルチプレクサ91,92,110及び各比較器94,112に入力される各パラメータは第1の実施形態において説明したものである。プロセッサ10から出力される信頼性は、加算器40の第1の入力端子に入力され、プロセッサ10から出力される到達条件フラグRflagはマルチプレクサ91の切り替え制御信号として入力され、マルチプレクサ91は、到達条件フラグRflag=0のとき増加量Cincを選択して加算器40の第2の入力端子に出力する一方、到達条件フラグRflag=1のとき減少量Cdecにマイナスを付加してなる−Cdecを選択して加算器40の第2の入力端子に出力する。加算器40は入力される2つのデータ値を加算し、加算結果のデータ値を信頼性の更新値としてスラック表20に出力するとともに、比較器93及び94に出力する。さらに、プロセッサ10からの予測スラックは、加算器50の第2の入力端子に入力される。
比較器93は、入力されるデータ値を0と比較し、0以下のときデータ値1をマルチプレクサ92の第2の制御信号入力端子に出力する一方、1以上のときデータ値0をマルチプレクサ92の第2の制御信号入力端子に出力する。また、比較器94は、入力されるデータ値をしきい値Cthと比較し、入力データ値≧Cthのときデータ値1をマルチプレクサ92の第1の制御信号入力端子に出力する一方、入力データ値<Cthのときデータ値0をマルチプレクサ92の第1の制御信号入力端子に出力する。ここで、マルチプレクサ92への各制御信号入力端子への制御信号をCS91(A,B)で表し、Aは第1の制御信号端子への入力値であり、Bは第2の制御信号入力端子への入力値である。マルチプレクサ110への各制御信号入力端子への制御信号も同様にCS110(A,B)で表す。マルチプレクサ92は制御信号CS92(0,0)のときデータ値0を選択して加算器50の第1の入力端子に出力し、制御信号CS92(0,1)のとき減少量Vdecにマイナスを付加してなるデータ値−Vdecを選択して加算器50の第1の入力端子に出力し、制御信号CS92(1,*)(ここで、*は不定値をいう。以下、同様である。)のとき増加量Vincを選択して加算器50の第1の入力端子に出力する。加算器50は入力される2つのデータ値を加算し、加算結果のデータ値を比較器111,112及びマルチプレクサ110の第3の入力端子に出力する。
比較器111は入力されるデータ値を0と比較し、入力データ値≦0であるとき、データ値1を出力する一方、そうでないときにデータ値0を出力する。比較器112は入力されるデータ値を最大値Vmaxと比較し、入力データ値≧Vmaxであるとき、データ値1を出力する一方、そうでないときにデータ値0を出力する。マルチプレクサ110は制御信号CS110(0,0)のときにデータ値0を選択して予測スラックの更新値としてスラック表20に出力し、制御信号CS110(1,*)のときに最大値Vmaxを選択して予測スラックの更新値としてスラック表20に出力し、制御信号CS110(0,1)のときに加算器50からのデータ値を選択して予測スラックの更新値としてスラック表20に出力する。
図48は第1の実施形態に係るローカル・スラック予測処理を示すフローチャートである。ここで、予測スラックと信頼性の数値範囲は、0≦信頼性≦Cth,0≦予測スラック≦Vmaxである。
図48において、ステップS80においてコミットした命令を取得し、ステップS81において到達条件フラグRflag=0であるか否かが判断され、YESのときはステップS82に進む一方、NOのときはステップS85に進む。ステップS82において信頼性の値に増加量Cincを加算し、加算結果を信頼性として挿入し、ステップS83において信頼性≧Cth(しきい値)であるか否かが判断される。ステップS83において、YESのときはステップS84に進む一方、NOのときはステップS88に進む。ステップS84において信頼性を0にリセットし、予測スラックの値に増加量Vincを加算し、加算結果を予測スラックに挿入し、ステップS88に進む。一方、ステップS85において信頼性の値から減少量Cdecを減算し、減算結果を信頼性に挿入し、ステップS86において信頼性=0であるか否かが判断される。ステップS86において、YESのときはステップS87に進む一方、NOのときはステップS88に進む。ステップS87において信頼性を0にリセットし、予測スラックの値から減少量Vdecを減算し、減算結果を予測スラックに挿入した後、ステップS88に進む。そして、ステップS88では、上記の演算結果に基づいてスラック表20を更新し、当該ローカル・スラック予測処理を終了する。
図47は、本発明の第4の実施形態に係る更新ユニット30Aを備えたプロセッサ10の構成を示すブロック図である。第4の実施形態に係る提案機構は、プロセッサ10に対して、スラック表20と更新ユニット30Aをさらに備えて構成されたことを特徴とする。ここで、スラック表20は命令毎の予測スラックと信頼性を保持する。更新ユニット30Aは、スラック表20の予測スラックと信頼性を更新するための論理回路である。図47の提案機構は、図46の比較機構に比較して、更新ユニット30Aの構成が以下のように異なることを特徴としている。
(1)比較器100をさらに備える。
(2)比較器100と、マルチプレクサ91との間に、2個のマルチプレクサ101,102を備える。
(3)比較器100と、比較器94との間に、マルチプレクサ103を備える。
(4)比較器100と、マルチプレクサ92との間に2個のマルチプレクサ104,105を備える。
プロセッサ10は、主記憶装置9からの命令のフェッチ時に、スラック表20にアクセスし、その命令の予測スラックと信頼性を得る。命令実行時に以下の振る舞いが観測されると、予測スラックが実スラックに到達したと判断して、その命令に対応する到達条件フラグRflagを1にセットする。分岐予測ミス、キャッシュミス、フォワーディング。命令コミット時に、コミットした命令の予測スラック、到達条件フラグRflag、信頼性を更新ユニット30Aに送る。更新ユニット30Aは、プロセッサ10から受け取ったこれらの値を入力として、新たな予測スラックと信頼性を計算し、スラック表20を更新する。スラック表20は、命令毎に予測スラックと信頼性を保持する。本実施形態では、命令実行時の振舞を観測して、予測スラックが実スラックよりも小さいかどうかを判定する。信頼性は、この判定がどの程度信頼できるかを示している。
本実施形態では、更新ユニット30Aの構成をできるだけ簡潔にするため、更新パラメータを切り替えるしきい値Sthを1箇所に限定する。従って、各更新パラメータは、スラックがこのしきい値Sth未満のときに用いるパラメータと、しきい値Sth以上のときに用いるパラメータの2種類に分かれる。図47において、各パラメータには、前者の場合s0が、後者の場合s1が付加されている。
更新ユニット30は、比較器100を用いて、予測スラックとしきい値Sthの大小関係を調べる。そして、その結果に基づき、マルチプレクサ91,92,101−105を用いて、更新に用いるパラメータを選択する。選択されたパラメータを用いて、信頼性と予測スラックを計算する。具体的に述べると、信頼性は、到達条件フラグRflagが0のとき増加量Cinc_s0(Cinc_s1)だけ増加させ、到達条件フラグRflagが1の場合減少量Cdec_s0(Cdec_s1)だけ減少させる。そして、予測スラックは、信頼性がしきい値Cth_s0(Cth_s1)以上であれば増加量Vinc_s0(Vinc_s1)増加させ、信頼性が0であれば減少量Vdec_s0(Vdec_s1)だけ減少させる。どちらでもなければそのままの値を維持する。なお、ここで、( )内は上述の後者の場合である。
図47の構成について、図46との相違点について以下詳細説明する。図47において、比較器100はプロセッサ10から入力される予測スラックを所定のしきい値Sthと比較し、予測スラック≧Sthであるときデータ値1をマルチプレクサ101,102,103,104の各制御信号入力端子に出力する一方、そうでないとき、データ値0を同様に出力する。マルチプレクサ101は制御信号のデータ値0のとき増加量Cinc_s0を選択してマルチプレクサ91の第1の入力端子に出力する一方、制御信号のデータ値1のとき増加量Cinc_s1を選択してマルチプレクサ91の第1の入力端子に出力する。マルチプレクサ102は制御信号のデータ値0のとき減少量のマイナス値−Cdec_s0を選択してマルチプレクサ91の第2の入力端子に出力する一方、制御信号のデータ値1のとき減少量のマイナス値−Cdec_s1を選択してマルチプレクサ91の第2の入力端子に出力する。マルチプレクサ103は制御信号のデータ値0のときしきい値Cth_s0を選択して比較器94の制御信号入力端子に出力する一方、制御信号のデータ値1のときしきい値Cth_s1を選択して比較器94の制御信号入力端子に出力する。マルチプレクサ104は制御信号のデータ値0のとき増加量Vinc_s0を選択してマルチプレクサ92の第1の入力端子に出力する一方、制御信号のデータ値1のとき増加量Vinc_s1を選択してマルチプレクサ92の第1の入力端子に出力する。マルチプレクサ105は制御信号のデータ値0のとき減少量のマイナス値−Vdec_s0を選択してマルチプレクサ92の第2の入力端子に出力する一方、制御信号のデータ値1のとき減少量のマイナス値−Vdec_s1を選択してマルチプレクサ92の第2の入力端子に出力する。
第4の実施形態において、調整に関係する更新パラメータとその内容を以下に再掲する。
Vmax:予測スラックの最大値、
Vmin:予測スラックの最小値(=0)、
Vinc:予測スラックの1回あたりの増加量、
Vdec:予測スラックの1回あたりの減少量、
Vmax:信頼性の最大値(=Cth)、
Cmin:信頼性の最小値(=0)、
Cth:信頼性のしきい値、
Cinc:信頼性の1回あたりの増加量、及び
Cdec:信頼性の1回あたりの減少量。
ただし、常に、最大値Vmin=0、最小値Cmin=0である。また、信頼性は、しきい値Cth以上になると0にリセットされるので、常に、最大値Cmax=Cthである。従って、変更することのできる更新パラメータは以下の6種類となる:Vmax,Vinc,Vdec,Cth,Cinc,Cdec。
図48のフローチャートには、信頼性と予測スラックを計算する手順を示しおり、図48に示したように、コミットした命令のターゲット・スラック到達条件が成立していなければ(すなわち、到達条件フラグRflagが0であれば)、信頼性を増加量Cincだけ増加させ、成立していれば(すなわち、到達条件フラグRflagが1であれば)、減少量Cdecだけ減少させる。信頼性がしきい値Cth以上になったら、予測スラックを増加量Vincだけ増加させ、信頼性を0にリセットする。一方、信頼性が0になったら、予測スラックを減少量Vdecだけ減少させる。
そして、更新パラメータが、信頼性や予測スラックの更新にどのように影響するかを定性的に説明する。図49は、第4の実施形態に係る手法による効果を示す図であって、更新パラメータと予測スラックの変化との関係を示すグラフである。すなわち、図49に説明の理解を容易にするため、予測スラックの変化の仕方と更新パラメータとの関係を示す。簡単のため、一定サイクル毎に同じ命令が実行されるプログラムを仮定する。このサイクルをαとする。図49において、縦軸はスラックを示し、横軸は時刻を示す。折れ線グラフは、点線が実スラックの場合、実線が予測スラックの場合である。
予測スラックの最大値Vmaxを増加させると、予測スラックの平均(平均予測スラック)が大きくなる。その結果、スラック命令数も増加する。しかし、予測ミス(ここでは予測スラックが実スラックを上回ること)の発生する確率が高くなり、性能が低くなる。
増加量Vincを増加させると、平均予測スラックが大きくなる。その結果、スラック命令数も増加する。しかし、予測ミスの発生率が高くなり、性能が低下する。また、予測スラックの増加量を細かく制御できなくなるため、収束性が悪くなる。ここでは予測スラックの取りうる値が実スラックと一致しない場合が増えることを指す。
減少量Vdecを増加させると、予測ミスの発生率が低くなり、性能が向上する。しかし、平均予測スラックは小さくなる。その結果、スラック命令数も減少する。また、予測スラックの減少量を細かく制御できなくなるため、収束性が悪くなる。
しきい値Cthは、増加量Cinc及び減少量Cdecと関連が強いため、これらと組み合わせて説明する。しきい値Cthと増加量Cincの比であるCth/Cincを増加させると、予測スラックを増加させる間隔(図49における、Cth/Cinc×α)が広くなる。つまり、予測スラックを増加させる頻度が低くなる。これにより、予測ミスの発生率が低くなり、性能が向上する。しかし、平均予測スラックは小さくなる。その結果、スラック命令数も減少する。
しきい値Cthと減少量Cdecの比であるCth/Cdecを増加させると、予測スラックを減少させる間隔(図49における、Cth/Cdec×α)が広くなる。つまり、予測スラックを減少させる頻度が低くなる。これにより、平均予測スラックは大きくなる。その結果、スラック命令数も増加する。しかし、予測ミスの発生率が高くなり、性能が低下する。
以上説明したように、本実施形態によれば、命令の実行に際して上記スラック表を参照して当該命令の予測スラックを取得するとともに、上記取得した予測スラックの分だけ実行レイテンシを増加させ、上記命令の実行時の振る舞いに基づき、当該命令の現状のローカル・スラックの適正値であるターゲット・スラックに上記予測スラックが到達したか否かを推定し、上記予測スラックが上記ターゲット・スラックに到達したとの推定がなされるまで、上記予測スラックを上記命令の実行毎に徐々に増加させる。従って、命令のローカル・スラックの予測値(予測スラック)を計算で直接的に求めるのではなく、命令の実行時の振る舞いを観測しながら、適正値に到達するまで予測スラックを徐々に増加させることで求めているので、予測スラックの直接演算に要する複雑な機構は不要であり、より簡易な構成でローカル・スラックの予測を行うことができる。
また、ローカル・スラックの値に応じて、スラックの更新に用いるパラメータを変更するようにしたので、スラック命令数を維持したまま、性能低下を抑制できるようになる。それ故、従来技術に比較して簡単な構成で、ローカル・スラックの予測を行い、さらに高速でプログラム命令の実行を行うことができる。
本発明に係るプロセッサ装置とその処理方法によれば、所定のしきい値以上の予測スラックを有するストア命令を、当該ストア命令に後続するロード命令とデータの依存関係がないと予測して判断し、当該ストア命令のメモリ・アドレスが判明していなくても上記後続するロード命令を投機的に実行する。従って、予測が正しければ、ストア命令のスラックの利用によって、当該ストア命令とはデータ依存関係がないロード命令の実行が遅延することはなく、プロセッサ装置の性能への悪影響を抑制することができる。また、スラック予測機構の出力結果を利用するために、ストア命令とロード命令間の依存関係を予測するためのハードウェアを新たに用意する必要がない。それ故、従来技術に比較して簡単な構成で、ローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができる。
また、本発明に係るプロセッサ装置とその処理方法によれば、共有化情報に基づくスラック予測方法である第2の予測方法を用いて、ローカル・スラックを持つ命令に基づいて、ローカル・スラックを持たない命令間で依存元から依存先へと共有可能なスラックが存在するという共有化情報を伝搬させて行き、当該共有化情報に基づいて所定の発見的な手法を用いて各命令が利用するローカル・スラックの量を決定し、ローカル・スラックを持たない命令がローカル・スラックを利用することができるように制御する。従って、ローカル・スラックを持たない命令がローカル・スラックを利用することができるようになり、従来技術に比較して簡単な構成で、ローカル・スラックを有効にかつ十分に利用してローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができる。
さらに、本発明に係るプロセッサ装置とその処理方法によれば、命令の実行に際して上記スラック表を参照して当該命令の予測スラックを取得するとともに、上記取得した予測スラックの分だけ実行レイテンシを増加させ、上記命令の実行時の振る舞いに基づき、当該命令の現状のローカル・スラックの適正値であるターゲット・スラックに上記予測スラックが到達したか否かを推定し、上記予測スラックが上記ターゲット・スラックに到達したとの推定がなされるまで、上記予測スラックを上記命令の実行毎に徐々に増加させる。従って、命令のローカル・スラックの予測値(予測スラック)を計算で直接的に求めるのではなく、命令の実行時の振る舞いを観測しながら、適正値に到達するまで予測スラックを徐々に増加させることで求めているので、予測スラックの直接演算に要する複雑な機構は不要であり、より簡易な構成でローカル・スラックの予測を行うことができる。
また、ローカル・スラックの値に応じて、スラックの更新に用いるパラメータを変更するようにしたので、スラック命令数を維持したまま、性能低下を抑制できるようになる。それ故、従来技術に比較して簡単な構成で、ローカル・スラックの予測を行い、さらに高速でプログラム命令の実行を行うことができる。
(a)は従来技術に係るスラックを説明するために用いる複数の命令を含むプログラムの一例を示す図であり、(b)は上記プログラムの各命令をプロセッサ装置上で実行する過程を示すタイミングチャートである。 従来技術に係るローカル・スラック予測機構を備えたプロセッサ装置の構成を示すブロック図である。 (a)は本発明の第1の実施形態に係るローカル・スラックを発見的に予測する手法を用いたプロセッサ装置の基本動作であって、第1回目の実行動作を示すタイミングチャートであり、(b)は上記プロセッサ装置の基本動作であって、第2回目の実行動作を示すタイミングチャートであり、(c)は上記プロセッサ装置の基本動作であって、第3回目の実行動作を示すタイミングチャートである。 (a)は図3の基本動作の問題点を説明するためのサイクル対スラック特性を示すグラフであり、(b)はその問題点の解決手法を説明するためのサイクル対スラック特性を示すグラフである。 (a)は図4の解決手法の問題点を説明するためのサイクル対スラック特性を示すグラフであり、(b)はその問題点の解決手法を説明するためのサイクル対スラック特性を示すグラフである。 本発明の第1の実施形態に係るスラック表20を備えたプロセッサ10の構成を示すブロック図である。 図6の提案機構の実施例のシミュレーション結果であって、各プログラムにおける実スラックに対する実行命令数に占める割合を示すグラフである。 図6の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Vmax=1における各モデルに対する実行命令数に占める割合(スラック予測精度)を示すグラフである。 図6の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Vmax=5における各モデルに対する実行命令数に占める割合(スラック予測精度)を示すグラフである。 図6の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Vmax=15における各モデルに対する実行命令数に占める割合(スラック予測精度)を示すグラフである。 図6の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Vmax=1において各モデルにおける実スラックと予測スラックの差に対する実行命令数に占める割合を示すグラフである。 図6の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Vmax=5において各モデルにおける実スラックと予測スラックの差に対する実行命令数に占める割合を示すグラフである。 図6の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Vmax=15において各モデルにおける実スラックと予測スラックの差に対する実行命令数に占める割合を示すグラフである。 図6の提案機構の実施例のシミュレーション結果であって、各モデルにおける正規化されたIPC(Instructions Per Clock cycle:1クロック当りに処理できる平均命令数)を示すグラフである。 図6の提案機構の実施例のシミュレーション結果であって、各モデルにおけるスラック命令数の割合を示すグラフである。 図6の提案機構の実施例のシミュレーション結果であって、各モデルにおける平均予測スラックを示すグラフである。 図6の提案機構の別の実施例のシミュレーション結果であって、予測スラックの最大値Vmaxの各値に対するスラック命令数とIPCとの関係を示すグラフである。 図6の提案機構の別の実施例のシミュレーション結果であって、IPCに対する予測スラックの総積算値を示すグラフである。 本発明の第1の実施形態に係る更新ユニット30の構成を示すブロック図である。 従来技術に係る従来機構のシミュレーション結果であって、ラインサイズに対するスラック長のアクセス時間を示すグラフである。 図19の更新ユニット30を備えた提案機構のシミュレーション結果であって、ラインサイズに対するスラック長のアクセス時間を示すグラフである。 図19の更新ユニット30を備えた提案機構のシミュレーション結果であって、ラインサイズに対するメモリ定義表のアクセス時間を示すグラフである。 本発明の第1の実施形態の第1の変形例に係る、スラック表20を備えたプロセッサ10Aの構成を示すブロック図である。 図23のプロセッサ10Aの実施例のシミュレーション結果であって、各プログラムに対する正規化されたIPCを示すグラフである。 図23のプロセッサ10Aの実施例のシミュレーション結果であって、各プログラムに対する正規化されたEDP(Energy Delay Product:消費エネルギーと、プロセッサ10Aの実行時間の積)を示すグラフである。 図23のプロセッサ10Aの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたIPCを示すグラフである。 図23のプロセッサ10Aの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたEDP(Energy Delay Product:消費エネルギーと、プロセッサの実行時間の積)を示すグラフである。 本発明の第1の実施形態の第2の変形例に係る、スラック表20及び2個のインデクス生成回路22A,22Bを備えたプロセッサ10の構成を示すブロック図である。 第1の実施形態に係るスラック予測機構において、制御フローを考慮せずにスラック予測を行うときの動作例を示す図である。 図28のスラック予測機構において、制御フローを考慮してスラック予測を行うときの第1の動作例を示す図である。 図28のスラック予測機構において、制御フローを考慮してスラック予測を行うときの第2の動作例を示す図である。 (a)は、従来技術においてストア命令のスラックを利用したときにメモリの曖昧性が原因で発生する問題点を説明するための図であって、デコード前のプログラムを示す図であり、(b)は、従来技術においてストア命令のスラックを利用したときにメモリの曖昧性が原因で発生する問題点を説明するための図であって、デコード後のプログラムを示す図である。 (a)は、プロセッサの処理において、メモリの曖昧性がスラックの利用に与える影響を説明するために用いる図であって、スラックを利用しない場合のプログラムを実行する過程を示すタイミングチャートであり、(b)は、プロセッサの処理において、メモリの曖昧性がスラックの利用に与える影響を説明するために用いる図であって、スラックを利用する場合のプログラムを実行する過程を示すタイミングチャートである。 本発明の第2の実施形態に係る、メモリの曖昧性の投機的除去を示すタイミングチャートである。 図34のメモリの曖昧性の投機的除去機構を備えたプロセッサ10Bの構成を示すブロック図である。 図35のロード及びストアキュー(LSQ)62にエントリされるデータのフォーマットを示す図である。 ロード命令に対する図35のLSQ62の処理を示すフローチャートである。 ストア命令に対する図35のLSQ62の処理を示すフローチャートである。 従来技術に係るスラックの説明に用いるプログラムを示すタイミングチャートである。 (a)は従来技術の手法に係るスラックの利用を説明するプログラムを示すタイミングチャートであり、(b)は本発明の第2の実施形態に係る、スラック命令数を増加させる手法に係るスラックの利用を説明するプログラムを示すタイミングチャートである。 本発明の第3の実施形態に係る、スラック伝搬表80などを備えたプロセッサ10の構成を示すブロック図である。 図41の更新ユニット30によって実行されるローカル・スラック予測処理を示すフローチャートである。 図42のサブルーチンであって、共有化情報の伝搬処理(S41)を示すフローチャートである。 図41の更新ユニット30によって実行される共有化スラックの予測処理を示すフローチャートである。 本発明者の調査結果に係る、実スラックに対する実行命令数に占める割合を示すグラフである。 第1の実施形態に係る更新ユニット30を備えたプロセッサ10の構成を示すブロック図である。 本発明の第4の実施形態に係る更新ユニット30Aを備えたプロセッサ10の構成を示すブロック図である。 第1の実施形態に係るローカル・スラック予測処理を示すフローチャートである。 第4の実施形態に係る手法による効果を示す図であって、更新パラメータと予測スラックの変化との関係を示すグラフである。
符号の説明
1,1A…実行コア、
2…レジスタ定義表、
3…メモリ定義表、
4…マルチプレクサ、
5…減算器、
6…スラック表、
7…フロントエンド、
8…バックエンド、
9…主記憶装置、
10,10A,10B…プロセッサ、
11…フェッチ・ユニット、
11A…命令キャッシュ、
12…デコード・ユニット、
12a…命令デコーダ部、
12b…タグ割当部、
13…命令ウィンドウ(I−win)、
14…レジスタ・ファイル(RF)、
14A…リザベーション・ステーション、
15,15a,15b,15A,15B…実行ユニット(EU)、
16…リオーダ・バッファ(ROB)、
17…FIFO、
20,20A…スラック表、
21A,21B…分岐履歴レジスタ、
22A,22B…インデクス生成回路、
30,30A…更新ユニット、
31,32、35,36…アンドゲート、
33,37…オアゲート、
34,38,39…マルチプレクサ、
40,50…加算器、
41,42,51,52…アンドゲート、
43,44,45,46,53,54,55,56…インバータ、
47,48,49,57,58,59…マルチプレクサ、
60…スラック予測機構、
61…機能ユニット、
62…ロード及びストアキュー(LSQ)、
63…データキャッシュ、
71…オペコード、
72,74,75,77…フラグ、
73…メモリ・アドレス、
76…ストアデータ、
80…スラック伝搬表、
91,95,101,102,103,104,105,110…マルチプレクサ、
92,96…加算器、
93,94,100、111,112…比較器、
120…排他的論理和ゲート。

Claims (6)

  1. 主記憶装置のメモリ・アドレスに記憶されかつプロセッサ装置で実行される命令のローカル・スラックの予測値である予測スラックを予測し、上記命令をその予測スラックを利用して実行するプロセッサ装置において、
    所定のしきい値以上の予測スラックを有するストア命令を、当該ストア命令に後続するロード命令とデータの依存関係がないと予測して判断し、当該ストア命令のメモリ・アドレスが判明していなくても上記後続するロード命令を投機的に実行する制御手段を備えたことを特徴とするプロセッサ装置。
  2. 上記制御手段は、ロード命令のメモリ・アドレスが判明しさらに上記ロード命令に先行するストア命令が、
    (1)メモリ・アドレスが判明し、もしくは、
    (2)メモリ・アドレスが判明していないが上記ストア命令の予測スラックが上記しきい値以上であるとき、
    上記ロード命令と、それに先行しメモリ・アドレスが判明しているストア命令とのアドレス比較を行い、メモリ・アドレスが判明しておらずかつ上記しきい値以上のストア命令に対して当該ロード命令との依存関係が無いと判断したとき、メモリアクセスを行い、そうでなければ、依存するストア命令からフォワーディングによってデータを得ることにより、メモリの依存関係を予測して当該ロード命令を投機的に実行することを特徴とする請求項1記載のプロセッサ装置。
  3. 上記制御手段は、上記しきい値以上の予測スラックを有するストア命令のメモリ・アドレスが判明した後、当該ストア命令のメモリ・アドレスと、実行を完了した後続するロード命令のメモリ・アドレスとを比較し、当該メモリ・アドレスが一致しなければ、当該メモリ依存の予測は成功と判断してメモリアクセスを行う一方、当該メモリ・アドレスが一致するときは当該メモリ依存の予測は失敗と判断して、当該メモリ・アドレスが一致したロード命令とそれ以降の命令を上記プロセッサ装置からこれらの命令をフラッシュして実行をやり直すことを特徴とする請求項2記載のプロセッサ装置。
  4. 主記憶装置のメモリ・アドレスに記憶されかつプロセッサ装置で実行される命令のローカル・スラックの予測値である予測スラックを予測し、上記命令をその予測スラックを利用して実行するプロセッサ装置の処理方法において、
    所定のしきい値以上の予測スラックを有するストア命令を、当該ストア命令に後続するロード命令とデータの依存関係がないと予測して判断し、当該ストア命令のメモリ・アドレスが判明していなくても上記後続するロード命令を投機的に実行する制御ステップを含むことを特徴とするプロセッサ装置の処理方法。
  5. 上記制御ステップは、ロード命令のメモリ・アドレスが判明しさらに上記ロード命令に先行するストア命令が、
    (1)メモリ・アドレスが判明し、もしくは、
    (2)メモリ・アドレスが判明していないが上記ストア命令の予測スラックが上記しきい値以上であるとき、
    上記ロード命令と、それに先行しメモリ・アドレスが判明しているストア命令とのアドレス比較を行い、メモリ・アドレスが判明しておらずかつ上記しきい値以上のストア命令に対して当該ロード命令との依存関係が無いと判断したとき、メモリアクセスを行い、そうでなければ、依存するストア命令からフォワーディングによってデータを得ることにより、メモリの依存関係を予測して当該ロード命令を投機的に実行することを含むことを特徴とする請求項4記載のプロセッサ装置の処理方法。
  6. 上記制御ステップは、上記しきい値以上の予測スラックを有するストア命令のメモリ・アドレスが判明した後、当該ストア命令のメモリ・アドレスと、実行を完了した後続するロード命令のメモリ・アドレスとを比較し、当該メモリ・アドレスが一致しなければ、当該メモリ依存の予測は成功と判断してメモリアクセスを行う一方、当該メモリ・アドレスが一致するときは当該メモリ依存の予測は失敗と判断して、当該メモリ・アドレスが一致したロード命令とそれ以降の命令を上記プロセッサ装置からこれらの命令をフラッシュして実行をやり直すことを含むことを特徴とする請求項5記載のプロセッサ装置の処理方法。
JP2007029487A 2006-03-28 2007-02-08 プロセッサ装置とその処理方法 Pending JP2007293814A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2007029487A JP2007293814A (ja) 2006-03-28 2007-02-08 プロセッサ装置とその処理方法
US11/717,063 US20070234014A1 (en) 2006-03-28 2007-03-13 Processor apparatus for executing instructions with local slack prediction of instructions and processing method therefor
US12/634,069 US20100095151A1 (en) 2006-03-28 2009-12-09 Processor Apparatus for Executing Instructions with Local Slack Prediction of Instructions and Processing Method Therefor

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2006088454 2006-03-28
JP2007029487A JP2007293814A (ja) 2006-03-28 2007-02-08 プロセッサ装置とその処理方法

Publications (1)

Publication Number Publication Date
JP2007293814A true JP2007293814A (ja) 2007-11-08

Family

ID=38764354

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007029487A Pending JP2007293814A (ja) 2006-03-28 2007-02-08 プロセッサ装置とその処理方法

Country Status (1)

Country Link
JP (1) JP2007293814A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015232902A (ja) * 2012-05-04 2015-12-24 アップル インコーポレイテッド ロードストア依存関係予測器のコンテンツマネージメント
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015232902A (ja) * 2012-05-04 2015-12-24 アップル インコーポレイテッド ロードストア依存関係予測器のコンテンツマネージメント
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing

Similar Documents

Publication Publication Date Title
US20070234014A1 (en) Processor apparatus for executing instructions with local slack prediction of instructions and processing method therefor
KR100973951B1 (ko) 오정렬 메모리 액세스 예측
JP4027620B2 (ja) 分岐予測装置、プロセッサ、及び分岐予測方法
US6178498B1 (en) Storing predicted branch target address in different storage according to importance hint in branch prediction instruction
US8285937B2 (en) Fused store exclusive/memory barrier operation
KR102271992B1 (ko) 데이터 처리장치 및 추론 벡터 연산의 수행 제어방법
EP0966710A1 (en) Penalty-based cache storage and replacement techniques
US20180349144A1 (en) Method and apparatus for branch prediction utilizing primary and secondary branch predictors
US20150339132A1 (en) Dynamically configurable system based on cloud-collaborative experimentation
US20160092235A1 (en) Method and apparatus for improved thread selection
WO2022237585A1 (zh) 处理方法及装置、处理器、电子设备及存储介质
US10007524B2 (en) Managing history information for branch prediction
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
Butts et al. Characterizing and predicting value degree of use
Mittal A survey of value prediction techniques for leveraging value locality
CN110402434B (zh) 缓存未命中线程平衡
EP1739549B1 (en) Branch prediction device, method thereof, and processor
Mutlu et al. Understanding the effects of wrong-path memory references on processor performance
JP2007293814A (ja) プロセッサ装置とその処理方法
CN115269011A (zh) 指令执行单元、处理单元及相关装置和方法
JP2007293815A (ja) プロセッサ装置とその処理方法
JP2007293816A (ja) プロセッサ装置とその処理方法
CN101916184B (zh) 更新微处理器中的分支目标地址快取的方法及其微处理器
Lee et al. On table bandwidth and its update delay for value prediction on wide-issue ILP processors
US20220075624A1 (en) Alternate path for branch prediction redirect

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090602

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090728

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20091208