(57)【要約】【課題】簡単な構成で、ローカル・スラックを有効にかつ十分に利用してローカル・スラックの予測を行い、高速でプログラム命令の実行を行う。【解決手段】プロセッサ装置は、主記憶装置のメモリ・アドレスに記憶されかつプロセッサ装置で実行される命令のローカル・スラックの予測値である予測スラックを第１の予測方法を用いて予測し、上記命令をその予測スラックを利用して実行する。共有化情報に基づくスラック予測方法である第２の予測方法を用いて、ローカル・スラックを持つ命令に基づいて、ローカル・スラックを持たない命令間で依存先から依存元へと共有可能なスラックが存在するという共有化情報を伝搬させて行き、当該共有化情報に基づいて所定の発見的な手法を用いて各命令が利用するローカル・スラックの量を決定し、ローカル・スラックを持たない命令がローカル・スラックを利用することができるように制御する。【選択図】図４１
2007293815.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置のメモリ・アドレスに記憶されかつプロセッサ装置で実行される命令のローカル・スラックの予測値である予測スラックを所定の第１の予測方法を用いて予測し、上記命令をその予測スラックを利用して実行するプロセッサ装置において、
共有化情報に基づくスラック予測方法である第２の予測方法を用いて、ローカル・スラックを持つ命令に基づいて、ローカル・スラックを持たない命令間で依存先から依存元へと共有可能なスラックが存在するという共有化情報を伝搬させて行き、当該共有化情報に基づいて所定の発見的な手法を用いて各命令が利用するローカル・スラックの量を決定し、ローカル・スラックを持たない命令がローカル・スラックを利用することができるように制御する制御手段を備えたことを特徴とするプロセッサ装置。
【請求項２】
上記制御手段は、命令の予測スラックが所定のしきい値以上であるときに、上記共有化情報を伝搬させることを特徴とする請求項１記載のプロセッサ装置。
【請求項３】
上記制御手段は、命令の実行時の振る舞い及び上記共有化情報に基づいて、命令の予測スラックと、上記予測された予測スラックを利用できるか否かの度合いを示す信頼性とを計算して更新することを特徴とする請求項２記載のプロセッサ装置。
【請求項４】
上記制御手段は、命令の実行時に共有化情報を受け取ったときに、上記予測スラックは利用可能なスラックに未だ到達していないと判定し、上記信頼性を増加させる一方、そうでなかったときに、上記予測スラックは利用可能なスラックに到達したと判定し、上記信頼性を減少させ、上記信頼性が所定値に減少したときに上記予測スラックを減少させ、上記信頼性が所定のしきい値以上になったら予測スラックを増加させるように更新することを特徴とする請求項３記載のプロセッサ装置。
【請求項５】
上記制御手段は、
スラック表を記憶する第１の記憶手段と、
スラック伝搬表を記憶する第２の記憶手段と、
上記スラック表及び上記スラック伝搬表を更新する更新手段とを備え、
上記スラック表は、すべての命令について命令毎に、
（ａ）上記第１の予測方法を用いてローカル・スラックの予測を行っているか、上記第２の予測方法を用いてローカル・スラックの予測を行っているかを示す伝搬フラグ（Ｐｆｌａｇ）と、
（ｂ）上記予測された予測スラックと、
（ｃ）上記予測された予測スラックを利用できるか否かの度合いを示す信頼性とを含み、
上記スラック伝搬表は、ローカル・スラックを持たない命令について命令毎に
（ａ）上記ローカル・スラックを持たない命令のメモリ・アドレスと、
（ｂ）上記ローカル・スラックを持たない命令の予測された予測スラックと、
（ｃ）上記ローカル・スラックを持たない命令の予測された予測スラックを利用できるか否かの度合いを示す信頼性とを含み、
上記更新手段は、受け取った命令の伝搬フラグが上記第２の予測方法を用いてローカル・スラックの予測を行っていることを示すとき、上記受け取った命令の予測スラック及び信頼性に基づいて、上記第２の予測方法を用いて、上記スラック表及び上記スラック伝搬表を更新する一方、上記受け取った命令の伝搬フラグが上記第１の予測方法を用いてローカル・スラックの予測を行っていることを示すとき、上記受け取った命令の予測スラック及び信頼性に基づいて、上記第１の予測方法を用いて、上記スラック表を更新することを特徴とする請求項３又は４記載のプロセッサ装置。
【請求項６】
主記憶装置のメモリ・アドレスに記憶されかつプロセッサ装置で実行される命令のローカル・スラックの予測値である予測スラックを所定の第１の予測方法を用いて予測し、上記命令をその予測スラックを利用して実行するプロセッサ装置の処理方法において、
共有化情報に基づくスラック予測方法である第２の予測方法を用いて、ローカル・スラックを持つ命令に基づいて、ローカル・スラックを持たない命令間で依存先から依存元へと共有可能なスラックが存在するという共有化情報を伝搬させて行き、当該共有化情報に基づいて所定の発見的な手法を用いて各命令が利用するローカル・スラックの量を決定し、ローカル・スラックを持たない命令がローカル・スラックを利用することができるように制御する制御ステップを含むことを特徴とするプロセッサ装置の処理方法。
【請求項７】
上記制御ステップは、命令の予測スラックが所定のしきい値以上であるときに、上記共有化情報を伝搬させることを特徴とする請求項６記載のプロセッサ装置の処理方法。
【請求項８】
上記制御ステップは、命令の実行時の振る舞い及び上記共有化情報に基づいて、命令の予測スラックと、上記予測された予測スラックを利用できるか否かの度合いを示す信頼性とを計算して更新することを特徴とする請求項７記載のプロセッサ装置の処理方法。
【請求項９】
上記制御ステップは、命令の実行時に共有化情報を受け取ったときに、上記予測スラックは利用可能なスラックに未だ到達していないと判定し、上記信頼性を増加させる一方、そうでなかったときに、上記予測スラックは利用可能なスラックに到達したと判定し、上記信頼性を減少させ、上記信頼性が所定値に減少したときに上記予測スラックを減少させ、上記信頼性が所定のしきい値以上になったら予測スラックを増加させるように更新することを特徴とする請求項８記載のプロセッサ装置の処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令の依存関係に基づいてローカル・スラックを共有化しながら、スラック予測を利用して命令を実行するプロセッサ装置と、当該プロセッサ装置の処理方法に関する。
【背景技術】
【０００２】
近年、クリティカル・パスに関する情報を用いた、マイクロプロセッサの高速化や消費電力の削減に関する研究が数多く行われている（例えば、非特許文献２，３，８，１１，１３参照。）。クリティカル・パスとは、プログラム全体の実行時間を決定する動的な命令列で構成されるパスである。クリティカル・パス上の命令の実行レイテンシをたとえ１サイクルでも増加させると、プログラム全体の実行サイクル数が増加する。しかし、クリティカル・パス情報は命令がクリティカル・パス上にあるかないかの２通りしかなく、命令は２種類にしか分類できない。また、クリティカル・パス上の命令数は非クリティカル・パス上の命令数よりも大幅に少なく、それぞれのカテゴリ毎に命令処理を分けた場合、負荷バランスが悪い。これらより、クリティカル・パス情報は、適用範囲が狭くなってしまう。
【０００３】
これに対し、クリティカル・パスの代わりに、命令のスラックを用いる手法が提案されている（例えば、非特許文献４，５参照。）。命令のスラックとは、プログラム全体の実行サイクル数を増加させることなく、その命令の実行レイテンシを増加させることのできるサイクル数である。命令のスラックが分かれば、各命令がクリティカル・パス上にあるかどうかだけでなく、クリティカル・パス上にない命令の実行レイテンシを、プログラムの実行に影響しない範囲で、どの程度増加させられるのかが分かる。従って、スラックを用いれば、命令を３種類以上のカテゴリに分けることができ、さらに、各カテゴリに属する命令数の不均衡を緩和することもできる。
【０００４】
各動的命令のスラックは、ある範囲を持った値である。スラックの最小値は常に０である。一方、スラックの最大値（グローバル・スラック（例えば、非特許文献５参照。））は動的に決まる。スラックを最大限利用するためには、グローバル・スラックを求める必要がある。しかし、ある命令のグローバル・スラックを求めるためには、実行レイテンシの増加がプログラム全体の実行サイクル数に与える影響を、プログラムの実行中に調べなければならない。そのため、グローバル・スラックを求めるのは非常に難しい。
【０００５】
そこで、グローバル・スラックではなく、ローカル・スラック（例えば、非特許文献５参照。）を予測する手法が提案された（例えば、非特許文献６，１０参照。）。命令のローカル・スラックとは、プログラム全体の実行サイクル数だけでなく、後続命令の実行にも影響を与えないスラックの最大値である。ある命令のローカル・スラックは、依存関係のある後続命令に着目するだけで、容易に求めることができる。従来手法では、ある命令がレジスタ・データ、あるいは、メモリ・データを定義した時刻と、そのデータを最初に参照した時刻の差から、当該命令のローカル・スラックを求め、それを基に、将来のローカル・スラックを予測する。
【０００６】
しかし、従来手法では、データを定義した時刻を保持するためのテーブルと、時刻の差を求めるための演算器を用意する必要がある。また、プログラムの実行と並列に、定義時刻を保持するテーブルの参照／更新や、時刻の引き算を行わなければならない。これらのコストが発生する原因は、データの定義／参照時刻を用いてローカル・スラックを直接計算することにある。
【０００７】
次いで、スラックについて以下に説明する。
【０００８】
図１（ａ）は従来技術に係るスラックを説明するために用いる複数の命令を含むプログラムの一例を示す図であり、図１（ｂ）は上記プログラムの各命令をプロセッサ装置上で実行する過程を示すタイミングチャートである。図１（ａ）及び図１（ｂ）において、ノードは命令を示し、エッジは命令間のデータ依存関係を示す。縦軸は命令を実行したサイクルを示す。ノードの長さは命令の実行レイテンシ（実行遅延時間をいう。）を示す。実行レイテンシは、命令ｉ１と命令ｉ４が２サイクル、その他の命令が１サイクルである。
【０００９】
ここで、命令ｉ０のスラックについて考える。命令ｉ０の実行レイテンシを３サイクル増加させた場合、それに直接的、間接的に依存する命令ｉ３、ｉ５の実行が遅れる。その結果、命令ｉ５は、プログラム中、最も最後に実行される命令ｉ６と同時刻に実行される。従って、命令ｉ０の実行レイテンシをこれ以上増加させると、プログラム全体の実行サイクル数が増加する。つまり、命令ｉ０のグローバル・スラックは３である。このように、ある命令のグローバル・スラックを求めるためには、その命令の実行レイテンシの増加が、プログラム全体の実行に与える影響を調べる必要がある。そのため、グローバル・スラックの判定は非常に難しい。
【００１０】
一方、命令ｉ０の実行を２サイクル増加させた場合、後続命令の実行に影響は与えない。しかし、これ以上実行レイテンシを増加させると、直接的、間接的に依存関係にある命令ｉ３と命令ｉ５の実行が遅れる。つまり、命令ｉ０のローカル・スラックは２である。このように、ある命令のローカル・スラックを求めるには、その命令に依存する命令への影響に着目すれば良い。従って、ローカル・スラックは比較的容易に判定することができる。
【００１１】
次いで、従来技術に係るスラック予測方法について以下に説明する。例えば、図１（ｂ）の命令ｉ０がデータを定義した時刻０と、そのデータが命令ｉ３によって最初に参照された時刻３との差から、さらに１を引き、命令ｉ０のローカル・スラックは２であると計算する。そして、それを基に、命令ｉ０を次に実行する場合のローカル・スラックは２であると予測する。
【００１２】
図２は、従来技術に係るローカル・スラック予測機構を備えたプロセッサ装置の構成を示すブロック図である。図２において、プロセッサ１０は、主記憶装置９から命令をフェッチするフェッチ・ユニット１１と、デコード・ユニット１２と、命令ウィンドウ（Ｉ−ｗｉｎ）１３と、レジスタ・ファイル（ＲＦ）１４と、複数の実行ユニット（ＥＵ）１５、リオーダ・バッファ（ＲＯＢ）１６とを備えて構成される。プロセッサ１０の右側において、従来技術に係るローカル・スラック予測機構を示す。ローカル・スラック予測機構は、レジスタ・データを定義した時刻を保持するためのレジスタ定義表２と、メモリ・データを定義した時刻を保持するためのメモリ定義表３と、これら２つの定義表２，３からの出力を選択的に切り換えて定義時刻を出力するマルチプレクサ４と、定義時刻と現在時刻との差を求めるための演算器である減算器５とを備える。さらに、ローカル・スラック予測機構は、各命令のローカル・スラックを保持するためのスラック表６を備える。ここで、レジスタ定義表２と、メモリ定義表３と、スラック表６とは、各テーブルを記憶するための記憶装置で構成される。
【００１３】
図１（ｂ）の命令ｉ０のローカル・スラックを例に、従来機構の動作を簡単に説明する。命令ｉ０はデータを定義するときに、命令ｉ０自身とともに現在時刻０を定義表に記録する。ｉ３｝はデータを使用するときに、データを定義した命令ｉ０とデータを定義した時刻（定義時刻）０を、定義表２，３から得る。そして、現在時刻３と定義時刻０との差分からさらに１を引くことで、命令ｉ０のローカル・スラック２を求める。求めたスラックは、スラック表６の命令ｉ０に対応するエントリに記録する。命令ｉ０をフェッチ・ユニット１１により次にフェッチしたときに、スラック表６を参照し、得られたスラックから、命令ｉ０のローカル・スラックは２であると予測する。
【００１４】
以上のように、従来手法では、定義表２，３と減算器６を用意する必要があり、ハードウェア・コストが増大する。また、プログラムの実行と並列に、定義表２，３の参照及び更新と時刻の引き算を行わなければならないため、高速な動作を必要とし、それが消費電力に大きな影響を及ぼす可能性がある。こうした問題が発生する原因は、データの定義及び参照時刻に着目してローカル・スラックを直接計算することにある。
【００１５】
【特許文献１】特開２０００−３５３０９９号公報。
【特許文献２】特開２００４−２８６３８１号公報。
【非特許文献１】D. Burger et al., "The Simplescalar Tool Set Version 2.0", Technical Report 1342, Department of Computer Sciences, University of Wisconsin-Madison, June 1997。
【非特許文献２】千代延昭宏ほか，「低消費電力プロセッサアーキテクチャ向けクリティカル・パス予測器の提案」，情報処理学会研究報告，２００２−ＡＲＣ−１４９，社団法人情報処理学会発行，２００２年８月。
【非特許文献３】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。
【非特許文献６】福山智久ほか，「スラック予測を用いた省電力アーキテクチャ向け命令スケジューリング」，先進的計算基盤システムシンポジウム，ＡＣＳＩＳ２００５，  ２００５年５月。
【非特許文献７】J. L. Hennessy et al., "Computer Architecture: A Quantitative Approach", 2nd Edition, Morgan Kaufmann Publishing Incorporated, San Francisco, California, U.S.A., 1996。
【非特許文献８】小林良太郎ほか，「データフロー・グラフの最長パスに着目したクラスタ化スーパースカラ・プロセッサにおける命令発行機構」，２００１年並列処理シンポジウムＪＳＰＰ２００１，２００１年６月。
【非特許文献９】M. Levy, "Samsung Twists ARM Past 1GHz", Microprocessor Report 2002-10-16, October 2002。
【非特許文献１０】劉小路ほか，「クリティカリティ予測のためのスラック予測」，先進的計算基盤システムシンポジウムＳＡＣＳＩＳ２００４，２００４年５月。
【非特許文献１１】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。
【発明の開示】
【発明が解決しようとする課題】
【００１６】
上述のように、従来技術に係る手法では、ローカル・スラックが１以上存在すると予測できる命令の数（スラック命令数）が少なく、スラックを利用できる機会が十分に確保できない。
【００１７】
本発明の目的は以上の問題点を解決し、従来技術に比較して簡単な構成で、ローカル・スラックを有効にかつ十分に利用してローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができるプロセッサ装置及びプロセッサ装置の処理方法を提供することにある。
【課題を解決するための手段】
【００１８】
第１の発明に係るプロセッサ装置は、主記憶装置のメモリ・アドレスに記憶されかつプロセッサ装置で実行される命令のローカル・スラックの予測値である予測スラックを所定の第１の予測方法を用いて予測し、上記命令をその予測スラックを利用して実行するプロセッサ装置において、
共有化情報に基づくスラック予測方法である第２の予測方法を用いて、ローカル・スラックを持つ命令に基づいて、ローカル・スラックを持たない命令間で依存先から依存元へと共有可能なスラックが存在するという共有化情報を伝搬させて行き、当該共有化情報に基づいて所定の発見的な手法を用いて各命令が利用するローカル・スラックの量を決定し、ローカル・スラックを持たない命令がローカル・スラックを利用することができるように制御する制御手段を備えたことを特徴とする。
【００１９】
上記プロセッサ装置において、上記制御手段は、命令の予測スラックが所定のしきい値以上であるときに、上記共有化情報を伝搬させることを特徴とする。
【００２０】
また、上記プロセッサ装置において、上記制御手段は、命令の実行時の振る舞い及び上記共有化情報に基づいて、命令の予測スラックと、上記予測された予測スラックを利用できるか否かの度合いを示す信頼性とを計算して更新することを特徴とする。
【００２１】
さらに、上記プロセッサ装置において、上記制御手段は、命令の実行時に共有化情報を受け取ったときに、上記予測スラックは利用可能なスラックに未だ到達していないと判定し、上記信頼性を増加させる一方、そうでなかったときに、上記予測スラックは利用可能なスラックに到達したと判定し、上記信頼性を減少させ、上記信頼性が所定値に減少したときに上記予測スラックを減少させ、上記信頼性が所定のしきい値以上になったら予測スラックを増加させるように更新することを特徴とする。
【００２２】
またさらに、上記プロセッサ装置において、上記制御手段は、
スラック表を記憶する第１の記憶手段と、
スラック伝搬表を記憶する第２の記憶手段と、
上記スラック表及び上記スラック伝搬表を更新する更新手段とを備え、
上記スラック表は、すべての命令について命令毎に、
（ａ）上記第１の予測方法を用いてローカル・スラックの予測を行っているか、上記第２の予測方法を用いてローカル・スラックの予測を行っているかを示す伝搬フラグ（Ｐｆｌａｇ）と、
（ｂ）上記予測された予測スラックと、
（ｃ）上記予測された予測スラックを利用できるか否かの度合いを示す信頼性とを含み、
上記スラック伝搬表は、ローカル・スラックを持たない命令について命令毎に
（ａ）上記ローカル・スラックを持たない命令のメモリ・アドレスと、
（ｂ）上記ローカル・スラックを持たない命令の予測された予測スラックと、
（ｃ）上記ローカル・スラックを持たない命令の予測された予測スラックを利用できるか否かの度合いを示す信頼性とを含み、
上記更新手段は、受け取った命令の伝搬フラグが上記第２の予測方法を用いてローカル・スラックの予測を行っていることを示すとき、上記受け取った命令の予測スラック及び信頼性に基づいて、上記第２の予測方法を用いて、上記スラック表及び上記スラック伝搬表を更新する一方、上記受け取った命令の伝搬フラグが上記第１の予測方法を用いてローカル・スラックの予測を行っていることを示すとき、上記受け取った命令の予測スラック及び信頼性に基づいて、上記第１の予測方法を用いて、上記スラック表を更新することを特徴とする。
【００２３】
第２の発明に係るプロセッサ装置の処理方法は、主記憶装置のメモリ・アドレスに記憶されかつプロセッサ装置で実行される命令のローカル・スラックの予測値である予測スラックを所定の第１の予測方法を用いて予測し、上記命令をその予測スラックを利用して実行するプロセッサ装置の処理方法において、
共有化情報に基づくスラック予測方法である第２の予測方法を用いて、ローカル・スラックを持つ命令に基づいて、ローカル・スラックを持たない命令間で依存先から依存元へと共有可能なスラックが存在するという共有化情報を伝搬させて行き、当該共有化情報に基づいて所定の発見的な手法を用いて各命令が利用するローカル・スラックの量を決定し、ローカル・スラックを持たない命令がローカル・スラックを利用することができるように制御する制御ステップを含むことを特徴とする。
【００２４】
上記プロセッサ装置の処理方法において、上記制御ステップは、命令の予測スラックが所定のしきい値以上であるときに、上記共有化情報を伝搬させることを特徴とする。
【００２５】
また、上記プロセッサ装置の処理方法において、上記制御ステップは、命令の実行時の振る舞い及び上記共有化情報に基づいて、命令の予測スラックと、上記予測された予測スラックを利用できるか否かの度合いを示す信頼性とを計算して更新することを特徴とする。
【００２６】
さらに、上記プロセッサ装置の処理方法において、上記制御ステップは、命令の実行時に共有化情報を受け取ったときに、上記予測スラックは利用可能なスラックに未だ到達していないと判定し、上記信頼性を増加させる一方、そうでなかったときに、上記予測スラックは利用可能なスラックに到達したと判定し、上記信頼性を減少させ、上記信頼性が所定値に減少したときに上記予測スラックを減少させ、上記信頼性が所定のしきい値以上になったら予測スラックを増加させるように更新することを特徴とする。
【発明の効果】
【００２７】
本発明に係るプロセッサ装置とその処理方法によれば、共有化情報に基づくスラック予測方法である第２の予測方法を用いて、ローカル・スラックを持つ命令に基づいて、ローカル・スラックを持たない命令間で依存先から依存元へと共有可能なスラックが存在するという共有化情報を伝搬させて行き、当該共有化情報に基づいて所定の発見的な手法を用いて各命令が利用するローカル・スラックの量を決定し、ローカル・スラックを持たない命令がローカル・スラックを利用することができるように制御する。従って、ローカル・スラックを持たない命令がローカル・スラックを利用することができるようになり、従来技術に比較して簡単な構成で、ローカル・スラックを有効にかつ十分に利用してローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができる。
【発明を実施するための最良の形態】
【００２８】
以下、本発明に係る実施形態について図面を参照して説明する。なお、以下の各実施形態において、同様の構成要素については同一の符号を付している。また、章及び節の番号は、各実施形態毎に独立に付している。
【００２９】
第１の実施形態．
本発明に係る第１の実施形態では、発見的手法に基づいてローカル・スラックを予測する機構を提案する。この機構では、命令実行時の振る舞いを観測しながら、試行錯誤的にローカル・スラックを予測して行く。これにより、ローカル・スラックを直接計算する必要がなくなる。さらに、本実施形態では、応用例として、ローカル・スラックを用いた機能ユニットの低消費電力化手法を取り上げ、提案機構の効果について評価を行う。
【００３０】
１．ローカル・スラックを発見的に予測する手法．
従来手法に対し、本実施形態では、ローカル・スラックを発見的に予測する手法を提案する。この手法では、命令実行時の振る舞いを観測しながら、予測するローカル・スラック（以下、予測スラックという。）を増減させ、予測スラックを実際のローカル・スラック（以下、ターゲット・スラックという。）に近づけて行く。試行錯誤的に予測を行うため、従来手法のようにローカル・スラックを直接計算する必要はない。
【００３１】
以下では、説明を簡単にするために、まず、提案手法の基本的な動作を説明する。その後、ターゲット・スラックの動的な変化に対応するための修正を加える。最後に提案手法の構成について説明する。
【００３２】
１．１．基本動作．
まず、本実施形態に係る提案手法の基本動作を示す。命令フェッチ時にローカル・スラックを予測し、予測スラックに基づいて命令の実行レイテンシを増加させる。どの命令に対しても、それを初めてフェッチするときには、ローカル・スラックは０であると予測する。つまり、予測スラックの初期値は０とする。その後は、命令実行時の振る舞いを観測しながら、予測スラックを、ターゲット・スラックに到達するまで、徐々に増加させて行く。
【００３３】
すなわち、本予測方法では、具体的には、まず、命令のフェッチに際してその命令の予測スラックを取得し、その取得した予測スラックの分だけその命令の実行レイテンシを増加させる。例えば実行レイテンシが本来「１サイクル」の命令について、その予測スラックが「２」であったときには、その命令の実行レイテンシは「３サイクル」に増加させる。なお、何れの命令についても、プログラムの開始後にその命令が始めてフェッチされたときには、そのローカル・スラックは「０」と予測する。すなわち、すべての命令についてその予測スラックの初期値は「０」に設定されている。その後、実行時における命令の振る舞いを観測し、予測スラックがターゲット・スラックに到達したと推定されるまで、予測スラックを徐々に増加させて行く。
【００３４】
次に、基本動作において、命令実行時の振る舞いを基に、予測スラックがターゲット・スラックに到達したかどうかを判定する方法を説明する。ここで、ある命令の予測スラックを増加させていき、その値がターゲット・スラックに到達したという状況を考える。このとき、当該命令は、実行レイテンシを１サイクルでも増加させると、それに依存する命令の実行を遅れさせてしまう状態にある。また、命令間の依存関係として、制御依存、キャッシュ・ラインを介した依存、レジスタ・データ依存、メモリ・データ依存をあげることができる。従って、予測スラックがターゲット・スラックに到達した命令は、以下のいずれかの振る舞いを見せると考えられる。
【００３５】
（ａ）分岐予測ミス、
（ｂ）キャッシュ・ミス、
（ｃ）後続命令に対するオペランド・フォワーディング、及び
（ｄ）後続命令に対するストアデータフォワーディング。
【００３６】
まず、上記（ａ）の分岐予測ミスについて説明する。パイプライン処理を行うプロセッサは、多数の命令を流れ作業的に同時に実行するため、分岐命令で以後に実行される命令列が変更されると、既に処理を開始した後続命令をすべて破棄しなくてはならず、処理効率が低下する。これを防ぐため、以前に当該分岐命令が実行されたときの分岐の発生状況から命令が分岐するか否かを予測し、その予測結果に従って分岐予測先の命令を投機実行するようにしている。ここで予測スラックがターゲット・スラックを上回った状況を考える。こうした状況では、先行命令の実行レイテンシが過剰に増加されて、それに依存する後続命令の実行に遅延が生じる。このような場合、適正な分岐予測ができなくなり、分岐の予測結果を誤り易くなる。そのため、分岐予測ミスが発生したときには、予測スラックがターゲット・スラックを上回ってしまっている可能性が高いと考えることができる。
【００３７】
次に、上記（ｂ）のキャッシュ・ミスについて説明する。多くのプロセッサでは、使用頻度の高いデータ等を、高速なキャッシュ・メモリに蓄積しておくことで、低速な記憶装置へのアクセスを低減し、プロセッサの処理を高速化するようにしている。先行命令の予測スラックがターゲット・スラックを上回った状態となると、こうしたキャッシュ動作を適正に行うことができなくなり、キャッシュ・ミスが発生し易くなる。従って、キャッシュ・ミスが発生したときにも、予測スラックがターゲット・スラックを上回ってしまっている可能性が高いと考えることができる。
【００３８】
続いて、上記（ｃ）及び（ｄ）の後続命令に対するオペランド・フォワーディング及びストアデータフォワーディングについて説明する。先行命令とその先行命令の定義したデータを参照する後続命令との実行間隔が短いと、データの書き込み完了前に後続命令がそのデータを読み込もうとしてデータ・ハザードが発生してしまうことがある。そのため、多段パイプラインを有するプロセッサの多くでは、バイパス回路を設けて、書き込み前のデータを後続命令に直接与えるオペランド・フォワーディングやストアデータフォワーディングを行うことで、そうしたデータ・ハザードを回避するようにしている。こうしたフォワーディングは、先行命令の定義したデータを参照する後続命令が、先行命令の直後に連続して実行されるときに発生する。従って、オペランド・フォワーディングやストアデータフォワーディングが発生したときには、予測スラックがターゲット・スラックと一致していると判断することができる。
【００３９】
本予測方法では、命令実行時の振る舞いが、上記（ａ）〜（ｄ）のいずれかに該当するとき、予測スラックがターゲット・スラックに到達したと推定し、そうでないときには未到達であると判定するようにしている。こうした予測スラックがターゲット・スラックに到達したとの推定の成立条件を上記（ａ）〜（ｄ）の論理和条件とし、「ターゲット・スラック到達条件」と呼ぶこととする。なお、上記（ａ）〜（ｄ）のような命令実行時の振る舞いを検出する機構は、分岐予測、キャッシュ、フォワーディングを行うプロセッサであれば、通常、元より備えられている。そのため、ローカル・スラック予測のためにそうした検出機構を新規追加せずとも、上記到達条件の成立の有無を確認することが可能である。
【００４０】
図３（ａ）は本発明の第１の実施形態に係るローカル・スラックを発見的に予測する手法を用いたプロセッサ装置の基本動作であって、第１回目の実行動作を示すタイミングチャートであり、図３（ｂ）は上記プロセッサ装置の基本動作であって、第２回目の実行動作を示すタイミングチャートであり、図３（ｃ）は上記プロセッサ装置の基本動作であって、第３回目の実行動作を示すタイミングチャートである。すなわち、上記提案手法の基本動作に基づいて、図１（ａ）のプログラムを繰り返し実行する過程を図３（ａ）、図３（ｂ）及び図３（ｃ）に示す。図３（ａ）、図３（ｂ）及び図３（ｃ）において、各ノードのハッチング部分は、予測スラックに応じて増加させた実行レイテンシを示す。図３（ａ）、図３（ｂ）及び図３（ｃ）では、説明を簡単にするため、命令ｉ０のローカル・スラックのみを予測の対象とし、予測スラックは１回につき１ずつ増加させるとする。
【００４１】
図３（ａ）の１回目の実行では、命令ｉ０の予測スラックは０である。この場合、命令ｉ０の実行時の振る舞いは、ターゲット・スラック到達条件のいずれにも該当しないので、予測スラックはターゲット・スラックに未だ到達していない。そこで、命令ｉ０の予測スラックを１だけ増加させる。その結果、図３（ｂ）の２回目の実行では、命令ｉ０の予測スラックは１となる。この場合も、予測スラックはターゲット・スラックに到達していない。そこで、命令ｉ０の予測スラックをさらに１だけ増加させる。これにより、図３（ｃ）の３回目の実行では、命令ｉ０の予測スラックは２となる。その結果命令ｉ０は後続命令に対しオペランド・フォワーディングを行う。これにより、ターゲット・スラック到達条件を満たす。予測スラックはターゲット・スラックに到達したので、これ以上増加させない。以上のようにして命令ｉ０のローカル・スラックを予測する。
【００４２】
１．２．ターゲット・スラックの動的な変化への対応．
基本動作では、ターゲット・スラックの動的な変化に十分に対応することができない。ターゲット・スラックが動的に変化しても、それが予測スラックよりも大きいのであれば、予測スラックは新たなターゲット・スラックを目指して増加するだけなので、問題はない。しかし、ターゲット・スラックが予測スラックより小さくなると、予測スラックは変化することなく、そのままの値を維持するので、ターゲット・スラックを上回った分（スラック予測ミスペナルティ）だけ、後続命令の実行を遅れさせてしまう。これが、性能に悪影響を及ぼす可能性がある。
【００４３】
この問題に対し、まず、ターゲット・スラックが予測スラックよりも小さくなったら、予測スラックを減らすという解決手法を提案する。しかし、ターゲット・スラックが急速に増減を繰り返す場合、この手法を導入しても、予測スラックをターゲット・スラックに追従させることはできない。その結果、ターゲット・スラックが予測スラックよりも小さくなるという状況が頻繁に発生する。そこでさらに、信頼性を導入して、予測スラックの増加は慎重に行い、予測スラックの減少は迅速に行うという解決手法を提案する。
【００４４】
以下では、上記２つの解決方法について詳しく説明する。
【００４５】
１．２．１．予測スラックの減少．
予測スラックの減少を実現する方法として、スラック予測を行わなかった場合の後続命令の実行時刻（後続命令の本来実行されるべき時刻）を利用するという方法が考えられる。後続命令の本来実行されるべき時刻が分かれば、スラック予測のミスにより後続命令の実行時刻が遅れたかどうかを調べることができる。あるいは、ターゲット・スラックを直接計算し、予測スラックと比較することもできる。しかし、いずれにしても、命令の実行時刻を決定しうる様々な要素（資源制約、データ依存、制御依存など）を考慮して、後続命令の本来実行されるべき時刻を計算しなければならないので、簡単に実現することはできない。
【００４６】
そこで本発明者は、上述した「ターゲット・スラック到着条件」に着目する。この条件を用いれば、予測スラックがターゲット・スラックを下回っていることと、ターゲット・スラックに到着したことが容易に分かる。この特徴を利用し、予測スラックがターゲット・スラックに到着したら、その後は逆に、ターゲット・スラックを下回るまで予測スラックを減少させることとする。こうすることにより、非常に簡単な修正で、ターゲット・スラックの動的な減少に対応できるようになる。ターゲット・スラックを下回る分の予測スラックが無駄になるが、十分に許容できると考える。
【００４７】
図４（ａ）及び図４（ｂ）を用いて、上記基本動作の問題点と、その解決手法について説明する。図４（ａ）は図３の基本動作の問題点を説明するためのサイクル対スラック特性を示すグラフであり、図４（ｂ）はその問題点の解決手法を説明するためのサイクル対スラック特性を示すグラフである。すなわち、図４（ａ）及び（ｂ）は、ターゲット・スラックが動的に減少した場合に、予測スラックがどのように変化するのかを示す例である。図４（ａ）及び（ｂ）において、縦軸はスラックを示し、横軸は時刻を示す。折れ線グラフは、点線がターゲット・スラックの場合、実線が予測スラックの場合である。ハッチング部分は、予測スラックがターゲット・スラックを超えてしまう箇所を示す。図４（ａ）は上記基本動作の場合、図４（ｂ）は本項で提案する解決手法を導入した場合である。
【００４８】
図４（ａ）において、予測スラックはターゲット・スラックに到達するまで増加して行く。その後、ターゲット・スラックが減少し、予測スラックより小さくなる。しかし、予測スラックはそのままの値を維持し、後続命令の実行を継続的に遅れさせてしまう。
【００４９】
一方、図４（ｂ）に示すように、修正後の動作では、まず、予測スラックはターゲット・スラックに到達するまで増加して行く。到着後、予測スラックは減少するが、ターゲット・スラックを下回るので、即座に増加に転じ、再びターゲット・スラックに到達する。この変化を、しばらくの間繰り返す。その後、ターゲット・スラックが減少すると、予測スラックは、ターゲット・スラックを下回るまで減少していき、再び増減を繰り返す。こうして、ターゲット・スラックの減少にあわせて予測スラックを減らすことができるようになる。
【００５０】
１．２．２．信頼性の導入．
ターゲット・スラックの急速な変化に対応するため、基本動作をさらに修正する。まず、予測スラック毎に信頼性カウンタを導入する。カウンタ値は、命令がターゲット・スラック到達条件を満たしていれば減少させ、そうでなければ増加させる。そして、カウンタ値が０になったら予測スラックを減少させ、カウンタ値があるしきい値以上になったら予測スラックを増加させる。
【００５１】
予測スラックの増加を慎重に行うため、予測スラックを増加させる際に、カウンタ値を０にリセットすることとする。また、予測スラックの減少を迅速に行うため、命令が「ターゲット・スラック到達条件」を満たしていれば、カウンタ値を０にリセットすることとする。
【００５２】
図５（ａ）は図４の解決手法の問題点を説明するためのサイクル対スラック特性を示すグラフであり、図５（ｂ）はその問題点の解決手法を説明するためのサイクル対スラック特性を示すグラフである。図５（ａ）及び（ｂ）を用いて、前項で示した解決手法の問題点と、それを解決するための手法について説明する。図５（ａ）及び（ｂ）は、ターゲット・スラックが急速に増減を繰り返した場合に、予測スラックがどのように変化するのかを示す例であり、図５（ａ）は、基本動作に予測スラックの減少を導入した場合を示し、図５（ｂ）は、さらに信頼性も導入した場合を示す。
【００５３】
図５（ａ）において、予測スラックはターゲット・スラックを目指して変化しようとするが、急速な変化に追従できず、頻繁にターゲット・スラックを超えてしまうことが分かる。一方、図５（ｂ）に示すように、信頼性を導入すると、予測スラックはターゲット・スラックを目指して緩やかに増加していき、ターゲット・スラックに到達する（あるいはそれを超える）と即座に減少するという変化を繰り返す。これにより、予測スラックがターゲット・スラックを超える頻度を下げることができる。
【００５４】
１．３．ハードウェア構成．
図６は、本発明の第１の実施形態に係るスラック表２０を備えたプロセッサ１０の構成を示すブロック図である。図６において、プロセッサ１０の右側部分は、本発明者の提案するローカル・スラック予測機構であり、提案機構は、予測スラックを保持するためのスラック表２０で構成される。スラック表２０は記憶装置で構成され、命令のプログラム・カウンタ値（ＰＣ：その命令を記憶する主記憶装置９のメモリ・アドレスをいう。）をインデクスとし、各エントリは対応する命令の予測スラックと、ターゲット・スラック到達条件の信頼性を保持する。
【００５５】
図６において、プロセッサ１０は、フェッチ・ユニット１１と、デコード・ユニット１２と、命令ウィンドウ（Ｉ−ｗｉｎ）１３と、レジスタ・ファイル（ＲＦ）１４と、実行ユニット（ＥＵ）１５と、リオーダ・バッファ（ＲＯＢ）１６とを備えて構成されている。プロセッサ１０を構成する各ユニットの機能は次の通りである。フェッチ・ユニット１１は、主記憶装置９からの命令の読み込みを行う。デコード・ユニット１２は、読み込まれた命令の内容の解析（デコード）し、命令ウィンドウ１３及びリオーダ・バッファ１６にそれぞれ格納する。命令ウィンドウ１３は、実行前の命令を一時的に格納するバッファ（メモリ）であり、プロセッサ１０の制御回路は、命令ウィンドウ１３のバッファから命令を取り出して、実行ユニット１５に順次投入する。一方、リオーダ・バッファ１６は、命令を格納するＦＩＦＯ（First-In First-Out）式のスタックメモリであり、格納された命令の中で格納の順が最も早い命令の実行が終了すると、その命令が取り出される（コミットされる）。ここで、コミットとは、実行結果によってプロセッサ状態を更新することをいう。また、ＦＩＦＯ１７は、スラック表２０からフェッチ・ユニット１１により取得された後、デコード・ユニット１２から出力される予測スラッグと信頼性を各タイミングでセットとして入力し記憶しスラック表２０に出力する。なお、レジスタ・ファイル１４は、命令の実行に必要なデータや命令の実行結果、実行中、実行予定の命令のアドレス・インデクス等をそれぞれ格納する各種レジスタの実体となっている。
【００５６】
命令は、フェッチ時にプログラム・カウンタ値（ＰＣ）をインデクスとしてスラック表を参照し、対応するエントリから予測スラックを得る。そして、コミットするときに、命令実行時の振る舞いを基にしてスラック表を更新する。スラック表の更新に関係するパラメータとその内容を以下に示す。ただし、予測スラックの最小値Ｖｍｉｎ＝０、信頼性の最小値Ｃｍｉｎ＝０である。
【００５７】
（１）Ｖｍａｘ：予測スラックの最大値、
（２）Ｖｍｉｎ：予測スラックの最小値（＝０）、
（３）Ｖｉｎｃ：予測スラックの１回あたりの増加量、
（４）Ｖｄｅｃ：予測スラックの１回あたりの減少量、
（５）Ｃｍａｘ：信頼性の最大値、
（６）Ｃｍｉｎ：信頼性の最小値（＝０）、
（７）Ｃｔｈ：信頼性のしきい値、
（８）Ｃｉｎｃ：信頼性の１回あたりの増加量、及び
（９）Ｃｄｅｃ：信頼性の１回あたりの減少量。
【００５８】
スラック表２０の更新の流れを以下に示す。上述のターゲット・スラック到達条件が成立していれば信頼性を０にリセットし、そうでなければ、増加量Ｃｉｎｃだけ増加させる。信頼性がしきい値Ｃｔｈ以上になったら、予測スラックを増加量Ｖｉｎｃだけ増加させ、信頼性を０にリセットする。一方、信頼性が０になったら、予測スラックを減少量Ｖｄｅｃだけ減少させる。なお、１．２．節において、ターゲット・スラック到達条件が成立すれば信頼性を０にリセットするとしたので、Ｃｄｅｃ＝Ｃｔｈである。さらに、予測スラックを増加させる際に、信頼性を０にリセットするとしたので、Ｃｍａｘ＝Ｃｔｈである。
【００５９】
５．スラック予測機構の評価．
本章では、まず評価モデル、評価環境について述べる。次に、評価結果について述べる。
【００６０】
５．１．評価モデル．
以下のモデルについて評価した。
【００６１】
（１）ＮＯ−ＤＥＬＡＹモデル：予測スラックに基づいた実行レイテンシの増加を行わないモデルである。
（２）Ｂモデル：提案手法の基本動作のみ行うモデルである。
（３）ＢＣｎモデル：提案手法の基本動作に、信頼性を導入したモデルである。モデルに付加した数値ｎは、信頼性のしきい値Ｃｔｈを表す。
（４）ＢＤモデル：提案手法の基本動作に、予測スラックの減少を導入したモデルである。
（５）ＢＤＣｎモデル：提案手法の基本動作に、予測スラックの減少と信頼性を導入したモデルである。モデルに付加した数値ｎは、信頼性のしきい値Ｃｔｈを表す。
【００６２】
Ｂモデル、ＢＣｎモデル、ＢＤモデル、ＢＤＣｎモデルは、提案方式を基にしたモデルであるため、これらを提案モデルと呼ぶこととする。
【００６３】
２．２．評価環境．
シミュレータには、公知のＳｉｍｐｌｅ  Ｓｃａｌａｒ  Ｔｏｏｌ  Ｓｅｔ（例えば、非特許文献１参照。）のスーパースカラ・プロセッサ用シミュレータを用い、提案方式を組み込んで評価した。命令セットには公知のＭＩＰＳＲ１００００を拡張した公知のＳｉｍｐｌｅＳｃａｌａｒ／ＰＩＳＡを用いた。ベンチマーク・プログラムは、公知のＳＰＥＣｉｎｔ２０００のｂｚｉｐ２、ｇｃｃ、ｇｚｉｐ、ｍｃｆ、ｐａｒｓｅｒ、ｐｅｒｌｂｍｋ、ｖｏｒｔｅｘ、ｖｐｒの８本を使用した。ｇｃｃでは１Ｇ命令、その他では２Ｇ命令をスキップした後、１００Ｍ命令を実行した。測定条件を表１に示す。従来方式との比較のため、スラック表のエントリ数は、従来方式（例えば、非特許文献１０参照。）と同一とした。
【００６４】
【表１】
2007293815.tif 000003
【００６５】
スラック表の更新に関するパラメータおいて、変化させ得るものは、最大値Ｖｍａｘ、増加量Ｖｉｎｃ、減少量Ｖｄｅｃ、しきい値Ｃｔｈ、増加量Ｃｉｎｃである。これらの組合せは膨大な数になるので、幾つかのパラメータをある値に固定する。まず、増加量Ｃｉｎｃとしきい値Ｃｔｈの比はスラックを増加させる頻度を表すので、増加量Ｃｉｎｃ＝１に固定し、しきい値Ｃｔｈだけを変化させることとする。次に、予測スラックをできるだけターゲット・スラックに近づけるために、増加量Ｖｉｎｃ＝１に固定する。最後に、予測スラックをできるだけ早く減少させるために、減少量Ｖｄｅｃ＝Ｖｍａｘに固定する。以上より、本章では、最大値Ｖｍａｘとしきい値Ｃｔｈだけを変化させて、提案方式の評価を行うこととする。ただし、比較を容易にするため、しきい値Ｃｔｈは、５、１５の２通りに、最大値Ｖｍａｘは、１、５、１５の３通りに制限する。
【００６６】
２．３．スラック予測精度．
ここでは、まず、各動的実行命令に対し、実際のスラック（以下、実スラックという。）を測定する。具体的には、ＮＯ−ＤＥＬＡＹモデルにおいて、ある命令がレジスタ・データ、あるいは、メモリ・データを定義した時刻と、そのデータを最初に参照した時刻の差から、当該命令のローカル・スラックを求める。そのため、データを定義しない命令（分岐命令）のスラックは無限大となる。
【００６７】
図７は、図６の提案機構の実施例のシミュレーション結果であって、各プログラムにおける実スラックに対する実行命令数に占める割合を示すグラフである。すなわち、図７に実スラックの累積分布を示す。図７の縦軸は、全実行命令数に占める割合を示し、その横軸は実スラックを示す。折れ線グラフは、実線がベンチマーク平均を示し、点線が各ベンチマークを示す。実スラックが３２サイクルの点において、上から順にｖｐｒ、ｂｚｉｐ、ｇｚｉｐ、ｐａｒｓｅｒ、平均、ｐｅｒｌｂｍｋ、ｇｃｃ、ｖｏｒｔｅｘ、ｍｃｆの場合である。
【００６８】
図７に示すように、実スラック０の命令は平均５２．７％存在する。実スラックが増えるにつれて、実行命令数に占める割合は徐々に飽和して行く。また、実スラックが、３０サイクル以上存在する命令は平均２８．９％存在することが分かる。しかし、通常のプロセッサで、命令の実行レイテンシを数十サイクル以上増加させると、それらの命令がプロセッサ内のバッファ（リオーダ・バッファ（ＲＯＢ）１６、命令ウィンドウ（Ｉ−ｗｉｎ）１３等）を占有するため、性能が大幅に低下する（例えば、非特許文献１０参照。）。こうした大きなスラックをどのように利用するのかは、今のところ十分には検討されていない。
【００６９】
図８、図９及び図１０はそれぞれ、図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝１，５，１５における各モデルに対する実行命令数に占める割合（スラック予測精度）を示すグラフである。すなわち、図８乃至図１０において、各提案モデルのスラック予測精度を測定した結果をベンチマーク平均で示す。図８乃至図１０の縦軸は全実行命令数に占める割合を示し、その横軸はモデルを示す。棒グラフは、６つの部分からなり、上の４つが、スラックをｎ（ｎは１以上）と予測した場合、下の２つが、スラックを０と予測した場合である。スラックをｎと予測した場合、上から順に、予測スラックｎが実スラックｍ（ｍは１以上）を超えた場合（ｎ＞ｍ）、実スラック０を超えた場合（ｎ＞０）、実スラックを下回った場合（ｎ＜ｍ）、実スラックと一致した場合（ｎ＝ｍ）である。一方、スラックを０と予測した場合、上から順に、実スラックを下回った場合（０＜ｍ）、実スラックと一致した場合（０＝ｍ）である。ただし、予測スラックの最大値Ｖｍａｘ＝１の場合、予測スラックｎが実スラックｍを上回る場合はないので、棒グラフは５つの部分からなる。これ以降、予測スラックと実スラックが一致することを、予測がヒットすると呼ぶ。
【００７０】
図８乃至図１０より、予測がヒットする割合はＢモデルが最も低いことが分かる。これに対し、予測スラックの減少を導入したモデル（ＢＤモデル）と、信頼性を導入したモデル（ＢＣｎモデル）は、どちらもヒット率向上に効果があることが分かる。また、両者をともに導入したモデル（ＢＤＣｎモデル）は、さらに高い効果が得られる。信頼性を導入したモデルの場合、信頼性のしきい値（モデルに付加した数字）が高い程、ヒット率は高くなる。なお、予測がヒットするのは、予測スラックの最大値Ｖｍａｘ＝１のＢモデルを除くと、実スラックが０の場合がほとんどである。この場合、スラックは利用できない。
【００７１】
予測スラックが実スラックを上回る場合、実スラックを超えるスラックを利用してしまうことになる。従って、予測ミスによるペナルティが発生する。図８乃至図１０より、予測ミスペナルティの発生率は、ヒット率が高いほど下げることができる。一方、予測スラックが実スラックを下回る場合、予測ミスペナルティは発生しない。この場合、予測スラックが１以上あれば、スラックを利用することができる。図８乃至図１０より、予測ミスペナルティを発生させることなく、スラックを利用できる割合は、ヒット率が高いほど下がってしまうが、その変化は比較的緩やかである。これらより、提案機構は、予測スラックが１以上となる割合を単純に減少させようとしているのではなく、主に予測ミスペナルティの発生率が減少するように、予測スラックを変化させていることが分かる。
【００７２】
次に、予測スラックの最大値Ｖｍａｘの影響について考察する。図８乃至図１０より、予測スラックの最大値Ｖｍａｘを変化させた場合、予測スラックが０である割合、及び、１以上である割合はあまり変化しない。このことから、スラックが１以上ある（又はスラックがない）と予測する命令の数は、予測スラックの最大値Ｖｍａｘにあまり依存していないことが分かる。また、予測スラックが１以上である命令の内訳は、予測スラックの最大値Ｖｍａｘを１から５に増加させたときには変化するものの、予測スラックの最大値Ｖｍａｘを５から１５に増加させたときには、あまり変化しないことが分かる。これらより、予測スラックの最大値Ｖｍａｘがある程度大きくなると、予測スラックと実スラックの大小関係はあまり変化しなくなることが分かる。
【００７３】
２．４．実スラックと予測スラックの差．
前節の評価により、実スラックと予測スラックの大小関係を知ることができた。しかし、これだけでは、両者の差が実際にどの程度あるのかが分からない。そこで、実スラックから予測スラックを引いた値の累積分布を測定する。測定では、まず、ＮＯ−ＤＥＬＡＹモデルにおいて、各動的実行命令の実スラックをすべて採取する。そして、各提案モデルにおいて、採取した実スラックから、これに対応する予測スラックを引いた値を求める。
【００７４】
図１１、図１２及び図１３はそれぞれ、図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝１，５，１５において各モデルにおける実スラックと予測スラックの差に対する実行命令数に占める割合を示すグラフである。図１１乃至図１３の縦軸は、全実行命令数に占める割合をベンチマーク平均で示し、その横軸は実スラックから予測スラックを引いた値を示す。この値が負の場合、予測スラックが実スラックを上回っていることを示す。０の場合、スラック予測がヒットしていることを示す。正の場合、予測スラックが実スラックを下回っていることを示す。横軸の最小値は、実スラックの最小値０から、予測スラックの最大値Ｖｍａｘを引いた値となる。図１１において、折れ線グラフは、一番上のグラフがＢモデル、ほぼ重なっているグラフがＢＣ１５モデルとＢＤモデル、一番下のグラフがＢＤＣ１５モデルの場合である。一方、図１２及び図１３において、折れ線グラフは、上から順に、Ｂモデル、ＢＣ１５モデル、ＢＤモデル、ＢＤＣ１５モデルの場合である。各モデルの比較を容易にするため、しきい値Ｃｔｈ＝５の場合の結果は省略する。
【００７５】
図１１乃至図１３から明らかなように、予測スラックの減少や信頼性の導入を行うと、予測ミスペナルティの発生率だけでなく、予測ミスペナルティの大きさも抑制できることが分かる。また、各モデルの差は、正の領域よりも、負の領域の方が大きい。これは、予測スラックを大きくする効果の差よりも、予測ミスペナルティを小さくする効果の差の方が大きいことを示している。このことから、予測スラックの減少の導入と、信頼性の導入は、目的通り、スラック予測ミスペナルティを削減できていることが分かる。さらに、どのモデルにおいても、予測スラックの最大値Ｖｍａｘが大きくなる程、予測ミスペナルティが大きくなることが分かる。この原因は、実スラックが大幅に低下する命令が数多く存在することにある。例えば、予測スラックの最大値Ｖｍａｘ＝１５の場合、予測スラックの増減しか行わないＢモデルにおいて、差が−１５サイクルになる命令は、３１．１％となる。これは、実スラックが１５サイクル以上減少した命令が、３１．１％存在していることを示す。
【００７６】
２．５．性能に与える影響．
図１４は図６の提案機構の実施例のシミュレーション結果であって、各モデルにおける正規化されたＩＰＣ（Instructions Per Clock cycle：１クロック当りに処理できる平均命令数）を示すグラフである。図１４の縦軸は、ＮＯ−ＤＥＬＡＹモデルの場合で正規化したＩＰＣを、ベンチマーク平均で示す。図１４の横軸はモデルを示す。３本で組になった棒グラフは、左から順に、予測スラックの最大値Ｖｍａｘが１、５、１５の場合である。図１４より、予測スラックの最大値Ｖｍａｘが同一であるモデル同士を比較すると、ＩＰＣはＢモデルが最も低いことが分かる。また、予測スラックの減少や信頼性を単独で導入したモデルよりも、これらを組み合わせたモデル（ＢＤＣｎモデル）の方が高い性能を達成することが分かる。なお、信頼性を導入したモデルの場合、信頼性のしきい値（モデルに付加した数字）が高い程、性能は高くなる。
【００７７】
各モデルの性能が低下する原因は、スラック予測ミスペナルティの発生にある。そこで、上記の結果と、スラック予測精度を示した図８乃至図１０を比べると、予測スラックの最大値Ｖｍａｘが同一であれば、予測スラックが実スラックを上回る（予測ミスペナルティが発生する）割合が低いモデル程、性能が高くなっていることが分かる。
【００７８】
図１４より、各モデルにおいては、予測スラックの最大値Ｖｍａｘを増加させるほど、ＩＰＣが低下することが分かる。しかし、ＩＰＣが高いモデル程、ＩＰＣの低下率を抑制できることが分かる。この理由は、図１１乃至図１３から分かるように、予測スラックの減少や信頼性の導入を行うと、予測ミスペナルティの発生率だけでなく、予測ミスペナルティの大きさも抑制できるからである。
【００７９】
図１５は図６の提案機構の実施例のシミュレーション結果であって、各モデルにおけるスラック命令数の割合を示すグラフである。図１６は図６の提案機構の実施例のシミュレーション結果であって、各モデルにおける平均予測スラックを示すグラフである。すなわち、図１５及び図１６に、各モデルの予測スラックを評価した結果を示す。図１５は、「スラック命令」の数を示す。ここで、「スラック命令」とは、予測スラックに基づいて実行レイテンシを１サイクル以上増加させた命令である。図１５の縦軸は、全実行命令数に占めるスラック命令数の割合をベンチマーク平均で示し、その横軸はモデルを示す。一方、図１６は、「平均予測スラック」を示す。ここで、「平均予測スラック」とは、予測スラックの合計を、スラック命令数で割ることにより得られる値である。図１６の縦軸は、予測スラックの平均値をベンチマーク平均で示し、その横軸はモデルを示す。これらの図１５及び図１６より、実行レイテンシを増加させることのできた命令の割合と、それらの命令に対して、増加させることのできた実行レイテンシの平均を知ることができる。
【００８０】
図１５より、スラック命令数は、モデルの種類や信頼性の閾値に依存し、ＩＰＣが高いモデルほど少なくなるが、予測スラックの最大値Ｖｍａｘにほとんど依存しない。一方、図１６より、平均予測スラックは、予測スラックの最大値Ｖｍａｘが高いほど大きくなるが、モデルの種類や信頼性のしきい値によって変化することはあまりない。これらより、予測スラックの最大値Ｖｍａｘが同一であるモデル同士を比較すると、増加させた実行レイテンシの合計は、予測スラックの減少や信頼性を導入することで減少し、ＢＤＣｎモデルにおいて最も少なくなる。また、信頼性を導入したモデルの場合、信頼性のしきい値が高いほど、増加させた実行レイテンシの合計は少なくなる。
【００８１】
しかし、ＢＤＣｎモデルは、予測スラックの最大値Ｖｍａｘの増加によるＩＰＣの低下を最も抑制できる。そのため、性能をあまり低下させること無く、他のモデルよりも予測スラックを増やすことができる場合がある。例えば、ＩＰＣの低下が８０％程度まで許されるような状況において、ＢＣ１５モデル、ＢＤモデル、ＢＤＣ１５モデルは、予測スラックの最大値Ｖｍａｘをそれぞれ、５、５、１５まで増加させることができる。このとき、ＢＤＣ１５モデルは、増加させることのできた実行レイテンシの合計が、ＢＣ１５モデルよりも１５．６％、ＢＤモデルよりも３２．６％だけ多くなる。
【００８２】
非特許文献１０では、従来手法によってローカル・スラックを予測し、それに基づいて命令の実行レイテンシを１サイクル増加させた場合の性能、及びスラック命令数を測定している。それによると、従来手法では、性能の低下が２．８サイクルのときに、スラック命令数の割合が２６．７％になる。
【００８３】
一方、上記の研究とはベンチマーク・プログラムやプロセッサ構成が異なるものの、本実施形態で最も近い評価を行っているのは、ＢＤＣ１５モデルにおいて、予測スラックの最大値Ｖｍａｘ＝１とした場合である。この場合、性能の低下が２．５サイクルのときに、スラック命令数の割合が３１．６％となる。これより、提案手法は、従来手法と同様の結果を示すことが分かる。
【００８４】
図１７は図６の提案機構の別の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘの各値に対するスラック命令数とＩＰＣとの関係を示すグラフである。図１８は図６の提案機構の別の実施例のシミュレーション結果であって、ＩＰＣに対する予測スラックの総積算値を示すグラフである。
【００８５】
すなわち、図１７は、評価におけるスラック命令数とＩＰＣの測定結果を示している。図１７の縦軸は、最大値Ｖｍａｘ及びしきい値Ｃｔｈの値の各組合せにおける、全実行命令数に対するスラック命令数の比率と、スラック予測を一切行わなかったときのＩＰＣに対する測定ＩＰＣの比率とを示している。また最大値Ｖｍａｘの各値（「１」、「５」、「１０」、「１５」）のそれぞれにおける４本組の縦棒は、図中左側からそれぞれしきい値Ｃｔｈが「１」、「５」、「１０」、「１５」の場合での測定結果をそれぞれ表す。
【００８６】
図１７に示されるように、しきい値Ｃｔｈを増加させるとスラック命令数は減少する。これはしきい値Ｃｔｈの増加により、予測スラックの増加条件が厳しくなり、予測スラックの増加頻度が低くなるためである。ただし、しきい値Ｃｔｈを増加すれば、予測スラックがターゲット・スラックを上回る頻度が低くなるため、ＩＰＣは向上するようになる。この結果から、上記信頼性の導入によって、上記スラック予測ミスのペナルティによる命令処理性能の低下を抑えられることが確認された。一方、予測スラックの最大値Ｖｍａｘを増加させると、予測スラックがより大きい値を取ることが可能となるため、スラック予測ミスのペナルティが大きくなり、処理性能（ＩＰＣ）は低下するようになる。
【００８７】
図１８に、上記測定結果での予測スラックとＩＰＣとの関係を示す。なお、図１８の縦軸は、パラメータ（Ｖｍａｘ，Ｃｔｈ）＝（１，１）の場合を基準（１００）とした予測スラックの総積算値のベンチマーク平均値の比率を示し、その横軸は、スラック予測を一切行わなかったときを基準（１００）としたＩＰＣのベンチマーク平均値の比率をそれぞれ示している。なお、図１８の各点に付された数字は、しきい値Ｃｔｈの値を示している。
【００８８】
図１８に示されるように、予測スラックの最大値Ｖｍａｘを増加させると、処理性能は低下するが、予測スラックは大幅に増大する。また最大値Ｖｍａｘとともにしきい値Ｃｔｈを増加させることで、ＩＰＣがほとんど低下せずに、予測スラックが増加するパラメータの組合せも幾つか確認された。例えばパラメータ（Ｖｍａｘ，Ｃｔｈ）＝（１，１）の場合に対して、パラメータ（Ｖｍａｘ，Ｃｔｈ）＝（５，１５）の場合には、ＩＰＣの低下をわずか０．３％に留めながらも、予測スラックは約２．２倍となっている。
【００８９】
以上の結果から明らかなように、処理性能は、スラック命令数や予測スラックとトレード・オフの関係にあり、適用対象での要求に応じて、各パラメータの最適値は異なることとなる。
【００９０】
３．スラック予測機構のハードウェアに関する評価．
本実施形態において提案するスラック予測機構のハードウェア量、アクセス時間、消費電力を従来機構と比較する。
【００９１】
３．１．ハードウェア構成．
プロセッサ構成は、前章の評価環境と同じものを用いる。すなわち、図２の従来機構を用い、また、提案機構として前章で評価した図６のＢＤＣモデルを用いる。まず、図２の従来機構で必要となるハードウェアを以下に示す。
【００９２】
（１）テーブルは、スラック表２０、メモリ定義表３及びレジスタ定義表２を備える（図２参照）。
（２）演算器は、図２の減算器５（スラック値の計算）、比較器（アドレスの比較）及び比較器（物理レジスタ番号の比較）を備える。なお、２個の比較器は、詳細後述するように、テーブルをパイプライン化したときに必要なハードウェアであって、図２において図示していない。
【００９３】
図２の従来機構において、スラック表２０は、命令のスラック値を保持しており、プログラム・カウンタ値（ＰＣ）をインデクスとして、フェッチ時に参照し、実行時に更新する。メモリ定義表３は、メモリ・アドレスをインデクスとし、対応するメモリ・アドレスにデータをストアした命令のプログラム・カウンタ値（ＰＣ）と、そのデータの定義時刻を保持する。メモリ定義表３は、ストア・アドレスで更新し、ロード・アドレスで参照する。レジスタ定義表２は、物理レジスタ番号をインデクスとし、対応する物理レジスタにデータを書き込んだ命令のプログラム・カウンタ値（ＰＣ）とそのデータの定義時刻を保持する。レジスタ定義表２は、命令の実行直前に、命令のソース・レジスタに対応する物理レジスタ番号で参照し、デスティネーション・レジスタに対応する物理レジスタ番号で更新する。減算器５は、定義表から得られた定義時刻と現在時刻との差分をとり、実行した命令のスラックを計算する。比較器（アドレスの比較）と比較器（物理レジスタ番号の比較）はそれぞれ、メモリ定義表３及びレジスタ定義表２を、高速動作のためにパイプライン化したときに必要となる。メモリ定義表３及びレジスタ定義表２のテーブルをパイプライン化した場合、定義時刻の更新が完了する前に、その定義時刻の参照が発生すると、当該テーブルから正しい定義時刻を得ることができない。この問題を解決するためには、定義時刻のフォワーディングを行う必要がある。具体的には、まず、更新に用いるアドレスと参照に用いるアドレスの比較、更新に用いるデスティネーション・レジスタと参照に用いるソース・レジスタの物理レジスタ番号の比較を行う。そして、アドレス、あるいは、物理レジスタ番号が一致すると、それぞれメモリ定義時刻、レジスタ定義時刻のフォワーディングを行う。
【００９４】
次に、提案機構で必要となるハードウェアを以下に示す。
【００９５】
（１）テーブルは、図６に示すように、スラック表２０と、信頼性と予測スラックを記録するＦＩＦＯ１７とを備える。
（２）演算器は、図１９及び図４６に示すように、信頼性加算器４０と、信頼性比較器（図１９のアンドゲート３１及び図４６の比較器９４に対応し、以下、信頼性比較器９４という。）と、予測スラック加算器５０と、予測スラック比較器（図１９のアンドゲート３５及び図４６の予測スラック比較器１１２に対応し、以下、予測スラック比較器１１２という。）を備える。
【００９６】
提案機構において、スラック表２０は、あるプログラム・カウンタ値（ＰＣ）のスラック値と信頼性を保持しており、フェッチ時に参照し、コミット時に更新する。ＦＩＦＯ１７は、スラック表２０から得た信頼性と予測スラックを命令フェッチ順に保持するＦＩＦＯであり、ディスパッチ時に書き込み、コミット時に読み出す。これらの値は、スラック表２０の更新データを計算するために用いる。このＦＩＦＯ１７は、ＲＯＢ１６と同一エントリとし、命令をＲＯＢ１６に書き込むと同時に、同一のインデクスを用いて、その命令の信頼性と予測スラックがこのＦＩＦＯ１７に書き込まれ、命令をＲＯＢ１６からコミットすると同時に、同一のインデクスを用いて、その命令の信頼性と予測スラックをＦＩＦＯ１７から読み出してスラック表２０に出力する。
【００９７】
演算器は予測スラック及び信頼性の更新のために用いる。信頼性加算器４０は、信頼性を増加量Ｃｉｎｃだけ増加させるために用いる。信頼性比較器９４は、増加させた信頼性がしきい値Ｃｔｈ以上になったかどうかを調べるために用いる。予測スラック加算器５０は、予測スラックを増加量Ｖｉｎｃだけ増加させるために用いる。予測スラック比較器１１２は、増加させた予測スラックがＶｍａｘを超えたかどうかを調べるために用いる。予測スラックがその最大値Ｖｍａｘを超えていたら、予測スラックはその最大値Ｖｍａｘにセットされる。なお、信頼性を減少させるときは、０にリセットするだけなので、信頼性を減算するための演算器、及び、信頼性が最小値Ｃｍｉｎ以下になったかどうかを調べるための比較器は必要ない。また、本評価では、Ｖｄｅｃ＝Ｖｍａｘとしており、予測スラックを減少させるときは、０にリセットするだけなので、予測スラックを減算するための演算器、及び、予測スラックがＶｍｉｎ以下になったかどうかを調べるための比較器も必要ない。
【００９８】
増加量Ｃｉｎｃと増加量Ｖｉｎｃはともに１なので、提案機構の加算器４０，５０は、信頼性、あるいは、予測スラックだけを入力とし、その入力に１を加えるという非常に単純な操作を行うだけでよい。具体的には、入力の第０ビットから第ｎ−１ビットがすべて１であれば、入力の第ｎビットを反転したものを、出力の第ｎビットとし、そうでなければ入力の第ｎビットをそのまま出力の第ｎビットとする。従って、従来機構の減算器５とは異なり、非常に簡単に実現できる。
【００９９】
増加量ＣｉｎｃとＶｉｎｃが、ともに１であることを利用すれば、提案機構の比較器９４，１１２も、簡単化できる。提案機構の加算器４０（又は５０）は、信頼性（又は予測スラック）に１を加えるだけである。従って、比較器９４，１１２は、加算器４０（又は５０）の入力データが、Ｃｔｈ−１（又はＶｍａｘ）と一致するのであれば、加算器４０（又は５０）の出力がしきい値Ｃｔｈ以上になる（又は最大値Ｖｍａｘを超える）と判断することができる。
【０１００】
従来機構と提案機構を正確に比較するためには、それぞれの機構において、スラック予測精度がほとんど変化せず、アクセス時間と消費電力ができるだけ少なくなるようなテーブル構成（エントリ数、連想度、ラインサイズ、ポート数）を知る必要がある。しかし、従来機構において、テーブル（スラック表２０、メモリ定義表３、及びレジスタ定義表２）の構成がスラック予測精度に与える影響は、未だ十分に調査されていない。
【０１０１】
そこで、本章では、従来機構と提案機構の精度が同程度になるテーブル構成を用いる。具体的には、スラック表２０に関しては、前章の評価で用いた構成（エントリ数８Ｋ、連想度２）を用いる。しきい値Ｃｔｈと最大値Ｖｍａｘは、どちらも、前章の評価において用いた値において、提案機構のハードウェア量が最も大きくなる値である、１５を仮定する。メモリ定義表３とレジスタ定義表２に関しては、前章で精度を比較するために引用した非特許文献１０で仮定されている構成を用いる。具体的には、メモリ定義表３はエントリ数が８Ｋ、連想度が４、レジスタ定義表２はエントリ数が６４、連想度が６４とする。
【０１０２】
非特許文献１０によれば、定義表３，２はプログラム・カウンタ値（ＰＣ）の一部を保持する。また、前章の評価結果からも分かるように、動的実行命令のうち、実スラックが３０％以下である命令は約７割存在するため、定義時刻を表すために必要なビット数を少なくできる可能性がある。しかし、非特許文献１０において、これらの数値に関する具体的な議論は行われていない。そこで、本章では、スラック予測精度を重視し、定義表３，２にはプログラム・カウンタ値（ＰＣ）をすべて保持すると仮定する。また、定義時刻を表すために必要なビット数の削減は行わないと仮定する。従って、定義表３，２の各データ・フィールドは、最悪のケースを想定した設定となる。
【０１０３】
上記のテーブル構成は、スラック予測精度を重視した構成であるため、アクセス時間と消費電力が過大になる可能性がある。しかし、精度がほぼ同一になることが判明しているテーブル構成を用いて、アクセス時間と消費電力を比較できるという利点がある。
【０１０４】
３．２．ハードウェア量の比較．
ハードウェア量の比較は、必要となるテーブルの保持するメモリ・セル数、及び、演算器の入力ビット数と個数を基にして行う。テーブルにおいて、ハードウェア量の大部分を占めるのは、タグ・アレイとデータ・アレイである。そこで、テーブルのハードウェア量を、タグ・アレイとデータ・アレイの保持するメモリ・セル数によって見積もる。表２に、必要となるテーブルのメモリ・セル数とポート数を示す。表２（ａ）は従来機構の場合を示し、表２（ｂ）は提案機構の場合を示す。
【０１０５】
【表２】
2007293815.tif 000004
【０１０６】
表２には、まず、各テーブルのエントリ数を示し、次に、１エントリあたりのメモリ・セル数を、タグ・フィールドとデータ・フィールドに分けて示す。エントリ数と、１エントリあたりのメモリ・セル数の積が、テーブルの総メモリ・セル数となる。また、表には、各テーブルのポート数も示す。ポート数は、後ほどアクセス時間と消費電力について評価するために用いる。表２では、スラック表２０、メモリ定義表３、レジスタ定義表２のエントリ数をそれぞれＥｓｌａｃｋ、Ｅｍｄｅｆ、Ｅｒｄｅｆと表し、連想度をそれぞれ、Ａｓｌａｃｋ、Ａｍｄｅｆ、Ａｒｄｅｆと表す。同じ条件で比較するため、スラック表のエントリ数と連想度は、提案機構と従来機構で同一としている。Ｎｆｅｔｃｈ、Ｎｉｓｓｕｅ、Ｎｄｃｐｏｒｔ、Ｎｃｏｍｍｉｔはそれぞれ、フェッチ幅、発行幅、データキャッシュのポート数、コミット幅を表す。Ｎｆｅｔｃｈ、Ｎｉｓｓｕｅ、Ｎｃｏｍｍｉｔは同一と仮定する。Ｅｒｏｂは、ＲＯＢのエントリ数を表す。前章の評価環境より、Ｎｆｅｔｃｈ＝８、ＥＲＯＢ＝２５６とする。
【０１０７】
時間Ｔｃｓは、コンテキスト・スイッチ間隔をサイクル単位で表した値である。従来機構では、時刻を用いてスラックを計算する。スケジューラによって選択されたプロセスが実行を開始した時刻を０とすると、その時刻は、プロセスがコンテキスト・スイッチによってプロセッサ上から退避されるまでカウントされる。従って、時刻を正しく表すためには、ｌｏｇ２（Ｔｃｓ）ビット必要となる。ＬｉｎｕｘＯＳにおいて、コンテキスト・スイッチの間隔はｍｓｅｃオーダーなので、時間Ｔｃｓを１ｍｓｅｃ程度と仮定する。また、非特許文献９に示された、０．１３μｍプロセス時のＡＲＭコアの動作周波数より、プロセッサの動作周波数を１．２ＧＨｚと仮定する。これらより、時刻を表現するにはほぼ２０ビット必要となる。そこで、以降は、ｌｏｇ２（Ｔｃｓ）＝２０とする。
【０１０８】
従来機構と提案機構のスラック表２０を比較すると、従来機構は、データ・フィールドのメモリ・セル数がｌｏｇ２（Ｃｔｈ＋１）ビット多くなる。しかし、スラック表２０以外にもテーブルは存在するので、スラック表２０だけでは全テーブルのハードウェア量の大小を判断できない。
【０１０９】
そこで、テーブルの各変数に値を代入して全テーブルのハードウェア量を計算する。提案機構のメモリ・セル数は、スラック表の場合２２９３７６、ＦＩＦＯの場合２０４８となり、合計すると２３１４２４となる。一方、従来機構のメモリ・セル数は、スラック表２０の場合１９６６０８、メモリ定義表３の場合５９８０１６、レジスタ定義表２の場合３８４０となり、合計すると７９８４６４となる。従って、提案機構の方が、メモリ・セル数が少なくなる。
【０１１０】
なお、上記の評価において、従来機構の定義表は、各データ・フィールドのサイズが、最悪のケースを想定した設定となっているが、このサイズが半分になったとしても、提案機構のメモリ・セル数の方が少ないという結論は変わらない。ただし、前節で説明した通り、正確な比較を行うためには、十分なスラック予測精度が得られるテーブル構成を知る必要があり、今後の課題である。
【０１１１】
次に、演算器のハードウェア量を比較する。表３に、演算器の入力ビット数と個数を示す。表３（ａ）は従来機構の場合、表３（ｂ）は提案機構の場合である。
【０１１２】
【表３】
2007293815.tif 000005
【０１１３】
入力ビット数は、演算器の各入力のビット数を合計したものである。なお、比較器９４，１１２の個数は、定義時刻のフォワーディングを行うパイプライン段数が１段の場合の値である。段数が増加すれば、それに比例して、比較器９４，１１２の個数も増加するが、フォワーディングを行う必要がなければ、比較器も必要ない。
【０１１４】
従来機構と提案機構の演算器を比較する。ここでは、提案機構の方が確実にハードウェア量が少なくなることを示すため、従来機構において、定義時刻のフォワーディングは行う必要がない場合を考える。
【０１１５】
Ｎｉｓｓｕｅ＝Ｎｃｏｍｍｉｔ＝８なので、提案機構は、従来機構よりも、演算器の数が２４個、多くなってしまうことが分かる。しかし、提案機構の演算器は、上述したように、非常に簡単に実現できるため、単純に演算器の個数だけに着目して、ハードウェア量を比較することはできない。そこで、各演算器の構成について詳しく検討する。まず、従来機構の減算器は、ｌｏｇ２（Ｔｃｓ）＝２０なので、入力が２０ビットとなる。基本的な回路構成は、入力が２０ビットの加算器とほぼ同様である。この加算器を８倍したものが、従来機構のハードウェア量となる。
【０１１６】
次に、提案機構の演算器の構成について詳しく検討する。まず、しきい値Ｃｔｈと最大値Ｖｍａｘを、先ほどと同様、どちらも１５と仮定すると、提案機構の各演算器は、入力が４ビットとなる。
【０１１７】
図１９は本発明の第１の実施形態に係る更新ユニット３０の構成を示すブロック図である。ここで、図１９は、コミットする命令１つあたりに必要となる演算器（これらで構成される回路を更新ユニット３０という。）の回路構成を示す。当該更新ユニット３０の回路を８倍したものが、提案機構のハードウェア量となる。図１９の到達条件フラグＲｆｌａｇは、ターゲット・スラック到達条件が成立しているときに１となり、そうでないときに０となるフラグである。図１９の中央のアンドゲート３１，３５がそれぞれ信頼性比較器９４、予測スラック比較器１１２を構成し、点線で囲われた各部分が加算器４０，５０を構成し、その他の素子（オアゲート３３，３７及びマルチプレクサ３４，３８，３９）が制御用の回路である。ここで、入力ビット数が４ビットの場合、信頼性比較器９４及び予測スラック比較器１１２はそれぞれ、入力値の各ビットを、そのまま、あるいは、反転したものを入力とする、４入力のアンドゲート３１、アンドゲート３５で実現できる。また、提案機構の各加算器４０，５０は、２個のアンドゲート（４１−４２；５１−５２）、４個のインバータ（４３−４６；５３−５６）、３つのマルチプレクサ（４７−４９；５７−５９）で実現できる。従って、従来機構で必要となる２０ビットの減算器よりも十分少ないハードウェア量で実現できるといえる。
【０１１８】
３．３．アクセス時間と消費電力に関する比較．
本節では、テーブルのアクセス時間と、１アクセスあたりの消費エネルギーを求めるために、キャッシュ・シミュレータである公知のＣＡＣＴＩ（例えば、非特許文献１２参照。）を用いる。ＣＡＣＴＩによる評価では、非特許文献９のＡＲＭコアのデータを基に、プロセスを０．１３μｍ、電源電圧を１．１Ｖと仮定する。ＣＡＣＴＩではテーブルのラインサイズをバイト単位で入力する必要がある。しかし、従来機構のスラック表は、データ・フィールドが４ビットであるため、ラインサイズが１バイトに満たない。そこで、ＣＡＣＴＩで評価する場合に限り、データ・フィールドを８ビットと仮定する。しかし、この仮定によって、従来機構のスラック表の規模だけが２倍になってしまうため、このままでは公平な比較ができない。そこで、ＣＡＣＴＩで提案機構を評価する場合、スラック値を保持するテーブルである、スラック表２０とＦＩＦＯ１７のデータ・フィールドを、８ビットから、１６ビットに増加させる。なお、メモリ定義表３とレジスタ定義表２は、スラック値を保持しないので、データ・フィールドの変更は行わない。
【０１１９】
上記の仮定によって、提案機構のスラック表２０は、アクセス時間が４．１％、消費エネルギーが２３％増加する。このことから、従来機構のスラック表２０の評価結果も、同程度の誤差が生じていると考えられる。また、提案機構のＦＩＦＯ１７はアクセス時間が４．２％減少し、消費エネルギーが１１６％増加する。そこで、比較を行う際には、この誤差の影響を考慮する。なお、ＦＩＦ２７Ｏのアクセス時間が減少する理由は、ＣＡＣＴＩが、テーブル構成によって、データ・アレイの分割方法を変えることにある。
【０１２０】
まず、提案機構と従来機構のアクセス時間を比較する。既に示したように、スラック予測機構で使用される演算器の規模は、ＡＬＵ（Arithmetic Logical Unit）よりも小さい。一方、テーブルに関しては、プロセッサ中で用いられるデータキャッシュと同程度（あるいはそれ以上）の規模のものが存在する。そのため、提案機構と従来機構のアクセス時間は、テーブルのアクセス時間で決まると考えることができる。そこで、テーブルのアクセス時間を比較する。
【０１２１】
表４にＣＡＣＴＩで測定した、テーブルのアクセス時間を示す。表４（ａ）が従来機構の場合、表４（ｂ）は提案機構の場合である。
【０１２２】
【表４】
2007293815.tif 000006
【０１２３】
表４より、スラック表２０は、メモリ定義表３に比べ、ハードウェア量が少ないにも関わらず、アクセス時間が非常に長くなっていることが分かる。この理由は、テーブルのアクセス時間が、ハードウェア量ではなく、テーブル構成（エントリ数、連想度、ラインサイズ、ポート数など）で決まることにある。
【０１２４】
また、動作周波数は１．２ＧＨｚ（サイクル時間０．８３ｎｓｅｃ）を仮定しているので、スラック表２０、メモリ定義表３、及びレジスタ定義表２に対して高速にアクセスするためには、それぞれを、６段、３段、２段程度にパイプライン化する必要があることが分かる。スラック表２０のアクセス時間の測定誤差を考慮したとしても、この段数が減ることはない。しかし、これらのテーブル３，２を６段にパイプライン化したとしても、フェッチした命令の予測スラックを得るために要するサイクル数が非常に長く、それを利用することは困難である。また、メモリ定義表３、及びレジスタ定義表２をパイプライン化すると、定義時刻のフォワーディングを行うために、消費電力が増加してしまうという問題がある。しかし、本節では、これらのテーブル３，２を上記のようにパイプライン化したとして議論をすすめ、これらの問題については、次節で議論する。
【０１２５】
さらに、表４より、どちらの機構においてもスラック表２０のアクセス時間が最も長いことが分かる。従って、アクセス時間は、提案機構の方が長いことが分かる。スラック表２０のアクセス時間には測定誤差があるが、どちらの機構においてもアクセス時間は同程度増加すると考えられるので、この結論に影響はない。
【０１２６】
次に、消費電力の比較を行う。ただし、前章の評価結果より、従来機構と提案機構の実行時間はほぼ同一となるので、消費エネルギーを比較すればよい。回路の全消費エネルギーは、１回の動作あたりに必要な消費エネルギーと、動作回数の積で表される。
【０１２７】
各回路の動作回数は、前章の評価環境を用いて計測する。前章で用いたシミュレータに従来機構は組み込まれていないので、従来機構の各回路の動作回数は、プロセッサ１０の動作から推測する。具体的には、スラック表２０の場合、フェッチ時に参照し、命令実行時に更新するので、フェッチした命令数と機能ユニットで実行した命令数の和を動作回数とする。メモリ定義表３の場合、ロード命令の実行時に参照し、ストア命令の実行時に更新するので、ロード／ストア命令の実行回数を、動作回数とする。レジスタ定義表２の場合、実行する命令のソース・レジスタに対応する物理レジスタ番号で参照し、デスティネーション・レジスタに対応する物理レジスタ番号で更新するので、機能ユニット１５で実行した命令のソース・レジスタ数とデスティネーション・レジスタ数の和を、動作回数とする。減算器５の場合、時刻からスラックを計算する可能性のある命令、つまり、機能ユニット１５で実行した、デスティネーション・レジスタを持つ命令とストア命令の数の和を、動作回数とする。従来機構の比較器については、パイプライン化されたメモリ定義表３及びレジスタ定義表２が存在すると仮定して、各サイクルにおいて、どの命令がどのテーブルの参照／更新を行っているのかをシミュレーションする。そして、同じテーブルに対して参照／更新を行う命令間で、定義時刻のフォワーディングのために必要となる、メモリ・アドレスの比較、あるいは、物理レジスタ番号の比較を行い、その比較回数をそれぞれ、アドレス用比較器、レジスタ番号用比較器の動作回数とする。サイクル時間は０．８３ｎｓｅｃを仮定しているので、表４より、メモリ定義表３とレジスタ定義表２はそれぞれ、３段、２段にパイプライン化すると仮定する。
【０１２８】
１動作あたりの消費エネルギーは、テーブルの場合ＣＡＣＴＩを用いて測定する。一方、演算器の場合、前節で示したハードウェア量を基に、どちらの消費エネルギーの方が大きくなるのかを検討する。
【０１２９】
表５に、各回路の動作回数のベンチマーク平均と、テーブルの１動作あたりの消費エネルギーを示す。表５（ａ）は従来機構の場合を示し、表５（ｂ）は提案機構の場合を示す。
【０１３０】
【表５】
2007293815.tif 000007
【０１３１】
まず、演算器の消費エネルギーを比較する。ここで、演算器の１動作あたりの消費エネルギーは、１回の動作で充放電する負荷容量の平均と、電源電圧の２乗の積で表される。電源電圧は一定である。一方、充放電する負荷容量は、動作時にスイッチしたノードの全容量で表される。この値を正確に求めるためには、演算器を設計し、与えられた入力に対してどのノードがスイッチしたかを調べる必要があり、容易に評価することができない。そこで本節では、比較を簡単に行うために、ハードウェア量が多いほど充放電する負荷容量も増えると仮定する。そして、前節で示したハードウェア量を基に、演算器の１動作あたりの消費エネルギーを比較する。
【０１３２】
前節より、提案機構の演算器（更新ユニット３０）のハードウェア量は、従来機構の減算器よりも十分少ない。そのため、提案機構の演算器を１回動作させるために必要な消費エネルギーも少ないと判定することができる。また、表５より、演算器の動作回数は提案機構の方が少ない。これらより、提案機構の演算器の全消費エネルギーは、従来機構の減算器よりも少なくなると考えられる。
【０１３３】
さらに、従来機構では、定義時刻のフォワーディングを行う必要がある。具体的には、配線を用いて、比較値（アドレス又はレジスタ番号）と定義時刻をブロードキャストし、比較器を用いて、アドレス比較、又はレジスタ番号比較を行い、比較結果が一致すれば、マルチプレクサ４を介して、対応する定義時刻を減算器５に供給するという操作を行う。そのため、１動作あたりの消費エネルギーは無視できないレベルになると考えられる。また、表５より、アドレスの比較回数とレジスタ番号の比較回数はそれぞれ、２７Ｍ、４８８Ｍと多い。
【０１３４】
これらより、提案機構の演算器の全消費エネルギーは、従来機構の演算器（減算器、比較器、及び、ブロードキャスト用の配線）の全消費エネルギーよりも、かなり少なくなると考えることができる。
【０１３５】
次に、テーブルの消費エネルギーを比較する。役割がほぼ同じであるスラック表２０において、１動作あたりの消費エネルギーは、従来機構の方が少なく、動作回数は、提案機構の方が少ないが、スラック表２０の全消費エネルギーは、従来機構の方が少なくなる。しかし、テーブル全体の消費エネルギーを合計すると、従来機構の場合１．７６Ｊ、提案機構の場合１．６２Ｊとなり、提案機構の方が少なくなることが分かる。
【０１３６】
ここで、ＣＡＣＴＩの測定誤差の影響について考える。スラック表２０の消費エネルギーには測定誤差があるが、どちらの機構においても消費エネルギーは同程度増加すると考えられるので、スラック表２０の比較結果に影響はないといえる。また、測定誤差によってＦＩＦＯの消費エネルギーはより大きく見積もられるが、メモリ定義表３とレジスタ定義表２の消費エネルギーに測定誤差は生じない。これらより、テーブル全体の消費エネルギーに与える影響を考えると、発生する測定誤差は、提案機構に対してより不利に働く。従って、提案機構の消費エネルギーの方が小さいという結論は変わらないといえる。
【０１３７】
以上より、消費エネルギーは、演算器とテーブル、いずれにおいても、従来機構の方が大きくなると考えられる。
【０１３８】
従来機構のスラック表２０は、提案機構よりも消費エネルギーが小さい。そのため、スラック予測精度を低下させることなく、メモリ定義表３とレジスタ定義表２の消費エネルギーを削減することができれば、全テーブルの消費エネルギーを提案機構よりも小さくできる可能性がある。この目的を達成するアプローチとして、回路中で用いられるトランジスタのサイズを小さくし、充放電する負荷容量を減らすという方法が考えられる。この方法では、テーブル構成を変えなくてもよいため、スラック予測精度を低下させることなく、消費エネルギーを削減できる。
【０１３９】
しかし、このアプローチでは、トランジスタのサイズを小さくするので、メモリ定義表３とレジスタ定義表２のアクセス時間が長くなってしまう。その結果、これらのテーブルは、パイプライン段数が増加し、定義時刻のフォワーディングに要する消費エネルギーが増加してしまう。このように、高速アクセスに必要となる、定義時刻のフォワーディングは、演算器の消費エネルギーを増大させるだけでなく、上記アプローチによる消費エネルギーの削減も妨げていることが分かる。
【０１４０】
３．４．参照の局所性を利用したテーブル構成の最適化．
前節で用いたテーブル構成は、アクセス時間が非常に長くなるため、予測スラックの利用を困難にするという問題と、定義時刻のフォワーディングに関する消費エネルギーを増加させるという問題を引き起こす。これらの問題を解決するためには、テーブル構成（エントリ数、連想度、ラインサイズ、ポート数）を変更する必要がある。しかし、３．１．節で述べた通り、従来機構において、テーブル構成がスラック予測精度に与える影響は明らかにされていない。そのため、テーブル構成を単純に変化させて、アクセス時間や消費電力を測定することはあまり意味が無い。
【０１４１】
そこで、本節では、前節で用いたテーブル構成に対して、スラック予測精度に与える影響が少ないと考えられる変更のみを行い、アクセス時間と消費電力がどのように改善されるのかを評価する。なお、提案機構のＦＩＦＯ１７は、他のテーブルよりもアクセス時間が十分に短いため、構成は変更しない。
【０１４２】
この目的のために、本発明者は、各テーブルのアクセス・パターンに着目する。まず、スラック表２０について、データの参照時と更新時のパターンに分けて考える。スラック表２０の参照では、フェッチする命令のプログラム・カウンタ値（ＰＣ）をインデクスとして用いる。そのため、命令キャッシュと同様、インデクスとして用いるプログラム・カウンタ値（ＰＣ）は、ｔａｋｅｎ（テイクン：「分岐」）と予測した分岐に到達するまで連続しており、参照の局所性が非常に高い。
【０１４３】
一方、スラック表２０の更新では、従来機構の場合、機能ユニット１５で実行した命令のプログラム・カウンタ値（ＰＣ）をインデクスとして用いる。従って、インデクスとして用いるプログラム・カウンタ値（ＰＣ）は、アウト・オブ・オーダー実行によって不連続になるものの、順番が入れ替わる範囲はプロセッサ１０内の命令に限られるので、依然として参照の局所性は高いといえる。また、提案機構の場合、ＲＯＢ１６からコミットした命令のプログラム・カウンタ値（ＰＣ）をインデクスとして用いる。従って、インデクスとして用いるプログラム・カウンタ値（ＰＣ）は、ｔａｋｅｎ分岐に到達するまで連続しており、更新の局所性は非常に高い。
【０１４４】
以上より、スラック表２０においては、スラック予測精度にほとんど影響を与えることなく、ラインサイズを増やすことができると考えられる。ただし、キャッシュと同様、ラインサイズを増やしすぎると、ラインの利用効率が下がり、テーブルのミス率が増加するので、そのことを考慮して、ラインサイズを決定する必要がある。
【０１４５】
さらに、インデクスとして用いるプログラム・カウンタ値（ＰＣ）が連続していることを利用し、ライン単位で参照／更新を行うようにすれば、リード・ポートとライト・ポートの削減ができると考えられる。
【０１４６】
ここで、スラック表２０のラインサイズを増やし、１ライン上に２命令分のスラック値を保持した場合、ライン単位で参照／更新を行うと、リード・ポートとライト・ポートがどれだけ削減できるかを考える。本節で想定しているプロセッサ１０では、Ｎｆｅｔｃｈ＝８なので、ライン単位で参照／更新を行うのであれば、ポート数は１０本（リード・ポート５本、ライト・ポート５本）まで削減できる。それ以上ポートが存在しても、使用することはできない。また、参照／更新の対象となるスラック値は、必ずしもラインの先頭から順番に並んでいる訳ではないので、ポート数をさらに８本まで減らと、参照／更新に失敗する場合が発生してしまう。これらより、ラインサイズが決まれば、削減できるポート数は一意に決まることが分かる。
【０１４７】
同様にして、さらにラインサイズを増加させた場合について考えると、１ライン上に４命令分、８命令分のスラック値を保持した場合、ポート数はそれぞれ、６本、４本となることが分かる。ただし、それを超えてラインサイズを増やしても、参照／更新の対象となるスラック値は２つのラインに分かれて存在する可能性があるため、ポート数を４本よりも小さくすることはできない。なお、従来機構の場合、更新時にインデクスとして用いるＰＣは連続していないので、ライン単位で更新を行ってもライト・ポートの削減はできない。しかし、更新データをバッファに蓄え、そこからフェッチ順に更新して行くという変更を加えれば、比較的容易に更新データの整列ができると考えられる。そこで本節では、従来機構においても、ライト・ポートの削減は可能であると仮定する。
【０１４８】
図２０は従来技術に係る従来機構のシミュレーション結果であって、ラインサイズに対するスラック長のアクセス時間を示すグラフである。図２１は図１９の更新ユニット３０を備えた提案機構のシミュレーション結果であって、ラインサイズに対するスラック長のアクセス時間を示すグラフである。すなわち、図２０及び図２１にそれぞれ、従来機構と提案機構において、スラック表２０のラインサイズを、２ｎ倍（１≦ｎ≦７）に増加させて、アクセス時間を評価した結果を示す。評価にはＣＡＣＴＩを用いる。前節で説明したように、従来機構のスラック表２０は、データ・フィールドが４ビットであるため、ラインサイズを増加させない場合、ＣＡＣＴＩで評価できない。しかし、上記のようにラインサイズを増加させれば、ラインサイズはバイト単位で増加して行くため、ＣＡＣＴＩで評価できるようになる。そこで、本節では、前節とは異なり、データ・フィールドのビット数を変更せずに評価を行う。これにより、前節よりも正確に従来機構と提案機構の比較ができるようになる。
【０１４９】
図２０及び図２１の縦軸は、アクセス時間を示し、その横軸はラインサイズを示す。折れ線グラフは、上側がポート数を削減しない場合、下側がポート数を削減する場合である。図２０及び図２１から分かるように、ポート数を減らすとアクセス時間が短くなることが分かる。一方、アクセス時間は、ラインサイズの増加にともない最初は減少するが、しばらくすると、逆に増加して行くという傾向にあることが分かる。従って、アクセス時間を減らすのであれば、ポート数を減らし、１ライン上に８命令分か１６命令分のスラック値を保持すればよいことが分かる。しかし、１ライン上に、１６命令分以上のスラック値を保持しても、これらがすべて同時に必要になることはなく、ラインの利用効率が下がる。そこで、本節では、スラック表２０のラインサイズを、８命令分のスラック値を保持できるサイズに変更し、ポート数を削減する。具体的には、従来機構の場合４Ｂ（Ｂはバイトであり、以下同様である。）、提案機構の場合８Ｂとする。この時、いずれの機構においても、ポート数は４本に削減できる。
【０１５０】
次に、メモリ定義表３について考える。メモリ定義表３は、ロード・アドレスとストア・アドレスをインデクスとしてそれぞれ、参照して更新を行う。従って、データキャッシュと同様、参照の局所性が高いといえる。そのため、スラック予測精度にほとんど影響を与えることなく、ラインサイズを増やすことができると考えられる。ただし、先程と同様、ラインサイズを増やしすぎないようにする必要がある。
【０１５１】
図２２は図１９の更新ユニット３０を備えた提案機構のシミュレーション結果であって、ラインサイズに対するメモリ定義表のアクセス時間を示すグラフである。すなわち、図２２に、メモリ定義表３のラインサイズを変化させて、アクセス時間を評価した結果を示す。図２２の縦軸はアクセス時間を示し、図２２の横軸はラインサイズを示す。図２２から分かるように、アクセス時間は、ラインサイズの増加に伴い減少するが、２８Ｂの時点で減少しなくなり、１１２Ｂ以上では増加してしまうことが分かる。従って、アクセス時間を減らすのであれば、５６Ｂを超えないようにラインサイズを増やせばよいことが分かる。
【０１５２】
しかし、ラインサイズを増やしすぎると、ラインの利用効率が下がり、テーブルのミス率が増加してしまう可能性がある。非特許文献７によれば、容量が１Ｋ〜２５６ＫＢのデータキャッシュにおいて、ラインサイズを１６Ｂから２５６Ｂまで増加させていった場合、３２Ｂまでであれば、どの容量においても、キャッシュ・ミス率が低下して行くことが示されている。この場合、最小のブロックは４Ｂなので、ラインサイズが３２Ｂの場合、１ライン上に８ブロック分のデータを保持することを意味する。ベンチマーク等の評価環境が異なるが、本節では、この結果を参考に、テーブルのミス率を増加させないラインサイズの範囲を仮定する。具体的には、メモリ定義表３では、最小のブロックは７Ｂ（ＰＣ＋定義時刻）なので、５６Ｂ以下のラインサイズであれば、テーブルのミス率は増加しないと仮定する。以上より、本節では、メモリ定義表３のラインサイズを５６Ｂに変更する。
【０１５３】
最後に、レジスタ定義表２について考える。レジスタ定義表２は、命令に割り当てられた物理レジスタ番号をインデクスとして、命令の実行直前に参照し更新する。従って、スラック表２０や、メモリ定義表３のような参照の局所性はない。そのため、本節では、レジスタ定義表２の構成は変更しない。
【０１５４】
表６に、参照の局所性に着目して、テーブル構成を最適化した場合の、アクセス時間と１動作あたりの消費エネルギーを示す。なお、本節では、ＣＡＣＴＩで評価する際に、前節で行ったようなデータ・フィールドのビット数の変更を行う必要がない。そこで、そのような変更を行わなかった場合のＦＩＦＯ１７についても、アクセス時間と１動作あたりの消費エネルギーを示す。
【０１５５】
【表６】
2007293815.tif 000008
【０１５６】
表６より、従来機構と提案機構のスラック表は、どちらも、アクセス時間が大幅に減少し、仮定しているサイクル時間０．８３ｎｓｅｃと非常に近い値となることが分かる。これにより、パイプライン段数は、従来機構の場合１段に、提案機構の場合２段に減少するので、フェッチした命令のスラック値を利用することは十分可能になる。また、メモリ定義表のアクセス時間が減少し、パイプライン段数が３段から２段になる。これにより、アドレス用比較器の数が段数分減少し、この比較器を動作させる回数が２７Ｍから１３Ｍに減少する。しかし、依然として定義時刻のフォワーディングは必要であり、演算器の全消費エネルギーは、従来機構の方が大きくなる。また、表６より、スラック表２０とメモリ定義表３のどちらにおいても、１動作あたりの消費エネルギーが削減されていることが分かる。
【０１５７】
次に、スラック予測機構全体のアクセス時間と消費エネルギーについて考える。表４及び表６より、スラック表２０のアクセス時間が減少したことによって、従来機構のアクセス時間の方が、提案機構よりも長くなったことが分かる。
【０１５８】
表５及び表６を用いて、テーブル構成を最適化した後の消費エネルギーを計算する。なお、スラック表２０には、ライン単位で参照／更新を行い、ポート数を４分の１にするという変更が加えられているので、スラック表の動作回数は、表５に示された値の４分の１になると仮定して計算を行う。計算の結果、テーブル全体の消費エネルギーは、従来機構の場合０．３７Ｊ、提案機構の場合０．０６Ｊとなり、どちらも大幅に減少していることが分かる。なお、前節と同様、スラック表２０の消費エネルギーは従来機構の方が小さくなり、テーブル全体の消費エネルギーは提案機構の方が小さくなる。
【０１５９】
以上より、参照の局所性を利用して、テーブル構成を最適化することで、スラック表２０のアクセス時間に関する問題は解決できることが分かる。また、スラック予測機構の消費エネルギーを大幅に削減できることが分かる。
【０１６０】
４．機能ユニットの消費電力の削減．
ローカル・スラック予測の応用例として、予測スラックが１以上ある命令を、より低速でより消費電力の低い機能ユニットで実行することで、性能を大きく低下させることなく機能ユニットの低消費電力化をはかる研究が行われている（例えば、非特許文献６参照。）。そこで、本実施形態においても、上記の低消費電力化を応用例として取り上げ、提案手法の効果を評価する。
【０１６１】
４．１．評価環境．
２章で述べた評価環境との違いについて述べる。図２３は本発明の第１の実施形態の第１の変形例に係る、スラック表２０を備えたプロセッサ１０Ａの構成を示すブロック図である。
【０１６２】
整数演算用の機能ユニット（ｉＡＬＵ）として、高速なものと低速なものを２種類用意する。図２３において、１５ａは高速で動作する機能ユニットであり、１５ｂは低速で動作する機能ユニットである。非特許文献９によると、０．１３μｍプロセスにおけるＡＲＭコアは、動作周波数が１．２ＧＨｚ、６００ＭＨｚの場合、電源電圧がそれぞれ、１．１Ｖ、０．７Ｖであることが示されている。これを基に、プロセッサの動作周波数を１．２ＧＨｚ（サイクル時間０．８３ｎｓｅｃ）とし、高速なｉＡＬＵと低速なｉＡＬＵは、実行レイテンシがそれぞれ１サイクル、２サイクル、電源電圧がそれぞれ１．１Ｖ、０．７Ｖとする。評価では、高速なｉＡＬＵをｎ個持つモデルを、（ｎｆ，（６−ｎ）ｓ）モデルと呼ぶこととする。
【０１６３】
提案手法を用いてローカル・スラックを予測する。従来手法に近い条件で評価を行うため、予測スラックの最大値Ｖｍａｘ＝１、しきい値Ｃｔｈ＝１５とし、スラック表２０のパラメータをすべて固定する。命令スケジューラが、オペランドの揃った命令から、ｉＡＬＵで実行する命令を選択した後、選択した命令において、予測スラックが１である命令を低速なｉＡＬＵに、予測スラックが０である命令を高速なｉＡＬＵに割り当てる。ただし、低速なｉＡＬＵに空きがなければ高速なｉＡＬＵに、高速なｉＡＬＵに空きがなければ低速なｉＡＬＵに命令を割り当てる。予測スラックは、命令をｉＡＬＵに割り当てるときにのみ利用し、その他の処理では利用しない。例えば、命令スケジューラが、ｉＡＬＵで実行する命令を選択する際に、予測スラックを利用することはない。また、命令をｉＡＬＵに割り当てる順番は、命令スケジューラが命令を選択した順番に従っており、予測スラックを利用することはない。
【０１６４】
上記の手法では、低速なｉＡＬＵで命令を実行することで、ｉＡＬＵの消費エネルギーを削減する。しかし、予測スラックが実スラックを上回っている場合は、プロセッサ性能に悪影響を与えてしまう。プロセッサ１０において、性能は非常に重要な要素である。そこで、消費エネルギー削減効果と、プロセッサ性能への悪影響を同時に考慮できる指標として、消費エネルギーと、プロセッサの実行時間の積（ＥＤＰ：Energy Delay Product)を測定する。
【０１６５】
プロセッサ１０の実行時間は、実行サイクル数とサイクル時間（動作周波数の逆数）の積で表すことができる。一方、機能ユニット１５ａ，１５ｂの消費エネルギーは、ｉＡＬＵで命令を実行した回数と、１実行あたりの消費エネルギーの積で表すことができる。１実行あたりの消費エネルギーは、１回の実行で充放電する負荷容量の平均と、電源電圧の２乗の積で表すことができる。従って、ＥＤＰは、次式（１）で表される。
【０１６６】
［数１］
ＥＤＰ＝（Ｃｆ・Ｖｆ２・Ｎｆ＋Ｃｓ・Ｖｓ２・Ｎｓ）・Ｎｃ／ｆ      （１）
【０１６７】
ここで、Ｃｆ、Ｃｓはそれぞれ、高速なｉＡＬＵ、低速なｉＡＬＵにおいて、１実行あたりに充放電される負荷容量である。Ｖｆ、Ｖｓはそれぞれ、高速なｉＡＬＵ、低速なｉＡＬＵの電源電圧である。Ｎｆ、Ｎｓはそれぞれ、高速なｉＡＬＵ、低速なｉＡＬＵにおいて命令を実行した回数であり、Ｎｃは実行サイクル数である。ｆは動作周波数である。
【０１６８】
パラメータＶｆ、Ｖｓ、ｆは先程仮定した値を用いる。パラメータＮｆ、Ｎｓ、Ｎｃは、シミュレーションによって求める。高速なｉＡＬＵと低速なｉＡＬＵは、動作周波数と電源電圧が異なるが、実行できる命令の種類は同じである。そこで本節では、ある動的命令をどちらのｉＡＬＵで実行したとしても、その命令の実行を完了するまでに充放電する負荷容量（動作時にスイッチするノードの全容量）は同じであると仮定し、Ｃｆ＝Ｃｓとする。
【０１６９】
なお、厳密には、回路中でスイッチするノードは、演算の種類（加算、シフト等）や入力値に依存するため、これらが異なると、１回の実行で充放電する負荷容量も変わる。この値を正確に求めるためには、演算器を設計し、与えられた入力に対してどのノードがスイッチしたかを調べる必要があり、容易ではない。そのため、本節の評価では、演算の種類や入力値の違いで発生する負荷容量の変化は考慮しない。
【０１７０】
４．２．評価結果
図２４は図２３のプロセッサ１０Ａの実施例のシミュレーション結果であって、各プログラムに対する正規化されたＩＰＣを示すグラフである。図２５は図２３のプロセッサ１０Ａの実施例のシミュレーション結果であって、各プログラムに対する正規化されたＥＤＰ（Energy Delay Product：消費エネルギーと、プロセッサ１０Ａの実行時間の積）を示すグラフである。すなわち、図２４及び図２５にそれぞれ、各ベンチマークのＩＰＣとＥＤＰを示す。６本で組になっている棒グラフは、左から順に、（５ｆ／１ｓ）、（４ｆ／２ｓ）、（３ｆ／３ｓ）、（２ｆ／４ｓ）、（１ｆ／５ｓ）、（０ｆ／６ｓ）モデルの場合である。図２４の縦軸は（６ｆ／０ｓ）モデル（すべてのｉＡＬＵが高速なモデル）のＩＰＣで正規化したＩＰＣを示し、図２５の縦軸は、（６ｆ／０ｓ）モデルのＥＤＰで正規化したＥＤＰを示す。
【０１７１】
図２４及び図２５より、どのベンチマークにおいても、ほぼ同様の傾向を示すことが分かる。高速なｉＡＬＵの数を減少させると、ほとんどの場合、ＥＤＰは単調に減少して行く。しかし、提案手法は予測スラックに基づいて命令をスケジューリングするため、ＩＰＣの減少を抑制できている。（０ｆ／６ｓ）モデル（すべてのｉＡＬＵが低速なモデル）は、平均でＩＰＣの低下が２０．２％、ＥＤＰの削減率が４１．６％となる。これに対し、（１ｆ／５ｓ）モデルは、ＥＤＰの削減率が３４．５％もあるにも関わらず、ＩＰＣの低下を１０．５％まで改善することができる。また、（３ｆ／３ｓ）モデルは、ＩＰＣの低下がわずか３．８％であるにも関わらず、ＥＤＰの削減率が２０．３％にもなる。
【０１７２】
非特許文献６では、本実施形態とはベンチマーク・プログラムやプロセッサ構成が異なるものの、スラック予測機構として従来手法を用いて、（３ｆ／３ｓ）モデルを評価している。その結果、４．５％のＩＰＣの低下で、１９％のＥＤＰを削減できることを示している。これより、提案手法は、従来手法と同様の結果を示すことが分かる。
【０１７３】
以上の評価では、機能ユニットの消費電力にのみ着目している。スラック表の消費電力も考慮すると、プロセッサ全体の消費電力は低下しない可能性が十分あり、今後の課題である。しかし、現状においても、機能ユニットの消費電力を抑えることで、チップ上のホットスポットを削減できるという効果が得られると考える。
【０１７４】
４．３．予測スラックの最大値Ｖｍａｘを２以上とした場合の応用例．
前節で評価した応用例では、各命令を実行する際の緊急度を３種類以上に分ける事ができるというスラックの利点が活かされていない。そこで、提案するスラック予測機構において、予測スラックの最大値Ｖｍａｘを２以上とした場合の応用例を示す。
【０１７５】
応用例として、機能ユニットの低消費電力化を行ったプロセッサの性能低下を抑制することが考えられる。例えば、予測スラックの最大値Ｖｍａｘ＝２とした（３ｆ／３ｓ）モデルにおいて、命令スケジューラが選択した命令を以下のようにｉＡＬＵに割り当てる。まず、予測スラックが０である命令を高速なｉＡＬＵに割り当てる。高速なｉＡＬＵに空きがない場合は、低速なｉＡＬＵに割り当てる。次に、予測スラックが２である命令を低速なｉＡＬＵに割り当てる。低速なｉＡＬＵに空きがない場合は、高速なｉＡＬＵに割り当てる。最後に、予測スラックが１である命令を低速なｉＡＬＵに割り当てる。低速なｉＡＬＵに空きがない場合は、高速なｉＡＬＵに割り当てる。これにより、予測スラックが１、あるいは、２である命令の総数が、低速なｉＡＬＵの数を上回った場合に、緊急度がより高い（予測スラックが１である）命令を優先的に高速なｉＡＬＵに割り当てることができる。
【０１７６】
上記以外にも、予測スラックを基に命令スケジューリングを行い、性能向上をはかるという応用例が考えられる。例えば、Ｖｍａｘ＝２とした（３ｆ／３ｓ）モデルにおいて、命令スケジューラに次の修正を加える。すなわち、オペランドの揃った命令から、予測スラックの小さい順に命令を選択し、選択しなかった命令の予測スラックが１か２であれば、それを１だけ減らす。なお、選択されなかった命令の予測スラックを１だけ減らすのは、選択されないことで、その命令の実行開始が１サイクル遅れるからである。この修正により、予測スラックがｎである命令の代わりに、予測スラックがｎ＋１以上である命令を選択してしまうということがなくなる。その結果、緊急度に応じた順番で、命令を実行できるようになるため、低消費電力化による性能低下を緩和できる可能性がある。
【０１７７】
５．まとめ．
今回、本発明者は発見的手法によってスラックを予測する機構を提案した。命令の振る舞いから間接的にスラックを予測するため、従来手法に対しより単純なハードウェアで実現できる。評価の結果、スラック表の信頼性のしきい値が１５の場合、わずか２．５％のＩＰＣ低下で、３１．６％の命令について実行レイテンシを１サイクル増加させることができると分かった。また、機能ユニットの低消費電力化を行った場合、わずか３．８％のＩＰＣ低下で、ＥＤＰを２０．３％削減できることが分かった。
【０１７８】
６．別の実施例のシミュレーション結果
さらに、別の実施例のシミュレーション結果について以下に説明する。
【０１７９】
図２６は図２３のプロセッサ１０Ａの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたＩＰＣを示すグラフである。図２７は図２３のプロセッサ１０Ａの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたＥＤＰ（Energy Delay Product：消費エネルギーと、プロセッサの実行時間の積）を示すグラフである。すなわち、図２６及び図２７に、各モデルでの各ベンチマークでの正規化ＩＰＣ及び正規化ＥＤＰの測定結果を示す。図２６の縦軸は、（６ｆ，０ｓ）モデル（全ｉＡＬＵが高速なモデル）でのＩＰＣを基準（１００）としたＩＰＣの比率を、図２７の縦軸は、同じく（６ｆ，０ｓ）モデル（全ｉＡＬＵが高速なモデル）でのＥＤＰを基準（１００）としたＥＤＰの比率をそれぞれ示している。また、図２６及び図２７における各ベンチマーク・プログラムにおける６本組の縦棒は、図中左側から（５ｆ，１ｓ），（４ｆ，２ｓ），（３ｆ，３ｓ），（２ｆ，４ｓ），（１ｆ，５ｓ），（０ｆ，６ｓ）の各モデルでの測定結果をそれぞれ表すものとなっている。
【０１８０】
図２６及び図２７に示されるように、いずれのベンチマーク・プログラムでも、同様の傾向が見られる。すなわち、高速なｉＡＬＵの数を減少させると、ほとんどの場合、ＥＤＰは単調に減少してゆくようになる。ただし、ローカル・スラックの予測結果に基づいて命令の振り分けを行ったことで、高速なｉＡＬＵの数の減少に伴うＩＰＣの低下は好適に抑制されている。例えば（０ｆ，６ｓ）モデル、すなわち全ｉＡＬＵが低速なモデルでは、ベンチマーク平均のＩＰＣの低下が２０．２％、ＥＤＰの削減率は４１．６％となっている。これに対して（１ｆ，６ｓ）モデルでは、ＥＤＰの削減率が３４．５％もあるにも拘わらず、ＩＰＣの低下は１０．５％に留まっている。さらに（３ｆ，３ｓ）モデルでは、ＩＰＣの低下をわずか３．８％としながらも、ＥＤＰの削減率は２０．３％にもなる。
【０１８１】
なお、上記評価では、機能ユニット１５の消費電力のみに着目しており、スラック表２０の動作に要する消費電力については全く考慮していないため、プロセッサ全体の消費電力の削減効果は上記の結果よりは低くなる。ただし、スラック表２０の動作に要する消費電力を十分に低く抑えることさえできれば、プロセッサ全体の消費電力の削減にも十分な効果を期待することができる。最も、機能ユニット１５はチップ上における代表的なホットスポットの一つであり、たとえプロセッサ全体の消費電力の削減が適わずとも、機能ユニットの消費電力が抑えられれば、チップ上のホットスポットの分散させることができるという効果は得ることができる。
【０１８２】
なお、本実施形態のローカル・スラック予測機構では、フェッチ・ユニット１１は、上記実行レイテンシ設定手段としての機能も兼ねている。またスラック表２０（厳密にはそのエントリの更新に係る動作回路）が、上記推定手段及び予測スラック更新手段としての機能も兼ね備えるようにしている。
【０１８３】
以上説明した本実施形態のローカル・スラックの予測方法、及びローカル・スラック予測機構によれば、次の効果を奏することができる。
（１）予測スラックを計算で直接的に求めるのではなく、命令の実行時の振る舞いを観測しながら、ターゲット・スラックに到達するまで予測スラックを徐々に増加させることで求めているため、予測スラックの直接演算に要する複雑な機構は不要であり、より簡易な構成でローカル・スラックの予測を行うことができる。
（２）プロセッサが元より備える検出機構で検出可能な上記条件（Ａ）〜（Ｄ）の命令実行時の振る舞いをローカル・スラック到達条件としたため、ローカル・スラック予測のために格別な検出機構を追加設置せずとも、予測スラックのターゲット・スラックへの到達を確認することができる。
（３）ターゲット・スラック到達条件の成立をもって、予測スラックを減少させるようにしているため、予測スラックの過剰評価による後続命令の実行遅延の発生を好適に抑制することができる。
（４）信頼性カウンタを設置し、予測スラックの増加は慎重に、減少は迅速に行うようにしているため、ターゲット・スラックが頻繁に増減を繰り返す場合にも、予測スラックの過剰評価による後続命令の実行遅延が発生する頻度を低く抑えることができる。
【０１８４】
７．スラック表のインデクス手法の拡張
次いで、上記ローカル・スラックの予測方法、及び予測機構の更なる機能の拡張について説明する。プログラム内の分岐命令の振る舞いは多くの場合、その分岐を実行するまでに、どのような関数や命令を実行してきたか（以下、制御フローという。）に依存する。この性質を利用して、分岐命令の結果をより高い精度で予測する手法が提案されている。従来、こうした分岐予測手法は、命令の投機実行の精度向上に利用されているが、ローカル・スラックの予測においても、同様の原理を導入することで、予測精度の更なる向上を期待できる。以下、制御フローを考慮して、スラック予測をさらに精度良く行う手法について説明する。
【０１８５】
プログラムは、分岐命令を用いて、どのような関数や命令を実行するのかを決定しているため、プログラム中の分岐条件に着目することで制御フローを単純化することが可能である。具体的には、分岐条件が成立したなら「１」、成立しなかったら「０」として、プログラム中の分岐条件の成立、不成立の履歴（分岐履歴）を記録する。例えば分岐条件がフェッチ順に、成立（１）→成立（１）→不成立（０）→成立（１）であったときの分岐履歴は、新しいもの程下位に記録した場合に「１１０１」と表される。分岐履歴をスラック予測に利用するために、分岐履歴とその命令のＰＣとからスラック表へのインデクスを生成する。このようにすれば、プログラム・カウンタ値（ＰＣ）と制御フローの双方を考慮して、スラックを予測することができるようになる。例えば、プログラム・カウンタ値（ＰＣ）が同じでも、制御フローが異なれば、スラック表の別々のエントリを使用するので、制御フローに応じた予測ができるようになる。
【０１８６】
図２８は本発明の第１の実施形態の第２の変形例に係る、スラック表２０及び２個のインデクス生成回路２２Ａ，２２Ｂを備えたプロセッサ１０の構成を示すブロック図である。即ち、図２８に、制御フローを考慮したスラック予測を行うローカル・スラック予測機構のハードウェア構成の一例を示す。この構成では、図６に例示のものに加え、さらに分岐履歴レジスタ２１Ａ、分岐履歴レジスタ２１Ｂ、及び２つのインデクス生成回路２２Ａ，２２Ｂが新たに追加されている。分岐履歴レジスタ２１Ａ及び分岐履歴レジスタ２１Ｂは分岐履歴を記録するレジスタである。
【０１８７】
また、インデクス生成回路２２Ａ，２２Ｂは、入力の違いを除いて同一の回路構成とされている。命令のフェッチ時には、分岐履歴レジスタ２１Ａからの分岐履歴レジスタ値と、その命令のプログラム・カウンタ値（ＰＣ）とを入力として、インデクス生成回路２２Ａがスラック表２０へのインデクスを生成し、スラック表２０の参照を行う。一方、命令のコミット時には、分岐履歴レジスタ２１Ｂからの分岐履歴レジスタ値と、その命令のプログラム・カウンタ値（ＰＣ）とを入力として、インデクス生成回路２２Ｂがスラック表２０へのインデクスを生成し、スラック表２０のエントリの更新を行う。以下、これら分岐履歴レジスタ２１Ａ，２１Ｂ及びインデクス生成回路２２Ａ，２２Ｂについてさらに詳細に説明する。
【０１８８】
まず、分岐履歴レジスタ２１Ａ，２１Ｂの分岐履歴の更新動作について説明する。分岐履歴レジスタ２１Ａは、プロセッサの分岐予測結果に基づき分岐履歴を記録する。具体的な更新動作は、分岐命令がフェッチされると分岐履歴レジスタ２１Ａの保持する値を１ビット左にシフトするとともに、フェッチ・ユニット１１においてその分岐命令の分岐条件が成立と予測されていれば「１」を、不成立と予測されていれば「０」を、分岐履歴レジスタ２１Ａの最下位ビットに書き込む、という手順で行われる。
【０１８９】
一方、分岐履歴レジスタ２１Ｂは、プロセッサの分岐実行結果をもとにして、分岐履歴を記録する。具体的な更新動作は、分岐命令がコミットされると、分岐履歴レジスタ２１Ｂの保持する値を１ビット左にシフトし、その分岐命令の分岐条件が成立したならば「１」を、不成立ならば「０」を、分岐履歴レジスタ２１Ｂの最下位ビットに書き込む、という手順で行われる。
【０１９０】
このように、分岐履歴の取り方が２通り存在する理由は、スラックの参照をフェッチ時に行い、スラック表の更新をコミット時に行うという、両分岐履歴レジスタ２１Ａ、２１Ｂの分岐履歴を利用する時期の違いにある。フェッチ時には、分岐命令は未だ実行されておらず、プロセッサは、分岐条件が成立するかしないかを予測して、命令をメモリから読み出している。そのため、フェッチ時に使用される分岐履歴レジスタ２１Ａには、分岐予測に基づいて分岐履歴を記録して行くしかない。一方、コミット時には、分岐命令は既に実行されており、実行結果に基づいて分岐の履歴を記録することができる。
【０１９１】
次に、図２９乃至図３１を参照して、インデクス生成回路２２Ａ，２２Ｂによるインデクス生成態様の詳細を説明する。
【０１９２】
図２９は第１の実施形態に係るスラック予測機構において、制御フローを考慮せずにスラック予測を行うときの動作例を示す図である。すなわち、図２９は上記実施形態でのインデクス生成、すなわち命令のＰＣのみを使用したインデクス生成手法を示している。この場合、プログラム・カウンタ値（ＰＣ）の一部のビットを切り出して、それをスラック表２０へのインデクスとして使用するようにしている。
【０１９３】
図３０は図２８のスラック予測機構において、制御フローを考慮してスラック予測を行うときの第１の動作例を示す図である。図３１は図２８のスラック予測機構において、制御フローを考慮してスラック予測を行うときの第２の動作例を示す図である。すなわち、図３０は、分岐履歴とプログラム・カウンタ値（ＰＣ）とを使用したインデクス生成の一例を示し、図３１は同じく分岐履歴とプログラム・カウンタ値（ＰＣ）とを使用したインデクス生成のもう一つの例をそれぞれ示す。なお、実際のプロセッサ１０への搭載に際しては、双方のインデクス生成回路２２Ａ，２２Ｂで共通のインデクス生成手法を採用する必要がある。その理由は、双方のインデクス生成回路２２Ａ，２２Ｂで別々のインデクス生成手法を採用すると、スラック表２０の更新時と参照時で別々のインデクスが生成されてしまい、スラックを正しく予測できないためである。
【０１９４】
図３０の場合には、分岐履歴のｉ個のビットとプログラム・カウンタ値（ＰＣ）から切り出したｊ個のビットとを連結して、インデクスを生成するようにしている。一方、図３１の場合には、分岐履歴のｉ個のビットとＰＣから切り出した同数（ｉ個）のビットとの排他論理和（ＥＸＯＲ）を排他的論理和ゲート１２０によりビット毎に取るとともに、そのビット列とプログラム・カウンタ値（ＰＣ）からさらに切り出したｊ個のビットとを連結して、インデクスを生成するようにしている。
【０１９５】
なお、図３１のように、分岐履歴が単調な場合（すべて成立、あるいは、すべて不成立）でも、ＰＣから切り出したビットとの排他的論理和を取ることで、インデクスの上位ビットが単調とはならないようにすることができ、スラック表２０のエントリを有効に活用できるようになる。
【０１９６】
例えば、図３０及び図３１に示されるように、分岐履歴を４ビットとし、プログラム・カウンタ値（ＰＣ）から切り出す下位ビットを２ビットとする場合で、プログラム・カウンタ値（ＰＣ）から切り出す下位２ビットだけが同じとなる２つの命令（命令１、命令２）のスラックを更新する場合を考えてみる。なお、以下の説明では、命令１及び命令２のＰＣのうち、インデクスの生成に関係ないビットを省略して表し、また省略しないビットのうちの上位４ビットと下位２ビットとをスペースで区切って表示する。ここで命令１のＰＣが「…００１１０１…」であり、命令２のＰＣが「…１１０００１…」であったとする。命令１と命令２の分岐履歴がいずれもすべて成立（１１１１）となった場合、図３０の手法では、スラック表２０へのインデクスが、両命令で同じ値（１１１１０１）となってしまう。一方、図３１の手法では、スラック表２０へのインデクスは、命令１では「１１０００１」と、命令２では「００１１０１」と、この場合にも異なった値となる。
【０１９７】
このように、図３１の手法の方が、エントリを有効活用する上で有利ではあるが、余分な計算が必要されるため、スラック表への要求、すなわちスラック予測のより高い精度を所望するか、機構の簡易さを所望するかによって採用する手法を選択する。いずれにせよ、制御フローを考慮した分岐パターン別の予測スラックを個別記録を行えば、スラック予測の精度をさらに向上可能となる。
【０１９８】
８．ターゲット・スラック到達条件の拡張
ターゲット・スラック到達条件として使用可能な命令実行時の振る舞いとしては、上述した到達条件（Ａ）〜（Ｄ）以外にも、例えば以下に列記する（Ｅ）〜（Ｉ）が考えられる。これらの一部又は全部を、ターゲット・スラック到達条件に追加することで、スラックの予測をより正確に行える可能性がある。
（Ｅ）当該命令が、命令ウィンドウ１３（図６及び図２８参照）において最も古い命令となる（当該命令が命令ウィンドウ１３内に最も長い間、留まっている）こと。
（Ｆ）リオーダ・バッファ１６（図６及び図２８参照）において最も古い命令となる（当該命令がＲＯＢ内に最も長い間、留まっている）こと。
（Ｇ）当該命令が、前記命令ウィンドウに存在する命令の中で最も古い命令に実行結果を渡す命令となっていること。
（Ｈ）当該命令が、同一のサイクルに実行される命令の中で最も多くの後続命令に実行結果を渡す命令となっていること。例えば同一のサイクルに２つの命令が実行され、そのうちの一方が２つの後続命令に実行結果を渡し、残りが５つの後続命令に実行結果を渡したのであれば、後者の命令がターゲット・スラック到達条件を満たしていると判定される。
（Ｉ）当該命令の実行結果を渡すことで、実行可能な状態となる後続命令の数が、予め定められた判定値以上となっていること。ここでの実行可能な状態とは、入力データが揃い、いつでも実行を開始できる状態をいう。
【０１９９】
これらの到達条件（Ｅ）〜（Ｉ）について次の命令ｉ１〜ｉ６、すなわち、
命令ｉ１：Ａ＝５＋３；
命令ｉ２：Ｂ＝８−３；
命令ｉ３：Ｃ＝３＋Ａ；
命令ｉ４：Ｄ＝Ａ＋Ｃ；
命令ｉ５：Ｅ＝９＋Ｂ；及び
命令ｉ６：Ｆ＝７−Ｂ；
を実行する場合を例に説明する。
【０２００】
まず、最初のサイクルで命令ｉ１と命令ｉ２とが同時に実行されたとすると、命令ｉ１は命令ｉ３と命令ｉ４に実行結果を渡し、命令ｉ２は命令ｉ５と命令ｉ６に実行結果を渡す。そのため、実行結果を渡す後続命令数はどちらも２つとなるが、命令ｉ４は未だ入力データが揃っていないので、命令ｉ１の実行結果によって実行可能な状態になった命令数は１つ、命令ｉ２の実行結果によって実行可能な状態になった命令数は２つである。なお、上記条件（Ｉ）での判定値が「１」であれば、上記条件（Ｉ）を満たすのは命令ｉ１と命令ｉ２、判定値が「２」であれば、命令ｉ２のみとなる。
【０２０１】
これらの条件（Ｅ）〜（Ｉ）は、従来、クリティカル・パスを検出するための条件としての使用が提案されたものであるが、ローカル・スラック到達条件としても、十分に利用可能なものである。
【０２０２】
９．スラック表の更新に関するパラメータの拡張
上記実施形態では、スラック表の更新に係るパラメータのうち、予測スラック及び信頼性カウンタの１回あたりの減少量Ｖｄｅｃ，Ｃｄｅｃをそれぞれ予測スラックの最大値Ｖｍａｘ及びしきい値Ｃｔｈと同値に固定していた。また予測スラック及び信頼性カウンタの１回あたりの増加量Ｖｉｎｃ，Ｃｉｎｃをともに「１」に固定するようにしていた。しかしながら、性能低下を抑えることが重要な場合や、予測できるスラックの量をできるだけ大きくしたい場合など、状況に応じて上記パラメータの最適値は変わる。そのため、必ずしも上記のようにパラメータを固定する必要はなく、スラック予測の適用される分野に応じて適宜決定することが望ましい。
【０２０３】
上記実施形態では、上記スラック表の更新に係る各パラメータはそれぞれ、命令の種別に依らず、一律の値とされていた。例えば、ロード命令であっても、分岐命令であっても、信頼性のしきい値Ｃｔｈには同じ値が用いられている。しかしながら、実際には、命令の種別によっては、動的な変化度合やその変化の頻度などのローカル・スラックの挙動に違いがある。典型的な例として分岐命令をあげることができる。分岐命令は、他の命令と比べ、ローカル・スラックの変化する量が非常に激しい。分岐予測が成功したときには、後続命令への影響は非常に小さく、ローカル・スラックは大きくなる傾向にあるが、分岐予測が失敗したときには、誤って実行してしまった命令はすべて破棄され、非常に大きなペナルティを被るため、ローカル・スラックが「０」となる。これは、分岐予測の成功と失敗が入れ替わると、ローカル・スラックが急激に変化することを意味する。従って、分岐命令の場合、信頼性カウンタのしきい値Ｃｔｈや１回当たりの減少量Ｃｄｅｃは他の命令よりも大きくすることが望ましい。
【０２０４】
また、分岐命令以外の種別に属する命令においても、プロセッサ内での動作に特徴があれば、その特徴に適したパラメータの適正値が種別毎にそれぞれ存在すると考えられる。そこで、命令をいくつかのカテゴリにわけ、カテゴリ毎にスラック表の更新に係るパラメータを個別に設定することで、予測精度がさらに向上する可能性がある。例えば、プロセッサ内での動作の違いに着目すると、命令を次の４つのカテゴリ、すなわちロード命令のカテゴリ、ストア命令のカテゴリ、分岐命令のカテゴリ、及びその他命令のカテゴリに分類することができる。
【０２０５】
こうして分類した命令の各カテゴリについて、それぞれパラメータを個別に設定する。更新時にはまず、その命令がどのカテゴリに属するかを判定する。この判定は、命令のオペコードを見れば容易に行うことができる。そして、その命令が属するカテゴリの固有のパラメータを用いて、スラック表を更新する。なお、命令のカテゴリの分類態様としては、ロード命令とストア命令とを同じカテゴリとしたり、加算と減算を別々のカテゴリに分けるようにしたり、といった態様も考えられる。命令のどの様に分類するかは、スラック予測の適用される範囲によって変わってくる。なお、このように命令の種別毎に個別のパラメータを使用することとすると、ローカル・スラック予測機構の構成が複雑化するため、これを抑えるには、カテゴリの数を必要最小限まで減らす必要がある。
【０２０６】
１０．第１の実施形態のまとめ．
以下、本実施形態において、解題を解決するための手段について要約すると、以下のようになる。
【０２０７】
本実施形態に係るローカル・スラックの予測方法では、プロセッサで実行される命令を、その命令のローカル・スラックの予測値である予測スラックの値分だけその実行レイテンシを増加させて実行するとともに、前記命令の実行時の振る舞いに基づいて、現状におけるローカル・スラックの適正値であるターゲット・スラックに前記予測スラックが到達したか否かを推定し、到達したとの推定がなされるまで前記予測スラックを前記命令の実行毎に徐々に増加させて行くようにしている。
【０２０８】
上記予測方法では、命令のローカル・スラックの予測値（予測スラック）がその実行毎に徐々に増加されてゆく。こうして予測スラックを増加して行けば、その値はやがては、現状のローカル・スラックの適正値（ターゲット・スラック）に到達するようになる。一方、命令の実行時のプロセッサの振る舞いから、予測スラックのターゲット・スラックへの到達を推定するとともに、その到達したとの推定が成立した時点で、予測スラックの増加が止められる。その結果、予測スラックを直接的に計算せずとも、ローカル・スラックを予測することができるようになる。
【０２０９】
なお、上記のようなターゲット・スラックへの予測スラックの到達の推定は、その推定の成立条件として、
（Ａ）当該命令の実行時に分岐予測ミスが発生したこと、
（Ｂ）当該命令の実行時にキャッシュ・ミスが発生したこと、
（Ｃ）後続命令に対するオペランド・フォワーディングが発生したこと、
（Ｄ）後続命令に対するストアデータフォワーディングが発生したこと、
（Ｅ）当該命令が命令ウィンドウに存在する命令の中で最も古い命令となっていること、
（Ｆ）当該命令がリオーダ・バッファに存在する命令の中で最も古い命令となっていること、
（Ｇ）当該命令が、前記命令ウィンドウに存在する命令の中で最も古い命令に実行結果を渡す命令となっていること、
（Ｈ）当該命令が、同一のサイクルに実行される命令の中で最も多くの後続命令に実行結果を渡す命令となっていること、
（Ｉ）当該命令の実行結果を渡すことで、実行可能な状態となる後続命令の数が、予め定められた判定値以上となっていること、
のうちのいずれかを含めるようにしている。
【０２１０】
ここで、上記（Ａ）、（Ｂ）の振る舞いは、予測スラックがターゲット・スラックを上回り、後続命令の実行が遅延した状態で観測される。また上記（Ｃ）、（Ｄ）の振る舞いは、予測スラックがターゲット・スラックと一致したときに観測される。よってこれらの振る舞いが観測されたときには、予測スラックがターゲット・スラックに到達したと推定することができる。
【０２１１】
一方、上記（Ｅ）〜（Ｉ）の振る舞いは、従来より、命令がクリティカル・パス上にあるか否かの判定条件として用いられている。予測スラックがターゲット・スラックに到達すると、命令の実行レイテンシをそれ以上１サイクルでも増加させると後続命令の実行に遅延が生じるという、クリティカル・パス上の命令と似た状況となるため、上記到達の推定条件としても用いることが可能である。
【０２１２】
なお、それまで予測スラックがターゲット・スラックに一致した状況となっているときにターゲット・スラックが動的に減少すると、予測スラックがターゲット・スラックを上回ってしまい、後続命令の実行が遅延されるという予測ミスのペナルティが発生してしまう。その点、予測スラックがターゲット・スラックに到達したとの推定がなされたときには同予測スラックを減少させるようにすれば、そうしたターゲット・スラックの動的な減少にも対応することができるようになる。
【０２１３】
上記推定の成立、不成立をもって直ちに予測スラックを増加・減少させると、ターゲット・スラックが頻繁に増減を繰り返す場合に予測ミスのペナルティの発生頻度が高くなる虞がある。そうした場合にも、予測スラックがターゲット・スラックに到達したとの推定の成立条件の不成立回数が規定の回数となったことを条件に予測スラックを増加させ、同成立条件の成立回数が規定の回数となったことを条件に予測スラックを減少させるようにすれば、ターゲット・スラックが頻繁に増減したときの予測ミスペナルティの頻度の増加を抑えることができる。
【０２１４】
この場合、予測スラックを増加させるために必要な成立条件の不成立回数を、同予測スラックを減少させるために必要な成立条件の成立回数よりも大きく設定すれば、予測スラックの増加は慎重に、その減少は迅速に行われるようになる。そのため、ターゲット・スラックが頻繁に増減を繰り返したときの予測ミスペナルティの頻度の増加を効果的に抑制することができる。こうした効果は、予測スラックがターゲット・スラックに到達したとの推定の成立条件の不成立回数が規定の回数となったことを条件に予測スラックを増加させる一方、予測スラックの減少は、成立条件の成立を条件に行うようにしても、同様に得ることができる。
【０２１５】
なお、命令の種別によっては、動的な変化度合やその変化の頻度などのローカル・スラックの挙動に違いがある。そこでローカル・スラックをより精度良く予測するには、予測スラックの上限値や、その１回当たりの更新量（増加量や減少量）を、命令の種別毎に異ならせることが望ましい。また、上記推定の成立条件の成立回数、又は不成立回数が規定の回数となったことを条件に予測スラックを更新する場合には、そうした規定の回数を命令の種別毎に異ならせることで、より高い精度で予測を行うことができるようになる。ちなみに、そうした命令の種別としては、例えば、ロード命令、ストア命令、分岐命令及びその他命令の４つのカテゴリに分けることが考えられる。
【０２１６】
ところで、命令のローカル・スラックは、その命令の実行に至るまでのプログラムの分岐経路によって大きく変化することがある。その点、当該命令の実行に至るプログラムの分岐パターンの別に予測スラックを個別に設定するようにすれば、命令の実行に至るまでのプログラムの分岐経路毎に個別にローカル・スラックが予測されることとなり、ローカル・スラックをより高い精度で予測することができるようになる。
【０２１７】
一方、上記課題を解決するため、本実施形態に係るローカル・スラック予測機構では、プロセッサで実行される命令のローカル・スラックを予測する機構として、各命令のローカル・スラックの予測値である予測スラックが記録保持されるスラック表と、命令の実行に際して前記スラック表を参照してその命令の前記予測スラックを取得するとともに、その取得した予測スラックの分だけ実行レイテンシを増加させる実行レイテンシ設定手段と、前記命令の実行時の振る舞いに基づき、同命令の現状のローカル・スラックの適正値であるターゲット・スラックに前記予測スラックが到達したか否かを推定する推定手段と、前記推定手段により前記予測スラックが前記ターゲット・スラックに到達したとの推定がなされるまで、前記予測スラックを前記命令の実行毎に徐々に増加させる予測スラック更新手段と、を備えるようにしている。
【０２１８】
上記構成では、予測スラック更新手段によって命令の予測スラックが、その命令の実行毎に徐々に増加され、実行レイテンシ設定手段によってその命令の実行レイテンシもその実行毎に同様に徐々に増加される。こうして予測スラックがターゲット・スラックに到達すると、命令の実行時のプロセッサの振る舞いがそれを示すものとなり、推定手段によりその旨の推定がなされ、その結果、上記予測スラック更新手段による予測スラックの増加が止められるようになる。そして以上により、直接計算することなく、予測スラックが求められる。
【０２１９】
なお、推定手段によるターゲット・スラックへの予測スラックの到達の推定は、例えば、上記（Ａ）〜（Ｉ）のいずれか１つ、あるいはそのうちの複数を（すなわち、少なくとも１つを）その推定の成立条件とすることで行うことができる。
【０２２０】
また、予測スラックがターゲット・スラックに到達したとの推定の成立条件が成立となったときにそのカウンタ値が増加／減少され、推定の成立条件が不成立となったときにそのカウンタ値が減少／増加される信頼性カウンタを設けるとともに、前記信頼性カウンタのカウンタ値が増加判定値となったことを条件に前記予測スラックを増加させ、同信頼性カウンタのカウンタ値が減算判定値となったことを条件に前記予測スラックを減少させるように予測スラック更新手段をすれば、ターゲット・スラックが頻繁に増減を繰り返したときの予測ミスペナルティの発生頻度の増加を好適に抑制することができる。なお、そうした状態での予測ミスペナルティの発生頻度の増大をより効果的に抑制するには、信頼性カウンタでの推定の成立条件の成立時におけるカウンタ値の増加／減少量を、同推定の成立条件の不成立時における同カウンタ値の減少／増加量よりも大きく設定することが望ましい。
【０２２１】
さらに、命令の種別によるローカル・スラックの動的変化の様相の差違に対応してより精度良くローカル・スラックの予測を行うには、更新手段による各命令の予測スラックの１回当たりの更新量（増加量、減少量）を、その命令の種別によって異ならせることが望ましい。また更新手段によって更新される各命令の前記予測スラックには上限値を設定する場合には、その上限値を命令の種別によって異ならせることも有効である。さらには、信頼性カウンタが設けられる場合には、カウンタ値の増加量及び減少量を命令の種別により異ならせることが有効である。ちなみに命令の種別としては、ロード命令、ストア命令、分岐命令及びその他命令の４つのカテゴリに分類することが考えられる。
【０２２２】
また、プログラムの分岐履歴を記録する分岐履歴レジスタを設けるとともに、その分岐履歴レジスタを参照して得られる分岐パターンの別に命令の予測スラックをスラック表に個別に記録するようにすることも、予測精度の向上には有効である。
【０２２３】
本実施形態に係るローカル・スラックの予測方法及び予測機構によれば、命令のローカル・スラックの予測値（予測スラック）を計算で直接的に求めるのではなく、命令の実行時の振る舞いを観測しながら、適正値に到達するまで予測スラックを徐々に増加させることで求めている。そのため、予測スラックの直接演算に要する複雑な機構は不要であり、より簡易な構成でローカル・スラックの予測を行うことができる。
【０２２４】
第２の実施形態．
第２の実施形態では、スラック予測を利用してメモリの曖昧性を除去する手法を提案する。スラックとは、他の命令に影響を与えることなく、その命令の実行レイテンシを増加させることのできるサイクル数である。提案機構では、スラックが予め定めたしきい値以上になったストア命令は、後続するロード命令と依存しないと予測し、ロード命令を投機的に実行する。これにより、ストア命令のスラックを利用しても、後続のロードの実行が遅れることがなくなる。
【０２２５】
１．第１の実施形態及び従来技術の問題点．
上述のように、ロード／ストア命令間には、メモリの曖昧性が存在するため、予測に基づいてストア命令のスラックを利用すると、後続のロードの実行が遅れ、プロセッサの性能に悪影響を与えるという問題点がある。ここで、メモリの曖昧性とは、アクセスするメモリ・アドレスが分かるまで、ロード／ストア命令間の依存関係が分からないことをいう。
【０２２６】
そこで、本実施形態では、スラックを利用して、ストア命令とロード命令のデータ依存関係を予測し、メモリの曖昧性を投機的に取り除く機構を提案する。この機構では、スラックが予め定めたしきい値以上になったストア命令は、後続するロード命令と依存しないと予測し、ロード命令を投機的に実行する。これにより、ストア命令のスラックを利用しても、後続のロードの実行が遅れることがなくなる。
【０２２７】
２．スラック．
スラックに関しては、従来技術及び第１の実施形態において説明した通りであり、ローカル・スラックは、グローバル・スラックとは異なり、求めることだけでなく、利用することも容易である。そこで、本実施形態では、これ以降、「ローカル・スラック」を対象として議論を進める。また、「ローカル・スラック」を、単に、「スラック」と表記する。
【０２２８】
３．メモリの曖昧性がスラックの利用に与える影響．
本章では、ストア命令のスラックを利用したときに、メモリの曖昧性が原因で発生する問題について説明する。
【０２２９】
図３２（ａ）は、従来技術においてストア命令のスラックを利用したときにメモリの曖昧性が原因で発生する問題点を説明するための図であって、デコード前のプログラムを示す図であり、図３２（ｂ）は、従来技術においてストア命令のスラックを利用したときにメモリの曖昧性が原因で発生する問題点を説明するための図であって、デコード後のプログラムを示す図である。
【０２３０】
図３２（ａ）において、ｒ１，ｒ２，…はそれぞれ、１番レジスタ、２番レジスタ、…を示す。ストア命令ｉ１は、レジスタｒ４の値を、レジスタｒ１の値と３を足して得られるメモリ・アドレスにストアする。ロード命令ｉ５は、レジスタｒ２の値と８を足して得られるメモリ・アドレスからロードした値を、レジスタｒ７に書き込む。ロード命令ｉ６は、レジスタｒ３の値と８を足して得られるメモリ・アドレスからロードした値を、レジスタｒ８に書き込む。命令ｉ７は、レジスタｒ７の値と５を足して得られる値を、レジスタｒ９に書き込む。命令ｉ８は、レジスタｒ９の値と８を足して得られる値を、レジスタｒ１０に書き込む。
【０２３１】
命令ｉ５は命令ｉ１に依存せず、命令ｉ６は命令ｉ１に依存すると仮定する。ただし、プロセッサ１０Ｂ（図３５参照。）内では、メモリの曖昧性のため、アドレス計算が終るまで、それらの依存関係は不明であることに注意されたい。また、命令ｉ７は命令ｉ５で得られた値を、命令ｉ８は命令ｉ７で得られた値をそれぞれ必要とする。
【０２３２】
ロード／ストア命令を効率的にスケジューリングする方式として、分離ロード／ストア方式を用いることを仮定する。この方式では、メモリ命令を、アドレス計算部分とメモリアクセス部分の２つに分離し、これらを別々にスケジューリングする。そして、スケジューリングには、ロード及びストアキュー（以下、ＬＳＱという。）６２と呼ばれる専用のバッファメモリを用いる。なお、アドレス計算にはレジスタ依存しかないので、リザベーション・ステーション１４Ａを用いてスケジューリングする。一方、メモリアクセスはメモリ依存を満足するようにスケジューリングする。
【０２３３】
分離ロード／ストア方式を用いるプロセッサにおいて、図３２（ａ）のプログラムをデコードした後のプログラムを、図３２（ｂ）に示す。図３２（ａ）及び（ｂ）において、メモリ命令は、アドレス計算命令（名前にａが付加された命令）とメモリアクセス命令（名前にｍが付加された命令）に分離されている。
【０２３４】
図３３（ａ）は、プロセッサの処理において、メモリの曖昧性がスラックの利用に与える影響を説明するために用いる図であって、スラックを利用しない場合のプログラムを実行する過程を示すタイミングチャートであり、図３３（ｂ）は、プロセッサの処理において、メモリの曖昧性がスラックの利用に与える影響を説明するために用いる図であって、スラックを利用する場合のプログラムを実行する過程を示すタイミングチャートである。
【０２３５】
図３２（ａ）及び（ｂ）に示すプログラムを実行する過程を図３３（ａ）及び（ｂ）に示す。図３３（ａ）及び（ｂ）において、縦軸はサイクル数を示し、実線で囲われた矩形部分が、そのサイクルで実行された命令とその実行の内容を示す。
【０２３６】
図３３（ａ）は、スラックを利用しない場合の例である。この例では、命令ｉ１ａ、ｉ５ａ、ｉ７、ｉ８、ｉ６ａはそれぞれ、０、２、５、６サイクル目で実行結果が得られると仮定する。
【０２３７】
０サイクル目で、命令ｉ１のアドレスが判明するため、１サイクル目で命令ｉ１のメモリアクセスができる。次に、２サイクル目で、命令ｉ５のアドレスが判明する。この時点で命令ｉ５は、先行ストアである命令ｉ１に依存しないことが判明する。そのため、３サイクル目に、命令ｉ５がメモリアクセスを行う。４サイクル目に、命令ｉ５でロードした値を用いて加算を行う。５サイクル目に、命令ｉ７で求めた値を用いて加算を行う。６サイクル目に、命令ｉ６が、先行ストアである命令ｉ１に依存することが判明する。この時点で命令ｉ１は実行を終了しているため、それに依存している命令ｉ６も実行を開始できる。９サイクル目に、命令ｉ１から、それに依存する命令ｉ６に、ストアデータがフォワーディングされる。
【０２３８】
一方、図３３（ｂ）は、命令ｉ１のスラックを利用した場合である。この場合、スラックを５と予測し、命令ｉ１ａの実行レイテンシを５サイクル増加させたと仮定する。命令ｉ１のスラックを利用したことにより、図３３（ｂ）では、命令ｉ１ａの実行結果が得られるサイクルが、図３３（ａ）の場合よりも５サイクル遅れる。
【０２３９】
２サイクル目で、命令ｉ５のアドレスが判明する。しかし、この時点では、先行ストアである命令ｉ１のアドレスが不明である。自身のアドレスが判明したにも関わらず、先行ストアに依存しているかどうかがわからないため、メモリにアクセスすることができず、実行が遅れてしまう。５サイクル目で、命令ｉ１のアドレスが判明すると、ようやく、命令ｉ５は命令ｉ１に依存していないことが判明する。そのため、６サイクル目で、命令ｉ５がメモリアクセスを行う。これは無駄な実行の遅れとなり、性能に悪影響を与える。
【０２４０】
４．スラック予測を利用したメモリの曖昧性の投機的除去．
ストア命令のスラックの利用が、それとは依存関係のないロード命令の実行に与える悪影響を緩和するため、従来手法におけるストア命令のスラックの求め方に着目する。従来手法において、ストア命令のスラックは、当該ストアと依存関係のあるロードにのみ着目して求められる。そのため、ストア命令のスラックがｎ（ｎ＞０）である場合、当該ストアが実行されたｎサイクル後に、それに依存するロード命令が実行されることが分かる。
【０２４１】
このことから、メモリ命令をアドレス計算とメモリアクセスに分離すると、次の順番で、依存関係のあるストア／ロード命令が実行される可能性が高いと考えられる。まず、ストア命令のアドレスが計算される。その後、ストア命令のメモリアクセスが行われる。そのｎ−１サイクル後に、それに依存するロード命令のアドレス計算が行われ、その次のサイクルで、メモリアクセスが行われる。
【０２４２】
上記の順番でメモリ命令が実行される場合、ストア命令がアドレス計算を行ってから、少なくともｎサイクルの間は、ストア命令に依存するロード命令がアドレス計算を行うことはない。従って、その間にアドレスが判明したロード命令は、アドレスを比較しなくても、当該ストア命令に依存しないことが分かる。
【０２４３】
以上より、スラックがｎ（＞０）であるストア命令の実行レイテンシを増加させた結果、当該ストア命令のアドレス計算がｎサイクル遅れたとしても、その間にアドレスの判明したロード命令は、当該ストア命令に依存しない可能性が高いと考えることができる。
【０２４４】
そこで、本発明者は、アドレスの判明したロード命令は、スラックがｎ（＞０）である先行ストア命令に依存しないと予測し、それらのストア命令に関するメモリの曖昧性を投機的に除去する手法を提案する。これにより、ストア命令のスラックの利用が、それとは依存関係のないロード命令の実行に与える悪影響を緩和することができる。
【０２４５】
図３４は本発明の第２の実施形態に係る、メモリの曖昧性の投機的除去を示すタイミングチャートである。ここで、図３４を用いて、提案手法の目的とする動作を説明する。すなわち、図３４は提案手法を用いて、図３２に示すプログラムを実行するときの過程を示す。図３３（ｂ）と同様に、命令ｉ１ａのスラックを５と予測し、命令ｉ１ａの実行レイテンシを５サイクル増加させる。しかし、図３３（ｂ）とは異なり、スラックを用いて、命令ｉ１に関するメモリの曖昧性を投機的に除去する。
【０２４６】
２サイクル目で、命令ｉ５のアドレスが判明する。この時点では、先行ストアである命令ｉ１のアドレスが不明である。しかし、命令ｉ１はスラックが０よりも大きい（スラックを持つ）ので、命令ｉ５は命令ｉ１に依存しないと予測する。そして、３サイクル目に、命令ｉ５が投機的にメモリアクセスを行う。以上のようにして、スラックを利用したストア命令とは依存関係のないロード命令の実行が遅れることを防ぐ。
【０２４７】
しかし、スラックは予測によって求めるため、メモリ依存関係の予測に失敗する可能性がある。失敗時のペナルティは大きいため、できるだけ慎重に予測を行う必要がある。そこで、ストア命令のスラックがあるしきい値Ｖｔｈ以上になった場合のみ、後続するロード命令は、当該ストア命令に依存しないと予測することとする。
【０２４８】
５．提案機構．
本章では４章で示した提案手法を実現する機構について説明する。
【０２４９】
５．１．提案機構の概要．
図３５は図３４のメモリの曖昧性の投機的除去機構（以下、提案機構という。）を備えたプロセッサ１０Ｂの構成を示すブロック図である。図３５において、プロセッサ１０Ｂの上側と下側にはそれぞれ、命令キャッシュ１１Ａ、データキャッシュ６３を示す。プロセッサ２０の右側は、フェッチした命令のスラックを予測するスラック予測機構６０を示す。プロセッサ１０Ｂの内部は大きく、フロントエンド７、実行コア１Ａ、バックエンド８に分けて構成される。
【０２５０】
命令キャッシュ１１Ａは主記憶装置９からの命令を一時的に記憶した後、デコード・ユニット１２に出力する。デコード・ユニット１２は命令デコード部１２ａとタグ割当部１２ｂとから構成され、入力される命令をデコードしかつタグ割り当てした後、実行コア１Ａのリザベーション・ステーション１４Ａに出力する。
【０２５１】
実行コア１Ａでは、リザベーション・ステーション１４Ａを用いてアドレス計算をスケジューリングし、機能ユニット６１（実行ユニット１５に対応する。）でアドレスを計算してＬＳＱ６２及びバックエンド８のＲＯＢ１６に出力する。また、実行コア１Ａでは、ＬＳＱ６２を用いてロード命令及び／又はストア命令をスケジューリングし、ロード要求及び／又はストア要求をデータキャッシュ６３へと送出する。再オーダ時に、ＲＯＢ１６から出力されるアドレスは、レジスタ・ファイル１４を介してリザベーション・ステーション１４Ａに入力される。
【０２５２】
図３５の提案機構はＬＳＱ６２において実現され、主に、メモリ依存予測機構と、予測ミスからの回復機構に分けることができる。メモリ依存予測機構は、スラックに基づいて、メモリ依存関係を予測し、ロード命令を投機的に実行する。一方、回復機構は、メモリ依存予測の成否を確認し、メモリ依存予測にミスした状態からプロセッサ状態を回復させる。
【０２５３】
以下では、まず、メモリ依存予測機構について説明し、その後、回復機構について説明する。
【０２５４】
５．２．メモリ依存予測機構．
本実施形態に係る提案機構は、ＬＳＱ６２に簡単な修正を加えることで、メモリ依存予測機構を実現している。まず、修正後のＬＳＱ６２の構成について説明する。
【０２５５】
図３６は図３５のロード及びストアキュー（ＬＳＱ）６２にエントリされる修正された命令データのフォーマットを示す図である。図３６の命令データにおいて、オペコード７１、メモリ・アドレス７３、タグ７５及びストアデータ７６に加えて、３個のフラグ７２，７４，７７が追加される。ここで、ＲａとＲｄはそれぞれ、アドレス、ストアデータが利用可能であることを示すフラグである。Ｓｆｌａｇは提案機構を導入するために新たに追加したストア命令の予測スラックの判定フラグであって、ストア命令の予測スラックがしきい値Ｖｔｈ以上であるかどうかを示すフラグである。ロード命令の場合、フラグＳｆｌａｇに意味はない。フラグＳｆｌａｇは、ストア命令の予測スラックがしきい値Ｖｔｈ以上であれば１にセットし、そうでなければ０にリセットする。フラグＳｆｌａｇのセット／リセットは、ストア命令をＬＳＱ６２に割り当てるときに機能ユニット６１により行われる。
【０２５６】
次に、修正後のＬＳＱ６２の動作について説明する。通常のＬＳＱ６２では、ロード命令は、自身のアドレスと先行するすべてのストア命令のアドレスが判明すると、アドレスの比較を行う。そして、先行ストアに依存しないことが判明すれば、メモリアクセスを行い、そうでなければ、依存するストアからフォワーディングによってデータを得る。
【０２５７】
一方、修正後のＬＳＱ６２では、ロード命令は、自身のアドレスが判明し、さらに、先行するストア命令が、もれなく、以下いずれかの条件を満たすと、アドレスの比較を行う。
（１）アドレスが判明している。
（２）アドレスが判明していないが、フラグＳｆｌａｇが１である。
【０２５８】
ただし、アドレス比較は、アドレスが判明しているストア命令に対してのみ行う。アドレスが判明しておらず、かつ、フラグＳｆｌａｇが１であるストア命令に対しては、依存関係がないと予測する。アドレス比較の結果、依存するストア命令がないことが判明すれば、メモリアクセスを行い、そうでなければ、依存するストアからフォワーディングによってデータを得る。メモリ依存関係を予測していれば、ロード命令は投機的に実行されたことになる。
【０２５９】
５．３．回復機構．
本実施形態に係る提案機構は、メモリ依存関係の予測が正しいかどうかを調べるため、予測の対象となった可能性のあるストア命令、つまり、フラグＳｆｌａｇが１のストア命令は、アドレスが判明した後、予測の成否を確認する。具体的には、当該ストア命令のアドレスと、実行を完了した後続ロード命令のアドレスを比較する。
【０２６０】
アドレスが一致しなければ、メモリ依存予測は成功である。ストア命令のスラックの利用によって、当該ストア命令とは依存関係のないロード命令の実行が遅れるのを防ぐことができる。一方、アドレスが一致すれば、メモリ依存予測は失敗である。アドレスが一致したロード命令とそれ以降の命令をプロセッサからフラッシュし、実行をやり直す。実行をやり直すために必要なサイクルが、予測ミスペナルティとなる。
【０２６１】
６．ＬＳＱ６２の処理フロー．
図３７はロード命令に対する図３５のＬＳＱ６２の処理を示すフローチャートである。図３７において、従来機構に比較して追加ステップについては、ステップ番号の後に（＊）を付加しており、図３７では、ステップＳ７の処理を追加している。なお、図３７では、説明を分かりやすくするため、ステップＳ２からステップＳ８までの至る部分をループ処置にしているが、通常、この部分は並列に処理される。また、図３７及び図３８において、アドレスとは、各命令が記憶されている主記憶装置９のメモリ・アドレスをいう。
【０２６２】
図３７において、まず、ステップＳ１において、ロード命令がＬＳＱ６２とＲＯＢ１６に書き込まれる。次いで、ステップＳ１Ａでは、ＬＳＱ６２に書き込まれたロード命令のアドレスが判明したか否かが判断され、ＹＥＳのときはステップＳ２に進む一方、ＮＯのときはステップＳ１０に進む。ステップＳ２では、次の先行ストア命令を取得し、ステップＳ３において先行ストア命令のアドレスが判明したか否かが判断され、ＹＥＳのときはステップＳ４に進む一方、ＮＯのときはステップＳ７に進む。ステップＳ４では、ロード命令と先行ストア命令のアドレスを比較し、ステップＳ５においてこれらのアドレスが一致しているか否かが判断され、ＹＥＳのときはステップＳ６に進む一方、ＮＯのときはステップＳ８に進む。ステップＳ６では、「ストアデータフォワーディング」が実行された後、当該ＬＳＱ６２の処理を終了する。
【０２６３】
ステップＳ７では、先行ストア命令のフラグＳｆｌａｇが１であるか否か、すなわち、予測スラックがしきい値Ｖｔｈ以上であるが判断され、ＹＥＳのときはステップＳ８に進む一方、ＮＯのときはステップＳ１０に戻る。ステップＳ１０では、１サイクルだけ待機した後、ステップＳ１Ａに戻る。ステップＳ８では、ロード命令と、先行するすべてのストア命令とのアドレス比較が終了したか否かが判断され、ＮＯのときはステップＳ２に戻る一方、ＹＥＳのときはメモリアクセスを行った後、当該ＬＳＱ６２の処理を終了する。
【０２６４】
なお、ステップＳ６における「ストアデータフォワーディング」とは以下の処理をいう。ロード命令が要求するデータが、ストアキュー又はＬＳＱ６２などのバッファ枚の先行するストア命令のデータである場合、通常、そのストア命令がリタイアしデータキャッシュ６３に書き込みを行い、メモリ依存が解消するのを待つ必要がある。もしもバッファから必要なストアデータが得られれば、この無駄な待ち時間がなくなる。データキャッシュ６３に書き込まれる前に、バッファからストアデータを供給することを、「ストアデータフォワーディング」という。これは、実行アドレスによるバッファの連想検索の結果、一致するエントリが見つかった場合、対応するストアデータを出力するようにバッファを修正することにより実現できる。
【０２６５】
図３８はストア命令に対する図３５のＬＳＱ６２の処理を示すフローチャートである。図３８において、従来機構に比較して追加ステップについては、ステップ番号の後に（＊）を付加しており、図３８では、ステップＳ１４及びＳ２０−Ｓ２２の処理を追加している。
【０２６６】
図３８において、まず、ステップＳ１１において、ストア命令がＬＳＱ６２及びＲＯＢ１６に書き込まれた後、ステップＳ１２においてストア命令のアドレスが判明したか否かが判断され、ＮＯのときはステップＳ１３に戻る一方、ＹＥＳのときはステップＳ１４に進む。ステップＳ１３では、１サイクルだけ待機した後、ステップＳ１２に戻る。ステップＳ１４では、ストア命令のフラグＳｆｌａｇが０であるか否か、すなわち、当該ストア命令の予測スラックがしきい値Ｖｔｈ以上であるか否かが判断され、ＹＥＳのときはステップＳ１５に進む一方、ＮＯのときはステップＳ２０に進む。ステップＳ２０では、ストア命令と後続するすべてのロード命令のアドレスを比較し、アドレスが一致するロード命令があるか否かは判断され、ＹＥＳのときはステップＳ２２に進む一方、ＮＯのときはステップＳ１５に進む。ステップＳ２２では、ロード命令とそれ以降の命令をプロセッサ１０からフラッシュし（命令データをクリアし）、これらの命令の実行をやり直した後、ステップＳ１５に進む。
【０２６７】
ステップＳ１５では、ストア命令のデータが得られているか否かが判断され、ＹＥＳのときはステップＳ１７に進む一方、ＮＯのときはステップＳ１６に進む。ステップＳ１６では、１サイクルだけ待機した後、ステップＳ１５に戻る。ステップＳ１７では、ストア命令がＲＯＢ１６からリタイアするか否かが判断され、ＹＥＳのときはステップＳ１９に進む一方、ＮＯのときはステップＳ１８に進む。ステップＳ１８では、１サイクル待機した後、ステップＳ１７に戻る。ステップＳ１９では、メモリアクセスを行った後、当該ＬＳＱ６２の処理を終了する。
【０２６８】
なお、リタイアとは、バックエンド８での処理が終了し、プロセッサ１０Ｂから命令がなくなることをいう。
【０２６９】
７．第２の実施形態の効果．
以上説明したように、本発明の第２の実施形態に係るプロセッサとその処理方法によれば、所定のしきい値以上の予測スラックを有するストア命令を、当該ストア命令に後続するロード命令とデータの依存関係がないと予測して判断し、当該ストア命令のメモリ・アドレスが判明していなくても上記後続するロード命令を投機的に実行する。従って、予測が正しければ、ストア命令のスラックの利用によって、当該ストア命令とはデータ依存関係がないロード命令の実行が遅延することはなく、プロセッサ装置の性能への悪影響を抑制することができる。また、スラック予測機構の出力結果を利用するために、ストア命令とロード命令間の依存関係を予測するためのハードウェアを新たに用意する必要がない。それ故、従来技術に比較して簡単な構成で、ローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができる。
【０２７０】
第３の実施形態．
本実施形態では、依存関係に基づいてローカル・スラックを共有化する手法を提案する。ローカル・スラックとは、他の命令に影響を与えることなく、その命令の実行レイテンシを増加させることのできるサイクル数である。本実施形態に係る提案機構では、ある命令の持つローカル・スラックを、依存関係のある命令間で共有する。これにより、ローカル・スラックを持たない命令が、スラックを利用できるようになる。
【０２７１】
１．従来技術及び第１の実施形態の問題点．
上述のように、従来技術及び第１の実施形態に係る手法では、ローカル・スラックが１以上存在すると予測できる命令の数（スラック命令数）が少なく、スラックを利用できる機会が十分に確保できない。
【０２７２】
そこで、本実施形態では、ある命令の持つローカル・スラックを、依存関係のある複数の命令間で共有する手法を提案する。この提案機構では、ローカル・スラックを持つ命令を始点として、ローカル・スラックスを持たない命令間で、依存先から依存元へと、共有可能なスラックが存在するという情報を伝搬させて行く。そしてこの情報を元に、発見的な手法を用いて、各命令が利用するスラックの量を決定する。これにより、ローカル・スラックを持たない命令が、スラックを利用できるようになる。
【０２７３】
２．スラック．
図３９は、従来技術に係るスラックの説明に用いるプログラムを示すタイミングチャートである。図３９において、ノードは命令を示し、エッジは命令間のデータ依存関係を示す。図３９の縦軸は命令を実行したサイクルを示す。ノードの長さは命令の実行レイテンシ（実行遅延時間をいう。）を示す。実行レイテンシは、命令ｉ１、ｉ４、ｉ５、ｉ６、ｉ９が２サイクル、その他の命令が１サイクルである。
【０２７４】
まず、命令ｉ３のグローバル・スラックについて考える。命令ｉ３の実行レイテンシを７サイクル増加させた場合、それに直接的、間接的にそれぞれ依存する命令ｉ８、命令ｉ１０の実行が遅れる。その結果、命令ｉ１０は、プログラム中最も最後に実行される命令ｉ１１と同時刻に実行される。従って、命令ｉ３の実行レイテンシをこれ以上増加させると、プログラム全体の実行サイクル数が増加する。つまり、命令ｉ３のグローバル・スラックは７である。このように、ある命令のグローバル・スラックを求めるためには、その命令の実行レイテンシの増加が、プログラム全体の実行に与える影響を調べる必要がある。そのため、グローバル・スラックの判定は非常に難しい。
【０２７５】
ここで、命令ｉ３に加え、命令ｉ３と間接的に依存関係のある、命令ｉ０のグローバル・スラックに着目する。上記と同様にして、命令ｉ０のグローバル・スラックも７であることが分かる。そこで、これらの命令が、グローバル・スラックを利用して、実行レイテンシを７サイクル増加させると、命令ｉ１０は、プログラム中最も最後に実行されるよりも、７サイクル後に実行されてしまう。このように、ある命令がグローバル・スラックを利用すると、他の命令がグローバル・スラックを利用できなくなる可能性がある。そのため、グローバル・スラックは、利用することも難しいといえる。
【０２７６】
次に、命令ｉ３のローカル・スラックについて考える。
【０２７７】
命令ｉ３の実行を６サイクル増加させた場合、後続命令の実行に影響は与えない。しかし、これ以上実行レイテンシを増加させると、命令ｉ３に直接依存する命令ｉ８の実行が遅れる。つまり、命令ｉ３のローカル・スラックは６である。このように、ある命令のローカル・スラックを求めるには、その命令に依存する命令への影響に着目すれば良い。従って、ローカル・スラックは比較的容易に判定することができる。
【０２７８】
ここで、命令ｉ３と間接的に依存関係のある、命令ｉ１０のローカル・スラックに着目する。上記と同様にして、命令ｉ１０のローカル・スラックは１であることが分かる。３がローカル・スラックを利用したとしても、それに直接依存する命令に影響を与えることはないので、命令ｉ１０はローカル・スラックを利用することができる。グローバル・スラックとは異なり、ある命令がローカル・スラックを利用しても、それとは関係なく、他の命令はローカル・スラックを利用することができる。
【０２７９】
以上のように、ローカル・スラックは、グローバル・スラックとは異なり、求めることが容易なだけではなく、利用することも容易である。そこで、本実施形態では、これ以降、ローカル・スラックを対象として議論を進める。
【０２８０】
３．従来のスラック予測機構．
従来機構の概要について述べる。詳細については、従来技術及び第１の実施形態において詳細説明した。時刻に基づく機構では、ある命令がデータを定義した時刻と、そのデータが他の命令によって参照された時刻の差からローカル・スラックを計算し、次回実行時のローカル・スラックは、計算によって得たローカル・スラックと同じになると予測する。一方、発見的手法に基づく機構では、分岐予測ミスや、フォワーディングといった、命令実行時の振る舞いを観測しながら、予測するローカル・スラック（予測スラック）を増減させ、予測スラックを実際のローカル・スラック（実スラック）に近づけて行く。
【０２８１】
どちらの手法も、同程度の予測精度を達成できるが、スラック命令数が少ないという問題点がある。例えば、発見的手法では、４命令発行のプロセッサにおいて、性能低下を１０％未満に抑えつつ、予測可能なスラック命令数は、最大で、全実行命令の３〜５割程度である。スラック命令数が少なければ、スラックを利用する機会も制限されてしまう。そこで、スラック命令数を増加させる方策を考えることが重要となる。
【０２８２】
４．スラック命令数を増加させる手法．
本章では、ある命令の持つローカル・スラックを、当該命令だけでなく、それ以外の命令も利用する（共有化する）手法を提案する。スラックの共有化によって、ローカル・スラックを持たなかった命令が、スラックを利用できるようにすることができれば、スラック命令数を増加させることができる。
【０２８３】
まず、スラックを共有化する命令間には、どのような関係が成り立つのかについて考える。
【０２８４】
ローカル・スラックを持たない命令が、実行レイテンシを増加させれば、それに依存する命令の実行に影響を与える。その結果、ある命令の持っていたローカル・スラックが減少したとすれば、これらの命令は、スラックを共有していると考えることができる。このことから本発明者は、スラックを共有化できる命令は、ローカル・スラックを持つ命令の実行に影響を与えうる命令、つまり、直接的、間接的にオペランドを供給する命令であると考えた。
【０２８５】
例えば、図３９において、命令ｉ３はローカル・スラックを持つ命令である。そして、命令ｉ０、ｉ２は、命令ｉ３に直接的、間接的にオペランドを共有する命令である。これらの命令の実行レイテンシを増加させると、命令ｉ３の利用可能なローカル・スラックは減少する。従って、命令ｉ３の持つローカル・スラックは、命令ｉ０、ｉ２、ｉ３の間で共有化できるということになる。
【０２８６】
図４０（ａ）は従来技術の手法に係るスラックの利用を説明するプログラムを示すタイミングチャートであり、図４０（ｂ）は本発明の第２の実施形態に係る、スラック命令数を増加させる手法に係るスラックの利用を説明するプログラムを示すタイミングチャートである。
【０２８７】
図４０（ａ）及び（ｂ）を用いて、従来手法と、本実施形態に係る共有化手法について説明する。この図４０（ａ）及び（ｂ）は、図３９のプログラムにおいて、命令ｉ３のローカル・スラックを利用した場合の動作を示す。図４０（ａ）の従来手法では、命令ｉ３のローカル・スラックを利用するのは、命令ｉ３のみである。一方、図４０（ｂ）の提案手法では、命令ｉ３のローカル・スラックを、命令ｉ０、ｉ２、ｉ３の間で共有化していることが分かる。これにより、スラック命令数が増加する。なお、共有化によって、１命令あたりのスラックは減少する。そのため、共有化は、１命令毎に多くのスラックを必要とする応用には向いていないことに注意する必要がある。
【０２８８】
次に、スラックを共有化する命令を求める方法について考える。
【０２８９】
共有化を実現する手法として、命令間の依存関係を示すデータフローグラフ（ＤＦＧ：Data Flow Graph）を利用するという方法が考えられる。データフローグラフが分かれば、ある命令の持つローカル・スラックに対し、直接的、間接的にオペランドを供給する命令、つまり、共有化を行う命令を求めることができる。その後は、これらの命令間で、スラックを均等に割る、など、状況に応じて、スラックの分配方法を決めれば良い。しかし、命令間の依存関係は複雑で、さらに、分岐によってその関係が動的に変化するため、データフローグラフを作成するのは容易ではないと考えられる。
【０２９０】
そこで、本発明者は、ローカル・スラックを持つ命令を始点とし、依存先から依存元へと依存関係を逆にたどりながら、共有可能なスラックが存在するという情報（共有化情報）を伝搬させて行くこととする。例えば、図３９では、共有化情報は、ローカル・スラックを持つ命令ｉ３から命令ｉ２へと伝搬し、その後、命令ｉ２から命令ｉ０へと伝搬することになる。各命令は、自身が直接依存する、スラックを持たない命令に対して、共有化情報を伝搬させるだけで良いため、データフローグラフを作成する方法に比べ、実現ははるかに容易である。
【０２９１】
さらに、ローカル・スラックの動的に変化するため、共有化情報の伝搬の速度を変化させることができるようにする。具体的には、命令は、自身の予測スラックがあるしきい値（伝搬のしきい値）以上になったら、共有化情報を伝搬させることとする。これ以降、伝搬のしきい値のことを、伝搬しきい値Ｐｔｈという。
【０２９２】
最後に、スラックの予測方法について考える。予測には２種類ある。ローカル・スラックの予測と、共有化情報を受け取った命令が利用するスラックの予測である。
【０２９３】
ローカル・スラックは動的に変化する。共有化を行うと、１命令あたりのスラックは減少するので、ローカル・スラックの動的な変化はさらに複雑になる。この変化に対応するために、ローカル・スラックの予測手法として、予測スラックの増減の緩急を制御できる、発見的ローカル・スラック予測（第１の実施形態参照。）を用いることとする。
【０２９４】
共有化できるスラックは動的に変化する。また、共有化情報を受け取った命令は、スラックを共有化できるということしか分からない。これは、発見的ローカル・スラック予測において、予測するスラックは動的に変化し、各命令は予測スラックが実スラックに到達したかどうかしか分からないという状況に非常に似ている。そこで、共有化情報を受け取った命令に対しても、発見的にスラックを予測することとする。
【０２９５】
具体的には、以下のようにする。まず、予測スラック毎に信頼性カウンタを導入する。実行時に、共有化情報を受け取った場合、予測スラックは利用可能なスラックに未だ到達していないと判定し、信頼性カウンタを増加させる。そうでなかった場合、予測スラックは利用可能なスラックに到達したと判定し、信頼性カウンタを減少させる。そして、カウンタ値が０になったら予測スラックを減少させ、カウンタ値があるしきい値以上になったら予測スラックを増加させる。
【０２９６】
５．提案機構
本章では前章で示した提案手法を実現する機構について説明する。まず、提案機構の概要について述べる。次に、提案機構の各構成要素について説明する。最後に、全体の動作について詳しく説明する。
【０２９７】
５．１．提案機構の構成．
図４１は、本発明の第３の実施形態に係る、スラック伝搬表８０などを備えたプロセッサ１０である提案機構の構成を示すブロック図である。本節の説明には関係しないため、プロセッサ１０及び更新ユニット３０の内部は省略するが、プロセッサ１０の詳細構成は図６又は図３５に図示され、更新ユニット３０の詳細構成は図１９又は図４６に図示されている。ここで、提案機構は、プロセッサ１０に加えて、以下３つの構成要素をさらに備えて構成される。
（１）スラック表２０Ａ、
（２）スラック伝搬表８０、及び
（３）更新ユニット３０。
【０２９８】
スラック表２０Ａは例えばハードディスクメモリなどの記憶装置に格納され、命令毎に、伝搬フラグＰｆｌａｇ、予測スラック、信頼性を保持する。プロセッサ１０は、主記憶装置９から命令をフェッチすると、フェッチ時にスラック表２０Ａを参照し、スラック表２０Ａから得られた予測スラックを、自身の予測スラックとして用いる。伝搬フラグＰｆｌａｇはローカル・スラックの予測の内容を示す。伝搬フラグＰｆｌａｇが０の場合、従来のローカル・スラック予測を行っていることを示し、伝搬フラグＰｆｌａｇが１の場合、共有化情報に基づくスラック予測を行っていることを示す。ローカル・スラックを予測した後でなければ、共有化情報は伝搬できないため、伝搬フラグＰｆｌａｇの初期値は０にセットされる。
【０２９９】
スラック伝搬表８０は、各命令の持つ共有化情報を、自身が直接依存する、ローカル・スラックを持たない命令に伝搬させるために用いる。このスラック伝搬表８０は、命令のデスティネーション・レジスタ番号をインデクスとする。各エントリは、命令毎にローカル・スラックを持たない命令のプログラム・カウンタ値（ＰＣ）、予測スラック、信頼性を保持する。また、更新ユニット３０は、命令実行時の振る舞いや、共有化情報に基づいて、コミットした命令の予測スラックと信頼性を計算するために用いる。更新ユニット３０で計算された値は、スラック表２０Ａに書き込まれる。
【０３００】
５．２．構成要素の詳細．
プロセッサ１０は命令をフェッチすると、フェッチ時にスラック表２０Ａを参照し、スラック表２０Ａから自身の予測スラックを得る。そして、命令のコミット時に、伝搬フラグＰｆｌａｇ、信頼性、予測スラック、実行時の振る舞いが、更新ユニット３０に送られる。命令の伝搬フラグＰｆｌａｇが０であれば、発見的ローカル・スラック予測手法に基づいて、信頼性と予測スラックが計算し、スラック表２０Ａを更新する。このとき、伝搬フラグＰｆｌａｇを変更しない。
【０３０１】
次に、計算によって得たローカル・スラックを用いて、スラック伝搬表８０の更新／参照を行う。ここで、伝搬フラグＰｆｌａｇが０で、予測スラックが１以上の場合、命令はローカル・スラックを持つ。また、伝搬フラグＰｆｌａｇが０で、予測スラックが０の場合であっても、信頼性が１以上であれば、命令は次回実行時にローカル・スラックを持つ可能性がある。そこで、これらの場合は、スラック伝搬表８０のデスティネーション・レジスタに対応するエントリをクリアする。一方、上記のいずれにも該当しない場合、命令はローカル・スラックを持たず、次回実行時にローカル・スラックを持つ可能性は無いといえる。そこで、この場合は、スラック伝搬表８０のデスティネーション・レジスタに対応するエントリに、その命令のプログラム・カウンタ値（ＰＣ）、予測スラック、信頼性を書き込む。
【０３０２】
命令がローカル・スラックを持つ場合、あるいは、共有化によってスラックを利用できるようになった場合、スラックを伝搬しきい値Ｐｔｈと比較する。スラックが伝搬しきい値Ｐｔｈ未満である場合、ソース・レジスタ番号でスラック伝搬表８０を参照する。参照した結果得られる命令は、共有化情報を受け取らないことが分かる。そこで、この情報に基づき、命令のスラックを予測するとともに、参照したエントリをクリアする。スラックが伝搬しきい値Ｐｔｈ以上である場合、ソース・レジスタ番号に対応する命令は、当該命令から共有化情報を受け取ることが分かる。しかし、当該命令の後続命令からは共有化情報を受け取ることができない可能性がある。そのため、この時点では何も行わない。その後、対応するエントリを再定義する命令をコミットするときに、そのエントリの命令は、依存するすべての命令から、共有化情報を受け取ることが分かる。そこで、この情報に基づき、命令のスラックを予測する。
【０３０３】
最後に、共有化情報に基づくスラック予測について説明を行う。共有化情報に基づくスラック予測では、共有化情報を受け取ったかどうかという情報に基づいて、信頼性と予測スラックが計算し、スラック表２０Ａを更新する。基本的に、発見的ローカル・スラック予測手法と同じ考え方を用いて更新データの計算を行うが、ターゲット・スラック到達条件ではなく、共有化情報を基にしている点が異なる。
【０３０４】
以下に、スラック表の更新に関係するパラメータとその内容を示す。なお、予測スラックの最小値Ｖｍｉｎ＿ｓ＝０、信頼性の最小値Ｃｍｉｎ＿ｓ＝０である。
【０３０５】
（１）Ｖｍａｘ＿ｓ：予測スラックの最大値、
（２）Ｖｍｉｎ＿ｓ：予測スラックの最小値（＝０）、
（３）Ｖｉｎｃ＿ｓ：予測スラックの１回あたりの増加量、
（４）Ｖｄｅｃ＿ｓ：予測スラックの１回あたりの減少量、
（５）Ｃｍｉｎ＿ｓ：信頼性の最小値（＝０）、
（６）Ｃｔｈ＿ｓ：信頼性のしきい値、
（７）Ｃｉｎｃ＿ｓ：信頼性の１回あたりの増加量、及び
（８）Ｃｄｅｃ＿ｓ：信頼性の１回あたりの減少量。
【０３０６】
パラメータの種類と内容は、ローカル・スラック予測の場合と同じである。ただし、共有化情報の伝搬には時間がかかるので、パラメータの取るべき値は必ずしも同じになる訳ではない点に注意されたい。
【０３０７】
上記のパラメータを用いて、スラック表の更新の流れを説明する。命令が共有化情報を受け取れば信頼性を増加量Ｃｉｎｃ＿ｓだけ増加させ、そうでなければ信頼性を減少量Ｃｄｅｃ＿ｓだけ減少させる。信頼性がしきい値Ｃｔｈｓ以上になったら、予測スラックを増加量Ｖｉｎｃ＿ｓだけ増加させ、信頼性を０にリセットする。一方、信頼性が０になったら、予測スラックを減少量Ｖｄｅｃ＿ｓだけ減少させる。
【０３０８】
上記の操作によって、伝搬フラグＰｆｌａｇが０であった命令の予測スラックが１以上になったら、共有化によってスラックが利用できるようになったということなので、伝搬フラグＰｆｌａｇを１とする。逆に、伝搬フラグＰｆｌａｇが１であった命令の予測スラックが０になったら、スラックの共有化ができなくなったということなので、伝搬フラグＰｆｌａｇを０とする。
【０３０９】
図４２は、図４１の更新ユニット３０によって実行されるローカル・スラック予測処理を示すフローチャートである。なお、ステップＳ３２，Ｓ４１については新規な処理であり、ステップ番号の後ろに（＊）を付している。ここで、予測スラックと信頼性の数値範囲は、０≦信頼性≦Ｃｔｈ＿l，０≦予測スラック≦Ｖｍａｘ＿lである。到達条件フラグＲｆｌａｇは第１の実施形態において用いたフラグであって、ターゲット・スラック到達条件が成立しているときに１となり、そうでないときに０となるフラグである。また、判定フラグＳｆｌａｇは第２の実施形態において新たに追加したストア命令の予測スラックの判定フラグであって、ストア命令の予測スラックがしきい値Ｖｔｈ以上であるかどうかを示すフラグである。ここで、ロード命令の場合、フラグＳｆｌａｇに意味はない。フラグＳｆｌａｇは、ストア命令の予測スラックがしきい値Ｖｔｈ以上であれば１にセットし、そうでなければ０にリセットする。フラグＳｆｌａｇのセット／リセットは、ストア命令をＬＳＱ６２に割り当てるときに機能ユニット６１により行われる。
【０３１０】
図４２において、まず、ステップＳ３１においてコミットした命令を取得し、ステップＳ３２において伝搬フラグＰｆｌａｇ＝０であるか否かが判断され、ＹＥＳのときはステップＳ３３に進む一方、ＮＯのときはステップＳ４１に進む。ステップＳ３３において到達条件フラグＲｆｌａｇ＝０であるか否かが判断され、ＹＥＳのときはステップＳ３４に進む一方、ＮＯのときはステップＳ３７に進む。ステップＳ３４において信頼性の値に増加量Ｃｉｎｃ＿lを加算し、加算結果を信頼性の値として挿入し、ステップＳ３５において信頼性≧Ｃｔｈ＿lであるか否かが判断され、ＹＥＳのときはステップＳ３６に進む一方、ＮＯのときはステップＳ４０に進む。ステップＳ３６では、信頼性の値を０にリセットし、予測スラックの値に増加量Ｖｉｎｃ＿lを加算し、加算結果を予測スラックの値として挿入した後、ステップＳ４０に進む。一方、ステップＳ３７において信頼性の値から減少量Ｃｄｅｃ＿lを減算し、減算結果を信頼性の値として挿入した後、ステップＳ３８において信頼性＝０であるか否かが判断され、ＹＥＳのときはステップＳ３９に進む一方、ＮＯのときはステップＳ４０に進む。ステップＳ３９では、信頼性の値を０にリセットし、予測スラックの値に減少量Ｖｄｅｃ＿lを減算し、減算結果を予測スラックの値として挿入した後、ステップＳ４０に進む。ステップＳ４０において上記の演算結果に基づいてスラック表を更新し、ステップＳ４１において図４３の共有化情報の伝搬処理を実行した後、当該ローカル・スラック予測処理を終了する。
【０３１１】
図４３は、図４２のサブルーチンであって、共有化情報の伝搬処理（Ｓ４１）を示すフローチャートである。
【０３１２】
ステップＳ４２において、コミットした命令の予測スラックを伝搬しきい値Ｐｔｈと比較し、ステップＳ４３において予測スラック≧Ｐｔｈであるか否かが判断され、ＹＥＳのときはステップＳ４４に進む一方、ＮＯのときはステップＳ５２に進む。ステップＳ４４においてコミットした命令のデスティネーション・レジスタ番号でスラック伝搬表８０を参照し、ステップＳ４５において参照したスラック伝搬表８０のエントリからコミットした命令と同じレジスタを定義する先行命令のプログラム・カウンタ値（ＰＣ）、予測スラック及び信頼性を読み出し、ステップＳ４６において読み出した情報が有効であるか（クリアされていないか）であるか否かが判断される。ステップＳ４６において、ＹＥＳのときはステップＳ４７に進む一方、ＮＯのときはステップＳ４９に進む。ステップＳ４７においてコミットした命令と同じレジスタを定義する先行命令のフラグＳｆｌａｇを１にセットし、ステップＳ４８においてコミットした命令と同じレジスタを定義する先行命令のプログラム・カウンタ値（ＰＣ）、予測スラック、信頼性及びフラグＳｆｌａｇを更新ユニット３０へ送り、ステップＳ４９に進む。
【０３１３】
一方、ステップＳ５２では、コミットした命令のソース・レジスタ番号でスラック伝搬表８０を参照し、ステップＳ５３において参照したスラック伝搬表８０のエントリからコミットした命令の依存元のプログラム・カウンタ値（ＰＣ）、予測スラック及び信頼性を読み出す。次いで、ステップＳ５４において、参照したスラック伝搬表８０のエントリをクリアし、ステップＳ５５において、コミットした命令の依存元のフラグＳｆｌａｇを０にリセットした後、ステップＳ５６においてコミットした命令の依存元のプログラム・カウンタ値（ＰＣ）、予測スラック、信頼性及びフラグＳｆｌａｇを更新ユニット３０に送り、ステップＳ４４に進む。
【０３１４】
さらに、ステップＳ４９においてコミットした命令の伝搬フラグＰｆｌａｇ＝１、又はコミットした命令の伝搬フラグＰｆｌａｇ＝予測スラック＝信頼性＝０であるか否かが判断され、ＹＥＳのときはステップＳ５０に進む一方、ＮＯのときはステップＳ５１に進む。ステップＳ５０において参照したスラック伝搬表８０のエントリにコミットした命令のＰＣ、予測スラック及び信頼性を書き込み、元のメインルーチンに戻る。一方、ステップＳ５１において参照したスラック伝搬表８０のエントリをクリアし、元のメインルーチンに戻る。
【０３１５】
図４４は、新規な制御フローであって、図４１の更新ユニット３０によって実行される共有化スラックの予測処理を示すフローチャートである。ここで、予測スラックと信頼性の数値範囲は、０≦信頼性≦Ｃｔｈ＿ｓ，０≦予測スラック≦Ｖｍａｘ＿ｓである。
【０３１６】
ステップＳ６１において、まず、共有化情報の伝搬処理により、更新ユニット３０へ送られてきた命令を取得し、ステップＳ６２においてフラグＳｆｌａｇ＝１であるか否かが判断され、ＹＥＳのときはステップＳ６３に進む一方、ＮＯのときはステップＳ６６に進む。ステップＳ６３において信頼性の値に増加量Ｃｉｎｃ＿ｓを加算し、加算結果を信頼性の値に挿入し、ステップＳ６４において信頼性≧Ｃｔｈ＿ｓ（しきい値）であるか否かが判断され、ＹＥＳのときはステップＳ６５に進む一方、ＮＯのときはステップＳ６９に進む。ステップＳ６５において信頼性の値を０にリセットし、予測スラックの値に増加量Ｖｉｎｃ＿ｓを加算し、加算結果を予測スラックの値として挿入した後、ステップＳ６９に進む。一方、ステップＳ６６において信頼性の値から減少量Ｃｄｅｃ＿ｓを減算し、減算結果を信頼性の値として挿入し、ステップＳ６７において信頼性＝０であるか否かが判断され、ＹＥＳのときはステップＳ６８に進む一方、ＮＯのときはステップＳ６９に進む。ステップＳ６８において信頼性の値を０にリセットし、予測スラックの値から減少量Ｖｄｅｃ＿ｓを減算し、減算結果を予測スラックの値として挿入した後、ステップＳ６９に進む。ステップＳ６９では、信頼性≧１又は予測スラック≧１であるか否かが判断され、ＹＥＳのときはステップＳ７０に進む一方、ＮＯのときはステップＳ７１に進む。ステップＳ７０において伝搬フラグＰｆｌａｇを１にセットし、ステップＳ７２に進む。一方、ステップＳ７１では、伝搬フラグＰｆｌａｇを０にリセットし、ステップＳ７２に進む。ステップＳ７２では、上記の演算結果に基づいてスラック表２０Ａを更新し、当該強化スラックの予測処理を終了する。
【０３１７】
以上説明したように、第３の実施形態によれば、共有化情報に基づくスラック予測方法である第２の予測方法を用いて、ローカル・スラックを持つ命令に基づいて、ローカル・スラックを持たない命令間で依存先から依存元へと共有可能なスラックが存在するという共有化情報を伝搬させて行き、当該共有化情報に基づいて所定の発見的な手法を用いて各命令が利用するローカル・スラックの量を決定し、ローカル・スラックを持たない命令がローカル・スラックを利用することができるように制御する。従って、ローカル・スラックを持たない命令がローカル・スラックを利用することができるようになり、従来技術に比較して簡単な構成で、ローカル・スラックを有効にかつ十分に利用してローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができる。
【０３１８】
第４の実施形態．
本実施形態では、スラックの分布に着目して、予測精度を向上する手法を提案する。発見的手法を用いてローカル・スラックを予測する機構を提案する。ローカル・スラックとは、他の命令に影響を与えることなく、その命令の実行レイテンシを増加させることのできるサイクル数である。本実施形態に係る提案機構は、分岐予測ミスやオペランド・フォワーディングなど命令実行時の振る舞いを観測しながら、予測するローカル・スラックを増減させ、実際のローカル・スラックに近づけて行くことを特徴とする。
【０３１９】
１．従来技術及び第１の実施形態の問題点．
実際のローカル・スラック（実スラック）は動的に変化する。そのため、この変化に対応する手法が提案されている（例えば、非特許文献６及び第１の実施形態参照。）。しかし、実スラックの変化に十分追従できず、性能低下を招く可能性がある。これを防ぐため、予測スラックの増加を緩やかにする手法が提案されている（第１の実施形態参照。）が、スラックが１以上存在すると予測できる命令の数（スラック命令数）が減少してしまうという問題点があった。
【０３２０】
そこで、本実施形態では、スラックの分布に着目して、予測精度を向上する手法を提案する。この手法では、従来機構に修正を加え、スラックの値に応じて、スラックの更新に用いるパラメータを変更できるようにする。こうすることにより、スラック命令数を維持したまま、性能低下を抑制できるようになる。
【０３２１】
２．スラック．
スラックに関しては、従来技術及び第１の実施形態において詳述した。第１の実施形態において述べた通り、ローカル・スラックは、グローバル・スラックとは異なり、求めることだけでなく、利用することも容易である。そこで、本実施形態では、これ以降、「ローカル・スラック」を対象として議論を進める。また、「ローカル・スラックを」、単に、「スラック」と表記する。
【０３２２】
３．第１の実施形態のスラック予測機構．
第１の実施形態に係るスラック予測機構（以下、比較例機構という。）の概要とその問題点について述べる。比較例機構の詳細については、第１の実施形態において詳述した。
【０３２３】
時刻に基づく機構では、ある命令がデータを定義した時刻と、そのデータが他の命令によって参照された時刻の差からスラックを計算し、次回実行時のスラックは計算によって得たスラックと同じになると予測する。一方、発見的手法に基づく機構では、分岐予測ミスや、フォワーディングといった、命令実行時の振る舞いを観測しながら、予測スラックを増減させ、予測スラックを実スラックに近づけて行く。どちらの手法も同程度の予測精度を達成できる。
【０３２４】
従来手法は、過去のスラックを元にして、次回実行時のスラックを予測する。実際のスラック（実スラック）が動的に変化し、予測したスラック（予測スラック）を下回ると、性能に悪影響を与える。そのため、従来手法は、実スラックの変化に対応する機構を幾つか備えている。しかし、実スラックが急速に増減を繰り返す場合、その変化に十分追従することができない。そこでさらに、発見的手法に基づく機構では、予測スラックの増加を慎重に行い、予測スラックの減少を迅速に行うことで、予測スラックが実スラックをできるだけ超えないようにしている（第１の実施形態参照。）。
【０３２５】
しかし、性能低下を防ぐために、予測スラックの増加を緩やかにすると、スラックが１以上あると予測できる命令の数（スラック命令数）が減少してしまうという問題がある。スラック命令数の減少は、スラックを利用する機会の減少を意味する。そのため、スラック命令数を維持しつつ、性能低下を防ぐ仕組みを構築することが重要となる。
【０３２６】
４．スラックの予測精度を向上させる手法．
スラックの分布には偏りがある。具体的には、スラックの分布は、０が最も多く、それ以降の値は急速に少なくなるという特徴を持つ。本発明者は、この性質に基づいて、予測スラックの増減の緩急を制御することで、スラック命令数をできるだけ維持しつつ、性能低下を抑制できるのではないかと考えた。本章では、まずスラックの分布について述べ、次にこの分布を利用した、スラックの予測方法を提案する。
【０３２７】
４．１．スラックの分布．
本発明者は、スラックの分布を調査するため、プロセッサシミュレータ上で公知のＳＰＥＣｉｎｔ２０のベンチマークを実行し、ある命令がデータを定義した時刻と、そのデータが他の命令によって参照された時刻の差からスラックを計算した。以下では、まず調査環境の詳細を示し、その後、調査結果について述べる。
【０３２８】
４．１．１．測定環境．
スラックの分布を調査するために用いた環境について述べる。シミュレータには、公知のＳｉｍｐｌｅＳａｌｒ  Ｔｏｏｌのスーパースカラ・プロセッサ用シミュレータを用いた。命令セットには公知のＭＩＰＳＲ１０を拡張したＳｉｍｐｌｅＳａｌｒ／ＰＩＳＡを用いた。ベンチマーク・プログラムは、公知のＳＰＥＣｉｎｔ２０００のｂｚｉｐ２、ｇｃｃ、ｇｚｉｐ、ｍｃｆ、ｐａｒｓｅｒ、ｐｅｒｌｂｍｋ、ｖｏｒｔｅｘ、ｖｐｒの８本を使用した。プログラムｇｃｃでは１Ｇ命令、その他のプログラムでは２Ｇ命令をスキップした後、１０Ｍ命令を実行した。表７に測定条件を示す。
【０３２９】
【表７】
2007293815.tif 000009
【０３３０】
４．１．２．調査結果．
図４５は、本発明者の調査結果に係る、実スラックに対する実行命令数に占める割合を示すグラフである。図４５では調査結果をベンチマーク平均で示す。図４５の横軸は全実行命令に占める割合であり、その縦軸はスラックである。図４５より、スラックが０である命令の割合が最も多く、スラックが大きくなるに連れて命令の割合は急速に低下して行くことが分かる。
【０３３１】
４．２．スラックの分布を利用した予測精度向上手法．
調査結果より、ランダムに値が変化すると仮定すると、スラック予測の成功率は、予測したスラックの値が小さい程高いと考えられる。つまり、予測成功率は、予測スラックが０の場合が最も高く、予測スラックの値が大きくなる程、予測成功率は低くなって行くと考えられる。
【０３３２】
そこで、従来の発見的手法に基づく機構に修正を加え、スラックの値に応じて、予測スラックの更新方法を変更できるようにする。例えば、予測スラックは、０から１に増加させる場合は迅速に変化させ、１以上の値から増加させる場合は慎重に行うようにする。これにより、成功する確率を考慮して予測スラックの更新方法を決定できるようになるため、スラック命令数の維持と、性能低下の抑制を同時に実現することができるようになる。また、予測スラックの更新方法の変更は、スラック値に応じて更新パラメータを切り替えるだけで済むため、実現は容易である。なお、更新パラメータを切り替えるポイントは、多数設定することが可能であるが、多くなる程、ハードウェアは複雑度になるので、それを考慮して、設定する必要がある。
【０３３３】
５．提案機構の構成．
図４６は、第１の実施形態に係る更新ユニット３０を備えたプロセッサ１０の構成を示すブロック図である。図４６は、図１９の概要を示すものである。
【０３３４】
図４６において、更新ユニット３０は、２個の加算器４０，５０と、３個のマルチプレクサ９１，９２，１１０と、４個の比較器９３，９４，１１１，１１２とを備えて構成される。ここで、各マルチプレクサ９１，９２，１１０及び各比較器９４，１１２に入力される各パラメータは第１の実施形態において説明したものである。プロセッサ１０から出力される信頼性は、加算器４０の第１の入力端子に入力され、プロセッサ１０から出力される到達条件フラグＲｆｌａｇはマルチプレクサ９１の切り替え制御信号として入力され、マルチプレクサ９１は、到達条件フラグＲｆｌａｇ＝０のとき増加量Ｃｉｎｃを選択して加算器４０の第２の入力端子に出力する一方、到達条件フラグＲｆｌａｇ＝１のとき減少量Ｃｄｅｃにマイナスを付加してなる−Ｃｄｅｃを選択して加算器４０の第２の入力端子に出力する。加算器４０は入力される２つのデータ値を加算し、加算結果のデータ値を信頼性の更新値としてスラック表２０に出力するとともに、比較器９３及び９４に出力する。さらに、プロセッサ１０からの予測スラックは、加算器５０の第２の入力端子に入力される。
【０３３５】
比較器９３は、入力されるデータ値を０と比較し、０以下のときデータ値１をマルチプレクサ９２の第２の制御信号入力端子に出力する一方、１以上のときデータ値０をマルチプレクサ９２の第２の制御信号入力端子に出力する。また、比較器９４は、入力されるデータ値をしきい値Ｃｔｈと比較し、入力データ値≧Ｃｔｈのときデータ値１をマルチプレクサ９２の第１の制御信号入力端子に出力する一方、入力データ値＜Ｃｔｈのときデータ値０をマルチプレクサ９２の第１の制御信号入力端子に出力する。ここで、マルチプレクサ９２への各制御信号入力端子への制御信号をＣＳ９１（Ａ，Ｂ）で表し、Ａは第１の制御信号端子への入力値であり、Ｂは第２の制御信号入力端子への入力値である。マルチプレクサ１１０への各制御信号入力端子への制御信号も同様にＣＳ１１０（Ａ，Ｂ）で表す。マルチプレクサ９２は制御信号ＣＳ９２（０，０）のときデータ値０を選択して加算器５０の第１の入力端子に出力し、制御信号ＣＳ９２（０，１）のとき減少量Ｖｄｅｃにマイナスを付加してなるデータ値−Ｖｄｅｃを選択して加算器５０の第１の入力端子に出力し、制御信号ＣＳ９２（１，＊）（ここで、＊は不定値をいう。以下、同様である。）のとき増加量Ｖｉｎｃを選択して加算器５０の第１の入力端子に出力する。加算器５０は入力される２つのデータ値を加算し、加算結果のデータ値を比較器１１１，１１２及びマルチプレクサ１１０の第３の入力端子に出力する。
【０３３６】
比較器１１１は入力されるデータ値を０と比較し、入力データ値≦０であるとき、データ値１を出力する一方、そうでないときにデータ値０を出力する。比較器１１２は入力されるデータ値を最大値Ｖｍａｘと比較し、入力データ値≧Ｖｍａｘであるとき、データ値１を出力する一方、そうでないときにデータ値０を出力する。マルチプレクサ１１０は制御信号ＣＳ１１０（０，０）のときにデータ値０を選択して予測スラックの更新値としてスラック表２０に出力し、制御信号ＣＳ１１０（１，＊）のときに最大値Ｖｍａｘを選択して予測スラックの更新値としてスラック表２０に出力し、制御信号ＣＳ１１０（０，１）のときに加算器５０からのデータ値を選択して予測スラックの更新値としてスラック表２０に出力する。
【０３３７】
図４８は第１の実施形態に係るローカル・スラック予測処理を示すフローチャートである。ここで、予測スラックと信頼性の数値範囲は、０≦信頼性≦Ｃｔｈ，０≦予測スラック≦Ｖｍａｘである。
【０３３８】
図４８において、ステップＳ８０においてコミットした命令を取得し、ステップＳ８１において到達条件フラグＲｆｌａｇ＝０であるか否かが判断され、ＹＥＳのときはステップＳ８２に進む一方、ＮＯのときはステップＳ８５に進む。ステップＳ８２において信頼性の値に増加量Ｃｉｎｃを加算し、加算結果を信頼性として挿入し、ステップＳ８３において信頼性≧Ｃｔｈ（しきい値）であるか否かが判断される。ステップＳ８３において、ＹＥＳのときはステップＳ８４に進む一方、ＮＯのときはステップＳ８８に進む。ステップＳ８４において信頼性を０にリセットし、予測スラックの値に増加量Ｖｉｎｃを加算し、加算結果を予測スラックに挿入し、ステップＳ８８に進む。一方、ステップＳ８５において信頼性の値から減少量Ｃｄｅｃを減算し、減算結果を信頼性に挿入し、ステップＳ８６において信頼性＝０であるか否かが判断される。ステップＳ８６において、ＹＥＳのときはステップＳ８７に進む一方、ＮＯのときはステップＳ８８に進む。ステップＳ８７において信頼性を０にリセットし、予測スラックの値から減少量Ｖｄｅｃを減算し、減算結果を予測スラックに挿入した後、ステップＳ８８に進む。そして、ステップＳ８８では、上記の演算結果に基づいてスラック表２０を更新し、当該ローカル・スラック予測処理を終了する。
【０３３９】
図４７は、本発明の第４の実施形態に係る更新ユニット３０Ａを備えたプロセッサ１０の構成を示すブロック図である。第４の実施形態に係る提案機構は、プロセッサ１０に対して、スラック表２０と更新ユニット３０Ａをさらに備えて構成されたことを特徴とする。ここで、スラック表２０は命令毎の予測スラックと信頼性を保持する。更新ユニット３０Ａは、スラック表２０の予測スラックと信頼性を更新するための論理回路である。図４７の提案機構は、図４６の比較機構に比較して、更新ユニット３０Ａの構成が以下のように異なることを特徴としている。
（１）比較器１００をさらに備える。
（２）比較器１００と、マルチプレクサ９１との間に、２個のマルチプレクサ１０１，１０２を備える。
（３）比較器１００と、比較器９４との間に、マルチプレクサ１０３を備える。
（４）比較器１００と、マルチプレクサ９２との間に２個のマルチプレクサ１０４，１０５を備える。
【０３４０】
プロセッサ１０は、主記憶装置９からの命令のフェッチ時に、スラック表２０にアクセスし、その命令の予測スラックと信頼性を得る。命令実行時に以下の振る舞いが観測されると、予測スラックが実スラックに到達したと判断して、その命令に対応する到達条件フラグＲｆｌａｇを１にセットする。分岐予測ミス、キャッシュミス、フォワーディング。命令コミット時に、コミットした命令の予測スラック、到達条件フラグＲｆｌａｇ、信頼性を更新ユニット３０Ａに送る。更新ユニット３０Ａは、プロセッサ１０から受け取ったこれらの値を入力として、新たな予測スラックと信頼性を計算し、スラック表２０を更新する。スラック表２０は、命令毎に予測スラックと信頼性を保持する。本実施形態では、命令実行時の振舞を観測して、予測スラックが実スラックよりも小さいかどうかを判定する。信頼性は、この判定がどの程度信頼できるかを示している。
【０３４１】
本実施形態では、更新ユニット３０Ａの構成をできるだけ簡潔にするため、更新パラメータを切り替えるしきい値Ｓｔｈを１箇所に限定する。従って、各更新パラメータは、スラックがこのしきい値Ｓｔｈ未満のときに用いるパラメータと、しきい値Ｓｔｈ以上のときに用いるパラメータの２種類に分かれる。図４７において、各パラメータには、前者の場合ｓ０が、後者の場合ｓ１が付加されている。
【０３４２】
更新ユニット３０は、比較器１００を用いて、予測スラックとしきい値Ｓｔｈの大小関係を調べる。そして、その結果に基づき、マルチプレクサ９１，９２，１０１−１０５を用いて、更新に用いるパラメータを選択する。選択されたパラメータを用いて、信頼性と予測スラックを計算する。具体的に述べると、信頼性は、到達条件フラグＲｆｌａｇが０のとき増加量Ｃｉｎｃ＿ｓ０（Ｃｉｎｃ＿ｓ１）だけ増加させ、到達条件フラグＲｆｌａｇが１の場合減少量Ｃｄｅｃ＿ｓ０（Ｃｄｅｃ＿ｓ１）だけ減少させる。そして、予測スラックは、信頼性がしきい値Ｃｔｈ＿ｓ０（Ｃｔｈ＿ｓ１）以上であれば増加量Ｖｉｎｃ＿ｓ０（Ｖｉｎｃ＿ｓ１）増加させ、信頼性が０であれば減少量Ｖｄｅｃ＿ｓ０（Ｖｄｅｃ＿ｓ１）だけ減少させる。どちらでもなければそのままの値を維持する。なお、ここで、（  ）内は上述の後者の場合である。
【０３４３】
図４７の構成について、図４６との相違点について以下詳細説明する。図４７において、比較器１００はプロセッサ１０から入力される予測スラックを所定のしきい値Ｓｔｈと比較し、予測スラック≧Ｓｔｈであるときデータ値１をマルチプレクサ１０１，１０２，１０３，１０４の各制御信号入力端子に出力する一方、そうでないとき、データ値０を同様に出力する。マルチプレクサ１０１は制御信号のデータ値０のとき増加量Ｃｉｎｃ＿ｓ０を選択してマルチプレクサ９１の第１の入力端子に出力する一方、制御信号のデータ値１のとき増加量Ｃｉｎｃ＿ｓ１を選択してマルチプレクサ９１の第１の入力端子に出力する。マルチプレクサ１０２は制御信号のデータ値０のとき減少量のマイナス値−Ｃｄｅｃ＿ｓ０を選択してマルチプレクサ９１の第２の入力端子に出力する一方、制御信号のデータ値１のとき減少量のマイナス値−Ｃｄｅｃ＿ｓ１を選択してマルチプレクサ９１の第２の入力端子に出力する。マルチプレクサ１０３は制御信号のデータ値０のときしきい値Ｃｔｈ＿ｓ０を選択して比較器９４の制御信号入力端子に出力する一方、制御信号のデータ値１のときしきい値Ｃｔｈ＿ｓ１を選択して比較器９４の制御信号入力端子に出力する。マルチプレクサ１０４は制御信号のデータ値０のとき増加量Ｖｉｎｃ＿ｓ０を選択してマルチプレクサ９２の第１の入力端子に出力する一方、制御信号のデータ値１のとき増加量Ｖｉｎｃ＿ｓ１を選択してマルチプレクサ９２の第１の入力端子に出力する。マルチプレクサ１０５は制御信号のデータ値０のとき減少量のマイナス値−Ｖｄｅｃ＿ｓ０を選択してマルチプレクサ９２の第２の入力端子に出力する一方、制御信号のデータ値１のとき減少量のマイナス値−Ｖｄｅｃ＿ｓ１を選択してマルチプレクサ９２の第２の入力端子に出力する。
【０３４４】
第４の実施形態において、調整に関係する更新パラメータとその内容を以下に再掲する。
Ｖｍａｘ：予測スラックの最大値、
Ｖｍｉｎ：予測スラックの最小値（＝０）、
Ｖｉｎｃ：予測スラックの１回あたりの増加量、
Ｖｄｅｃ：予測スラックの１回あたりの減少量、
Ｖｍａｘ：信頼性の最大値（＝Ｃｔｈ）、
Ｃｍｉｎ：信頼性の最小値（＝０）、
Ｃｔｈ：信頼性のしきい値、
Ｃｉｎｃ：信頼性の１回あたりの増加量、及び
Ｃｄｅｃ：信頼性の１回あたりの減少量。
【０３４５】
ただし、常に、最大値Ｖｍｉｎ＝０、最小値Ｃｍｉｎ＝０である。また、信頼性は、しきい値Ｃｔｈ以上になると０にリセットされるので、常に、最大値Ｃｍａｘ＝Ｃｔｈである。従って、変更することのできる更新パラメータは以下の６種類となる：Ｖｍａｘ，Ｖｉｎｃ，Ｖｄｅｃ，Ｃｔｈ，Ｃｉｎｃ，Ｃｄｅｃ。
【０３４６】
図４８のフローチャートには、信頼性と予測スラックを計算する手順を示しおり、図４８に示したように、コミットした命令のターゲット・スラック到達条件が成立していなければ（すなわち、到達条件フラグＲｆｌａｇが０であれば）、信頼性を増加量Ｃｉｎｃだけ増加させ、成立していれば（すなわち、到達条件フラグＲｆｌａｇが１であれば）、減少量Ｃｄｅｃだけ減少させる。信頼性がしきい値Ｃｔｈ以上になったら、予測スラックを増加量Ｖｉｎｃだけ増加させ、信頼性を０にリセットする。一方、信頼性が０になったら、予測スラックを減少量Ｖｄｅｃだけ減少させる。
【０３４７】
そして、更新パラメータが、信頼性や予測スラックの更新にどのように影響するかを定性的に説明する。図４９は、第４の実施形態に係る手法による効果を示す図であって、更新パラメータと予測スラックの変化との関係を示すグラフである。すなわち、図４９に説明の理解を容易にするため、予測スラックの変化の仕方と更新パラメータとの関係を示す。簡単のため、一定サイクル毎に同じ命令が実行されるプログラムを仮定する。このサイクルをαとする。図４９において、縦軸はスラックを示し、横軸は時刻を示す。折れ線グラフは、点線が実スラックの場合、実線が予測スラックの場合である。
【０３４８】
予測スラックの最大値Ｖｍａｘを増加させると、予測スラックの平均（平均予測スラック）が大きくなる。その結果、スラック命令数も増加する。しかし、予測ミス（ここでは予測スラックが実スラックを上回ること）の発生する確率が高くなり、性能が低くなる。
【０３４９】
増加量Ｖｉｎｃを増加させると、平均予測スラックが大きくなる。その結果、スラック命令数も増加する。しかし、予測ミスの発生率が高くなり、性能が低下する。また、予測スラックの増加量を細かく制御できなくなるため、収束性が悪くなる。ここでは予測スラックの取りうる値が実スラックと一致しない場合が増えることを指す。
【０３５０】
減少量Ｖｄｅｃを増加させると、予測ミスの発生率が低くなり、性能が向上する。しかし、平均予測スラックは小さくなる。その結果、スラック命令数も減少する。また、予測スラックの減少量を細かく制御できなくなるため、収束性が悪くなる。
【０３５１】
しきい値Ｃｔｈは、増加量Ｃｉｎｃ及び減少量Ｃｄｅｃと関連が強いため、これらと組み合わせて説明する。しきい値Ｃｔｈと増加量Ｃｉｎｃの比であるＣｔｈ／Ｃｉｎｃを増加させると、予測スラックを増加させる間隔（図４９における、Ｃｔｈ／Ｃｉｎｃ×α）が広くなる。つまり、予測スラックを増加させる頻度が低くなる。これにより、予測ミスの発生率が低くなり、性能が向上する。しかし、平均予測スラックは小さくなる。その結果、スラック命令数も減少する。
【０３５２】
しきい値Ｃｔｈと減少量Ｃｄｅｃの比であるＣｔｈ／Ｃｄｅｃを増加させると、予測スラックを減少させる間隔（図４９における、Ｃｔｈ／Ｃｄｅｃ×α）が広くなる。つまり、予測スラックを減少させる頻度が低くなる。これにより、平均予測スラックは大きくなる。その結果、スラック命令数も増加する。しかし、予測ミスの発生率が高くなり、性能が低下する。
【０３５３】
以上説明したように、本実施形態によれば、命令の実行に際して上記スラック表を参照して当該命令の予測スラックを取得するとともに、上記取得した予測スラックの分だけ実行レイテンシを増加させ、上記命令の実行時の振る舞いに基づき、当該命令の現状のローカル・スラックの適正値であるターゲット・スラックに上記予測スラックが到達したか否かを推定し、上記予測スラックが上記ターゲット・スラックに到達したとの推定がなされるまで、上記予測スラックを上記命令の実行毎に徐々に増加させる。従って、命令のローカル・スラックの予測値（予測スラック）を計算で直接的に求めるのではなく、命令の実行時の振る舞いを観測しながら、適正値に到達するまで予測スラックを徐々に増加させることで求めているので、予測スラックの直接演算に要する複雑な機構は不要であり、より簡易な構成でローカル・スラックの予測を行うことができる。
【０３５４】
また、ローカル・スラックの値に応じて、スラックの更新に用いるパラメータを変更するようにしたので、スラック命令数を維持したまま、性能低下を抑制できるようになる。それ故、従来技術に比較して簡単な構成で、ローカル・スラックの予測を行い、さらに高速でプログラム命令の実行を行うことができる。
【産業上の利用可能性】
【０３５５】
本発明に係るプロセッサ装置とその処理方法によれば、所定のしきい値以上の予測スラックを有するストア命令を、当該ストア命令に後続するロード命令とデータの依存関係がないと予測して判断し、当該ストア命令のメモリ・アドレスが判明していなくても上記後続するロード命令を投機的に実行する。従って、予測が正しければ、ストア命令のスラックの利用によって、当該ストア命令とはデータ依存関係がないロード命令の実行が遅延することはなく、プロセッサ装置の性能への悪影響を抑制することができる。また、スラック予測機構の出力結果を利用するために、ストア命令とロード命令間の依存関係を予測するためのハードウェアを新たに用意する必要がない。それ故、従来技術に比較して簡単な構成で、ローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができる。
【０３５６】
また、本発明に係るプロセッサ装置とその処理方法によれば、共有化情報に基づくスラック予測方法である第２の予測方法を用いて、ローカル・スラックを持つ命令に基づいて、ローカル・スラックを持たない命令間で依存元から依存先へと共有可能なスラックが存在するという共有化情報を伝搬させて行き、当該共有化情報に基づいて所定の発見的な手法を用いて各命令が利用するローカル・スラックの量を決定し、ローカル・スラックを持たない命令がローカル・スラックを利用することができるように制御する。従って、ローカル・スラックを持たない命令がローカル・スラックを利用することができるようになり、従来技術に比較して簡単な構成で、ローカル・スラックを有効にかつ十分に利用してローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができる。
【０３５７】
さらに、本発明に係るプロセッサ装置とその処理方法によれば、命令の実行に際して上記スラック表を参照して当該命令の予測スラックを取得するとともに、上記取得した予測スラックの分だけ実行レイテンシを増加させ、上記命令の実行時の振る舞いに基づき、当該命令の現状のローカル・スラックの適正値であるターゲット・スラックに上記予測スラックが到達したか否かを推定し、上記予測スラックが上記ターゲット・スラックに到達したとの推定がなされるまで、上記予測スラックを上記命令の実行毎に徐々に増加させる。従って、命令のローカル・スラックの予測値（予測スラック）を計算で直接的に求めるのではなく、命令の実行時の振る舞いを観測しながら、適正値に到達するまで予測スラックを徐々に増加させることで求めているので、予測スラックの直接演算に要する複雑な機構は不要であり、より簡易な構成でローカル・スラックの予測を行うことができる。
【０３５８】
また、ローカル・スラックの値に応じて、スラックの更新に用いるパラメータを変更するようにしたので、スラック命令数を維持したまま、性能低下を抑制できるようになる。それ故、従来技術に比較して簡単な構成で、ローカル・スラックの予測を行い、さらに高速でプログラム命令の実行を行うことができる。
【図面の簡単な説明】
【０３５９】
【図１】（ａ）は従来技術に係るスラックを説明するために用いる複数の命令を含むプログラムの一例を示す図であり、（ｂ）は上記プログラムの各命令をプロセッサ装置上で実行する過程を示すタイミングチャートである。
【図２】従来技術に係るローカル・スラック予測機構を備えたプロセッサ装置の構成を示すブロック図である。
【図３】（ａ）は本発明の第１の実施形態に係るローカル・スラックを発見的に予測する手法を用いたプロセッサ装置の基本動作であって、第１回目の実行動作を示すタイミングチャートであり、（ｂ）は上記プロセッサ装置の基本動作であって、第２回目の実行動作を示すタイミングチャートであり、（ｃ）は上記プロセッサ装置の基本動作であって、第３回目の実行動作を示すタイミングチャートである。
【図４】（ａ）は図３の基本動作の問題点を説明するためのサイクル対スラック特性を示すグラフであり、（ｂ）はその問題点の解決手法を説明するためのサイクル対スラック特性を示すグラフである。
【図５】（ａ）は図４の解決手法の問題点を説明するためのサイクル対スラック特性を示すグラフであり、（ｂ）はその問題点の解決手法を説明するためのサイクル対スラック特性を示すグラフである。
【図６】本発明の第１の実施形態に係るスラック表２０を備えたプロセッサ１０の構成を示すブロック図である。
【図７】図６の提案機構の実施例のシミュレーション結果であって、各プログラムにおける実スラックに対する実行命令数に占める割合を示すグラフである。
【図８】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝１における各モデルに対する実行命令数に占める割合（スラック予測精度）を示すグラフである。
【図９】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝５における各モデルに対する実行命令数に占める割合（スラック予測精度）を示すグラフである。
【図１０】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝１５における各モデルに対する実行命令数に占める割合（スラック予測精度）を示すグラフである。
【図１１】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝１において各モデルにおける実スラックと予測スラックの差に対する実行命令数に占める割合を示すグラフである。
【図１２】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝５において各モデルにおける実スラックと予測スラックの差に対する実行命令数に占める割合を示すグラフである。
【図１３】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝１５において各モデルにおける実スラックと予測スラックの差に対する実行命令数に占める割合を示すグラフである。
【図１４】図６の提案機構の実施例のシミュレーション結果であって、各モデルにおける正規化されたＩＰＣ（Instructions Per Clock cycle：１クロック当りに処理できる平均命令数）を示すグラフである。
【図１５】図６の提案機構の実施例のシミュレーション結果であって、各モデルにおけるスラック命令数の割合を示すグラフである。
【図１６】図６の提案機構の実施例のシミュレーション結果であって、各モデルにおける平均予測スラックを示すグラフである。
【図１７】図６の提案機構の別の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘの各値に対するスラック命令数とＩＰＣとの関係を示すグラフである。
【図１８】図６の提案機構の別の実施例のシミュレーション結果であって、ＩＰＣに対する予測スラックの総積算値を示すグラフである。
【図１９】本発明の第１の実施形態に係る更新ユニット３０の構成を示すブロック図である。
【図２０】従来技術に係る従来機構のシミュレーション結果であって、ラインサイズに対するスラック長のアクセス時間を示すグラフである。
【図２１】図１９の更新ユニット３０を備えた提案機構のシミュレーション結果であって、ラインサイズに対するスラック長のアクセス時間を示すグラフである。
【図２２】図１９の更新ユニット３０を備えた提案機構のシミュレーション結果であって、ラインサイズに対するメモリ定義表のアクセス時間を示すグラフである。
【図２３】本発明の第１の実施形態の第１の変形例に係る、スラック表２０を備えたプロセッサ１０Ａの構成を示すブロック図である。
【図２４】図２３のプロセッサ１０Ａの実施例のシミュレーション結果であって、各プログラムに対する正規化されたＩＰＣを示すグラフである。
【図２５】図２３のプロセッサ１０Ａの実施例のシミュレーション結果であって、各プログラムに対する正規化されたＥＤＰ（Energy Delay Product：消費エネルギーと、プロセッサ１０Ａの実行時間の積）を示すグラフである。
【図２６】図２３のプロセッサ１０Ａの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたＩＰＣを示すグラフである。
【図２７】図２３のプロセッサ１０Ａの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたＥＤＰ（Energy Delay Product：消費エネルギーと、プロセッサの実行時間の積）を示すグラフである。
【図２８】本発明の第１の実施形態の第２の変形例に係る、スラック表２０及び２個のインデクス生成回路２２Ａ，２２Ｂを備えたプロセッサ１０の構成を示すブロック図である。
【図２９】第１の実施形態に係るスラック予測機構において、制御フローを考慮せずにスラック予測を行うときの動作例を示す図である。
【図３０】図２８のスラック予測機構において、制御フローを考慮してスラック予測を行うときの第１の動作例を示す図である。
【図３１】図２８のスラック予測機構において、制御フローを考慮してスラック予測を行うときの第２の動作例を示す図である。
【図３２】（ａ）は、従来技術においてストア命令のスラックを利用したときにメモリの曖昧性が原因で発生する問題点を説明するための図であって、デコード前のプログラムを示す図であり、（ｂ）は、従来技術においてストア命令のスラックを利用したときにメモリの曖昧性が原因で発生する問題点を説明するための図であって、デコード後のプログラムを示す図である。
【図３３】（ａ）は、プロセッサの処理において、メモリの曖昧性がスラックの利用に与える影響を説明するために用いる図であって、スラックを利用しない場合のプログラムを実行する過程を示すタイミングチャートであり、（ｂ）は、プロセッサの処理において、メモリの曖昧性がスラックの利用に与える影響を説明するために用いる図であって、スラックを利用する場合のプログラムを実行する過程を示すタイミングチャートである。
【図３４】本発明の第２の実施形態に係る、メモリの曖昧性の投機的除去を示すタイミングチャートである。
【図３５】図３４のメモリの曖昧性の投機的除去機構を備えたプロセッサ１０Ｂの構成を示すブロック図である。
【図３６】図３５のロード及びストアキュー（ＬＳＱ）６２にエントリされるデータのフォーマットを示す図である。
【図３７】ロード命令に対する図３５のＬＳＱ６２の処理を示すフローチャートである。
【図３８】ストア命令に対する図３５のＬＳＱ６２の処理を示すフローチャートである。
【図３９】従来技術に係るスラックの説明に用いるプログラムを示すタイミングチャートである。
【図４０】（ａ）は従来技術の手法に係るスラックの利用を説明するプログラムを示すタイミングチャートであり、（ｂ）は本発明の第２の実施形態に係る、スラック命令数を増加させる手法に係るスラックの利用を説明するプログラムを示すタイミングチャートである。
【図４１】本発明の第３の実施形態に係る、スラック伝搬表８０などを備えたプロセッサ１０の構成を示すブロック図である。
【図４２】図４１の更新ユニット３０によって実行されるローカル・スラック予測処理を示すフローチャートである。
【図４３】図４２のサブルーチンであって、共有化情報の伝搬処理（Ｓ４１）を示すフローチャートである。
【図４４】図４１の更新ユニット３０によって実行される共有化スラックの予測処理を示すフローチャートである。
【図４５】本発明者の調査結果に係る、実スラックに対する実行命令数に占める割合を示すグラフである。
【図４６】第１の実施形態に係る更新ユニット３０を備えたプロセッサ１０の構成を示すブロック図である。
【図４７】本発明の第４の実施形態に係る更新ユニット３０Ａを備えたプロセッサ１０の構成を示すブロック図である。
【図４８】第１の実施形態に係るローカル・スラック予測処理を示すフローチャートである。
【図４９】第４の実施形態に係る手法による効果を示す図であって、更新パラメータと予測スラックの変化との関係を示すグラフである。
【符号の説明】
【０３６０】
１，１Ａ…実行コア、
２…レジスタ定義表、
３…メモリ定義表、
４…マルチプレクサ、
５…減算器、
６…スラック表、
７…フロントエンド、
８…バックエンド、
９…主記憶装置、
１０，１０Ａ，１０Ｂ…プロセッサ、
１１…フェッチ・ユニット、
１１Ａ…命令キャッシュ、
１２…デコード・ユニット、
１２ａ…命令デコーダ部、
１２ｂ…タグ割当部、
１３…命令ウィンドウ（Ｉ−ｗｉｎ）、
１４…レジスタ・ファイル（ＲＦ）、
１４Ａ…リザベーション・ステーション、
１５，１５ａ，１５ｂ，１５Ａ，１５Ｂ…実行ユニット（ＥＵ）、
１６…リオーダ・バッファ（ＲＯＢ）、
１７…ＦＩＦＯ、
２０，２０Ａ…スラック表、
２１Ａ，２１Ｂ…分岐履歴レジスタ、
２２Ａ，２２Ｂ…インデクス生成回路、
３０，３０Ａ…更新ユニット、
３１，３２、３５，３６…アンドゲート、
３３，３７…オアゲート、
３４，３８，３９…マルチプレクサ、
４０，５０…加算器、
４１，４２，５１，５２…アンドゲート、
４３，４４，４５，４６，５３，５４，５５，５６…インバータ、
４７，４８，４９，５７，５８，５９…マルチプレクサ、
６０…スラック予測機構、
６１…機能ユニット、
６２…ロード及びストアキュー（ＬＳＱ）、
６３…データキャッシュ、
７１…オペコード、
７２，７４，７５，７７…フラグ、
７３…メモリ・アドレス、
７６…ストアデータ、
８０…スラック伝搬表、
９１，９５，１０１，１０２，１０３，１０４，１０５，１１０…マルチプレクサ、
９２，９６…加算器、
９３，９４，１００、１１１，１１２…比較器、
１２０…排他的論理和ゲート。
【図１】
2007293815.tif 000010
【図２】
2007293815.tif 000011
【図３】
2007293815.tif 000012
【図４】
2007293815.tif 000013
【図５】
2007293815.tif 000014
【図６】
2007293815.tif 000015
【図７】
2007293815.tif 000016
【図８】
2007293815.tif 000017
【図９】
2007293815.tif 000018
【図１０】
2007293815.tif 000019
【図１１】
2007293815.tif 000020
【図１２】
2007293815.tif 000021
【図１３】
2007293815.tif 000022
【図１４】
2007293815.tif 000023
【図１５】
2007293815.tif 000024
【図１６】
2007293815.tif 000025
【図１７】
2007293815.tif 000026
【図１８】
2007293815.tif 000027
【図１９】
2007293815.tif 000028
【図２０】
2007293815.tif 000029
【図２１】
2007293815.tif 000030
【図２２】
2007293815.tif 000031
【図２３】
2007293815.tif 000032
【図２４】
2007293815.tif 000033
【図２５】
2007293815.tif 000034
【図２６】
2007293815.tif 000035
【図２７】
2007293815.tif 000036
【図２８】
2007293815.tif 000037
【図２９】
2007293815.tif 000038
【図３０】
2007293815.tif 000039
【図３１】
2007293815.tif 000040
【図３２】
2007293815.tif 000041
【図３３】
2007293815.tif 000042
【図３４】
2007293815.tif 000043
【図３５】
2007293815.tif 000044
【図３６】
2007293815.tif 000045
【図３７】
2007293815.tif 000046
【図３８】
2007293815.tif 000047
【図３９】
2007293815.tif 000048
【図４０】
2007293815.tif 000049
【図４１】
2007293815.tif 000050
【図４２】
2007293815.tif 000051
【図４３】
2007293815.tif 000052
【図４４】
2007293815.tif 000053
【図４５】
2007293815.tif 000054
【図４６】
2007293815.tif 000055
【図４７】
2007293815.tif 000056
【図４８】
2007293815.tif 000057
【図４９】
2007293815.tif 000058
【手続補正書】
【提出日】平成19年7月3日(2007.7.3)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
以上のように、従来手法では、定義表２，３と減算器５を用意する必要があり、ハードウェア・コストが増大する。また、プログラムの実行と並列に、定義表２，３の参照及び更新と時刻の引き算を行わなければならないため、高速な動作を必要とし、それが消費電力に大きな影響を及ぼす可能性がある。こうした問題が発生する原因は、データの定義及び参照時刻に着目してローカル・スラックを直接計算することにある。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１５
【補正方法】変更
【補正の内容】
【００１５】
【特許文献１】特開２０００−３５３０９９号公報。
【特許文献２】特開２００４−２６５３８１号公報。
【非特許文献１】D. Burger et al., "The Simplescalar Tool Set Version 2.0", Technical Report 1342, Department of Computer Sciences, University of Wisconsin-Madison, June 1997。
【非特許文献２】千代延昭宏ほか，「低消費電力プロセッサアーキテクチャ向けクリティカルパス予測器の提案」，情報処理学会研究報告，２００２−ＡＲＣ−１４９，社団法人情報処理学会発行，２００２年８月。
【非特許文献３】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。
【非特許文献６】福山智久ほか，「スラック予測を用いた省電力アーキテクチャ向け命令スケジューリング」，先進的計算基盤システムシンポジウム，ＡＣＳＩＳ２００５，  ２００５年５月。
【非特許文献７】J. L. Hennessy et al., "Computer Architecture: A Quantitative Approach", 2nd Edition, Morgan Kaufmann Publishing Incorporated, San Francisco, California, U.S.A., 1996。
【非特許文献８】小林良太郎ほか，「データフロー・グラフの最長パスに着目したクラスタ化スーパースカラ・プロセッサにおける命令発行機構」，２００１年並列処理シンポジウムＪＳＰＰ２００１，２００１年６月。
【非特許文献９】M. Levy, "Samsung Twists ARM Past 1GHz", Microprocessor Report 2002-10-16, October 2002。
【非特許文献１０】劉小路ほか，「クリティカリティ予測のためのスラック予測」，先進的計算基盤システムシンポジウムＳＡＣＳＩＳ２００４，２００４年５月。
【非特許文献１１】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。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０１０６
【補正方法】変更
【補正の内容】
【０１０６】
表２には、まず、各テーブルのエントリ数を示し、次に、１エントリあたりのメモリ・セル数を、タグ・フィールドとデータ・フィールドに分けて示す。エントリ数と、１エントリあたりのメモリ・セル数の積が、テーブルの総メモリ・セル数となる。また、表には、各テーブルのポート数も示す。ポート数は、後ほどアクセス時間と消費電力について評価するために用いる。表２では、スラック表２０、メモリ定義表３、レジスタ定義表２のエントリ数をそれぞれＥｓｌａｃｋ、Ｅｍｄｅｆ、Ｅｒｄｅｆと表し、連想度をそれぞれ、Ａｓｌａｃｋ、Ａｍｄｅｆ、Ａｒｄｅｆと表す。同じ条件で比較するため、スラック表のエントリ数と連想度は、提案機構と従来機構で同一としている。Ｎｆｅｔｃｈ、Ｎｉｓｓｕｅ、Ｎｄｃｐｏｒｔ、Ｎｃｏｍｍｉｔはそれぞれ、フェッチ幅、発行幅、データキャッシュのポート数、コミット幅を表す。Ｎｆｅｔｃｈ、Ｎｉｓｓｕｅ、Ｎｃｏｍｍｉｔは同一と仮定する。Ｅｒｏｂは、ＲＯＢのエントリ数を表す。前章の評価環境より、Ｎｆｅｔｃｈ＝８、Ｅｒｏｂ＝２５６とする。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１１９
【補正方法】変更
【補正の内容】
【０１１９】
上記の仮定によって、提案機構のスラック表２０は、アクセス時間が４．１％、消費エネルギーが２３％増加する。このことから、従来機構のスラック表２０の評価結果も、同程度の誤差が生じていると考えられる。また、提案機構のＦＩＦＯ１７はアクセス時間が４．２％減少し、消費エネルギーが１１６％増加する。そこで、比較を行う際には、この誤差の影響を考慮する。なお、ＦＩＦＯ１７のアクセス時間が減少する理由は、ＣＡＣＴＩが、テーブル構成によって、データ・アレイの分割方法を変えることにある。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１４８
【補正方法】変更
【補正の内容】
【０１４８】
図２０は従来技術に係る従来機構のシミュレーション結果であって、ラインサイズに対するスラック表のアクセス時間を示すグラフである。図２１は図１９の更新ユニット３０を備えた提案機構のシミュレーション結果であって、ラインサイズに対するスラック表のアクセス時間を示すグラフである。すなわち、図２０及び図２１にそれぞれ、従来機構と提案機構において、スラック表２０のラインサイズを、２ｎ倍（１≦ｎ≦７）に増加させて、アクセス時間を評価した結果を示す。評価にはＣＡＣＴＩを用いる。前節で説明したように、従来機構のスラック表２０は、データ・フィールドが４ビットであるため、ラインサイズを増加させない場合、ＣＡＣＴＩで評価できない。しかし、上記のようにラインサイズを増加させれば、ラインサイズはバイト単位で増加して行くため、ＣＡＣＴＩで評価できるようになる。そこで、本節では、前節とは異なり、データ・フィールドのビット数を変更せずに評価を行う。これにより、前節よりも正確に従来機構と提案機構の比較ができるようになる。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１６２
【補正方法】変更
【補正の内容】
【０１６２】
整数演算用の機能ユニット（ｉＡＬＵ）として、高速なものと低速なものを２種類用意する。図２３において、１５ａは高速で動作する機能ユニットであり、１５ｂは低速で動作する機能ユニットである。非特許文献９によると、０．１３μｍプロセスにおけるＡＲＭコアは、動作周波数が１．２ＧＨｚ、６００ＭＨｚの場合、電源電圧がそれぞれ、１．１Ｖ、０．７Ｖであることが示されている。これを基に、プロセッサの動作周波数を１．２ＧＨｚ（サイクル時間０．８３ｎｓｅｃ）とし、高速なｉＡＬＵと低速なｉＡＬＵは、実行レイテンシがそれぞれ１サイクル、２サイクル、電源電圧がそれぞれ１．１Ｖ、０．７Ｖとする。評価では、高速なｉＡＬＵをｎ個持つモデルを、（ｎｆ／（６−ｎ）ｓ）モデルと呼ぶこととする。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０１７９
【補正方法】変更
【補正の内容】
【０１７９】
図２６は図２３のプロセッサ１０Ａの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたＩＰＣを示すグラフである。図２７は図２３のプロセッサ１０Ａの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたＥＤＰ（Energy Delay Product：消費エネルギーと、プロセッサの実行時間の積）を示すグラフである。すなわち、図２６及び図２７に、各モデルでの各ベンチマークでの正規化ＩＰＣ及び正規化ＥＤＰの測定結果を示す。図２６の縦軸は、（６ｆ／０ｓ）モデル（全ｉＡＬＵが高速なモデル）でのＩＰＣを基準（１００）としたＩＰＣの比率を、図２７の縦軸は、同じく（６ｆ／０ｓ）モデル（全ｉＡＬＵが高速なモデル）でのＥＤＰを基準（１００）としたＥＤＰの比率をそれぞれ示している。また、図２６及び図２７における各ベンチマーク・プログラムにおける６本組の縦棒は、図中左側から（５ｆ／１ｓ），（４ｆ／２ｓ），（３ｆ／３ｓ），（２ｆ／４ｓ），（１ｆ／５ｓ），（０ｆ／６ｓ）の各モデルでの測定結果をそれぞれ表すものとなっている。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】０１８０
【補正方法】変更
【補正の内容】
【０１８０】
図２６及び図２７に示されるように、いずれのベンチマーク・プログラムでも、同様の傾向が見られる。すなわち、高速なｉＡＬＵの数を減少させると、ほとんどの場合、ＥＤＰは単調に減少してゆくようになる。ただし、ローカル・スラックの予測結果に基づいて命令の振り分けを行ったことで、高速なｉＡＬＵの数の減少に伴うＩＰＣの低下は好適に抑制されている。例えば（０ｆ／６ｓ）モデル、すなわち全ｉＡＬＵが低速なモデルでは、ベンチマーク平均のＩＰＣの低下が２０．２％、ＥＤＰの削減率は４１．６％となっている。これに対して（１ｆ／６ｓ）モデルでは、ＥＤＰの削減率が３４．５％もあるにも拘わらず、ＩＰＣの低下は１０．５％に留まっている。さらに（３ｆ／３ｓ）モデルでは、ＩＰＣの低下をわずか３．８％としながらも、ＥＤＰの削減率は２０．３％にもなる。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】０１９０
【補正方法】変更
【補正の内容】
【０１９０】
このように、分岐履歴の取り方が２通り存在する理由は、スラック表の参照をフェッチ時に行い、スラック表の更新をコミット時に行うという、両分岐履歴レジスタ２１Ａ、２１Ｂの分岐履歴を利用する時期の違いにある。フェッチ時には、分岐命令は未だ実行されておらず、プロセッサは、分岐条件が成立するかしないかを予測して、命令をメモリから読み出している。そのため、フェッチ時に使用される分岐履歴レジスタ２１Ａには、分岐予測に基づいて分岐履歴を記録して行くしかない。一方、コミット時には、分岐命令は既に実行されており、実行結果に基づいて分岐の履歴を記録することができる。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】０２０６
【補正方法】変更
【補正の内容】
【０２０６】
１０．第１の実施形態のまとめ．
以下、本実施形態において、課題を解決するための手段について要約すると、以下のようになる。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】０２２０
【補正方法】変更
【補正の内容】
【０２２０】
また、予測スラックがターゲット・スラックに到達したとの推定の成立条件が成立となったときにそのカウンタ値が増加／減少され、推定の成立条件が不成立となったときにそのカウンタ値が減少／増加される信頼性カウンタを設けるとともに、前記信頼性カウンタのカウンタ値が増加判定値となったことを条件に前記予測スラックを増加させ、同信頼性カウンタのカウンタ値が減少判定値となったことを条件に前記予測スラックを減少させるように予測スラック更新手段をすれば、ターゲット・スラックが頻繁に増減を繰り返したときの予測ミスペナルティの発生頻度の増加を好適に抑制することができる。なお、そうした状態での予測ミスペナルティの発生頻度の増大をより効果的に抑制するには、信頼性カウンタでの推定の成立条件の成立時におけるカウンタ値の増加／減少量を、同推定の成立条件の不成立時における同カウンタ値の減少／増加量よりも大きく設定することが望ましい。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】０２３０
【補正方法】変更
【補正の内容】
【０２３０】
図３２（ａ）において、ｒ１，ｒ２，…はそれぞれ、１番レジスタ、２番レジスタ、…を示す。ストア命令ｉ１は、レジスタｒ４の値を、レジスタｒ１の値とｒ３を足して得られるメモリ・アドレスにストアする。ロード命令ｉ５は、レジスタｒ２の値と８を足して得られるメモリ・アドレスからロードした値を、レジスタｒ７に書き込む。ロード命令ｉ６は、レジスタｒ３の値と８を足して得られるメモリ・アドレスからロードした値を、レジスタｒ８に書き込む。命令ｉ７は、レジスタｒ７の値と５を足して得られる値を、レジスタｒ９に書き込む。命令ｉ８は、レジスタｒ９の値と８を足して得られる値を、レジスタｒ１０に書き込む。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】０２７８
【補正方法】変更
【補正の内容】
【０２７８】
ここで、命令ｉ３と間接的に依存関係のある、命令ｉ１０のローカル・スラックに着目する。上記と同様にして、命令ｉ１０のローカル・スラックは１であることが分かる。命令ｉ３がローカル・スラックを利用したとしても、それに直接依存する命令に影響を与えることはないので、命令ｉ１０はローカル・スラックを利用することができる。グローバル・スラックとは異なり、ある命令がローカル・スラックを利用しても、それとは関係なく、他の命令はローカル・スラックを利用することができる。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】０２８５
【補正方法】変更
【補正の内容】
【０２８５】
例えば、図３９において、命令ｉ３はローカル・スラックを持つ命令である。そして、命令ｉ０、ｉ２は、命令ｉ３に直接的、間接的にオペランドを供給する命令である。これらの命令の実行レイテンシを増加させると、命令ｉ３の利用可能なローカル・スラックは減少する。従って、命令ｉ３の持つローカル・スラックは、命令ｉ０、ｉ２、ｉ３の間で共有化できるということになる。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】０２８６
【補正方法】変更
【補正の内容】
【０２８６】
図４０（ａ）は従来技術の手法に係るスラックの利用を説明するプログラムを示すタイミングチャートであり、図４０（ｂ）は本発明の第３の実施形態に係る、スラック命令数を増加させる手法に係るスラックの利用を説明するプログラムを示すタイミングチャートである。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】０３１０
【補正方法】変更
【補正の内容】
【０３１０】
図４２において、まず、ステップＳ３１においてコミットした命令を取得し、ステップＳ３２において伝搬フラグＰｆｌａｇ＝０であるか否かが判断され、ＹＥＳのときはステップＳ３３に進む一方、ＮＯのときはステップＳ４１に進む。ステップＳ３３において到達条件フラグＲｆｌａｇ＝０であるか否かが判断され、ＹＥＳのときはステップＳ３４に進む一方、ＮＯのときはステップＳ３７に進む。ステップＳ３４において信頼性の値に増加量Ｃｉｎｃ＿lを加算し、加算結果を信頼性の値として挿入し、ステップＳ３５において信頼性≧Ｃｔｈ＿lであるか否かが判断され、ＹＥＳのときはステップＳ３６に進む一方、ＮＯのときはステップＳ４０に進む。ステップＳ３６では、信頼性の値を０にリセットし、予測スラックの値に増加量Ｖｉｎｃ＿lを加算し、加算結果を予測スラックの値として挿入した後、ステップＳ４０に進む。一方、ステップＳ３７において信頼性の値から減少量Ｃｄｅｃ＿lを減算し、減算結果を信頼性の値として挿入した後、ステップＳ３８において信頼性＝０であるか否かが判断され、ＹＥＳのときはステップＳ３９に進む一方、ＮＯのときはステップＳ４０に進む。ステップＳ３９では、信頼性の値を０にリセットし、予測スラックの値から減少量Ｖｄｅｃ＿lを減算し、減算結果を予測スラックの値として挿入した後、ステップＳ４０に進む。ステップＳ４０において上記の演算結果に基づいてスラック表を更新し、ステップＳ４１において図４３の共有化情報の伝搬処理を実行した後、当該ローカル・スラック予測処理を終了する。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】０３１６
【補正方法】変更
【補正の内容】
【０３１６】
ステップＳ６１において、まず、共有化情報の伝搬処理により、更新ユニット３０へ送られてきた命令を取得し、ステップＳ６２においてフラグＳｆｌａｇ＝１であるか否かが判断され、ＹＥＳのときはステップＳ６３に進む一方、ＮＯのときはステップＳ６６に進む。ステップＳ６３において信頼性の値に増加量Ｃｉｎｃ＿ｓを加算し、加算結果を信頼性の値に挿入し、ステップＳ６４において信頼性≧Ｃｔｈ＿ｓ（しきい値）であるか否かが判断され、ＹＥＳのときはステップＳ６５に進む一方、ＮＯのときはステップＳ６９に進む。ステップＳ６５において信頼性の値を０にリセットし、予測スラックの値に増加量Ｖｉｎｃ＿ｓを加算し、加算結果を予測スラックの値として挿入した後、ステップＳ６９に進む。一方、ステップＳ６６において信頼性の値から減少量Ｃｄｅｃ＿ｓを減算し、減算結果を信頼性の値として挿入し、ステップＳ６７において信頼性＝０であるか否かが判断され、ＹＥＳのときはステップＳ６８に進む一方、ＮＯのときはステップＳ６９に進む。ステップＳ６８において信頼性の値を０にリセットし、予測スラックの値から減少量Ｖｄｅｃ＿ｓを減算し、減算結果を予測スラックの値として挿入した後、ステップＳ６９に進む。ステップＳ６９では、信頼性≧１又は予測スラック≧１であるか否かが判断され、ＹＥＳのときはステップＳ７０に進む一方、ＮＯのときはステップＳ７１に進む。ステップＳ７０において伝搬フラグＰｆｌａｇを１にセットし、ステップＳ７２に進む。一方、ステップＳ７１では、伝搬フラグＰｆｌａｇを０にリセットし、ステップＳ７２に進む。ステップＳ７２では、上記の演算結果に基づいてスラック表２０Ａを更新し、当該共有スラックの予測処理を終了する。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】０３２８
【補正方法】変更
【補正の内容】
【０３２８】
４．１．１．測定環境．
スラックの分布を調査するために用いた環境について述べる。シミュレータには、公知のＳｉｍｐｌｅＳａｌｒ  Ｔｏｏｌのスーパースカラ・プロセッサ用シミュレータを用いた。命令セットには公知のＭＩＰＳＲ１０を拡張したＳｉｍｐｌｅＳａｌａｒ／ＰＩＳＡを用いた。ベンチマーク・プログラムは、公知のＳＰＥＣｉｎｔ２０００のｂｚｉｐ２、ｇｃｃ、ｇｚｉｐ、ｍｃｆ、ｐａｒｓｅｒ、ｐｅｒｌｂｍｋ、ｖｏｒｔｅｘ、ｖｐｒの８本を使用した。プログラムｇｃｃでは１Ｇ命令、その他のプログラムでは２Ｇ命令をスキップした後、１０Ｍ命令を実行した。表７に測定条件を示す。
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】０３３０
【補正方法】変更
【補正の内容】
【０３３０】
４．１．２．調査結果．
図４５は、本発明者の調査結果に係る、実スラックに対する実行命令数に占める割合を示すグラフである。図４５では調査結果をベンチマーク平均で示す。図４５の縦軸は全実行命令に占める割合であり、その横軸はスラックである。図４５より、スラックが０である命令の割合が最も多く、スラックが大きくなるに連れて命令の割合は急速に低下して行くことが分かる。
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】０３３５
【補正方法】変更
【補正の内容】
【０３３５】
比較器９３は、入力されるデータ値を０と比較し、０以下のときデータ値１をマルチプレクサ９２の第２の制御信号入力端子に出力する一方、１以上のときデータ値０をマルチプレクサ９２の第２の制御信号入力端子に出力する。また、比較器９４は、入力されるデータ値をしきい値Ｃｔｈと比較し、入力データ値≧Ｃｔｈのときデータ値１をマルチプレクサ９２の第１の制御信号入力端子に出力する一方、入力データ値＜Ｃｔｈのときデータ値０をマルチプレクサ９２の第１の制御信号入力端子に出力する。ここで、マルチプレクサ９２への各制御信号入力端子への制御信号をＣＳ９１（Ａ，Ｂ）で表し、Ａは第１の制御信号入力端子への入力値であり、Ｂは第２の制御信号入力端子への入力値である。マルチプレクサ１１０への各制御信号入力端子への制御信号も同様にＣＳ１１０（Ａ，Ｂ）で表す。マルチプレクサ９２は制御信号ＣＳ９２（０，０）のときデータ値０を選択して加算器５０の第１の入力端子に出力し、制御信号ＣＳ９２（０，１）のとき減少量Ｖｄｅｃにマイナスを付加してなるデータ値−Ｖｄｅｃを選択して加算器５０の第１の入力端子に出力し、制御信号ＣＳ９２（１，＊）（ここで、＊は不定値をいう。以下、同様である。）のとき増加量Ｖｉｎｃを選択して加算器５０の第１の入力端子に出力する。加算器５０は入力される２つのデータ値を加算し、加算結果のデータ値を比較器１１１，１１２及びマルチプレクサ１１０の第３の入力端子に出力する。
【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】０３４４
【補正方法】変更
【補正の内容】
【０３４４】
第４の実施形態において、調整に関係する更新パラメータとその内容を以下に再掲する。
Ｖｍａｘ：予測スラックの最大値、
Ｖｍｉｎ：予測スラックの最小値（＝０）、
Ｖｉｎｃ：予測スラックの１回あたりの増加量、
Ｖｄｅｃ：予測スラックの１回あたりの減少量、
Ｃｍａｘ：信頼性の最大値（＝Ｃｔｈ）、
Ｃｍｉｎ：信頼性の最小値（＝０）、
Ｃｔｈ：信頼性のしきい値、
Ｃｉｎｃ：信頼性の１回あたりの増加量、及び
Ｃｄｅｃ：信頼性の１回あたりの減少量。
【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】０３５６
【補正方法】変更
【補正の内容】
【０３５６】
また、本発明に係るプロセッサ装置とその処理方法によれば、共有化情報に基づくスラック予測方法である第２の予測方法を用いて、ローカル・スラックを持つ命令に基づいて、ローカル・スラックを持たない命令間で依存先から依存元へと共有可能なスラックが存在するという共有化情報を伝搬させて行き、当該共有化情報に基づいて所定の発見的な手法を用いて各命令が利用するローカル・スラックの量を決定し、ローカル・スラックを持たない命令がローカル・スラックを利用することができるように制御する。従って、ローカル・スラックを持たない命令がローカル・スラックを利用することができるようになり、従来技術に比較して簡単な構成で、ローカル・スラックを有効にかつ十分に利用してローカル・スラックの予測を行い、高速でプログラム命令の実行を行うことができる。
【手続補正２３】
【補正対象書類名】明細書
【補正対象項目名】０３５９
【補正方法】変更
【補正の内容】
【０３５９】
【図１】（ａ）は従来技術に係るスラックを説明するために用いる複数の命令を含むプログラムの一例を示す図であり、（ｂ）は上記プログラムの各命令をプロセッサ装置上で実行する過程を示すタイミングチャートである。
【図２】従来技術に係るローカル・スラック予測機構を備えたプロセッサ装置の構成を示すブロック図である。
【図３】（ａ）は本発明の第１の実施形態に係るローカル・スラックを発見的に予測する手法を用いたプロセッサ装置の基本動作であって、第１回目の実行動作を示すタイミングチャートであり、（ｂ）は上記プロセッサ装置の基本動作であって、第２回目の実行動作を示すタイミングチャートであり、（ｃ）は上記プロセッサ装置の基本動作であって、第３回目の実行動作を示すタイミングチャートである。
【図４】（ａ）は図３の基本動作の問題点を説明するためのサイクル対スラック特性を示すグラフであり、（ｂ）はその問題点の解決手法を説明するためのサイクル対スラック特性を示すグラフである。
【図５】（ａ）は図４の解決手法の問題点を説明するためのサイクル対スラック特性を示すグラフであり、（ｂ）はその問題点の解決手法を説明するためのサイクル対スラック特性を示すグラフである。
【図６】本発明の第１の実施形態に係るスラック表２０を備えたプロセッサ１０の構成を示すブロック図である。
【図７】図６の提案機構の実施例のシミュレーション結果であって、各プログラムにおける実スラックに対する実行命令数に占める割合を示すグラフである。
【図８】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝１における各モデルに対する実行命令数に占める割合（スラック予測精度）を示すグラフである。
【図９】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝５における各モデルに対する実行命令数に占める割合（スラック予測精度）を示すグラフである。
【図１０】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝１５における各モデルに対する実行命令数に占める割合（スラック予測精度）を示すグラフである。
【図１１】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝１において各モデルにおける実スラックと予測スラックの差に対する実行命令数に占める割合を示すグラフである。
【図１２】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝５において各モデルにおける実スラックと予測スラックの差に対する実行命令数に占める割合を示すグラフである。
【図１３】図６の提案機構の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘ＝１５において各モデルにおける実スラックと予測スラックの差に対する実行命令数に占める割合を示すグラフである。
【図１４】図６の提案機構の実施例のシミュレーション結果であって、各モデルにおける正規化されたＩＰＣ（Instructions Per Clock cycle：１クロック当りに処理できる平均命令数）を示すグラフである。
【図１５】図６の提案機構の実施例のシミュレーション結果であって、各モデルにおけるスラック命令数の割合を示すグラフである。
【図１６】図６の提案機構の実施例のシミュレーション結果であって、各モデルにおける平均予測スラックを示すグラフである。
【図１７】図６の提案機構の別の実施例のシミュレーション結果であって、予測スラックの最大値Ｖｍａｘの各値に対するスラック命令数とＩＰＣとの関係を示すグラフである。
【図１８】図６の提案機構の別の実施例のシミュレーション結果であって、ＩＰＣに対する予測スラックの総積算値を示すグラフである。
【図１９】本発明の第１の実施形態に係る更新ユニット３０の構成を示すブロック図である。
【図２０】従来技術に係る従来機構のシミュレーション結果であって、ラインサイズに対するスラック表のアクセス時間を示すグラフである。
【図２１】図１９の更新ユニット３０を備えた提案機構のシミュレーション結果であって、ラインサイズに対するスラック表のアクセス時間を示すグラフである。
【図２２】図１９の更新ユニット３０を備えた提案機構のシミュレーション結果であって、ラインサイズに対するメモリ定義表のアクセス時間を示すグラフである。
【図２３】本発明の第１の実施形態の第１の変形例に係る、スラック表２０を備えたプロセッサ１０Ａの構成を示すブロック図である。
【図２４】図２３のプロセッサ１０Ａの実施例のシミュレーション結果であって、各プログラムに対する正規化されたＩＰＣを示すグラフである。
【図２５】図２３のプロセッサ１０Ａの実施例のシミュレーション結果であって、各プログラムに対する正規化されたＥＤＰ（Energy Delay Product：消費エネルギーと、プロセッサ１０Ａの実行時間の積）を示すグラフである。
【図２６】図２３のプロセッサ１０Ａの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたＩＰＣを示すグラフである。
【図２７】図２３のプロセッサ１０Ａの別の実施例のシミュレーション結果であって、各プログラムに対する正規化されたＥＤＰ（Energy Delay Product：消費エネルギーと、プロセッサの実行時間の積）を示すグラフである。
【図２８】本発明の第１の実施形態の第２の変形例に係る、スラック表２０及び２個のインデクス生成回路２２Ａ，２２Ｂを備えたプロセッサ１０の構成を示すブロック図である。
【図２９】第１の実施形態に係るスラック予測機構において、制御フローを考慮せずにスラック予測を行うときの動作例を示す図である。
【図３０】図２８のスラック予測機構において、制御フローを考慮してスラック予測を行うときの第１の動作例を示す図である。
【図３１】図２８のスラック予測機構において、制御フローを考慮してスラック予測を行うときの第２の動作例を示す図である。
【図３２】（ａ）は、従来技術においてストア命令のスラックを利用したときにメモリの曖昧性が原因で発生する問題点を説明するための図であって、デコード前のプログラムを示す図であり、（ｂ）は、従来技術においてストア命令のスラックを利用したときにメモリの曖昧性が原因で発生する問題点を説明するための図であって、デコード後のプログラムを示す図である。
【図３３】（ａ）は、プロセッサの処理において、メモリの曖昧性がスラックの利用に与える影響を説明するために用いる図であって、スラックを利用しない場合のプログラムを実行する過程を示すタイミングチャートであり、（ｂ）は、プロセッサの処理において、メモリの曖昧性がスラックの利用に与える影響を説明するために用いる図であって、スラックを利用する場合のプログラムを実行する過程を示すタイミングチャートである。
【図３４】本発明の第２の実施形態に係る、メモリの曖昧性の投機的除去を示すタイミングチャートである。
【図３５】図３４のメモリの曖昧性の投機的除去機構を備えたプロセッサ１０Ｂの構成を示すブロック図である。
【図３６】図３５のロード及びストアキュー（ＬＳＱ）６２にエントリされるデータのフォーマットを示す図である。
【図３７】ロード命令に対する図３５のＬＳＱ６２の処理を示すフローチャートである。
【図３８】ストア命令に対する図３５のＬＳＱ６２の処理を示すフローチャートである。
【図３９】従来技術に係るスラックの説明に用いるプログラムを示すタイミングチャートである。
【図４０】（ａ）は従来技術の手法に係るスラックの利用を説明するプログラムを示すタイミングチャートであり、（ｂ）は本発明の第３の実施形態に係る、スラック命令数を増加させる手法に係るスラックの利用を説明するプログラムを示すタイミングチャートである。
【図４１】本発明の第３の実施形態に係る、スラック伝搬表８０などを備えたプロセッサ１０の構成を示すブロック図である。
【図４２】図４１の更新ユニット３０によって実行されるローカル・スラック予測処理を示すフローチャートである。
【図４３】図４２のサブルーチンであって、共有化情報の伝搬処理（Ｓ４１）を示すフローチャートである。
【図４４】図４１の更新ユニット３０によって実行される共有化スラックの予測処理を示すフローチャートである。
【図４５】本発明者の調査結果に係る、実スラックに対する実行命令数に占める割合を示すグラフである。
【図４６】第１の実施形態に係る更新ユニット３０を備えたプロセッサ１０の構成を示すブロック図である。
【図４７】本発明の第４の実施形態に係る更新ユニット３０Ａを備えたプロセッサ１０の構成を示すブロック図である。
【図４８】第１の実施形態に係るローカル・スラック予測処理を示すフローチャートである。
【図４９】第４の実施形態に係る手法による効果を示す図であって、更新パラメータと予測スラックの変化との関係を示すグラフである。