JP2011209904A - 命令フェッチ装置、および、プロセッサ - Google Patents

命令フェッチ装置、および、プロセッサ Download PDF

Info

Publication number
JP2011209904A
JP2011209904A JP2010075781A JP2010075781A JP2011209904A JP 2011209904 A JP2011209904 A JP 2011209904A JP 2010075781 A JP2010075781 A JP 2010075781A JP 2010075781 A JP2010075781 A JP 2010075781A JP 2011209904 A JP2011209904 A JP 2011209904A
Authority
JP
Japan
Prior art keywords
instruction
prefetch
branch
unit
program
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
JP2010075781A
Other languages
English (en)
Inventor
Katsuhiko Metsugi
勝彦 目次
Hiroaki Sakaguchi
浩章 坂口
Hiroshi Kobayashi
浩 小林
Hitoshi Kai
斉 甲斐
Haruhisa Yamamoto
晴久 山本
Taichi Hirao
太一 平尾
Yosuke Morita
陽介 森田
Koichi Hasegawa
浩一 長谷川
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.)
Sony Corp
Original Assignee
Sony 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 Sony Corp filed Critical Sony Corp
Priority to JP2010075781A priority Critical patent/JP2011209904A/ja
Priority to US13/028,741 priority patent/US20110238953A1/en
Priority to CN2011100733263A priority patent/CN102207853A/zh
Publication of JP2011209904A publication Critical patent/JP2011209904A/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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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
    • G06F9/30156Special purpose encoding of instructions, e.g. Gray coding
    • 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
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • 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, 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

Abstract

【課題】命令プリフェッチのためのネクストライン・プリフェッチによるペナルティを改善する。
【解決手段】プログラム実行状態生成部510は現在のプログラムの実行状態を生成する。検出状態設定部520は命令プリフェッチタイミングを検出すべきプログラムの実行状態を設定する。例えば、命令プリフェッチタイミングを検出すべき命令アドレスや、所定の命令タイプの実行回数が設定される。命令プリフェッチタイミング検出部530は現在のプログラムの実行状態と検出状態設定部520に設定されたプログラムの実行状態とを比較して、両者が一致した場合に命令プリフェッチタイミングを検出する。命令プリフェッチ部570は命令プリフェッチタイミングが検出されるとネクストラインの命令プリフェッチを実行する。
【選択図】図18

Description

