JP2011209902A - Instruction fetch device, instruction packet generation device, processor, and instruction fetch method - Google Patents

Instruction fetch device, instruction packet generation device, processor, and instruction fetch method Download PDF

Info

Publication number
JP2011209902A
JP2011209902A JP2010075779A JP2010075779A JP2011209902A JP 2011209902 A JP2011209902 A JP 2011209902A JP 2010075779 A JP2010075779 A JP 2010075779A JP 2010075779 A JP2010075779 A JP 2010075779A JP 2011209902 A JP2011209902 A JP 2011209902A
Authority
JP
Japan
Prior art keywords
instruction
branch
payload
prefetch
packet
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
JP2010075779A
Other languages
Japanese (ja)
Inventor
Hiroshi Kobayashi
浩 小林
Hiroaki Sakaguchi
浩章 坂口
Yosuke Morita
陽介 森田
Hitoshi Kai
斉 甲斐
Katsuhiko Metsugi
勝彦 目次
Haruhisa Yamamoto
晴久 山本
Koichi Hasegawa
浩一 長谷川
Taichi Hirao
太一 平尾
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 JP2010075779A priority Critical patent/JP2011209902A/en
Publication of JP2011209902A publication Critical patent/JP2011209902A/en
Pending legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

PROBLEM TO BE SOLVED: To control instruction pre-fetch by using information relating to a branch instruction.SOLUTION: A program is managed by an instruction packet divided into command payloads with fixed length to each of which an instruction header is added. The instruction packet includes a branch prediction flag, and when this branch prediction flag indicates "1", the instruction pre-fetch of a next line from a next line pre-fetch part 150 to a system memory 140 is suppressed. The branch prediction flag is a field indicating that such possibility that the branch instruction may exist in the corresponding instruction payload, and that the branch destination may be other than the instruction payload or the next instruction payload is high. Also, the arrangement of the branch instruction can be changed by performing compression using an instruction dictionary table 192 in order to prevent the branch prediction flag from being set to "1" in the continuous instruction packets.

Description

本発明は、命令フェッチ装置に関し、特に分岐命令を含む命令列をプリフェッチするための命令フェッチ装置、命令パケット生成装置、プロセッサ、および、これらにおける処理方法ならびに当該方法をコンピュータに実行させるプログラムに関する。   The present invention relates to an instruction fetch device, and more particularly to an instruction fetch device for prefetching an instruction sequence including a branch instruction, an instruction packet generation device, a processor, a processing method therefor, and a program for causing a computer to execute the method.

パイプライン化されたCPU(Central Processing Unit:プロセッサ)の処理能力を最大限に引き出すためには、パイプライン内の命令を滞らないよう流れ続けさせることが理想的である。この理想状態を保つためには、次に処理されるべき命令が格納されているメモリから命令を予めCPUまたは命令キャッシュにフェッチしておく必要がある。しかし、プログラムに分岐命令が含まれる場合、分岐命令の次に実行すべき命令の番地が分岐命令実行時まで確定しない。そのため、命令フェッチが待たされてパイプラインストールが発生し、命令実行のスループットが低下する。そのため、分岐による不確定要素がありながらプリフェッチを行って、パイプラインストールの発生を抑えるために工夫をしているCPUが多くある。   In order to maximize the processing capability of a pipelined CPU (Central Processing Unit), it is ideal that instructions in the pipeline continue to flow without delay. In order to maintain this ideal state, it is necessary to fetch an instruction from a memory storing an instruction to be processed next to a CPU or an instruction cache in advance. However, when a branch instruction is included in the program, the address of the instruction to be executed next to the branch instruction is not fixed until the branch instruction is executed. For this reason, instruction install is awaited, pipeline installation occurs, and instruction execution throughput decreases. For this reason, many CPUs have been devised to perform prefetching and suppress the occurrence of pipeline installation while there are uncertain elements due to branching.

単純なハードウェアにより実現できるものとして典型的なプリフェッチがネクストラインプリフェッチである(例えば、特許文献1参照。)。これは、プログラムの順番通りに命令をプリフェッチしてくる手法である。プロセッサの命令フェッチでは、連続的に番地が増加する方向にメモリをアクセスするというのが基本的なメモリアクセスパターンである。このため、ハードウェアによるプリフェッチは、ある番地の命令をキャッシュに格納した後に、その次のキャッシュラインも使われるという見込みのもとに、自動的に次のキャッシュラインも格納するという方法である。   A typical prefetch that can be realized by simple hardware is next-implement fetch (see, for example, Patent Document 1). This is a method of prefetching instructions in the order of the program. In the instruction fetch of the processor, the basic memory access pattern is to access the memory in a direction in which the addresses continuously increase. For this reason, the prefetch by hardware is a method in which after the instruction at a certain address is stored in the cache, the next cache line is automatically stored with the expectation that the next cache line will also be used.

特許第4327237号公報(図1)Japanese Patent No. 4327237 (FIG. 1)

上述のネクストラインプリフェッチは、単純なハードウェア構成で実現できる反面、分岐しないことを前提としてプリフェッチをするため、多くの場合で無駄なプリフェッチ、すなわちプリフェッチミスが生じてしまう。このようなプリフェッチミスが起こるとプリフェッチしておいた命令を破棄して、再度正しい分岐先の命令をフェッチするため、CPUが待たされるという時間面のデメリットがある。それに加えて、余分なデータの読み書きを行うため、メモリアクセスが増加し、電力面でのロスも生じる。さらに、頻繁なプリフェッチや無駄なプリフェッチはデータパスのトラフィックを混雑させるという問題もある。   Although the above-described next-implementation fetch can be realized with a simple hardware configuration, prefetching is performed on the premise that no branching occurs, and in many cases, useless prefetching, that is, prefetch miss occurs. When such a prefetch miss occurs, the prefetched instruction is discarded, and the correct branch destination instruction is fetched again. Therefore, there is a time disadvantage that the CPU waits. In addition, since extra data is read and written, memory access increases and power loss occurs. Furthermore, frequent prefetching and useless prefetching also cause a problem of congesting data path traffic.

プリフェッチミスを減らす他の試みとして、分岐予測を用いるものがある。ネクストラインプリフェッチは常に分岐しないことを予測してネクストラインをプリフェッチしているが、過去の履歴から分岐方向を予測して、予測した方の番地をプリフェッチするという方法である。分岐予測は複雑であり、履歴テーブルなどの回路面積の大きなハードウェアが必要である。しかし、分岐予測によって達成される性能利益は、予測アルゴリズムの効率に依存し、その予測アルゴリズムの多くは、相対的に大容量の記憶装置と、複雑なハードウェアとで実装する必要がある。分岐予測も予測が外れた場合にはネクストラインプリフェッチと同様なペナルティが発生する。実際のプログラムの大半では、ループ処理や例外処理など各分岐先への分岐比率は偏りが大きいため、分岐予測によるメリットがデメリットを上回ることが多い。しかし、アプリケーションによってはどのような予測アルゴリズムを用いたとしても予測性能を上げることが困難なものがあり、特にコーデックではループ以外の予測が当たりにくい傾向がある。予測のヒット率は向上させなければならないが、そのための機構は複雑かつ大規模になる反面、必ずしも回路規模に見合う性能改善が得られるとは限らない。   Another attempt to reduce prefetch misses uses branch prediction. In the next-implement fetch, the next line is prefetched by predicting that the branch will not always be branched, but the branch direction is predicted from the past history, and the predicted address is prefetched. Branch prediction is complicated and requires hardware with a large circuit area such as a history table. However, the performance benefit achieved by branch prediction depends on the efficiency of the prediction algorithm, and many of the prediction algorithms need to be implemented with relatively large storage devices and complex hardware. If the branch prediction is also unpredictable, a penalty similar to the next implicit fetch occurs. In most actual programs, the branch ratio to each branch destination, such as loop processing and exception processing, is highly biased, and the benefits of branch prediction often outweigh the disadvantages. However, depending on the application, no matter what prediction algorithm is used, it is difficult to improve the prediction performance. In particular, the codec tends to be difficult to predict other than the loop. Although the prediction hit rate must be improved, the mechanism for this is complicated and large-scale, but the performance improvement corresponding to the circuit scale is not always obtained.

一方向のみのプリフェッチを行う上述の方法と違って、予測をせず、分岐先の両方向をプリフェッチしておいてプリフェッチミスを解消する手法も考えられている。この場合、分岐予測の手法に比べ、少ないハードウェア構成追加でパイプラインストールを解消することができる。しかし、プリフェッチのための格納データ量が単純に倍増するだけでなく、不要なデータを必ず読むことになり、データパス混雑度が高まることによる悪影響や、冗長回路追加による複雑化や、電力面のロスも無視できない。   Unlike the above-described method in which prefetching is performed in only one direction, a method is also considered in which prefetching is eliminated by prefetching both directions at the branch destination without performing prediction. In this case, compared to the branch prediction method, the pipeline installation can be eliminated with a small hardware configuration addition. However, not only does the amount of stored data for prefetching simply double, but it also means that unnecessary data is always read, and the adverse effects of increased data path congestion, the complexity of adding redundant circuits, Loss cannot be ignored.

以上のように、どのようにプリフェッチをするか、それぞれデメリット(CPU実装コスト、分岐予測処理のオーバーヘッド)とメリット(期待されるスループット向上)があり、コストと性能のトレードオフが存在する。   As described above, how prefetching is performed has its demerits (CPU mounting cost, branch prediction processing overhead) and merits (expected throughput improvement), and there is a trade-off between cost and performance.

本発明はこのような状況に鑑みてなされたものであり、分岐命令に関する情報を利用して、命令プリフェッチを制御することを目的とする。   The present invention has been made in view of such a situation, and an object of the present invention is to control instruction prefetch using information related to a branch instruction.

本発明は、上記課題を解決するためになされたものであり、その第1の側面は、プログラムの命令列を所定サイズ毎に区切った命令ペイロードと当該命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐が生じる可能性の高さを示す分岐予測情報を含む命令ヘッダとからなる命令パケットを保持する命令パケット保持部と、上記命令パケット保持部に保持された上記命令パケットを上記命令ペイロードと上記命令ヘッダとに分離する命令パケット分離部と、上記命令ヘッダに含まれる上記分岐予測情報に基づいて当該命令ヘッダに対応する命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐する可能性が高いと判定した場合には次の命令パケットのプリフェッチ抑止を指示する分岐予測情報判定部と、上記プリフェッチ抑止が指示されない限り上記次の命令パケットのプリフェッチを実行する命令プリフェッチ部とを具備する命令フェッチ装置またはそれらに対応する処理手順を具備する命令フェッチ方法である。これにより、分岐予測情報に基づいて次の命令パケットのプリフェッチを抑止するか否かを制御するという作用をもたらす。   The present invention has been made to solve the above problems, and a first aspect of the present invention is that the instruction payload includes an instruction payload obtained by dividing an instruction sequence of a program for each predetermined size and a branch instruction included in the instruction payload. Or an instruction packet holding unit for holding an instruction packet including an instruction header including branch prediction information indicating a high possibility of branching to an instruction not included in any of the next instruction payloads; and the instruction packet holding unit An instruction packet separator for separating the instruction packet held in the instruction payload and the instruction header, and a branch included in the instruction payload corresponding to the instruction header based on the branch prediction information included in the instruction header An instruction can branch to an instruction that is not included in either the instruction payload or the next instruction payload. A branch prediction information determination unit for instructing prefetch suppression of the next instruction packet when it is determined that the prefetch is high, and an instruction prefetch unit for executing prefetch of the next instruction packet unless the prefetch suppression is instructed. An instruction fetch method comprising an instruction fetch device or a processing procedure corresponding to the instruction fetch device. This brings about the effect of controlling whether or not to prefetch the next instruction packet based on the branch prediction information.

また、この第1の側面において、上記命令パケット分離部によって分離された上記命令ペイロードに含まれる命令辞書参照命令に基づいて当該命令辞書参照命令に対応する命令列を命令辞書テーブルから読み出して伸張する命令実行部をさらに具備してもよい。これにより、命令辞書テーブルを利用して圧縮された命令列を伸張させるという作用をもたらす。   Further, in this first aspect, based on an instruction dictionary reference instruction included in the instruction payload separated by the instruction packet separation unit, an instruction sequence corresponding to the instruction dictionary reference instruction is read from the instruction dictionary table and decompressed. An instruction execution unit may be further provided. As a result, the command sequence table is expanded using the command dictionary table.

また、この第1の側面において、上記命令ヘッダに含まれる命令ペイロード圧縮フラグに基づいて当該命令ヘッダに対応する命令ペイロードから命令列を伸張する命令伸張部をさらに具備してもよい。これにより、命令ペイロード圧縮フラグに基づいて圧縮された命令ペイロードを伸張させるという作用をもたらす。   In addition, in the first aspect, an instruction expansion unit that expands an instruction sequence from an instruction payload corresponding to the instruction header based on an instruction payload compression flag included in the instruction header may be further provided. As a result, the instruction payload compressed based on the instruction payload compression flag is expanded.

また、本発明の第2の側面は、プログラムの命令列を所定サイズ毎に区切った命令ペイロードと当該命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐が生じる可能性の高さを示す分岐予測情報を含む命令ヘッダとからなる命令パケットを保持する命令パケット保持部と、上記命令パケット保持部に保持された上記命令パケットを上記命令ペイロードと上記命令ヘッダとに分離する命令パケット分離部と、上記命令パケット分離部によって分離された上記命令ペイロードに含まれる命令列を実行する命令実行部と、上記命令ヘッダに含まれる上記分岐予測情報に基づいて当該命令ヘッダに対応する命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐する可能性が高いと判定した場合には次の命令パケットのプリフェッチ抑止を指示する分岐予測情報判定部と、上記プリフェッチ抑止が指示されない限り上記次の命令パケットのプリフェッチを実行して上記命令パケット分離部に次の命令パケットを供給する命令プリフェッチ部とを具備するプロセッサである。これにより、命令実行部を備えるプロセッサにおいて分岐予測情報に基づいて次の命令パケットのプリフェッチを抑止するか否かを制御するという作用をもたらす。   The second aspect of the present invention provides an instruction payload that is not included in either the instruction payload or the next instruction payload by a branch instruction included in the instruction payload obtained by dividing a program instruction sequence for each predetermined size and the instruction payload. An instruction packet holding unit that holds an instruction packet including an instruction header including branch prediction information indicating a high possibility of branching to the instruction packet, and the instruction packet held in the instruction packet holding unit Based on the instruction packet separation unit that separates into the instruction header, the instruction execution unit that executes the instruction sequence included in the instruction payload separated by the instruction packet separation unit, and the branch prediction information included in the instruction header Depending on the branch instruction included in the instruction payload corresponding to the instruction header, the instruction payload or If it is determined that there is a high possibility of branching to an instruction that is not included in any of the instruction payloads, a branch prediction information determination unit that instructs prefetch suppression of the next instruction packet; And an instruction prefetch unit that executes prefetching of the instruction packet and supplies the next instruction packet to the instruction packet separation unit. This brings about the effect of controlling whether or not to prefetch the next instruction packet based on the branch prediction information in the processor having the instruction execution unit.

また、本発明の第3の側面は、プログラムの命令列を所定サイズ毎に区切った命令ペイロードと命令ヘッダとからなる命令パケットを生成する命令パケット生成部と、上記命令ペイロードの各々について当該命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐が生じる可能性の高さを示す分岐予測情報を当該命令ペイロードに対応する命令ヘッダに設定する分岐予測情報設定部と、上記分岐予測情報を設定された命令ヘッダを含む命令パケットを保持する命令パケット保持部とを具備する命令パケット生成装置である。これにより、次の命令ペイロードをプリフェッチするか否かを判断するための分岐予測情報を命令ヘッダに含ませるという作用をもたらす。   According to a third aspect of the present invention, there is provided an instruction packet generation unit that generates an instruction packet including an instruction payload obtained by dividing a command sequence of a program into predetermined sizes and an instruction header, and the instruction payload for each instruction payload. Branch prediction information that sets branch prediction information indicating the likelihood of branching to an instruction not included in either the instruction payload or the next instruction payload by the branch instruction included in the instruction header corresponding to the instruction payload An instruction packet generation device comprising: an information setting unit; and an instruction packet holding unit that holds an instruction packet including an instruction header in which the branch prediction information is set. This brings about the effect that branch prediction information for determining whether or not to prefetch the next instruction payload is included in the instruction header.

また、この第3の側面において、連続する2つの命令パケットにおける上記分岐予測情報が当該命令パケットの命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐が生じる可能性が高い旨を示している場合には上記2つの命令パケットにそれぞれ含まれる2つの分岐命令が同じ命令ペイロードに収まるように上記2つの分岐命令間の命令を圧縮する命令圧縮部をさらに具備してもよい。これにより、次の命令ペイロードをプリフェッチしないと判断されるケースを減らして命令発行レートを向上させるという作用をもたらす。   Further, in the third aspect, the fact that the branch prediction information in two consecutive instruction packets is likely to branch to an instruction that is not included in either the instruction payload of the instruction packet or the next instruction payload. In the case shown, an instruction compression unit may be further included that compresses the instruction between the two branch instructions so that the two branch instructions included in the two instruction packets respectively fit in the same instruction payload. This brings about the effect of reducing the case where it is determined that the next instruction payload is not prefetched and improving the instruction issue rate.

本発明によれば、分岐命令に関する情報を利用することにより命令プリフェッチを制御することができるという優れた効果を奏し得る。   According to the present invention, it is possible to obtain an excellent effect that instruction prefetch can be controlled by using information related to a branch instruction.

