JP6119523B2 - 演算処理装置、演算処理装置の制御方法及びプログラム - Google Patents

演算処理装置、演算処理装置の制御方法及びプログラム Download PDF

Info

Publication number
JP6119523B2
JP6119523B2 JP2013195562A JP2013195562A JP6119523B2 JP 6119523 B2 JP6119523 B2 JP 6119523B2 JP 2013195562 A JP2013195562 A JP 2013195562A JP 2013195562 A JP2013195562 A JP 2013195562A JP 6119523 B2 JP6119523 B2 JP 6119523B2
Authority
JP
Japan
Prior art keywords
cache
instruction
data
memory
prefetch
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.)
Active
Application number
JP2013195562A
Other languages
English (en)
Other versions
JP2015060529A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013195562A priority Critical patent/JP6119523B2/ja
Priority to US14/447,117 priority patent/US20150089149A1/en
Publication of JP2015060529A publication Critical patent/JP2015060529A/ja
Application granted granted Critical
Publication of JP6119523B2 publication Critical patent/JP6119523B2/ja
Active 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/602Details relating to cache prefetching

Landscapes

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

Description

本発明は、演算処理装置、演算処理装置の制御方法及びプログラムに関する。
予めメインメモリからキャッシュメモリへデータを転送するように指示するプリフェッチ命令を動的に命令列中に挿入して実行する演算処理装置が知られている(例えば、特許文献1参照)。プリフェッチ対象選択手段は、キャッシュミスを起こす命令のうちプリフェッチ処理の対象とすべき命令を選択する。アドレス予測手段は、プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令の実行時におけるメモリアクセスアドレスを予測する。プリフェッチ命令挿入位置決定手段は、プリフェッチ対象選択手段によってプリフェッチ処理の対象とされた命令に対応するプリフェッチ命令の命令列中への挿入位置を決定する。プリフェッチ命令挿入手段は、アドレス予測手段によって予測されたメモリアクセスアドレスをオペランドに有するプリフェッチ命令を、プリフェッチ命令挿入位置決定手段によって決定された挿入位置に挿入する。
また、動き補償方式を用いる動画像データ復号装置が知られている(例えば、特許文献2参照)。キャッシュメモリは、画像データを一時的に格納する。参照マクロブロック位置決定手段は、符号化ビットストリームを解析して得られる動きベクトルに基づいて、復号対象マクロブロックに対応する参照フレーム上の参照マクロブロックの位置を決定する。プリロードアドレス指定手段は、参照マクロブロックのデータがキャッシュメモリに格納されていない時に、参照マクロブロックがキャッシュライン境界を含んでいるかを判定し、含んでいる場合にキャッシュライン境界の位置を参照マクロブロックのデータを格納するメモリからのデータプリロード先頭アドレスとして指定する。
また、プロセッサ及び主記憶装置に接続されるキャッシュメモリが知られている(例えば、特許文献3参照)。データアレイは、主記憶装置が保存するデータのコピーをライン単位に保持する。メモリ制御手段は、主記憶装置からデータを読み出し、データのコピーをデータアレイの各ラインに書き込む。制御情報メモリは、各ラインに保持されるデータのコピーを管理する管理情報と、各ラインに保持されたデータのコピーの使用状況を示す使用情報とを保持する。キャッシュ制御手段は、プロセッサからの要求に応じて、データのコピーがデータアレイに保持されているかを管理情報に基づいて判断し、保持されている場合、データアレイからデータを読み出し、保持されていない場合、主記憶装置からデータを読み出すことをメモリ制御手段に指示する。プリフェッチ制御手段は、使用情報に基づいて、メモリ制御手段がプリフェッチするプリフェッチライン数を決定する。メモリ制御手段は、キャッシュ制御手段からの指示に応じて主記憶装置からデータを読み出すときに、プリフェッチライン数に従って、プリフェッチを行う。
また、動的タグ照合回路が知られている(例えば特許文献4参照)。アドレス比較回路は、第1のアドレス信号と第2のアドレス信号を受信して、第1のアドレス信号が、第2のアドレス信号と異なる場合、アドレス比較回路の出力として、アドレス・ミス信号を生成する。強制ミス回路は、第1のアドレス信号が、第2のアドレス信号と異なるか否かに関係なく、第1のアドレス信号と第2のアドレス信号との間にミスを強制する少なくとも1つの強制ミス入力信号を受信すると、強制ミス回路の出力として、強制ミス信号を生成する。強制ミス回路、及びアドレス比較回路が、それぞれの出力を互いに同時に発生するように、強制ミス回路は、アドレス比較回路がアドレス・ミス信号を出力する時と同期した時間で、強制ミス信号を出力する。
また、メインメモリに記憶されるデータのうち利用頻度の高いデータを記憶するキャッシュメモリを有する命令制御装置が知られている(例えば、特許文献5参照)。第一空き領域判定部は、キャッシュメモリから受信した命令フェッチデータを保存する命令バッファに空きがあるか否かを判定する。第二空き領域判定部は、第一空き領域判定部によって、命令バッファに空きがあると判定された場合に、キャッシュメモリからメインメモリに送出する命令フェッチリクエストキューを管理する、キャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあるか否かを判定する。命令制御部は、第二空き領域判定部によってキャッシュメモリ内のムーブインバッファに少なくとも2エントリ以上の空きがあると判定された場合に、キャッシュラインのラインサイズに従ったアドレス境界で命令プリフェッチ要求をキャッシュメモリに出力する。
特開2003−223359号公報 特開2006−41898号公報 特開2010−146145号公報 特開平10−91520号公報 特開2011−13864号公報
演算処理装置では、メインメモリよりも高速なキャッシュメモリをプロセッサとメインメモリの間に配置し、最近参照したデータをキャッシュメモリ上に置くことによって、メインメモリ参照による待ち時間を減少させている。ところが、数値計算処理など大規模データを使用する計算では、データの参照局所性が低いためキャッシュミスが多発し、メインメモリ参照による待ち時間を十分に減少することが出来ない課題がある。
1つの側面では、本発明の目的は、データのアクセス時間を短縮することができる演算処理装置、演算処理装置の制御方法及びプログラムを提供することである。
演算処理装置は、複数のキャッシュラインにデータを記憶可能なキャッシュメモリと、前記キャッシュメモリのアドレスが連続するp個のキャッシュラインでキャッシュミスが発生すると、前記キャッシュミスしたキャッシュラインの後のキャッシュラインにデータをプリフェッチするハードウェアプリフェッチ回路と、キャッシュミス回数指定命令を入力すると、前記ハードウェアプリフェッチ回路のp個の値を変更する制御部とを有する。
キャッシュミス回数指定命令によりハードウェアプリフェッチ回路のp個の値を変更することができるので、データのアクセス時間を短縮することができる。
図1は、本実施形態による演算処理装置の構成例を示す図である。 図2(A)は図1の演算処理装置が実行するソースプログラム及びそれに対応するアセンブリ言語を示す図であり、図2(B)は演算処理装置の一次オペランドキャッシュメモリを示す図である。 図3(A)は図1の演算処理装置が実行するソースプログラム及びそれに対応するアセンブリ言語を示す図であり、図3(B)は演算処理装置の一次オペランドキャッシュメモリを示す図である。 図4(A)は図1の演算処理装置が実行するソースプログラム及びそれに対応するアセンブリ言語を示す図であり、図4(B)は演算処理装置の一次オペランドキャッシュメモリを示す図である。 図5(A)は図1の演算処理装置が実行するソースプログラム及びそれに対応するアセンブリ言語を示す図であり、図5(B)は演算処理装置の一次オペランドキャッシュメモリを示す図である。 図6は、図1のハードウェアプリフェッチ回路の構成例を示す図である。 図7は、演算処理装置の制御方法を示すフローチャートである。 図8(A)及び(B)は、リードアドレス及びプリフェッチアドレスを示す図である。 図9(A)は図6のキャッシュミスバッファ、キャッシュミスカウンタ及びプリフェッチキューを示す図であり、図9(B)はプリフェッチキューの登録処理を示すフローチャートである。 図10は、キャッシュライン空き個数rが1の場合の処理例を示す図である。 図11は、図6のチェック部の処理を示すフローチャートである。 図12は、図2(A)〜図5(A)のソースプログラムの生成方法を示すフローチャートである。 図13は、コンパイラの機能構成図である。 図14は、図13のプロファイラの処理を示すフローチャートである。 図15は、図13のコンパイラの命令挿入部の処理を示すフローチャートである。 図16(A)及び(B)は、命令「hpf_start #p-1,#q」及び命令「hpf_stop」の挿入例を示す図である。 図17は、図13のコンパイラの命令挿入部の処理を示すフローチャートである。 図18は、図13のコンパイラの命令挿入部の処理を示すフローチャートである。 図19は、図12のコンピュータのハードウェア構成例を示す図である。
図1は、本実施形態による演算処理装置11の構成例を示す図である。演算処理装置11は、例えば、プロセッサであり、命令のアウトオブオーダ実行やパイプライン処理の機能を有する。
命令フェッチステージでは、命令フェッチ部21、命令バッファ24、分岐予測部22、一次命令キャッシュメモリ23、及び二次キャッシュメモリ34等が動作する。命令フェッチ部21は、分岐予測部22からフェッチする命令の予測分岐先アドレス、分岐制御部30から分岐演算により確定した分岐先アドレス等を受け取る。命令フェッチ部21は、受け取った予測分岐先アドレス、分岐先アドレス、及び命令フェッチ部21内で作成した分岐しない場合にフェッチする命令の連続した次のアドレス等から、1つのアドレスを選択して次の命令フェッチアドレスを確定する。命令フェッチ部21は、確定した命令フェッチアドレスを一次命令キャッシュメモリ23に出力し、出力された確定後の命令フェッチアドレスに対応する命令コードをフェッチする。
一次命令キャッシュメモリ23は、二次キャッシュメモリ34の一部のデータを格納しているものであり、二次キャッシュメモリ34は、メモリコントローラ35を介してアクセス可能なメインメモリの一部のデータを格納しているものである。一次命令キャッシュメモリ23に該当するアドレスのデータが存在しない場合には二次キャッシュメモリ34からデータをフェッチし、二次キャッシュメモリ34に該当するデータが存在しない場合にはメインメモリからデータをフェッチする。本実施形態では、メインメモリは演算処理装置11の外部に配置しているため、外部にあるメインメモリとの入出力制御はメモリコントローラ35を介して行われる。一次命令キャッシュメモリ23や二次キャッシュメモリ34、メインメモリの該当するアドレスからフェッチされた命令コードは、命令バッファ24に格納される。
分岐予測部22は、命令フェッチ部21から出力された命令フェッチアドレスを受け取り、命令フェッチと並行して分岐予測を実行する。分岐予測部22は、受け取った命令フェッチアドレスを基に分岐予測を行い、分岐の成立又は不成立を示す分岐方向と予測分岐先アドレスとを命令フェッチ部21へ返す。命令フェッチ部21は、予測された分岐方向が成立であった場合には次の命令フェッチアドレスとして予測された分岐先アドレスを選択する。
命令発行ステージでは、命令デコーダ25及び命令発行制御部26が動作する。命令デコーダ25は、命令バッファ24から命令コードを受け取って命令の種別や必要な実行資源等を解析し、解析結果を命令発行制御部26に出力する。命令発行制御部26は、リザベーションステーションの構造を持つ。命令発行制御部26は、命令で参照するレジスタ等の依存関係を見て、依存関係のあるレジスタの更新状況や同じ実行資源を用いる命令の実行状況等から実行資源が命令を実行可能かどうかを判断する。命令発行制御部26は、実行資源が命令を実行可能であると判断した場合には、レジスタ番号やオペランドアドレス等の命令の実行に必要な情報を演算器26、ハードウェアプリフェッチ回路27及び一次オペランドキャッシュメモリ29等の実行資源に対して出力する。また、命令発行制御部26は、実行可能な状態になるまで命令を格納しておくバッファの機能も有する。
命令実行ステージでは、ハードウェアプリフェッチ回路27、演算器28、一次オペランドキャッシュメモリ(一次データキャッシュメモリ)29、及び分岐制御部30等の実行資源が動作する。演算器28は、レジスタ31や一次オペランドキャッシュメモリ29からデータを受け取り、四則演算、論理演算、三角関数演算、及びアドレス計算等の命令に対応した演算を実行し、演算結果をレジスタ31や一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29は、命令キャッシュメモリ23と同様に、二次キャッシュメモリ34の一部のデータを記憶可能である。一次オペランドキャッシュメモリ29は、ロード命令によるメインメモリから演算器28やレジスタ31へのデータのロードや、ストア命令による演算器28やレジスタ31からメインメモリへのデータのストア等に用いられる。二次キャッシュメモリ34は、メモリコントローラ35を介してアクセス可能なメインメモリの一部のデータを格納しているものである。一次オペランドキャッシュメモリ29に該当するアドレスのデータが存在しない場合には二次キャッシュメモリ34からデータをフェッチし、二次キャッシュメモリ34に該当するデータが存在しない場合にはメインメモリからデータをフェッチする。ハードウェアプリフェッチ回路27は、一次オペランドキャッシュメモリ29で連続するアドレスでp(pは自然数)回連続してキャッシュミスが発生すると、キャッシュミスした後のデータを二次キャッシュメモリ34又はメインメモリから一次オペランドキャッシュメモリ29にプリフェッチする。すなわち、ハードウェアプリフェッチ回路27は、メインメモリ上の連続するアドレスのデータをアクセスする場合には、将来アクセスするデータを予め二次キャッシュメモリ34又はメインメモリから一次オペランドキャッシュメモリ29にプリフェッチしておく。これにより、データのアクセス時間を短縮することができる。各実行資源は、命令実行の完了通知を命令完了制御部32へ出力する。なお、ハードウェアプリフェッチ回路27は、一次キャッシュメモリに限定するものでなく、同様にメモリから二次キャッシュ、三次キャッシュ以降の将来アクセスするデータをプリフェッチする制御を含む。
分岐制御部30は、命令デコーダ25から分岐命令の種別を受け取り、演算器28から分岐先アドレスや分岐条件となる演算の結果を受け取って、演算結果が分岐条件を満たしていれば分岐成立、満たしていなければ分岐不成立の判断を行い、分岐方向を確定する。また、分岐制御部30は、演算結果と分岐予測時の分岐先アドレスと分岐方向が一致するかどうかの判断や、分岐命令の順序関係の制御も行う。分岐制御部30は、演算結果と予測とが一致した場合には命令完了制御部32へ分岐命令の完了通知を出力する。一方、演算結果と予測とが一致しなかった場合には分岐予測失敗を意味するので、分岐制御部30は、命令完了制御部32へ分岐命令の完了通知とともに後続命令のキャンセル及び再命令フェッチ要求を命令フェッチ部21に出力する。
命令完了ステージでは、命令完了制御部32、レジスタ31、及び分岐履歴更新部33が動作する。命令完了制御部32は、命令の各実行資源から受け取った完了通知を基に、コミットスタックエントリに格納された命令コード順に命令完了処理を行い、レジスタ31の更新指示を出力する。レジスタ31は、命令完了制御部32からレジスタ更新指示を受け取ると、演算器28や一次オペランドキャッシュメモリ29から受け取る演算結果のデータを基にレジスタの更新を実行する。分岐履歴更新部33は、分岐制御部30から受け取る分岐演算の結果を基に分岐予測の履歴更新データを作成し、分岐予測部22に出力する。
図2(A)は図1の演算処理装置11が実行するソースプログラム201及びそれに対応するアセンブリ言語202を示す図であり、図2(B)は演算処理装置11の一次オペランドキャッシュメモリ29を示す図である。一次オペランドキャッシュメモリ29は、複数のキャッシュラインCL1〜CL3等を有する。各キャッシュラインCL1〜CL3等は、それぞれ例えば16個のデータを記憶することができ、キャッシュラインCL1〜CL3等単位で二次キャッシュメモリ34又はメインメモリのデータを記憶する。ソースプログラム201は、FORTRAN言語の例を示す。まず、「!ocl hpf_warm(0,1)」の命令がない場合を説明する。変数i及びjのループ処理により、「X=A(i,j)+X」の命令が実行される。100個の配列A(1,1)〜A(100,1)のデータは、メインメモリ内の100個の連続するアドレスに記憶されている。なお、本実施形態は、C,FORTRAN等の言語によらないため、以降では、例としてFORTRANで説明する。そのため以降のFORTRANの説明では、oclによるソース記述指定で説明しているが、他言語では、例えばC言語では#pragmaに置き換えてもよい。またハードウェア命令の表記、そのフォーマット、さらにソース記述子oclの記述名、記述形式は上記例に限定せずに任意に変更可能である。
まず、変数j=1及び変数i=1が設定され、命令発行制御部26は、配列A(1,1)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。最初、一次オペランドキャッシュメモリ29には配列A(1,1)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(1,1)を含む16個の連続するアドレスの配列A(1,1)〜A(16,1)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL1に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(1,1)のデータを入力し、「X=A(1,1)+X」の命令を実行する。以下、同様に、演算器28は、一次オペランドキャッシュメモリ29から配列A(2,1)〜A(16,1)のデータを入力し、「X=A(i,j)+X」の命令を実行する。
次に、変数j=1及び変数i=17が設定され、命令発行制御部26は、配列A(17,1)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29には配列A(17,1)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(17,1)を含む16個の連続するアドレスの配列A(17,1)〜A(32,1)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL2に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(17,1)のデータを入力し、「X=A(17,1)+X」の命令を実行する。以下、同様に、演算器28は、一次オペランドキャッシュメモリ29から配列A(18,1)〜A(32,1)のデータを入力し、「X=A(i,j)+X」の命令を実行する。
ここで、ハードウェアプリフェッチ回路27は、アドレスが連続する2個のキャッシュラインCL1及びCL2でキャッシュミスが発生すると、キャッシュミスしたキャッシュラインCL1及びCL2の後のキャッシュラインCL3に16個の配列A(33,1)〜A(48,1)のデータのプリフェッチ処理を開始する。
次に、変数j=1及び変数i=33が設定され、命令発行制御部26は、配列A(33,1)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。この場合もキャッシュミスするが、その直後に、一次オペランドキャッシュメモリ29のキャッシュラインCL3にはメインメモリの配列A(33,1)〜A(48,1)のデータが上記のプリフェッチにより書き込まれるので、演算器28は、一次オペランドキャッシュメモリ29から配列A(33,1)のデータを入力し、「X=A(33,1)+X」の命令を実行する。上記のプリフェッチにより、一次オペランドキャッシュメモリ29には配列A(33,1) 〜A(48,1)のデータが書き込まれるので、データアクセス時間を短縮することができる。また、上記と同様に、ハードウェアプリフェッチ回路27は、後のキャッシュラインCL4に16個の配列A(49,1)〜A(64,1)のデータをプリフェッチする。以上の動作を繰り返す。
上記のように、ハードウェアプリフェッチ回路27は、アドレスが連続する2個のキャッシュラインCL1及びCL2でキャッシュミスが発生すると、プリフェッチする。上記の2個の値をソフトウェアのキャッシュミス回数指定命令「!ocl hpf_warm(0,1)」により変更可能にすることにより、データアクセス時間をさらに短縮する。
ハードウェアプリフェッチ回路27は、一次オペランドキャッシュメモリ29のアドレスが連続するp個のキャッシュラインでキャッシュミスが発生すると、キャッシュミスしたキャッシュラインの後のキャッシュラインにデータをプリフェッチする。「!ocl hpf_warm(p-1,1)」の命令により、pの値を変更することができる。例えば、「!ocl hpf_warm(0,1)」の命令は、1個目の引数が「0」であるので、p=1に設定される。
この場合、まず、変数j=1及び変数i=1が設定され、命令発行制御部26は、配列A(1,1)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。最初、一次オペランドキャッシュメモリ29には配列A(1,1)のデータが存在しないので、キャッシュミスする。
すると、ハードウェアプリフェッチ回路27は、アドレスが連続するp(=1)個のキャッシュラインCL1でキャッシュミスが発生すると、キャッシュミスしたキャッシュラインCL1の後のキャッシュラインCL2に16個の配列A(17,1)〜A(32,1)のデータをプリフェッチする。以降、同様に、ハードウェアプリフェッチ回路27は、順次、キャッシュラインCL3以降もプリフェッチする。連続してアクセスする配列A(i,j)のデータ長が17個以上であることが分かっている場合には、「!ocl hpf_warm(p-1,1)」の命令によりp=1に設定すれば、データアクセス時間をさらに短縮することができる。
また、ハードウェアプリフェッチ回路27は、上記のように、キャッシュミスしたキャッシュラインCL1の1個後のキャッシュラインCL2にデータをプリフェッチする。上記の1個の値をソフトウェアのプリフェッチ位置指定命令「!ocl hpf_warm(0,1)」により変更可能にすることにより、データアクセス時間の最適化を図ることができる。
ハードウェアプリフェッチ回路27は、キャッシュミスしたキャッシュラインCL1のq個後のキャッシュラインにデータをプリフェッチする。「!ocl hpf_warm(p-1,q)」の命令により、qの値を変更することができる。例えば、「!ocl hpf_warm(0,1)」の命令は、2個目の引数が「1」であるので、q=1に設定される。
例えば、p=1及びq=1の場合、ハードウェアプリフェッチ回路27は、キャッシュミスしたキャッシュラインCL1の1個後のキャッシュラインCL2にデータをプリフェッチし、その後、キャッシュラインCL3以降にもデータをプリフェッチする。p=1及びq=2の場合、ハードウェアプリフェッチ回路27は、キャッシュミスしたキャッシュラインCL1の2個後のキャッシュラインCL3にデータをプリフェッチし、その後、キャッシュラインCL4以降にもデータをプリフェッチする。
ソースプログラム201は、コンピュータのコンパイラにより、アセンブリ言語202に対応する機械語に変換される。ソースプログラム201の「!ocl hpf_warm(p-1,q)」は、アセンブリ言語202の「hpf_start #p-1,#q」に変換される。例えば、p=1、q=1である。演算処理装置11は、「hpf_start #p-1,#q」に対応する機械語を入力すると、ハードウェアプリフェッチ回路27のp及びqの値を設定することができる。具体的には、命令発行制御部26は、「hpf_start #p-1,#q」に対応する機械語を入力すると、ハードウェアプリフェッチ回路27のp個の値及びq個の値を変更する。なお、ハードウェアプリフェッチ回路27は、pの初期値が2であり、qの初期値が1である。
図3(A)は図1の演算処理装置11が実行するソースプログラム301及びそれに対応するアセンブリ言語302を示す図であり、図3(B)は演算処理装置11の一次オペランドキャッシュメモリ29を示す図である。一次オペランドキャッシュメモリ29は、複数のキャッシュラインCL1〜CL3,CL11〜CL13等を有する。ソースプログラム301は、FORTRAN言語の例を示す。まず、「!ocl hpf_stop」の命令がない場合を説明する。例えば、p=2、q=1である。
まず、変数j=1及び変数i=1が設定され、命令発行制御部26は、配列A(1,1)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。最初、一次オペランドキャッシュメモリ29には配列A(1,1)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(1,1)を含む16個の連続するアドレスの配列A(1,1)〜A(16,1)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL1に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(1,1)のデータを入力し、「X=A(1,1)+X」の命令を実行する。以下、同様に、演算器28は、一次オペランドキャッシュメモリ29から配列A(2,1)〜A(16,1)のデータを入力し、「X=A(i,j)+X」の命令を実行する。
次に、変数j=1及び変数i=17が設定され、命令発行制御部26は、配列A(17,1)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29には配列A(17,1)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(17,1)を含む16個の連続するアドレスの配列A(17,1)〜A(32,1)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL2に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(17,1)のデータを入力し、「X=A(17,1)+X」の命令を実行する。以下、同様に、演算器28は、一次オペランドキャッシュメモリ29から配列A(18,1)のデータを入力し、「X=A(18,1)+X」の命令を実行する。
ここで、ハードウェアプリフェッチ回路27は、アドレスが連続するp(=2)個のキャッシュラインCL1及びCL2でキャッシュミスが発生すると、キャッシュミスしたキャッシュラインCL1及びCL2の後のキャッシュラインCL3に16個の配列A(33,1)〜A(48,1)のデータをプリフェッチする。しかし、変数iは、1〜18の範囲で変化するので、配列A(1,1)〜A(18,1)のデータのアクセスのみ行われ、キャッシュラインCL3の16個の配列A(33,1)〜A(48,1)のデータのプリフェッチは無駄である。
その後、変数j=2及び変数i=1が設定され、命令発行制御部26は、配列A(1,2)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29には配列A(1,2)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(1,2)を含む16個の連続するアドレスの配列A(1,2)〜A(16,2)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL11に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(1,2)のデータを入力し、「X=A(1,2)+X」の命令を実行する。以下、同様に、演算器28は、一次オペランドキャッシュメモリ29から配列A(2,2)〜A(16,2)のデータを入力し、「X=A(i,j)+X」の命令を実行する。
次に、変数j=2及び変数i=17が設定され、命令発行制御部26は、配列A(17,2)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29には配列A(17,2)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(17,2)を含む16個の連続するアドレスの配列A(17,2)〜A(32,2)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL12に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(17,2)のデータを入力し、「X=A(17,2)+X」の命令を実行する。以下、同様に、演算器28は、一次オペランドキャッシュメモリ29から配列A(18,2)のデータを入力し、「X=A(18,2)+X」の命令を実行する。
ここで、ハードウェアプリフェッチ回路27は、アドレスが連続するp(=2)個のキャッシュラインCL11及びCL12でキャッシュミスが発生すると、キャッシュミスしたキャッシュラインCL11及びCL12の後のキャッシュラインCL13に16個の配列A(33,2)〜A(48,2)のデータをプリフェッチする。しかし、変数iは、1〜18の範囲で変化するので、配列A(1,2)〜A(18,2)のデータのアクセスのみ行われ、キャッシュラインCL13の16個の配列A(33,2)〜A(48,2)のデータのプリフェッチは無駄である。
プリフェッチ停止命令「!ocl hpf_stop」は、ハードウェアプリフェッチ回路27によるプリフェッチを停止させることができる。変数iのループ処理の後に、プリフェッチ停止命令「!ocl hpf_stop」を置くことにより、変数iが18になった後、上記のキャッシュラインCL3及びCL13のプリフェッチを停止させることができる。仮に、キャッシュラインCL3及びCL13のプリフェッチの処理中に、停止が指示されても、プリフェッチ時間は比較的長いので、途中でプリフェッチを停止できることの効果は大きい。
ソースプログラム301は、コンピュータのコンパイラにより、アセンブリ言語302に対応する機械語に変換される。ソースプログラム301の「!ocl hpf_stop」は、アセンブリ言語302の「hpf_stop」に変換される。演算処理装置11は、「hpf_stop」に対応する機械語を入力すると、ハードウェアプリフェッチ回路27によるプリフェッチを停止させる。具体的には、命令発行制御部26は、「hpf_stop」に対応する機械語を入力すると、ハードウェアプリフェッチ回路27によるプリフェッチを停止させる。
図4(A)は図1の演算処理装置11が実行するソースプログラム401及びそれに対応するアセンブリ言語402を示す図であり、図4(B)は演算処理装置11の一次オペランドキャッシュメモリ29を示す図である。一次オペランドキャッシュメモリ29は、複数のキャッシュラインCL1〜CL6等を有する。ソースプログラム401は、FORTRAN言語の例を示す。まず、「!ocl hpf_range(1)」の命令がない場合を説明する。例えば、p=2、q=1である。また配列Aの一次元サイズは16とする。例えば、配列サイズの定義をA(16,8192)とする。またキャッシュライン長を一例としてここでは128バイトとする。すると、一次元サイズがキャッシュライン長(128=16*8)と等しいため、例ではA(16,1)からA(1,2)の二次元に配列アクセスが移行してもメモリアクセスのアドレスが連続となるケースとなる。
まず、変数j=1及び変数i=1が設定され、変数j(=1)を4で割った余りが1であり、0でないので、命令発行制御部26は、配列A(1,1)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29には配列A(1,1)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(1,1)を含む16個の連続するアドレスの配列A(1,1)〜A(16,1)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL1に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(1,1)のデータを入力し、配列A(1,1)を用いた命令を実行する。以下、同様に、演算器28は、一次オペランドキャッシュメモリ29から配列A(2,1)〜A(16,1)のデータを入力し、配列A(i,j)を用いた命令を実行する。
次に、変数j=2及び変数i=1が設定され、変数j(=2)を4で割った余りが2であり、0でないので、命令発行制御部26は、配列A(1,2)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29には配列A(1,2)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(1,2)を含む16個の連続するアドレスの配列A(1,2)〜A(16,2)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL2に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(1,2)のデータを入力し、配列A(1,2)を用いた命令を実行する。以下、同様に、演算器28は、一次オペランドキャッシュメモリ29から配列A(2,2)〜A(16,2)のデータを入力し、配列A(i,j)を用いた命令を実行する。
CL1とCL2のキャッシュラインに格納されている配列のメモリアドレスは連続する。そのため、ハードウェアプリフェッチ回路27は、アドレスが連続するp(=2)個のキャッシュラインCL1及びCL2でキャッシュミスが発生すると、キャッシュミスしたキャッシュラインCL1及びCL2の後のキャッシュラインCL3に16個の配列A(1,3)〜A(16,3)のデータのプリフェッチ処理を開始する。
次に、変数j=3及び変数i=1が設定され、変数j(=3)を4で割った余りが3であり、0でないので、命令発行制御部26は、配列A(1,3)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。この場合もキャッシュミスするが、その直後に、一次オペランドキャッシュメモリ29のキャッシュラインCL3にはメインメモリの配列A(1,3)のデータが上記のプリフェッチにより書き込まれるので、演算器28は、一次オペランドキャッシュメモリ29から配列A(1,3)のデータを入力し、配列A(1,3)を用いた命令を実行する。上記のプリフェッチにより、データアクセス時間を短縮することができる。また、上記と同様に、ハードウェアプリフェッチ回路27は、後のキャッシュラインCL4に16個の配列A(1,4)〜A(16,4)のデータをプリフェッチする。
次に、変数j=4及び変数i=1が設定され、変数j(=4)を4で割った余りが0であるので、配列A(4,i)のアクセスは行われない。
次に、変数j=5及び変数i=1が設定され、変数j(=5)を4で割った余りが1であり、0でないので、命令発行制御部26は、配列A(1,5)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29には配列A(1,5)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(1,5)を含む16個の連続するアドレスの配列A(1,5)〜A(16,5)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL5に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(1,5)のデータを入力し、配列A(1,5)を用いた命令を実行する。以下、同様に、演算器28は、一次オペランドキャッシュメモリ29から配列A(2,5)〜A(16,5)のデータを入力し、配列A(i,j)を用いた命令を実行する。ここでハードウェアプリフェッチ回路27では、キャッシュミスしたキャッシュラインCL3とCL5はアドレスが連続したP(=2)個のキャッシュラインとならないため、この場合、ハードウェアプリフェッチ回路27は、停止し、キャッシュラインCL5のプリフェッチを行わない。
次に、変数j=6及び変数i=1が設定され、変数j(=6)を4で割った余りが2であり、0でないので、命令発行制御部26は、配列A(1,6)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29には配列A(1,6)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(1,6)を含む16個の連続するアドレスの配列A(1,6)〜A(16,6)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL6に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(1,6)のデータを入力し、配列A(1,6)を用いた命令を実行する。以下、同様に、演算器28は、一次オペランドキャッシュメモリ29から配列A(2,6)〜A(16,6)のデータを入力し、配列A(i,j)を用いた命令を実行する。
ここで、ハードウェアプリフェッチ回路27は、アドレスが連続するp(=2)個のキャッシュラインCL5及びCL6でキャッシュミスが発生すると、キャッシュミスしたキャッシュラインCL5及びCL6の後のキャッシュラインCL7に16個の配列A(1,7)〜A(16,7)のデータをプリフェッチする。
以上のように、キャッシュラインCL4のデータがアクセスされない場合には、ハードウェアプリフェッチ回路27は、一旦停止してしまい、再び起動することになり、データアクセス時間が長くなってしまう。そこで、アドレスが連続するキャッシュラインCL1〜CL6中の1個のキャッシュラインCL4だけがアクセスされなかった場合にも、ハードウェアプリフェッチ回路27は、キャッシュラインCL1〜CL6が連続してアクセスされたものとして扱い、停止することなく、キャッシュラインCL3〜CL6等を連続してプリフェッチする。すなわち、ハードウェアプリフェッチ回路27は、連続するp個のキャッシュラインの中にr個のキャッシュラインの空きがあっても、連続するp個のキャッシュラインでキャッシュミスが発生したと判断する。図4(B)の場合、r=1である。これにより、ハードウェアプリフェッチ回路27の一旦停止及び再起動がなくなるので、データアクセス時間を短縮することができる。キャッシュライン空き数指定命令「!ocl hpf_range(r)」により、rの値を変更することができる。例えば、「!ocl hpf_range(1)」の命令は、引数が「1」であるので、r=1に設定される。
ソースプログラム401は、コンピュータのコンパイラにより、アセンブリ言語402に対応する機械語に変換される。ソースプログラム401の「!ocl hpf_range(r)」は、アセンブリ言語202の「hpf_range #r」に変換される。例えば、r=1である。演算処理装置11は、「hpf_range #r」に対応する機械語を入力すると、ハードウェアプリフェッチ回路27のr個の値を設定することができる。具体的には、命令発行制御部26は、「hpf_range #r」に対応する機械語を入力すると、ハードウェアプリフェッチ回路27のr個の値を変更する。なお、ハードウェアプリフェッチ回路27は、rの初期値が0である。
図5(A)は図1の演算処理装置11が実行するソースプログラム501及びそれに対応するアセンブリ言語502を示す図であり、図5(B)は演算処理装置11の一次オペランドキャッシュメモリ29を示す図である。一次オペランドキャッシュメモリ29は、複数のキャッシュラインCL1,CL2,CL9〜CL12等を有する。ソースプログラム501は、FORTRAN言語の例を示す。例えば、p=2、q=1である。
まず、変数j=1及び変数i=1が設定され、命令発行制御部26は、配列A(1,1)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29には配列A(1,1)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(1,1)を含む16個の連続するアドレスの配列A(1,1)〜A(16,1)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL1に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(1,1)のデータを入力し、「X=A(1,1)+X」の命令を実行する。以下、同様に、演算器28は、一次オペランドキャッシュメモリ29から配列A(2,1)〜A(16,1)のデータを入力し、「X=A(i,j)+X」の命令を実行する。
次に、変数j=1及び変数i=17が設定され、命令発行制御部26は、配列A(17,1)のデータ読み出しのリクエスト信号を一次オペランドキャッシュメモリ29に出力する。一次オペランドキャッシュメモリ29には配列A(17,1)のデータが存在しないので、キャッシュミスする。すると、二次キャッシュメモリ34又はメインメモリから配列A(17,1)を含む16個の連続するアドレスの配列A(17,1)〜A(32,1)のデータを読み出し、一次オペランドキャッシュメモリ29内のキャッシュラインCL2に書き込む。演算器28は、一次オペランドキャッシュメモリ29から配列A(17,1)のデータを入力し、「X=A(17,1)+X」の命令を実行する。
ここで、ハードウェアプリフェッチ回路27は、アドレスが連続するp(=2)個のキャッシュラインCL1及びCL2でキャッシュミスが発生すると、キャッシュミスしたキャッシュラインCL1及びCL2の後のキャッシュラインCL3に16個の配列A(33,1)〜A(48,1)のデータをプリフェッチする。
その後、変数j=2及び変数i=1が設定され、ダミーロード命令「!ocl contact(A(i,j),(-2),2)」が実行される。命令発行制御部26は、配列A(1,2)の2要素前のアドレスのデータをメインメモリから読み出して2個のキャッシュラインCL9及びCL10に書き込む。この際、2個のキャッシュラインCL9及びCL10はキャッシュミスするので、ハードウェアプリフェッチ回路27は、キャッシュラインCL11及びCL12に配列A(1,2)〜A(16,2)及び配列A(17,2)〜A(32,2)のデータを順次プリフェッチする。これにより、データアクセス時間を短縮することができる。以下、同様に、変数jの値が変更される毎に、ダミーロード命令「!ocl contact(A(i,j),(-2),2)」が実行され、配列A(1,j)〜A(16,j)及び配列A(17,j)〜A(32,j)のデータがキャッシュラインにプリフェッチされる。
ソースプログラム501は、コンピュータのコンパイラにより、アセンブリ言語502に対応する機械語に変換される。ソースプログラム501の「!ocl contact(A(i,j),(-2),2)」は、アセンブリ言語502の「lddf [%l1-256],f2」、「lddf [%l1-128],f2」に変換される。命令発行制御部26は、ダミーロード命令「lddf [%l1-256],f2」に対応する機械語を入力すると、配列A(i,j)の指定アドレスの2要素前のアドレスのデータを、ダミーロード命令「lddf [%l1-128],f2」に対応する機械語を入力すると、配列A(i,j)の指定アドレスの1要素前のアドレスのデータを、それぞれ一又は複数のキャッシュラインに書き込ませる。書き込ませる要素の相対位置は、ダミーロード命令「!ocl contact(A(i,j),(-2),2)」の2個目の引数の「−2」により指定することができる。書き込ませるキャッシュラインの数は、ダミーロード命令「!ocl contact(A(i,j),(-2),2)」の3個目の引数の「2」により指定することができる。本例では、2個のキャッシュラインCL9及びCL10に書き込ませる。ダミーロード命令「lddf [%l1-256],f2」及び「lddf [%l1-128],f2」は、通常のロード命令を使用してもよい。なお、ここでcontactの指定方法は任意であり、特にパラメータの指定方法や表記は限定しない。例えば、明示的に書き込むキャッシュライン数を1固定にした指定形式「!ocl contact(A(i,j),(-n))」でもよい。その場合、上記に示した「!ocl contact(A(i,j),(-2),2)」は、例えば「!ocl contact(A(i,j),(-2))」及び「!ocl contact(A(i,j),(-1))」の指定と同値となる。またlddfはメモリからデータを取り出す命令であれば特に限定しない。
図6は図1のハードウェアプリフェッチ回路27の構成例を示す図であり、図7は演算処理装置11の制御方法を示すフローチャートである。時刻t1〜t3は、それぞれ時間経過に伴う処理を示す。
ステップS701では、演算処理装置11は、アセンブリ言語202に対応する機械語の命令を入力して実行する。命令発行制御部26は、アセンブリ言語202の命令「hpf_start #p-1,#q」が入力されると、レジスタ41にキャッシュミス回数pの値を設定し、レジスタ42にプリフェッチ位置qの値を設定する。レジスタ41のキャッシュミス回数pの初期値は2である。レジスタ42にプリフェッチ位置qの初期値は1である。
次に、ステップS702では、ハードウェアプリフェッチ回路27は、一次オペランドキャッシュメモリ29にキャッシュミスが発生した場合には、キャッシュミスバッファ49にキャッシュミスしたキャッシュラインの番号を登録する。例えば、時刻t1において、キャッシュライン番号Aのキャッシュラインがキャッシュミスした場合、キャッシュミスバッファ49にキャッシュミスしたキャッシュライン番号Aを登録する。
キャッシュミスカウンタ44は、キャッシュライン番号i毎にカウント値cnt(i)を記憶する。ハードウェアプリフェッチ回路27は、キャッシュラインカウンタ44において、キャッシュミスしたキャッシュライン番号Aのカウント値cnt(A)に1を設定する。キャッシュミスカウンタ44のカウント値cnt(A)は、キャッシュライン番号Aがキャッシュミスバッファ49から削除された場合に0にクリアされる。
次に、ステップS703では、比較回路45は、レジスタ41のキャッシュミス回数p及びキャッシュミスカウンタ44のカウント値cnt(i)を基に、キャッシュメモリのアドレスが連続するp個のキャッシュラインでキャッシュミスが発生したか否かをチェックする。pが2の場合、p(=2)個のキャッシュラインでキャッシュミスが発生していないので、比較回路45はプリフェッチを指示しない。その後、ステップS704及びS705をバイパスし、ステップS701において次の命令を実行する。
次に、時刻t2において、ハードウェアプリフェッチ回路27は、キャッシュライン番号A+1のキャッシュラインがキャッシュミスした場合、キャッシュミスバッファ49にキャッシュミスしたキャッシュライン番号A+1を登録する(ステップS702)。そして、ハードウェアプリフェッチ回路27は、キャッシュラインカウンタ44において、キャッシュミスしたキャッシュライン番号A+1のカウント値cnt(A+1)に1を設定する。
次に、比較回路45は、レジスタ41のキャッシュミス回数p及びキャッシュミスカウンタ44のカウント値cnt(i)を基に、キャッシュメモリのアドレスが連続するp個のキャッシュラインでキャッシュミスが発生したか否かをチェックする。pが2の場合、連続するp(=2)個のキャッシュライン番号A及びA+1でキャッシュミスが発生しているので、比較回路45はプリフェッチを指示する。
次に、ステップS704では、ハードウェアプリフェッチ回路27は、比較回路45によりプリフェッチを指示されると、キャッシュミスしたキャッシュライン番号A+1に対してレジスタ42のプリフェッチ位置q(=1)を加算し、キャッシュライン番号A+2をプリフェッチキュー43に登録する。
次に、ステップS705では、ハードウェアプリフェッチ回路27は、プリフェッチキュー43内のキャッシュライン番号A+2のプリフェッチを発行部46により発行し、プリフェッチ処理を開始する。その後、ハードウェアプリフェッチ回路27は、プリフェッチキュー43内のキャッシュライン番号A+2を削除する。その後、ステップS701において次の命令を実行する。
次に、時刻t3において、キャッシュライン番号A+2のアクセス要求が発行されると、ハードウェアプリフェッチ回路27は、キャッシュライン番号A+2のプリフェッチが完了していないので、キャッシュライン番号A+2のキャッシュラインがキャッシュミスし、キャッシュミスバッファ49にキャッシュミスしたキャッシュライン番号A+2を登録する(ステップS702)。そして、ハードウェアプリフェッチ回路27は、キャッシュラインカウンタ44において、キャッシュミスしたキャッシュライン番号A+2のカウント値cnt(A+2)に1を設定する。
次に、比較回路45は、レジスタ41のキャッシュミス回数p及びキャッシュミスカウンタ44のカウント値cnt(i)を基に、キャッシュメモリのアドレスが連続するp個のキャッシュラインでキャッシュミスが発生したか否かをチェックする。pが2の場合、連続するp(=2)個のキャッシュライン番号A+1及びA+2でキャッシュミスが発生しているので、比較回路45はプリフェッチを指示する。
次に、ステップS704では、ハードウェアプリフェッチ回路27は、比較回路45によりプリフェッチを指示されると、キャッシュミスしたキャッシュライン番号A+2に対してレジスタ42のプリフェッチ位置q(=1)を加算し、キャッシュライン番号A+3をプリフェッチキュー43に登録する。
次に、ステップS705では、ハードウェアプリフェッチ回路27は、プリフェッチキュー43内のキャッシュライン番号A+3のプリフェッチを発行部46により発行し、プリフェッチ処理を開始する。その後、ハードウェアプリフェッチ回路27は、プリフェッチキュー43内のキャッシュライン番号A+3を削除する。
なお、上記では、キャッシュミスバッファ49にキャッシュライン番号A、A+1、A+2の昇順で登録される場合を例に説明したが、降順の場合にも対応することができる。キャッシュミスバッファ49にキャッシュライン番号A、A−1が登録された場合には、次回、キャッシュライン番号A−2をプリフェッチキュー43に登録すればよい。
図8(A)は、キャッシュミス回数pが2(初期値)であり、プリフェッチ位置qが1(初期値)である場合のリードアドレス及びプリフェッチアドレスを示す図である。リードアドレスがキャッシュライン番号Aの場合、キャッシュライン番号Aの1回のキャッシュミスであるので、プリフェッチは行われない。次に、リードアドレスがキャッシュライン番号A+1の場合、キャッシュライン番号A及びA+1のp(=2)回のキャッシュミスが連続するので、キャッシュミスしたキャッシュライン番号A+1に対してプリフェッチ位置q(=1)を加算したキャッシュライン番号A+2のプリフェッチが行われる。次に、キャッシュライン番号A+2のキャッシュミスが発生すると、同様に、キャッシュライン番号A+3のプリフェッチが行われる。次に、キャッシュライン番号A+3のキャッシュミスが発生すると、同様に、キャッシュライン番号A+4のプリフェッチが行われる。
図8(B)は、キャッシュミス回数pが1であり、プリフェッチ位置qがxである場合のリードアドレス及びプリフェッチアドレスを示す図である。リードアドレスがキャッシュライン番号Aの場合、キャッシュライン番号Aのp(=1)回のキャッシュミスが発生するので、キャッシュミスしたキャッシュライン番号Aに対してプリフェッチ位置q(=x)を加算したキャッシュライン番号A+xのプリフェッチが行われる。次に、キャッシュライン番号A+1のキャッシュミスが発生すると、同様に、キャッシュライン番号A+1+xのプリフェッチが行われる。次に、キャッシュライン番号A+2のキャッシュミスが発生すると、同様に、キャッシュライン番号A+2+xのプリフェッチが行われる。次に、キャッシュライン番号A+3のキャッシュミスが発生すると、同様に、キャッシュライン番号A+3+xのプリフェッチが行われる。
図9(A)は、図6のキャッシュミスバッファ49、キャッシュミスカウンタ44及びプリフェッチキュー43を示す図である。キャッシュミスバッファ49には、キャッシュミスしたキャッシュライン番号が登録される。キャッシュミスカウンタ44は、キャッシュライン番号i及びカウント値cnt(i)のすべての組みを有し、カウント値cnt(i)の初期値が0であり、キャッシュミスバッファ49に登録されたキャッシュライン番号iのカウント値cnt(i)が1になる。キャッシュライン空き個数rの初期値は0である。その場合、キャッシュミスカウンタ44のキャッシュライン番号2及び3のカウント値cnt(2)及びcnt(3)が共に1になっているので、p(=2)回連続するキャッシュラインでキャッシュミスが発生したと判断し、q=1の場合、プリフェッチキュー43にキャッシュライン番号4(=3+1)を登録する。同様に、キャッシュミスカウンタ44のカウント値cnt(3)及びcnt(4)が共に1になっているので、p(=2)回連続するキャッシュラインでキャッシュミスが発生したと判断し、プリフェッチキュー43にキャッシュライン番号5(=4+1)を登録する。
図9(B)は、プリフェッチキュー43の登録処理を示すフローチャートである。まず、昇順でアクセスする例を説明する。ステップS901では、ハードウェアプリフェッチ回路27は、キャッシュミスバッファ49に登録したキャッシュライン番号iについて、直前のキャッシュミスカウンタ44のカウント値cnt(i−1)が1であるか否かをチェックする。1である場合にはステップS902へ進む。ステップS902では、ハードウェアプリフェッチ回路27は、キャッシュライン番号iにプリフェッチ位置q(=1)を加算したキャッシュライン番号i+1をプリフェッチキュー43に登録する。
次に、降順でアクセスする例を説明する。ステップS901では、ハードウェアプリフェッチ回路27は、キャッシュミスバッファ49に登録したキャッシュライン番号iについて、直後のキャッシュミスカウンタ44のカウント値cnt(i+1)が1であるか否かをチェックする。1である場合にはステップS902へ進む。ステップS902では、ハードウェアプリフェッチ回路27は、キャッシュライン番号iにプリフェッチ位置q(=1)を減算したキャッシュライン番号i−1をプリフェッチキュー43に登録する。
なお、プリフェッチキュー43は、一つに限らず複数用意してもよい。その場合は、同時に複数のデータストリームのアクセスに対してハードウェアプリフェッチ回路27によるプリフェッチ処理が実行される。
また、図3(A)のプリフェッチ停止命令「hpf_stop」が実行されると、ハードウェアプリフェッチ回路27は、直ちに発行部46を停止させ、プリフェッチキュー43のキャッシュライン番号を削除する。これにより、ハードウェアプリフェッチを停止させることができる。
図10は、図9(A)に対応し、キャッシュライン空き個数rが1の場合の処理例を示す図である。図4(A)のキャッシュライン空き数指定命令「hpf_range #r」が実行されると、ハードウェアプリフェッチ回路27は、図6のレジスタ51にキャッシュライン空き個数rを格納する。図6のチェック部55は、連続するp(=2)個のキャッシュラインの中にr(=1)個のキャッシュラインの空きがあっても、連続するp個のキャッシュラインでキャッシュミスが発生したと判断し、プリフェッチキュー43への登録を行う。例えば、キャッシュライン番号5がアクセスされなかった場合、連続するp(=2)個のキャッシュライン番号4及び5の中にr(=1)個のキャッシュライン番号5の空きがあっても、キャッシュライン番号5にプリフェッチ位置q(=1)を加算したキャッシュライン番号6(=5+1)をプリフェッチキュー43に登録する。また、キャッシュライン番号6のキャッシュミスが発生した場合、連続するp(=2)個のキャッシュライン番号5及び6の中にr(=1)個のキャッシュライン番号5の空きがあっても、キャッシュライン番号6にプリフェッチ位置q(=1)を加算したキャッシュライン番号7(=6+1)をプリフェッチキュー43に登録する。
図11は、図6のチェック部55の処理を示すフローチャートである。ステップS1101では、チェック部55は、昇順アクセスの場合、現在ハードウェアプリフェッチ発行中のキャッシュライン番号iのデータストリームについて、直前のキャッシュミスカウンタ44のカウント値cnt(i−1)が1であるか否かをチェックする。降順アクセスの場合、チェック部55は、直後のキャッシュミスカウンタ44のカウント値cnt(i+1)が1であるか否かをチェックする。ステップS1102において、1である場合にはステップS1106に進み、0である場合にはステップS1103に進む。
ステップS1103では、チェック部55は、キャッシュミスカウンタ44のキャッシュライン番号iについて、直前のキャッシュライン番号i−1からレジスタ51の空き個数rを減算した番号i−1−rのカウント値cnt(i−1−r)が1であるか否かをチェックする。ステップS1104において、1である場合にはステップS1105に進み、0である場合にはステップS1106に進む。
ステップS1105では、チェック部55は、連続するp(=2)個のキャッシュラインの中にr(=1)個のキャッシュラインの空きがあると判断し、キャッシュライン番号i+1−k(k=r,r−1,・・・,0)のr+1個をプリフェッチキュー43に追加登録する。その後、ステップS1103の処理に戻る。
ステップS1106では、ハードウェアプリフェッチ回路27は、ハードウェアプリフェッチを継続する。ステップS1107では、ハードウェアプリフェッチ回路27は、プリフェッチキュー43が空になれば、ハードウェアプリフェッチを停止する。
図12は、図2(A)〜図5(A)のソースプログラム201,301,401,501の生成方法を示すフローチャートである。ステップS1201では、ユーザは、コンピュータ1200を用いて、デバッガ、プロファイル又はwrite文などにより、長時間を費やす高コストループ処理の箇所を突き止める。次に、ステップS1202では、ユーザは、コンピュータ1200を用いて、デバッガ又はプロファイルツールなどを使用し、高コストループ処理内で下記の(1)又は(2)の対象箇所を検出する。
(1)連続域のデータアクセスが微小区間で歯抜けで途切れている。
(2)連続域のデータアクセスが発生及び/又は終了している。
次に、ステップS1203では、ユーザが対象箇所を特定した場合には、ステップS1204に進む。ステップS1204では、ユーザは、ソースプログラム201,301,401又は501内の対象箇所にocl文を記述する。次に、ステップS1205では、ユーザは、コンピュータ1200を用いて、コンパイラによりソースプログラム201,301,401又は501を機械語に変換する。機械語は、メインメモリに格納される。次に、ステップS1206では、演算処理装置11は、メインメモリ内の機械語を入力して実行する。
図19は、図12のコンピュータ1200のハードウェア構成例を示す図である。バス1901には、中央処理装置(CPU)1902、ROM1903、RAM1904、ネットワークインタフェース1905、入力装置1906、出力装置1907及び外部記憶装置1908が接続されている。CPU1902は、データの処理又は演算を行うと共に、バス1901を介して接続された各種構成要素を制御するものである。ROM1903には、予めCPU1902の制御手順(コンピュータプログラム)を記憶させておき、このコンピュータプログラムをCPU1902が実行することにより、起動する。外部記憶装置1908にコンピュータプログラムが記憶されており、そのコンピュータプログラムがRAM1904にコピーされて実行される。RAM1904は、データの入出力、送受信のためのワークメモリ、各構成要素の制御のための一時記憶として用いられる。外部記憶装置1908は、例えばハードディスク記憶装置やCD−ROM等であり、電源を切っても記憶内容が消えない。CPU1902は、RAM1904内のコンピュータプログラムを実行することにより処理を行う。ネットワークインタフェース1905は、インターネット等のネットワークに接続するためのインタフェースである。入力装置1906は、例えばキーボード及びマウス等であり、各種指定又は入力等を行うことができる。出力装置1907は、ディスプレイ及びプリンタ等である。
図13は、コンパイラ1302の機能構成図である。コンパイラ1302は、コンパイラのプログラムを図19のコンピュータに実行させることにより処理する。コンパイラ1302は、パーサー部76、中間コード変換部78、最適化部68及びコード生成部90を有し、ソースプログラム1301を入力し、機械語プログラム92及びチューニング情報92を出力する。最適化部68は、命令挿入部86を有する。
ソースプログラム1301は、図2(A)〜図5(A)のソースプログラム201,301,401,501に対応し、例えばFORTRAN言語やC言語等の高級言語で記述されている。パーサー部76は、ソースプログラム1301に対して、予約語(キーワード)等を抽出して字句解析する。中間コード変換部78は、パーサー部76から入力したソースプログラム1301の各ステートメントを一定規則に基づいて中間コードに変換する。ここで、中間コードは、典型的には、関数呼び出しの形式で表現されるコード(例えば、「+(int a, int b)」を示すコード;「整数aに整数bを加算する」ことを示す。)である。ただし、中間コードには、このような関数呼び出し形式のコードだけでなく、演算処理装置11の機械語命令も含まれる。中間コード変換部78は、中間コードを生成する際にプロファイル情報1304を参照して、最適な中間コードを生成する。
最適化部68は、中間コード変換部78より出力された中間コードについて、命令結合、冗長除去、命令並べ替え、レジスタ割り付け等の処理を行うことにより、実行速度の向上やコードサイズの削減等を行う。命令挿入部86は、プロファイル情報1304を参照し、図2(A)〜図5(A)のocl文を挿入する。なお、最適化部68は、キャッシュメモリ29のキャッシュミスに関する情報など、ユーザがソースプログラム1301を再作成する際のヒントとなるチューニング情報94を出力する。コード生成部90は、最適化部68から出力された中間コードに対して、内部に保持する変換テーブル等を参照することで、全てのコードを機械語命令に置き換えることで、機械語プログラム92を生成する。
プロファイラ1303は、図19のコンピュータがプロファイラのプログラムを実行することにより処理する。プロファイラ1303は、機械語プログラム92を実行し、プロファイル情報1304を生成する。プロファイル情報1304の詳細は、後に図14を参照しながら説明する。まず、コンパイラ1302は、ソースプログラム1301を機械語プログラム92に変換する。次に、プロファイラ1303は、機械語プログラム92を実行することにより、プロファイル情報1304を生成する。次に、コンパイラ1302は、プロファイル情報1304を参照し、ocl文を挿入し、機械語ブログラム92を生成する。次に、演算処理装置11が機械語プログラム92を実行する。
図14は、図13のプロファイラ1303の処理を示すフローチャートである。ステップS1401では、ユーザは、プロファイラ1303に対して、プロファイル情報取得の翻訳オプションを指定して、機械語プログラム92を翻訳させる。ステップS1402では、プロファイラ1303は、機械語プログラム92の実行により、プロファイル情報1304を出力する。プロファイル情報1304は、ループ回数、実行PC(プログラムカウンタ)アドレス、ループ内の配列要素ごとのアクセスアドレス等を有する。なお、アクセスアドレスをトレースするとプロファイル情報1304のファイルの出力サイズが大きくなるので、直前のアクセスアドレスとの差分情報やアクセス属性(直前アクセスアドレスと連続するストリームを抽出)だけにして、プロファイル情報1304のファイルサイズを縮小してもよく、形式は特に限定しない。
プロファイル情報1304の内容は、例えばプロフィル情報1404又は1405である。プロファイル情報1404は、アクセスデータアドレスを有し、各アドレスに4バイトデータが記憶されている場合には4番地毎のアドレスにデータが記憶される。したがって、プロファイル情報1404は、「20」番地から「2c」番地までの連続するアドレスの4個のデータが順にアクセスされていることを示す。
プロファイル情報1405は、データストリームの先頭アドレス、アクセスする単位、属性、連続領域の長さ、アクセス回数、連続アクセスするストリームIDを有する。また、プロファイル情報1304は、キャッシュミス数をアクセスアドレスごとに集計してもよく、その他パフォーマンスカウンタのイベントや翻訳時の静的構文情報を組み合わせてもよい。
図15は、図13のコンパイラ1302の命令挿入部86の処理を示すフローチャートであり、図2(A)の命令「hpf_start #p-1,#q」及び図3(A)の命令「hpf_stop」の挿入処理を示す。プロファイル情報1304は、例えばプロファイル情報1505である。ステップS1501では、命令挿入部86は、プロファイル情報1304を参照し、ソースプログラム内のループ処理のループ回数が第1の閾値より多く、かつループ処理により連続アクセスするデータの長さが第2の閾値より短いことの条件を満たすか否かをチェックする。ステップS1502において、条件を満たす場合にはステップS1503に進み、条件を満たさない場合には命令の挿入を行わずに処理を終了する。ステップS1503では、命令挿入部86は、図16(A)及び(B)に示すように、データアクセス時間を短縮するため、対象ループ処理に対してユーザから翻訳オプションで指定されたキャッシュミス回数p及びプリフェッチ位置qを命令「hpf_start #p-1,#q」に設定し、対象ループの直前に挿入する。同様に、命令挿入部86は、命令「hpf_stop」を対象ループの直後に挿入する。
なお、上記の第1及び第2の閾値は、コンパイラ内部で持っても、ユーザが翻訳オプション等で外部からコンパイラに与えてもよい。また、対象ループは、コンパイラが選択したループのうちすべてを対象としてもよく、ユーザが翻訳オプション等で指定した数で指定された対象ループの上位だけに限定してもよい。また、ステップS1502における判断するデータとしては、上記の第1及び第2の閾値以外にもループの実行時間や、キャッシュミス数、その他パフォーマンスカウンタのイベントや翻訳時の静的構文情報をさらに追加、組み合わせてもよく、判定方法も上記に限定しない。また、同様にこれら閾値はコンパイラ内部で持っても、ユーザが翻訳オプション等で外部からコンパイラに与えてもよい。
図16(A)は、対象ループn及び対象ループkに対して、それぞれ異なるキャッシュミス回数p及びプリフェッチ位置qを指定する例を示す図である。対象ループnの前には命令「hpf_start #p1-1,#q1」が挿入され、対象ループnの後には命令「hpf_stop」が挿入される。また、対象ループkの前には命令「hpf_start #p2-1,#q2」が挿入され、対象ループnの後には命令「hpf_stop」が挿入される。
図16(B)は、対象ループn及び対象ループk等に対して、相互に同じキャッシュミス回数p及びプリフェッチ位置qを指定する例を示す図である。対象ループn及び対象ループk等の前には命令「hpf_start #p-1,#q」が挿入され、対象ループn及び対象ループk等の後には命令「hpf_stop」が挿入される。
図17は、図13のコンパイラ1302の命令挿入部86の処理を示すフローチャートであり、図4(A)の命令「hpf_range #r」の挿入処理を示す。ステップS1701では、命令挿入部86は、プロファイル情報1304を参照して、連続アクセスのデータストリームを、1つのデータストリームアクセスとしてハードウェアプリフェッチを結合できないかチェックする。プロファイル情報1304は、例えばプロファイル情報1705である。
次に、ステップS1702では、命令挿入部86は、次式により、データストリームi及びデータストリームjの隙間のサイズをキャッシュラインのサイズSZに換算する。ここの例では、キャッシュラインのサイズは128とする。addr(j)はデータストリームjの先頭アドレス、addr(i)はデータストリームiの先頭アドレス、len(i)はデータストリームiの長さ、len(j)はデータストリームjの長さである。
SZ={addr(j)−(addr(i)+len(i))}/128
命令挿入部86は、アドレスaddr(i)とアドレスaddr(j)+len(j)の区間内で、アクセスID(i)からアクセスID(j)の間にて、他のデータストリームアクセスがない場合には、以下の処理を行う。その場合、命令挿入部86は、ストリーム隙間ラインサイズSZがゼロの場合、データストリームi及びデータストリームjを1つのデータストリームとみなしてそのままハードウェアプリフェッチ回路27に任せるため、命令「hpf_range #r」を挿入しない。また、命令挿入部86は、ストリーム隙間ラインサイズSZが1よりも大きい場合は、命令「hpf_range #r」に指定するキャッシュライン空き個数rに、求めたストリーム隙間ラインサイズSZを指定する。この場合、データストリームiとデータストリームjは、1つのデータストリームとみなすことができる。i及びjをすべてのデータストリーム間で検査する。
例えば、プロファイル情報1705の場合では、ID1のデータストリーム(0x20から0x20+10までのストリーム)とID2のストリーム(0x30から0x38までのストリーム)は、6バイトの空き空間がある。しかも、ID1からID2までのアクセス間にアドレス範囲(0x20〜0x38)と重なるアクセスがない。したがって、ID1及びID2の2つのストリームアクセスを1つのストリームとみなすことができる。ストリームの隙間をキャッシュラインサイズに換算して1よりも大きい場合は、命令「hpf_range #r」に指定するキャッシュライン空き個数rに、ストリーム隙間ラインサイズSZに換算した値を指定する。このように、命令「hpf_range #r」のキャッシュライン空き個数rを任意に調整することができる。
次に、ステップS1703では、命令挿入部86は、対象となるストリームについて、ストリームiのアクセス命令とストリームjのアクセス命令の間でハードウェアプリフェッチを継続させるための命令「hpf_range #r」を挿入する。
図18は、図13のコンパイラ1302の命令挿入部86の処理を示すフローチャートであり、図5(A)の命令「!ocl contact(A(i,j),(-n),k)」の展開処理を示す。ステップS1801では、命令挿入部86は、「!ocl contact(A(i,j),(-n),k)」等で指定されたプリフェッチすべき変数アドレスを算出する。
次に、ステップS1802では、命令挿入部86は、次式により、事前プリフェッチすべきアドレス(指定された変数アドレスのキャッシュライン番号から1次元要素のn要素前のアクセスアドレス)addrを算出する。
addr=[(i−1−n)+(j−1)×x }×L
ここで、i及びj方向順にアクセスする配列Aの配列サイズが(x,y)、要素サイズがLである2次元配列A(i,j)の場合、配列の先頭位置からの配列添字i,jの相対位置は、{(i−1)+(j−1)×x}×Lで表現できる。なお、2次元配列と同様に、一次元及び3次元以上の配列にも同様に適用できる。
次に、ステップS1803では、命令挿入部86は、「!ocl contact(A(i,j),(-n),k)」でユーザ指定された位置に、2個目の引数の「−n」であり、また書き込ませるキャッシュラインの数は「k」であるため、n要素前の算出した上記で算出したプリフェッチアドレスaddrを指定したプリフェッチに相当する命令「lddf [%l1-256],f2」及び次のキャッシュラインアクセスとなる「lddf [%l1-128],f2」及び次々のキャッシュラインアクセスとなる「lddf [%l1],f2」…の機械語をk個展開する。
本実施形態は、コンピュータがコンパイラ1302及びプロファイラ1303のプログラムを実行することによって実現することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体及び上記のプログラム等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、磁気テープ、不揮発性のメモリカード、ROM等を用いることができる。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
11 演算処理装置
21 命令フェッチ部
22 分岐予測部
23 一次命令キャッシュメモリ
24 命令バッファ
25 命令デコーダ
26 命令発行制御部
27 ハードウェアプリフェッチ回路
28 演算器
29 一次オペランドキャッシュメモリ
30 分岐制御部
31 レジスタ
32 命令完了制御部
33 分岐履歴更新部
34 二次キャッシュメモリ
35 メモリコントローラ