本発明は、命令フェッチ装置に関し、特に分岐命令を含む命令列をプリフェッチするための命令フェッチ装置、プロセッサ、および、これらにおける処理方法ならびに当該方法をコンピュータに実行させるプログラムに関する。
パイプライン化されたCPU(Central Processing Unit:プロセッサ)の処理能力を最大限に引き出すためには、パイプライン内の命令を滞らないよう流れ続けさせることが理想的である。この理想状態を保つためには、次に処理されるべき命令が格納されているメモリから命令を予めCPUまたは命令キャッシュにフェッチしておく必要がある。しかし、プログラムに分岐命令が含まれる場合、分岐命令の次に実行すべき命令の番地が分岐命令実行時まで確定しない。そのため、命令フェッチが待たされてパイプラインストールが発生し、命令実行のスループットが低下する。そのため、分岐による不確定要素がありながらプリフェッチを行って、パイプラインストールの発生を抑えるために工夫をしているCPUが多くある。
単純なハードウェアにより実現できるものとして典型的なプリフェッチがネクストライン・プリフェッチである(例えば、特許文献1参照。)。これは、プログラムの順番通りに命令をプリフェッチしてくる手法である。プロセッサの命令フェッチでは、連続的に番地が増加する方向にメモリをアクセスするというのが基本的なメモリアクセスパターンである。このため、ハードウェアによるプリフェッチは、ある番地の命令をキャッシュに格納した後に、その次のキャッシュラインも使われるという見込みのもとに、自動的に次のキャッシュラインも格納するという方法である。
特許第4327237号公報(図1)
上述のネクストライン・プリフェッチは、単純なハードウェア構成で実現できる反面、分岐しないことを前提としてプリフェッチをするため、多くの場合で無駄なプリフェッチ、すなわちプリフェッチミスが生じてしまう。このようなプリフェッチミスが起こるとプリフェッチしておいた命令を破棄して、再度正しい分岐先の命令をフェッチするため、CPUが待たされるという時間面のデメリットがある。それに加えて、余分なデータの読み書きを行うため、メモリアクセスが増加し、電力面でのロスも生じる。さらに、頻繁なプリフェッチや無駄なプリフェッチはデータパスのトラフィックを混雑させるという問題もある。
プリフェッチミスを減らす他の試みとして、分岐予測を用いるものがある。ネクストライン・プリフェッチは常に分岐しないことを予測してネクストラインをプリフェッチしているが、過去の履歴から分岐方向を予測して、予測した方の番地をプリフェッチするという方法である。分岐予測は複雑であり、履歴テーブルなどの回路面積の大きなハードウェアが必要である。しかし、分岐予測によって達成される性能利益は、予測アルゴリズムの効率に依存し、その予測アルゴリズムの多くは、相対的に大容量の記憶装置と、複雑なハードウェアとで実装する必要がある。分岐予測も予測が外れた場合にはネクストライン・プリフェッチと同様なペナルティが発生する。実際のプログラムの大半では、ループ処理や例外処理など各分岐先への分岐比率は偏りが大きいため、分岐予測によるメリットがデメリットを上回ることが多い。しかし、アプリケーションによってはどのような予測アルゴリズムを用いたとしても予測性能を上げることが困難なものがあり、特にコーデックではループ以外の予測が当たりにくい傾向がある。予測のヒット率は向上させなければならないが、そのための機構は複雑かつ大規模になる反面、必ずしも回路規模に見合う性能改善が得られるとは限らない。
一方向のみのプリフェッチを行う上述の方法と違って、予測をせず、分岐先の両方向をプリフェッチしておいてプリフェッチミスを解消する手法も考えられている。この場合、分岐予測の手法に比べ、少ないハードウェア構成追加でパイプラインストールを解消することができる。しかし、プリフェッチのための格納データ量が単純に倍増するだけでなく、不要なデータを必ず読むことになり、データパス混雑度が高まることによる悪影響や、冗長回路追加による複雑化や、電力面のロスも無視できない。
以上のように、どのようにプリフェッチをするか、それぞれデメリット(CPU実装コスト、分岐予測処理のオーバーヘッド)とメリット(期待されるスループット向上)があり、コストと性能のトレードオフが存在する。
本発明はこのような状況に鑑みてなされたものであり、命令プリフェッチのためのネクストライン・プリフェッチによるペナルティを改善することを目的とする。
本発明は、上記課題を解決するためになされたものであり、その第1の側面は、命令プリフェッチタイミングを検出すべきプログラムの実行状態を設定する検出状態設定部と、現在のプログラムの実行状態を生成するプログラム実行状態生成部と、上記現在のプログラムの実行状態と上記設定されたプログラムの実行状態とを比較して両者が一致した場合に命令プリフェッチタイミングを検出する命令プリフェッチタイミング検出部と、上記命令プリフェッチタイミングが検出されると次の命令プリフェッチを実行する命令プリフェッチ部とを具備する命令フェッチ装置である。これにより、予め設定された実行状態になった際に次の命令プリフェッチを実行するという作用をもたらす。
また、この第1の側面において、上記検出状態設定部は、命令プリフェッチタイミングを検出すべき命令アドレスの少なくとも一部を設定するアドレス設定レジスタを備え、上記プログラム実行状態生成部は、上記現在のプログラムの実行状態として現在実行中の命令アドレスを保持するプログラムカウンタを備え、上記命令プリフェッチタイミング検出部は、上記プログラムカウンタの値の少なくとも一部と上記アドレス設定レジスタの値とを比較して両者が一致した場合に命令プリフェッチタイミングを検出するアドレス比較部を備えてもよい。これにより、プログラムカウンタの状態に応じて次の命令プリフェッチを実行するという作用をもたらす。
また、この第1の側面において、プログラムの命令列を所定サイズ毎に区切った命令ペイロードと当該命令ペイロードの次の命令ペイロードのプリフェッチタイミングを指示するプリフェッチタイミング情報を含む命令ヘッダとからなる命令パケットを保持する命令パケット保持部をさらに具備し、上記検出状態設定部は、上記プリフェッチタイミング情報に基づいて上記アドレス設定レジスタへの設定を行ってもよい。これにより、命令ヘッダに含まれるプリフェッチタイミング情報に基づいて設定された命令アドレスに従って次の命令プリフェッチを実行するという作用をもたらす。
また、この第1の側面において、上記検出状態設定部は、命令プリフェッチタイミングを検出すべき命令アドレスの設定粒度を示すステップ値を保持する設定ステップアドレスレジスタと、上記プリフェッチタイミング情報に含まれるステップ数と上記ステップ値とを乗算することにより上記アドレス設定レジスタへの設定を行う乗算部とをさらに備えてもよい。これにより、ステップ値とステップ数とに基づいて設定された命令アドレスに従って次の命令プリフェッチを実行するという作用をもたらす。
また、この第1の側面において、プログラムの命令列を所定サイズ毎に区切った命令ペイロードと当該命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐が生じる可能性の高さを示す分岐予測情報を含む命令ヘッダとからなる命令パケットを保持する命令パケット保持部をさらに具備し、上記検出状態設定部は、上記分岐予測情報に基づいて上記アドレス設定レジスタへの設定を行ってもよい。これにより、命令ヘッダに含まれる分岐予測情報に基づいて設定された命令アドレスに従って次の命令プリフェッチを実行するという作用をもたらす。
また、この第1の側面において、上記検出状態設定部は、上記命令プリフェッチタイミングを検出すべきプログラムの実行状態として所定の命令タイプの実行回数を設定する実行回数設定レジスタを備え、上記プログラム実行状態生成部は、上記現在のプログラムの実行状態として上記所定の命令タイプの現在の実行回数を生成してもよい。これにより、所定の命令タイプが所定回数実行された際に次の命令プリフェッチを実行するという作用をもたらす。この場合において、上記プログラム実行状態生成部は、上記所定の命令タイプを設定する命令タイプ設定レジスタと、現在実行中の命令の命令タイプと上記所定の命令タイプとを比較して両者が一致したことを検出する命令タイプ比較部と、上記命令タイプ比較部において現在実行中の命令の命令タイプと上記所定の命令タイプとが一致したことが検出される度にその命令タイプの実行回数を計数する実行回数カウンタとを備えてもよい。
また、本発明の第2の側面は、命令プリフェッチタイミングを検出すべきプログラムの実行状態を設定する検出状態設定部と、現在のプログラムの実行状態を生成するプログラム実行状態生成部と、上記現在のプログラムの実行状態と上記設定されたプログラムの実行状態とを比較して両者が一致した場合に命令プリフェッチタイミングを検出する命令プリフェッチタイミング検出部と、上記命令プリフェッチタイミングが検出されると次の命令プリフェッチを実行する命令プリフェッチ部と、上記命令プリフェッチにより取得された命令を実行する命令実行部とを具備するプロセッサである。これにより、予め設定された実行状態になった際に次の命令プリフェッチを実行して、命令を実行するという作用をもたらす。
本発明によれば、命令プリフェッチのためのネクストライン・プリフェッチによるペナルティを改善することができるという優れた効果を奏し得る。
本発明の第1の実施の形態におけるプロセッサのパイプライン構成例を示す図である。 本発明の第1の実施の形態におけるプロセッサのブロック構成例を示す図である。 本発明の第1の実施の形態における命令パケット300の構造例を示す図である。 本発明の第1の実施の形態における命令ヘッダ310のフィールド構成例を示す図である。 本発明の第1の実施の形態で用いられる分岐予測フラグ311の設定例を示す図である。 本発明の第1の実施の形態で用いられる命令辞書テーブル参照型圧縮の適用例を示す図である。 本発明の第1の実施の形態における命令辞書テーブル参照型圧縮による分岐予測フラグ311の変更例を示す図である。 本発明の第1の実施の形態における命令パケット生成のための機能構成例を示す図である。 本発明の第1の実施の形態における命令パケット生成のための処理手順例を示す図である。 本発明の第1の実施の形態における命令実行のための機能構成例を示す図である。 本発明の第1の実施の形態における命令実行のための処理手順例を示す図である。 本発明の第1の実施の形態における命令ヘッダ310のフィールド構成の変形例を示す図である。 本発明の第2の実施の形態における分岐命令の配置と命令プリフェッチ開始位置との関係例を示す図である。 本発明の第2の実施の形態におけるプリフェッチ開始アドレス設定レジスタを用いた構成例を示す図である。 本発明の第2の実施の形態における命令ヘッダ310の命令プリフェッチタイミングフィールド312を用いた構成例を示す図である。 本発明の第2の実施の形態において所定回数の命令実行をプリフェッチタイミングに利用する構成例を示す図である。 本発明の第2の実施の形態において命令ヘッダ310に命令タイプおよび実行回数を設定した例を示す図である。 本発明の第2の実施の形態における命令実行のための機能構成例を示す図である。 本発明の第2の実施の形態における命令実行のための処理手順例を示す図である。 本発明の第3の実施の形態におけるプログラムカウンタの加算制御処理の機能構成例を示す図である。 本発明の第3の実施の形態における加算制御レジスタ640の構成例を示す図である。 本発明の第3の実施の形態における2方向分岐による命令の処理態様例を示す図である。 本発明の第3の実施の形態における多方向分岐による命令の処理態様例を示す図である。 本発明の第3の実施の形態における加算制御レジスタ640に値を設定するための命令セットの一例を示す図である。 本発明の第3の実施の形態において条件分岐命令により加算制御レジスタ640に値を設定した場合の例を示す図である。 本発明の第3の実施の形態において制御レジスタ変更命令PCINCMODEにより加算制御レジスタ640に値を設定した場合の例を示す図である。 本発明の第3の実施の形態における命令実行のための処理手順例を示す図である。 本発明の第4の実施の形態におけるプロセッサのパイプライン構成例を示す図である。 本発明の第4の実施の形態におけるプロセッサのブロック構成例を示す図である。 本発明の第4の実施の形態における分岐命令とキャッシュラインの関係を示す図である。 本発明の第4の実施の形態における命令配置の変更の一態様を示す図である。 本発明の第4の実施の形態における命令配置のための機能構成例を示す図である。 本発明の第4の実施の形態における命令配置のための処理手順例を示す図である。 本発明の第4の実施の形態におけるプリフェッチアドレスレジスタの設定例を示す図である。 本発明の第4の実施の形態における命令実行のための機能構成例を示す図である。 本発明の第4の実施の形態における命令実行のための処理手順例を示す図である。
以下、本発明を実施するための形態(以下、実施の形態と称する)について説明する。説明は以下の順序により行う。
1.第1の実施の形態(分岐予測情報を利用した命令プリフェッチの抑止制御)
2.第2の実施の形態(命令プリフェッチのタイミング制御)
3.第3の実施の形態(命令を混合配置することによる命令プリフェッチのペナルティ平均化)
4.第4の実施の形態(分岐先キャッシュラインの配置を固定化することによるキャッシュライン衝突回避)
5.各実施の形態の組合せ
<1.第1の実施の形態>
[プロセッサの構成]
図1は、本発明の第1の実施の形態におけるプロセッサのパイプライン構成例を示す図である。この例では、命令フェッチステージ(IF)11と、命令デコードステージ(ID)21と、レジスタフェッチステージ(RF)31と、実行ステージ(EX)41と、メモリアクセスステージ(MEM)51の5段階のパイプラインを想定している。各パイプラインは、それぞれラッチ19、29、39および49によって区切られており、クロックに同期してパイプライン処理が行われる。
命令フェッチステージ(IF:Instruction Fetch)11では、命令フェッチ処理が行われる。この命令フェッチステージ11では、プログラムカウンタ(PC)18が加算部12により逐次加算され、このプログラムカウンタ18に示される命令が次の命令デコードステージ21に供給されていく。また、この命令フェッチステージ11では、後述する命令キャッシュを含み、この命令キャッシュへの命令プリフェッチを行う。ネクストラインプリフェッチ部13は、現在実行対象となっている命令を含むキャッシュラインの次のキャッシュラインであるネクストラインのプリフェッチを行うためのものである。
命令デコードステージ(ID:Instruction Decode)21では、命令フェッチステージ11から供給された命令のデコード処理が行われる。この命令デコードステージ21においてデコードされた結果は、レジスタフェッチステージ(RF)31に供給される。また、分岐命令の場合、その分岐先アドレスがプログラムカウンタ(PC)18に供給される。
レジスタフェッチステージ(RF:Register Fetch)31では、命令実行に必要なオペランドのフェッチ処理が行われる。パイプライン型のプロセッサではオペランドアクセス対象はレジスタファイルに限定されることが多い。このレジスタフェッチステージ31において取得されたオペランドデータは、実行ステージ(EX)41に供給される。
実行ステージ(EX:EXecute)41では、オペランドデータを用いて命令実行が行われる。例えば、算術論理演算や分岐判定処理などが行われる。この実行ステージ(EX)41において得られた実行結果データはレジスタファイルに格納される。また、ストア命令の場合には、メモリアクセスステージ(MEM)51においてメモリへの書込みが行われる。
メモリアクセスステージ(MEM:Memory)51では、メモリへのアクセスが行われる。ロード命令の場合にはメモリからのリードアクセスが行われ、ストア命令の場合にはメモリへのライトアクセスが行われる。
図2は、本発明の第1の実施の形態におけるプロセッサのブロック構成例を示す図である。このプロセッサは、プロセッサコア110と、命令キャッシュ120と、データキャッシュ130と、ネクストラインプリフェッチ部150と、パケットデマルチプレクサ160とを備えている。また、このプロセッサは、さらに、プリフェッチキュー170と、命令キュー180と、命令辞書インデックス191と、命令辞書テーブル192とを備えている。また、このプロセッサには、システムメモリ140が接続される。
プロセッサコア110は、命令フェッチ機能を除くプロセッサとしての主機構を備えるものであり、プログラムカウンタ111と、命令レジスタ112と、命令デコーダ113と、実行部114と、レジスタファイル115とを備えている。プログラムカウンタ111は、命令実行対象となる命令のアドレスを逐次計数するカウンタである。命令レジスタ112は、プログラムカウンタ111によって示される命令実行対象となる命令を保持するレジスタである。命令デコーダ113は、命令レジスタ112に保持された命令をデコードするデコーダである。実行部114は、命令デコーダ113によってデコードされた命令を実行するものである。レジスタファイル115は、実行部114における命令実行に必要なオペランド等を保持する記憶領域である。
命令キャッシュ120は、システムメモリ140に記憶されている命令のコピーを保持するキャッシュメモリである。プロセッサコア110から命令をアクセスする際、システムメモリ140よりも命令キャッシュ120の方が高速にアクセス可能であるため、可能な限り前もって命令キャッシュ120に命令を保持しておくことが望ましい。必要な命令が命令キャッシュ120に保持されている場合にはヒット、保持されていない場合にはミスヒットと呼ばれる。
データキャッシュ130は、システムメモリ140に記憶されているデータのコピーを保持するキャッシュメモリである。プロセッサコア110からデータをアクセスする際、システムメモリ140よりもデータキャッシュ130の方が高速にアクセス可能であるため、可能な限り前もってデータキャッシュ130に命令を保持しておくことが望ましい。命令キャッシュ120の場合と同様に、必要なデータがデータキャッシュ130に保持されている場合にはヒット、保持されていない場合にはミスヒットと呼ばれる。命令キャッシュ120の場合と異なり、ライトアクセスの際にもデータキャッシュ130は用いられる。
ネクストラインプリフェッチ部150は、予め必要となることが予想される命令として、次のキャッシュラインであるネクストラインをシステムメモリ140から命令キャッシュ120にプリフェッチするためのものである。このネクストラインプリフェッチ部150は、パイプライン構成におけるネクストラインプリフェッチ部13に相当するものであり、命令フェッチステージ(IF)11に属する。このネクストラインプリフェッチ部150は、プログラムカウンタ111の状態を監視して、適切なタイミングにより命令キャッシュ120のキャッシュラインのプリフェッチリクエストをシステムメモリ140に発行する。
パケットデマルチプレクサ160は、システムメモリ140から読み出された命令パケットを命令ヘッダと命令ペイロードとに分離するものである。この命令パケットの構造については後述するが、命令のキャッシュラインは命令ペイロードに含まれている。
プリフェッチキュー170は、命令ペイロードに含まれる命令のキャッシュラインを保持する待ち行列である。このプリフェッチキュー170に保持されたキャッシュラインは、先頭から順に命令キャッシュ120に保持される。
命令キュー180は、プログラムカウンタ111に従って命令キャッシュ120から読み出された命令のキャッシュラインを保持する待ち行列である。
命令辞書インデックス191および命令辞書テーブル192は、命令辞書テーブル参照型の圧縮命令を実装するためのものである。出現頻度の高い一連の命令マクロが最初に出現したときにその命令マクロを命令辞書登録命令によって登録しておいて、次回出現したときに命令辞書参照命令に対して一連の命令マクロを1命令で置き換えていく。命令辞書テーブル192は一連の命令マクロを保持するものであり、命令辞書インデックス191は、この命令辞書テーブル192をアクセスするためのインデックスとしての機能を有するものである。この命令辞書テーブル参照型の圧縮命令の利用法については後述する。
システムメモリ140は、命令実行対象となる命令およびその命令の実行に必要となるデータを記憶するメモリである。プロセッサコア110からシステムメモリ140に対してリードまたはライトのアクセスがリクエストされるが、命令キャッシュ120またはデータキャッシュ130にヒットしている限りは実際にはリクエストは発生しない。なお、このシステムメモリ140は、特許請求の範囲に記載の命令パケット保持部の一例である。
このブロック構成例において、プログラムカウンタ111、命令キャッシュ120、ネクストラインプリフェッチ部150、パケットデマルチプレクサ160、プリフェッチキュー170、命令キュー180は図1の命令フェッチステージ(IF)11に属する。また、命令レジスタ112、命令辞書インデックス191および命令辞書テーブル192についても命令フェッチステージ(IF)11の一部と考えることができる。同様に、命令デコーダは命令デコードステージ(ID)21に属する。また、レジスタファイル115はレジスタフェッチステージ(RF)31に属する。また、実行部114は実行ステージ(EX)41に属する。データキャッシュ130およびシステムメモリ140はメモリアクセスステージ(MEM)51に属する。
[命令パケットの構造]
図3は、本発明の第1の実施の形態における命令パケット300の構造例を示す図である。この命令パケット300は、命令ヘッダ310と、命令ペイロード320とから構成される。命令ペイロード320は、1つ以上の命令キャッシュラインを格納する領域である。この例では、128バイトの命令キャッシュラインをn個(nは1以上の整数)ずつ格納するものとする。命令ヘッダ310は、命令ペイロード320に付与されるヘッダであり、その命令ペイロード320に関する情報を保持する。
図4は、本発明の第1の実施の形態における命令ヘッダ310のフィールド構成例を示す図である。この命令ヘッダ310の第1の構成例は、分岐予測フラグ311、命令プリフェッチタイミング312、命令ペイロード圧縮フラグ313、命令ペイロード長314、および、プリフェッチ設定315の各フィールドを備えている。この例では、命令ヘッダ310として32ビットを想定し、LSB側から第0ビットに分岐予測フラグ311、第1および2ビットに命令プリフェッチタイミング312、第3ビットに命令ペイロード圧縮フラグ313をそれぞれ割り当てている。また、第4乃至第7ビットに命令ペイロード長314、第8乃至11ビットにプリフェッチ設定315をそれぞれ割り当てている。残りの第12乃至31ビットの20ビットの未使用領域316は、後述のように他の用途に用いることができる。
分岐予測フラグ311は、命令ペイロード320内に分岐命令が存在し、かつ、その分岐先として命令ペイロード320内または次の命令ペイロード以外に分岐する可能性が高いことを示すフィールドである。すなわち、ネクストラインプリフェッチをそのまま実行してしまうと無駄になる可能性が高い場合に分岐予測フラグ311は例えば「1」を示し、それ以外の場合には例えば「0」を示す。なお、この分岐予測フラグ311は、特許請求の範囲に記載の分岐予測情報の一例である。
命令プリフェッチタイミング312は、命令プリフェッチを実行するタイミングを示すフィールドである。この命令プリフェッチタイミング312については第2の実施の形態において説明する。なお、命令プリフェッチタイミング312は、特許請求の範囲に記載のプリフェッチタイミング情報の一例である。
命令ペイロード圧縮フラグ313は、命令ペイロード320についてロスレス圧縮を施しているか否かを示すフィールドである。ロスレス圧縮とはデータの欠落が発生しない可逆圧縮であり、命令ペイロード320のビット列全体を圧縮するものである。このロスレス圧縮の方式としては、ハフマン符号、算術符号、LZ符号などが広く知られている。命令ペイロード320についてロスレス圧縮を施している場合には、それを伸張しなければ命令デコードを実行することはできない。したがって、命令ペイロード圧縮フラグ313が「1」を示す場合には、いったん伸張処理を行った上で命令デコードが行われる。1つの命令キャッシュラインをロスレス圧縮してもフェッチされるデータ量は少なくならないため効果はなく、ある程度長いビット列でないと符号化効率は上がらない。また、分岐命令を含む場合には基本ブロック毎に命令パケットを区切って分ける必要がある。
命令ペイロード長314は、命令ペイロード320のサイズを示すフィールドである。例えば、命令キャッシュライン数を単位として、命令ペイロード320のサイズを示すことができる。上述の例では、命令ペイロード320に128バイトの命令キャッシュラインをn個ずつ格納することを想定しており、この場合には値nが命令ペイロード長314に設定される。
プリフェッチ設定315は、プリフェッチ対象となるアドレスを予め設定するためのフィールドである。このプリフェッチ設定315については第4の実施の形態において説明する。
[分岐予測フラグ]
図5は、本発明の第1の実施の形態で用いられる分岐予測フラグ311の設定例を示す図である。この例では、命令パケット#1の命令ペイロード内に分岐命令$1が含まれ、命令パケット#2および#3には分岐命令が含まれないことを想定している。そして、分岐命令$1の分岐先は命令パケット#3の命令ペイロード内の命令アドレスとなっており、その分岐確率は高いものと予測されている。したがって、この場合には、命令パケット#1の命令ヘッダの分岐予測フラグ311は「1」に設定される。一方、命令パケット#2および#3には分岐命令が含まれないため、命令パケット#2および#3の命令ヘッダの分岐予測フラグ311は「0」に設定される。この分岐予測フラグ311は、後述するように、プロファイル等に基づいてコンパイル時に静的に設定されることを想定している。ここでは、命令パケット#1から見ると、命令パケット#2に含まれるのがネクストラインであり、命令パケット#3に含まれるのが分岐先ラインである。
このようにして設定された分岐予測フラグ311は、命令プリフェッチの際に参照され、「1」に設定されている場合にはネクストキャッシュラインのプリフェッチを中止する。これにより、無駄になることが予想される命令プリフェッチを回避することができる。
一方、分岐予測フラグ311が「1」に設定されるケースが連続すると、命令プリフェッチが行われず、命令プリフェッチ機構を有効利用できなくなるおそれが生じ得る。そこで、分岐予測フラグ311が「1」に設定されるケースが連続しないように、分岐命令の間の命令を命令辞書テーブル参照型圧縮処理により圧縮することを考える。なお、この命令辞書テーブル参照型圧縮処理は、命令ペイロード圧縮フラグ313に関するロスレス圧縮とは別個のものである。
[命令辞書テーブル参照型圧縮]
図6は、本発明の第1の実施の形態で用いられる命令辞書テーブル参照型圧縮の適用例を示す図である。同図左側の非圧縮コードでは、圧縮されていない命令列331乃至335が配置されている。ここで、命令列331、332および335は同一のコードであることを想定する。同様に、命令列333および334は同一のコードであることを想定する。
同図中央の圧縮コードでは、命令列331の直後に命令辞書登録命令%1が配置される。これにより、命令辞書テーブル192の領域%1(351)には命令列331の内容が登録される。その後、命令辞書参照命令%1(342)が実行されると、命令辞書テーブル192の領域%1(351)が参照され、命令列332に相当する内容が伸張されて命令キュー180に供給される。
また、圧縮コードでは、命令列333の直後に命令辞書登録命令%2が配置される。これにより、命令辞書テーブル192の領域%2(352)には命令列333の内容が登録される。その後、命令辞書参照命令%2(344)が実行されると、命令辞書テーブル192の領域%2(352)が参照され、命令列334に相当する内容が伸張されて命令キュー180に供給される。
また、さらに命令辞書参照命令%1(345)が実行されると、命令辞書テーブル192の領域%1(351)が参照され、命令列335に相当する内容が伸張されて命令キュー180に供給される。
このように、命令辞書テーブル192を使用することにより、命令列の圧縮処理が実現される。そこで、これを利用して、以下のように分岐予測フラグ311の設定を変更することができる。
図7は、本発明の第1の実施の形態における命令辞書テーブル参照型圧縮による分岐予測フラグ311の変更例を示す図である。同図左側のように命令パケット#1および#2において分岐予測フラグ311が「1」に設定されている場合、連続して命令プリフェッチが行われなくなってしまう。そこで、上述の命令辞書テーブル192を用いた命令圧縮を行うことにより、分岐予測フラグ311が連続して「1」に設定されることを解消することを試みる。
すなわち、同図右側のように、命令辞書テーブル192を用いて分岐命令$1と$2との間の命令を圧縮することにより、命令パケット#2に含まれていた分岐命令$2を命令パケット#1'に移動させる。これにより、命令パケット#2に分岐命令$2が存在しなくなることによって、命令パケット#2'の分岐予測フラグ311を「0」に設定することができるようになる。
なお、一般に、命令辞書テーブル参照型の圧縮命令は、通常の命令よりデコードに多くのサイクル数を必要とすることがあるため、全ての命令に適用してしまうと却って処理性能を劣化させるおそれがある。しかし、出現頻度の高い命令マクロが存在するケースにおいては、高い圧縮効率が得られ、効果を発揮する。
[命令パケット生成処理]
図8は、本発明の第1の実施の形態における命令パケット生成のための機能構成例を示す図である。この例は、プログラム保持部411と、分岐プロファイル保持部412と、命令パケット生成部420と、分岐予測フラグ設定部430と、命令圧縮部440と、命令パケット保持部413とを備えている。この命令パケットの生成は、コンパイル時またはリンク時に行うことが適している。リロケータブルなOSにおいてダイナミックリンクが行われる場合には実行時でも可能である。
プログラム保持部411は、命令パケットを生成する対象となるプログラムを保持するものである。分岐プロファイル保持部412は、プログラム保持部411に保持されたプログラムに含まれる分岐命令の分岐プロファイルを保持するものである。この分岐プロファイルは、予めプログラムを解析し、または、実行することにより得られるものである。無条件分岐命令であれば分岐するか否かはプログラムを解析することにより判断できることが多い。また、条件分岐命令であっても、プログラムを実行させることにより統計的に分岐する確率を判断することができる。
命令パケット生成部420は、プログラム保持部411に保持されたプログラムを固定サイズにより区切って命令ペイロード320を生成し、それぞれに命令ヘッダ310を付することにより命令パケット300を生成する。命令ペイロード320のサイズとしては、上述のように128バイトの命令キャッシュラインをn個ずつ格納することを想定することができる。
分岐予測フラグ設定部430は、命令パケット生成部420によって生成された命令ヘッダ310における分岐予測フラグ311を設定するものである。この分岐予測フラグ設定部430は、分岐プロファイル保持部412に保持された分岐プロファイルを参照することにより、命令ペイロード320に含まれる分岐命令の分岐先およびその分岐確率を予測して、分岐予測フラグ311を設定する。命令ペイロード320内に分岐命令が存在し、かつ、その分岐先として命令ペイロード320内または次の命令ペイロード以外に分岐する可能性が高い場合には分岐予測フラグ311に「1」が設定され、それ以外の場合には「0」が設定される。なお、この分岐予測フラグ設定部430は、特許請求の範囲に記載の分岐予測情報設定部の一例である。
命令圧縮部440は、命令ペイロード320に含まれる命令を圧縮するものである。命令辞書テーブル192を用いた命令圧縮を行う場合には、出現頻度の高い命令マクロを検出して、最初に出現した際にその命令マクロを命令辞書登録命令によって登録する。そして、次回出現したときに命令辞書参照命令に対して一連の命令マクロを1命令で置き換えていく。その結果、分岐命令の配置が変更された場合には、あらためて分岐予測フラグ311を設定し直す。また、命令ペイロード320全体に対してロスレス圧縮を行った場合には、命令ヘッダ310における命令ペイロード圧縮フラグ313を「1」に設定する。
命令パケット保持部413は、命令圧縮部440から出力された命令パケット300を保持するものである。
図9は、本発明の第1の実施の形態における命令パケット生成のための処理手順例を示す図である。
まず、命令パケット生成部420によって、プログラム保持部411に保持されたプログラムが固定サイズに区切られて命令ペイロード320を生成され、それぞれに命令ヘッダ310が付されることにより命令パケット300が生成される(ステップS911)。そして、分岐予測フラグ設定部430によって、命令ペイロード320内に分岐命令が存在し、かつ、その分岐先として命令ペイロード320内または次の命令ペイロード以外に分岐する可能性が高いか否かが判断される(ステップS912)。その結果、そのような分岐が発生する可能性が高いと判断された場合には分岐予測フラグ311に「1」が設定され(ステップS913)、それ以外の場合には「0」が設定される。
また、連続する命令パケット300において分岐予測フラグ311に「1」が設定されている場合には(ステップS914)、命令圧縮部440によって命令ペイロード320内の命令が命令辞書テーブル192を用いて圧縮される(ステップS915)。なお、命令ペイロード320全体に対してロスレス圧縮を行うことも可能であり、その場合には命令ヘッダ310における命令ペイロード圧縮フラグ313が「1」に設定される。
[命令実行処理]
図10は、本発明の第1の実施の形態における命令実行のための機能構成例を示す図である。この例は、命令パケット保持部413と、命令パケット分離部450と、分岐予測フラグ判定部460と、命令プリフェッチ部470と、命令伸張部480と、命令実行部490とを備えている。
命令パケット分離部450は、命令パケット保持部413に保持されていた命令パケット300を命令ヘッダ310と命令ペイロード320とに分離するものである。
分岐予測フラグ判定部460は、命令ヘッダ310の分岐予測フラグ311を参照して、命令キャッシュ120に対して次のキャッシュラインのプリフェッチを行うべきか否かを判定するものである。プリフェッチを行うべきと判定した場合には、分岐予測フラグ判定部460は命令プリフェッチ部470に対して命令プリフェッチを要求する。なお、この分岐予測フラグ判定部460は、特許請求の範囲に記載の分岐予測情報判定部の一例である。
命令プリフェッチ部470は、分岐予測フラグ判定部460から命令プリフェッチが要求されると、システムメモリ140に対して次のキャッシュラインのリクエストを発行するものである。プリフェッチされた命令は、命令キャッシュ120に保持され、そのまま命令の流れに変化が生じなければ命令実行部490に供給される。
命令伸張部480は、命令ヘッダ310の命令ペイロード圧縮フラグ313が「1」に設定されている場合には、ロスレス圧縮されている命令ペイロード320を伸張して、デコード可能な命令列を得るものである。命令ペイロード圧縮フラグ313が「1」に設定されていない場合には、命令伸張部480は命令ペイロード320内の命令をそのまま出力する。
命令実行部490は、命令伸張部480から出力された命令列を実行するものである。命令辞書テーブル参照型の圧縮を施された命令列については、命令辞書登録命令および命令辞書参照命令を実行することにより各命令を伸張する。これに対し、ロスレス圧縮については、そのままではデコードすることができないため、命令伸張部480において命令伸張が行われる。
図11は、本発明の第1の実施の形態における命令実行のための処理手順例を示す図である。
まず、命令パケット保持部413に保持されていた命令パケット300が命令パケット分離部450によって命令ヘッダ310と命令ペイロード320とに分離される(ステップS921)。そして、命令ヘッダ310の分岐予測フラグ311が分岐予測フラグ判定部460によって判定される(ステップS922)。分岐予測フラグ311に「1」が設定されていれば命令プリフェッチは抑止され(ステップS923)、「0」が設定されていれば命令プリフェッチ部470によって命令プリフェッチが実行される(ステップS924)。
また、命令ヘッダ310の命令ペイロード圧縮フラグ313が「1」に設定されている場合には(ステップS925)、命令伸張部480がロスレス圧縮されている命令ペイロード320を伸張する(ステップS926)。
そして、得られた命令が命令実行部490によって実行される(ステップS927)。このとき、命令辞書テーブル参照型の圧縮を施された命令列については、命令実行部490によって命令辞書登録命令および命令辞書参照命令が実行されることにより、各命令が伸張されていく。
なお、ステップS921は、特許請求の範囲に記載の命令パケット分離手順の一例である。また、ステップS922は、特許請求の範囲に記載の分岐予測情報判定手順の一例である。また、ステップS923およびS924は、特許請求の範囲に記載の命令プリフェッチ手順の一例である。
このように、本発明の第1の実施の形態によれば、予め分岐予測フラグ311を設定しておくことにより、無駄な命令プリフェッチを抑止することができる。
[変形例]
図12は、本発明の第1の実施の形態における命令ヘッダ310のフィールド構成の変形例を示す図である。図4のフィールド構成例では第12乃至31ビットの20ビットを未使用領域316としたが、この変形例では、この20ビットの領域317に命令ペイロードの先頭命令を保持することとしている。この第1の実施の形態では、32ビット長命令の命令セットを想定しているが、命令フィールドの未使用部分やオペランドを減らす等の工夫を施すことにより20ビットの短縮命令とし、領域317に埋め込んでいる。この場合、先頭命令が領域317に埋め込まれるため、命令ペイロード320のサイズは1命令分、すなわち32ビットを削減することができる。
なお、ここでは先頭命令を20ビットに短縮することとしたが、この短縮命令のビット幅はこれに限定されるものではなく、他のフィールドとの関係から適宜定めることができる。
<2.第2の実施の形態>
上述の第1の実施の形態ではプログラムを命令パケットにより管理することを前提としていたが、この第2の実施の形態では必ずしもそのような管理は必要ではない。そこで、最初に命令パケットによらない命令プリフェッチ制御について説明し、その後で命令パケットを利用した命令プリフェッチ制御について説明する。なお、この第2の実施の形態では、パイプライン構成およびブロック構成については上述の第1の実施の形態と同様であるため、説明を省略する。
[分岐命令の配置と命令プリフェッチ開始位置]
図13は、本発明の第2の実施の形態における分岐命令の配置と命令プリフェッチ開始位置との関係例を示す図である。キャッシュライン#1に存在する分岐命令$1の分岐先は、キャッシュライン#3に含まれる。したがって、この分岐命令$1を実行した結果、分岐することとなった場合、キャッシュライン#1に続くネクストラインとしてキャッシュライン#2をプリフェッチしたとしても無駄になってしまう。
このとき、プリフェッチ開始位置Aからキャッシュライン#2のプリフェッチを開始したとすると、その時点では分岐命令$1の実行結果は不明であり、キャッシュライン#2のプリフェッチが無駄になる可能性がある。一方、プリフェッチ開始位置Bからキャッシュライン#2のプリフェッチを開始することとすると、その時点で分岐命令$1の実行結果は判明しており、キャッシュライン#2の無駄なプリフェッチを抑止することが可能である。
このように、プリフェッチ開始位置は、ネクストラインプリフェッチの抑止の可否に影響を与える。上述の例からすると、プリフェッチ開始位置が遅いほど分岐命令の実行結果を知ることができて、プリフェッチ抑止には有利である。一方、プリフェッチ開始位置が遅過ぎるとプリフェッチが間に合わなくなり、命令パイプラインにおいて命令待ちが生じてしまうおそれがある。そこで、本発明の第2の実施の形態では、予め設定された任意のタイミングにより命令プリフェッチを行う機構を設ける。
[プリフェッチ開始アドレス設定レジスタにタイミングを設定する場合]
図14は、本発明の第2の実施の形態におけるプリフェッチ開始アドレス設定レジスタを用いた構成例を示す図である。図14(a)に示すように、この構成例は、ネクストラインプリフェッチ部150における構成として、プリフェッチ開始アドレス設定レジスタ153と、アドレス比較部154とを備える。
プリフェッチ開始アドレス設定レジスタ153は、各キャッシュラインにおいてネクストラインプリフェッチを開始するアドレスを設定するレジスタである。このプリフェッチ開始アドレス設定レジスタ153に設定されるアドレスは、キャッシュライン内における相対アドレスで足りる。このアドレスの設定は、プログラムにおける分岐命令の頻度などに基づいてコンパイル時に定めることを想定する。なお、このプリフェッチ開始アドレス設定レジスタ153は、特許請求の範囲に記載のアドレス設定レジスタの一例である。
アドレス比較部154は、プリフェッチ開始アドレス設定レジスタ153に設定されたアドレスと、プログラムカウンタ111の内容とを比較するものである。キャッシュライン内における相対アドレスについて一致が検出されると、アドレス比較部154はネクストラインプリフェッチリクエストを発行する。
この構成例によれば、キャッシュライン内の任意の位置においてプリフェッチ開始アドレスをプリフェッチ開始アドレス設定レジスタ153に設定しておいて、アドレス比較部154により一致を検出することができる。
図14(b)は、具体的な設定アドレスの例を示すものである。キャッシュラインにおいてプリフェッチ開始位置を4個所程度設けることを想定する。キャッシュラインが128バイトとすると、32バイトずつに区切って、先頭(0バイト)、32バイト、64バイト(中央)、96バイトの各位置を設定することが考えられる。4バイト(32ビット)長命令の命令セットを想定すると、命令アドレスを2進数表記した下位2ビットは無視することができる。したがって、この場合、下位3ビットから下位7ビットの5ビット分をアドレス比較部154によって比較対象とすればよいことがわかる。
[命令ヘッダの利用]
図15は、本発明の第2の実施の形態における命令ヘッダ310の命令プリフェッチタイミングフィールド312を用いた構成例を示す図である。この構成例では、第1の実施の形態において説明した命令パケットを前提として、命令ヘッダ310の命令プリフェッチタイミング312のフィールドを利用する。そして、ネクストラインプリフェッチ部150における構成として、図14(a)のプリフェッチ開始アドレス設定レジスタ153およびアドレス比較部154に加えて、設定ステップアドレスレジスタ151と、乗算部152とを備える。
設定ステップアドレスレジスタ151は、プリフェッチ開始アドレスを設定する際の粒度をステップ値として保持するレジスタである。例えば、上述の例のように32バイトをステップ値として、キャッシュラインの先頭(0バイト)、32バイト、64バイト、または、96バイトの各位置をプリフェッチ開始として設定する場合には、「32」が設定ステップアドレスレジスタ151に保持される。
乗算部152は、命令プリフェッチタイミング312のフィールドの値と、設定ステップアドレスレジスタ151に保持されたステップ値との乗算を行うものである。上述のように命令プリフェッチタイミング312のフィールドは2ビット幅であるため、これを補うために命令プリフェッチタイミング312にはステップ数を保持し、設定ステップアドレスレジスタ151に示されるステップ値を乗じるように構成している。したがって、命令ヘッダ310の命令プリフェッチタイミング312には、キャッシュラインの先頭(0バイト)であれば「00」、32バイトであれば「01」、64バイトであれば「10」、96バイトであれば「11」を設定することになる。この乗算部152による乗算結果は、プリフェッチ開始アドレス設定レジスタ153に保持される。
これ以外の構成は図14(a)と同様であり、プリフェッチ開始アドレス設定レジスタ153に保持されたアドレスと、プログラムカウンタ111の内容とがアドレス比較部154によって比較される。キャッシュライン内における相対アドレスについて一致が検出されると、アドレス比較部154はネクストラインプリフェッチリクエストを発行する。
なお、乗算部152における乗算、または、アドレス比較部154におけるアドレス比較を容易にするためには、ステップ値は2のべき乗であることが望ましい。
この構成例によれば、命令ヘッダ310の命令プリフェッチタイミング312のフィールドを利用して、プリフェッチ開始アドレスをプリフェッチ開始アドレス設定レジスタ153に設定することができる。
[所定回数の命令実行をプリフェッチタイミングに利用する場合]
図16は、本発明の第2の実施の形態において所定回数の命令実行をプリフェッチタイミングに利用する構成例を示す図である。図14および図15の構成例ではキャッシュライン内の固定位置をプリフェッチタイミングとして設定していたが、この構成例では特定の命令タイプの命令が所定回数実行されたときをプリフェッチタイミングとする。この構成例は、ネクストラインプリフェッチ部150における構成として、命令タイプ設定レジスタ155と、実行回数設定レジスタ156と、命令タイプ比較部157と、実行回数カウンタ158と、実行回数比較部159とを備える。
命令タイプ設定レジスタ155は、実行回数を計数する対象となる命令の命令タイプを設定するレジスタである。この場合の命令タイプとしては、例えば、除算命令やロード命令などの比較的レイテンシの長い命令、または、分岐命令などを想定することができる。レイテンシの長い命令については、後続の命令を多少遅らせたとしても全体の実行に影響はないからである。また、分岐命令については、図13により説明したように、後続の命令を決定するために分岐命令の実行を待った方がよい場合があるからである。
実行回数設定レジスタ156は、命令タイプ設定レジスタ155に設定された命令タイプに該当する命令について、その命令が実行される回数を設定するレジスタである。この実行回数設定レジスタ156に設定された回数の命令実行が行われると、ネクストラインプリフェッチリクエストが発行される。
なお、これら命令タイプおよび実行回数の設定は、プロファイルデータに含まれる出現頻度に基づいてコンパイル時に静的に、または、実行時に動的に決定することができる。
命令タイプ比較部157は、命令レジスタ112に保持される命令の命令タイプと、命令タイプ設定レジスタ155に設定された命令タイプとを比較して、一致を検出するものである。この命令タイプ比較部157において一致が検出されるたびに、実行回数カウンタ158に対して計数のトリガが出力される。
実行回数カウンタ158は、命令タイプ設定レジスタ155に設定された命令タイプに該当する命令の実行回数を計数するカウンタである。この実行回数カウンタ158は、加算部1581と、カウント値レジスタ1582とを備える。加算部1581は、カウント値レジスタ1582の値に「1」を加算するものである。カウント値レジスタ1582は、実行回数カウンタ158としてのカウント値を保持するレジスタである。このカウント値レジスタ1582は、命令タイプ比較部157から計数のトリガが出力されるたびに、加算部1581の出力を保持する。これにより、実行回数の計数が行われる。
実行回数比較部159は、カウント値レジスタ1582の値と実行回数設定レジスタ156の値とを比較して、一致を検出するものである。この実行回数比較部159において一致が検出されると、ネクストラインプリフェッチリクエストが発行される。
なお、命令タイプ設定レジスタ155と実行回数設定レジスタ156の組は、複数設けることができる。この場合、実行回数カウンタ158も別個に設ける必要がある。これにより、何れかの組について一致が検出されると、ネクストラインプリフェッチリクエストが発行される。
[命令ヘッダの利用]
図17は、本発明の第2の実施の形態において命令ヘッダ310に命令タイプおよび実行回数を設定した例を示す図である。図16の構成例では命令タイプ設定レジスタ155および実行回数設定レジスタ156に命令タイプおよび実行回数をそれぞれ設定していたが、これらの値は命令ヘッダ310に設定することも可能である。
この例では、命令ヘッダ310の第12ビット目から第25ビット目の14ビットの領域318に命令タイプを設定し、第26ビット目から第31ビット目の6ビットの領域319に実行回数を設定している。したがって、領域318の値を命令タイプ比較部157の一方の入力とし、領域319の値を実行回数比較部159の一方の入力とすることにより、特別な設定レジスタを設けることなく、所定回数の命令実行をプリフェッチタイミングに利用することができる。
[命令実行処理]
図18は、本発明の第2の実施の形態における命令実行のための機能構成例を示す図である。この例は、プログラム実行状態生成部510と、検出状態設定部520と、命令プリフェッチタイミング検出部530と、命令プリフェッチ部570と、命令実行部590とを備えている。
プログラム実行状態生成部510は、現在のプログラムの実行状態を生成するものである。このプログラム実行状態生成部510では、現在のプログラムの実行状態として、例えば、現在実行中の命令アドレスを保持するプログラムカウンタ111の値を生成することができる。また、例えば、実行回数カウンタ158に保持された所定の命令タイプの現在の実行回数を生成することができる。
検出状態設定部520は、命令プリフェッチタイミングを検出すべきプログラムの実行状態を設定するものである。この検出状態設定部520では、プログラムの実行状態として、例えば、命令プリフェッチタイミングを検出すべき命令アドレスの少なくとも一部をプリフェッチ開始アドレス設定レジスタ153に設定することができる。また、例えば、所定の命令タイプの実行回数を実行回数設定レジスタ156に設定することができる。
命令プリフェッチタイミング検出部530は、現在のプログラムの実行状態と検出状態設定部520に設定されたプログラムの実行状態とを比較して、両者が一致した場合に命令プリフェッチタイミングを検出するものである。この命令プリフェッチタイミング検出部530として、アドレス比較部154または実行回数比較部159を利用することができる。
命令プリフェッチ部570は、命令プリフェッチタイミング検出部530によって命令プリフェッチタイミングが検出されると、ネクストラインの命令プリフェッチを実行するものである。
命令実行部590は、命令プリフェッチ部570により取得された命令を実行するものである。この命令実行部590による実行の結果、プログラム実行状態生成部510によって生成される現在のプログラムの実行状態に影響を与える。すなわち、プログラムカウンタ111の値や実行回数カウンタ158の値が更新され得る。
図19は、本発明の第2の実施の形態における命令実行のための処理手順例を示す図である。
まず、検出状態設定部520に、命令プリフェッチタイミングを検出すべきプログラムの実行状態が設定される(ステップS931)。例えば、命令プリフェッチタイミングを検出すべき命令アドレスや、所定の命令タイプの実行回数が設定される。
そして、命令実行部590により命令実行が行われ(ステップS932)、命令プリフェッチタイミング検出部530によって命令プリフェッチタイミングが検出される(ステップS933)。例えば、設定された命令アドレスがプログラムカウンタ111と一致した場合や、設定された所定の命令タイプの実行回数が実行回数カウンタ158の値と一致した場合に、命令プリフェッチタイミングが検出される。命令プリフェッチタイミング検出部530によって命令プリフェッチタイミングが検出されると、命令プリフェッチ部570によって命令プリフェッチが行われる(ステップS934)。
このように、本発明の第2の実施の形態によれば、命令プリフェッチを行うタイミングを予め設定しておくことにより、命令プリフェッチのタイミングを制御することができる。
<3.第3の実施の形態>
上述の第1および第2の実施の形態ではネクストラインプリフェッチの抑止制御に関するものであったが、以下の第3および第4の実施の形態ではネクストラインおよび分岐先ラインの両者をプリフェッチすることを想定する。なお、本発明の第3の実施の形態では、パイプライン構成およびブロック構成については上述の第1の実施の形態と同様であるため、説明を省略する。
[プログラムカウンタの加算制御処理]
図20は、本発明の第3の実施の形態におけるプログラムカウンタの加算制御処理の機能構成例を示す図である。この構成例は、命令フェッチ部610と、命令デコード部620と、命令実行部630と、加算制御レジスタ640と、加算制御部650と、プログラムカウンタ660とを備えている。
命令フェッチ部610は、プログラムカウンタ660の値に従って、実行対象となる命令をフェッチするものであり、命令フェッチステージ11に相当する。この命令フェッチ部610によってフェッチされた命令は命令デコード部620に供給される。
命令デコード部620は、命令フェッチ部610によってフェッチされた命令をデコードするものであり、命令デコードステージ21に相当する。
命令実行部630は、命令デコード部620によってデコードされた命令を実行するものであり、命令実行ステージ41に相当する。なお、ここではオペランドアクセスについては省略している。
加算制御レジスタ640は、プログラムカウンタ660の加算制御を行うためのデータを保持するものである。この加算制御レジスタ640の構成例については後述する。
加算制御部650は、加算制御レジスタ640に保持されたデータに基づいてプログラムカウンタ660の加算制御を行うものである。
プログラムカウンタ660は、実行対象となる命令のアドレスを計数するものであり、プログラムカウンタ(PC)18に相当する。このプログラムカウンタ660は、プログラムカウンタ値保持部661と、加算部662とを備えている。プログラムカウンタ値保持部661は、プログラムカウンタの値を保持するレジスタである。加算部662は、プログラムカウンタ値保持部661の値を加算する処理を行うものである。
図21は、本発明の第3の実施の形態における加算制御レジスタ640の構成例を示す図である。この加算制御レジスタ640は、増分語数(incr)641と、増分回数(conti)642とを保持している。
増分語数641は、加算部662においてプログラムカウンタ値保持部661の値を加算する際の増分語数を保持するものである。この第4の実施の形態では32ビット(4バイト)長命令の命令セットを想定しているため、1語は4バイトになる。プログラムカウンタ660においてアドレスの下位2ビットを省略して語単位のアドレスを保持しているものとすると、従来の方式では増分値「1」が毎回加算されることになる。これに対し、この第4の実施の形態では、増分値として増分語数641の値が加算されていく。増分語数641に「1」を設定すると従来通りの動作となるが、「2」以上の整数値を設定した場合には命令を間引きながら実行できるようになる。具体例については後述する。なお、増分語数641は、特許請求の範囲に記載の増分値レジスタの一例である。
増分回数642は、加算部662において増分語数641に従った加算を行う回数を保持するものである。通常は従来の方式と同様に増分値「1」を加算するが、増分回数642において「1」以上の整数値が設定されている場合には増分語数641に従った加算を行う。この増分回数642は、図示しない減算部によって、命令が実行されるたびに「0」になるまで「1」を減算するように構成してもよく、また、別途カウンタを設けてそのカウンタの値が「0」になるまで「1」を減算するように構成してもよい。何れの場合であっても、増分回数642に指定された回数の加算が増分語数641に従って行われた後には、通常通り増分値「1」の加算に戻る。なお、この増分回数642は、特許請求の範囲に記載の変更指示レジスタの一例である。
[命令の実行態様]
図22は、本発明の第3の実施の形態における2方向分岐による命令の処理態様例を示す図である。2方向分岐を行う分岐命令のアドレスを「A」とすると、分岐が生じなかった場合の命令列は、「A+4」、「A+12」、「A+20」、「A+28」、「A+36」、「A+44」、「A+52」、「A+60」...に配置される。一方、分岐が生じた場合の命令列は、「A+8」、「A+16」、「A+24」、「A+32」、「A+40」、「A+48」、「A+56」、「A+64」...に配置される。すなわち、分岐が生じなかった場合の命令列と分岐が生じた場合の命令列とが交互に配置されることになる。
この2方向分岐の場合、各命令列の先頭の命令が実行されると、増分語数641には「2」が、増分回数642には各命令列の命令数が、それぞれ設定される。これにより、交互に配置された各命令列の一方のみを実行していくことができる。
図23は、本発明の第3の実施の形態における多方向分岐による命令の処理態様例を示す図である。ここでは、3方向分岐の例について説明するが、4方向以上に分岐する場合も同様の手法により適用可能である。3方向分岐を行う分岐命令のアドレスを「A」とすると、第1の命令列は、「A+4」、「A+16」、「A+28」、「A+40」、「A+52」、「A+64」、「A+76」...に配置される。また、第2の命令列は、「A+8」、「A+20」、「A+32」、「A+44」、「A+56」、「A+68」、「A+80」...に配置される。また、第3の命令列は、「A+12」、「A+24」、「A+36」、「A+48」、「A+60」、「A+72」、「A+84」...に配置される。すなわち、第1乃至第3の命令列が1命令ずつ順番に配置されることになる。
この3方向分岐の場合、各命令列の先頭の命令が実行されると、増分語数641には「3」が、増分回数642には各命令列の命令数が、それぞれ設定される。これにより、1命令ずつ順番に配置された各命令列の一つのみを実行していくことができる。
[加算制御レジスタへの設定]
図24は、本発明の第3の実施の形態における加算制御レジスタ640に値を設定するための命令セットの一例を示す図である。図24(a)は、本発明の第3の実施の形態における命令フォーマットの例である。この命令フォーマットは、6ビットのオペコード(OPCODE)、5ビットの第1ソースオペランド(rs)、5ビットの第2ソースオペランド(rt)、5ビットのデスティネーションオペランド(rd)、11ビットの即値フィールド(imm)を備えている。
図24(b)は、本発明の第3の実施の形態におけるオペコード一覧の例を示している。縦方向にオペコードの上位3ビット、横方向にオペコードの下位3ビットを配している。以下では、オペコード一覧の右下の条件分岐命令、および、オペコード「100111」の制御レジスタ変更命令に着目して説明する。
図24(c)は、条件分岐命令の命令フォーマットの例である。この条件分岐命令としては、ここでは、BEQfp、BNEfp、BLEfp、BGTZfp、BLTZfp、BGEZfp、BLTZALfp、BGEZALfpを挙げている。分岐(Branch)を表す「B」に続く「EQ」は両ソースオペランドの値が等しい(EQual)こと(rs=rt)を分岐条件とすることを表す。また、「NE」は両ソースオペランドの値が等しくない(Not Equal)こと(rs≠rt)を分岐条件とすることを表す。また、「LE」は第1ソースオペランドが第2ソースオペランド以下である(Less than or Equal)こと(rs≦rt)を分岐条件とすることを表す。また、「GTZ」は第1ソースオペランドがゼロより大きい(Greater Than Zero)こと(rs>0)を分岐条件とすることを表す。また、「LTZ」は第1ソースオペランドがゼロより小さい(Less Than Zero)こと(rs<0)を分岐条件とすることを表す。また、「GEZ」は第1ソースオペランドがゼロ以上である(Greater than or Equal Zero)こと(rs≧0)を分岐条件とすることを表す。また、それらに続く「AL」は、分岐の際に戻り番地を保存すること(branch And Link)を意味する。また、それらに続く「fp」は両ソースオペランドの値が浮動小数点数(floating point number)を表すことを意味する。デスティネーションオペランドとして示される増分語数incrは、プログラムカウンタ660の値を加算する際の増分語数である。即値フィールドとして示される増分回数contiは、プログラムカウンタ660において増分語数incrに従った加算を行う回数である。これら条件分岐命令が実行されると、加算制御レジスタ640の増分語数641には増分語数incrが設定され、増分回数642には増分回数contiが設定される。
図24(d)は、制御レジスタ変更命令PCINCMODEの命令フォーマットの例である。この制御レジスタ変更命令PCINCMODEは、プログラムカウンタ660の増分モードを加算制御レジスタ640に設定する命令である。この制御レジスタ変更命令PCINCMODEが実行されると、加算制御レジスタ640の増分語数641には増分語数incrが設定され、増分回数642には増分回数contiが設定される。この制御レジスタ変更命令PCINCMODEは、条件分岐命令とは別個の命令であり、実際には条件分岐命令とともに使用される。
図25は、本発明の第3の実施の形態において条件分岐命令により加算制御レジスタ640に値を設定した場合の例を示す図である。この例では、条件分岐命令BEQfpにおいて、分岐条件「rs=rt」、増分語数「2」、増分回数「L/2」が指定されている。この条件分岐命令BEQfpの命令語アドレスをmとする。このとき、分岐条件「rs=rt」が成立した場合には、命令m+2、命令m+4、命令m+6の順に、命令m+Lまで、増分語数「2」により実行が行われる。一方、分岐条件「rs=rt」が成立しなかった場合には、命令m+1、命令m+3、命令m+5の順に、命令m+(L−1)まで、増分語数「2」により実行が行われる。
図26は、本発明の第3の実施の形態において制御レジスタ変更命令PCINCMODEにより加算制御レジスタ640に値を設定した場合の例を示す図である。この例では、加算制御レジスタ640への設定を行わない通常の条件分岐命令の次に、制御レジスタ変更命令PCINCMODEが配置されている。そして、制御レジスタ変更命令PCINCMODEにおいて、増分語数「2」、増分回数「L/2」が指定されている。制御レジスタ変更命令PCINCMODEの命令語アドレスをmとする。このとき、条件分岐命令において分岐条件が成立した場合には、命令m+2、命令m+4、命令m+6の順に、命令m+Lまで、増分語数「2」により実行が行われる。一方、条件分岐命令において分岐条件が成立しなかった場合には、命令m+1、命令m+3、命令m+5の順に、命令m+(L−1)まで、増分語数「2」により実行が行われる。
[命令実行処理]
図27は、本発明の第3の実施の形態における命令実行のための処理手順例を示す図である。ここでは、上述の条件分岐命令や制御レジスタ変更命令などによって、加算制御レジスタ640への増分語数および増分回数の設定が予め完了していることを想定している。
加算制御レジスタ640の増分回数642がゼロより大きい場合(ステップS941)、プログラムカウンタ660において増分語数641に「4」を乗じた値が加算部662によってプログラムカウンタ値保持部661に加算される(ステップS942)。また、この場合、加算制御レジスタ640の増分回数642が「1」減算される(ステップS943)。一方、加算制御レジスタ640の増分回数642がゼロより大きくない場合には(ステップS941)、通常通り、プログラムカウンタ660において値「4」が加算部662によってプログラムカウンタ値保持部661に加算される(ステップS944)。これらの処理は繰り返し行われる。なお、ステップS942は、特許請求の範囲に記載の変更増分加算手順の一例である。また、ステップS944は、特許請求の範囲に記載の通常増分加算手順の一例である。
このように、本発明の第3の実施の形態によれば、分岐後の複数の命令列を命令単位で順番に混在して配置しておいて、分岐条件に合わせてプログラムカウンタの加算を制御することにより、適切な命令列の命令を実行することができる。これにより、ネクストラインおよび分岐先ラインを混在して配置することが可能となり、命令プリフェッチのペナルティを平均化することができる。
<4.第4の実施の形態>
[プロセッサの構成]
図28は、本発明の第4の実施の形態におけるプロセッサのパイプライン構成例を示す図である。基本的なパイプライン構成は、第1の実施の形態において説明したものと同様の5段階のパイプラインを想定している。
上述の第1の実施の形態ではネクストラインプリフェッチ部13においてネクストラインのプリフェッチを行っていたが、この第4の実施の形態ではネクストライン分岐先ラインプリフェッチ部14がネクストラインおよび分岐先ラインのプリフェッチを行う。すなわち、現在実行対象となっている命令を含むキャッシュラインの次のキャッシュラインであるネクストラインのみならず、分岐先の命令を含むキャッシュラインである分岐先ラインのプリフェッチも行われる。ネクストライン分岐先ラインプリフェッチ部14によってプリフェッチされた分岐先ラインは、プリフェッチキュー17に保持される。このプリフェッチキュー17に保持された分岐先ラインは、次の命令デコードステージ(ID)21に供給される場合に用いられる。なお、ネクストラインについては命令キャッシュから直接供給されるため、プリフェッチキュー17を介する必要はない。
図29は、本発明の第4の実施の形態におけるプロセッサのブロック構成例を示す図である。基本的なブロック構成は、第1の実施の形態において説明したものと同様である。
上述の第1の実施の形態ではネクストラインプリフェッチ部150においてネクストラインのプリフェッチを行っていたが、この第4の実施の形態ではネクストライン分岐先ラインプリフェッチ部250がネクストラインおよび分岐先ラインのプリフェッチを行う。また、プリフェッチキュー171を命令キャッシュ120と並列に配置して、プリフェッチキュー171から命令レジスタ112へ直接、分岐先ラインを供給できるようにしている。すなわち、分岐が発生した場合には、命令キャッシュ120から供給しかけた命令に代えて、プリフェッチキュー171からの命令をバイパスして供給する。これにより、パイプラインをストールさせることなく、命令を発行し続けることができる。なお、ネクストライン分岐先ラインプリフェッチ部250は、特許請求の範囲に記載のプリフェッチ部の一例である。また、プリフェッチキュー171は、特許請求の範囲に記載のプリフェッチキューの一例である。
なお、この第4の実施の形態では、命令パケットに分けることは必須ではないため、このブロック構成からは除外している。また、命令辞書テーブルによる圧縮についても、この第4の実施の形態では必須ではないため、ブロック構成から除外している。これらは適宜、組み合わせて実施することも可能である。
[分岐命令とキャッシュラインの関係]
図30は、本発明の第4の実施の形態における分岐命令とキャッシュラインの関係を示す図である。
現在実行対象となっている命令を含むキャッシュラインを現ラインと呼称し、それに続くキャッシュラインをネクストラインと呼称する。また、現ラインに含まれる分岐命令の分岐先命令を含むキャッシュラインを分岐先ラインと呼称する。この例では、現ラインの最後に分岐命令が配置されている。これは、現ラインの先頭の命令が実行されるタイミングからネクストラインおよび分岐先ラインのプリフェッチを開始することによって、分岐命令の実行までに両ラインのプリフェッチを完了させるまでの余裕をもたせるためである。したがって、必ずしも現ラインの最後に分岐命令が配置されている必要はなく、現ラインの少なくとも後半部分に配置されていれば、場合によってはプリフェッチの完了に間に合わせることは可能であると考えられる。
現ラインの最後に分岐命令を配置した場合、分岐命令における分岐条件が成立せずに分岐が発生しない場合にはネクストラインが必要となる、分岐条件が成立して分岐が発生する場合には分岐先ラインが必要となる。したがって、分岐条件の成否に関わらずプリフェッチを成功させるためには、ネクストラインおよび分岐先ラインの両ラインをプリフェッチすることが望ましい。本発明の第4の実施の形態では、ネクストライン分岐先ラインプリフェッチ部250によって両ラインをプリフェッチすることにより、分岐条件の成否に左右されずに命令実行を継続することを可能とする。この場合、両ラインをプリフェッチするためには、スループットは通常の2倍あることが望ましいが、必ずしも必須要件ではない。
各キャッシュラインの命令キャッシュ120上での衝突を考慮すると、分岐先ラインの配置には制限を設けることが望ましい。例えば、命令キャッシュ120がダイレクトマッピング方式であった場合、ラインアドレスが同じキャッシュライン同士は同時には格納することができずに衝突を起こす。この場合、ネクストラインをプリフェッチした直後に同じラインアドレスを有する分岐先ラインをプリフェッチすると、ネクストラインは命令キャッシュ120から追い出されてしまう。2wayセットアソシアティブ方式であれば、衝突を起こす可能性は低くなるが、格納状態によっては他のキャッシュラインに影響を与える場合は生じ得る。したがって、この第4の実施の形態では、最も厳しい条件としてダイレクトマッピング方式の命令キャッシュを想定し、ネクストラインと分岐先ラインとが同じラインアドレスにならないように、コンパイラまたはリンカにおいて分岐先ラインの配置を調整する。
コンパイラまたはリンカにおいて命令のアドレス配置を変更するためには、例えば次のような手法を用いることができる。まず、以下のような命令列を想定する。なお、「0x」に続く数字は十六進数を表す。
0x0000:命令A
0x0004:命令B
0x0008:命令C
このとき、命令の配置を全体的に4バイト後方にずらしたい場合には、以下のようにNOP(No-OPeration)命令を挿入する手法が考えられる。
0x0000:NOP命令
0x0004:命令A
0x0008:命令B
0x000C:命令C
また、命令Aが複数のオペレーションを行う命令である場合、以下のように命令Aを命令AAと命令ABの2命令に分けることができれば、同様に命令の配置を全体的に4バイト後方にずらすことができる。
0x0000:命令AA
0x0004:命令AB
0x0008:命令B
0x000C:命令C
図31は、本発明の第4の実施の形態における命令配置の変更の一態様を示す図である。ここでは、図31(a)のように命令列Aと命令列Bの後方に分岐命令Cがあり、命令列Dと命令列Eの何れかの処理を行い、その後、命令列Fを処理するというプログラムを想定する。このとき、命令列Bの結果が分岐命令Cの分岐条件に影響を与えない場合には、図31(b)のように分岐命令Cを命令列Aの直後に移動させ、さらに命令列Bを分岐先にも配置することにより、実行結果に影響を与えることなく命令配置を変更することができる。
[命令配置処理]
図32は、本発明の第4の実施の形態における命令配置のための機能構成例を示す図である。この構成例では、プログラム保持部701に保持されたプログラムからオブジェクトコードを生成して、オブジェクトコード保持部702に保持させることを想定している。この構成例は、分岐命令抽出部710と、分岐命令配置部720と、分岐先命令配置部730と、オブジェクトコード生成部740とを備えている。
分岐命令抽出部710は、プログラム保持部701に保持されたプログラムの中から分岐命令を抽出するものである。この分岐命令抽出部710は、抽出した分岐命令のプログラムにおけるアドレスを把握して分岐命令配置部720に供給する。また、この分岐命令抽出部710は、抽出した分岐命令の分岐先アドレスを把握して分岐先命令配置部730に供給する。
分岐命令配置部720は、分岐命令抽出部710によって抽出された分岐命令をキャッシュライン(現ライン)の後半部分に配置するものである。キャッシュラインの後半部分に配置するのは、上述のように、プリフェッチを完了させるまでの余裕をもたせるためである。したがって、この観点からは、キャッシュラインの最後に分岐命令を配置することが最も望ましいことになる。
分岐先命令配置部730は、分岐命令抽出部710によって抽出された分岐命令の分岐先命令を、次のキャッシュライン(ネクストライン)とは異なるラインアドレスを有する他のキャッシュライン(分岐先ライン)に配置するものである。ネクストラインと分岐先ラインとを異なるラインアドレスのキャッシュラインに配置するのは、上述のように、命令キャッシュ120における衝突を避けるためである。
オブジェクトコード生成部740は、分岐命令配置部720および分岐先命令配置部730によって配置された分岐命令および分岐先命令を含む命令列についてオブジェクトコードを生成するものである。このオブジェクトコード生成部740によって生成されたオブジェクトコードは、オブジェクトコード保持部702に保持される。なお、このオブジェクトコード生成部740は、特許請求の範囲に記載の命令列出力部の一例である。
図33は、本発明の第4の実施の形態における命令配置のための処理手順例を示す図である。
まず、分岐命令抽出部710によって、プログラム保持部701に保持されたプログラムの中から分岐命令が抽出される(ステップS951)。そして、分岐命令抽出部710によって抽出された分岐命令が、分岐命令配置部720によってキャッシュライン(現ライン)の後半部分に配置される(ステップS952)。また、分岐命令抽出部710によって抽出された分岐命令の分岐先命令が、分岐先命令配置部730によって次のキャッシュライン(ネクストライン)とは異なるラインアドレスを有する他のキャッシュライン(分岐先ライン)に配置される(ステップS953)。そして、分岐命令配置部720および分岐先命令配置部730によって配置された分岐命令および分岐先命令を含む命令列について、オブジェクトコード生成部740によってオブジェクトコードが生成される(ステップS954)。
なお、ステップS951は、特許請求の範囲に記載の分岐命令抽出手順の一例である。また、ステップS952は、特許請求の範囲に記載の分岐命令配置手順の一例である。また、ステップS953は、特許請求の範囲に記載の分岐先命令配置手順の一例である。また、ステップS954は、特許請求の範囲に記載の命令列出力手順の一例である。
[プリフェッチアドレスの設定]
図34は、本発明の第4の実施の形態におけるプリフェッチアドレスレジスタの設定例を示す図である。上述のように、分岐先ラインはネクストラインとは異なるラインアドレスに配置される。分岐先ラインをプリフェッチする際には、現ラインからの相対位置により常に固定的にプリフェッチするようにしてもよいが、以下のように自動的にプリフェッチする分岐先アドレスをその都度、任意に設定するようにしてもよい。
図34(a)は、プリフェッチアドレスレジスタ(PRADDR:PRefetch ADDress Register)790の構成例を示す図である。このプリフェッチアドレスレジスタ790は、分岐先ラインとして命令キャッシュ120へのプリフェッチ対象となるプリフェッチアドレスを設定するレジスタである。このプリフェッチアドレスは、プリフェッチアドレスレジスタ790の下位12ビットに保持される。
図34(b)は、プリフェッチアドレスレジスタ790に対する値の設定を行うMTSI_PRADDR(Move To Special register Immediate - PRADDR)命令の命令フォーマットを示す図である。このMTSI_PRADDR命令は、特殊(SPECIAL)命令の一つであり、特定のレジスタ(ここではプリフェッチアドレスレジスタ790)に即値を設定する命令である。この命令の第17乃至第21ビットがプリフェッチアドレスレジスタPRADDRを表している。この命令の第11乃至第8ビットがプリフェッチアドレスレジスタ790の第11乃至第8ビットに設定される。これにより、プリフェッチ対象となる分岐先ラインのアドレスが設定される。なお、ここでは、命令キャッシュ120の仕様として、4Kバイトの2wayセットアソシアティブ方式、1way当り8ラインの計16ライン、エントリサイズ256バイトを想定している。
また、他の例として、第1の実施の形態において説明した命令パケット300に区分けして、命令ヘッダ310のプリフェッチ設定フィールド315を利用することが考えられる。この場合、図4の命令ヘッダ310の第11乃至第8ビットのプリフェッチ設定フィールド315が、プリフェッチアドレスレジスタの第11乃至第8ビットに設定される。これにより、特殊命令を用いることなく、プリフェッチ対象となる分岐先ラインのアドレスを設定することができる。
[命令実行処理]
図35は、本発明の第4の実施の形態における命令実行のための機能構成例を示す図である。この構成例では、プログラムカウンタ111の状態を検知して、命令キャッシュ120およびプリフェッチキュー171へプリフェッチを行うことを想定している。この構成例は、プリフェッチタイミング検出部750と、ネクストラインプリフェッチ部760と、分岐先ラインプリフェッチ部770とを備えている。これらの構成は、ブロック構成のネクストライン分岐先ラインプリフェッチ部250に相当するものである。
プリフェッチタイミング検出部750は、プログラムカウンタ111の状態を参照して、命令プリフェッチのタイミングを検出するものである。この第4の実施の形態では、ネクストラインおよび分岐先ラインの両方向をプリフェッチするため、早期にプリフェッチを開始することが望ましい。したがって、例えばキャッシュラインの先頭の命令が実行開始された時点で命令プリフェッチのタイミングを検出することが考えられる。
ネクストラインプリフェッチ部760は、ネクストラインをプリフェッチするものである。システムメモリ140からプリフェッチされたネクストラインは、命令キャッシュ120に格納される。
分岐先ラインプリフェッチ部770は、分岐先ラインをプリフェッチするものである。分岐先ラインは、現ラインからの相対位置のキャッシュラインを固定的に使用するようにしてもよく、また、上述のプリフェッチアドレスレジスタ790に設定されたアドレスを使用するようにしてもよい。システムメモリ140からプリフェッチされた分岐先ラインは、命令キャッシュ120およびプリフェッチキュー171に格納される。
図36は、本発明の第4の実施の形態における命令実行のための処理手順例を示す図である。
まず、プリフェッチタイミング検出部750においてキャッシュラインの先頭の命令が実行開始されたことが検知されると(ステップS961)、ネクストラインプリフェッチ部760によってネクストラインがプリフェッチされる(ステップS962)。また、分岐先ラインプリフェッチ部770によって分岐先ラインがプリフェッチされる(ステップS963)。以下、これらの処理が繰り返される。これにより、ネクストラインおよび分岐先ラインの両方向の命令列がプリフェッチされる。
このように、本発明の第4の実施の形態によれば、分岐先ラインをネクストラインとは異なるラインアドレスなるよう配置しておいて、ネクストラインおよび分岐先ラインの両方向の命令列をプリフェッチすることにより、スループットを改善することができる。
<5.各実施の形態の組合せ>
ここまでは、本発明の第1乃至第4の実施の形態について別々に説明したが、これらの実施の形態は適宜組み合わせて実施することが可能である。
[第1の実施の形態と第2の実施の形態の組合せ]
本発明の第1の実施の形態では、命令ヘッダ310の分岐予測フラグ311に従ってプリフェッチの有無を決定していたが、その予測が外れることを回避するために本発明の第2の実施の形態を組み合わせることが有効である。すなわち、第2の実施の形態によりプリフェッチの判断を遅らせることによって、分岐の有無を先に確定させることができ、正しいキャッシュラインをプリフェッチすることができる。
[第1または第2の実施の形態と第3の実施の形態の組合せ]
本発明の第3の実施の形態では、両方向のプリフェッチを行うため、アドレスが離れた分岐先への分岐命令や、else節のないif文の場合には適用が困難なことがある。例えば、多方向分岐の全てのケースが同じ命令数でない場合には命令数が同じ数になるまでNOP命令を挿入する必要がある。また、ある程度長い命令例になってしまうと命令実行のスループットとキャッシュの利用効率が低下してしまう。これに対して、第1の実施の形態の分岐予測フラグ311を利用して、離れたアドレスへ分岐する可能性が高い場合には両方向のプリフェッチを行わないようにすることにより、第3の実施の形態のデメリットを回避することができる。また、第2の実施の形態のように命令プリフェッチタイミングを遅らせることにより分岐の有無を先に確定させ、無駄なプリフェッチを行わないようにすることにより、第3の実施の形態のデメリットを回避することができる。
[第1または第2の実施の形態と第4の実施の形態の組合せ]
本発明の第4の実施の形態では、ネクストラインおよび分岐先ラインを常にプリフェッチするようにしていたが、現ラインに分岐命令を含まない場合は分岐先ラインのプリフェッチが無駄になってしまうというデメリットがある。そこで、第1の実施の形態の分岐予測フラグ311を利用して、ネクストラインを実行する可能性が高いと判断した場合にはネクストラインのみをプリフェッチすることにより、第4の実施の形態のデメリットを回避することができる。また、第2の実施の形態のように命令プリフェッチタイミングを遅らせることにより分岐の有無を先に確定させ、無駄なプリフェッチを行わないようにすることにより、第4の実施の形態のデメリットを回避することができる。
[第3の実施の形態と第4の実施の形態の組合せ]
本発明の第4の実施の形態では、ネクストラインおよび分岐先ラインの2方向のプリフェッチを対象としていたが、第3の実施の形態を適用することにより、3方向以上の多方向分岐にも適用が可能となる。すなわち、複数の命令列が混在したキャッシュラインを2方向プリフェッチすることにより、多方向分岐への適用が可能となる。
このとき、ラインサイズ程度の範囲内の小さな分岐については第3の実施の形態を適用して、より広範囲への分岐については第4の実施の形態を適用するように使い分けることにより、両者のデメリットを回避することができる。すなわち、第4の実施の形態では、実行のスループットが低下しない一方で、命令キャッシュの利用効率は常に半分になるというデメリットがある。また、第3の実施の形態では、広範囲への分岐に適用してもあまり効果が得られないというデメリットがある。両者を組み合わせることにより、互いのデメリットを回避することができる。
[その他の組合せ]
ここで挙げた以外の組合せについても可能であり、互いの効果をより向上させることができる。例えば、第1または第2の実施の形態と、第3の実施の形態と、第4の実施の形態とを組み合わせることにより、上述したそれぞれの効果を互いにより向上させることができる。
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、本発明の実施の形態において明示したように、本発明の実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本発明の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。
また、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、CD(Compact Disc)、MD(MiniDisc)、DVD(Digital Versatile Disk)、メモリカード、ブルーレイディスク(Blu-ray Disc(登録商標))等を用いることができる。
11 命令フェッチステージ
12 加算部
13 ネクストラインプリフェッチ部
14 ネクストライン分岐先ラインプリフェッチ部
17、170、171 プリフェッチキュー
18、111 プログラムカウンタ
21 命令デコードステージ
31 レジスタフェッチステージ
41 命令実行ステージ
110 プロセッサコア
112 命令レジスタ
113 命令デコーダ
114 実行部
115 レジスタファイル
120 命令キャッシュ
130 データキャッシュ
140 システムメモリ
150 ネクストラインプリフェッチ部
151 設定ステップアドレスレジスタ
152 乗算部
153 プリフェッチ開始アドレス設定レジスタ
154 アドレス比較部
155 命令タイプ設定レジスタ
156 実行回数設定レジスタ
157 命令タイプ比較部
158 実行回数カウンタ
159 実行回数比較部
160 パケットデマルチプレクサ
180 命令キュー
191 命令辞書インデックス
192 命令辞書テーブル
250 ネクストライン分岐先ラインプリフェッチ部
320 命令ペイロード
411 プログラム保持部
412 分岐プロファイル保持部
413 命令パケット保持部
420 命令パケット生成部
430 分岐予測フラグ設定部
440 命令圧縮部
450 命令パケット分離部
460 分岐予測フラグ判定部
470 命令プリフェッチ部
480 命令伸張部
490 命令実行部
510 プログラム実行状態生成部
520 検出状態設定部
530 命令プリフェッチタイミング検出部
570 命令プリフェッチ部
590 命令実行部
610 命令フェッチ部
620 命令デコード部
630 命令実行部
640 加算制御レジスタ
650 加算制御部
660 プログラムカウンタ
701 プログラム保持部
702 オブジェクトコード保持部
710 分岐命令抽出部
720 分岐命令配置部
730 分岐先命令配置部
740 オブジェクトコード生成部
750 プリフェッチタイミング検出部
760 ネクストラインプリフェッチ部
770 分岐先ラインプリフェッチ部
790 プリフェッチアドレスレジスタ

