[go: up one dir, main page]

JP2006309337A - プロセッサ及びプロセッサの命令バッファ動作方法 - Google Patents

プロセッサ及びプロセッサの命令バッファ動作方法 Download PDF

Info

Publication number
JP2006309337A
JP2006309337A JP2005128361A JP2005128361A JP2006309337A JP 2006309337 A JP2006309337 A JP 2006309337A JP 2005128361 A JP2005128361 A JP 2005128361A JP 2005128361 A JP2005128361 A JP 2005128361A JP 2006309337 A JP2006309337 A JP 2006309337A
Authority
JP
Japan
Prior art keywords
instruction
buffer
branch
loop
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.)
Abandoned
Application number
JP2005128361A
Other languages
English (en)
Inventor
Masato Uchiyama
真郷 内山
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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2005128361A priority Critical patent/JP2006309337A/ja
Priority to US11/211,459 priority patent/US20060242394A1/en
Publication of JP2006309337A publication Critical patent/JP2006309337A/ja
Abandoned 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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
    • 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/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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

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)

Abstract

【課題】分岐高速化とループバッファの利用率の向上を行う。
【解決手段】メモリシステム10にフェッチアドレスを供給する命令フェッチユニット12と、フェッチ命令をそれぞれ受信する分岐バッファ18,ノーマルバッファ16及び分岐先/ループ兼用バッファ14と、命令バッファ制御ユニット22の指示に従って,ノーマルバッファ,分岐バッファ及び兼用バッファから発行命令を選択し, 発行する発行命令選択ユニット20と、発行命令選択ユニット20から発行命令SIを受信し, デコードし,デコード結果DRを命令バッファ制御ユニットに送信する命令デコードユニット28と、命令デコードユニットからデコード結果を受信し,ループ先頭アドレスLSAを命令フェッチユニットに送信するループ処理ユニット30と、分岐成立時/分岐不成立時のフェッチアドレスFA(CB/UCB)を命令フェッチユニットに送信する分岐判定ユニットとを備えるプロセッサ。
【選択図】図1

Description

