JP3811140B2 - 情報処理装置 - Google Patents

情報処理装置 Download PDF

Info

Publication number
JP3811140B2
JP3811140B2 JP2003133355A JP2003133355A JP3811140B2 JP 3811140 B2 JP3811140 B2 JP 3811140B2 JP 2003133355 A JP2003133355 A JP 2003133355A JP 2003133355 A JP2003133355 A JP 2003133355A JP 3811140 B2 JP3811140 B2 JP 3811140B2
Authority
JP
Japan
Prior art keywords
instruction
address
prefetch
data
cpu
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.)
Expired - Fee Related
Application number
JP2003133355A
Other languages
English (en)
Other versions
JP2004334773A (ja
Inventor
鉄平 広津
光太郎 島村
昇 杉原
康弘 中塚
輝昭 酒田
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2003133355A priority Critical patent/JP3811140B2/ja
Priority to US10/842,638 priority patent/US20050027921A1/en
Publication of JP2004334773A publication Critical patent/JP2004334773A/ja
Application granted granted Critical
Publication of JP3811140B2 publication Critical patent/JP3811140B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching

Landscapes

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

Description

【0001】
【発明の属する技術分野】
本発明は、CPUとメモリと先読みバッファとを備えた情報処理装置における、分岐命令およびデータアクセス命令の先読み技術に関する。
【0002】
【従来の技術】
近年、CPUの動作周波数が格段に向上している一方、大容量化に対応するため、メモリの動作周波数の向上はCPUのそれと比較して穏やかである。このようにCPUとメモリとの動作周波数が乖離しているため、システム全体の性能が向上しないという問題が顕著になってきている。
【0003】
この問題を解決するため、高速に読み出しが可能な先読みバッファあるいはキャッシュに予め必要となる命令を格納し、これらから命令を読み出すことで、メモリ読み出しの遅延を隠蔽し、性能の向上を図ることが一般的に行われている。
【0004】
ここで、実行されているプログラムに分岐命令がある場合は、分岐先の命令を適切に予測して先読みバッファ等に読み出す先読みを行なう必要がある。
【0005】
この予測手法として、分岐命令の実行履歴に基づいて分岐先アドレスを予測し、予測した分岐先命令をメモリから先読みバッファに予め読み出しておくものがある。しかし、分岐命令により処理が実際に分岐した場合、命令が実行される際に上記予測が行なわる構成であると、分岐後の命令列の先読みが間に合わないという問題があった。
【0006】
そこで、特許文献1に開示されているように、命令の先読みの段階で分岐の可能性を予測し、その後の命令列を先読みする手法が考えられている。
【0007】
【特許文献1】
特開平6−274341号公報
【0008】
【発明が解決しようとする課題】
特許文献1に開示されている技術では、分岐命令の分岐先命令の先読みのみが実行され、データアクセスの多いプログラムでは、性能が向上しないという問題が依然として残る。
【0009】
近年一般的になっている固定命令長のプロセッサでは、命令長を超えるビット幅を持つデータを扱うために、プロセッサ内のプログラムカウンタ値と命令コードに埋め込まれた定数(即値)を実行時に加算し、その値をアクセス先のアドレスとするPC相対データアクセス命令を持つ。
【0010】
ただし、分岐命令とは異なり、データアクセス命令の場合、当該命令に伴うデータアクセスが発生した後、引き続き以前の命令列を実行する。
【0011】
従来の技術では、このような処理への対処は考慮されず、PC相対データアクセス命令の先読みなどの処理は行なわれていない。このため、データアクセスの多いプログラムでは、性能を高めることが難しい。
【0012】
本発明の目的は、データアクセスの多いプログラムにおいても、効果的な先読みを行い、プログラムの種類に依存しない高性能な情報処理技術を提供することにある。
【0013】
【課題を解決するための手段】
上記目的を達成するため、本発明は、CPUとメモリと先読みバッファとを搭載した情報処理装置において、分岐命令およびデータアクセス命令のターゲットアドレスをその命令の実行前に、出力する先読みアドレス生成部を有し、先読みアドレス生成部が出力するターゲットアドレスの命令またはデータを予めメモリから読み出し先読みバッファに格納することを特徴とする。
【0014】
具体的には、CPUと、メモリと、予め定められた数の命令およびデータからなる命令列を当該命令列内の命令またはデータを前記CPUが実行する前に格納する先読みバッファとを備える情報処理装置であって、前記命令列が前記先読みバッファに格納された時点で、当該命令列内に含まれる所定の分岐命令またはデータアクセス命令を選択し、当該選択した命令のターゲットアドレスを演算する先読みアドレス生成手段と、前記先読みアドレス生成手段において演算された前記ターゲットアドレスの命令またはデータが含まれる前記命令列が前記先読みバッファに格納されているか否かを判断し、格納されていない場合、当該命令列を前記メモリから読み出し前記先読みバッファに格納する先読みバッファ格納手段とを備えることを特徴とする情報処理装置を提供する。
【0015】
【発明の実施の形態】
図1は本発明のー実施形態の情報処理装置の全体図である。
【0016】
本情報処理装置は、メモリ(1)、CPU(2)、先読みアドレス生成部(4)、先読みバッファ(7)、タグ(6)、リードデータ選択部(5)、制御部(3)から構成される。
【0017】
メモリ(1)はプログラムを格納し、信号ライン11でメモリアドレス信号memadr[15:4]を、信号ライン12でメモリリード信号memrdを受け取り、信号ライン13でメモリリードデータ信号memdata[127:0]を出力する。
【0018】
ここで、memadr[15:0]の表記は、memadr[15]、memadr[14]、・・・・、memadr[0]からなる16ビットの信号を表記上まとめて記述したものである。本明細書において、他の信号に関しても同様である。
【0019】
なお、本実施形態では、メモリのアクセスレイテンシを2、読み出し幅を128ビットとする。
【0020】
CPU(2)は、必要な命令コードをメモリ(1)などから読み出し、プログラムを実行する。図示しないが、メモリ等に格納されたデータに対して必要な数値演算、論理演算を行なうためのALU(算術演算ユニット)、プログラムカウンタ、アキュムレータ、汎用レジスタ等を備える演算部と、入力された命令をデコードすることによって前記演算部の動作制御信号を生成する動作制御部とを備える。
【0021】
CPU(2)は、信号ライン14でCPU(2)がアクセスする対象である命令コードおよびデータのアドレスを示すCPUアドレス信号cpuadr[15:0]を、信号ライン16でCPUのアクセス種類を示すCPUコマンド信号cpucmd[1:0]を出力する。CPUコマンド信号の示すアクセスの種類は後述する。
【0022】
CPU(2)は、さらに、信号ライン15でCPU(2)が現在実行している命令のアドレスを示すプログラムカウンタ信号pc[15:0]を先読みアドレス生成部(4)の演算用に出力する。先読みアドレス生成部(4)は、pc[15:0]と命令コード内の即値を用いて、分岐先のアドレスを得る。
【0023】
CPU(2)には、さらに、cpuadr[15:0]が示すアドレスにある命令又はデータの読み出し値であるCPUリードデータ信号cpudata[15:0]が信号ライン17でリードデータ選択部(5)から入力される。
【0024】
CPU(2)には、さらに、cpudata[15:0]が確定していない場合にCPUアクセスを停止するためのCPUウエイト信号cpuwaitが信号ライン18で制御部(3)から入力される。
【0025】
なお、本実施形態では、CPU(2)の命令、データ幅、アドレス空間を、それぞれ、16ビットとする。
【0026】
先読みアドレス生成部(4)は、先読みバッファ(7)に所定数の命令またはデータからなる命令列が格納されると、格納された命令列の中から分岐命令およびデータアクセス命令を、その命令が実行される前に検出し、それらの命令に従って次にアクセスするターゲットアドレスを演算し、そのターゲットアドレスが含まれる命令列をメモリ(1)から先読みバッファ(7)へ読み出す要求を生成する。
【0027】
ここで、以後、本明細書中において、分岐命令およびデータアクセス命令を、要先読み命令と呼ぶ。また、要先読み命令に従って、次にアクセスするターゲットアドレスを演算し、そのターゲットアドレスが含まれる命令列をメモリ(1)から先読みバッファ(7)へ読み出す要求を先読み要求と呼ぶ。
【0028】
先読みアドレス生成部(4)は、信号ライン19で要先読み命令のターゲットアドレスを示す先読みアドレス信号pfadr[15:0]を、信号ライン20で先読み要求が発生したことを示す信号である先読み要求信号pfreq[1:0]を制御部(3)に出力する。
【0029】
先読みアドレス生成部(4)は、さらに、CPU(2)から、cpuadr[15:0]とpc[15:0]を、リードデータ選択部(5)から信号ライン21でヒットバッファ出力信号hbuf[127:0]を、制御部(3)から、信号ライン27で信号pfack、信号ライン28でhbuf[127:0]の入力タイミングを示す先読みアップデート信号pdupdを受け、pfadr[15:0]およびpfreq[1:0]の演算に用いる。pfackは、所定の命令列から抽出した要先読み命令に従って先読み要求を処理した後に、さらに同じ命令列内から要先読み命令を抽出して先読み要求を進める必要がある場合に出力される信号である。このpfackとhbufの詳細は、後述する。
【0030】
先読みバッファ(7)は、CPU(2)が要先読み命令を実行する前に、当該要先読み命令のターゲットアドレスへのアクセスに備えて、当該要先読み命令のターゲットアドレスの命令またはデータをメモリ(1)から読み出して保持する。
【0031】
先読みバッファ(7)は、信号ライン33で先読みバッファが保持している値の更新タイミングを示すバッファアップデート信号bufupd[4:0]の入力を受け、memdata[127:0]の信号を取りこむ。
【0032】
また、先読みバッファ(7)は、信号ライン24でヒットしたバッファを示す先読みバッファ出力信号buf<4:0>[127:0]を出力する。ここで、buf<4:0>[127:0]は、buf4[127:0]、buf3[127:0]、..、buf0[127:0]の5本の信号を表記上まとめて記述したものである。
【0033】
タグ(6)は、先読みバッファ(7)が保持する命令およびデータのアドレスを保持する。
【0034】
タグ(6)は、信号ライン32でタグが保持している値を更新するタイミングを示すタグアップデート信号tagupd[4:0]の入力を受け、memadr[15:4]を取りこむ。
【0035】
また、タグ(6)は、信号ライン23で先読みバッファが保持する命令およびデータのアドレスを示すタグ出力信号tag<4:0>[15:4]を出力する。ここで、tag<4:0>[15:4]は、tag4[15:4]、tag3[15:4]、..、tag0[15:4]の5本の信号を表記上まとめて記述したものである。
【0036】
リードデータ選択部(5)は、先読みアドレス生成部(4)により先読み要求がなされた命令またはデータが、先読みバッファ(7)に保持されているか判定する。ここで、制御部(3)は、先読みアドレス生成部(4)により先読み要求がなされている場合、このリードデータ選択部(5)の判定に従って、先読みを実行するかどうか判断する。
【0037】
また、リードデータ選択部(5)は、CPU(2)からアクセス要求のある命令またはデータが先読みバッファ(7)に保持されているか判定し、先読みバッファ(7)に保持されていれば、先読みバッファ(7)からCPUに出力する。
【0038】
リードデータ選択部(5)は、tag<4:0>[127:0]とpfadr[15:0]の上位15〜4ビットであるpfadr[15:4]との比較結果を、信号ライン30で比較信号hit0[4:0]として、そして、tag<4:0>[127:0]とcpuadr[15:0]の上位15〜4ビットであるcpuadr[15:4]との比較結果を、信号ライン31で比較信号hit1[4:0]として出力する。これは、後述するように、15〜4ビットがエントリという命令およびデータを読み出す際の単位を指定するものであるためである。
【0039】
リードデータ選択部(5)は、さらに、buf<4:0>[127:0]およびmemdata[127:0]の中から、先読みアドレス生成部(4)の演算に用いられるヒットバッファ出力信号hbuf[127:0]を、信号ライン21で先読みアドレス生成部(4)に出力する。
【0040】
リードデータ選択部(5)は、さらに、buf<4:0>[127:0]およびmemdata[127:0]の中から、cpuadr[15:0]でアクセスを要求された命令およびデータを選択し、cpudata[15:0]に出力する。
【0041】
制御部(3)は、CPU(2)、メモリ(1)、先読みアドレス生成部(4)、先読みバッファ(7)、タグ(6)、リードデータ選択部(5)と、制御信号を入出力することにより、CPU(2)とメモリ(1)との間の命令およびデータ転送に関わる制御を行なう。
【0042】
具体的には、後述するように、各種の制御信号の入力を受けて、必要な制御信号を所定のタイミングでアサートすることにより、各部の処理を制御する。
【0043】
次に、各構成の詳細を説明する。詳細の説明に先立ち、本実施形態において想定しているCPU(7)が実行するプログラムの一例、当該プログラムが、本実施形態においてメモリに格納される場合の配置、および、CPU(7)の動作について説明する。
【0044】
図2に、CPU(1)が実行するプログラムの一例を示す。
【0045】
本プログラムは、アドレス0から順にシーケンシャルに処理を行なう一般の命令と、所定のデータにアクセスすることを指示するデータアクセス命令と、条件が成立した場合に所定のアドレスに処理を移行する条件分岐命令と、無条件に所定のアドレスに処理を移行する無条件分岐命令とを有する。
【0046】
本図において、一般の命令は「命令」、データアクセス命令は「MOV〜」、条件分岐命令は「BT〜」、無条件分岐命令は「BRA〜」と表す。
【0047】
本図において、アドレス8の“MOV @(32,PC), R1”は、“この命令のアドレスに32を足したアドレスのデータをR1に転送する”という処理を実行させるデータアクセス命令を表し、この命令が実行されるとアドレス40にあるデータ20へのアクセスが発生する。同様に、アドレス22の“MOV @(20,PC), R1”が実行されると、アドレス42にあるデータ21へのアクセスが発生する。
【0048】
アドレス18の“BT −18”は、“CPUのレジスタT=1の時、この命令のアドレスに(−18)を足したアドレスへ分岐する”という処理を実行させる条件分岐命令を表す。この命令が実行され、かつ、その時のCPUのレジスタT=1が成立している場合、アドレス0の命令へとプログラムの流れが移行する。
【0049】
アドレス26の“BAR 102”は、“この命令のアドレスに102を足したアドレスへ分岐する”という処理を実行させる無条件分岐命令を表す、この命令が実行されると、無条件にアドレス128の命令へとプログラムの流れが移行する。
【0050】
図3は、CPU(2)の動作を示すタイミングチャートである。
【0051】
図3上段は、CPU(2)が実行する命令列の一例と、その命令列を処理する際のCPU(2)のパイプライン動作とを示したものである。
【0052】
CPU(2)は、命令をメモリ(1)から読み込む命令フェッチ(IF)ステージ、命令をデコードする命令デコード(ID)ステージ、命令を実行する実行(EX)ステージ、メモリ(1)からデータを読み出すメモリアクセス(MA)ステージ、メモリ(1)への書きこみを行うライトバック(WB)ステージの5段パイプラインで1つの命令を処理する。
【0053】
なお、メモリ(1)へのアクセスは、各命令のIFステージ、MAステージ、WBステージで発生する。また、IFステージ、IDステージ、EXステージは必ず実行されるが、MAステージ,WBステージは命令によって実行されない場合がある。本図においては、実行されない命令ステージは小文字で示している。
【0054】
図3下段は、図3上段で示すパイプライン動作に対応して発生するCPU(2)の各入出力信号波形を示したものである。
【0055】
本図において、サイクル0は、アドレス0の命令0のIFステージである。サイクル0では、CPU(2)からcpuadrに0が、またcpucmdに命令フェッチを示す信号(IF)が出力され、アドレス0にある命令へのアクセスが発生する。
【0056】
なお、本実施形態では、CPU(2)のアクセス種類を示すCPUコマンド信号cpucmd[1:0]の出力値とアクセス種類との対応は、
2‘b00:アクセス無し(NOP)
2‘b01:命令フェッチ(IF)
2‘b10:メモリアクセス(MA)
と定義されている。
【0057】
続くサイクル1で、サイクル0のアクセスに対するアドレス0の命令がcpudataからCPU(2)に入力される。
【0058】
ここで、サイクル4は、アドレス2のデータアクセス命令“MOV @(14,PC), R1”のMAステージである。本命令は、アドレス16(=14+2)に格納されているデータをR1に転送するというものであるため、ここでは、CPU(2)からcpuadrに16が、また、cpucmdにMAが出力され、アドレス16にあるデータへのアクセスが発生する。
【0059】
サイクル5は、サイクル4のアクセスに対するデータが、メモリの出力遅延等の要因で確定しない状況を示している。この時、制御部(3)は、cpuwaitをアサートし、CPU(2)に命令処理の中断を指示する。
【0060】
続くサイクル6にてデータが確定し、cpuwaitのネゲートを受けて、CPU(2)は、処理を再開する。
【0061】
サイクル8は、アドレス8の分岐命令“BRA 56”のEXステージであるとともに、分岐先のアドレス64にある命令32のIFステージである。本サイクルでは、CPU(2)からcpuadrに64が、またcpucmdにIFが出力され、アドレス64にある命令へのアクセスが発生する。
【0062】
次に、図3のプログラムを実行する際の、メモリ(1)の動作を説明する。図4は、図3のプログラム実行時のメモリ(1)の動作を示すタイミングチャートである。
【0063】
サイクル0にて、制御部(3)が、memadrに0を出力し、memrdをアサートすることで、メモリ(1)に対してアドレス0へのリード要求を出す。本実施形態では、メモリのアクセスレイテンシは2サイクルと設定されているため、このアクセスに対するデータは、サイクル2にて確定し、ここで、メモリ(1)は、memdataに命令またはデータを出力する。
【0064】
要先読み命令を先読みする構成無しに、このようなアクセスレイテンシ2を持つメモリ(1)に,図2で示すプログラムを格納して実行すると、図12に示すように、メモリアクセス毎にCPUに対してcpuwaitを1サイクルアサートすることになり、性能が低下する。
【0065】
図5は、本実施形態における図2で示したプログラムをメモリ(1)に格納する場合の、命令およびデータの配置を模式的に示したものである。
【0066】
本図に示すように、プログラムを構成する命令およびデータは、アドレスの小さい順にビットの大きい側から順番に配置され、8の命令(またはデータ)単位で1エントリを構成する。以後、1エントリを構成する命令またはデータの列を命令列と呼ぶ。
【0067】
なお、本実施形態においては、メモリ(1)へのアクセスは、エントリ単位で行われる。例えば、アドレス0,2,4,6、8、10、12、14に対するアクセスは、エントリ0へのアクセスとして同時に行なわれる。
【0068】
このようなメモリ(1)に16ビット幅の命令あるいはデータを格納する場合、アドレスの各ビットは以下を区別する役割を持つ。
ビット15〜4:エントリ
ビット3〜1:同一エントリ内の命令あるいはデータの位置
ビット0:命令あるいはデータの上位8ビット、下位8ビット
次に、このようなプログラム、CPUの動作、メモリの命令およびデータの格納状況等を前提に、図1に基づいて説明した、タグ(6)、先読みバッファ(7)、リードデータ選択部(5)、および、先読みアドレス生成部(4)の詳細を以下に説明する。
【0069】
図6は、タグ(6)および先読みバッファ(7)の詳細図である。本実施形態では、5つのバッファを先読みバッファ(7)として備える構成を例にあげ、説明する。もちろん、バッファ数はこれに限られない。
【0070】
タグ(6)は、12ビット幅の記憶素子tagi0、tagi1、..、tagi4から構成される。
【0071】
tagi0、tagi1、..、tagi4は、それぞれ、tagupd[0]、tagupd[1]、..、tagupd[4]のアサートタイミングでmemadr[15:4]の出力を取りこみ、取りこんだ値をtag0[15:4]、tag1[15:4]、..、tag4[15:4]に出力する。
【0072】
先読みバッファ(7)は、128ビット幅の記憶素子bufi0、bufi1、..、bufi4から構成される。
【0073】
bufi0、bufi1、..、bufi4は、それぞれ、bufupd[0]、bufupd[1]、..、bufupd[4]のアサートタイミングでmemdata[127:0]の出力を取りこみ、取りこんだ値をbuf0[127:0]、buf1[127:0]、..、buf4[127:0]に出力する。
【0074】
tagi0、tagi1、..、tagi4は、それぞれ、bufi0、bufi1、..、bufi4に格納された命令列のエントリを記憶する。
【0075】
図7は、リードデータ選択部(5)の詳細図である。
【0076】
リードデータ選択部(5)は、比較器0(301)、比較器1(302)、3ビット記憶素子(305)、5ビット記憶素子(306)、セレクタ0(303)、および、セレクタ1(304)から構成される。
【0077】
比較器0(301)はtag<4:0>[15:4]とpfadr[15:4]との比較を行い、その結果をhit0[4:0]に出力する。
【0078】
hit0[4:0]の各ビットは以下の論理式で演算される。
hit0[$i]=(tag$i[15:4]==pfadr[15:4])
$i=0、1、2、3、4
hit0[4:0]は、リードデータ選択部(5)において、先読みアドレス生成部(4)から先読み要求のあるエントリが、先読みバッファ(7)に保持されているか否かを判定(先読みバッファヒット判定)した結果を示す信号である。以下、保持されている場合をバッファヒット、保持されていない場合をバッファミスヒットと呼ぶ。また、保持されている場合において、バッファn(n=0、1、2、3、4)に保持されているとき、先読みバッファnヒットと呼ぶ。
【0079】
ここで、制御部(3)は、入力されたhit0[4:0]の結果により、先読みアドレス生成部(4)から受け付けた先読み要求に従って先読みを実行するかどうかを判断する。すなわち、制御部(3)は、バッファヒット時は、先読みを実行せず、バッファミスヒット時は先読みを実行するよう制御する。
【0080】
例えば、hit0[0]=1の場合、先読みが要求されているエントリは既にbufi0に保持されていることを意味し(先読みバッファ0ヒット)、あらためて先読みの必要はない。
【0081】
本実施形態においては、このように先読みの要求があるターゲットアドレスの先読みバッファヒット判定を行なう。すなわち、先読みを実際に行なう前に先読みバッファ(7)に当該アドレスの命令が含まれるエントリが既に格納されているか否か判定する。このような先読み制御により、無駄な先読みを抑止することができる。
【0082】
比較器1(302)はtag<4:0>[15:4]とcpuadr[15:4]との比較を行い、その結果をhit1[4:0]に出力する。
【0083】
hit1[4:0]の各ビットは以下の論理式で演算される。
Figure 0003811140
hit1[4:0]は、リードデータ選択部(5)において、CPU(2)からアクセス要求がある命令またはデータを含むエントリが、先読みバッファ(7)に保持されているか否かを判定(先読みバッファヒット判定)した結果を示す信号である。バッファヒット、バッファミスヒット、先読みバッファnヒットの定義は、hit0[4:0]の場合と同様である。
【0084】
制御部(3)は、入力されたhit1[4:0]の結果により、CPU(2)からのアクセス要求に対する命令またはデータを、先読みバッファ(7)から読み出すか、メモリ(1)から読み出すかを判断する。すなわち、制御部(3)は、バッファヒット時は、先読みバッファ(7)から読み出し、バッファミスヒット時はメモリ(1)から読み出すよう制御する。
【0085】
例えば、hit1[0]=1(先読みバッファ0ヒット)の場合、アクセス要求がある命令またはデータを含むエントリはbufi0に保持されていることを意味する。この場合、制御部(3)は、bufi0の出力buf0[127:0]からアクセス対象である命令またはデータを選択してCPU(2)に出力する。
【0086】
このように、本実施形態では、先読みバッファ(7)にアクセス対象が保持されていれば、そこからCPU(2)に命令またはデータを出力することにより、高速なアクセスを実現している。
【0087】
以上に述べたようなバッファヒット時における先読みバッファ出力buf<4:0>[127:0]から命令またはデータを選択する処理は、3ビット記憶素子(305)、5ビット記憶素子(306)、セレクタ0(303)、セレクタ1(304)によって行われる。
【0088】
3ビット記憶素子(305)は、CPU(2)のクロックと同期して動作するフリップフロップであり、cpuadr[3:1]の入力を受け、信号ライン310で信号cpuadr1[3:1]を出力する。
【0089】
5ビット記憶素子(306)は、CPU(2)のクロックと同期して動作するフリップフロップであり、hit1[4:0]の入力を受け、信号ライン311で信号hit11[4:0]を出力する。
【0090】
リードデータ選択部(5)では、3ビット記憶素子(305)および5ビット記憶素子(306)を用い、上記のようにcpuadr[3:1]、hit1[4:0]を一旦フリップフロップで受け、1サイクル後に同じ値をcpuadr1[3:1]、hit11[4:0]に出力することで、cpuadr1[3:1]、hit11[4:0]の出力を、CPUアクセスの1サイクル後であるリードデータ出力タイミングに同期させる。
【0091】
セレクタ0(303)は、hit11[4:0]をセレクト信号とし、buf0[127:0]、buf2[127:0]、..、buf4[127:0]、および、memdata[127:0]から選択した信号をhbuf[127:0]に出力する。
【0092】
ここで、hit11[4:0]の値と選択される信号との関係は、
5‘b00001:buf0[127:0]
5‘b00010:buf1[127:0]
5‘b00100:buf2[127:0]
5‘b01000:buf3[127:0]
5‘b10000:buf4[127:0]
上記以外 :memdata[127:0]
とする。
【0093】
これにより、セレクタ0(303)において、バッファヒット時は、ヒットしたバッファの出力が、バッファミスヒット時は、memdata[127:0]が選択される。
【0094】
セレクタ1(304)は、hbuf[127:0]が出力するエントリに含まれる命令列の中からcpuadr1[3:1]が指す命令またはデータの一つを選択し、cpudata[15:0]に出力する。
【0095】
次に、先読みアドレス生成部(4)の詳細を説明する。図8は、先読みアドレス生成部(4)の詳細図である。
【0096】
先読みアドレス生成部(4)は、入力された命令の種類をデコードする8つの命令種デコーダ、すなわち、命令種デコーダ0(200)、命令種デコーダ1(201)、..、命令種デコーダ7(207)と、8つのANDゲート、すなわち、ANDゲート0(250)、ANDゲート1(251)、..、ANDゲート7(257)と、8つの命令種フラグ、すなわち、命令種フラグ0(230)、命令種フラグ1(231)、..、命令種フラグ7(237)と、ターゲット命令選択部(280)と、アドレス演算部(270)と、アドレス記憶部(280)とを備える。
【0097】
hbuf[127:0]は、16ビット毎に区切られ、それぞれ、命令種デコーダ0(200)、命令種デコーダ1(201)、..、命令種デコーダ7(207)に入力される。
【0098】
例えば、命令種デコーダ0(200)には、hbuf[127:0]が出力するエントリの命令列における先頭アドレスの命令またはデータが入力される。命令種デコーダ0(200)は、入力された命令またはデータの種類をデコードして、その結果を信号ライン(210)で信号pd0[1:0]として出力する。
【0099】
なお、出力信号pd0[1:0]の意味は、
2‘b01: アドレス演算部(270)でターゲットアドレスが演算可能なデータアクセス命令
2‘b10: アドレス演算部(270)でターゲットアドレスが演算可能な条件分岐命令
2‘b11: アドレス演算部(270)でターゲットアドレスが演算可能な無条件分岐命令
2‘b00:上記以外の命令またはデータ
と定義されている。
【0100】
命令種デコーダ1(201)も同様に、hbuf[127:0]が出力するエントリの命令列における2番目の命令またはデータの種類をデコードして、結果を信号ライン(211)で信号pd1[1:0]として出力する。
【0101】
さらに3番目、4番目、..、6番目の命令またはデータも同様にその種類がデコードされる。そして、命令種デコーダ7(207)も同様に、hbuf[127:0]が出力するエントリの命令列における8番目の命令またはデータの種類をデコードして、結果を信号ライン(217)で信号pd7[1:0]として出力する。
【0102】
pd0[1:0]、pd1[1:0]、..、pd7[1:0]はそれぞれ命令種フラグ0(230)、命令種フラグ1(231)、..、命令種フラグ7(237)に、制御部(3)が出力するpdupd(23)がアサートされるタイミングで保持される。
【0103】
命令種フラグ0(230)、命令種フラグ1(231)、..、命令種フラグ7(237)に保持された値は、それぞれ、信号ライン240で信号ifa0[1:0]として、信号ライン241で信号ifa1[1:0]として、..、また、信号ライン242で信号ifa7[1:0]として出力される。
【0104】
ターゲット命令選択部(280)は、ifa0[1:0]、ifa1[1:0]、..、ifa7[1:0]、および、hbuf[127:0]の入力を受けて、入力された信号が示す命令種に従って、hbuf[127:0]が出力するエントリの命令列からターゲットアドレスを演算すべき要先読み命令を選択し、信号ライン260で信号tinst[15:0]として出力する。
【0105】
例えば、図5のエントリ0の命令列が入力された場合は、命令4のデータアクセス命令が選択され、エントリ1の命令列が入力された場合は、命令9の分岐命令が選択される。
【0106】
ターゲット命令選択部(280)は、さらに、入力されたpc[3:1]を用いて、CPU(2)が現在実行している命令のアドレスを得、選択する命令を現在実行している命令のアドレス以降のアドレスの命令に限定する。
【0107】
ターゲット命令選択部(280)は、さらに、pfreq[1:0]として、選択した命令の種類を出力する。ここで、出力信号pfreq[1:0]の意味は、pd0[1:0]、pd1[1:0]、..、pd7[1:0]の意味と同じであり、2‘b00以外の値で先読みアドレス生成部(4)から先読み要求があることを示す。
【0108】
ここで、制御部(3)は、先読みアドレス生成部(4)から入力されたpfreqの値に従い、pfackをアサートする。
【0109】
制御部(3)におけるpfreqの値とpfackアサートの有無の関係は以下の通りである。
pfreq[1:0]=2‘b01:pfackをアサート。
pfreq[1:0]=2‘b10:pfackアサートなし。
pfreq[1:0]=2‘b11:pfackアサートなし。
【0110】
pfreq[1:0]=2‘b01の場合、その時点で選択されている命令はデータアクセス命令である。従って、エントリ内のデータアクセス命令以降の命令は、必ず実行される。このため、エントリ内のこのデータアクセス命令以降の命令に関しても、要先読み命令の有無を判定し、あれば、先読み要求をする必要がある。
【0111】
pfreq[1:0]=2‘b10の場合、その時点で選択されている命令は条件分岐命令である。従って、エントリ内のこの条件分岐命令以降の命令が実行されるか否かは、この条件分岐命令がCPU(2)において実行されなければ判断できない。すなわち、この条件分岐命令の次の命令のIDステージで分岐しなかったことが確定する。その時点では、PCの値がこの条件分岐命令の次の命令のアドレスとなり、後述するように、ターゲット命令選択部(280)において、その条件分岐命令はマスクされ、エントリ内の当該条件分岐命令以降の命令に対し、要先読み芽例の有無が判定される。
【0112】
pfreq[1:0]=2‘b11の場合、その時点で選択されている命令は、無条件分岐命令である。従ってエントリ内のこの無条件分岐命令以降の命令は実行されない。このため、以降の命令に対して命令種を判定したり、先読みの要否の検討を行なう必要はない。
【0113】
ターゲット命令選択部(280)は、さらに信号ライン261で選択した命令のエントリ内の位置を示す信号padec[7:0]を出力する。
【0114】
ここで、padec[7:0]の意味は、
8‘b00000001:先頭の命令を選択
8‘b00000010:2番目の命令を選択
・・・・
8‘b10000000:8番目の命令を選択
と定義されている。
【0115】
padec[7:0]の各ビットとpfackとの論理積をANDゲート0(250)、ANDゲート1(251)、..、ANDゲート7(257)を用いて生成し、信号ライン220で命令種フラグ0のクリア信号clr0を、信号ライン221で命令種フラグ1のクリア信号clr1を、..、信号ライン227で命令種フラグ7のクリア信号clr7を出力する。
【0116】
このように、アサートされたpfackを用いて、現在選択している命令の命令種フラグをクリアし、以降のタイミングでその命令が選択されないようにすることができる。すなわち、同じエントリ内で現在選択している命令以降の命令から、その後の要先読み命令を選択できる。
【0117】
アドレス記憶部(290)は、先読みアドレス生成部(4)が現在、演算の対象としている命令列を含むエントリ値を保持する。具体的には、アドレス記憶部(290)は、pdupdのアサートタイミングでcpuadr[15:4]の出力値を保持し、信号ライン(263)でその保持している値をアドレス信号adr[15:4]に出力する。
【0118】
アドレス演算部(270)は、先読みアドレス生成部(4)が、現在、演算の対象としている命令列に含まれる要先読み命令のターゲットアドレスを演算して出力する。具体的には、アドレス演算部(270)は、入力されたpadec[7:0]と、tinst[15:0]と、adr[15:4]とから、先読みターゲットアドレス信号pfadr[15:4]を演算し出力する。pfadr[15:4]は、tinst[15:0]で出力されている要先読み命令のターゲットアドレスが含まれるエントリを示す。
【0119】
次に、ターゲット命令選択部(280)の構成の詳細を説明し、先読みが必要な要先読み命令の選択方法を示す。図9はターゲット命令選択部(280)の詳細図である。
【0120】
本図に示すように、pc[3:1]はデコーダ(562)により
3‘b000−>8’b11111111
3‘b001−>8’b11111110
3‘b010−>8’b11111100
3‘b011−>8’b11111000
3‘b100−>8’b11110000
3‘b101−>8’b11100000
3‘b110−>8’b11000000
3‘b111−>8’b10000000
と、8ビットにデコードされ、信号ライン570で選択マスク信号mask[7:0]として出力される。
【0121】
そして、iaf0[1:0]の各ビットの論理和をmask[0]でマスクした結果は、複合ゲート0(500)を介して信号s[0]として出力される。iaf1[1:0]、..、iaf7[1:0]についても、iaf0[1:0]と同様に各ビットの論理和を、それぞれ、mask[1]、..、mask[7]でマスクした結果が複合ゲート1(501)、..、複合ゲート7(501)を介して信号s[1]、..、信号s[7]としてそれぞれ出力される。
【0122】
出力された信号s[7:0]は優先順位判定回路(563)に入力され、予め定められた以下の対応関係に従い、padec[7:0]として出力される。
【0123】
ここで、優先順位判定回路(563)の入力と出力の対応関係は以下のとおりである。
8‘b???????1−>8‘b00000001
8‘b??????10−>8‘b00000010
8‘b?????100−>8‘b00000100
8‘b????1000−>8‘b00001000
8‘b???10000−>8‘b00010000
8‘b??100000−>8‘b00100000
8‘b?1000000−>8‘b01000000
8‘b10000000−>8‘b10000000
上記以外 ―>8‘b00000000
なお“?”は“don‘t care”を意味する。すなわち、1、0どちらであってもよいという意味である。
【0124】
この優先順位判定回路563により、エントリ内の1番最初に実行される要先読み命令がpadec[0]として出力される。また、本構成により、pc[3:1]によって示される現在CPU(2)において実行されている命令以前の命令は、mask[0]・・・mask[7]により信号sの出力が0となるため、この優先順位判定回路563において選択されない。
【0125】
優先順位判定回路563から出力されたpadec[0]は、hbuf[127:112]をANDゲート00(540)においてマスクするために用いられ、その結果は、信号ライン550でtinst0[15:0]に出力される。
【0126】
hbuf[111:96]、..、hbuf[15:0]、についても、hbuf[127:112]と同様に、padec[1]、..、padec[7]でマスクした結果を、ANDゲート01(541)、..、ANDゲート07(547)により、それぞれ、tinst1[15:0]、..、tinst7[15:0]に出力する。
【0127】
iaf0[1:0]をpadec[0]でマスクした結果をANDゲート10(510)により信号ライン520でpfreq0[1:0]に出力する。
【0128】
iaf1[1:0]、..、iaf7[1:0]、についても、iaf0[1:0]と同様に、padec[1]、..、padec[7]でマスクした結果を、ANDゲート11(511)、..、ANDゲート17(512)により、それぞれ、pfreq1[1:0]、..、pfreq7[1:0]に出力する。
【0129】
tinst0[15:0]、..、tinst7[15:0]は、ORゲート0(560)により論理和が演算され、結果がtinst[15:0]に出力される。そして、pfreq0[1:0]、..、pfreq7[1:0]は、ORゲート1(561)により論理和が演算され、結果がpfreq[1:0]に出力される。
【0130】
以上、図9を用いて説明した回路によりtinst[15:0]には、hbuf[127:0]が出力するエントリの命令列の中で、CPUが現在実行している命令以降のアドレスに格納され、かつ、最初に実行される要先読み命令が出力される。また、pfreq[1:0]には、tinst[15:0]に出力された命令の種類が出力される。
【0131】
以上の構成により、先読みアドレス生成部(4)は、バッファに格納されたエントリに含まれる命令列から確実に実行される分岐命令およびデータアクセス命令を1サイクルで検出し、制御部(3)に対してそのターゲットアドレスの先読み要求を出力することができる。
【0132】
具体的には、先読みアドレス生成部(4)はエントリに含まれる命令列の種類をデコードしそれぞれ命令種フラグ0(230)、..、命令種フラグ7(232)にセットする。実行している命令のアドレス信号を用いて既に実行が終わった命令種フラグの出力をマスクする。優先順位判定回路(563)はマスクされた命令種フラグの出力からターゲットアドレスの先読み要求を出す命令の位置を出力する。そして、制御部(3)からのpfack信号により、ターゲットアドレスへの先読み要求を出した命令に対応する命令種フラグをクリアする。
【0133】
ここで、ターゲット命令選択部(280)で選択される命令は、命令種をデコードしているエントリのうち、現在実行している命令のアドレス以降の命令で、最初に実行される要先読み命令である。そして、選択された要先読み命令がデータアクセス命令の場合は、さらに当該命令以降の命令においても要先読み命令の有無を判定し、要先読み命令があれば、同様の手順で選択する。選択された要先読み命令が条件付分岐命令の場合は、当該選択された命令が実行され、分岐が行なわれず以降の命令が実行されることになった場合、当該以降の命令において同様に要先読み命令の有無を判定し、要先読み命令があれば、選択する。選択された要先読み命令が無条件分岐命令の場合、以降の命令に対しては、何も行なわない。
【0134】
なお、最も先の分岐命令だけを解釈しそのターゲットアドレスが含まれるエントリのみを知る構成の場合、選択された命令がデータアクセス命令または条件付分岐命令の場合であっても、次の分岐またはデータアクセス命令まで解釈できない。
【0135】
また、本実施形態においては、pfreqによって当該命令がデータアクセス命令と指定された場合、制御部(3)は、pfackを出力し、先読みアドレス生成部(4)内の命令種フラグ(230)〜(237)に保存されている結果を消去し、そのエントリ内の以降の命令のみを対象として要先読み命令の処理を行なうことができる。
【0136】
本構成により、本実施形態の先読みアドレス生成部(4)は、同じエントリ内の要先読み命令による先読みアドレスを、必要十分なだけ効率的に生成することができる。
【0137】
次に、ターゲット命令選択部(280)によって選択された要先読み命令のターゲットアドレスが含まれるエントリを抽出する演算について、以下に説明する。図10はアドレス演算部(270)の詳細図である。
【0138】
アドレス加算値解読部(601)は、tinst[15:0]に出力された要先読み命令より、その命令自身のアドレスとターゲットアドレスとの相対値を示す即値を切りだし、信号ライン610で相対アドレス信号reladr[7:0]に出力する。なお、本実施形態で説明するCPUの要先読み命令の即値は8ビットとする。
【0139】
エンコーダ(602)は、padec[7:0]を3ビットにエンコードし、信号ライン611にベースアドレス信号baseadr[3:1]を出力する。
【0140】
ここで、エンコーダ(602)の入力と出力の関係は以下のとおりである。
8‘b00000001−>3’b000
8‘b00000010−>3’b001
8‘b00000100−>3’b010
8‘b00001000−>3’b011
8‘b00010000−>3’b100
8‘b00100000−>3’b101
8‘b01000000−>3’b110
8‘b10000000−>3’b111
上記以外−>3‘b000
加算器(603)は、
reladr[7:0]+baseadr[3:1]+{adr[15:4]、4‘b0000}
の演算を行い、演算結果の15〜4ビットをpfadr[15:4]に出力する。
【0141】
なお、pfadr[15:4]と、ターゲット命令選択部(280)から出力されるpfreq[1:0]とを受け取った制御部(3)は、その組み合わせに応じて以下の制御を行なう。
pfreq[1:0]=2‘b01:エントリpfadr[15:4]へのデータアクセスに備えた先読み要求を行なう。
pfreq[1:0]=2‘b10:エントリpfadr[15:4]の条件分岐に備えた先読み要求を行なう。
pfreq[1:0]=2‘b11:エントリpfadr[15:4]への無条件分岐に備えた先読み要求を行なう。
pfreq[1:0]=2‘b00:先読み要求なし。
【0142】
次に、本実施形態の情報処理装置の動作を説明する。
【0143】
図11は以上説明した本発明の実施形態における情報処理装置の動作を示すタイミングチャートである。ここで、本タイミングチャートは、図2に示すプログラムを、図5の通りにメモリに格納して実行した例である。
【0144】
まずサイクル0において、CPU(2)は、アドレス0の命令0のフェッチを行う。この時点では先読みバッファ(7)には何も格納されていないので、リードデータ選択部(5)からのヒット信号hit1[4:0]はバッファミスを示す。
【0145】
次にサイクル1において、バッファミスを示す信号を受けた制御部(3)は、memadrに“0”を出力するとともに、memrdをアサートし、メモリ(1)に対してエントリ0へのアクセスを開始する。同時に、cpuwaitをアサートし、データが確定するまでCPU(2)のメモリ(1)へのアクセスを停止する要求を出す。
【0146】
次にサイクル2において、制御部(3)は、エントリ0の格納場所を先読みバッファ(7)のbufi0とし、対応するタグ(6)のtagi0にエントリ0を示す“0”を格納するため、引き続きmemadrに“0”を出力し、tagupdにtagi0を更新する信号を出力する。
【0147】
次にサイクル3において、メモリ(1)はmemdataにエントリ0の命令とデータとを含む128ビット幅の命令列を出力する。リードデータ選択部(5)は、hbufにmemdataを選択し、エントリ0の命令列を出力する。さらに、リードデータ選択部(5)は、hbufからアドレス0の命令0を選択し、cpudataに出力する。
【0148】
制御部(3)は、cpudataが確定したので、cpuwaitをネゲートし、CPU(2)にメモリ(1)へのアクセスの再開許可を伝達する。
【0149】
さらに、制御部(3)は、memdataに出力されたエントリ0の命令列をbufi0に格納するため、bufupdにbufi0を更新する信号を出力する。
【0150】
サイクル1−3にて説明したtagi0、bufi0への制御の通り、先読みバッファ(7)の更新はメモリ(1)へのアクセスと一体となって行われ、メモリ(1)へのアクセス、タグ(6)の更新、先読みバッファ(7)の更新の順に一連の動作が実行される。以降説明する先読みバッファ(7)の操作も同様の手順で行われる。
【0151】
さらに、制御部(3)は、将来エントリ1がアクセスされることに備え、memadrに“1”を出力し、またmemrdをアサートし、メモリ(1)に対しエントリ1へのアクセスを開始する。
【0152】
リードデータ選択部(5)は、エントリ0へのアクセスは次サイクルにおいてbufi0から出力することが可能であるので、ヒット信号hit1にバッファ0ヒットを出力する。
【0153】
さらに、リードデータ選択部(5)は、memdataからアドレス0の命令0を選択し、cpudataに出力する。
【0154】
CPU(2)は、アドレス0の命令0をcpudataから取りこむと同時に、アドレス2の命令1のフェッチを行う。
【0155】
次にサイクル4において、リードデータ選択部(5)は、hbufにbuf0を選択し、bufi0に格納されているエントリ0の命令列を出力する。さらに、リードデータ選択部(5)は、hbufからアドレス2の命令1を選択し、cpudataに出力する。
【0156】
CPU(2)は、アドレス2の命令1をcpudataから取りこむと同時に、アドレス2の命令1のフェッチを行う。
【0157】
以降、サイクル10まで続くエントリ0にある命令の命令フェッチは、以上述べた命令1のフェッチと同様、bufi0を介してアクセスする。すなわち、必要な命令は、メモリ(1)からではなく、高速な先読みバッファ(7)から取得する。これにより、メモリ(1)のアクセスレイテンシによるアクセスの中断がなく、処理が高速に実行される。またこの間は、命令フェッチによるメモリ(1)へのアクセスが発生しないため、制御部(3)は、将来のアクセスに備えて、命令列の先読みを行うことができる。
【0158】
ここで、制御部(3)は、バッファ0にあるエントリ0の要先読み命令の実行前にその命令のターゲットアドレスの演算を行うことを先読みアドレス生成部(4)に指示するため、pdupdをアサートする。
【0159】
次にサイクル5において、先読みアドレス生成部(4)は、図8にて説明した回路によりアドレス8の命令“MOV @(32,PC)、R1”を検出し、ターゲットアドレスの先読みを要求する命令の種類がデータアクセスであることを示す“1”、およびターゲットアドレスが含まれるエントリを示す“5”を、pfreq、pfadrにそれぞれ出力する。
【0160】
この時点で、先読みバッファ(7)にエントリ5は格納されていないので、リードデータ選択部(5)からのヒット信号hit0[4:0]は、バッファミスを示す。バッファミスを示す信号を受けた制御部(3)は、メモリ(1)に対しエントリ5へのアクセスを開始し、続くサイクル6、7において、bufi2にエントリ5の命令列を格納するため、tagupdおよびbufupdにtagi2、bufi2を更新する信号を出力する。
【0161】
ここで、同サイクルでターゲットアドレスの先読みを要求する命令として選択されたアドレス8の命令は、データアクセス命令である。このため、制御部(3)は、エントリ0のアドレス8以降の要先読み命令のターゲットアドレスの先読み要求を先読みアドレス生成部(4)に指示するため、pfackをアサートする。
【0162】
次にサイクル6において、先読みアドレス生成部(4)は、前サイクルのpfackのアサートを受けて、アドレス8の命令の種類を格納していた命令種フラグ4をクリアする。その結果、命令種フラグ0〜7の格納値は全て0となり、先読みアドレス生成部(4)は、pfadr、pfreqにそれぞれ0を出力する。
【0163】
この結果、制御部(3)は、エントリ0のアドレス8以降には、要先読み命令はないことがわかる。
【0164】
次にサイクル9において、CPU(2)は、アドレス8の命令“MOV @(32,PC)、R1”に伴うメモリアクセス(MA)をcpumdに出力する。このメモリアクセスに備えて、サイクル5においてエントリ5をbufi2に先読みしてあるため、CPU(2)は、メモリアクセスのレイテンシによるアクセスの中断なしに、次のサイクル10にてターゲットアドレスのアドレス40のデータ20にアクセスできる。
【0165】
次にサイクル11において、CPU(2)はアドレス16の命令8のフェッチを行う。この命令フェッチに備えてサイクル2においてエントリ1をbufi1に先読みしてあるため、CPU(2)は、メモリアクセスのレイテンシによるアクセスの中断なしに、次のサイクル12にてターゲットアドレスのアドレス16の命令8にアクセスできる。
【0166】
以降、サイクル16まで続くエントリ1にある命令の命令フェッチは、以上述べた命令8のフェッチと同様に、先読みバッファ(7)内のbufi1にアクセスすることにより、メモリ(1)のアクセスレイテンシによるアクセスの中断なしに、高速に実行することができる。またこの間、命令フェッチによるメモリ(1)へのアクセスが発生しないため、制御部(3)は、将来のアクセスに備えて先読みを行うことができる。
【0167】
次にサイクル12において、制御部(3)は、バッファ1にあるエントリ1の要先読み命令の実行前にその命令のターゲットアドレスの演算を行うよう先読みアドレス生成部(4)に指示するため、pdupdをアサートする。
【0168】
次にサイクル13において、先読みアドレス生成部(4)は、図8にて説明した回路によりアドレス18の命令“BT −18”を検出し、先読みを要求する命令が条件分岐命令であることを示す“2”、および、ターゲットアドレスのエントリ“0”をpfreq、pfadrにそれぞれ出力する。このとき、先読みバッファbufi0にエントリ0が格納されているので、エントリ0の先読み要求に対しリードデータ選択部(5)からのヒット信号hit0[4:0]は、バッファ0ヒットを示すものとなる。
【0169】
バッファ0ヒットを示す信号を受け、制御部(3)は、このアドレス18の命令“BT −18”のターゲットアドレスの先読みを実行しない。
【0170】
本実施形態では、制御部(3)は、前述のアルゴリズムに従い、先読み要求を受けたアドレス18の命令より以降の要先読み命令のターゲットアドレス先読み要求を先読みアドレス生成部(4)に指示するためのpfackのアサートを行わない。
【0171】
次にサイクル14において、CPU(2)は、pcに“20”を出力する。これを受け、先読みアドレス生成部(4)は、図8および図9にて説明した回路によりアドレス18の命令“BT −18”に対応した命令種フラグの出力をマスクする。そして、次のデータアクセス命令であるアドレス22の命令“MOV @(20,PC)、R1”を検出し、先読み要求する命令がデータアクセス命令であることを示す“1”、およびターゲットアドレスのエントリ“5”をpfreq、pfadrにそれぞれ出力する。
【0172】
ここで、先読みバッファbufi2にエントリ5は既に格納されているので、リードデータ選択部(5)からのヒット信号hit0[4:0]は、バッファ2ヒットを示すものが出力される。
【0173】
バッファ2ヒットを示す信号を受け、制御部(3)は、この命令“MOV @(20,PC)、R1”のターゲットアドレスの先読みを実行しない。
【0174】
さらに、制御部(3)は、同サイクルで先読みを要求するアドレス22の命令がデータアクセス命令であるため、それ以降の要先読み命令のターゲットアドレスの先読み要求を先読みアドレス生成部(4)に指示するため、pfackをアサートする。
【0175】
次にサイクル15において、先読みアドレス生成部(4)は、図8にて説明した回路によりアドレス26の命令“BRA 102”を検出し、先読み要求する命令が無条件分岐命令であることを示す“3”、およびターゲットアドレスのエントリ“8”を、pfreq、pfadrにそれぞれ出力する。
【0176】
この時点で、先読みバッファにエントリ8は格納されていないので、リードデータ選択部(5)からのヒット信号hit0[4:0]は、バッファミスを示すものが出力される。
【0177】
バッファミスを示す信号を受けた制御部(3)は、メモリ(1)に対しエントリ8へのアクセスを開始し、続くサイクル16、17にてbufi4にエントリ8の命令列を格納するため、tagi4、bufi4を更新する信号を出力する。
【0178】
次にサイクル17にて、CPU(2)は、アドレス22の命令“MOV @(20,PC)、R1”に伴うメモリアクセスを出力する。このメモリアクセスに備えてサイクル5においてエントリ5をbufi2に先読みしてあるため、メモリアクセスのレイテンシによるアクセスの中断なしに、CPU(2)は、次のサイクル18においてターゲットアドレスのデータ(アドレス42のデータ21)にアクセスできる。
【0179】
次にサイクル18において、CPU(2)は、アドレス26の命令“BRA 102”に伴い、プログラムの流れをアドレス128に無条件に移行し、アドレス128の命令64のフェッチを行う。
【0180】
この命令フェッチに備えてサイクル15においてエントリ8をbufi4に先読みしてあるため、CPU(2)は、メモリアクセスのレイテンシによるアクセスの中断なしに、次のサイクル19にてターゲットアドレスのデータ(アドレス128の命令64)にアクセスできる。
【0181】
以上述べたように、本実施形態の情報処理装置では、プログラム実行サイクルが20となり、図12に示す本発明を使用しない場合の実行サイクル36と比較して、サイクル数において性能が80%向上している。
【0182】
本実施形態によれば、1サイクルで先読みバッファ(7)に格納されたエントリに含まれる命令列から分岐命令およびデータアクセス命令を検出し、そのターゲットアドレスの先読みを行なうことができる。このため、先読みがターゲットアドレスへのアクセスに間に合わずバッファミスが発生し、性能が落ちることが少なくなる。
【0183】
本実施形態によれば、ターゲットアドレスの先読みを行う命令の種類により、その命令より以降の分岐命令およびデータアクセス命令のターゲットアドレスの先読みを行うかどうかを制御している。また、現在実行している命令のアドレスを示す信号を用いて、既に実行が終わった分岐命令およびデータアクセス命令のターゲットアドレスの先読みを抑止し、今後実行される分岐命令およびデータアクセス命令に限定してターゲットアドレスの先読みを実施する。
【0184】
このため、確実に実行される分岐命令およびデータアクセス命令に実行されるに限定して、しかも、適切な順序でターゲットアドレスの先読みを実施することができる。これにより、無駄な先読みのメモリアクセスにより必要なメモリアクセスが妨害されて性能が落ちることが少なくなる。
【0185】
なお、本実施形態に記載した各種の回路構成は、本実施形態を説明するための一例に過ぎない。上記記載の入出力が可能ならば、本実施形態の回路構成に限られない。
【0186】
以上より、本実施形態によれば、分岐命令およびデータアクセス命令の先読みを効果的に行い、高性能な情報処理装置を提供することが出来る。
【0187】
【発明の効果】
データアクセスの多いプログラムにおいても、効果的な先読みを行うことができ、プログラムの種類に依存しない高性能な情報処理技術が提供できる。
【図面の簡単な説明】
【図1】図1は、本実施形態の情報処理装置の全体図である。
【図2】図2は、本実施形態のCPUが実行するプログラムの一例を説明するための図である。
【図3】図3は、本実施形態のCPUの動作を示すタイミングチャートである。
【図4】図4は、本実施形態のメモリの動作を示すタイミングチャートである。
【図5】図5は、図2で示したプログラムをメモリに格納する場合の、命令およびデータの配置を説明するための図である。
【図6】図6は、本実施形態のタグおよび先読みバッファの詳細図である。
【図7】図7は、本実施形態のリードデータ選択部の詳細図である。
【図8】図8は、本実施形態の先読みアドレス生成部の詳細図である。
【図9】図9は、本実施形態のターゲット命令選択部の詳細図である。
【図10】図10は、本実施形態のアドレス演算部の詳細図である。
【図11】図11は、本実施形態の情報処理装置の動作を示すタイミングチャートである。
【図12】図12は、従来の情報処理装置の動作を示すタイミングチャートである。
【符号の説明】
1・・・メモリ、2・・・CPU、3・・・制御部、4・・・先読みアドレス生成部、5・・・リードデータ選択部、6・・・タグ、7・・・先読みバッファ、200〜207・・・命令種デコーダ、230〜237・・・命令種フラグ、270・・・アドレス演算部、280・・・ターゲット命令選択部、290・・・アドレス記憶部

Claims (3)

  1. CPUと、メモリと、予め定められた数の命令およびデータからなる命令列を当該命令列内の命令またはデータを前記CPUが実行する前に格納する先読みバッファとを備える情報処理装置であって、
    前記命令列が前記先読みバッファに格納された時点で、当該命令列内に含まれる所定の分岐命令またはデータアクセス命令を選択し、当該選択した命令のターゲットアドレスを演算する先読みアドレス生成手段と、
    前記先読みアドレス生成手段において演算された前記ターゲットアドレスの命令またはデータが含まれる前記命令列が前記先読みバッファに格納されているか否かを判断し、格納されていない場合、当該命令列を前記メモリから読み出し前記先読みバッファに格納する先読みバッファ格納手段とを備え、
    前記先読みアドレス生成手段は、
    前記命令列に含まれる各命令の種類を判別する命令種判別手段と、
    前記命令種別判別手段の判別結果に基づいて、前記命令列から前記ターゲットアドレスを演算する所定の分岐命令またはデータアクセス命令を選択するターゲット命令選択手段とを備え、
    前記ターゲット命令選択手段は、
    前記CPUが現在実行している命令を特定する実行命令判別手段を備え、
    前記命令列の中の前記実行命令判別手段が特定した命令以降の命令の中から、前記命令種判別手段の判別結果に基づいて、最も先に実行される分岐命令またはデータアクセス命令を選択すること
    を特徴とする情報処理装置。
  2. 請求項1記載の情報処理装置であって
    前記ターゲット命令選択手段は、前記選択した命令が、前記データアクセス命令または前記分岐命令の中の条件付分岐命令である場合、前記命令列内の前記選択した命令以降の分岐命令またはデータアクセス命令の中から最も先に実行される命令を、さらに選択すること
    を特徴とする情報処理装置。
  3. 請求項2記載の情報処理装置であって
    前記先読みアドレス生成手段は、
    前記選択された最も早く実行される命令に対応する前記命令種判別手段による判別結果をクリアするクリア手段をさらに備え、
    前記ターゲット命令選択手段は、
    判別結果がクリアされていない命令の中から、前記最も早く実行される命令を選択すること
    を特徴とする情報処理装置。
JP2003133355A 2003-05-12 2003-05-12 情報処理装置 Expired - Fee Related JP3811140B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2003133355A JP3811140B2 (ja) 2003-05-12 2003-05-12 情報処理装置
US10/842,638 US20050027921A1 (en) 2003-05-12 2004-05-11 Information processing apparatus capable of prefetching instructions

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003133355A JP3811140B2 (ja) 2003-05-12 2003-05-12 情報処理装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2006123522A Division JP4002288B2 (ja) 2006-04-27 2006-04-27 情報処理装置

Publications (2)

Publication Number Publication Date
JP2004334773A JP2004334773A (ja) 2004-11-25
JP3811140B2 true JP3811140B2 (ja) 2006-08-16

Family

ID=33507923

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003133355A Expired - Fee Related JP3811140B2 (ja) 2003-05-12 2003-05-12 情報処理装置

Country Status (2)

Country Link
US (1) US20050027921A1 (ja)
JP (1) JP3811140B2 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4085328B2 (ja) * 2003-04-11 2008-05-14 ソニー株式会社 情報処理装置および方法、記録媒体、プログラム、並びに撮像装置
US20080022080A1 (en) * 2006-07-20 2008-01-24 Arm Limited Data access handling in a data processing system
JP5237671B2 (ja) 2008-04-08 2013-07-17 ルネサスエレクトロニクス株式会社 データプロセッサ
CN103514105A (zh) * 2012-06-15 2014-01-15 上海芯豪微电子有限公司 信息处理系统、信息处理方法及存储系统
US20160007798A1 (en) * 2012-09-11 2016-01-14 The Richards Corporation Coffee maker water heater
US10296463B2 (en) * 2016-01-07 2019-05-21 Samsung Electronics Co., Ltd. Instruction prefetcher dynamically controlled by readily available prefetcher accuracy
JP2018106227A (ja) * 2016-12-22 2018-07-05 ルネサスエレクトロニクス株式会社 キャッシュメモリ装置及び半導体装置
CN110990062B (zh) * 2019-11-27 2023-03-28 上海高性能集成电路设计中心 一种指令预取过滤方法
CN112925632B (zh) * 2021-05-08 2022-02-25 支付宝(杭州)信息技术有限公司 处理方法及装置、处理器、电子设备及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4714994A (en) * 1985-04-30 1987-12-22 International Business Machines Corp. Instruction prefetch buffer control
US5784711A (en) * 1990-05-18 1998-07-21 Philips Electronics North America Corporation Data cache prefetching under control of instruction cache

Also Published As

Publication number Publication date
US20050027921A1 (en) 2005-02-03
JP2004334773A (ja) 2004-11-25

Similar Documents

Publication Publication Date Title
JP5722396B2 (ja) 明示的サブルーチンコールの分岐予測動作をエミュレートするための方法および装置
KR101685247B1 (ko) 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측
JP3871883B2 (ja) 間接分岐ターゲットを計算するための方法
JP5172942B2 (ja) プロセッサによる電力消費を低減する方法、プロセッサ、及び、情報処理システム
JP3760041B2 (ja) 分岐予測する情報処理装置
TW201423584A (zh) 提取寬度預測器
CN106681695B (zh) 提前取出分支目标缓冲器
JP5579694B2 (ja) 復帰スタックを管理する方法および装置
US20040186985A1 (en) Method and apparatus for branch prediction based on branch targets
JP3837289B2 (ja) 同じ論理的空間を占有する複数のレジスタファイルを含むマイクロプロセッサ
US8650385B2 (en) Instruction fetch apparatus, processor and program counter addition control method
JP3811140B2 (ja) 情報処理装置
US5276825A (en) Apparatus for quickly determining actual jump addresses by assuming each instruction of a plurality of fetched instructions is a jump instruction
JP2007272280A (ja) データ処理装置
JPH03129432A (ja) 分岐制御回路
JP4002288B2 (ja) 情報処理装置
US20080065870A1 (en) Information processing apparatus
JP4247132B2 (ja) 情報処理装置
JP3532835B2 (ja) データ処理装置およびプログラム変換装置
JP4728877B2 (ja) マイクロプロセッサおよびパイプライン制御方法
JP2002342075A (ja) マイクロプロセッサ
JP4739380B2 (ja) 情報処理装置
JP5292831B2 (ja) プログラマブルコントローラ
US10901742B2 (en) Apparatus and method for making predictions for instruction flow changing instructions
US20070239939A1 (en) Apparatus for Performing Stream Prefetch within a Multiprocessor System

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050404

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20050404

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060221

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060228

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060427

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060523

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060525

LAPS Cancellation because of no payment of annual fees