Claims (6)

  1. 複数のキャッシュラインにデータを記憶可能なキャッシュメモリと、
    前記キャッシュメモリのアドレスが連続するp個のキャッシュラインでキャッシュミスが発生すると、前記キャッシュミスしたキャッシュラインの後のキャッシュラインにデータをプリフェッチするハードウェアプリフェッチ回路と、
    キャッシュミス回数指定命令を入力すると、前記ハードウェアプリフェッチ回路のp個の値を変更する制御部と
    を有することを特徴とする演算処理装置。
  2. 前記ハードウェアプリフェッチ回路は、前記キャッシュミスしたキャッシュラインのq個後のキャッシュラインにデータをプリフェッチし、
    前記制御部は、プリフェッチ位置指定命令を入力すると、前記ハードウェアプリフェッチ回路のq個の値を変更することを特徴とする請求項1記載の演算処理装置。
  3. 前記制御部は、プリフェッチ停止命令を入力すると、前記ハードウェアプリフェッチ回路によるプリフェッチを停止させることを特徴とする請求項1又は2記載の演算処理装置。
  4. 前記ハードウェアプリフェッチ回路は、前記連続するp個のキャッシュラインの中にr個のキャッシュラインの空きがあっても、前記連続するp個のキャッシュラインでキャッシュミスが発生したと判断し、
    前記制御部は、キャッシュライン空き数指定命令を入力すると、前記ハードウェアプリフェッチ回路のr個の値を変更することを特徴とする請求項1〜3のいずれか1項に記載の演算処理装置。
  5. 複数のキャッシュラインにデータを記憶可能なキャッシュメモリと、
    前記キャッシュメモリのアドレスが連続するp個のキャッシュラインでキャッシュミスが発生すると、前記キャッシュミスしたキャッシュラインの後のキャッシュラインにデータをプリフェッチするハードウェアプリフェッチ回路とを有する演算処理装置の制御方法であって、
    制御部が、ダミーロード命令を入力すると、指定アドレスの前のアドレスのデータを一又は複数の前記キャッシュラインに書き込ませることを特徴とする演算処理装置の制御方法。
  6. キャッシュメモリのアドレスが連続するp個のキャッシュラインでキャッシュミスが発生すると、前記キャッシュミスしたキャッシュラインの後のキャッシュラインにデータをプリフェッチするハードウェアプリフェッチ回路を有する演算処理装置に入力する命令を生成するプログラムであって、
    ソースプログラム内のループ処理のループ回数が第1の閾値より多く、かつ前記ループ処理により連続アクセスするデータの長さが第2の閾値より短いか否かを比較し、
    前記ソースプログラム内のループ処理のループ回数が第1の閾値より多く、かつ前記ループ処理により連続アクセスするデータの長さが第2の閾値より短い場合には、前記ループ処理の前に、前記ハードウェアプリフェッチ回路のp個の値を変更するキャッシュミス回数指定命令を挿入する、
    処理をコンピュータに実行させるプログラム。