本発明は、プロセッサに係り、特に、分岐高速化とハードウェアによるループ処理をそれぞれ専用の命令バッファを用いて行うプロセッサ及びプロセッサの命令バッファ動作方法に関する。
近年のプロセッサにおいては、バスアクセスを伴わない場合であっても命令フェッチに複数サイクルのオーバーヘッドがかかることが多い。このようなプロセッサでは、1サイクルに発行する命令数よりも多くの命令を一度にフェッチし、その差分となる命令を命令バッファに保持してそのバッファから順次命令発行することによって命令フェッチのオーバーヘッドを隠蔽するという処理が行われている。
また、フェッチのスループットが発行のスループットを上回っているのでフェッチ能力が余ることを利用し、条件/無条件分岐(Conditional/Unconditional Branch)命令の分岐先の命令を使われるか否か、即ち分岐が成立するか否かが判明する前にフェッチしてバッファに貯めておくという形の分岐高速化が前述のようなプロセッサと相性がよい(例えば、特許文献1参照。)。
一方、プログラム中のループ部分を、イタ―レーション(反復処理:iteration)の最後尾に分岐命令を配置してイタ―レーションの先頭に戻るという形で実行するのではなく、イタ―レーションの最後尾がどこであるかをハードウェアで記憶して,分岐命令を用いずに,自動的に先頭に戻るという機構で実行することのできるプロセッサが存在する(例えば、特許文献2参照。)。このようなプロセッサでは分岐命令の実行と分岐処理のオーバーヘッドを削減することができるので、プログラム中のループ部分を高速に実行することができる。
ハードウェアでループ処理を行う際においては、繰り返し実行されるイタ―レーションの一部または全部を専用のバッファに保持して、その専用のバッファから命令を発行することで、命令メモリへのフェッチによるオーバーヘッドを削減するということも行われている(例えば、特許文献3参照。)。
上記の専用バッファを用いる2つのプロセッサ高速化技術は組み合わせて用いることで両方の利点を取り入れることができるが、ループ処理用のバッファは分岐先プリフェッチ用のバッファに比べて利用頻度が低く、利用されていない時間が多くなるという問題点がある。
米国特許第5,579,493号明細書 米国特許第6,189,092号明細書 特開2000−276351号
本発明は、分岐高速化とハードウェアによるループ処理をそれぞれ専用の命令バッファを用いて行うプロセッサにおいて、ループバッファの利用率の向上と,更なる分岐高速化を行うプロセッサ及びプロセッサの命令バッファ動作方法を提供する。
本発明の実施の形態の第1の特徴は、(イ)メモリシステムと、(ロ)メモリシステムにフェッチアドレスを供給する命令フェッチユニットと、(ハ)メモリシステムからフェッチ命令をそれぞれ受信する分岐バッファ,ノーマルバッファ及び兼用バッファと、(ニ)命令フェッチユニット, 分岐バッファ,ノーマルバッファ及び兼用バッファを制御する命令バッファ制御ユニットと、(ホ)命令バッファ制御ユニットの指示に従って、ノーマルバッファ,分岐バッファ及び兼用バッファから発行命令を選択し、発行命令を発行する発行命令選択ユニットと、(へ)発行命令選択ユニットから発行命令を受信し,発行命令をデコードし、デコード結果を命令バッファ制御ユニットに送信する命令デコードユニットと、(ト)命令デコードユニットからデコード結果を受信し,ループ先頭アドレスを命令フェッチユニットに送信するループ処理ユニットと、(チ)命令デコードユニットからデコード結果を受信し,分岐成立時/分岐不成立時のフェッチアドレスを命令フェッチユニットに送信する分岐判定ユニットとを備えるプロセッサであることを要旨とする。
本発明の実施の形態の第2の特徴は、(イ)命令バッファ制御ユニットの指示に従って、発行命令選択ユニットがノーマルバッファ及び分岐バッファから命令を選択し、発行するステップと、(ロ)分岐判定ユニットにおいて発行された命令によって指示される分岐が成立したか否かを判断するステップと、(ハ)NOであるならば、命令バッファ制御ユニットが分岐バッファをクリアするステップと、(ニ)YESであるならば、命令バッファ制御ユニットで次に発行するアドレスを分岐先アドレスにするステップと、(ホ)命令バッファ制御ユニットで次に発行するアドレスをインクリメントするステップと、(へ)命令バッファ制御ユニットが次に発行する命令がノーマルバッファに在るか否かを判断するステップと、(ト)NOであるならば、命令バッファ制御ユニットからの指示に従い、命令フェッチユニットが次に発行する命令をメモリシステムからフェッチし、ノーマルバッファに格納するステップと、(チ)YESであるならば、命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットがノーマルバッファから発行命令を選択して、発行するステップと、(リ)次に、前記命令バッファ制御ユニットが分岐バッファに命令があるか否かを判断するステップと、(ヌ)NOであるならば、命令バッファ制御ユニットからの指示に従い、命令バッファ制御ユニットが分岐先の命令をメモリシステムからフェッチし、ノーマルバッファに格納するステップと、(ル)YESであるならば、命令バッファ制御ユニットからの指示に従い、分岐バッファの内容をノーマルバッファに移動コピーすると同時に、命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットが分岐バッファから発行命令を選択して、発行するステップとを有するプロセッサの命令バッファ動作方法であることを要旨とする。
本発明の実施の形態の第3の特徴は、(イ)命令バッファ制御ユニットの指示に従って、発行命令選択ユニットがノーマルバッファ及びループバッファから命令を選択し、発行するステップと、(ロ)ループ処理ユニットにおいて発行された命令がループ開始命令であるか否かを判断するステップと、(ハ)YESであるならば、命令バッファ制御ユニットからの指示に従って、ノーマルバッファの命令をループバッファにコピーするテップと、(ニ)NOであるならば、次に、ループ処理ユニットにおいてループの最後尾から先頭へジャンプが発生し、ループが成立するか否かを判断するステップと、(ホ)YESであるならば、ループの先頭アドレスにジャンプし、命令バッファ制御ユニットで次に発行するアドレスをループの先頭アドレスに設定するステップと、(へ)NOであるならば、命令バッファ制御ユニットで次に発行するアドレスをインクリメントするステップと、(ト)次に、命令バッファ制御ユニットが次に発行する命令がノーマルバッファに在るか否かを判断するステップと、(チ)NOであるならば、命令バッファ制御ユニットからの指示に従い、命令フェッチユニットが次に発行する命令をメモリシステムからフェッチし、ノーマルバッファに格納するステップと、(リ)YESであるならば、命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットがノーマルバッファから発行命令を選択して、発行するステップと、(ヌ)命令バッファ制御ユニットからの指示に従い、ループバッファの内容をノーマルバッファにコピーすると同時に、命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットがループバッファから発行命令を選択して、発行するステップとを有するプロセッサの命令バッファ動作方法であることを要旨とする。
本発明のプロセッサ及びプロセッサの命令バッファ動作方法によれば、分岐高速化とハードウェアによるループ処理をそれぞれ専用の命令バッファを用いて行うプロセッサにおいて、ループバッファの利用率の向上と分岐高速化を行うことが可能となる。
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。ただし、図面は模式的なものであり、各ブロックの平面寸法等は現実のものとは異なることに留意すべきである。又、図面相互間においても互いの寸法の関係や比率が異なる部分が含まれていることはもちろんである。
また、以下に示す実施の形態は、この発明の技術的思想を具体化するための装置や方法を例示するものであって、この発明の技術的思想は、各ブロックの構成部品の配置等を下記のものに特定するものでない。この発明の技術的思想は、特許請求の範囲において、種々の変更を加えることができる。
本発明の実施の形態に係るプロセッサにおいては、分岐高速化とハードウェアによるループ処理をそれぞれ専用の命令バッファを用いて行い、分岐バッファとループバッファの構造を揃えるかループバッファが分岐バッファと同じ構造を内包することによって、ループ処理を行っていない際にループバッファを2レベル目の分岐先プリフェッチに用いることができる。
[第1の実施の形態]
(全体ブロック構成図)
本発明の第1の実施の形態に係るプロセッサは、図1に示すように、メモリシステム10と、メモリシステム10にフェッチアドレスFAを供給する命令フェッチユニット12と、メモリシステム10からフェッチ命令FIをそれぞれ受信する分岐バッファ18,ノーマルバッファ16及び兼用バッファ14と、命令フェッチユニット12, 分岐バッファ18,ノーマルバッファ16及び兼用バッファ14を制御する命令バッファ制御ユニット22と、命令バッファ制御ユニット22に接続され,かつ分岐バッファ18,ノーマルバッファ16及び兼用バッファ14に接続される発行命令選択ユニット20と、命令バッファ制御ユニット22に接続され,かつノーマルバッファ16及び分岐バッファ18に接続されるプリデコード制御ユニット24と、発行命令選択ユニット20から発行命令SIを受信し,デコード結果DRを命令バッファ制御ユニット22に送信する命令デコードユニット28と、命令デコードユニット28に接続され, ループ命令実行時にループの回数などを読み出す汎用レジスタファイル26と、プリデコード制御ユニット24に接続され,分岐先アドレスBTAを命令フェッチユニット12に送信するプリデコードユニット32と、命令デコードユニット28からデコード結果DRを受信し,ループ先頭アドレスLSAを命令フェッチユニット12に送信するループ処理ユニット30と、同じく命令デコードユニット28からデコード結果DRを受信し,分岐成立時/分岐不成立時(CB/UCB)のフェッチアドレスFAを命令フェッチユニット12に送信する分岐判定ユニット36と、命令デコードユニット28からデコード結果DRを受信する命令実行ユニット34とを備える。
―命令バッファ動作方法―
本発明の第1の実施の形態に係るプロセッサの命令バッファ動作方法は、以下に説明する通りである。
(a)命令フェッチは、分岐バッファ18,ノーマルバッファ16及び兼用バッファ14に空きがあったら行う。
(b)命令発行は、発行すべき命令が、分岐バッファ18,ノーマルバッファ16及び兼用バッファ14のいずれかにあったら行う。
(c)ノーマルバッファ16に命令がある時は、それらの命令をプリデコードして、分岐命令を探す。分岐先プリフェッチ可能な分岐命令を検出したら、分岐バッファ18に分岐先の命令をプリフェッチする。
(d)分岐が成立し、分岐バッファ18に命令がある場合は、その命令がノーマルバッファ16に移動される。
(e)分岐が成立し、兼用バッファ14にネストした分岐先の命令がある場合は、その命令が分岐バッファ18に移動される。
(f)分岐が成立し、兼用バッファ14に成立した分岐命令の先にある分岐命令に対応した分岐先の命令がある場合は、その命令はクリアされる。
(g)分岐が成立しない場合には、分岐バッファ18がクリアされ、ノーマルバッファ16内のプリデコードが再開される。
(h)分岐が成立しない場合には、兼用バッファ14に成立した分岐命令の先にある分岐命令に対応した分岐先の命令がある場合は、その命令はクリアされる。
(i)分岐が成立しない場合には、兼用バッファ14にネストした分岐先の命令がある場合は、その命令が分岐バッファ18に移動される。
(j)ループ命令実行後、兼用バッファ14に空きがある状態の時は、フェッチした命令をノーマルバッファ16と兼用バッファ14の両方に格納する。
(k)ループ命令を実行する際に、ノーマルバッファ16にある命令を兼用バッファ14にコピーする。
(l)ループ処理が発生したら、分岐バッファ18はクリアされる。
(m)A.ループ中でなく、分岐バッファ18に命令があり、兼用バッファ14に命令がないか又はループの先頭の命令がある場合、分岐バッファ18内の命令をプリデコードし、分岐を探す。分岐を検出したら、兼用バッファ14に対してプリフェッチする。
(n)B.ループ中でなく、分岐バッファ18に命令があり、兼用バッファ14に命令がないか又はループの先頭の命令がある場合、ノーマルバッファ16内の“分岐バッファ18に分岐先をプリフェッチしている分岐命令”の先の命令をプリデコードし、分岐を探す。分岐を検出したら、兼用バッファ14に対してプリフェッチする。
(基本構成)
本発明の第1の実施の形態のプロセッサの基本構成は、図2に示すように、メモリシステム10と、メモリシステム10にフェッチアドレスFAを供給する命令フェッチユニット12と、メモリシステム10からフェッチ命令FIをそれぞれ受信するループバッファ15,ノーマルバッファ16及び分岐バッファ18と、命令フェッチユニット12, ループバッファ15,ノーマルバッファ16及び分岐バッファ18を制御する命令バッファ制御ユニット22と、命令バッファ制御ユニット22に接続され,かつループバッファ15,ノーマルバッファ16及び分岐バッファ18に接続される発行命令選択ユニット20と、命令バッファ制御ユニット22に接続され,かつノーマルバッファ16及び分岐バッファ18に接続されるプリデコード制御ユニット24と、発行命令選択ユニット20から発行命令SIを受信し,デコード結果DRを命令バッファ制御ユニット22に送信する命令デコードユニット28と、命令デコードユニット28に接続され, ループ命令実行時にループの回数などを読み出す汎用レジスタファイル26と、プリデコード制御ユニット24に接続され,分岐先アドレスBTAを命令フェッチユニット12に送信するプリデコードユニット32と、命令デコードユニット28からデコード結果DRを受信し,ループ先頭アドレスLSAを命令フェッチユニット12に送信するループ処理ユニット30と、同じく命令デコードユニット28からデコード結果DRを受信し,分岐成立時/分岐不成立時(CB/UCB)のフェッチアドレスFAを命令フェッチユニット12に送信する分岐判定ユニット36と、命令デコードユニット28からデコード結果DRを受信する命令実行ユニット34とを備える。
―基本構成の命令バッファ動作方法―
本発明の第1の実施の形態のプロセッサの基本構成の命令バッファ動作方法は、以下に説明する通りである。
(a)命令フェッチは、分岐バッファ18,ノーマルバッファ16に空きがあったら行う。
(b)命令発行は、発行すべき命令が分岐バッファ18,ノーマルバッファ16及びループバッファ15のいずれかにあったら行う。
(c)ノーマルバッファ16に命令がある時は、それらの命令をプリデコードして、分岐命令を探す。分岐先プリフェッチ可能な分岐命令を検出したら、分岐バッファ18に分岐先の命令をプリフェッチする。
(d)分岐が成立したら、分岐バッファ18に命令がある場合は、その命令がノーマルバッファ16に移動される。
(e)分岐が成立しない場合には、分岐バッファ18がクリアされ、ノーマルバッファ16内のプリデコードが再開される。
(f)ループ命令実行後、ループバッファ15に空きがある状態の時は、フェッチした命令をノーマルバッファ16とループバッファ15の両方に格納する。
(g)ループ命令を実行する際に、ノーマルバッファ16にある命令をループバッファ15にコピーする。
(h)ループ処理が発生したら、分岐バッファ18はクリアされる。
―ステートマシン状態遷移による基本構成の動作解析―
基本構成の命令フェッチの動作は、図3に示すように、ステートマシン状態図を用いて表される。
(a)分岐を検出(DB:Detect Branch)し,プリフェッチを開始(SPF:Start Prefetch)すると、ノーマルバッファ16へフェッチを行うステートマシン状態ST70から、分岐バッファ18へフェッチを行うステートマシン状態ST74へ遷移する。
(b)分岐判定ユニット36で分岐が成立したか否か(T/NT:Taken/NotTaken)を判断し、分岐命令を実行するか(EBI:Execute Branch Instruction)或いはループ処理ユニット30でループの最後尾から先頭へジャンプが発生する(LT:Loop Taken)と、分岐バッファ18へフェッチを行うステートマシン状態ST74から、ノーマルバッファ16へフェッチを行うステートマシン状態ST70へ遷移する。
(c)ループ命令を実行(ELI:Execute Loop Instruction)すると、ノーマルバッファ16へフェッチを行うステートマシン状態ST70からノーマルバッファ16及びループバッファ15へフェッチを行うステートマシン状態ST72へ遷移する。
(d)ループバッファフル(LBF:Loop Buffer Full)の場合には、ノーマルバッファ16及びループバッファ15へフェッチを行うステートマシン状態ST72から、ノーマルバッファ16へフェッチを行うステートマシン状態ST70に遷移する。
(e)同じく、ループ命令を実行(ELI)すると、分岐バッファ18へフェッチを行うステートマシン状態ST74から、ノーマルバッファ16及びループバッファ15へフェッチを行うステートマシン状態ST72に遷移する。
(f)ループバッファフル(LBF)及び分岐を検出(DB)し,プリフェッチを開始(SPF)すると、ノーマルバッファ16及びループバッファ15へフェッチを行うステートマシン状態ST72から、分岐バッファ18へフェッチを行うステートマシン状態ST74へ遷移する。
(分岐系の構成)
本発明の第1の実施の形態に係るプロセッサの分岐系の構成は、図4に示すように、メモリシステム10と、メモリシステム10にフェッチアドレスFAを供給する命令フェッチユニット12と、メモリシステム10からフェッチ命令FIをそれぞれ受信するノーマルバッファ16及び分岐バッファ18と、命令フェッチユニット12, ノーマルバッファ16及び分岐バッファ18を制御する命令バッファ制御ユニット22と、命令バッファ制御ユニット22に接続され,かつノーマルバッファ16及び分岐バッファ18に接続される発行命令選択ユニット20と、命令バッファ制御ユニット22に接続され,かつノーマルバッファ16及び分岐バッファ18に接続されるプリデコード制御ユニット24と、発行命令選択ユニット20から発行命令SIを受信し,デコード結果DRを命令バッファ制御ユニット22に送信する命令デコードユニット28と、命令デコードユニット28に接続され,ループ命令実行時にループの回数などを読み出す汎用レジスタファイル26と、プリデコード制御ユニット24に接続され,分岐先アドレスBTAを命令フェッチユニット12に送信するプリデコードユニット32と、命令デコードユニット28からデコード結果DRを受信し,ループ先頭アドレスLSAを命令フェッチユニット12に送信するループ処理ユニット30と、同じく命令デコードユニット28からデコード結果DRを受信し,分岐成立時/分岐不成立時(CB/UCB)のフェッチアドレスFAを命令フェッチユニット12に送信する分岐判定ユニット36と、命令デコードユニット28からデコード結果DRを受信する命令実行ユニット34とを備える。
―分岐系の命令バッファ動作方法―
本発明の第1の実施の形態に係るプロセッサの分岐系の命令バッファ動作方法は、以下に示す通りである。
(a)命令フェッチは、ノーマルバッファ16及び分岐バッファ18に空きがあったら行う。
(b)命令発行は、発行すべき命令がノーマルバッファ16及び分岐バッファ18のいずれかにあったら行う。
(c)ノーマルバッファ16に命令がある時は、それらの命令をプリデコードして、分岐命令を探す。分岐先プリフェッチ可能な分岐命令を検出したら、分岐バッファ18に分岐先の命令をプリフェッチする。
(d)分岐が成立したら、分岐バッファ18に命令がある場合は、その命令がノーマルバッファ16に移動される。
(e)分岐が成立しない場合には、分岐バッファ18がクリアされ、ノーマルバッファ16内のプリデコードが再開される。
(f)ループの先頭に戻る処理が発生したら、分岐バッファ18はクリアされ、ループの先頭からフェッチをやり直す。
(分岐高速化の動作例)
本発明の第1の実施の形態に係るプロセッサの分岐高速化の動作例を説明する。
(a)ノーマルバッファ16に貯まっている命令を走査してプリデコードし、分岐先がプリデコードの時点で判明する分岐命令を見つける。
(b)プリデコードで判明した分岐先の命令をフェッチし、分岐先保持用の分岐バッファ18に格納する。
(c)対象となる分岐が成立したら、分岐バッファ18からノーマルバッファ16に内容をコピーし、分岐先の命令フェッチのオーバーヘッドなしで分岐先の命令を発行し始める。
対象となる分岐が成立しなかったら、分岐バッファ18の内容を破棄する。
―ステートマシン状態遷移によるフェッチ系の動作解析―
本発明の第1の実施の形態に係るプロセッサの分岐高速化の動作において、フェッチ系の動作は、図5に示すように、ステートマシン状態図を用いて表される。
(a)分岐を検出(DB)し,プリフェッチを開始(SPF)すると、ノーマルバッファ16へフェッチを行うステートマシン状態ST80から、分岐バッファ18へフェッチを行うステートマシン状態ST82へ遷移する。
(b)分岐判定ユニット36で分岐が成立したか否か(T/NT)を判断し、分岐命令を実行(EBI)するか或いはループ処理ユニット30でループの最後尾から先頭へジャンプが発生する(LT)と、分岐バッファ18へフェッチを行うステートマシン状態ST82から、ノーマルバッファ16へフェッチを行うステートマシン状態ST80へ遷移する。
―発行系の動作フローチャート―
本発明の第1の実施の形態に係るプロセッサの分岐高速化の動作において、発行系の動作は、図6に示すように、フローチャートを用いて表される。
(a)まず、前段階として、ステップS11において、命令バッファ制御ユニット22の指示に従って、発行命令選択ユニット20がノーマルバッファ16及び分岐バッファ18から1つの命令を選択し、発行する。
(b)次に、ステップS12において、分岐判定ユニット36において発行された命令によって指示される分岐が成立したか否かを判断する。
(c)ステップS12において、NOであるならば、ステップS13に移行し、命令バッファ制御ユニット22が分岐バッファ18をクリアする。
(d)次に、ステップS14において、命令バッファ制御ユニット22で次に発行するアドレス(プログラムカウンタ:PC)をインクリメントし、ステップS15に移行する。
(e)次に、ステップS15において、命令バッファ制御ユニット22が次に発行する命令がノーマルバッファ16に在るか否かを判断する。
(f)ステップS15において、NOであるならば、ステップS16に移行し、命令バッファ制御ユニット22からの指示に従い、命令フェッチユニット12が次に発行する命令をメモリシステム10からフェッチし、ノーマルバッファ16に格納し、その後ステップS20に移行する。
(g)ステップS15において、YESであるならば、ステップS20に移行し、命令バッファ制御ユニット22からの指示に従い、発行命令選択ユニット20がノーマルバッファ16から発行命令を選択して、発行する。
(h)ステップS12において、YESであるならば、ステップS17に移行し、命令バッファ制御ユニット22で次に発行するアドレス(プログラムカウンタ:PC)を分岐先アドレスにする。分岐先アドレスは命令デコードユニット28から送られてくる。
(i)次に、ステップS18において、命令バッファ制御ユニット22が分岐バッファ18に命令があるか否かを判断する。
(j)ステップS18において、NOであるならば、ステップS19に移行し、命令バッファ制御ユニット22からの指示に従い、命令バッファ制御ユニット22が分岐先の命令をメモリシステム10からフェッチし、ノーマルバッファ16に格納すると共に、ステップS20に移行する。分岐先アドレスは、分岐判定ユニット36から命令フェッチユニット12に送られてくる。
(k)ステップS18において、YESであるならば、ステップS21移行し、命令バッファ制御ユニット22からの指示に従い、分岐バッファ18の内容をノーマルバッファ16に移動コピーする。
(l)同時に、ステップS22において、命令バッファ制御ユニット22からの指示に従い、発行命令選択ユニット20が分岐バッファ18から発行命令を選択して、発行する。
図6において、Cで囲まれて表示されるステップS14〜16及びステップS20は、分岐以外の命令の場合と同様であり、例えば、後述するループ処理のフローチャートを表す図9におけるステップS54,ステップS56〜58と同様である。
(ループ系の構成)
本発明の第1の実施の形態に係るプロセッサのループ系の構成は、図7に示すように、メモリシステム10と、メモリシステム10にフェッチアドレスFAを供給する命令フェッチユニット12と、メモリシステム10からフェッチ命令FIをそれぞれ受信するループバッファ15及びノーマルバッファ16と、命令フェッチユニット12, ループバッファ15及びノーマルバッファ16を制御する命令バッファ制御ユニット22と、命令バッファ制御ユニット22に接続され,かつループバッファ15及びノーマルバッファ16に接続される発行命令選択ユニット20と、発行命令選択ユニット20から発行命令SIを受信し,デコード結果DRを命令バッファ制御ユニット22に送信する命令デコードユニット28と、命令デコードユニット28に接続され,ループ命令実行時にループの回数などを読み出す汎用レジスタファイル26と、命令デコードユニット28からデコード結果DRを受信し,ループ先頭アドレスLSAを命令フェッチユニット12に送信するループ処理ユニット30と、同じく命令デコードユニット28からデコード結果DRを受信し,分岐成立時/分岐不成立時(CB/UCB)のフェッチアドレスFAを命令フェッチユニット12に送信する分岐判定ユニット36と、命令デコードユニット28からデコード結果DRを受信する命令実行ユニット34とを備える。
―ループ系の命令バッファ動作方法―
本発明の第1の実施の形態に係るプロセッサのループ系の命令バッファ動作方法は、以下に示す通りである。
(a)命令フェッチは、ノーマルバッファ16に空きがあったら行う。
(b)ループ命令実行後、ループバッファ15に空きがある状態の時は、フェッチした命令をノーマルバッファ16とループバッファ15の両方に格納する。
(c)命令発行は、発行すべき命令がノーマルバッファ16とループバッファ15のいずれかにあったら行う。ループの先頭に戻る処理が発生する時は、ループバッファ15に命令がある。
(d)ループ命令を実行する際に、ノーマルバッファ16にある命令をループバッファ15にコピーする。
(e)分岐が成立したら、ノーマルバッファ16はクリアされ、分岐先からフェッチをやり直す。
(ループ処理の動作例)
本発明の第1の実施の形態に係るプロセッサのループ処理の動作例を説明する。
(a)ループを設定する命令を実行する際に、ノーマルバッファ16に保存されているはずのループの先頭の命令をループブロック保持用のループバッファ15にコピーする。
(b)ループ終端の命令まで発行したら、ループバッファ15からノーマルバッファ16に内容をコピーし、命令フェッチのオーバーヘッドなしでループの先頭の命令を発行し始める。
―ステートマシン状態遷移によるループ系の動作解析―
本発明の第1の実施の形態に係るプロセッサのループ処理の動作において、フェッチ系の動作は、図8に示すように、ステートマシン状態図を用いて表される。
(a)ループ命令を実行(ELI)すると、ノーマルバッファ16へフェッチを行うステートマシン状態ST100から、ノーマルバッファ16及びループバッファ15へフェッチを行うステートマシン状態ST102へ遷移する。
(b)ループバッファ15がフル(LBF)の場合には、ノーマルバッファ16及びループバッファ15へフェッチを行うステートマシン状態ST102から、ノーマルバッファ16へフェッチを行うステートマシン状態ST100へ遷移する。
―発行系の動作フローチャート―
本発明の第1の実施の形態に係るプロセッサのループ処理の動作において、発行系の動作は、図9に示すように、フローチャートを用いて表される。
(a)まず、前段階として、ステップS50において、命令バッファ制御ユニット22の指示に従って、発行命令選択ユニット20がノーマルバッファ16及びループバッファ15から1つの命令を選択し、発行する。
(b)次に、ステップS51において、ループ処理ユニット30において発行された命令がループ開始命令であるか否かを判断する。
(c)次に、ステップS51において、YESであるならば、ステップS52に移行し、命令バッファ制御ユニット22からの指示に従って、ノーマルバッファ16の命令をループバッファ15にコピーすると共に、ステップS54に移行する。
(d)ステップS51において、NOであるならば、ステップS53に移行する。
(e)次に、ステップS53において、ループ処理ユニット30においてループの最後尾から先頭へジャンプが発生するか否か、即ち、ループが成立するか否かを判断する。
(f)ステップS53において、YESであるならば、ステップS55に移行し、ループの先頭アドレスにジャンプする。即ち、命令バッファ制御ユニット22で次に発行するアドレス(プログラムカウンタ:PC)をループの先頭アドレスに設定する。ここで、ループの先頭アドレスは、ループ処理ユニット30から送られてくる。
(g)ステップS53において、NOであるならば、ステップS54に移行し、命令バッファ制御ユニット22で次に発行するアドレス(プログラムカウンタ:PC)をインクリメントする。
(h)次に、ステップS56において、命令バッファ制御ユニット22が次に発行する命令がノーマルバッファ16に在るか否かを判断する。
(i)ステップS56において、NOであるならば、ステップS57に移行し、命令バッファ制御ユニット22からの指示に従い、命令フェッチユニット12が次に発行する命令をメモリシステム10からフェッチし、ノーマルバッファ16に格納し、その後ステップS58に移行する。
(j)ステップS56において、YESであるならば、ステップS58に移行し、命令バッファ制御ユニット22からの指示に従い、発行命令選択ユニット20がノーマルバッファ16から発行命令を選択して、発行する。
(k)ステップS55に引続いて、ステップS59において、命令バッファ制御ユニット22からの指示に従い、ループバッファ15の内容をノーマルバッファ16にコピーする。
(l)同時に、ステップS60において、命令バッファ制御ユニット22からの指示に従い、発行命令選択ユニット20がループバッファ15から発行命令を選択して、発行する。
(ループ処理ユニット)
本発明の第1の実施の形態に係るプロセッサの構成に適用するループ処理ユニット30は、図10に示すように、命令デコードユニット28から送られるループ回数LPCと減算器54の出力を選択するセレクタ50と、セレクタ50に接続され、残りループ回数を保持するレジスタ51と、命令デコードユニット28からループ先頭アドレスLSAを受信するレジスタ52と、同じく命令デコードユニット28からループ終端アドレスLEAを受信するレジスタ53と、レジスタ51の出力と比較器58の出力とを減算する減算器54と、レジスタ51に接続された比較器55と、レジスタ52の出力と命令バッファ制御ユニット22からの発行命令SIのプログラムカウントPC(SI)とを比較する比較器56と、レジスタ53の出力と命令バッファ制御ユニット22からの発行命令SIのプログラムカウントPC(SI)とを比較する比較器57及び58と、比較器55,56及び57に接続されるANDゲート59とを備える。
減算器54においては、ループ終端でループ回数LPCをデクリメントする。
レジスタ52の出力信号であるループ先頭アドレスLSAは、命令バッファ制御ユニット22のみならず、命令フェッチユニット12にも送られる。ANDゲート59においては、次の3つの条件を満足すると、ループ中であると判断される。即ち、(i)残りのループ回数LPCが1以上、(ii)プログラムカウントPCがループ先頭アドレスLSA以上、(iii)プログラムカウントPCがループ終端アドレスLEA以下の3条件である。
ANDゲート59の出力は、ループ中フラグFLを介して命令バッファ制御ユニット22へ送られる。
(ループプログラム例 )
0x1000 番地から0x2000 番地に、32バイトのデータをコピーするプログラムを以下に示す。32バイトは、lw/swなどの4バイトのワードアクセスで、8回分に相当する。ここで、0xは、16進数であることを示す。
C言語で表示すると、例えば、次のようなプログラム形式となる。
for(i=0;i<8;i++) {
b[i] = a[i];
}
本発明の第1の実施の形態に係るプロセッサにおいて適用可能な終端のみを指定できる場合のプログラム形式を図11に示す。なお、$1は汎用レジスタファイル26の1番を表している。
本発明の第1の実施の形態に係るプロセッサにおいて適用可能な先頭と終端を両方指定できる場合のプログラム形式を図12に示す。
本発明の第1の実施の形態に係るプロセッサにおいて適用可能な更に別のプロセッサの場合のプログラム形式を図13に示す。
(ループバッファを分岐先プリフェッチに用いる方法)
本発明の第1の実施の形態に係るプロセッサにおいて、ループバッファ15をループ処理を行っていない際に、兼用バッファ14として、分岐先プリフェッチに用いる方法としては、次の(A)分岐のネストを形成する方法、及び(B)分岐不成立時の予防を実行する方法の2通りが考えられる。以下それぞれ、詳細に説明する。
(A)分岐のネストを形成する方法
分岐先の命令列をプリデコードし、分岐命令を発見したらその分岐先をさらにプリフェッチする。最初のプリフェッチの分岐直後に分岐命令があった場合に、分岐先にある分岐命令のプリデコードとプリフェッチが遅れて分岐のレイテンシを隠蔽しきれなくなるのを防止できる。
―分岐のネストを形成する方法のプログラムリスト例―
分岐のネストを形成する方法のプログラムのリスト例は以下の通りである。
nop
(a) bnez $1, A: <-分岐バッファ18にプリフェッチ
nop
(b) beqz $2, B: <- プリフェッチしない
nop
A: nop
(c) bra $3, C: <- 兼用バッファ14にプリフェッチ
nop
プリフェッチされて分岐バッファ18に格納された(a)の分岐先をプリデコードし、そこで(c)の分岐を発見した場合、(c)の分岐先を兼用バッファ14にプリフェッチする。(a)の分岐が成立した後、分岐先にすぐまた分岐命令があった場合の分岐遅延を削減することができる。
―ステートマシン状態遷移によるフェッチ系の動作解析―
分岐のネストを形成する方法において、フェッチ系の動作は、図14に示すように、ステートマシン状態図を用いて表される。
(a)分岐を検出(DB)し,プリフェッチを開始(SPF)すると、ノーマルバッファ16へフェッチを行うステートマシン状態ST110から、分岐バッファ18へフェッチを行うステートマシン状態ST116へ遷移する。
(b)分岐判定ユニット36で分岐が成立したか否か(T/NT)を判断し、分岐命令を実行(EBI)するか或いはループ処理ユニット30でループの最後尾から先頭へジャンプが発生する(LT)と、分岐バッファ18へフェッチを行うステートマシン状態ST116から、ノーマルバッファ16へフェッチを行うステートマシン状態ST110へ遷移する。
(c)ループ命令を実行(ELI)すると、ノーマルバッファ16へフェッチを行うステートマシン状態ST110からノーマルバッファ16及び兼用バッファ14へフェッチを行うステートマシン状態ST112へ遷移する。
(d)ループバッファフル(LBF)或いはループイクジット(EXL:Exit Loop)の場合には、ノーマルバッファ16及び兼用バッファ14へフェッチを行うステートマシン状態ST112から、ノーマルバッファ16へフェッチを行うステートマシン状態ST110に遷移する。
(e)ループ命令を実行(ELI)すると、分岐バッファ18へフェッチを行うステートマシン状態ST116から、ノーマルバッファ16及び兼用バッファ14へフェッチを行うステートマシン状態ST112に遷移する。
(f)分岐バッファ(BBUF)18において分岐を検出(DB)し,ループを脱出(OUTL:Out of Loop)し,プリフェッチを開始(SPF)すると、分岐バッファ18へフェッチを行うステートマシン状態ST116から、兼用バッファ14へフェッチを行うステートマシン状態ST114へ遷移する。
(g)兼用バッファ14へフェッチを行うステートマシン状態ST114において、ループ命令を実行(ELI)すると、兼用バッファ14へフェッチを行うステートマシン状態ST114から、ノーマルバッファ16及び兼用バッファ14へフェッチを行うステートマシン状態ST112に遷移する。
(h)兼用バッファ14へフェッチを行うステートマシン状態ST114において、分岐判定ユニット36で分岐が成立(BT:Branch Taken)すると、兼用バッファ14へフェッチを行うステートマシン状態ST114から、分岐バッファ18へフェッチを行うステートマシン状態ST116に遷移する。
(i)兼用バッファ14へフェッチを行うステートマシン状態ST114において、分岐判定ユニット36で分岐が不成立の場合(BNT:Branch Not Taken)、兼用バッファ14へフェッチを行うステートマシン状態ST114から、ノーマルバッファ16へフェッチを行うステートマシン状態ST110に遷移する。
どのような状態であっても、ループ命令を実行(ELI)した時点で、ノーマルバッファ16及び兼用バッファ14へフェッチを行うステートマシン状態ST112に示すように、ノーマルバッファ16と兼用バッファ14の両方にフェッチするステートマシン状態ST112に移行する。
ループ中であっても、プリデコードによって分岐命令を発見した場合、分岐バッファ18に対してプリフェッチを開始できる。即ち、ノーマルバッファ16へフェッチを行うステートマシン状態ST110から、分岐バッファ18へフェッチを行うステートマシン状態ST116へ遷移する。
兼用バッファ14へフェッチを行うステートマシン状態ST114において、兼用バッファ14を2段目の分岐先プリフェッチに用いる時には、ループ処理ユニット30のループ中フラグ(図10のFL参照)をチェックする。
―発行系の動作フローチャート―
分岐のネストを形成する方法において、発行系の動作は、図15に示すように、フローチャートを用いて表される。
(a)ステップS30において、スタートする。
(b)ステップS31において、ノーマルバッファ16に命令があるか否かを判断する。
(c)ステップS31において、NOであるならば、ステップS32に移行し、ノーマルフェッチをウェイトし、ステップS31に戻る。
(d)ステップS31において、YESであるならば、ステップS33に移行し、ノーマルバッファ16をプリデコードする。
(e)次に、ステップS34に進み、分岐があるか否かを判断する。
(f)ステップS34において、NOであるならば、ステップS35において次の命令に進み、ステップS31に戻る。
(g)ステップS34において、YESであるならば、ステップS36において分岐バッファ18に対して、プリフェッチを開始する。
(h)次に、ステップS370において、プリフェッチをウェイトする。
(i)次に、ステップS38において、分岐を実行するか否かを判断する。
(j)ステップS38において、YESであるならば、ステップS31に戻る。
(k)ステップS38において、NOであるならば、ステップ390に進む。
(l)次に、ステップS390において、分岐バッファ18に命令があるか否かを判断する。
(m)ステップS390において、NOであるならば、ステップ41においてノーマルフェッチをウェイトし、ステップS38に戻る。
(n)ステップS390において、YESであるならば、ステップ400において分岐バッファ18をプリデコードする。
(o)次に、ステップS42において、分岐があるか否かを判断する。
(p)ステップS42において、NOであるならば、ステップ43に進み、次の命令に進み、ステップS38に戻る。
(q)ステップS42において、YESであるならば、ステップ44に進み、兼用バッファ14に対してプリフェッチを開始する。
(r)次に、ステップS45に進み、分岐実行をウェイトする。
(s)次に、ステップS460において、分岐が成立するか否かを判断する。
(t)ステップS460において、NOであるならば、ステップS31に戻る。即ち、兼用バッファ14において、分岐判定ユニット36で分岐が不成立(BNT)の場合、兼用バッファ14から、ノーマルバッファ16に移行する。
(u)ステップS460において、YESであるならば、兼用バッファ14から分岐バッファ18に移行し、ステップS400に戻る。即ち、兼用バッファ14において、分岐判定ユニット36で分岐が成立(BT)すると、兼用バッファ14から、分岐バッファ18に移行する。兼用バッファ14を2段目の分岐先プリフェッチに用いる時には、ループ処理ユニット30のループ中フラグFL(図10参照)をチェックする。
図15において、ステップS30〜ステップS38までは、分岐バッファ18を使用するプリフェッチ動作に対応している。一方、ステップS390〜ステップS460までは、兼用バッファ14を使用するプリフェッチ動作に対応している。
本発明の第1の実施の形態に係るプロセッサにおいて、ループバッファ15をループ処理を行っていない際に、兼用バッファ14として、分岐先プリフェッチに用いる方法として、分岐のネストを形成する方法によれば、ループ中以外の時間にループバッファを2段目の分岐用バッファとして用いることができる。即ち、ループ処理を行っていない際にループバッファを2レベル目の分岐先プリフェッチに用いることができる。