本発明の第1の実施の形態におけるプロセッサのパイプライン構成例を示す図である。It is a figure which shows the example of a pipeline structure of the processor in the 1st Embodiment of this invention. 本発明の第1の実施の形態におけるプロセッサのブロック構成例を示す図である。It is a figure which shows the block structural example of the processor in the 1st Embodiment of this invention. 本発明の第1の実施の形態における命令パケット300の構造例を示す図である。It is a figure which shows the structural example of the instruction packet 300 in the 1st Embodiment of this invention. 本発明の第1の実施の形態における命令ヘッダ310のフィールド構成例を示す図である。It is a figure which shows the example of a field structure of the instruction header 310 in the 1st Embodiment of this invention. 本発明の第1の実施の形態で用いられる分岐予測フラグ311の設定例を示す図である。It is a figure which shows the example of a setting of the branch prediction flag 311 used in the 1st Embodiment of this invention. 本発明の第1の実施の形態で用いられる命令辞書テーブル参照型圧縮の適用例を示す図である。It is a figure which shows the example of application of the instruction dictionary table reference type compression used in the 1st Embodiment of this invention. 本発明の第1の実施の形態における命令辞書テーブル参照型圧縮による分岐予測フラグ311の変更例を示す図である。It is a figure which shows the example of a change of the branch prediction flag 311 by the instruction dictionary table reference compression in the 1st Embodiment of this invention. 本発明の第1の実施の形態における命令パケット生成のための機能構成例を示す図である。It is a figure which shows the function structural example for the instruction | indication packet generation in the 1st Embodiment of this invention. 本発明の第1の実施の形態における命令パケット生成のための処理手順例を示す図である。It is a figure which shows the example of a process sequence for the command packet production | generation in the 1st Embodiment of this invention. 本発明の第1の実施の形態における命令実行のための機能構成例を示す図である。It is a figure which shows the function structural example for the instruction execution in the 1st Embodiment of this invention. 本発明の第1の実施の形態における命令実行のための処理手順例を示す図である。It is a figure which shows the example of a process sequence for the instruction execution in the 1st Embodiment of this invention. 本発明の第1の実施の形態における命令ヘッダ310のフィールド構成の変形例を示す図である。It is a figure which shows the modification of the field structure of the instruction header 310 in the 1st Embodiment of this invention. 本発明の第2の実施の形態における分岐命令の配置と命令プリフェッチ開始位置との関係例を示す図である。It is a figure which shows the example of a relationship between arrangement | positioning of the branch instruction and instruction prefetch start position in the 2nd Embodiment of this invention. 本発明の第2の実施の形態におけるプリフェッチ開始アドレス設定レジスタを用いた構成例を示す図である。It is a figure which shows the structural example using the prefetch start address setting register in the 2nd Embodiment of this invention. 本発明の第2の実施の形態における命令ヘッダ310の命令プリフェッチタイミングフィールド312を用いた構成例を示す図である。It is a figure which shows the structural example using the instruction prefetch timing field 312 of the instruction header 310 in the 2nd Embodiment of this invention. 本発明の第2の実施の形態において所定回数の命令実行をプリフェッチタイミングに利用する構成例を示す図である。It is a figure which shows the structural example which utilizes the instruction execution of the predetermined number of times for the prefetch timing in the 2nd Embodiment of this invention. 本発明の第2の実施の形態において命令ヘッダ310に命令タイプおよび実行回数を設定した例を示す図である。It is a figure which shows the example which set the instruction type and the frequency | count of execution to the instruction header 310 in the 2nd Embodiment of this invention. 本発明の第2の実施の形態における命令実行のための機能構成例を示す図である。It is a figure which shows the function structural example for the instruction execution in the 2nd Embodiment of this invention. 本発明の第2の実施の形態における命令実行のための処理手順例を示す図である。It is a figure which shows the example of a process sequence for the instruction execution in the 2nd Embodiment of this invention. 本発明の第3の実施の形態におけるプログラムカウンタの加算制御処理の機能構成例を示す図である。It is a figure which shows the function structural example of the addition control process of the program counter in the 3rd Embodiment of this invention. 本発明の第3の実施の形態における加算制御レジスタ640の構成例を示す図である。It is a figure which shows the structural example of the addition control register 640 in the 3rd Embodiment of this invention. 本発明の第3の実施の形態における2方向分岐による命令の処理態様例を示す図である。It is a figure which shows the example of a processing mode of the instruction | indication by the two-way branch in the 3rd Embodiment of this invention. 本発明の第3の実施の形態における多方向分岐による命令の処理態様例を示す図である。It is a figure which shows the example of a processing mode of the instruction | indication by the multiway branch in the 3rd Embodiment of this invention. 本発明の第3の実施の形態における加算制御レジスタ640に値を設定するための命令セットの一例を示す図である。It is a figure which shows an example of the instruction set for setting a value to the addition control register 640 in the 3rd Embodiment of this invention. 本発明の第3の実施の形態において条件分岐命令により加算制御レジスタ640に値を設定した場合の例を示す図である。It is a figure which shows the example at the time of setting a value to the addition control register 640 by the conditional branch instruction in the 3rd Embodiment of this invention. 本発明の第3の実施の形態において制御レジスタ変更命令PCINCMODEにより加算制御レジスタ640に値を設定した場合の例を示す図である。It is a figure which shows the example at the time of setting a value to the addition control register 640 by the control register change instruction PCINCMODE in the 3rd Embodiment of this invention. 本発明の第3の実施の形態における命令実行のための処理手順例を示す図である。It is a figure which shows the example of a process sequence for the instruction execution in the 3rd Embodiment of this invention. 本発明の第4の実施の形態におけるプロセッサのパイプライン構成例を示す図である。It is a figure which shows the pipeline structural example of the processor in the 4th Embodiment of this invention. 本発明の第4の実施の形態におけるプロセッサのブロック構成例を示す図である。It is a figure which shows the block structural example of the processor in the 4th Embodiment of this invention. 本発明の第4の実施の形態における分岐命令とキャッシュラインの関係を示す図である。It is a figure which shows the relationship between the branch instruction and cache line in the 4th Embodiment of this invention. 本発明の第4の実施の形態における命令配置の変更の一態様を示す図である。It is a figure which shows one aspect | mode of the change of the instruction arrangement in the 4th Embodiment of this invention. 本発明の第4の実施の形態における命令配置のための機能構成例を示す図である。It is a figure which shows the function structural example for the instruction | indication arrangement | positioning in the 4th Embodiment of this invention. 本発明の第4の実施の形態における命令配置のための処理手順例を示す図である。It is a figure which shows the example of a process sequence for the instruction arrangement | positioning in the 4th Embodiment of this invention. 本発明の第4の実施の形態におけるプリフェッチアドレスレジスタの設定例を示す図である。It is a figure which shows the example of a setting of the prefetch address register in the 4th Embodiment of this invention. 本発明の第4の実施の形態における命令実行のための機能構成例を示す図である。It is a figure which shows the function structural example for the instruction execution in the 4th Embodiment of this invention. 本発明の第4の実施の形態における命令実行のための処理手順例を示す図である。It is a figure which shows the example of a process sequence for the instruction execution in the 4th Embodiment of this invention.

以下、本発明を実施するための形態(以下、実施の形態と称する)について説明する。説明は以下の順序により行う。
1.第1の実施の形態(分岐予測情報を利用した命令プリフェッチの抑止制御)
2.第2の実施の形態(命令プリフェッチのタイミング制御)
3.第3の実施の形態(命令を混合配置することによる命令プリフェッチのペナルティ平均化)
4.第4の実施の形態(分岐先キャッシュラインの配置を固定化することによるキャッシュライン衝突回避)
5.各実施の形態の組合せ
Hereinafter, modes for carrying out the present invention (hereinafter referred to as embodiments) will be described. The description will be made in the following order.
1. First embodiment (instruction prefetch suppression control using branch prediction information)
2. Second Embodiment (Instruction Prefetch Timing Control)
3. Third embodiment (instruction prefetch penalty averaging by mixing instructions)
4). Fourth Embodiment (Avoiding cache line collision by fixing the arrangement of branch destination cache lines)
5. Combination of each embodiment

<1.第1の実施の形態>
[プロセッサの構成]
図1は、本発明の第1の実施の形態におけるプロセッサのパイプライン構成例を示す図である。この例では、命令フェッチステージ(IF)11と、命令デコードステージ(ID)21と、レジスタフェッチステージ(RF)31と、実行ステージ(EX)41と、メモリアクセスステージ(MEM)51の5段階のパイプラインを想定している。各パイプラインは、それぞれラッチ19、29、39および49によって区切られており、クロックに同期してパイプライン処理が行われる。
<1. First Embodiment>
[Processor configuration]
FIG. 1 is a diagram illustrating a pipeline configuration example of a processor according to the first embodiment of the present invention. In this example, an instruction fetch stage (IF) 11, an instruction decode stage (ID) 21, a register fetch stage (RF) 31, an execution stage (EX) 41, and a memory access stage (MEM) 51 are included. A pipeline is assumed. Each pipeline is delimited by latches 19, 29, 39 and 49, and pipeline processing is performed in synchronization with the clock.

命令フェッチステージ(IF:Instruction Fetch)11では、命令フェッチ処理が行われる。この命令フェッチステージ11では、プログラムカウンタ(PC)18が加算部12により逐次加算され、このプログラムカウンタ18に示される命令が次の命令デコードステージ21に供給されていく。また、この命令フェッチステージ11では、後述する命令キャッシュを含み、この命令キャッシュへの命令プリフェッチを行う。ネクストラインプリフェッチ部13は、現在実行対象となっている命令を含むキャッシュラインの次のキャッシュラインであるネクストラインのプリフェッチを行うためのものである。   In an instruction fetch stage (IF) 11, instruction fetch processing is performed. In the instruction fetch stage 11, the program counter (PC) 18 is sequentially added by the adder 12, and the instruction indicated by the program counter 18 is supplied to the next instruction decode stage 21. The instruction fetch stage 11 includes an instruction cache described later, and performs instruction prefetching to the instruction cache. The next-implement fetch unit 13 is for prefetching the next line, which is the cache line next to the cache line including the instruction currently being executed.

命令デコードステージ(ID:Instruction Decode)21では、命令フェッチステージ11から供給された命令のデコード処理が行われる。この命令デコードステージ21においてデコードされた結果は、レジスタフェッチステージ(RF)31に供給される。また、分岐命令の場合、その分岐先アドレスがプログラムカウンタ(PC)18に供給される。   In the instruction decode stage (ID: Instruction Decode) 21, the instruction supplied from the instruction fetch stage 11 is decoded. The result decoded in the instruction decode stage 21 is supplied to a register fetch stage (RF) 31. In the case of a branch instruction, the branch destination address is supplied to a program counter (PC) 18.

レジスタフェッチステージ(RF:Register Fetch)31では、命令実行に必要なオペランドのフェッチ処理が行われる。パイプライン型のプロセッサではオペランドアクセス対象はレジスタファイルに限定されることが多い。このレジスタフェッチステージ31において取得されたオペランドデータは、実行ステージ(EX)41に供給される。   In a register fetch stage (RF: Register Fetch) 31, an operand fetch process necessary for instruction execution is performed. In a pipeline type processor, the operand access target is often limited to a register file. Operand data acquired in the register fetch stage 31 is supplied to an execution stage (EX) 41.

実行ステージ(EX:EXecute)41では、オペランドデータを用いて命令実行が行われる。例えば、算術論理演算や分岐判定処理などが行われる。この実行ステージ(EX)41において得られた実行結果データはレジスタファイルに格納される。また、ストア命令の場合には、メモリアクセスステージ(MEM)51においてメモリへの書込みが行われる。   In the execution stage (EX: EXecute) 41, instruction execution is performed using operand data. For example, arithmetic logic operations and branch determination processing are performed. The execution result data obtained in the execution stage (EX) 41 is stored in a register file. In the case of a store instruction, the memory access stage (MEM) 51 writes to the memory.

メモリアクセスステージ(MEM:Memory)51では、メモリへのアクセスが行われる。ロード命令の場合にはメモリからのリードアクセスが行われ、ストア命令の場合にはメモリへのライトアクセスが行われる。   In a memory access stage (MEM: Memory) 51, access to the memory is performed. In the case of a load instruction, read access from the memory is performed, and in the case of a store instruction, write access to the memory is performed.

図2は、本発明の第1の実施の形態におけるプロセッサのブロック構成例を示す図である。このプロセッサは、プロセッサコア110と、命令キャッシュ120と、データキャッシュ130と、ネクストラインプリフェッチ部150と、パケットデマルチプレクサ160とを備えている。また、このプロセッサは、さらに、プリフェッチキュー170と、命令キュー180と、命令辞書インデックス191と、命令辞書テーブル192とを備えている。また、このプロセッサには、システムメモリ140が接続される。   FIG. 2 is a diagram illustrating a block configuration example of the processor according to the first embodiment of the present invention. This processor includes a processor core 110, an instruction cache 120, a data cache 130, a next implementation fetch unit 150, and a packet demultiplexer 160. The processor further includes a prefetch queue 170, an instruction queue 180, an instruction dictionary index 191, and an instruction dictionary table 192. A system memory 140 is connected to this processor.

プロセッサコア110は、命令フェッチ機能を除くプロセッサとしての主機構を備えるものであり、プログラムカウンタ111と、命令レジスタ112と、命令デコーダ113と、実行部114と、レジスタファイル115とを備えている。プログラムカウンタ111は、命令実行対象となる命令のアドレスを逐次計数するカウンタである。命令レジスタ112は、プログラムカウンタ111によって示される命令実行対象となる命令を保持するレジスタである。命令デコーダ113は、命令レジスタ112に保持された命令をデコードするデコーダである。実行部114は、命令デコーダ113によってデコードされた命令を実行するものである。レジスタファイル115は、実行部114における命令実行に必要なオペランド等を保持する記憶領域である。   The processor core 110 has a main mechanism as a processor excluding the instruction fetch function, and includes a program counter 111, an instruction register 112, an instruction decoder 113, an execution unit 114, and a register file 115. The program counter 111 is a counter that sequentially counts the addresses of instructions to be executed. The instruction register 112 is a register that holds an instruction to be executed by the instruction indicated by the program counter 111. The instruction decoder 113 is a decoder that decodes an instruction held in the instruction register 112. The execution unit 114 executes the instruction decoded by the instruction decoder 113. The register file 115 is a storage area that holds operands and the like necessary for instruction execution in the execution unit 114.

命令キャッシュ120は、システムメモリ140に記憶されている命令のコピーを保持するキャッシュメモリである。プロセッサコア110から命令をアクセスする際、システムメモリ140よりも命令キャッシュ120の方が高速にアクセス可能であるため、可能な限り前もって命令キャッシュ120に命令を保持しておくことが望ましい。必要な命令が命令キャッシュ120に保持されている場合にはヒット、保持されていない場合にはミスヒットと呼ばれる。   The instruction cache 120 is a cache memory that holds a copy of instructions stored in the system memory 140. When accessing an instruction from the processor core 110, the instruction cache 120 can be accessed at a higher speed than the system memory 140. Therefore, it is desirable to hold the instruction in the instruction cache 120 as much as possible. When a necessary instruction is held in the instruction cache 120, it is called a hit, and when it is not held, it is called a miss.

データキャッシュ130は、システムメモリ140に記憶されているデータのコピーを保持するキャッシュメモリである。プロセッサコア110からデータをアクセスする際、システムメモリ140よりもデータキャッシュ130の方が高速にアクセス可能であるため、可能な限り前もってデータキャッシュ130に命令を保持しておくことが望ましい。命令キャッシュ120の場合と同様に、必要なデータがデータキャッシュ130に保持されている場合にはヒット、保持されていない場合にはミスヒットと呼ばれる。命令キャッシュ120の場合と異なり、ライトアクセスの際にもデータキャッシュ130は用いられる。   The data cache 130 is a cache memory that holds a copy of data stored in the system memory 140. When accessing data from the processor core 110, the data cache 130 can be accessed at a higher speed than the system memory 140. Therefore, it is desirable to store instructions in the data cache 130 in advance as much as possible. As in the case of the instruction cache 120, when the necessary data is held in the data cache 130, it is called a hit, and when it is not held, it is called a miss. Unlike the instruction cache 120, the data cache 130 is also used for write access.

ネクストラインプリフェッチ部150は、予め必要となることが予想される命令として、次のキャッシュラインであるネクストラインをシステムメモリ140から命令キャッシュ120にプリフェッチするためのものである。このネクストラインプリフェッチ部150は、パイプライン構成におけるネクストラインプリフェッチ部13に相当するものであり、命令フェッチステージ(IF)11に属する。このネクストラインプリフェッチ部150は、プログラムカウンタ111の状態を監視して、適切なタイミングにより命令キャッシュ120のキャッシュラインのプリフェッチリクエストをシステムメモリ140に発行する。   The next implement fetch unit 150 is for prefetching the next cache line, which is the next cache line, from the system memory 140 to the instruction cache 120 as an instruction expected to be required in advance. The next implement fetch unit 150 corresponds to the next implement fetch unit 13 in the pipeline configuration, and belongs to the instruction fetch stage (IF) 11. The next-implement fetch unit 150 monitors the state of the program counter 111 and issues a prefetch request for the cache line of the instruction cache 120 to the system memory 140 at an appropriate timing.

パケットデマルチプレクサ160は、システムメモリ140から読み出された命令パケットを命令ヘッダと命令ペイロードとに分離するものである。この命令パケットの構造については後述するが、命令のキャッシュラインは命令ペイロードに含まれている。   The packet demultiplexer 160 separates the instruction packet read from the system memory 140 into an instruction header and an instruction payload. Although the structure of the instruction packet will be described later, the instruction cache line is included in the instruction payload.

プリフェッチキュー170は、命令ペイロードに含まれる命令のキャッシュラインを保持する待ち行列である。このプリフェッチキュー170に保持されたキャッシュラインは、先頭から順に命令キャッシュ120に保持される。   The prefetch queue 170 is a queue that holds a cache line of instructions included in the instruction payload. The cache lines held in the prefetch queue 170 are held in the instruction cache 120 in order from the top.

命令キュー180は、プログラムカウンタ111に従って命令キャッシュ120から読み出された命令のキャッシュラインを保持する待ち行列である。   The instruction queue 180 is a queue that holds a cache line of instructions read from the instruction cache 120 according to the program counter 111.

命令辞書インデックス191および命令辞書テーブル192は、命令辞書テーブル参照型の圧縮命令を実装するためのものである。出現頻度の高い一連の命令マクロが最初に出現したときにその命令マクロを命令辞書登録命令によって登録しておいて、次回出現したときに命令辞書参照命令に対して一連の命令マクロを1命令で置き換えていく。命令辞書テーブル192は一連の命令マクロを保持するものであり、命令辞書インデックス191は、この命令辞書テーブル192をアクセスするためのインデックスとしての機能を有するものである。この命令辞書テーブル参照型の圧縮命令の利用法については後述する。   The instruction dictionary index 191 and the instruction dictionary table 192 are for implementing an instruction dictionary table reference type compression instruction. When a series of instruction macros having a high appearance frequency first appears, the instruction macro is registered by an instruction dictionary registration instruction, and when the next occurrence occurs, a series of instruction macros is assigned to the instruction dictionary reference instruction by one instruction. I will replace it. The instruction dictionary table 192 holds a series of instruction macros, and the instruction dictionary index 191 has a function as an index for accessing the instruction dictionary table 192. The method of using this instruction dictionary table reference type compression instruction will be described later.

システムメモリ140は、命令実行対象となる命令およびその命令の実行に必要となるデータを記憶するメモリである。プロセッサコア110からシステムメモリ140に対してリードまたはライトのアクセスがリクエストされるが、命令キャッシュ120またはデータキャッシュ130にヒットしている限りは実際にはリクエストは発生しない。なお、このシステムメモリ140は、特許請求の範囲に記載の命令パケット保持部の一例である。   The system memory 140 is a memory that stores an instruction to be executed, and data necessary for executing the instruction. A read or write access is requested from the processor core 110 to the system memory 140, but no request is actually generated as long as the instruction cache 120 or the data cache 130 is hit. The system memory 140 is an example of an instruction packet holding unit described in the claims.

このブロック構成例において、プログラムカウンタ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に属する。   In this block configuration example, a program counter 111, an instruction cache 120, a next-implement fetch unit 150, a packet demultiplexer 160, a prefetch queue 170, and an instruction queue 180 belong to the instruction fetch stage (IF) 11 in FIG. The instruction register 112, the instruction dictionary index 191 and the instruction dictionary table 192 can also be considered as a part of the instruction fetch stage (IF) 11. Similarly, the instruction decoder belongs to the instruction decode stage (ID) 21. The register file 115 belongs to the register fetch stage (RF) 31. The execution unit 114 belongs to the execution stage (EX) 41. The data cache 130 and the system memory 140 belong to the memory access stage (MEM) 51.

