JP2016157371A - プロセッサおよび命令コード生成装置 - Google Patents

プロセッサおよび命令コード生成装置 Download PDF

Info

Publication number
JP2016157371A
JP2016157371A JP2015036296A JP2015036296A JP2016157371A JP 2016157371 A JP2016157371 A JP 2016157371A JP 2015036296 A JP2015036296 A JP 2015036296A JP 2015036296 A JP2015036296 A JP 2015036296A JP 2016157371 A JP2016157371 A JP 2016157371A
Authority
JP
Japan
Prior art keywords
instruction
branch
address
instruction prefetch
prefetch
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
JP2015036296A
Other languages
English (en)
Other versions
JP6457836B2 (ja
Inventor
源 山下
Hajime Yamashita
源 山下
達也 亀井
Tatsuya Kamei
達也 亀井
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.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics 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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2015036296A priority Critical patent/JP6457836B2/ja
Priority to CN201610101924.XA priority patent/CN105930136B/zh
Priority to US15/053,798 priority patent/US9946546B2/en
Publication of JP2016157371A publication Critical patent/JP2016157371A/ja
Priority to US15/915,730 priority patent/US10540182B2/en
Application granted granted Critical
Publication of JP6457836B2 publication Critical patent/JP6457836B2/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/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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6022Using a prefetch buffer or dedicated prefetch cache

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】アドレスが連続する一群の命令をメモリから命令プリフェッチする際に、バスが必要以上に占有される事態の発生確率を低く抑えるプロセッサを提供する。【解決手段】プロセッサ100は、命令プリフェッチバッファ20にプリフェッチする命令のアドレスと量を制御する命令フェッチアドレス生成部11を備える。命令フェッチアドレス生成部11は、処理実行部30で発生する分岐の分岐先アドレスに対応付けて命令プリフェッチバッファ20にプリフェッチさせる命令の命令プリフェッチ量を記憶するテーブル1を備える。命令フェッチアドレス生成部11は、処理実行部30で分岐が発生したとき、発生した分岐の分岐先アドレスを含み、当該分岐先アドレスに対応する命令プリフェッチ量の命令を、命令プリフェッチバッファ20にプリフェッチさせる。【選択図】図1

Description

本発明は、プロセッサおよび高級言語等で記述されたプログラムから前記プロセッサで実行可能な命令コードを生成する命令コード生成装置に関し、特に命令キャッシュとプリフェッチ機能を内蔵するマイクロコンピュータ等のプロセッサ及びそれを用いたシステムに好適に利用できるものである。
命令キャッシュを備えるプロセッサでは、キャッシュミス後のキャッシュフィルを待たされることによって処理性能が低下するのを防止するために、プリフェッチ機能が広く採用されている。プリフェッチ機能は、プロセッサが将来実行するであろう命令を予測し、キャッシュミスが発生する前に予め命令キャッシュ等のプリフェッチバッファに読み込んでおく機能である。現在実行されている命令のアドレスに連続するアドレスの命令を読み込む単純なプリフェッチ機能から、分岐予測を伴う高機能のプリフェッチ機能まで、種々のプリフェッチ機能が提案されている。
特許文献1には、FIFO(First In First Out)形式のプリフェッチバッファを備え、命令デコーダで求められた命令のワード数に基づいて、命令の単位ごとにプリフェッチを行う、プロセッサが開示されている。プリフェッチ機能によって命令をプリフェッチバッファに読み込むときに発生する、バスアービトレーションの頻度を少なくしてシステム全体のバス効率を向上することができるとされる。
特開平2−242337号公報
特許文献1について本発明者が検討した結果、以下のような新たな課題があることがわかった。
FIFO形式のプリフェッチバッファに代えて命令キャッシュに対して命令プリフェッチを行うと、1度に読み込む命令の量が多いため、バスを占有する期間がより長くなる。FIFO形式のプリフェッチバッファが1〜2バイトを1ワードとするワード単位で命令プリフェッチするのに対して、命令キャッシュでのキャッシュフィルの単位であるキャッシュライン(エントリサイズと一致させることが多い)は、例えば128バイトである。命令キャッシュを備えるプロセッサでは、1キャッシュラインの命令を実行する毎にキャッシュミスが発生してキャッシュフィルを行うように構成するとキャッシュフィルを待つことによる性能低下が著しいため、予め複数のラインを読み込んでおく投機的命令プリフェッチを行うことが有効である。ここで、命令プリフェッチを行う回数、即ちキャッシュフィルを行うライン数は、固定値またはレジスタ設定によって与えられる。分岐予測を伴わない場合には、現在実行されている命令のアドレスに連続するアドレスの命令を対象とする複数ライン分の命令プリフェッチが行われる。このとき、固定的な命令プリフェッチ回数では、実際には実行されない命令の投機的命令プリフェッチが発生するケースがあることがわかった。例えば、キャッシュミスに伴う1ラインのキャッシュフィルに続いて、固定的に2ラインの命令プリフェッチを実行すると仮定すると、最初の1ラインに含まれる命令を実行している途中で分岐が発生し、後続の命令が実行されない場合にも、後続の2ラインの命令プリフェッチをキャンセルすることはできず実行される。後続の2ラインの命令プリフェッチを実行するために、キャッシュフィルをするバスは占有され、分岐先アドレスの命令をフェッチするためのバス権の獲得が待たされることとなる。
このような課題は、命令プリフェッチバッファがキャッシュメモリで構成された場合に限らず、FIFO形式の場合も同様に発生し得る。
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
一実施の形態によれば、下記の通りである。
すなわち、アドレスが連続する一群の命令をメモリからプリフェッチする命令プリフェッチバッファを備えるプロセッサにおいて、命令プリフェッチバッファにプリフェッチする命令のアドレスと命令プリフェッチ量を制御する、命令フェッチアドレス生成部を備える。命令フェッチアドレス生成部は、処理実行部で発生する分岐の分岐先アドレスに対応付けて命令プリフェッチバッファにプリフェッチさせる命令の命令プリフェッチ量を記憶するテーブルを備える。命令フェッチアドレス生成部は、処理実行部で分岐が発生したとき、発生した分岐の分岐先アドレスを含み、当該分岐先アドレスに対応する命令プリフェッチ量の命令を、命令プリフェッチバッファにプリフェッチさせる。
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
すなわち、命令プリフェッチによってバスが必要以上に占有される事態の発生確率を低く抑えることができる。
図1は、代表的な実施の形態に係るプロセッサの構成例を示すブロック図である。 図2は、プロセッサ全体の構成例を示すブロック図である。 図3は、比較例のプロセッサにおける命令フェッチアドレス生成部の構成を示すブロック図である。 図4は、代表的な実施の形態に係るプロセッサの命令フェッチアドレス生成部の構成例を示すブロック図である。 図5は、命令プリフェッチ回数テーブルのフルアソシアティブ連想メモリによる構成例を示す概念図である。 図6は、命令プリフェッチ回数テーブルのセットアソシアティブ連想メモリによる構成例を示す概念図である。 図7は、実施形態1の命令フェッチアドレス生成部の構成例を示すブロック図である。 図8は、命令プリフェッチ回数テーブルへのテーブル記録の手順を模式的に示す説明図である。 図9は、命令プリフェッチ回数テーブルからの命令フェッチ回数のテーブル読み出しの手順を模式的に示す説明図である。 図10は、比較例のプロセッサの動作例を模式的に示すタイミングチャートである。 図11は、代表的な実施の形態に係るプロセッサの動作例を模式的に示すタイミングチャートである。 図12は、実施形態1の命令フェッチアドレス生成部の別の構成例(分岐予測との組合せ)を示すブロック図である。 図13は、実施形態2のプロセッサ及びそれに搭載される命令フェッチアドレス生成部の構成例を示すブロック図である。 図14は、実施形態3の命令フェッチアドレス生成部の構成例を示すブロック図である。 図15は、実施形態4の命令フェッチアドレス生成部の構成例を示すブロック図である。 図16は、実施形態5の命令フェッチアドレス生成部の構成例を示すブロック図である。 図17は、実施形態6の命令フェッチアドレス生成部の構成例を示すブロック図である。 図18は、実施形態6の命令フェッチアドレス生成部に搭載される命令プリフェッチ回数テーブルの連想メモリによるエントリの構成例を示す説明図である。 図19は、実施形態7の命令コード生成装置の構成例を模式的に示す説明図である。 図20は、リンカによって生成される実行形式ファイルの一例を模式的に示す説明図である。 図21は、リンカによって生成される命令プリフェッチ回数情報の一例を模式的に示す説明図である。
1.実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
〔1〕<命令プリフェッチ量管理テーブル>
本願において開示される代表的な実施の形態は、アドレスが連続する一群の命令をメモリ(40)からプリフェッチする命令プリフェッチバッファ(20)と、前記命令プリフェッチバッファから命令を読み込んで実行する処理実行部(30)と、命令フェッチアドレス生成部(11)とを備えるプロセッサ(100)であって、以下のように構成される。
前記命令フェッチアドレス生成部は、前記処理実行部で発生する分岐の分岐先アドレスに対応付けて前記命令プリフェッチバッファにプリフェッチさせる命令の命令プリフェッチ量を記憶するテーブル(1、2、3)を有する。前記処理実行部で分岐が発生したとき、前記テーブルを参照して発生した分岐の分岐先アドレスに対応する命令プリフェッチ量を求め、当該分岐先アドレスの命令を含み、求めた前記命令プリフェッチ量の命令を、前記命令プリフェッチバッファにプリフェッチさせる(4〜7)。
これにより、命令プリフェッチによってバス(41)が必要以上に占有される事態の発生確率を低く抑えることができる。
〔2〕<動的テーブル>
項1において、前記命令フェッチアドレス生成部は、前記処理実行部で分岐が発生したとき、発生した分岐の分岐先アドレスと当該分岐の次に分岐が発生するアドレスとの差に基づいて、前記テーブル(2)の当該分岐先アドレスに対応する命令プリフェッチ量を書き換える。
これにより、命令プリフェッチ量は、実際に発生した分岐に基づいて学習されるため、より高い精度で適正な命令プリフェッチ量を予測することができる。
〔3〕<静的テーブル>
項1において、前記テーブル(3)には、前記処理実行部が所定の命令を実行することによって、分岐先アドレスと対応する命令プリフェッチ量が書き込まれる。
これにより、割り込みなど頻繁に発生しない例外処理について、項2のように動的に命令プリフェッチ量が算出されることが期待できない場合、或いは動的に算出された命令プリフェッチ量が、次に参照される時まで保持されることが期待できない(スピルアウトしてしまう)場合に、確実に適切な命令プリフェッチ量を与えることができる。また、命令プリフェッチ量は、オフラインでプログラムを解析して、または、オペレーティングシステムなどのソフトウェアによって、適切に算出することもできる。
〔4〕<静的テーブル+動的テーブル>
項3において、前記テーブルを静的テーブル(3)とする。前記命令フェッチアドレス生成部は、前記処理実行部で発生する分岐の分岐先アドレスに対応付けて前記命令プリフェッチバッファにプリフェッチさせる命令の命令プリフェッチ量を記憶する動的テーブル(2)をさらに有する。前記命令フェッチアドレス生成部は、前記処理実行部で分岐が発生したとき、発生した分岐の分岐先アドレスと、当該分岐の次に分岐が発生するアドレスとの差に基づいて、前記動的テーブルの当該分岐先アドレスに対応する命令プリフェッチ量を書き換える。前記命令フェッチアドレス生成部は、前記処理実行部で分岐が発生したときに、前記静的テーブルと前記動的テーブルの両方またはいずれか一方を参照して(15)、発生した分岐の分岐先アドレスに対応する命令プリフェッチ量を求め、当該分岐先アドレスの命令を含み、求めた前記命令プリフェッチ量の命令を、前記命令プリフェッチバッファにプリフェッチさせる(4〜7)。
これにより、項2の学習機能を持つ動的テーブル(2)と項3の静的テーブル(3)とを、適切に使い分けることができる。例えば、割り込み処理などの例外処理は頻繁に発生しないので、これらに伴う分岐先アドレスを動的テーブルで管理すると、頻繁に発生する分岐についての学習を行う過程で上書きされ消去されてしまう(スピルアウトしてしまう)恐れがある。そこで、例外処理に伴う分岐先アドレスに対応する命令プリフェッチ量は静的テーブルによって管理し、実際に例外処理による分岐が発生しても動的テーブルにはそのときの命令プリフェッチ量を書き込まないように構成する。これにより、頻繁に発生しない例外処理に伴う分岐先アドレスについては、スピルアウトすることなく静的テーブルによって管理され、頻繁に発生する分岐については、現に発生した分岐に基づいて学習する動的テーブルによって管理され、それぞれ適切な命令プリフェッチ量の命令をプリフェッチすることができる。
〔5〕<動的テーブル+分岐予測部>
項2において、前記命令フェッチアドレス生成部は、分岐予測部(19)をさらに備え、前記処理実行部で分岐が発生し、前記分岐予測部による分岐予測が成功したときには、前記テーブルへの当該分岐先アドレスに対応する命令プリフェッチ量の書き換えを停止する。
これにより、動的テーブルにおけるエントリの不必要な占有を抑えることができる。分岐予測が成功したときには、分岐予測に基づいて命令プリフェッチが行われることによってバスが必要以上に占有されることがないため、動的テーブルを使用する必要がないからである。
〔6〕<命令プリフェッチ回数テーブル>
本願において開示される代表的な実施の形態は、命令キャッシュ(20)と、処理実行部(30)と、命令フェッチアドレス生成部(11)とを備えるプロセッサ(100)であって、以下のように構成される。
前記命令キャッシュは、1ライン当たり所定数の命令コードで構成される複数のラインを保持し、前記命令フェッチアドレス生成部から供給される命令プリフェッチ要求アドレス毎に1ラインの命令コードをメモリ(40)からプリフェッチする。
前記処理実行部は、前記命令キャッシュから所定数の命令コードで構成される命令を読み込んで実行する。
前記命令フェッチアドレス生成部は、前記処理実行部で発生する分岐の分岐先アドレスに対応付けて前記命令キャッシュにプリフェッチさせる命令プリフェッチ回数を記憶する命令プリフェッチ回数テーブル(1、2、3)を有する。
前記命令フェッチアドレス生成部は、前記処理実行部で分岐が発生したとき、前記命令プリフェッチ回数テーブルを参照して、発生した分岐の分岐先アドレスを含む命令プリフェッチ要求アドレスに対応する命令プリフェッチ回数を求める。前記命令フェッチアドレス生成部は、当該命令プリフェッチ要求アドレスと連続し、求められた前記命令プリフェッチ回数に相当する数の命令プリフェッチ要求アドレスを、順次前記命令キャッシュに供給する(4〜7)。
これにより、命令プリフェッチによってバス(41)が必要以上に占有される事態の発生確率を低く抑えることができる。
〔7〕<動的命令プリフェッチ回数テーブル>
項6において、前記命令フェッチアドレス生成部は、前記処理実行部で分岐が発生したとき、発生した分岐の分岐先アドレスと、当該分岐の次に分岐が発生するアドレスとの差に基づいて、前記命令プリフェッチ回数テーブル(2)の当該分岐先アドレスに対応する命令プリフェッチ回数を書き換える。
これにより、命令プリフェッチ回数は、実際に発生した分岐に基づいて学習されるため、より高い精度で適正な命令プリフェッチ量を予測することができる。
〔8〕<アドレスの差から命令プリフェッチ回数を算出>
項7において、前記処理実行部は、分岐が発生したときに発生した分岐の分岐元アドレスと分岐先アドレスとを前記命令フェッチアドレス生成部に供給する、分岐要求部(33)を有する。
前記命令フェッチアドレス生成部は、供給された分岐先アドレスを保持し、当該分岐の次に分岐が発生したときに供給される分岐元アドレスから、保持されている前記分岐先アドレスを引いた差に基づいて、前記命令プリフェッチ回数テーブルの保持されている前記分岐先アドレスに対応する命令プリフェッチ回数を書き換える。
これにより、命令プリフェッチ回数は、分岐先アドレスと次に分岐が発生する命令が配置されるアドレス(次回分岐の分岐元アドレス)との差から計算されるため、正確に命令プリフェッチ回数を学習することができる。
〔9〕<分岐要求部が命令プリフェッチ回数をカウンタにより算出>
項7において、前記処理実行部は、分岐要求部(33)を有する。
前記分岐要求部は、前記処理実行部で分岐が発生したときに発生した分岐の分岐元アドレスを前記命令フェッチアドレス生成部に供給する。
前記分岐要求部は、前記処理実行部で分岐が発生したときにカウントを開始し、前記処理実行部で実行する命令のアドレスが前記命令キャッシュの1ラインに対応するアドレス境界を越えた回数をカウントするカウンタ(34)を備え、当該分岐の次に分岐が発生したときのカウント値を分岐間距離として前記命令フェッチアドレス生成部に供給する。
前記命令フェッチアドレス生成部は、供給された分岐先アドレスを保持し(12)、当該分岐の次に分岐が発生したときに供給される前記分岐間距離に基づいて、保持されている前記分岐先アドレスに対応する命令プリフェッチ回数を書き換える。
これにより、命令プリフェッチ回数は、分岐要求部においてカウンタ(34)によって算出されるため、少ない回路規模で正確に命令プリフェッチ回数を学習することができる。
〔10〕<命令フェッチアドレス生成部が命令プリフェッチ回数をカウンタにより算出>
項7において、前記処理実行部は、分岐要求部(33)を有する。
前記分岐要求部は、前記処理実行部で分岐が発生したときに発生した分岐の分岐元アドレスを前記命令フェッチアドレス生成部に供給する。
前記命令フェッチアドレス生成部は、供給された分岐先アドレスを保持するレジスタ(12)と、分岐先アドレスが供給されたときにカウントを開始し前記命令キャッシュに命令プリフェッチ要求アドレスを供給する回数をカウントするカウンタ(14)とを備える。前記命令フェッチアドレス生成部は、当該分岐の次に分岐先アドレスが供給されたときに、前記カウンタのカウント値を、前記レジスタに保持されている分岐先アドレスに対応する命令プリフェッチ回数として、前記命令プリフェッチ回数テーブルに書き込む。
これにより、命令プリフェッチ回数は、命令フェッチアドレス生成部においてカウンタ(14)によって算出されるため、項8の構成よりも少ない回路規模で正確に命令プリフェッチ回数を学習することができる。算出(カウント)される命令プリフェッチ回数は、項9の構成で算出(カウント)される命令プリフェッチ回数と等しいかより多くなるため、より多くの投機的フェッチが行われ、命令キャッシュにヒットする確率が向上する。
〔11〕<静的命令プリフェッチ回数テーブル>
項6において、前記命令プリフェッチ回数テーブル(3)には、前記処理実行部が所定の命令を実行することによって、分岐先アドレスと対応する命令プリフェッチ回数が書き込まれる。
これにより、割り込みなど、頻繁に発生しない例外処理について、項7〜項10のように動的に命令プリフェッチ回数が算出されることが期待できない場合、或いは動的に算出された命令プリフェッチ回数が、次に参照される時まで保持されることが期待できない(スピルアウトしてしまう)場合に、確実に適切な命令プリフェッチ回数を与えることができる。また、命令プリフェッチ回数は、オフラインでプログラムを解析し、または、オペレーティングシステムなどのソフトウェアによって、適切に算出し、静的命令プリフェッチ回数テーブルに書き込むこともできる。
〔12〕<静的+動的命令プリフェッチ回数テーブル>
項11において、前記命令プリフェッチ回数テーブルを静的命令プリフェッチ回数テーブル(3)とする。
前記命令フェッチアドレス生成部は、動的命令プリフェッチ回数テーブル(2)をさらに備え、前記処理実行部で分岐が発生したとき、発生した分岐の分岐先アドレスと、当該分岐の次に分岐が発生するアドレスとの差に基づいて、前記動的命令プリフェッチ回数テーブルの当該分岐先アドレスに対応する命令プリフェッチ回数を書き換える。
前記命令フェッチアドレス生成部は、前記処理実行部で分岐が発生したときに、前記静的命令プリフェッチ回数テーブルと前記動的命令プリフェッチ回数テーブルの両方またはいずれか一方を参照して(15)発生した分岐の分岐先アドレスに対応する命令プリフェッチ回数を求める。前記命令フェッチアドレス生成部は、発生した分岐の分岐先アドレスを含む命令プリフェッチ要求アドレスと、当該命令プリフェッチ要求アドレスと連続し、求めた前記命令プリフェッチ回数に相当する数の命令プリフェッチ要求アドレスとを、順次前記命令キャッシュに供給する(4〜7)。
これにより、項7の学習機能を持つ動的命令プリフェッチ回数テーブルと、頻繁に発生しない例外処理などにも対応可能な項11の静的命令プリフェッチ回数テーブルとを、適切に使い分けることができ、項4と同様の効果を奏する。
〔13〕<動的命令プリフェッチ回数テーブル+分岐予測部>
項7から項10のいずれか1項において、前記命令フェッチアドレス生成部は、分岐予測部(19)をさらに備え、前記処理実行部で分岐が発生したとき、前記分岐予測部による分岐予測が成功したときに、前記命令プリフェッチ回数テーブルの当該分岐先アドレスに対応する命令プリフェッチ量の書き換えを停止する。
これにより、動的命令プリフェッチ回数テーブルにおけるエントリの不必要な占有を抑えることができる。分岐予測が成功したときには、分岐予測に基づいて命令プリフェッチが行われることによってバスが必要以上に占有されることがないため、動的命令プリフェッチ回数テーブルを使用する必要がないからである。
〔14〕<命令プリフェッチ回数テーブルは連想メモリ>
項6から項13のいずれか1項において、前記命令プリフェッチ回数テーブルは、分岐先アドレスが入力され、対応する命令プリフェッチ回数を出力する、連想メモリである。
これにより、公知の連想メモリの設計資産を利用して命令プリフェッチ回数テーブルを実装することができ、設計が容易化される。連想メモリは、フルアソシアティブでもセットアソシアティブでもよい。
〔15〕<命令プリフェッチ回数テーブルはマスク付き連想メモリ>
項14において、前記命令プリフェッチ回数テーブルとして機能する前記連想メモリは、それぞれのエントリがタグとマスクと命令プリフェッチ回数からなる複数のエントリを備える。前記連想メモリは、入力される分岐先アドレスの一部のビットを前記マスクによって無効化したときに前記タグと一致するエントリに格納されている命令プリフェッチ回数を、入力された前記分岐先アドレスに対応する命令プリフェッチ回数として出力する(18)。
これにより、命令プリフェッチ回数テーブルとして機能する連想メモリの回路規模(エントリ数)を少なく抑えることができる。同じ命令プリフェッチ回数を出力する複数の分岐先アドレスをまとめて1つのエントリに登録することができるためである。
〔16〕<命令コード生成装置>
本願において開示される代表的な実施の形態は、命令プリフェッチバッファ(20)と命令フェッチアドレス生成部(11)とを備えるプロセッサ(100)に供給するプログラム(61)の命令コードを生成する命令コード生成装置(50)であって、以下のように構成される。
前記命令フェッチアドレス生成部は、発生する分岐の分岐先アドレスに対応付けて前記命令プリフェッチバッファにプリフェッチさせる命令の命令プリフェッチ量を記憶するテーブル(1、2、3)を有し、分岐が発生したとき、発生した分岐の分岐先アドレスを含み、当該分岐先アドレスに対応する命令プリフェッチ量の命令を、前記命令プリフェッチバッファにプリフェッチさせる。
前記命令コード生成装置は、前記プログラムから実行形式の命令コード(64)を生成し、前記命令コードにおいて分岐命令の分岐先アドレスと次の分岐命令が配置されるアドレスとの差に基づいて、当該分岐先アドレスに対応する命令プリフェッチ量を算出する。
これにより、プロセッサの実行形式の命令コードを生成するリンカ等からなる命令コード生成装置に、項3〜4に記載される静的テーブルまたは項11〜12に記載される静的命令プリフェッチ回数テーブルに書き込むための情報(分岐先アドレスと命令プリフェッチ量又は命令プリフェッチ回数)を生成する機能を追加することができる。本命令コード生成装置によって生成された、分岐先アドレスと命令プリフェッチ量又は命令プリフェッチ回数とを対応付ける情報は、項1〜2、4〜5に記載される動的テーブルまたは項6〜10、12〜15に記載される動的命令プリフェッチ回数テーブルに、初期値として書き込まれても良い。
〔17〕<命令プリフェッチバッファは命令キャッシュ>
項16において、前記命令プリフェッチバッファは命令キャッシュ(20)であり、前記命令プリフェッチ量は前記命令キャッシュのキャッシュラインに命令コードをプリフェッチさせる命令プリフェッチ回数で規定される。
これにより、キャッシュメモリによって命令プリフェッチバッファが実装されるプロセッサに対して、適切に、命令プリフェッチ量として命令プリフェッチ回数を与えることができる。
〔18〕<テーブルはマスク付き連想メモリ>
項17において、前記テーブルは、それぞれのエントリがタグとマスクと命令プリフェッチ回数からなる複数のエントリを備え、入力される分岐先アドレスの一部のビットを前記マスクによって無効化したときに前記タグと一致するエントリに格納されている命令プリフェッチ回数を、入力された前記分岐先アドレスに対応する命令プリフェッチ回数として出力する、連想メモリである。
前記命令コード生成装置は、対応する命令プリフェッチ回数が同じ値となる複数の分岐先アドレスが、一部のアドレスビットを共通とするアドレス空間に配置されるように、前記命令コードのアドレスマッピングを行う。次に、前記命令コード生成装置は、前記共通するアドレスビットをタグとし、他のアドレスビットを無効化するビット列をマスクとし、前記同じ値を命令プリフェッチ回数として、前記連想メモリに供給する1個のエントリを構成する。
これにより、命令プリフェッチ回数テーブルとして機能する連想メモリの回路規模(エントリ数)を少なく抑えることができる。命令コード生成装置は、同じ命令プリフェッチ回数を出力する複数の分岐先アドレスをまとめて1つのエントリに登録するための情報を生成することができる。
〔19〕<コンパイラ+リンカ>
項16、項17又は項18において、前記命令コード生成装置は、コンパイラ(51)と、ライブラリオブジェクトファイル(63)と、リンカ(52)とを備える。前記コンパイラは、高級言語で記述された前記プログラム(61)が入力され、オブジェクトファイル(62)を生成する。前記リンカは、前記コンパイラによって生成されたオブジェクトファイル(62)と前記ライブラリオブジェクトファイルから実行形式の命令コード(64)を生成する。前記リンカはさらに、分岐先アドレスに対応する命令プリフェッチ量(65)を算出して出力する。
これにより、分岐先アドレスに対応する命令プリフェッチ量を算出する機能が、通常のコンパイラとリンカ等から成る統合されたプログラム開発環境に組み込まれ、当該機能を自動化して提供することができる。
2.実施の形態の詳細
実施の形態について更に詳述する。
〔実施形態1〕<命令プリフェッチ量管理テーブル>
図1は、代表的な実施の形態に係るプロセッサ100の構成例を示すブロック図である。プロセッサ100は、命令フェッチ部10と命令プリフェッチバッファ20と処理実行部30とメモリ40とを備え、命令プリフェッチバッファ20とメモリ40とがバス41によって互いに接続されている。命令プリフェッチバッファ20はアドレスが連続する一群の命令をメモリ40からバス41を介してプリフェッチし、処理実行部30は命令プリフェッチバッファ20から命令を読み込んで実行する。
図示は省略されているが、データのロード/ストアのために、処理実行部30とメモリ40との間も同じメモリ40とバス41によって互いに接続されても良いし、他のメモリと他のバス(データバス)によって命令とは独立に接続されても良い。また、バス41は階層化されていてもよい。特に制限されないが、プロセッサ100は、メモリをオンチップに含み又は外付けされる構成により、例えば、公知のCMOS(Complementary Metal-Oxide-Semiconductor field effect transistor)集積回路製造技術を用いて、シリコンなどの単一半導体基板上に形成される。なお、図1に図示される信号は、1本または複数の配線からなる1〜多数ビットのディジタル信号であるが、バス表記は省略される。これらの点は、本願で開示する他の実施形態、及び、引用する他のブロック図についても同様である。
命令フェッチ部10は命令フェッチアドレス生成部11を有し、命令フェッチアドレス生成部11は処理実行部30で発生する分岐の分岐先アドレスに対応付けて命令プリフェッチバッファ20にプリフェッチさせる命令の命令プリフェッチ量を記憶するテーブル1を備える。処理実行部30で分岐が発生すると、発生した分岐の分岐先アドレスが命令フェッチ部10の命令フェッチアドレス生成部11に供給される。命令フェッチアドレス生成部11は、テーブル1を参照して供給された分岐先アドレスに対応する命令プリフェッチ量を読み出す。命令フェッチアドレス生成部11は、命令プリフェッチ要求アドレスを生成するなどの方法により、読み出した命令プリフェッチ量の命令をメモリ40から命令プリフェッチバッファ20にプリフェッチさせる。
これにより、分岐先アドレスに応じて適切な命令プリフェッチ量を適宜設定することができるので、命令プリフェッチによってバス41が必要以上に占有される事態の発生確率を低く抑えることができる。
図2は、プロセッサ100の全体の構成例を示すブロック図である。
命令プリフェッチバッファ20は例えばキャッシュメモリで実現され、データアレイ21と制御部22とバスリクエストバッファ23を含んで構成される(命令キャッシュ部20と呼ぶ)。データアレイは複数のエントリで構成され、1エントリ当たりのキャッシュラインは例えば128バイトとされ、複数の命令コードを含む。制御部22は所謂キャッシュコントローラであり、要求されるアドレスの命令コードがデータアレイ21に格納されているかどうかを判定して、キャッシュヒットすれば処理実行部30に供給し、格納されていなければキャッシュミスとして、そのアドレスを含む1キャッシュラインの命令コードをメモリ40からデータアレイ21に読み込む(キャッシュフィルする)。キャッシュミスに伴うメモリ40へのデータのリード要求は、バスリクエストバッファ23にバッファされる。バスリクエストバッファ23は、バス権を獲得する度に、バッファされるリード要求をバス41に対して順次発行する。
命令キャッシュ部20とメモリ40とは、メインバス41を介して接続されている。メインバス41の負荷の大きさと要求されるアクセス周波数によって、命令キャッシュ部20とメインバス41との間、メインバス41とメモリ40との間に、それぞれパイプラインを構成する中継バッファ42_1〜4が設けられている。この中継バッファの段数や構成は、メインバス41の負荷の大きさ、要求されるアクセス周波数(スループット)やレイテンシによって決まる。
処理実行部30は、命令デコーダ32と、分岐要求部33と、実行部35を備える。命令デコーダ32は命令キャッシュ21から供給される命令の命令コードをデコードして解釈し、分岐要求部33と実行部35等を命令に則して制御する。実行部35は、例えばロード/ストア命令実行部、演算実行部等で構成される。分岐要求部33は、実行部35の演算結果に依存する条件分岐や、無条件分岐を実行し、分岐先アドレスを命令フェッチ部10に発行する。通常は分岐先アドレスとともに分岐要求を発行する。
本実施形態1においては、命令フェッチアドレス生成部11は、上述のように、分岐先アドレスに対応付けて命令プリフェッチバッファ20(命令キャッシュ部20)にプリフェッチさせる命令の命令プリフェッチ量を記憶するテーブル1を備えるので、分岐先アドレスに応じて適切な命令プリフェッチ量を適宜設定することができる。
<命令プリフェッチ回数テーブル>
命令プリフェッチバッファ20は、例えば上述のように命令キャッシュ部20で実現し、命令プリフェッチ量はキャッシュフィルの回数によって規定することができる。以下に、命令プリフェッチ量が分岐先アドレスに依らず固定される比較例と、命令プリフェッチ量が分岐先アドレスに応じて適宜規定される本実施形態とを対比して説明する。
図3は、比較例のプロセッサの命令フェッチアドレス生成部11の構成例を示すブロック図である。命令フェッチアドレス生成部11は、フリップフロップ7、セレクタ6、アドレス加算部5、アドレス生成制御部4、及び、命令プリフェッチ回数設定レジスタ9を備える。処理実行部30で分岐が発生すると、分岐先アドレスと分岐要求が命令フェッチアドレス生成部11に供給される。供給された分岐先アドレスは、セレクタ6を介してフリップフロップ7に格納され、命令プリフェッチバッファとして機能する命令キャッシュ20に供給される。分岐先アドレスが命令キャッシュ20においてキャッシュヒットすれば、対応する命令コードが読み出されて処理実行部30に供給される。分岐先アドレスが命令キャッシュ20においてキャッシュミスの場合は、キャッシュフィルを行った上で、対応する命令コードが読み出されて処理実行部30に供給される。
分岐先アドレスは、これと並行してアドレス加算部5によってインクリメントされ、フリップフロップ7に保持される値が更新される。インクリメントされる量は、1キャッシュライン分であり、アドレス加算部5は例えば0x10の加算とされる。ここで「0xYY」はYYが16進表記の2桁の数であることを示す(本願明細書内で同様)。分岐先アドレスからインクリメントされた値は、命令プリフェッチ要求アドレスとして、命令キャッシュ20に供給され、キャッシュミスの場合は、メモリ40からプリフェッチされる。アドレス生成制御部4は、このインクリメント動作の繰り返しを制御する。本比較例では、命令プリフェッチ回数設定レジスタ9から供給される命令プリフェッチ回数だけ、インクリメントを繰り返し、その都度、命令プリフェッチ要求アドレスを発行して、命令キャッシュ20にその回数に相当する命令プリフェッチを実行させる。
図4は、代表的な実施の形態に係るプロセッサ100の命令フェッチアドレス生成部11の構成例を示すブロック図である。命令プリフェッチバッファ20を命令キャッシュ20で実現し、命令プリフェッチ量はキャッシュフィルの回数によって規定し、図1のテーブル1を命令プリフェッチ回数テーブル1とした構成例である。命令フェッチアドレス生成部11は、フリップフロップ7、セレクタ6、アドレス加算部5、アドレス生成制御部4、及び、命令プリフェッチ回数テーブル1を備える。処理実行部30で分岐が発生すると、分岐先アドレスと分岐要求が命令フェッチアドレス生成部11に供給される。供給された分岐先アドレスは、セレクタ6を介してフリップフロップ7に格納され、命令キャッシュ20に供給される。分岐先アドレスが命令キャッシュ20においてキャッシュヒットすれば、対応する命令コードが読み出されて処理実行部30に供給され、キャッシュミスの場合は、キャッシュフィルを行った上で、対応する命令コードが読み出されて処理実行部30に供給される。
分岐先アドレスは、これと並行してアドレス加算部5によってインクリメントされ、フリップフロップ7に格納される値が更新される。インクリメントされる量は、1キャッシュライン分である。分岐先アドレスからインクリメントされた値は、命令プリフェッチ要求アドレスとして、命令キャッシュ20に供給され、キャッシュミスの場合は、メモリ40からプリフェッチされる。アドレス生成制御部4は、このインクリメント動作の繰り返しを制御する。図4に示した構成例では、処理実行部30から供給された分岐先アドレスに対応する命令プリフェッチ回数が、命令プリフェッチ回数テーブル1から読み出されて、アドレス生成制御部4に供給される。アドレス生成制御部4は、命令プリフェッチ回数テーブル1から供給される命令プリフェッチ回数に応じてインクリメントを繰り返し、その都度、命令プリフェッチ要求アドレスを発行して、命令キャッシュ20にその回数に相当する命令プリフェッチを実行させる。
命令プリフェッチ回数テーブル1は、分岐先アドレスを用いて対応する命令プリフェッチ回数を参照する連想メモリであり、その構成は一般的なフルアソシアティブ、セットアソシアティブとすることができる。
図5は、命令プリフェッチ回数テーブル1のフルアソシアティブ連想メモリによる構成例を示す概念図である。複数のエントリで構成され、各エントリはそれぞれバリッド(valid)フラグV、タグとしての分岐先アドレス、及び、対応する命令プリフェッチ回数により構成される。
図6は、命令プリフェッチ回数テーブル1のセットアソシアティブ連想メモリによる構成例を示す概念図である。それぞれが複数のエントリからなる複数(n+1)のウェイWAY0〜WAYnで構成される。各ウェイ(WAY)は例えばインデックス0〜0xFFの256エントリで構成され、各エントリは、それぞれバリッド(valid)フラグVとタグと命令プリフェッチ回数により構成される。分岐先アドレスは例えばその下位8ビットがインデックスに対応し、それより上位がタグとしてアレイに格納される。
図7は、実施形態1の命令フェッチアドレス生成部11の構成例を示すブロック図である。命令フェッチアドレス生成部11は、フリップフロップ7、セレクタ6、アドレス加算部5、アドレス生成制御部4、及び、命令プリフェッチ制御部8を備え、命令プリフェッチ制御部8は、命令プリフェッチ回数テーブル2、命令フェッチ回数計算部13、及び、分岐先アドレス保持レジスタ12を有する。命令プリフェッチ回数テーブル2はテーブル記録とテーブル読み出しの機能を持つ。テーブル記録とは、分岐先アドレスと対応する命令プリフェッチ回数を命令プリフェッチ回数テーブル2のエントリに書き込む機能であり、テーブル読み出しとは、入力された分岐先アドレスと一致する分岐先アドレスを探索し、ヒットしたときに対応する命令プリフェッチ回数を読み出す機能である。分岐先アドレス保持レジスタ12は、分岐先の先頭の命令が格納されているアドレスである、分岐先アドレスを保持する。命令プリフェッチ制御部8には、次回分岐の分岐元アドレスが入力される。次回分岐の分岐元アドレスとは、分岐先アドレス保持レジスタ12に格納された分岐先アドレスを指定する分岐の次の分岐を発生させた分岐命令が格納されているアドレスである。命令フェッチ回数計算部13には、次回分岐の分岐元アドレスと分岐先アドレス保持レジスタ12に保持されている分岐先アドレスとが入力され、命令プリフェッチ回数テーブル2に対するテーブル記録を行う。命令プリフェッチ回数テーブル2は、入力される分岐先アドレスに対応するプリフェッチ回数を読み出して、アドレス生成制御部4に供給する。分岐先アドレスに対応するエントリがない場合は、図15に示すセレクタ15と同様のセレクタを設け、このセレクタによってデフォルト(Default)値が供給されるように構成するとよい。デフォルト(Default)値は、従来と同様に固定値またはレジスタ設定によって与えられる。アドレス生成制御部4、アドレス加算部5、セレクタ6、及び、フリップフロップ7の構成と動作は、図4を引用した上述の構成と動作と同様であるので、説明を省略する。
図8と図9は、命令プリフェッチ回数テーブル2へのテーブル記録の手順と、命令フェッチ回数のテーブル読み出しの手順を、それぞれ模式的に示す説明図である。図8と図9には、実行されるプログラムを構成する命令が、アセンブリ言語のニーモニックで示され、各命令が格納されるアドレスが各行の先頭列に示される。アドレスAxにはラベルTarget0を分岐先とするブランチ命令br Target0が配置されている。分岐先である、ラベルTarget0で示されるアドレスAyにはムーブ命令movが配置され、以降アドレスAy+1、Ay+2、…、Ay+dには、ロード命令ld、加算命令add、…、ジャンプ命令jump Target1が、順次配置されている。アドレスAy+dのジャンプ命令jump Target1は、ラベルTarget1への無条件分岐命令である。分岐先である、ラベルTarget1で示されるアドレスAzには、ムーブ命令movが配置されている。
命令プリフェッチ回数テーブル2の初期状態は、例えば空、即ち何も書き込まれていない状態である。アドレスAxからのブランチ命令br Target0が実行されて初めて分岐が発生したとき、ラベルTarget0で示されるアドレスAyが分岐先アドレスとなり、分岐先アドレス保持レジスタ12に格納される。図8に図示はされないが、分岐先アドレスをAyとするテーブル読み出しは、命令プリフェッチ回数テーブル2が空なのでミスヒットする。その後、ラベルTarget0で示されるアドレスAyから順次命令が実行され、アドレスAy+dでジャンプ命令jump Target1によるラベルTarget1への分岐が発生する。このとき、ラベルTarget1で示されるアドレスAzが分岐先アドレスとして、また、分岐を発生させたジャンプ命令jump Target1のアドレスAy+dが次回分岐の分岐元アドレスとして、それぞれ命令フェッチアドレス生成部11に供給される。命令フェッチ回数計算部13は、次回分岐の分岐元アドレスAy+dと分岐先アドレス保持レジスタ12から分岐先アドレスAyとが入力され、その差(Ay+d−Ay=d)である分岐間距離を算出する。命令フェッチ回数計算部13は、算出した分岐間距離に基づいて適切な命令プリフェッチ回数を算出し、入力された分岐先アドレスAyと算出した命令プリフェッチ回数とを対応付けて命令プリフェッチ回数テーブル2のエントリに記録する。
その後、アドレスAxのブランチ命令br Target0が再度実行されて、2回目以降の分岐が発生したときには、図9に示すように、命令プリフェッチ回数テーブル2からのテーブル読み出しにより、ラベルTarget0で示される分岐先アドレスAyに対応する命令プリフェッチ回数が読み出され、命令キャッシュ20に対する命令プリフェッチが実行される。このとき、分岐先アドレスAyに対応する命令プリフェッチ回数は、図8に示されるように、次回の分岐を発生させるジャンプ命令jump Target1のアドレスAy+dの命令までがプリフェッチされ、以降の不必要なプリフェッチが行われないように算出される。
図8と9には無条件分岐命令jump Target1を例示したが、これが条件分岐命令であるときには、実際に分岐を発生させた命令が配置されているアドレスまでを分岐間距離として命令プリフェッチ回数を算出し、逐次、テーブル記録を行う。これにより、分岐先アドレスに対応する命令プリフェッチ回数は、次回分岐が実際に発生するアドレスに基づいて適応的に学習される。
図10と図11は、比較例のプロセッサの動作例と、代表的な実施の形態に係るプロセッサの動作例とを、それぞれ模式的に示すタイミングチャートである。横軸には時刻が示され、縦軸方向には、命令キャッシュ20に供給される命令プリフェッチ要求アドレスと、それに伴って発生する命令プリフェッチのためのバストランザクションが模式的に示される。
図10に示される比較例のプロセッサでは、時刻t1に分岐先アドレスAyが命令プリフェッチ要求アドレスとして発行されると、アドレスAyを含む1ライン分の命令プリフェッチ(1)が時刻t2〜t5の期間に実行される。その後、命令フェッチ部10は固定的な回数の命令プリフェッチを要求する。図10の例ではさらに2回の命令プリフェッチを要求し、アドレスAy+0x10、アドレスAy+0x20が命令プリフェッチ要求アドレスとして、それぞれ時刻t3とt4に順次発行される。ここでは、命令プリフェッチ要求アドレスは1キャッシュライン毎に0x10ずつインクリメントされて発行される例が示されている。命令プリフェッチ要求アドレスAy+0x10、Ay+0x20の発行に伴って、アドレスAy+0x10を含む命令プリフェッチ(2)が時刻t5〜t8の期間に、アドレスAy+0x20を含む命令プリフェッチ(3)が時刻t8〜t10の期間に、それぞれ実行される。これと並行して、命令プリフェッチ(1)でプリフェッチされた命令が実行され、時刻t6にアドレスAzへの分岐要求が発生したとする。これに伴って、アドレスAz、Az+0x10、Az+0x20が命令プリフェッチ要求アドレスとして、それぞれ時刻t6、t7、t9に順次発行される。しかし、時刻t6の時点でバス41は命令プリフェッチ(2)によって占有されており、アドレスAzに対する命令プリフェッチである分岐先命令フェッチは、命令プリフェッチ(3)が終わってバスが解放される、時刻t10まで待たされる。このため、プロセッサは、アドレスAzの命令の実行を待たされることとなる。
図11に示される代表的な実施の形態に係るプロセッサの動作例でも、時刻t1に分岐先アドレスAyが命令プリフェッチ要求アドレスとして発行され、アドレスAyを含む1ライン分の命令プリフェッチ(1)が時刻t2〜t5の期間に実行される。しかし、時刻t1に分岐先アドレスAyが命令プリフェッチ要求アドレスとして発行された後、命令フェッチ部10は分岐先アドレスAyに適する回数の命令プリフェッチを要求する。本願の代表的な実施の形態に係るプロセッサでは、次回の分岐が発生するアドレス(図8、9を引用すればアドレスAy+d)が、命令プリフェッチ(1)の範囲内に含まれるときは、その後の命令プリフェッチ要求アドレスを発行しない。即ち、時刻t3、t4には命令プリフェッチ要求アドレスが発行されない。そのため、時刻t6にアドレスAzへの分岐要求が発生した時点では、バスはアイドル(IDLE)状態となっている。このため、時刻t6におけるアドレスAzへの分岐に伴って発行される命令プリフェッチ要求アドレスAzに応じた分岐先命令フェッチは、時刻t6の後直ちに時刻t10に開始することができる。このため、この分岐に伴うプロセッサの待ち時間は、通常のキャッシュミスと同程度の時間となり、不必要な待ち時間は発生しない。
以上説明したように、命令プリフェッチによってバス41が必要以上に占有される事態の発生確率を低く抑えることができ、本来不要な命令プリフェッチ(2)(3)を停止することにより、バス41とアクセス先のメモリ40の動作電力を削減できる。さらに、図7に示したように命令プリフェッチバッファを命令キャッシュメモリで構成し、実施に発生した分岐に基づいて学習する命令プリフェッチ回数テーブル2を備えることにより、命令プリフェッチ回数は、実際に発生した分岐に基づいて学習されるため、より高い精度で適切な命令プリフェッチ量を予測することができる。また、命令プリフェッチ回数は、分岐先アドレスと次に分岐が発生する命令が配置されるアドレス(次回の分岐元アドレス)との差から計算されるため、正確に命令プリフェッチ回数を学習することができる。
図7には、命令プリフェッチバッファを命令キャッシュメモリで構成する例を示したが、命令プリフェッチバッファは必ずしもキャッシュメモリで構成する必要はなく、単純なFIFO型のプリフェッチバッファでもよい。また、図7には、実際に発生した分岐に基づいて学習する命令プリフェッチ回数テーブル2を備えるプロセッサの構成例を示したが、分岐先アドレスに対応する適切な命令プリフェッチ回数の算出する方法は、図7に例示される構成には限られず、例えば後述の実施形態2又は3等に置き換えることができる。さらには、実際に発生した分岐に基づいて学習するのではなく、例えば実施形態4〜6に示されるように、学習を前提としない静的なテーブルとすることも、また、動的なテーブルと静的なテーブルを組合せることもできる。
<動的命令プリフェッチ回数テーブル+分岐予測部>
図12は、実施形態1の命令フェッチアドレス生成部11の別の構成例として、分岐予測と組合せた例を示すブロック図である。命令フェッチアドレス生成部11は、図7に示す構成に加え、分岐予測部19を備える。分岐予測は、分岐が実際に発生するか否かが確定するより前に命令フェッチ部10でその結果を予測し、分岐成立が予測される場合にはその分岐先を投機的に命令フェッチする技術である。分岐予測が成功したときには、予測分岐先アドレスをセレクタ6、フリップフロップ7を介して、命令プリフェッチ要求アドレスとして命令キャッシュ20に供給する。また、分岐予測が成功する場合、上述の問題点である無用な投機的命令フェッチが発生しない。そこで分岐成立の分岐予測結果が正しい場合は、命令プリフェッチ回数テーブル2への記録をキャンセルして、エントリの占有を控える。
図12には、図7に示される実施形態1の命令フェッチアドレス生成部11に分岐予測部19を組み込む構成例を示したが、分岐予測部19は、以下に示すどの実施形態の命令フェッチアドレス生成部11にも、同様に組み込むことができる。
〔実施形態2〕<分岐要求部が命令プリフェッチ回数をカウンタにより算出>
図13は、実施形態2のプロセッサ100及びそれに搭載される命令フェッチアドレス生成部11の構成例を示すブロック図である。図7に示される実施形態1のプロセッサ100は、命令フェッチアドレス生成部11が分岐先アドレスに対応する命令プリフェッチ回数を算出する構成例であるが、本実施形態2のプロセッサ100は、処理実行部30に命令プリフェッチ回数を算出する回路が設けられている。プロセッサ100は、図1と同様に、命令フェッチ部10と命令プリフェッチバッファ20と処理実行部30とメモリ40とを備え、命令プリフェッチバッファ20とメモリ40とがバス41によって互いに接続されている。図13には、命令フェッチ部10に含まれる命令フェッチアドレス生成部11と、命令プリフェッチバッファ20として機能する命令キャッシュ20と、処理実行部30とが示され、他は図示が省略されている。
処理実行部30は、命令キュー31、命令デコーダ32及び分岐要求部33を備え、分岐要求部33は命令フェッチ境界越えカウンタ34を含んで構成され、命令フェッチアドレス生成部11に分岐要求と分岐先アドレスと分岐間距離とを供給する。分岐要求部33は、命令デコーダ32から供給されるプログラムカウウンタ値PCとデコード結果に基づいて、分岐要求と分岐先アドレスを出力する。このときに供給されるプログラムカウンタ値PCを監視して、分岐の発生なしに命令フェッチの境界を越えた回数を命令フェッチ境界越えカウンタ34でカウントする。ここで、命令フェッチの境界とは、命令キャッシュ20のキャッシュラインのアドレス境界である。プログラムカウンタ値PCが分岐の発生なしに順次インクリメントされ、次回の分岐が発生するまでに命令フェッチの境界を越えた回数は、当該分岐先アドレスに対応する分岐間距離であり、適切な命令プリフェッチ回数となる。分岐が発生したときに、分岐要求部33は、その分岐の分岐先アドレスと分岐要求とを出力し、合せて、命令フェッチ境界越えカウンタ34のカウント値を分岐間距離として出力し、命令フェッチ境界越えカウンタ34をリセットする。
命令フェッチアドレス生成部11は、図7と同様に、フリップフロップ7、セレクタ6、アドレス加算部5、アドレス生成制御部4、及び、命令プリフェッチ制御部8を備え、命令プリフェッチ制御部8は、命令プリフェッチ回数テーブル2と分岐先アドレス保持レジスタ12とを有するが、命令フェッチ回数計算部13を備えないで構成されている。分岐が発生したときのテーブル記録の際には、分岐先アドレス保持レジスタ12に保持される分岐先アドレスと、処理実行部30から供給される分岐間距離とが、命令プリフェッチ回数テーブル2に書き込まれる。
他の構成と動作は、図7等を引用した実施形態1と同様であるので、説明を省略する。
これにより、命令プリフェッチ回数は、分岐要求部33においてカウンタ34によって算出されるため、命令フェッチアドレス生成部11における命令フェッチ回数計算部13が不要となり、少ない回路規模で正確に命令プリフェッチ回数を学習することができる。
〔実施形態3〕<命令フェッチアドレス生成部が命令プリフェッチ回数をカウンタにより算出>
図14は、実施形態3の命令フェッチアドレス生成部11の構成例を示すブロック図である。図13において分岐要求部33に設けられていた命令フェッチ境界越えカウンタ34に代えて、命令フェッチアドレス生成部11の命令フェッチ制御部8に命令フェッチ回数カウンタ14を備える。命令フェッチ回数カウンタ14は、分岐が発生したときにアサートされる分岐要求によってリセットされ、次の分岐が発生するまでの間に、アドレス生成制御部4が要求する命令フェッチ要求アドレスの発行回数をカウントする。分岐が発生したときのテーブル記録の際には、分岐先アドレス保持レジスタ12に保持される分岐先アドレスと、命令フェッチ回数カウンタ14のカウント値とが、命令プリフェッチ回数テーブル2に書き込まれる。
他の構成と動作は、図7等を引用した実施形態1と同様であるので、説明を省略する。
実施形態2の構成例では、実際に命令デコードされた命令数に基づいて分岐間距離が算出され、学習される命令プリフェッチ回数が求められるのに対して、本実施形態3の構成例では命令プリフェッチ要求が発行された回数に基づいて学習される命令プリフェッチ回数が算出される。命令プリフェッチは実際の命令実行に先立って実行されるのであるから、本実施形態3の構成例で算出される命令プリフェッチ回数は、実施形態2の場合に比べて多くなる場合がある。例えば、本実施形態3の構成例で何回かの命令プリフェッチされたときに、実際には1回目のプリフェッチに含まれる命令で分岐が発生した場合である。本実施形態3の構成例では要求された命令プリフェッチの数が学習される命令プリフェッチ回数となるが、実施形態2の場合には、実際に分岐が発生する1回目のプリフェッチが命令プリフェッチ回数となる。このように、実施形態2の場合より多くの投機的なフェッチリクエストが発生し、投機フェッチが多く行われることで命令キャッシュヒットする機会が増え、実施形態2の場合よりも性能が向上される可能性がある。
〔実施形態4〕<静的命令プリフェッチ回数テーブル>
ここまでは、実際に発生した分岐に基づいて分岐間距離を算出して、分岐先アドレスに対応する命令プリフェッチ回数を適応的に学習する、動的な命令プリフェッチ回数テーブル2を備える実施の形態について主に説明した。しかし、図1に示すプリフェッチ回数テーブル1は、必ずしも動的な命令プリフェッチ回数テーブル2によって構成されなければならないわけではない。
図15は、実施形態4の命令フェッチアドレス生成部11の構成例を示すブロック図である。命令フェッチアドレス生成部11は、図7と同様に、フリップフロップ7、セレクタ6、アドレス加算部5、アドレス生成制御部4、及び、命令プリフェッチ制御部8を備える。命令プリフェッチ制御部8は、命令プリフェッチ回数テーブル2に代えて静的命令プリフェッチ回数テーブル3とセレクタ15を有するが、図7とは異なり、分岐先アドレス保持レジスタ12と命令フェッチ回数計算部13とを備えていない。静的命令プリフェッチ回数テーブル3へのテーブル記録は、データバスアクセスによって行われる。即ち、処理実行部30によって実行されるストア命令などによって値が書き込まれる。実際に発生した分岐の分岐先アドレスによって、対応する命令プリフェッチ回数が読み出され、アドレス生成制御部4によってフリップフロップ7、セレクタ6及びアドレス加算部5が制御されて、読み出された回数の命令プリフェッチ要求が、命令キャッシュ20に対して発行される点は、実施形態1で説明した動作と同様である。実際に発生した分岐の分岐先アドレスが静的命令プリフェッチ回数テーブル3にヒットしない場合には、セレクタ15によってデフォルト(Default)値が供給される。
これにより、命令フェッチアドレス生成部11は学習機能を備える必要がない。静的命令プリフェッチ回数テーブル3に書き込む、分岐先アドレスと対応する命令プリフェッチ回数は、例えば、実行されるプログラムの実行形式ファイルをオフラインで解析した結果、各分岐先アドレスとそれに対応する分岐間距離と命令プリフェッチ回数を算出しておき、電源投入シーケンスで静的命令プリフェッチ回数テーブル3に書き込む。或いは、オペレーティングシステムなどのソフトウェアによって動的に監視し、適切な命令プリフェッチ回数を算出して書き込んでもよい。
〔実施形態5〕<静的+動的命令プリフェッチ回数テーブル>
動的命令プリフェッチ回数テーブル2と静的命令プリフェッチ回数テーブル3の両方を備えて、適宜使い分けても良い。
図16は、実施形態5の命令フェッチアドレス生成部11の構成例を示すブロック図である。命令フェッチアドレス生成部11は、図15と同様に、フリップフロップ7、セレクタ6、アドレス加算部5、アドレス生成制御部4、及び、命令プリフェッチ制御部8を備え、命令プリフェッチ制御部8は、静的命令プリフェッチ回数テーブル3とセレクタ15を有し、さらに、分岐間距離検出部17と動的命令プリフェッチ回数テーブル2とを有する。分岐間距離検出部17は、実際に発生した分岐の分岐先アドレスに適する命令プリフェッチ回数を算出して、動的命令プリフェッチ回数テーブル2に対するテーブル記録を行う回路であり、実施形態1〜3に示した回路又は他の分岐間距離検出回路であってもよい。セレクタ15は、動的命令プリフェッチ回数テーブル2から読み出された命令プリフェッチ回数、静的命令プリフェッチ回数テーブル3から読み出された命令プリフェッチ回数、またはデフォルト(Default)値から1つを選択してアドレス生成制御部4に供給する。
テーブル記録が行われる際、静的命令プリフェッチ回数テーブル3に記録されているタグと一致するエントリを動的命令プリフェッチ回数テーブル2にも記録すると、2重登録となる。この場合、テーブル参照時に一方の内容を優先して参照するか、もしくは、動的命令プリフェッチ回数テーブル2に記録する際に静的命令プリフェッチ回数テーブル3のタグを確認して重複記録を抑制するなどの制御を行うことができる。
静的命令プリフェッチ回数テーブル3には、例えば予めソフトウェアによりテーブルの内容を設定しておく。分岐要求時は動的命令プリフェッチ回数テーブル2と静的命令プリフェッチ回数テーブル3の両方から命令プリフェッチ回数を読み出し、いずれかをセレクタ15が選択する。いずれの命令プリフェッチ回数テーブルにもヒットしなければ、セレクタ15はデフォルト(Default)値を選択する。セレクタ15での選択は、通常の分岐/割り込み/例外といった分岐の種別などを用いたアルゴリズムを用いて制御されると好適である。割込みや例外ハンドラなどに伴う分岐先アドレスと対応する命令プリフェッチ回数の情報は、割込みや例外ハンドラに対する分岐が頻繁に発生するものではない場合には、動的命令プリフェッチ回数テーブル2からはスピルアウトしてしまう。しかし、静的に分岐間距離が分かるものについて静的命令プリフェッチ回数テーブル2の内容を用いることにより、より効果的に命令プリフェッチ回数を最適化できる。
なお、実施形態1〜3においては、動的命令プリフェッチ回数テーブル2の初期状態を空とする形態を例示したが、上記のように、静的に分岐間距離が分かるものについては、これを電源投入時に書き込んで初期状態とすることもできる。これにより、動的命令プリフェッチ回数テーブル2が学習する以前の分岐について、必要以上の命令プリフェッチによるバス41の占有を回避することができる。
〔実施形態6〕<命令プリフェッチ回数テーブルはマスク付き連想メモリ>
図17は、実施形態6の命令フェッチアドレス生成部11の構成例を示すブロック図である。命令フェッチアドレス生成部11は、図15と同様に、フリップフロップ7、セレクタ6、アドレス加算部5、アドレス生成制御部4、及び、命令プリフェッチ制御部8を備えるが、命令プリフェッチ制御部8とアドレス生成制御部4以外は図示が省略されている。命令プリフェッチ制御部8は、静的命令プリフェッチ回数テーブル3と、複数のエントリヒット判定回路18と、命令プリフェッチ回数選択回路16とを有する。
図18は、実施形態6の命令フェッチアドレス生成部11に搭載される静的命令プリフェッチ回数テーブル3の連想メモリによるエントリの構成例を示す説明図である。複数のエントリで構成され、各エントリはそれぞれバリッド(valid)フラグV、タグ(Tag)、及び、対応する命令プリフェッチ回数を含み、さらにマスク(Mask)フィールドが追加されている。
エントリ毎に設けられたエントリヒット判定回路18は、分岐要求時に分岐先アドレスを入力して静的命令プリフェッチ回数テーブル3を参照する際に、分岐先アドレスとマスク(Mask)フィールドでチェックアドレス(ChkAddr)を生成し、これとタグ(Tag)との一致比較を行う。即ち、入力された分岐先アドレスを構成する各ビットのうち、一部のビットはマスク(Mask)フィールドで無効化(マスク)され、残りの有効なビットがタグと比較される。命令プリフェッチ回数選択回路16はヒットしたエントリに格納されている命令プリフェッチ回数を選択してアドレス生成制御部4に供給する。
同じ命令プリフェッチ回数を出力する複数の分岐先アドレスをまとめて1つのエントリに登録することができるため、静的命令プリフェッチ回数テーブル3の回路規模(エントリ数)を少なく抑えることができる。
〔実施形態7〕<命令コード生成装置(コンパイラ+リンカ)>
図19は、実施形態7の命令コード生成装置50の構成例を模式的に示す説明図である。命令コード生成装置50は、実施形態1〜6で説明したプロセッサ100で実行されるプログラムの命令コードを生成する装置であって、特に制限されないが例えば、コンパイラ51とリンカ52とを備える。コンパイラ51は、高級言語で記述されたプログラム61が入力され、オブジェクトファイル62を生成する。リンカ52は、コンパイラ51によって生成されたオブジェクトファイル62と、命令コード生成装置50に保持されるライブラリオブジェクトファイル63から実行形式の命令コード(実行形式ファイル)64を生成する。
本実施形態7において、命令コード生成装置50は、さらに静的命令プリフェッチ回数情報65を算出して出力する。その算出方法は、例えばアドレスマッピングされた命令コードを解析する方法などである。リンカ52により、オブジェクトファイル62に含まれる各ルーチンをアドレス空間にマッピングするときに、それらのルーチンに含まれる分岐命令について、分岐先アドレスからその後初めて別の分岐命令が配置されるアドレスまでの距離を分岐間距離として算出し、これに基づいて静的命令プリフェッチ回数情報65を算出する。
算出された静的命令プリフェッチ回数情報65は、実施形態4〜6で説明したプロセッサ100に搭載される静的命令プリフェッチ回数テーブル3に書き込まれる。または、実施形態1〜3と5で説明したプロセッサ100に搭載される動的命令プリフェッチ回数テーブル2に初期値として書き込まれてもよい。
<マスク付き連想メモリによる命令プリフェッチ回数テーブルとの連携>
静的命令プリフェッチ回数テーブル3が、実施形態6で説明したように、マスク(Mask)フィールドを持つ連想メモリで構成される場合には、その特徴を活かすために、命令コード生成装置50は、以下のような機能を備えると好適である。
図20は、リンカ52によって生成される実行形式ファイル64の一例を模式的に示す説明図である。リンカ52にて実行形式ファイル64を生成する際に、似たサイズ、つまり最適となる命令プリフェッチ回数が同じとなる複数のルーチンを、互いに近いアドレス領域に固めてマッピングする。図示される実行形式ファイル64は、サイズの小さいルーチンをアドレス下位に、サイズの大きいルーチンをアドレス上位にマッピングした例である。アドレス0x0000、0x0010、0x0020に、それぞれルーチン0(Routine0)、ルーチン1(Routine1)、ルーチン2(Routine2)がマッピングされている。これらのルーチン0〜2(Routine0〜Routine2)は、分岐間距離が16アドレス未満の小さなルーチンであり、これらに適する命令プリフェッチ回数は、例えば1とされる。アドレス0x0800、0x0840に、それぞれルーチン20(Routine20)、ルーチン21(Routine21)がマッピングされている。これらのルーチン20〜21(Routine20〜Routine21)は、分岐間距離が1024アドレス未満の中程度のルーチンであり、これらに適する命令プリフェッチ回数は、例えば4とされる。さらに、アドレス0x1000、0x1800に、それぞれルーチン50(Routine50)、ルーチン51(Routine51)がマッピングされている。これらのルーチン50〜51(Routine50〜Routine51)は、分岐間距離が2024アドレスに近い大きなルーチンである。
図21は、リンカ52によって生成される静的命令プリフェッチ回数情報65の一例を模式的に示す説明図である。実行形式ファイル64のマッピングによって得られる、上記のような命令プリフェッチ回数を、タグ(Tag)フィールドと共に実施形態6で示したマスク(Mask)フィールドを付加して静的命令プリフェッチ回数情報65として出力する。プログラム実行開始時に実施形態6に示したマスク(Mask)フィールドを持つ静的命令フェッチ回数テーブル3に静的命令プリフェッチ回数情報65を転送することで、適切な命令プリフェッチを行うことができる。
図21に例示される1行目のエントリ、タグ(Tag)=0x00、マスク(Mask)=0xFC、命令プリフェッチ回数=1は、マスク(Mask)=0xFCによって下位2ビットがマスクされ上位がタグ(Tag)=0x00である分岐先アドレスにヒットし、命令プリフェッチ回数=1を出力する。図20に示される例では、ルーチン0(Routine0)、ルーチン1(Routine1)、ルーチン2(Routine2)の先頭アドレス0x0000、0x0010、0x0020は、それぞれの分岐先アドレスであり、いずれも上記の条件を満たすので、図21に例示される1行目のエントリにヒットし、命令プリフェッチ回数=1が読み出される。図21に例示される2行目のエントリ、タグ(Tag)=0x08、マスク(Mask)=0xF8、命令プリフェッチ回数=4は、マスク(Mask)=0xF8によって下位3ビットがマスクされ上位がタグ(Tag)=0x08である分岐先アドレスにヒットし、命令プリフェッチ回数=4を出力する。図20に示される例では、ルーチン20(Routine20)とルーチン21(Routine21)の先頭アドレス0x0800と0x0840は、それぞれの分岐先アドレスであり、いずれも上記の条件を満たすので、図21に例示される2行目のエントリにヒットし、命令プリフェッチ回数=4が読み出される。このように、1行目のエントリには少なくとも3通りの分岐先アドレスに対応する命令プリフェッチ回数が、2行目のエントリには少なくとも2通りの分岐先アドレスに対応する命令プリフェッチ回数が、それぞれまとめて登録されるので、静的命令プリフェッチ回数テーブル3の回路規模(エントリ数)を少なく抑えることができる。
また、リンカ52にて実行形式ファイル64を生成する際に、似たサイズ、つまり最適となる命令プリフェッチ回数が同じとなるルーチンが、互いに近いアドレス領域に固めてマッピングされているので、1エントリに登録できるルーチンの数が最大化される。
本実施形態では、命令プリフェッチ回数情報65を生成する機能をリンカ52に追加した例を示した。このような機能は、一般のリンカに追加されるプラグインソフトウェアとして提供されても良いし、一般のリンカが生成する実行形式ファイル64が入力される、独立のソフトウェアとして提供されてもよい。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば、実施形態1〜6で引用するブロック図における機能ブロック分割、及びその機能ブロックに対する命名は、便宜的なものであって、総体として上記要旨を逸脱しない範囲において、機能ブロックに実装される機能を統合、分割又は再編し、これに伴って名称を変更することは、適宜可能である。プロセッサ100として命令キャッシュとバスとメモリによる構成のみを例示したが、多階層のキャッシュメモリ、命令とデータとを分離しないユニファイドキャッシュ、階層的なバス構成などに変更し、一般にプロセッサに搭載される他の機能ブロックは、適宜自由に搭載可能である。
1 命令プリフェッチ量管理テーブル(命令プリフェッチ回数テーブル)
2 動的命令プリフェッチ回数テーブル
3 静的命令プリフェッチ回数テーブル
4 アドレス生成制御部
5 アドレス加算部
6 セレクタ
7 フリップフロップ
8 命令プリフェッチ制御部
9 命令プリフェッチ回数設定レジスタ
10 命令フェッチ部
11 命令フェッチアドレス生成部
12 分岐先アドレス保持レジスタ
13 命令フェッチ回数計算部
14 命令フェッチ回数カウンタ
15、16 命令プリフェッチ回数セレクタ
17 分岐間距離検出部
18 ヒット判定回路
19 分岐予測部
20 命令プリフェッチバッファ(命令キャッシュ部)
21 データアレイ
22 制御部
23 バスリクエストバッファ
30 処理実行部
31 命令キュー
32 命令デコーダ
33 分岐要求部
34 命令フェッチ境界越えカウンタ
35 実行部
40 メモリ
41 バス
42 中継バッファ
50 命令コード生成装置
51 コンパイラ
52 リンカ
61 ソースプログラム
62 オブジェクトファイル
63 ライブラリオブジェクトファイル
64 実行形式ファイル
65 静的命令プリフェッチ回数情報
100 プロセッサ

Claims (19)

  1. アドレスが連続する一群の命令をメモリからプリフェッチする命令プリフェッチバッファと、前記命令プリフェッチバッファから命令を読み込んで実行する処理実行部と、命令フェッチアドレス生成部とを備え、
    前記命令フェッチアドレス生成部は、前記処理実行部で発生する分岐の分岐先アドレスに対応付けて前記命令プリフェッチバッファにプリフェッチさせる命令の命令プリフェッチ量を記憶するテーブルを有し、前記処理実行部で分岐が発生したとき、前記テーブルを参照して発生した分岐の分岐先アドレスに対応する命令プリフェッチ量を求め、当該分岐先アドレスの命令を含み、求めた前記命令プリフェッチ量の命令を、前記命令プリフェッチバッファにプリフェッチさせる、
    プロセッサ。
  2. 請求項1において、前記命令フェッチアドレス生成部は、前記処理実行部で分岐が発生したとき、発生した分岐の分岐先アドレスと当該分岐の次に分岐が発生するアドレスとの差に基づいて、前記テーブルの当該分岐先アドレスに対応する命令プリフェッチ量を書き換える、
    プロセッサ。
  3. 請求項1において、前記テーブルには、前記処理実行部が所定の命令を実行することによって、分岐先アドレスと対応する命令プリフェッチ量が書き込まれる、
    プロセッサ。
  4. 請求項3において、前記テーブルを静的テーブルとし、
    前記命令フェッチアドレス生成部は、前記処理実行部で発生する分岐の分岐先アドレスに対応付けて前記命令プリフェッチバッファにプリフェッチさせる命令の命令プリフェッチ量を記憶する動的テーブルをさらに有し、前記処理実行部で分岐が発生したとき、発生した分岐の分岐先アドレスと、当該分岐の次に分岐が発生するアドレスとの差に基づいて、前記動的テーブルの当該分岐先アドレスに対応する命令プリフェッチ量を書き換え、
    前記命令フェッチアドレス生成部は、前記処理実行部で分岐が発生したときに、前記静的テーブルと前記動的テーブルの両方またはいずれか一方を参照して、発生した分岐の分岐先アドレスに対応する命令プリフェッチ量を求め、当該分岐先アドレスの命令を含み、求めた前記命令プリフェッチ量の命令を、前記命令プリフェッチバッファにプリフェッチさせる、
    プロセッサ。
  5. 請求項2において、前記命令フェッチアドレス生成部は、分岐予測部をさらに備え、前記処理実行部で分岐が発生し、前記分岐予測部による分岐予測が成功したときには、前記テーブルへの当該分岐先アドレスに対応する命令プリフェッチ量の書き換えを停止する、
    プロセッサ。
  6. 命令キャッシュと、処理実行部と、命令フェッチアドレス生成部とを備え、
    前記命令キャッシュは、1ライン当たり所定数の命令コードで構成される複数のラインを保持し、前記命令フェッチアドレス生成部から供給される命令プリフェッチ要求アドレス毎に1ラインの命令コードをメモリからプリフェッチし、
    前記処理実行部は、前記命令キャッシュから所定数の命令コードで構成される命令を読み込んで実行し、
    前記命令フェッチアドレス生成部は、前記処理実行部で発生する分岐の分岐先アドレスに対応付けて前記命令キャッシュにプリフェッチさせる命令プリフェッチ回数を記憶する命令プリフェッチ回数テーブルを有し、
    前記命令フェッチアドレス生成部は、前記処理実行部で分岐が発生したとき、前記命令プリフェッチ回数テーブルを参照して、発生した分岐の分岐先アドレスを含む命令プリフェッチ要求アドレスに対応する命令プリフェッチ回数を求め、当該命令プリフェッチ要求アドレスと連続し、求められた前記命令プリフェッチ回数に相当する数の命令プリフェッチ要求アドレスを、順次前記命令キャッシュに供給する、
    プロセッサ。
  7. 請求項6において、前記命令フェッチアドレス生成部は、前記処理実行部で分岐が発生したとき、発生した分岐の分岐先アドレスと、当該分岐の次に分岐が発生するアドレスとの差に基づいて、前記命令プリフェッチ回数テーブルの当該分岐先アドレスに対応する命令プリフェッチ回数を書き換える、
    プロセッサ。
  8. 請求項7において、前記処理実行部は、分岐が発生したときに発生した分岐の分岐元アドレスと分岐先アドレスとを前記命令フェッチアドレス生成部に供給する、分岐要求部を有し、
    前記命令フェッチアドレス生成部は、供給された分岐先アドレスを保持し、当該分岐の次に分岐が発生したときに供給される分岐元アドレスから、保持されている前記分岐先アドレスを引いた差に基づいて、前記命令プリフェッチ回数テーブルの保持されている前記分岐先アドレスに対応する命令プリフェッチ回数を書き換える、
    プロセッサ。
  9. 請求項7において、前記処理実行部は、分岐要求部を有し、
    前記分岐要求部は、前記処理実行部で分岐が発生したときに発生した分岐の分岐元アドレスを前記命令フェッチアドレス生成部に供給し、
    前記分岐要求部は、前記処理実行部で分岐が発生したときにカウントを開始し、前記処理実行部で実行する命令のアドレスが前記命令キャッシュの1ラインに対応するアドレス境界を越えた回数をカウントするカウンタを備え、当該分岐の次に分岐が発生したときのカウント値を分岐間距離として前記命令フェッチアドレス生成部に供給し、
    前記命令フェッチアドレス生成部は、供給された分岐先アドレスを保持し、当該分岐の次に分岐が発生したときに供給される前記分岐間距離に基づいて、保持されている前記分岐先アドレスに対応する命令プリフェッチ回数を書き換える、
    プロセッサ。
  10. 請求項7において、前記処理実行部は、分岐要求部を有し、
    前記分岐要求部は、前記処理実行部で分岐が発生したときに発生した分岐の分岐元アドレスを前記命令フェッチアドレス生成部に供給し、
    前記命令フェッチアドレス生成部は、供給された分岐先アドレスを保持するレジスタと、分岐先アドレスが供給されたときにカウントを開始し前記命令キャッシュに命令プリフェッチ要求アドレスを供給する回数をカウントするカウンタとを備え、当該分岐の次に分岐先アドレスが供給されたときに、前記カウンタのカウント値を、前記レジスタに保持されている分岐先アドレスに対応する命令プリフェッチ回数として、前記命令プリフェッチ回数テーブルに書き込む、
    プロセッサ。
  11. 請求項6において、前記命令プリフェッチ回数テーブルには、前記処理実行部が所定の命令を実行することによって、分岐先アドレスと対応する命令プリフェッチ回数が書き込まれる、
    プロセッサ。
  12. 請求項11において、前記命令プリフェッチ回数テーブルを静的命令プリフェッチ回数テーブルとし、
    前記命令フェッチアドレス生成部は、動的命令プリフェッチ回数テーブルをさらに備え、前記処理実行部で分岐が発生したとき、発生した分岐の分岐先アドレスと、当該分岐の次に分岐が発生するアドレスとの差に基づいて、前記動的命令プリフェッチ回数テーブルの当該分岐先アドレスに対応する命令プリフェッチ回数を書き換え、
    前記命令フェッチアドレス生成部は、前記処理実行部で分岐が発生したときに、前記静的命令プリフェッチ回数テーブルと前記動的命令プリフェッチ回数テーブルの両方またはいずれか一方を参照して発生した分岐の分岐先アドレスに対応する命令プリフェッチ回数を求め、発生した分岐の分岐先アドレスを含む命令プリフェッチ要求アドレスと、当該命令プリフェッチ要求アドレスと連続し、求めた前記命令プリフェッチ回数に相当する数の命令プリフェッチ要求アドレスとを、順次前記命令キャッシュに供給する、
    プロセッサ。
  13. 請求項7において、前記命令フェッチアドレス生成部は、分岐予測部をさらに備え、前記処理実行部で分岐が発生したとき、前記分岐予測部による分岐予測が成功したときに、前記命令プリフェッチ回数テーブルの当該分岐先アドレスに対応する命令プリフェッチ量の書き換えを停止する、
    プロセッサ。
  14. 請求項6において、前記命令プリフェッチ回数テーブルは、分岐先アドレスが入力され、対応する命令プリフェッチ回数を出力する、連想メモリである、
    プロセッサ。
  15. 請求項14において、前記命令プリフェッチ回数テーブルとして機能する前記連想メモリは、それぞれのエントリがタグとマスクと命令プリフェッチ回数からなる複数のエントリを備え、入力される分岐先アドレスの一部のビットを前記マスクによって無効化したときに前記タグと一致するエントリに格納されている命令プリフェッチ回数を、入力された前記分岐先アドレスに対応する命令プリフェッチ回数として出力する、
    プロセッサ。
  16. 命令プリフェッチバッファと命令フェッチアドレス生成部とを備えるプロセッサに供給するプログラムの命令コードを生成する命令コード生成装置であって、
    前記命令フェッチアドレス生成部は、発生する分岐の分岐先アドレスに対応付けて前記命令プリフェッチバッファにプリフェッチさせる命令の命令プリフェッチ量を記憶するテーブルを有し、分岐が発生したとき、発生した分岐の分岐先アドレスを含み、当該分岐先アドレスに対応する命令プリフェッチ量の命令を、前記命令プリフェッチバッファにプリフェッチさせ、
    前記命令コード生成装置は、前記プログラムから実行形式の命令コードを生成し、前記命令コードにおいて分岐命令の分岐先アドレスと次の分岐命令が配置されるアドレスとの差に基づいて、当該分岐先アドレスに対応する命令プリフェッチ量を算出する、
    命令コード生成装置。
  17. 請求項16において、前記命令プリフェッチバッファは命令キャッシュであり、前記命令プリフェッチ量は前記命令キャッシュのキャッシュラインに命令コードをプリフェッチさせる命令プリフェッチ回数で規定される、
    命令コード生成装置。
  18. 請求項17において、前記テーブルは、それぞれのエントリがタグとマスクと命令プリフェッチ回数からなる複数のエントリを備え、入力される分岐先アドレスの一部のビットを前記マスクによって無効化したときに前記タグと一致するエントリに格納されている命令プリフェッチ回数を、入力された前記分岐先アドレスに対応する命令プリフェッチ回数として出力する、連想メモリであり、
    前記命令コード生成装置は、対応する命令プリフェッチ回数が同じ値となる複数の分岐先アドレスが、一部のアドレスビットを共通とするアドレス空間に配置されるように、前記命令コードのアドレスマッピングを行い、前記共通するアドレスビットをタグとし、他のアドレスビットを無効化するビット列をマスクとし、前記同じ値を命令プリフェッチ回数として、前記連想メモリに供給する1個のエントリを構成する、
    命令コード生成装置。
  19. 請求項16において、前記命令コード生成装置は、高級言語で記述された前記プログラムが入力され、オブジェクトファイルを生成するコンパイラと、ライブラリオブジェクトファイルと、前記コンパイラによって生成されたオブジェクトファイルと前記ライブラリオブジェクトファイルから実行形式の命令コードを生成するリンカとを備え、前記リンカはさらに、分岐先アドレスに対応する命令プリフェッチ量を算出して出力する、
    命令コード生成装置。
JP2015036296A 2015-02-26 2015-02-26 プロセッサおよび命令コード生成装置 Active JP6457836B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2015036296A JP6457836B2 (ja) 2015-02-26 2015-02-26 プロセッサおよび命令コード生成装置
CN201610101924.XA CN105930136B (zh) 2015-02-26 2016-02-24 处理器和指令码生成设备
US15/053,798 US9946546B2 (en) 2015-02-26 2016-02-25 Processor and instruction code generation device
US15/915,730 US10540182B2 (en) 2015-02-26 2018-03-08 Processor and instruction code generation device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015036296A JP6457836B2 (ja) 2015-02-26 2015-02-26 プロセッサおよび命令コード生成装置

Publications (2)

Publication Number Publication Date
JP2016157371A true JP2016157371A (ja) 2016-09-01
JP6457836B2 JP6457836B2 (ja) 2019-01-23

Family

ID=56799136

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015036296A Active JP6457836B2 (ja) 2015-02-26 2015-02-26 プロセッサおよび命令コード生成装置

Country Status (3)

Country Link
US (2) US9946546B2 (ja)
JP (1) JP6457836B2 (ja)
CN (1) CN105930136B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020197830A (ja) * 2019-05-31 2020-12-10 ファナック株式会社 加工制御システム及び加工システム

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10296463B2 (en) * 2016-01-07 2019-05-21 Samsung Electronics Co., Ltd. Instruction prefetcher dynamically controlled by readily available prefetcher accuracy
CN108062236A (zh) * 2016-11-07 2018-05-22 杭州华为数字技术有限公司 一种软硬件协同分支指令预测方法及装置
US11226741B2 (en) * 2018-10-31 2022-01-18 EMC IP Holding Company LLC I/O behavior prediction based on long-term pattern recognition
CN117118570B (zh) * 2023-09-06 2024-04-02 上海交通大学 有限位数的最大码距遥控指令码生成系统及方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63147231A (ja) * 1986-12-10 1988-06-20 Nec Corp 命令の先取りを行なうデ−タ処理装置
JPS63503177A (ja) * 1986-02-28 1988-11-17 日本電気株式会社 命令先取制御装置
JPH07200406A (ja) * 1993-12-27 1995-08-04 Toshiba Corp キャッシュシステム
JPH07271580A (ja) * 1994-03-30 1995-10-20 Hitachi Ltd 分岐先予測処理機能を有するデータ処理装置
US5742804A (en) * 1996-07-24 1998-04-21 Institute For The Development Of Emerging Architectures, L.L.C. Instruction prefetch mechanism utilizing a branch predict instruction
JPH10283185A (ja) * 1997-04-10 1998-10-23 Matsushita Electric Ind Co Ltd プロセッサ
JP2001134440A (ja) * 1999-10-28 2001-05-18 Hewlett Packard Co <Hp> 命令をプリフェッチする方法
JP2004240616A (ja) * 2003-02-05 2004-08-26 Mitsubishi Electric Corp メモリコントローラ及びメモリアクセス制御方法

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2791086B2 (ja) 1989-03-15 1998-08-27 富士通株式会社 命令プリフェッチ装置
EP0389175A3 (en) 1989-03-15 1992-11-19 Fujitsu Limited Data prefetch system
DE69030648T2 (de) * 1990-01-02 1997-11-13 Motorola Inc Verfahren zum sequentiellen Vorabruf von 1-Wort-, 2-Wort oder 3-Wort-Befehlen
US6425124B1 (en) * 1993-11-08 2002-07-23 Matsushita Electric Industrial Co. Ltd. Resource allocation device for reducing the size and run time of a machine language program
US5889985A (en) * 1996-08-07 1999-03-30 Elbrus International Array prefetch apparatus and method
US6092149A (en) * 1997-05-28 2000-07-18 Western Digital Corporation Disk drive cache system using a dynamic priority sequential stream of data segments continuously adapted according to prefetched sequential random, and repeating types of accesses
US6012106A (en) * 1997-11-03 2000-01-04 Digital Equipment Corporation Prefetch management for DMA read transactions depending upon past history of actual transfer lengths
US6957327B1 (en) * 1998-12-31 2005-10-18 Stmicroelectronics, Inc. Block-based branch target buffer
US6425023B1 (en) * 1999-03-24 2002-07-23 International Business Machines Corporation Method and system for gathering and buffering sequential data for a transaction comprising multiple data access requests
US6567894B1 (en) * 1999-12-08 2003-05-20 International Business Machines Corporation Method and apparatus to prefetch sequential pages in a multi-stream environment
US7441110B1 (en) * 1999-12-10 2008-10-21 International Business Machines Corporation Prefetching using future branch path information derived from branch prediction
US6560693B1 (en) * 1999-12-10 2003-05-06 International Business Machines Corporation Branch history guided instruction/data prefetching
US6684319B1 (en) * 2000-06-30 2004-01-27 Conexant Systems, Inc. System for efficient operation of a very long instruction word digital signal processor
US6704860B1 (en) * 2000-07-26 2004-03-09 International Business Machines Corporation Data processing system and method for fetching instruction blocks in response to a detected block sequence
US6795876B1 (en) * 2001-03-27 2004-09-21 Intel Corporation Adaptive read pre-fetch
US6963954B1 (en) * 2001-09-19 2005-11-08 Cisco Technology, Inc. Method and apparatus for optimizing prefetching based on memory addresses
US7493480B2 (en) * 2002-07-18 2009-02-17 International Business Machines Corporation Method and apparatus for prefetching branch history information
US6976147B1 (en) * 2003-01-21 2005-12-13 Advanced Micro Devices, Inc. Stride-based prefetch mechanism using a prediction confidence value
US20040243767A1 (en) * 2003-06-02 2004-12-02 Cierniak Michal J. Method and apparatus for prefetching based upon type identifier tags
US7493451B2 (en) * 2006-06-15 2009-02-17 P.A. Semi, Inc. Prefetch unit
US7711797B1 (en) * 2006-07-31 2010-05-04 Juniper Networks, Inc. Optimizing batch size for prefetching data over wide area networks
US8984231B2 (en) * 2009-12-22 2015-03-17 Intel Corporation Methods and apparatus to perform adaptive pre-fetch operations in managed runtime environments
CN102184091A (zh) * 2011-04-18 2011-09-14 孙瑞琛 一种分支预测方法及装置
CN202133998U (zh) * 2011-04-18 2012-02-01 江苏中科芯核电子科技有限公司 一种分支预测装置
CN102360282A (zh) * 2011-09-26 2012-02-22 杭州中天微系统有限公司 快速处置分支指令预测错误的流水线处理器装置
US9811341B2 (en) * 2011-12-29 2017-11-07 Intel Corporation Managed instruction cache prefetching
US9135011B2 (en) * 2012-04-30 2015-09-15 The Regents Of The University Of Michigan Next branch table for use with a branch predictor
CN103513958B (zh) * 2012-06-27 2017-01-25 上海芯豪微电子有限公司 高性能指令缓存系统和方法
CN103513957B (zh) * 2012-06-27 2017-07-11 上海芯豪微电子有限公司 高性能缓存方法
CN103838550B (zh) * 2012-11-26 2018-01-02 上海芯豪微电子有限公司 一种分支处理系统和方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63503177A (ja) * 1986-02-28 1988-11-17 日本電気株式会社 命令先取制御装置
US4881170A (en) * 1986-02-28 1989-11-14 Nec Corporation Instruction prefetch control apparatus
JPS63147231A (ja) * 1986-12-10 1988-06-20 Nec Corp 命令の先取りを行なうデ−タ処理装置
JPH07200406A (ja) * 1993-12-27 1995-08-04 Toshiba Corp キャッシュシステム
JPH07271580A (ja) * 1994-03-30 1995-10-20 Hitachi Ltd 分岐先予測処理機能を有するデータ処理装置
US5742804A (en) * 1996-07-24 1998-04-21 Institute For The Development Of Emerging Architectures, L.L.C. Instruction prefetch mechanism utilizing a branch predict instruction
JPH10283185A (ja) * 1997-04-10 1998-10-23 Matsushita Electric Ind Co Ltd プロセッサ
JP2001134440A (ja) * 1999-10-28 2001-05-18 Hewlett Packard Co <Hp> 命令をプリフェッチする方法
US6799263B1 (en) * 1999-10-28 2004-09-28 Hewlett-Packard Development Company, L.P. Prefetch instruction for an unpredicted path including a flush field for indicating whether earlier prefetches are to be discarded and whether in-progress prefetches are to be aborted
JP2004240616A (ja) * 2003-02-05 2004-08-26 Mitsubishi Electric Corp メモリコントローラ及びメモリアクセス制御方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020197830A (ja) * 2019-05-31 2020-12-10 ファナック株式会社 加工制御システム及び加工システム
JP7294891B2 (ja) 2019-05-31 2023-06-20 ファナック株式会社 加工制御システム及び加工システム

Also Published As

Publication number Publication date
CN105930136B (zh) 2020-12-04
US20160253178A1 (en) 2016-09-01
US20180196675A1 (en) 2018-07-12
US9946546B2 (en) 2018-04-17
US10540182B2 (en) 2020-01-21
CN105930136A (zh) 2016-09-07
JP6457836B2 (ja) 2019-01-23

Similar Documents

Publication Publication Date Title
US9652230B2 (en) Computer processor employing dedicated hardware mechanism controlling the initialization and invalidation of cache lines
US8667225B2 (en) Store aware prefetching for a datastream
US8527707B2 (en) High-performance cache system and method
US6151662A (en) Data transaction typing for improved caching and prefetching characteristics
JP6143872B2 (ja) 装置、方法、およびシステム
US10540182B2 (en) Processor and instruction code generation device
US7213126B1 (en) Method and processor including logic for storing traces within a trace cache
US8583894B2 (en) Hybrid prefetch method and apparatus
US7133968B2 (en) Method and apparatus for resolving additional load misses in a single pipeline processor under stalls of instructions not accessing memory-mapped I/O regions
KR20010075258A (ko) 간접 분기 목적지 산출 방법
KR20170076564A (ko) 레지스터 리네이밍을 사용한 무브 명령어 처리
US20130103923A1 (en) Memory management unit speculative hardware table walk scheme
US10241810B2 (en) Instruction-optimizing processor with branch-count table in hardware
CN111213131B (zh) 高速缓存器中的零时延预提取
US9753855B2 (en) High-performance instruction cache system and method
US20080307173A1 (en) Efficient Encoding for Detecting Load Dependency on Store with Misalignment
US20080140934A1 (en) Store-Through L2 Cache Mode
US20150193236A1 (en) Low-miss-rate and low-miss-penalty cache system and method
US6507895B1 (en) Method and apparatus for access demarcation
US7251710B1 (en) Cache memory subsystem including a fixed latency R/W pipeline
EP4020229A1 (en) System, apparatus and method for prefetching physical pages in a processor
CN112395000B (zh) 一种数据预加载方法和指令处理装置
JPWO2013121516A1 (ja) データ処理装置
US7555633B1 (en) Instruction cache prefetch based on trace cache eviction
US20160179676A1 (en) Cleaning a write-back cache

Legal Events

Date Code Title Description
RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20170330

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171127

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180815

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180925

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181122

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: 20181204

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181221

R150 Certificate of patent or registration of utility model

Ref document number: 6457836

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150