JP2014109953A - 演算処理装置、演算処理方法 - Google Patents

演算処理装置、演算処理方法 Download PDF

Info

Publication number
JP2014109953A
JP2014109953A JP2012264654A JP2012264654A JP2014109953A JP 2014109953 A JP2014109953 A JP 2014109953A JP 2012264654 A JP2012264654 A JP 2012264654A JP 2012264654 A JP2012264654 A JP 2012264654A JP 2014109953 A JP2014109953 A JP 2014109953A
Authority
JP
Japan
Prior art keywords
instruction
address
branch
upper address
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2012264654A
Other languages
English (en)
Other versions
JP6179093B2 (ja
Inventor
Takashi Suzuki
崇志 鈴木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012264654A priority Critical patent/JP6179093B2/ja
Priority to US14/060,050 priority patent/US20140156973A1/en
Priority to CN201310532943.4A priority patent/CN103853528A/zh
Publication of JP2014109953A publication Critical patent/JP2014109953A/ja
Application granted granted Critical
Publication of JP6179093B2 publication Critical patent/JP6179093B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

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

Abstract

【課題】64ビットアドレス中の上位アドレスに対して、上位アドレスより少数のビットを用いて上位アドレスを表現し、情報処理を実現する。
【解決手段】本演算処理装置は、取得部と、対応関係記憶部と、符号化部と、復号化部と、分岐予測部とを備える。取得部は、命令を取得する取得段階と命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の取得段階で命令の記憶元である命令アドレスから命令を取得する。対応関係記憶部は、命令処理がなされた命令の命令アドレスの上位ビット部分と命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を登録する。符号化部は、命令アドレスに含まれる上位ビット部分を対応関係に基づいて上位アドレス情報に符号化する。復号化部は、対応関係と上位アドレス情報から上位ビット部分を復元する。
【選択図】図6

Description

本発明は、演算処理装置および演算処理方法に関する。
情報処理装置の分岐予測機構は、過去に実行された命令のメモリ上での記憶アドレスを基に分岐命令の実行履歴を管理する。そして、分岐予測機構は、分岐命令の実行履歴を管理することによって、次に分岐命令が実行される場合の分岐先を予測していた。以下、命令のメモリ上での記憶アドレスを命令アドレスという。
分岐先の予測において、分岐予測機構は、過去にメモリ上の記憶元から命令を取得した分岐命令の命令アドレスの一部のビット部分からセットアソアシアティブ方式の記憶装置のセットを決定する。以下、”メモリから命令を取得すること”を”命令フェッチ”という。また、分岐命令の命令アドレスを分岐元アドレスという。そして、分岐予測機構は、分岐元アドレスのさらに他のビット部分をタグにして、上記一部のビット部分から決定されたセット内の1つのウェイに分岐先アドレスを記憶しておく。
そして、分岐予測機構は、命令のフェッチ段階で命令アドレスを利用して、上記記憶装置を検索する。そして、過去に実行済みの分岐命令の分岐先アドレスが記憶装置に記憶されている場合には、分岐予測機構は、該当するセット内のタグの内容が一致するウェイから分岐先アドレスを入手できる。すなわち、分岐予測機構は、命令のフェッチと並行して、フェッチされる命令が分岐命令であるか否か、つまり、分岐元の命令アドレスの部分をタグにして分岐先アドレスが記憶されているか否かを判定することができた。
すなわち、以上の技術では、情報処理装置は、現在のフェッチ中の命令のアドレスを取得することにより、命令のフェッチと並行して、フェッチされる命令が分岐命令であるか否かを判定する。そして、情報処理装置は、命令が分岐命令であった場合に予測される分岐先アドレスを入手できる。したがって、情報処理装置がパイプライン処理を行っている場合であっても、情報処理装置は、現在の命令フェッチと並行して、事前に予測される分岐先から次のステージでの命令フェッチを準備することができる。
そして、情報処理装置は、現在フェッチ中の命令から得られた分岐先が予測された分岐先であった場合には、パイプライン処理を止めることなく各ステージを並列動作できる。一方、現在フェッチ中の命令から得られた分岐先が予測された分岐先でなかった場合には、情報処理装置は、正しい分岐先から命令フェッチを再開することになる。また、現在フェッチ中の分岐命令の命令アドレスに対応して上記記憶手段に分岐先が記憶されていなかった場合、つまり、分岐予測がヒットしなかったが分岐命令が実行された場合も、情報処理装置は、分岐予測を利用できない。この場合、情報処理装置は、フェッチ後の分岐命令をデコードして得られた分岐先アドレスから命令フェッチを再開することになる。
ところで、従来、情報処理装置において、命令が格納される空間は、32ビットアドレス空間であった。しかし、処理されるデータ量の増加に対応して、仮想アドレス空間を64ビットに拡張したものも存在する。そのような情報処理装置では、データ空間のみならず命令空間も64ビット化された。
しかし、実際のプログラムのサイズは32ビットのアドレスで管理可能な限界の4GBよりもかなり小さい。プログラムのサイズは、比較的大きなものであっても、例えば、数百MB程度である。したがって、64ビット分のアドレスを投機的な実行処理部である分
岐予測装置に処理させるのは、ハードウェア資源の無駄といえる。
例えば、命令セットアーキテクチャで定義されたやむを得ない部分だけを64ビット化することが効率的である。そこで、情報処理装置は、分岐予測により投機的に命令フェッチを制御する制御部などは極力下位32ビットのアドレスだけを用いて、従来と同様の命令フェッチ等の制御を行ってきた。
具体的な方法では、情報処理装置は、予め上位32ビットのアドレスを固定しておき、その固定された上位32ビットと下位32ビットの4Gバイト空間とを用いて命令フェッチを行う。そして、例えば、分岐命令の分岐先アドレスが4Gバイト空間を越えれば、情報処理装置は、上位32ビットを再定義する、という方法が考えられる。
つまり、情報処理装置は、プログラムカウンタの上位32ビットを通常固定しておく。そして、上位32ビットを変更するような命令、例えば、分岐命令、例外等が発生したとき、情報処理装置は、上位32ビットを改めて求める。なお、割り込みの発生でプログラムカウンタの上位32ビットを変える事象が発生したときも、情報処理装置は、同様の処理を行う。この場合、その上位32ビットを変更しようとする命令、あるいは事象等の完了をもって、情報処理装置は、命令フェッチと命令実行とを含むパイプラインを一旦完全にクリアすることになる。
そのため、プログラムカウンタの上位32ビットを新しい値に書き換えた後に、書き換えられた新しいアドレスでもって、情報処理装置の処理は、命令フェッチより再開する。したがって、上位32ビットが変更される命令、事象があるときには、情報処理装置は、投機実行の恩恵を受けることができない。投機実行の恩恵を受けることができなくても、プログラムサイズが小さい以上問題はないはずであった。なぜなら、上位32ビットが変更される命令、事象の発生頻度が情報処理装置の性能に影響を与える程度まで高くないと予測できるからである。
ところが、実際のOSとしては、割り付けるべきプログラムサイズが小さい場合でも、64ビットの命令アドレスの上位32ビットを利用して制御するものも提供されている。割り付けるプログラムサイズが小さい場合でも、上位32ビットを利用するOSを搭載した情報処理装置では、64ビットの仮想メモリ空間に、プログラムが散在することもありえないことではない。そうすると、個々のプログラムが小さい場合でも、分岐命令によって32ビットの4Gバイトアドレスを越える分岐が上記予想よりも多く発生することもありえる。
但し、64ビットアドレス空間は、データ空間の64ビット拡張の都合に合わせて行われたものであるため、アドレス空間内で実際に命令列が配置されるアドレスには偏りがある。そこで、これらの偏りを利用して、上位32ビットを擬似的に少数のビットで表現することが考えられる。つまり、頻出の上位アドレスのパターンを見込んでおき、固定の少数ビットを用いたコードで頻出する上位アドレスを表現すればよい。ここで、少数ビットとは、上位アドレスのビット数より少ないビットをいう。実際に命令列が配置されるアドレスには偏りがある場合には、上位アドレスが変化する頻度は低いと想定される。そのため、事前に固定した複数の上位アドレスに対して、これらの上位アドレスをそれぞれ表現する固定の少数ビットのコードを定めたとしても、上位アドレスの変更を伴う分岐命令の実行回数は、少ないと予想できる。したがって、情報処理装置は、下位32ビットと、特定の複数の上位アドレスを表現する固定の少数ビットのコードを用いて、効率的な分岐予測ができる。
特開平6−089173号公報 国際公開第2007/099605号 特開昭63−147243号公報
従来の技術では、情報処理装置は、頻出する上位アドレスを少数ビットのコードで表現する。情報処理装置は、命令列が配置されるアドレスには偏りがあることを前提としている。したがって、そのような前提が満たされない場合には、従来の技術では、効率的な処理が困難となる。例えば、OSによって割り付けられたプログラムが64ビットの仮想メモリ空間に散在する場合には、頻出する上位アドレスを少数ビットのコードで表現することが困難となる。開示の1つの実施形態は、64ビットアドレス中の上位アドレスに対して、上位アドレスより少数のビットを用いて上位アドレスを表現し、情報処理を実現することを目的とする。
そこで、実施の形態の一側面は、演算処理装置によって例示される。本演算処理装置は、取得部と、対応関係記憶部と、符号化部と、復号化部と、分岐予測部とを備える。取得部は、命令を取得する取得段階と命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の取得段階で命令の記憶元である命令アドレスから命令を取得する。対応関係記憶部は、命令処理がなされた命令の命令アドレスの上位ビット部分と命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を登録する。符号化部は、命令アドレスに含まれる上位ビット部分を対応関係に基づいて上位アドレス情報に符号化する。復号化部は、対応関係と上位アドレス情報から上位ビット部分を復元する。
本演算処理装置によれば、64ビットアドレス中の上位ビット部分である上位アドレスに対して、上位アドレスより少数のビットを用いて上位アドレスを表現し、情報処理を実現することができる。
比較例の上位アドレステーブルの構成例である。 分岐命令実行の流れを例示する図である。 上位アドレステーブル更新を命令実行中に行った場合の問題点を例示する図である。 一実施例に係るシステム構成を例示する図である。 一実施例に係るプロセッサの構成を例示する図である。 アドレス情報の流れを例示する図である。 上位アドレステーブル更新動作の流れを例示する図である。 SMT方式での上位アドレステーブル更新に伴う他スレッド無効化制御がない場合の問題点を例示する図である。 SMT方式での上位アドレステーブル更新に伴う問題点の解決方法を例示する図である。 H32エンコーダの構成図である。 H32デコーダの構成図である。 上位アドレス切替判定部の構成図である。
以下、図面を参照して、一実施形態に係る情報処理装置について説明する。以下の実施
形態の構成は例示であり、本装置は実施形態の構成には限定されない。
<比較例>
図1から図3を参照して、比較例に係る情報処理装置を説明する。比較例に係る情報処理装置は、例えば、64ビットの仮想アドレス空間を有する。ここでは、64ビットのアドレスのうち、上位32ビットを上位アドレスと呼び、下位32ビットを下位アドレスと呼ぶ。
さらに、比較例の情報処理装置は、32ビットの上位アドレスを32ビットよりも少ない少数ビットにコード化する。さらに、比較例の情報処理装置は情報処理装置内に、上位アドレステーブルを有する。上位アドレステーブルは、情報処理装置が処理した上位アドレスと少数ビットとの対応関係を記憶するテーブルである。上位アドレステーブルは、32ビットよりも少ない少数ビット、例えば、3ビットのコードで識別されるエントリを有する。比較例の情報処理装置は、新たな上位アドレスを処理するたびに、新たな上位アドレスを上位ドレステーブルに登録する。ここで、新たな上位アドレスとは、上位アドレステーブルに登録されていない上位アドレスの意味である。
比較例の情報処理装置は、上位アドレスを上位アドレステーブルに登録すると、上位アドレス32ビットに代えて、その上位アドレスが登録された上位アドレステーブルのエントリに対応する少数ビットのコードを用いて、上位アドレスを記述する。すなわち、比較例の情報処理装置は、プログラム走行中に動的に上位アドレステーブルに、上位アドレスを登録することで、上位アドレスを少数ビットのコードとの対応関係を更新する。例えば、上位アドレステーブルに空きがない状態で、比較例の情報処理装置がさらに、未登録の上位アドレスを登録する場合、情報処理装置は、既存の上位アドレスが登録済みのエントリに未登録の上位アドレスを上書きする。したがって、比較例の情報処理装置は、プログラム走行中に動的にコード化する上位アドレスを切り替え可能である。
図1に、従来の固定コードによって上位アドレスをコード化する方法と、比較例の情報処理装置における非固定コードによって動的に上位アドレスをコード化する方法を対比する。図1の固定コード化の方法では、情報処理装置は、参照頻度の高いと予測される固定の上位アドレスを、上位アドレスより少ないビット数でコード化する。
図1の例では、例えば、上位アドレス0x00000000の領域は、64ビットアドレス空間中のカーネル領域、および32ビットユーザのテキスト領域として例示される。
また、例えば、上位アドレス0x00000001の領域は、64ビットアドレス空間中の64ビットユーザのテキスト領域として例示され、さらにテキスト領域に続く領域はユーザのデータ領域として例示される。ユーザのデータ領域は、プログラム毎に確保する領域が変動することがありうる。
また、例えば、上位アドレス0xFFFFFFFFの領域は、64ビットアドレス空間中のシステムライブラリ領域として例示される。
なお、64ビットユーザーのデータ領域に続く領域は、ユーザのライブラリ領域として例示される。ユーザのライブラリ領域の開始位置はデータ領域の大きさに依存するため、図中ではユーザのライブラリ領域の開始位置を0x????????:????????としている。ここで、”:”(コロン)の左側は上位アドレスを示す、コロンの右側は下位アドレスを示す。また、”?”は、任意の16進数の値を示す。
従来は、上位アドレス0x00000000、0x00000001、および0xFFFFFFFFに対して、固定的にコードをそれぞれ”00”、”01”、”11”で割り
当て、固定的にコード化していた。したがって、例えば、開始位置が変動するユーザのライブラリ領域などは、効率的に分岐予測できていなかった。固定的なコードをどの上位アドレスに割り当てればよいかの判断が困難であるからである。
そこで、比較例の情報処理装置は、非固定的にコード化する。図1の非固定コード化の方法では、情報処理装置は、上位アドレステーブルとして、3ビットのコードに対応する7個のエントリを用意する。そして、情報処理装置は、プログラム走行中に、上位アドレステーブルに登録されていない上位アドレスを認識すると、認識した上位アドレスを上位アドレステーブルに登録する。そして、情報処理装置は、上位アドレスが登録されたエントリに対応するコードを登録された上位アドレスに割り当てる。
例えば、図1の例では、上位アドレス0x00000000に対して、コード”000”が割り当てられている。また、例えば、上位アドレス0xFFFFFFFFに対して、コード”001”が割り当てられている。
つまり、図1に例示した上位アドレステーブルの場合には、情報処理装置は、例えば、上位アドレス0x00000000の代わりにコード”000”を用いる。また、情報処理装置は、上位アドレス0xFFFFFFFFに代えてコード”001”を用いる。
このようにして、情報処理装置は、上位アドレステーブルに登録された上位アドレスに対しては、32ビットの上位アドレスを用いる代わりに3ビットのコードを用いることが可能となる。また、上位アドレステーブルに登録されていない上位アドレスは、一括して、例えば、コード”100”にコード化される。
さらに、上位アドレステーブルのすべてのエントリ、例えば、図1の場合には7個のエントリに上位アドレスが登録された後、情報処理装置が、さらに、新たな上位アドレスを認識した場合には、順次、上位アドレスが登録済みのエントリを上書きして、既登録の上位アドレスを削除し、新たな上位アドレスを登録する。そして、情報法処理装置は、図1の上位アドレステーブルを用いて、7個の上位アドレスをそれぞれ7個のコード、つまり、3ビットのデータに対応づけてコード化する。以上のようにして、情報処理装置は、上位アドレステーブルに登録する上位アドレスをプログラム走行中に動的に切り替えて、上位アドレスをコード化して、上位アドレスに対応するコードと、下位アドレスを用いて、分岐予測等の処理を実行する。
しかしながら、プログラム走行中に動的に上位アドレスに対するコードを切り替えると、以下の問題が生じる。例えば、分岐予測が成功したか失敗したかは算出した分岐先アドレスが分岐予測時と一致したかどうかにより判断する。以下、本比較例では、分岐先アドレスとは下位アドレスと上位アドレスのコードとを組み合わせたものとする。
図2および図3は、分岐命令実行の流れを例示する図である。図2は、命令フェッチから命令の実行に至る実行フローと、分岐予測部の分岐予測フローと、分岐制御部による演算結果と分岐予測との一致検証のフローを例示する。
図2中の命令実行フローでは、情報処理装置は、例えば、命令キャッシュから命令をフェッチして命令バッファに登録する(S1)。次に情報処理装置は、命令バッファに登録された命令をデコードし、演算器に分岐先アドレス演算依頼を発行する(S2)。そして、情報処理装置は、演算器での演算の結果得られた分岐先アドレスを分岐制御部に転送する。分岐制御部に転送される分岐先アドレスは、64ビット(上位アドレス[63:32]+下位アドレス[31:0])である。情報処理装置の分岐制御部は、上位アドレステーブルを参照して、上位アドレスをエンコードし、上位アドレスコードH32CODE[
2:0]を生成する。そして、情報処理装置は、上位アドレスコードH32CODE[2:0]と、下位アドレス[31:0]とを組み合わせて(H32CODE[2:0]+下位アドレス[31:0])、演算結果の分岐先アドレスを生成する。
一方、情報処理装置の分岐予測フローでは、情報処理装置は、分岐履歴から予測分岐先アドレスを取得する(S5)。予測分岐先は、例えば、上位アドレスコードと、下位アドレスとを組み合わせて、H32CODE[2:0]+下位アドレス[31:0]のように記述できる。そして、情報処理装置は、分岐履歴から取得した予測分岐先アドレスを分岐制御部に転送する(S6)。
情報処理装置の分岐制御部は、命令実行フローから得られた演算結果の分岐先アドレスと、分岐予測フローから得られた予測分岐先アドレスを比較する(S7)。そして、演算結果の分岐先アドレスと予測分岐先アドレスが一致していた場合、情報処理装置は、分岐予測成功と判断する。そこで、情報処理装置は、投機実行していた後続命令の処理をそのまま続行する(S8)。
一方、S7の判定で、演算結果の分岐先アドレスと予測分岐先アドレスが一致していない場合、情報処理装置は、分岐予測失敗と判断する。そこで、情報処理装置は、投機実行していた後続命令の処理をキャンセルする(S9)。そして、情報処理装置は、正しい分岐先アドレス、つまり演算結果の分岐先アドレスに基づき、命令フェッチから処理を実行する。分岐予測失敗の場合の正しい分岐先アドレスからの命令フェッチを再命令フェッチとも呼ぶ。
図3は、図2において、分岐予測のステージから分岐先算出のステージの間に上位アドレスのコードが更新された場合の結果を例示する図である。図3が例示する処理は、図2と同様である。ただし、図3は、処理フロー中に一点鎖線LAが例示され、一点鎖線LA以前と以降とで上位アドレステーブルの内容が更新されている。
例えば、情報処理装置がある分岐命令に対してパイプラインで命令を処理した場合に、分岐予測のステージで上位アドレス’0xaaaaaaaa’のコードとして、上位アドレステーブルにコード’000’が登録されていたと仮定する。さらに、情報処理装置の分岐予測のス
テージから分岐先算出のステージの間に上位アドレスのコードが更新されたと仮定する。例えば、上位アドレス’0xnnnnnnnn’のコードとして、上位アドレステーブルにコード’000’が登録されたとする。
以上の仮定が成り立つ場合、分岐予測時に分岐予測アドレスの上位アドレス’0xaaaaaaaa’はコード’000’ にエンコードされる。しかし、分岐先算出結果の上位アドレスが’0xnnnnnnnn’であった場合も、上位アドレスのコードは’000’にエンコードされる。
このように、上位アドレスのコードが同一であっても、分岐予測時のアドレスと分岐先算出結果のアドレスとで上位アドレスが異なる。すなわち、上位アドレスに基づいて判定すれば分岐先アドレスの不一致により分岐予測は失敗である。したがって、情報処理装置は、上位アドレスのコードを用いない処理では、分岐予測により投機的に処理していた命令をキャンセルして、算出した分岐先アドレスに基づいて命令フェッチを再開することになる。
しかし、図3で例示される処理の場合、分岐予測のアドレスの上位アドレスのコードと分岐先算出結果のアドレスの上位アドレスのコードは共に’000’である。このため、情
報処理装置は、分岐先アドレスの不一致を検出することはできない。このように、上位アドレスに対するコードが更新されて分岐予測時の上位アドレスが消去されていると、情報
処理装置は、そもそもコード化された元の上位アドレスを復号化できない。このため、情報処理装置が上位アドレスの不一致を検出するのは困難となってしまう。
上位アドレスの不一致が検出できない場合、情報処理装置は、分岐予測失敗の判断ができない。その結果、情報処理装置において、本来キャンセルされるべき投機実行の命令をキャンセルできずに処理がそのまま進行する。したがって、情報処理装置が実行するプログラムの処理にしたがった命令とは異なる命令が実行されることになり、例えば、レジスタやメモリの値を壊してしまう可能性が生じる。
さらに、比較例の処理をマルチスレッドプロセッサに適用した場合には、以下の問題が生じる。ここで、マルチスレッドプロセッサは、例えば、単一のプロセッサ内にレジスタを多重化することにより、複数のプログラムが演算装置等の資源を共有できるようにしたプロセッサをいう。マルチスレッドプロセッサ上で並列にプログラムを動作させる場合、頻出する上位アドレスのビットパターンは類似していると予測される。このため、スレッド間で上位アドレスのパターンを共有することができれば、さらに効率的な分岐予測が可能となると考えられる。
しかし、マルチスレッドプロセッサで上位アドレスのコードをスレッド間で共有し、かつ動的に切り替える場合を考えると、その切り替えタイミングはスレッドごとに独立であることも考えられる。その結果、シングルスレッドよりも上位アドレスの不一致を検出するのはさらに困難となると考えられる。
本実施形態では、情報処理装置は、符号化部と、復号化部とを有する。符号化部は、上位アドレスとコードとの対応関係を上位アドレステーブルに持ち、上位アドレステーブルに基づいて上位アドレスから少数ビットのコードへの符号化を行う。以下、本実施形態では、上位アドレステーブルによって、上位アドレスから符号化されるコードを上位アドレス情報ともいう。復号化部は、同テーブルに基づいて少数ビットの上位アドレス情報から上位アドレスへの復号化を行う。
さらに、情報処理装置は、分岐予測部と、命令フェッチ制御部と、分岐制御部と、を備える。分岐予測部は、少数ビットの上位アドレス情報と下位アドレスとをアドレスとして登録する。命令フェッチ制御部は、復号化部により分岐予測部から得られる上位アドレス情報を復号化した上位アドレスと、分岐予測装置から得られる下位アドレスとを合わせて命令アドレスを生成する。そして、命令フェッチ制御部は、その命令アドレスに基づいて命令フェッチを行う。分岐制御部は、フェッチした命令コードから分岐命令をデコードし、分岐先アドレスを算出して分岐予測時との分岐先アドレスの一致検証を行う。そして、分岐制御部は、分岐予測が成功したか失敗したかを判断する。
本実施形態では、情報処理装置は、上記の上位アドレスを登録した上位アドレステーブルを更新するとともに、コード化する上位アドレスとコードつまり上位アドレス情報との対応関係をプログラム実行中に動的に切り替える。比較例で説明したように、分岐命令の実行途中に、上位アドレステーブルが更新されると、分岐予測時と分岐先アドレス算出時との間の上位アドレスの不一致を検出するのが困難となる。このため、本実施形態では、情報処理装置は、上位アドレステーブル更新のタイミング、すなわち、コード化する上位アドレスとコードとの対応関係の切り替えタイミングを制限する。つまり、本実施形態の情報処理装置は、上位アドレステーブル更新のタイミングを制限することで、分岐予測時と分岐先アドレスの算出時とで上位アドレスと上位アドレスがコード化されたコードとの一致を保証する。
<上位アドレスとコードとの対応関係保証の検討>
本実施形態では、まず、分岐先の上位アドレスが復号化不可能となるケースについて検討する。分岐先の上位アドレスについて検討するために、ここでは、情報処理装置が分岐命令を実行する場合を想定する。
例えば、分岐先の上位アドレスが上位アドレステーブルに登録されていた場合、情報処理装置は、上位アドレステーブルを参照して、コードから分岐先の上位アドレスを算出可能である。また、上位アドレスが変化しないアドレスが分岐先である場合には、情報処理装置は、実行中の命令アドレスを示すプログラムカウンタを参照することで上位アドレスの算出が可能である。
したがって、分岐先の上位アドレスが算出不可能となるケースは、分岐先の上位アドレスが上位アドレステーブルに登録されていない上位アドレスで、かつ、分岐先の上位アドレスが実行中の命令アドレスと異なる場合である。
本実施形態では、情報処理装置は、上位アドレステーブルに登録されていない上位アドレスに対しては登録されている上位アドレスに割り当てたコードとは別のコード(例えば
‘x’)を割り当てる。そして、情報処理装置は、分岐先アドレス算出時の上位アドレス情報のコードが ‘x’であり、かつ分岐先の上位アドレスがプログラムカウンタと異なる場合、分岐先アドレスが不一致であると判断する。つまり、分岐先の上位アドレスが上位アドレステーブル未登録であって、かつ、演算器によって算出された分岐先の上位アドレスと分岐元の命令アドレス(プログラムカウンタ値)の上位アドレスとが不一致(4GBを越える分岐発生)であるとき、情報処理装置は、分岐先アドレスが予測分岐先アドレスと不一致であると判定する。
そして、情報処理装置は、投機命令実行をキャンセルし、演算器で算出した分岐先アドレスでプログラムカウンタを更新するように制御する。プログラムカウンタが更新されれば、情報処理装置は、更新されたプログラムカウンタ値から上位アドレスを算出可能となる。そこで、情報処理装置は、更新されたプログラムカウンタから上位アドレスを生成し、生成した上位アドレスを含む正しいアドレスに基づいて命令フェッチを再開できる。
また本実施形態では、分岐予測時と分岐先アドレスの算出時とでコードに対応する上位アドレスが一致することを保証可能なタイミングで上位アドレステーブルの更新を行う。そこで、本実施形態では、情報処理装置は、分岐予測失敗による投機命令実行キャンセルの機会を利用する。投機命令実行キャンセルはそれまでの命令実行をすべてキャンセルして、パイプラインの最初のステージである命令フェッチから処理が再開される処理である。そこで、情報処理装置は、上位アドレステーブルの更新を分岐予測失敗による投機命令実行キャンセルのタイミングで行う。
情報処理装置は、例えば、前記のように分岐先の上位アドレスが上位アドレステーブルに登録されていない分岐命令の実行を完了すると、投機命令実行をキャンセルする。投機命令実行キャンセルのタイミングで、情報処理装置は、上位アドレステーブルに実行完了した命令の分岐先の上位アドレスを登録し、上位アドレステーブルを更新する。投機命令実行キャンセル後は分岐先アドレスの命令フェッチから処理が再開されるため、情報処理装置は、後続の命令を実行するときの分岐予測時と分岐先アドレス算出時とにおいて、コード化する上位アドレスとコードとの対応関係が同一であることを保証できる。なお、投機命令実行キャンセルは、例えば、分岐先の上位アドレスが上位アドレステーブルに登録されていない場合の他、下位アドレスの不一致、つまり、通常の分岐予測失敗の場合や例外を検出した場合、割り込みが発生した場合などにも行われる。
単一のスレッドで命令処理を行う場合は上記のタイミングで上位アドレステーブルを更新するという制御によって、情報処理装置は、プログラムの実行中に動的に上位アドレステーブルを更新する場合も、コード化する上位アドレスとコードとの対応関係の保証が可能である。しかし、マルチスレッド、特に同時マルチスレッディング(SMT:Simultaneous Multi−Threading)方式をとるプロセッサで、かつ前記のコード化する上位アドレスのパ
ターンをスレッド間で共有する構成を持つプロセッサの場合、処理が複雑となる。同時マルチスレッディングとは、単一のCPU(Central Processing Unit)で、複数のスレッ
ドを同時並行して実行する技術、処理等をいう。
SMT方式では、投機命令実行キャンセルのタイミングはスレッドごとに依存性なく生じうる。そのため、前記のようにあるスレッド’a’の投機実行キャンセルのタイミング
でコード化する上位アドレスとコードとの対応関係の切り替えを実行すると、上記対応関係の切り替えタイミングが別のスレッド’b’における分岐命令実行中にあたる可能性が
ある。この場合、情報処理装置は、別のスレッド’b’の分岐予測時と分岐先アドレス算
出時とのコード化パターンの一致を保証できない。
そこで本実施形態では、情報処理装置は、複数スレッド動作時にあるスレッドにより上位アドレステーブルが更新されたときの別のスレッドの動作を保証する。あるスレッド’a’の分岐命令により上位アドレステーブルが更新されたとき、別スレッドが命令実行中
であったと想定する。このような場合、情報処理装置は、別スレッド’b’の分岐命令に
対して、分岐先の上位アドレスが上位アドレステーブルに登録されているかどうかにかかわらず 上位アドレスを‘x’に符号化する。ここで、‘x’は、上位アドレステーブルに
登録されていない上位アドレスに対応するコードである。
情報処理装置は、上位アドレス情報のコードが ‘x’で、かつ分岐先の上位アドレスが変化する場合は、前記の制御により、分岐予測時と分岐先アドレス算出時とにおいて分岐先アドレスが不一致であると判断する。このため、情報処理装置は、スレッド’b’にお
いて分岐先アドレスの不一致を検出する。分岐先アドレスの不一致が検出されるとスレッド’b’の投機命令実行がキャンセルされ、命令フェッチが再開される。このため、スレ
ッド’b’においても、投機命令実行のキャンセル以降の分岐予測時と分岐先アドレス算
出時とにおいて、コード化する上位アドレスとコードとの対応関係が一致することが保証可能となる。情報処理装置は、スレッド’b’において命令フェッチが再開されたときに
スレッド’a’により更新された上位アドレステーブルによって分岐予測を行う。したが
って、情報処理装置は、プログラム実行中の動的な上位アドレスとコードとの対応関係をスレッド間で共有し、効率的な分岐予測をすることができる。
このように、本実施形態の情報処理装置は、プログラム実行中に動的にコード化される上位アドレスとコードとの対応関係を切り替えることにより生じる問題を解消する。本情報処理装置は、64ビットのアドレス空間のうち頻出する上位32ビットのアドレスを少数ビットで表現し、さらに少数ビットへの変換方法をプログラム動作中に切り替えることを可能する。したがって、本情報処理装置により、少ないハードウェア資源によるより効率的な分岐予測が実現可能となる。
<ハードウェア構成>
図4に、一実施例に係る情報処理装置のシステム構成を例示する。図1は、本実施例を適用したプロセッサを含むサーバ等のシステムを例示する。図1の情報処理装置は、複数のプロセッサ(CPU)1−1、1−2と、メモリ3−1、3−2と、外部装置との入出力制御を行うインターコネクト制御部5等を有する。ここで、プロセッサ1−1、1−2等を総称して、単にプロセッサ1と呼ぶ。なお、図1の情報処理装置において、プロセッサ数が1に限定される訳ではない。
図5に、プロセッサ1の構成を例示する。また、図6に、命令フェッチに用いられるアドレス情報の流れを例示する。本実施例では、アウトオブオーダー実行およびパイプライン機能を有する汎用プロセッサを想定する。なお、プログラムに書かれた通りに逐次実行することを、イン・オーダー実行という。一方、アウトオブオーダー実行は、プロセッサがプログラムに書かれた実行順とは異なる実行順、例えば、先に実行可能な命令をプログラムに書かれた実行順よりも先に実行することで、複数命令の同時実行の可能性を広げる技術である。
図5には、命令フェッチ、命令発行、命令実行、命令完了のステージが例示されている。図5は、各ステージと、それぞれのステージで動作する構成要素との関係を例示する。例えば、命令フェッチステージでは命令フェッチ制御部11、命令バッファ12、分岐予測部20、(一次)命令キャッシュ24、二次キャッシュ25などが動作する。
命令フェッチ制御部11は分岐予測部20から、フェッチする命令の予測分岐先アドレスを取得する。また、命令フェッチ制御部11は分岐制御部22から分岐演算により確定した分岐先アドレスを取得する。さらに、命令フェッチ制御部11は、プログラムカウンタ制御部19から次に命令完了する命令のアドレスであるプログラムカウンタ値などを取得する。命令フェッチ制御部11は、取得部の一例である。
さらに、命令フェッチ制御部11は、命令フェッチ制御部11内で分岐しない場合の連続して命令をフェッチするための次のアドレスを生成する。命令フェッチ制御部11は、以上のようにして取得した予測分岐先アドレス、プログラムカウンタ値、生成した次のアドレスなどから選択して次の命令フェッチアドレスを確定する。
命令フェッチ制御部11は、確定した命令フェッチアドレスを命令キャッシュ24に出力し、出力した命令フェッチアドレスから命令コードをフェッチする。命令キャッシュ24は一次キャッシュであり、二次キャッシュ25の一部のデータを格納する。また、二次キャッシュ25は、例えばメモリ3−1(図4参照)等の一部のデータを格納している。一次キャッシュである命令キャッシュ24に該当するアドレスのデータが存在しない場合は二次キャッシュ25からデータが命令キャッシュ24に取得される。また、二次キャッシュ25に該当するデータが存在しない場合はメモリ3−1等からデータが二次キャッシュ25に取得される。
本実施例ではメモリ3−1等はプロセッサ1の外部に配置されている。このため、外部にあるメモリ3−1等とプロセッサ1との入出力制御はメモリコントローラ26を介して行われる。命令キャッシュ24や二次キャッシュ25、メモリ3−1等の該当するアドレスからフェッチされた命令コードは、命令バッファ12に格納される。
分岐予測部20は命令フェッチと並行して分岐予測を実行する。分岐予測部20は命令フェッチ制御部11から出力された命令フェッチアドレスを受け取る。そして、分岐予測部20は受け取った命令フェッチアドレスを基に分岐予測を行い、分岐の成立または不成立を示す分岐方向と分岐先アドレスとを命令フェッチ制御部11へ返す。命令フェッチ制御部11は予測された分岐方向が成立であった場合に次の命令フェッチアドレスとして予測された分岐先アドレスを選択する。以降予測された分岐先アドレスによって投機的な命令の実行が進行する。
図5の命令発行ステージでは、命令デコーダ13、命令発行制御部14が動作する。命令デコーダ13は命令バッファ12から命令コードを受け取り、命令の種別や必要な実行資源などを解析する。そして、命令デコーダ13は解析結果を命令発行制御部14、分岐
制御部22、命令完了制御部18に出力する。
命令発行制御部14は、リザベーションステーションの構造を有する。リザベーションステーションは、例えば、命令で参照するレジスタなどの依存性を見て、依存性のあるレジスタの更新状況や同じ実行資源を用いる命令の実行状況などから実行資源が命令を実行可能かどうか、を判断する。そして、リザベーションステーションは、実行可能なら各実行資源に対してレジスタ番号やオペランドアドレスなど命令実行に必要な情報を出力する。また、命令発行制御部14は、実行可能となるまで命令を格納しておくバッファの役割も担う。命令アドレスバッファ21は命令フェッチ制御部から出力された命令フェッチアドレスを格納する。
命令実行ステージでは演算器15、(一次)オペランドキャッシュ16、分岐制御部22などの実行資源が動作する。演算器15は、プログラムの実行にしたがってレジスタ17やオペランドキャッシュ16からデータを受け取り、四則演算や論理演算、三角関数演算、アドレス計算など命令に対応した演算を実行する。そして、演算器15は、演算結果をレジスタ17やオペランドキャッシュ16に出力する。オペランドキャッシュ16は命令キャッシュ24と同様、二次キャッシュ25の一部のデータを格納している。オペランドキャッシュ16は、ロード命令によってメモリ3−1等から演算器15、レジスタ17へのデータのロードを実行する。また、オペランドキャッシュ16は、ストア命令によって演算器15、レジスタ17からメモリ3−1等へのデータのストアを実行する。各実行資源は、命令実行の完了通知(COMPLETE)を命令完了制御部18へ出力する。
分岐制御部22はリザベーションステーションの構造を有する。なお、分岐制御部22内のリザベーションステーションを分岐リザベーションステーション22Aという(図6参照)。分岐制御部22(分岐リザベーションステーション22A)は、命令デコーダ13から分岐命令の種別、命令アドレスバッファ21から命令デコーダ13に同期した分岐命令アドレス、演算器15から分岐先アドレスや分岐条件となる演算の結果等の信号を受け取る。そして、分岐リザベーションステーション22Aは、分岐命令ごとにそれぞれの信号を格納する。分岐制御部22は得られた演算結果が分岐条件を満たしていれば分岐成立、満たしていなければ分岐不成立と判断し、分岐方向を確定する。また、分岐制御部22は分岐リザベーションステーション22Aによって演算結果と分岐予測時の予測分岐先とにおいて、分岐アドレスと分岐方向が一致するかどうかを判断する。さらに、分岐制御部22は分岐命令の順序関係の制御も行う。
分岐リザベーションステーション22Aはエントリに分岐予測時の分岐方向や分岐先アドレスを登録する。そして、分岐リザベーションステーション22Aは演算結果と予測との一致検証を実行後、演算結果によりエントリの置き換えを行う。演算結果と予測とが一致した場合は、分岐リザベーションステーション22Aは命令完了制御部18へ分岐命令のCOMPLETEを出力する。演算結果と予測とが一致しなかった場合には分岐リザベーションステーション22Aは命令完了制御部18へ分岐命令のCOMPLETEと共に後続命令のキャンセル(以下、本実施例では、その他の要因による投機実行命令キャンセル要求)および再命令フェッチ要求を出力する。演算結果と予測とが一致しなかったことは、分岐予測失敗を意味するからである。また、分岐リザベーションステーション22Aは分岐成立が確定した場合には、COMPLETEをした分岐リザベーションステーション22Aのエントリから演算結果の分岐先アドレスをプログラムカウンタ制御部19へ出力する。
命令完了ステージでは、命令完了制御部18、レジスタ17、プログラムカウンタ制御部19、分岐履歴更新部23が動作する。命令完了制御部18は、命令デコーダ13から受け取った命令の種別などを順にコミットスタックエントリに格納する。命令完了制御部18は各命令実行資源から受け取ったCOMPLETE信号を基に、コミットスタックエントリに
格納された命令コード順に命令完了(COMMIT)処理を行う。例えば、命令完了制御部18はレジスタ17へのレジスタ更新指示、プログラムカウンタ制御部19へのプログラムカウンタの更新指示を出力する。
レジスタ17は命令完了制御部18からレジスタ更新指示を受け取ると、演算器15やオペランドキャッシュ16から受け取る演算結果のデータを基にレジスタ値の更新を実行する。
プログラムカウンタ制御部19は命令完了制御部18から命令のCOMMIT信号やCOMMITした命令の種別、分岐制御部22から分岐先アドレスを受け取る。プログラムカウンタ制御部19は命令完了制御部18から分岐命令のCOMMIT信号を受け取ると分岐制御部22から受け取った分岐先アドレスをプログラムカウンタにセットする。また、プログラムカウンタ制御部19は分岐命令以外の命令のCOMMIT信号を受け取ると、COMMITした命令数に応じてプログラムカウンタ値を加算する。更新後のプログラムカウンタ値は、次にCOMMITする命令のアドレスを示す。
分岐履歴更新部23は、分岐制御部22から受け取る分岐演算の結果を基に、分岐予測部20の履歴更新データを作成し、分岐予測部20に出力し、分岐予測部20の履歴を更新する。
本実施例では、図6に示すように、命令アドレスは64ビットである。また、本実施例では、プロセッサ1は、命令アドレス64ビットのうち上位32ビットを3ビットの信号(以下、H32CODEと呼ぶ)にコード化する。ただし、上位32ビットをH32CODEにコード化するビット数が3ビットに限定される訳ではない。図6では、H32CODEと下位アドレス32
ビットの組みは、[2:0][31:0]によって例示されている。また、コード化しない64ビットアドレスは、[63:0]によって例示されている。したがって、例えば、分岐予測部20の分岐履歴には、H32CODEと下位アドレス32ビットの組みである[2:
0][31:0]が格納される。
そして、プロセッサ1は、命令アドレスの上位32ビットをコード化したH32CODEと、
下位32ビットとを合わせて命令実行パイプラインを伝播させる。ここで、命令実行パイプラインは、例えば、命令フェッチ制御部11、命令アドレスバッファ12、分岐リザベーションステーション22A、プログラムカウンタ19A、分岐履歴更新部23、分岐予測部20などを含む。そして、プロセッサ1は、命令アドレスの上位32ビットを用いる構成要素において、伝播したH32CODEをデコードして上位アドレスへの変換を行う。
本実施例では、上記のH32CODEのエンコーダ(以下、H32エンコーダ7)およびH32CODEの
デコーダ(以下、H32デコーダ8)は、共通の上位アドレステーブルを参照してH32CODEの変換を実行する。上位アドレステーブルとはH32CODEと上位アドレスとの対応関係を記憶
した表であり、エントリごとにH32CODEと32ビットのアドレスとを有している。ここで、
プロセッサ1は、上位アドレステーブルとして、ひとつのテーブルをすべてのH32デコー
ダ8やH32エンコーダ7で共用するもの(構成例1)としてもよい。また、プロセッサ1
は、小規模なテーブルをH32デコーダ8やH32エンコーダ7の各々で持ち、すべてのテーブルの更新タイミングを同期させるもの(構成例2)としてもよい。本実施例では、プロセッサ1は構成例2を採用する。
また、プロセッサ1がSMT方式を採用する場合、上位アドレステーブルはスレッドごとに個別のテーブルを持たせて制御する構成も考えられる。ただし、本実施例ではより実装面積が少なく効率的な構成として上位アドレステーブルをスレッド間で共用するものとする。
図10に、H32エンコーダ7の構成を例示する。H32エンコーダ7は上位アドレスを入力とし、H32エンコーダ7内の上位アドレステーブル71に登録された各エントリの32ビッ
トのアドレスと入力された上位アドレスとの比較を行う。そして、H32エンコーダ7は一
致したエントリに登録されているコード(H32CODE)をエンコード結果として出力する。H32エンコーダ7は符号化部の一例である。また、上位アドレステーブル71は、対応関係記憶部の一例である。
図10の例では、H32エンコーダ7は、上位アドレステーブル71と、上位アドレステ
ーブル71の各エントリにそれぞれ接続されて、上位アドレステーブル71に登録されたコード(H32CODE)を選択して出力する選択回路を有している。選択回路は、例えば、コ
ンパレータ72と、2入力のANDゲート73とを有する。コンパレータ72は、上位アドレステーブル71の対応するエントリに登録された上位アドレスと、H32エンコーダ7
に入力された上位アドレスとを比較する。比較の結果、上位アドレステーブル71の対応するエントリに登録された上位アドレスと、H32エンコーダ7に入力された上位アドレス
とが一致すると、コンパレータ72は、真(オン、’1’)信号をANDゲート73の一方の入力端子に送出する。したがって、コンパレータ72は、上位アドレステーブル71の対応するエントリに登録された上位アドレスを参照信号として用いる。
ANDゲート73の他方の入力端子には、コンパレータ72によって比較された上位アドレステーブル71の対応するエントリに登録されたコード(H32CODE)の値(ビットパ
ターン)が入力される。上述のように、コード(H32CODE)は、32ビットの上位アドレ
スを少数のビット数、この例では、3ビットでコード化するためのコードである。したがって、コンパレータ72から真(オン)信号の入力を受けたANDゲート73は、他方の入力端子から入力される上位アドレステーブル71の対応するエントリに登録されたコード(H32CODE)を出力する。また、コンパレータ72から偽(オフ)信号の入力を受けた
ANDゲート73は遮断となる。したがって、ANDゲート73は他方の入力端子から入力される上位アドレステーブル71の対応するエントリに登録されたコード(H32CODE)
を出力しない。つまり、図10では、概念的にANDゲート73が例示されているが、より具体的には、選択回路は、コンパレータ72によってオン・オフされるスイッチを含むようにすればよい。
一方、複数入力のANDゲート74は、すべてのコンパレータ72での比較結果が偽(オフ、’0’)であったときに、コード(H32CODE)”100”を出力する。コード(H32CODE)”100”は、H32エンコーダ7に入力された上位アドレスが上位アドレステーブ
ル71に登録されていなかったことを示す信号である。また、複数の入力のORゲート75は、複数のANDゲート73および複数入力のANDゲート74の出力のいずれかをセレクタ76に出力する。
セレクタ76は、上位アドレス無効化信号がオンかオフかによって、選択する信号を切り替える。ここで、上位アドレス無効化信号は、図6および図12の上位アドレス切替判定部が生成する信号である。上位アドレス無効化信号は、プロセッサ1がSMT方式の場合に、他のスレッドにおいて上位アドレステーブル71が更新されたことの影響を回避するための信号である。
図10では、上位アドレス無効化信号がオフの場合、セレクタ76は、ORゲート75の出力を選択して出力する。この場合には、選択回路による選択結果にしたがって、上位アドレステーブルに登録されたコード(H32CODE)または、コード”100”を出力する
。一方、上位アドレス無効化信号がオンの場合、セレクタ76は、選択回路の処理結果によらず、コード”100”を出力する。
例えば、図10のケースでは、入力データ’0xaaaaaaaa’に一致するアドレスが登録されているエントリのコード(H32CODE)は’000’であるため、H32エンコーダ7は、’000’を出力する。また、入力された上位アドレスに一致するエントリがない、あるいは上位アドレス変換無効化信号が’1’であった場合は、H32エンコーダ7は、比較結果が不一致であったことを示す特殊なコード’100’をエンコード結果として出力する。
図11に、H32デコーダ8の構成を例示する。H32デコーダ8はコード(H32CODE)を入
力とし、H32デコーダ8内の上位アドレステーブルに登録された各エントリのコード(H32CODE)と入力されたコード(H32CODE)との比較を行い、一致したエントリに登録されて
いる32ビットの上位アドレスをデコード結果として出力する。
図11の例では、H32デコーダ8は、上位アドレステーブル81と、上位アドレステー
ブル81の各エントリにそれぞれ接続されて、上位アドレステーブル81に登録された上位アドレスを選択して出力する選択回路を有している。H32デコーダ8は、復号化部の一
例である。また、上位アドレステーブル81は、対応関係記憶部の一例である。
選択回路は、例えば、コンパレータ82と、2入力のANDゲート83とを有する。コンパレータ82は、上位アドレステーブル81の対応するエントリに登録されたコード(H32CODE)と、H32デコーダ8に入力されたコード(H32CODE)とを比較する。比較の結果
、上位アドレステーブル81の対応するエントリに登録されたコード(H32CODE)と、H32デコーダ8に入力されたコード(H32CODE)とが一致すると、コンパレータ82は、真(
オン、’1’)信号をANDゲート83の一方の入力端子に送出する。したがって、コンパレータ82は、上位アドレステーブル81の対応するエントリに登録されたコード(H32CODE)を参照信号として用いる。
ANDゲート83の他方の入力端子には、コンパレータ82によって比較された上位アドレステーブル81の対応するエントリに登録された上位アドレスの値(ビットパターン)が入力される。したがって、コンパレータ82から真(オン)信号の入力を受けたANDゲート83は、他方の入力端子から入力される上位アドレステーブル81の対応するエントリに登録された上位アドレスを出力する。つまり、コード(H32CODE)がデコードさ
れて上位アドレスに変換される。また、コンパレータ82から偽(オフ、’0’)信号の入力を受けたANDゲート83は遮断となる。この場合、ANDゲート83は他方の入力端子から入力される上位アドレステーブル81の対応するエントリに登録された上位アドレスを出力しない。したがって、図11においても、図10と同様、概念的にANDゲート83が例示されているが、より具体的には、選択回路は、コンパレータ82によってオン・オフされるスイッチを含むようにすればよい。
一方、複数入力のANDゲート84は、すべてのコンパレータ82での比較結果が偽(オフ)であったときに、プログラムカウンタ値の上位32ビットを出力する。また、複数の入力のORゲート85は、複数のANDゲート83および複数入力のANDゲート84の出力のいずれかをセレクタ86に出力する。
セレクタ86は、上位アドレス無効化信号がオンかオフかによって、選択する信号を切り替える。すなわち、上位アドレス無効化信号がオフの場合、セレクタ86は、ORゲート85の出力を選択して出力する。この場合には、選択回路による選択結果にしたがって、上位アドレステーブルに登録された上位アドレスまたは、プログラムカウンタ値の上位32ビットを出力する。一方、上位アドレス無効化信号がオンの場合、セレクタ86は、選択回路の処理結果によらず、プログラムカウンタ値の上位32ビットを出力する。
例えば図11のケースでは、入力データ’000’に一致するコード(H32CODE)が登録されているエントリの32ビットアドレスは’0xaaaaaaaa’であるため、H32デコーダ8は、
コード(H32CODE)’000’に対するデコード結果として、’0xaaaaaaaa’を出力する
。また、入力されたコード(H32CODE)に一致するエントリがない、あるいは上位アドレ
ス変換無効化信号が’1’であった場合は、H32デコーダ8は、比較結果が不一致であったとし、現在実行処理中の命令アドレスであるプログラムカウンタ19Aの上位アドレスをデコード結果として出力する。
図6では、複数のH32デコーダ8を区別するため、符号8−1、8−2を用いる。また
、複数のH32エンコーダ7を区別するため、符号7−1、7−2を用いる。例えば、命令
フェッチ制御部11はH32デコーダ8−1を有しており、前述のように分岐予測部20、
分岐制御部22、プログラムカウンタ制御部19から受け取ったH32CODEおよび前回命令
フェッチに使用したH32CODEから次に命令フェッチに使用するH32CODEを選択し、H32デコ
ーダ8−1により上位アドレスへの変換を行う。命令フェッチ制御部11は変換後のアドレスを、フェッチアドレスの上位アドレスとして命令フェッチを実行する。上位アドレステーブル81に、H32CODEと一致するエントリがなかった場合は、H32デコーダ8−1は、その時点で実行中である命令アドレスを示すプログラムカウンタの上位ビットを出力する。したがって、命令フェッチ制御部11はプログラムカウンタの上位ビットを命令フェッチアドレスの上位アドレスとして命令フェッチを実行する。このように、上位アドレステーブル81にH32CODEと一致するエントリがなかった場合、命令フェッチアドレスが誤っ
ている可能性がある。しかし、実行中の命令アドレスの上位アドレスを命令フェッチアドレスに用いることで、キャッシュの書き潰しを抑制することが可能となる。プログラムの実行においては、特定のアドレスの近傍が繰り返して実行される場合もあるからである。なお、命令フェッチ制御部11において、H32デコーダ8−1がH32CODEを上位アドレスに変換できない場合とは、例えば、分岐予測部20に記憶された分岐履歴のH32CODEが、分
岐予測時点で更新されている場合が想定される。分岐予測部20に記憶された分岐履歴のH32CODEが、分岐予測時点で更新されている場合には、分岐予測が成功する可能性は低く
なるが、情報処理装置は、分岐予測が外れたことを認識可能である。
また、図6のように、分岐制御部22はH32エンコーダ7−1を有しており、演算器1
5から得られる分岐アドレス演算結果の上位アドレスをH32エンコーダ7−1によりH32CODEへ変換する。分岐制御部22は、分岐リザベーションステーション22Aには分岐先アドレスとして、変換後のH32CODEを登録する。また、分岐制御部22は分岐予測時の分岐
先アドレスが正しかったか、演算結果との一致検証を行う。分岐先アドレスの上位アドレスについては検算結果をH32エンコーダ7−1により変換したH32CODEと分岐予測時のH32CODEとの比較により、分岐先アドレスのチェックを行う。さらに、分岐制御部22は上位
アドレス切替判定部22Bを有し、分岐先の上位アドレスが変化するか否かの判定を行う。
図12に、上位アドレス切替判定部22Bの構成を例示する。上位アドレス切替判定部22Bは、切替判定部の一例である。上位アドレス切替判定部22BはCOMMITする前の分岐先アドレスの上位アドレスを保持する分岐先上位アドレスバッファ22B6、上位アドレステーブル更新指示信号生成論理、上位アドレス不一致による投機実行命令キャンセル要求生成論理、および上位アドレス変換無効化信号保持回路22B4を有する。
分岐先上位アドレスバッファ22B6は、例えば、演算器15によって演算された分岐先アドレスの上位32ビットを保持する。分岐先上位アドレスバッファ22B6は、上位アドレステーブル81、71等を更新するための上位アドレスを保持する。上位アドレステーブル81、71が更新されるのは、例えば、分岐先の上位アドレスが分岐元の上位アドレスから変化し、かつ分岐先の上位アドレスが、上位アドレステーブル81、71に登
録されていない新たな上位アドレスであった場合が想定される。この場合、新たな上位アドレスは、演算器15で算出されている。
上位アドレステーブル更新指示信号生成論理が真(オン、’1’)を出力すると、分岐先上位アドレスバッファ22B6が保持する分岐先アドレスの上位32ビットは、H32CODEと対応づけて、H32デコーダ8の上位アドレステーブル81、およびH32エンコーダ7の
上位アドレステーブル71に登録される。ただし、図では、H32デコーダ8の上位アドレ
ステーブル81への登録経路が例示されている。
図12を例にして、上位アドレス切替判定部22Bの上位アドレステーブル更新指示信号生成論理を説明する。上位アドレス切替判定部22Bは、現在のプログラムカウンタ値の上位32ビットを保持するプログラムカウンタバッファ(以下、PCUバッファ22B7)、分岐元アドレスの上位32ビットに対応するH32CODEを保持する分岐元アドレスバ
ッファ(以下、分岐元コードバッファ22B8)、分岐先アドレスの上位32ビットに対応するH32CODEを保持する分岐先アドレスコードバッファ(以下、分岐先コードバッファ
22B9)を有する。ここで、分岐元アドレスとは、例えば、プログラムカウンタ値である。また、分岐先アドレスとは、例えば、演算器15で算出された分岐先アドレスである。
なお、図12では、分岐先上位アドレスバッファ22B6、PCUバッファ22B7、分岐元コードバッファ22B8、分岐先コードバッファ22B9にスレッドの番号(th0
)が記載されている。また、上位アドレス変換無効化信号およびその他の要因による投機実行命令キャンセル要求にも、スレッドの番号(th0)が記載されている。スレッドの番
号(th0)は、当該スレッドを意味する。
一方、図12には、上位アドレス更新指示信号(th1)も記載されている。上位アドレ
ス更新指示信号(th1)は、他のスレッドからの信号を意味する。すなわち、図12は、
SMT方式のプロセッサ1に対応するため、各種レジスタが多重化されている。したがって、SMT方式を採用しない場合には、上位アドレス切替判定部22Bは、分岐先上位アドレスバッファ22B6、PCUバッファ22B7、分岐元コードバッファ22B8、分岐先コードバッファ22B9をスレッドの番号(th0等)で多重化しなくてもよい。また
、SMT方式を採用しない場合には、上位アドレス切替判定部22Bには、上位アドレス変換無効化信号保持回路22B4を設けなくてもよい。
上位アドレス切替判定部22Bは、プログラムカウンタ19Aから現在のプログラムカウンタ値の上位32ビットを取得し、PCUバッファ22B7に保持すればよい。また、上位アドレス切替判定部22Bは、プログラムカウンタ19AのH32エンコーダ7−2か
ら分岐元のH32CODEを取得し、演算器15で算出されエンコーダ7−1でエンコードされ
た分岐先アドレスのH32H32CODEを取得する。上位アドレス切替判定部22Bは、分岐元のH32CODEと分岐先のH32CODEをそれぞれ分岐元コードバッファ22B8と分岐先コードバッファ22B9に保持すればよい。そして、上位アドレス切替判定部22Bは、コンパレータ22BAにより、分岐先上位アドレスバッファ22B6が保持する分岐先アドレスの上位32ビットと、PCUバッファ22B7が保持するプログラムカウンタ値の上位32ビットが一致するか否かを判定し、不一致の場合に、真(オン、’1’)をANDゲート22B2およびANDゲート22BDの1つの入力端子に出力する。
また、上位アドレス切替判定部22Bは、コンパレータ22BB、22BCによって、分岐元コードバッファ22B8、分岐先コードバッファ22B9が保持する分岐元アドレスの上位32ビットのH32CODEおよび分岐先アドレスの上位32ビットのH32CODEの少なくとも一方が値’100’であるか否かを判定する。上位アドレス切替判定部22Bは、判
定結果をORゲート22B1によってOR演算し、ANDゲート22B2の1つの入力端子に出力する。
さらに、ANDゲート22B1の1つの入力端子には、命令完了制御部18からの分岐命令COMMIT信号が入力される。したがって、ANDゲート22B2は、
(1)分岐先上位アドレスバッファ22B6の分岐先上位アドレスとプログラムカウンタ値の上位32ビットが不一致である;
(2)分岐命令の命令アドレスの上位アドレスのH32CODEと分岐先アドレスの上位アドレ
スのH32CODEの少なくとも1つが’100’である;
(3)分岐命令COMMIT信号が発せられたこと;
を条件に投機実行命令キャンセル信号を生成し、プロセッサ1の各部、例えば、命令フェッチ制御部11,命令キャッシュ24、分岐予測部20、命令完了制御部18、プログラムカウンタ制御部19、分岐制御部22等に出力する。以上の構成によって、分岐命令の分岐先が上位アドレステーブル81(および71)に未登録であって、4GBを越える分岐命令が実行されたことが認識できる。したがって、上位アドレス切替判定部22Bは、
4GBを越える分岐を行う分岐命令について、分岐予測の失敗を認識できる。
また、上位アドレス切替判定部22Bは、分岐先コードバッファ22B9が保持するH32CODEの値が‘100’であるか否かの判定結果をANDゲート22BDの1つの入力端子に出力する。さらに、ANDゲート22BDの1つの入力端子には、命令完了制御部18からの分岐命令COMMIT信号が入力される。ANDゲート22BDは、コンパレータ22BA、22BCからの出力と分岐命令COMMIT信号とをAND演算して分岐先上位アドレス不一致信号を生成し、ANDゲート22B5の1つの入力端子に出力する。
ANDゲート22B5は、ANDゲート22B2からの分岐先上位アドレス不一致信号と、上位アドレス変換無効化信号保持回路22B4からの上位アドレス変換無効化信号の反転値(否定論理)とをAND演算し、上位アドレス更新要求指示信号を生成する。上位アドレス更新要求指示信号によって、分岐先上位アドレスバッファ22B6に保持されていた分岐先アドレスの上位アドレスが上位アドレステーブル81、71の空きエントリに登録される。また、上位アドレステーブル81、71の空きエントリがない場合、古いエントリから順次上書きされる。したがって、上位アドレス更新要求指示信号によって、プロセッサ1内のH32データ8の上位アドレステーブル81、およびH32エンコーダ7の上位アドレステーブル7が更新される。なお、SMT方式のプロセッサ1においては、上位アドレス更新要求指示信号は、例えば、スレッドごとに多重化されてレジスタに保持され、他のスレッドに通知される。
上位アドレス変換無効化信号保持回路22B4は、例えば、ラッチである。上位アドレス変換無効化信号保持回路22B4のセット端子には、他のスレッド(th1)に対応する
上位アドレス切替判定部22Bからの上位アドレス更新指示信号(th1)によってセット
される。上位アドレス変換無効化信号保持回路22B4は、上位アドレス変換無効化指示部の一例である。
また、上位アドレス変換無効化信号保持回路22B4は、例えば、投機実行命令キャンセル要求またはその他の要因による投機実行命令キャンセル要求をOR演算するORゲート22B3からの出力信号によってリセットされる。ここで、その他の要因による投機実行命令キャンセル要求とは、例えば、上記で説明した上位アドレス切替判定部22Bの上位アドレステーブル更新指示信号生成論理以外の論理による投機実行命令キャンセル要求である。その他の要因による投機実行命令キャンセル要求は、例えば、図6で説明したように、分岐リザベーションステーション22Aにおいて、分岐予測部20での分岐予測の結果と、演算器15での分岐命令の実行結果とが一致しなかった場合に、分岐リザベーシ
ョンステーション22Aから発せられる。
上述のように、上位アドレステーブル更新指示信号生成は、ANDゲート22B5によって、上記の分岐先上位アドレスの不一致検出信号(ANDゲート22BDの出力)と、
上位アドレス変換無効化信号の負極性論理とのANDで構成する。この構成によって、上位アドレス変換無効化信号が真(オン、‘1’)の場合に、ANDゲート22B5は、偽(オフ、‘0’)となり、上記の分岐先上位アドレスの不一致が検出されても、上位アドレステーブルは更新されない。上位アドレス変換無効化信号が真(オン、‘1’)の場合、H32エンコーダ7は、上位アドレステーブル71と、H32CODEとの比較の結果に拘わらず、'100'を出力する。したがって、すでに上位アドレスが上位アドレステーブル71に登録されているにも拘わらず、ANDゲート22BDは、再度上位アドレスを上位アドレステーブル71に登録するための更新指示信号を発行しようと動作する。そこで、ANDゲート22B5は、上位アドレステーブル更新指示信号が真(オン、‘1’)の場合に、上位アドレステーブル更新指示信号を発行しないように阻止する。
なお、上位アドレス切替判定部22Bの分岐先上位アドレスバッファ22B6はCOMMITする前の分岐命令のうち最も古い命令の分岐先アドレスの上位アドレス32ビットを保持している。分岐制御部22は、分岐先アドレスの下位アドレス32ビットやH32CODEと共に分
岐先アドレスの上位アドレス32ビットをプログラムカウンタ制御部19へ出力する。
さらに、図6のように、上位アドレス変換無効化信号は、プロセッサ1内のそれぞれのH32エンコーダ7およびH32デコーダ8に伝達される。さらに、図6のように、プログラムカウンタ制御部19はH32デコーダ8−2とH32エンコーダ7−2を有しており、分岐命令の実行が完了したときには分岐制御部22から分岐先アドレスのH32CODEを受け取
る。そして、プログラムカウンタ制御部19は分岐制御部22から受け取った分岐先アドレスのH32CODEをH32デコーダ8−2によりデコードしてプログラムカウンタ19Aに次の命令アドレスとして上位アドレスの登録を行う。ただし、上位アドレステーブル81に一致するエントリがない場合には、本実施例では、H32CODEは、'100'となっている。こ
の場合に、プログラムカウンタ制御部19は、H32デコーダ8−2の出力ではなく、分岐
先上位アドレスバッファ22B6からの出力をセレクタ19Bで選択して、プログラムカウンタ19Aの更新を行う(図6参照)。プログラムカウンタ制御部19が次に実行する命令の正しい命令アドレスを取得するためである。
また、プログラムカウンタ制御部19は、プログラムカウンタ値の上位アドレスの値をH32エンコーダ7でH32CODEに変換し、命令フェッチ制御部11の命令フェッチアドレス選択論理へ転送する。
上位アドレステーブル71、81等の更新は、前述した上位アドレス切替判定部22Bにより制御する。プロセッサ内の複数の上位アドレステーブル71、81は、同じタイミングで更新される。以下、1つのH32デコーダ8の上位アドレステーブル81の更新例を
説明する。
<上位アドレステーブル更新手順>
上位アドレステーブル81のエントリの更新順はいろいろな構成が考えられるが、本実施例の上位アドレス切替判定部22Bは、簡単のため、最も古いエントリを順に書き潰していく構成としている。上位アドレステーブル81の更新では、前述した通り分岐予測時と分岐先アドレスの算出時とで上位アドレステーブルが一致するように実行される。このため、上述のように、本実施例のプロセッサ1は、分岐予測アドレスと、実際に分岐した分岐先との不一致を検出する。そして、不一致を検出した場合、プロセッサ1は、正しいアドレスから再命令フェッチを行うとともに、分岐先の上位アドレスが上位アドレスコー
ドに未登録の値へ変化する場合には上位アドレステーブル81を更新する。以上のような本実施例におけるプロセッサ1のハードウェア構成を基にした上位アドレス更新処理を以下に説明する。
図7に、上位アドレステーブル更新動作の手順を例示する。図7の処理は、S4Aの処理以外の処理は、比較例として示した図2、図3の処理と同様である。なお、図7のS4Aの処理では、上位アドレステーブルに上位アドレスが未登録のとき、上位アドレスは未登録を示すコード’100’にエンコードされる。
下位アドレス32ビットとH32CODEによって、予測分岐先と、演算器15で算出された分
岐先との不一致は、分岐リザベーションステーション22Aのエントリに格納された分岐先と演算結果による分岐先との比較により検出可能である。命令フェッチ制御部11は、分岐先アドレス不一致として分岐命令がCOMMITとなるタイミングで再命令フェッチ要求を行う。なお、再命令フェッチは、投機実行された命令のキャンセル後に行われる命令フェッチである点を除いて、通常の命令フェッチと同様の処理である。また同じタイミングにて、上位アドレス切替判定部22Bは、上位アドレステーブルの更新を実行する。
以上のように、投機実行命令キャンセル要求によって後続の投機実行命令はすべてキャンセルされ、変更後の上位アドレステーブルを参照して分岐予測や命令フェッチが再開される。このため、正しいアドレスによる命令フェッチを保証できる。ただし、以上の処理は、H32CODEが特殊コード’100’以外の場合の処理である。
しかし、演算器で算出された分岐命令の分岐先アドレスのH32CODEの値が上位アドレス
テーブルにエントリがないことを示す特殊コード’100’であった場合、プロセッサ1は、H32CODEが一致しても上位アドレスが一致しているかは保証できない。すなわち、プ
ロセッサ1は、投機実行している後続の分岐先命令が正しいかの保証をできない。分岐命令の命令アドレス(プログラムカウンタ値)のH32CODEの値が上位アドレステーブルにエ
ントリがないことを示す特殊コード’100’であった場合も同様である。分岐先アドレスのH32CODEの値が‘100’以外であった場合、プロセッサ1は分岐予測が外れない間
は投機実行命令を継続する。そのため、上位アドレスが変化する分岐命令が連続する場合、分岐命令の命令アドレスのH32CODEの値が‘100’であっても分岐命令の命令アドレ
スの上位アドレスがプログラムカウンタ19Aの上位アドレスがと必ずしも一致しない場
合があるからである。
そこで、プロセッサ1は、分岐命令の命令アドレスのH32CODEが'100'であるか、分
岐命令の分岐先アドレスのH32CODEが'100'であるかの条件の成立を確認する(図12
のORゲート22B1)。そして、プロセッサ1は、さらに分岐先上位アドレスバッファ22B6とプログラムカウンタ19Aとの比較を行い、H32CODE=’100’とのAND
条件をとる。上位アドレステーブルにエントリが存在せず、かつ分岐先アドレスの上位アドレスがプログラムカウンタの上位アドレスと不一致であると、分岐予測時の分岐先の上位アドレスは正しいことが保証されない。このため、上位アドレス切替判定部22Bは、分岐先アドレス不一致として分岐命令がCOMMITとなるタイミングで投機実行命令キャンセル要求を発行し、さらに、上位アドレステーブルの更新を実行する。また、プログラムカウンタ制御部11は、再命令フェッチ要求を命令キャッシュ24に出力する。ここで、上位アドレス切替判定部22Bによって上位アドレステーブルにエントリが存在せず、かつ上位アドレスの不一致を検出したら必ず再命令フェッチとなって後続の投機命令実行はキャンセルされるため、分岐先上位アドレスバッファ22B6はCOMMITする前の分岐命令のうち最も古い分岐命令の分岐先上位アドレスを1命令分保持すれば十分である。なお、図8、図9で例示するように、プロセッサ1がSMT方式の場合には、分岐先上位アドレスバッファ22B6はCOMMITする前の分岐命令のうち最も古い分岐命令の分岐先上位アドレ
スを1命令分スレッドごとに保持すればよい。
図8に、SMT方式での上位アドレステーブル更新に伴う他スレッド無効化制御がない場合の問題点を例示する。図8の処理は、図7の場合と同様である。ただし、図8では、一点鎖線LCの上側と下側とで、他のスレッド(th1)での処理によって、現在のスレッ
ド(th0)の上位アドレステーブルが更新されたことを前提としている。また、図9に、S
MT方式での上位アドレステーブル更新に伴う問題点の解決方法を例示する。図9の処理は、S4Bの処理を除いて、図8と同様である。
SMTで上位アドレステーブルをスレッド間で共用する場合においても、図7と同様、プロセッサ1の上位アドレス切替判定部22Bは、演算結果の分岐先アドレスと分岐予測された分岐先アドレスとにおいて、上位アドレスの不一致を検出する処理を実行する。しかしながら、仮にスレッド(th1)が命令実行中にスレッド(th0)の要因で上位アドレステーブルを更新した場合、現在のスレッド(th1)において、分岐予測時と演算後とにお
いて、参照する上位アドレステーブルが異なっている。このため、分岐予測時と演算後とにおいて、分岐先の上位アドレスが異なっていても、それぞれの上位アドレスに対応するH32CODEが同一となる可能性がある(図8のS7)。
この場合、上位アドレス切替判定部22Bは、分岐先アドレスの不一致が検出できない。このため、誤った予測による後続の投機実行命令のキャンセルができない。その結果、本来の分岐先アドレス以外のアドレスに分岐した後の処理が続行されるという問題が生じる。そこで、上位アドレス更新後に他のスレッドが上位アドレステーブルを参照しないように、上位アドレス切替判定部22Bは、上位アドレステーブル81、71等を更新するための上位アドレステーブル更新指示信号を他のスレッドにも通知する。そして、上位アドレス切替判定部22Bは、他のスレッドから通知された上位アドレステーブル更新指示信号により、上位アドレス変換無効化信号保持回路22B4をセットし、上位アドレス変換無効化信号を生成する(図12)。H32エンコーダ7は、上位アドレス変換無効化信号
が’1’であったらH32CODEを強制的に’100’に変換する。この変換によって、上位アドレス切替判定部22Bの上位アドレステーブル更新指示信号生成論理は、分岐先アドレスの不一致を検出し、投機実行命令キャンセル要求を発することが可能となる(図12)。したがって、プロセッサ1は、誤った予測による後続の投機実行命令のキャンセルが可能となる(図9のS7−SA)。一旦命令フェッチから処理を再開すれば、そのスレッドについても正しいアドレスでの命令フェッチが保証可能である。
上述のように、上位アドレス変換無効化信号保持回路22B4は他スレッドによる上位アドレステーブル更新指示信号により’1’にセットし、自スレッドの投機実行命令キャ
ンセル要求信号により’0’にリセットする1ビットのラッチによって構成することができる。さらに、図11のように、H32デコーダ8は、上位アドレス変換無効化信号が’1’である場合は常に分岐先アドレスの不一致を検出する。このため、上位アドレス変換無効化信号保持回路22B4によって、他スレッドで上位アドレステーブル81、71等が更新された場合の分岐予測部20で予測された分岐先アドレスと、演算器15で演算された分岐先との不一致が検出できない状態を回避できる。
以上述べたように、本実施例では、上位アドレステーブル71、81を動的に置き換える構成について示した。しかし、特に頻出するパターンについては固定的にコードを割り当てて動的な上位アドレスパターンと固定的な上位アドレスパターンを混在させることで場合によってはより効率的となる分岐予測を実現することも可能である。
また本実施例では、H32CODEを3ビットの信号で実現したが、将来的にプログラムのサイズが拡大して64ビットアドレス空間へのデータや命令の割付量が増えたとしても、H32COD
Eのビット数を拡張することで同時期にコード化可能なアドレスのパターンを増やして少
ない変更で効率的な分岐予測性能を維持することが可能である。また、本実施例ではスレッド数を2の場合に絞って記述してあるが、スレッド間で上位アドレステーブルを共有する構成のため、将来的にスレッド数を増やしても制御をほとんど変更することなく同様の構成を実現可能である。ただし、当然、スレッド数が1のプロセッサにも、本実施形態の構成は、適用可能である。その場合には、すでに述べたように、図12の上位アドレス変換無効化信号保持回路22B4は不要となる。
以上の構成を実現することで、プロセッサ1は、上位アドレステーブル71、81に、プログラム実行中に動的に命令アドレスの上位アドレスと、上位アドレスをコード化するH32CODEとの対応関係を記憶し、上位アドレスをH32CODEに変換し、効率的に、分岐予測部20等の処理を実現できる。
さらに、プロセッサ1は、プログラム実行中に動的に上位アドレステーブル71、81を更新することにより生じる問題を解決できる。すなわち、上位アドレステーブルの更新タイミングを投機実行キャンセル要求が発生したタイミングに制限することで、分岐予測時の分岐先アドレスと、演算結果の分岐先アドレスとの不一致を検出できる。
また、プロセッサ1は、上位アドレステーブル71に未登録の上位アドレスを1つのコード、例えば、’100’にコード化することで、未登録の上位アドレスを統一的に処理できる。さらに、プロセッサ1は、上位アドレステーブル81に未登録のH32CODEをプロ
グラムカウンタ値の上位アドレスにデコードすることで、例えば、命令キャッシュ24のエントリの書き潰しを抑制することが可能となる。
また、プロセッサ1がSMT方式を採用する場合には、上位アドレス更新指示信号を他のスレッドを実行中の上位アドレス切替判定部22Bに通知することで、1つのスレッドでの上位アドレステーブル71、82の更新による他のスレッドへの影響を抑止できる。<その他>
本実施形態は、以下の態様(以下、付記という)を含む。各付記は、他の付記の構成と組み合わせてもよい。
(付記1)
命令を取得する取得段階と前記命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の前記取得段階で命令の記憶元である命令アドレスから命令を取得する取得部と、
命令処理がなされた命令の命令アドレスの上位ビット部分と前記命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を登録する対応関係記憶部と、
命令アドレスに含まれる上位ビット部分を前記対応関係に基づいて上位アドレス情報に符号化する符号化部と、
前記対応関係と上位アドレス情報から上位ビット部分を復元する復号化部と、
を備える演算処理装置。
(付記2)
前記命令処理がなされる命令が分岐命令である場合に、前記分岐命令の分岐先アドレスまたは分岐命令の命令アドレスの少なくとも一方についての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときに、前記分岐命令に対する分岐予測をキャンセルするとともに、前記分岐命令の分岐先アドレスについての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときには、前記対応関係を更新する切替判定部をさらに備える付記1に記載の演算処理装置。
(付記3)
前記符号化部は、前記対応関係が登録されていない命令アドレスの上位ビット部分に対
しては、未登録を示す符号を生成する付記1または2に記載の演算処理装置。
(付記4)
前記取得部が取得する命令の命令アドレスを指示するプログラムカウンタをさらに備え、
前記復号化部は、前記対応関係が登録されていない上位アドレス情報に対しては、前記プログラムカウンタの指示する命令アドレスから前記上位ビット部分を復号する付記1から3のいずれか1項に記載の演算処理装置。
(付記5)
前記対応関係記憶部は前記対応関係を複数のスレッドの間で共用して記憶し、
第1のスレッドにおいて前記対応関係を更新したときに、第2のスレッドにおいて命令処理を前記取得段階からやり直すまでの間、前記符号化部に対して前記上位アドレスの対応関係が登録されていないときの処理を実行させ、前記復号化部に対して前記上位アドレス情報の対応関係が登録されていないときの処理を実行させる上位アドレス変換無効化指示部をさらに備える付記1から4のいずれ1項に記載の演算処理装置。
(付記6)
命令を取得する取得段階と前記命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の前記取得段階で命令の記憶元である命令アドレスから命令を取得する取得ステップと、
命令処理がなされた命令の命令アドレスの上位ビット部分と前記命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を対応関係記憶部に登録するステップと、
命令アドレスに含まれる上位ビット部分を前記対応関係に基づいて上位アドレス情報に符号化する符号化ステップと、
前記対応関係と上位アドレス情報から上位ビット部分を復元する復号化ステップと、を実行する演算処理方法。
(付記7)
前記命令処理がなされる命令が分岐命令である場合に、前記分岐命令の分岐先アドレスまたは分岐命令の命令アドレスの少なくとも一方についての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときに、前記分岐命令に対する分岐予測をキャンセルするとともに、前記分岐命令の分岐先アドレスについての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときには、前記対応関係を更新する切替判定ステップをさらに実行する付記6に記載の演算処理方法。
(付記8)
前記符号化ステップでは、前記対応関係が登録されていない命令アドレスの上位ビット部分に対しては、未登録を示す符号が生成される付記6または7に記載の演算処理方法。(付記9)
前記復号化ステップでは、前記対応関係が登録されていない上位アドレス情報に対しては、プログラムカウンタの指示する命令アドレスから前記上位ビット部分が復号される付記6から8のいずれか1項に記載の演算処理方法。
(付記10)
前記対応関係記憶部は、前記対応関係を複数のスレッドの間で共用して記憶し、
第1のスレッドにおいて前記対応関係を更新したときに、第2のスレッドにおいて命令処理を前記取得段階からやり直すまでの間、前記符号化部に対して前記上位アドレスの対応関係が登録されていないときの処理を実行させ、前記復号化部に対して前記上位アドレス情報の対応関係が登録されていないときの処理を実行させる上位アドレス変換無効化指示ステップをさらに実行する付記6から9のいずれか1項に記載の演算処理方法。
1 プロセッサ
3 メモリ
5 インターコネクト制御部
7 H32エンコーダ
8 H32デコーダ
11 命令フェッチ制御部
12 命令バッファ
13 命令デコーダ
14 命令発行制御部
15 演算器
16 オペランドキャッシュ
17 レジスタ
18 命令完了制御部
19 プログラムカウンタ制御部
20 分岐予測部
21 命令アドレスバッファ
22 分岐制御部
22A 分岐リザベーションステーション
22B 上位アドレス判定部
23 分岐履歴更新部
24 命令キャッシュ
25 二次キャッシュ
71、81 上位アドレステーブル

Claims (6)

  1. 命令を取得する取得段階と前記命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の前記取得段階で命令の記憶元である命令アドレスから命令を取得する取得部と、
    命令処理がなされた命令の命令アドレスの上位ビット部分と前記命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を登録する対応関係記憶部と、
    命令アドレスに含まれる上位ビット部分を前記対応関係に基づいて上位アドレス情報に符号化する符号化部と、
    前記対応関係と上位アドレス情報から上位ビット部分を復元する復号化部と、を備える演算処理装置。
  2. 前記命令処理がなされる命令が分岐命令である場合に、前記分岐命令の分岐先アドレスまたは分岐命令の命令アドレスの少なくとも一方についての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときに、前記分岐命令に対する分岐予測をキャンセルするとともに、前記分岐命令の分岐先アドレスについての対応関係が前記対応関係記憶部に登録されておらず、かつ、前記分岐命令が前記上位アドレスを変更する範囲の分岐先に分岐するときには、前記対応関係を更新する切替判定部をさらに備える請求項1に記載の演算処理装置。
  3. 前記符号化部は、前記対応関係が登録されていない命令アドレスの上位ビット部分に対しては、未登録を示す符号を生成する請求項1または2に記載の演算処理装置。
  4. 前記取得部が取得する命令の命令アドレスを指示するプログラムカウンタをさらに備え、
    前記復号化部は、前記対応関係が登録されていない上位アドレス情報に対しては、前記プログラムカウンタの指示する命令アドレスから前記上位ビット部分を復号する請求項1から3のいずれか1項に記載の演算処理装置。
  5. 前記対応関係記憶部は、前記対応関係を複数のスレッドの間で共用して記憶し、
    第1のスレッドにおいて前記対応関係を更新したときに、第2のスレッドにおいて命令処理を前記取得段階からやり直すまでの間、前記符号化部に対して前記上位アドレスの対応関係が登録されていないときの処理を実行させ、前記復号化部に対して前記上位アドレス情報の対応関係が登録されていないときの処理を実行させる上位アドレス変換無効化指示部をさらに備える請求項1から4のいずれ1項に記載の演算処理装置。
  6. 命令を取得する取得段階と前記命令を実行する実行段階とを含む命令処理を繰り返す演算処理装置の前記取得段階で命令の記憶元である命令アドレスから命令を取得する取得ステップと、
    命令処理がなされた命令の命令アドレスの上位ビット部分と前記命令アドレスの上位ビット部分を符号化する上位アドレス情報との対応関係を対応関係記憶部に登録するステップと、
    命令アドレスに含まれる上位ビット部分を前記対応関係に基づいて上位アドレス情報に符号化する符号化ステップと、
    前記対応関係と上位アドレス情報から上位ビット部分を復元する復号化ステップと、
    命令処理がなされた分岐命令の分岐先アドレスに対応する上位アドレス情報と下位ビット部分とを記憶した履歴情報にしたがって、前記取得部が取得する命令が分岐命令であるか否かを予測する分岐予測ステップと、
    を実行する演算処理方法。
JP2012264654A 2012-12-03 2012-12-03 演算処理装置、演算処理方法 Active JP6179093B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2012264654A JP6179093B2 (ja) 2012-12-03 2012-12-03 演算処理装置、演算処理方法
US14/060,050 US20140156973A1 (en) 2012-12-03 2013-10-22 Processor and control method of processor
CN201310532943.4A CN103853528A (zh) 2012-12-03 2013-10-31 处理器和处理器的控制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012264654A JP6179093B2 (ja) 2012-12-03 2012-12-03 演算処理装置、演算処理方法

Publications (2)

Publication Number Publication Date
JP2014109953A true JP2014109953A (ja) 2014-06-12
JP6179093B2 JP6179093B2 (ja) 2017-08-16

Family

ID=50826691

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012264654A Active JP6179093B2 (ja) 2012-12-03 2012-12-03 演算処理装置、演算処理方法

Country Status (3)

Country Link
US (1) US20140156973A1 (ja)
JP (1) JP6179093B2 (ja)
CN (1) CN103853528A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021059906A1 (ja) * 2019-09-27 2021-04-01 日本電気株式会社 分岐予測回路および命令処理方法

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6089890B2 (ja) * 2013-03-29 2017-03-08 富士通株式会社 ストレージ制御装置、ストレージ制御装置の制御方法およびストレージ制御装置の制御プログラム
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US9396044B2 (en) * 2014-04-25 2016-07-19 Sony Corporation Memory efficient thread-level speculation
US10007524B2 (en) * 2014-11-14 2018-06-26 Cavium, Inc. Managing history information for branch prediction
CN107358126B (zh) * 2017-06-14 2020-04-03 北京多思安全芯片科技有限公司 一种处理器

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07210383A (ja) * 1994-01-04 1995-08-11 Intel Corp 分岐命令予測機構及び予測方法
US6122709A (en) * 1997-12-19 2000-09-19 Sun Microsystems, Inc. Cache with reduced tag information storage
JP2001265651A (ja) * 2000-03-23 2001-09-28 Matsushita Electric Ind Co Ltd データ処理装置
WO2007099605A1 (ja) * 2006-02-28 2007-09-07 Fujitsu Limited 圧縮したアドレス情報により分岐予測する処理装置
US20090249048A1 (en) * 2008-03-28 2009-10-01 Sergio Schuler Branch target buffer addressing in a data processor
JP2013004101A (ja) * 2011-06-17 2013-01-07 Freescale Semiconductor Inc データプロセッサ内での分岐先バッファのアドレス指定

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1299198C (zh) * 2001-06-27 2007-02-07 凌阳科技股份有限公司 由可改变的指令格式而提高程序码密集度的微控制器结构
US6704362B2 (en) * 2001-07-06 2004-03-09 Koninklijke Philips Electronics N.V. Resource scalable decoding
US7954038B2 (en) * 2006-12-29 2011-05-31 Intel Corporation Fault detection
GB2488980B (en) * 2011-03-07 2020-02-19 Advanced Risc Mach Ltd Address generation in a data processing apparatus

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07210383A (ja) * 1994-01-04 1995-08-11 Intel Corp 分岐命令予測機構及び予測方法
US6122709A (en) * 1997-12-19 2000-09-19 Sun Microsystems, Inc. Cache with reduced tag information storage
JP2001265651A (ja) * 2000-03-23 2001-09-28 Matsushita Electric Ind Co Ltd データ処理装置
WO2007099605A1 (ja) * 2006-02-28 2007-09-07 Fujitsu Limited 圧縮したアドレス情報により分岐予測する処理装置
US20090249048A1 (en) * 2008-03-28 2009-10-01 Sergio Schuler Branch target buffer addressing in a data processor
JP2013004101A (ja) * 2011-06-17 2013-01-07 Freescale Semiconductor Inc データプロセッサ内での分岐先バッファのアドレス指定

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JAN HOOGERBRUGGE: "Cost-Efficient Branch Target Buffers", PROCEEDINGS OF 6TH INTERNATIONAL EURO-PAR CONFERENCE (EURO-PAR 2000 PARALLEL PROCESSING), JPN6015045235, August 2000 (2000-08-01), DE, pages 950 - 959, ISSN: 0003579205 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021059906A1 (ja) * 2019-09-27 2021-04-01 日本電気株式会社 分岐予測回路および命令処理方法
JP2021056598A (ja) * 2019-09-27 2021-04-08 日本電気株式会社 分岐予測回路および命令処理方法
JP7152376B2 (ja) 2019-09-27 2022-10-12 日本電気株式会社 分岐予測回路、プロセッサおよび分岐予測方法

Also Published As

Publication number Publication date
US20140156973A1 (en) 2014-06-05
JP6179093B2 (ja) 2017-08-16
CN103853528A (zh) 2014-06-11

Similar Documents

Publication Publication Date Title
JP6179093B2 (ja) 演算処理装置、演算処理方法
JP6526609B2 (ja) プロセッサ
JP4287799B2 (ja) プロセッサシステムおよびスレッド切り替え制御方法
JP5043560B2 (ja) プログラム実行制御装置
US20180004530A1 (en) Advanced processor architecture
US10078518B2 (en) Intelligent context management
CN108196884B (zh) 利用生成重命名的计算机信息处理器
US8615644B2 (en) Processor with hardware thread control logic indicating disable status when instructions accessing shared resources are completed for safe shared resource condition
US9047079B2 (en) Indicating disabled thread to other threads when contending instructions complete execution to ensure safe shared resource condition
JP2014002735A (ja) ゼロサイクルロード
US10853072B2 (en) Arithmetic processing apparatus and method of controlling arithmetic processing apparatus
US10289414B2 (en) Suppressing branch prediction on a repeated execution of an aborted transaction
US9928128B2 (en) In-pipe error scrubbing within a processor core
CN114201219B (zh) 指令调度方法、指令调度装置、处理器及存储介质
JP2013069129A (ja) 演算処理装置及び演算処理装置の制御方法
US20140025932A1 (en) Processor, information processing device, and control method of processor
US10102003B2 (en) Intelligent context management
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
US9594564B2 (en) Arithmetic processing device and control method of arithmetic processing device
JP3683439B2 (ja) 分岐予測を抑止する情報処理装置および方法
US9983880B2 (en) Method and apparatus for improved thread selection
US20190163494A1 (en) Processor and pipelining method
US11720366B2 (en) Arithmetic processing apparatus using either simple or complex instruction decoder
US20110083030A1 (en) Cache memory control device, cache memory device, processor, and controlling method for storage device
US11620235B1 (en) Validation of store coherence relative to page translation invalidation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150804

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160531

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160614

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160815

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170321

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170620

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170703

R150 Certificate of patent or registration of utility model

Ref document number: 6179093

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150