[命令パケットの構造]
図3は、本発明の第1の実施の形態における命令パケット300の構造例を示す図である。この命令パケット300は、命令ヘッダ310と、命令ペイロード320とから構成される。命令ペイロード320は、1つ以上の命令キャッシュラインを格納する領域である。この例では、128バイトの命令キャッシュラインをn個(nは1以上の整数)ずつ格納するものとする。命令ヘッダ310は、命令ペイロード320に付与されるヘッダであり、その命令ペイロード320に関する情報を保持する。
[Instruction packet structure]
FIG. 3 is a diagram illustrating a structure example of the instruction packet 300 according to the first embodiment of this invention. The instruction packet 300 includes an instruction header 310 and an instruction payload 320. The instruction payload 320 is an area for storing one or more instruction cache lines. In this example, n 128-byte instruction cache lines are stored (n is an integer of 1 or more). The instruction header 310 is a header given to the instruction payload 320 and holds information regarding the instruction payload 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は、後述のように他の用途に用いることができる。   FIG. 4 is a diagram showing a field configuration example of the instruction header 310 according to the first embodiment of the present invention. The first configuration example of the instruction header 310 includes fields of a branch prediction flag 311, an instruction prefetch timing 312, an instruction payload compression flag 313, an instruction payload length 314, and a prefetch setting 315. In this example, 32 bits are assumed as the instruction header 310, and the branch prediction flag 311 is assigned to the 0th bit from the LSB side, the instruction prefetch timing 312 is assigned to the 1st and 2nd bits, and the instruction payload compression flag 313 is assigned to the 3rd bit. Yes. Also, an instruction payload length 314 is assigned to the fourth to seventh bits, and a prefetch setting 315 is assigned to the eighth to eleventh bits, respectively. The remaining 20-bit unused area 316 of the 12th to 31st bits can be used for other purposes as will be described later.

分岐予測フラグ311は、命令ペイロード320内に分岐命令が存在し、かつ、その分岐先として命令ペイロード320内または次の命令ペイロード以外に分岐する可能性が高いことを示すフィールドである。すなわち、ネクストラインプリフェッチをそのまま実行してしまうと無駄になる可能性が高い場合に分岐予測フラグ311は例えば「1」を示し、それ以外の場合には例えば「0」を示す。なお、この分岐予測フラグ311は、特許請求の範囲に記載の分岐予測情報の一例である。   The branch prediction flag 311 is a field that indicates that a branch instruction exists in the instruction payload 320 and that there is a high possibility of branching in the instruction payload 320 or other than the next instruction payload as a branch destination. In other words, the branch prediction flag 311 indicates, for example, “1” when there is a high possibility that the next implicit fetch is executed as it is, and indicates “0” in other cases. The branch prediction flag 311 is an example of branch prediction information described in the claims.

命令プリフェッチタイミング312は、命令プリフェッチを実行するタイミングを示すフィールドである。この命令プリフェッチタイミング312については第2の実施の形態において説明する。なお、命令プリフェッチタイミング312は、特許請求の範囲に記載のプリフェッチタイミング情報の一例である。   The instruction prefetch timing 312 is a field indicating the timing for executing the instruction prefetch. This instruction prefetch timing 312 will be described in the second embodiment. The instruction prefetch timing 312 is an example of prefetch timing information described in the claims.

命令ペイロード圧縮フラグ313は、命令ペイロード320についてロスレス圧縮を施しているか否かを示すフィールドである。ロスレス圧縮とはデータの欠落が発生しない可逆圧縮であり、命令ペイロード320のビット列全体を圧縮するものである。このロスレス圧縮の方式としては、ハフマン符号、算術符号、LZ符号などが広く知られている。命令ペイロード320についてロスレス圧縮を施している場合には、それを伸張しなければ命令デコードを実行することはできない。したがって、命令ペイロード圧縮フラグ313が「1」を示す場合には、いったん伸張処理を行った上で命令デコードが行われる。1つの命令キャッシュラインをロスレス圧縮してもフェッチされるデータ量は少なくならないため効果はなく、ある程度長いビット列でないと符号化効率は上がらない。また、分岐命令を含む場合には基本ブロック毎に命令パケットを区切って分ける必要がある。   The instruction payload compression flag 313 is a field indicating whether or not the instruction payload 320 is subjected to lossless compression. Lossless compression is lossless compression that does not cause data loss, and compresses the entire bit string of the instruction payload 320. As the lossless compression method, Huffman code, arithmetic code, LZ code, and the like are widely known. When lossless compression is applied to the instruction payload 320, instruction decoding cannot be executed unless the instruction payload 320 is decompressed. Therefore, when the instruction payload compression flag 313 indicates “1”, the instruction decoding is performed after the decompression process is performed once. Even if lossless compression is performed on one instruction cache line, the amount of data fetched is not reduced, so there is no effect, and the coding efficiency cannot be increased unless the bit string is somewhat long. If a branch instruction is included, it is necessary to divide and separate the instruction packet for each basic block.

命令ペイロード長314は、命令ペイロード320のサイズを示すフィールドである。例えば、命令キャッシュライン数を単位として、命令ペイロード320のサイズを示すことができる。上述の例では、命令ペイロード320に128バイトの命令キャッシュラインをn個ずつ格納することを想定しており、この場合には値nが命令ペイロード長314に設定される。   The instruction payload length 314 is a field indicating the size of the instruction payload 320. For example, the size of the instruction payload 320 can be indicated with the number of instruction cache lines as a unit. In the above example, it is assumed that n 128-byte instruction cache lines are stored in the instruction payload 320. In this case, the value n is set to the instruction payload length 314.

プリフェッチ設定315は、プリフェッチ対象となるアドレスを予め設定するためのフィールドである。このプリフェッチ設定315については第4の実施の形態において説明する。   The prefetch setting 315 is a field for presetting an address to be prefetched. This prefetch setting 315 will be described in the fourth embodiment.

[分岐予測フラグ]
図5は、本発明の第1の実施の形態で用いられる分岐予測フラグ311の設定例を示す図である。この例では、命令パケット#1の命令ペイロード内に分岐命令$1が含まれ、命令パケット#2および#3には分岐命令が含まれないことを想定している。そして、分岐命令$1の分岐先は命令パケット#3の命令ペイロード内の命令アドレスとなっており、その分岐確率は高いものと予測されている。したがって、この場合には、命令パケット#1の命令ヘッダの分岐予測フラグ311は「1」に設定される。一方、命令パケット#2および#3には分岐命令が含まれないため、命令パケット#2および#3の命令ヘッダの分岐予測フラグ311は「0」に設定される。この分岐予測フラグ311は、後述するように、プロファイル等に基づいてコンパイル時に静的に設定されることを想定している。ここでは、命令パケット#1から見ると、命令パケット#2に含まれるのがネクストラインであり、命令パケット#3に含まれるのが分岐先ラインである。
[Branch prediction flag]
FIG. 5 is a diagram illustrating a setting example of the branch prediction flag 311 used in the first embodiment of the present invention. In this example, it is assumed that the branch instruction $ 1 is included in the instruction payload of the instruction packet # 1, and the branch instructions are not included in the instruction packets # 2 and # 3. The branch destination of the branch instruction $ 1 is the instruction address in the instruction payload of the instruction packet # 3, and the branch probability is predicted to be high. Therefore, in this case, the branch prediction flag 311 in the instruction header of the instruction packet # 1 is set to “1”. On the other hand, since branch instructions are not included in the instruction packets # 2 and # 3, the branch prediction flag 311 in the instruction headers of the instruction packets # 2 and # 3 is set to “0”. As will be described later, this branch prediction flag 311 is assumed to be set statically at the time of compilation based on a profile or the like. Here, when viewed from the instruction packet # 1, the next line is included in the instruction packet # 2, and the branch destination line is included in the instruction packet # 3.

このようにして設定された分岐予測フラグ311は、命令プリフェッチの際に参照され、「1」に設定されている場合にはネクストキャッシュラインのプリフェッチを中止する。これにより、無駄になることが予想される命令プリフェッチを回避することができる。   The branch prediction flag 311 set in this manner is referred to at the time of instruction prefetching, and when it is set to “1”, prefetching of the next cache line is stopped. Thereby, it is possible to avoid an instruction prefetch that is expected to be wasted.

一方、分岐予測フラグ311が「1」に設定されるケースが連続すると、命令プリフェッチが行われず、命令プリフェッチ機構を有効利用できなくなるおそれが生じ得る。そこで、分岐予測フラグ311が「1」に設定されるケースが連続しないように、分岐命令の間の命令を命令辞書テーブル参照型圧縮処理により圧縮することを考える。なお、この命令辞書テーブル参照型圧縮処理は、命令ペイロード圧縮フラグ313に関するロスレス圧縮とは別個のものである。   On the other hand, if the case where the branch prediction flag 311 is set to “1” continues, instruction prefetch may not be performed and the instruction prefetch mechanism may not be effectively used. Therefore, it is considered that instructions between branch instructions are compressed by an instruction dictionary table reference type compression process so that cases where the branch prediction flag 311 is set to “1” do not continue. The instruction dictionary table reference compression process is separate from the lossless compression related to the instruction payload compression flag 313.

[命令辞書テーブル参照型圧縮]
図6は、本発明の第1の実施の形態で用いられる命令辞書テーブル参照型圧縮の適用例を示す図である。同図左側の非圧縮コードでは、圧縮されていない命令列331乃至335が配置されている。ここで、命令列331、332および335は同一のコードであることを想定する。同様に、命令列333および334は同一のコードであることを想定する。
[Instruction dictionary table reference compression]
FIG. 6 is a diagram illustrating an application example of the instruction dictionary table reference compression used in the first embodiment of the present invention. In the uncompressed code on the left side of the figure, uncompressed instruction sequences 331 to 335 are arranged. Here, it is assumed that the instruction sequences 331, 332, and 335 are the same code. Similarly, it is assumed that the instruction sequences 333 and 334 are the same code.

同図中央の圧縮コードでは、命令列331の直後に命令辞書登録命令%1が配置される。これにより、命令辞書テーブル192の領域%1(351)には命令列331の内容が登録される。その後、命令辞書参照命令%1(342)が実行されると、命令辞書テーブル192の領域%1(351)が参照され、命令列332に相当する内容が伸張されて命令キュー180に供給される。   In the compressed code in the center of the figure, the instruction dictionary registration instruction% 1 is arranged immediately after the instruction string 331. As a result, the contents of the instruction string 331 are registered in the area% 1 (351) of the instruction dictionary table 192. Thereafter, when the instruction dictionary reference instruction% 1 (342) is executed, the area% 1 (351) of the instruction dictionary table 192 is referred to, and the content corresponding to the instruction string 332 is expanded and supplied to the instruction queue 180. .

また、圧縮コードでは、命令列333の直後に命令辞書登録命令%2が配置される。これにより、命令辞書テーブル192の領域%2(352)には命令列333の内容が登録される。その後、命令辞書参照命令%2(344)が実行されると、命令辞書テーブル192の領域%2(352)が参照され、命令列334に相当する内容が伸張されて命令キュー180に供給される。   In the compressed code, the instruction dictionary registration instruction% 2 is arranged immediately after the instruction sequence 333. As a result, the contents of the instruction sequence 333 are registered in the area% 2 (352) of the instruction dictionary table 192. Thereafter, when the instruction dictionary reference instruction% 2 (344) is executed, the area% 2 (352) of the instruction dictionary table 192 is referred to, and the content corresponding to the instruction string 334 is expanded and supplied to the instruction queue 180. .

また、さらに命令辞書参照命令%1(345)が実行されると、命令辞書テーブル192の領域%1(351)が参照され、命令列335に相当する内容が伸張されて命令キュー180に供給される。   When the instruction dictionary reference instruction% 1 (345) is further executed, the area% 1 (351) of the instruction dictionary table 192 is referred to, and the content corresponding to the instruction string 335 is expanded and supplied to the instruction queue 180. The

このように、命令辞書テーブル192を使用することにより、命令列の圧縮処理が実現される。そこで、これを利用して、以下のように分岐予測フラグ311の設定を変更することができる。   In this way, by using the instruction dictionary table 192, instruction string compression processing is realized. Therefore, by using this, the setting of the branch prediction flag 311 can be changed as follows.

図7は、本発明の第1の実施の形態における命令辞書テーブル参照型圧縮による分岐予測フラグ311の変更例を示す図である。同図左側のように命令パケット#1および#2において分岐予測フラグ311が「1」に設定されている場合、連続して命令プリフェッチが行われなくなってしまう。そこで、上述の命令辞書テーブル192を用いた命令圧縮を行うことにより、分岐予測フラグ311が連続して「1」に設定されることを解消することを試みる。   FIG. 7 is a diagram illustrating a modification example of the branch prediction flag 311 by the instruction dictionary table reference compression according to the first embodiment of this invention. If the branch prediction flag 311 is set to “1” in the instruction packets # 1 and # 2 as shown on the left side of the figure, the instruction prefetch is not continuously performed. Therefore, an attempt is made to eliminate the fact that the branch prediction flag 311 is continuously set to “1” by performing instruction compression using the instruction dictionary table 192 described above.

すなわち、同図右側のように、命令辞書テーブル192を用いて分岐命令$1と$2との間の命令を圧縮することにより、命令パケット#2に含まれていた分岐命令$2を命令パケット#1'に移動させる。これにより、命令パケット#2に分岐命令$2が存在しなくなることによって、命令パケット#2'の分岐予測フラグ311を「0」に設定することができるようになる。   That is, as shown on the right side of the figure, the instruction between the branch instructions $ 1 and $ 2 is compressed using the instruction dictionary table 192, so that the branch instruction $ 2 included in the instruction packet # 2 is changed to the instruction packet. Move to # 1 '. As a result, the branch instruction $ 2 does not exist in the instruction packet # 2, so that the branch prediction flag 311 of the instruction packet # 2 ′ can be set to “0”.

なお、一般に、命令辞書テーブル参照型の圧縮命令は、通常の命令よりデコードに多くのサイクル数を必要とすることがあるため、全ての命令に適用してしまうと却って処理性能を劣化させるおそれがある。しかし、出現頻度の高い命令マクロが存在するケースにおいては、高い圧縮効率が得られ、効果を発揮する。   In general, an instruction dictionary table reference type compression instruction may require a larger number of cycles for decoding than a normal instruction. Therefore, if it is applied to all instructions, the processing performance may be deteriorated. is there. However, in the case where an instruction macro having a high appearance frequency exists, high compression efficiency is obtained and the effect is exhibited.

[命令パケット生成処理]
図8は、本発明の第1の実施の形態における命令パケット生成のための機能構成例を示す図である。この例は、プログラム保持部411と、分岐プロファイル保持部412と、命令パケット生成部420と、分岐予測フラグ設定部430と、命令圧縮部440と、命令パケット保持部413とを備えている。この命令パケットの生成は、コンパイル時またはリンク時に行うことが適している。リロケータブルなOSにおいてダイナミックリンクが行われる場合には実行時でも可能である。
[Instruction packet generation processing]
FIG. 8 is a diagram illustrating a functional configuration example for generating an instruction packet according to the first embodiment of the present invention. This example includes a program holding unit 411, a branch profile holding unit 412, an instruction packet generation unit 420, a branch prediction flag setting unit 430, an instruction compression unit 440, and an instruction packet holding unit 413. It is suitable to generate the instruction packet at the time of compiling or linking. When dynamic linking is performed in a relocatable OS, it is possible even at the time of execution.

プログラム保持部411は、命令パケットを生成する対象となるプログラムを保持するものである。分岐プロファイル保持部412は、プログラム保持部411に保持されたプログラムに含まれる分岐命令の分岐プロファイルを保持するものである。この分岐プロファイルは、予めプログラムを解析し、または、実行することにより得られるものである。無条件分岐命令であれば分岐するか否かはプログラムを解析することにより判断できることが多い。また、条件分岐命令であっても、プログラムを実行させることにより統計的に分岐する確率を判断することができる。   The program holding unit 411 holds a program that is a target for generating an instruction packet. The branch profile holding unit 412 holds a branch profile of a branch instruction included in the program held in the program holding unit 411. This branch profile is obtained by analyzing or executing a program in advance. In the case of an unconditional branch instruction, it is often possible to determine whether or not to branch by analyzing a program. Even for a conditional branch instruction, the probability of statistical branching can be determined by executing a program.

命令パケット生成部420は、プログラム保持部411に保持されたプログラムを固定サイズにより区切って命令ペイロード320を生成し、それぞれに命令ヘッダ310を付することにより命令パケット300を生成する。命令ペイロード320のサイズとしては、上述のように128バイトの命令キャッシュラインをn個ずつ格納することを想定することができる。   The instruction packet generation unit 420 generates an instruction payload 320 by dividing the program held in the program holding unit 411 by a fixed size, and generates an instruction packet 300 by attaching an instruction header 310 to each. As the size of the instruction payload 320, it can be assumed that n 128-byte instruction cache lines are stored as described above.

分岐予測フラグ設定部430は、命令パケット生成部420によって生成された命令ヘッダ310における分岐予測フラグ311を設定するものである。この分岐予測フラグ設定部430は、分岐プロファイル保持部412に保持された分岐プロファイルを参照することにより、命令ペイロード320に含まれる分岐命令の分岐先およびその分岐確率を予測して、分岐予測フラグ311を設定する。命令ペイロード320内に分岐命令が存在し、かつ、その分岐先として命令ペイロード320内または次の命令ペイロード以外に分岐する可能性が高い場合には分岐予測フラグ311に「1」が設定され、それ以外の場合には「0」が設定される。なお、この分岐予測フラグ設定部430は、特許請求の範囲に記載の分岐予測情報設定部の一例である。   The branch prediction flag setting unit 430 sets the branch prediction flag 311 in the instruction header 310 generated by the instruction packet generation unit 420. The branch prediction flag setting unit 430 refers to the branch profile held in the branch profile holding unit 412 to predict the branch destination of the branch instruction included in the instruction payload 320 and its branch probability, and the branch prediction flag 311. Set. If there is a branch instruction in the instruction payload 320 and there is a high possibility of branching in the instruction payload 320 or other than the next instruction payload as the branch destination, “1” is set in the branch prediction flag 311, In other cases, “0” is set. The branch prediction flag setting unit 430 is an example of a branch prediction information setting unit described in the claims.

命令圧縮部440は、命令ペイロード320に含まれる命令を圧縮するものである。命令辞書テーブル192を用いた命令圧縮を行う場合には、出現頻度の高い命令マクロを検出して、最初に出現した際にその命令マクロを命令辞書登録命令によって登録する。そして、次回出現したときに命令辞書参照命令に対して一連の命令マクロを1命令で置き換えていく。その結果、分岐命令の配置が変更された場合には、あらためて分岐予測フラグ311を設定し直す。また、命令ペイロード320全体に対してロスレス圧縮を行った場合には、命令ヘッダ310における命令ペイロード圧縮フラグ313を「1」に設定する。   The instruction compression unit 440 compresses instructions included in the instruction payload 320. When instruction compression using the instruction dictionary table 192 is performed, an instruction macro having a high appearance frequency is detected, and when the instruction macro first appears, the instruction macro is registered by an instruction dictionary registration instruction. Then, when it appears next time, a series of instruction macros is replaced with one instruction for the instruction dictionary reference instruction. As a result, when the arrangement of the branch instruction is changed, the branch prediction flag 311 is set again. When lossless compression is performed on the entire instruction payload 320, the instruction payload compression flag 313 in the instruction header 310 is set to “1”.

命令パケット保持部413は、命令圧縮部440から出力された命令パケット300を保持するものである。   The instruction packet holding unit 413 holds the instruction packet 300 output from the instruction compression unit 440.

