Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP4945200B2 - 計算機システム及びプロセッサの制御方法 - Google Patents
[go: Go Back, main page]

JP4945200B2 - 計算機システム及びプロセッサの制御方法 - Google Patents

計算機システム及びプロセッサの制御方法 Download PDF

Info

Publication number
JP4945200B2
JP4945200B2 JP2006232287A JP2006232287A JP4945200B2 JP 4945200 B2 JP4945200 B2 JP 4945200B2 JP 2006232287 A JP2006232287 A JP 2006232287A JP 2006232287 A JP2006232287 A JP 2006232287A JP 4945200 B2 JP4945200 B2 JP 4945200B2
Authority
JP
Japan
Prior art keywords
prefetch
data
shared cache
unit
arithmetic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006232287A
Other languages
English (en)
Other versions
JP2008059057A (ja
Inventor
亜紀 富田
直伸 助川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2006232287A priority Critical patent/JP4945200B2/ja
Priority to US11/705,410 priority patent/US7895399B2/en
Publication of JP2008059057A publication Critical patent/JP2008059057A/ja
Application granted granted Critical
Publication of JP4945200B2 publication Critical patent/JP4945200B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Landscapes

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

Description

本発明は、プロセッサのキャッシュ制御に関し、特に、キャッシュへデータの先読みを行うプリフェッチ機能を備えたプロセッサに関し、また、複数の演算コアを有するマルチコアプロセッサのプリフェッチ機能に関する。
近年、半導体製造技術の進歩による素子の微細化により、膨大な数のトランジスタを集積することが可能となっている。この進歩によってプロセッサ(CPU)の高周波数化が進んで、演算処理能力は飛躍的に向上した。一方、データやプログラムを格納する主記憶についても、半導体の微細化によりデータの転送速度や記憶容量が向上した。
しかし、プロセッサの処理能力の向上に比して、主記憶のデータ転送速度は低いため、プロセッサの演算コア側にキャッシュメモリ(以下、キャッシュ)を設けたプロセッサが広く普及している。キャッシュはプロセッサと同等の速度動作するため主記憶に比して高速なデータ転送を行うことができるが、プロセッサのダイサイズやコストの関係から主記憶に比して小さい容量で構成される。一方、主記憶は、プロセッサに接続されたフロントサイドバスやメモリバスの動作速度に依存するためキャッシュのデータ転送速度に比して遙かに遅いが、大容量で構成することができる。
一般的には、プロセッサの演算コアがデータを読み込む場合、まず、キャッシュにアクセスしてヒットすればキャッシュから必要なデータを高速に読み込むことができる。一方、キャッシュにない場合にはキャッシュミスとなって、主記憶から必要なデータを読み込むことになる。
キャッシュミスとなって必要なデータをプロセッサの演算コアに読み込むまでは、上述のように主記憶のデータ転送速度が極めて低いため、多大な時間を要することになる。このため、演算処理能力が高いプロセッサの演算コアは、データが到着するまで演算コアのパイプラインがストールしてしまい、演算処理速度が低下することになる。キャッシュミスの際には、主記憶のデータ転送速度がボトルネックとなって、プロセッサの性能を十分に発揮できないばかりか、無駄な電力を消費することにもなる。
そこで、近年のプロセッサでは、必要となるデータを事前にキャッシュに読み込んでおくプリフェッチ機能を備えたものが広く知られている。このプリフェッチ機能によって、これから実行する命令に必要なデータをキャッシュへ先読みしておくことで、キャッシュミスを防いでプロセッサの処理能力を発揮させようとするものである。
この種のプロセッサのプリフェッチ機能は、プログラム(実行コード)にプリフェッチ命令を埋め込んでおき、プロセッサはプリフェッチ命令を実行したときにプリフェッチ命令で指定されたアドレスのデータをキャッシュへ先読みしておくものが知られている。あるいは、実行コードの主記憶に対するアクセス状況から先読みを行うアドレスを決定し、ハードウェアによって先読みを行うプロセッサも知られている(例えば、特許文献1)。後者のハードウェアによりプリフェッチを実行するプロセッサでは、主記憶上のアドレスを所定の間隔でアクセスするストライドを検知して、アドレスの間隔に基づいて先読みを行うアドレスを決定し、ストライドの間隔に応じた先読みを実行するものである。
特開2006−18474
しかしながら、上記従来例のようなプリフェッチ機能では、必ず先読みが成功してキャッシュミスを低減できたわけではない。例えば、プリフェッチを実行したときにキャッシュラインに空きがなければ、プリフェッチを行わないプロセッサでは、必要なデータをキャッシュに先読みすることができず、結局後の命令ではキャッシュミスとなってしまう。
あるいは、プリフェッチを実行したときにキャッシュラインに空きがなければ、LRU(Least Recently Used)により、一番長く使われていないデータをキャッシュアウトさせ、その後先読みを行うプロセッサでは、他の命令で使用する予定であったデータをキャッシュアウトさせる場合があった。この場合、プリフェッチが成功したプログラム(またはスレッド)命令についてはキャッシュミスを抑制できるが、キャッシュアウトしたデータを利用する予定の命令では、キャッシュミスが生じて主記憶へのアクセスが発生することになる。
上記プリフェッチ命令の実行と、ハードウェアによるプリフェッチ機能を備えたプロセッサでは、プログラムで設定したプリフェッチ命令で先読みしたデータが、ハードウェアによるプリフェッチ機能でキャッシュアウトされる場合もあり、プログラムを作成する際には、プロセッサの挙動を考慮した上でプリフェッチ命令を挿入しなければならず、多大な労力を必要とする。
また、近年ではひとつのプロセッサに複数の演算コアを備えたマルチコアプロセッサが普及しつつあり、キャッシュを複数の演算コアで共有するプロセッサも知られている。キャッシュを共有するマルチコアプロセッサでは、複数の演算コアが共有キャッシュを利用するため、キャッシュラインに空きがないときにLRU方式でキャッシュアウトさせてプリフェッチを行うと、他の演算コアではキャッシュアウトしたデータをキャッシュミスする場合が発生する。
このように、上記従来例ではキャッシュラインに空きがない場合には、プリフェッチを行ったとしてもキャッシュミスを低減できないという問題があった。
さらに共有キャッシュを備えたマルチコアプロセッサでは、各コアが独立して命令を実行するため、共有キャッシュに保持するデータを的確に管理しなければ、複数の演算コアによる高い演算処理能力を発揮することができない、という問題があった。つまり、共有キャッシュのキャッシュラインに空きがないときに、第1の演算コアがプリフェッチを行って、LRU方式でキャッシュアウトを行うと、第2の演算コアが利用する予定であったデータをキャッシュアウトされる場合があり、結局第2の演算コアはキャッシュミスとなって、主記憶からロードすることになる。したがって、第1の演算コアと第2の演算コアを有するプロセッサでは、一方の演算コアでプリフェッチが成功しても他方の演算コアでキャッシュミスを誘発する場合では、キャッシュミスにより処理速度が低下することになる。
さらに、上記特許文献1では、アドレスの間隔にある程度規則性のあるストライドでは、先読みが成功する場合があるが、アドレスの間隔が不規則なストライドや、アクセスするアドレスが不連続な場合では、先読みが成功しない場合があった。つまり、ソースコードレベルで、不規則なアクセスが分かっていた場合にプリフェッチ命令を挿入しても、上述のようなハードウェアによるプリフェッチ機能によって、プリフェッチ命令で先読みしておいたデータがキャッシュアウトされる場合があり、プリフェッチ命令及びプリフェッチ機能を効果的に利用することができない、という問題があった。
そこで本発明は、上記問題点に鑑みてなされたもので、キャッシュラインの状態に応じてプリフェッチを効果的に実行することを目的とし、さらに、マルチコアプロセッサに好適なプリフェッチを実現することを目的とする。
本発明は、プリフェッチ命令またはロード命令を含むプログラムと、前記プログラムで用いるデータとを格納する主記憶と、前記主記憶から前記プログラムとデータを読み込んで実行するプロセッサと、を備えた計算システムにおいて、前記プロセッサは、前記プログラムを実行する複数の演算コアと、前記主記憶上のデータを所定のデータ格納単位毎に格納する共有キャッシュと、前記演算コアからのプリフェッチの要求に基づいて、前記主記憶から共有キャッシュへデータを先読みするプリフェッチユニットと、を備え、
前記プリフェッチユニットは、前記共有キャッシュのデータ格納単位の位置毎に記憶状態を保持する領域と、前記プリフェッチの要求を予約する領域とを備えた共有キャッシュ管理情報と、前記共有キャッシュの記憶状態に基づいて、前記予約したプリフェッチの要求または前記演算コアからのプリフェッチの要求を前記共有キャッシュへ指令するプリフェッチ制御部と、を備え、前記プリフェッチ命令は、前記主記憶上のデータのアドレスと、前記データを共有する2以上の前記演算コアの数を示す数値と、を含み、前記共有キャッシュは、前記アドレスに対応するデータ格納単位毎に、主記憶のデータと前記数値を格納するデータ格納領域と、 前記プリフェッチ制御部から指令されたプリフェッチの要求に基づいて、前記主記憶から前記アドレスのデータを読み込んで、前記アドレスに対応するデータ格納単位へ前記データを格納する共有キャッシュ制御部と、を有し、
前記演算コアは、記ロード命令を実行したときには、前記共有キャッシュ制御部に対して当該ロード命令に含まれるアドレスの読み出しを指令し、
前記共有キャッシュ制御部は、
前記プリフェッチ制御部から指令されたプリフェッチの要求に含まれる前記数値を、前記読み込んだデータに対応付けて前記データ格納領域に格納し、
前記ロード命令に含まれるアドレスのデータを前記データ格納領域に格納している場合には、当該データを前記演算コアに転送し、前記データ格納領域のデータに対応する前記数値を減算する読み出し部と、
前記数値が所定の値となったときには、前記データ格納領域のデータをキャッシュアウトする更新部と、を有する。
また、前記共有キャッシュ制御部は、前記更新部が前記キャッシュアウトを行ったときには、前記キャッシュアウトしたデータ格納単位の位置を前記プリフェッチ制御部に通知し、前記プリフェッチ制御部は、前記通知された前記データ格納単位の位置に対応する共有キャッシュ管理情報を、前記予約したプリフェッチの要求で更新し、当該プリフェッチの要求を前記共有キャッシュ制御部に指令する。
したがって、本発明は、プリフェッチ命令があったときに、共有キャッシュに空きがなければ、共有キャッシュ管理情報にプリフェッチ命令を予約しておくことで、共有キャッシュにキャッシュされている後の処理に必要となるデータをキャッシュアウトさせるのを防止でき、共有キャッシュのヒット率を向上させることができる。
さらに、プリフェッチ命令で共有キャッシュに読み込むデータについて演算コアが読み込む回数を予め設定しておき、演算コアが読み込む度に減算し、当該回数が所定値になるとキャッシュアウトすることにより、不要になったデータを迅速かつ的確にキャッシュアウトすることが可能となって、共有キャッシュの利用効率を向上させることが可能となる。
以下、本発明の一実施形態を添付図面に基づいて説明する。
図1は、本発明を適用する計算機システムのブロック図である。計算機システムは、複数の演算コア(制御ユニットまたは演算ユニット)を含むマルチコアのプロセッサ1と、ユーザデータ32やユーザプログラム31を格納する主記憶(メモリ)3と、プロセッサ1とメモリ3を接続するバス2を主体に構成される。なお、バス2には図示しないストレージ装置やネットワークインターフェースを接続することができる。
プロセッサ1は、異なる種類の演算コアで構成されたヘテロジニアス・マルチコアプロセッサシステムの例を示す。プロセッサ1の演算コアとしては、各演算コアに命令を分配してプロセッサ1で行われる演算処理を統括する制御コアとしての制御ユニット(PU)10と、制御ユニット10から分配された命令を実行するアクセラレータコアとしての演算ユニット11、12から構成される。なお、アクセラレータコアとしての演算ユニット11、12は同様の構成であり、また、図1においては、2つの演算ユニット11、12を示したがより多数の演算ユニットを設けても良い。
そして、プロセッサ1には、主記憶3のユーザデータ32(以下、単にデータとする)を一時的に格納する2次キャッシュ(L2キャッシュ)14と、制御ユニット10からプリフェッチの指令があったときに主記憶3のデータを2次キャッシュ14への先読みを制御するプリフェッチユニット(PFU)13が設けられている。2次キャッシュ14は、各演算コアで共有する共有キャッシュとして機能する。
そして、制御ユニット10と複数の演算ユニット11、12と2次キャッシュ14及びプリフェッチユニット13は、プロセッサバス15を介して相互に接続される。また、プロセッサバス15は、図示しないインターフェースを介してバス2に接続され、プロセッサ1及び2次キャッシュ14は主記憶3にアクセス可能となっている。
<制御ユニット>
次に、制御ユニット10の構成について説明する。制御ユニット10は、主記憶3または2次キャッシュ14に格納されたユーザデータ32またはユーザプログラム31を1次キャッシュ(L1キャッシュ)106へ一時的に読み込んで、複数の演算ユニット11、12に命令の実行を割り当てる。そして、制御ユニット10は、実行する命令がプリフェッチ命令であった場合には、プリフェッチ命令で指定されたアドレスのユーザデータ32を、主記憶3から2次キャッシュ14へ先読みするようにプリフェッチユニット13に指令する。なお、制御ユニット10自身もユーザプログラム31を実行することができる。また、1次キャッシュ106は、制御ユニット10のみが使用するローカルキャッシュとして機能する。
制御ユニット10は、命令フェッチ部101で1次キャッシュ106へ読み込んでおいたユーザプログラム31から命令(実行コード)を取得する。次に、命令デコード部102では命令フェッチ部101が取得した命令を、演算ユニット11、12(または制御ユニット10自身)で実行可能な内部命令(またはマイクロオペレーション)に変換する。
そして、制御ユニット10の命令分配部(Distribute)103は、命令デコード部102で変換した内部命令を演算ユニット11、12へ分配する。または、制御ユニット10自身で実行する内部命令(例えば、プリフェッチ命令)の場合には、命令分配部103は変換した内部命令を命令キュー105へ投入する。
命令実行部104は、命令キュー105へ格納した内部命令が実行可能になると、この内部命令の実行を開始し、内部命令の実行に必要なデータを2次キャッシュ14(または主記憶3)から1次キャッシュ106へ読み込む。
<演算ユニット>
次に、演算ユニット11、12(AU1、AU2)について説明する。なお、演算ユニット11、12は同一の構成であるので、演算ユニット11についてのみ説明し、演算ユニット12の説明を省略する。
演算ユニット11は、制御ユニット10から分配された内部命令の実行を制御する命令実行部111と、実行する内部命令を投入する命令キュー112と、演算ユニット11のみが使用するローカルキャッシュとして機能する1次キャッシュ(ローカルキャッシュ)113と、を含んで構成される。
演算ユニット11は、制御ユニット10から分配された内部命令を命令キュー105へ投入する。命令実行部111は、命令キュー105へ投入した内部命令が実行可能になると、この内部命令の実行を開始し、内部命令の実行に必要なデータを2次キャッシュ14(または主記憶3)から1次キャッシュ106へ読み込む。内部命令の実行が完了すると、演算結果を1次キャッシュ113または2次キャッシュ14へ書き戻して、この内部命令の演算処理を終了し、次の内部命令の実行を開始する。上記内部命令の実行の際に、命令実行部111は、必要なデータが1次キャッシュ113になければ2次キャッシュ14を検索する。必要なデータが1次キャッシュ113または2次キャッシュ14にあればキャッシュヒットとなり、1次キャッシュ113及び2次キャッシュ14に必要なデータがなければキャッシュミスとなる。キャッシュミスの場合には、上述のように、主記憶3から2次キャッシュ14へ必要なデータを読み込むまで内部命令を実行することができないストール状態となる。
<2次キャッシュの構成>
次に、主記憶3のデータをプロセッサ1内へ一時的に格納する2次キャッシュ14の構成について説明する。
2次キャッシュ14は、複数のキャッシュラインを備えた2次キャッシュメモリ142と、キャッシュライン単位で2次キャッシュメモリ142のデータを管理する2次キャッシュ制御部141から構成される。
2次キャッシュ制御部141は、制御ユニット10または演算ユニット11、12からのロード(読み込み)命令に基づいて2次キャッシュメモリ142を参照し、キャッシュヒットした場合には該当データを要求元の演算コアに転送する。一方、制御ユニット10または演算ユニット11、12からのロード命令でキャッシュミスした場合には、前記従来例と同様に、2次キャッシュ制御部141は、要求されたアドレスのデータを主記憶3から読み込んで、2次キャッシュメモリ142へ格納する。
一方、2次キャッシュメモリ142へのデータの書き込みは、キャッシュメモリ142のキャッシュライン単位で管理を行うプリフェッチユニット13からの命令または制御ユニット10や演算ユニット11、12の命令に基づいて主記憶3のデータを該当キャッシュラインへ書き込む。
ここで、本発明の2次キャッシュメモリ142の一例について、図2を参照しながら説明する。図2は、キャッシュメモリ142を4ウェイ・セットアソシエイティブで構成した例を示す。なお、本実施形態では、主記憶3は所定のバイト数のブロック(またはページ)単位で管理されるものとする。
図2において、2次キャッシュメモリ142は、4つのキャッシュライン0〜3(図中LINE0〜3)に分割されており、各キャッシュラインは、0〜nのインデックスID1421に区分けされる。なお、4ウェイ・セットアソシエイティブの場合には、n=4となる。インデックスID1421は、主記憶3のブロックを指し示すIDであり、主記憶3のブロックアドレスの下位ビットで表現され、タグ1420には主記憶3のブロックアドレスの上位ビットが格納される。なお、タグ1420とインデックスID1421の関係は、周知の手法を用いればよい。
各インデックスID1421には、主記憶3の該当領域(ブロック)を一時的に格納するデータ1424と、このインデックスID1421を共有する演算コアの数を示す共有カウント1422と、各演算コアの参照が所定回数(例えば、1回)のみであるか否かを示すワンタイムフラグ1423が設定される。なお、共有カウント1422の初期値は1以上に設定される。なお、データ1424は各キャッシュライン番号のインデックスID1421毎に、所定のラインサイズ(バイト数)のデータを格納する。また、データ1424の長さは、2次キャッシュキャッシュメモリ142へデータの読み書きを行うデータ格納単位となる。また、インデックスID1421は、タグ1420を用いてデータ1424の主記憶3上の位置を指し示す識別子である。
共有カウント1422とワンタイムフラグ1423の値は、ユーザプログラム31のプリフェッチ命令に予め設定されたものであり、後述するように、プリフェッチユニット13から送信されたプリフェッチ命令に含まれる値を格納したものである。
ワンタイムフラグ1423は、「On」であれば各演算コアが1回ずつ参照することを意味し、「Off」であれば参照された回数で制御を行わないことを意味する。
共有カウント1422は、ワンタイムフラグ1423が「On」のときに、インデックスID1421のデータ1424を参照した回数を示し、参照される度に2次キャッシュ制御部141がこの共有カウント1422を減算する。そして、ワンタイムフラグ1423が「On」で、共有カウント1422が「0」になると、指定した回数の参照が行われたことになる。つまり、各演算コアが1回ずつ参照したと見なす。そして、2次キャッシュ制御部141は、ワンタイムフラグ1423が「On」で共有カウント1422が「0」のインデックスID1421は、次に読み込まれることはないので、キャッシュアウトすることができる。
なお、2次キャッシュメモリ142には、上記の他に、図示はしないが、アドレスの上位ビットを示すタグや、更新の有無を示すフラグが設定される。また、参照した演算コアのIDを格納するようにしてもよい。
ユーザプログラム31に含まれるプリフェッチ命令の実行コード310一例を、図3に示す。図3において、プリフェッチ命令の実行コード310は、予め設定された命令コード3101と、参照する主記憶3のメモリアドレス3102と、ワンタイムフラグ3103と共有カウント3104(初期値は1以上)と、図2に示したキャッシュラインのインデックスID1421に格納されたデータ1424をキャッシュアウトさせる指標としてのメモリアドレス最大値(LastMemAddr)3105が含まれる。なお、プリフェッチ命令の各パラメータ(ワンタイムフラグ、共有カウント数やメモリアドレス)はコンパイラで設定されたものである。各インデックスID1421のデータ1424には、タグ1420とインデックスID1421が指し示す主記憶3のアドレス領域の全てを格納することができない。このため、各演算コアからの参照要求で、当該インデックスID1421で参照するメモリアドレスがメモリアドレス最大値3105を超えたときには、当該インデックスID1421のデータをキャッシュアウトして、参照するメモリアドレスを含む主記憶3のメモリアドレス領域をロードさせる。このとき、メモリアドレス最大値3105は、次に読み込みを開始する主記憶3のメモリアドレスを指し示すものである。
後述するように、このプリフェッチ命令の実行コード310を制御ユニット10が実行すると、プリフェッチユニット13を介して2次キャッシュ制御部141にプリフェッチの指令を送信する。2次キャッシュ制御部141は、プリフェッチの指令に応じてプリフェッチを行い、該当するインデックスID1421にワンタイムフラグや共有カウント数等を設定する。
<プリフェッチユニットの構成>
プリフェッチユニット13は、2次キャッシュメモリ142の状態と制御ユニット10からのプリフェッチの要求を管理するプリフェッチ制御部132を備える。プリフェッチ制御部132は、2次キャッシュメモリ142の記憶の状態と制御ユニット10からのプリフェッチの要求を管理する2次キャッシュ管理テーブル131を管理して、2次キャッシュ制御部141へプリフェッチの要求を行う。そして、プリフェッチユニット13は、制御ユニット10からのプリフェッチの指令を受け付ける命令キュー133を備える。
プリフェッチ制御部132は、2次キャッシュメモリ142の状態の変化があると2次キャッシュ管理テーブル131を更新し、制御ユニット10からプリフェッチ命令を受信すると、この命令を命令キュー133へ一旦格納して、2次キャッシュ管理テーブル131で命令キュー133のプリフェッチ命令が実行可能になった時点で、2次キャッシュ14にプリフェッチを指令する。
図4は、プリフェッチユニット13のプリフェッチ制御部132が管理する2次キャッシュ管理テーブル131の一例を示す。2次キャッシュ管理テーブル131は、インデックスID1311毎にキャッシュラインに対応するライン番号1312を有する。本実施形態では図2で示したように、2次キャッシュメモリ142を4ウェイ・セットアソシエイティブで構成したので、ライン番号1312には、キャッシュラインに対応する0〜3のエントリに加えて、実行できなかったプリフェッチ命令を格納する「処理待ち」のエントリを備える。「処理待ち」のエントリの数は、2次キャッシュメモリ142の大きさなどに応じて適宜決定されるもので、図4の例では、各インデックスID1311毎に2つの「処理待ち」のエントリを備える。
そして、ライン番号1312に対応するエントリには、図3のプリフェッチ命令の実行コード310で示したメモリアドレス、メモリアドレス最大値、共有カウント、ワンタイムフラグを格納するため、メモリアドレス1313と、メモリアドレス最大値1314と、共有カウント1315及びワンタイムフラグ1316が設定される。
ここで、「処理待ち」のエントリは、プリフェッチ命令の予約を行うもので、キャッシュラインが空いたときに、「処理待ち」のプリフェッチ命令を実行して2次キャッシュメモリ142にデータを格納するものである。「処理待ち」のエントリのプリフェッチ命令が実行されると、メモリアドレス1313〜ワンタイムフラグ1316までの各フィールドはクリアされる。
図4において、例えば、インデックスID1311が0でキャッシュラインが1のエントリには、アドレス=0x1000100のデータが格納され、メモリアドレス最大値1314は0x2000000であり、ワンタイムフラグ1316は「On」で、共有カウント1315は「3」に設定されている。つまり、制御ユニット10と演算ユニット11、12の3個の演算コアがそれぞれ参照するまで当該エントリのデータは2次キャッシュメモリ142に保持されることを意味している。
プリフェッチ制御部132は、ワンタイムフラグ1316が「On」のエントリについてアクセスが行われる度に、共有カウント1315を減算する。そして、ワンタイムフラグ1316が「On」で共有カウント1315が「0」になると、これ以上参照されることはないので、該当するキャッシュラインはキャッシュアウト可能となる。なお、上述のように、共有カウント1315の初期値は1以上に設定される。
<プリフェッチの動作>
次に、制御ユニット10でプリフェッチ命令を実行したときの各部の動作について、以下に説明する。
制御ユニット10は、ユーザプログラム31に含まれるプリフェッチ命令を実行すると、図5に示すRegister_Prefetch命令をプリフェッチユニット13に送信する。図5において、Register_Prefetch命令は、予め設定された命令コード1031と、参照する主記憶3のメモリアドレス1032と、ワンタイムフラグ1033と共有カウント1034(初期値は1以上)と、図2に示したキャッシュラインのインデックスID1421に格納されたデータ1424をキャッシュアウトさせる指標としてのメモリアドレス最大値(LastMemAddr)1035が含まれる。なお、図示はしないが発行した命令の順序を示すIDを付加しても良い。
制御ユニット10からプリフェッチ命令(Register_Prefetch命令)を受信したプリフェッチユニット13では、プリフェッチ制御部132で図6に示す制御を実行する。図6の処理は、プリフェッチ制御部132がRegister_Prefetch命令を受信する度に実行するフローチャートである。
まず、ステップS1で制御ユニット10からRegister_Prefetch命令を受信すると、ステップS2では当該Register_Prefetch命令が参照するアドレスに対応するインデックスID1311を決定し、2次キャッシュ管理テーブル131を参照して該当するインデックスID1311のキャッシュラインに空きがあるか否かを判定する。なお、参照するアドレスとインデックスID1311の関係は、2次キャッシュメモリ142のウェイ数に応じて決定される。本実施形態では4ウェイ・セットアソシエイティブであるので、主記憶3の全ブロックを4分割しておき、参照するアドレスの下位2ビットの値と各インデックスID1311を対応させることで、参照するアドレス(図5のメモリアドレス1032)に対応するインデックスID1311を求める。
そして、2次キャッシュ管理テーブル131から参照するアドレスに対応するインデックスID1311に空きがある場合にはステップS3の処理へ進み、空きがない場合にはステップS5の処理へ進む。
ステップS3では、2次キャッシュ管理テーブル131の該当インデックスID1311で空いているキャッシュラインに、受信したプリフェッチ命令の内容を書き込む。つまり、図5のメモリアドレス1032の値を2次キャッシュ管理テーブル131のメモリアドレス1313へ書き込み、図5のワンタイムフラグ1033,共有カウント1034,メモリアドレス最大値1035を2次キャッシュ管理テーブル131のワンタイムフラグ1316,共有カウント1315、メモリアドレス最大値1314へ書き込む。
次に、ステップS4では、2次キャッシュ制御部141に対してIssue_Prefetch命令を発行して処理を終了する。このIssue_Prefetch命令は、図7で示すように、Issue_Prefetch命令を示す命令コード1321と、メモリアドレス1322と、ワンタイムフラグ1323及び共有カウント1324から構成され、プリフェッチ制御部132が制御ユニット10から受信したRegister_Prefetch命令から抽出した値を設定したものである。
このIssue_Prefetch命令を受信した2次キャッシュ制御部141では、キャッシュラインに空きがあるので、後述するように、そのままプリフェッチ命令を実行することになる。
一方、該当するインデックスID1311にキャッシュラインの空きがない場合は、ステップS5で、当該Register_Prefetch命令が参照するメモリアドレス1032の値と、該当インデックスID1311の各キャッシュライン0〜3のメモリアドレス最大値1314を比較して、メモリアドレス最大値1314よりもRegister_Prefetch命令のメモリアドレス1032が大きいキャッシュラインを検索する。
2次キャッシュ管理テーブル131の該当インデックスID1311の各キャッシュライン0〜3のメモリアドレス最大値1314よりも参照するメモリアドレス1032の方が大きい場合にはステップS6へ進む。ステップS6では、該当インデックスID1311のキャッシュライン0〜3には参照するメモリアドレス1032のデータがなく、かつ、キャッシュライン0〜3が空いていないので、2次キャッシュ管理テーブル131の該当インデックスID1311に処理待ちとして登録する。この登録は、Register_Prefetch命令のメモリアドレス1032、ワンタイムフラグ1033、共有カウント1034及びメモリアドレス最大値1035を、2次キャッシュ管理テーブル131のメモリアドレス1313、ワンタイムフラグ1316、共有カウント1315、メモリアドレス最大値1314に設定する。
参照するメモリアドレス1032のインデックスID1311に、メモリアドレス最大値1314が参照するメモリアドレス1032以下のキャッシュライン0〜3があれば、ステップS7へ進む。
ステップS7では、参照するメモリアドレス1032≦メモリアドレス最大値1314となったキャッシュラインに対して、Register_Prefetch命令の内容のワンタイムフラグ1033と共有カウント1034を更新する。この場合、Register_Prefetch命令に指定されたメモリアドレス1032が、既にキャッシュメモリ142にキャッシュされているので、ロードの条件(ワンタイムフラグや共有カウント)のみを更新する。
次に、ステップS8では、2次キャッシュ制御部141に対して、図8に示すReplace_Prefetch命令を送信する。このRegister_Prefetch命令は、上記図7のIssue_Prefetch命令にキャッシュライン番号1325を加え、命令コード1321’にReplace_Prefetch命令の値を設定したものである。Replace_Prefetch命令を受信した2次キャッシュ制御部141は、2次キャッシュメモリ142の該当するキャッシュラインについて、共有カウント1422とワンタイムフラグ1423をReplace_Prefetch命令の値で更新する。
以上のように、プリフェッチ制御部132は、制御ユニット10からRegister_Prefetch命令を受信すると、該当インデックスID1311に空きキャッシュラインがあれば、2次キャッシュ管理テーブル131の該当インデックスID1311のキャッシュラインをRegister_Prefetch命令の内容に設定して、2次キャッシュ制御部141へIssue_Prefetch命令を送信する。
一方、空きキャッシュラインがない場合では、該当インデックスID1311の各キャッシュラインのメモリアドレス最大値1314よりも参照するメモリアドレス1032の比較結果に応じてプリフェッチ命令を処理待ちとして登録する。
参照するメモリアドレス1032の方が各キャッシュライン0〜3のメモリアドレス最大値1314より大きい場合には、参照するメモリアドレス1032が2次キャッシュメモリ142にキャッシュされていないので、処理待ちとして2次キャッシュ管理テーブル131へ登録する。
一方、参照するメモリアドレス1032が各キャッシュライン0〜3のメモリアドレス最大値1314以下の場合には、当該キャッシュラインに参照するメモリアドレス1032が含まれているので、共有カウントとワンタイムフラグを更新するように2次キャッシュ制御部141へ指令する。また、2次キャッシュ管理テーブル131の内容も更新しておく。
次に、プリフェッチユニット13からIssue_Prefetch命令を受信したときの2次キャッシュ制御部141の処理について図9のフローチャートを参照しながら説明する。この処理は、プリフェッチユニット13からIssue_Prefetch命令を受信する度に実行されるものである。
ステップS11では、Issue_Prefetch命令を受信して、S12では、Issue_Prefetch命令のメモリアドレス1322のデータを、主記憶3からブロック単位で読み込む。そして、このメモリアドレス1032に対応する2次キャッシュメモリ142のインデックスID1421のキャッシュラインを決定し、当該キャッシュラインのデータ1424に主記憶3から読み込んだデータを書き込む。
次に、ステップS13では、Issue_Prefetch命令に指定されたワンタイムフラグ1323と共有カウント1324を、2次キャッシュメモリ142のワンタイムフラグ1423と共有カウント1422に書き込む。また、2次キャッシュ制御部141は、Issue_Prefetch命令のメモリアドレス1322の値に基づいて、2次キャッシュメモリ142の該当インデックスID1421のキャッシュラインのタグ1420を更新する。
以上の処理により、空きができたキャッシュラインに新たなデータを先読みしておくことができる。
次に、制御ユニット10または演算ユニット11,12の演算コアから2次キャッシュ14にロード命令が発行されたときの2次キャッシュ制御部141の処理について、図10を参照しながら以下に説明する。図10は、各演算コアからロード命令を受信したときに2次キャッシュ制御部141が実行する処理の一例を示すフローチャートである。
ステップS20では、2次キャッシュ制御部141が制御ユニット10または演算ユニット11,12のいずれかの演算コアからロード命令を受信する。
ステップS21では、受信したロード命令で指定されたアドレスのデータが2次キャッシュメモリ142に存在するか否かを判定する。要求されたアドレスのデータが2次キャッシュメモリ142に存在する場合(キャッシュヒット)はステップS22の処理へ進み、存在しない場合(キャッシュミス)にはステップS26の処理へ進む。
キャッシュヒットした場合には、ステップS22で該当するキャッシュライン(図2のLINE0〜3)のインデックスID1421の共有カウント1422から「1」を減算する。このとき、該当インデックスID1311のキャッシュデータ1424を、ロード命令の発行元に返信する。ロード命令の発行元では、キャッシュヒットしたデータ1424で処理を続行する。
次に、ステップS23では、キャッシュヒットした該当インデックスID1421の共有カウント1422が「0」で、かつワンタイムフラグ1423が「On」であるか否かを判定する。キャッシュヒットしたインデックスID1421の共有カウント1422が「0」でワンタイムフラグ1423が「On」であれば、次に当該インデックスID1421のキャッシュデータ1424を参照する命令は現時点で存在しないので、キャッシュアウトの条件を満たすことになる。キャッシュアウトの条件が成立した場合にはステップS24へ進み、成立しない場合には処理を終了する。
ステップS24では、2次キャッシュ制御部141が、当該インデックスID1421のデータ1424をキャッシュアウトする。このキャッシュアウトの処理は、データ1424が更新されていれば主記憶3の該当アドレスにこのデータ1424を書き戻す。そして、該当インデックスID1421のデータ1424、共有カウント1422、ワンタイムフラグ1423をキャッシュメモリ142からクリアする。
次に、ステップS25では、2次キャッシュ制御部141がキャッシュアウトしたキャッシュラインの番号(0〜3)と、インデックスID1421をRequest_Prefetch命令としてプリフェッチ制御部132に通知する。
このRequest_Prefetch命令は、図11で示すように、プリフェッチ制御部132にキャッシュラインに空きが発生したことを通知するRequest_Prefetch命令のコード1410と、空きが発生したキャッシュライン番号1412と、インデックスID1411が含まれる。
上記S21でキャッシュミスとなった場合には、ステップS26に進んで主記憶3からロード命令で指定されたアドレスのデータをキャッシュメモリ142に読み込む。キャッシュメモリ142に読み込んだデータを格納するキャッシュラインに空きがなければ、前記従来例と同様にLRU方式やラウンドロビンなどの公知の手法により、キャッシュアウトを実施してキャッシュミスしたデータを2次キャッシュメモリ142へ格納する。このとき、2次キャッシュ制御部141は、プリフェッチ制御部132に対してキャッシュインしたキャッシュラインの番号と、インデックスIDを通知する。この通知を受けたプリフェッチ制御部132は、受信したインデックスIDとキャッシュライン番号に対応する2次キャッシュ管理テーブル131のエントリを更新する。このキャッシュミスの場合は、共有カウント1315、ワンタイムフラグ1316は設定できないため、ワンタイムフラグ1316を「Off」とし、共有カウント1315には所定の初期値(例えば、「1」)を設定しておく。
以上の処理により、2次キャッシュ制御部141は、キャッシュヒットしたデータ1424のうち、ワンタイムフラグ1423が「On」で共有カウント1422が「0」となったエントリは、現時点で参照される予定がないのでキャッシュアウトを実施することができる。そして、2次キャッシュ制御部141はプリフェッチ制御部132に対してキャッシュラインに空きが生じたことをRequest_Prefetch命令によって通知することができる。
次に、2次キャッシュ制御部141からRequest_Prefetch命令を受信した場合のプリフェッチ制御部132の処理について図12を参照しながら以下に説明する。図12はプリフェッチ制御部132がRequest_Prefetch命令を受信したときに実行する処理の一例を示すフローチャートである。
ステップS30では、プリフェッチユニット13のプリフェッチ制御部132が2次キャッシュ制御部141からRequest_Prefetch命令を受信する。プリフェッチ制御部132は、Request_Prefetch命令から空きが発生したキャッシュライン番号1412と、インデックスID1411を取得する。
ステップS31では、プリフェッチ制御部132が図4に示した2次キャッシュ管理テーブル131を参照し、取得したインデックスID1411に「処理待ち」となっているプリフェッチ命令があるか否かを判定する。
「処理待ち」に予約されているプリフェッチ命令があればステップS32へ進み、「処理待ち」のプリフェッチ命令がなければ処理を終了する。
ステップS32では、Request_Prefetch命令から取得したキャッシュライン番号とインデックスIDに対応する2次キャッシュ管理テーブル131のインデックスID1311とライン番号1312のエントリに、「処理待ち」のプリフェッチ命令に設定されているメモリアドレス1313と、メモリアドレス最大値1314と、共有カウント1315及びワンタイムフラグ1316を登録する。
次に、ステップS33では、処理待ちからRequest_Prefetch命令のキャッシュライン番号とインデックスIDに登録したメモリアドレス1313、共有カウント1315及びワンタイムフラグ1316の内容で、図7に示したIssue_Prefetch命令を生成し、2次キャッシュ制御部141へ送信する。
このIssue_Prefetch命令を受信した2次キャッシュ制御部141は、上記図9の処理を実行して、キャッシュアウトにより空きとなったキャッシュラインのインデックスID1421に、指定されたアドレスのデータを主記憶3から読み込んで先読みを完了する。
以上のように、プリフェッチユニット13は、制御ユニット10からプリフェッチ命令を受け付けると、2次キャッシュ管理テーブル131を参照してプリフェッチを要求されたアドレスのキャッシュラインのインデックスIDに空きがなければ、プリフェッチの要求を処理待ちのエントリに投入して、予約する。
2次キャッシュ制御部141は、演算コアからロード命令を受け付ける度に、キャッシュメモリ142の共有カウント1422を減算していき、共有カウント1422が「0」になり、かつ、ワンタイムフラグ1423が「On」であれば、当該キャッシュラインのインデックスID1421のデータ1424をキャッシュアウトする。そして、キャッシュアウトによって空きが生じたことをプリフェッチ制御部132に通知する(Request_Prefetch命令)。
Request_Prefetch命令を受信したプリフェッチ制御部は、空きが生じた2次キャッシュメモリ142のインデックスIDに対応する2次キャッシュ管理テーブル131を参照し、「処理待ち」のエントリに予約されたプリフェッチ命令を検索する。2次キャッシュ管理テーブル131の該当するインデックスID1311に「処理待ち」として予約されたプリフェッチ命令があれば、2次キャッシュ制御部141に対して「処理待ち」のプリフェッチ命令をIssue_Prefetch命令として発行する。これにより、2次キャッシュメモリ142には、空きが生じたキャッシュラインに新たなデータ1424が先読みされる。
プリフェッチ制御部132は、2次キャッシュ管理テーブル131でIssue_Prefetch命令を発行した「処理待ち」の内容を、プリフェッチ命令を発行したライン番号1312に移動する。
このように、制御ユニット10からプリフェッチ命令があったときに、キャッシュラインに空きがなければ、「処理待ち」として予約しておくことで、前記従来例のように、2次キャッシュメモリ142にキャッシュされていたデータをキャッシュアウトさせるのを防止できる。
そして、2次キャッシュ制御部141では、各演算コアが読み込む回数を共有カウント1422として設定し、この共有カウント1422でキャッシュアウトを制御可能なデータにはワンタイムフラグ1423を「On」に設定しておく。そして、各演算コアからロード命令がある度に減算していくことで、共有カウント1422が0で、かつ、ワンタイムフラグ1423が「On」のキャッシュデータをキャッシュアウトさせることで、不要となったキャッシュデータのみをキャッシュアウトすることができる。
その後、プリフェッチ制御部132の2次キャッシュ管理テーブル131で「処理待ち」のエントリに予約されていたプリフェッチ命令を実行することで、2次キャッシュメモリ142から必要なデータがキャッシュアウトされるのを防ぎながら必要なデータを確実にキャッシュインさせることが可能となる。
また、2次キャッシュメモリ142にプリフェッチするデータの属性に、一つの演算コアが読み込む回数を共有カウント1422としてプリフェッチ命令から設定し、共有カウント1422を有効にするフラグをワンタイムフラグ1423としてプリフェッチ命令から設定することで、各演算コアが必要な回数だけ読み込んだ後には、即座にキャッシュアウトすることが可能となる。これにより、2次キャッシュメモリ142に不要となったデータが保持され続けるのを防ぐことが可能となる。
そして、ユーザプログラム31にプリフェッチ命令を埋め込む際に、コンパイラやソースレベルで共有カウントとワンタイムフラグを指定しておき、このユーザプログラム31の実行時には、プロセッサ1のプリフェッチ制御部132と2次キャッシュ制御部141で、共有カウントとワンタイムフラグによりキャッシュアウトとキャッシュインの制御を行うことができる。これにより、ユーザプログラム31を作成する際には、前記従来例のように、プリフェッチ命令を挿入する際にプロセッサの挙動を考慮する必要がなくなって、ユーザプログラム31の作成に要する労力を大幅に低減することが可能となる。
さらに、共有カウント1422は、プロセッサ1の演算コアが読み込むべき回数の和、換言すれば、一つのキャッシュデータを共有する演算コアの数としたので、複数の演算コアを備えたプロセッサ1が並列的に処理を行うときなどでは、一回キャッシュインしたデータのヒット率を向上させることができ、マルチコアプロセッサにおいても演算コアの処理速度の向上を図ることが可能となる。
また、本発明では、前記従来例のように演算コアが読み込もうとするデータがハードウェアで提供するプリフェッチ機能でキャッシュアウトしてしまうのを抑制できるので、ストライドやアドレスが不連続なアクセスに対してプリフェッチ命令を有効に利用することが可能となって、演算処理の速度を向上させることが可能となるのである。
なお、上記実施形態においてプロセッサ1をヘテロジニアス・マルチコアプロセッサで構成した例を示したが、ホモジニアス・マルチコアプロセッサに適用しても良い。
また、上記実施形態において、制御ユニット10とプリフェッチユニット13を独立した構成としたが、図示はしないが、制御ユニット10内にプリフェッチユニット13を配置しても良い。
また、上記実施形態において、プリフェッチユニット13は2次キャッシュ14を制御する例を示したが、3次キャッシュを制御するようにしても良い。
また、上記実施形態においては、2次キャッシュ制御部141は、主記憶3からデータの先読みを行い、また、キャッシュアウトしたデータを主記憶3に書き戻す例を示したが、図示しないストレージ装置や他の計算機あるいは他の計算機と共有するメモリとの間で、データの読み込みと書き戻しを行うようにしても良い。
以上のように、本発明はプリフェッチ命令を実行するプロセッサに適用することができ、特にひとつのプロセッサ内に複数の演算コアを備えたマルチコアのプロセッサに適用することができる。
本発明を適用する計算機システムのブロック図。 2次キャッシュメモリの構成を示すブロック図。 ユーザプログラムに含まれるプリフェッチ命令のフォーマットの一例を示す説明図。 プリフェッチユニットで管理される2次キャッシュ管理テーブルの一例を示す説明図。 制御ユニットがプリフェッチ制御部に対して発行するRequest_Prefetch命令のフォーマットの一例を示す説明図。 プリフェッチユニットのプリフェッチ制御部で行われる処理の一例を示すフローチャートで、制御ユニットからRequest_Prefetch命令を受信したときに実行する処理を示す。 プリフェッチ制御部が2次キャッシュ制御部に対して発行するIssue_Prefetch命令の一例を示す説明図。 プリフェッチ制御部が2次キャッシュ制御部に対して発行するReplace命令の一例を示す説明図。 2次キャッシュ制御部で行われる処理の一例を示し、プリフェッチ制御部からプリフェッチ命令を受信したときに実行する処理のフローチャート。 2次キャッシュ制御部で行われる処理の一例を示し、演算コアからロード命令を受信したときに実行する処理のフローチャート。 2次キャッシュ制御部がプリフェッチ制御部に対して発行するRequest_Prefetch命令のフォーマットの一例を示す説明図。 プリフェッチ制御部で行われる処理の一例を示すフローチャートで、2次キャッシュ制御部からRequest_Prefetch命令を受信したときに実行する処理を示す。
符号の説明
1 プロセッサ
2 バス
3 主記憶
10 制御ユニット
11,12 演算ユニット
13 プリフェッチユニット
14 2次キャッシュ
131 2次キャッシュ管理テーブル
132 プリフェッチ制御部
141 2次キャッシュ制御部
142 2次キャッシュメモリ
1315 共有カウント
1316 ワンタイムフラグ

Claims (14)

  1. プリフェッチ命令またはロード命令を含むプログラムと、前記プログラムで用いるデータとを格納する主記憶と、
    前記主記憶から前記プログラムとデータを読み込んで実行するプロセッサと、を備えた計算システムにおいて、
    前記プロセッサは、
    前記プログラムを実行する複数の演算コアと、
    前記主記憶上のデータを所定のデータ格納単位毎に格納する共有キャッシュと、
    前記演算コアからのプリフェッチの要求に基づいて、前記主記憶から共有キャッシュへデータを先読みするプリフェッチユニットと、を備え、
    前記プリフェッチユニットは、
    前記共有キャッシュのデータ格納単位の位置毎に記憶状態を保持する領域と、前記プリフェッチの要求を予約する領域とを備えた共有キャッシュ管理情報と、
    前記共有キャッシュの記憶状態に基づいて、前記予約したプリフェッチの要求または前記演算コアからのプリフェッチの要求を前記共有キャッシュへ指令するプリフェッチ制御部と、を備え、
    前記プリフェッチ命令は、
    前記主記憶上のデータのアドレスと、前記データを共有する2以上の前記演算コアの数を示す数値と、を含み、
    前記共有キャッシュは、
    前記アドレスに対応するデータ格納単位毎に、主記憶のデータと前記数値を格納するデータ格納領域と、
    前記プリフェッチ制御部から指令されたプリフェッチの要求に基づいて、前記主記憶から前記アドレスのデータを読み込んで、前記アドレスに対応するデータ格納単位へ前記データを格納する共有キャッシュ制御部と、を有し、
    前記演算コアは、
    前記ロード命令を実行したときには、前記共有キャッシュ制御部に対して当該ロード命令に含まれるアドレスの読み出しを指令し、
    前記共有キャッシュ制御部は、
    前記プリフェッチ制御部から指令されたプリフェッチの要求に含まれる前記数値を、前記読み込んだデータに対応付けて前記データ格納領域に格納し、
    前記ロード命令に含まれるアドレスのデータを前記データ格納領域に格納している場合には、当該データを前記演算コアに転送し、前記データ格納領域のデータに対応する前記数値を減算する読み出し部と、
    前記数値が所定の値となったときには、前記データ格納領域のデータをキャッシュアウトする更新部と、
    を有することを特徴とする計算機システム。
  2. 前記プリフェッチ制御部は、
    前記演算コアからのプリフェッチの要求があったときに、前記共有キャッシュ管理情報のデータ格納単位に空きがなければ、前記演算コアからのプリフェッチの要求を前記共有キャッシュ管理情報に予約し、前記共有キャッシュ管理情報のデータ格納単位に空きがあれば、前記プリフェッチの要求を前記共有キャッシュに指令することを特徴とする請求項1に記載の計算機システム。
  3. 前記共有キャッシュ制御部は、
    前記更新部が前記キャッシュアウトを行ったときには、前記キャッシュアウトしたデータ格納単位の位置を前記プリフェッチ制御部に通知し、
    前記プリフェッチ制御部は、
    前記通知された前記データ格納単位の位置に対応する共有キャッシュ管理情報を、前記予約したプリフェッチの要求で更新し、当該プリフェッチの要求を前記共有キャッシュ制御部に指令することを特徴とする請求項1に記載の計算機システム。
  4. 前記演算コアは、
    前記プログラムを読み込んで第2の演算ユニットに命令を分配する第1の演算ユニットと、
    前記第1の演算ユニットから分配された命令を実行する第2の演算コアと、を有し、
    前記第1の演算ユニットは、プリフェッチ命令を実行したときには前記プリフェッチ制御部へプリフェッチの要求を指令し、
    前記第2の演算ユニットは、前記ロード命令を実行したときには前記共有キャッシュ制御部へデータの読み込みを指令することを特徴とする請求項1に記載の計算機システム。
  5. 前記演算コアが読み込む回数は、前記第1の演算ユニットまたは第2の演算ユニットのうち、前記データを読み込む演算コアの数であることを特徴とする請求項4に記載の計算機システム。
  6. 前記演算コアが読み込む回数は、前記データを読み込む演算コアの数であって、
    前記プリフェッチ命令は、
    前記主記憶上のデータのアドレスと、当該データを前記演算コアが読み込む回数と、前記回数の使用を許可するフラグとを含み、
    前記共有キャッシュ制御部は、
    前記プリフェッチ制御部から指令されたプリフェッチの要求に含まれる前記回数と前記フラグを、前記読み込んだデータに対応付けて前記データ格納領域に格納し、
    前記読み出し部は、
    前記ロード命令に含まれるアドレスのデータを前記共有キャッシュのデータ格納領域に格納している場合には、当該データを前記演算コアに転送し、前記フラグが所定の値のときにはデータ格納領域のデータに対応する前記回数を減算することを特徴とする請求項1に記載の計算機システム。
  7. 前記演算コアが読み込む回数は、前記データを読み込む演算コアの数であって、
    前記プリフェッチ命令は、
    前記主記憶上のデータのアドレスと、当該データを前記演算コアが読み込む回数と、当該データを含むデータ格納単位の終端のアドレスと、を含み、
    前記共有キャッシュ管理情報は、
    前記共有キャッシュのデータ格納単位の位置毎に、前記アドレスと前記終端のアドレスを格納し、
    前記プリフェッチ制御部は、
    前記演算コアからのプリフェッチの要求があったときに、前記共有キャッシュ管理情報のデータ格納単位に空きがなく、かつ、前記共有キャッシュ管理情報の終端のアドレスが、前記アドレスよりも大きい場合には、前記共有キャッシュ制御部に対して当該アドレスに対応するデータ格納単位の位置に対応する前記回数を、前記プリフェッチの要求に含まれる回数で更新するように指令することを特徴とする請求項1に記載の計算機システム。
  8. 複数の演算コアと主記憶と共有キャッシュを備えて、プリフェッチ命令またはロード命令を含むプログラムとデータを読み込んで実行するプロセッサの制御方法であって、
    前記プロセッサの演算コアが、前記プリフェッチ命令を実行して前記プロセッサのプリフェッチユニットへプリフェッチの要求を指令する処理と、
    前記プリフェッチユニットが、前記共有キャッシュのデータ格納単位の位置毎に記憶状態を保持する領域と前記プリフェッチの要求を予約する領域とを含む共有キャッシュ管理情報から、前記演算コアからのプリフェッチの要求に対応するデータ格納単位の位置で記憶状態を参照する処理と、
    前記プリフェッチユニットが共有キャッシュの記憶状態に基づいて、前記プリフェッチの要求を予約するか否かを判定する処理と、
    前記判定結果が予約の場合には、前記プリフェッチの要求を前記共有キャッシュ管理情報に登録し、前記判定結果が予約でない場合には前記プリフェッチの要求を前記共有キャッシュへ指令する処理と、を含み、
    前記プリフェッチ命令は、
    前記主記憶上のデータのアドレスと、前記データを共有する2以上の前記演算コアの数を示す数値と、を含み、
    前記共有キャッシュが、前記プリフェッチユニットから指令されたプリフェッチの要求に基づいて、前記主記憶から前記アドレスのデータを読み込んで、前記共有キャッシュの前記アドレスに対応する位置のデータ格納単位毎に予め設定されたデータ格納領域へ前記データを格納する処理と、
    前記演算コアが、前記ロード命令を実行したときには、前記共有キャッシュに対して当該ロード命令に含まれるアドレスの読み出しを指令する処理と、
    前記共有キャッシュが、前記プリフェッチユニットから指令されたプリフェッチの要求に含まれる前記数値を、前記読み込んだデータに対応付けて前記データ格納領域に格納する処理と、
    前記共有キャッシュは、前記演算コアから指令されたロード命令に含まれるアドレスのデータを前記共有キャッシュのデータ格納領域に格納している場合には、当該データを前記演算コアに転送し、前記データ格納領域のデータに対応する前記数値を減算する処理と、
    前記数値が所定の値となったときには、前記共有キャッシュが前記データ格納領域のデータをキャッシュアウトする処理と、
    をさらに含むことを特徴とするプロセッサの制御方法。
  9. 前記プリフェッチの要求を予約するか否かを判定する処理は、
    前記演算コアからのプリフェッチの要求があったときに、前記共有キャッシュ管理情報のデータ格納単位に空きがなければ、前記演算コアからのプリフェッチの要求を前記共有キャッシュ管理情報に予約することを判定し、前記共有キャッシュ管理情報のデータ格納単位に空きがあれば、前記プリフェッチの要求を前記共有キャッシュに指令する判定を行うことを特徴とする請求項8に記載のプロセッサの制御方法。
  10. 前記共有キャッシュが、前記キャッシュアウトを行ったときに、前記キャッシュアウトしたデータ格納単位の位置を前記プリフェッチユニットに通知する処理と、
    前記プリフェッチユニットが、前記通知された前記データ格納単位の位置に対応する前記共有キャッシュ管理情報を、前記予約したプリフェッチの要求で更新し、当該プリフェッチの要求を前記共有キャッシュに指令する処理と、
    をさらに含むことを特徴とする請求項8に記載のプロセッサの制御方法。
  11. 前記演算コアは、
    前記プログラムを読み込んで第2の演算ユニットに命令を分配する第1の演算ユニットと、
    前記第1の演算ユニットから分配された命令を実行する第2の演算コアと、を含み、
    前記第1の演算ユニットが、プリフェッチ命令を実行したときには前記プリフェッチユニットへプリフェッチの要求を指令する処理と、
    前記第2の演算ユニットが、前記ロード命令を実行したときには前記共有キャッシュへデータの読み込みを指令する処理と、
    をさらに含むことを特徴とする請求項8に記載のプロセッサの制御方法。
  12. 前記演算コアが読み込む回数は、前記第1の演算ユニットまたは第2の演算ユニットのうち、前記データを読み込む演算コアの数であることを特徴とする請求項11に記載のプロセッサの制御方法。
  13. 前記演算コアが読み込む回数は、前記データを読み込む演算コアの数であって、
    前記プリフェッチ命令は、
    前記主記憶上のデータのアドレスと、当該データを前記演算コアが読み込む回数と、前記回数の使用を許可するフラグとを含み、
    前記共有キャッシュが、前記プリフェッチユニットから指令されたプリフェッチの要求に含まれる前記回数と前記フラグを、前記読み込んだデータに対応付けて前記データ格納領域に格納する処理と、
    前記共有キャッシュが、前記ロード命令に含まれるアドレスのデータを前記共有キャッシュのデータ格納領域に格納している場合には、当該データを前記演算コアに転送し、前記フラグが所定の値のときにはデータ格納領域のデータに対応する前記回数を減算する処理と、
    をさらに含むことを特徴とする請求項8に記載のプロセッサの制御方法。
  14. 前記演算コアが読み込む回数は、前記データを読み込む演算コアの数であって、
    前記プリフェッチ命令は、
    前記主記憶上のデータのアドレスと、当該データを前記演算コアが読み込む回数と、当該データを含むデータ格納単位の終端のアドレスと、を含み、
    前記プリフェッチユニットが、前記共有キャッシュ管理情報のデータ格納単位の位置毎に、前記アドレスと前記終端のアドレスを格納する処理と、
    前記プリフェッチユニットが、前記演算コアからのプリフェッチの要求があったときに、前記共有キャッシュ管理情報のデータ格納単位に空きがなく、かつ、前記共有キャッシュ管理情報の終端のアドレスが、前記アドレスよりも大きい場合には、前記共有キャッシュに対して当該アドレスに対応するデータ格納単位の位置に対応する前記回数を、前記プリフェッチの要求に含まれる回数で更新するように指令することを特徴とする請求項8に記載のプロセッサの制御方法。
JP2006232287A 2006-08-29 2006-08-29 計算機システム及びプロセッサの制御方法 Expired - Fee Related JP4945200B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2006232287A JP4945200B2 (ja) 2006-08-29 2006-08-29 計算機システム及びプロセッサの制御方法
US11/705,410 US7895399B2 (en) 2006-08-29 2007-02-13 Computer system and control method for controlling processor execution of a prefetech command

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006232287A JP4945200B2 (ja) 2006-08-29 2006-08-29 計算機システム及びプロセッサの制御方法

Publications (2)

Publication Number Publication Date
JP2008059057A JP2008059057A (ja) 2008-03-13
JP4945200B2 true JP4945200B2 (ja) 2012-06-06

Family

ID=39153400

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006232287A Expired - Fee Related JP4945200B2 (ja) 2006-08-29 2006-08-29 計算機システム及びプロセッサの制御方法

Country Status (2)

Country Link
US (1) US7895399B2 (ja)
JP (1) JP4945200B2 (ja)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5245260B2 (ja) * 2007-02-27 2013-07-24 富士通セミコンダクター株式会社 ファイル処理プログラム、ファイル処理方法、ファイル処理装置および関数プログラム
JP5012628B2 (ja) * 2008-04-04 2012-08-29 日本電気株式会社 メモリデータベース、メモリデータベースシステム及びメモリデータベース更新方法
JP5176663B2 (ja) * 2008-04-11 2013-04-03 日本電気株式会社 データ処理装置、データ処理方法、及びプログラム
US8200905B2 (en) 2008-08-14 2012-06-12 International Business Machines Corporation Effective prefetching with multiple processors and threads
JP2012508938A (ja) * 2008-11-14 2012-04-12 インテル・コーポレーション セキュアなアプリケーション実行方法および装置
JP2013222434A (ja) 2012-04-19 2013-10-28 Nec Corp キャッシュ制御装置、キャッシュ制御方法、及びそのプログラム
JP2014115851A (ja) * 2012-12-10 2014-06-26 Canon Inc データ処理装置及びその制御方法
US9141550B2 (en) 2013-03-05 2015-09-22 International Business Machines Corporation Specific prefetch algorithm for a chip having a parent core and a scout core
US9792120B2 (en) 2013-03-05 2017-10-17 International Business Machines Corporation Anticipated prefetching for a parent core in a multi-core chip
US9135180B2 (en) 2013-03-05 2015-09-15 International Business Machines Corporation Prefetching for multiple parent cores in a multi-core chip
US9116816B2 (en) 2013-03-05 2015-08-25 International Business Machines Corporation Prefetching for a parent core in a multi-core chip
JP2015118638A (ja) * 2013-12-19 2015-06-25 キヤノン株式会社 情報処理装置及びその制御方法、プログラム
JP6252348B2 (ja) * 2014-05-14 2017-12-27 富士通株式会社 演算処理装置および演算処理装置の制御方法
JP6464980B2 (ja) * 2015-10-05 2019-02-06 富士通株式会社 プログラム、情報処理装置及び情報処理方法
JP7139719B2 (ja) * 2018-06-26 2022-09-21 富士通株式会社 情報処理装置、演算処理装置及び情報処理装置の制御方法
CN112799975B (zh) * 2019-11-13 2026-04-28 深圳市中兴微电子技术有限公司 数据缓存装置及方法、存储器
US11372763B2 (en) 2020-07-14 2022-06-28 Micron Technology, Inc. Prefetch for data interface bridge
US11372762B2 (en) * 2020-07-14 2022-06-28 Micron Technology, Inc. Prefetch buffer of memory sub-system
JP7456010B2 (ja) * 2020-12-28 2024-03-26 キオクシア株式会社 メモリシステム
CN121166322A (zh) * 2025-11-19 2025-12-19 上海壁仞科技股份有限公司 用于执行核函数的方法、人工智能芯片、计算装置、介质和程序产品

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5802569A (en) * 1996-04-22 1998-09-01 International Business Machines Corp. Computer system having cache prefetching amount based on CPU request types
US7039766B1 (en) * 2000-10-12 2006-05-02 International Business Machines Corporation Prescheduling sequential data prefetches in a preexisting LRU cache
JP4067887B2 (ja) * 2002-06-28 2008-03-26 富士通株式会社 プリフェッチを行う演算処理装置、情報処理装置及びそれらの制御方法
JP4507563B2 (ja) 2003-11-10 2010-07-21 株式会社日立製作所 マルチプロセッサシステム
JP4532931B2 (ja) 2004-02-25 2010-08-25 株式会社日立製作所 プロセッサ、および、プリフェッチ制御方法
JP4212521B2 (ja) * 2004-06-30 2009-01-21 株式会社東芝 先読み制御装置、プロセッサの一時記憶装置へデータの先読みを制御する先読み制御方法およびプログラム
US7500056B2 (en) * 2004-07-21 2009-03-03 Hewlett-Packard Development Company, L.P. System and method to facilitate reset in a computer system
US7246203B2 (en) * 2004-11-19 2007-07-17 Motorola, Inc. Queuing cache for vectors with elements in predictable order
WO2007099582A1 (ja) * 2006-02-28 2007-09-07 Fujitsu Limited プリフェッチ制御装置

Also Published As

Publication number Publication date
US20080059715A1 (en) 2008-03-06
US7895399B2 (en) 2011-02-22
JP2008059057A (ja) 2008-03-13

Similar Documents

Publication Publication Date Title
US7895399B2 (en) Computer system and control method for controlling processor execution of a prefetech command
KR101639672B1 (ko) 무한 트랜잭션 메모리 시스템 및 그 동작 방법
US6957304B2 (en) Runahead allocation protection (RAP)
US7934061B2 (en) Methods and arrangements to manage on-chip memory to reduce memory latency
KR102369500B1 (ko) 데이터 처리장치에서의 적응형 예비 인출
US6219760B1 (en) Cache including a prefetch way for storing cache lines and configured to move a prefetched cache line to a non-prefetch way upon access to the prefetched cache line
US20090106499A1 (en) Processor with prefetch function
EP1066566B1 (en) Shared cache structure for temporal and non-temporal instructions and corresponding method
US7073030B2 (en) Method and apparatus providing non level one information caching using prefetch to increase a hit ratio
US6269427B1 (en) Multiple load miss handling in a cache memory system
US9390026B2 (en) Synchronizing access to data in shared memory
US8255591B2 (en) Method and system for managing cache injection in a multiprocessor system
US20040049641A1 (en) System and method for controlling prefetching
US20110093687A1 (en) Managing multiple speculative assist threads at differing cache levels
US8190825B2 (en) Arithmetic processing apparatus and method of controlling the same
US20090055588A1 (en) Performing Useful Computations While Waiting for a Line in a System with a Software Implemented Cache
CN113407119A (zh) 数据预取方法、数据预取装置、处理器
US9003123B2 (en) Data processing apparatus and method for reducing storage requirements for temporary storage of data
CN101546293B (zh) 缓存控制装置、信息处理装置和缓存控制方法
US11687460B2 (en) Network cache injection for coherent GPUs
CN1985245A (zh) 在小型高速缓存系统中禁止对原子保留行的回写
US20080301324A1 (en) Processor device and instruction processing method
JP4504134B2 (ja) システム制御装置、投機フェッチ方法および情報処理装置
US20010032297A1 (en) Cache memory apparatus and data processing system
JP2009093559A (ja) プロセッサ、情報処理装置、プロセッサのキャッシュ制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20081031

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110830

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111024

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120221

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120305

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150309

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees