(57)【要約】  スレッドに共有される形態で設けられ、複数のエントリを有してそれらのエントリにアクセス要求を保持するポート手段を備えて、そのポート手段を使って、同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するという構成を採るときに、各スレッドの発行するアクセス要求を、そのスレッドに割り付けられたポート手段のポート部分に登録し、これにより、ポート手段をスレッド構成に合わせて分割して使用するように制御する。そして、アクセス要求を選択する場合には、各スレッド毎に、ポート手段の保持するそのスレッドの発行したアクセス要求の中から、規定の優先制御に従ってアクセス要求を選択して、その選択したアクセス要求の中からスレッド選択信号に従って最終的なアクセス要求を選択する。この構成に従って、ポート手段の資源量を抑えつつ効率的に使用しながらキャッシュアクセス処理を実行できるようになる。
2008155822.tif 000002
【特許請求の範囲】
【請求項１】
同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するキャッシュ制御装置であって、
スレッドに共有される形態で設けられ、複数のエントリを有してそれらのエントリにアクセス要求を保持するポート手段と、
各スレッドの発行するアクセス要求を、そのスレッドに割り付けられた前記ポート手段のポート部分に登録することで、前記ポート手段をスレッド構成に合わせて分割して使用するように制御する制御手段と、
各スレッドに対応付けて設けられて、前記ポート手段の保持するそのスレッドの発行したアクセス要求を入力として、規定の優先制御に従ってアクセス要求を選択する第１の選択手段と、
前記第１の選択手段の選択したアクセス要求を入力として、スレッド選択信号に従って最終的なアクセス要求を選択する第２の選択手段とを備えることを、
特徴とするキャッシュ制御装置。
【請求項２】
請求項１に記載のキャッシュ制御装置において、
スレッドの処理が終了するときに、前記スレッド選択信号の指すスレッドを、その処理が終了したスレッドから別のスレッドに切り替える切替手段を備えることを、
特徴とするキャッシュ制御装置。
【請求項３】
請求項１又は２に記載のキャッシュ制御装置において、
各スレッドの発行するアクセス要求の頻度を測定する測定手段と、
前記測定手段の測定結果に基づいて、各スレッドに割り付ける前記ポート部分を決定する決定手段とを備えることを、
特徴とするキャッシュ制御装置。
【請求項４】
請求項１ないし３のいずれか１項に記載のキャッシュ制御装置において、
１つのスレッドのみが動作する動作モードにあるのかを検出する検出手段と、
前記検出手段が１つのスレッドのみが動作する動作モードにあることを検出する場合に、そのスレッドに対して、前記ポート手段の持つ全てのポート部分を割り付けることを決定する第２の決定手段を備えることを、
特徴とするキャッシュ制御装置。
【請求項５】
スレッドに共有される形態で設けられ、複数のエントリを有してそれらのエントリにアクセス要求を保持するポート手段を備えて、そのポート手段を使って、同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するキャッシュ制御装置が実行するキャッシュ制御方法であって、
前記キャッシュ制御装置が、
各スレッドの発行するアクセス要求を、そのスレッドに割り付けられた前記ポート手段のポート部分に登録することで、前記ポート手段をスレッド構成に合わせて分割して使用するように制御し、
各スレッド毎に、前記ポート手段の保持するそのスレッドの発行したアクセス要求の中から、規定の優先制御に従ってアクセス要求を選択し、
前記選択したアクセス要求の中から、スレッド選択信号に従って最終的なアクセス要求を選択することを、
特徴とするキャッシュ制御方法。
【請求項６】
請求項５に記載のキャッシュ制御方法において、
前記キャッシュ制御装置が、スレッドの処理が終了するときに、前記スレッド選択信号の指すスレッドを、その処理が終了したスレッドから別のスレッドに切り替えることを、
特徴とするキャッシュ制御方法。
【請求項７】
請求項５又は６に記載のキャッシュ制御方法において、
前記キャッシュ制御装置が、各スレッドの発行するアクセス要求の頻度を測定して、その測定結果に基づいて、各スレッドに割り付ける前記ポート部分を決定することを、
特徴とするキャッシュ制御方法。
【請求項８】
請求項５ないし７のいずれか１項に記載のキャッシュ制御方法において、
前記キャッシュ制御装置が、１つのスレッドのみが動作する動作モードにあるのかを検出して、１つのスレッドのみが動作する動作モードにあることを検出する場合に、そのスレッドに対して、前記ポート手段の持つ全てのポート部分を割り付けることを決定することを、
特徴とするキャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＭＴ（Simultaneous Multi Thread ）方式のプロセッサで用いられるキャッシュ制御装置及び制御方法に関し、特に、ＳＭＴ方式のプロセッサにおいて、キャッシュアクセス処理に必要となる資源を単純にスレッドの数だけ増加させることなく、その資源を効率的に利用してキャッシュアクセス処理を実行できるようにするキャッシュ制御装置及び制御方法に関する。【０００２】
ＳＭＴ方式のプロセッサは複数のスレッドを同時に実行するプロセッサである。このＳＭＴ方式のプロセッサでは、複数のスレッドでキャッシュが共有されることになるので、シングル・スレッド方式のプロセッサで用いられているキャッシュ制御とは異なる構成のキャッシュ制御を構築する必要がある。
【背景技術】
【０００３】
図１２に、シングル・スレッド方式のプロセッサで用いられているキャッシュ制御の構成を図示する。【０００４】
ここで、図中に示す１００は命令制御部、２００はキャッシュ制御部、２０１はキャッシュＲＡＭ、２０２はフェッチ・ポート（Fetch Port）、２０３はＴＯＱ(Top-Of-Queue)制御回路、２０４はプライオリティ制御回路である。【０００５】
図１２に示すように、命令制御部１００からのキャッシュアクセスの要求は、一旦、キャッシュ制御部２００にある複数のエントリを持つフェッチ・ポート２０２に保持される。【０００６】
それぞれのアクセス要求はプログラム上の順番に沿って順にフェッチ・ポート２０２に割り当てられ、フェッチ・ポート２０２の各エントリは循環して使用される。例えば、フェッチ・ポート２０２が１６個のエントリ（ＦＰ＃０〜ＦＰ＃１５）を持つ場合には、ＦＰ＃０から順に各アクセス要求が割り当てられ、ＦＰ＃１５の次はＦＰ＃０に割り当てられることになる。【０００７】
フェッチ・ポート２０２の各エントリは、要求されたキャッシュアクセス処理が完了するまでアクセス要求を保持し、要求されたキャッシュアクセス処理が完了した時点でアクセス要求を開放する。処理が完了していない最も古いフェッチ・ポート２０２のエントリ番号は、ＴＯＱ制御回路２０３の出力するＦＰ−ＴＯＱ（Fetch-Port-Top-Of-Queue)で指し示される。【０００８】
キャッシュアクセス処理のために読み出すフェッチ・ポート２０２のエントリ選択は、キャッシュアクセスをアウト・オブ・オーダーで処理する場合、フェッチ・ポート２０２の割り当ての順序に必ずしも依存する必要はなく、基本的には任意のエントリのアクセス要求を選択して処理しても構わないが、実際には、プライオリティ制御回路２０４により優先順位を設けて選択することが行われている。【０００９】
図１３に、プライオリティ制御回路２０４により実行される優先順位の制御処理を示す。【００１０】
すなわち、プライオリティ制御回路２０４は、第一には、まだ一度もキャッシュアクセスを行っていないエントリ、または、キャッシュミスやデータの順序性保証等のためにフェッチ・ポート２０２で待機させていたアクセス要求に対する再処理が指示されたエントリが１つ以上存在する場合には、それらのエントリの中で最もＦＰ−ＴＯＱに近いエントリを優先して選択する。【００１１】
そして、第二には、第一の優先順位の条件に当てはまらないが、アクセス要求が割り当てられている場合、つまり、有効なエントリが１つ以上存在する場合には、それらのエントリの中で最もＦＰ−ＴＯＱに近いエントリを優先して選択する。【００１２】
従来のＳＭＴ方式のプロセッサで用いられているキャッシュ制御では、このように構成されるシングル・スレッド方式のプロセッサで用いられているキャッシュ制御をそのまま利用する形で実現されている。【００１３】
すなわち、従来のＳＭＴ方式のプロセッサで用いられているキャッシュ制御では、各スレッド毎に規定のエントリ数を持つフェッチ・ポートを設けるようにして、図１３に示すような優先順位制御に従って各スレッド毎に最も優先順位の高いアクセス要求を選択し、その中から、スレッド間の優先順位制御を行うことで最終的なアクセス要求を選択するようにしている。【００１４】
ここで、本発明に関連する技術として、下記の特許文献１には、ＳＭＴ方式のプロセッサにおいて、スレッド間での共有データの読み出し及び書き込みの実行順序の一貫性を保証することを実現する発明が記載されている。
【特許文献１】ＷＯ２００４／０６８３６１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１５】
前述したように、従来のＳＭＴ方式のプロセッサで用いられているキャッシュ制御では、シングル・スレッド方式のプロセッサで用いられているキャッシュ制御をそのまま利用する形で実現されており、各スレッド毎に規定のエントリ数を持つフェッチ・ポートを設けるようにして、図１３に示すような優先順位制御に従って各スレッド毎に最も優先順位の高いアクセス要求を選択し、その中から、スレッド間の優先順位制御を行うことで最終的なアクセス要求を選択するようにしている。【００１６】
しかしながら、このような従来技術に従っていると、キャッシュアクセス処理に必要となる資源の増加が避けられないという問題がある。【００１７】
すなわち、従来のＳＭＴ方式のプロセッサで用いられているキャッシュ制御では、シングル・スレッド方式のプロセッサで用いられているキャッシュ制御で例えば１６エントリのフェッチ・ポートを用いる場合にあって、スレッドがｎ個となる場合には、その１６エントリを持つフェッチ・ポートをｎ個用意するようにしており、これから、資源の増加が避けられないのである。【００１８】
さらに、従来技術では、キャッシュアクセス処理に必要となる資源を効率的に利用していないという問題がある。【００１９】
すなわち、スレッドが２つとなる場合で説明するならば、一方のスレッドの発行するアクセス要求の頻度が他方のスレッドの発行するアクセス要求の頻度よりも大きいということが起こる。【００２０】
このようなことが起こることが最初から分かっている場合にも、従来技術では、一方のスレッドのために例えば１６エントリを持つフェッチ・ポートを用意し、他方のスレッドのためにそれと同じ１６エントリを持つフェッチ・ポートを用意するようにしている。【００２１】
これでは、少ないアクセス要求を発行するスレッドのために用意するフェッチ・ポートが必要以上に大きなエントリを持つことになってしまうことから、フェッチ・ポートを効率的に利用していないのである。【００２２】
しかも、スレッドの発行するアクセス要求の頻度がデータ処理の進行に伴って変化していくことが起こる。【００２３】
このようなことが起こる場合にも、従来技術では、２つのスレッドに対して、例えば１６エントリを持つフェッチ・ポートというように、固定化されたエントリ数を持つフェッチ・ポートを用意するようにしている。【００２４】
これでは、一方のスレッドの発行するアクセス要求の頻度が他方のスレッドの発行するアクセス要求の頻度よりも大きくなった場合にも、それに関係なく同一のエントリ数のフェッチ・ポートを用いるようにしていることから、フェッチ・ポートを効率的に利用していないのである。【００２５】
本発明はかかる事情に鑑みてなされたものであって、ＳＭＴ方式のプロセッサにおいて、キャッシュアクセス処理に必要となる資源を増加させることなく、その資源を効率的に利用してキャッシュアクセス処理を実行できるようにする新たなキャッシュ制御技術の提供を目的とする。
【課題を解決するための手段】
【００２６】
この目的を達成するために、本発明のキャッシュ制御装置は、同時に実行される複数のスレッドで共有されるキャッシュに対してのアクセス要求を制御するために、（１）スレッドに共有される形態で設けられ、複数のエントリを有してそれらのエントリにアクセス要求を保持するポート手段と、（２）各スレッドの発行するアクセス要求を、そのスレッドに割り付けられたポート手段のポート部分に登録することで、ポート手段をスレッド構成に合わせて分割して使用するように制御する制御手段と、（３）各スレッドに対応付けて設けられて、ポート手段の保持するそのスレッドの発行したアクセス要求を入力として、規定の優先制御に従ってアクセス要求を選択する第１の選択手段と、（４）第１の選択手段の選択したアクセス要求を入力として、スレッド選択信号に従って最終的なアクセス要求を選択する第２の選択手段と、（５）スレッドの処理が終了するときに、スレッド選択信号の指すスレッドを、その処理が終了したスレッドから別のスレッドに切り替える切替手段と、（６）各スレッドの発行するアクセス要求の頻度を測定する測定手段と、（７）測定手段の測定結果に基づいて、各スレッドに割り付けるポート部分を決定する第１の決定手段と、（８）１つのスレッドのみが動作する動作モードにあるのかを検出する検出手段と、（９）検出手段が１つのスレッドのみが動作する動作モードにあることを検出する場合に、そのスレッドに対して、ポート手段の持つ全てのポート部分を割り付けることを決定する第２の決定手段とを備えるように構成する。【００２７】
このように構成される本発明のキャッシュ制御装置では、アクセス要求をポート手段に登録する場合には、各スレッドの発行するアクセス要求を、そのスレッドに割り付けられたポート手段のポート部分に登録し、これにより、ポート手段をスレッド構成に合わせて分割して使用するように制御する。【００２８】
そして、ポート手段に登録されているアクセス要求を選択する場合には、各スレッド毎に、ポート手段の保持するそのスレッドの発行したアクセス要求の中から、規定の優先制御に従ってアクセス要求を選択して、その選択したアクセス要求の中から、スレッド選択信号に従って最終的なアクセス要求を選択する。【００２９】
このようにして、本発明のキャッシュ制御装置では、ＳＭＴ方式のプロセッサで用いられるときに、スレッド毎にポート手段を用意するのではなくて、例えば１６個のエントリを持つ１つのポート手段を用意して、スレッドが２つとなる場合で説明するならば、例えば、２つのスレッドのアクセス要求の頻度の割合に応じて、２つのスレッドのそれぞれに対して８個のエントリを割り付けたり、一方のスレッドに対して１０個のエントリを割り付けるとともに、他方のスレッドに対して６個のエントリを割り付けるというように、ポート手段をスレッド構成に合わせて分割して使用するように制御するのである。【００３０】
この構成に従って、本発明によれば、ＳＭＴ方式のプロセッサにおけるキャッシュアクセス処理を少ない資源で実行できるようになる。【００３１】
この構成を採るときに、本発明のキャッシュ制御装置では、スレッドの処理が終了するときに、スレッド選択信号の指すスレッドを、その処理が終了したスレッドから別のスレッドに切り替えるようにする。【００３２】
これにより、特定のスレッドの発行するアクセス要求のみが選択され続けることになるという不都合の発生を防止することができるようになる。【００３３】
そして、この構成を採るときに、本発明のキャッシュ制御装置では、各スレッドの発行するアクセス要求の頻度を測定して、その測定結果に基づいて、各スレッドに割り付けるポート部分を決定する。【００３４】
これにより、アクセス要求の頻度の大きなスレッドに対してエントリ数を多く割り付けることができるようになることで、ポート手段を効率的に使用することができるようになる。【００３５】
そして、この構成を採るときに、本発明のキャッシュ制御装置では、１つのスレッドのみが動作する動作モードにあるのかを検出して、１つのスレッドのみが動作する動作モードにあることを検出する場合に、そのスレッドに対して、ポート手段の持つ全てのポート部分を割り付けることを決定する。【００３６】
これにより、１つのスレッドのみが動作する動作モードにある場合には、そのスレッドに対して全てのエントリを割り付けることができるようになることで、ポート手段を効率的に使用することができるようになる。
【発明の効果】
【００３７】
以上説明したように、本発明によれば、ＳＭＴ方式のプロセッサにおいて、キャッシュアクセス処理に必要となる資源を増加させることなく、その資源を効率的に利用してキャッシュアクセス処理を実行できるようになる。【００３８】
そして、本発明によれば、資源を効率的に利用してキャッシュアクセス処理を実行できるようになるので、スレッドのデータ処理効率を高めることができるようになる。
【図面の簡単な説明】
【００３９】
【図１】本実施例の適用されるＣＰＵの構成図である。
【図２】本実施例を具備する一次キャッシュ制御部の一実施例である。
【図３】スレッド選択信号制御回路の構成図である。
【図４】スレッド選択信号制御回路に入力されるスレッド処理完了報告の説明図である。
【図５】スレッド内プライオリティ制御回路の実行するフローチャートである。
【図６】スレッド内プライオリティ制御回路の実行するフローチャートである。
【図７】スレッド間プライオリティ制御回路の実行するフローチャートである。
【図８】負荷監視回路の説明図である。
【図９】負荷監視回路を備える場合のフェッチ・ポートの使用状態の説明図である。
【図１０】スレッド・モード検出回路の説明図である。
【図１１】スレッド・モード検出回路を備える場合のフェッチ・ポートの使用状態の説明図である。
【図１２】シングル・スレッド方式のプロセッサで用いられているキャッシュ制御の構成図である。
【図１３】シングル・スレッド方式のプロセッサで用いられているフェッチ・ポートのエントリ選択の優先順位制御のフローチャートである。
【符号の説明】
【００４０】
１    ＣＰＵ
２    システム制御バス
１０  命令・演算制御部
２０  一次キャッシュ制御部
２１  キャッシュＲＡＭ
２２  フェッチ・ポート
２３  ＴＯＱ制御回路
２４  ＦＰ分割形態設定回路
２５  スレッド内プライオリティ制御回路
２６  スレッド選択信号制御回路
２７  スレッド間プライオリティ制御回路
２８  負荷監視回路
２９  スレッド・モード検出回路
３０  二次キャッシュ制御部
３１  キャッシュＲＡＭ
【発明を実施するための最良の形態】
【００４１】
以下、実施の形態に従って本実施例を詳細に説明する。【００４２】
図１に、本実施例の適用されるＣＰＵ１の構成を図示する。【００４３】
本実施例の適用されるＣＰＵ１は、命令の取り出し要求や演算データの反映要求を発行する命令・演算制御部１０と、高速・小容量のキャッシュＲＡＭ２１を有して、命令・演算制御部１０の発行するアクセス要求を受け取り、そのアクセス要求のデータがキャッシュＲＡＭ２１に格納されている場合には、そのデータを命令・演算制御部１０に返すという処理を実行する一次キャッシュ制御部２０と、低速・大容量のキャッシュＲＡＭ３１を有して、命令・演算制御部１０の発行するアクセス要求のデータがキャッシュＲＡＭ３１に格納されている場合には、そのデータを命令・演算制御部１０に返すとともにキャッシュＲＡＭ２１に登録し、キャッシュＲＡＭ３１に格納されていない場合には、システム制御バス２を介して図示しないメモリにデータの転送を要求するという処理を実行する二次キャッシュ制御部３０とを備える。【００４４】
図２に、本実施例を具備する一次キャッシュ制御部２０の一実施例を図示する。【００４５】
ここで、本実施例の一次キャッシュ制御部２０では、スレッド０とスレッド１という２つのスレッドが動作するＳＭＴ方式のプロセッサに実装されることを想定しているとともに、１６個のエントリを持つフェッチ・ポートを用いることを想定している。【００４６】
本実施例の一次キャッシュ制御部２０は、図２に示すように、キャッシュＲＡＭ２１と、フェッチ・ポート２２と、ＴＯＱ制御回路２３と、ＦＰ分割形態設定回路２４と、スレッド内プライオリティ制御回路２５-0と、スレッド内プライオリティ制御回路２５-1と、スレッド選択信号制御回路２６と、スレッド間プライオリティ制御回路２７とを備える。【００４７】
フェッチ・ポート２２は、複数のエントリを有し、ＦＰ分割形態設定回路２４の設定する分割形態に従って、ＴＯＱ制御回路２３によりそれらのエントリが２つに分割されて使用されるものであり、その一方のエントリ部分にスレッド０の発行したアクセス要求を保持するとともに、もう一方のエントリ部分にスレッド１の発行したアクセス要求を保持する。【００４８】
例えば、フェッチ・ポート２２が１６個のエントリ（ＦＰ＃０〜ＦＰ＃１５）を持つ場合にあって、ＦＰ分割形態設定回路２４が１６個のエントリをＦＰ＃０〜ＦＰ＃７とＦＰ＃８〜ＦＰ＃１５という２つに分割する場合には、スレッド０の発行するアクセス要求はプログラムの順番に沿って順にＦＰ＃０〜ＦＰ＃７に割り当てられて、その８個のエントリは循環して使用され、そして、スレッド１の発行するアクセス要求はプログラムの順番に沿って順にＦＰ＃８〜ＦＰ＃１５に割り当てられて、その８個のエントリは循環して使用される。【００４９】
ここで、フェッチ・ポート２２の各エントリは、要求されたキャッシュアクセス処理が完了するまでアクセス要求を保持し、要求されたキャッシュアクセス処理が完了した時点でアクセス要求を開放する。【００５０】
ＴＯＱ制御回路２３は、スレッド０とスレッド１とに共通する形態で備えられて、ＦＰ分割形態設定回路２４の設定する分割形態に従ってフェッチ・ポート２２のエントリを２つに分割して使用することを制御するものであり、スレッド０の発行したアクセス要求の内の処理が完了していない最も古いアクセス要求を保持するフェッチ・ポート２２のエントリ番号をＦＰ−ＴＯＱ−ＴＨ０で指し示すとともに、スレッド１の発行したアクセス要求の内の処理が完了していない最も古いアクセス要求を保持するフェッチ・ポート２２のエントリ番号をＦＰ−ＴＯＱ−ＴＨ１で指し示す。【００５１】
ＦＰ分割形態設定回路２４は、例えば動作の開始に入る前に、スレッド０，１の発行するアクセス要求の負荷の割合（アクセス要求の頻度の割合）に応じてフェッチ・ポート２２の分割形態を決定して、ＴＯＱ制御回路２３に通知する。例えば、フェッチ・ポート２２のエントリをＦＰ＃０〜ＦＰ＃７とＦＰ＃８〜ＦＰ＃１５という２つに分割するということを決定して、ＴＯＱ制御回路２３に通知するのである。【００５２】
スレッド内プライオリティ制御回路２５-0は、スレッド０に対応付けて設けられて、スレッド０の要求するキャッシュアクセス処理のためにフェッチ・ポート２２のエントリを選択して、そのエントリからアクセス要求を取り出す。【００５３】
スレッド内プライオリティ制御回路２５-1は、スレッド１に対応付けて設けられて、スレッド１の要求するキャッシュアクセス処理のためにフェッチ・ポート２２のエントリを選択して、そのエントリからアクセス要求を取り出す。【００５４】
スレッド選択信号制御回路２６は、スレッド０を優先するときには“０”を表示し、スレッド１を優先するときには“１”を表示するスレッド選択信号（thread-select)を生成する。【００５５】
スレッド間プライオリティ制御回路２７は、スレッド間で優先順位を決定しなければならないときに、スレッド選択信号制御回路２６の生成するスレッド選択信号に従って、スレッド内プライオリティ制御回路２５-0の出力するアクセス要求を選択するのか、スレッド内プライオリティ制御回路２５-1の出力するアクセス要求を選択して、その選択したアクセス要求に従ってキャッシュＲＡＭ２１を索引する。【００５６】
図３に、スレッド選択信号制御回路２６の構成例を図示する。【００５７】
スレッド選択信号制御回路２６は、図３に示すように、スレッド選択信号を保持して出力するラッチ回路２６０と、２つのＡＮＤゲートと１つのＯＲゲートとで構成されて、ラッチ回路２６０が“０”を出力するときにあって、スレッド０の処理完了報告（“１”という値を持つ）が通知されるときに“１”を出力し、ラッチ回路２６０が“１”を出力するときにあって、スレッド１の処理完了報告（“１”という値を持つ）が通知されるときに“０”を出力する第１の論理回路２６１と、ＥＯＲゲートで構成されて、ラッチ回路２６０の出力信号と第１の論理回路２６１の出力信号との排他的論理和値を算出してラッチ回路２６０に与える第２の論理回路２６２とを備える。【００５８】
この構成に従って、スレッド選択信号制御回路２６は、スレッド０の処理が終了するときに、スレッド選択信号の指すスレッドをスレッド０からスレッド１に切り替え、スレッド１の処理が終了するときに、スレッド選択信号の指すスレッドをスレッド１からスレッド０に切り替えるように制御し、これにより、スレッド間の競合による優先順位決定時に、いずれかのスレッドのキャッシュアクセス処理が負け続けてしまうことを防ぐように制御する。【００５９】
ここで、図４に示すように、スレッド選択信号制御回路２６には、フェッチ・ポート２２から命令・演算制御部１０に通知されるスレッド０の処理完了報告が入力されるとともに、フェッチ・ポート２２から命令・演算制御部１０に通知されるスレッド１の処理完了報告が入力されることになる。【００６０】
スレッド選択信号制御回路２６の生成するスレッド選択信号は、スレッド間でアクセス要求処理や資源獲得を同時に行うという競合が発生したときに、処理対象のスレッドを決定するための信号である。この例では、フェッチ・ポート２２に割り当てられたメモリアクセスの処理の完了信号、つまりはフェッチ・ポート２２のエントリの開放信号を用いて制御する。例えばロード命令であれば、対象データの命令・演算制御部１０への転送をもって処理完了とし、ストア命令であれば、順序制御が保証されたことをもって処理完了とするのである。【００６１】
図５に、スレッド内プライオリティ制御回路２５-0の実行する処理をフローチャートの形で図示し、図６に、スレッド内プライオリティ制御回路２５-1の実行する処理をフローチャートの形で図示し、図７に、スレッド間プライオリティ制御回路２７の実行する処理をフローチャートの形で図示する。【００６２】
次に、これらのフローチャートに従って、図２のように構成される一次キャッシュ制御部２０の実行する処理について詳細に説明する。【００６３】
スレッド内プライオリティ制御回路２５-0は、フェッチ・ポート２２に保持されるスレッド０の発行したアクセス要求の優先制御処理を開始すると、図５のフローチャートに示すように、先ず最初に、ステップＳ１００で、スレッド０に係るフェッチ・ポート２２のポート部分の全てのエントリ状態を確認する。【００６４】
続いて、ステップＳ１０１で、この確認処理により、まだ一度もキャッシュアクセスを行っていないエントリ、または、キャッシュミスやデータの順序性保証等のためにフェッチ・ポート２２で待機させていたアクセス要求に対する再処理が指示されたエントリが１つ以上存在するのかを判断する。【００６５】
このステップＳ１０１の判断処理で、該当するエントリが１つ以上存在することを判断するときには、ステップＳ１０２に進んで、それらのエントリの中で、ＴＯＱ制御回路２３の出力するＦＰ−ＴＯＱ−ＴＨ０の指すエントリに最も近いエントリを選択し、続くステップＳ１０３で、スレッド０についての条件１という変数に“１”を設定して、優先制御処理を終了する。【００６６】
一方、ステップＳ１０１の判断処理で、該当するエントリが１つ以上存在しないことを判断するときには、ステップＳ１０４に進んで、有効なエントリ（アクセス要求が割り当てられているエントリ）が１つ以上存在するのかを判断する。【００６７】
このステップＳ１０４の判断処理で、該当するエントリが１つ以上存在することを判断するときには、ステップＳ１０５に進んで、それらのエントリの中で、ＴＯＱ制御回路２３の出力するＦＰ−ＴＯＱ−ＴＨ０の指すエントリに最も近いエントリを選択し、続くステップＳ１０６で、スレッド０についての条件２という変数に“１”を設定して、優先制御処理を終了する。【００６８】
一方、ステップＳ１０４の判断処理で、有効なエントリが１つ以上存在しないことを判断するときには、ステップＳ１０７に進んで、何も選択しないようにし、続くステップＳ１０８で、スレッド０についての条件１という変数に“０”を設定するとともに、スレッド０についての条件２という変数に“０”を設定して、優先制御処理を終了する。【００６９】
このようにして、スレッド内プライオリティ制御回路２５-0は、フェッチ・ポート２２に保持されるスレッド０の発行したアクセス要求を処理対象として、まだ一度もキャッシュアクセスを行っていないエントリ、または、キャッシュミスやデータの順序性保証等のためにフェッチ・ポート２２で待機させていたアクセス要求に対する再処理が指示されたエントリが１つ以上存在する場合には、その中でＦＰ−ＴＯＱ−ＴＨ０の指すエントリに最も近いエントリを優先して選択し、そして、この優先順位の条件に当てはまらないものの、アクセス要求が割り当てられている場合、つまり、有効なエントリが１つ以上存在する場合には、その中でＦＰ−ＴＯＱ−ＴＨ０の指すエントリに最も近いエントリを優先して選択するのである。【００７０】
一方、スレッド内プライオリティ制御回路２５-1は、フェッチ・ポート２２に保持されるスレッド１の発行したアクセス要求の優先制御処理を開始すると、図６のフローチャートに示すように、先ず最初に、ステップＳ２００で、スレッド１に係るフェッチ・ポート２２のポート部分の全てのエントリ状態を確認する。【００７１】
続いて、ステップＳ２０１で、この確認処理により、まだ一度もキャッシュアクセスを行っていないエントリ、または、キャッシュミスやデータの順序性保証等のためにフェッチ・ポート２２で待機させていたアクセス要求に対する再処理が指示されたエントリが１つ以上存在するのかを判断する。【００７２】
このステップＳ２０１の判断処理で、該当するエントリが１つ以上存在することを判断するときには、ステップＳ２０２に進んで、それらのエントリの中で、ＴＯＱ制御回路２３の出力するＦＰ−ＴＯＱ−ＴＨ１の指すエントリに最も近いエントリを選択し、続くステップＳ２０３で、スレッド１についての条件１という変数に“１”を設定して、優先制御処理を終了する。【００７３】
一方、ステップＳ２０１の判断処理で、該当するエントリが１つ以上存在しないことを判断するときには、ステップＳ２０４に進んで、有効なエントリ（アクセス要求が割り当てられているエントリ）が１つ以上存在するのかを判断する。【００７４】
このステップＳ２０４の判断処理で、該当するエントリが１つ以上存在することを判断するときには、ステップＳ２０５に進んで、それらのエントリの中で、ＴＯＱ制御回路２３の出力するＦＰ−ＴＯＱ−ＴＨ１の指すエントリに最も近いエントリを選択し、続くステップＳ２０６で、スレッド１についての条件２という変数に“１”を設定して、優先制御処理を終了する。【００７５】
一方、ステップＳ２０４の判断処理で、有効なエントリが１つ以上存在しないことを判断するときには、ステップＳ２０７に進んで、何も選択しないようにし、続くステップＳ２０８で、スレッド１についての条件１という変数に“０”を設定するとともに、スレッド１についての条件２という変数に“０”を設定して、優先制御処理を終了する。【００７６】
このようにして、スレッド内プライオリティ制御回路２５-1は、フェッチ・ポート２２に保持されるスレッド１の発行したアクセス要求を処理対象として、まだ一度もキャッシュアクセスを行っていないエントリ、または、キャッシュミスやデータの順序性保証等のためにフェッチ・ポート２２で待機させていたアクセス要求に対する再処理が指示されたエントリが１つ以上存在する場合には、その中でＦＰ−ＴＯＱ−ＴＨ１の指すエントリに最も近いエントリを優先して選択し、そして、この優先順位の条件に当てはまらないものの、アクセス要求が割り当てられている場合、つまり、有効なエントリが１つ以上存在する場合には、その中でＦＰ−ＴＯＱ−ＴＨ１の指すエントリに最も近いエントリを優先して選択するのである。【００７７】
次に、スレッド間プライオリティ制御回路２７の実行する処理について説明する。【００７８】
スレッド間プライオリティ制御回路２７は、スレッド内プライオリティ制御回路２５-0,1が優先制御処理を終了することでスレッド間の優先制御処理を開始すると、図７のフローチャートに示すように、先ず最初に、ステップＳ３００で、スレッド０についての条件１という変数に“１”が設定され、かつ、スレッド１についての条件１という変数に“１”が設定されているのかを判断する。【００７９】
このステップＳ３００の判断処理で、スレッド０についての条件１という変数に“１”が設定され、かつ、スレッド１についての条件１という変数に“１”が設定されていることを判断するときには、ステップＳ３０１に進んで、スレッド選択信号制御回路２６の生成するスレッド選択信号が“０”を表示しているのか否かを判断して、スレッド選択信号が“０”を表示していることを判断するときには、ステップＳ３０２に進んで、スレッド内プライオリティ制御回路２５-0の出力するエントリを選択することで、スレッド０のエントリを選択して、スレッド間の優先制御処理を終了する。【００８０】
一方、ステップＳ３０１の判断処理で、スレッド選択信号が“０”ではなくて“１”を表示していることを判断するときには、ステップＳ３０３に進んで、スレッド内プライオリティ制御回路２５-1の出力するエントリを選択することで、スレッド１のエントリを選択して、スレッド間の優先制御処理を終了する。【００８１】
一方、ステップＳ３００の判断処理で、スレッド０についての条件１という変数に“１”が設定されているという条件と、スレッド１についての条件１という変数に“１”が設定されているという条件の２つが同時に成立しないことを判断するときには、ステップＳ３０４に進んで、その２つの条件のいずれか一方が成立するのか否かを判断する。【００８２】
このステップＳ３０４の判断処理で、スレッド０についての条件１という変数に“１”が設定されているという条件と、スレッド１についての条件１という変数に“１”が設定されているという条件の内のいずれか一方が成立することを判断するときには、ステップＳ３０５に進んで、その条件１という変数に“１”が設定されている方のスレッド内プライオリティ制御回路２５-0,1の出力するエントリを選択することで、スレッド０あるいはスレッド１のエントリを選択して、スレッド間の優先制御処理を終了する。【００８３】
一方、ステップＳ３０４の判断処理で、スレッド０についての条件１という変数に“１”が設定されているという条件と、スレッド１についての条件１という変数に“１”が設定されているという条件のいずれもが成立しないことを判断するときには、ステップＳ３０６に進んで、スレッド０についての条件２という変数に“１”が設定され、かつ、スレッド１についての条件２という変数に“１”が設定されているのかを判断する。【００８４】
このステップＳ３０６の判断処理で、スレッド０についての条件２という変数に“１”が設定され、かつ、スレッド１についての条件２という変数に“１”が設定されていることを判断するときには、ステップＳ３０７に進んで、スレッド選択信号制御回路２６の生成するスレッド選択信号が“０”を表示しているのか否かを判断して、スレッド選択信号が“０”を表示していることを判断するときには、ステップＳ３０８に進んで、スレッド内プライオリティ制御回路２５-0の出力するエントリを選択することで、スレッド０のエントリを選択して、スレッド間の優先制御処理を終了する。【００８５】
一方、ステップＳ３０７の判断処理で、スレッド選択信号が“０”ではなくて“１”を表示していることを判断するときには、ステップＳ３０９に進んで、スレッド内プライオリティ制御回路２５-1の出力するエントリを選択することで、スレッド１のエントリを選択して、スレッド間の優先制御処理を終了する。【００８６】
一方、ステップＳ３０６の判断処理で、スレッド０についての条件２という変数に“１”が設定されているという条件と、スレッド１についての条件２という変数に“１”が設定されているという条件の２つが同時に成立しないことを判断するときには、ステップＳ３１０に進んで、その２つの条件のいずれか一方が成立するのか否かを判断する。【００８７】
このステップＳ３１０の判断処理で、スレッド０についての条件２という変数に“１”が設定されているという条件と、スレッド１についての条件２という変数に“１”が設定されているという条件の内のいずれか一方が成立することを判断するときには、ステップＳ３１１に進んで、その条件２という変数に“１”が設定されている方のスレッド内プライオリティ制御回路２５-0,1の出力するエントリを選択することで、スレッド０あるいはスレッド１のエントリを選択して、スレッド間の優先制御処理を終了する。【００８８】
一方、ステップＳ３１０の判断処理で、スレッド０についての条件２という変数に“１”が設定されているという条件と、スレッド１についての条件２という変数に“１”が設定されているという条件のいずれもが成立しないことを判断するときには、ステップＳ３１２に進んで、何も選択しないようにして、スレッド間の優先制御処理を終了する。【００８９】
このようにして、図２のように構成される本実施例の一次キャッシュ制御部２０では、ＳＭＴ方式のプロセッサで用いられるときに、スレッド０，１毎にフェッチ・ポート２２を用意するのではなくて、例えば１６個のエントリを持つ１つのフェッチ・ポート２２を用意して、２つのスレッドのそれぞれに対して８個のエントリを割り付けたり、一方のスレッドに対して１０個のエントリを割り付けるとともに、他方のスレッドに対して６個のエントリを割り付けるというように、フェッチ・ポート２２をスレッド構成に合わせて分割して使用するように制御するのである。【００９０】
この構成に従って、本実施例によれば、ＳＭＴ方式のプロセッサにおけるキャッシュアクセス処理を少ない資源で実行できるようになる。【００９１】
図２のように構成される一次キャッシュ制御部２０では、ＦＰ分割形態設定回路２４は、例えば動作の開始に入る前に、スレッド０，１の発行するアクセス要求の負荷の割合（アクセス要求の頻度の割合）に応じてフェッチ・ポート２２の分割形態を決定して、ＴＯＱ制御回路２３に通知するようにしている。【００９２】
この構成を採る場合には、フェッチ・ポート２２の分割形態は一度決定されると、それ以降変更されることはない。【００９３】
しかしながら、スレッド０，１の発行するアクセス要求の負荷の割合がデータ処理の進行に伴って時間経過とともに変化する場合には、各スレッドの使用できる最大エントリ数を可変にすべく、フェッチ・ポート２２の分割形態をそれに合わせて動的に変更することが好ましい。【００９４】
これを実現するためには、図８に示すように、スレッド０の発行するアクセス要求の負荷とスレッド１の発行するアクセス要求の負荷とを監視する負荷監視回路２８を備えるようにして、この負荷監視回路２８を使って、例えば、所定の時間Ｔを単位にして２つのスレッド０，１のアクセス要求の負荷を連続的に測定して、それに基づいて、次の時間Ｔにおけるフェッチ・ポート２２の分割形態を決定して、ＴＯＱ制御回路２３に通知するようにする。【００９５】
この構成を採ると、図９に示すように、アクセス要求の負荷の大きな方のスレッド（この図の例ではスレッド０）に対して、より多くのエントリが割り付けられるようになるので、フェッチ・ポート２２を効率的に使用することができるようになる。【００９６】
例えば、スレッド０とスレッド１とでアクセス要求の負荷の割合が３：１である場合には、スレッド０のアクセス要求をＦＰ＃０〜ＦＰ＃１１の合計１２エントリに割り当て、スレッド１のアクセス要求をＦＰ＃１２〜ＦＰ＃１５の合計４エントリに割り当てるようにし、これにより、負荷の軽いスレッドで使いきれていないエントリを負荷の重いスレッドで使用することができるようになるので、フェッチ・ポート２２のエントリの使用効率を高めることができるのである。【００９７】
また、図２では説明しなかったが、ＳＭＴ方式のプロセッサにおいて、単一のスレッドのみが動作することがある。このような場合には、命令・演算制御部１０は単一スレッドモード信号（single thread mode信号) を送出する。【００９８】
これから、図１０に示すように、単一スレッドモード信号の送出を検出するスレッド・モード検出回路２９を備えるようにして、このスレッド・モード検出回路２９を使って、命令・演算制御部１０から単一スレッドモード信号が送出されていることを検出する場合には、フェッチ・ポート２２を分割しないことを決定して、ＴＯＱ制御回路２３に通知するようにする。【００９９】
この構成を採ると、図１１に示すように、単一のスレッドのみが動作する場合には、フェッチ・ポート２２の全てのエントリを１つのスレッドが使用できるようになるので、フェッチ・ポート２２のエントリの使用効率を高めることができるようになる。【０１００】
図示実施例に従って本キャッシュ制御装置及び制御方法を説明したが、本キャッシュ制御装置及び制御方法はこれに限定されるものではない。例えば、実施例では、２つのスレッドが動作するＳＭＴ方式のプロセッサに実装されることを想定したが、３つ以上のスレッドが動作する場合にもそのまま適用できるものである。
【産業上の利用可能性】
【０１０１】
本発明は、ＳＭＴ方式のプロセッサにおけるキャッシュ制御に適用できるものであり、本発明を適用することで、ＳＭＴ方式のプロセッサにおいて、キャッシュアクセス処理に必要となる資源を増加させることなく、その資源を効率的に利用してキャッシュアクセス処理を実行できるようになる。
【図１】
2008155822.tif 000003
【図２】
2008155822.tif 000004
【図３】
2008155822.tif 000005
【図４】
2008155822.tif 000006
【図５】
2008155822.tif 000007
【図６】
2008155822.tif 000008
【図７】
2008155822.tif 000009
【図８】
2008155822.tif 000010
【図９】
2008155822.tif 000011
【図１０】
2008155822.tif 000012
【図１１】
2008155822.tif 000013
【図１２】
2008155822.tif 000014
【図１３】
2008155822.tif 000015
【国際調査報告】
2008155822.tif 000016
2008155822.tif 000017
2008155822.tif 000018