(B)分岐不成立時の予防を実行する方法
本発明の第1の実施の形態に係るプロセッサにおいて、ループバッファ15をループ処理を行っていない際に、兼用バッファ14として、分岐先プリフェッチに用いる方法としては、分岐不成立時の予防を実行する方法がある。即ち、プリフェッチを行っている分岐命令の分岐が不成立だった場合に実行されるであろう命令列(連続した先にある命令列)をプリデコードし、分岐命令を発見したらその分岐先をプリフェッチする。分岐命令が連続していて、1つ目の分岐命令の分岐先をプリフェッチしたが分岐が不成立であった場合に2つ目の分岐命令のプリデコードとプリフェッチが遅れて分岐のレイテンシを隠蔽しきれなくなるのを防止できる。
―分岐不成立時の予防を実行する方法のプログラムのリスト例―
分岐不成立時の予防を実行する方法のプログラムのリスト例は以下の通りである。
nop
(a) bnez $1, A: <-分岐バッファ18にプリフェッチ
nop
(b) beqz $2, B: <-兼用バッファ14にプリフェッチ
nop
A: nop
(c) bra $3, C: <- プリフェッチしない
nop
ノーマルバッファ16内のプリデコードによって(a)の分岐命令を検出してプリフェッチを開始しても、さらにノーマルバッファ16内で(a)の先の命令をプリデコードする。その結果(b)が検出されたら、(a)の分岐が不成立だった場合の補償として、(b)の分岐命令の分岐先を兼用バッファ14にプリフェッチする。
―ステートマシン状態遷移によるフェッチ系の動作解析―
分岐不成立時の予防を実行する方法において、フェッチ系の動作は、図16に示すように、ステートマシン状態図を用いて表される。
(a)ノーマルバッファ(NB)16において分岐を検出(DB)し,プリフェッチを開始(SPF)すると、ノーマルバッファ16へフェッチを行うステートマシン状態ST90から、分岐バッファ18へフェッチを行うステートマシン状態ST96へ遷移する。
(b)分岐判定ユニット36で分岐が成立したか否か(T/NT)を判断し、分岐命令を実行(EBI)するか或いはループ処理ユニット30でループの最後尾から先頭へジャンプが発生(LT)すると、分岐バッファ18へフェッチを行うステートマシン状態ST96から、ノーマルバッファ16へフェッチを行うステートマシン状態ST90へ遷移する。
(c)ループ命令を実行(ELI)すると、ノーマルバッファ16へフェッチを行うステートマシン状態ST90からノーマルバッファ16及び兼用バッファ14へフェッチを行うステートマシン状態ST92へ遷移する。
(d)ループバッファフル(LBF)或いはループイクジット(EXL)の場合には、ノーマルバッファ16及び兼用バッファ14へフェッチを行うステートマシン状態ST92から、ノーマルバッファ16へフェッチを行うステートマシン状態ST90に遷移する。
(e)ループ命令を実行(ELI)すると、分岐バッファ18へフェッチを行うステートマシン状態ST96から、ノーマルバッファ16及び兼用バッファ14へフェッチを行うステートマシン状態ST92に遷移する。
(f)ノーマルバッファ(NB)16において分岐を検出(DB)し,ループを脱出(OUTL)し,プリフェッチを開始(SPF)すると、分岐バッファ18へフェッチを行うステートマシン状態ST96から、兼用バッファ14へフェッチを行うステートマシン状態ST94へ遷移する。
(g)兼用バッファ14へフェッチを行うステートマシン状態ST94において、ループ命令を実行(ELI)すると、兼用バッファ14へフェッチを行うステートマシン状態ST94から、ノーマルバッファ16及び兼用バッファ14へフェッチを行うステートマシン状態ST92に遷移する。
(h)兼用バッファ14へフェッチを行うステートマシン状態ST94において、分岐判定ユニット36で分岐が成立したか否か(T/NT)に係わらず、分岐命令を実行(EBI)すると、兼用バッファ14へフェッチを行うステートマシン状態ST94から、ノーマルバッファ16へフェッチを行うステートマシン状態ST90に遷移する。
どのような状態であっても、ループ命令を実行(ELI)した時点で、ノーマルバッファ16及び兼用バッファ14へフェッチを行うステートマシン状態ST92に示すように、ノーマルバッファ16と兼用バッファ14の両方にフェッチするステートマシン状態ST92に移行する。
ループ中であっても、プリデコードによって分岐命令を発見した場合、分岐バッファ18に対してプリフェッチを開始できる。即ち、ノーマルバッファ16へフェッチを行うステートマシン状態ST90から、分岐バッファ18へフェッチを行うステートマシン状態ST96へ遷移する。
兼用バッファ14へフェッチを行うステートマシン状態ST94において、兼用バッファ14を分岐不成立時に次に実行することになる分岐命令の分岐先プリフェッチに用いる時には、ループ処理ユニット30のループ中フラグFL(図10参照)をチェックする。
―発行系の動作フローチャート―
分岐不成立時の予防を実行する方法において、発行系の動作は、図17に示すように、フローチャートを用いて表される。
(a)ステップ30において、スタートする。
(b)ステップS31において、ノーマルバッファ16に命令があるか否かを判断する。
(c)ステップS31において、NOであるならば、ステップS32に移行し、ノーマルフェッチをウェイトし、ステップS31に戻る。
(d)ステップS31において、YESであるならば、ステップS33に移行し、ノーマルバッファ16をプリデコードする。
(e)次に、ステップS34に進み、分岐があるか否かを判断する。
(f)ステップS34において、NOであるならば、ステップS35において次の命令に進み、ステップS31に戻る。
(g)ステップS34において、YESであるならば、ステップS36において分岐バッファ18に対して、プリフェッチを開始する。
(h)次に、ステップS37において、次の命令に進む。
(i)次に、ステップS38において、分岐を実行するか否かを判断する。
(j)ステップS38において、YESであるならば、ステップS31に戻る。
(k)ステップS38において、NOであるならば、ステップ39に進む。
(l)次に、ステップS39において、ノーマルバッファ16に命令があるか否かを判断する。
(m)ステップS39において、NOであるならば、ステップ41においてノーマルフェッチをウェイトし、ステップS38に戻る。
(n)ステップS39において、YESであるならば、ステップ40においてノーマルバッファ16をプリデコードする。
(o)次に、ステップS42において、分岐があるか否かを判断する。
(p)ステップS42において、NOであるならば、ステップ43に進み、次の命令に進み、ステップS38に戻る。
(q)ステップS42において、YESであるならば、ステップ44に進み、兼用バッファ14に対してプリフェッチを開始する。
(r)次に、ステップS45に進み、分岐実行をウェイトし、ステップS31に戻る。即ち、兼用バッファ14において、分岐判定ユニット36で分岐が成立したか否か(T/NT)に係わらず、分岐命令を実行(EBI)すると、兼用バッファ14から、ノーマルバッファ16に移行する。
図17において、ステップS30〜ステップS38までは、分岐バッファ18を使用するプリフェッチ動作に対応している。一方、ステップS39〜ステップS45までは、兼用バッファ14を使用するプリフェッチ動作に対応している。
本発明の第1の実施の形態に係るプロセッサにおいて、ループバッファ15を分岐先プリフェッチに用いる方法として、分岐不成立時の予防を実行する方法によれば、プリフェッチを行っている分岐命令の分岐が不成立だった場合に実行されるであろう命令列(連続した先にある命令列)をプリデコードし、分岐命令を発見したらその分岐先をプリフェッチする。分岐命令が連続していて、1つ目の分岐命令の分岐先をプリフェッチしたが分岐が不成立であった場合に2つ目の分岐命令のプリデコードとプリフェッチが遅れて分岐のレイテンシを隠蔽しきれなくなるのを防止できる。
本発明の第1の実施の形態に係るプロセッサ及びプロセッサの命令バッファ動作方法によれば、分岐高速化とハードウェアによるループ処理をそれぞれ専用の命令バッファを用いて行うプロセッサにおいて、分岐用の分岐バッファ18とループ用の兼用バッファ14の構造を揃えるか兼用バッファ14が分岐バッファ18と同じ構造を内包することによって、ループ処理を行っていない際に兼用バッファ14を2レベル目の分岐先プリフェッチに用いることができるため、兼用バッファ14の利用率の向上と,更なる分岐高速化を行うことが可能となる。
[その他の実施の形態]
上記のように、本発明は第1の実施の形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなろう。
このように、本発明はここでは記載していない様々な実施の形態等を含むことは勿論である。したがって、本発明の技術的範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。
本発明の第1の実施の形態に係るプロセッサの模式的ブロック構成図。 本発明の第1の実施の形態に係るプロセッサの基本構成の模式的ブロック構成図。 本発明の第1の実施の形態のプロセッサの基本構成の動作を表すステートマシン状態図。 本発明の第1の実施の形態に係るプロセッサの分岐系の模式的ブロック構成図。 本発明の第1の実施の形態に係るプロセッサの分岐高速化の動作において、フェッチ系の動作を表すステートマシン状態図。 本発明の第1の実施の形態に係るプロセッサの分岐高速化の動作において、発行系の動作を表すフローチャート図。 本発明の第1の実施の形態に係るプロセッサのループ系の模式的ブロック構成図。 本発明の第1の実施の形態に係るプロセッサのループ処理の動作において、フェッチ系の動作を表すステートマシン状態図。 本発明の第1の実施の形態に係るプロセッサのループ処理の動作において、発行系の動作を表すフローチャート図。 本発明の第1の実施の形態に係るプロセッサに適用するループ処理ユニットの模式的ブロック構成図。 本発明の第1の実施の形態に係るプロセッサにおいて適用可能な終端のみを指定できる場合のプログラム形式。 本発明の第1の実施の形態に係るプロセッサにおいて適用可能な先頭と終端を両方指定できる場合のプログラム形式。 本発明の第1の実施の形態に係るプロセッサにおいて適用可能な更に別のプロセッサの場合のプログラム形式。 本発明の第1の実施の形態に係るプロセッサにおいて、分岐のネストを形成する方法におけるフェッチ系の動作を表すステートマシン状態図。 本発明の第1の実施の形態に係るプロセッサにおいて、分岐のネストを形成する方法における発行系の動作を表すフローチャート図。 本発明の第1の実施の形態に係るプロセッサにおいて、分岐不成立時の予防を実行する方法におけるフェッチ系の動作を表すステートマシン状態図。 本発明の第1の実施の形態に係るプロセッサにおいて、分岐不成立時の予防を実行する方法における発行系の動作を表すフローチャート図。
符号の説明
10…メモリシステム
12…命令フェッチユニット
14…兼用バッファ
15…ループバッファ
16…ノーマルバッファ
18…分岐バッファ
20…発行命令選択ユニット
22…命令バッファ選択ユニット
24…プリデコード制御ユニット
26…汎用レジスタファイル
28…命令デコードユニット
30…ループ処理ユニット
32…プリデコードユニット
34…命令実行ユニット
36…分岐判定ユニット
50…セレクタ
52,53…レジスタ
54…減算器
55,56,57,58…比較器
59…ANDゲート
S11〜S22,S30〜S45,S50〜S60,S390,S400,S460…ステップ
ST70〜ST74,ST80〜ST82,ST90〜ST94,ST100〜ST102,ST110〜ST116…ステートマシン状態