図9は、本発明の第1の実施の形態における命令パケット生成のための処理手順例を示す図である。   FIG. 9 is a diagram illustrating an example of a processing procedure for generating an instruction packet according to the first embodiment of this invention.

まず、命令パケット生成部420によって、プログラム保持部411に保持されたプログラムが固定サイズに区切られて命令ペイロード320を生成され、それぞれに命令ヘッダ310が付されることにより命令パケット300が生成される(ステップS911)。そして、分岐予測フラグ設定部430によって、命令ペイロード320内に分岐命令が存在し、かつ、その分岐先として命令ペイロード320内または次の命令ペイロード以外に分岐する可能性が高いか否かが判断される(ステップS912)。その結果、そのような分岐が発生する可能性が高いと判断された場合には分岐予測フラグ311に「1」が設定され(ステップS913)、それ以外の場合には「0」が設定される。   First, the instruction packet generator 420 generates the instruction payload 320 by dividing the program held in the program holder 411 into a fixed size, and the instruction packet 310 is generated by adding the instruction header 310 to each. (Step S911). Then, the branch prediction flag setting unit 430 determines whether or not there is a branch instruction in the instruction payload 320 and there is a high possibility of branching in the instruction payload 320 or other than the next instruction payload as the branch destination. (Step S912). As a result, when it is determined that such a branch is highly likely to occur, “1” is set to the branch prediction flag 311 (step S913), and “0” is set otherwise. .

また、連続する命令パケット300において分岐予測フラグ311に「1」が設定されている場合には(ステップS914)、命令圧縮部440によって命令ペイロード320内の命令が命令辞書テーブル192を用いて圧縮される(ステップS915)。なお、命令ペイロード320全体に対してロスレス圧縮を行うことも可能であり、その場合には命令ヘッダ310における命令ペイロード圧縮フラグ313が「1」に設定される。   If “1” is set in the branch prediction flag 311 in the consecutive instruction packets 300 (step S914), the instruction compression unit 440 compresses the instructions in the instruction payload 320 using the instruction dictionary table 192. (Step S915). Note that it is possible to perform lossless compression on the entire instruction payload 320. In this case, the instruction payload compression flag 313 in the instruction header 310 is set to “1”.

[命令実行処理]
図10は、本発明の第1の実施の形態における命令実行のための機能構成例を示す図である。この例は、命令パケット保持部413と、命令パケット分離部450と、分岐予測フラグ判定部460と、命令プリフェッチ部470と、命令伸張部480と、命令実行部490とを備えている。
[Instruction execution processing]
FIG. 10 is a diagram illustrating an example of a functional configuration for instruction execution in the first embodiment of the present invention. This example includes an instruction packet holding unit 413, an instruction packet separation unit 450, a branch prediction flag determination unit 460, an instruction prefetch unit 470, an instruction expansion unit 480, and an instruction execution unit 490.

命令パケット分離部450は、命令パケット保持部413に保持されていた命令パケット300を命令ヘッダ310と命令ペイロード320とに分離するものである。   The instruction packet separation unit 450 separates the instruction packet 300 held in the instruction packet holding unit 413 into an instruction header 310 and an instruction payload 320.

分岐予測フラグ判定部460は、命令ヘッダ310の分岐予測フラグ311を参照して、命令キャッシュ120に対して次のキャッシュラインのプリフェッチを行うべきか否かを判定するものである。プリフェッチを行うべきと判定した場合には、分岐予測フラグ判定部460は命令プリフェッチ部470に対して命令プリフェッチを要求する。なお、この分岐予測フラグ判定部460は、特許請求の範囲に記載の分岐予測情報判定部の一例である。   The branch prediction flag determination unit 460 refers to the branch prediction flag 311 of the instruction header 310 to determine whether or not to prefetch the next cache line for the instruction cache 120. When it is determined that prefetching should be performed, the branch prediction flag determination unit 460 requests the instruction prefetch unit 470 to perform instruction prefetch. The branch prediction flag determination unit 460 is an example of the branch prediction information determination unit described in the claims.

命令プリフェッチ部470は、分岐予測フラグ判定部460から命令プリフェッチが要求されると、システムメモリ140に対して次のキャッシュラインのリクエストを発行するものである。プリフェッチされた命令は、命令キャッシュ120に保持され、そのまま命令の流れに変化が生じなければ命令実行部490に供給される。   The instruction prefetch unit 470 issues a next cache line request to the system memory 140 when an instruction prefetch is requested from the branch prediction flag determination unit 460. The prefetched instruction is held in the instruction cache 120 and is supplied to the instruction execution unit 490 if there is no change in the instruction flow.

命令伸張部480は、命令ヘッダ310の命令ペイロード圧縮フラグ313が「1」に設定されている場合には、ロスレス圧縮されている命令ペイロード320を伸張して、デコード可能な命令列を得るものである。命令ペイロード圧縮フラグ313が「1」に設定されていない場合には、命令伸張部480は命令ペイロード320内の命令をそのまま出力する。   When the instruction payload compression flag 313 of the instruction header 310 is set to “1”, the instruction decompression unit 480 decompresses the instruction payload 320 that is losslessly compressed to obtain a decodable instruction sequence. is there. If the instruction payload compression flag 313 is not set to “1”, the instruction decompression unit 480 outputs the instruction in the instruction payload 320 as it is.

命令実行部490は、命令伸張部480から出力された命令列を実行するものである。命令辞書テーブル参照型の圧縮を施された命令列については、命令辞書登録命令および命令辞書参照命令を実行することにより各命令を伸張する。これに対し、ロスレス圧縮については、そのままではデコードすることができないため、命令伸張部480において命令伸張が行われる。   The instruction execution unit 490 executes the instruction sequence output from the instruction expansion unit 480. For the instruction string subjected to the instruction dictionary table reference type compression, each instruction is expanded by executing the instruction dictionary registration instruction and the instruction dictionary reference instruction. On the other hand, the lossless compression cannot be decoded as it is, so that the instruction expansion unit 480 performs instruction expansion.

図11は、本発明の第1の実施の形態における命令実行のための処理手順例を示す図である。   FIG. 11 is a diagram illustrating an example of a processing procedure for instruction execution according to the first embodiment of this invention.

まず、命令パケット保持部413に保持されていた命令パケット300が命令パケット分離部450によって命令ヘッダ310と命令ペイロード320とに分離される(ステップS921)。そして、命令ヘッダ310の分岐予測フラグ311が分岐予測フラグ判定部460によって判定される(ステップS922)。分岐予測フラグ311に「1」が設定されていれば命令プリフェッチは抑止され(ステップS923)、「0」が設定されていれば命令プリフェッチ部470によって命令プリフェッチが実行される(ステップS924)。   First, the instruction packet 300 held in the instruction packet holding unit 413 is separated into the instruction header 310 and the instruction payload 320 by the instruction packet separation unit 450 (step S921). Then, the branch prediction flag 311 of the instruction header 310 is determined by the branch prediction flag determination unit 460 (step S922). If “1” is set in the branch prediction flag 311, instruction prefetch is suppressed (step S 923), and if “0” is set, instruction prefetch is executed by the instruction prefetch unit 470 (step S 924).

また、命令ヘッダ310の命令ペイロード圧縮フラグ313が「1」に設定されている場合には(ステップS925)、命令伸張部480がロスレス圧縮されている命令ペイロード320を伸張する(ステップS926)。   If the instruction payload compression flag 313 of the instruction header 310 is set to “1” (step S925), the instruction decompression unit 480 decompresses the instruction payload 320 that has been losslessly compressed (step S926).

そして、得られた命令が命令実行部490によって実行される(ステップS927)。このとき、命令辞書テーブル参照型の圧縮を施された命令列については、命令実行部490によって命令辞書登録命令および命令辞書参照命令が実行されることにより、各命令が伸張されていく。   Then, the obtained instruction is executed by the instruction execution unit 490 (step S927). At this time, for the instruction string subjected to the instruction dictionary table reference type compression, the instruction execution unit 490 executes the instruction dictionary registration instruction and the instruction dictionary reference instruction, whereby each instruction is expanded.

なお、ステップS921は、特許請求の範囲に記載の命令パケット分離手順の一例である。また、ステップS922は、特許請求の範囲に記載の分岐予測情報判定手順の一例である。また、ステップS923およびS924は、特許請求の範囲に記載の命令プリフェッチ手順の一例である。   Step S921 is an example of the instruction packet separation procedure described in the claims. Step S922 is an example of the branch prediction information determination procedure described in the claims. Steps S923 and S924 are an example of an instruction prefetch procedure described in the claims.

このように、本発明の第1の実施の形態によれば、予め分岐予測フラグ311を設定しておくことにより、無駄な命令プリフェッチを抑止することができる。   Thus, according to the first embodiment of the present invention, it is possible to suppress useless instruction prefetching by setting the branch prediction flag 311 in advance.

[変形例]
図12は、本発明の第1の実施の形態における命令ヘッダ310のフィールド構成の変形例を示す図である。図4のフィールド構成例では第12乃至31ビットの20ビットを未使用領域316としたが、この変形例では、この20ビットの領域317に命令ペイロードの先頭命令を保持することとしている。この第1の実施の形態では、32ビット長命令の命令セットを想定しているが、命令フィールドの未使用部分やオペランドを減らす等の工夫を施すことにより20ビットの短縮命令とし、領域317に埋め込んでいる。この場合、先頭命令が領域317に埋め込まれるため、命令ペイロード320のサイズは1命令分、すなわち32ビットを削減することができる。
[Modification]
FIG. 12 is a diagram illustrating a modification of the field configuration of the instruction header 310 according to the first embodiment of this invention. In the field configuration example of FIG. 4, 20 bits of the 12th to 31st bits are used as the unused area 316, but in this modification, the head instruction of the instruction payload is held in the 20-bit area 317. In the first embodiment, an instruction set of a 32-bit instruction is assumed. However, a 20-bit shortened instruction is created by devising an unused part of the instruction field and operands, and the area 317 Embedded. In this case, since the head instruction is embedded in the area 317, the size of the instruction payload 320 can be reduced by one instruction, that is, 32 bits.

なお、ここでは先頭命令を20ビットに短縮することとしたが、この短縮命令のビット幅はこれに限定されるものではなく、他のフィールドとの関係から適宜定めることができる。   Although the head instruction is shortened to 20 bits here, the bit width of the shortened instruction is not limited to this, and can be determined as appropriate from the relationship with other fields.

<2.第2の実施の形態>
上述の第1の実施の形態ではプログラムを命令パケットにより管理することを前提としていたが、この第2の実施の形態では必ずしもそのような管理は必要ではない。そこで、最初に命令パケットによらない命令プリフェッチ制御について説明し、その後で命令パケットを利用した命令プリフェッチ制御について説明する。なお、この第2の実施の形態では、パイプライン構成およびブロック構成については上述の第1の実施の形態と同様であるため、説明を省略する。
<2. Second Embodiment>
In the above-described first embodiment, it is assumed that the program is managed by the instruction packet. However, in the second embodiment, such management is not necessarily required. Therefore, instruction prefetch control not using an instruction packet will be described first, and then instruction prefetch control using the instruction packet will be described. In the second embodiment, the pipeline configuration and the block configuration are the same as those in the first embodiment described above, and a description thereof will be omitted.

[分岐命令の配置と命令プリフェッチ開始位置]
図13は、本発明の第2の実施の形態における分岐命令の配置と命令プリフェッチ開始位置との関係例を示す図である。キャッシュライン#1に存在する分岐命令$1の分岐先は、キャッシュライン#3に含まれる。したがって、この分岐命令$1を実行した結果、分岐することとなった場合、キャッシュライン#1に続くネクストラインとしてキャッシュライン#2をプリフェッチしたとしても無駄になってしまう。
[Branch instruction placement and instruction prefetch start position]
FIG. 13 is a diagram illustrating an example of the relationship between the arrangement of branch instructions and the instruction prefetch start position in the second embodiment of the present invention. The branch destination of the branch instruction $ 1 existing in the cache line # 1 is included in the cache line # 3. Therefore, if the branch instruction $ 1 is executed as a result of branching, even if the cache line # 2 is prefetched as the next line following the cache line # 1, it is useless.

このとき、プリフェッチ開始位置Aからキャッシュライン#2のプリフェッチを開始したとすると、その時点では分岐命令$1の実行結果は不明であり、キャッシュライン#2のプリフェッチが無駄になる可能性がある。一方、プリフェッチ開始位置Bからキャッシュライン#2のプリフェッチを開始することとすると、その時点で分岐命令$1の実行結果は判明しており、キャッシュライン#2の無駄なプリフェッチを抑止することが可能である。   At this time, if the prefetch of the cache line # 2 is started from the prefetch start position A, the execution result of the branch instruction $ 1 is unknown at that time, and the prefetch of the cache line # 2 may be wasted. On the other hand, if the prefetch of the cache line # 2 is started from the prefetch start position B, the execution result of the branch instruction $ 1 is known at that time, and it is possible to suppress the useless prefetch of the cache line # 2. It is.

このように、プリフェッチ開始位置は、ネクストラインプリフェッチの抑止の可否に影響を与える。上述の例からすると、プリフェッチ開始位置が遅いほど分岐命令の実行結果を知ることができて、プリフェッチ抑止には有利である。一方、プリフェッチ開始位置が遅過ぎるとプリフェッチが間に合わなくなり、命令パイプラインにおいて命令待ちが生じてしまうおそれがある。そこで、本発明の第2の実施の形態では、予め設定された任意のタイミングにより命令プリフェッチを行う機構を設ける。   Thus, the prefetch start position affects whether or not next-implicit fetching can be suppressed. From the above example, the later the prefetch start position is, the more the execution result of the branch instruction can be known, which is advantageous for prefetch suppression. On the other hand, if the prefetch start position is too late, prefetching may not be in time, and there is a possibility that an instruction wait may occur in the instruction pipeline. Therefore, in the second embodiment of the present invention, a mechanism for performing instruction prefetching at an arbitrary preset timing is provided.

[プリフェッチ開始アドレス設定レジスタにタイミングを設定する場合]
図14は、本発明の第2の実施の形態におけるプリフェッチ開始アドレス設定レジスタを用いた構成例を示す図である。図14(a)に示すように、この構成例は、ネクストラインプリフェッチ部150における構成として、プリフェッチ開始アドレス設定レジスタ153と、アドレス比較部154とを備える。
[When setting the timing in the prefetch start address setting register]
FIG. 14 is a diagram illustrating a configuration example using a prefetch start address setting register according to the second embodiment of the present invention. As shown in FIG. 14A, this configuration example includes a prefetch start address setting register 153 and an address comparison unit 154 as a configuration in the next implementation fetch unit 150.

プリフェッチ開始アドレス設定レジスタ153は、各キャッシュラインにおいてネクストラインプリフェッチを開始するアドレスを設定するレジスタである。このプリフェッチ開始アドレス設定レジスタ153に設定されるアドレスは、キャッシュライン内における相対アドレスで足りる。このアドレスの設定は、プログラムにおける分岐命令の頻度などに基づいてコンパイル時に定めることを想定する。なお、このプリフェッチ開始アドレス設定レジスタ153は、特許請求の範囲に記載のアドレス設定レジスタの一例である。   The prefetch start address setting register 153 is a register for setting an address at which next implicit fetch is started in each cache line. A relative address in the cache line is sufficient for the address set in the prefetch start address setting register 153. This address setting is assumed to be determined at the time of compilation based on the frequency of branch instructions in the program. The prefetch start address setting register 153 is an example of an address setting register described in the claims.

アドレス比較部154は、プリフェッチ開始アドレス設定レジスタ153に設定されたアドレスと、プログラムカウンタ111の内容とを比較するものである。キャッシュライン内における相対アドレスについて一致が検出されると、アドレス比較部154はネクストラインプリフェッチリクエストを発行する。   The address comparison unit 154 compares the address set in the prefetch start address setting register 153 with the contents of the program counter 111. When a match is detected for the relative address in the cache line, the address comparison unit 154 issues a next implement fetch request.

この構成例によれば、キャッシュライン内の任意の位置においてプリフェッチ開始アドレスをプリフェッチ開始アドレス設定レジスタ153に設定しておいて、アドレス比較部154により一致を検出することができる。   According to this configuration example, the prefetch start address is set in the prefetch start address setting register 153 at an arbitrary position in the cache line, and the address comparison unit 154 can detect a match.

図14(b)は、具体的な設定アドレスの例を示すものである。キャッシュラインにおいてプリフェッチ開始位置を4個所程度設けることを想定する。キャッシュラインが128バイトとすると、32バイトずつに区切って、先頭(0バイト)、32バイト、64バイト(中央)、96バイトの各位置を設定することが考えられる。4バイト(32ビット)長命令の命令セットを想定すると、命令アドレスを2進数表記した下位2ビットは無視することができる。したがって、この場合、下位3ビットから下位7ビットの5ビット分をアドレス比較部154によって比較対象とすればよいことがわかる。   FIG. 14B shows an example of a specific set address. Assume that about four prefetch start positions are provided in the cache line. Assuming that the cache line is 128 bytes, it is possible to set the positions of the top (0 byte), 32 bytes, 64 bytes (center), and 96 bytes by dividing into 32 bytes. Assuming a 4-byte (32-bit) long instruction set, the lower 2 bits representing the instruction address in binary can be ignored. Therefore, in this case, it is understood that 5 bits from the lower 3 bits to the lower 7 bits may be compared by the address comparison unit 154.

[命令ヘッダの利用]
図15は、本発明の第2の実施の形態における命令ヘッダ310の命令プリフェッチタイミングフィールド312を用いた構成例を示す図である。この構成例では、第1の実施の形態において説明した命令パケットを前提として、命令ヘッダ310の命令プリフェッチタイミング312のフィールドを利用する。そして、ネクストラインプリフェッチ部150における構成として、図14(a)のプリフェッチ開始アドレス設定レジスタ153およびアドレス比較部154に加えて、設定ステップアドレスレジスタ151と、乗算部152とを備える。
[Use of instruction header]
FIG. 15 is a diagram illustrating a configuration example using the instruction prefetch timing field 312 of the instruction header 310 according to the second embodiment of the present invention. In this configuration example, the field of the instruction prefetch timing 312 of the instruction header 310 is used on the premise of the instruction packet described in the first embodiment. The next-implement fetch unit 150 includes a setting step address register 151 and a multiplication unit 152 in addition to the prefetch start address setting register 153 and the address comparison unit 154 shown in FIG.

設定ステップアドレスレジスタ151は、プリフェッチ開始アドレスを設定する際の粒度をステップ値として保持するレジスタである。例えば、上述の例のように32バイトをステップ値として、キャッシュラインの先頭(0バイト)、32バイト、64バイト、または、96バイトの各位置をプリフェッチ開始として設定する場合には、「32」が設定ステップアドレスレジスタ151に保持される。   The setting step address register 151 is a register that holds the granularity when setting the prefetch start address as a step value. For example, when 32 bytes are set as the step value and the position of the top (0 byte), 32 bytes, 64 bytes, or 96 bytes of the cache line is set as the prefetch start as in the above example, “32” is set. Is held in the setting step address register 151.