JP2013195562A 2013-09-20 2013-09-20 演算処理装置、演算処理装置の制御方法及びプログラム Active JP6119523B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013195562A JP6119523B2 (ja) 2013-09-20 2013-09-20 演算処理装置、演算処理装置の制御方法及びプログラム
US14/447,117 US20150089149A1 (en) 2013-09-20 2014-07-30 Arithmetic processing device and control method for arithmetic processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013195562A JP6119523B2 (ja) 2013-09-20 2013-09-20 演算処理装置、演算処理装置の制御方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2015060529A JP2015060529A (ja) 2015-03-30
JP6119523B2 true JP6119523B2 (ja) 2017-04-26

Family

ID=52692058

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013195562A Active JP6119523B2 (ja) 2013-09-20 2013-09-20 演算処理装置、演算処理装置の制御方法及びプログラム

Country Status (2)

Country Link
US (1) US20150089149A1 (ja)
JP (1) JP6119523B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6863112B2 (ja) * 2017-06-15 2021-04-21 富士通株式会社 情報処理装置、コンパイラ方法、およびコンパイラプログラム
US11461101B2 (en) * 2019-09-27 2022-10-04 Arm Technology (China) Co. LTD Circuitry and method for selectively controlling prefetching of program instructions
JP2022097858A (ja) 2020-12-21 2022-07-01 富士通株式会社 計算機および計算方法
US11740906B2 (en) * 2021-02-25 2023-08-29 Huawei Technologies Co., Ltd. Methods and systems for nested stream prefetching for general purpose central processing units
US12423101B1 (en) * 2024-04-26 2025-09-23 Google Llc Hardware guided software prefetch insertion

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5076616B2 (ja) * 2007-04-24 2012-11-21 富士通株式会社 プロセッサ及びプリフェッチ制御方法
JP5444889B2 (ja) * 2009-06-30 2014-03-19 富士通株式会社 演算処理装置および演算処理装置の制御方法
US8667225B2 (en) * 2009-09-11 2014-03-04 Advanced Micro Devices, Inc. Store aware prefetching for a datastream
US8850123B2 (en) * 2010-10-19 2014-09-30 Avago Technologies General Ip (Singapore) Pte. Ltd. Cache prefetch learning

