JPWO2002069150A1 - マイクロプロセッサ及び命令実行順序スケジューリング方法 - Google Patents
マイクロプロセッサ及び命令実行順序スケジューリング方法 Download PDFInfo
- Publication number
- JPWO2002069150A1 JPWO2002069150A1 JP2002568205A JP2002568205A JPWO2002069150A1 JP WO2002069150 A1 JPWO2002069150 A1 JP WO2002069150A1 JP 2002568205 A JP2002568205 A JP 2002568205A JP 2002568205 A JP2002568205 A JP 2002568205A JP WO2002069150 A1 JPWO2002069150 A1 JP WO2002069150A1
- Authority
- JP
- Japan
- Prior art keywords
- routine
- data structure
- instruction
- data
- cache memory
- 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
Links
- 238000000034 method Methods 0.000 title claims description 26
- 230000015654 memory Effects 0.000 claims abstract description 77
- 238000012360 testing method Methods 0.000 claims abstract description 26
- 238000012545 processing Methods 0.000 claims abstract description 24
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
キャッシュ・メモリのヒット・ミスによるMPUの利用率の低下を低減させる。実行ユニット26が実行する命令に、複数の命令を含む所要のルーチン又は複数のデータを含む所要のデータ構造体がキャッシュ・メモリ20,30内に存在するか否かを確認するテスト命令が追加されたマイクロプロセッサ10を用いて、前記ルーチン又はデータ構造体に含まれる並列処理が可能なルーチン又はデータ構造体を読み出す直前に、その読み出そうとしているルーチン又はデータ構造体がキャッシュ・メモリ20,30内に存在するか否かをマイクロプロセッサ10に確認させ、並列処理が可能なルーチン又はデータ構造体の中で、キャッシュ・メモリ20,30に存在するルーチン又はデータ構造体から優先的にマイクロプロセッサ10に処理させる。
Description
技術分野
本発明は、マイクロプロセッサ及び命令実行順序スケジューリング方法に関し、より詳しくは、プログラムが指示する順序で命令を実行するマイクロプロセッサ及びマイクロプロセッサの命令実行順序のスケジューリング方法に関する。
背景技術
図4にMPU(マイクロプロセッサ・ユニット)10’の一構成例を示す。MPU10’は、外部メモリ40よりも小容量かつ高速アクセス可能で、外部メモリ40から読み出される命令の一部及びデータの一部が記憶されるキャッシュ・メモリ14と、キャッシュ・メモリ14又は外部メモリ40から命令又はデータを読み出すフェッチ・ユニット22と、読み出された命令を実行する実行ユニット26’と、実行中の命令が使用するデータが記憶される汎用レジスタ32と、外部デバイス(40)が接続されるバスインターフェイス・ユニット12を含む。
キャッシュ・メモリ14は、命令が記憶される命令キャッシュ20とデータが記憶されるデータ・キャッシュ30とを含む。MPU10’はバスインターフェイス・ユニット12を介して外部メモリ(半導体記憶装置)40に接続されており、外部メモリ40とMPU10’間で命令及びデータの読み書きが行われる。ただし、キャッシュ・メモリ20,30のアクセス速度は外部メモリ40よりも60〜100倍高速なので、外部メモリ40よりもキャッシュ・メモリ20,30の方を優先的に利用する。
MPU10’が必要とする命令又はデータがキャッシュ・メモリ20,30に存在しない場合は、外部メモリ40から命令又はデータを読み出す。このキャッシュ・メモリ20,30に存在しない場合の外部メモリ40からの命令又はデータの読み出しはハードウェアで制御される。例えば、MPU10’全体の制御を行うコントロール・ユニット(図示していない)がこの制御を行う。
外部メモリ40はハード・ディスク(固定磁気記憶装置)42とも接続されており、外部メモリ40とハード・ディスク42間で命令及びデータの読み書きが行われる。MPU10’が必要とする命令又はデータが外部メモリ40に存在しない場合は、ハード・ディスク42から命令又はデータを読み出す。この外部メモリ40に存在しない場合のハード・ディスク42からの命令又はデータの読み出しはソフトウェアで制御される。通常はOS(オペレーティング・システム)がこの制御を行う。
MPU10’に命令を実行させる場合、フェッチ・ユニット22がその命令を命令キャッシュ20又は外部メモリ40から読み出す。命令キャッシュ20に目的の命令が存在すれば命令キャッシュ20からその命令を読み出し、無ければ外部メモリ40から読み出す。外部メモリ40から命令を読み出した場合、読み出した命令は命令キャッシュ20にも送られ記憶される。
フェッチ・ユニット22に読み出された命令は、実行ユニット26’に送られ実行される。命令の実行に必要なデータは、データ・キャッシュ30又は外部メモリ40から汎用レジスタ32に読み出される。データ・キャッシュ30に目的のデータが存在すればデータ・キャッシュ30からそのデータを読み出し、無ければ外部メモリ40から読み出す。外部メモリ40から読み出したデータはデータ・キャッシュ30にも送られ記憶される。
図5(a)に、2つのデータ(DATAsA,DATAsB)を使用する2種類のルーチン(FuncA,FuncB)をMPU10’に実行させるプログラムを例としたフロー・チャートを示す。図5(a)では、主にデータ(DATAsA,DATAsB)の読み出し及び処理部分を図示している。MPU10’は、図5(a)に示すプログラムで指示された実行順序でデータの読み出し及び処理を行う。
DATAsAとDATAsBは、それぞれ幾つかのデータ(DATA−A0,DATA−A1,DATA−A2,・・・・・と、DATA−B0,DATA−B1,DATA−B2,・・・・・)から構成されたデータ構造体である。これらDATAsAとDATAsBは各々独立したデータである。
FuncA,FuncBは、プログラムの一部分を構成する、ある機能をもった一連の命令群である。FuncAとFuncBは、それぞれ幾つかの命令(Inst−A0,Inst−A1,Inst−A2,・・・・・と、Inst−B0,Inst−B1,Inst−B2,・・・・・)から構成されている。FuncAとFuncBは各々独立した命令であり、例えば、分岐命令が無い限りFuncAはInst−A0,Inst−A1,Inst−A2,・・・・・の順に命令を実行し、FuncBはInst−B0,Inst−B1,Inst−B2,・・・・・の順に命令を実行する。
図5(a)に示すように、MPU10’は、DATAsAを読み出して(S172)、DATAsAを使用したFuncAを実行し(S174)、次にDATAsBを読み出して(S176)、DATAsBを使用したFuncAを実行する(S178)。続いて、DATAsAを読み出して(S172’)、DATAsAを使用したFuncBを実行し(S182)、次にDATAsBを読み出して(S176’)、DATAsBを使用したFuncBを実行する(S186)。
図5(a)に示す順序でデータを読み出す場合、読み出そうとしているデータがデータ・キャッシュ30に無ければ、MPU10’の待ち時間が増加する。例えばDATAsAを読み出してFuncA(S174)を実行する場合、もしDATAsAがデータ・キャッシュ30に無ければ、外部メモリ40からDATAsAを読み出す。外部メモリ40のアクセス速度はデータ・キャッシュ30よりも60〜100倍遅いので、この外部メモリ40からのデータ読み出しによるMPU10’の待ち時間は60〜100倍長くなる。
しかも、仮にDATAsBがデータ・キャッシュ30内に存在し、DATAsBの方がDATAsAよりも短時間(1/100〜1/60の時間)で読み出せる状態であっても、DATAsAを外部メモリ40から読み出して(S172)、この読み出したDATAsAを使用したFuncA(S174)が実行し終わるまで、DATAsBの読み出し(S176)及びFuncB(S178)を実行することはできない。
DATAsAとDATAsBとは独立したデータであり、FuncAとFuncBとは独立した命令であるので、プログラムの実行順序を図5(a)のフロー・チャートから図5(b)に示すフロー・チャートに変更することも可能である。MPU10’は、DATAsAを読み出して(S172)FuncA及びFuncBを実行し(S174,S182)、次にDATAsBを読み出して(S176)FuncA及びFuncBを実行する(S178,S186)。しかし、この場合も図5(a)と同様に、読み出そうとしているデータがデータ・キャッシュ30に無ければ、MPU10’の待ち時間が増加する。
以上、DATAsA,DATAsBの読み出しを例にして説明したが、FuncA,FuncBを実行する際のFuncA,FuncBの読み出しも同様である。図6に、2つのルーチン(FuncA,FuncB)をMPU10’に実行させるプログラムを例としたフロー・チャートを示す。MPU10’は、FuncAを読み出して(S190)実行し(S192)、次にFuncBを読み出して(S194)実行する(S196)。
このFuncA,FuncBの実行の場合も、上述したデータ(図5(a),(b))の場合と同様に、命令キャッシュ20に目的のルーチンが無ければ、MPU10の待ち時間が長くなり、MPU10の利用率は低下する。
このようなキャッシュ・メモリ20,30のヒット・ミスによるMPU10’の待ち時間の増加を減少させる方法として、実行中の処理と並行して、プログラムが近い将来必要になると予想した命令又はデータをあらかじめMPU10’に読み出しておくプリフェッチ(先読み)がある。
プリフェッチには、例えばタッチ命令を使用する。タッチ命令は、命令又はデータの読み出しをフェッチ・ユニット22に指示する命令である。タッチ命令が実行されると、タッチ命令で要求された命令又はデータが外部メモリ40からキャッシュ・メモリ20,30に読み出される。タッチ命令の実行中であっても、実行ユニット26’は他の命令を並列して実行することができる。タッチ命令を用いることで、プログラム側からMPU10’に、近い将来アクセスを行うと予想される命令又はデータを知らせることができる。MPU10’はタッチ命令で知らされた命令又はデータをキャッシュ・メモリ20,30に予め読み出しておくことで、キャッシュ・メモリ20,30のヒット率の向上を図る。
しかし、プリフェッチする命令又はデータの予測は、通常プログラムを実行する以前のソース・プログラムの状態で行われる。プログラムの実行以前に必要になると予想された命令又はデータを読み出すため、プリフェッチされた命令又はデータが本当に必要になるとは限らない。プリフェッチが有効に機能するかどうかはプログラム実行前の予測の精度に左右され、必ず効果が現れるわけではない。
プログラムの実行途中で、OSによって命令実行順序の変更を行うマルチ・スレッドと呼ばれる方法もある。実行中のスレッドが待ち状態になると、スケジューラが実行可能な他のスレッドを実行状態に切り換える。スレッドはプログラムを構成する実行順序の入れ替えが可能な単位であり、各スレッドはプログラムの実行状態に関するコンテクストと呼ばれる情報を持つ。OSがスレッド単位で実行順序を入れ替えるときには、コンテクスト・スイッチと呼ばれるコンテキストのレジスタへの退避及び復帰が発生する。コンテクスト・スイッチの実行には、実行中のスレッドが待ち状態になったことを示す割り込み,スケジューラの起動,レジスタへのアクセス,スレッドの実行切り換えが伴う。ハード・ディスクへのアクセス待ち時間にコンテキスト・スイッチを実行する場合は、コンテクスト・スイッチの実行時間は十分短く、マルチ・スレッドは有効に機能する。しかし、キャッシュ・ミスによる待ち時間にコンテキスト・スイッチを実行する場合は、コンテキスト・スイッチの実行時間は短くなく、マルチ・スレッドは有効に機能しない。
プログラムの実行途中で、MPU内部で命令実行順序の変更を行うアウト・オブ・オーダーと呼ばれる方法もある。アウト・オブ・オーダは、複数の実行ユニットを用いた並列処理を行うスーパー・スカラー方式のMPUで行われ、実行ユニットが待ち状態になると、プログラムが指示する命令実行順序に制限されず、実行可能な命令から先に実行していく。しかし、MPU側で勝手に命令実行順序を変更しているので、先に実行した命令が全て無駄になることも多い。
発明の開示
本発明の目的は、キャッシュ・メモリのヒット・ミスによるMPUの利用率の低下を低減させることにある。
本発明のマイクロプロセッサは、実行ユニットが実行する命令に、所要のルーチン又はデータ構造体が前記キャッシュ・メモリ内に存在するか否かを確認するテスト命令が含まれる。このようなマイクロプロセッサは、ルーチン又はデータ構造体を読み出す直前にテスト命令を実行することにより、読み出そうとしているルーチン又はデータ構造体がキャッシュ・メモリ内に存在するか否かを事前に知ることができる。
本発明の命令実行順序スケジューリング方法は、並列処理が可能なルーチン又はデータ構造体を読み出す直前に、そのルーチン又はデータ構造体がキャッシュ・メモリ内に存在するか否かを確認する確認ステップと、並列処理が可能なルーチン又はデータ構造体の中で、キャッシュ・メモリ内に存在することが確認されたルーチン又はデータ構造体から優先的にマイクロプロセッサに処理させる優先実行ステップとを含む。
発明を実施するための最良の態様
次に、本発明に係るマイクロプロセッサ及び命令実行順序スケジューリング方法の実施の形態について、図面に基づいて詳しく説明する。
図1に示すように、本発明に係るMPU10の実行ユニット26には、指定されたルーチン又はデータ構造体がキャッシュ・メモリ14内に存在するか確認するテスト命令が追加されている。テスト命令がMPU10に送られると、MPU10はテスト命令が指定するルーチン又はデータ構造体が命令キャッシュ20又はデータ・キャッシュ30に存在するか調べ、存在している(“1”)か存在していない(“0”)かの結果を返す。この結果は汎用レジスタ32に記憶される。テスト命令は、他の命令と同様にMPU10の実行ユニット26で実行される。
プログラムで指示される処理順序をハードウェアの視点に基づいて入れ換えることはできない。しかし、ソフトウェアの視点に基づいて処理順序を入れ換えても問題無く処理を行える場合もある。例えば、依存関係の無い複数のデータ構造体に対して同じ処理を繰り返す場合や、独立の処理を複数行う場合である。本実施形態では、従来(図5(b))のDATAsA,DATAsBを使用したFuncA,FuncBの実行順序のスケジューリングを例にして説明を行う。DATAsA,DATAsBは各々独立したデータ構造体であり、FuncA,FuncBは各々独立したルーチンであり、DATAsA,DATAsBの読み出し、FuncA,FuncBの読み出し及び実行の順序はそれぞれ入れ替え可能である。DATAsA,DATAsB及びFuncA,FuncBはそれぞれプログラムから見たデータ単位及び命令単位である。
図2に、従来(図5(b))のフロー・チャートに本発明のスケジューリング部分(S110,S112,S114,S116,S118,S122,S124,S126,S128,S130)を追加したフロー・チャート図を示す。DATAsA及びDATAsBの読み出し及び処理部分(S172,S174,S182,S176,S178,S186)は従来(図5(b))と同様である。
本発明のスケジューリング方法は、DATAsAを読み出す(S172)直前に、DATAsAがデータ・キャッシュ30に存在するか確認する(S114)。この確認は、テスト命令を用いて行う。テスト命令をMPU10に送ると、MPU10はDATAsAがデータ・キャッシュ30に存在する(“1”)か存在しない(“0”)かを調べ、その結果(“1”or“0”)を汎用レジスタ32に記憶する。
DATAsAがデータ・キャッシュ30内に存在していれば、DATAsAをデータ・キャッシュ30から読み出して(S172)、DATAsAを使用したFuncA及びFuncBをMPU10に実行させる(S174,S182)。存在していなければ、従来から用いられているタッチ命令をMPU10に送り、DATAsAのプリフェッチを行う(S118)。このプリフェッチは、実行ユニット26の他の命令実行と並行して行うことが可能である。
DATAsBについても、DATAsAと同様に、DATAsBを読み出す(S176)直前に、DATAsBがデータ・キャッシュ30内に存在するかテスト命令で確認する(S124)。DATAsAの場合と同様に、DATAsBがデータ・キャッシュ30内に存在する場合はDATAsBを読み出して(S176)、MPU10にFuncA及びFuncBを実行させる(S178,S186)。存在しない場合はDATAsBをプリフェッチする(S128)。
本発明では、DATAsAを使用したFuncA及びFuncBが完了したか否かを示すパラメータDoneDAと、DATAsBを使用したFuncA及びFuncBが完了したか否かを示すパラメータDoneDBを使用している。DoneDA,DoneDBが“1”の場合はDATAsA,DATAsBを使用したFuncA及びFuncBがそれぞれ完了していることを示し、DoneDA,DoneDBが“0”の場合はDATAsA,DATAsBを使用するFuncA及びFuncBがそれぞれ未完了であることを示す。DoneDA及びDoneDBはデータ・キャッシュ30又は外部メモリ40に記憶される。
DoneDA,DoneDBの初期値は、“0”である(S110)。DATAsAを使用したFuncA及びFuncBが完了すれば、DoneDAは“1”に更新され(S116)、DATAsBを使用したFuncA及びFuncBが完了すれば、DoneDBも“1”に更新される(S126)。DoneDA,DoneDBを参照することにより、DATAsA,DATAsBを使用したFuncA及びFuncBが完了したか否かをそれぞれ確認することができる(S112,S122,S130)。
DoneDAを参照したときに(S112)DATAsAを使用したFuncA及びFuncBが未完了の場合は、DATAsAがデータ・キャッシュ30内に存在するか確認を行う(S114)。同様に、DoneDBを参照したときに(S122)DATAsBを使用したFuncA及びFuncBが未完了の場合は、DATAsBがデータ・キャッシュ30内に存在するか確認を行う(S124)。
データ又は命令のプリフェッチ中でも、実行ユニット26は他の命令を実行できる。例えば、DoneDAが“0”かつDATAsAがデータ・キャッシュ30に無く、DoneDBが“0”かつDATAsBがデータ・キャッシュ30内に存在する場合、DATAsAのプリフェッチ中にDATAsBを使用したFuncA及びFuncBを実行することができる。
次に、DATAsA,DATAsBを使用したFuncA,FuncBの実行順序のスケジューリングについて、その作用を説明する。
最初にDoneDA及びDoneDBが初期化される(S110)。次に、DATAsAを使用したFuncA及びFuncBが完了しているか否かを、DoneDAを参照して調べる(S112)。DoneDAが“0”の場合は、DATAsAを使用したFuncA及びFuncBがまだ実行されていないので、DATAsAがデータ・キャッシュ30内に存在するか否かをテスト命令で確認する(S114)。
DATAsAがデータ・キャッシュ30内に存在するか否かの判断は、DATAsAに含まれる全データがデータ・キャッシュ30に存在するか否かで判断することもできるが、簡略化して、DATAsAの先頭データDATA−A0がデータ・キャッシュ30内に存在するか否かで判断することもできる。DATA−A0がデータ・キャッシュ30に存在すれば、他の部分(DATA−A1,DATA−A2,・・・・・)もデータ・キャッシュ30に存在すると見なすことで、キャッシュ・ヒットとヒット・ミスの判断を簡単かつ高速に行うことができる。
DATAsAがデータ・キャッシュ30内に存在した場合は、DATAsAをデータ・キャッシュ30から読み出して(S172)、FuncA,FuncBを実行する(S174,S182)。DATAsAを使用したFuncA及びFuncBが完了すると、DoneDAを“1”に更新する(S116)。DoneDAが“1”であると、これらDATAsAに関係する部分(S114,S172,S174,S182,S116,S118)は実行されなくなる(S112)。
DATAsAがデータ・キャッシュ30内に存在しない場合は、従来のプリフェッチでも使用していたタッチ命令をMPU10に送り(S118)、DATAsAをプリフェッチする。このDATAsAのプリフェッチ中に、DATAsBを使用したFuncA及びFuncBを並行して実行することも可能である。
次のDATAsBに関係する部分(S122,S124,S176,S178,S186,S126,S128)は、上述したDATAsAに関係する部分(S112,S114,S172,S174,S182,S116,S118)と同様である。DATAsBを使用したFuncA及びFuncBが未完了であれば(S122)、DATAsBがデータ・キャッシュ30内に存在するか否かをテスト命令で確認する(S124)。データ・キャッシュ30内に存在した場合は、DATAsBをデータ・キャッシュ30から読み出して(S176)、FuncA,FuncBを実行する(S178,S186)。存在しない場合は、DATAsBのプリフェッチを行う(S128)。
DoneDA及びDoneDBが共に“1”であれば、DATAsA,DATAsBを使用したFuncA,FuncBは全て完了している(S130)。従来(図5(b))の場合と異なり、例えばDATAsAがデータ・キャッシュ30に無く、DATAsBがデータ・キャッシュ30に存在する場合、DATAsAのプリフェッチ(S118)と並行して、DATAsBを使用したFuncA及びFuncBが実行できる(S178,S186)。DATAsBを使用したFuncA及びFuncBが完了すると(S126)、その処理中にデータ・キャッシュ30にプリフェッチされたDATAsAを使用したFuncA及びFuncBを実行する(S174,S182)。
データ・キャッシュ30に存在しないDATAsAよりもデータ・キャッシュ30に存在するDATAsBを先に処理すると共に、DATAsBの処理と並行してDATAsAのプリフェッチを行えるため、データ・キャッシュ30のヒット・ミス時のMPU10の待ち時間を短くできる。データ・キャッシュ30のヒット・ミスを確認した後にプリフェッチを行うので、プログラムの実行前の予想に基づいた従来のプリフェッチとは異なり、無駄なプリフェッチは実行されない。
以上、2つのデータ構造体(DATAsA,DATAsB)を例にして説明したが、この並列処理が可能なデータ構造体数は任意である。例えば並列処理が可能なデータ構造体数が5個の場合は、各データ構造体を使用したルーチンが完了しているか否かを示すパラメータを5つ(例えばDoneDA,DoneDB,DoneDC,DoneDD,DoneDE)に増やして、図2と同様に各データ構造体を読み出す直前にテスト命令を実行し、データ・キャッシュ30内に存在することが確認されたデータ構造体から処理を実行することができる。並列処理が可能なデータ構造体のグループが複数存在する場合もある。データ構造体は、データを1つだけしか含まない場合もある。
以上、データ構造体(DATAsA,DATAsB)を例にして説明したが、ルーチン(FuncA,FuncB)を実行する際のFuncA,FuncBの読み出しについても、本発明のスケジューリング方法を用いることができる。図3に、従来(図6)のフロー・チャートに本発明のスケジューリング部分(S140,S142,S144,S146,S148,S152,S154,S156,S158,S160)を追加したフロー・チャートを示す。FuncA及びFuncBの読み出し及び実行部分(S190,S192,S194,S196)は従来(図6)と同様である。
図3において、DoneFAはFuncAが実行されたか否かを示すパラメータであり、DoneFBはFuncBが実行されたか否かを示すパラメータである。DoneFA,DoneFBが“1”の場合はFuncA,FuncBがそれぞれ実行済みであることを示し、DoneFA,DoneFBが“0”の場合はFuncA,FuncBがそれぞれ実行されていないことを示す。
ルーチン(FuncA,FuncB)のスケジューリングは、上述したデータ構造体(DATAsA,DATAsB)のスケジューリングと同様である。FuncA,FuncBの読み出し(S190,S194)前に、FuncA,FuncBが命令キャッシュ20に存在するか否かをテスト命令で確認する(S144,S154)。存在すれば、その命令を命令キャッシュ20から読み出して(S190,S194)、実行する(S192,S196)。存在しなければ、その命令をプリフェッチする(S148,S158)。
FuncAが命令キャッシュ20内に存在するか否かの判断は、FuncAに含まれる全命令が命令キャッシュ20に存在するか否かで判断することもできるが、簡略化して、FuncAの先頭命令Inst−A0が命令キャッシュ20内に存在するか否かで判断することもできる。Inst−A0が命令キャッシュ20に存在すれば、他の部分(Inst−A1,Inst−A2,・・・・・)も命令キャッシュ20に存在すると見なすことで、キャッシュ・ヒットとヒット・ミスの判断を簡単かつ高速に行うことができる。
従来(図6)の場合と異なり、FuncAが命令キャッシュ20に無く、FuncBが命令キャッシュ20に存在する場合は、FuncAのプリフェッチ(S148)と並行して、FuncBを実行することができる(S196)。FuncBが実行し終わると(S156)、FuneBが実行されている間に命令キャッシュ20にプリフェッチされたFuncAを実行する(S192)。
命令キャッシュ20に存在しないFuncAよりも命令キャッシュ20に存在するFuncBを先に実行すると共に、FuncBの実行と並行してFuncAのプリフェッチを行えるため、命令キャッシュ20のヒット・ミス時のMPU10の待ち時間を短くできる。命令キャッシュ20のヒット・ミスを確認した後にプリフェッチを行うので、プログラム実行前の予想に基づいた従来のプリフェッチとは異なり、無駄なプリフェッチは実行されない。
以上、2つのルーチン(FuncA,FuncB)を例にして説明したが、この並列実行が可能なルーチン数は任意である。例えば並列実行が可能なルーチン数が5個の場合は、各ルーチンの実行が終了しているか否かを示すパラメータを5つ(例えばDoneFA,DoneFB,DoneFC,DoneFD,DoneFE)に増やして、図3と同様に各ルーチンの読み出し前にテスト命令を実行し、命令キャッシュ20内に存在することが確認されたルーチンから実行していくことができる。並列処理が可能なルーチンのグループが複数存在する場合もある。ルーチンは、命令を1つだけしか含まない場合もある。
上述したデータ構造体の読み出し時のスケジューリングとルーチンの読み出し時のスケジューリングとは、任意に組み合わせることができる。例えば、図2に示したFuncA及びFuncBの読み出しに、図3に示したスケジューリングを用いることもできる。命令キャッシュ20とデータ・キャッシュ30とは各々独立しているので、命令キャッシュ20の読み書きとデータ・キャッシュ30の読み書きとはそれぞれ独立して実行できる。
図5(b)及び図6に示す従来のフロー・チャートに追加された本発明のスケジューリング部分は、従来のルーチン又はデータ構造体の読み出し及び処理に関係しない部分には一切分岐していない。本発明で追加したスケジューリング部分がフロー・チャートの他の部分に影響を与えることはない。本発明は、データ構造体及びルーチンの順序入れ換えをプログラムで指示している。OSのスケジューラで入れ替えを制御するマルチ・スレッドと異なり、コンテクスト・スイッチを起動させないため、MPU及びOSの負担も少なく高速処理が可能である。
並列処理が可能なルーチン又はデータ構造体を読み出す直前部分へのテスト命令等の追加は、コンパイル時に自動で追加できる場合と、ソース・プログラムに手動で追加する場合がある。一般に、行列演算等のアルゴリズムの場合はコンパイラが並行性を検出できるので、コンパイル時にテスト命令等を自動的に追加できることが多い。I/O(入力/出力)に関係する部分は、コンパイラで並行性を検出できないので、手動でテスト命令等を追加することが多い。
以上、本発明は特定の実施例について説明されたが、本発明はこれらに限定されるものではない。例えば、アドレス変換時に使用されるTLB(Translation Lookaside Buffer)にテスト命令を送ることもできる。TLBは、外部メモリ40に存在するアドレス変換テーブルの一部が記憶されるキャッシュ・メモリである。TLBに格納されたアドレス変換テーブルの入れ替えは、PTE(Page Table Entry)の自動検索によって行われる。TLBを使用する場合、キャッシュ・ヒットは、命令キャッシュ(又はデータ・キャッシュ)とTLBの両方がキャッシュ・ヒットしたことを意味する。
PTEの自動検索は、外部メモリ40を複数回アクセスしながらTLBの格納データの入れ替えを行う。本発明のMPU及び命令実行順序スケジューリング方法を用いることにより、データ・キャッシュ及び命令キャッシュのヒット・ミスの場合と同様に、TLBのヒット・ミスの場合もMPUの待ち時間を短くすることができる。テスト命令は、命令キャッシュ,データ・キャッシュ,TLBの各キャッシュ・ヒットを一括して調べてもよいし、各々のキャッシュ・ヒットを独立に調べてもよい。その他、本発明はその趣旨を逸脱しない範囲で当業者の知識に基づき種々なる改良,修正,変形を加えた態様で実施できるものである。
本発明のマイクロプロセッサは、所要のルーチン又はデータ構造体がキャッシュ・メモリ(命令キャッシュ,データ・キャッシュ)に存在するか確認する命令(テスト命令)が追加されている。テスト命令により、これから読み出すルーチン又はデータ構造体がキャッシュ・メモリに存在するか否かを、そのルーチン又はデータ構造体を読み出す直前に知ることができる。
本発明のスケジューリング方法は、上述したテスト命令により、並列処理が可能なルーチン又はデータ構造体に対して、これから読み出すルーチン又はデータ構造体がキャッシュ・メモリに存在するか否かを調べ、その結果に基づいて、キャッシュ・メモリに存在するルーチン又はデータ構造体を優先的に読み出す。キャッシュ・メモリに存在しないルーチン又はデータ構造体よりもキャッシュ・メモリに存在するルーチン又はデータ構造体を先に読み出して処理すると共に、その処理と並行してキャッシュ・メモリに存在しないルーチン又はデータ構造体のプリフェッチを行うため、キャッシュ・メモリのヒット・ミスにより生じるマイクロプロセッサの待ち時間を短くすることができる。
【図面の簡単な説明】
図1は、本発明に係るMPUの一構成例を示すブロック図である。
図2は、本発明に係るスケジューリングの一実施例を示すフロー・チャートである。
図3は、本発明に係るスケジューリングの他の実施例を示すフロー・チャートである。
図4は、従来のMPUの一構成例を示すブロック図である。
図5(a)は、MPUが行うデータ処理の一例を示すフロー・チャートであり、図5(b)は図5(a)中の同一データ構造体を使用するルーチンを続けて実行するフロー・チャート図である。
図6は、MPUのルーチン実行の一例を示すフロー・チャートである。
本発明は、マイクロプロセッサ及び命令実行順序スケジューリング方法に関し、より詳しくは、プログラムが指示する順序で命令を実行するマイクロプロセッサ及びマイクロプロセッサの命令実行順序のスケジューリング方法に関する。
背景技術
図4にMPU(マイクロプロセッサ・ユニット)10’の一構成例を示す。MPU10’は、外部メモリ40よりも小容量かつ高速アクセス可能で、外部メモリ40から読み出される命令の一部及びデータの一部が記憶されるキャッシュ・メモリ14と、キャッシュ・メモリ14又は外部メモリ40から命令又はデータを読み出すフェッチ・ユニット22と、読み出された命令を実行する実行ユニット26’と、実行中の命令が使用するデータが記憶される汎用レジスタ32と、外部デバイス(40)が接続されるバスインターフェイス・ユニット12を含む。
キャッシュ・メモリ14は、命令が記憶される命令キャッシュ20とデータが記憶されるデータ・キャッシュ30とを含む。MPU10’はバスインターフェイス・ユニット12を介して外部メモリ(半導体記憶装置)40に接続されており、外部メモリ40とMPU10’間で命令及びデータの読み書きが行われる。ただし、キャッシュ・メモリ20,30のアクセス速度は外部メモリ40よりも60〜100倍高速なので、外部メモリ40よりもキャッシュ・メモリ20,30の方を優先的に利用する。
MPU10’が必要とする命令又はデータがキャッシュ・メモリ20,30に存在しない場合は、外部メモリ40から命令又はデータを読み出す。このキャッシュ・メモリ20,30に存在しない場合の外部メモリ40からの命令又はデータの読み出しはハードウェアで制御される。例えば、MPU10’全体の制御を行うコントロール・ユニット(図示していない)がこの制御を行う。
外部メモリ40はハード・ディスク(固定磁気記憶装置)42とも接続されており、外部メモリ40とハード・ディスク42間で命令及びデータの読み書きが行われる。MPU10’が必要とする命令又はデータが外部メモリ40に存在しない場合は、ハード・ディスク42から命令又はデータを読み出す。この外部メモリ40に存在しない場合のハード・ディスク42からの命令又はデータの読み出しはソフトウェアで制御される。通常はOS(オペレーティング・システム)がこの制御を行う。
MPU10’に命令を実行させる場合、フェッチ・ユニット22がその命令を命令キャッシュ20又は外部メモリ40から読み出す。命令キャッシュ20に目的の命令が存在すれば命令キャッシュ20からその命令を読み出し、無ければ外部メモリ40から読み出す。外部メモリ40から命令を読み出した場合、読み出した命令は命令キャッシュ20にも送られ記憶される。
フェッチ・ユニット22に読み出された命令は、実行ユニット26’に送られ実行される。命令の実行に必要なデータは、データ・キャッシュ30又は外部メモリ40から汎用レジスタ32に読み出される。データ・キャッシュ30に目的のデータが存在すればデータ・キャッシュ30からそのデータを読み出し、無ければ外部メモリ40から読み出す。外部メモリ40から読み出したデータはデータ・キャッシュ30にも送られ記憶される。
図5(a)に、2つのデータ(DATAsA,DATAsB)を使用する2種類のルーチン(FuncA,FuncB)をMPU10’に実行させるプログラムを例としたフロー・チャートを示す。図5(a)では、主にデータ(DATAsA,DATAsB)の読み出し及び処理部分を図示している。MPU10’は、図5(a)に示すプログラムで指示された実行順序でデータの読み出し及び処理を行う。
DATAsAとDATAsBは、それぞれ幾つかのデータ(DATA−A0,DATA−A1,DATA−A2,・・・・・と、DATA−B0,DATA−B1,DATA−B2,・・・・・)から構成されたデータ構造体である。これらDATAsAとDATAsBは各々独立したデータである。
FuncA,FuncBは、プログラムの一部分を構成する、ある機能をもった一連の命令群である。FuncAとFuncBは、それぞれ幾つかの命令(Inst−A0,Inst−A1,Inst−A2,・・・・・と、Inst−B0,Inst−B1,Inst−B2,・・・・・)から構成されている。FuncAとFuncBは各々独立した命令であり、例えば、分岐命令が無い限りFuncAはInst−A0,Inst−A1,Inst−A2,・・・・・の順に命令を実行し、FuncBはInst−B0,Inst−B1,Inst−B2,・・・・・の順に命令を実行する。
図5(a)に示すように、MPU10’は、DATAsAを読み出して(S172)、DATAsAを使用したFuncAを実行し(S174)、次にDATAsBを読み出して(S176)、DATAsBを使用したFuncAを実行する(S178)。続いて、DATAsAを読み出して(S172’)、DATAsAを使用したFuncBを実行し(S182)、次にDATAsBを読み出して(S176’)、DATAsBを使用したFuncBを実行する(S186)。
図5(a)に示す順序でデータを読み出す場合、読み出そうとしているデータがデータ・キャッシュ30に無ければ、MPU10’の待ち時間が増加する。例えばDATAsAを読み出してFuncA(S174)を実行する場合、もしDATAsAがデータ・キャッシュ30に無ければ、外部メモリ40からDATAsAを読み出す。外部メモリ40のアクセス速度はデータ・キャッシュ30よりも60〜100倍遅いので、この外部メモリ40からのデータ読み出しによるMPU10’の待ち時間は60〜100倍長くなる。
しかも、仮にDATAsBがデータ・キャッシュ30内に存在し、DATAsBの方がDATAsAよりも短時間(1/100〜1/60の時間)で読み出せる状態であっても、DATAsAを外部メモリ40から読み出して(S172)、この読み出したDATAsAを使用したFuncA(S174)が実行し終わるまで、DATAsBの読み出し(S176)及びFuncB(S178)を実行することはできない。
DATAsAとDATAsBとは独立したデータであり、FuncAとFuncBとは独立した命令であるので、プログラムの実行順序を図5(a)のフロー・チャートから図5(b)に示すフロー・チャートに変更することも可能である。MPU10’は、DATAsAを読み出して(S172)FuncA及びFuncBを実行し(S174,S182)、次にDATAsBを読み出して(S176)FuncA及びFuncBを実行する(S178,S186)。しかし、この場合も図5(a)と同様に、読み出そうとしているデータがデータ・キャッシュ30に無ければ、MPU10’の待ち時間が増加する。
以上、DATAsA,DATAsBの読み出しを例にして説明したが、FuncA,FuncBを実行する際のFuncA,FuncBの読み出しも同様である。図6に、2つのルーチン(FuncA,FuncB)をMPU10’に実行させるプログラムを例としたフロー・チャートを示す。MPU10’は、FuncAを読み出して(S190)実行し(S192)、次にFuncBを読み出して(S194)実行する(S196)。
このFuncA,FuncBの実行の場合も、上述したデータ(図5(a),(b))の場合と同様に、命令キャッシュ20に目的のルーチンが無ければ、MPU10の待ち時間が長くなり、MPU10の利用率は低下する。
このようなキャッシュ・メモリ20,30のヒット・ミスによるMPU10’の待ち時間の増加を減少させる方法として、実行中の処理と並行して、プログラムが近い将来必要になると予想した命令又はデータをあらかじめMPU10’に読み出しておくプリフェッチ(先読み)がある。
プリフェッチには、例えばタッチ命令を使用する。タッチ命令は、命令又はデータの読み出しをフェッチ・ユニット22に指示する命令である。タッチ命令が実行されると、タッチ命令で要求された命令又はデータが外部メモリ40からキャッシュ・メモリ20,30に読み出される。タッチ命令の実行中であっても、実行ユニット26’は他の命令を並列して実行することができる。タッチ命令を用いることで、プログラム側からMPU10’に、近い将来アクセスを行うと予想される命令又はデータを知らせることができる。MPU10’はタッチ命令で知らされた命令又はデータをキャッシュ・メモリ20,30に予め読み出しておくことで、キャッシュ・メモリ20,30のヒット率の向上を図る。
しかし、プリフェッチする命令又はデータの予測は、通常プログラムを実行する以前のソース・プログラムの状態で行われる。プログラムの実行以前に必要になると予想された命令又はデータを読み出すため、プリフェッチされた命令又はデータが本当に必要になるとは限らない。プリフェッチが有効に機能するかどうかはプログラム実行前の予測の精度に左右され、必ず効果が現れるわけではない。
プログラムの実行途中で、OSによって命令実行順序の変更を行うマルチ・スレッドと呼ばれる方法もある。実行中のスレッドが待ち状態になると、スケジューラが実行可能な他のスレッドを実行状態に切り換える。スレッドはプログラムを構成する実行順序の入れ替えが可能な単位であり、各スレッドはプログラムの実行状態に関するコンテクストと呼ばれる情報を持つ。OSがスレッド単位で実行順序を入れ替えるときには、コンテクスト・スイッチと呼ばれるコンテキストのレジスタへの退避及び復帰が発生する。コンテクスト・スイッチの実行には、実行中のスレッドが待ち状態になったことを示す割り込み,スケジューラの起動,レジスタへのアクセス,スレッドの実行切り換えが伴う。ハード・ディスクへのアクセス待ち時間にコンテキスト・スイッチを実行する場合は、コンテクスト・スイッチの実行時間は十分短く、マルチ・スレッドは有効に機能する。しかし、キャッシュ・ミスによる待ち時間にコンテキスト・スイッチを実行する場合は、コンテキスト・スイッチの実行時間は短くなく、マルチ・スレッドは有効に機能しない。
プログラムの実行途中で、MPU内部で命令実行順序の変更を行うアウト・オブ・オーダーと呼ばれる方法もある。アウト・オブ・オーダは、複数の実行ユニットを用いた並列処理を行うスーパー・スカラー方式のMPUで行われ、実行ユニットが待ち状態になると、プログラムが指示する命令実行順序に制限されず、実行可能な命令から先に実行していく。しかし、MPU側で勝手に命令実行順序を変更しているので、先に実行した命令が全て無駄になることも多い。
発明の開示
本発明の目的は、キャッシュ・メモリのヒット・ミスによるMPUの利用率の低下を低減させることにある。
本発明のマイクロプロセッサは、実行ユニットが実行する命令に、所要のルーチン又はデータ構造体が前記キャッシュ・メモリ内に存在するか否かを確認するテスト命令が含まれる。このようなマイクロプロセッサは、ルーチン又はデータ構造体を読み出す直前にテスト命令を実行することにより、読み出そうとしているルーチン又はデータ構造体がキャッシュ・メモリ内に存在するか否かを事前に知ることができる。
本発明の命令実行順序スケジューリング方法は、並列処理が可能なルーチン又はデータ構造体を読み出す直前に、そのルーチン又はデータ構造体がキャッシュ・メモリ内に存在するか否かを確認する確認ステップと、並列処理が可能なルーチン又はデータ構造体の中で、キャッシュ・メモリ内に存在することが確認されたルーチン又はデータ構造体から優先的にマイクロプロセッサに処理させる優先実行ステップとを含む。
発明を実施するための最良の態様
次に、本発明に係るマイクロプロセッサ及び命令実行順序スケジューリング方法の実施の形態について、図面に基づいて詳しく説明する。
図1に示すように、本発明に係るMPU10の実行ユニット26には、指定されたルーチン又はデータ構造体がキャッシュ・メモリ14内に存在するか確認するテスト命令が追加されている。テスト命令がMPU10に送られると、MPU10はテスト命令が指定するルーチン又はデータ構造体が命令キャッシュ20又はデータ・キャッシュ30に存在するか調べ、存在している(“1”)か存在していない(“0”)かの結果を返す。この結果は汎用レジスタ32に記憶される。テスト命令は、他の命令と同様にMPU10の実行ユニット26で実行される。
プログラムで指示される処理順序をハードウェアの視点に基づいて入れ換えることはできない。しかし、ソフトウェアの視点に基づいて処理順序を入れ換えても問題無く処理を行える場合もある。例えば、依存関係の無い複数のデータ構造体に対して同じ処理を繰り返す場合や、独立の処理を複数行う場合である。本実施形態では、従来(図5(b))のDATAsA,DATAsBを使用したFuncA,FuncBの実行順序のスケジューリングを例にして説明を行う。DATAsA,DATAsBは各々独立したデータ構造体であり、FuncA,FuncBは各々独立したルーチンであり、DATAsA,DATAsBの読み出し、FuncA,FuncBの読み出し及び実行の順序はそれぞれ入れ替え可能である。DATAsA,DATAsB及びFuncA,FuncBはそれぞれプログラムから見たデータ単位及び命令単位である。
図2に、従来(図5(b))のフロー・チャートに本発明のスケジューリング部分(S110,S112,S114,S116,S118,S122,S124,S126,S128,S130)を追加したフロー・チャート図を示す。DATAsA及びDATAsBの読み出し及び処理部分(S172,S174,S182,S176,S178,S186)は従来(図5(b))と同様である。
本発明のスケジューリング方法は、DATAsAを読み出す(S172)直前に、DATAsAがデータ・キャッシュ30に存在するか確認する(S114)。この確認は、テスト命令を用いて行う。テスト命令をMPU10に送ると、MPU10はDATAsAがデータ・キャッシュ30に存在する(“1”)か存在しない(“0”)かを調べ、その結果(“1”or“0”)を汎用レジスタ32に記憶する。
DATAsAがデータ・キャッシュ30内に存在していれば、DATAsAをデータ・キャッシュ30から読み出して(S172)、DATAsAを使用したFuncA及びFuncBをMPU10に実行させる(S174,S182)。存在していなければ、従来から用いられているタッチ命令をMPU10に送り、DATAsAのプリフェッチを行う(S118)。このプリフェッチは、実行ユニット26の他の命令実行と並行して行うことが可能である。
DATAsBについても、DATAsAと同様に、DATAsBを読み出す(S176)直前に、DATAsBがデータ・キャッシュ30内に存在するかテスト命令で確認する(S124)。DATAsAの場合と同様に、DATAsBがデータ・キャッシュ30内に存在する場合はDATAsBを読み出して(S176)、MPU10にFuncA及びFuncBを実行させる(S178,S186)。存在しない場合はDATAsBをプリフェッチする(S128)。
本発明では、DATAsAを使用したFuncA及びFuncBが完了したか否かを示すパラメータDoneDAと、DATAsBを使用したFuncA及びFuncBが完了したか否かを示すパラメータDoneDBを使用している。DoneDA,DoneDBが“1”の場合はDATAsA,DATAsBを使用したFuncA及びFuncBがそれぞれ完了していることを示し、DoneDA,DoneDBが“0”の場合はDATAsA,DATAsBを使用するFuncA及びFuncBがそれぞれ未完了であることを示す。DoneDA及びDoneDBはデータ・キャッシュ30又は外部メモリ40に記憶される。
DoneDA,DoneDBの初期値は、“0”である(S110)。DATAsAを使用したFuncA及びFuncBが完了すれば、DoneDAは“1”に更新され(S116)、DATAsBを使用したFuncA及びFuncBが完了すれば、DoneDBも“1”に更新される(S126)。DoneDA,DoneDBを参照することにより、DATAsA,DATAsBを使用したFuncA及びFuncBが完了したか否かをそれぞれ確認することができる(S112,S122,S130)。
DoneDAを参照したときに(S112)DATAsAを使用したFuncA及びFuncBが未完了の場合は、DATAsAがデータ・キャッシュ30内に存在するか確認を行う(S114)。同様に、DoneDBを参照したときに(S122)DATAsBを使用したFuncA及びFuncBが未完了の場合は、DATAsBがデータ・キャッシュ30内に存在するか確認を行う(S124)。
データ又は命令のプリフェッチ中でも、実行ユニット26は他の命令を実行できる。例えば、DoneDAが“0”かつDATAsAがデータ・キャッシュ30に無く、DoneDBが“0”かつDATAsBがデータ・キャッシュ30内に存在する場合、DATAsAのプリフェッチ中にDATAsBを使用したFuncA及びFuncBを実行することができる。
次に、DATAsA,DATAsBを使用したFuncA,FuncBの実行順序のスケジューリングについて、その作用を説明する。
最初にDoneDA及びDoneDBが初期化される(S110)。次に、DATAsAを使用したFuncA及びFuncBが完了しているか否かを、DoneDAを参照して調べる(S112)。DoneDAが“0”の場合は、DATAsAを使用したFuncA及びFuncBがまだ実行されていないので、DATAsAがデータ・キャッシュ30内に存在するか否かをテスト命令で確認する(S114)。
DATAsAがデータ・キャッシュ30内に存在するか否かの判断は、DATAsAに含まれる全データがデータ・キャッシュ30に存在するか否かで判断することもできるが、簡略化して、DATAsAの先頭データDATA−A0がデータ・キャッシュ30内に存在するか否かで判断することもできる。DATA−A0がデータ・キャッシュ30に存在すれば、他の部分(DATA−A1,DATA−A2,・・・・・)もデータ・キャッシュ30に存在すると見なすことで、キャッシュ・ヒットとヒット・ミスの判断を簡単かつ高速に行うことができる。
DATAsAがデータ・キャッシュ30内に存在した場合は、DATAsAをデータ・キャッシュ30から読み出して(S172)、FuncA,FuncBを実行する(S174,S182)。DATAsAを使用したFuncA及びFuncBが完了すると、DoneDAを“1”に更新する(S116)。DoneDAが“1”であると、これらDATAsAに関係する部分(S114,S172,S174,S182,S116,S118)は実行されなくなる(S112)。
DATAsAがデータ・キャッシュ30内に存在しない場合は、従来のプリフェッチでも使用していたタッチ命令をMPU10に送り(S118)、DATAsAをプリフェッチする。このDATAsAのプリフェッチ中に、DATAsBを使用したFuncA及びFuncBを並行して実行することも可能である。
次のDATAsBに関係する部分(S122,S124,S176,S178,S186,S126,S128)は、上述したDATAsAに関係する部分(S112,S114,S172,S174,S182,S116,S118)と同様である。DATAsBを使用したFuncA及びFuncBが未完了であれば(S122)、DATAsBがデータ・キャッシュ30内に存在するか否かをテスト命令で確認する(S124)。データ・キャッシュ30内に存在した場合は、DATAsBをデータ・キャッシュ30から読み出して(S176)、FuncA,FuncBを実行する(S178,S186)。存在しない場合は、DATAsBのプリフェッチを行う(S128)。
DoneDA及びDoneDBが共に“1”であれば、DATAsA,DATAsBを使用したFuncA,FuncBは全て完了している(S130)。従来(図5(b))の場合と異なり、例えばDATAsAがデータ・キャッシュ30に無く、DATAsBがデータ・キャッシュ30に存在する場合、DATAsAのプリフェッチ(S118)と並行して、DATAsBを使用したFuncA及びFuncBが実行できる(S178,S186)。DATAsBを使用したFuncA及びFuncBが完了すると(S126)、その処理中にデータ・キャッシュ30にプリフェッチされたDATAsAを使用したFuncA及びFuncBを実行する(S174,S182)。
データ・キャッシュ30に存在しないDATAsAよりもデータ・キャッシュ30に存在するDATAsBを先に処理すると共に、DATAsBの処理と並行してDATAsAのプリフェッチを行えるため、データ・キャッシュ30のヒット・ミス時のMPU10の待ち時間を短くできる。データ・キャッシュ30のヒット・ミスを確認した後にプリフェッチを行うので、プログラムの実行前の予想に基づいた従来のプリフェッチとは異なり、無駄なプリフェッチは実行されない。
以上、2つのデータ構造体(DATAsA,DATAsB)を例にして説明したが、この並列処理が可能なデータ構造体数は任意である。例えば並列処理が可能なデータ構造体数が5個の場合は、各データ構造体を使用したルーチンが完了しているか否かを示すパラメータを5つ(例えばDoneDA,DoneDB,DoneDC,DoneDD,DoneDE)に増やして、図2と同様に各データ構造体を読み出す直前にテスト命令を実行し、データ・キャッシュ30内に存在することが確認されたデータ構造体から処理を実行することができる。並列処理が可能なデータ構造体のグループが複数存在する場合もある。データ構造体は、データを1つだけしか含まない場合もある。
以上、データ構造体(DATAsA,DATAsB)を例にして説明したが、ルーチン(FuncA,FuncB)を実行する際のFuncA,FuncBの読み出しについても、本発明のスケジューリング方法を用いることができる。図3に、従来(図6)のフロー・チャートに本発明のスケジューリング部分(S140,S142,S144,S146,S148,S152,S154,S156,S158,S160)を追加したフロー・チャートを示す。FuncA及びFuncBの読み出し及び実行部分(S190,S192,S194,S196)は従来(図6)と同様である。
図3において、DoneFAはFuncAが実行されたか否かを示すパラメータであり、DoneFBはFuncBが実行されたか否かを示すパラメータである。DoneFA,DoneFBが“1”の場合はFuncA,FuncBがそれぞれ実行済みであることを示し、DoneFA,DoneFBが“0”の場合はFuncA,FuncBがそれぞれ実行されていないことを示す。
ルーチン(FuncA,FuncB)のスケジューリングは、上述したデータ構造体(DATAsA,DATAsB)のスケジューリングと同様である。FuncA,FuncBの読み出し(S190,S194)前に、FuncA,FuncBが命令キャッシュ20に存在するか否かをテスト命令で確認する(S144,S154)。存在すれば、その命令を命令キャッシュ20から読み出して(S190,S194)、実行する(S192,S196)。存在しなければ、その命令をプリフェッチする(S148,S158)。
FuncAが命令キャッシュ20内に存在するか否かの判断は、FuncAに含まれる全命令が命令キャッシュ20に存在するか否かで判断することもできるが、簡略化して、FuncAの先頭命令Inst−A0が命令キャッシュ20内に存在するか否かで判断することもできる。Inst−A0が命令キャッシュ20に存在すれば、他の部分(Inst−A1,Inst−A2,・・・・・)も命令キャッシュ20に存在すると見なすことで、キャッシュ・ヒットとヒット・ミスの判断を簡単かつ高速に行うことができる。
従来(図6)の場合と異なり、FuncAが命令キャッシュ20に無く、FuncBが命令キャッシュ20に存在する場合は、FuncAのプリフェッチ(S148)と並行して、FuncBを実行することができる(S196)。FuncBが実行し終わると(S156)、FuneBが実行されている間に命令キャッシュ20にプリフェッチされたFuncAを実行する(S192)。
命令キャッシュ20に存在しないFuncAよりも命令キャッシュ20に存在するFuncBを先に実行すると共に、FuncBの実行と並行してFuncAのプリフェッチを行えるため、命令キャッシュ20のヒット・ミス時のMPU10の待ち時間を短くできる。命令キャッシュ20のヒット・ミスを確認した後にプリフェッチを行うので、プログラム実行前の予想に基づいた従来のプリフェッチとは異なり、無駄なプリフェッチは実行されない。
以上、2つのルーチン(FuncA,FuncB)を例にして説明したが、この並列実行が可能なルーチン数は任意である。例えば並列実行が可能なルーチン数が5個の場合は、各ルーチンの実行が終了しているか否かを示すパラメータを5つ(例えばDoneFA,DoneFB,DoneFC,DoneFD,DoneFE)に増やして、図3と同様に各ルーチンの読み出し前にテスト命令を実行し、命令キャッシュ20内に存在することが確認されたルーチンから実行していくことができる。並列処理が可能なルーチンのグループが複数存在する場合もある。ルーチンは、命令を1つだけしか含まない場合もある。
上述したデータ構造体の読み出し時のスケジューリングとルーチンの読み出し時のスケジューリングとは、任意に組み合わせることができる。例えば、図2に示したFuncA及びFuncBの読み出しに、図3に示したスケジューリングを用いることもできる。命令キャッシュ20とデータ・キャッシュ30とは各々独立しているので、命令キャッシュ20の読み書きとデータ・キャッシュ30の読み書きとはそれぞれ独立して実行できる。
図5(b)及び図6に示す従来のフロー・チャートに追加された本発明のスケジューリング部分は、従来のルーチン又はデータ構造体の読み出し及び処理に関係しない部分には一切分岐していない。本発明で追加したスケジューリング部分がフロー・チャートの他の部分に影響を与えることはない。本発明は、データ構造体及びルーチンの順序入れ換えをプログラムで指示している。OSのスケジューラで入れ替えを制御するマルチ・スレッドと異なり、コンテクスト・スイッチを起動させないため、MPU及びOSの負担も少なく高速処理が可能である。
並列処理が可能なルーチン又はデータ構造体を読み出す直前部分へのテスト命令等の追加は、コンパイル時に自動で追加できる場合と、ソース・プログラムに手動で追加する場合がある。一般に、行列演算等のアルゴリズムの場合はコンパイラが並行性を検出できるので、コンパイル時にテスト命令等を自動的に追加できることが多い。I/O(入力/出力)に関係する部分は、コンパイラで並行性を検出できないので、手動でテスト命令等を追加することが多い。
以上、本発明は特定の実施例について説明されたが、本発明はこれらに限定されるものではない。例えば、アドレス変換時に使用されるTLB(Translation Lookaside Buffer)にテスト命令を送ることもできる。TLBは、外部メモリ40に存在するアドレス変換テーブルの一部が記憶されるキャッシュ・メモリである。TLBに格納されたアドレス変換テーブルの入れ替えは、PTE(Page Table Entry)の自動検索によって行われる。TLBを使用する場合、キャッシュ・ヒットは、命令キャッシュ(又はデータ・キャッシュ)とTLBの両方がキャッシュ・ヒットしたことを意味する。
PTEの自動検索は、外部メモリ40を複数回アクセスしながらTLBの格納データの入れ替えを行う。本発明のMPU及び命令実行順序スケジューリング方法を用いることにより、データ・キャッシュ及び命令キャッシュのヒット・ミスの場合と同様に、TLBのヒット・ミスの場合もMPUの待ち時間を短くすることができる。テスト命令は、命令キャッシュ,データ・キャッシュ,TLBの各キャッシュ・ヒットを一括して調べてもよいし、各々のキャッシュ・ヒットを独立に調べてもよい。その他、本発明はその趣旨を逸脱しない範囲で当業者の知識に基づき種々なる改良,修正,変形を加えた態様で実施できるものである。
本発明のマイクロプロセッサは、所要のルーチン又はデータ構造体がキャッシュ・メモリ(命令キャッシュ,データ・キャッシュ)に存在するか確認する命令(テスト命令)が追加されている。テスト命令により、これから読み出すルーチン又はデータ構造体がキャッシュ・メモリに存在するか否かを、そのルーチン又はデータ構造体を読み出す直前に知ることができる。
本発明のスケジューリング方法は、上述したテスト命令により、並列処理が可能なルーチン又はデータ構造体に対して、これから読み出すルーチン又はデータ構造体がキャッシュ・メモリに存在するか否かを調べ、その結果に基づいて、キャッシュ・メモリに存在するルーチン又はデータ構造体を優先的に読み出す。キャッシュ・メモリに存在しないルーチン又はデータ構造体よりもキャッシュ・メモリに存在するルーチン又はデータ構造体を先に読み出して処理すると共に、その処理と並行してキャッシュ・メモリに存在しないルーチン又はデータ構造体のプリフェッチを行うため、キャッシュ・メモリのヒット・ミスにより生じるマイクロプロセッサの待ち時間を短くすることができる。
【図面の簡単な説明】
図1は、本発明に係るMPUの一構成例を示すブロック図である。
図2は、本発明に係るスケジューリングの一実施例を示すフロー・チャートである。
図3は、本発明に係るスケジューリングの他の実施例を示すフロー・チャートである。
図4は、従来のMPUの一構成例を示すブロック図である。
図5(a)は、MPUが行うデータ処理の一例を示すフロー・チャートであり、図5(b)は図5(a)中の同一データ構造体を使用するルーチンを続けて実行するフロー・チャート図である。
図6は、MPUのルーチン実行の一例を示すフロー・チャートである。
Claims (11)
- 外部メモリから読み出される命令の一部及びデータの一部が記憶されるキャッシュ・メモリと、キャッシュ・メモリ又は外部メモリから読み出された命令又は読み出されたデータを使用する命令を実行する実行ユニットとを備え、プログラムに指示された順序で命令を処理するマイクロプロセッサであって、
前記実行ユニットが実行する命令に、複数の命令を含む所要のルーチン又は複数のデータを含む所要のデータ構造体が前記キャッシュ・メモリ内に存在するか否かを確認するテスト命令が含まれるマイクロプロセッサ。 - 前記テスト命令が、前記所要のルーチン又はデータ構造体の先頭アドレス部分が前記キャッシュ・メモリ内に存在するか否かを確認する命令を含む請求項1のマイクロプロセッサ。
- 前記キャッシュ・メモリが、
ルーチンが記憶される命令キャッシュ・メモリと、
データ構造体が記憶されるデータ・キャッシュ・メモリと
を含む請求項1又は請求項2のマイクロプロセッサ。 - 前記テスト命令が、前記所要のルーチンが前記命令キャッシュ・メモリ内に存在するか否かを確認する命令と、
前記所要のデータ構造体が前記データ・キャッシュ・メモリ内に存在するか否かを確認する命令と
を含む請求項3のマイクロプロセッサ。 - 前記実行ユニットの命令実行と並行して、所要のルーチン又はデータ構造体の読み出しを行うフェッチ・ユニットをさらに含む請求項1乃至請求項4のいずれかのマイクロプロセッサ。
- プログラムが指定する順序で、外部メモリ又はキャッシュ・メモリから読み出された複数の命令を含むルーチン又は複数のデータを含むデータ構造体を使用するルーチンをマイクロプロセッサに実行させる場合の、前記ルーチン又はデータ構造体に含まれる並列処理が可能なルーチン又はデータ構造体に対する命令実行順序のスケジューリング方法であって、
並列処理が可能なルーチン又はデータ構造体を読み出す直前に、そのルーチン又はデータ構造体がキャッシュ・メモリ内に存在するか否かを確認する確認ステップと、
前記並列処理が可能なルーチン又はデータ構造体の中で、キャッシュ・メモリ内に存在することが確認されたルーチン又はデータ構造体から優先的にマイクロプロセッサに処理させる優先実行ステップと
を含む命令実行順序スケジューリング方法。 - 前記優先実行ステップが、読み出そうとしているルーチン又はデータ構造体がキャッシュ・メモリ内に存在すれば、そのルーチン又はデータ構造体をキャッシュ・メモリから読み出してマイクロプロセッサに処理させる実行ステップと、
読み出そうとしているルーチン又はデータ構造体がキャッシュ・メモリ内に存在しなければ、そのルーチン又はデータ構造体を外部メモリから読み出すようマイクロプロセッサに指示する指示ステップと
を含む請求項6の命令実行順序スケジューリング方法。 - 前記指示ステップのルーチン又はデータ構造体の外部メモリからの読み出しが、前記実行ステップと並行して行われる請求項7の命令実行順序スケジューリング方法。
- 前記確認ステップが、前記実行ステップ又は指示ステップの後、処理が未完了のルーチン又はデータ構造体が存在するか確認するステップと、
処理が未完了のルーチン又はデータ構造体が存在すれば、そのルーチン又はデータ構造体がキャッシュ・メモリ内に存在するかマイクロプロセッサに確認させるステップと
を含む請求項6乃至請求項8のいずれかの命令実行順序スケジューリング方法。 - 前記実行ステップが、処理が完了したルーチン又はデータ構造体に対し、ルーチン又はデータ構造体が処理されたか否かを示す実行完了情報を更新するステップを含み、
前記処理が未完了のルーチン又はデータ構造体が存在するか確認するステップが、前記実行完了情報に基づいて処理が未完了のルーチン又はデータ構造体が存在するか確認を行う請求項7乃至請求項9のいずれかの命令実行順序スケジューリング方法。 - 前記確認ステップが、前記ルーチン又はデータ構造体の先頭アドレス部分に基づいてキャッシュ・メモリ内の存在確認を行う請求項6乃至請求項9のいずれかの命令実行順序スケジューリング方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001051539 | 2001-02-27 | ||
JP2001051539 | 2001-02-27 | ||
PCT/JP2002/001272 WO2002069150A1 (fr) | 2001-02-27 | 2002-02-14 | Microprocesseur et procede de distribution d'ordres d'execution d'instructions |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2002069150A1 true JPWO2002069150A1 (ja) | 2004-07-02 |
Family
ID=18912305
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002568205A Pending JPWO2002069150A1 (ja) | 2001-02-27 | 2002-02-14 | マイクロプロセッサ及び命令実行順序スケジューリング方法 |
Country Status (4)
Country | Link |
---|---|
JP (1) | JPWO2002069150A1 (ja) |
KR (1) | KR20030088031A (ja) |
TW (1) | TW556082B (ja) |
WO (1) | WO2002069150A1 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004220070A (ja) | 2003-01-09 | 2004-08-05 | Japan Science & Technology Agency | コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体 |
AU2011213795A1 (en) * | 2011-08-19 | 2013-03-07 | Canon Kabushiki Kaisha | Efficient cache reuse through application determined scheduling |
US10140210B2 (en) * | 2013-09-24 | 2018-11-27 | Intel Corporation | Method and apparatus for cache occupancy determination and instruction scheduling |
-
2002
- 2002-02-14 JP JP2002568205A patent/JPWO2002069150A1/ja active Pending
- 2002-02-14 WO PCT/JP2002/001272 patent/WO2002069150A1/ja active IP Right Grant
- 2002-02-14 KR KR10-2003-7010997A patent/KR20030088031A/ko active IP Right Grant
- 2002-02-22 TW TW091103172A patent/TW556082B/zh not_active IP Right Cessation
Also Published As
Publication number | Publication date |
---|---|
WO2002069150A1 (fr) | 2002-09-06 |
KR20030088031A (ko) | 2003-11-15 |
TW556082B (en) | 2003-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4170218B2 (ja) | キャッシュミスに応答してタスクを切り替えることによってキャッシュベース埋め込みプロセッサのスループットを改善する方法および装置 | |
US7461209B2 (en) | Transient cache storage with discard function for disposable data | |
JP4520790B2 (ja) | 情報処理装置およびソフトウェアプリフェッチ制御方法 | |
US7047401B2 (en) | Handling interrupts during multiple access program instructions | |
JP3739491B2 (ja) | プリフェッチ命令を用いるハーバードアーキテクチャキャッシュメモリの調和したソフトウェア制御 | |
CN110959154B (zh) | 用于线程本地存储数据访问的私有高速缓存 | |
US6487639B1 (en) | Data cache miss lookaside buffer and method thereof | |
US20130246709A1 (en) | Translation address cache for a microprocessor | |
US20130246712A1 (en) | Methods And Apparatuses For Efficient Load Processing Using Buffers | |
US11494308B2 (en) | Methods and devices for bypassing the internal cache of an advanced DRAM memory controller | |
WO2005088455A2 (en) | Cache memory prefetcher | |
WO2020073641A1 (zh) | 一种面向数据结构的图形处理器数据预取方法及装置 | |
US6658537B2 (en) | DMA driven processor cache | |
US20040123081A1 (en) | Mechanism to increase performance of control speculation | |
US6922753B2 (en) | Cache prefetching | |
US6892280B2 (en) | Multiprocessor system having distributed shared memory and instruction scheduling method used in the same system | |
US20230315471A1 (en) | Method and system for hardware-assisted pre-execution | |
JPWO2002069150A1 (ja) | マイクロプロセッサ及び命令実行順序スケジューリング方法 | |
JP2008015562A (ja) | キャッシュミス/ヒット予想 | |
JP5116275B2 (ja) | 演算処理装置、情報処理装置及び演算処理装置の制御方法 | |
KR100764581B1 (ko) | 마이크로프로세서 | |
JP3161422B2 (ja) | マイクロコンピュータ | |
US20100077145A1 (en) | Method and system for parallel execution of memory instructions in an in-order processor | |
KR910007028B1 (ko) | 데이타처리 시스템에서의 파이프라인 처리방법 | |
KR20040047398A (ko) | 캐쉬 메모리를 이용한 데이터 억세스 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060131 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20060627 |