乗算部152は、命令プリフェッチタイミング312のフィールドの値と、設定ステップアドレスレジスタ151に保持されたステップ値との乗算を行うものである。上述のように命令プリフェッチタイミング312のフィールドは2ビット幅であるため、これを補うために命令プリフェッチタイミング312にはステップ数を保持し、設定ステップアドレスレジスタ151に示されるステップ値を乗じるように構成している。したがって、命令ヘッダ310の命令プリフェッチタイミング312には、キャッシュラインの先頭(0バイト)であれば「00」、32バイトであれば「01」、64バイトであれば「10」、96バイトであれば「11」を設定することになる。この乗算部152による乗算結果は、プリフェッチ開始アドレス設定レジスタ153に保持される。   The multiplier 152 multiplies the field value of the instruction prefetch timing 312 by the step value held in the set step address register 151. As described above, since the field of the instruction prefetch timing 312 is 2 bits wide, in order to compensate for this, the instruction prefetch timing 312 is configured to hold the step number and multiply by the step value indicated in the set step address register 151. is doing. Therefore, the instruction prefetch timing 312 of the instruction header 310 may be “00” if it is the beginning (0 byte) of the cache line, “01” if it is 32 bytes, “10” if it is 64 bytes, or 96 bytes. In this case, “11” is set. The multiplication result by the multiplication unit 152 is held in the prefetch start address setting register 153.

これ以外の構成は図14(a)と同様であり、プリフェッチ開始アドレス設定レジスタ153に保持されたアドレスと、プログラムカウンタ111の内容とがアドレス比較部154によって比較される。キャッシュライン内における相対アドレスについて一致が検出されると、アドレス比較部154はネクストラインプリフェッチリクエストを発行する。   The rest of the configuration is the same as in FIG. 14A, and the address held in the prefetch start address setting register 153 and the contents of the program counter 111 are compared by the address comparison unit 154. When a match is detected for the relative address in the cache line, the address comparison unit 154 issues a next implement fetch request.

なお、乗算部152における乗算、または、アドレス比較部154におけるアドレス比較を容易にするためには、ステップ値は2のべき乗であることが望ましい。   Note that the step value is preferably a power of 2 in order to facilitate multiplication in the multiplication unit 152 or address comparison in the address comparison unit 154.

この構成例によれば、命令ヘッダ310の命令プリフェッチタイミング312のフィールドを利用して、プリフェッチ開始アドレスをプリフェッチ開始アドレス設定レジスタ153に設定することができる。   According to this configuration example, the prefetch start address can be set in the prefetch start address setting register 153 using the field of the instruction prefetch timing 312 of the instruction header 310.

[所定回数の命令実行をプリフェッチタイミングに利用する場合]
図16は、本発明の第2の実施の形態において所定回数の命令実行をプリフェッチタイミングに利用する構成例を示す図である。図14および図15の構成例ではキャッシュライン内の固定位置をプリフェッチタイミングとして設定していたが、この構成例では特定の命令タイプの命令が所定回数実行されたときをプリフェッチタイミングとする。この構成例は、ネクストラインプリフェッチ部150における構成として、命令タイプ設定レジスタ155と、実行回数設定レジスタ156と、命令タイプ比較部157と、実行回数カウンタ158と、実行回数比較部159とを備える。
[When a predetermined number of instruction executions are used for prefetch timing]
FIG. 16 is a diagram illustrating a configuration example in which execution of a predetermined number of instructions is used for prefetch timing in the second embodiment of the present invention. In the configuration examples of FIGS. 14 and 15, the fixed position in the cache line is set as the prefetch timing. However, in this configuration example, the time when an instruction of a specific instruction type is executed a predetermined number of times is set as the prefetch timing. This configuration example includes an instruction type setting register 155, an execution count setting register 156, an instruction type comparison section 157, an execution count counter 158, and an execution count comparison section 159 as a configuration in the next implement fetch section 150.

命令タイプ設定レジスタ155は、実行回数を計数する対象となる命令の命令タイプを設定するレジスタである。この場合の命令タイプとしては、例えば、除算命令やロード命令などの比較的レイテンシの長い命令、または、分岐命令などを想定することができる。レイテンシの長い命令については、後続の命令を多少遅らせたとしても全体の実行に影響はないからである。また、分岐命令については、図13により説明したように、後続の命令を決定するために分岐命令の実行を待った方がよい場合があるからである。   The instruction type setting register 155 is a register that sets an instruction type of an instruction to be counted. As an instruction type in this case, for example, an instruction with a relatively long latency such as a division instruction or a load instruction, a branch instruction, or the like can be assumed. This is because an instruction with a long latency has no effect on the overall execution even if the subsequent instruction is delayed a little. As for the branch instruction, as described with reference to FIG. 13, it may be better to wait for the execution of the branch instruction in order to determine the subsequent instruction.

実行回数設定レジスタ156は、命令タイプ設定レジスタ155に設定された命令タイプに該当する命令について、その命令が実行される回数を設定するレジスタである。この実行回数設定レジスタ156に設定された回数の命令実行が行われると、ネクストラインプリフェッチリクエストが発行される。   The execution count setting register 156 is a register that sets the number of times the instruction corresponding to the instruction type set in the instruction type setting register 155 is executed. When the execution of the number of times set in the execution count setting register 156 is performed, a next implement fetch request is issued.

なお、これら命令タイプおよび実行回数の設定は、プロファイルデータに含まれる出現頻度に基づいてコンパイル時に静的に、または、実行時に動的に決定することができる。   The setting of the instruction type and the number of executions can be determined statically at the time of compilation or dynamically at the time of execution based on the appearance frequency included in the profile data.

命令タイプ比較部157は、命令レジスタ112に保持される命令の命令タイプと、命令タイプ設定レジスタ155に設定された命令タイプとを比較して、一致を検出するものである。この命令タイプ比較部157において一致が検出されるたびに、実行回数カウンタ158に対して計数のトリガが出力される。   The instruction type comparison unit 157 compares the instruction type of the instruction held in the instruction register 112 with the instruction type set in the instruction type setting register 155 to detect a match. Each time a match is detected by the instruction type comparison unit 157, a count trigger is output to the execution number counter 158.

実行回数カウンタ158は、命令タイプ設定レジスタ155に設定された命令タイプに該当する命令の実行回数を計数するカウンタである。この実行回数カウンタ158は、加算部1581と、カウント値レジスタ1582とを備える。加算部1581は、カウント値レジスタ1582の値に「1」を加算するものである。カウント値レジスタ1582は、実行回数カウンタ158としてのカウント値を保持するレジスタである。このカウント値レジスタ1582は、命令タイプ比較部157から計数のトリガが出力されるたびに、加算部1581の出力を保持する。これにより、実行回数の計数が行われる。   The execution number counter 158 is a counter that counts the number of executions of an instruction corresponding to the instruction type set in the instruction type setting register 155. The execution number counter 158 includes an adder 1581 and a count value register 1582. The adding unit 1581 adds “1” to the value of the count value register 1582. The count value register 1582 is a register that holds a count value as the execution number counter 158. The count value register 1582 holds the output of the adder 1581 each time a count trigger is output from the instruction type comparator 157. Thereby, the number of executions is counted.

実行回数比較部159は、カウント値レジスタ1582の値と実行回数設定レジスタ156の値とを比較して、一致を検出するものである。この実行回数比較部159において一致が検出されると、ネクストラインプリフェッチリクエストが発行される。   The execution number comparison unit 159 compares the value of the count value register 1582 and the value of the execution number setting register 156 to detect a match. When the execution number comparing unit 159 detects a match, a next implement fetch request is issued.

なお、命令タイプ設定レジスタ155と実行回数設定レジスタ156の組は、複数設けることができる。この場合、実行回数カウンタ158も別個に設ける必要がある。これにより、何れかの組について一致が検出されると、ネクストラインプリフェッチリクエストが発行される。   A plurality of sets of the instruction type setting register 155 and the execution count setting register 156 can be provided. In this case, it is necessary to provide the execution counter 158 separately. As a result, when a match is detected for any pair, a next implement fetch request is issued.

[命令ヘッダの利用]
図17は、本発明の第2の実施の形態において命令ヘッダ310に命令タイプおよび実行回数を設定した例を示す図である。図16の構成例では命令タイプ設定レジスタ155および実行回数設定レジスタ156に命令タイプおよび実行回数をそれぞれ設定していたが、これらの値は命令ヘッダ310に設定することも可能である。
[Use of instruction header]
FIG. 17 is a diagram illustrating an example in which the instruction type and the execution count are set in the instruction header 310 according to the second embodiment of this invention. In the configuration example of FIG. 16, the instruction type and the execution count are set in the instruction type setting register 155 and the execution count setting register 156, respectively, but these values can be set in the instruction header 310.

この例では、命令ヘッダ310の第12ビット目から第25ビット目の14ビットの領域318に命令タイプを設定し、第26ビット目から第31ビット目の6ビットの領域319に実行回数を設定している。したがって、領域318の値を命令タイプ比較部157の一方の入力とし、領域319の値を実行回数比較部159の一方の入力とすることにより、特別な設定レジスタを設けることなく、所定回数の命令実行をプリフェッチタイミングに利用することができる。   In this example, the instruction type is set in the 14-bit area 318 from the 12th bit to the 25th bit of the instruction header 310, and the execution count is set in the 6-bit area 319 from the 26th bit to the 31st bit. is doing. Therefore, by using the value of the area 318 as one input of the instruction type comparison unit 157 and the value of the area 319 as one input of the execution frequency comparison unit 159, a predetermined number of instructions can be obtained without providing a special setting register. Execution can be used for prefetch timing.

[命令実行処理]
図18は、本発明の第2の実施の形態における命令実行のための機能構成例を示す図である。この例は、プログラム実行状態生成部510と、検出状態設定部520と、命令プリフェッチタイミング検出部530と、命令プリフェッチ部570と、命令実行部590とを備えている。
[Instruction execution processing]
FIG. 18 is a diagram illustrating an example of a functional configuration for instruction execution in the second embodiment of the present invention. This example includes a program execution state generation unit 510, a detection state setting unit 520, an instruction prefetch timing detection unit 530, an instruction prefetch unit 570, and an instruction execution unit 590.

プログラム実行状態生成部510は、現在のプログラムの実行状態を生成するものである。このプログラム実行状態生成部510では、現在のプログラムの実行状態として、例えば、現在実行中の命令アドレスを保持するプログラムカウンタ111の値を生成することができる。また、例えば、実行回数カウンタ158に保持された所定の命令タイプの現在の実行回数を生成することができる。   The program execution state generation unit 510 generates an execution state of the current program. The program execution state generation unit 510 can generate, for example, the value of the program counter 111 that holds the instruction address currently being executed as the execution state of the current program. For example, the current number of executions of a predetermined instruction type held in the execution number counter 158 can be generated.

検出状態設定部520は、命令プリフェッチタイミングを検出すべきプログラムの実行状態を設定するものである。この検出状態設定部520では、プログラムの実行状態として、例えば、命令プリフェッチタイミングを検出すべき命令アドレスの少なくとも一部をプリフェッチ開始アドレス設定レジスタ153に設定することができる。また、例えば、所定の命令タイプの実行回数を実行回数設定レジスタ156に設定することができる。   The detection state setting unit 520 sets the execution state of a program whose instruction prefetch timing should be detected. In the detection state setting unit 520, for example, at least a part of an instruction address whose instruction prefetch timing should be detected can be set in the prefetch start address setting register 153 as a program execution state. Further, for example, the execution count of a predetermined instruction type can be set in the execution count setting register 156.

命令プリフェッチタイミング検出部530は、現在のプログラムの実行状態と検出状態設定部520に設定されたプログラムの実行状態とを比較して、両者が一致した場合に命令プリフェッチタイミングを検出するものである。この命令プリフェッチタイミング検出部530として、アドレス比較部154または実行回数比較部159を利用することができる。   The instruction prefetch timing detection unit 530 compares the execution state of the current program with the execution state of the program set in the detection state setting unit 520, and detects the instruction prefetch timing when they match. As the instruction prefetch timing detection unit 530, the address comparison unit 154 or the execution frequency comparison unit 159 can be used.

命令プリフェッチ部570は、命令プリフェッチタイミング検出部530によって命令プリフェッチタイミングが検出されると、ネクストラインの命令プリフェッチを実行するものである。   The instruction prefetch unit 570 executes next line instruction prefetch when the instruction prefetch timing detection unit 530 detects the instruction prefetch timing.

命令実行部590は、命令プリフェッチ部570により取得された命令を実行するものである。この命令実行部590による実行の結果、プログラム実行状態生成部510によって生成される現在のプログラムの実行状態に影響を与える。すなわち、プログラムカウンタ111の値や実行回数カウンタ158の値が更新され得る。   The instruction execution unit 590 executes the instruction acquired by the instruction prefetch unit 570. As a result of execution by the instruction execution unit 590, the execution state of the current program generated by the program execution state generation unit 510 is affected. That is, the value of the program counter 111 and the value of the execution counter 158 can be updated.

図19は、本発明の第2の実施の形態における命令実行のための処理手順例を示す図である。   FIG. 19 is a diagram illustrating an example of a processing procedure for executing instructions in the second embodiment of the present invention.

まず、検出状態設定部520に、命令プリフェッチタイミングを検出すべきプログラムの実行状態が設定される(ステップS931)。例えば、命令プリフェッチタイミングを検出すべき命令アドレスや、所定の命令タイプの実行回数が設定される。   First, an execution state of a program whose instruction prefetch timing is to be detected is set in the detection state setting unit 520 (step S931). For example, the instruction address at which the instruction prefetch timing should be detected and the number of executions of a predetermined instruction type are set.

そして、命令実行部590により命令実行が行われ(ステップS932)、命令プリフェッチタイミング検出部530によって命令プリフェッチタイミングが検出される(ステップS933)。例えば、設定された命令アドレスがプログラムカウンタ111と一致した場合や、設定された所定の命令タイプの実行回数が実行回数カウンタ158の値と一致した場合に、命令プリフェッチタイミングが検出される。命令プリフェッチタイミング検出部530によって命令プリフェッチタイミングが検出されると、命令プリフェッチ部570によって命令プリフェッチが行われる(ステップS934)。   Then, the instruction execution unit 590 executes the instruction (step S932), and the instruction prefetch timing detection unit 530 detects the instruction prefetch timing (step S933). For example, the instruction prefetch timing is detected when the set instruction address matches the program counter 111 or when the set number of executions of the predetermined instruction type matches the value of the execution counter 158. When the instruction prefetch timing is detected by the instruction prefetch timing detection unit 530, the instruction prefetch unit 570 performs instruction prefetch (step S934).

このように、本発明の第2の実施の形態によれば、命令プリフェッチを行うタイミングを予め設定しておくことにより、命令プリフェッチのタイミングを制御することができる。   As described above, according to the second embodiment of the present invention, it is possible to control the instruction prefetch timing by setting the timing for performing the instruction prefetch in advance.

<3.第3の実施の形態>
上述の第1および第2の実施の形態ではネクストラインプリフェッチの抑止制御に関するものであったが、以下の第3および第4の実施の形態ではネクストラインおよび分岐先ラインの両者をプリフェッチすることを想定する。なお、本発明の第3の実施の形態では、パイプライン構成およびブロック構成については上述の第1の実施の形態と同様であるため、説明を省略する。
<3. Third Embodiment>
The first and second embodiments described above relate to the suppression control of the next implementation fetch. However, in the following third and fourth embodiments, both the next line and the branch destination line are prefetched. Suppose. Note that in the third embodiment of the present invention, the pipeline configuration and the block configuration are the same as those in the first embodiment described above, and a description thereof will be omitted.

[プログラムカウンタの加算制御処理]
図20は、本発明の第3の実施の形態におけるプログラムカウンタの加算制御処理の機能構成例を示す図である。この構成例は、命令フェッチ部610と、命令デコード部620と、命令実行部630と、加算制御レジスタ640と、加算制御部650と、プログラムカウンタ660とを備えている。
[Program counter addition control processing]
FIG. 20 is a diagram illustrating a functional configuration example of the addition control process of the program counter according to the third embodiment of the present invention. This configuration example includes an instruction fetch unit 610, an instruction decode unit 620, an instruction execution unit 630, an addition control register 640, an addition control unit 650, and a program counter 660.

命令フェッチ部610は、プログラムカウンタ660の値に従って、実行対象となる命令をフェッチするものであり、命令フェッチステージ11に相当する。この命令フェッチ部610によってフェッチされた命令は命令デコード部620に供給される。   The instruction fetch unit 610 fetches an instruction to be executed according to the value of the program counter 660 and corresponds to the instruction fetch stage 11. The instruction fetched by the instruction fetch unit 610 is supplied to the instruction decode unit 620.

命令デコード部620は、命令フェッチ部610によってフェッチされた命令をデコードするものであり、命令デコードステージ21に相当する。   The instruction decode unit 620 decodes the instruction fetched by the instruction fetch unit 610 and corresponds to the instruction decode stage 21.

命令実行部630は、命令デコード部620によってデコードされた命令を実行するものであり、命令実行ステージ41に相当する。なお、ここではオペランドアクセスについては省略している。   The instruction execution unit 630 executes the instruction decoded by the instruction decoding unit 620 and corresponds to the instruction execution stage 41. Note that operand access is omitted here.

加算制御レジスタ640は、プログラムカウンタ660の加算制御を行うためのデータを保持するものである。この加算制御レジスタ640の構成例については後述する。   The addition control register 640 holds data for performing addition control of the program counter 660. A configuration example of the addition control register 640 will be described later.

加算制御部650は、加算制御レジスタ640に保持されたデータに基づいてプログラムカウンタ660の加算制御を行うものである。   The addition control unit 650 performs addition control of the program counter 660 based on the data held in the addition control register 640.

プログラムカウンタ660は、実行対象となる命令のアドレスを計数するものであり、プログラムカウンタ(PC)18に相当する。このプログラムカウンタ660は、プログラムカウンタ値保持部661と、加算部662とを備えている。プログラムカウンタ値保持部661は、プログラムカウンタの値を保持するレジスタである。加算部662は、プログラムカウンタ値保持部661の値を加算する処理を行うものである。   The program counter 660 counts the address of the instruction to be executed, and corresponds to the program counter (PC) 18. The program counter 660 includes a program counter value holding unit 661 and an adding unit 662. The program counter value holding unit 661 is a register that holds the value of the program counter. The adding unit 662 performs processing for adding the values of the program counter value holding unit 661.

図21は、本発明の第3の実施の形態における加算制御レジスタ640の構成例を示す図である。この加算制御レジスタ640は、増分語数(incr)641と、増分回数(conti)642とを保持している。   FIG. 21 is a diagram illustrating a configuration example of the addition control register 640 according to the third embodiment of the present invention. The addition control register 640 holds an increment word count (incr) 641 and an increment count (conti) 642.

増分語数641は、加算部662においてプログラムカウンタ値保持部661の値を加算する際の増分語数を保持するものである。この第4の実施の形態では32ビット(4バイト)長命令の命令セットを想定しているため、1語は4バイトになる。プログラムカウンタ660においてアドレスの下位2ビットを省略して語単位のアドレスを保持しているものとすると、従来の方式では増分値「1」が毎回加算されることになる。これに対し、この第4の実施の形態では、増分値として増分語数641の値が加算されていく。増分語数641に「1」を設定すると従来通りの動作となるが、「2」以上の整数値を設定した場合には命令を間引きながら実行できるようになる。具体例については後述する。なお、増分語数641は、特許請求の範囲に記載の増分値レジスタの一例である。   The increment word number 641 holds the increment word number when the value of the program counter value holding unit 661 is added by the adder 662. In the fourth embodiment, an instruction set of a 32-bit (4 byte) length instruction is assumed, so one word is 4 bytes. If the program counter 660 omits the lower 2 bits of the address and holds the address in units of words, an increment value “1” is added each time in the conventional method. On the other hand, in the fourth embodiment, the value of the increment word number 641 is added as the increment value. When “1” is set in the increment word number 641, the conventional operation is performed. However, when an integer value of “2” or more is set, the instruction can be executed while being thinned. Specific examples will be described later. The increment word number 641 is an example of an increment value register described in the claims.

