JP2018005488A - 演算処理装置及び演算処理装置の制御方法 - Google Patents

演算処理装置及び演算処理装置の制御方法 Download PDF

Info

Publication number
JP2018005488A
JP2018005488A JP2016130362A JP2016130362A JP2018005488A JP 2018005488 A JP2018005488 A JP 2018005488A JP 2016130362 A JP2016130362 A JP 2016130362A JP 2016130362 A JP2016130362 A JP 2016130362A JP 2018005488 A JP2018005488 A JP 2018005488A
Authority
JP
Japan
Prior art keywords
loop
instruction
unit
decoding
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2016130362A
Other languages
English (en)
Inventor
亮平 岡崎
Ryohei Okazaki
亮平 岡崎
則人 五明
Norihito Gomyo
則人 五明
秋月 康伸
Yasunobu Akizuki
康伸 秋月
崇志 鈴木
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 JP2016130362A priority Critical patent/JP2018005488A/ja
Priority to US15/601,086 priority patent/US10430196B2/en
Publication of JP2018005488A publication Critical patent/JP2018005488A/ja
Pending legal-status Critical Current

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/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/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • G06F9/261Microinstruction address formation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • 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/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

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

Abstract

【課題】ループ処理の予測により消費電力を低減することができる演算処理装置を提供することを課題とする。
【解決手段】演算処理装置は、アドレス生成部(201)が生成したアドレスを基に分岐先アドレス及びループ処理を予測する分岐予測部(205)と、アドレス生成部が生成したアドレスの命令を格納する命令バッファ部(203)と、命令バッファ部に格納された命令をデコードする命令デコード部(204)と、予測されたループ処理の命令が命令デコーダによりデコードされたデコード結果又はデコード途中結果を格納し、ループ処理に応じて格納したデコード結果又はデコード途中結果を所定回数出力するループバッファ部(222)と、ループバッファ部と命令デコード部の出力のいずれかを選択する選択部(223)を有し、ループバッファ部の出力を選択している期間、アドレス生成部、分岐予測部、命令バッファ部及び命令デコード部の動作を停止させる。
【選択図】図2

Description