Claims (5)

  1. メモリシステムと、
    前記メモリシステムにフェッチアドレスを供給する命令フェッチユニットと、
    前記メモリシステムからフェッチ命令をそれぞれ受信する分岐バッファ,ノーマルバッファ及び兼用バッファと、
    前記命令フェッチユニット, 前記分岐バッファ,前記ノーマルバッファ及び前記兼用バッファを制御する命令バッファ制御ユニットと、
    前記命令バッファ制御ユニットの指示に従って、前記ノーマルバッファ,前記分岐バッファ及び前記兼用バッファから発行命令を選択し、前記発行命令を発行する発行命令選択ユニットと、
    前記発行命令選択ユニットから前記発行命令を受信し,かつ前記発行命令をデコードし、該デコード結果を前記命令バッファ制御ユニットに送信する命令デコードユニットと、
    前記命令デコードユニットから前記デコード結果を受信し,ループ先頭アドレスを前記命令フェッチユニットに送信するループ処理ユニットと、
    前記命令デコードユニットからデコード結果を受信し,分岐成立時/分岐不成立時のフェッチアドレスを前記命令フェッチユニットに送信する分岐判定ユニット
    とを備えることを特徴とするプロセッサ。
  2. 前記ノーマルバッファ内の命令をプリデコードし、判明した分岐先の命令をプリフェッチし、前記分岐バッファに格納すると共に、対象となる分岐が成立したら、前記分岐バッファから分岐先の命令を発行すると共に前記分岐バッファから前記ノーマルバッファに内容をコピーし、対象となる分岐が成立しなかったら、前記分岐バッファの内容を破棄することを特徴とする請求項1記載のプロセッサ。
  3. ループの実行を行う際にループの先頭の命令および後続の命令を前記兼用バッファに保持し、ループ処理が発生したら前記兼用バッファからループの先頭の命令及び後続の命令を発行し、ループ処理を行っていない際に前記兼用バッファを2レベル目の分岐先プリフェッチに用いることを特徴とする請求項1記載のプロセッサ。
  4. 命令バッファ制御ユニットの指示に従って、発行命令選択ユニットがノーマルバッファ及び分岐バッファから命令を選択し、発行するステップと、
    分岐判定ユニットにおいて発行された命令によって指示される分岐が成立したか否かを判断するステップと、
    NOであるならば、前記命令バッファ制御ユニットが前記分岐バッファをクリアするステップと、
    YESであるならば、前記命令バッファ制御ユニットで次に発行するアドレスを分岐先アドレスにするステップと、
    命令バッファ制御ユニットで次に発行するアドレスをインクリメントするステップと、
    次に、前記命令バッファ制御ユニットが次に発行する命令が前記ノーマルバッファに在るか否かを判断するステップと、
    NOであるならば、前記命令バッファ制御ユニットからの指示に従い、命令フェッチユニットが次に発行する命令をメモリシステムからフェッチし、前記ノーマルバッファに格納するステップと、
    YESであるならば、前記命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットが前記ノーマルバッファから発行命令を選択して、発行するステップと、
    次に、前記命令バッファ制御ユニットが前記分岐バッファに命令があるか否かを判断するステップと、
    NOであるならば、前記命令バッファ制御ユニットからの指示に従い、前記命令バッファ制御ユニットが分岐先の命令を前記メモリシステムからフェッチし、前記ノーマルバッファに格納するステップと、
    YESであるならば、前記命令バッファ制御ユニットからの指示に従い、前記分岐バッファの内容を前記ノーマルバッファに移動コピーすると同時に、前記命令バッファ制御ユニットからの指示に従い、前記発行命令選択ユニットが前記分岐バッファから発行命令を選択して、発行するステップ
    とを有することを特徴とするプロセッサの命令バッファ動作方法。
  5. 命令バッファ制御ユニットの指示に従って、発行命令選択ユニットがノーマルバッファ及びループバッファから命令を選択し、発行するステップと、
    ループ処理ユニットにおいて発行された命令がループ開始命令であるか否かを判断するステップと、
    YESであるならば、命令バッファ制御ユニットからの指示に従って、ノーマルバッファの命令をループバッファにコピーするテップと、
    NOであるならば、次に、ループ処理ユニットにおいてループの最後尾から先頭へジャンプが発生し、ループが成立するか否かを判断するステップと、
    YESであるならば、ループの先頭アドレスにジャンプし、命令バッファ制御ユニットで次に発行するアドレスをループの先頭アドレスに設定するステップと、
    NOであるならば、命令バッファ制御ユニットで次に発行するアドレスをインクリメントするステップと、
    次に、命令バッファ制御ユニットが次に発行する命令がノーマルバッファに在るか否かを判断するステップと、
    NOであるならば、命令バッファ制御ユニットからの指示に従い、命令フェッチユニットが次に発行する命令をメモリシステムからフェッチし、ノーマルバッファに格納するステップと、
    YESであるならば、前記命令バッファ制御ユニットからの指示に従い、発行命令選択ユニットが前記ノーマルバッファから発行命令を選択して、発行するステップと、
    前記命令バッファ制御ユニットからの指示に従い、前記ループバッファの内容を前記ノーマルバッファにコピーすると同時に、前記命令バッファ制御ユニットからの指示に従い、前記発行命令選択ユニットが前記ループバッファから発行命令を選択して、発行するステップ
    とを有することを特徴とするプロセッサの命令バッファ動作方法。