Also Published As

Publication number Publication date
US20150089149A1 (en) 2015-03-26
JP2015060529A (ja) 2015-03-30

Similar Documents

Publication Publication Date Title
CN106716362B (zh) 用于将微指令序列重排序为优化的微指令序列以实现指令集不可知的运行时架构的分配和发出级
KR102008733B1 (ko) 스토어 상위 서열에 기초하여 상이한 스레드들로부터의 포워딩을 구현하는 스레드에 무관한 로드 스토어 버퍼
KR101993562B1 (ko) Load store 재정렬 및 최적화를 구현하는 명령어 정의
JP4374221B2 (ja) コンピュータシステムおよび記録媒体
KR101774993B1 (ko) 분산된 구조를 갖는 동적 디스패치 윈도우를 가지는 가상 load store 큐
KR101745640B1 (ko) 공유 메모리 자원들을 사용하는 메모리 일관성 모델에서 비순차 load들에 대한 로크 기반 및 동기화 기반 방법
CN104583957B (zh) 具有无消歧乱序加载存储队列的重新排序的推测性指令序列
KR101996351B1 (ko) 통합된 구조를 갖는 동적 디스패치 윈도우를 가지는 가상 load store 큐
KR101996462B1 (ko) 명확화 없는 비순차 load store 큐
CN107077368B (zh) 用于指令集不可知的运行时架构的系统
KR101804027B1 (ko) 메모리로부터 순차적으로 판독하는 load들을 구성하는 메모리 일관성 모델에서 비순차 load들을 갖는 세마포어 방법 및 시스템
JPH08194615A (ja) 情報処理装置
JP6119523B2 (ja) 演算処理装置、演算処理装置の制御方法及びプログラム
CN106796528B (zh) 用于选择包括指令序列的指令的系统和方法
CN107077371B (zh) 用于不可知的运行时架构的系统、微处理器和计算机系统
KR20150020246A (ko) Load store 재정렬 및 최적화로부터 생기는 투기적 포워딩 예측 착오/오류로부터의 복원을 구현하는 방법 및 시스템
CN107077370A (zh) 执行及时优化器用于执行来自访客镜像的代码的系统转换器
Kavi et al. Execution and Cache Performance of the Scheduled Dataflow Architecture.
JP5229383B2 (ja) プリフェッチ要求回路
KR101832574B1 (ko) 모든 store들이 캐시의 모든 워드들에 대한 검사를 스누핑해야만 하는 것을 방지하기 위해 store들을 필터링하는 방법 및 시스템
JP3835764B2 (ja) プロセッサおよび記録媒体
JP5630352B2 (ja) レジスタ配置最適化方法、レジスタ配置最適化プログラム、及びレジスタ配置最適化装置
JP2009277243A (ja) コンパイラ装置およびオペレーティングシステム
JP5541491B2 (ja) マルチプロセッサ、これを用いたコンピュータシステム、およびマルチプロセッサの処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160606

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170222

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: 20170228

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170313

R150 Certificate of patent or registration of utility model

Ref document number: 6119523

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150