本発明は、演算処理装置及び演算処理装置の制御方法に関する。
インストラクションオペレーションを記憶するよう構成されたループバッファを備えた装置が知られている(特許文献1参照)。インストラクションオペレーションは、装置のモードがループバッファモードにあるのを検出するのに応答して、ループバッファからディスパッチされる。装置は、ループバッファに結合されたループバッファコントロールユニットを更に備える。ループバッファコントロールユニットは、複数のインストラクションを含むループ候補のスタートから、ループ候補内の各「行う分岐」への距離を追跡する。そして、ループバッファコントロールユニットは、ループ候補のスタートから各「行う分岐」への距離がループ候補の少なくとも所与の繰り返し数について不変であることを検出するのに応答してループバッファモードを開始する。
また、命令記憶手段から読み出された命令が命令解読手段によって解読され命令解読手段から出力された制御情報により命令実行手段が制御されるデータ処理装置が知られている(特許文献2参照)。制御手段は、第1の上限値以下の個数の一連の命令を繰り返し実行すべき内部状態の発生に応じて、繰り返し実行すべき一連の命令を解読した結果得られる制御情報を制御情報記憶手段に保持させ制御情報記憶手段から繰り返し出力させる。それと共に、制御手段は、命令記憶手段及び命令解読手段の動作を事実上停止させる。
特開2014−13565号公報 特開平9−114660号公報
特許文献1は、ループ候補のスタートから各「行う分岐」への距離がループ候補の少なくとも所与の繰り返し数について不変であることを検出するのに応答してループバッファモードを開始する。特許文献2は、第1の上限値以下の個数の一連の命令を繰り返し実行すべき内部状態の発生に応じて、繰り返し実行すべき一連の命令を解読した結果得られる制御情報を制御情報記憶手段に保持させ制御情報記憶手段から繰り返し出力させる。特許文献1及び2は、命令をデコードした結果得られる制御情報を基にループ処理の判断を行うものである。
1つの側面では、本発明の目的は、ループ処理を予測することにより消費電力を低減することができる演算処理装置及び演算処理装置の制御方法を提供することである。
演算処理装置は、命令をフェッチするアドレスを生成するアドレス生成部と、前記アドレス生成部が生成したアドレスを基に分岐命令の分岐先アドレスを予測し、予測した前記分岐先アドレスを前記アドレス生成部に出力し、前記アドレス生成部が生成したアドレスを基にループ処理を予測する分岐予測部と、前記アドレス生成部が生成したアドレスに対応する命令を格納する命令バッファ部と、前記命令バッファ部に格納された命令をデコードする第1の命令デコード部と、予測された前記ループ処理の命令が前記第1の命令デコード部によりデコードされたデコード結果又はデコード途中結果を格納し、ループ処理に応じて格納した前記デコード結果又は前記デコード途中結果を所定回数出力するループバッファ部と、前記ループバッファ部の出力と前記第1の命令デコード部の出力とのいずれかを選択する選択部とを有し、前記選択部が、前記ループバッファ部の出力を選択している期間、前記ループバッファ部が、前記アドレス生成部、前記分岐予測部、前記命令バッファ部及び前記第1の命令デコード部の動作を停止させる。
1つの側面では、ループ処理を予測することにより消費電力を低減することができる。
図1は、第1の実施形態による情報処理装置の構成例を示す図である。 図2は、演算処理装置の構成例を示す図である。 図3は、ループキャッシュ部の登録及び読み出しを示す図である。 図4は、ループキャッシュ部の構成例を示す図である。 図5は、ループキャッシュメモリへの書き込み動作を示す図である。 図6は、ループキャッシュメモリの読み出し動作を示す図である。 図7は、ループキャッシュメモリの他の読み出し動作を示す図である。 図8は、演算処理装置の制御方法を示すフローチャートである。 図9は、第2の実施形態による演算処理装置の構成例を示す図である。 図10は、第3の実施形態による演算処理装置の構成例を示す図である。 図11は、第4の実施形態による演算処理装置の構成例を示す図である。
(第1の実施形態)
図1は、第1の実施形態による情報処理装置100の構成例を示す図である。情報処理装置100は、例えばサーバであり、複数の演算処理装置101、複数のメモリ102、及びインターコネクト制御部103を有する。演算処理装置101は、例えば中央演算処理装置(CPU)であり、インターコネクト制御部103に接続される。複数の演算処理装置101には、それぞれ、複数のメモリ102が接続される。インターコネクト制御部103は、外部装置104に対して入出力制御を行う。
図2は、図1の演算処理装置101の構成例を示す図である。演算処理装置101は、例えば、スーパースカラプロセッサである。命令フェッチアドレス生成器201は、命令をフェッチするアドレスを生成するために、プログラムカウンタ(PC)219又は分岐予測機構205から入力した命令アドレスを選択し、選択された命令アドレスの命令フェッチリクエストを1次命令キャッシュメモリ202に出力する。分岐予測機構205は、分岐予測部であり、命令フェッチアドレス生成器201により生成されたアドレスを基に分岐命令が分岐するか否かを予測し、分岐する旨を予測した場合には分岐先アドレスを命令フェッチアドレス生成器201に出力する。また、分岐予測機構205は、命令フェッチアドレス生成器201により生成されたアドレスを基にループ処理を予測し、ループ処理を予測した場合にはループ処理タグLOOP_TAGを命令バッファ203に出力する。1次命令キャッシュメモリ202は、命令アドレスの命令フェッチリクエストに応じた命令を命令バッファ203に出力する。また、1次命令キャッシュメモリ202は、その命令が格納されていない場合には、2次キャッシュメモリ220又はメインメモリ221に格納されているその命令を命令バッファ203に出力する。命令バッファ203は、その命令をバッファリングし、プログラムの順番通りに命令デコーダ204に命令を供給する。なお、命令バッファ203は、分岐予測機構205からループ処理タグLOOP_TAGを入力した場合には、その命令にループ処理タグLOOP_TAGを付与してバッファリングし、命令デコーダ204に命令及びループ処理タグLOOP_TAGを供給する。命令デコーダ204は、第1の命令デコーダであり、命令バッファ203に格納されている命令をプログラムの順番通りにデコードし、デコードの結果及びループ処理タグLOOP_TAGを出力する。
ループキャッシュ部222は、ループバッファ部であり、ループ処理タグLOOP_TAGが付与されている命令を入力した場合には、命令デコーダ204によりデコードされた結果を格納し、ループ処理の命令発行順番に応じてその格納した結果をセレクタ223に繰り返し出力する。セレクタ223は、ループキャッシュ部222の出力と命令デコーダ204の出力とのいずれかを選択する。具体的には、セレクタ223は、ループ処理が予測された場合には、ループキャッシュ部222の出力を選択して出力し、ループ処理が予測されていない場合には、命令デコーダ204の出力を選択して出力する。
命令フェッチアドレス生成器201、分岐予測機構205、1次命令キャッシュメモリ202、命令バッファ203及び命令デコーダ204は、セレクタ223がループキャッシュ部222の出力を選択している期間では、ループキャッシュ部222の制御信号224に応じて、動作を停止している。命令フェッチアドレス生成器201、分岐予測機構205、1次命令キャッシュメモリ202、命令バッファ203及び命令デコーダ204は、クロック信号の供給が停止されることにより、動作が停止し、消費電力を低減することができる。
セレクタ223は、命令の種類に従って、命令の実行を制御する主記憶オペランドアドレス生成用リザベーションステーション(RSA:Reservation Station for Address generate)206、固定小数点演算用リザベーションステーション(RSE:Reservation Station for Execute)207、浮動小数点演算用リザベーションステーション(RSF:Reservation Station for Floating)208、分岐命令用リザベーションステーション(RSBR:Reservation Station for BRanch)209にデコードの結果を出力してエントリを作成する。また、セレクタ223は、全てのデコードされた命令を、その順番通りに割り当てられた命令識別子と共に、命令の完了を制御するコミットスタックエントリ(CSE:Commit Stack Entry)210に出力し、エントリを作成する。CSE210は、デコードされた命令を命令の実行順番通りに格納するキュー構造のストレージと、キューの情報と各処理パイプからの完了報告を基に完了処理を行う完了処理回路を有する。デコードされた命令は、CSE210のキューに格納され、命令処理完了の報告を待つ。
デコードされた命令がRSA206、RSE207、RSF208にエントリを作成される場合には、固定小数点更新バッファ215と浮動小数点更新バッファ217に対応するリネーミングを行うことで、アウト・オブ・オーダー実行を行うことが可能となる。各々のリザベーションステーション206〜209でアウト・オブ・オーダー実行された命令は、完了報告がCSE210に出力される。CSE210の完了処理回路は、プログラム本来の実行順序に従って順番に、キューに格納された完了報告待ちの命令の中から完了報告に対応する命令を終了させ、資源の更新を行う。
複数のオペランドアドレス生成器211は、RSA206のエントリに応じて、オペランドのアドレスを生成し、1次データキャッシュメモリ212に出力する。1次データキャッシュメモリ212は、生成されたオペランドアドレスのデータを固定小数点更新バッファ215又は浮動小数点更新バッファ217に出力する。複数の演算器213は、RSE207のエントリに応じて固定小数点演算を行い、演算の実行結果を固定小数点更新バッファ215に格納する。複数の演算器214は、RSF208のエントリに応じて浮動小数点演算を行い、演算の実行結果を浮動小数点更新バッファ217に格納する。リザベーションステーション206〜209から、アウト・オブ・オーダーで実行された命令は、CSE210の制御によりプログラムの順番通りに命令の完了処理を行い、完了した命令に対してのみ、固定小数点レジスタ216や浮動小数点レジスタ218やプログラムカウンタ219などのプログラマブルな資源の更新を行う。プログラムカウンタ219は、現在実行する命令のアドレスを出力する。分岐予測機構205は、RSBR209の分岐命令完了報告に応じて、分岐命令が分岐するか否かを予測し、次に実行するアドレスを命令フェチアドレス生成器201に出力する。
図3は、ループキャッシュ部222の登録及び読み出しを示す図である。ループ処理は、アドレス順の命令A,B,C,D,E,F,Gを有する。命令Gは、分岐命令である。分岐命令Gは、分岐条件を満たす場合には分岐し、分岐命令Gのアドレスより小さい分岐先アドレスの命令Aに進む。この場合、演算処理装置101は、命令A,B,C,D,E,F,Gを繰り返すループ処理を行う。ループ処理は、命令A,B,C,D,E,F,Gを繰り返す処理である。また、分岐命令Gは、分岐条件を満たさない場合には分岐せず、分岐命令Gの次のアドレスの命令に進む。ループキャッシュ部222は、命令デコーダ204から最大4命令を並列に入力する。しかし、ループキャッシュ部222は、分岐命令Gの分岐予測のため、分岐命令Gで並列同時入力の命令が途切れる。よって、ループキャッシュ部222は、第1の入力サイクルでは4個の命令ABCDを並列に入力し、第2の入力サイクルでは3個の命令EFGを並列に入力し、第3の入力サイクルでは4個の命令ABCDを並列に入力し、第4の入力サイクルでは3個の命令EFGを並列に入力する。
ループキャッシュ部222は、デコードされた命令A〜Gを格納(登録)する。ループキャッシュ部222は、供給された順番につめて、デコードされた命令A〜Gを格納する。分岐予測機構205がループ処理を予測した後、ループキャッシュ部222は、ループキャッシュ部222に格納した順番でセレクタ223に出力し、分岐命令Gの後は分岐先アドレスの命令Aに戻り、デコードされた命令A〜Gをセレクタ223に繰り返し出力する。そのため、ループキャッシュ部222は、分岐命令Gの後ろに命令Aをつめて同時並列にセレクタ223に出力できる。よって、ループキャッシュ部222は、第1の出力サイクルでは4個の命令ABCDを並列に出力し、第2の出力サイクルでは4個の命令EFGAを並列に出力し、第3の出力サイクルでは4個の命令BCDEを並列に出力し、第4の出力サイクルでは4個の命令FGABを並列に出力する。したがって、ループキャッシュ部222は、1サイクル当たりに並列に出力する数が1サイクル当たりに並列に入力する数より多い。ループキャッシュ部222を設けることにより、1サイクル当たりに実行可能な命令数が増加し、処理を高速化することができる。
図4は、ループキャッシュ部222の構成例を示す図である。ループキャッシュ部222は、ループキャッシュ制御部403及びループキャッシュメモリ408を有する。ループキャッシュ制御部403は、生成部404〜407を有する。
命令フェッチアドレス生成器201は、命令フェッチのためのアドレスを1次キャッシュメモリ202及び分岐予測機構205に出力する。分岐予測機構205は、RSBR209からの分岐命令Gの実行完了報告及び完了した分岐命令Gの分岐結果を基に、命令フェッチアドレス生成器201が出力するアドレスの命令に対して分岐予測を行い、分岐する旨を予測した場合には分岐先アドレスを命令フェッチアドレス生成器201に出力する。
同時に、分岐予測機構205は、分岐命令Gの実行完了報告及び完了した分岐命令Gの分岐結果を基に、命令フェッチアドレス生成器201が出力するアドレスの命令がループ処理を構成する分岐命令Gであるか否かを予測する。分岐予測機構205は、例えば、分岐命令Gのアドレスより小さい分岐先アドレスに分岐するループバックの分岐命令Gのアドレスを記憶し、そのアドレスの分岐命令Gが分岐先アドレスに分岐した旨の実行完了報告を閾値回数以上入力した場合には、ループ処理であることの予測を行う。すなわち、分岐予測機構205は、リザベーションステーション206〜209以降の実行部により閾値回数以上のループ回数のループ処理が行われたことの実行完了報告をRSBR209から入力した場合には、将来のループ処理を予測し、分岐命令Gに付与するためのループ処理タグLOOP_TAGを命令バッファ203に出力する。この時、分岐予測機構205は、命令バッファ203が分岐命令Gを入力するタイミングに合わせて、ループ処理タグLOOP_TAGを命令バッファ203に出力する。
命令バッファ203は、分岐予測機構205からループ処理タグLOOP_TAGを入力した場合には、1次命令キャッシュメモリ202から入力した分岐命令にループ処理タグLOOP_TAGを付与してバッファリングし、分岐命令401及びループ処理タグLOOP_TAGを命令デコーダ204に出力する。また、命令バッファ203は、分岐予測機構205からループ処理タグLOOP_TAGを入力しない場合には、1次命令キャッシュメモリ202から入力した命令にループ処理タグLOOP_TAGを付与せずにバッファリングし、命令401を命令デコーダ204に出力する。命令デコーダ204は、命令401をデコードすることによりデコードの結果402を生成する。そして、命令デコーダ204は、ループ処理タグLOOP_TAGを入力した場合にはデコードの結果402及びループ処理タグLOOP_TAGを出力し、ループ処理タグLOOP_TAGを入力しない場合にはデコードの結果402を出力する。
生成部404は、ループ処理タグLOOP_TAGを基に、ライトイネーブル信号WRITE_ENBをループキャッシュメモリ408に出力する。生成部405は、ループ処理タグLOOP_TAGを基に、ループコネクト信号LOOP_CONNECTをセレクタ223及び生成部407に出力する。生成部406は、ループ処理タグLOOP_TAGを基に、ライトポインタINPTRをループキャッシュメモリ408に出力する。生成部407は、ループコネクト信号LOOP_CONNECTを基に、リードポインタOUTPTRをループキャッシュメモリ408に出力する。
ループ処理タグLOOP_TAGが入力された場合、1ループを構成する命令は、ループ処理タグLOOP_TAGが付与された命令Gの次の命令Aから次のループ処理タグLOOP_TAGが付与された命令Gまでの命令である。よって、生成部404は、ループ処理タグLOOP_TAGを入力すると、その次の命令Aから書き込みを開始するために、ライトイネーブル信号WRITE_ENBをイネーブル状態にする。ループキャッシュメモリ408は、ライトイネーブル信号WRITE_ENBがイネーブル状態になると、ライトポインタINPTRが示すアドレスに、命令デコーダ204が出力するデコードの結果402を書き込む。ライトイネーブル信号WRITE_ENBがイネーブル状態の場合、生成部406は、ライトポインタINPTRをインクリメントし、ループキャッシュメモリ408は、次のデコードの結果402の書き込みを行う。生成部404は、再びループ処理タグLOOP_TAGを入力すると、命令Gまでの書き込みを終了するため、ライトイネーブル信号WRITE_ENBをディセーブル状態にする。ループキャッシュメモリ408は、ライトイネーブル信号WRITE_ENBがディセーブル状態になると、デコードの結果402の書き込みを終了する。これにより、1ループを構成する命令A〜Gのデコードの結果402は、ループキャッシュメモリ408に書き込まれる。
次に、生成部405は、ループコネクト条件を満たす場合には、ループコネクト信号LOOP_CONNECTを活性化状態にする。ループコネクト条件は、例えば、ループキャッシュメモリ408に1ループの命令A〜Gがオーバーフローせずに正常に書き込まれ、かつ、分岐命令Gの分岐予測のとび先アドレスが命令Aのアドレスと一致する等の条件である。
生成部407は、ループコネクト信号LOOP_CONNECTが活性化状態になると、リードポインタOUTPTRを更新する。ループキャッシュメモリ408は、リードポインタOUTPTRが示すアドレスから、デコードの結果409を読み出してセレクタ223に出力する。ループコネクト信号LOOP_CONNECTが活性化状態の期間では、生成部407は、リードポインタOUTPTRを更新し、ループキャッシュメモリ408は、ループ処理の命令A〜Gのデコードの結果409を繰り返し出力する。
セレクタ223は、ループコネクト信号LOOP_CONNECTが活性化状態である場合には、ループキャッシュメモリ408が出力するデコードの結果409を選択して出力する。また、セレクタ223は、ループコネクト信号LOOP_CONNECTが不活性化状態である場合には、命令デコーダ204が出力するデコードの結果402を選択して出力する。
ループキャッシュ部222は、ループコネクト信号LOOP_CONNECTが活性化状態である期間では、命令フェッチアドレス生成器201、分岐予測機構205、1次命令キャッシュメモリ202、命令バッファ203及び命令デコーダ204へのクロック信号の供給を停止させることにより動作を停止させ、消費電力を低減する。
ループキャッシュ部222は、分岐予測機構205によるループ処理の予測が外れて分岐命令Gが分岐先アドレスに分岐しなかったことの実行完了報告をRSBR209から入力した場合には、命令フェッチアドレス生成器201、分岐予測機構205、1次命令キャッシュメモリ202、命令バッファ203及び命令デコーダ204の動作を開始させる。さらに、その場合、生成部405は、ループコネクト信号LOOP_CONNECTを不活性化状態にし、セレクタ223は、命令デコーダ204が出力するデコードの結果402を選択して出力する。
図5は、ループキャッシュメモリ408への書き込み動作を示す図である。ループキャッシュメモリ408は、サイクル毎に、命令デコーダ204から4個の60ビット書き込みデータWRITE_DATA0[59:0]、WRITE_DATA1[59:0]、WRITE_DATA2[59:0]及びWRITE_DATA3[59:0]を並列に入力する。4個の書き込みデータWRITE_DATA0[59:0]〜WRITE_DATA3[59:0]は、図4のデコードの結果402に対応し、例えば図3の4個の命令A〜Dのデコードの結果402に対応する。6ビットのライトポインタINPTR[5:0]は、図4のライトポインタINPTRに対応する。
4個のライトイネーブル信号WRITE_ENB0〜WRITE_ENB3は、図4のライトイネーブル信号WRITE_ENBに対応する。ライトイネーブル信号WRITE_ENB0がイネーブル状態である場合には、書き込みデータWRITE_DATA0[59:0]が有効であることを示し、書き込みデータWRITE_DATA0[59:0]はループキャッシュメモリ408に書き込まれる。これに対し、ライトイネーブル信号WRITE_ENB0がディセーブル状態である場合には、書き込みデータWRITE_DATA0[59:0]が無効であることを示し、書き込みデータWRITE_DATA0[59:0]はループキャッシュメモリ408に書き込まれない。
同様に、ライトイネーブル信号WRITE_ENB1がイネーブル状態である場合には、書き込みデータWRITE_DATA1[59:0]が有効であることを示し、書き込みデータWRITE_DATA1[59:0]はループキャッシュメモリ408に書き込まれる。これに対し、ライトイネーブル信号WRITE_ENB1がディセーブル状態である場合には、書き込みデータWRITE_DATA1[59:0]が無効であることを示し、書き込みデータWRITE_DATA1[59:0]はループキャッシュメモリ408に書き込まれない。
同様に、ライトイネーブル信号WRITE_ENB2がイネーブル状態である場合には、書き込みデータWRITE_DATA2[59:0]が有効であることを示し、書き込みデータWRITE_DATA2[59:0]はループキャッシュメモリ408に書き込まれる。これに対し、ライトイネーブル信号WRITE_ENB2がディセーブル状態である場合には、書き込みデータWRITE_DATA2[59:0]が無効であることを示し、書き込みデータWRITE_DATA2[59:0]はループキャッシュメモリ408に書き込まれない。
同様に、ライトイネーブル信号WRITE_ENB3がイネーブル状態である場合には、書き込みデータWRITE_DATA3[59:0]が有効であることを示し、書き込みデータWRITE_DATA3[59:0]はループキャッシュメモリ408に書き込まれる。これに対し、ライトイネーブル信号WRITE_ENB3がディセーブル状態である場合には、書き込みデータWRITE_DATA3[59:0]が無効であることを示し、書き込みデータWRITE_DATA3[59:0]はループキャッシュメモリ408に書き込まれない。
例えば、図3において、第3の入力サイクルでは、4個の書き込みデータWRITE_DATA0[59:0]〜WRITE_DATA3[59:0]は、4個の命令A〜Dのデコードの結果402であり、ループキャッシュメモリ408に並列に入力される。この際、4個のライトイネーブル信号WRITE_ENB0〜WRITE_ENB3はすべてイネーブル状態になる。ループキャッシュメモリ408は、第3の入力サイクルでは、ライトポイントINPTR[5:0]が示すアドレスに、4個の書き込みデータWRITE_DATA0[59:0]〜WRITE_DATA3[59:0]を順に書き込む。
次に、図3において、第4の入力サイクルでは、3個の書き込みデータWRITE_DATA0[59:0]〜WRITE_DATA2[59:0]は、3個の命令E〜Gのデコードの結果402であり、ループキャッシュメモリ408に並列に入力される。この際、ライトイネーブル信号WRITE_ENB0〜WRITE_ENB2はイネーブル状態になり、ライトイネーブル信号WRITE_ENB3はディセーブル状態になる。ループキャッシュメモリ408は、第4の入力サイクルでは、ライトポイントINPTR[5:0]が示すアドレスに、3個の書き込みデータWRITE_DATA0[59:0]〜WRITE_DATA2[59:0]を順に書き込む。
ループキャッシュメモリ408は、最大60命令のデコード結果を格納することができる。書き込みデータWRITE_DATA0[59:0]〜WRITE_DATA3[59:0]は、それぞれ、ライトイネーブル信号WRITE_ENB0〜WRITE_ENB3がイネーブル状態である場合に、ループキャッシュメモリ408に書き込まれる。ループキャッシュメモリ408は、ライトポインタINPTR[5:0]が示すアドレスから、有効な書き込みデータの数だけ書き込む。ループキャッシュメモリ408は、有効な書き込みデータだけ書き込み、生成部406はその書き込んだ数だけライトポインタINPTR[5:0]をインクリメントする。生成部406は、ループ処理タグLOOP_TAGを入力すると、ライトポインタINPTR[5:0]を0番地にクリアする。ループキャッシュメモリ408は、ライトポインタINPTR[5:0]が示す0番地のアドレスからデコード結果を書き込む。ループキャッシュメモリ408には、1ループの命令A〜Gのデコード結果が書き込まれる。
図6は、ループキャッシュメモリ408の読み出し動作を示す図であり、4個の連続するアドレスの命令を読み出す例を示す。ループバックポインタLOOPBACK_PTR[5:0]は、1ループの命令A〜Gのうちの最後の命令Gのデコード結果が書き込まれているアドレスの次のアドレスであり、ライトポインタINPTR[5:0]が示すアドレスと同じである。生成部407は、ループコネクト信号LOOP_CONNECTを入力すると、ライトポインタOUTPTR[5:0]を0番地にクリアする。ループキャッシュメモリ408は、リードポインタOUTPTR[5:0]が示すアドレスから、連続する4個の60ビット読み出しデータREAD_DATA0[59:0]〜READ_DATA3[59:0]を読み出す。読み出しデータREAD_DATA0[59:0]〜READ_DATA3[59:0]は、図4のデコードの結果409に対応する。生成部407は、読み出し毎に、リードポインタOUTPTR[5:0]をインクリメントする。
図7は、ループキャッシュメモリ408の読み出し動作を示す図であり、4個の不連続のアドレスの命令を読み出す例を示す。ループキャッシュメモリ408は、リードポインタOUTPTR[5:0]が示すアドレスから、4個の読み出しデータREAD_DATA0[59:0]〜READ_DATA3[59:0]を読み出す。例えば、読み出しデータREAD_DATA0[59:0]〜READ_DATA2[59:0]は命令E〜Gのデコード結果に対応し、読み出しデータREAD_DATA3[59:0]は命令Aのデコード結果に対応する。生成部407は、3個の読み出しデータREAD_DATA0[59:0]〜READ_DATA2[59:0]をそれぞれ読み出す毎に、リードポインタOUTPTR[5:0]をインクリメントする。そして、生成部407は、リードポインタOUTPTR[5:0]がループバックポインタLOOPBACK_PTR[5:0]と同じになった場合には、リードポインタOUTPTR[5:0]を0番地にクリアする。ループキャッシュメモリ408の0番地には、命令Aのデコード結果が格納されている。これより、ループキャッシュメモリ408は、1サイクルで、4個の命令E,F,G,Aを読み出すことができる。
図8は、演算処理装置101の制御方法を示すフローチャートである。ステップS801では、分岐予測機構205は、ループ処理を予測した場合には、分岐命令に付与するためのループ処理タグLOOP_TAGを命令バッファ203に出力する。命令バッファ203は、分岐命令にループ処理タグLOOP_TAGを付与してバッファリングする。次に、ステップS802では、命令デコーダ204は、命令バッファ203が出力する命令をデコードし、デコード結果及びループ処理タグLOOP_TAGを出力する。
次に、ステップS803では、ループキャッシュ部222は、ループ処理タグLOOP_TAGが付与されているデコード結果を入力した場合には、命令デコーダ204が出力するデコード結果をループキャッシュメモリ408に登録(格納)する。
次に、ステップS804では、ループキャッシュ部222は、命令バッファ203から入力する次のデコード結果にループ処理タグLOOP_TAGが付与されているか否かを判定する。ループキャッシュ部222は、ループ処理タグLOOP_TAGが付与されていないと判定した場合には、1ループの命令A〜Gのデコード結果の登録が完了していないので、ステップS803に処理を戻す。また、ループキャッシュ部222は、ループ処理タグLOOP_TAGが付与されていると判定した場合には、1ループの命令A〜Gのデコード結果の登録が完了しているので、ステップS805に処理を進める。
ステップS805では、生成部405は、ループコネクト条件を満たしているか否かを判定する。ループコネクト条件は、例えば、ループキャッシュメモリ408に1ループの命令A〜Gがオーバーフローせずに正常に書き込まれ、かつ、分岐命令Gの分岐予測のとび先アドレスが命令Aのアドレスと一致する等の条件である。生成部405は、ループコネクト条件を満たしている場合には、ループコネクト信号LOOP_CONNECTを活性化状態にし、ステップS806に処理を進める。また、生成部405は、ループコネクト条件を満たしていない場合には、ループコネクト信号LOOP_CONNECTを不活性化状態にし、ステップS810に処理を進める。
ステップS806では、ループキャッシュ部222は、制御信号224により、命令フェッチアドレスアドレス生成器201、分岐予測機構205、1次命令キャッシュメモリ202、命令バッファ203及び命令デコード204の動作を停止させる。これにより、消費電力を低減することができる。
次に、ステップS807では、セレクタ223は、ループキャッシュ部222が出力するデコード結果を採用して出力する。すなわち、セレクタ223は、ループコネクト条件により、分岐予測機構205によりループ処理が予測され、かつ分岐予測機構205によるループ処理の予測が当たったことが判明した場合には、ループキャッシュ部222の出力を選択する。
次に、ステップS808では、生成部405は、ループコネクト解除条件を満たしているか否かを判定する。ループコネクト解除条件は、例えば、分岐予測機構205によるループ処理の予測が外れて分岐命令Gが分岐先アドレスに分岐しなかったことの実行完了報告をRSBR209から入力したことの条件である。生成部405は、ループコネクト解除条件を満たさない場合には、ループ処理の予測が当たっており、1ループの命令A〜Gを繰り返し出力するために、ステップS807に処理を戻す。また、生成部405は、ループコネクト解除条件を満たす場合には、ループ処理を終了し、分岐命令Gの次のアドレスの命令を実行するために、ステップS809に処理を進める。
ステップS809では、生成部405は、ループコネクト信号LOOP_CONNECTを不活性化状態にする。ループキャッシュ部222は、制御信号224により、命令フェッチアドレス生成器201、分岐予測機構205、1次命令キャッシュメモリ202、命令バッファ203及び命令デコーダ204の動作を開始させる。
次に、ステップS810では、セレクタ223は、命令デコーダ204が出力するデコード結果を採用して出力する。以上のように、ループコネクト解除条件により、分岐予測機構205によるループ処理の予測が外れたことが判明した場合には、命令フェッチアドレス生成器201、分岐予測機構205、1次命令キャッシュメモリ202、命令バッファ203及び命令デコーダ204は、動作を開始し、セレクタ223は、命令デコーダ204の出力を選択する。
本実施形態によれば、ループ処理を予測した場合、セレクタ223は、ループキャッシュ部222が出力するデコード結果409をリザベーションステーション206〜209以降の命令実行部に出力する。命令フェッチアドレス生成器201、分岐予測機構205、1次命令キャッシュメモリ202、命令バッファ203及び命令デコーダ204は、セレクタ223がループキャッシュ部222が出力するデコード結果409を選択している期間では、動作を停止し、消費電力を低減することができる。
(第2の実施形態)
図9は、第2の実施形態による命令バッファ203、命令デコーダ204、セレクタ223、ループキャッシュ部222の構成例を示す図である。以下、本実施形態が第1の実施形態と異なる点を説明する。第1の実施形態では、ループキャッシュ部222は、命令デコーダ204が出力するデコード結果を格納したが、第2の実施形態では、ループキャッシュ部222は、セレクタ223が出力するデコード結果を格納する。本実施形態の動作は、第1の実施形態の動作と同様である。
以下、パイプラインのステージ901〜903について説明する。まず、ステージ901では、命令バッファ203は、命令デコーダ部204に4個の命令(ループ処理タグLOOP_TAGを含む)を供給する。
次に、ステージ902では、命令デコーダ204は、命令をデコードし、デコード結果402をセレクタ223に出力する。なお、命令セットアーキテクチャの複雑さ及び周波数向上のため、ステージ902のデコードは、2サイクル以上かかる。
次に、ステージ903では、セレクタ223は、ループコネクト信号LOOP_CONNECTが不活性化状態である場合には、命令デコーダ204が出力するデコード結果402を、ループキャッシュ部222、RSA206、RSE207、RSF208、RSBR209及びCSE210に出力する。また、セレクタ223は、ループコネクト信号LOOP_CONNECTが活性化状態である場合には、ループキャッシュ部222が出力するデコード結果409を、RSA206、RSE207、RSF208、RSBR209及びCSE210に出力する。
ループキャッシュ部222は、セレクタ223を介して、命令デコーダ204が出力するデコード結果を入力し、その入力したデコード結果をループキャッシュメモリ408に書き込む。そして、ループキャッシュ部222は、ループキャッシュメモリ408から読み出したデコード結果409をセレクタ223に出力する。
(第3の実施形態)
図10は、第3の実施形態による命令バッファ203、第1の命令デコーダ204a、第2の命令デコーダ204b、セレクタ223、及びループキャッシュ部222の構成例を示す図である。以下、本実施形態が第1及び第2の実施形態と異なる点を説明する。第1及び第2の実施形態では、ループキャッシュ部222は、命令デコーダ204のデコードの結果を格納したが、第3の実施形態では、ループキャッシュ部222は、デコードの途中結果を格納する。第1の命令デコーダ204a及び第2の命令デコーダ204bは、図9の命令デコーダ204を分割したものである。
第1及び第2の実施形態では、ループキャッシュ部222は、完全にデコード済みのデコード結果を格納した。しかし、複雑な命令のデコード結果のビット幅は大きい。また、デコードにかかるサイクル数は、数サイクルである。本実施形態では、ループキャッシュ部222は、完全なデコード済みのデコード結果でなく、デコードの途中結果を格納することで、デコードにかかる電力の一部を削減し、かつループキャッシュ部222に格納するデコードの途中結果のビット幅を小さくすることができる。第1の命令デコーダ204aは、命令デコーダ204が行うnサイクルのデコードD1〜Dnのうちの前部のデコードD1〜Dkを行う。ここで、0<k<nである。第2の命令デコーダ204bは、命令デコーダ204が行うnサイクルのデコードD1〜Dnのうちの後部のデコードDk+1〜Dnを行う。
ステージ902aでは、第1の命令デコーダ204aは、命令バッファ203が出力する命令に対して、前部のデコードD1〜Dkを行い、デコードの途中結果402aをセレクタ223に出力する。セレクタ223は、ループコネクト信号LOOP_CONNECTが不活性化状態である場合には、第1の命令デコーダ204aが出力するデコードの途中結果402aをループキャッシュ部222及び第2の命令デコーダ204bに出力する。また、セレクタ223は、ループコネクト信号LOOP_CONNECTが活性化状態である場合には、ループキャッシュ部222が出力するデコードの途中結果409aを第2の命令デコーダ204bに出力する。
次に、ステージ902bでは、第2の命令デコーダ204bは、セレクタ223が出力するデコードの途中結果に対して、後部のデコードDk+1〜Dnを行い、最終のデコード結果を生成する。
次に、ステージ903では、第2の命令デコーダ204bは、最終のデコード結果を、RSA206、RSE207、RSF208、RSBR209及びCSE210に出力する。
ループキャッシュ部222は、セレクタ223を介して、命令デコーダ204が出力するデコードの途中結果402aを入力し、その入力したデコードの途中結果402aをループキャッシュメモリ408に書き込む。そして、ループキャッシュ部222は、ループキャッシュメモリ408から読み出したデコードの途中結果409aをセレクタ223に出力する。
以上のように、ループキャッシュ部222は、デコードされた途中結果402aを格納し、格納した途中結果409aを繰り返し出力する。第2の命令デコーダ204bは、ループキャッシュ部222が出力する途中結果409aをデコードする。
なお、本実施形態は、第1の実施形態に適用することもできる。すなわち、ループキャッシュ部222は、第1の実施形態と同様に、第1の命令デコーダ204aが出力するデコードの途中結果402aを直接入力し、そのデコードの途中結果402aを格納するようにしてもよい。
(第4の実施形態)
図11は、第4の実施形態による命令バッファ203、命令デコーダ204、ループキャッシュ部222、及びセレクタ223の構成例を示す図である。図11は、図4に対して、カウント部1101を追加したものである。以下、本実施形態が第1の実施形態と異なる点を説明する。
分岐予測機構205は、過去の多数回の分岐の有無の実行完了報告に基づくグローバル履歴を登録する。そして、分岐予測機構205は、グローバル履歴を参照し、高精度の分岐予測、ループ処理の予測、予測されたループ処理のループ回数の予測を行う。分岐予測機構205は、第1の実施形態と同様に、ループ処理を予測した場合には、ループ処理タグLOOP_TAGを命令バッファ203に出力する。その場合、分岐予測機構205は、ループ処理の残りのループ回数LOOP_COUNTを命令バッファ203に出力する。命令バッファ203は、命令に対してループ処理タグLOOP_TAG及びループ回数LOOP_COUNTを付与してバッファリングし、命令401、ループ処理タグLOOP_TAG及びループ回数LOOP_COUNTを命令デコーダ204に出力する。命令デコーダ204は、命令401をデコードし、デコード結果402、ループ処理タグLOOP_TAG及びループ回数LOOP_COUNTを出力する。
第1の実施形態では、分岐予測機構205は、ループコネクト信号LOOP_CONNECTが活性化状態になると、動作を停止する。RSBR209は、ループ処理の予測が外れた場合、分岐命令が分岐先に分岐しないことの実行完了報告を出力する。その場合、CSE210は、その分岐命令を完了処理し、パイプラインは、投機実行中の全ての命令をクリアし、その次の命令の命令フェッチからリスタートする。そのため、ペナルティが大きい。
本実施形態では、分岐予測機構205は、残りのループ回数LOOP_COUNTを予測し、そのループ回数LOOP_COUNTをパイプラインに伝搬させる。カウント部1101は、命令デコーダ204が出力するループ回数LOOP_COUNTを格納し、ループキャッシュメモリ408から1ループの命令A〜Gが読み出される度に、ループ回数LOOP_COUNTをデクリメントする。具体的には、カウント部1101は、リードポインタOUTPTR[5:0]がループバックポインタLOOPBACK_PTR[5:0]を通過する度に、ループ回数LOOP_COUNTをデクリメントする。そして、カウント部1101は、ループ回数LOOP_COUNTが閾値回数より少なくなった場合には、制御信号224により、命令フェッチアドレス生成器201、分岐予測機構205、1次命令キャッシュメモリ202、命令バッファ203、及び命令デコーダ204の動作を開始させる。これにより、命令フェッチアドレス生成器201は、分岐命令が分岐しないので、分岐命令の次のアドレスを出力し、1次命令キャッシュメモリ202は、そのアドレスの命令を命令バッファ203に出力する。命令バッファ203は、その命令をバッファリングし、命令デコーダ204は、その命令をデコードし、デコード結果402を出力する。
カウント部1101は、ループ回数LOOP_COUNTが0になった場合には、クリア信号を生成部405に出力する。生成部405は、クリア信号を入力した場合には、ループコネクト信号LOOP_CONNECTを不活性化状態にする。すると、セレクタ223は、命令デコーダ204が出力するデコード結果402を選択して出力する。これにより、ループ処理が終了するときのペナルティを防止することができる。
上記の閾値回数は、命令フェッチのパイプラインの長さに応じた回数である。命令フェッチのパイプラインの命令が命令デコーダ204に到達し、ループ回数LOOP_COUNTが0になった時に、すぐに命令デコーダ204がデコード結果402を供給できるように、閾値回数を決めればよい。
以上のように、分岐予測機構205は、予測されたループ処理のループ回数LOOP_COUNTを予測する。セレクタ223は、予測されたループ回数LOOP_COUNTのループ処理が行われている場合には、ループキャッシュ部222の出力を選択し、予測されたループ回数LOOP_COUNTのループ処理が終了した場合には、命令デコーダ204の出力を選択する。命令フェッチアドレス生成器201、分岐予測機構205、1次命令キャッシュメモリ202、命令バッファ203及び命令デコーダ204は、予測されたループ回数LOOP_COUNTのループ処理が終了した場合には、動作を開始する。なお、本実施形態は、第2及び第3の実施形態にも適用することができる。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
201 命令フェッチアドレス生成器
202 1次命令キャッシュメモリ
203 命令バッファ
204 命令デコーダ
205 分岐予測機構
206 RSA
207 RSE
208 RSF
209 RSBR
210 CSE
211 オペランドアドレス生成器
212 1次データキャッシュメモリ
213,214 演算器
215 固定小数点更新バッファ
216 固定小数点バッファ
217 浮動小数点更新バッファ
218 浮動小数点レジスタ
219 プログラムカウンタ
220 2次命令キャッシュメモリ
221 メインメモリ
222 ループキャッシュ部
223 セレクタ