Claims (8)

  1. 命令プリフェッチタイミングを検出すべきプログラムの実行状態を設定する検出状態設定部と、
    現在のプログラムの実行状態を生成するプログラム実行状態生成部と、
    前記現在のプログラムの実行状態と前記設定されたプログラムの実行状態とを比較して両者が一致した場合に命令プリフェッチタイミングを検出する命令プリフェッチタイミング検出部と、
    前記命令プリフェッチタイミングが検出されると次の命令プリフェッチを実行する命令プリフェッチ部と
    を具備する命令フェッチ装置。
  2. 前記検出状態設定部は、命令プリフェッチタイミングを検出すべき命令アドレスの少なくとも一部を設定するアドレス設定レジスタを備え、
    前記プログラム実行状態生成部は、前記現在のプログラムの実行状態として現在実行中の命令アドレスを保持するプログラムカウンタを備え、
    前記命令プリフェッチタイミング検出部は、前記プログラムカウンタの値の少なくとも一部と前記アドレス設定レジスタの値とを比較して両者が一致した場合に命令プリフェッチタイミングを検出するアドレス比較部を備える
    請求項1記載の命令フェッチ装置。
  3. プログラムの命令列を所定サイズ毎に区切った命令ペイロードと当該命令ペイロードの次の命令ペイロードのプリフェッチタイミングを指示するプリフェッチタイミング情報を含む命令ヘッダとからなる命令パケットを保持する命令パケット保持部をさらに具備し、
    前記検出状態設定部は、前記プリフェッチタイミング情報に基づいて前記アドレス設定レジスタへの設定を行う
    請求項2記載の命令フェッチ装置。
  4. 前記検出状態設定部は、
    命令プリフェッチタイミングを検出すべき命令アドレスの設定粒度を示すステップ値を保持する設定ステップアドレスレジスタと、
    前記プリフェッチタイミング情報に含まれるステップ数と前記ステップ値とを乗算することにより前記アドレス設定レジスタへの設定を行う乗算部と
    をさらに備える
    請求項3記載の命令フェッチ装置。
  5. プログラムの命令列を所定サイズ毎に区切った命令ペイロードと当該命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐が生じる可能性の高さを示す分岐予測情報を含む命令ヘッダとからなる命令パケットを保持する命令パケット保持部をさらに具備し、
    前記検出状態設定部は、前記分岐予測情報に基づいて前記アドレス設定レジスタへの設定を行う
    請求項2記載の命令フェッチ装置。
  6. 前記検出状態設定部は、前記命令プリフェッチタイミングを検出すべきプログラムの実行状態として所定の命令タイプの実行回数を設定する実行回数設定レジスタを備え、
    前記プログラム実行状態生成部は、前記現在のプログラムの実行状態として前記所定の命令タイプの現在の実行回数を生成する
    請求項1記載の命令フェッチ装置。
  7. 前記プログラム実行状態生成部は、
    前記所定の命令タイプを設定する命令タイプ設定レジスタと、
    現在実行中の命令の命令タイプと前記所定の命令タイプとを比較して両者が一致したことを検出する命令タイプ比較部と、
    前記命令タイプ比較部において現在実行中の命令の命令タイプと前記所定の命令タイプとが一致したことが検出される度にその命令タイプの実行回数を計数する実行回数カウンタと
    を備える
    請求項6記載の命令フェッチ装置。
  8. 命令プリフェッチタイミングを検出すべきプログラムの実行状態を設定する検出状態設定部と、
    現在のプログラムの実行状態を生成するプログラム実行状態生成部と、
    前記現在のプログラムの実行状態と前記設定されたプログラムの実行状態とを比較して両者が一致した場合に命令プリフェッチタイミングを検出する命令プリフェッチタイミング検出部と、
    前記命令プリフェッチタイミングが検出されると次の命令プリフェッチを実行する命令プリフェッチ部と、
    前記命令プリフェッチにより取得された命令を実行する命令実行部と
    を具備するプロセッサ。
