(57)【要約】【課題】ユニファイドメモリシステムの性能を向上させる。【解決手段】ユニファイドメモリシステムであって、複数のマスタからアクセスされるメモリと、前記複数のマスタのうちの１つとしてのＣＰＵから前記メモリへの第１のアクセス要求に応じて前記メモリへの投機的な第２のアクセス要求を発生する投機アクセス制御部と、前記第１及び第２のアクセス要求、並びに前記複数のマスタのうち前記ＣＰＵ以外のマスタからの前記メモリへのアクセス要求を受け取り、前記メモリに対して実行するメモリコントローラとを備える。前記投機アクセス制御部は、前記メモリへのアクセスに関する情報である投機アクセス情報に従って、前記第２のアクセス要求を発生する。【選択図】図１
2007334564.tif 000002
【特許請求の範囲】
【請求項１】
複数のマスタからアクセスされるメモリと、
前記複数のマスタのうちの１つとしてのＣＰＵから前記メモリへの第１のアクセス要求に応じて前記メモリへの投機的な第２のアクセス要求を発生する投機アクセス制御部と、
前記第１及び第２のアクセス要求、並びに前記複数のマスタのうち前記ＣＰＵ以外のマスタからの前記メモリへのアクセス要求を受け取り、前記メモリに対して実行するメモリコントローラとを備え、
前記投機アクセス制御部は、
前記メモリへのアクセスに関する情報である投機アクセス情報に従って、前記第２のアクセス要求を発生するものである
ことを特徴とするユニファイドメモリシステム。
【請求項２】
請求項１に記載のユニファイドメモリシステムにおいて、
前記ＣＰＵは、
前記投機アクセス情報を用いて前記投機アクセス制御部を制御するものである
ことを特徴とするユニファイドメモリシステム。
【請求項３】
請求項２に記載のユニファイドメモリシステムにおいて、
前記ＣＰＵは、
前記投機アクセス情報として、前記複数のマスタのメモリアクセス優先度を用いるものであり、
前記投機アクセス制御部は、
前記ＣＰＵのメモリアクセス優先度が、前記複数のマスタのうち前記ＣＰＵ以外のマスタのメモリアクセス優先度より高い場合に、前記第２のアクセス要求を発生するものである
ことを特徴とするユニファイドメモリシステム。
【請求項４】
請求項２に記載のユニファイドメモリシステムにおいて、
前記ＣＰＵは、
前記投機アクセス情報として、既に行われた投機的なアクセス要求に従ったデータ転送が有用であった割合を示すヒット率を求めるものであり、
前記投機アクセス制御部は、
前記ヒット率が所定の値よりも高い場合に、前記第２のアクセス要求を発生するものである
ことを特徴とするユニファイドメモリシステム。
【請求項５】
請求項１に記載のユニファイドメモリシステムにおいて、
前記メモリコントローラは、
前記投機アクセス情報を生成するものである
ことを特徴とするユニファイドメモリシステム。
【請求項６】
請求項５に記載のユニファイドメモリシステムにおいて、
前記メモリコントローラは、
前記投機アクセス情報として、前記複数のマスタによるアクセスリクエスト数を出力するものであり、
前記投機アクセス制御部は、
前記アクセスリクエスト数が所定の値よりも小さい場合に、前記第２のアクセス要求を発生させるものである
ことを特徴とするユニファイドメモリシステム。
【請求項７】
請求項５に記載のユニファイドメモリシステムにおいて、
前記メモリコントローラは、
前記投機アクセス情報として、前記メモリへのアクセスの完了に要するサイクル数を出力するものであり、
前記投機アクセス制御部は、
前記メモリへのまだ実行されていない通常アクセスが存在せず、前記サイクル数が所定の値よりも小さい場合に、前記第２のアクセス要求を発生させるものである
ことを特徴とするユニファイドメモリシステム。
【請求項８】
請求項５に記載のユニファイドメモリシステムにおいて、
前記メモリコントローラは、
前記投機アクセス情報として、前記複数のマスタのうち、前記メモリへのアクセス要求を行っているマスタを示すリクエストマスタ情報を出力するものであり、
前記投機アクセス制御部は、
前記リクエストマスタ情報が所定のマスタを示していない場合に、前記第２のアクセス要求を発生させるものである
ことを特徴とするユニファイドメモリシステム。
【請求項９】
請求項１に記載のユニファイドメモリシステムにおいて、
前記投機アクセス制御部は、
前記投機アクセス情報としての複数のパラメータから選択されたパラメータに従って、前記第２のアクセス要求を発生させるものである
ことを特徴とするユニファイドメモリシステム。
【請求項１０】
請求項９に記載のユニファイドメモリシステムにおいて、
前記投機アクセス制御部は、
前記選択された複数のパラメータのそれぞれに基づいて得られた前記第２のアクセス要求の発生についての判断結果を加重平均した結果に従って、前記第２のアクセス要求を発生させるものである
ことを特徴とするユニファイドメモリシステム。
【請求項１１】
請求項１に記載のユニファイドメモリシステムにおいて、
前記投機アクセス制御部は、
前記第２のアクセス要求に従って転送されるデータのサイズを、前記投機アクセス情報に応じたサイズにするものである
ことを特徴とするユニファイドメモリシステム。
【請求項１２】
請求項１に記載のユニファイドメモリシステムにおいて、
前記投機アクセス制御部は、
前記ＣＰＵによる前記メモリへのアクセスの優先度が高い場合には、前記第２のアクセス要求によって行われる前記メモリへのアクセスが完了した後に前記メモリへのアクセスを行うための、投機的な第３のアクセス要求を発生するものである
ことを特徴とするユニファイドメモリシステム。
【請求項１３】
請求項１２に記載のユニファイドメモリシステムにおいて、
前記第３のアクセス要求に従って転送されるデータのサイズを、前記投機アクセス情報に応じたサイズにするものである
ことを特徴とするユニファイドメモリシステム。
【請求項１４】
請求項１２に記載のユニファイドメモリシステムにおいて、
前記投機アクセス制御部は、
既に行われた投機的なアクセス要求に従ったデータ転送が有用であった割合を示すヒット率を求め、前記ヒット率が所定の値よりも高い場合に、前記第３のアクセス要求を発生するものである
ことを特徴とするユニファイドメモリシステム。
【請求項１５】
請求項１４に記載のユニファイドメモリシステムにおいて、
前記第３のアクセス要求に従って転送されるデータのサイズを、前記ヒット率に応じたサイズにするものである
ことを特徴とするユニファイドメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のマスタによりアクセスされるメモリ有するユニファイドメモリシステムに関し、特に、メモリに対する投機アクセスの制御を行う技術に関する。
【背景技術】
【０００２】
近年、携帯電話などの携帯向けの製品からデジタルテレビやＤＶＤ（digital versatile disc）レコーダーなどの据え置き製品に到るまで、ＣＰＵ（central processing unit）やＤＳＰ（digital signal processor）が複数使用され、多機能化、性能向上が図られている。半導体集積度の向上に伴い、コスト削減を目的として、ＣＰＵやＤＳＰが１チップに集積されるとともに、ＣＰＵやＤＳＰが従来はそれぞれ専用に使用していた複数の外部メモリを共用化した、ユニファイドメモリシステムが採用されてきている。
【０００３】
ユニファイドメモリシステムでは、マスタとして動作するＣＰＵやＤＳＰは、他のマスタが外部メモリを使用している場合には、その外部メモリを使用するには待つ必要がある。待ち時間が想定を越えるような場合には、システムとして成立させることができない。このため、マスタ毎にメモリアクセス量を割り当てたり、マスタに優先度を付与し、優先度の高いマスタの処理を優先させる等により、想定を越えた待ち時間が発生しないようにしている。
【０００４】
特に、メディア処理を扱うユニファイドメモリシステムにおいて、メモリへのアクセスはバーストアクセスが主体となってきている。メディア処理はＤＳＰが担当し、まとまったデータ単位で行われるためである。
【０００５】
一方、ＣＰＵは、ＤＳＰへの動作スケジューリング、入出力に伴う割り込み処理、ＣＰＵアプリケーション処理（例えばＧＵＩ（graphical user interface）のための処理）等の輻輳する処理を実行する必要があるため、処理性能を年々向上させてきている。
【０００６】
しかしながら、ユニファイドメモリシステムにおいては、ＣＰＵの処理性能の向上は困難となってきている。なぜなら、メモリへのアクセスはＤＳＰのメディア処理に合わせてバースト転送で行われることが一般的であり、メモリのレイテンシ性能は高くないためである。ＣＰＵでは、メモリの単一の入出力単位のデータに対する処理が大半であるため、メモリのレイテンシ数が大きくなるとＣＰＵ性能が低下する。
【０００７】
このため、ＣＰＵとメモリコントローラとの間にバッファメモリを備えるブリッジを置いたり、メモリコントローラ内にバッファメモリを置くようにした技術が知られている。このような技術では、ＣＰＵからの要求サイズに関わりなく、メモリにバーストアクセスが行われ、読み出されたデータがバッファメモリに保持される。その後、ＣＰＵからバッファメモリの保持するデータへのアクセスが発生すると、バッファメモリが保持するデータがＣＰＵに転送される。これにより、ＣＰＵからメモリへの見かけ上のレイテンシ数を少なくすることができる。更に、将来ＣＰＵが発生するアクセスを予測し、ＣＰＵからのアクセス要求に加えて予測したアクセス（投機アクセス）を発生させることも行われている。
【０００８】
予測がヒットする場合には、投機アクセスによってＣＰＵ性能を向上させることが可能となる。しかし、メモリを使用する他のマスタは、投機アクセスが終了するまでメモリへのアクセスを待たされることがあるので、投機アクセスは、他のマスタにとっては性能劣化要因となる。
【０００９】
また、予測がミスした場合には、投機アクセスが役に立たないにもかかわらず、その投機アクセスが終了するまでメモリへアクセスできないので、投機アクセスは、ＣＰＵの後続する通常アクセスのレイテンシ数を増加させ、システム全体の性能劣化要因となる。
【００１０】
投機アクセスを伴うユニファイドメモリシステムにおいて、投機アクセスによって生じる各マスタのアクセスレイテンシの増加に起因したシステム性能の劣化を防ぐための技術の例が、下記特許文献１に開示されている。すなわち、メモリ階層において上位のマスタ（ＣＰＵ）が、メモリ階層において下位のスレーブ（メモリコントローラ）に対するデータ転送命令に投機アクセスであることを明示し、メモリ階層下位のスレーブは、投機アクセスの実行によりシステム性能が低下すると判断した場合には、投機アクセスを破棄する。
【特許文献１】特開２００３−１８６６６９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
投機アクセス要求をキャンセル又は破棄するためには、アクセス要求側であるＣＰＵ（又はブリッジ）とアクセス受付側であるメモリコントローラとが投機アクセス要求のキャンセル又は破棄をするためのプロトコル及び対応する回路を、新たに設計し、実装する必要が生じる。
【００１２】
ところが、ＣＰＵ（又はブリッジ）のメモリコントローラへの投機アクセス要求のキャンセルは、メモリコントローラの内部状態に依存しないタイミングで発生するので、メモリコントローラの設計及び検証は困難である。また、メモリコントローラによる投機アクセス要求の破棄は、ＣＰＵ（又はブリッジ）の内部状態に依存しないタイミングで発生するので、ＣＰＵ（又はブリッジ）の設計及び検証は困難である。メモリコントローラ内にバッファメモリを置く場合も同様である。
【００１３】
更に、メモリコントローラが、投機アクセス要求によるメモリアクセスを開始していた場合には、メモリコントローラとメモリとの間のプロトコルでは、メモリアクセスを中止することは通常はできない。したがって、投機アクセスは完了されなければならず、必要のない投機アクセス要求が発生すると、そのためにシステム性能が劣化してしまう。
【００１４】
本発明は、投機アクセス要求の発生を制御して、ユニファイドメモリシステムの性能を向上させることを目的とする。
【課題を解決するための手段】
【００１５】
前記課題を解決するため、本発明が講じた手段は、ユニファイドメモリシステムとして、複数のマスタからアクセスされるメモリと、前記複数のマスタのうちの１つとしてのＣＰＵから前記メモリへの第１のアクセス要求に応じて前記メモリへの投機的な第２のアクセス要求を発生する投機アクセス制御部と、前記第１及び第２のアクセス要求、並びに前記複数のマスタのうち前記ＣＰＵ以外のマスタからの前記メモリへのアクセス要求を受け取り、前記メモリに対して実行するメモリコントローラとを備え、前記投機アクセス制御部は、前記メモリへのアクセスに関する情報である投機アクセス情報に従って、前記第２のアクセス要求を発生するものである。
【００１６】
これによると、投機アクセス情報に従って投機的なアクセス要求を発生するようにしているので、ＣＰＵ以外のマスタからメモリへのアクセスや、ＣＰＵからメモリへの通常アクセスが、投機アクセスによって待たされることが少なくなる。また、ＣＰＵ以外のマスタからのアクセスが増加しても、ユニファイドメモリシステムの性能の劣化を抑えることができる。
【発明の効果】
【００１７】
本発明によれば、ＣＰＵ以外のマスタからのメモリアクセスが投機アクセスによって待たされることが少なくなり、ＣＰＵ以外のマスタの処理性能の低下を防ぐことができる。また、ＣＰＵからの通常アクセスが投機アクセスによって待たされることが少なくなり、ＣＰＵの処理性能を向上させることができる。したがって、ユニファイドメモリシステムの性能を向上させることができる。特に、メモリのアクセスレイテンシが大きい場合に大きな効果を得ることができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００１９】
図１は、本発明の実施形態に係るユニファイドメモリシステムの構成の例を示すブロック図である。図１のユニファイドメモリシステムは、メモリコントローラ４と、メモリ５と、バッファメモリ８と、ブリッジ９とを備えている。このユニファイドメモリシステムは、いずれもマスタとして動作するＣＰＵ１と、ＤＳＰ２，３とによりアクセスされる。ＣＰＵ１、ＤＳＰ２，３、及びブリッジ９の間は、ＣＰＵ制御バス７によって接続されている。ＣＰＵ１には、キャッシュ６が接続されている。
【００２０】
ＤＳＰ２及び３は、メモリコントローラ４を介してメモリ５のデータにアクセスしながら、独立したメディア処理を行う。ＣＰＵ１は、ブリッジ９及びメモリコントローラ４を介してメモリ５のデータにアクセスする。
【００２１】
ブリッジ９は、ＣＰＵアクセス制御部９４２と、投機アクセス制御部９４４とを備えている。ＣＰＵアクセス制御部９４２は、ＣＰＵ１からのメモリ５への通常アクセスの要求を受け取り、メモリコントローラ４へ出力する。投機アクセス制御部９４４は、このＣＰＵ１からのアクセスに応じて、これに後続するＣＰＵ１からメモリ５への新たなアクセスを予測し、その結果として投機的なアクセス要求（投機アクセス要求）を発生し、メモリコントローラ４へ出力する。メモリコントローラ４は、ブリッジ９、及びＤＳＰ２，３からアクセス要求を受け取って調停し、その結果に応じてメモリ５へのアクセスを行う。
【００２２】
図２は、図１のブリッジ９の構成の例を示すブロック図である。図２のブリッジ９は、ＣＰＵインタフェース９１０と、バッファリード制御部９１１と、バッファライト制御部９１２と、メモリコントローラインタフェース９１３と、ＣＰＵ制御バスインタフェース９１４と、レジスタブロック９１５と、アドレス生成部９１６と、メモリリード生成部９１７と、ブリッジ制御部９１８と、投機制御パターンテーブル格納部９１９と、サイズ生成部９２０とを備えている。
【００２３】
レジスタブロック９１５は、アクセスアドレスレジスタ９３１と、投機制御レジスタ９３２と、パラメータ選択レジスタ９３３と、加重設定レジスタ９３４と、投機多重制御レジスタ９３５と、リクエスト数レジスタ９３６と、レイテンシレジスタ９３７と、リクエストマスタ情報レジスタ９３８とを有している。
【００２４】
ブリッジ制御部９１８は、ＣＰＵアクセス制御部９４２と、投機アクセス制御部９４４とを有している。ＣＰＵアクセス制御部９４２及び投機アクセス制御部９４４は、ブリッジ９内の各部を連携して動作させる。この連係動作については、後に詳述する。
【００２５】
アクセスアドレスレジスタ９３１は、バッファリード制御部９１１から与えられるアドレス情報をアドレスフィールドに保持し、そのアドレス情報が有効かどうかを示すバリッドビットを保持する。
【００２６】
投機制御レジスタ９３２は、投機アクセス制御部９４４に投機アクセス要求の発生を許可するために使用するレジスタであり、ＣＰＵ１より設定される。
【００２７】
パラメータ選択レジスタ９３３は、投機アクセス制御部９４４が投機アクセス制御に使用するレジスタの組み合わせを設定するレジスタであり、ＣＰＵ１より設定される。
【００２８】
加重設定レジスタ９３４は、投機制御パラメータを複数使用して投機アクセス制御を行う場合に、投機制御パラメータの重みを設定するレジスタであり、ＣＰＵ１より設定される。
【００２９】
投機多重制御レジスタ９３５は、投機アクセス制御部９４４に投機アクセス要求の多重発生を許可するために使用するレジスタであり、ＣＰＵ１より設定される。
【００３０】
リクエスト数レジスタ９３６は、メモリコントローラ４からブリッジ９に出力される投機アクセス情報としてのアクセス要求中のマスタ数を格納するレジスタである。レイテンシレジスタ９３７は、メモリコントローラ４からブリッジ９に出力される投機アクセス情報としてのレイテンシ数（メモリ５へのアクセスの完了に要するサイクル数）を格納するレジスタである。リクエストマスタ情報レジスタ９３８は、メモリコントローラ４からブリッジ９に出力される投機アクセス情報としてのアクセス要求中のマスタ情報を格納するレジスタである。リクエスト数レジスタ９３６、レイテンシレジスタ９３７及びリクエストマスタ情報レジスタ９３８は、ＣＰＵ１より設定され、投機アクセス要求の発生条件を設定するために使用される。
【００３１】
ＣＰＵインタフェース９１０は、ＣＰＵ１からのリード要求を含むアクセス情報をバッファリード制御部９１１へ出力するとともに、バッファリード制御部９１１から出力される読み出されたデータをＣＰＵ１へ出力する。
【００３２】
バッファリード制御部９１１は、ＣＰＵインタフェース９１０から出力されたＣＰＵ１によって要求されたリードアドレスと、アクセスアドレスレジスタ９３１に保持されたアドレスとを比較し、両者が一致しない場合にはＣＰＵアクセス制御部９４２を起動する。両者が一致している場合には、バッファリード制御部９１１は、リードアドレスに一致するデータをバッファメモリ８から読み出してＣＰＵインタフェース９１０へ出力する。
【００３３】
なお、バッファリード制御部９１１は、アクセスアドレスレジスタ９１９のバリッドビッドがインバリッドに設定されている場合には、前述したアドレスの比較を行うことなくＣＰＵアクセス制御部９４２を起動する。
【００３４】
バッファライト制御部９１２は、メモリコントローラインタフェース９１３から出力されるデータをバッファメモリ８にライトし、バッファメモリ８へのライトの完了をＣＰＵアクセス制御部９４２又は投機アクセス制御部９４４に通知する。
【００３５】
メモリコントローラインタフェース９１３は、メモリリード生成部９１７からのリードアクセスの要求をメモリコントローラ４へ転送し、メモリコントローラ４から返却される読み出されたデータをバッファライト制御部９１２へ出力する。
【００３６】
ＣＰＵ制御バスインタフェース９１４は、ＣＰＵ１からＤＳＰ２，３及びブリッジ９を制御するためのＣＰＵ制御バス７からのアクセスを、ＣＰＵ１から、レジスタブロック９１５内のアクセス可能なレジスタや、投機制御パターンテーブル格納部９１９へインタフェースする。
【００３７】
アドレス生成部９１６は、メモリリード生成部９１７が生成するリード要求に示されるべきアドレス情報を、アクセスアドレスレジスタ９３１の出力を用いて生成する。
【００３８】
メモリリード生成部９１７は、ＣＰＵアクセス制御部９４２、又は投機アクセス制御部９４４の制御により、メモリコントローラインタフェース９１３へのリードアクセス要求を生成する。
【００３９】
図３は、図１のメモリコントローラ４の構成の例を示すブロック図である。図３のメモリコントローラ４は、マスタインタフェース４０１，４０２，４０３と、アービタ４０４と、マスタセレクタ４０５と、メモリアクセスシーケンサ４０６と、メモリアドレス生成部４０７と、メモリインタフェース４０８と、アクセス情報出力部４０９と、メモリアクセスカウンタ４１０とを備えている。
【００４０】
マスタインタフェース４０１は、ブリッジ９がメモリコントローラ４に要求するアクセスの転送を制御する。マスタインタフェース４０２は、ＤＳＰ２がメモリコントローラ４に要求するアクセスの転送を制御する。マスタインタフェース４０３は、ＤＳＰ３がメモリコントローラ４に要求するアクセスの転送を制御する。
【００４１】
アービタ４０４は、マスタインタフェース４０１〜４０３からの転送要求を調停して、その結果をマスタセレクタ４０５に通知する。また、調停前の転送要求数をメモリアクセスカウンタ４１０に出力する。
【００４２】
マスタセレクタ４０５は、マスタインタフェース４０１〜４０３の転送要求の中から、アービタ４０５の調停結果に応じて１つを選択し、選択された転送要求に応じたメモリアクセス開始要求をメモリアクセスシーケンサ４０６へ行い、更に、メモリインタフェース４０８と選択された転送要求を出力したマスタインタフェースとの間のデータ転送を行う。
【００４３】
メモリアクセスシーケンサ４０６は、マスタセレクタ４０５からのメモリアクセス開始要求により、メモリに応じて予め定められたアクセスシーケンスを発生する。
【００４４】
メモリアドレス生成部４０７は、メモリアクセスシーケンサ４０６の制御により、メモリアドレスを生成する。
【００４５】
メモリインタフェース４０８は、メモリ５との間のデータの入出力制御を行う。また、メモリ５へのアクセス中である場合に、アクセス完了までの残りのサイクル数をメモリアクセスカウンタ４１０に出力する。
【００４６】
メモリアクセスカウンタ４１０は、メモリインタフェース４０８から残りのアクセスサイクル数を、アービタ４０４から調停前の転送要求数を受け取り、これらからメモリアクセスサイクル数を算出して、アクセス情報出力部４０９に出力する。
【００４７】
アクセス情報出力部４０９は、アービタ４０４で調停中のアクセス要求数を受け取り、リクエスト数としてブリッジ９に出力する。また、アービタ４０４で調停中のマスタを示す情報及びメモリアクセスカウンタ４１０で計測されたメモリアクセスサイクル数を受け取り、それぞれをリクエストマスタ情報及びレイテンシ数としてブリッジ９に出力する。リクエスト数、リクエストマスタ情報及びレイテンシ数は、いずれも投機アクセス情報である。
【００４８】
図４は、図１のＣＰＵ１における処理の流れの例を示すフローチャートである。図４では、投機アクセス情報としてのメモリアクセス優先度がＣＰＵ１より高いマスタの処理を、ＣＰＵ１でのソフトウェアによる処理によって検出し、その結果に従ってブリッジ９による投機アクセス要求の発生を制御する。ＣＰＵ１は、ＤＳＰ２及びＤＳＰ３よりも優先度が低いとする。動作するマスタがＣＰＵ１のみである状態をシステム動作状態Ａ、システム動作状態Ａの後であり、かつ、動作するマスタがＣＰＵ１とＤＳＰ２とＤＳＰ３である状態をシステム動作状態Ｂ、システム動作状態Ｂの後であり、かつ、動作するマスタがＣＰＵ１のみである状態をシステム動作状態Ｃとする。
【００４９】
ステップＳ１１において、ＣＰＵ１は、システム動作状態の切り替わりが発生したか否かを検出する。発生が検出された場合にはステップＳ１２に進み、発生が検出されなかった場合にはステップＳ１１に戻る。
【００５０】
ステップＳ１２において、ＣＰＵ１は、ＣＰＵ１よりもメモリアクセス優先度の高いマスタがあるか否かを判断する。そのようなマスタがある場合にはステップＳ１３へ進み、ない場合にはステップＳ１７へ進む。システム動作状態Ｂにおいては、ＣＰＵ１よりもＤＳＰ２及びＤＳＰ３のメモリアクセス優先度の方が高いので、ステップＳ１３へ進む。
【００５１】
ステップＳ１３において、ＣＰＵ１は、投機アクセス要求の発生が禁止されていることを示す情報をブリッジ９の投機制御レジスタ９３２に設定する。このため、これ以降のＣＰＵ１からの通常アクセスに対して、ブリッジ９は投機アクセス要求の発生を行わないように制御を行う。
【００５２】
ステップＳ１４において、ＣＰＵ１は、ＤＳＰ２及びＤＳＰ３の処理を起動する。このため、ＤＳＰ２及びＤＳＰ３からメモリ５へのアクセスが発生し、これらのアクセスがメモリコントローラ４で調停、処理される。
【００５３】
ステップＳ１５において、ＣＰＵ１は、ＣＰＵ１よりも優先度の高いＤＳＰ２，３の処理が終了したか否かを検出する。終了していればステップＳ１６に進み、終了していなければステップＳ１５に戻る。
【００５４】
ステップＳ１６において、ＣＰＵ１は、投機アクセス要求の発生が許可されていることを示す情報を、投機アクセス情報として投機制御レジスタ９３２に設定する。このため、これ以降のＣＰＵ１からの通常アクセスに対して、ブリッジ９は投機アクセス要求の発生を行うように制御を行う。その後、ステップＳ１１に戻る。
【００５５】
ステップＳ１７において、ステップＳ１６と同様に、ＣＰＵ１は、投機アクセス要求の発生が許可されていることを示す情報を投機制御レジスタ９３２に設定する。
【００５６】
ステップＳ１８において、ＣＰＵ１は、ＤＳＰ２及びＤＳＰ３の処理を起動し、ステップＳ１１に戻る。ＤＳＰ２及びＤＳＰ３からメモリ５へのアクセスが発生し、これらのアクセスがメモリコントローラ４で調停、処理される。
【００５７】
図５は、図１のＣＰＵ１における処理の流れの他の例を示すフローチャートである。図５では、投機アクセス情報としての投機アクセスヒット率の高い期間を、ＣＰＵ１でのソフトウェアによる処理によって検出し、その結果に従ってブリッジ９による投機アクセス要求の発生を制御する。
【００５８】
投機アクセスヒット率とは、ＣＰＵ１の処理により発生するメモリアクセスに対して既に発生した投機アクセス要求のうち、投機アクセス要求に従ったデータ転送が有用であった割合、すなわち、投機アクセスによりバッファに転送され、保持されたデータが、後続する通常のアクセスで使用できた場合の割合を示す。投機アクセスヒット率の算出方法としては、システムで実施予定のＣＰＵ１の複数の処理を幾つかのパターンに分類しておき、予め各パターンについて、ＣＰＵ１が、ブリッジに投機アクセス要求をさせて投機アクセスヒット率を測定しておくことが、一例として挙げられる。その後、実際に動作を行う際には、ＣＰＵ１が、どのＣＰＵ処理パターンであるかを検出し、投機アクセス要求の発生を制御する。所定値以上の投機アクセスヒット率が期待できるＣＰＵ処理パターンであれば、投機アクセス要求を発生させる。
【００５９】
ここでは、ＣＰＵ１の処理が、投機アクセスヒット率が高いＣＰＵ処理Ａ、投機アクセスヒット率が低いＣＰＵ処理Ｂ、投機アクセスヒット率が高いＣＰＵ処理Ｃへと順に切り替わるものとする。
【００６０】
ステップＳ２１において、ＣＰＵ１は、ＣＰＵ処理の切り替わりが発生したか否かを検出する。切り替わりが発生した場合にはステップＳ２２へ、発生しなかった場合にはステップＳ２１に戻る。
【００６１】
ステップＳ２２において、ＣＰＵ１の処理が、投機アクセスヒット率が所定値以下の処理であるか否かを、ＣＰＵ１は判断する。投機アクセスヒット率が所定値以下である場合にはステップＳ２３に進み、所定値よりも大きい場合にはステップＳ２５に進む。例えば、ＣＰＵ処理Ｂの場合はステップＳ２３に進み、ＣＰＵ処理Ａ及びＣＰＵ処理Ｃの場合はステップＳ２５に進む。
【００６２】
ステップＳ２３において、ＣＰＵ１は、投機アクセス要求の発生が禁止されていることを示す情報をブリッジ９の投機制御レジスタ９３２に設定する。このため、これ以降のＣＰＵ１からの通常アクセスに対して、ブリッジ９は投機アクセス要求の発生を行わないように制御を行う。
【００６３】
ステップＳ２４において、ＣＰＵ１は、ＤＳＰ２及びＤＳＰ３の処理を起動する。このため、ＤＳＰ２及びＤＳＰ３からメモリ５へのアクセスが発生し、これらのアクセスがメモリコントローラ４で調停、処理される。その後、ステップＳ２１に戻る。
【００６４】
ステップＳ２５において、ＣＰＵ１は、投機アクセス要求の発生が許可されていることを示す情報を投機制御レジスタ９３２に設定する。このため、これ以降のＣＰＵ１からの通常アクセスに対して、ブリッジ９は投機アクセス要求の発生を行うように制御を行う。
【００６５】
図６は、図２のＣＰＵアクセス制御部９４２における処理の流れの例を示すフローチャートである。ここでは、ＣＰＵ１からの通常アクセスがある場合について、例として説明する。
【００６６】
図６のステップＳ４１において、ＣＰＵアクセス制御部９４２は、ＣＰＵ１からのアクセスがミスした（バッファメモリ８内に要求されたデータが存在しない）か否かを判定する。ＣＰＵ１からアクセスされたデータがバッファメモリ８内にない場合には、ＣＰＵアクセス制御部９４２は、そのことを示す通知をバッファリード制御部９１１から受け取り、ステップＳ４２に進む。その他の場合はステップＳ４１に戻る。
【００６７】
ステップＳ４２において、メモリコントローラ４へのアクセス中であるか否か、すなわち、メモリコントローラインタフェース９１３が動作中であるか否かを、ＣＰＵアクセス制御部９４２は検出する。アクセス中であればステップＳ４２に戻り、アクセス中でなければステップＳ４３に進む。例えば、投機アクセス中であってメモリコントローラインタフェース９１３が動作中であれば、投機アクセスの完了を待つこととなる。
【００６８】
ステップＳ４３において、ＣＰＵアクセス制御部９４２は、メモリコントローラインタフェース９１３に要求すべきデータのアドレス（リードアドレス）を生成し、出力するように、アドレス生成部９１６及びメモリリード生成部９１７を制御する。この際、アドレス生成部９１６は、アクセスアドレスレジスタ９３１のアドレスフィールドを参照する。生成されるアドレスは、ＣＰＵ１からの要求アドレスである。
【００６９】
ステップＳ４４において、ＣＰＵアクセス制御部９４２は、メモリコントローラインタフェース９１３にメモリコントローラ４へのアクセスを開始させるように、メモリリード生成部９１７に指示を行う。メモリコントローラインタフェース９１３は、メモリコントローラ４にリード要求を行う。
【００７０】
ステップＳ４５において、メモリコントローラインタフェース９１３は、読み出されたデータをメモリコントローラ４から受け取り、バッファライト制御部９１２へ出力する。バッファライト制御部９１２は、読み出されたデータをバッファメモリ８にライトする。バッファライト制御部９１２は、全ての読み出されたデータのバッファメモリ８へのライトを終えると、ＣＰＵアクセス制御部９４２にバッファメモリ８のライトが完了したことを通知し、ステップＳ４６に進む。このとき、ＣＰＵアクセス制御部９４２は、メモリリード生成部９１７が出力するアドレスでアクセスアドレスレジスタ９３１のアドレスフィールドを更新し、更にバリッドビットをイネーブルにする。全ての読み出されたデータのライトが終わっていない場合には、ステップＳ４５に戻る。
【００７１】
ステップＳ４６において、ＣＰＵアクセス制御部９４２は、バッファリード制御部９１１にＣＰＵ１からのリード要求への応答をするように指示する。バッファリード制御部９１１は、バッファメモリ８の保持データからリード要求されたデータを選択し、ＣＰＵインタフェース９１０を介してＣＰＵ１へ出力する。
【００７２】
ステップＳ４７において、ＣＰＵアクセス制御部９４２は、投機アクセス制御部９４４にＣＰＵ１からのリードアクセス（通常アクセス）の完了を通知する。但し、バッファメモリ８に保持されたデータを使用した場合には通知しない。
【００７３】
その後、ＣＰＵ１の後続するリード要求がバッファメモリ８に保持されたデータに対するものであれば、要求されたデータがバッファメモリ８よりＣＰＵ１に順次出力される。
【００７４】
図７は、図２の投機アクセス制御部９４４における処理の流れの例を示すフローチャートである。ＣＰＵ１からの通常アクセスが要求するデータがバッファメモリ８内に存在しない場合に発生するメモリアクセスが、完了しているとする。
【００７５】
図７のステップＳ５１において、投機アクセス制御部９４４は、ＣＰＵアクセス制御部９４２からＣＰＵ１の通常アクセスの完了通知を待つ。完了通知を受けた場合にはステップＳ５２に進み、その他の場合はステップＳ５１に戻る。
【００７６】
ステップＳ５２において、投機アクセス制御部９４４は、レジスタブロック９１５等の情報に基づいて、投機アクセス要求を発生するか否かを判断する。発生する場合にはステップＳ５３に進み、発生しない場合にはステップＳ５１に戻る。
【００７７】
ステップＳ５３において、投機アクセス制御部９４４は、メモリコントローラインタフェース９１３に要求すべきデータのアドレス（投機リードアドレス）を生成し、出力するように、アドレス生成部９１６及びメモリリード生成部９１７を制御する。この際、アドレス生成部９１６は、アクセスアドレスレジスタ９３１のアドレスフィールドのアドレスに転送サイズを加算して、投機リードアドレスを生成する。すなわち、アドレス生成部９１６は、前回、ＣＰＵ１からの要求に従ってメモリから転送されたデータのアドレスに連続する次のアドレスを生成する。
【００７８】
ステップＳ５４において、投機アクセス制御部９４４は、メモリコントローラインタフェース９１３に要求すべきデータのサイズを出力するように、サイズ生成部９２０及びメモリリード生成部９１７を制御する。サイズ生成部９２０は、例えば、投機アクセスヒット率や、メモリコントローラ４へのＤＳＰ２及びＤＳＰ３のアクセス要求の有無に連動して、投機アクセス要求に従ってバッファメモリ８に転送されるデータのサイズを変更する。
【００７９】
ステップＳ５５において、投機アクセス制御部９４４は、メモリコントローラインタフェース９１３にメモリコントローラ４へのアクセスを開始させるように、メモリリード生成部９１７に指示を行う。メモリコントローラインタフェース９１３は、メモリコントローラ４にリード要求を行う。
【００８０】
ステップＳ５６において、投機アクセス制御部９４４は、メモリコントローラ４への投機アクセスを開始したことをＣＰＵアクセス制御部９４２に通知する。ＣＰＵアクセス制御部９４２は、投機アクセス中にＣＰＵ１からの通常アクセスをメモリに対して行うことが必要な場合には、投機アクセス完了まで待つこととなる。
【００８１】
ステップＳ５７において、投機アクセス制御部９４４は、メモリコントローラ４の処理が完了したか、すなわち、メモリコントローラ４へのアクセスが終了したか否かを判断する。終了した場合にはステップＳ５８に進み、終了していない場合にはステップＳ５７に戻る。
【００８２】
ステップＳ５８において、投機アクセス制御部９４４は、メモリコントローラへのアクセスの完了をＣＰＵアクセス制御部９４２に通知し、ステップＳ５１に戻る。すると、ＣＰＵアクセス制御部９４２は、ＣＰＵ１からの通常アクセスをメモリ５に対して行う必要がある場合には、すぐに通常アクセスの処理を開始することができるようになる。
【００８３】
図８は、図１のユニファイドメモリシステムのタイミングチャートの第１の例を示す図である。図８では、ＣＰＵ制御バス７、ＣＰＵメモリバス、ブリッジ９−ＣＰＵ１間のインタフェース（ＩＦ）、ブリッジ９−メモリコントローラ（ＭＥＭＣ）４間のインタフェース、及びメモリコントローラ４−マスタ間のインタフェースにおけるアクセスが示されている。
【００８４】
図８において、アドレスａ０，ａ１，ａ２は、それぞれＣＰＵ１、ＤＳＰ２、ＤＳＰ３により読み出しが要求されたデータのアドレスである。括弧内には、読み出されるデータの範囲又はその範囲の先頭のアドレスが示されている。ＣＰＵ１が図４のフローチャートに従って動作する場合について、図４及び図８を参照して説明する。
【００８５】
サイクルＴ０において、システム動作Ａ（ＣＰＵ１のみが動作）からシステム動作Ｂ（ＣＰＵ１、ＤＳＰ２及びＤＳＰ３が動作）へ切り替わる。ＣＰＵ１よりも優先度が高いＤＳＰ２及びＤＳＰ３が動作するようになるので、ＣＰＵ１は、ＣＰＵ制御バス７を用いて、ブリッジ９内の投機制御レジスタ９３２に投機アクセス要求の発生禁止を設定する（ステップＳ１３）。
【００８６】
サイクルＴ１において、ＣＰＵ１、ＤＳＰ２、ＤＳＰ３は、それぞれの処理を開始する。ＤＳＰ２は、サイクルＴ７よりメモリ５へのアクセス要求（リードＲ３０）を発生し、ＤＳＰ３は、サイクルＴ１３よりメモリ５へのアクセス要求（リードＲ４０）を発生するが、ＣＰＵ１の投機アクセス要求は発生しない。このため、ＣＰＵ１の通常アクセス、ＤＳＰ２及びＤＳＰ３のアクセスがメモリコントローラ４で調停、処理される。
【００８７】
サイクルＴ２３において、ＣＰＵ１は、ＤＳＰ２及びＤＳＰ３より処理の完了通知を受けると、ＣＰＵ制御バス７を用いて、ブリッジ９内の投機制御レジスタ９３２に投機アクセス要求の発生許可を設定する（ステップＳ１６）。このため、サイクルＴ２４における通常アクセスの完了に伴い、サイクルＴ２５で投機アクセス要求（リードＲ２２）が発生される。
【００８８】
このように、ＣＰＵ１は、より優先度が高いマスタの存在を検出し、投機制御レジスタ９３２へ設定を行うことにより、ブリッジ９による投機アクセス要求の発生を抑制する。ＣＰＵ１より優先度が高いマスタの処理の完了までは、ブリッジ９は投機アクセス要求を発生しないので、投機アクセスによってメモリアクセスが待たされることがなく、想定された時間内にメモリアクセスを完了させることができる。したがって、ＣＰＵ１より優先度が高いマスタの性能劣化を抑えることができる。
【００８９】
次に、ＣＰＵ１が図５のフローチャートに従って動作する場合について、図５及び図８を参照して説明する。
【００９０】
サイクルＴ０において、ＣＰＵ１は、ＣＰＵ処理Ａ（投機アクセスヒット率が高い）からＣＰＵ処理Ｂ（投機アクセスヒット率が低い）への切り替わり時に、ＣＰＵ処理Ｂにおけるブリッジ９による投機アクセスヒット率が低いことを検出し、ＣＰＵ制御バス７を用いて、ブリッジ９内の投機制御レジスタ９３２に投機アクセス要求の発生禁止を設定する（ステップＳ２３）。
【００９１】
サイクルＴ１において、ＣＰＵ１、ＤＳＰ２、ＤＳＰ３は、それぞれの処理を開始する。ＤＳＰ２は、サイクルＴ７よりメモリ５へのアクセス要求（リードＲ３０）を発生し、ＤＳＰ３は、サイクルＴ１３よりメモリ５へのアクセス要求（リードＲ４０）を発生するが、ＣＰＵ１の投機アクセス要求は発生しない。このため、ＣＰＵ１の通常アクセス、ＤＳＰ２及びＤＳＰ３のアクセスがメモリコントローラ４で調停、処理される。
【００９２】
サイクルＴ２３において、ＣＰＵ１は、ＣＰＵ処理ＢからＣＰＵ処理Ｃへの切り替わり時にＣＰＵ処理Ｃの投機アクセスヒット率が高いことを検出し、ＣＰＵ制御バス７を用いて、ブリッジ９内の投機制御レジスタ９３２に投機アクセス要求の発生許可を設定する（ステップＳ２５）。このため、サイクルＴ２４における通常アクセスの完了に伴い、サイクルＴ２５で投機アクセス要求（リードＲ２２）が発生される。
【００９３】
このように、投機制御レジスタ９３２へ設定を行うことにより、投機アクセスヒット率が低い場合にはブリッジ９による投機アクセス要求の発生を抑制する。このため、投機アクセスによる他のマスタの性能劣化を抑えることができる。また、実際に発生する投機アクセスのヒット率が高くなるので、ＣＰＵ１の処理性能を向上させることができる。
【００９４】
なお、ＣＰＵ１は、ＣＰＵ１の処理に伴うメモリアクセスがキャッシャブル領域に対するアクセスである場合、すなわちミスヒットした場合を、投機アクセスのヒット率が高い場合として検出してもよい。これは、キャッシュミスが発生すると連続してキャッシュミスが発生する場合があるということを想定しているからである。
【００９５】
また、ＣＰＵ１は、ＣＰＵ１の処理においてプロセスに割り振られるプロセスＩＤの優先度を用いて、優先度の高いプロセスに伴うメモリアクセス時を、投機アクセスのヒット率が高い場合であるとして検出してもよい。キャッシュミスの検出や、プロセスＩＤの検出は、ＣＰＵ１のソフトウェアによる処理で行ってもよいし、キャッシュインタフェースやＭＭＵ（memory management unit）内に設けられた専用ハードウェアで行ってもよい。
【００９６】
ＣＰＵ１が図４又は図５に従って処理を行い、投機アクセスを制御する場合には、ＣＰＵ１は、システム動作の切り替わりの検出や投機制御レジスタ９３２への設定を行うためのソフトウェアによる処理を行う必要がある。このため、ＣＰＵ１の処理性能を消費することとなる。また、図４のようにマスタの優先度に応じた制御をする場合には、優先度の高いマスタの処理が完了するまでは投機アクセスを一律に制御することになる。この結果、優先度の高いマスタがメモリを使用しない期間であっても、投機アクセスは抑制される。すなわち、メモリのアクセス状況をリアルタイムに反映した投機アクセス制御を行うことが難しい。そこで、他の例について以下に説明する。
【００９７】
図９は、図１のユニファイドメモリシステムのタイミングチャートの第２の例を示す図である。メモリコントローラ４のアクセス情報出力部４０９が、マスタによるメモリコントローラ４へのアクセスリクエスト数（ＭＥＭＣリクエスト数）を投機アクセス情報として出力し、これに従って、ブリッジ９が投機アクセス要求の発生を制御する場合について説明する。
【００９８】
ＣＰＵ１は、予め、ブリッジ９のリクエスト数レジスタ９３６にブリッジ９の投機アクセス要求の発生条件を設定する。ここでは、ＣＰＵ１は、リクエスト数レジスタ９３６に初期値として値“０”を設定しているとする。
【００９９】
メモリコントローラ４は、複数のマスタからアクセスリクエストを受け、アクセス情報出力部４０９は、アクセスリクエスト数をリクエスト数レジスタ９３６に出力し、格納させる。投機アクセス制御部９４４は、図７のステップＳ５２において、リクエスト数レジスタ９３６の出力を閾値として用いる。なお、アクセス情報出力部４０９から出力されるリクエスト数にブリッジ９からの要求が含まれている場合には、投機アクセス制御部９４４は、リクエスト数からその要求の数を差し引いた数を用いる。
【０１００】
図９のサイクルＴ６において、ＣＰＵ１からの通常アクセスが完了するとアクセスリクエスト数が“０”となるので、投機アクセス制御部９４４は、投機アクセス要求の発生の準備を開始する。サイクルＴ７においてＤＳＰ２からアクセス要求（リードＲ３０）が発生し、アクセスリクエスト数が“１”となる。ブリッジ９は、アクセスリクエスト数が、閾値“０”を越えているため、投機アクセス要求を発生せず、アクセスリクエスト数が“０”となるまで待つ。
【０１０１】
サイクルＴ１２においてリードＲ３０は完了する。サイクルＴ１３においてＤＳＰ３からアクセス要求（リードＲ４０）が、ＣＰＵ１から通常アクセスのアクセス要求（リードＲ２１）が発生する。アクセスリクエスト数が閾値“０”を越えているので、ブリッジ９は、投機アクセス要求を発生せず、アクセスリクエスト数が“０”となるまで待つ。サイクルＴ１８でリードＲ４０が完了するので、サイクルＴ１９においてアクセスリクエスト数は“１”となる。
【０１０２】
リードＲ２１が完了するとアクセスリクエスト数は“０”となるので、サイクルＴ２４において、投機アクセス制御部９４４は、投機アクセス要求の発生の準備を開始する。サイクルＴ２５において、アクセスリクエスト数が“０”となるので、投機アクセス制御部９４４は、投機アクセス要求を発生し、投機アクセス（リードＲ２２）が開始される。
【０１０３】
なお、投機アクセス時にアクセスされるアドレス及び転送サイズ等は、リードＲ２０ではなく、直前の通常アクセスであるリードＲ２１によって決定される。
【０１０４】
図９の場合、ＣＰＵ１からの投機アクセス発生の制御を受けることなく、投機アクセス要求の発生機会となる個々のサイクルで投機アクセス要求の発生制御を行うことができる。このため、ＣＰＵ１での投機アクセス制御は、投機アクセス要求の発生条件の変更を行う場合にのみ行われることとなり、ＣＰＵ処理性能の消費を低減することができる。また、リクエスト数が多い場合に、リアルタイムに投機アクセス要求の発生を抑制するので、システムの性能劣化を抑制することができる。
【０１０５】
図１０は、図１のユニファイドメモリシステムのタイミングチャートの第３の例を示す図である。メモリコントローラ４のアクセス情報出力部４０９が、投機アクセス情報としてレイテンシ数（ＭＥＭＣレイテンシ数）を出力し、これに従って、ブリッジ９が投機アクセス要求の発生を制御する場合について説明する。
【０１０６】
ＣＰＵ１は、予め、ブリッジ９のレイテンシレジスタ９３７に、ブリッジ９の投機アクセスの発生条件を設定する。ここでは、ＣＰＵ１は、レイテンシレジスタ９３７に値“１”を設定しているとする。
【０１０７】
アクセス情報出力部４０９は、アクセス要求中のリクエスト数及びメモリアクセス中の残サイクルより、新規リクエストに対するレイテンシ数を算出し、その結果をレイテンシレジスタ９３７に出力し、格納させる。投機アクセス制御部９４４は、図７のステップＳ５２において、レイテンシレジスタ９３７の出力を閾値として用いる。
【０１０８】
図１０のサイクルＴ６において、ＣＰＵ１からの通常アクセスの完了に伴い、投機アクセス制御部９４４は、投機アクセス要求を発生するか否かを判断する。サイクルＴ６においてＤＳＰ２からアクセス要求（リードＲ３０）が発生し、アクセス情報出力部４０９は、ブリッジ９へ投機アクセス情報としてレイテンシ数“７”を出力する。レイテンシ数が閾値“１”以上であるので、ブリッジ９は、投機アクセス要求を発生しない。
【０１０９】
サイクルＴ１２において、リードＲ３０が完了し、レイテンシ数が“１”となるので、投機アクセス制御部９４４は、投機アクセス要求の準備を開始する。
【０１１０】
サイクルＴ１３において、ＤＳＰ３からアクセス要求（リードＲ４０）が発生し、ＣＰＵ１からアクセス要求（リードＲ２１）が発生するので、レイテンシ数が“１２”となる。レイテンシ数が閾値“１”以上であるので、投機アクセス要求は発生されない。
【０１１１】
サイクルＴ２４において、リードＲ２１が完了し、レイテンシ数が“１”となったため、投機アクセス制御部９４４は、投機アクセス要求の準備を開始する。サイクルＴ２５において、レイテンシ数が“０”となるので、投機アクセス制御部９４４は、投機アクセス要求を発生し、投機アクセスが開始される。
【０１１２】
なお、図１０の場合も、投機アクセス時にアクセスされるアドレス及び転送サイズ等は、リードＲ２０ではなく、直前の通常アクセスであるリードＲ２１によって決定される。
【０１１３】
図１０の場合、ＣＰＵ１での投機アクセス制御は、投機アクセス要求の発生条件の変更を行う場合にのみ行われることとなり、ＣＰＵ処理性能の消費を低減することができる。また、レイテンシ数が大きい場合には、投機アクセス要求の発生機会となる個々のサイクルで投機アクセス要求の発生を抑えるので、システムの性能劣化を抑制することができる。ＣＰＵ１の通常アクセスが発生した場合にも、投機アクセス要求の発生を抑えるので、ＣＰＵ１のアクセス性能を向上させることができる。
【０１１４】
図１１は、図１のユニファイドメモリシステムのタイミングチャートの第４の例を示す図である。図１０の場合と同様に、ブリッジ９が、メモリコントローラ４のアクセス情報出力部４０９から、投機アクセス情報としてレイテンシ数（ＭＥＭＣレイテンシ数）を受け取り、投機アクセス要求の発生を制御する場合について説明する。但し、レイテンシレジスタ９３７には、値“３”が設定されているとする。投機アクセス制御部９４４は、図７のステップＳ５２において、レイテンシレジスタ９３７の出力を閾値として用いる。
【０１１５】
図１１のサイクルＴ６において、図１０の場合と同様に、アクセス情報出力部４０９は、ブリッジ９へアクセス情報として“７”を出力する。レイテンシ数が閾値“３”以上であるので、ブリッジ９は、投機アクセス要求を発生しない。
【０１１６】
サイクルＴ１０において、リードＲ３０に対応するメモリアクセスが進行し、レイテンシ数が“３”となり、閾値“３”と一致するので、投機アクセス制御部９４４は、投機アクセス要求の準備を開始する。
【０１１７】
サイクルＴ１１において、ＣＰＵ１からブリッジ９へアクセス要求（リードＲ１２）が発生する。リードＲ１２の要求データがバッファメモリ８にない場合、通常アクセスであるアクセス要求（リードＲ２１）が発生する。この場合、投機アクセス制御部９４４は、リードＲ２１の完了までは投機アクセス要求を発生しない。
【０１１８】
図１２は、図１のユニファイドメモリシステムのタイミングチャートの第５の例を示す図である。メモリコントローラ４のアクセス情報出力部４０９が、投機アクセス情報としてリクエストマスタ情報（ＭＥＭＣリクエストマスタ情報）を出力し、これに従って、ブリッジ９が投機アクセス要求の発生を制御する場合について説明する。
【０１１９】
リクエストマスタ情報は、メモリコントローラ４にアクセス要求しているマスタを示す情報であって、例えば、リクエストマスタ情報の各ビットがそれぞれマスタの１つに対応している。マスタがアクセス要求している場合には“１”、アクセス要求していない場合には“０”を、そのマスタが対応するビットの値とする。
【０１２０】
例えば、リクエストマスタ情報には、ＣＰＵ１、ＤＳＰ２、及びＤＳＰ３に対応するビットがこの順で含まれている。この場合、ＣＰＵ１、ＤＳＰ２、及びＤＳＰ３のうち、ＤＳＰ２のみがアクセス要求している場合には“０１０”、ＤＳＰ３のみがアクセス要求している場合には“００１”にエンコードされる。アクセス情報出力部４０９は、アクセス要求中のマスタを示すリクエストマスタ情報をブリッジ９に出力する。
【０１２１】
一方、ＣＰＵ１は、予め、ブリッジ９のリクエストマスタ情報レジスタ９３８に、ブリッジ９の投機アクセス要求の発生条件として、投機アクセス要求に対する他マスタからのアクセス要求の優先度を設定する。リクエストマスタ情報レジスタ９３８の各ビットがそれぞれマスタの１つに対応している。他マスタからのアクセス要求の優先度の方が高い場合には“１”、低い場合には“０”を、そのマスタが対応するビットの値とする。
【０１２２】
リクエストマスタ情報レジスタ９３８は、ＣＰＵ１、ＤＳＰ２、及びＤＳＰ３に対応するビットをリクエストマスタ情報と同様の順で有している。ここでは例として、ＤＳＰ２及びＤＳＰ３のうち、ＣＰＵ１に対する優先度の高いマスタがＤＳＰ２である場合、すなわち、ＣＰＵ１が、リクエストマスタ情報レジスタ９３８に“０１０”を設定した場合について説明する。投機アクセス制御部９４４は、図７のステップＳ５２においてリクエストマスタ情報レジスタ９３８の出力、及びリクエストマスタ情報を用いる。
【０１２３】
図１２のサイクルＴ６において、ＣＰＵ１からの通常アクセスの完了に伴い、投機アクセス制御部９４４は、投機アクセス要求を発生するか否かを判断する。アクセス情報出力部４０９は、ブリッジ９へ投機アクセス情報としてリクエストマスタ情報“１００”を出力する。優先度の高いＤＳＰ２がアクセス要求をしていないので、ブリッジ９は、投機アクセス要求の発生の準備を開始する。
【０１２４】
サイクルＴ７において、ＤＳＰ２からアクセス要求（リードＲ３０）が発生する。このため、リクエストマスタ情報は“０１０”に遷移する。リクエストマスタ情報レジスタ９３８が指定するマスタ（ＤＳＰ２）がアクセス要求を発生したことがわかるので、リードＲ３０が優先され、投機アクセス要求はリードＲ３０が完了するまで発生されない。
【０１２５】
サイクルＴ１３において、リードＲ３０が完了し、ＤＳＰ３のアクセス要求（リードＲ４０）が発生し、リクエストマスタ情報が“００１”となる。ＤＳＰ３はリクエストマスタ情報レジスタ９３８が指定するマスタではないので、投機アクセス制御部９４４は、投機アクセス要求（リードＲ２１）を発生する。ＤＳＰ３のアクセスは、リードＲ２１が完了するまで待たされる。
【０１２６】
図１２の場合、ＣＰＵ１からの投機アクセス発生の制御を受けることなく、投機アクセス要求の発生機会となる個々のサイクルで投機アクセス要求の発生制御を行うことができる。このため、ＣＰＵ１での投機アクセス制御の処理を軽減することができる。また、ＣＰＵ１からのメモリアクセスより優先度の高いマスタのメモリアクセスが発生した場合には、投機アクセス要求の発生を抑制するので、システムの性能劣化を抑制することができる。
【０１２７】
他の変形例として以下に説明するように、システムの動作状況とメモリへのアクセス状況との双方を用いた投機アクセス制御を行うようにしてもよい。
【０１２８】
図２のレジスタブロック９１５のように、投機アクセス制御に使用する投機制御関連レジスタが複数あり、各レジスタには、対応する投機制御パラメータが格納されているとする。投機制御パラメータは、投機アクセス情報、又は投機アクセス情報に基づいて求められた投機アクセスの発生を制御する値である。
【０１２９】
ＣＰＵ１は、システム動作状態の切り替わりの検出を行い、システムの動作状態に応じて、使用する投機制御パラメータ及び対応するレジスタを選択し、パラメータ選択レジスタ９３３に設定する。システム動作状態と投機制御関連レジスタとの組み合わせは、予め決定しておいてもよいし、システム状態を抽出して決定してもよい。この結果、投機アクセス要求の発生を適切な投機制御関連レジスタにより制御することができるようになる。
【０１３０】
投機アクセス制御部９４４は、加重設定レジスタ９３４の値を用いて、選択された複数の投機制御パラメータのそれぞれに基づいて得られた投機アクセス要求の発生についての判断結果に加重平均を行い、その結果に従って投機アクセスの制御を行う。
【０１３１】
このような投機アクセス制御の一例を、投機制御パラメータとして、ＣＰＵ１から出力される投機アクセスヒット率と、メモリコントローラ４から出力されるレイテンシ数とを用いる場合について説明する。
【０１３２】
パラメータ選択レジスタ９３３の各ビットには、投機制御関連レジスタが割り付けられている。例えば、パラメータ選択レジスタ９３３に、上位ビットから順に投機制御レジスタ９３２、リクエスト数レジスタ９３６、レイテンシレジスタ９３７、リクエストマスタ情報レジスタ９３８が割り付けられており、パラメータ選択レジスタ９３３に“１０１０”が設定されているとする。すなわち、投機制御レジスタ９３２及びレイテンシレジスタ９３７が、使用されるべき投機制御関連レジスタとして設定されている。
【０１３３】
ＣＰＵ１は、投機アクセスヒット率に応じて、投機制御レジスタ９３２に値を設定する。メモリコントローラ４は、アクセスレイテンシを算出し、ブリッジ９に出力する。
【０１３４】
加重設定レジスタ９３４には、使用される投機制御関連レジスタによる投機アクセス要求の判断結果に対して重み付けするための係数が設定される。例えば、投機制御レジスタ９３２による判断結果を４０％、レイテンシレジスタ９３７による判断結果を６０％の割合で考慮することとした場合、加重設定レジスタ９３４には“４６００”が設定される。ブリッジ９では、ＣＰＵ１からの通常アクセスの完了に同期して、以下のステップで投機アクセス要求発生の制御を行う。
【０１３５】
第１のステップでは、投機アクセス制御部９４４は、選択された投機制御パラメータにより投機アクセス要求の発生を判断する。投機アクセス要求を発生すべきであると判断した場合には“１”を、投機アクセス要求を発生すべきではないと判断した場合には“０”を、各投機制御パラメータについて求める。
【０１３６】
投機アクセスヒット率が所定の値よりも高く、投機アクセスを発生すべきであるとして、ＣＰＵ１は、投機制御レジスタ９３２に“１”を設定しているとする。また、ＣＰＵ１は、レイテンシレジスタ９３７に“２”を設定しているとする。メモリコントローラ４は、レイテンシ数として“３”を出力しているとする。この場合、投機アクセス制御部９４４は、投機アクセスヒット率については“１”、レイテンシ数については、レイテンシ数がレイテンシレジスタ９３７の値より大きいので、“０”を判断結果として求める。
【０１３７】
第２のステップでは、投機アクセス制御部９４４は、複数の投機制御パラメータについての判断結果に対し、加重設定レジスタ９３４の値を用いて加重平均を行う。加重平均の結果は、（１×６＋０×４）／２＝３となり、これを投機アクセスの制御に用いる制御値とする。
【０１３８】
第３のステップでは、投機アクセス制御部９４４は、投機アクセスの制御値が閾値を超えている場合についてのみ、投機アクセス要求を発生させる。例えば閾値が“３”であるとすると、投機アクセス制御部９４４は、投機アクセス要求を発生させない。つまり、投機アクセスヒット率が高いとＣＰＵ１が判断していても、メモリコントローラ４から大きなレイテンシ数が通知されている場合には、投機アクセス制御部９４４は投機アクセス要求を抑制する。
【０１３９】
また、例えば、メモリコントローラ４から出力されるレイテンシ数が小さく、レイテンシ数についての判断結果が“１”になる場合には、加重平均の結果は、（１×６＋１×４）／２＝５となる。この場合は、投機アクセス制御部９４４は投機アクセス要求を発生する。
【０１４０】
このように、システムの動作状況とメモリへのアクセス状況との双方を用いた投機アクセス制御を行うので、システム性能が大きく低下する可能性を抑えることができる。
【０１４１】
なお、投機アクセスの制御値を複数の投機制御パラメータの加重平均を演算して求める代わりに、投機制御パターンテーブル格納部９１９を用いるようにしてもよい。投機制御パターンテーブル格納部９１９は、ルックアップテーブルである投機制御パターンテーブルを格納している。投機制御パターンテーブルは、入力アドレスを複数の投機制御パラメータの組み合わせを示す値とし、出力データが各投機制御パラメータのそれぞれに基づいて得られた投機アクセス要求の発生についての判断結果の加重平均値となるように、構成されている。
【０１４２】
投機アクセス制御部９４４は、投機制御パターンテーブル格納部９１９に複数の投機制御パラメータの組み合わせを与え、加重平均値を投機アクセスの制御値として受け取る。これによると、パラメータ選択レジスタ９３３、加重設定レジスタ９３４、及び加重平均を求めるための演算器を不要とすることができる。
【０１４３】
また、投機制御パターンテーブルに、投機制御パラメータの値に応じて異なる値を設定しておいてもよい。例えば、投機制御パラメータとして、投機アクセスヒット率と、レイテンシ数とが選択されているとする。そして、投機アクセスヒット率に関する判断結果の重み付けを、レイテンシ数が小さい場合には小さく、レイテンシ数が大きいときには大きくして、加重平均値を求めておく。こうすることにより、投機アクセス要求の発生の制御を最適に設定することができる。
【０１４４】
ＣＰＵ１のメモリアクセス優先度が高く、ブリッジ９の投機アクセスのヒット率が高い（したがって投機アクセスのヒット率が高いと予想できる）場合には、ＣＰＵ１からの通常アクセスの完了時だけではなく、投機アクセスの完了時にもブリッジ９が投機アクセスを発生できるようにしてもよい。すなわち、投機アクセスを連続して発生することができるようにしてもよい。ＣＰＵ１は、このように予想できる場合には、投機アクセスを連続して発生させることを許可することを示す設定を投機多重制御レジスタ９３５に行い、ＣＰＵ１や投機アクセス制御部９４４は、投機多重制御レジスタ９３５の設定に従って投機制御レジスタ９３２の設定を行う。
【０１４５】
このような構成によると、投機アクセスのヒット率が高く、連続領域内でのメモリアクセスが行われる場合に、投機アクセスヒット率が更に高くなり、ＣＰＵ１の処理性能を更に向上させることができる。
【０１４６】
なお、ブリッジ９の投機アクセスのヒット率を、ブリッジ９自身が計測するようにしてもよい。ブリッジ９は、バッファメモリ８に保持するデータが、ＣＰＵ１の通常アクセスによるデータか、ブリッジ９の投機アクセスによるデータかを識別して管理する。ブリッジ９は、投機アクセスによるデータが通常アクセスで使用された場合には、投機アクセスのヒット率が高いと判断する。ＣＰＵ１で予測される投機アクセスのヒット率に、ブリッジ９で実測された投機アクセスヒット率を組み合わせて用いてもよく、投機アクセスヒット率が更に高くなり、ＣＰＵ１の処理性能を更に向上させることができる。
【０１４７】
また、メモリコントローラ４からのアクセス要求数や、アクセス中のマスタ情報に応じて、投機アクセスを連続して発生することができるようにしてもよい。
【０１４８】
サイズ生成部９２０は、システムの動作状況とメモリのアクセス状況に応じて、メモリコントローラ４へ要求すべきデータのサイズを変更して、投機アクセス要求、又はその後に連続して発生される投機アクセス要求に従って転送されるデータのサイズを、投機アクセス情報（投機アクセスヒット率、メモリコントローラ４からのアクセス要求数、及びアクセス中のマスタ情報等）に応じたサイズにしてもよい。
【０１４９】
この構成は、ＣＰＵ１のメモリアクセス優先度が高く、ブリッジ９の投機アクセスのヒット率が高く、メモリコントローラ４に他のマスタからのアクセスが行われていない場合に有利である。バッファメモリ８の容量を上限として、要求すべきデータのサイズを大きくしてもよく、データの先読み量を増加させることができる。投機アクセスヒット率が更に高くなり、ＣＰＵ１の処理性能を更に向上させることができる。
【０１５０】
なお、ブリッジ９が投機アクセス制御部９４４を備えるものとして説明したが、メモリコントローラ４が投機アクセス制御部９４４を備えるようにしてもよい。例えば、ブリッジ９及びバッファメモリ８を、メモリコントローラ４に内蔵させるようにしてもよい。
【０１５１】
また、複数マスタのうちから特定のマスタを選択して、選択されたマスタに関して投機アクセス制御を行うようにしてもよい。例えば、マスタとして複数のＣＰＵが接続されているシステムにおいて、各ＣＰＵの優先度が時間に従って変化する場合には、優先度の高いＣＰＵを選択し、選択されたＣＰＵに対して投機アクセス制御を行うにしてもよい。これにより、各ＣＰＵの処理性能を向上させることができる。このように構成すると、ＣＰＵ毎にブリッジ及びバッファメモリを備える場合に比較して、ハードウェア規模を抑えることができる。
【産業上の利用可能性】
【０１５２】
以上説明したように、本発明は、ＣＰＵからの投機アクセスに起因するシステム性能の低下を抑えることができるので、ユニファイドメモリシステムとして有用であり、更に、ユニファイドメモリアーキテクチャを採用するシステムＬＳＩ等に有用である。
【図面の簡単な説明】
【０１５３】
【図１】本発明の実施形態に係るユニファイドメモリシステムの構成の例を示すブロック図である。
【図２】図１のブリッジの構成の例を示すブロック図である。
【図３】図１のメモリコントローラの構成の例を示すブロック図である。
【図４】図１のＣＰＵにおける処理の流れの例を示すフローチャートである。
【図５】図１のＣＰＵにおける処理の流れの他の例を示すフローチャートである。
【図６】図２のＣＰＵアクセス制御部における処理の流れの例を示すフローチャートである。
【図７】図２の投機アクセス制御部における処理の流れの例を示すフローチャートである。
【図８】図１のユニファイドメモリシステムのタイミングチャートの第１の例を示す図である。
【図９】図１のユニファイドメモリシステムのタイミングチャートの第２の例を示す図である。
【図１０】図１のユニファイドメモリシステムのタイミングチャートの第３の例を示す図である。
【図１１】図１のユニファイドメモリシステムのタイミングチャートの第４の例を示す図である。
【図１２】図１のユニファイドメモリシステムのタイミングチャートの第５の例を示す図である。
【符号の説明】
【０１５４】
１  ＣＰＵ
２，３  ＤＳＰ
４  メモリコントローラ
５  メモリ
６  キャッシュ
７  ＣＰＵ制御バス
８  バッファメモリ
９  ブリッジ
９４２  ＣＰＵアクセス制御部
９４４  投機アクセス制御部
【図１】
2007334564.tif 000003
【図２】
2007334564.tif 000004
【図３】
2007334564.tif 000005
【図４】
2007334564.tif 000006
【図５】
2007334564.tif 000007
【図６】
2007334564.tif 000008
【図７】
2007334564.tif 000009
【図８】
2007334564.tif 000010
【図９】
2007334564.tif 000011
【図１０】
2007334564.tif 000012
【図１１】
2007334564.tif 000013
【図１２】
2007334564.tif 000014
【手続補正書】
【提出日】平成19年6月27日(2007.6.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のマスタからアクセスされるメモリと、
前記複数のマスタのうちの１つとしてのＣＰＵから前記メモリへの第１のアクセス要求に応じて前記メモリへの投機的な第２のアクセス要求を発生する投機アクセス制御部と、
前記第１及び第２のアクセス要求、並びに前記複数のマスタのうち前記ＣＰＵ以外のマスタからの前記メモリへのアクセス要求を受け取り、前記メモリに対して実行するメモリコントローラとを備え、
前記投機アクセス制御部は、
前記メモリへのアクセスに関する情報である投機アクセス情報に従って、前記第２のアクセス要求を発生するものである
ことを特徴とするユニファイドメモリシステム。
【請求項２】
請求項１に記載のユニファイドメモリシステムにおいて、
前記ＣＰＵは、
前記投機アクセス情報を用いて前記投機アクセス制御部を制御するものである
ことを特徴とするユニファイドメモリシステム。
【請求項３】
請求項２に記載のユニファイドメモリシステムにおいて、
前記ＣＰＵは、
前記投機アクセス情報として、前記複数のマスタのメモリアクセス優先度を用いるものであり、
前記投機アクセス制御部は、
前記ＣＰＵのメモリアクセス優先度が、前記複数のマスタのうち前記ＣＰＵ以外のマスタのメモリアクセス優先度より高い場合に、前記第２のアクセス要求を発生するものである
ことを特徴とするユニファイドメモリシステム。
【請求項４】
請求項２に記載のユニファイドメモリシステムにおいて、
前記ＣＰＵは、
前記投機アクセス情報として、既に行われた投機的なアクセス要求に従ったデータ転送が有用であった割合を示すヒット率を求めるものであり、
前記投機アクセス制御部は、
前記ヒット率が所定の値よりも高い場合に、前記第２のアクセス要求を発生するものである
ことを特徴とするユニファイドメモリシステム。
【請求項５】
請求項１に記載のユニファイドメモリシステムにおいて、
前記メモリコントローラは、
前記投機アクセス情報を生成するものである
ことを特徴とするユニファイドメモリシステム。
【請求項６】
請求項５に記載のユニファイドメモリシステムにおいて、
前記メモリコントローラは、
前記投機アクセス情報として、前記複数のマスタによるアクセスリクエスト数を出力するものであり、
前記投機アクセス制御部は、
前記アクセスリクエスト数が所定の値よりも小さい場合に、前記第２のアクセス要求を発生させるものである
ことを特徴とするユニファイドメモリシステム。
【請求項７】
請求項５に記載のユニファイドメモリシステムにおいて、
前記メモリコントローラは、
前記投機アクセス情報として、前記メモリへのアクセスの完了に要するサイクル数を出力するものであり、
前記投機アクセス制御部は、
前記メモリへのまだ実行されていない通常アクセスが存在せず、前記サイクル数が所定の値よりも小さい場合に、前記第２のアクセス要求を発生させるものである
ことを特徴とするユニファイドメモリシステム。
【請求項８】
請求項５に記載のユニファイドメモリシステムにおいて、
前記メモリコントローラは、
前記投機アクセス情報として、前記複数のマスタのうち、前記メモリへのアクセス要求を行っているマスタを示すリクエストマスタ情報を出力するものであり、
前記投機アクセス制御部は、
前記リクエストマスタ情報が所定のマスタを示していない場合に、前記第２のアクセス要求を発生させるものである
ことを特徴とするユニファイドメモリシステム。
【請求項９】
請求項１に記載のユニファイドメモリシステムにおいて、
前記投機アクセス制御部は、
前記投機アクセス情報としての複数のパラメータから選択されたパラメータに従って、前記第２のアクセス要求を発生させるものである
ことを特徴とするユニファイドメモリシステム。
【請求項１０】
請求項９に記載のユニファイドメモリシステムにおいて、
前記投機アクセス制御部は、
前記選択された複数のパラメータのそれぞれに基づいて得られた前記第２のアクセス要求の発生についての判断結果に対して加重計算した結果に従って、前記第２のアクセス要求を発生させるものである
ことを特徴とするユニファイドメモリシステム。
【請求項１１】
請求項１に記載のユニファイドメモリシステムにおいて、
前記第２のアクセス要求に従って転送されるデータのサイズを、前記投機アクセス情報に応じたサイズにするサイズ生成部を更に備える
ことを特徴とするユニファイドメモリシステム。
【請求項１２】
請求項１に記載のユニファイドメモリシステムにおいて、
前記投機アクセス制御部は、
前記ＣＰＵによる前記メモリへのアクセスの優先度が高い場合には、前記第２のアクセス要求によって行われる前記メモリへのアクセスが完了した後に前記メモリへのアクセスを行うための、投機的な第３のアクセス要求を発生するものである
ことを特徴とするユニファイドメモリシステム。
【請求項１３】
請求項１２に記載のユニファイドメモリシステムにおいて、
前記第３のアクセス要求に従って転送されるデータのサイズを、前記投機アクセス情報に応じたサイズにするサイズ生成部を更に備える
ことを特徴とするユニファイドメモリシステム。
【請求項１４】
請求項１２に記載のユニファイドメモリシステムにおいて、
前記投機アクセス制御部は、
既に行われた投機的なアクセス要求に従ったデータ転送が有用であった割合を示すヒット率を求め、前記ヒット率が所定の値よりも高い場合に、前記第３のアクセス要求を発生するものである
ことを特徴とするユニファイドメモリシステム。
【請求項１５】
請求項１４に記載のユニファイドメモリシステムにおいて、
前記第３のアクセス要求に従って転送されるデータのサイズを、前記ヒット率に応じたサイズにするサイズ生成部を更に備える
ことを特徴とするユニファイドメモリシステム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のマスタによりアクセスされるメモリ有するユニファイドメモリシステムに関し、特に、メモリに対する投機アクセスの制御を行う技術に関する。
【背景技術】
【０００２】
近年、携帯電話などの携帯向けの製品からデジタルテレビやＤＶＤ（digital versatile disc）レコーダーなどの据え置き製品に到るまで、ＣＰＵ（central processing unit）やＤＳＰ（digital signal processor）が複数使用され、多機能化、性能向上が図られている。半導体集積度の向上に伴い、コスト削減を目的として、ＣＰＵやＤＳＰが１チップに集積されるとともに、ＣＰＵやＤＳＰが従来はそれぞれ専用に使用していた複数の外部メモリを共用化した、ユニファイドメモリシステムが採用されてきている。
【０００３】
ユニファイドメモリシステムでは、マスタとして動作するＣＰＵやＤＳＰは、他のマスタが外部メモリを使用している場合には、その外部メモリを使用するには待つ必要がある。待ち時間が想定を越えるような場合には、システムとして成立させることができない。このため、マスタ毎にメモリアクセス量を割り当てたり、マスタに優先度を付与し、優先度の高いマスタの処理を優先させる等により、想定を越えた待ち時間が発生しないようにしている。
【０００４】
特に、メディア処理を扱うユニファイドメモリシステムにおいて、メモリへのアクセスはバーストアクセスが主体となってきている。メディア処理はＤＳＰが担当し、まとまったデータ単位で行われるためである。
【０００５】
一方、ＣＰＵは、ＤＳＰへの動作スケジューリング、入出力に伴う割り込み処理、ＣＰＵアプリケーション処理（例えばＧＵＩ（graphical user interface）のための処理）等の輻輳する処理を実行する必要があるため、処理性能を年々向上させてきている。
【０００６】
しかしながら、ユニファイドメモリシステムにおいては、ＣＰＵの処理性能の向上は困難となってきている。なぜなら、メモリへのアクセスはＤＳＰのメディア処理に合わせてバースト転送で行われることが一般的であり、メモリのレイテンシ性能は高くないためである。ＣＰＵでは、メモリの単一の入出力単位のデータに対する処理が大半であるため、メモリのレイテンシ数が大きくなるとＣＰＵ性能が低下する。
【０００７】
このため、ＣＰＵとメモリコントローラとの間にバッファメモリを備えるブリッジを置いたり、メモリコントローラ内にバッファメモリを置くようにした技術が知られている。このような技術では、ＣＰＵからの要求サイズに関わりなく、メモリにバーストアクセスが行われ、読み出されたデータがバッファメモリに保持される。その後、ＣＰＵからバッファメモリの保持するデータへのアクセスが発生すると、バッファメモリが保持するデータがＣＰＵに転送される。これにより、ＣＰＵからメモリへの見かけ上のレイテンシ数を少なくすることができる。更に、将来ＣＰＵが発生するアクセスを予測し、ＣＰＵからのアクセス要求に加えて予測したアクセス（投機アクセス）を発生させることも行われている。
【０００８】
予測がヒットする場合には、投機アクセスによってＣＰＵ性能を向上させることが可能となる。しかし、メモリを使用する他のマスタは、投機アクセスが終了するまでメモリへのアクセスを待たされることがあるので、投機アクセスは、他のマスタにとっては性能劣化要因となる。
【０００９】
また、予測がミスした場合には、投機アクセスが役に立たないにもかかわらず、その投機アクセスが終了するまでメモリへアクセスできないので、投機アクセスは、ＣＰＵの後続する通常アクセスのレイテンシ数を増加させ、システム全体の性能劣化要因となる。
【００１０】
投機アクセスを伴うユニファイドメモリシステムにおいて、投機アクセスによって生じる各マスタのアクセスレイテンシの増加に起因したシステム性能の劣化を防ぐための技術の例が、下記特許文献１に開示されている。すなわち、メモリ階層において上位のマスタ（ＣＰＵ）が、メモリ階層において下位のスレーブ（メモリコントローラ）に対するデータ転送命令に投機アクセスであることを明示し、メモリ階層下位のスレーブは、投機アクセスの実行によりシステム性能が低下すると判断した場合には、投機アクセスを破棄する。
【特許文献１】特開２００３−１８６６６９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
投機アクセス要求をキャンセル又は破棄するためには、アクセス要求側であるＣＰＵ（又はブリッジ）とアクセス受付側であるメモリコントローラとが投機アクセス要求のキャンセル又は破棄をするためのプロトコル及び対応する回路を、新たに設計し、実装する必要が生じる。
【００１２】
ところが、ＣＰＵ（又はブリッジ）のメモリコントローラへの投機アクセス要求のキャンセルは、メモリコントローラの内部状態に依存しないタイミングで発生するので、メモリコントローラの設計及び検証は困難である。また、メモリコントローラによる投機アクセス要求の破棄は、ＣＰＵ（又はブリッジ）の内部状態に依存しないタイミングで発生するので、ＣＰＵ（又はブリッジ）の設計及び検証は困難である。メモリコントローラ内にバッファメモリを置く場合も同様である。
【００１３】
更に、メモリコントローラが、投機アクセス要求によるメモリアクセスを開始していた場合には、メモリコントローラとメモリとの間のプロトコルでは、メモリアクセスを中止することは通常はできない。したがって、投機アクセスは完了されなければならず、必要のない投機アクセス要求が発生すると、そのためにシステム性能が劣化してしまう。
【００１４】
本発明は、投機アクセス要求の発生を制御して、ユニファイドメモリシステムの性能を向上させることを目的とする。
【課題を解決するための手段】
【００１５】
前記課題を解決するため、本発明が講じた手段は、ユニファイドメモリシステムとして、複数のマスタからアクセスされるメモリと、前記複数のマスタのうちの１つとしてのＣＰＵから前記メモリへの第１のアクセス要求に応じて前記メモリへの投機的な第２のアクセス要求を発生する投機アクセス制御部と、前記第１及び第２のアクセス要求、並びに前記複数のマスタのうち前記ＣＰＵ以外のマスタからの前記メモリへのアクセス要求を受け取り、前記メモリに対して実行するメモリコントローラとを備え、前記投機アクセス制御部は、前記メモリへのアクセスに関する情報である投機アクセス情報に従って、前記第２のアクセス要求を発生するものである。
【００１６】
これによると、投機アクセス情報に従って投機的なアクセス要求を発生するようにしているので、ＣＰＵ以外のマスタからメモリへのアクセスや、ＣＰＵからメモリへの通常アクセスが、投機アクセスによって待たされることが少なくなる。また、ＣＰＵ以外のマスタからのアクセスが増加しても、ユニファイドメモリシステムの性能の劣化を抑えることができる。
【発明の効果】
【００１７】
本発明によれば、ＣＰＵ以外のマスタからのメモリアクセスが投機アクセスによって待たされることが少なくなり、ＣＰＵ以外のマスタの処理性能の低下を防ぐことができる。また、ＣＰＵからの通常アクセスが投機アクセスによって待たされることが少なくなり、ＣＰＵの処理性能を向上させることができる。したがって、ユニファイドメモリシステムの性能を向上させることができる。特に、メモリのアクセスレイテンシが大きい場合に大きな効果を得ることができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００１９】
図１は、本発明の実施形態に係るユニファイドメモリシステムの構成の例を示すブロック図である。図１のユニファイドメモリシステムは、メモリコントローラ４と、メモリ５と、バッファメモリ８と、ブリッジ９とを備えている。このユニファイドメモリシステムは、いずれもマスタとして動作するＣＰＵ１と、ＤＳＰ２，３とによりアクセスされる。ＣＰＵ１、ＤＳＰ２，３、及びブリッジ９の間は、ＣＰＵ制御バス７によって接続されている。ＣＰＵ１には、キャッシュ６が接続されている。
【００２０】
ＤＳＰ２及び３は、メモリコントローラ４を介してメモリ５のデータにアクセスしながら、独立したメディア処理を行う。ＣＰＵ１は、ブリッジ９及びメモリコントローラ４を介してメモリ５のデータにアクセスする。
【００２１】
ブリッジ９は、ＣＰＵアクセス制御部９４２と、投機アクセス制御部９４４とを備えている。ＣＰＵアクセス制御部９４２は、ＣＰＵ１からのメモリ５への通常アクセスの要求を受け取り、メモリコントローラ４へ出力する。投機アクセス制御部９４４は、このＣＰＵ１からのアクセスに応じて、これに後続するＣＰＵ１からメモリ５への新たなアクセスを予測し、その結果として投機的なアクセス要求（投機アクセス要求）を発生し、メモリコントローラ４へ出力する。メモリコントローラ４は、ブリッジ９、及びＤＳＰ２，３からアクセス要求を受け取って調停し、その結果に応じてメモリ５へのアクセスを行う。
【００２２】
図２は、図１のブリッジ９の構成の例を示すブロック図である。図２のブリッジ９は、ＣＰＵインタフェース９１０と、バッファリード制御部９１１と、バッファライト制御部９１２と、メモリコントローラインタフェース９１３と、ＣＰＵ制御バスインタフェース９１４と、レジスタブロック９１５と、アドレス生成部９１６と、メモリリード生成部９１７と、ブリッジ制御部９１８と、投機制御パターンテーブル格納部９１９と、サイズ生成部９２０とを備えている。
【００２３】
レジスタブロック９１５は、アクセスアドレスレジスタ９３１と、投機制御レジスタ９３２と、パラメータ選択レジスタ９３３と、加重設定レジスタ９３４と、投機多重制御レジスタ９３５と、リクエスト数レジスタ９３６と、レイテンシレジスタ９３７と、リクエストマスタ情報レジスタ９３８とを有している。
【００２４】
ブリッジ制御部９１８は、ＣＰＵアクセス制御部９４２と、投機アクセス制御部９４４とを有している。ＣＰＵアクセス制御部９４２及び投機アクセス制御部９４４は、ブリッジ９内の各部を連携して動作させる。この連係動作については、後に詳述する。
【００２５】
アクセスアドレスレジスタ９３１は、バッファリード制御部９１１から与えられるアドレス情報をアドレスフィールドに保持し、そのアドレス情報が有効かどうかを示すバリッドビットを保持する。
【００２６】
投機制御レジスタ９３２は、投機アクセス制御部９４４に投機アクセス要求の発生を許可するために使用するレジスタであり、ＣＰＵ１より設定される。
【００２７】
パラメータ選択レジスタ９３３は、投機アクセス制御部９４４が投機アクセス制御に使用するレジスタの組み合わせを設定するレジスタであり、ＣＰＵ１より設定される。
【００２８】
加重設定レジスタ９３４は、投機制御パラメータを複数使用して投機アクセス制御を行う場合に、投機制御パラメータの重みを設定するレジスタであり、ＣＰＵ１より設定される。
【００２９】
投機多重制御レジスタ９３５は、投機アクセス制御部９４４に投機アクセス要求の多重発生を許可するために使用するレジスタであり、ＣＰＵ１より設定される。
【００３０】
リクエスト数レジスタ９３６は、メモリコントローラ４からブリッジ９に出力される投機アクセス情報としてのアクセス要求中のマスタ数を格納するレジスタである。レイテンシレジスタ９３７は、メモリコントローラ４からブリッジ９に出力される投機アクセス情報としてのレイテンシ数（メモリ５へのアクセスの完了に要するサイクル数）を格納するレジスタである。リクエストマスタ情報レジスタ９３８は、メモリコントローラ４からブリッジ９に出力される投機アクセス情報としてのアクセス要求中のマスタ情報を格納するレジスタである。リクエスト数レジスタ９３６、レイテンシレジスタ９３７及びリクエストマスタ情報レジスタ９３８は、ＣＰＵ１より設定され、投機アクセス要求の発生条件を設定するために使用される。
【００３１】
ＣＰＵインタフェース９１０は、ＣＰＵ１からのリード要求を含むアクセス情報をバッファリード制御部９１１へ出力するとともに、バッファリード制御部９１１から出力される読み出されたデータをＣＰＵ１へ出力する。
【００３２】
バッファリード制御部９１１は、ＣＰＵインタフェース９１０から出力されたＣＰＵ１によって要求されたリードアドレスと、アクセスアドレスレジスタ９３１に保持されたアドレスとを比較し、両者が一致しない場合にはＣＰＵアクセス制御部９４２を起動する。両者が一致している場合には、バッファリード制御部９１１は、リードアドレスに一致するデータをバッファメモリ８から読み出してＣＰＵインタフェース９１０へ出力する。
【００３３】
なお、バッファリード制御部９１１は、アクセスアドレスレジスタ９１９のバリッドビッドがインバリッドに設定されている場合には、前述したアドレスの比較を行うことなくＣＰＵアクセス制御部９４２を起動する。
【００３４】
バッファライト制御部９１２は、メモリコントローラインタフェース９１３から出力されるデータをバッファメモリ８にライトし、バッファメモリ８へのライトの完了をＣＰＵアクセス制御部９４２又は投機アクセス制御部９４４に通知する。
【００３５】
メモリコントローラインタフェース９１３は、メモリリード生成部９１７からのリードアクセスの要求をメモリコントローラ４へ転送し、メモリコントローラ４から返却される読み出されたデータをバッファライト制御部９１２へ出力する。
【００３６】
ＣＰＵ制御バスインタフェース９１４は、ＣＰＵ１からＤＳＰ２，３及びブリッジ９を制御するためのＣＰＵ制御バス７からのアクセスを、ＣＰＵ１から、レジスタブロック９１５内のアクセス可能なレジスタや、投機制御パターンテーブル格納部９１９へインタフェースする。
【００３７】
アドレス生成部９１６は、メモリリード生成部９１７が生成するリード要求に示されるべきアドレス情報を、アクセスアドレスレジスタ９３１の出力を用いて生成する。
【００３８】
メモリリード生成部９１７は、ＣＰＵアクセス制御部９４２、又は投機アクセス制御部９４４の制御により、メモリコントローラインタフェース９１３へのリードアクセス要求を生成する。
【００３９】
図３は、図１のメモリコントローラ４の構成の例を示すブロック図である。図３のメモリコントローラ４は、マスタインタフェース４０１，４０２，４０３と、アービタ４０４と、マスタセレクタ４０５と、メモリアクセスシーケンサ４０６と、メモリアドレス生成部４０７と、メモリインタフェース４０８と、アクセス情報出力部４０９と、メモリアクセスカウンタ４１０とを備えている。
【００４０】
マスタインタフェース４０１は、ブリッジ９がメモリコントローラ４に要求するアクセスの転送を制御する。マスタインタフェース４０２は、ＤＳＰ２がメモリコントローラ４に要求するアクセスの転送を制御する。マスタインタフェース４０３は、ＤＳＰ３がメモリコントローラ４に要求するアクセスの転送を制御する。
【００４１】
アービタ４０４は、マスタインタフェース４０１〜４０３からの転送要求を調停して、その結果をマスタセレクタ４０５に通知する。また、調停前の転送要求数をメモリアクセスカウンタ４１０に出力する。
【００４２】
マスタセレクタ４０５は、マスタインタフェース４０１〜４０３の転送要求の中から、アービタ４０４の調停結果に応じて１つを選択し、選択された転送要求に応じたメモリアクセス開始要求をメモリアクセスシーケンサ４０６へ行い、更に、メモリインタフェース４０８と選択された転送要求を出力したマスタインタフェースとの間のデータ転送を行う。
【００４３】
メモリアクセスシーケンサ４０６は、マスタセレクタ４０５からのメモリアクセス開始要求により、メモリに応じて予め定められたアクセスシーケンスを発生する。
【００４４】
メモリアドレス生成部４０７は、メモリアクセスシーケンサ４０６の制御により、メモリアドレスを生成する。
【００４５】
メモリインタフェース４０８は、メモリ５との間のデータの入出力制御を行う。また、メモリ５へのアクセス中である場合に、アクセス完了までの残りのサイクル数をメモリアクセスカウンタ４１０に出力する。
【００４６】
メモリアクセスカウンタ４１０は、メモリインタフェース４０８から残りのアクセスサイクル数を、アービタ４０４から調停前の転送要求数を受け取り、これらからメモリアクセスサイクル数を算出して、アクセス情報出力部４０９に出力する。
【００４７】
アクセス情報出力部４０９は、アービタ４０４で調停中のアクセス要求数を受け取り、リクエスト数としてブリッジ９に出力する。また、アービタ４０４で調停中のマスタを示す情報及びメモリアクセスカウンタ４１０で計測されたメモリアクセスサイクル数を受け取り、それぞれをリクエストマスタ情報及びレイテンシ数としてブリッジ９に出力する。リクエスト数、リクエストマスタ情報及びレイテンシ数は、いずれも投機アクセス情報である。
【００４８】
図４は、図１のＣＰＵ１における処理の流れの例を示すフローチャートである。図４では、投機アクセス情報としてのメモリアクセス優先度がＣＰＵ１より高いマスタの処理を、ＣＰＵ１でのソフトウェアによる処理によって検出し、その結果に従ってブリッジ９による投機アクセス要求の発生を制御する。ＣＰＵ１は、ＤＳＰ２及びＤＳＰ３よりも優先度が低いとする。動作するマスタがＣＰＵ１のみである状態をシステム動作状態Ａ、システム動作状態Ａの後であり、かつ、動作するマスタがＣＰＵ１とＤＳＰ２とＤＳＰ３である状態をシステム動作状態Ｂ、システム動作状態Ｂの後であり、かつ、動作するマスタがＣＰＵ１のみである状態をシステム動作状態Ｃとする。
【００４９】
ステップＳ１１において、ＣＰＵ１は、システム動作状態の切り替わりが発生したか否かを検出する。発生が検出された場合にはステップＳ１２に進み、発生が検出されなかった場合にはステップＳ１１に戻る。
【００５０】
ステップＳ１２において、ＣＰＵ１は、ＣＰＵ１よりもメモリアクセス優先度の高いマスタがあるか否かを判断する。そのようなマスタがある場合にはステップＳ１３へ進み、ない場合にはステップＳ１７へ進む。システム動作状態Ｂにおいては、ＣＰＵ１よりもＤＳＰ２及びＤＳＰ３のメモリアクセス優先度の方が高いので、ステップＳ１３へ進む。
【００５１】
ステップＳ１３において、ＣＰＵ１は、投機アクセス要求の発生が禁止されていることを示す情報をブリッジ９の投機制御レジスタ９３２に設定する。このため、これ以降のＣＰＵ１からの通常アクセスに対して、ブリッジ９は投機アクセス要求の発生を行わないように制御を行う。
【００５２】
ステップＳ１４において、ＣＰＵ１は、ＤＳＰ２及びＤＳＰ３の処理を起動する。このため、ＤＳＰ２及びＤＳＰ３からメモリ５へのアクセスが発生し、これらのアクセスがメモリコントローラ４で調停、処理される。
【００５３】
ステップＳ１５において、ＣＰＵ１は、ＣＰＵ１よりも優先度の高いＤＳＰ２，３の処理が終了したか否かを検出する。終了していればステップＳ１６に進み、終了していなければステップＳ１５に戻る。
【００５４】
ステップＳ１６において、ＣＰＵ１は、投機アクセス要求の発生が許可されていることを示す情報を、投機アクセス情報として投機制御レジスタ９３２に設定する。このため、これ以降のＣＰＵ１からの通常アクセスに対して、ブリッジ９は投機アクセス要求の発生を行うように制御を行う。その後、ステップＳ１１に戻る。
【００５５】
ステップＳ１７において、ステップＳ１６と同様に、ＣＰＵ１は、投機アクセス要求の発生が許可されていることを示す情報を投機制御レジスタ９３２に設定する。
【００５６】
ステップＳ１８において、ＣＰＵ１は、ＤＳＰ２及びＤＳＰ３の処理を起動し、ステップＳ１１に戻る。ＤＳＰ２及びＤＳＰ３からメモリ５へのアクセスが発生し、これらのアクセスがメモリコントローラ４で調停、処理される。
【００５７】
図５は、図１のＣＰＵ１における処理の流れの他の例を示すフローチャートである。図５では、投機アクセス情報としての投機アクセスヒット率の高い期間を、ＣＰＵ１でのソフトウェアによる処理によって検出し、その結果に従ってブリッジ９による投機アクセス要求の発生を制御する。
【００５８】
投機アクセスヒット率とは、ＣＰＵ１の処理により発生するメモリアクセスに対して既に発生した投機アクセス要求のうち、投機アクセス要求に従ったデータ転送が有用であった割合、すなわち、投機アクセスによりバッファに転送され、保持されたデータが、後続する通常のアクセスで使用できた場合の割合を示す。投機アクセスヒット率の算出方法としては、システムで実施予定のＣＰＵ１の複数の処理を幾つかのパターンに分類しておき、予め各パターンについて、ＣＰＵ１が、ブリッジに投機アクセス要求をさせて投機アクセスヒット率を測定しておくことが、一例として挙げられる。その後、実際に動作を行う際には、ＣＰＵ１が、どのＣＰＵ処理パターンであるかを検出し、投機アクセス要求の発生を制御する。所定値以上の投機アクセスヒット率が期待できるＣＰＵ処理パターンであれば、投機アクセス要求を発生させる。
【００５９】
ここでは、ＣＰＵ１の処理が、投機アクセスヒット率が高いＣＰＵ処理Ａ、投機アクセスヒット率が低いＣＰＵ処理Ｂ、投機アクセスヒット率が高いＣＰＵ処理Ｃへと順に切り替わるものとする。
【００６０】
ステップＳ２１において、ＣＰＵ１は、ＣＰＵ処理の切り替わりが発生したか否かを検出する。切り替わりが発生した場合にはステップＳ２２へ、発生しなかった場合にはステップＳ２１に戻る。
【００６１】
ステップＳ２２において、ＣＰＵ１の処理が、投機アクセスヒット率が所定値以下の処理であるか否かを、ＣＰＵ１は判断する。投機アクセスヒット率が所定値以下である場合にはステップＳ２３に進み、所定値よりも大きい場合にはステップＳ２５に進む。例えば、ＣＰＵ処理Ｂの場合はステップＳ２３に進み、ＣＰＵ処理Ａ及びＣＰＵ処理Ｃの場合はステップＳ２５に進む。
【００６２】
ステップＳ２３において、ＣＰＵ１は、投機アクセス要求の発生が禁止されていることを示す情報をブリッジ９の投機制御レジスタ９３２に設定する。このため、これ以降のＣＰＵ１からの通常アクセスに対して、ブリッジ９は投機アクセス要求の発生を行わないように制御を行う。
【００６３】
ステップＳ２４において、ＣＰＵ１は、ＤＳＰ２及びＤＳＰ３の処理を起動する。このため、ＤＳＰ２及びＤＳＰ３からメモリ５へのアクセスが発生し、これらのアクセスがメモリコントローラ４で調停、処理される。その後、ステップＳ２１に戻る。
【００６４】
ステップＳ２５において、ＣＰＵ１は、投機アクセス要求の発生が許可されていることを示す情報を投機制御レジスタ９３２に設定する。このため、これ以降のＣＰＵ１からの通常アクセスに対して、ブリッジ９は投機アクセス要求の発生を行うように制御を行う。
【００６５】
図６は、図２のＣＰＵアクセス制御部９４２における処理の流れの例を示すフローチャートである。ここでは、ＣＰＵ１からの通常アクセスがある場合について、例として説明する。
【００６６】
図６のステップＳ４１において、ＣＰＵアクセス制御部９４２は、ＣＰＵ１からのアクセスがミスした（バッファメモリ８内に要求されたデータが存在しない）か否かを判定する。ＣＰＵ１からアクセスされたデータがバッファメモリ８内にない場合には、ＣＰＵアクセス制御部９４２は、そのことを示す通知をバッファリード制御部９１１から受け取り、ステップＳ４２に進む。その他の場合はステップＳ４１に戻る。
【００６７】
ステップＳ４２において、メモリコントローラ４へのアクセス中であるか否か、すなわち、メモリコントローラインタフェース９１３が動作中であるか否かを、ＣＰＵアクセス制御部９４２は検出する。アクセス中であればステップＳ４２に戻り、アクセス中でなければステップＳ４３に進む。例えば、投機アクセス中であってメモリコントローラインタフェース９１３が動作中であれば、投機アクセスの完了を待つこととなる。
【００６８】
ステップＳ４３において、ＣＰＵアクセス制御部９４２は、メモリコントローラインタフェース９１３に要求すべきデータのアドレス（リードアドレス）を生成し、出力するように、アドレス生成部９１６及びメモリリード生成部９１７を制御する。この際、アドレス生成部９１６は、アクセスアドレスレジスタ９３１のアドレスフィールドを参照する。生成されるアドレスは、ＣＰＵ１からの要求アドレスである。
【００６９】
ステップＳ４４において、ＣＰＵアクセス制御部９４２は、メモリコントローラインタフェース９１３にメモリコントローラ４へのアクセスを開始させるように、メモリリード生成部９１７に指示を行う。メモリコントローラインタフェース９１３は、メモリコントローラ４にリード要求を行う。
【００７０】
ステップＳ４５において、メモリコントローラインタフェース９１３は、読み出されたデータをメモリコントローラ４から受け取り、バッファライト制御部９１２へ出力する。バッファライト制御部９１２は、読み出されたデータをバッファメモリ８にライトする。バッファライト制御部９１２は、全ての読み出されたデータのバッファメモリ８へのライトを終えると、ＣＰＵアクセス制御部９４２にバッファメモリ８のライトが完了したことを通知し、ステップＳ４６に進む。このとき、ＣＰＵアクセス制御部９４２は、メモリリード生成部９１７が出力するアドレスでアクセスアドレスレジスタ９３１のアドレスフィールドを更新し、更にバリッドビットをイネーブルにする。全ての読み出されたデータのライトが終わっていない場合には、ステップＳ４５に戻る。
【００７１】
ステップＳ４６において、ＣＰＵアクセス制御部９４２は、バッファリード制御部９１１にＣＰＵ１からのリード要求への応答をするように指示する。バッファリード制御部９１１は、バッファメモリ８の保持データからリード要求されたデータを選択し、ＣＰＵインタフェース９１０を介してＣＰＵ１へ出力する。
【００７２】
ステップＳ４７において、ＣＰＵアクセス制御部９４２は、投機アクセス制御部９４４にＣＰＵ１からのリードアクセス（通常アクセス）の完了を通知する。但し、バッファメモリ８に保持されたデータを使用した場合には通知しない。
【００７３】
その後、ＣＰＵ１の後続するリード要求がバッファメモリ８に保持されたデータに対するものであれば、要求されたデータがバッファメモリ８よりＣＰＵ１に順次出力される。
【００７４】
図７は、図２の投機アクセス制御部９４４における処理の流れの例を示すフローチャートである。ＣＰＵ１からの通常アクセスが要求するデータがバッファメモリ８内に存在しない場合に発生するメモリアクセスが、完了しているとする。
【００７５】
図７のステップＳ５１において、投機アクセス制御部９４４は、ＣＰＵアクセス制御部９４２からＣＰＵ１の通常アクセスの完了通知を待つ。完了通知を受けた場合にはステップＳ５２に進み、その他の場合はステップＳ５１に戻る。
【００７６】
ステップＳ５２において、投機アクセス制御部９４４は、レジスタブロック９１５等の情報に基づいて、投機アクセス要求を発生するか否かを判断する。発生する場合にはステップＳ５３に進み、発生しない場合にはステップＳ５１に戻る。
【００７７】
ステップＳ５３において、投機アクセス制御部９４４は、メモリコントローラインタフェース９１３に要求すべきデータのアドレス（投機リードアドレス）を生成し、出力するように、アドレス生成部９１６及びメモリリード生成部９１７を制御する。この際、アドレス生成部９１６は、アクセスアドレスレジスタ９３１のアドレスフィールドのアドレスに転送サイズを加算して、投機リードアドレスを生成する。すなわち、アドレス生成部９１６は、前回、ＣＰＵ１からの要求に従ってメモリから転送されたデータのアドレスに連続する次のアドレスを生成する。
【００７８】
ステップＳ５４において、投機アクセス制御部９４４は、メモリコントローラインタフェース９１３に要求すべきデータのサイズを出力するように、サイズ生成部９２０及びメモリリード生成部９１７を制御する。サイズ生成部９２０は、例えば、投機アクセスヒット率や、メモリコントローラ４へのＤＳＰ２及びＤＳＰ３のアクセス要求の有無に連動して、投機アクセス要求に従ってバッファメモリ８に転送されるデータのサイズを変更する。
【００７９】
ステップＳ５５において、投機アクセス制御部９４４は、メモリコントローラインタフェース９１３にメモリコントローラ４へのアクセスを開始させるように、メモリリード生成部９１７に指示を行う。メモリコントローラインタフェース９１３は、メモリコントローラ４にリード要求を行う。
【００８０】
ステップＳ５６において、投機アクセス制御部９４４は、メモリコントローラ４への投機アクセスを開始したことをＣＰＵアクセス制御部９４２に通知する。ＣＰＵアクセス制御部９４２は、投機アクセス中にＣＰＵ１からの通常アクセスをメモリに対して行うことが必要な場合には、投機アクセス完了まで待つこととなる。
【００８１】
ステップＳ５７において、投機アクセス制御部９４４は、メモリコントローラ４の処理が完了したか、すなわち、メモリコントローラ４へのアクセスが終了したか否かを判断する。終了した場合にはステップＳ５８に進み、終了していない場合にはステップＳ５７に戻る。
【００８２】
ステップＳ５８において、投機アクセス制御部９４４は、メモリコントローラへのアクセスの完了をＣＰＵアクセス制御部９４２に通知し、ステップＳ５１に戻る。すると、ＣＰＵアクセス制御部９４２は、ＣＰＵ１からの通常アクセスをメモリ５に対して行う必要がある場合には、すぐに通常アクセスの処理を開始することができるようになる。
【００８３】
図８は、図１のユニファイドメモリシステムのタイミングチャートの第１の例を示す図である。図８では、ＣＰＵ制御バス７、ＣＰＵメモリバス、ブリッジ９−ＣＰＵ１間のインタフェース（ＩＦ）、ブリッジ９−メモリコントローラ（ＭＥＭＣ）４間のインタフェース、及びメモリコントローラ４−マスタ間のインタフェースにおけるアクセスが示されている。
【００８４】
図８において、アドレスａ０，ａ１，ａ２は、それぞれＣＰＵ１、ＤＳＰ２、ＤＳＰ３により読み出しが要求されたデータのアドレスである。括弧内には、読み出されるデータの範囲又はその範囲の先頭のアドレスが示されている。ＣＰＵ１が図４のフローチャートに従って動作する場合について、図４及び図８を参照して説明する。
【００８５】
サイクルＴ０において、システム動作Ａ（ＣＰＵ１のみが動作）からシステム動作Ｂ（ＣＰＵ１、ＤＳＰ２及びＤＳＰ３が動作）へ切り替わる。ＣＰＵ１よりも優先度が高いＤＳＰ２及びＤＳＰ３が動作するようになるので、ＣＰＵ１は、ＣＰＵ制御バス７を用いて、ブリッジ９内の投機制御レジスタ９３２に投機アクセス要求の発生禁止を設定する（ステップＳ１３）。
【００８６】
サイクルＴ１において、ＣＰＵ１、ＤＳＰ２、ＤＳＰ３は、それぞれの処理を開始する。ＤＳＰ２は、サイクルＴ７よりメモリ５へのアクセス要求（リードＲ３０）を発生し、ＤＳＰ３は、サイクルＴ１３よりメモリ５へのアクセス要求（リードＲ４０）を発生するが、ＣＰＵ１の投機アクセス要求は発生しない。このため、ＣＰＵ１の通常アクセス、ＤＳＰ２及びＤＳＰ３のアクセスがメモリコントローラ４で調停、処理される。
【００８７】
サイクルＴ２３において、ＣＰＵ１は、ＤＳＰ２及びＤＳＰ３より処理の完了通知を受けると、ＣＰＵ制御バス７を用いて、ブリッジ９内の投機制御レジスタ９３２に投機アクセス要求の発生許可を設定する（ステップＳ１６）。このため、サイクルＴ２４における通常アクセスの完了に伴い、サイクルＴ２５で投機アクセス要求（リードＲ２２）が発生される。
【００８８】
このように、ＣＰＵ１は、より優先度が高いマスタの存在を検出し、投機制御レジスタ９３２へ設定を行うことにより、ブリッジ９による投機アクセス要求の発生を抑制する。ＣＰＵ１より優先度が高いマスタの処理の完了までは、ブリッジ９は投機アクセス要求を発生しないので、投機アクセスによってメモリアクセスが待たされることがなく、想定された時間内にメモリアクセスを完了させることができる。したがって、ＣＰＵ１より優先度が高いマスタの性能劣化を抑えることができる。
【００８９】
次に、ＣＰＵ１が図５のフローチャートに従って動作する場合について、図５及び図８を参照して説明する。
【００９０】
サイクルＴ０において、ＣＰＵ１は、ＣＰＵ処理Ａ（投機アクセスヒット率が高い）からＣＰＵ処理Ｂ（投機アクセスヒット率が低い）への切り替わり時に、ＣＰＵ処理Ｂにおけるブリッジ９による投機アクセスヒット率が低いことを検出し、ＣＰＵ制御バス７を用いて、ブリッジ９内の投機制御レジスタ９３２に投機アクセス要求の発生禁止を設定する（ステップＳ２３）。
【００９１】
サイクルＴ１において、ＣＰＵ１、ＤＳＰ２、ＤＳＰ３は、それぞれの処理を開始する。ＤＳＰ２は、サイクルＴ７よりメモリ５へのアクセス要求（リードＲ３０）を発生し、ＤＳＰ３は、サイクルＴ１３よりメモリ５へのアクセス要求（リードＲ４０）を発生するが、ＣＰＵ１の投機アクセス要求は発生しない。このため、ＣＰＵ１の通常アクセス、ＤＳＰ２及びＤＳＰ３のアクセスがメモリコントローラ４で調停、処理される。
【００９２】
サイクルＴ２３において、ＣＰＵ１は、ＣＰＵ処理ＢからＣＰＵ処理Ｃへの切り替わり時にＣＰＵ処理Ｃの投機アクセスヒット率が高いことを検出し、ＣＰＵ制御バス７を用いて、ブリッジ９内の投機制御レジスタ９３２に投機アクセス要求の発生許可を設定する（ステップＳ２５）。このため、サイクルＴ２４における通常アクセスの完了に伴い、サイクルＴ２５で投機アクセス要求（リードＲ２２）が発生される。
【００９３】
このように、投機制御レジスタ９３２へ設定を行うことにより、投機アクセスヒット率が低い場合にはブリッジ９による投機アクセス要求の発生を抑制する。このため、投機アクセスによる他のマスタの性能劣化を抑えることができる。また、実際に発生する投機アクセスのヒット率が高くなるので、ＣＰＵ１の処理性能を向上させることができる。
【００９４】
なお、ＣＰＵ１は、ＣＰＵ１の処理に伴うメモリアクセスがキャッシャブル領域に対するアクセスである場合、すなわちミスヒットした場合を、投機アクセスのヒット率が高い場合として検出してもよい。これは、キャッシュミスが発生すると連続してキャッシュミスが発生する場合があるということを想定しているからである。
【００９５】
また、ＣＰＵ１は、ＣＰＵ１の処理においてプロセスに割り振られるプロセスＩＤの優先度を用いて、優先度の高いプロセスに伴うメモリアクセス時を、投機アクセスのヒット率が高い場合であるとして検出してもよい。キャッシュミスの検出や、プロセスＩＤの検出は、ＣＰＵ１のソフトウェアによる処理で行ってもよいし、キャッシュインタフェースやＭＭＵ（memory management unit）内に設けられた専用ハードウェアで行ってもよい。
【００９６】
ＣＰＵ１が図４又は図５に従って処理を行い、投機アクセスを制御する場合には、ＣＰＵ１は、システム動作の切り替わりの検出や投機制御レジスタ９３２への設定を行うためのソフトウェアによる処理を行う必要がある。このため、ＣＰＵ１の処理性能を消費することとなる。また、図４のようにマスタの優先度に応じた制御をする場合には、優先度の高いマスタの処理が完了するまでは投機アクセスを一律に制御することになる。この結果、優先度の高いマスタがメモリを使用しない期間であっても、投機アクセスは抑制される。すなわち、メモリのアクセス状況をリアルタイムに反映した投機アクセス制御を行うことが難しい。そこで、他の例について以下に説明する。
【００９７】
図９は、図１のユニファイドメモリシステムのタイミングチャートの第２の例を示す図である。メモリコントローラ４のアクセス情報出力部４０９が、マスタによるメモリコントローラ４へのアクセスリクエスト数（ＭＥＭＣリクエスト数）を投機アクセス情報として出力し、これに従って、ブリッジ９が投機アクセス要求の発生を制御する場合について説明する。
【００９８】
ＣＰＵ１は、予め、ブリッジ９のリクエスト数レジスタ９３６にブリッジ９の投機アクセス要求の発生条件を設定する。ここでは、ＣＰＵ１は、リクエスト数レジスタ９３６に初期値として値“０”を設定しているとする。
【００９９】
メモリコントローラ４は、複数のマスタからアクセスリクエストを受け、アクセス情報出力部４０９は、アクセスリクエスト数をリクエスト数レジスタ９３６に出力し、格納させる。投機アクセス制御部９４４は、図７のステップＳ５２において、リクエスト数レジスタ９３６の出力を閾値として用いる。なお、アクセス情報出力部４０９から出力されるリクエスト数にブリッジ９からの要求が含まれている場合には、投機アクセス制御部９４４は、リクエスト数からその要求の数を差し引いた数を用いる。
【０１００】
図９のサイクルＴ６において、ＣＰＵ１からの通常アクセスが完了するとアクセスリクエスト数が“０”となるので、投機アクセス制御部９４４は、投機アクセス要求の発生の準備を開始する。サイクルＴ７においてＤＳＰ２からアクセス要求（リードＲ３０）が発生し、アクセスリクエスト数が“１”となる。ブリッジ９は、アクセスリクエスト数が、閾値“０”を越えているため、投機アクセス要求を発生せず、アクセスリクエスト数が“０”となるまで待つ。
【０１０１】
サイクルＴ１２においてリードＲ３０は完了する。サイクルＴ１３においてＤＳＰ３からアクセス要求（リードＲ４０）が、ＣＰＵ１から通常アクセスのアクセス要求（リードＲ２１）が発生する。アクセスリクエスト数が閾値“０”を越えているので、ブリッジ９は、投機アクセス要求を発生せず、アクセスリクエスト数が“０”となるまで待つ。サイクルＴ１８でリードＲ４０が完了するので、サイクルＴ１９においてアクセスリクエスト数は“１”となる。
【０１０２】
リードＲ２１が完了するとアクセスリクエスト数は“０”となるので、サイクルＴ２４において、投機アクセス制御部９４４は、投機アクセス要求の発生の準備を開始する。サイクルＴ２５において、アクセスリクエスト数が“０”となるので、投機アクセス制御部９４４は、投機アクセス要求を発生し、投機アクセス（リードＲ２２）が開始される。
【０１０３】
なお、投機アクセス時にアクセスされるアドレス及び転送サイズ等は、リードＲ２０ではなく、直前の通常アクセスであるリードＲ２１によって決定される。
【０１０４】
図９の場合、ＣＰＵ１からの投機アクセス発生の制御を受けることなく、投機アクセス要求の発生機会となる個々のサイクルで投機アクセス要求の発生制御を行うことができる。このため、ＣＰＵ１での投機アクセス制御は、投機アクセス要求の発生条件の変更を行う場合にのみ行われることとなり、ＣＰＵ処理性能の消費を低減することができる。また、リクエスト数が多い場合に、リアルタイムに投機アクセス要求の発生を抑制するので、システムの性能劣化を抑制することができる。
【０１０５】
図１０は、図１のユニファイドメモリシステムのタイミングチャートの第３の例を示す図である。メモリコントローラ４のアクセス情報出力部４０９が、投機アクセス情報としてレイテンシ数（ＭＥＭＣレイテンシ数）を出力し、これに従って、ブリッジ９が投機アクセス要求の発生を制御する場合について説明する。
【０１０６】
ＣＰＵ１は、予め、ブリッジ９のレイテンシレジスタ９３７に、ブリッジ９の投機アクセスの発生条件を設定する。ここでは、ＣＰＵ１は、レイテンシレジスタ９３７に値“１”を設定しているとする。
【０１０７】
アクセス情報出力部４０９は、アクセス要求中のリクエスト数及びメモリアクセス中の残サイクルより、新規リクエストに対するレイテンシ数を算出し、その結果をレイテンシレジスタ９３７に出力し、格納させる。投機アクセス制御部９４４は、図７のステップＳ５２において、レイテンシレジスタ９３７の出力を閾値として用いる。
【０１０８】
図１０のサイクルＴ６において、ＣＰＵ１からの通常アクセスの完了に伴い、投機アクセス制御部９４４は、投機アクセス要求を発生するか否かを判断する。サイクルＴ６においてＤＳＰ２からアクセス要求（リードＲ３０）が発生し、アクセス情報出力部４０９は、ブリッジ９へ投機アクセス情報としてレイテンシ数“７”を出力する。レイテンシ数が閾値“１”以上であるので、ブリッジ９は、投機アクセス要求を発生しない。
【０１０９】
サイクルＴ１２において、リードＲ３０が完了し、レイテンシ数が“１”となるので、投機アクセス制御部９４４は、投機アクセス要求の準備を開始する。
【０１１０】
サイクルＴ１３において、ＤＳＰ３からアクセス要求（リードＲ４０）が発生し、ＣＰＵ１からアクセス要求（リードＲ２１）が発生するので、レイテンシ数が“１２”となる。レイテンシ数が閾値“１”以上であるので、投機アクセス要求は発生されない。
【０１１１】
サイクルＴ２４において、リードＲ２１が完了し、レイテンシ数が“１”となったため、投機アクセス制御部９４４は、投機アクセス要求の準備を開始する。サイクルＴ２５において、レイテンシ数が“０”となるので、投機アクセス制御部９４４は、投機アクセス要求を発生し、投機アクセスが開始される。
【０１１２】
なお、図１０の場合も、投機アクセス時にアクセスされるアドレス及び転送サイズ等は、リードＲ２０ではなく、直前の通常アクセスであるリードＲ２１によって決定される。
【０１１３】
図１０の場合、ＣＰＵ１での投機アクセス制御は、投機アクセス要求の発生条件の変更を行う場合にのみ行われることとなり、ＣＰＵ処理性能の消費を低減することができる。また、レイテンシ数が大きい場合には、投機アクセス要求の発生機会となる個々のサイクルで投機アクセス要求の発生を抑えるので、システムの性能劣化を抑制することができる。ＣＰＵ１の通常アクセスが発生した場合にも、投機アクセス要求の発生を抑えるので、ＣＰＵ１のアクセス性能を向上させることができる。
【０１１４】
図１１は、図１のユニファイドメモリシステムのタイミングチャートの第４の例を示す図である。図１０の場合と同様に、ブリッジ９が、メモリコントローラ４のアクセス情報出力部４０９から、投機アクセス情報としてレイテンシ数（ＭＥＭＣレイテンシ数）を受け取り、投機アクセス要求の発生を制御する場合について説明する。但し、レイテンシレジスタ９３７には、値“３”が設定されているとする。投機アクセス制御部９４４は、図７のステップＳ５２において、レイテンシレジスタ９３７の出力を閾値として用いる。
【０１１５】
図１１のサイクルＴ６において、図１０の場合と同様に、アクセス情報出力部４０９は、ブリッジ９へアクセス情報として“７”を出力する。レイテンシ数が閾値“３”以上であるので、ブリッジ９は、投機アクセス要求を発生しない。
【０１１６】
サイクルＴ１０において、リードＲ３０に対応するメモリアクセスが進行し、レイテンシ数が“３”となり、閾値“３”と一致するので、投機アクセス制御部９４４は、投機アクセス要求の準備を開始する。
【０１１７】
サイクルＴ１１において、ＣＰＵ１からブリッジ９へアクセス要求（リードＲ１２）が発生する。リードＲ１２の要求データがバッファメモリ８にない場合、通常アクセスであるアクセス要求（リードＲ２１）が発生する。この場合、投機アクセス制御部９４４は、リードＲ２１の完了までは投機アクセス要求を発生しない。
【０１１８】
図１２は、図１のユニファイドメモリシステムのタイミングチャートの第５の例を示す図である。メモリコントローラ４のアクセス情報出力部４０９が、投機アクセス情報としてリクエストマスタ情報（ＭＥＭＣリクエストマスタ情報）を出力し、これに従って、ブリッジ９が投機アクセス要求の発生を制御する場合について説明する。
【０１１９】
リクエストマスタ情報は、メモリコントローラ４にアクセス要求しているマスタを示す情報であって、例えば、リクエストマスタ情報の各ビットがそれぞれマスタの１つに対応している。マスタがアクセス要求している場合には“１”、アクセス要求していない場合には“０”を、そのマスタが対応するビットの値とする。
【０１２０】
例えば、リクエストマスタ情報には、ＣＰＵ１、ＤＳＰ２、及びＤＳＰ３に対応するビットがこの順で含まれている。この場合、ＣＰＵ１、ＤＳＰ２、及びＤＳＰ３のうち、ＤＳＰ２のみがアクセス要求している場合には“０１０”、ＤＳＰ３のみがアクセス要求している場合には“００１”にエンコードされる。アクセス情報出力部４０９は、アクセス要求中のマスタを示すリクエストマスタ情報をブリッジ９に出力する。
【０１２１】
一方、ＣＰＵ１は、予め、ブリッジ９のリクエストマスタ情報レジスタ９３８に、ブリッジ９の投機アクセス要求の発生条件として、投機アクセス要求に対する他マスタからのアクセス要求の優先度を設定する。リクエストマスタ情報レジスタ９３８の各ビットがそれぞれマスタの１つに対応している。他マスタからのアクセス要求の優先度の方が高い場合には“１”、低い場合には“０”を、そのマスタが対応するビットの値とする。
【０１２２】
リクエストマスタ情報レジスタ９３８は、ＣＰＵ１、ＤＳＰ２、及びＤＳＰ３に対応するビットをリクエストマスタ情報と同様の順で有している。ここでは例として、ＤＳＰ２及びＤＳＰ３のうち、ＣＰＵ１に対する優先度の高いマスタがＤＳＰ２である場合、すなわち、ＣＰＵ１が、リクエストマスタ情報レジスタ９３８に“０１０”を設定した場合について説明する。投機アクセス制御部９４４は、図７のステップＳ５２においてリクエストマスタ情報レジスタ９３８の出力、及びリクエストマスタ情報を用いる。
【０１２３】
図１２のサイクルＴ６において、ＣＰＵ１からの通常アクセスの完了に伴い、投機アクセス制御部９４４は、投機アクセス要求を発生するか否かを判断する。アクセス情報出力部４０９は、ブリッジ９へ投機アクセス情報としてリクエストマスタ情報“１００”を出力する。優先度の高いＤＳＰ２がアクセス要求をしていないので、ブリッジ９は、投機アクセス要求の発生の準備を開始する。
【０１２４】
サイクルＴ７において、ＤＳＰ２からアクセス要求（リードＲ３０）が発生する。このため、リクエストマスタ情報は“０１０”に遷移する。リクエストマスタ情報レジスタ９３８が指定するマスタ（ＤＳＰ２）がアクセス要求を発生したことがわかるので、リードＲ３０が優先され、投機アクセス要求はリードＲ３０が完了するまで発生されない。
【０１２５】
サイクルＴ１３において、リードＲ３０が完了し、ＤＳＰ３のアクセス要求（リードＲ４０）が発生し、リクエストマスタ情報が“００１”となる。ＤＳＰ３はリクエストマスタ情報レジスタ９３８が指定するマスタではないので、投機アクセス制御部９４４は、投機アクセス要求（リードＲ２１）を発生する。ＤＳＰ３のアクセスは、リードＲ２１が完了するまで待たされる。
【０１２６】
図１２の場合、ＣＰＵ１からの投機アクセス発生の制御を受けることなく、投機アクセス要求の発生機会となる個々のサイクルで投機アクセス要求の発生制御を行うことができる。このため、ＣＰＵ１での投機アクセス制御の処理を軽減することができる。また、ＣＰＵ１からのメモリアクセスより優先度の高いマスタのメモリアクセスが発生した場合には、投機アクセス要求の発生を抑制するので、システムの性能劣化を抑制することができる。
【０１２７】
他の変形例として以下に説明するように、システムの動作状況とメモリへのアクセス状況との双方を用いた投機アクセス制御を行うようにしてもよい。
【０１２８】
図２のレジスタブロック９１５のように、投機アクセス制御に使用する投機制御関連レジスタが複数あり、各レジスタには、対応する投機制御パラメータが格納されているとする。投機制御パラメータは、投機アクセス情報、又は投機アクセス情報に基づいて求められた投機アクセスの発生を制御する値である。
【０１２９】
ＣＰＵ１は、システム動作状態の切り替わりの検出を行い、システムの動作状態に応じて、使用する投機制御パラメータ及び対応するレジスタを選択し、パラメータ選択レジスタ９３３に設定する。システム動作状態と投機制御関連レジスタとの組み合わせは、予め決定しておいてもよいし、システム状態を抽出して決定してもよい。この結果、投機アクセス要求の発生を適切な投機制御関連レジスタにより制御することができるようになる。
【０１３０】
投機アクセス制御部９４４は、加重設定レジスタ９３４の値を用いて、選択された複数の投機制御パラメータのそれぞれに基づいて得られた投機アクセス要求の発生についての判断結果に対して加重計算を行い、その結果に従って投機アクセスの制御を行う。
【０１３１】
このような投機アクセス制御の一例を、投機制御パラメータとして、ＣＰＵ１から出力される投機アクセスヒット率と、メモリコントローラ４から出力されるレイテンシ数とを用いる場合について説明する。
【０１３２】
パラメータ選択レジスタ９３３の各ビットには、投機制御関連レジスタが割り付けられている。例えば、パラメータ選択レジスタ９３３に、上位ビットから順に投機制御レジスタ９３２、リクエスト数レジスタ９３６、レイテンシレジスタ９３７、リクエストマスタ情報レジスタ９３８が割り付けられており、パラメータ選択レジスタ９３３に“１０１０”が設定されているとする。すなわち、投機制御レジスタ９３２及びレイテンシレジスタ９３７が、使用されるべき投機制御関連レジスタとして設定されている。
【０１３３】
ＣＰＵ１は、投機アクセスヒット率に応じて、投機制御レジスタ９３２に値を設定する。メモリコントローラ４は、アクセスレイテンシを算出し、ブリッジ９に出力する。
【０１３４】
加重設定レジスタ９３４には、使用される投機制御関連レジスタによる投機アクセス要求の判断結果に対して重み付けするための係数が設定される。例えば、投機制御レジスタ９３２による判断結果を４０％、レイテンシレジスタ９３７による判断結果を６０％の割合で考慮することとした場合、加重設定レジスタ９３４には“４６００”が設定される。ブリッジ９では、ＣＰＵ１からの通常アクセスの完了に同期して、以下のステップで投機アクセス要求発生の制御を行う。
【０１３５】
第１のステップでは、投機アクセス制御部９４４は、選択された投機制御パラメータにより投機アクセス要求の発生を判断する。投機アクセス要求を発生すべきであると判断した場合には“１”を、投機アクセス要求を発生すべきではないと判断した場合には“０”を、各投機制御パラメータについて求める。
【０１３６】
投機アクセスヒット率が所定の値よりも高く、投機アクセスを発生すべきであるとして、ＣＰＵ１は、投機制御レジスタ９３２に“１”を設定しているとする。また、ＣＰＵ１は、レイテンシレジスタ９３７に“２”を設定しているとする。メモリコントローラ４は、レイテンシ数として“３”を出力しているとする。この場合、投機アクセス制御部９４４は、投機アクセスヒット率については“１”、レイテンシ数については、レイテンシ数がレイテンシレジスタ９３７の値より大きいので、“０”を判断結果として求める。
【０１３７】
第２のステップでは、投機アクセス制御部９４４は、複数の投機制御パラメータについての判断結果に対し、加重設定レジスタ９３４の値を用いて加重計算を行う。加重計算の結果は、（０×６＋１×４）／２＝２となり、これを投機アクセスの制御に用いる制御値とする。
【０１３８】
第３のステップでは、投機アクセス制御部９４４は、投機アクセスの制御値が閾値を超えている場合についてのみ、投機アクセス要求を発生させる。例えば閾値が“３”であるとすると、投機アクセス制御部９４４は、投機アクセス要求を発生させない。つまり、投機アクセスヒット率が高いとＣＰＵ１が判断していても、メモリコントローラ４から大きなレイテンシ数が通知されている場合には、投機アクセス制御部９４４は投機アクセス要求を抑制する。
【０１３９】
また、例えば、メモリコントローラ４から出力されるレイテンシ数が小さく、レイテンシ数についての判断結果が“１”になる場合には、加重計算の結果は、（１×６＋１×４）／２＝５となる。この場合は、投機アクセス制御部９４４は投機アクセス要求を発生する。
【０１４０】
このように、システムの動作状況とメモリへのアクセス状況との双方を用いた投機アクセス制御を行うので、システム性能が大きく低下する可能性を抑えることができる。
【０１４１】
なお、投機アクセスの制御値を複数の投機制御パラメータに対して加重計算を行って求める代わりに、投機制御パターンテーブル格納部９１９を用いるようにしてもよい。投機制御パターンテーブル格納部９１９は、ルックアップテーブルである投機制御パターンテーブルを格納している。投機制御パターンテーブルは、入力アドレスを複数の投機制御パラメータの組み合わせを示す値とし、出力データが各投機制御パラメータのそれぞれに基づいて得られた投機アクセス要求の発生についての判断結果に対する加重計算結果となるように、構成されている。
【０１４２】
投機アクセス制御部９４４は、投機制御パターンテーブル格納部９１９に複数の投機制御パラメータの組み合わせを与え、加重計算結果を投機アクセスの制御値として受け取る。これによると、パラメータ選択レジスタ９３３、加重設定レジスタ９３４、及び加重計算のための演算器を不要とすることができる。
【０１４３】
また、投機制御パターンテーブルに、投機制御パラメータの値に応じて異なる値を設定しておいてもよい。例えば、投機制御パラメータとして、投機アクセスヒット率と、レイテンシ数とが選択されているとする。そして、投機アクセスヒット率に関する判断結果の重み付けを、レイテンシ数が小さい場合には小さく、レイテンシ数が大きいときには大きくして、加重計算結果を求めておく。こうすることにより、投機アクセス要求の発生の制御を最適に設定することができる。
【０１４４】
ＣＰＵ１のメモリアクセス優先度が高く、ブリッジ９の投機アクセスのヒット率が高い（したがって投機アクセスのヒット率が高いと予想できる）場合には、ＣＰＵ１からの通常アクセスの完了時だけではなく、投機アクセスの完了時にもブリッジ９が投機アクセスを発生できるようにしてもよい。すなわち、投機アクセスを連続して発生することができるようにしてもよい。ＣＰＵ１は、このように予想できる場合には、投機アクセスを連続して発生させることを許可することを示す設定を投機多重制御レジスタ９３５に行い、ＣＰＵ１や投機アクセス制御部９４４は、投機多重制御レジスタ９３５の設定に従って投機制御レジスタ９３２の設定を行う。
【０１４５】
このような構成によると、投機アクセスのヒット率が高く、連続領域内でのメモリアクセスが行われる場合に、投機アクセスヒット率が更に高くなり、ＣＰＵ１の処理性能を更に向上させることができる。
【０１４６】
なお、ブリッジ９の投機アクセスのヒット率を、ブリッジ９自身が計測するようにしてもよい。ブリッジ９は、バッファメモリ８に保持するデータが、ＣＰＵ１の通常アクセスによるデータか、ブリッジ９の投機アクセスによるデータかを識別して管理する。ブリッジ９は、投機アクセスによるデータが通常アクセスで使用された場合には、投機アクセスのヒット率が高いと判断する。ＣＰＵ１で予測される投機アクセスのヒット率に、ブリッジ９で実測された投機アクセスヒット率を組み合わせて用いてもよく、投機アクセスヒット率が更に高くなり、ＣＰＵ１の処理性能を更に向上させることができる。
【０１４７】
また、メモリコントローラ４からのアクセス要求数や、アクセス中のマスタ情報に応じて、投機アクセスを連続して発生することができるようにしてもよい。
【０１４８】
サイズ生成部９２０は、システムの動作状況とメモリのアクセス状況に応じて、メモリコントローラ４へ要求すべきデータのサイズを変更して、投機アクセス要求、又はその後に連続して発生される投機アクセス要求に従って転送されるデータのサイズを、投機アクセス情報（投機アクセスヒット率、メモリコントローラ４からのアクセス要求数、及びアクセス中のマスタ情報等）に応じたサイズにしてもよい。
【０１４９】
この構成は、ＣＰＵ１のメモリアクセス優先度が高く、ブリッジ９の投機アクセスのヒット率が高く、メモリコントローラ４に他のマスタからのアクセスが行われていない場合に有利である。バッファメモリ８の容量を上限として、要求すべきデータのサイズを大きくしてもよく、データの先読み量を増加させることができる。投機アクセスヒット率が更に高くなり、ＣＰＵ１の処理性能を更に向上させることができる。
【０１５０】
なお、ブリッジ９が投機アクセス制御部９４４を備えるものとして説明したが、メモリコントローラ４が投機アクセス制御部９４４を備えるようにしてもよい。例えば、ブリッジ９及びバッファメモリ８を、メモリコントローラ４に内蔵させるようにしてもよい。
【０１５１】
また、複数マスタのうちから特定のマスタを選択して、選択されたマスタに関して投機アクセス制御を行うようにしてもよい。例えば、マスタとして複数のＣＰＵが接続されているシステムにおいて、各ＣＰＵの優先度が時間に従って変化する場合には、優先度の高いＣＰＵを選択し、選択されたＣＰＵに対して投機アクセス制御を行うにしてもよい。これにより、各ＣＰＵの処理性能を向上させることができる。このように構成すると、ＣＰＵ毎にブリッジ及びバッファメモリを備える場合に比較して、ハードウェア規模を抑えることができる。
【産業上の利用可能性】
【０１５２】
以上説明したように、本発明は、ＣＰＵからの投機アクセスに起因するシステム性能の低下を抑えることができるので、ユニファイドメモリシステムとして有用であり、更に、ユニファイドメモリアーキテクチャを採用するシステムＬＳＩ等に有用である。
【図面の簡単な説明】
【０１５３】
【図１】本発明の実施形態に係るユニファイドメモリシステムの構成の例を示すブロック図である。
【図２】図１のブリッジの構成の例を示すブロック図である。
【図３】図１のメモリコントローラの構成の例を示すブロック図である。
【図４】図１のＣＰＵにおける処理の流れの例を示すフローチャートである。
【図５】図１のＣＰＵにおける処理の流れの他の例を示すフローチャートである。
【図６】図２のＣＰＵアクセス制御部における処理の流れの例を示すフローチャートである。
【図７】図２の投機アクセス制御部における処理の流れの例を示すフローチャートである。
【図８】図１のユニファイドメモリシステムのタイミングチャートの第１の例を示す図である。
【図９】図１のユニファイドメモリシステムのタイミングチャートの第２の例を示す図である。
【図１０】図１のユニファイドメモリシステムのタイミングチャートの第３の例を示す図である。
【図１１】図１のユニファイドメモリシステムのタイミングチャートの第４の例を示す図である。
【図１２】図１のユニファイドメモリシステムのタイミングチャートの第５の例を示す図である。
【符号の説明】
【０１５４】
１  ＣＰＵ
２，３  ＤＳＰ
４  メモリコントローラ
５  メモリ
６  キャッシュ
７  ＣＰＵ制御バス
８  バッファメモリ
９  ブリッジ
９４２  ＣＰＵアクセス制御部
９４４  投機アクセス制御部