Claims (10)

  1. 命令をフェッチするアドレスを生成するアドレス生成部と、
    前記アドレス生成部が生成したアドレスを基に分岐命令の分岐先アドレスを予測し、予測した前記分岐先アドレスを前記アドレス生成部に出力し、前記アドレス生成部が生成したアドレスを基にループ処理を予測する分岐予測部と、
    前記アドレス生成部が生成したアドレスに対応する命令を格納する命令バッファ部と、
    前記命令バッファ部に格納された命令をデコードする第1の命令デコード部と、
    予測された前記ループ処理の命令が前記第1の命令デコード部によりデコードされたデコード結果又はデコード途中結果を格納し、ループ処理に応じて格納した前記デコード結果又は前記デコード途中結果を所定回数出力するループバッファ部と、
    前記ループバッファ部の出力と前記第1の命令デコード部の出力とのいずれかを選択する選択部とを有し、
    前記選択部が、前記ループバッファ部の出力を選択している期間、前記ループバッファ部が、前記アドレス生成部、前記分岐予測部、前記命令バッファ部及び前記第1の命令デコード部の動作を停止させることを特徴とする演算処理装置。
  2. 前記分岐予測部は、実行部により閾値回数以上のループ回数のループ処理が行われた場合には前記ループ処理を予測することを特徴とする請求項1記載の演算処理装置。
  3. 前記分岐予測部は、前記予測されたループ処理のループ回数を予測し、
    前記選択部は、前記予測されたループ回数のループ処理が行われている場合には、前記ループバッファ部の出力を選択し、前記予測されたループ回数のループ処理が終了した場合には、前記第1の命令デコード部の出力を選択し、
    前記アドレス生成部、前記分岐予測部、前記命令バッファ部及び前記第1の命令デコード部は、前記予測されたループ回数のループ処理が終了した場合には、動作を開始することを特徴とする請求項1記載の演算処理装置。
  4. 前記ループバッファ部は、前記デコードされたデコード途中結果を格納し、前記格納したデコード途中結果を所定回数出力し、
    さらに、前記ループバッファ部が出力するデコード途中結果をデコードする第2の命令デコード部を有することを特徴とする請求項1〜3のいずれか1項に記載の演算処理装置。
  5. 前記ループバッファ部は、前記第1の命令デコード部が出力するデコード結果又はデコード途中結果を格納することを特徴とする請求項1〜4のいずれか1項に記載の演算処理装置。
  6. 前記ループバッファ部は、前記選択部が出力するデコード結果又はデコード途中結果を格納することを特徴とする請求項1〜4のいずれか1項に記載の演算処理装置。
  7. 前記ループバッファ部は、1サイクル当たりに並列に出力する数が1サイクル当たりに並列に入力する数より多いことを特徴とする請求項1〜6のいずれか1項に記載の演算処理装置。
  8. 前記分岐予測部による前記ループ処理の予測が外れたことが判明した場合には、前記アドレス生成部、前記分岐予測部、前記命令バッファ部及び前記第1の命令デコード部は、動作を開始し、前記選択部は、前記第1の命令デコード部の出力を選択することを特徴とする請求項1〜7のいずれか1項に記載の演算処理装置。
  9. 前記選択部は、前記分岐予測部により前記ループ処理が予測され、かつ前記分岐予測部による前記ループ処理の予測が当たったことが判明した場合には、前記ループバッファ部の出力を選択することを特徴とする請求項1〜8のいずれか1項に記載の演算処理装置。
  10. 演算処理装置の制御方法であって、
    前記演算処理装置が有するアドレス生成部が、命令をフェッチするアドレスを生成し、
    前記演算処理装置が有する分岐予測部が、前記アドレス生成部が生成したアドレスを基に分岐命令の分岐先アドレスを予測し、予測した前記分岐先アドレスを前記アドレス生成部に出力し、前記アドレス生成部が生成したアドレスを基にループ処理を予測し、
    前記演算処理装置が有する命令バッファ部が、前記アドレス生成部が生成したアドレスに対応する命令を格納し、
    前記演算処理装置が有する第1の命令デコード部が、前記命令バッファ部に格納された命令をデコードし、
    前記演算処理装置が有するループバッファ部が、予測された前記ループ処理の命令が前記第1の命令デコード部によりデコードされたデコード結果又はデコード途中結果を格納し、ループ処理に応じて格納した前記デコード結果又は前記デコード途中結果を所定回数出力し、
    前記演算処理装置が有する選択部が、前記ループバッファ部の出力と前記第1の命令デコード部の出力とのいずれかを選択し、
    前記選択部が、前記ループバッファ部の出力を選択している期間、前記ループバッファ部が、前記アドレス生成部、前記分岐予測部、前記命令バッファ部及び前記第1の命令デコード部の動作を停止させることを特徴とする演算処理装置の制御方法。