JP2010075781A 2010-03-29 2010-03-29 命令フェッチ装置、および、プロセッサ Pending JP2011209904A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2010075781A JP2011209904A (ja) 2010-03-29 2010-03-29 命令フェッチ装置、および、プロセッサ
US13/028,741 US20110238953A1 (en) 2010-03-29 2011-02-16 Instruction fetch apparatus and processor
CN2011100733263A CN102207853A (zh) 2010-03-29 2011-03-22 指令获取设备和处理器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010075781A JP2011209904A (ja) 2010-03-29 2010-03-29 命令フェッチ装置、および、プロセッサ

Publications (1)

Publication Number Publication Date
JP2011209904A true JP2011209904A (ja) 2011-10-20

Family

ID=44657676

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010075781A Pending JP2011209904A (ja) 2010-03-29 2010-03-29 命令フェッチ装置、および、プロセッサ

Country Status (3)

Country Link
US (1) US20110238953A1 (ja)
JP (1) JP2011209904A (ja)
CN (1) CN102207853A (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9632786B2 (en) * 2011-12-20 2017-04-25 International Business Machines Corporation Instruction set architecture with extended register addressing using one or more primary opcode bits
US9262325B1 (en) * 2012-06-06 2016-02-16 Reniac, Inc. Heterogeneous memory system
US9286221B1 (en) * 2012-06-06 2016-03-15 Reniac, Inc. Heterogeneous memory system
US9043557B1 (en) * 2012-06-06 2015-05-26 Reniac, Inc. Heterogeneous memory system
US9483308B2 (en) * 2012-06-29 2016-11-01 Intel Corporation Performance of predicted actions
US9367471B2 (en) * 2012-09-10 2016-06-14 Apple Inc. Fetch width predictor
CN103729142B (zh) * 2012-10-10 2016-12-21 华为技术有限公司 内存数据的推送方法及装置
WO2014108754A1 (en) 2013-01-11 2014-07-17 Freescale Semiconductor, Inc. A method of establishing pre-fetch control information from an executable code and an associated nvm controller, a device, a processor system and computer program products
JP6016689B2 (ja) * 2013-03-28 2016-10-26 ルネサスエレクトロニクス株式会社 半導体装置
US9330011B2 (en) * 2013-09-20 2016-05-03 Via Alliance Semiconductor Co., Ltd. Microprocessor with integrated NOP slide detector
US10049035B1 (en) 2015-03-10 2018-08-14 Reniac, Inc. Stream memory management unit (SMMU)
CN106293624A (zh) * 2015-05-23 2017-01-04 上海芯豪微电子有限公司 一种数据地址产生系统和方法
GB2539411B (en) * 2015-06-15 2017-06-28 Bluwireless Tech Ltd Data processing
GB2539410B (en) * 2015-06-15 2017-12-06 Bluwireless Tech Ltd Data processing
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US11755484B2 (en) * 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
CN112162939B (zh) * 2020-10-29 2022-11-29 上海兆芯集成电路有限公司 进阶主机控制器及其控制方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6134643A (en) * 1997-11-26 2000-10-17 Intel Corporation Method and apparatus for cache line prediction and prefetching using a prefetch controller and buffer and access history
US6622236B1 (en) * 2000-02-17 2003-09-16 International Business Machines Corporation Microprocessor instruction fetch unit for processing instruction groups having multiple branch instructions
US6745313B2 (en) * 2002-01-09 2004-06-01 International Business Machines Corporation Absolute address bits kept in branch history table
CN101558390B (zh) * 2006-12-15 2014-06-18 密克罗奇普技术公司 用于微处理器的可配置高速缓冲存储器
US8645631B2 (en) * 2010-03-29 2014-02-04 Via Technologies, Inc. Combined L2 cache and L1D cache prefetcher

Also Published As

Publication number Publication date
CN102207853A (zh) 2011-10-05
US20110238953A1 (en) 2011-09-29

Similar Documents

Publication Publication Date Title
JP2011209904A (ja) 命令フェッチ装置、および、プロセッサ
US8904153B2 (en) Vector loads with multiple vector elements from a same cache line in a scattered load operation
US8601239B2 (en) Extended register addressing using prefix instruction
TWI514267B (zh) 用於多股亂序處理器中之指令排程的方法及裝置與系統
CN107077329B (zh) 用于实现和维持判定值的栈的方法和设备
KR101851439B1 (ko) 충돌 검출을 수행하고, 레지스터의 콘텐츠를 다른 레지스터의 데이터 구성요소 위치들로 브로드캐스트하기 위한 시스템들, 장치들 및 방법들
US20120060016A1 (en) Vector Loads from Scattered Memory Locations
JP4841861B2 (ja) 演算処理装置及びデータ転送処理の実行方法
TWI620125B (zh) 用以控制部分二進制轉譯系統中之轉換的指令及邏輯
US10664281B2 (en) Apparatuses and methods for dynamic asymmetric scaling of branch predictor tables
US10666288B2 (en) Systems, methods, and apparatuses for decompression using hardware and software
EP3343360A1 (en) Apparatus and methods of decomposing loops to improve performance and power efficiency
JP2011209905A (ja) 命令フェッチ装置、プロセッサ、および、プログラムカウンタ加算制御方法
KR101624786B1 (ko) 기입마스크 레지스터의 트레일링 최하위 마스킹 비트를 결정하는 시스템, 장치, 및 방법
EP3588311B1 (en) Prefetcher for delinquent irregular loads
US11249909B2 (en) Systems and methods for adaptive multipath probability (AMP) prefetcher
JP2019537163A (ja) オペレーションキャッシュ
US10069512B2 (en) Systems, methods, and apparatuses for decompression using hardware and software
US20140189322A1 (en) Systems, Apparatuses, and Methods for Masking Usage Counting
JP2011209903A (ja) 命令フェッチ装置、プロセッサ、プログラム変換装置、および、プログラム変換方法
US20020087830A1 (en) Circuit and method for instruction compression and dispersal in wide-issue processors
US20200210193A1 (en) Hardware profiler to track instruction sequence information including a blacklisting mechanism and a whitelisting mechanism
KR101539173B1 (ko) 단 정수 곱셈들의 수를 감소시키기 위한 시스템들, 장치들 및 방법들
EP3343361A2 (en) Apparatus and methods to support counted loop exits in a multi-strand loop processor
JP2011209902A (ja) 命令フェッチ装置、命令パケット生成装置、プロセッサ、および、命令フェッチ方法