JP2005128361A 2005-04-26 2005-04-26 プロセッサ及びプロセッサの命令バッファ動作方法 Abandoned JP2006309337A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005128361A JP2006309337A (ja) 2005-04-26 2005-04-26 プロセッサ及びプロセッサの命令バッファ動作方法
US11/211,459 US20060242394A1 (en) 2005-04-26 2005-08-26 Processor and processor instruction buffer operating method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005128361A JP2006309337A (ja) 2005-04-26 2005-04-26 プロセッサ及びプロセッサの命令バッファ動作方法

Publications (1)

Publication Number Publication Date
JP2006309337A true JP2006309337A (ja) 2006-11-09

Family

ID=37188444

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005128361A Abandoned JP2006309337A (ja) 2005-04-26 2005-04-26 プロセッサ及びプロセッサの命令バッファ動作方法

Country Status (2)

Country Link
US (1) US20060242394A1 (ja)
JP (1) JP2006309337A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009116621A (ja) * 2007-11-06 2009-05-28 Toshiba Corp 演算処理装置
KR101496009B1 (ko) * 2012-06-15 2015-02-25 애플 인크. 루프 버퍼 패킹
US11080063B2 (en) 2018-11-09 2021-08-03 Fujitsu Limited Processing device and method of controlling processing device

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008097710A2 (en) * 2007-02-02 2008-08-14 Tarari, Inc. Systems and methods for processing access control lists (acls) in network switches using regular expression matching logic
US8266414B2 (en) * 2008-08-19 2012-09-11 Freescale Semiconductor, Inc. Method for executing an instruction loop and a device having instruction loop execution capabilities
US9323530B2 (en) 2012-03-28 2016-04-26 International Business Machines Corporation Caching optimized internal instructions in loop buffer
US9557999B2 (en) * 2012-06-15 2017-01-31 Apple Inc. Loop buffer learning
US9348590B1 (en) * 2013-09-06 2016-05-24 Verisilicon Holdings Co., Ltd. Digital signal processor prefetch buffer and method
US9471322B2 (en) 2014-02-12 2016-10-18 Apple Inc. Early loop buffer mode entry upon number of mispredictions of exit condition exceeding threshold

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4626988A (en) * 1983-03-07 1986-12-02 International Business Machines Corporation Instruction fetch look-aside buffer with loop mode control
US5101484A (en) * 1989-02-14 1992-03-31 Intel Corporation Method and apparatus for implementing an iterative program loop by comparing the loop decrement with the loop value
US5226130A (en) * 1990-02-26 1993-07-06 Nexgen Microsystems Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
JPH07160585A (ja) * 1993-12-13 1995-06-23 Hitachi Ltd 低電力データ処理装置
GB2323190B (en) * 1997-03-14 2001-09-19 Nokia Mobile Phones Ltd Executing nested loops
US6189092B1 (en) * 1997-06-30 2001-02-13 Matsushita Electric Industrial Co., Ltd. Pipeline processor capable of reducing branch hazards with small-scale circuit

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009116621A (ja) * 2007-11-06 2009-05-28 Toshiba Corp 演算処理装置
KR101496009B1 (ko) * 2012-06-15 2015-02-25 애플 인크. 루프 버퍼 패킹
US11080063B2 (en) 2018-11-09 2021-08-03 Fujitsu Limited Processing device and method of controlling processing device