JP2016130362A 2016-06-30 2016-06-30 演算処理装置及び演算処理装置の制御方法 Pending JP2018005488A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016130362A JP2018005488A (ja) 2016-06-30 2016-06-30 演算処理装置及び演算処理装置の制御方法
US15/601,086 US10430196B2 (en) 2016-06-30 2017-05-22 Arithmetic processing device for predicting loop processing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016130362A JP2018005488A (ja) 2016-06-30 2016-06-30 演算処理装置及び演算処理装置の制御方法

Publications (1)

Publication Number Publication Date
JP2018005488A true JP2018005488A (ja) 2018-01-11

Family

ID=60806095

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016130362A Pending JP2018005488A (ja) 2016-06-30 2016-06-30 演算処理装置及び演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US10430196B2 (ja)
JP (1) JP2018005488A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019169046A (ja) * 2018-03-26 2019-10-03 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP2019185646A (ja) * 2018-04-17 2019-10-24 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP2020077333A (ja) * 2018-11-09 2020-05-21 富士通株式会社 演算処理装置および演算処理装置の制御方法
JP2022500777A (ja) * 2018-09-18 2022-01-04 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated ループ終了予測を用いたプロセッサのループモードの促進又は抑制

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9678755B2 (en) 2010-10-12 2017-06-13 Intel Corporation Instruction sequence buffer to enhance branch prediction efficiency
EP3306466B1 (en) * 2010-10-12 2020-05-13 INTEL Corporation An instruction sequence buffer to store branches having reliably predictable instruction sequences
US20200364052A1 (en) * 2019-05-15 2020-11-19 Western Digital Technologies, Inc. Branch penalty reduction using memory circuit
US20210329486A1 (en) * 2020-04-15 2021-10-21 XCOM Labs, Inc. System and method for reducing data packet processing false alarms
US20220100514A1 (en) * 2020-09-26 2022-03-31 Intel Corporation Loop support extensions
US11595154B1 (en) * 2021-09-24 2023-02-28 Apple Inc. Instruction-based multi-thread multi-mode PDCCH decoder for cellular data device
US20230205535A1 (en) * 2021-12-23 2023-06-29 Microsoft Technology Licensing, Llc Optimization of captured loops in a processor for optimizing loop replay performance

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004326330A (ja) * 2003-04-23 2004-11-18 Kyushu Inst Of Technology キャッシュメモリ、及びキャッシュメモリの電力削減方法
JP2010277529A (ja) * 2009-06-01 2010-12-09 Fujitsu Ltd 情報処理装置及び分岐予測方法
JP2014002736A (ja) * 2012-06-15 2014-01-09 Apple Inc ループバッファのパッキング
US20160092230A1 (en) * 2014-09-29 2016-03-31 Via Alliance Semiconductor, Ltd. Loop predictor-directed loop buffer

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09114660A (ja) 1995-10-18 1997-05-02 Hitachi Ltd データ処理装置
JP3804941B2 (ja) 2002-06-28 2006-08-02 富士通株式会社 命令フェッチ制御装置
US20120185714A1 (en) * 2011-12-15 2012-07-19 Jaewoong Chung Method, apparatus, and system for energy efficiency and energy conservation including code recirculation techniques
US9557999B2 (en) 2012-06-15 2017-01-31 Apple Inc. Loop buffer learning
US9471322B2 (en) * 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004326330A (ja) * 2003-04-23 2004-11-18 Kyushu Inst Of Technology キャッシュメモリ、及びキャッシュメモリの電力削減方法
JP2010277529A (ja) * 2009-06-01 2010-12-09 Fujitsu Ltd 情報処理装置及び分岐予測方法
JP2014002736A (ja) * 2012-06-15 2014-01-09 Apple Inc ループバッファのパッキング
US20160092230A1 (en) * 2014-09-29 2016-03-31 Via Alliance Semiconductor, Ltd. Loop predictor-directed loop buffer

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019169046A (ja) * 2018-03-26 2019-10-03 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP7004905B2 (ja) 2018-03-26 2022-01-21 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP2019185646A (ja) * 2018-04-17 2019-10-24 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP7032647B2 (ja) 2018-04-17 2022-03-09 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP2022500777A (ja) * 2018-09-18 2022-01-04 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated ループ終了予測を用いたプロセッサのループモードの促進又は抑制
JP7301955B2 (ja) 2018-09-18 2023-07-03 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ループ終了予測を用いたプロセッサのループモードの促進又は抑制
JP2020077333A (ja) * 2018-11-09 2020-05-21 富士通株式会社 演算処理装置および演算処理装置の制御方法
US11080063B2 (en) 2018-11-09 2021-08-03 Fujitsu Limited Processing device and method of controlling processing device
JP7205174B2 (ja) 2018-11-09 2023-01-17 富士通株式会社 演算処理装置および演算処理装置の制御方法