増分回数642は、加算部662において増分語数641に従った加算を行う回数を保持するものである。通常は従来の方式と同様に増分値「1」を加算するが、増分回数642において「1」以上の整数値が設定されている場合には増分語数641に従った加算を行う。この増分回数642は、図示しない減算部によって、命令が実行されるたびに「0」になるまで「1」を減算するように構成してもよく、また、別途カウンタを設けてそのカウンタの値が「0」になるまで「1」を減算するように構成してもよい。何れの場合であっても、増分回数642に指定された回数の加算が増分語数641に従って行われた後には、通常通り増分値「1」の加算に戻る。なお、この増分回数642は、特許請求の範囲に記載の変更指示レジスタの一例である。   The number of increments 642 holds the number of times the addition unit 662 performs addition according to the number of incremented words 641. Normally, the increment value “1” is added in the same manner as in the conventional method, but when an integer value equal to or greater than “1” is set in the increment count 642, the increment according to the increment word number 641 is performed. The increment count 642 may be configured such that “1” is subtracted until it becomes “0” each time an instruction is executed by a subtracting unit (not shown). “1” may be subtracted until becomes “0”. In any case, after the number of times specified in the increment number 642 is added according to the increment word number 641, the process returns to the increment value “1” as usual. The increment count 642 is an example of a change instruction register described in the claims.

[命令の実行態様]
図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」...に配置される。すなわち、分岐が生じなかった場合の命令列と分岐が生じた場合の命令列とが交互に配置されることになる。
[Instruction execution mode]
FIG. 22 is a diagram illustrating an example of a processing mode of an instruction by a two-way branch according to the third embodiment of this invention. If the address of a branch instruction that performs a two-way branch is “A”, the instruction sequence when no branch occurs is “A + 4”, “A + 12”, “A + 20”, “A + 28”, “A + 36”, “A + 44”. , “A + 52”, “A + 60”... On the other hand, the instruction sequences when a branch occurs are arranged in “A + 8”, “A + 16”, “A + 24”, “A + 32”, “A + 40”, “A + 48”, “A + 56”, “A + 64”,. . That is, the instruction sequence when the branch does not occur and the instruction sequence when the branch occurs are alternately arranged.

この2方向分岐の場合、各命令列の先頭の命令が実行されると、増分語数641には「2」が、増分回数642には各命令列の命令数が、それぞれ設定される。これにより、交互に配置された各命令列の一方のみを実行していくことができる。   In the case of this two-way branch, when the first instruction of each instruction sequence is executed, “2” is set to the increment word number 641 and the instruction count of each instruction sequence is set to the increment count 642. Thereby, only one of the instruction sequences arranged alternately can be executed.

図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命令ずつ順番に配置されることになる。   FIG. 23 is a diagram illustrating an example of a processing mode of an instruction by multidirectional branching according to the third embodiment of this invention. Here, an example of a three-way branch will be described, but the same technique can be applied when branching in four or more directions. If the address of a branch instruction that performs a three-way branch is “A”, the first instruction sequence is “A + 4”, “A + 16”, “A + 28”, “A + 40”, “A + 52”, “A + 64”, “A + 76”. ... is arranged. The second instruction sequence is arranged in “A + 8”, “A + 20”, “A + 32”, “A + 44”, “A + 56”, “A + 68”, “A + 80”. Also, the third instruction sequence is arranged in “A + 12”, “A + 24”, “A + 36”, “A + 48”, “A + 60”, “A + 72”, “A + 84”. That is, the first to third instruction sequences are arranged one by one in order.

この3方向分岐の場合、各命令列の先頭の命令が実行されると、増分語数641には「3」が、増分回数642には各命令列の命令数が、それぞれ設定される。これにより、1命令ずつ順番に配置された各命令列の一つのみを実行していくことができる。   In the case of this three-way branch, when the first instruction of each instruction sequence is executed, “3” is set to the increment word number 641 and the instruction count of each instruction sequence is set to the increment number 642. Thereby, it is possible to execute only one of the instruction sequences arranged one by one in order.

[加算制御レジスタへの設定]
図24は、本発明の第3の実施の形態における加算制御レジスタ640に値を設定するための命令セットの一例を示す図である。図24(a)は、本発明の第3の実施の形態における命令フォーマットの例である。この命令フォーマットは、6ビットのオペコード(OPCODE)、5ビットの第1ソースオペランド(rs)、5ビットの第2ソースオペランド(rt)、5ビットのデスティネーションオペランド(rd)、11ビットの即値フィールド(imm)を備えている。
[Setting to addition control register]
FIG. 24 is a diagram illustrating an example of an instruction set for setting a value in the addition control register 640 according to the third embodiment of the present invention. FIG. 24A shows an example of an instruction format in the third embodiment of the present invention. This instruction format includes a 6-bit opcode (OPCODE), a 5-bit first source operand (rs), a 5-bit second source operand (rt), a 5-bit destination operand (rd), and an 11-bit immediate field. (Imm).

図24(b)は、本発明の第3の実施の形態におけるオペコード一覧の例を示している。縦方向にオペコードの上位3ビット、横方向にオペコードの下位3ビットを配している。以下では、オペコード一覧の右下の条件分岐命令、および、オペコード「100111」の制御レジスタ変更命令に着目して説明する。   FIG. 24B shows an example of an operation code list in the third embodiment of the present invention. The upper 3 bits of the operation code are arranged in the vertical direction, and the lower 3 bits of the operation code are arranged in the horizontal direction. The following description focuses on the conditional branch instruction at the lower right of the operation code list and the control register change instruction of the operation code “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が設定される。   FIG. 24C shows an example of the instruction format of the conditional branch instruction. As this conditional branch instruction, BEQfp, BNEfp, BLEfp, BGTfp, BLTZfp, BGEZfp, BLTZALfp, BGEZALfp are listed here. “EQ” following “B” representing a branch (Branch) indicates that the value of both source operands is equal (EQual) (rs = rt) as a branch condition. “NE” represents that the branch condition is that the values of both source operands are not equal (Not Equal) (rs ≠ rt). “LE” indicates that the branch condition is that the first source operand is less than or equal to the second source operand (less than or equal) (rs ≦ rt). “GTZ” indicates that the branch condition is that the first source operand is greater than zero (rs> 0). “LTZ” represents that the first source operand is less than zero (Less Than Zero) (rs <0) as a branch condition. “GEZ” represents that the branch condition is that the first source operand is greater than or equal to zero (rs ≧ 0). Further, “AL” following them means that the return address is stored at the time of branching (branch and link). Further, “fp” following them means that the values of both source operands represent floating point numbers. The increment word number incr shown as the destination operand is the increment word number when the value of the program counter 660 is added. The increment count conti shown as an immediate field is the number of times the program counter 660 performs addition according to the increment word count incr. When these conditional branch instructions are executed, the increment word number incr is set in the increment word number 641 of the addition control register 640, and the increment number conti is set in the increment number 642.

図24(d)は、制御レジスタ変更命令PCINCMODEの命令フォーマットの例である。この制御レジスタ変更命令PCINCMODEは、プログラムカウンタ660の増分モードを加算制御レジスタ640に設定する命令である。この制御レジスタ変更命令PCINCMODEが実行されると、加算制御レジスタ640の増分語数641には増分語数incrが設定され、増分回数642には増分回数contiが設定される。この制御レジスタ変更命令PCINCMODEは、条件分岐命令とは別個の命令であり、実際には条件分岐命令とともに使用される。   FIG. 24D shows an example of the instruction format of the control register change instruction PCINCMODE. This control register change instruction PCINCMODE is an instruction for setting the increment mode of the program counter 660 in the addition control register 640. When this control register change instruction PCINCMODE is executed, the increment word number incr of the increment control register 640 is set to the increment word count incr, and the increment count 642 is set to the increment count conti. This control register change instruction PCINCMODE is an instruction separate from the conditional branch instruction, and is actually used together with the conditional branch instruction.

図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」により実行が行われる。   FIG. 25 is a diagram illustrating an example when a value is set in the addition control register 640 by a conditional branch instruction in the third embodiment of the present invention. In this example, the branch condition “rs = rt”, the increment word number “2”, and the increment count “L / 2” are specified in the conditional branch instruction BEQfp. Let m be the instruction word address of this conditional branch instruction BEQfp. At this time, if the branch condition “rs = rt” is satisfied, the instruction m + 2, the instruction m + 4, and the instruction m + 6 are executed in the order of the instruction m + L up to the instruction m + L with the incremented word number “2”. On the other hand, if the branch condition “rs = rt” is not satisfied, the instruction m + 1, the instruction m + 3, and the instruction m + 5 are executed in the order of the instruction m + (L−1) with the increment word number “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」により実行が行われる。   FIG. 26 is a diagram illustrating an example when a value is set in the addition control register 640 by the control register change instruction PCINCMODE in the third embodiment of the present invention. In this example, a control register change instruction PCINCMODE is arranged next to a normal conditional branch instruction that does not set the addition control register 640. In the control register change instruction PCINCMODE, the number of increment words “2” and the increment count “L / 2” are designated. Let m be the instruction word address of the control register change instruction PCINCMODE. At this time, if the branch condition is satisfied in the conditional branch instruction, the instruction m + 2, the instruction m + 4, and the instruction m + 6 are executed in the order of the instruction m + L up to the instruction m + L with the increment word number “2”. On the other hand, if the branch condition is not satisfied in the conditional branch instruction, the instruction m + 1, the instruction m + 3, and the instruction m + 5 are executed in the order of the instruction m + (L−1) and the incremented word number “2”.

[命令実行処理]
図27は、本発明の第3の実施の形態における命令実行のための処理手順例を示す図である。ここでは、上述の条件分岐命令や制御レジスタ変更命令などによって、加算制御レジスタ640への増分語数および増分回数の設定が予め完了していることを想定している。
[Instruction execution processing]
FIG. 27 is a diagram illustrating an example of a processing procedure for instruction execution according to the third embodiment of the present invention. Here, it is assumed that the setting of the number of increment words and the increment count in the addition control register 640 has been completed in advance by the above-described conditional branch instruction, control register change instruction, and the like.

加算制御レジスタ640の増分回数642がゼロより大きい場合(ステップS941)、プログラムカウンタ660において増分語数641に「4」を乗じた値が加算部662によってプログラムカウンタ値保持部661に加算される(ステップS942)。また、この場合、加算制御レジスタ640の増分回数642が「1」減算される(ステップS943)。一方、加算制御レジスタ640の増分回数642がゼロより大きくない場合には(ステップS941)、通常通り、プログラムカウンタ660において値「4」が加算部662によってプログラムカウンタ値保持部661に加算される(ステップS944)。これらの処理は繰り返し行われる。なお、ステップS942は、特許請求の範囲に記載の変更増分加算手順の一例である。また、ステップS944は、特許請求の範囲に記載の通常増分加算手順の一例である。   If the increment count 642 of the addition control register 640 is greater than zero (step S941), a value obtained by multiplying the increment word number 641 by “4” in the program counter 660 is added to the program counter value holding unit 661 by the adder 662 (step S941). S942). In this case, “1” is subtracted from the increment number 642 of the addition control register 640 (step S943). On the other hand, when the increment count 642 of the addition control register 640 is not greater than zero (step S941), the value “4” is added to the program counter value holding unit 661 by the adding unit 662 in the program counter 660 as usual (step S941). Step S944). These processes are repeated. Note that step S942 is an example of a change increment addition procedure described in the claims. Step S944 is an example of a normal incremental addition procedure described in the claims.

このように、本発明の第3の実施の形態によれば、分岐後の複数の命令列を命令単位で順番に混在して配置しておいて、分岐条件に合わせてプログラムカウンタの加算を制御することにより、適切な命令列の命令を実行することができる。これにより、ネクストラインおよび分岐先ラインを混在して配置することが可能となり、命令プリフェッチのペナルティを平均化することができる。   As described above, according to the third embodiment of the present invention, a plurality of instruction sequences after branching are arranged in order and mixed in order, and the addition of the program counter is controlled in accordance with the branching condition. By doing so, an instruction of an appropriate instruction sequence can be executed. As a result, the next line and the branch destination line can be mixedly arranged, and the instruction prefetch penalty can be averaged.

<4.第4の実施の形態>
[プロセッサの構成]
図28は、本発明の第4の実施の形態におけるプロセッサのパイプライン構成例を示す図である。基本的なパイプライン構成は、第1の実施の形態において説明したものと同様の5段階のパイプラインを想定している。
<4. Fourth Embodiment>
[Processor configuration]
FIG. 28 is a diagram illustrating a pipeline configuration example of a processor according to the fourth embodiment of the present invention. The basic pipeline configuration assumes a five-stage pipeline similar to that described in the first embodiment.

上述の第1の実施の形態ではネクストラインプリフェッチ部13においてネクストラインのプリフェッチを行っていたが、この第4の実施の形態ではネクストライン分岐先ラインプリフェッチ部14がネクストラインおよび分岐先ラインのプリフェッチを行う。すなわち、現在実行対象となっている命令を含むキャッシュラインの次のキャッシュラインであるネクストラインのみならず、分岐先の命令を含むキャッシュラインである分岐先ラインのプリフェッチも行われる。ネクストライン分岐先ラインプリフェッチ部14によってプリフェッチされた分岐先ラインは、プリフェッチキュー17に保持される。このプリフェッチキュー17に保持された分岐先ラインは、次の命令デコードステージ(ID)21に供給される場合に用いられる。なお、ネクストラインについては命令キャッシュから直接供給されるため、プリフェッチキュー17を介する必要はない。   In the first embodiment, the next line prefetch unit 13 performs the next line prefetch. However, in the fourth embodiment, the next line branch destination line prefetch unit 14 prefetches the next line and the branch destination line. I do. In other words, not only the next line that is the next cache line after the cache line that includes the instruction that is currently being executed, but also the branch destination line that is the cache line that includes the branch destination instruction is prefetched. The branch destination line prefetched by the next line branch destination line prefetch unit 14 is held in the prefetch queue 17. The branch destination line held in the prefetch queue 17 is used when supplied to the next instruction decode stage (ID) 21. Since the next line is directly supplied from the instruction cache, it is not necessary to go through the prefetch queue 17.

図29は、本発明の第4の実施の形態におけるプロセッサのブロック構成例を示す図である。基本的なブロック構成は、第1の実施の形態において説明したものと同様である。   FIG. 29 is a diagram illustrating a block configuration example of a processor according to the fourth embodiment of the present invention. The basic block configuration is the same as that described in the first embodiment.

上述の第1の実施の形態ではネクストラインプリフェッチ部150においてネクストラインのプリフェッチを行っていたが、この第4の実施の形態ではネクストライン分岐先ラインプリフェッチ部250がネクストラインおよび分岐先ラインのプリフェッチを行う。また、プリフェッチキュー171を命令キャッシュ120と並列に配置して、プリフェッチキュー171から命令レジスタ112へ直接、分岐先ラインを供給できるようにしている。すなわち、分岐が発生した場合には、命令キャッシュ120から供給しかけた命令に代えて、プリフェッチキュー171からの命令をバイパスして供給する。これにより、パイプラインをストールさせることなく、命令を発行し続けることができる。なお、ネクストライン分岐先ラインプリフェッチ部250は、特許請求の範囲に記載のプリフェッチ部の一例である。また、プリフェッチキュー171は、特許請求の範囲に記載のプリフェッチキューの一例である。   In the first embodiment described above, the next line prefetch unit 150 performs the next line prefetch. In the fourth embodiment, the next line branch destination line prefetch unit 250 performs the next line and branch destination line prefetch. I do. Further, the prefetch queue 171 is arranged in parallel with the instruction cache 120 so that the branch destination line can be directly supplied from the prefetch queue 171 to the instruction register 112. That is, when a branch occurs, an instruction from the prefetch queue 171 is bypassed and supplied instead of the instruction supplied from the instruction cache 120. Thereby, it is possible to continue issuing instructions without stalling the pipeline. The next line branch destination line prefetch unit 250 is an example of a prefetch unit described in the claims. The prefetch queue 171 is an example of a prefetch queue described in the claims.

なお、この第4の実施の形態では、命令パケットに分けることは必須ではないため、このブロック構成からは除外している。また、命令辞書テーブルによる圧縮についても、この第4の実施の形態では必須ではないため、ブロック構成から除外している。これらは適宜、組み合わせて実施することも可能である。   In the fourth embodiment, since it is not essential to divide into instruction packets, it is excluded from this block configuration. Also, compression by the instruction dictionary table is not essential in the fourth embodiment, and is excluded from the block configuration. These can be implemented in combination as appropriate.

[分岐命令とキャッシュラインの関係]
図30は、本発明の第4の実施の形態における分岐命令とキャッシュラインの関係を示す図である。
[Relationship between branch instruction and cache line]
FIG. 30 is a diagram showing a relationship between a branch instruction and a cache line in the fourth embodiment of the present invention.

現在実行対象となっている命令を含むキャッシュラインを現ラインと呼称し、それに続くキャッシュラインをネクストラインと呼称する。また、現ラインに含まれる分岐命令の分岐先命令を含むキャッシュラインを分岐先ラインと呼称する。この例では、現ラインの最後に分岐命令が配置されている。これは、現ラインの先頭の命令が実行されるタイミングからネクストラインおよび分岐先ラインのプリフェッチを開始することによって、分岐命令の実行までに両ラインのプリフェッチを完了させるまでの余裕をもたせるためである。したがって、必ずしも現ラインの最後に分岐命令が配置されている必要はなく、現ラインの少なくとも後半部分に配置されていれば、場合によってはプリフェッチの完了に間に合わせることは可能であると考えられる。   A cache line including an instruction that is currently being executed is referred to as a current line, and a subsequent cache line is referred to as a next line. A cache line including a branch destination instruction of a branch instruction included in the current line is referred to as a branch destination line. In this example, a branch instruction is arranged at the end of the current line. This is because by starting the prefetch of the next line and the branch destination line from the timing when the first instruction of the current line is executed, there is a margin until the prefetch of both lines is completed before the branch instruction is executed. . Therefore, it is not always necessary that the branch instruction is arranged at the end of the current line, and if it is arranged at least in the latter half of the current line, it may be possible to meet the prefetch completion in some cases.