Also Published As

Publication number Publication date
US20060242394A1 (en) 2006-10-26

Similar Documents

Publication Publication Date Title
US6898699B2 (en) Return address stack including speculative return address buffer with back pointers
US6338136B1 (en) Pairing of load-ALU-store with conditional branch
US5442756A (en) Branch prediction and resolution apparatus for a superscalar computer processor
US6330664B1 (en) Method relating to handling of conditional jumps in a multi-stage pipeline arrangement
EP1886216B1 (en) Controlling out of order execution pipelines using skew parameters
JPS62221036A (ja) 計算装置
JPH06236271A (ja) プロセッサおよび命令推測実行方法
US6959379B1 (en) Multiple execution of instruction loops within a processor without accessing program memory
US5642500A (en) Method and apparatus for controlling instruction in pipeline processor
JP2006309337A (ja) プロセッサ及びプロセッサの命令バッファ動作方法
US20080184010A1 (en) Method and apparatus for controlling instruction cache prefetch
US7454598B2 (en) Controlling out of order execution pipelines issue tagging
US9507600B2 (en) Processor loop buffer
US20080065870A1 (en) Information processing apparatus
US20010037444A1 (en) Instruction buffering mechanism
US6862680B2 (en) Microprocessor processing specified instructions as operands
JP2002024008A (ja) データ処理装置およびプログラム変換装置
JP3602801B2 (ja) メモリデータアクセス構造およびその方法
WO2012132214A1 (ja) プロセッサ及びその命令処理方法
JP2883035B2 (ja) パイプライン・プロセッサ
JP3335735B2 (ja) 演算処理装置
JPS60241136A (ja) デ−タ処理装置
JP3493110B2 (ja) 高速分岐処理装置
US20030177312A1 (en) Controlling a store data forwarding mechanism during execution of a load operation
JP2591325B2 (ja) 分岐制御装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080226

A762 Written abandonment of application

Free format text: JAPANESE INTERMEDIATE CODE: A762

Effective date: 20090522