以下に添付図面を参照し、本発明の演算処理装置および演算処理装置の制御方法にかかる一実施の形態を詳細に説明する。以下の一実施の形態では、複数のCPUコアを有するCPU(以下、マルチコアプロセッサと呼ぶ)が複数協働して処理をおこなう演算処理装置および演算処理装置の制御方法を示す。なお、以下の一実施の形態にかかる演算処理装置が搭載される装置を情報処理装置と呼ぶこととする。
先ず、従来のマルチコアプロセッサの構成について説明する。図1は、従来のマルチコアプロセッサの構成を示すブロック図である。以下、マルチコアプロセッサを、単に「CPU」と呼ぶ。同図に示すように、従来のCPU100は、複数のCPUコア部101と、2次共有キャッシュである共有L2キャッシュ部102と、システムI/F(インターフェース)部103と、ロードデータバッファ部104と、ストアデータバッファ部105と、優先制御部D106とを有する。なお、複数のCPUコア部101は、すべて同一の構成であるので、1つに代表させて説明をおこなう。
情報処理装置内において、CPU100は、それぞれ個別のSC(System Controller)200と接続されており、SC200は、1つのMAC(Memory Access Controller Inline Memory Module、主記憶制御装置)300と接続されている。MAC300は、主記憶装置であるDIMM400へのメモリアクセスを制御する。
CPUコア部101は、CPUコア部101が有する、後述の命令を保持する1次命令キャッシュであるL1命令キャッシュおよびデータを保持する1次データキャッシュであるL1データキャッシュ101e(以下、これらをL1キャッシュと総称する)へのアクセスを制御するMMU(Memory Management Unit)101aと、CPUの命令セット(以下、命令と呼ぶ)を記憶するL1命令キャッシュ101bと、L1命令キャッシュ101bからフェッチされた命令をパイプライン処理する命令フェッチパイプライン処理部101cと、データをキャッシュするL1データキャッシュ101eと、L1データキャッシュ101eとの間でデータのロード/ストアを制御するロード/ストアパイプライン処理部101fと、後述の演算器101hでおこなわれる演算を制御する演算実行パイプライン処理部101gと、データ演算をおこなう演算器101hと、DMのL1キャッシュミスが発生した場合に共有L2キャッシュ部102に発行するDMをエントリに登録するL1−LB(Load Buffer)101iと、PFのL1キャッシュミスが発生した場合に共有L2キャッシュ部102に発行するPFをエントリに登録するL2−PFQ(Pre Fetch Queue)101jと、L1キャッシュから共有L2キャッシュ部102または後述のDIMM400へストアする命令またはデータをエントリに登録するL1−SB(Store Buffer)101hとを有する。
共有L2キャッシュ部102は、CPUコア部101ごとに対応して設けられる、L1−LB101iからのDMを受け付けてエントリする複数のMIPORT(Move In Port)102aと、同様にCPUコア部101ごとに対応して設けられる、L2−PFQ101jからのPFを受け付けてエントリする複数のPFPORT(Pre Fetch Port)102bと、複数のMIPORT102aから優先制御により一のエントリを選択して要求を出力する優先制御部A102cと、複数のPFPORT102bから優先制御により一のエントリを選択して要求を出力する優先制御部B102dと、優先制御部A102c、優先制御部B102dおよび後述のL2−LB(Load Buffer)102hから出力される要求を優先制御により調停して、一の要求を出力する優先制御部C102eと、優先制御部C102eから出力された要求をパイプライン処理するL2パイプライン処理部102fと、後述のL2キャッシュ102iに記憶されているデータのタグを記憶するL2タグ記憶部102gと、L2パイプライン処理部102fによるL2タグ記憶部102gの検索によって、要求が必要とするデータが後述のL2キャッシュ102iにない場合(以下、L2キャッシュミスと呼ぶ)、DIMM400へのデータ要求をエントリに登録するL2−LB(Load Buffer)102hと、データをキャッシュするL2キャッシュ102iとを有する。
具体的には、L1命令キャッシュ101bに対して命令フェッチがミスした場合、あるいはL1データキャッシュ101eに対してデータ操作命令(データロード、データストアなど)がミスした場合などに、L2キャッシュ102iに対するDMが発生し、MIPORT102aへその要求が発行される。
また、PFは、ソフトウエアの要求に基づくソフトウエアプリフェッチ、分岐予測に基づく命令フェッチの予測、あるいはデータにアクセスするアドレスの規則性などに基づいて、PFPORT102bへ、ハードウェアで自動的に発行される。このようにして、CPU100が処理に必要とするデータを先読みすることによって、CPU100のスループットを高めている。
DMを受け付けたMIPORT102aおよびPFを受け付けたPFPORT102bは、パイプライン処理部102fへパイプライン処理の要求を発行する。優先制御部A102〜優先制御部C102eは、CPUコア部101ごとにLRU(Least Recently Used)などのアルゴリズムに従って要求を選択した後、要求種別のプライオリティを固定的な優先度で選択する。例えば、L2−LB102hからの要求、MIPORT102aからの要求、PFPORT102bからの要求の順序の優先度をとる。これによって、パイプライン処理後の要求の優先度を上げることで、デッドロックやライブロックを防止することができるからである。優先権を確保した要求は、L2パイプライン処理部102fでパイプライン処理される。
L2パイプライン処理部102fでは、要求に紐付けられるタグを読み出し、L2タグ記憶部102gを検索した結果や、L2−LB102hにエントリされる要求が指し示すデータとのアドレスマッチングの結果に基づいて、処理内容を決定する。何らかの理由でパイプライン処理が完了できない場合は、abt(abort、処理中断)として、そのパイプライン処理を無効とする決定を行う。パイプライン処理が正常に完了できた場合は、cmp(complete、正常終了)とする。
パイプライン処理後、必要に応じてL2タグ記憶部102gに記憶されるタグの更新を行い、パイプライン処理の結果(abt又はcmp)がL2−LB102h、MIPORT102aおよびPFPORT102bへと通知される。パイプライン処理部102fから、DMやPFのL2キャッシュミスにより、L2−LB102hにシステムへの要求が必要であることが通知されると、L2−LB102hはシステムI/F部103を介して、CPUごとに設けられるSC200に対してデータ要求(sc_request、以下、sc_reqと呼ぶ)を発行する。
sc_reqを受信したSC200は、システム上の全てのCPU100が記憶するタグのコピーを有している。SC200は、タグのコピーを検索した結果に応じてsc_reqに対する処理を決定し、sc_reqに対するsn_res応答(スヌープ応答、snoop response)をL2−LB102hに応答する。
なお、キャッシュへのデータ転送単位であるキャッシュラインが256Byteであり、キャッシュラインが4つの64Byteのサブラインで構成される場合には、sn_res応答にはsn_res_64とsn_res_256の2種類がある。sn_res_64は、sc_reqに対応する1つのサブラインについてのデータ転送をSC200が確定したことを通知する。sn_res_256はsc_reqに対応する1つのサブラインを含むキャッシュラインすべてのデータ転送をSC200が確定したことを通知する。
すなわち、sc_reqのいずれかのサブラインを、いずれかのCPU100が所持している場合には、SC200は、sn_res_64(64Byte転送)と決定する。また、sc_reqのすべてのサブラインをいずれのCPU100も所持せず、DIMM400のみ所持する場合には、SC200は、sn_res_256(256Byte転送)と決定する。
sn_res応答を受けたL2−LB102hは、必要に応じてリプレースパイプライン(L2_replace_pipeline)処理を要求する。リプレースパイプライン処理については、図10−4を参照して後述する。
SC200は、CPU100から要求されたデータ転送の準備ができると、dow(Data Out Warning)応答をCPU100におこなう。CPU100のL2−LB102hは、dow応答を受信すると、タグエントリパイプライン処理およびデータライトパイプライン処理の起動を要求する。タグエントリパイプライン処理およびデータライトパイプライン処理については、図10−5および図10−6を参照して後述する。
dow応答に対応するデータがDMに対するデータであれば、ロードデータバッファ部104を経由してデータがCPUコア部101に送信される。データライトパイプライン処理に同期して、ロードデータバッファ部104を経由して、L2キャッシュ102iにもデータが書き込まれる。一方、DMに紐付けられるタグが、L2タグ記憶部102gに記憶されている場合(以下、L2キャッシュヒットと呼ぶ)、パイプライン処理部102fによってL2キャッシュ102iからデータが読み出され、CPUコア部101へのデータ転送がロードデータバッファ部104を経由して行われる。
なお、優先制御部D106は、L2キャッシュ102iへのデータ書き込みに関し、SC200から送られてきたロードデータバッファ部104を経由するロードデータと、CPUコア部101のL1−SB101hから送られてきたストアデータバッファ部105を経由するストアデータとの間の優先制御をおこなう。
次に、共有L2プリフェッチ制御におけるPFのL2キャッシュミスに対してsn_res_256でSC200の応答がある場合およびsn_res_256でSC200の応答がある場合のPFの制御について説明する。なお、キャッシュラインは4つの64Byteのサブライン(subline0〜3)を有する256Byteである。また、以下、PFのパイプライン処理をPFパイプライン処理と呼ぶ。
最初に、図2−1を参照する。図2−1は、共有L2プリフェッチ制御におけるPFのL2キャッシュミスに対してsn_res_256でSC200の応答がある場合のタイミングチャートである。先ず、CPUコア部101は、PFを、対応する共有L2キャッシュ部102のPFPORT102bに出力する(pf_req(4subline) from Core to pfp entry0、ステップS101)。なお、1回の要求で4サブライン分が出力される場合もあるし、4回に分かれてサブラインが出力される場合もある。
PFを受けたPFPORT102bは、subline0〜3に対応する有効フラグ(sub_valid[0]〜sub_valid[3])をすべてオンにする。pfp_entry0 life timeは、そのPFによってPFPORT102bのentry0が占有され開放されるまでの期間を表す。その間、subline0〜3の少なくとも1の有効フラグがオンになっている。
続いて、PFを受けたPFPORT102bは、subline0についてパイプライン処理部102fへプライオリティ要求を出す。パイプライン処理部102fにおいてプライオリティが確保されると、pf_pipeline(subline0)で示されるPFパイプライン処理がおこなわれる(ステップS102)。PFパイプライン処理は、10CPUCycle程度である。
PFパイプライン処理中に、L2タグ記憶部102gを検索した結果、PFに紐付けられるタグに関して256Byteのキャッシュラインおよび64ByteのサブラインいずれもL2キャッシュミスであることが判明すると、PFパイプライン処理後、L2−LB102hのエントリが確保される。そして、subline0のPFパイプライン処理が完了されたため、PFPORT102bのsubline0の有効フラグ(sub_valid[0])がオフにされる。
さらに、L2−LB102hから、システムに対するデータ要求であるsc_reqがSC200に発行される(ステップS103)。subline0のPFパイプライン処理が完了したので、次にPFPORT102bは、subline1についてパイプライン処理部102fへプライオリティ要求を出す。プライオリティが確保されると、subline1のPFパイプライン処理がおこなわれる(ステップS104)。
PFパイプライン処理中に、L2タグ記憶部102gを検索した結果、PFに紐付けられるタグに関して256Byteのキャッシュラインおよび64ByteのサブラインいずれもL2キャッシュミスであることが判明し、かつL2−LB102hにおいて256Byteのキャッシュラインのアドレスマッチ(キャッシュラインのアドレスの一致)を検出する。
しかし、まだsn_resと呼ばれるSC200からのスヌープ応答が返っていない段階なので、subline1のPFパイプライン処理を完了させることができず、L2パイプライン処理部102fからPFPORT102bへabt通知が出され、PFPORT102bのsubline1に対応するエントリの有効フラグ(sub_valid[1])はオンのままとなる。
なお、sn_res応答が返ってくる前に、何度も同じPFパイプライン処理をおこなっても、abtを繰り返すだけで無駄であるので、SC200fは、PFPORT102bに対して、PFPORT102bのsubline1に対応するエントリの待ち合わせフラグ(wt_flg)をオンにする指示を、abt通知と同時に送る。ここで無駄であるという理由は、PFパイプラインにおいてabtとなる処理が繰り返されるために、他のCPUコア部101からの要求のパイプライン処理がおこなわれることが阻害されることおよび消費電力の浪費である。
SC200での処理の結果、sn_res_256(256Byteのデータ応答をおこなうことの確定を通知する信号)が、SC200からL2−LB102hに返される(ステップS105)。sc_reqからsn_res応答通知までの時間は、通常200〜400CPUcycle程度である。sn_res_256応答を契機として、L2−LB102hからPFPORT102bに対して、待ち合わせフラグ(wt_flg)をオフにする通知が出される。
sn_res_256通知をSC200から受けたL2−LB102hは、リプレースパイプライン(replace_pipeline)処理の起動を要求する。すなわち、PFは、256Byteのキャッシュラインに対してL2キャッシュミスであり、すべてのWAY(L2−LB102hに登録されているDMまたはPFのエントリ)が有効である場合、いずれかのWAYを追い出す必要がある。追い出すWAYは、最初のsubline0に対応するPFパイプライン処理時に、LRUアルゴリズムで決定される。
そして、追いされるWAYのサブラインのうち有効なサブラインに対してのみリプレースパイプライン処理がおこなわれる(ステップS106)。WAYのサブラインが4つとも有効であれば、リプレースパイプライン処理が4回実行され、逆にWAYに有効なサブラインが存在しない場合は、リプレースパイプライン処理は行われない。
待ち合わせフラグ(wt_flg)をオフにする通知を受けたPFPORT102bは、再び、subline1に対応するPFパイプライン処理を要求し、PFパイプライン処理がおこなわれる(ステップS107)。この処理の結果、256Byteのキャッシュラインおよび64ByteのサブラインいずれもL2キャッシュミスであることが判明し、かつL2−LB102hにsn_res_256応答到達済みであり、L2−LB102hにおいて、256Byteキャッシュライン単位でのアドレスマッチを検出する。
L2−LB102hにsn_res_256応答到達済みであることは、subline1に対するデータ応答も行われることを意味するので、L2−LB102hは、subline1に対応するPFパイプライン処理の完了通知(cmp)をPFPORT102bに送出し、PFPORT102bは、subline1に対応する有効フラグ(sub_valid[1])をオフにする。
同様に、subline2およびsubline3に対応するPFパイプライン処理も完了し(ステップS108、ステップS109)、PFPORT102bは、subline3に対応する有効フラグ(sub_valid[3])をオフにすると同時に、PFPORT102bの当該PFのエントリを開放する。
SC200は、sn_res_256応答と前後して、MAC300に対して該当アドレスのデータ要求を行い、データの用意ができたらCPU100に対してdow通知とともに、256Byteのデータを送出する(ステップS110)。dowのヘッダを受信すると、タグエントリパイプライン(tag_entry_pipeline)処理がL2−LB102hからL2パイプライン処理部102fに対して要求され、プライオリティが確保されると、タグエントリパイプライン処理がおこなわれる(ステップS111)。タグエントリパイプライン処理は、リプレースパイプライン処理で確保されたWAYに対して4つのサブラインまとめて1回で、L2タグ記憶部102gに、当該WAYのタグを書き込む処理である。
L2−LB102gは、dowのデータ部をSC200から受信すると、L2パイプライン処理部102fに対して、subline0〜3のデータ受信が完了した順に、リプレースパイプライン処理で確保されたWAYに対するデータライトパイプライン処理を要求し、データライトパイプライン処理がおこなわれる(ステップS112)。データライトパイプライン処理がすべて完了するとL2−LB102hのエントリが開放されることとなる。
次に、図2−2を参照する。図2−2は、共有L2プリフェッチ制御におけるL2キャッシュミスに対してsn_res_64でSC200の応答がある場合のタイミングチャートである。先ず、CPUコア部101は、PFを、対応する共有L2キャッシュ部102のPFPORT102bに出力する(pf_req(4subline) from Core to pfp entry0、ステップS121)。なお、1回の要求で4サブライン分が出力される場合もあるし、4回に分かれてサブラインが出力される場合もある。
PFを受けたPFPORT102bは、subline0〜3に対応する有効フラグ(sub_valid[0]〜sub_valid[3])をすべてオンにする。pfp_entry0 life timeは、そのPFによってPFPORT102bのentry0が占有され開放されるまでの期間を表す。その間、subline0〜3の少なくとも1の有効フラグがオンになっている。
続いて、PFを受けたPFPORT102bは、subline0についてパイプライン処理部102fへプライオリティ要求を出す。パイプライン処理部102fにおいてプライオリティを確保されると、pf_pipeline(subline0)で示されるPFパイプライン処理がおこなわれる(ステップS122)。PFパイプライン処理は、10CPUCycle程度である。
PFパイプライン処理中に、L2タグ記憶部102gを検索した結果、PFに紐付けられるタグに関して256Byteのキャッシュラインおよび64ByteのサブラインいずれもL2キャッシュミスであることが判明すると、PFパイプライン処理後、L2−LB102hのエントリが確保される。そして、subline0のPFパイプライン処理が完了されたため、PFPORT102bのsubline0の有効フラグ(sub_valid[0])がオフにされる。
さらに、L2−LB102hから、システムに対するデータ要求であるsc_reqがSC200に発行される(ステップS123)。subline0のPFパイプライン処理が完了したので、次にPFPORT102bは、subline1についてパイプライン処理部102fへプライオリティ要求を出す。プライオリティが確保されると、subline1のPFパイプライン処理がおこなわれる(ステップS104)。
PFパイプライン処理中に、L2タグ記憶部102gを検索した結果、PFに紐付けられるタグに関して256Byteのキャッシュラインおよび64ByteのサブラインいずれもL2キャッシュミスであることが判明し、かつL2−LB102hにおいて256Byteのキャッシュラインのアドレスマッチを検出する。
しかし、まだsn_resと呼ばれるSC200からの応答が返っていない段階なので、subline1のPFパイプライン処理を完了させることができず、L2パイプライン処理部102fからPFPORT102bへabt通知が出され、PFPORT102bのsubline1に対応するエントリの有効フラグ(sub_valid[1])はオンのままとなる。
SC200での処理の結果、sn_res_64(64Byteのデータ応答をおこなうことの確定を通知する信号)が、SC200からL2−LB102hに返される(ステップS125)。sc_reqからsn_res応答通知までの時間は、通常200〜400CPUcycle程度である。sn_res_64応答を契機として、L2−LB102hからの指示に基づき、PFPORT102bは、当該エントリの待ち合わせフラグ(wt_flg)をオフにする。
sn_res_64通知をSC200から受けたL2−LB102hは、リプレースパイプライン(replace_pipeline)処理の起動を要求する。すなわち、PFは、256Byteのキャッシュラインに対してL2キャッシュミスであり、すべてのWAY(L2−LB102hに登録されているDMまたはPFのエントリ)が有効である場合、いずれかのWAYを追い出す必要がある。追い出すWAYは、最初のsubline0に対応するPFパイプライン処理時に、LRUアルゴリズムで決定される。
そして、追いされるWAYのサブラインのうち有効なサブラインに対してのみリプレースパイプライン処理がおこなわれる(ステップS126)。WAYのサブラインが4つとも有効であれば、リプレースパイプライン処理が4回実行され、逆にWAYに有効なサブラインが存在しない場合は、リプレースパイプライン処理は行われない。
待ち合わせフラグ(wt_flg)をオフにする通知を受けたPFPORT102bは、再び、subline1に対応するPFパイプライン処理を要求し、PFパイプライン処理がおこなわれる(ステップS127)。この処理の結果、256Byteのキャッシュラインおよび64ByteのサブラインいずれもL2キャッシュミスであることが判明し、かつL2−LB102hにsn_res_64応答到達済みであり、L2−LB102hにおいて、256Byteキャッシュライン単位でのアドレスマッチを検出する。
ここで、同一のL2−LB102hのエントリに対して、subline1の要求がセットされ、subline1に対するsc_reqがSC200に対して送出される(ステップS128)。PFPORT102bには、subline1のPFパイプライン処理が完了したことが通知され、PFPORT102bのsubline1の有効フラグ(sub_valid[1])がオフにされる。
続いて、PFPORT102bからsubline2のPFパイプライン処理の要求が出され、subline2のPFパイプライン処理がおこなわれる(ステップS129)。同様に、subline2のPFパイプライン処理はabtし、L2−LB102hからの指示に基づき、PFPORT102bは、当該エントリの待ち合わせフラグ(wt_flg)をオンにする。
SC200からL2−LB102hに、subline2に対応するsn_res_64応答が到達すると(ステップS133)、PFPORT102bのsubline2の有効フラグ(sub_valid[2])がオフにされ、subline2に対応するPFパイプライン処理がされる(ステップS134)。subline1に対応するsn_res_64が到達済みなので、L2−LB102hの同一エントリに対して、subline2のリクエストがセットされ、subline2に対するsc_reqがSC200に対して送出される(ステップS135)。PFPORT102bには、subline2のPFパイプライン処理が完了したことが通知され、PFPORT102bのsubline2の有効フラグ(sub_valid[2])がオフにされる。
続いて、PFPORT102bからsubline3のPFパイプライン処理の要求が出され、subline3のPFパイプライン処理がおこなわれる(ステップS136)。同様に、subline3のPFパイプライン処理はabtし、L2−LB102hからの指示に基づき、PFPORT102bは、当該エントリの待ち合わせフラグ(wt_flg)をオンにする。
SC200からL2−LB102hに、subline3に対応するsn_res_64応答が到達すると(ステップS140)、PFPORT102bのsubline3の有効フラグ(sub_valid[3])がオフにされ、subline3に対応するPFパイプライン処理がされる(ステップS141)。subline1に対応するsn_res_64が到達済みなので、L2−LB102hの同一エントリに対して、subline3のリクエストがセットされ、subline2に対するsc_reqがSC200に対して送出される(ステップS142)。PFPORT102bには、subline3のPFパイプライン処理が完了したことが通知され、PFPORT102bのsubline3の有効フラグ(sub_valid[3])がオフにされる。これによって、PFPORT102bの当該エントリは開放される。
なお、SC200は、subline0〜3に対応するsc_reqへの各sn_res_64応答と前後して、MAC300に対して該当アドレスのデータ要求を行い、データの用意ができたらCPU100に対してdow通知とともに、64Byteのデータを送出する(ステップS130、ステップS137、ステップS143、ステップS147)。各dowのヘッダを受信すると、タグエントリパイプライン(tag_entry_pipeline)処理がL2−LB102hからL2パイプライン処理部102fに対して要求され、プライオリティが確保されると、タグエントリパイプライン処理がおこなわれる(ステップS131、ステップS138、ステップS144、ステップS148)。タグエントリパイプライン処理は、リプレースパイプライン処理で確保されたWAYに対して4つのサブラインまとめて1回で、L2タグ記憶部102gに、当該WAYのタグを書き込む処理である。
L2−LB102gは、各dowのデータ部をSC200から受信すると、L2パイプライン処理部102fに対して、subline0〜3のデータ受信が完了した順に、リプレースパイプライン処理で確保されたWAYに対するデータライトパイプライン処理を要求し、データライトパイプライン処理がおこなわれる(ステップS132、ステップS139、ステップS145、ステップS149)。データライトパイプライン処理がすべて完了するとL2−LB102hのエントリが開放されることとなる。
次に、従来のマルチコアプロセッサの動作について説明する。図3は、従来のマルチコアプロセッサの動作を示すタイミングチャートである。なお、同図では、すべてsn_res_256応答の場合であるとする。すなわち、図示するPF0〜PF8は、図2−1に示した処理と同一である。しかし、sn_res_256に限らず、sn_res_256またはsn_res_64のいずれかであればよい。そして、PFPORT102bのPFのエントリ数は、8つであるとする。
CPUコア部101からのPFが共有L2キャッシュ部102のPFPORT102bへ、4サブラインすべてを含むキャッシュラインのPFが9つ発行されるとする(PF0〜PF8)。PFPORT102bでは、最初の8つのPF0〜PF7ですべてのエントリ(PFPORT0〜PFPORT7)が使用状態(ビジー状態)になり、9つ目のPF8は、いずれかのエントリが開放されるまで待機しなければならない。
PFPORT0が最初に開放されるとすると、PFPORT0のPFのsubline0〜3すべてのPFのL2パイプライン処理部102fにおけるPFパイプライン処理が完了することによってPFPORT0が開放された後に、9つ目のPF8がCPUコア部101から発行されて、そのPFがPFPORT0にセットされ、PFパイプライン処理およびsc_req発行がおこなわれる。
このように、従来のマルチコアプロセッサでは、PFPORT102bのすべてのエントリがビジー状態であるとき、いずれかのエントリに登録されているPFが、PFパイプライン処理がabtまたはcmpによって開放されない限り、新たなPFをPFPORT102bに登録することができず、この待ち合わせのためにロスタイムが発生する。特に、複数のCPUコアが1つのL2キャッシュを共有するマルチコアプロセッサでは、このようなロスタイムが発生する確率が高く、データの先読みによるCPU処理速度の向上を狙ったプリフェッチの効果が低下してしまうという問題点があった。
次に、一実施の形態にかかるマルチコアプロセッサの構成について説明する。図4は、一実施の形態にかかるマルチコアプロセッサの構成を示すブロック図である。ここでは、図1に示した従来のマルチコアプロセッサとの差分についてのみ説明する。
一実施の形態にかかるマルチコアプロセッサであるCPU100aの共有L2キャッシュ部102Aは、CPUコア部101ごとに設けられるPFPORT102bとは別に、複数のCPUコア部101が共有する共有PFPORT102jをさらに有する。
共有PFPORT102jは、PFPORT102bとほぼ同一の構成をしている。異なるのは、入力インターフェースが、PFPORT102bはCPUコア部101であるのに対して、共有PFPORT102jは、L2パイプライン処理部102fの後段であることである。
PFPORT102bは、CPUコア部101からのPFで新規のエントリを確保するのに対して、共有PFPORT102jは、PFPORT102bからL2パイプライン処理部102fへ投入されたPFがabtしたのを契機にしてエントリを確保している。
また、DMとのアドレスマッチングによる重複エントリ消去操作についても、PFPORT102bがCPUコア部101からのDMとのアドレス一致があった場合に、PFPORT102bのエントリを消去するのに対し、共有PFPORT102jは、L2パイプライン処理部102fで処理され、L2−LB102hにエントリが登録されているDMとのアドレス一致があった場合に、共有PFPORT102jのエントリを消去する。
次に、一実施の形態にかかるマルチコアプロセッサの共有L2キャッシュ部の詳細な構成について説明する。図5は、一実施の形態にかかるマルチコアプロセッサの共有L2キャッシュ部の詳細な構成を示すブロック図である。同図においては、特に、一実施の形態にかかるマルチコアプロセッサの共有L2キャッシュ部102AのPFPORT102bおよび共有PFPROT102jの構成について説明する。
PFPORT102bは、PFPORT制御部107と、エントリマージ処理部108と、キャッシュラインにおける各サブラインの有効性を示すsub_valid[3]のうち少なくとも1つがオンであるエントリ(少なくとも1つのサブラインが有効であるエントリ)を抽出するORゲート109と、空きエントリ選択部110と、格納エントリ選択部111と、エントリテーブル112と、優先制御部E1113−1とを有する。PFPORT制御部107は、エントリテーブル112のエントリごとに設けられている。また、エントリテーブル112の最大エントリ数は、例えば、8である。
なお、PFPORT102bは、CPUコア部101ごとに設けられているので、例えば、n(nは自然数)個のCPUコア部101にそれぞれ対応してn個のPFPORT102bが設けられることとなり、各PFPORT102bは、優先制御部E1113−1、・・・、優先制御部En113−1をそれぞれ有することになる。優先制御部B102dは、優先制御部E1113−1、・・・、優先制御部En113−1および後述の共有PFPROT102jの優先制御部F120からの出力を入力とし、優先制御によって一のPFを優先制御部C102eへと出力する。
なお、エントリテーブル112は、所定の記憶領域に格納されるテーブルであり、「sub_valid」と、「PA」と、「PF_code」と、「PF_strong」と、「wt_flg」と、「hld_flg」とのカラムを有する。「PA」は、PFのキャッシュラインのデータが格納されている物理アドレスを示す。
「PF_code」は、PFの要求タイプを示し、PFの対象が『命令フェッチデータ』、『ロード(読み出し)データ』または『ストア(格納)アドレス(データをストアする物理アドレス)』のいずれであるかを示す。「PF_code」の優先順位の大小関係は、『命令フェッチデータ』<『ロードデータ』<『ストアアドレス』である。
また、PRPFORT102bまたは共有PRPFORT102jに存在する先行要求と後続要求とが、対象データのアドレスが一致した場合は、PFのPA[7:6]に対応するアドレスのsublineに対応するsub_validをオフし、そのsublineに対するリクエストを消去する。これによって最後のsub_validがオフされた場合は、PRPFORT102bまたは共有PRPFORT102jのエントリが開放されることになる。
なお、先行要求がPFで対象データが『ロードデータ』であり、後続要求がDMで対象データが『命令フェッチデータ』である場合、先行要求がPFで対象データが『ストアデータ』であり、後続要求がDMで対象データが『命令フェッチデータ』である場合、または、先行要求がPFで対象データが『ストアデータ』であり、後続要求がDMで対象データが『ロード命令』である場合は、PFのPA[7:6]に対応するアドレスが一致する場合でも、当該sublineに対するリクエストは消去されない。
「PF_strong」は、PFの属性を示し、「PF_strong」がオン(strong)であるときには必ず処理されるべきPFであり、「PF_strong」がオフ(weak)であるときには必ずしも処理される必要はなく、破棄(プリフェッチロスト)されることが許容されるPFであることを示すフラグである。
「wt_flg」は、当該エントリのPFが最初にPFパイプライン処理されたときにsn_resの応答がなくabtした場合にオンにされるフラグである。「wt_flg」は、以後リセットされるまで、当該エントリのPFは、L2パイプライン処理部102fへの投入が抑止される。リセット通知は、L2−LB102hから、sn_res_64またはsn_res_256を受信した契機で通知される。「wt_flg」がオンである限り、sn_resの応答以前に当該PFが無駄にPFパイプライン処理されることを防ぐ。
「hld_flg」は、あるサブラインに対応するPFがPFパイプライン処理されている間オンにされるフラグである。「hld_flg」がオンである限り、同一PFの他のサブラインがPFパイプライン処理されないように制御する。これは、連続的に同一のPFのサブラインがPFパイプライン処理されても処理のすれ違い(PFパイプライン処理の順序の逆転)が発生し、後続のサブラインのPFパイプライン処理をabtさせなければならないためである。
PFPORT制御部107は、PFPORT102b全体の制御をつかさどる制御装置であり、特に、L2パイプライン処理部102fからのPFのパイプラインの有効性を示す「PF_pipe_val」とL2パイプライン処理部102fからのPFパイプラインがabtしたPFであることを示す「PF_pipe_abt」の反転論理との論理積を取るANDゲート107aと、CPUコア部101からのDMであることを示す「DM_req_val」と後述のANDゲート107eの出力との論理積を取るANDゲート107bと、ANDゲート107aの出力とANDゲート107bの出力との論理和を取るORゲート107cと、CPUコア部101からのDMまたはPFの対象データの物理アドレス(DM/PF_req_PA)と、エントリテーブル112に格納される物理アドレス「PA」との一致性を判定するマッチング回路107dと、マッチング回路107dの出力と、エントリテーブル112に格納されるサブラインの有効性を示す「sub_valid」およびPFの種別を表す「PF_code」との論理積を取るANDゲート107eと、CPUコア部101からのPFのパイプラインの有効性を示す「PF_pipe_val」と、ANDゲート107の出力との論理積を取るANDゲート107fとを有する。
マッチング回路107dは、CPUコア部101からのPF要求(PF_req_val)を受信すると、有効なエントリ(sub_valid[3:0])のうち少なくとも1つがオンであるエントリと、256Byteのキャッシュライン単位でアドレスマッチングをおこなう。アドレスが一致するエントリがなければ、空きエントリ選択部110により選択された空きエントリに格納エントリ選択部111によってPFが登録され、アドレスが一致するエントリがあれば、エントリマージ処理部108によって一致するエントリにマージされる(具体的には、格納エントリ選択部111から「PF_req_set/merge」なる要求が入力されることによってset(登録)またはmerge(併合)される)。
PFが新規のエントリに登録される場合は、PFのPA[7:6]に対応する物理アドレスのサブラインに対応する「sub_valid」をオンにする。PA[7:6]=00、01、10、11がsubline0、subline1、subline2、subline3にそれぞれ対応する。
「PA」、「PF_code」、「PF_strong」については、CPUコア部101からのPFの際の通知に従う。「wt_flg」、「hld_flg」は初期値をオフ値とする。マージする場合は、PFのPA[7:6]に対応するアドレスのsublineに対応する「sub_valid」をオンする。
PAは変更がなく、「PF_code」、「PF_strong」については、先行するPFと後続するPFで「PF_strong」が同じであれば、「PF_code」の優先順位がより大きなものにあわせる。また、「PF_strong」が異なる場合は、「PF_strong」がオンである「PF_code」にあわせる。
また、PFPORT102bに存在する先行PFと後続PFとのアドレスが一致した場合は、エントリマージ処理部108は、PFのPA[7:6]に対応するアドレスのsublineに対応する「sub_valid」をオフし、そのsublineに対応するエントリをエントリテーブル112から消去する(具体的には、ORゲート107cからアドレスが一致したDM要求を消去する旨を示す「DM_req_mch_erase」なる信号が入力されることによって消去する)。これによって最後の「sub_valid」がオフにされたPFのエントリは、エントリテーブル112から開放されることになる。
PFパイプライン処理の最後にL2パイプライン処理部102fからPFPORT102bに、PFパイプライン処理がcmp(完了)したかabt(処理中断)したかが通知される。cmpならば、当該sublineに対応する「sub_valid」をオフにし、abtならば「sub_valid」をオンのままにする。
共有PFPORT102jは、PFPORT102bとほぼ同一の構成をしている。異なるのは、PFPORT102bがCPUコア部101からの入力を受け付けるのに対し、共有PFPORT102jへの入力は、すべてL2パイプライン処理部102fからの入力であることである。
また、PFPORT102bがCPUコア部101からのPFで新規のエントリを確保するのに対して共有PFPORT102jは、PFPORT102bからL2パイプライン処理部102fへ投入されたPFのうち、abtしたPFで新規のエントリを確保している。
DMとのアドレス一致によるエントリ消去操作についても、同様に、PFPORT102bがCPUコア部101からのDMとのアドレス一致を判定するのに対し、共有PFPORT102jは、L2−LB102hに登録されているDMとのアドレス一致を判定している。
共有PFPORT102jは、共有PFPORT制御部114と、エントリマージ処理部115と、sub_valid[3:0]のうち少なくとも1つがオンであるエントリを抽出するORゲート116と、空きエントリ選択部117と、格納エントリ選択部118と、ANDゲート119と、エントリテーブル120と、優先制御部F121とを有する。
共有PFPORT制御部114は、共有PFPORT102j全体の制御をつかさどる制御装置であり、エントリテーブル120のエントリごとに設けられている。共有PFPORT制御部114は、ANDゲート114aと、ANDゲート114bと、ORゲート114cと、マッチング回路114dと、ANDゲート114eと、ANDゲート114fとを有する。ANDゲート114a、ANDゲート114b、ORゲート114c、マッチング回路114d、ANDゲート114e、ANDゲート114fは、ANDゲート107a、ANDゲート107b、ORゲート107c、マッチング回路107d、ANDゲート107e、ANDゲート107fとほぼ同一の機能を有する。
また、エントリテーブル120の最大エントリ数は、例えば、8である。なお、共有PFPORT102jは、CPUコア部101の数に関わらず1つだけ設けられている。
共有PFPORT102jの共有PFPORT制御部114、エントリマージ処理部115、ORゲート116、空きエントリ選択部117、格納エントリ選択部118、エントリテーブル120は、PFPORT102bのPFPORT制御部107、エントリマージ処理部108、ORゲート109、空きエントリ選択部110、格納エントリ選択部111、エントリテーブル112とほぼ同一の構成および機能を有する。
異なるのは、共有PFPORT102jが、L2パイプライン処理部102fからのPFについてパイプラインの有効性を示す「PF_pipe_val」と、L2パイプライン処理部102fでabtしたPFであることを示す「PF_pipe_abt」と、L2−LB102hに登録されているDMとアドレスが一致したことを示す「PF_L2-LB_mch」と、L2パイプライン処理部102fからのPFの属性を示す「PF_strong」との論理積を取るANDゲート119を有し、このANDゲート119の出力がANDゲート114fに入力される点である。
優先制御部F121は、「wt_flg」、「hid_flg」がオフである有効なエントリのうち最も古いものからL2パイプライン処理部102fへ投入するよう制御する。優先制御部B102dは、PFPORT102bからのPFはLRUアルゴリズムで選択するのが最適である。共有PFPORT102jからのPFは、PFPORT102bからのPFよりも古いことが多いため、共有PFPORT102jからのPFを優先的に選択し、L2パイプライン処理部102fへ投入する。
なお、エントリマージ処理部108およびエントリマージ処理部115の詳細構成は、図示するように、ORゲート107cまたはORゲート114cからのアドレスが一致したDM要求を消去する旨を示す「DM_req_mch_erase」の反転入力と、後述のsub_valid[3:0]の値を保持するバッファ115cからの入力との論性積を取るANDゲート115aと、格納エントリ選択部111または格納エントリ選択部118からのFP要求をセット又はマージする旨を示す「PF_req_set/merge」と、ANDゲート115aの出力との論理和を取るORゲート115bと、ORゲート115bの出力を保持するバッファ115cとを有する。
エントリマージ処理部108およびエントリマージ処理部115の処理によって、CPUコア部101からのDMとアドレスが一致するPFのエントリがエントリテーブル112およびエントリテーブル120から消去される。また、既にエントリテーブル112およびエントリテーブル120にアドレスが一致するエントリが存在すれば、CPUコア部101またはL2パイプライン処理部102fからのPFのエントリを既存のエントリにマージすることができ、エントリテーブル112およびエントリテーブル120の効率的な資源活用を図ることができる。
次に、一実施の形態にかかるマルチコアプロセッサの動作について説明する。図6は、一実施の形態にかかるマルチコアプロセッサの動作を示すタイミングチャートである。なお、同図では、すべてsn_res_256応答の場合であるとする。すなわち、図示するPF10〜PF18は、図2−1に示した処理と同一である。しかし、sn_res_256に限らず、sn_res_256またはsn_res_64のいずれかであればよい。そして、共有PFPORT102jのPFのエントリ数は、8つであるとする。
CPUコア部101からのPFが共有L2キャッシュ部102のPFPORT102bへ、4サブラインすべてを含むキャッシュラインのPFが9つ発行されるとする(PF10〜PF18)。PFPORT102bでは、8つのPF10〜PF17ですべてのエントリ(PFPORT0〜PFPORT7)が使用状態(ビジー状態)になるが、9つ目のPFである、L2パイプライン処理部102fからのPF18は、PFPORT102bがすでにすべてのエントリを使い切っている状態(ビジー状態、busy)であるため、共有PFPROT102jで待機してL2パイプライン処理部102fへ投入される。共有PFPORT102jがビジー状態となった場合、新たに発行されるPFはPFPORT102bでそのまま待機して再投入される。
このように、一実施の形態にかかるマルチコアプロセッサでは、PFPORT102bのすべてのエントリがビジー状態であるとき、いずれかのエントリに登録されているPFが、PFパイプライン処理がabtまたはcmpによって開放されなくても、新たなPFをPFPORT102jに登録することができるため、待ち合わせのためのロスタイムの発生を回避することができる。特に、1つのCPUコア部101から集中的にPFが発行された場合であっても、PFを滞りなく処理することができる。
特に、この例で示されるようにsubline方式であり、CPU100がシステムに対するデータ要求に対して、データ転送がsubline単位で行われる(sn_res_64)か、全sublineをすべて転送するか(sn_res_256)の2通りがあり、いずれの転送方法を取るかの決定がシステム側でのスヌープ動作(キャッシュメモリの同期動作)の結果により決定されるシステムの下では、共有PFPORT102jを採用することが好適である。
これは、非subline方式であれば、最初のPFパイプライン処理においてL2−LB102hのエントリを確保すると、キャッシュラインのPFパイプライン処理は完了し、PFPORTのエントリが解放できてしまうからである。
次に、一実施の形態にかかる共有L2キャッシュ部の動作(待ち合わせフラグを解除することによって、プリフェッチ要求を共有PFPORTへ移動)について説明する。図7は、一実施の形態にかかる共有L2キャッシュ部の動作(待ち合わせフラグを解除することによって、プリフェッチ要求を共有PFPORTへ移動)を示すタイミングチャートである。
先ず、CPUコア部101は、4つのサブラインを含むPFを、対応する共有L2キャッシュ部102のPFPORT102bに出力する(pf_req(4subline) from Core to pfp entry0、ステップS151)。
PFを受けたPFPORT102bは、エントリテーブル112のエントリ0(pf_entry0)に当該PFを登録し、subline0〜3に対応するすべての有効フラグ(sub_valid[0]〜sub_valid[3])をオンにする。pfp_entry0 life timeは、そのPFによってPFPORT102bのentry0が占有され開放されるまでの期間を表す。その間、subline0〜3の少なくとも1の有効フラグがオンになっている。
続いて、PFを受けたPFPORT102bは、subline0についてパイプライン処理部102fへプライオリティ要求を出す。パイプライン処理部102fにおいてプライオリティが確保されると、pf_pipeline(subline0)で示されるPFパイプライン処理がおこなわれる(ステップS152)。
PFパイプライン処理中に、L2タグ記憶部102gを検索した結果、PFに紐付けられるタグに関して256Byteのキャッシュラインおよび64ByteのサブラインいずれもL2キャッシュミスであることが判明すると、PFパイプライン処理後、L2−LB102hのエントリが確保される。そして、subline0のPFパイプライン処理が完了されたため、PFPORT102bのsubline0の有効フラグ(sub_valid[0])がオフにされる。
さらに、L2−LB102hから、システムに対するデータ要求であるsc_reqがSC200に発行される(ステップS153)。subline0のPFパイプライン処理が完了したので、次にPFPORT102bは、subline1、subline2、subline3についてパイプライン処理部102fへプライオリティ要求を出す。プライオリティが確保されると、subline1、subline2、subline3のPFパイプライン処理がおこなわれる(ステップS154)。
しかし、まだsn_res_256がSC200から返っていない段階なので、subline1、subline2、subline3のPFパイプライン処理を完了させることができない。そこで、L2パイプライン処理部102fからPFPORT102bへ完了通知、共有PFPORT102jへPF要求セット通知が出され、共有PFPORT102jに当該PFを移動させる。
エントリテーブル120のエントリ2(pfp_share_entry2)に当該PFを登録し、subline0〜3に対応するすべての有効フラグ(sub_valid[0]〜sub_valid[3])および待ち合わせフラグ(wt_flg)をオンにする。そして、共有PFPORT102jで空いている最後のエントリ(pfp_share_entry2)にPFが登録されたため、共有PFPORT102jはビジー状態になったとする。
なお、pfp_ahare_entry0 life timeは、subline1のPFパイプライン処理がabtしてからそのPFによって共有PFPORT102jのentry0が占有され開放されるまでの期間を表す。
また、さらに、CPUコア部101は、4つのサブラインを含む新規のPFを、対応する共有L2キャッシュ部102のPFPORT102bに出力する(pf_req(4subline) from Core to pfp entry1、ステップS155)。
PFを受けたPFPORT102bは、エントリテーブル112のエントリ1(pf_entry1)に当該PFを登録し、subline0〜3に対応する有効フラグ(sub_valid[0]〜sub_valid[3])をすべてオンにする。pfp_entry1 life timeは、そのPFによってPFPORT102bのentry1が占有され開放されるまでの期間を表す。その間、subline0〜3の少なくとも1の有効フラグがオンになっている。
続いて、新規のPFを受けたPFPORT102bは、subline0についてパイプライン処理部102fへプライオリティ要求を出す。パイプライン処理部102fにおいてプライオリティが確保されると、pf_pipeline(subline0)で示されるPFパイプライン処理がおこなわれる(ステップS156)。
PFパイプライン処理中に、L2タグ記憶部102gを検索した結果、PFに紐付けられるタグに関して256Byteのキャッシュラインおよび64ByteのサブラインいずれもL2キャッシュミスであることが判明すると、PFパイプライン処理後、L2−LB102hのエントリが確保される。そして、subline0のPFパイプライン処理が完了されたため、PFPORT102bのsubline0の有効フラグ(sub_valid[0])がオフにされる。
さらに、L2−LB102hから、システムに対するデータ要求であるsc_reqがSC200に発行される(ステップS157)。subline0のPFパイプライン処理が完了したので、次にPFPORT102bは、subline1、subline2、subline3についてパイプライン処理部102fへプライオリティ要求を出す。プライオリティが確保されると、subline1、subline2、subline3のPFパイプライン処理がおこなわれる(pf_pipeline(subline1)、ステップS158)。
しかし、まだsn_res_256がSC200から返っていない段階なので、subline1、subline2、subline3のPFパイプライン処理はabtする。しかも、共有PFPORT102jは、ビジー状態であるので、新規のPFは、entry1に滞留して待ち合わせをおこなう。
エントリテーブル120のエントリ2であるpfp_share_entry2に登録されている256Byteのキャッシュラインに対するPFに対応するsn_res_256が到達すると(ステップS159)、4サブライン分のリプレースパイプライン処理(replace_pipeline(×4subline))がおこなわれる(ステップS160)。
続いて、共有PFPORT制御部114によってエントリテーブル120のエントリ0pfp_share_entry2の「wt_flg」が解除され、subline1、subline2、subline3のPFパイプライン処理が順次起動される(ステップS161、ステップS162、ステップS163)。これらのPFパイプライン処理は、L2−LB102hにおいて256ByteのアドレスマッチングおよびSC200からのsn_res_256応答済みのため、すべて完了される。
SC200は、sn_res_256応答と前後して、MAC300に対して該当アドレスのデータ要求を行い、データの用意ができたらCPU100に対してdow通知とともに、256Byteのデータを送出する(ステップS164)。dowのヘッダを受信すると、タグエントリパイプライン(tag_entry_pipeline)処理がL2−LB102hからL2パイプライン処理部102fに対して要求され、プライオリティが確保されると、タグエントリパイプライン処理がおこなわれる(ステップS165)。
L2−LB102gは、dowのデータ部をSC200から受信すると、L2パイプライン処理部102fに対して、subline0〜3のデータ受信が完了した順に、リプレースパイプライン処理で確保されたWAYに対するデータライトパイプライン処理を要求し、データライトパイプライン処理がおこなわれる(ステップS166)。
ステップS163の終了によって、エントリテーブル120のエントリ0pfp_share_entry2が開放される。そして、共有PFPORT102jからPFPROT102bへ、共有PFPORT102jのビジー状態が解消されたこと(「wt_flg」解除)が通知される(ステップS167)。
「wt_flg」解除の通知を受け取ったPFPROT102bは、subline1、subline2、subline3に対するPFを順次起動(ステップS168)するが、対応するsn_res_256応答がまだ到達していないため、PFパイプライン処理がabtするため、エントリテーブル120のエントリ0pfp_share_entry2へsubline1、subline2、subline3に対応するPFを移動させる。SC200からsn_res_256が返って来ると(ステップS169)、subline1、subline2、subline3のPFパイプライン処理はcmp(完了)する(ステップS170)。
そして、SC200は、sn_res_256応答と前後して、MAC300に対して該当アドレスのデータ要求を行い、データの用意ができたらCPU100に対してdow通知とともに、256Byteのデータを送出する(ステップS171)。
エントリテーブル120のエントリ0pfp_share_entry2が開放されたことを契機として、PFPORT制御部107は、PFPROT102bで待ち合わせているentry1のPFを、空いたpfp_sahre_entry2に移動させることよって、PFPROT102bの空きエントリを増やせるので、CPUコア部101からのPFをより多く受け入れる余地を持たせることができる。
次に、一実施の形態にかかる共有L2キャッシュ部の動作(共有PFPORTから、キャッシュラインのサブラインごとにエントリを消去)を説明する。図8は、一実施の形態にかかる共有L2キャッシュ部の動作(共有PFPORTから、キャッシュラインのサブラインごとにエントリを消去)を示すタイミングチャートである。
先ず、CPUコア部101は、4つのサブラインを含むPFを、対応する共有L2キャッシュ部102のPFPORT102bに出力する(pf_req(4subline) from Core to pfp entry0、ステップS181)。
PFを受けたPFPORT102bは、エントリテーブル112のエントリ0(pf_entry0)に当該PFを登録し、subline0〜3に対応するすべての有効フラグ(sub_valid[0]〜sub_valid[3])をオンにする。pfp_entry0 life timeは、そのPFによってPFPORT102bのentry0が占有され開放されるまでの期間を表す。その間、subline0〜3の少なくとも1の有効フラグがオンになっている。
続いて、PFを受けたPFPORT102bは、subline0についてパイプライン処理部102fへパイプライン投入を行うためのプライオリティ要求を出す。パイプライン処理部102fにおいてプライオリティが確保されると、pf_pipeline(subline0)で示されるPFパイプライン処理がおこなわれる(ステップS182)。
PFパイプライン処理中に、L2タグ記憶部102gを検索した結果、PFに紐付けられるタグに関して256Byteのキャッシュラインおよび64ByteのサブラインいずれもL2キャッシュミスであることが判明すると、PFパイプライン処理後、L2−LB102hのエントリが確保される。そして、subline0のPFパイプライン処理が完了されたため、PFPORT102bのsubline0の有効フラグ(sub_valid[0])がオフにされる。
さらに、L2−LB102hから、システムに対するデータ要求であるsc_reqがSC200に発行される(ステップS183)。subline0のPFパイプライン処理が完了したので、次にPFPORT102bは、subline1、subline2、subline3についてパイプライン処理部102fへプライオリティ要求を出す。プライオリティが確保されると、subline1、subline2、subline3のPFパイプライン処理がおこなわれる(ステップS184)。
しかし、まだsn_res_256がSC200から返っていない段階なので、subline1、subline2、subline3のPFパイプライン処理を完了させることができない。そこで、L2パイプライン処理部102fからPFPORT102bへ完了通知、共有PFPORT102jへPF要求セット通知が出され、共有PFPORT102jに当該PFを移動させる。そして、エントリテーブル120のエントリ0(pfp_share_entry0)に当該PFを登録し、subline0〜3に対応するすべての有効フラグ(sub_valid[0]〜sub_valid[3])および待ち合わせフラグ(wt_flg)をオンにする。
今、pfp_share_entry0に登録されているPFと同一の256Byteキャッシュラインに対応するsubline2のDMがMIPORT102aに発行されて、MIPORT102aに登録される(dm_req(subline2) from core to mip、ステップS185)。そして、dm_req(subline2)のパイププライン処理(dm_pipeline処理)がMIPORT102aから起動される(ステップS186)。
DM要求に対するパイププライン処理であるdm_pipeline処理中にL2キャッシュミスが発生し、data_write_pipeline処理が完了していないためにdm_pipeline処理を完了させることができず、「wt_flg」がオンにされ、待ち合わせ状態になる。それとともに、L2−LB102hにおいて、subline2の256Byteのアドレスおよび「PF_code」の一致が検出されると、pfp_share_entry0のsubline2に対応するsub_valid[1]をオフにする。これによって、pfp_share_entry0からsubline2に対応するpf_pipeline処理の起動が行われないこととなる。
SC200からのsn_res_256応答を受信すると(ステップS188)、4サブライン分のリプレースパイプライン処理(replace_pipeline(×4subline))がおこなわれる(ステップS189)。
そして、pfp_share_entry0からsubline1、subline3に対応するpf_pipeline処理が起動される(ステップS190、ステップS191)。既に、ステップS188でsn_res_256到達済みなので、subline1、subline3に対応するpf_pipeline処理は完了し、pfp_share_entry0は開放される。subline2はすでにsub_valid[1]がオフにされているため、pf_pipeline処理はおこなわれない。
さらに、SC200からのdow応答とともに、L2タグ記憶部102gに保持されているタグエントリに対するtag_entry_pipeline処理およびL2キャッシュ102iに保持されている2次キャッシュデータに対するdata_write_pipelin処理が起動する(ステップS192、ステップS193)。subline2に対応するdata_write_pipeline処理がおこなわれると(ステップS194)、pfp_entry0の「wt_flg」がオフにされ、待機していたDMのsubline2のDM要求に対するパイププライン処理dm_pipeline処理がおこなわれる(ステップS195)。
以上のように、DMと対象データのアドレスが一致する場合に、PFのsublineの「sub_valid」をオフにすることによって、PFに基づく当該sublineのPFパイプライン処理をおこなわず、DMと重複してパイプライン処理がおこなわれるという無駄を回避することができる。
次に、共有L2キャッシュ部の非サブライン方式によるタグマッチングと、サブライン方式によるタグマッチングとの違いについて説明する。図9−1は、共有L2キャッシュ部の非サブライン方式によるタグマッチング回路を示すブロック図である。図9−2は、共有L2キャッシュ部のサブライン方式によるタグマッチング回路を示すブロック図である。図9−2は、キャッシュラインがサブライン0〜サブライン3の4つのサブラインを含む4subline方式に基づく。
先ず、図9−1を参照する。非subline方式では、タグ記憶部102gに保持されるタグ情報のエントリであるTAG_entryは、PA_index([18:8])のインデックスで管理され、「PA_TAG[46:19]」(アドレスタグ領域)、「valid」(有効フラグ)、「L2_TC[2:0]」(L2キャッシュ102iがデータを保持するか否かを示すフラグ)、「L1_TC[2:0]」(L1キャッシュ(L1命令キャッシュ101bおよびL1データキャッシュ101e)がデータを保持するか否かを示すフラグ)、「CORE_ID[1:0]」(L1キャッシュにデータを保持するCPUコア部101の識別情報)のカラムを有する。複数のCPUコア部101が、「L1_TC」および「CORE_ID」の組み合わせで、後述のエンコーダ124によって個別にエンコードされる。「valid」は、「L2_TC[2:0]」≠0であることと等価なので必ずしも必要ではない。
非subline方式のL2キャッシュヒット判定は、WAYごとに、マッチング回路124によるパイプライン処理中のデータのアドレス(pipe_PA[46:19])と「PA_TAG[46:19]」とのマッチング結果と、「valid」との論理和をANDゲート123で取って生成する。なお、複数のWAYが同時にヒットすることがないように制御される。あるWAYがヒットした場合は、ヒットしたWAYに対してセレクタ125によって「L2_TC[2:0]」が「L2_hit_L2_TC[2:0]」として、セレクタ126によって「L1_TC[2:0]」が「L1_hit_L1_TC[2:0]」として、セレクタ127によって「CORE_ID[1:0]」が「L2_hit_CORE_ID[1:0]」として選択され、エンコーダ124によってL2_hit_WAY[1:0]がエンコードされパイプライン制御に使用される。なお、「valid」がオフであるキャッシュラインは、L2キャッシュ102iで保持していないことになる。
次に、図9−2を参照する。subline方式では、タグ記憶部102gに保持されるタグ情報のエントリであるTAG_entryは、PA_index([18:8])のインデックスで管理され、「PA_TAG[46:19]」、「sub_valid_0」(サブライン0の有効フラグ)、「L2_TC_0[2:0]」(L2キャッシュ102iがサブライン0のデータを保持するか否かを示すフラグ)、「L1_TC_0[2:0]」(L1キャッシュ(L1命令キャッシュ101bおよびL1データキャッシュ101e)がサブライン0のデータを保持するか否かを示すフラグ)、「CORE_ID_0[1:0]」(L1キャッシュにサブライン0のデータを保持するCPUコア部101の識別情報)、「sub_valid_1」(サブライン1の有効フラグ)、「L2_TC_1[2:0]」(L2キャッシュ102iがサブライン1のデータを保持するか否かを示すフラグ)、「L1_TC_1[2:0]」(L1キャッシュ(L1命令キャッシュ101bおよびL1データキャッシュ101e)がサブライン1のデータを保持するか否かを示すフラグ)、「CORE_ID_1[1:0]」(L1キャッシュにサブライン1のデータを保持するCPUコア部101の識別情報)、・・・、「sub_valid_3」(サブライン3の有効フラグ)、「L2_TC_3[2:0]」(L2キャッシュ102iがサブライン3のデータを保持するか否かを示すフラグ)、「L1_TC_3[2:0]」(L1キャッシュ(L1命令キャッシュ101bおよびL1データキャッシュ101e)がサブライン3のデータを保持するか否かを示すフラグ)、「CORE_ID_3[1:0]」(L1キャッシュにサブライン3のデータを保持するCPUコア部101の識別情報)のカラムを有する。複数のCPUコア部101が、「L1_TC_0」および「CORE_ID_0」、「L1_TC_1」および「CORE_ID_1」、「L1_TC_2」および「CORE_ID_2」、「L1_TC_3」および「CORE_ID_3」の組み合わせで、後述のエンコーダ131によって個別にエンコードされる。
すなわち、タグ記憶部102gに保持されるタグ情報のエントリであるTAG_entryは、「PA_TAG[46:19]」を全sublineで共有しているが、それ以外の「sub_valid」、「L2_TC[2:0]」、「L1_TC[2:0]」、「CORE_ID[1:0]」についてはsubline独立に保持している。各sublineの「sub_valid」のうちひとつでもオンであれば、256Byteキャッシュラインとして有効である。「sub_valid」は、当該サブラインに対応する「L2_TC」≠0であることと等価なので必ずしも必要ではない。
subline方式のL2キャッシュヒット判定は、WAYごとに、マッチング回路128によるパイプライン処理中のデータのアドレス(pipe_PA[46:19])と「PA_TAG[46:19]とのマッチング結果と、すべての「sub_valid」の論理積をORゲート129で取った結果との論理積をANDゲート130によって取って生成する。あるWAYがヒットした場合は、ヒットしたWAYに対してセレクタ132によって「L2_TC_0[2:0]」が「L2_hit_L2_TC_0[2:0]」として、セレクタ133によって「L1_TC_0[2:0]」が「L2_hit_L1_TC_0[2:0]」として、セレクタ134によって「CORE_ID_0[1:0]」が「L2_hit_CORE_ID_0[1:0]」として、・・・、セレクタ135によって「L2_TC_3[2:0]」が「L2_hit_L2_TC_3[2:0]」として、セレクタ136によって「L1_TC_3[2:0]」が「L2_hit_L1_TC_3[2:0]」として、セレクタ137によって「CORE_ID_3[1:0]」が「L2_hit_CORE_ID_3[1:0]として選択され、エンコーダ131によって「L2_hit_WAY[1:0]」がエンコードされパイプライン制御に使用される。なお、「sub_valid」がオフであるサブラインは、L2キャッシュ102iで保持していないことになる。
また、非subline方式、subline方式ともに、「PA_TAG[46:19]」と共通インデックスで、replace_pipeline制御に使用されるLRU情報を持つ。「L2_TC[2:0]」は、『I』、『S』、『E』、『O』、『W』、『M』の6種類の状態を取り、『encode』、『valid』、『排他権』、『writeback義務』、『store義務』ごとにそれぞれエンコードされる。
なお、subline方式の利点は次のようなものである。キャッシュラインサイズが大きくなるため、L2タグ記憶部102gや、L1−LB101i、L2−LB102hなどの面積リソースの効率が高まる。また、データ転送の単位を、必要に応じて全キャッシュライン256Byte単位またはsubline64Byte単位などのように、状況に応じて選択することが可能なので、データ転送効率が良くなる。
次に、共有L2キャッシュ部のパイプライン処理の概要(共有PFPORTを有さない場合)を説明する。図10−1は、共有L2キャッシュ部のパイプライン処理の概要(共有PFPORTを有さない場合)を示す図である。
同図に示すように、L2パイプライン処理部102fは、PFPORT102bからのpriority要求を受け付けると、priorityを確保し、TAG読み出しアドレス入力をおこなう。そして、TAG読み出し動作およびL2−LB102hとのアドレス一致検出を同時におこなう。
続いて、L2パイプライン処理部102fは、TAG_mch(タグ一致)およびhit(L2キャッシュヒット)検出、および、L2−LB102hとの一致アドレス転送を同時におこなう。そして、TAG_mchおよびhit検出結果、および、L2−LB102hとのアドレス一致検出結果に基づきPF処理をおこなう。
PF処理は、(条件1)『L2キャッシュミスまたは「L2_TC」がオフ、かつ、L2−LB102hとの256Byteのキャッシュラインでのアドレスが一致しない(L2_miss|(!L2_TC_mch)&(!LB_256_mch))』場合に、L2−LB102hにおいてエントリを確保し、要求元のPFPORT102bへ完了(cmp)を通知する。
また、(条件2)『L2キャッシュヒットかつL2−LB102hとの256Byteのキャッシュラインでのアドレスが一致する(L2_hit&LB_256_mch)』場合に、タグ記憶部102gの「TAG」および「LRU」の更新アドレスを入力し、要求元のPFPORT102bへ完了(cmp)を通知する。
また、(条件3)『L2キャッシュミスまたは「L2_TC」がオフ、かつ、L2−LB102hとの256Byteのキャッシュラインでのアドレスが一致し、sn_res_256応答がある((L2_miss|(!L2_TC_mch))&L2−LB_256_mch&sn_res_256))』場合に、要求元のPFPORT102bへ完了(cmp)を通知する。
また、(条件4)『L2キャッシュミスまたは「L2_TC」がオフ、かつ、L2−LB102hとの256Byteのキャッシュラインでのアドレスが一致し、sn_res_64応答がある((L2_miss|(!L2_TC_mch))&L2−LB_256_mch&sn_res_64)』場合に、L2−LB102hにエントリの該当サブラインをマージし、要求元のPFPORT102bへ完了(cmp)を通知する。
また、(条件5)『L2キャッシュミスまたは「L2_TC」がオフ、かつ、L2−LB102hとの256Byteのキャッシュラインでのアドレスが一致するが、sn_res_256応答もsn_res_64応答もない(L2_miss|(!L2_TC_mch)&(!LB_256_mch)&(!sn_res_64&!sn_res_256)』場合に、要求元のPFPORT102bへabtを通知し、エントリテーブル112の該当するエントリの「wt_flg」をオンにする指示を出力する。
また、(条件6)『その他、PFパイプライン処理(pf_pipeline)が完了できなかった』場合に、要求元のPFPORT102bへabtを通知する。
次に、共有L2キャッシュ部のパイプライン処理の概要(共有PFPORTを有する場合)を説明する。図10−2は、共有L2キャッシュ部のパイプライン処理の概要(共有PFPORTを有する場合)を示す図である。
同図に示すように、L2パイプライン処理部102fは、PFPORT102bまたは共有PFPORT102jからのpriority要求を受け付けると、priorityを確保し、TAG読み出しアドレス入力をおこなう。そして、TAG読み出し動作およびL2−LB102hとのアドレス一致検出を同時におこなう。
続いて、L2パイプライン処理部102fは、TAG_mch(タグ一致)およびhit(L2キャッシュヒット)検出、および、L2−LB102hとの一致アドレス転送を同時におこなう。そして、TAG_mchおよびhit検出結果、および、L2−LB102hとのアドレス一致検出結果に基づきPF処理をおこなう。
PF処理は、(条件11)『L2キャッシュミスまたは「L2_TC」がオフ、かつ、L2−LB102hとの256Byteのキャッシュラインでのアドレスが一致しない(L2_miss|(!L2_TC_mch)&(!LB_256_mch))』場合に、L2−LB102hにおいてエントリを確保(sc_req)し、要求元のPFPORT102bへ完了(cmp)を通知する。
また、(条件12)『L2キャッシュヒットかつL2−LB102hとの256Byteのキャッシュラインでのアドレスが一致する(L2_hit&LB_256_mch)』場合に、タグ記憶部102gの「TAG」および「LRU」の更新をおこない、要求元のPFPORT102bへ完了(cmp)を通知する。
また、(条件13)『L2キャッシュミスまたは「L2_TC」がオフ、かつ、L2−LB102hとの256Byteのキャッシュラインでのアドレスが一致し、sn_res_256応答がある((L2_miss|(!L2_TC_mch))&L2−LB_256B_mch&sn_res_256)』場合に、要求元のPFPORT102bへ完了(cmp)を通知する。
また、(条件14)『L2キャッシュミスまたは「L2_TC」がオフ、かつ、L2−LB102hとの256Byteのキャッシュラインでのアドレスが一致し、sn_res_64応答がある((L2_miss|(!L2_TC_mch))&L2−LB_256B_mch&sn_res_64)』場合に、L2−LB102hにエントリの該当サブラインをマージし(sc_req)、要求元のPFPORT102bへ完了(cmp)を通知する。
また、(条件15)『PFPROT102bからの要求であり、共有PFPROT102jがビジー状態でない、かつ、L2キャッシュミスまたは「L2_TC」がオフ、かつ、L2−LB102hとの256Byteのキャッシュラインでのアドレスが一致するが、sn_res_256応答もsn_res_64応答もない(要求元PFPROTがPFPROT102bである&共有PFPROT102jがbusyでない&(L2_miss|(!L2_TC_mch))&L2−LB_256_mch&(!sn_res_256&!sn_res_64))』場合に、要求元のPFPORT102bへabtを通知し、共有PFPORT102jのエントリテーブル120へエントリを移動させ、エントリテーブル112の該当するエントリの「wt_flg」をオンにする指示を出力する。
また、(条件16)『PFPROT102bからの要求であり、共有PFPROT102jがビジー状態である、または、L2キャッシュミスまたは「L2_TC」がオフかつL2−LB102hとの256Byteのキャッシュラインでのアドレスが一致するが、L2キャッシュミスでありsn_res_256応答もsn_res_64応答もない(((要求元PFPORTがPEPORT102bである&共有PFPORT102jがbusyである)|(要求元PFPORTがPRPORT102jである))&(L2_miss|(!L2_TC_mch))&L2−LB_256_mch&(!sn_res_256&!sn_res_64))』場合に、要求元のPFPORT102bへabtを通知し、エントリテーブル112の該当するエントリの「wt_flg」をオンにする指示を出力する。
また、(条件17)『その他、PFパイプライン処理(pf_pipeline)が完了できなかった』場合に、要求元のPFPORT(PFPORT102bまたは共有PFPORT102j)へabtを通知する。
次に、共有L2キャッシュ部のDMパイプライン処理の概要を説明する。図10−3は、共有L2キャッシュ部のDMパイプライン処理の概要を示す図である。
同図に示すように、L2パイプライン処理部102fは、MIPORT102aからのpriority要求を受け付けると、priorityを確保し、TAG読み出しアドレス入力をおこなう。そして、TAG読み出し動作およびL2−LB102hとのアドレス一致検出を同時におこなう。
続いて、L2パイプライン処理部102fは、TAG_mch(タグ一致)およびhit(L2キャッシュヒット)検出、および、L2−LB102hとの一致アドレス転送を同時におこなう。そして、TAG_mchおよびhit検出結果、および、L2−LB102hとのアドレス一致検出結果に基づきPF処理をおこなう。
PF処理は、(条件21)『L2キャッシュミスまたは「L2_TC」がオフ、かつ、L2−LB102hとの256Byteのキャッシュラインでのアドレスが一致しない(L2_miss|(!L2_TC_mch)&(!LB_256_mch))』場合に、L2−LB102hにおいてエントリを確保し、要求元のMIPORT102aへ完了(cmp)を通知する。
また、(条件22)『L2キャッシュヒットかつL2−LB102hとの256Byteのキャッシュラインでのアドレスが一致する(L2_hit&LB_256_mch)』場合に、L2キャッシュ102iのデータの読み出しアドレスを入力し、L2キャッシュ102iからデータを読み出し、CPUコア部101のL1キャッシュ(L1命令キャッシュ101bまたはL1データキャッシュ101e)へデータを転送する。そして、タグ記憶部102gの「TAG」および「LRU」の更新アドレスを入力し、要求元のMIPORT102aへ完了(cmp)を通知する。
また、(条件23)『L2キャッシュミスまたは「L2_TC」がオフ、かつ、L2−LB102hとの256Byteのキャッシュラインでのアドレスが一致し、sn_res_256応答がある(L2_miss|(!L2_TC_mch)&(!LB_256_mch)&sn_res_256)』場合に、L2−LB102hにエントリの該当サブラインをマージし、要求元のMIPORT102aへ完了(cmp)を通知する。
また、(条件24)『L2−LB102hとの256Byteのキャッシュラインでのアドレスが一致するが、データライトが完了済みでない(LB_256_mch&!(data_write完了済み)』場合に、要求元のMIPORT102aへ完了(cmp)を通知し、エントリテーブル112の該当するエントリの「wt_flg」をオンにする指示を出力する。
また、(条件25)『その他、PFパイプライン処理(pf_pipeline)が完了できなかった』場合に、要求元のMIPORT102aへabtを通知する。
PF要求に対するパイププライン処理PF_pipeline処理と、DM要求に対するパイププライン処理PF_pipeline処理と、DM_pipeline処理との基本的な違いは、PF_pipeline処理がL2キャッシュ102iへの要求データの登録を目的とするのに対し、DM_pipeline処理はCPUコア部101へ要求アドレスのデータを確実に応答することである。
次に、共有L2キャッシュ部のL2リプレースパイプライン処理の概要を説明する。図10−4は、共有L2キャッシュ部のL2リプレースパイプライン処理の概要を示す図である。L2リプレースパイプライン(L2_replace_pipeline)処理は、新規に登録するWAYを登録前に無効化するpipeline処理である。
同図に示すように、L2パイプライン処理部102fは、L2−LB102hからのpriority要求を受け付けると、priorityを確保し、TAG読み出しアドレス入力をおこなう。そして、TAG読み出し動作およびL2−LB102hとのアドレス一致検出を同時におこなう。
続いて、L2パイプライン処理部102fは、TAG_mch(タグアドレス一致)およびhit(L2キャッシュヒット)検出をおこなう。そして、replace_pipeline処理判定をおこなう。続いて、L2−LB102hへcmpまたはabtを通知するとともに、「TAG」の更新アドレスを入力する。そして、L2−LB102hは、Replace完了フラグをオンにする。
replace_pipeline処理では、Writebackの必要がある「L_TC(O、W、M)」の場合は、DIMM400へのWriteback処理を伴う。また、「L1_TC」≠0(すなわち、L1キャッシュヒット)の場合は、データを保持するCPUコア部101に無効化要求が発行される。replace_pipeline処理は、sn_res応答を受けたL2−LB102hのエントリから起動される。
なお、replace_pipeline処理は、PF_pipeline処理やDM_pipeline処理と同様に、「TAG」の検索を行うサイクルが存在するが、その結果を特に使用するわけではなく、L2−LB102hのエントリを新規に確保したときに、LRUで決定されたWAYとindex_addresとsublineとを指定して、WAYを無効化する処理を行う。有効なsubline分処理されるので最大subline数分だけ(本一実施の形態では、4subline方式であるので、4回)起動される処理である。
次に、共有L2キャッシュ部のL2タグライトパイプライン処理の概要を説明する。図10−5は、共有L2キャッシュ部のL2タグライトパイプライン処理の概要を示す図である。L2タグライトパイプライン(L2_tag_write_pipeline)処理は、「TAG」の登録をおこなうパイプライン処理である。
同図に示すように、L2パイプライン処理部102fは、L2−LB102hからのpriority要求を受け付けると、priorityを確保し、TAG読み出しアドレス入力をおこなう。そして、TAG読み出し動作およびL2−LB102hとのアドレス一致検出を同時におこなう。
続いて、L2パイプライン処理部102fは、TAG_mch(タグアドレス一致)およびhit(L2キャッシュヒット)検出をおこなう。そして、tag_pipeline処理判定をおこなう。続いて、L2−LB102hへcmp(完了)またはabtを通知するとともに、「TAG」の更新アドレスを入力する。そして、L2−LB102hは、TAG登録完了フラグをオンにする。
L2_tag_write_pipeline処理は、dow応答のヘッダを受けたL2−LB102hのエントリから起動される。PF_pipeline処理やDM_pipeline処理と同様に、「TAG」の検索を行うサイクルが存在するが、その結果を特に使用するわけではなく、L2−LB102hのエントリを新規に確保したときに、LRUで決定されたWAYとindex_addresとを指定して、「TAG」をL2タグ記憶部102gへ新規に登録する処理をおこなう。sn_res_256応答の場合は1回のpipeline処理で4subline分の「TAG」の登録をおこなう処理である。
次に、共有L2キャッシュ部のL2データライトパイプライン処理の概要を説明する。図10−6は、共有L2キャッシュ部のL2データライトパイプライン処理の概要を示す図である。L2データライトパイプライン(L2_data_write_pipeline)処理は、データをL2キャッシュ102iに書き込むpipeline処理である。
同図に示すように、L2パイプライン処理部102fは、L2−LB102hからのpriority要求を受け付けると、priorityを確保し、TAG読み出しアドレス入力をおこなう。そして、TAG読み出し動作およびL2−LB102hとのアドレス一致検出を同時におこなう。
続いて、L2パイプライン処理部102fは、TAG_mch(タグアドレス一致)およびhit(L2キャッシュヒット)検出をおこなう。そして、data_write_pipeline処理判定をおこなう。続いて、L2−LB102hへcmpまたはabtを通知する。この通知を受けて、L2LB102hは、data_write登録完了フラグをオンにする。
L2パイプライン処理部102fは、パイプライン処理結果の判定を行うL2_data_write_pipeline処理判定およびdata_write登録完了フラグをオンにする処理と平行して、L2キャッシュ102iのデータ更新アドレスを入力し、L2キャッシュへデータを書き込む。
data_write_pipeline処理は、dow応答のデータ部を受けたL2−LB102hのエントリから起動される。データ転送の途中でも、sublineのデータ受信が終わるごとに逐次起動される。
data_write_pipeline処理は、PF_pipeline処理やDM_pipeline処理と同様に、「TAG」の検索を行うサイクルが存在するが、その結果を特に使用するわけではなく、L2−LB102hのエントリを新規に確保したときに、LRUで決定されたWAYとindex_addresとを指定して、L2キャッシュ102iへのデータの書き込みを行う処理である。
以上、本発明の一実施の形態を説明したが、本発明は、これに限られるものではなく、請求の範囲に記載した技術的思想の範囲内で、更に種々の異なる実施の形態で実施されてもよいものである。また、一実施の形態に記載した効果は、これに限定されるものではない。
また、上記一実施の形態において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記一実施の形態で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示のように構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示したものに限られず、その一部または全部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。