現ラインの最後に分岐命令を配置した場合、分岐命令における分岐条件が成立せずに分岐が発生しない場合にはネクストラインが必要となる、分岐条件が成立して分岐が発生する場合には分岐先ラインが必要となる。したがって、分岐条件の成否に関わらずプリフェッチを成功させるためには、ネクストラインおよび分岐先ラインの両ラインをプリフェッチすることが望ましい。本発明の第4の実施の形態では、ネクストライン分岐先ラインプリフェッチ部250によって両ラインをプリフェッチすることにより、分岐条件の成否に左右されずに命令実行を継続することを可能とする。この場合、両ラインをプリフェッチするためには、スループットは通常の2倍あることが望ましいが、必ずしも必須要件ではない。   If a branch instruction is placed at the end of the current line, the next line is necessary if the branch condition in the branch instruction is not satisfied and a branch does not occur, and a branch occurs if the branch condition is satisfied and a branch occurs. A destination line is required. Therefore, it is desirable to prefetch both the next line and the branch destination line in order to succeed in prefetching regardless of whether or not the branch condition is satisfied. In the fourth embodiment of the present invention, by prefetching both lines by the next line branch destination line prefetch unit 250, instruction execution can be continued regardless of whether or not the branch condition is satisfied. In this case, in order to prefetch both lines, it is desirable that the throughput is twice the normal, but this is not necessarily an essential requirement.

各キャッシュラインの命令キャッシュ120上での衝突を考慮すると、分岐先ラインの配置には制限を設けることが望ましい。例えば、命令キャッシュ120がダイレクトマッピング方式であった場合、ラインアドレスが同じキャッシュライン同士は同時には格納することができずに衝突を起こす。この場合、ネクストラインをプリフェッチした直後に同じラインアドレスを有する分岐先ラインをプリフェッチすると、ネクストラインは命令キャッシュ120から追い出されてしまう。2wayセットアソシアティブ方式であれば、衝突を起こす可能性は低くなるが、格納状態によっては他のキャッシュラインに影響を与える場合は生じ得る。したがって、この第4の実施の形態では、最も厳しい条件としてダイレクトマッピング方式の命令キャッシュを想定し、ネクストラインと分岐先ラインとが同じラインアドレスにならないように、コンパイラまたはリンカにおいて分岐先ラインの配置を調整する。   Considering the collision of each cache line on the instruction cache 120, it is desirable to provide a restriction on the arrangement of branch destination lines. For example, when the instruction cache 120 uses the direct mapping method, cache lines having the same line address cannot be stored at the same time, causing a collision. In this case, if a branch destination line having the same line address is prefetched immediately after the next line is prefetched, the next line is evicted from the instruction cache 120. In the case of the 2-way set associative method, the possibility of a collision is reduced, but depending on the storage state, it may occur when other cache lines are affected. Therefore, in the fourth embodiment, the direct mapping type instruction cache is assumed as the strictest condition, and the arrangement of the branch destination line is made by the compiler or the linker so that the next line and the branch destination line do not have the same line address. Adjust.

コンパイラまたはリンカにおいて命令のアドレス配置を変更するためには、例えば次のような手法を用いることができる。まず、以下のような命令列を想定する。なお、「0x」に続く数字は十六進数を表す。
0x0000:命令A
0x0004:命令B
0x0008:命令C
このとき、命令の配置を全体的に4バイト後方にずらしたい場合には、以下のようにNOP(No-OPeration)命令を挿入する手法が考えられる。
0x0000:NOP命令
0x0004:命令A
0x0008:命令B
0x000C:命令C
In order to change the instruction address arrangement in the compiler or linker, for example, the following technique can be used. First, the following instruction sequence is assumed. The number following “0x” represents a hexadecimal number.
0x0000: Instruction A
0x0004: Instruction B
0x0008: Instruction C
At this time, when it is desired to shift the instruction arrangement backward by 4 bytes as a whole, a method of inserting a NOP (No-OPeration) instruction as follows can be considered.
0x0000: NOP instruction 0x0004: Instruction A
0x0008: Instruction B
0x000C: Instruction C

また、命令Aが複数のオペレーションを行う命令である場合、以下のように命令Aを命令AAと命令ABの2命令に分けることができれば、同様に命令の配置を全体的に4バイト後方にずらすことができる。
0x0000:命令AA
0x0004:命令AB
0x0008:命令B
0x000C:命令C
Further, when the instruction A is an instruction for performing a plurality of operations, if the instruction A can be divided into two instructions, the instruction AA and the instruction AB as follows, the instruction arrangement is similarly shifted backward by 4 bytes. be able to.
0x0000: Instruction AA
0x0004: Instruction AB
0x0008: Instruction B
0x000C: Instruction C

図31は、本発明の第4の実施の形態における命令配置の変更の一態様を示す図である。ここでは、図31(a)のように命令列Aと命令列Bの後方に分岐命令Cがあり、命令列Dと命令列Eの何れかの処理を行い、その後、命令列Fを処理するというプログラムを想定する。このとき、命令列Bの結果が分岐命令Cの分岐条件に影響を与えない場合には、図31(b)のように分岐命令Cを命令列Aの直後に移動させ、さらに命令列Bを分岐先にも配置することにより、実行結果に影響を与えることなく命令配置を変更することができる。   FIG. 31 is a diagram illustrating an aspect of changing the instruction arrangement according to the fourth embodiment of the present invention. Here, as shown in FIG. 31A, there is a branch instruction C behind the instruction sequence A and the instruction sequence B, and either the instruction sequence D or the instruction sequence E is processed, and then the instruction sequence F is processed. Assuming a program called At this time, if the result of the instruction sequence B does not affect the branch condition of the branch instruction C, the branch instruction C is moved immediately after the instruction sequence A as shown in FIG. By placing the instruction at the branch destination, the instruction arrangement can be changed without affecting the execution result.

[命令配置処理]
図32は、本発明の第4の実施の形態における命令配置のための機能構成例を示す図である。この構成例では、プログラム保持部701に保持されたプログラムからオブジェクトコードを生成して、オブジェクトコード保持部702に保持させることを想定している。この構成例は、分岐命令抽出部710と、分岐命令配置部720と、分岐先命令配置部730と、オブジェクトコード生成部740とを備えている。
[Instruction placement processing]
FIG. 32 is a diagram illustrating an example of a functional configuration for instruction arrangement according to the fourth embodiment of the present invention. In this configuration example, it is assumed that an object code is generated from a program held in the program holding unit 701 and held in the object code holding unit 702. This configuration example includes a branch instruction extraction unit 710, a branch instruction arrangement unit 720, a branch destination instruction arrangement unit 730, and an object code generation unit 740.

分岐命令抽出部710は、プログラム保持部701に保持されたプログラムの中から分岐命令を抽出するものである。この分岐命令抽出部710は、抽出した分岐命令のプログラムにおけるアドレスを把握して分岐命令配置部720に供給する。また、この分岐命令抽出部710は、抽出した分岐命令の分岐先アドレスを把握して分岐先命令配置部730に供給する。   The branch instruction extraction unit 710 extracts a branch instruction from the programs held in the program holding unit 701. The branch instruction extraction unit 710 grasps the address of the extracted branch instruction in the program and supplies it to the branch instruction arrangement unit 720. Further, the branch instruction extraction unit 710 grasps the branch destination address of the extracted branch instruction and supplies it to the branch destination instruction placement unit 730.

分岐命令配置部720は、分岐命令抽出部710によって抽出された分岐命令をキャッシュライン(現ライン)の後半部分に配置するものである。キャッシュラインの後半部分に配置するのは、上述のように、プリフェッチを完了させるまでの余裕をもたせるためである。したがって、この観点からは、キャッシュラインの最後に分岐命令を配置することが最も望ましいことになる。   The branch instruction placement unit 720 places the branch instruction extracted by the branch instruction extraction unit 710 in the latter half of the cache line (current line). The reason why it is arranged in the latter half part of the cache line is to provide a margin until the prefetch is completed as described above. Therefore, from this point of view, it is most desirable to place a branch instruction at the end of the cache line.

分岐先命令配置部730は、分岐命令抽出部710によって抽出された分岐命令の分岐先命令を、次のキャッシュライン(ネクストライン)とは異なるラインアドレスを有する他のキャッシュライン(分岐先ライン)に配置するものである。ネクストラインと分岐先ラインとを異なるラインアドレスのキャッシュラインに配置するのは、上述のように、命令キャッシュ120における衝突を避けるためである。   The branch destination instruction placement unit 730 transfers the branch destination instruction of the branch instruction extracted by the branch instruction extraction unit 710 to another cache line (branch destination line) having a line address different from the next cache line (next line). Is to be placed. The reason why the next line and the branch destination line are arranged in cache lines having different line addresses is to avoid a collision in the instruction cache 120 as described above.

オブジェクトコード生成部740は、分岐命令配置部720および分岐先命令配置部730によって配置された分岐命令および分岐先命令を含む命令列についてオブジェクトコードを生成するものである。このオブジェクトコード生成部740によって生成されたオブジェクトコードは、オブジェクトコード保持部702に保持される。なお、このオブジェクトコード生成部740は、特許請求の範囲に記載の命令列出力部の一例である。   The object code generation unit 740 generates an object code for an instruction sequence including a branch instruction and a branch destination instruction arranged by the branch instruction arrangement unit 720 and the branch destination instruction arrangement unit 730. The object code generated by the object code generation unit 740 is held in the object code holding unit 702. The object code generation unit 740 is an example of an instruction sequence output unit described in the claims.

図33は、本発明の第4の実施の形態における命令配置のための処理手順例を示す図である。   FIG. 33 is a diagram illustrating an example of a processing procedure for instruction arrangement according to the fourth embodiment of the present invention.

まず、分岐命令抽出部710によって、プログラム保持部701に保持されたプログラムの中から分岐命令が抽出される(ステップS951)。そして、分岐命令抽出部710によって抽出された分岐命令が、分岐命令配置部720によってキャッシュライン(現ライン)の後半部分に配置される(ステップS952)。また、分岐命令抽出部710によって抽出された分岐命令の分岐先命令が、分岐先命令配置部730によって次のキャッシュライン(ネクストライン)とは異なるラインアドレスを有する他のキャッシュライン(分岐先ライン)に配置される(ステップS953)。そして、分岐命令配置部720および分岐先命令配置部730によって配置された分岐命令および分岐先命令を含む命令列について、オブジェクトコード生成部740によってオブジェクトコードが生成される(ステップS954)。   First, the branch instruction extraction unit 710 extracts a branch instruction from the program held in the program holding unit 701 (step S951). Then, the branch instruction extracted by the branch instruction extraction unit 710 is arranged in the latter half portion of the cache line (current line) by the branch instruction arrangement unit 720 (step S952). Further, the branch destination instruction of the branch instruction extracted by the branch instruction extraction unit 710 is another cache line (branch destination line) having a line address different from that of the next cache line (next line) by the branch destination instruction placement unit 730. (Step S953). Then, the object code generation unit 740 generates an object code for the instruction sequence including the branch instruction and the branch destination instruction arranged by the branch instruction arrangement unit 720 and the branch destination instruction arrangement unit 730 (step S954).

なお、ステップS951は、特許請求の範囲に記載の分岐命令抽出手順の一例である。また、ステップS952は、特許請求の範囲に記載の分岐命令配置手順の一例である。また、ステップS953は、特許請求の範囲に記載の分岐先命令配置手順の一例である。また、ステップS954は、特許請求の範囲に記載の命令列出力手順の一例である。   Note that step S951 is an example of a branch instruction extraction procedure described in the claims. Step S952 is an example of a branch instruction arrangement procedure described in the claims. Step S953 is an example of a branch destination instruction arrangement procedure described in the claims. Step S954 is an example of an instruction sequence output procedure described in the claims.

[プリフェッチアドレスの設定]
図34は、本発明の第4の実施の形態におけるプリフェッチアドレスレジスタの設定例を示す図である。上述のように、分岐先ラインはネクストラインとは異なるラインアドレスに配置される。分岐先ラインをプリフェッチする際には、現ラインからの相対位置により常に固定的にプリフェッチするようにしてもよいが、以下のように自動的にプリフェッチする分岐先アドレスをその都度、任意に設定するようにしてもよい。
[Prefetch address setting]
FIG. 34 is a diagram showing a setting example of the prefetch address register in the fourth embodiment of the present invention. As described above, the branch destination line is arranged at a line address different from that of the next line. When prefetching a branch destination line, the prefetch may be always fixed according to the relative position from the current line. However, the branch destination address to be automatically prefetched is arbitrarily set as follows. You may do it.

図34(a)は、プリフェッチアドレスレジスタ(PRADDR:PRefetch ADDress Register)790の構成例を示す図である。このプリフェッチアドレスレジスタ790は、分岐先ラインとして命令キャッシュ120へのプリフェッチ対象となるプリフェッチアドレスを設定するレジスタである。このプリフェッチアドレスは、プリフェッチアドレスレジスタ790の下位12ビットに保持される。   FIG. 34A is a diagram illustrating a configuration example of a prefetch address register (PRADDR: PRefetch ADDress Register) 790. The prefetch address register 790 is a register that sets a prefetch address to be prefetched to the instruction cache 120 as a branch destination line. This prefetch address is held in the lower 12 bits of the prefetch address register 790.

図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バイトを想定している。   FIG. 34B is a diagram showing an instruction format of an MTSI_PRADDR (Move To Special register Immediate-PRADDR) instruction for setting a value for the prefetch address register 790. This MTSI_PRADDR instruction is one of special (SPECIAL) instructions, and is an instruction for setting an immediate value in a specific register (here, prefetch address register 790). The 17th to 21st bits of this instruction represent the prefetch address register PRADDR. The 11th to 8th bits of this instruction are set to the 11th to 8th bits of the prefetch address register 790. Thereby, the address of the branch destination line to be prefetched is set. In this case, the specification of the instruction cache 120 is assumed to be a 4-Kbyte 2-way set associative method, a total of 16 lines of 8 lines per way, and an entry size of 256 bytes.

また、他の例として、第1の実施の形態において説明した命令パケット300に区分けして、命令ヘッダ310のプリフェッチ設定フィールド315を利用することが考えられる。この場合、図4の命令ヘッダ310の第11乃至第8ビットのプリフェッチ設定フィールド315が、プリフェッチアドレスレジスタの第11乃至第8ビットに設定される。これにより、特殊命令を用いることなく、プリフェッチ対象となる分岐先ラインのアドレスを設定することができる。   As another example, it can be considered that the prefetch setting field 315 of the instruction header 310 is used by dividing the instruction packet 300 described in the first embodiment. In this case, the 11th to 8th bits of the prefetch setting field 315 of the instruction header 310 of FIG. 4 are set to the 11th to 8th bits of the prefetch address register. Thereby, the address of the branch destination line to be prefetched can be set without using a special instruction.

[命令実行処理]
図35は、本発明の第4の実施の形態における命令実行のための機能構成例を示す図である。この構成例では、プログラムカウンタ111の状態を検知して、命令キャッシュ120およびプリフェッチキュー171へプリフェッチを行うことを想定している。この構成例は、プリフェッチタイミング検出部750と、ネクストラインプリフェッチ部760と、分岐先ラインプリフェッチ部770とを備えている。これらの構成は、ブロック構成のネクストライン分岐先ラインプリフェッチ部250に相当するものである。
[Instruction execution processing]
FIG. 35 is a diagram illustrating a functional configuration example for instruction execution according to the fourth embodiment of the present invention. In this configuration example, it is assumed that the state of the program counter 111 is detected and prefetching is performed to the instruction cache 120 and the prefetch queue 171. This configuration example includes a prefetch timing detection unit 750, a next-implement fetch unit 760, and a branch destination line prefetch unit 770. These configurations correspond to the next-line branch destination line prefetch unit 250 having a block configuration.

プリフェッチタイミング検出部750は、プログラムカウンタ111の状態を参照して、命令プリフェッチのタイミングを検出するものである。この第4の実施の形態では、ネクストラインおよび分岐先ラインの両方向をプリフェッチするため、早期にプリフェッチを開始することが望ましい。したがって、例えばキャッシュラインの先頭の命令が実行開始された時点で命令プリフェッチのタイミングを検出することが考えられる。   The prefetch timing detector 750 refers to the state of the program counter 111 and detects the instruction prefetch timing. In the fourth embodiment, since both the next line and the branch destination line are prefetched, it is desirable to start prefetching early. Therefore, for example, it is conceivable to detect the instruction prefetch timing at the start of execution of the instruction at the head of the cache line.

ネクストラインプリフェッチ部760は、ネクストラインをプリフェッチするものである。システムメモリ140からプリフェッチされたネクストラインは、命令キャッシュ120に格納される。   The next implement fetch unit 760 prefetches the next line. The next line prefetched from the system memory 140 is stored in the instruction cache 120.

分岐先ラインプリフェッチ部770は、分岐先ラインをプリフェッチするものである。分岐先ラインは、現ラインからの相対位置のキャッシュラインを固定的に使用するようにしてもよく、また、上述のプリフェッチアドレスレジスタ790に設定されたアドレスを使用するようにしてもよい。システムメモリ140からプリフェッチされた分岐先ラインは、命令キャッシュ120およびプリフェッチキュー171に格納される。   The branch destination line prefetch unit 770 prefetches the branch destination line. As the branch destination line, the cache line relative to the current line may be used in a fixed manner, or the address set in the prefetch address register 790 may be used. The branch destination line prefetched from the system memory 140 is stored in the instruction cache 120 and the prefetch queue 171.

図36は、本発明の第4の実施の形態における命令実行のための処理手順例を示す図である。   FIG. 36 is a diagram illustrating an example of a processing procedure for instruction execution according to the fourth embodiment of the present invention.

まず、プリフェッチタイミング検出部750においてキャッシュラインの先頭の命令が実行開始されたことが検知されると(ステップS961)、ネクストラインプリフェッチ部760によってネクストラインがプリフェッチされる(ステップS962)。また、分岐先ラインプリフェッチ部770によって分岐先ラインがプリフェッチされる(ステップS963)。以下、これらの処理が繰り返される。これにより、ネクストラインおよび分岐先ラインの両方向の命令列がプリフェッチされる。   First, when it is detected by the prefetch timing detection unit 750 that the instruction at the head of the cache line has been started (step S961), the next line is prefetched by the next implementation fetch unit 760 (step S962). The branch destination line prefetch unit 770 prefetches the branch destination line (step S963). Thereafter, these processes are repeated. As a result, instruction sequences in both directions of the next line and the branch destination line are prefetched.

このように、本発明の第4の実施の形態によれば、分岐先ラインをネクストラインとは異なるラインアドレスなるよう配置しておいて、ネクストラインおよび分岐先ラインの両方向の命令列をプリフェッチすることにより、スループットを改善することができる。   As described above, according to the fourth embodiment of the present invention, the branch destination line is arranged to have a line address different from that of the next line, and instruction sequences in both directions of the next line and the branch destination line are prefetched. As a result, throughput can be improved.

<5.各実施の形態の組合せ>
ここまでは、本発明の第1乃至第4の実施の形態について別々に説明したが、これらの実施の形態は適宜組み合わせて実施することが可能である。
<5. Combination of embodiments>
Up to this point, the first to fourth embodiments of the present invention have been described separately, but these embodiments can be implemented in appropriate combination.

[第1の実施の形態と第2の実施の形態の組合せ]
本発明の第1の実施の形態では、命令ヘッダ310の分岐予測フラグ311に従ってプリフェッチの有無を決定していたが、その予測が外れることを回避するために本発明の第2の実施の形態を組み合わせることが有効である。すなわち、第2の実施の形態によりプリフェッチの判断を遅らせることによって、分岐の有無を先に確定させることができ、正しいキャッシュラインをプリフェッチすることができる。
[Combination of the first embodiment and the second embodiment]
In the first embodiment of the present invention, the presence / absence of prefetching is determined according to the branch prediction flag 311 of the instruction header 310, but in order to avoid the prediction being lost, the second embodiment of the present invention is used. It is effective to combine them. That is, by delaying the prefetch determination according to the second embodiment, the presence or absence of a branch can be determined first, and a correct cache line can be prefetched.