Also Published As

Publication number Publication date
US20180004528A1 (en) 2018-01-04
US10430196B2 (en) 2019-10-01

Similar Documents

Publication Publication Date Title
JP2018005488A (ja) 演算処理装置及び演算処理装置の制御方法
JP5313279B2 (ja) 非アラインドメモリアクセス予測
JP5889986B2 (ja) 実行された命令の結果を選択的にコミットするためのシステムおよび方法
KR101459536B1 (ko) 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치
EP2864868B1 (en) Methods and apparatus to extend software branch target hints
JP2008530714A5 (ja)
JPWO2008155800A1 (ja) 命令実行制御装置及び命令実行制御方法
KR20040016829A (ko) 파이프라인식 프로세서에서의 예외 취급 방법, 장치 및시스템
JP5861354B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP5941488B2 (ja) 条件付きショート前方分岐の計算的に等価な述語付き命令への変換
JP2010271818A (ja) 命令融合演算装置および命令融合演算方法
US9710269B2 (en) Early conditional selection of an operand
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
US20100100709A1 (en) Instruction control apparatus and instruction control method
JP5902208B2 (ja) データ処理装置
JP7409208B2 (ja) 演算処理装置
JP2008299729A (ja) プロセッサ
US20070043930A1 (en) Performance of a data processing apparatus
JP2006031697A (ja) 分岐ターゲットバッファと使用方法
US11314505B2 (en) Arithmetic processing device
US20230195456A1 (en) System, apparatus and method for throttling fusion of micro-operations in a processor
US20070050610A1 (en) Centralized resolution of conditional instructions
US9965283B2 (en) Multi-threaded processor interrupting and saving execution states of complex instructions of a first thread to allow execution of an oldest ready instruction of a second thread
Shah et al. SPSIM: SuperScalar Processor SIMulater CS305 Project Report
JP3933679B2 (ja) 命令処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190311

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200131

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200225

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200417

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20201006