[第1または第2の実施の形態と第3の実施の形態の組合せ]
本発明の第3の実施の形態では、両方向のプリフェッチを行うため、アドレスが離れた分岐先への分岐命令や、else節のないif文の場合には適用が困難なことがある。例えば、多方向分岐の全てのケースが同じ命令数でない場合には命令数が同じ数になるまでNOP命令を挿入する必要がある。また、ある程度長い命令例になってしまうと命令実行のスループットとキャッシュの利用効率が低下してしまう。これに対して、第1の実施の形態の分岐予測フラグ311を利用して、離れたアドレスへ分岐する可能性が高い場合には両方向のプリフェッチを行わないようにすることにより、第3の実施の形態のデメリットを回避することができる。また、第2の実施の形態のように命令プリフェッチタイミングを遅らせることにより分岐の有無を先に確定させ、無駄なプリフェッチを行わないようにすることにより、第3の実施の形態のデメリットを回避することができる。
[Combination of the first or second embodiment and the third embodiment]
Since the third embodiment of the present invention performs prefetching in both directions, it may be difficult to apply in the case of a branch instruction to a branch destination with a remote address or an if statement without an else clause. For example, when all cases of multi-directional branch are not the same number of instructions, it is necessary to insert NOP instructions until the number of instructions becomes the same number. In addition, if an instruction example is long to some extent, instruction execution throughput and cache utilization efficiency are reduced. On the other hand, by using the branch prediction flag 311 of the first embodiment, the prefetching in both directions is not performed when there is a high possibility of branching to a distant address. The disadvantages of this form can be avoided. Further, as in the second embodiment, by delaying the instruction prefetch timing, the presence / absence of a branch is determined first, and unnecessary prefetch is not performed, thereby avoiding the disadvantages of the third embodiment. be able to.

[第1または第2の実施の形態と第4の実施の形態の組合せ]
本発明の第4の実施の形態では、ネクストラインおよび分岐先ラインを常にプリフェッチするようにしていたが、現ラインに分岐命令を含まない場合は分岐先ラインのプリフェッチが無駄になってしまうというデメリットがある。そこで、第1の実施の形態の分岐予測フラグ311を利用して、ネクストラインを実行する可能性が高いと判断した場合にはネクストラインのみをプリフェッチすることにより、第4の実施の形態のデメリットを回避することができる。また、第2の実施の形態のように命令プリフェッチタイミングを遅らせることにより分岐の有無を先に確定させ、無駄なプリフェッチを行わないようにすることにより、第4の実施の形態のデメリットを回避することができる。
[Combination of the first or second embodiment and the fourth embodiment]
In the fourth embodiment of the present invention, the next line and the branch destination line are always prefetched. However, if the current line does not include a branch instruction, the prefetch of the branch destination line is wasted. There is. Therefore, when the branch prediction flag 311 of the first embodiment is used and it is determined that there is a high possibility of executing the next line, only the next line is prefetched, thereby demerit of the fourth embodiment. Can be avoided. Further, as in the second embodiment, by delaying the instruction prefetch timing, the presence / absence of a branch is determined first, so that the unnecessary prefetch is not performed, thereby avoiding the disadvantages of the fourth embodiment. be able to.

[第3の実施の形態と第4の実施の形態の組合せ]
本発明の第4の実施の形態では、ネクストラインおよび分岐先ラインの2方向のプリフェッチを対象としていたが、第3の実施の形態を適用することにより、3方向以上の多方向分岐にも適用が可能となる。すなわち、複数の命令列が混在したキャッシュラインを2方向プリフェッチすることにより、多方向分岐への適用が可能となる。
[Combination of the third embodiment and the fourth embodiment]
In the fourth embodiment of the present invention, the prefetch in the two directions of the next line and the branch destination line is targeted. However, by applying the third embodiment, the present invention can also be applied to a multidirectional branch of three or more directions. Is possible. That is, it is possible to apply to a multi-directional branch by bi-directional prefetching a cache line in which a plurality of instruction sequences are mixed.

このとき、ラインサイズ程度の範囲内の小さな分岐については第3の実施の形態を適用して、より広範囲への分岐については第4の実施の形態を適用するように使い分けることにより、両者のデメリットを回避することができる。すなわち、第4の実施の形態では、実行のスループットが低下しない一方で、命令キャッシュの利用効率は常に半分になるというデメリットがある。また、第3の実施の形態では、広範囲への分岐に適用してもあまり効果が得られないというデメリットがある。両者を組み合わせることにより、互いのデメリットを回避することができる。   At this time, the third embodiment is applied to small branches within the range of the line size, and the fourth embodiment is applied to branching to a wider range. Can be avoided. That is, the fourth embodiment has a demerit that the use efficiency of the instruction cache is always halved while the execution throughput does not decrease. Further, the third embodiment has a demerit that it is not very effective even when applied to a branch to a wide range. By combining both, the disadvantages of each other can be avoided.

[その他の組合せ]
ここで挙げた以外の組合せについても可能であり、互いの効果をより向上させることができる。例えば、第1または第2の実施の形態と、第3の実施の形態と、第4の実施の形態とを組み合わせることにより、上述したそれぞれの効果を互いにより向上させることができる。
[Other combinations]
Combinations other than those listed here are also possible, and the mutual effects can be further improved. For example, by combining the first or second embodiment, the third embodiment, and the fourth embodiment, the above-described effects can be further improved.

なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、本発明の実施の形態において明示したように、本発明の実施の形態における事項と、特許請求の範囲における発明特定事項とはそれぞれ対応関係を有する。同様に、特許請求の範囲における発明特定事項と、これと同一名称を付した本発明の実施の形態における事項とはそれぞれ対応関係を有する。ただし、本発明は実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において実施の形態に種々の変形を施すことにより具現化することができる。   The embodiment of the present invention shows an example for embodying the present invention. As clearly shown in the embodiment of the present invention, the matters in the embodiment of the present invention and the claims Each invention-specific matter in the scope has a corresponding relationship. Similarly, the matters specifying the invention in the claims and the matters in the embodiment of the present invention having the same names as the claims have a corresponding relationship. However, the present invention is not limited to the embodiments, and can be embodied by making various modifications to the embodiments without departing from the gist of the present invention.

また、本発明の実施の形態において説明した処理手順は、これら一連の手順を有する方法として捉えてもよく、また、これら一連の手順をコンピュータに実行させるためのプログラム乃至そのプログラムを記憶する記録媒体として捉えてもよい。この記録媒体として、例えば、CD(Compact Disc)、MD(MiniDisc)、DVD(Digital Versatile Disk)、メモリカード、ブルーレイディスク(Blu-ray Disc(登録商標))等を用いることができる。   The processing procedure described in the embodiment of the present invention may be regarded as a method having a series of these procedures, and a program for causing a computer to execute the series of procedures or a recording medium storing the program May be taken as As this recording medium, for example, a CD (Compact Disc), an MD (MiniDisc), a DVD (Digital Versatile Disk), a memory card, a Blu-ray Disc (registered trademark), or the like can be used.

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 プリフェッチアドレスレジスタ
DESCRIPTION OF SYMBOLS 11 Instruction fetch stage 12 Adder 13 Next implement fetch part 14 Next line branch destination line prefetch part 17, 170, 171 Prefetch queue 18, 111 Program counter 21 Instruction decode stage 31 Register fetch stage 41 Instruction execution stage 110 Processor core 112 Instruction register 113 instruction decoder 114 execution unit 115 register file 120 instruction cache 130 data cache 140 system memory 150 next-implement fetch unit 151 setting step address register 152 multiplication unit 153 prefetch start address setting register 154 address comparison unit 155 instruction type setting register 156 execution number setting Register 157 Instruction type comparison unit 158 execution times Counter 159 Execution count comparison section 160 Packet demultiplexer 180 Instruction queue 191 Instruction dictionary index 192 Instruction dictionary table 250 Next line branch destination line prefetch section 320 Instruction payload 411 Program holding section 412 Branch profile holding section 413 Instruction packet holding section 420 Instruction packet generation Section 430 Branch prediction flag setting section 440 Instruction compression section 450 Instruction packet separation section 460 Branch prediction flag determination section 470 Instruction prefetch section 480 Instruction decompression section 490 Instruction execution section 510 Program execution state generation section 520 Detection state setting section 530 Instruction prefetch timing detection Section 570 Instruction prefetch section 590 Instruction execution section 610 Instruction fetch section 620 Instruction decode section 630 Instruction execution section 640 Addition Control register 650 Addition control unit 660 Program counter 701 Program holding unit 702 Object code holding unit 710 Branch instruction extraction unit 720 Branch instruction arrangement unit 730 Branch destination instruction arrangement unit 740 Object code generation unit 750 Prefetch timing detection unit 760 Next implement fetch unit 770 Branch destination line prefetch unit 790 Prefetch address register

Claims (7)

プログラムの命令列を所定サイズ毎に区切った命令ペイロードと当該命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐が生じる可能性の高さを示す分岐予測情報を含む命令ヘッダとからなる命令パケットを保持する命令パケット保持部と、
前記命令パケット保持部に保持された前記命令パケットを前記命令ペイロードと前記命令ヘッダとに分離する命令パケット分離部と、
前記命令ヘッダに含まれる前記分岐予測情報に基づいて当該命令ヘッダに対応する命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐する可能性が高いと判定した場合には次の命令パケットのプリフェッチ抑止を指示する分岐予測情報判定部と、
前記プリフェッチ抑止が指示されない限り前記次の命令パケットのプリフェッチを実行する命令プリフェッチ部と
を具備する命令フェッチ装置。
Indicates the high possibility of branching to an instruction that is not included in either the instruction payload or the next instruction payload due to an instruction payload obtained by dividing the instruction sequence of the program by a predetermined size and a branch instruction included in the instruction payload. An instruction packet holding unit for holding an instruction packet including an instruction header including branch prediction information;
An instruction packet separation unit for separating the instruction packet held in the instruction packet holding unit into the instruction payload and the instruction header;
Based on the branch prediction information included in the instruction header, there is a high possibility of branching to an instruction not included in either the instruction payload or the next instruction payload by a branch instruction included in the instruction payload corresponding to the instruction header. A branch prediction information determination unit for instructing prefetch suppression of the next instruction packet,
An instruction fetch device comprising: an instruction prefetch unit that executes prefetch of the next instruction packet unless the prefetch suppression is instructed.
前記命令パケット分離部によって分離された前記命令ペイロードに含まれる命令辞書参照命令に基づいて当該命令辞書参照命令に対応する命令列を命令辞書テーブルから読み出して伸張する命令実行部をさらに具備する請求項1記載の命令フェッチ装置。   The apparatus further comprises an instruction execution unit that reads an instruction sequence corresponding to the instruction dictionary reference instruction from the instruction dictionary table based on an instruction dictionary reference instruction included in the instruction payload separated by the instruction packet separation unit and decompresses the instruction string. The instruction fetch device according to claim 1. 前記命令ヘッダに含まれる命令ペイロード圧縮フラグに基づいて当該命令ヘッダに対応する命令ペイロードから命令列を伸張する命令伸張部をさらに具備する請求項2記載の命令フェッチ装置。   3. The instruction fetch apparatus according to claim 2, further comprising: an instruction decompression unit that decompresses an instruction string from an instruction payload corresponding to the instruction header based on an instruction payload compression flag included in the instruction header. プログラムの命令列を所定サイズ毎に区切った命令ペイロードと当該命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐が生じる可能性の高さを示す分岐予測情報を含む命令ヘッダとからなる命令パケットを保持する命令パケット保持部と、
前記命令パケット保持部に保持された前記命令パケットを前記命令ペイロードと前記命令ヘッダとに分離する命令パケット分離部と、
前記命令パケット分離部によって分離された前記命令ペイロードに含まれる命令列を実行する命令実行部と、
前記命令ヘッダに含まれる前記分岐予測情報に基づいて当該命令ヘッダに対応する命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐する可能性が高いと判定した場合には次の命令パケットのプリフェッチ抑止を指示する分岐予測情報判定部と、
前記プリフェッチ抑止が指示されない限り前記次の命令パケットのプリフェッチを実行して前記命令パケット分離部に次の命令パケットを供給する命令プリフェッチ部と
を具備するプロセッサ。
Indicates the high possibility of branching to an instruction that is not included in either the instruction payload or the next instruction payload due to an instruction payload obtained by dividing the instruction sequence of the program by a predetermined size and a branch instruction included in the instruction payload. An instruction packet holding unit for holding an instruction packet including an instruction header including branch prediction information;
An instruction packet separation unit for separating the instruction packet held in the instruction packet holding unit into the instruction payload and the instruction header;
An instruction execution unit that executes an instruction sequence included in the instruction payload separated by the instruction packet separation unit;
Based on the branch prediction information included in the instruction header, there is a high possibility of branching to an instruction not included in either the instruction payload or the next instruction payload by a branch instruction included in the instruction payload corresponding to the instruction header. A branch prediction information determination unit for instructing prefetch suppression of the next instruction packet,
A processor comprising: an instruction prefetch unit that executes prefetch of the next instruction packet and supplies the next instruction packet to the instruction packet separation unit unless the prefetch suppression is instructed.
プログラムの命令列を所定サイズ毎に区切った命令ペイロードと当該命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐が生じる可能性の高さを示す分岐予測情報を含む命令ヘッダとからなる命令パケットを保持する命令パケット保持部に保持された前記命令パケットを前記命令ペイロードと前記命令ヘッダとに分離する命令パケット分離手順と、
前記命令ヘッダに含まれる前記分岐予測情報に基づいて当該命令ヘッダに対応する命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐する可能性が高いと判定した場合には次の命令パケットのプリフェッチ抑止を指示する分岐予測情報判定手順と、
前記プリフェッチ抑止が指示されない限り前記次の命令パケットのプリフェッチを実行する命令プリフェッチ手順と
を具備する命令フェッチ方法。
Indicates the high possibility of branching to an instruction that is not included in either the instruction payload or the next instruction payload due to an instruction payload obtained by dividing the instruction sequence of the program by a predetermined size and a branch instruction included in the instruction payload. An instruction packet separation procedure for separating the instruction packet held in an instruction packet holding unit that holds an instruction packet including an instruction header including branch prediction information into the instruction payload and the instruction header;
Based on the branch prediction information included in the instruction header, there is a high possibility of branching to an instruction not included in either the instruction payload or the next instruction payload by a branch instruction included in the instruction payload corresponding to the instruction header. Branch prediction information determination procedure for instructing prefetch suppression of the next instruction packet,
And an instruction prefetch procedure for executing prefetch of the next instruction packet unless the prefetch suppression is instructed.
プログラムの命令列を所定サイズ毎に区切った命令ペイロードと命令ヘッダとからなる命令パケットを生成する命令パケット生成部と、
前記命令ペイロードの各々について当該命令ペイロードに含まれる分岐命令によって当該命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐が生じる可能性の高さを示す分岐予測情報を当該命令ペイロードに対応する命令ヘッダに設定する分岐予測情報設定部と、
前記分岐予測情報を設定された命令ヘッダを含む命令パケットを保持する命令パケット保持部と
を具備する命令パケット生成装置。
An instruction packet generation unit that generates an instruction packet including an instruction payload and an instruction header obtained by dividing a program instruction sequence into predetermined sizes;
For each of the instruction payloads, branch prediction information indicating the likelihood of branching to an instruction not included in either the instruction payload or the next instruction payload due to a branch instruction included in the instruction payload is included in the instruction payload. A branch prediction information setting unit set in the corresponding instruction header;
An instruction packet generation apparatus comprising: an instruction packet holding unit that holds an instruction packet including an instruction header in which the branch prediction information is set.
連続する2つの命令パケットにおける前記分岐予測情報が当該命令パケットの命令ペイロードまたは次の命令ペイロードの何れにも含まれない命令へ分岐が生じる可能性が高い旨を示している場合には前記2つの命令パケットにそれぞれ含まれる2つの分岐命令が同じ命令ペイロードに収まるように前記2つの分岐命令間の命令を圧縮する命令圧縮部をさらに具備する請求項6記載の命令パケット生成装置。   When the branch prediction information in two consecutive instruction packets indicates that there is a high possibility that a branch will occur to an instruction that is not included in either the instruction payload of the instruction packet or the next instruction payload. The instruction packet generation device according to claim 6, further comprising an instruction compression unit that compresses an instruction between the two branch instructions so that the two branch instructions included in the instruction packet can be accommodated in the same instruction payload.
JP2010075779A 2010-03-29 2010-03-29 Instruction fetch device, instruction packet generation device, processor, and instruction fetch method Pending JP2011209902A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010075779A JP2011209902A (en) 2010-03-29 2010-03-29 Instruction fetch device, instruction packet generation device, processor, and instruction fetch method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010075779A JP2011209902A (en) 2010-03-29 2010-03-29 Instruction fetch device, instruction packet generation device, processor, and instruction fetch method

Publications (1)

Publication Number Publication Date
JP2011209902A true JP2011209902A (en) 2011-10-20

Family

ID=44940911

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010075779A Pending JP2011209902A (en) 2010-03-29 2010-03-29 Instruction fetch device, instruction packet generation device, processor, and instruction fetch method

Country Status (1)

Country Link
JP (1) JP2011209902A (en)

Similar Documents

Publication Publication Date Title
JP2011209904A (en) Instruction fetch apparatus and processor
US10664281B2 (en) Apparatuses and methods for dynamic asymmetric scaling of branch predictor tables
CN101965554B (en) System and method of selectively committing a result of an executed instruction
US8601239B2 (en) Extended register addressing using prefix instruction
JP2011209905A (en) Instruction fetch apparatus, processor and program counter addition control method
CN107077329B (en) Method and apparatus for implementing and maintaining a stack of predicate values
CN107111550B (en) Method and apparatus for hiding page miss transition latency for program extraction
US9632937B2 (en) Pre-decoding analysis based configuration information cache management method and system
KR101851439B1 (en) Systems, apparatuses, and methods for performing conflict detection and broadcasting contents of a register to data element positions of another register
TWI620125B (en) Instruction and logic to control transfer in a partial binary translation system
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
US20120204008A1 (en) Processor with a Hybrid Instruction Queue with Instruction Elaboration Between Sections
US20190138451A1 (en) Systems and methods for adaptive multipath probability (amp) prefetcher
EP3588311B1 (en) Prefetcher for delinquent irregular loads
JP2019537163A (en) Operation cache
US20200210193A1 (en) Hardware profiler to track instruction sequence information including a blacklisting mechanism and a whitelisting mechanism
US10069512B2 (en) Systems, methods, and apparatuses for decompression using hardware and software
US7143268B2 (en) Circuit and method for instruction compression and dispersal in wide-issue processors
JP2011209903A (en) Instruction fetch device, processor, program conversion device, and program conversion method
US20140189322A1 (en) Systems, Apparatuses, and Methods for Masking Usage Counting
JP2011209902A (en) Instruction fetch device, instruction packet generation device, processor, and instruction fetch method
Jin et al. NOP compression scheme for high speed DSPs based on VLIW architecture
TW202416131A (en) Apparatus and method for constant detection during compress operations
JP5794172B2 (en) Processor, system and method of operating processor