JP6138384B2 - プログラム配置装置、プログラム配置方法及びプログラム配置プログラム - Google Patents

プログラム配置装置、プログラム配置方法及びプログラム配置プログラム Download PDF

Info

Publication number
JP6138384B2
JP6138384B2 JP2016569166A JP2016569166A JP6138384B2 JP 6138384 B2 JP6138384 B2 JP 6138384B2 JP 2016569166 A JP2016569166 A JP 2016569166A JP 2016569166 A JP2016569166 A JP 2016569166A JP 6138384 B2 JP6138384 B2 JP 6138384B2
Authority
JP
Japan
Prior art keywords
function
program
cache memory
instruction code
information
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
JP2016569166A
Other languages
English (en)
Other versions
JPWO2016113869A1 (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Publication of JPWO2016113869A1 publication Critical patent/JPWO2016113869A1/ja
Application granted granted Critical
Publication of JP6138384B2 publication Critical patent/JP6138384B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、プログラム配置装置、プログラム配置方法及びプログラム配置プログラムに関する。
コンピュータシステムにおいて、性能向上を目的として、キャッシュメモリが利用される。コンピュータシステムでは、メインメモリの情報をキャッシュメモリにコピーしておくことにより、高速な読出しが可能となる。しかし、キャッシュメモリは小容量のため、命令の読出しに伴う情報の追い出し、すなわち競合キャッシュミスが発生する。競合キャッシュミスの発生は、プログラムの実行速度の低下につながるため、出来る限り抑制する必要がある。
そこで、競合キャッシュミスを発生する可能性の高い命令同士が、同一のキャッシュラインに割り当てられないように配置する方法が研究されている。
プログラムが関数単位で構成されることに着目し、関数間の呼び出し関係を表す関数強度を定義し、関数強度が高い関数同士が同一のキャッシュラインに割り当てられないようにする手法が提案されている。
特許文献1では、プログラム実行時に、関数の呼び出し順を時系列として表現した動的関数フローを生成し、生成した動的関数フローに基づいて、ある関数と他の全ての関数との関数強度情報を求める。特許文献1では、その関数強度情報に基づいて、関数をメモリ空間に配置することで、競合キャッシュミスを削減する手法が開示されている。
また、メインメモリからキャッシュメモリに対して、キャッシュライン単位で、データのコピーが実行されることに着目した手法が提案されている。
特許文献2では、関数をキャッシュラインサイズの命令コードブロック、すなわちICBに分割してシミュレーションし、ICB単位でフロー情報を抽出する。特許文献2では、各ICBの近傍内に、自分と異なる関数に属するICBの出現頻度を考慮した情報を、自ICBから見た他のICBの近傍重み情報として求める。この近傍重み情報に基づいて、関数配置を決定することによって、競合キャッシュミスを削減する手法が開示されている。
特開2009−032198号公報 特開2010−218218号公報
従来技術では、プログラム実行時における関数相互、またはキャッシュライン相互の時系列的な関係に基づいて、関数間の相関性を求め、相関性の高い関数同士が同一のキャッシュラインに割り当てられないように関数をメモリ空間に配置していた。
しかし、キャッシュメモリの構成によっては、相関性の高い関数同士でも、競合キャッシュミスが発生しない場合が存在する。例えば、キャッシュメモリとして4ウェイ構成を採用した場合、相関性の高い4つの関数が、連続的かつ繰り返し呼び出されたとしても、競合キャッシュミスは発生しない。
このように、キャッシュメモリの構成と関数の呼び出しパターンによっては、競合キャッシュミスが発生しない可能性があるにも関わらず、従来技術では関数の相関性を求める際に、このような事象を考慮していない。そのため、キャッシュメモリの構成と関数の呼び出しパターンによっては、最適な配置が求まらないという課題があった。
本発明は、キャッシュメモリの構成と関数の呼び出しパターンに依らず、最適な関数配置情報を出力することを目的とする。
本発明に係るプログラム配置装置は、少なくとも1つのウェイを使用するキャッシュメモリに複数の関数を含むプログラムを配置するプログラム配置装置において、
前記プログラムを実行することにより、前記複数の関数の各関数の呼び出し順を取得する取得部と、
前記キャッシュメモリの前記ウェイの数分の格納エリアを有する仮想キャッシュメモリを生成する仮想キャッシュメモリ生成部と、
前記仮想キャッシュメモリに対して前記複数の関数の各関数を前記呼び出し順に呼出命令コードとして呼び出すシミュレーションを実行し、既に呼び出した前記呼出命令コードを再度呼び出した際に前記格納エリアに前記呼出命令コード以外の関数が格納されている競合が発生した場合、発生した前記競合の情報を競合情報として取得するシミュレータ部と、
前記競合情報に基づいて、前記キャッシュメモリにおける前記複数の関数の各関数の配置位置を決定する配置位置決定部と
を備える。
本発明に係るプログラム配置装置によれば、取得部が、関数の呼び出し順を取得し、仮想キャッシュメモリ生成部が、キャッシュメモリのウェイの数分の格納エリアを有する仮想キャッシュメモリを生成する。また、シミュレータ部が、仮想キャッシュメモリに対して複数の関数の各関数を前記呼び出し順に呼出命令コードとして呼び出すシミュレーションを実行し、競合が発生した場合、発生した前記競合の情報を競合情報として取得する。さらに、配置位置決定部が、競合情報に基づいてキャッシュメモリにおける関数の配置位置を決定する。よって、キャッシュメモリの構成及び関数の呼び出し順を加味した最適な関数の配置位置を得ることができる。
実施の形態1に係るプログラム配置装置を示すブロック構成図。 実施の形態1に係る仮想キャッシュシミュレータ部のブロック構成図。 実施の形態1に係るICBの実行系列を示す図である。 実施の形態1に係る競合情報の構成図。 実施の形態1に係るプログラム配置装置のハードウェア構成図。 実施の形態1に係るプログラム配置装置のプログラム配置方法の動作を示すフロー図。 実施の形態1に係るシミュレーション処理の動作を示すフロー図。 実施の形態1に係る仮想キャッシュメモリ生成処理を説明する図。 実施の形態1に係る仮想キャッシュメモリ生成処理を説明する図。 関数Aと関数Bが連続したメモリ領域に配置された場合のセット数8のキャッシュメモリ上の配置状況を示す図。 関数Aと関数Bが連続したメモリ領域に配置された場合のセット数8のキャッシュメモリ上の配置状況を示す図。 キャッシュミス発生時における競合情報への登録方法を説明する図。 キャッシュミス発生時における競合情報への登録方法を説明する図。 実施の形態1に係る競合情報の一例図。 実施の形態1に係る競合情報登録処理の動作を示すフロー図。 実施の形態1に係るステップS2050の詳細処理フロー図。 実施の形態1に係るステップS2051の詳細処理フロー図。 実施の形態1に係る仮想キャッシュメモリ更新処理を示す図。 実施の形態1に係る仮想キャッシュメモリ更新処理を示す図。 実施の形態1に係る配置位置決定処理の動作を示すフロー図。 実施の形態1に係るルール131の構成図。 実施の形態1に係るステップS303の既配置関数との競合ミス数の計算処理の動作を示すフロー図。 関数Bをセット0に配置した場合の、キャッシュミス発生回数の計算結果を示す図。 関数Bをセット1に配置した場合の、キャッシュミス発生回数の計算結果を示す図。 関数Aをセット0に配置した場合の、キャッシュミス発生回数の計算結果を示す図。 関数Aをセット1に配置した場合の、キャッシュミス発生回数の計算結果を示す図。 関数配置情報90の一例を示す図。 実施の形態2に係るプログラム配置装置を示すブロック構成図。 実施の形態2に係るプログラム配置装置のプログラム配置方法の動作を示すフロー図。 実施の形態2に係る関数配置調整処理の動作を示すフロー図。 関数配置情報90の一例を示す図。
実施の形態1.
***構成の説明***
図1は、実施の形態1に係るプログラム配置装置500を示すブロック構成図である。
プログラム配置装置500は、プログラム10、取得部21、呼び出し順31、キャッシュ構成情報40、プログラム情報50、仮想キャッシュシミュレータ部60、競合情報70、配置位置決定部80、関数配置情報90、関数配置部100、最適化済プログラム110、優先順位テーブル130を備える。
プログラム配置装置500は、少なくとも1つのウェイを使用するキャッシュメモリに複数の関数を含むプログラムを配置する。プログラム配置装置500は、コンピュータが備えるキャッシュメモリにおけるプログラム10の配置位置を最適化するプログラム最適化装置である。
プログラム10は、競合キャッシュミスの削減を行う対象である最適化対象プログラムである。プログラム10は、ソースコード、オブジェクトファイル及び実行ファイルの内の1つのファイル、または複数のファイルを含む。
取得部21は、プログラム10を実行することにより、複数の関数の各関数に含まれる命令コードの呼び出し順31を取得する。取得部21は、プログラム10を実行し、関数の呼び出し順31である命令トレース30を取得するプログラム実行部20である。プログラム実行部20は、命令トレース30を取得できる機構が備わっているのであれば、ターゲットプロセッサを含む実機、またはターゲットプロセッサを模擬するシミュレータのどちらであってもよい。
命令トレース30は、プログラム10を実行した際の、実行命令の命令アドレスを時系列に並べたデータである。
キャッシュ構成情報40は、プログラム10を、最終的に動作させるターゲットプロセッサに搭載される、キャッシュメモリ401の情報であり、キャッシュラインサイズ、ウェイ数、セット数及び置換アルゴリズムの種類の情報を含む。
プログラム情報50は、プログラム10に含まれる全関数について、関数のラベル、配置アドレス、関数のサイズの組の情報を保持する。
仮想キャッシュシミュレータ部60は、命令トレース30、キャッシュ構成情報40及びプログラム情報50を入力として、競合情報70を出力する。仮想キャッシュシミュレータ部60は、命令トレース30に基づいて、実キャッシュメモリであるキャッシュメモリ401では取得できない、各関数に含まれるICB単位での競合情報を生成し、競合情報70として出力する。
競合情報70は、各関数に含まれるキャッシュラインサイズのICB単位での競合の情報を保持する競合ミスデータベースである。
配置位置決定部80は、競合情報70に基づいて、キャッシュメモリ401における複数の関数の各関数の配置位置を決定する。配置位置決定部80は、キャッシュ構成情報40、プログラム情報50及び競合情報70を入力とし、関数配置情報90を出力する。配置位置決定部80は、決められた優先順位に基づいて、各関数を順番にメモリ空間に配置していく。配置位置決定部80は、ある関数を配置する際には、競合情報70を参照し、既配置の関数との競合キャッシュミス発生回数を求める。配置位置決定部80は、この競合キャッシュミス発生回数が最小となるように、関数の配置場所を決定する。
関数配置情報90は、配置位置決定部80により算出された、競合キャッシュミス発生回数を最小にする関数配置のリストであり、全ての関数のラベルと配置アドレスの組で構成される。
関数配置部100は、プログラム10と関数配置情報90とを入力として、関数の再配置を実行し、最適化済プログラム110を出力する。
最適化済プログラム110は、プログラム10と動作は同じであるが、プログラム内の関数配置が異なり、競合キャッシュミスが最小化されたプログラムである。
優先順位テーブル130は、複数の関数の各関数の優先順位を判定するためのルール131を設定する。配置位置決定部80は、優先順位テーブル130に基づいてキャッシュメモリ401に配置する複数の関数の各関数の優先順位を判定する。配置位置決定部80は、判定した優先順位の順に複数の関数の各関数の配置位置を決定する。
各機能ブロックは、1つあるいは複数のプログラムとして実装されていてもよいし、複数の機能ブロックが1つのプログラムとして実装されていてもよい。また、命令トレース30、キャッシュ構成情報40、プログラム情報50、競合情報70及び関数配置情報90はファイルとして存在してもよいし、メモリ上にのみ配置されるデータであってもよい。
図2は、本実施の形態に係る仮想キャッシュシミュレータ部60のブロック構成図である。
仮想キャッシュシミュレータ部60は、仮想キャッシュメモリ生成部601とシミュレータ部605とを備える。シミュレータ部605は、仮想キャッシュデータ保持部602、命令トレース読出し部603、競合情報生成部604を備える。
仮想キャッシュメモリ生成部601は、キャッシュメモリ401のウェイの数分の格納エリア4031を有する仮想キャッシュメモリ403を生成する。具体的には、仮想キャッシュメモリ生成部601は、仮想キャッシュメモリ403として、アドレスが連続する複数のエリア4039を生成する。複数のエリア4039は、ウェイの数分の格納エリア4031とウェイの数分の格納エリア4031の後ろに連続する複数の仮格納エリア4032とからなる。以下において、格納エリア4031を実ウェイと表記し、仮格納エリア4032を仮想ウェイと表記する場合がある。
以上のように、仮想キャッシュメモリ生成部601は、キャッシュ構成情報40に基づいて、仮想キャッシュデータ保持部602のデータ構造である仮想キャッシュメモリ403を構築する。
シミュレータ部605は、仮想キャッシュメモリ403に対して複数の関数の各関数に含まれる命令コード301を呼び出し順31に呼出命令コード4033として呼び出すシミュレーションを実行する。シミュレータ部605は、既に呼び出した呼出命令コード4033を再度呼び出した際に格納エリア4031に呼出命令コード4033以外の命令コード301が格納されている競合が発生した場合、発生した競合の情報を競合情報70として取得する。
具体的には、シミュレータ部605は、呼出命令コード4033を呼び出した際に格納エリア4031に対して競合が発生し、かつ、呼出命令コード4033が仮格納エリア4032にある場合、次のように競合命令コード組701を取得する。シミュレータ部605は、既に仮想キャッシュメモリ403に格納されている呼出命令コード4033より前のエリアに格納されている全ての命令コードと呼出命令コードとの組を競合命令コード組701として取得する。
また、シミュレータ部605は、競合命令コード組701を取得した後に、既に仮想キャッシュメモリ403に格納されている呼出命令コードより前のエリアに格納されている全ての命令コードをそれぞれ1つ後ろのエリアに移動する。そして、シミュレータ部605は、既に仮想キャッシュメモリ403に格納されている呼出命令コード4033を仮想キャッシュメモリ403の先頭の格納エリア4031に格納し、呼び出し順31における呼出命令コード4033の次の命令コード301を呼出命令コード4033として呼び出す。
ここで、呼び出し順31である命令トレース30には、関数をキャッシュラインサイズに分割した命令コード301、すなわち関数毎のICBの実行系列303が設定されている。よって、シミュレータ部605により呼出命令コード4033として呼び出される命令コード301とは、関数をキャッシュメモリ401のキャッシュラインサイズに分割した関数毎のICBである。以下、命令コード301を命令コードブロック、すなわちICBとして説明する。競合命令コード組701は、競合に関連するICBの組み合わせである競合ICB702である。
仮想キャッシュデータ保持部602は、仮想キャッシュメモリ生成部601により構築された仮想キャッシュメモリ403のデータ構造に基づいて、命令トレース30を読み込み、キャッシュの動作を模擬する。
命令トレース読出し部603は、命令トレース30に基づいて、命令コード301、すなわちICBを順番に取り出し、仮想キャッシュデータ保持部602に渡す。
競合情報生成部604は、仮想キャッシュデータ保持部602でキャッシュミスが発生した際に、キャッシュミスを引き起こすICBの組み合わせに関する情報を競合情報70に登録する。
以上のように、シミュレータ部605は、複数の関数の各関数に含まれる命令コードのうち競合を発生させた命令コード301の組み合わせを競合命令コード組701として取得する。シミュレータ部605は、競合命令コード組701により発生した競合の回数を競合回数として計数し、計数した競合回数を競合情報70として取得する。
図3を用いて、命令トレース30について説明する。また、図4を用いて、競合情報70の構成について説明する。
命令トレース30より、図3のICBの実行系列303が得られているものとする。競合情報生成部604は、図3のICBの実行系列303に基づいて、図4に示す競合情報70を生成する。
図4に示す通り、競合情報70は、全ICBごとの競合ミスデータレコード71から構成される。競合ミスデータレコード71は、ICB名72、自ICBとしての合計ミス数73、他ICBとしての合計ミス数74及び1個以上の競合ミスエントリ75を有する。
競合ミスエントリ75は、ミスID76、競合ICB数77及び競合ICBごとのミス数78から構成される。自ICBとは、着目しているICB自身のことを表しており、図4のA0の競合ミスデータレコード71においては、A0が自ICBとなる。他ICBとは、着目しているICBが競合している他のICBの集合を表しており、図4のA0の競合ミスデータレコード71においては、B0、C0が他ICBとなる。競合ICBとは、あるキャッシュミスが発生した際に、競合する全ICBの集合を表す。
ICB名72は各ICBを識別するための名前である。
自ICBとしての合計ミス数73は、自分自身を参照する時に発生した競合キャッシュミス回数を表す。
他ICBとしての合計ミス数74は、自分自身と競合する、他のICBを参照する時に発生した、競合キャッシュミス回数を表す。
競合ミスエントリ75は、あるICBの組み合わせにおける、キャッシュミスの発生状況を示すデータであり、競合ミスデータレコード71ごとに1個以上存在する。
ミスID76は、各ICB内の競合キャッシュミスを一意に識別するためのIDである。
競合ICB数77は、競合キャッシュミス発生時に関連するICBの数を表す。競合ICB数77には、自ICBも含まれる。同じICB内において、同じ競合ICB数であるにも関わらず、別のキャッシュミスとして記録されているのは、競合キャッシュミスの発生回数を、競合ICBの組み合わせごとに保持しているからである。
競合ICBごとのミス数78は、競合キャッシュミス発生時に関連するICBごとの、競合キャッシュミス発生回数を表す。競合ICBごとのミス数78の値の意味を、図4のA0の競合ミスデータレコード71を例に説明する。A0に含まれる競合ミスエントリ75の内、ミスID76が3の行に注目すると、競合ICB数77が2で、競合ICBごとのミス数78はA0で1、B0で斜線、C0で0が入力されている。ミスIDが3の行は、A0とC0との2つのICBを競合ICBとして発生したキャッシュミスの回数が設定されている。数字の入力されているICBは、キャッシュミスに関連していることを表し、斜線のICBは関連していないことを表す。よって、ミスIDが3の行では、A0とC0とに数字が設定されている。また数字は、競合ICBの組み合わせにより発生したキャッシュミスの発生回数を示している。ミスIDが3の行では、A0とC0の組み合わせにおいて、A0参照時に1回キャッシュミスが発生し、C0の参照時にはキャッシュミスが発生しないことを表す。
図5を用いて、本実施の形態に係るプログラム配置装置500のハードウェア構成の一例について説明する。
プログラム配置装置500のハードウェア構成例を図5を参照して説明する。
プログラム配置装置500はコンピュータである。
プログラム配置装置500は、プロセッサ901、補助記憶装置902、メモリ903、通信装置904、入力インタフェース905、ディスプレイインタフェース906といったハードウェアを備える。
プロセッサ901は、信号線910を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
入力インタフェース905は、入力装置907に接続されている。
ディスプレイインタフェース906は、ディスプレイ908に接続されている。
プロセッサ901は、プロセッシングを行うIC(Integrated Circuit)である。
プロセッサ901は、例えば、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、GPU(Graphics Processing Unit)である。
補助記憶装置902は、例えば、ROM(Read Only Memory)、フラッシュメモリ、HDD(Hard Disk Drive)である。
メモリ903は、例えば、RAM(Random Access Memory)である。
通信装置904は、データを受信するレシーバー9401及びデータを送信するトランスミッター9402を含む。
通信装置904は、例えば、通信チップ又はNIC(Network Interface Card)である。
入力インタフェース905は、入力装置907のケーブル911が接続されるポートである。
入力インタフェース905は、例えば、USB(Universal Serial Bus)端子である。
ディスプレイインタフェース906は、ディスプレイ908のケーブル912が接続されるポートである。
ディスプレイインタフェース906は、例えば、USB端子又はHDMI(登録商標)(High Definition Multimedia Interface)端子である。
入力装置907は、例えば、マウス、キーボード又はタッチパネルである。
ディスプレイ908は、例えば、LCD(Liquid Crystal Display)である。
補助記憶装置902には、図1に示す取得部21、仮想キャッシュシミュレータ部60、配置位置決定部80、関数配置部100(以下、取得部21、仮想キャッシュシミュレータ部60、配置位置決定部80、関数配置部100をまとめて「部」と表記する)の機能を実現するプログラムが記憶されている。上述したプログラム配置装置500が備える「部」の機能を実現するプログラムは、プログラム配置プログラムと称される。プログラム配置プログラムは、1つのプログラムであってもよいし、複数のプログラムから構成されていてもよい。
このプログラム配置プログラムは、メモリ903にロードされ、プロセッサ901に読み込まれ、プロセッサ901によって実行される。
更に、補助記憶装置902には、OS(Operating System)も記憶されている。
そして、OSの少なくとも一部がメモリ903にロードされ、プロセッサ901はOSを実行しながら、「部」の機能を実現するプログラムを実行する。
図5では、1つのプロセッサ901が図示されているが、プログラム配置装置500が複数のプロセッサ901を備えていてもよい。
そして、複数のプロセッサ901が「部」の機能を実現するプログラムを連携して実行してもよい。
また、「部」の処理の結果を示す情報やデータや信号値や変数値が、メモリ903、補助記憶装置902、又は、プロセッサ901内のレジスタ又はキャッシュメモリにファイルとして記憶される。
「部」を「サーキットリー」で提供してもよい。
また、「部」を「回路」又は「工程」又は「手順」又は「処理」に読み替えてもよい。
「回路」及び「サーキットリー」は、プロセッサ901だけでなく、ロジックIC又はGA(Gate Array)又はASIC(Application Specific Integrated Circuit)又はFPGA(Field−Programmable Gate Array)といった他の種類の処理回路をも包含する概念である。
なお、プログラムプロダクトと称されるものは、「部」として説明している機能を実現するプログラム配置プログラムが記録された記憶媒体、記憶装置などであり、見た目の形式に関わらず、コンピュータ読み取り可能なプログラムをロードしているものである。
***動作の説明***
図6を用いて、本実施の形態に係るプログラム配置装置500のプログラム配置方法、プログラム配置処理S10について説明する。
上述したように、プログラム配置プログラムは、少なくとも1つのウェイを使用するキャッシュメモリ401に複数の関数を含むプログラム10を配置するコンピュータであるプログラム配置装置500に実行させるプログラムである。
取得処理S1において、取得部21は、プログラム10を実行することにより、複数の関数の各関数に含まれる命令コード301の呼び出し順31を取得する取得処理S1を実行する。すなわち、プログラム実行部20は、プログラム10を実行し、命令トレース30を抽出する。
仮想キャッシュメモリ生成処理S1aにおいて、仮想キャッシュメモリ生成部601は、キャッシュメモリ401のウェイの数分の格納エリア4031を有する仮想キャッシュメモリ403を生成する仮想キャッシュメモリ生成処理S1aを実行する。
シミュレーション処理S2において、シミュレータ部605は、仮想キャッシュメモリ403に対して命令コード301を呼び出し順31に呼出命令コード4033として呼び出すシミュレーション処理S2を実行する。シミュレーション処理S2において、シミュレータ部605は、既に呼び出した呼出命令コード4033を再度呼び出した際に格納エリア4031に呼出命令コード以外の命令コードが格納されている競合が発生した場合、競合の情報を競合情報70として取得する。すなわち、シミュレーション処理S2において、仮想キャッシュシミュレータ部60が、命令トレース30、キャッシュ構成情報40及びプログラム情報50に基づいて、競合情報70を生成する。
配置位置決定処理S3において、配置位置決定部80は、競合情報70に基づいて、キャッシュメモリ401における複数の関数の各関数の配置位置801を決定する配置位置決定処理S3を実行する。すなわち、配置位置決定処理S3において、配置位置決定部80が、キャッシュ構成情報40、プログラム情報50及び競合情報70を入力とし、関数の配置位置801に関する関数配置情報90を生成する。
最後に、関数配置処理S4において、関数配置部100が、プログラム10と関数配置情報90とを入力として、関数をキャッシュメモリ401に配置する関数配置処理S4を実行し、最適化済プログラム110を出力する。
図7は、本実施の形態に係る仮想キャッシュシミュレーション処理S200の動作を示すフロー図である。
仮想キャッシュシミュレーション処理は、仮想キャッシュメモリ生成処理S1a及びシミュレーション処理S2を備える。仮想キャッシュシミュレータ部60は、命令トレース30、キャッシュ構成情報40及びプログラム情報50の情報に基づいて、競合情報70を生成する仮想キャッシュシミュレーション処理S200を実行する。
<仮想キャッシュメモリ生成処理S1a>
ステップS200において、仮想キャッシュメモリ生成部601が、キャッシュ構成情報40に基づいて、仮想キャッシュメモリ403を生成する仮想キャッシュメモリ生成処理S1aを実行する。仮想キャッシュメモリ生成処理S1aの詳細については後述する。仮想キャッシュデータ保持部602は、仮想キャッシュメモリ生成部601が構成する仮想キャッシュメモリ403にデータを保持する。
<シミュレーション処理S2>
ステップS201において、命令トレース読出し部603は、命令トレース30を最後まで読み出したか判断し、読み出していなければステップS202に遷移し、読み出していれば処理を終了する。
ステップS202において、命令トレース読出し部603が、命令トレース30から命令アドレスを1つ取り出し、ステップS203に遷移する。
ステップS203において、命令トレース読出し部603が、取り出した命令アドレスが含まれるICBを求めるICB取得処理S203を実行する。命令トレース読出し部603は、ICB取得処理S203を実行した後、ステップS204に遷移する。
ステップS204において、競合情報生成部604が、ICBがキャッシュミスを起こすか判断する。競合情報生成部604は、キャッシュミスが発生すればステップS205に遷移し、発生しなければステップS206に遷移する。
ステップS205では、競合情報生成部604は、キャッシュミス発生時のICBの組み合わせ情報を競合ICB702として、競合情報70に登録し、ステップS206に遷移する。ステップS205の詳細は後述する。
ステップS206では、読み出したブロックに応じて、キャッシュの内容を更新し、ステップS201に戻る。仮想キャッシュシミュレータ部60は、上記の処理をステップS201が真になるまで、すなわちステップS201においてYESになるまで続ける。
<仮想キャッシュメモリ生成処理S1aの詳細説明>
図8及び図9を用いて、仮想キャッシュメモリ生成処理S1aについて説明する。
仮想キャッシュメモリ生成部601は、キャッシュ構成情報40に基づいて、仮想キャッシュメモリ403の構成を変化させる。仮想キャッシュメモリ生成部601は、アドレスが連続する複数のエリア4039を生成する。複数のエリア4039は、ウェイの数分の実ウェイである格納エリア4031と、格納エリア4031の後ろに連続する複数の仮想ウェイである仮格納エリア4032とから構成される。
図8は、キャッシュメモリ401が、ダイレクトマップ方式、ウェイの数は1、セット数2、64Bキャッシュライン、LRU(Least Recently Used)方式である場合の仮想キャッシュメモリ403の生成方法を示している。
図9は、キャッシュメモリ401が、2ウェイセットアソシアティブ方式、ウェイの数は2、セット数4、64Bキャッシュライン、LRU方式である場合の、仮想キャッシュメモリ403の生成方法を示している。
仮想キャッシュメモリ403は、キャッシュメモリ401のウェイ数及びセット数に関わらず、セット数1のNウェイセットアソシアティブキャッシュとして構成される。ここでNは、使用者が任意に設定できるパラメータであり、大きい値を設定するほど、多数のICB間の相関性を観測することができる。
上記の通り、仮想キャッシュメモリ403はNウェイとして構成されるが、キャッシュメモリ401の構成によって、シミュレーションを実行する際のキャッシュミスを判定するタイミングが異なる。すなわち、仮想キャッシュメモリ生成処理S1aでは、キャッシュメモリ401のウェイの数分を格納エリア4031、すなわち実ウェイとして扱い、残りのウェイを仮格納エリア4032、すなわち仮想ウェイとして扱う。
図8の例では、実ウェイが1、仮想ウェイがN−1となる。図9の例では、実ウェイが2、仮想ウェイがN−2となる。アクセスしたいデータが、仮想ウェイに入っていたとしても、実ウェイに入っていなければ、競合情報生成部604はキャッシュミスが発生したものとして扱う。上記の通り、仮想キャッシュメモリ403を構成することで、キャッシュメモリ401では観測することができない、キャッッシュミス発生タイミングでの、ICB間の相関性を検出する。仮想キャッシュメモリ403のキャッシュラインサイズ及び置換アルゴリズムは、キャッシュメモリ401と同様である。
<ICB取得処理S203>
ステップS203における命令アドレスが含まれるICBを求めるICB取得処理S203について補足する。
命令アドレスが含まれるICBを求めるためには、関数をどのようにICBへ分割するかを選択する必要がある。手法としては、図10に示す関数の先頭からICBのサイズで分割する方法と、図11に示す関数が含まれるキャッシュラインの先頭から分割する方法とがある。
図10及び図11は、関数Aと関数Bとが連続したメモリ領域に配置された場合の、セット数8のキャッシュメモリ上の配置状況を示している。関数Aはセット0からセット3に配置され、関数Bはセット3からセット7に配置されている。ある関数のICBを表現する際には、関数のラベルに、その関数におけるICBの通し番号を付加した形式を使用する。ここでは、関数のラベルA及びBに、その関数におけるICBの通し番号0,1,2,3が付加されている。
図10に示す手法では、関数の先頭からICBへ分割する。関数AはA0からA3までのように分割され、関数BはB0からB3のように分割される。このように、図10に示す手法では実際のキャッシュ配置は考慮せず、関数の先頭を基準に分割を行う。
一方、図11に示す手法では、ICBへの分割は、実際のメモリ配置を考慮した上で、キャッシュライン単位で行う。関数Aのセット0からセット2の命令コードは、A0、A1、A2にそれぞれ分割される。関数Aのセット3のように、他の関数Bと共有している場合は、自分の関数に属する命令コードのみをICBとして分割する。つまり、A3の内容の内、前半分は関数Aの命令コードで、残りの半分は何も入っていないものとする。
また、関数Bのセット3は、キャッシュラインの先頭ではなく、真ん中から始まっている。このような場合であっても、関数Bの先頭からではなく、セット3のキャッシュラインの先頭からICBへの分割を実行する。つまり、B0の前半分は何も入っておらず、残りの半分に関数Bの命令コードが入っているものとする。
上記の通り、メモリ配置を考慮したICBの分割を実行することにより、実際のプログラム動作通りの、正確な競合キャッシュミス発生状況を記録することができる。そのため、本実施の形態では、図11に示す手法を採用する。
<競合情報登録処理S205>
ICBの組み合わせ情報を競合情報70に登録する競合情報登録処理S205について図12から図14を用いて説明する。
ここでは、命令トレース30より、図3のようなICBの実行系列303が得られている場合を考える。
図12は、1回目の呼出命令コード4033であるC0を参照したタイミングでの、実ウェイ数1の仮想キャッシュメモリ403の内容を示している。1回目のC0を参照したタイミングでは、実ウェイにC0は無いため、キャッシュミスが発生する。仮想ウェイにもC0は存在しないため、1回目のC0への参照は初期参照ミスであることが分かる。初期参照ミスの場合、競合情報70への情報の記録は行わない。
図13は、2回目の呼出命令コード4033であるB0を参照したタイミングでの、実ウェイ数1の仮想キャッシュメモリの内容を示している。2回目のB0を参照したタイミングでは、実ウェイにB0は無いため、キャッシュミスが発生する。一方、仮想ウェイにはB0が存在するため、2回目のB0への参照は競合キャッシュミス、すなわち競合が発生したとして扱う。仮想ウェイに存在する呼出命令コード4033であるB0より左側にあるすべてのICBと呼出命令コード4033であるB0とを競合ICB702として、競合情報70に登録する。すなわち、シミュレータ部605は、仮想ウェイに存在する呼出命令コード4033であるB0より前のエリアにある全てのICBとB0とを競合ICB702として、競合情報70に登録する。
競合情報生成部604は、まずB0に対応する競合ミスデータレコード71に、B0及びC0の組み合わせによる自ICBの競合キャッシュミスとして記録する。競合情報生成部604は、次に競合ICBであるC0の競合ミスデータレコード71に、B0及びC0の組み合わせによる他ICBの競合キャッシュミスとして記録する。競合ICBが他にもあった場合は、上記C0と同様に処理を実行する。2回目のB0参照後の競合情報70は図14のようになる。上記の通り、競合情報70に記録する際には、自ICB参照時に発生する競合キャッシュミスだけでなく、他ICBに影響して発生する競合キャッシュミスの回数も記録する。
図15から図17を用いて、競合情報登録処理S205の動作について説明する。
図15を用いて、競合情報登録処理S205の全体処理フローについて説明する。
ステップS2050において、競合情報生成部604は、自ICBを競合情報70に登録する。
ステップS2051において、競合情報生成部604は、競合ICBの内、自ICB以外の他ICBを競合情報70に登録する。
<ステップS2050自ICBの登録処理の詳細説明>
図16を用いて、図15のステップS2050の詳細処理フローについて説明する。
ステップS205000において、競合情報生成部604は、自ICBが競合情報70に存在するか判断する。競合情報生成部604は、存在する場合は、ステップS205001に遷移し、存在しない場合はステップS205002に遷移する。
ステップS205001において、競合情報生成部604は、自ICBの競合ミスデータレコード71を取り出し、ステップS205005に遷移する。
ステップS205002では、競合情報生成部604は、自ICBの競合ミスデータレコード71を生成し、ステップS205003に遷移する。
ステップS205003において、ICB名72に自ICB名を設定し、ステップS205004に遷移する。
ステップS205004で、自ICBとしての合計ミス数73を1に、他ICBとしての合計ミス数74を0に初期化し、ステップS205007に遷移する。
ステップS205005において、競合情報生成部604は、登録する競合ICBの組み合わせの記録、すなわち競合ミスエントリ75が既に存在するか確認する。競合情報生成部604は、存在する場合は、ステップS205006に遷移し、存在しない場合はステップS205007に遷移する。
ステップS205006で、競合情報生成部604は、自ICBとしての合計ミス数73の値を1増加させ、ステップS205011に遷移する。
ステップS205007において、競合情報生成部604は、競合ミスエントリ75を生成後、生成した競合ミスエントリ75を競合ミスデータレコード71に追加し、ステップS205008に遷移する。
ステップS205008において、競合情報生成部604は、処理対象のキャッシュミスに対して、新しいミスID76を割り振り、ステップS205009に遷移する。
ステップS205009において、競合情報生成部604は、処理対象のキャッシュミスの競合ICB数を、競合ICB数77に設定し、ステップS205010に遷移する。
ステップS205010で、競合情報生成部604は、競合ICBごとのミス数78において、競合ICBの値を0に初期化し、ステップS205011に遷移する。
ステップS205011において、競合情報生成部604は、競合ICBごとのミス数78において、自ICBの値を1増加させ、処理を終了する。
<ステップS2051他ICBの登録処理の詳細説明>
図17を用いて、図15のステップS2051の詳細処理フローについて説明する。
ステップS205100において、競合情報生成部604は、未処理の競合ICBが存在するか判断する。競合情報生成部604は、存在する場合は、ステップS205101に遷移し、存在しない場合は終了する。
ステップS205101において、競合情報生成部604は、未処理の競合ICBから1つ選択し、ステップS205102に遷移する。
ステップS205102において、競合情報生成部604は、処理対象の競合ICBが競合情報70に存在するか判断する。競合情報生成部604は、存在すれば、ステップS205103に遷移し、存在しなければ、ステップS205104に遷移する。
ステップS205103において、競合情報生成部604は、処理対象の競合ICBの競合ミスデータレコード71を取り出し、ステップS205107に遷移する。
ステップS205104において、競合情報生成部604は、処理対象の競合ICBの競合ミスデータレコード71を生成し、ステップS205105に遷移する。
ステップS205105において、競合情報生成部604は、ICB名72に処理対象の競合ICB名を設定し、ステップS205106に遷移する。
ステップS205106において、競合情報生成部604は、自ICBとしての合計ミス数73を0に、他ICBとしての合計ミス数74を1に初期化し、ステップS205109に遷移する。
ステップS205107において、競合情報生成部604は、登録する競合ICBの組み合わせの記録、すなわち、競合ミスエントリ75が既に存在するか確認する。存在する場合は、ステップS205108に遷移し、存在しない場合はステップS205109に遷移する。
ステップS205108において、競合情報生成部604は、他ICBとしての合計ミス数74の値を1増加させ、ステップS205112に遷移する。
ステップS205109において、競合情報生成部604は、競合ミスエントリ75を生成後、生成した競合ミスエントリ75を競合ミスデータレコード71に追加し、ステップS205110に遷移する。
ステップS205110において、競合情報生成部604は、処理対象のキャッシュミスに対して、新しいミスID76を割り振り、ステップS205111に遷移する。
ステップS205111において、競合情報生成部604は、処理対象のキャッシュミスの競合ICB数を、競合ICB数77に設定し、ステップS205112に遷移する。
ステップS205112において、競合情報生成部604は、競合ICBごとのミス数78において、競合ICBの値を0に初期化し、ステップS205113に遷移する。
ステップS205113において、競合情報生成部604は、競合ICBごとのミス数78において、自ICBの値を1増加させ、ステップS205100に戻る。
競合情報生成部604は、上記の処理をステップS205100が偽、すなわちステップS205100においてNOになるまで続ける。
<ステップS206キャッシュ内容の更新処理の詳細説明>
次に、図7のステップS206における、キャッシュ内容の更新処理について図18及び図19を用いて説明する。
ステップS206では、仮想キャッシュシミュレータ部60は、キャッシュ構成情報40に設定された置換アルゴリズムに基づいて、仮想キャッシュメモリ403におけるICBの置換を実行する。仮想キャッシュメモリ403では、置換対象となるICBは最も右側に配置される。LRU方式では、数字の小さいウェイに存在するICBほど、最近にアクセスされたことを示す。
図18及び図19ではLRU方式でキャッシュの内容を置き換える様子を示している。
図18では、C0の参照時にC0が仮想キャッシュメモリ403上に存在しないため、仮想キャッシュシミュレータ部60は、仮想キャッシュメモリ403上に存在する全てのICBを右に1ウェイ分ずらし、ウェイ0、すなわち実ウェイ0にC0を保存する。言い換えると、仮想キャッシュシミュレータ部60は、仮想キャッシュメモリ403上に存在する全てのICBを後ろに1エリア分ずらし、仮想キャッシュメモリ403の先頭の実ウェイにC0を保存する。
図19では、B0の参照時にB0が仮想キャッシュメモリ403上に存在するため、仮想キャッシュシミュレータ部60は、仮想ウェイ1に存在したB0を実ウェイ0に移動し、B0より左側にあった全てのICBを右に1ウェイ分ずらしている。図19では、B0より左側にあったICBはC0のみであるため、仮想キャッシュシミュレータ部60は、C0を右に1ウェイ分ずらしている。言い換えると、仮想キャッシュシミュレータ部60は、競合ICB702を取得した後に、呼出命令コード4033であるB0より前のエリアに格納されている全てのICBをそれぞれ1つ後ろのエリアに移動する。そして、仮想キャッシュシミュレータ部60は、B0を仮想キャッシュメモリ403の先頭の実ウェイに格納する。
キャッシュメモリ401で置換を行う場合、ウェイ間の置換は起こらず、置換対象を表すビットを有効にする処理を行うが、仮想キャッシュメモリ403では、あるICBの2回の参照の間に参照されたICBを検出する必要があるため、このような更新処理を行う。
<配置位置決定処理S3>
図20は、本実施の形態に係る配置位置決定処理S3の動作を示すフロー図である。
配置位置決定部80が、競合情報70に基づいて、関数配置情報90を出力する。
まず、ステップS300において、配置位置決定部80は、関数を配置する優先順位を決定する。配置位置決定部80は、ルール131に基づいて、関数を配置する順番を決定する。
図21を用いて、ルール131を説明する。図21は、ルール131の一例であり、ルール131は図21以外でもよい。
ルール131には、ルール1からルール4まで設定されている。配置位置決定部80は、数字の小さいルールから適用し、複数の関数で同じ値となる場合は、次のルールを適用する。
まず、配置位置決定部80は、ルール1に従って、複数の関数の各関数について、関数に属する、各ICBの他ICBとしての合計ミス数74の総和が大きい順に優先順位をつける。競合ミスを起こすかどうかは、既配置の関数との関係で決まるため、配置位置決定部80は、他ICBに影響を及ぼす可能性の高い関数から配置していく。
次に、配置位置決定部80は、ルール1で同じ値となった関数同士では、ルール2を適用し、関数に属する、各ICBの競合ICBの種類数で優先順位をつける。ルール2は、他ICBで発生する競合ミス数が同じであっても、より多くの他ICBに対して影響を及ぼす関数を、優先的に配置するために適用される。
配置位置決定部80は、ルール2でも優劣がつかない場合、ルール3を適用し、関数に属する、各ICBの自ICBとしての合計ミス数73の総和で判断する。最後に、配置位置決定部80は、ルール4の関数のサイズで優劣をつける。ルール4でも優先順位が決まらない場合は、配置位置決定部80は、任意で配置する関数を選択する。
ステップS301において、配置位置決定部80は、全関数を配置したかどうか判断し、配置していなければステップS302に遷移し、配置していればステップS305に遷移する。
ステップS302において、配置位置決定部80は、未配置の関数の内、優先順位の高い関数を1つ取り出す。
ステップS303において、取り出した処理対象の関数をセット0から最後のセットまで動かし、全ての配置方法において、既配置の関数と引き起こす競合キャッシュミス発生回数を計算し、最小のミス数となる場所を求める。ステップS303の詳細は後述する。
ステップS304において、配置位置決定部80は、最小の競合キャッシュミス発生回数を示す場所に配置を決定し、ステップS301に遷移する。上記の処理をステップS301が真になるまで、すなわちステップS301でYESとなるまで続ける。
ステップS305において、配置位置決定部80は、上記の配置結果をまとめ、関数配置情報90を出力する。
<ステップS303既配置関数との競合ミス数の計算処理>
図22を用いて、ステップS303の既配置関数とのミス数の計算処理について説明する。
ステップS30300において、配置位置決定部80は、配置対象の関数である配置対象関数をまだ配置していない場所にセットし、ステップS30301に遷移する。
ステップS30301において、配置位置決定部80は、ミス数を格納する一時変数を0に初期化し、ステップS30302に遷移する。
ステップS30302において、配置位置決定部80は、配置対象関数に含まれるICBの内、まだキャッシュミス数を計算していないICBを取り出し、ステップS30303に遷移する。
ステップS30303で、取り出した処理対象のICBが競合情報70に存在するか調べ、存在すればステップS30304に遷移し、存在しなければステップS30310に遷移する。
ステップS30304で、配置位置決定部80は、取り出した処理対象のICBの競合ミスデータレコード71を取り出し、ステップS30305に遷移する。
ステップS30305で、配置位置決定部80は、未調査の競合ミスエントリ75を1つ取り出し、ステップS30306に遷移する。
ステップS30306で、配置位置決定部80は、競合ミスエントリ75に含まれる競合ICBの内、既配置の競合ICB数を調べ、ステップS30307に遷移する。
ステップS30307で、配置位置決定部80は、既配置の競合ICB数+1が、キャッシュ構成情報40に記述されたウェイ数より大きい、すなわちキャッシュミスが発生する場合、ステップS30308に遷移する。配置位置決定部80は、既配置の競合ICB数+1が、キャッシュ構成情報40に記述されたウェイ数以下である、すなわちキャッシュミスが発生しない場合、ステップS30309に遷移する。
ステップS30308で、配置位置決定部80は、競合ミスエントリ75に含まれる競合ICBごとのミス数78を合計し、ミス数の一時変数に加算し、ステップS30309に遷移する。
ステップS30309で、配置位置決定部80は、処理対象のICBに含まれる全ての競合ミスエントリ75を調べたか判断する。配置位置決定部80は、全て調べている場合、ステップS30310に遷移し、調べていない競合ミスエントリ75がある場合はステップS30305に戻る。
ステップS30310で、配置位置決定部80は、配置対象関数に含まれる全てのICBを調べたかどうか判断する。配置位置決定部80は、調べた場合、ステップS30311に遷移し、そうでない場合、ステップS30302に戻る。
ステップS30311で、配置位置決定部80は、ミス数の一時変数の値が、現在の最小ミス数より小さい場合、ステップS30312に遷移し、そうでない場合、ステップS30313に遷移する。
ステップS30312で、配置位置決定部80は、最小ミス数と最小配置を更新し、ステップS30313に遷移する。
ステップS30313で、配置位置決定部80は、配置対象関数において、全ての配置を試したか判断し、試した場合は終了し、そうでない場合はステップS30300に戻る。
配置位置決定部80は、ステップS30313が真となるまで、すなわちステップS30313でYESとなるまで、上記処理を繰り返す。ステップS30313でYESになることは、配置対象関数において全ての配置を試したことを意味する。
次に、具体例を用いて配置位置決定処理S3について、詳細に説明する。
命令トレース30より、図3のようなICBの実行系列303が得られている場合に、セット数2のダイレクトマップキャッシュへの配置を考える。関数はA、B、Cの三種類であり、全ての関数は1つのICB以内のサイズであるとする。図3の実行系列から競合情報70を生成すると、図4のような結果となる。
配置位置決定部80による、具体的な処理について、図20のステップS3の詳細処理フローを用いて、以下で説明する。
ステップS300で、ルール131と競合情報70とから、関数の優先順位が計算され、関数C、関数B、関数Aの順番で配置していくことが決定される。
ステップS302において、まず関数Cが取り出される。関数Cは最初の関数であるため、セット0に配置される。続いて、ステップS302で、関数Bが取り出される。
ステップS303において、関数Bをセット0から最後のセットまで配置をためし、既配置関数との間で起こる競合ミス数の内、最小のミス数となる場所を求める。
図23に、関数Bをセット0に配置した場合の、キャッシュミス発生回数の計算結果を示す。関数Bがセット0に配置される場合の、C0との間で起こすキャッシュミスが計算される。計算の結果、CM(B0,C0)が4と求まる。ここでCM(X,Y)は、カッコ内で指定されたICBが、同じセットに配置された場合のキャッシュミス数を表すものとする。よって、CM(B0,C0)は、B0,C0が同じセットに配置された場合のキャッシュミス数である。
図24に、関数Bをセット1に配置した場合の、キャッシュミス発生回数の計算結果を示す。関数Bがセット1に配置される場合、CM(B0)=0と求まる。
以上の結果、ステップS304において、関数Bはセット1に配置される。
最後に関数Aが取り出され、同様にキャッシュミス数の計算が実行される。
ステップS303において、関数Aをセット0から最後のセットまで配置をためし、既配置関数との間で起こる競合ミス数の内、最小のミス数となる場所を求める。
図25に、関数Aをセット0に配置した場合の、キャッシュミス発生回数の計算結果を示す。関数Aがセット0に配置される場合の、C0との間で起こすキャッシュミスが計算される。計算の結果、CM(A0,C0)=3+2=5と求まる。CM(A0,C0)は、A0,C0が同じセットに配置された場合のキャッシュミス数である。
図26に、関数Aをセット1に配置した場合の、キャッシュミス発生回数の計算結果を示す。関数Aがセット1に配置される場合、CM(A0,B0)=2+1=3と求まる。
以上の結果、ステップS304において、関数Aはセット1に配置される。
関数Aの配置後、全関数の配置が終了するため、ステップS301が真となり、ステップS305に遷移する。
ステップS305において、関数Cをセット0に格納されるアドレス、関数Bと関数Aをセット1に格納されるアドレスにそれぞれ配置されるものとして、関数配置情報90が出力される。
***効果の説明***
本実施の形態に係るプログラム配置装置500は、命令トレースを入力とし、関数間の競合情報を抽出する仮想キャッシュシミュレータ部を備える。また、各ICBの競合情報を保持する競合ミスデータベースを備え、競合ミスデータベースに基づいて、競合ミスを抑制する関数配置を算出する配置位置決定部を備える。プログラム配置装置500は、関数をキャッシュラインサイズのICBに分割し、競合ミス発生時のICBの組み合わせ情報の抽出を行い、その情報に基づいて関数を配置する。よって、プログラム配置装置500によれば、競合ミスを抑制する配置を決定することができる。
本実施の形態に係るプログラム配置装置500は、仮想キャッシュシミュレータ部において、実キャッシュメモリの構成に関わらず、セット数を1に設定し、全てのICBが同じキャッシュ領域を使用するものとして、シミュレーションを実行する。よって、プログラム配置装置500によれば、競合ミス発生時に、相関関係のあるICBの組み合わせ情報を抽出することができる。
本実施の形態に係るプログラム配置装置500は、競合ミスデータベースにおいて、競合ミス発生時に、相関関係のあるICBの組み合わせごとに、競合ミス発生回数を記録する。よって、プログラム配置装置500によれば、最適配置探索処理、すなわち配置位置決定処理において、正確な競合ミス発生回数を計算することができる。
本実施の形態に係るプログラム配置装置500は、最適配置探索部、すなわち配置位置決定部は、各関数が原因となり、自分以外の関数の競合ミスを発生させている回数を、競合ミスデータベースに基づいて算出する。そして、配置位置決定部は、算出した競合ミス回数の多い関数から順番にメモリ領域に配置する。よって、プログラム配置装置500によれば、正確な最適配置を探索できる。
以上のように、本実施の形態に係るプログラム配置装置500によれば、仮想キャッシュシミュレータ部が、命令トレースにおける、各関数ブロックの相関性を競合情報として保存する。そして、競合情報に基づいて、配置位置決定部にて、競合キャッシュミス数が最小となる関数配置を決定するため、より正確な関数配置情報を出力することができる。
実施の形態2.
本実施の形態では、主に、実施の形態1と異なる点について説明する。
実施の形態1で説明した構成と同様の構成については同一の符号を付し、その説明を省略する場合がある。
実施の形態1では、配置位置決定部80は、優先順位の高い関数からメモリ空間に配置し、関数配置情報90を出力する。しかし、配置する関数の順番やサイズによっては、メモリ使用効率が悪くなる場合がある。
図27に示す関数配置情報90が出力された場合を考える。
図27では、最初の関数の先頭から、最後の関数の最後尾までの領域の内、有効な関数の命令で埋まっている割合は約69%となる。メモリ容量の増大は、コストの増加につながるため、メモリ効率を向上させることが重要である。
そこで、本実施の形態では、メモリ使用効率を向上させる方式について説明する。
***構成の説明***
図28は、本実施の形態2に係るプログラム配置装置500aを示すブロック構成図である。
本実施の形態のプログラム配置装置500aは、図1の構成に加え、関数配置調整部120を有する。
関数配置調整部120は、配置位置決定部80により決定された複数の関数の各関数の配置位置801に基づいて、複数の関数の各関数を配置位置801とは異なる再配置位置802に並び替える。複数の関数の各関数が再配置位置802に配置された場合のキャッシュメモリ401の空き領域4015は、複数の関数の各関数が配置位置801に配置された場合のキャッシュメモリ401の空き領域4016よりも少ない。
関数配置調整部120は、プログラム情報50、関数配置情報90を入力とし、メモリ使用効率を向上させた関数配置情報90aを出力する。関数配置情報90は、複数の関数の各関数が配置位置801に配置される情報である。関数配置情報90aは、複数の関数の各関数が再配置位置802に配置される情報である。
なお、各機能ブロックは1つあるいは複数のプログラムとして実装されていてもよいし、複数の機能ブロックが1つのプログラムとして実装されていてもよい。
***動作の説明***
図29を用いて、本実施の形態に係るプログラム配置装置500aのプログラム配置方法、プログラム配置処理S10aについて説明する。
図29のステップS1,S1a,S2,S3は実施の形態1と同様である。
ステップS5において、関数配置調整部120は、プログラム情報50、関数配置情報90に基づいて、メモリ使用効率を向上させた関数配置情報90aを生成する。
図30を用いて、本実施の形態に係る関数配置調整処理S5について説明する。
まず、ステップS500において、関数配置調整部120は、メモリアドレスを関数が配置されるメモリ空間の先頭に初期化し、ステップS501に遷移する。
ステップS501において、関数配置調整部120は、全関数を配置したかどうか確認する。配置していなければ、ステップS502に遷移し、配置していればステップS506に遷移する。
ステップS502において、関数配置調整部120は、未配置の関数の内、現在のメモリアドレスが示す、ブロックアドレスとブロックオフセットで始まる関数が存在するか確認する。存在すればステップS503に遷移し、存在しなければステップS505に遷移する。
ステップS503において、関数配置調整部120は、未配置の関数の内、現在のメモリアドレスが示す、ブロックアドレスとブロックオフセットを満たす関数を、関数配置情報90から一つ取り出し、現在のメモリアドレスに配置する。配置後、ステップS504に遷移する。
ステップS504において、関数配置調整部120は、処理対象の関数のサイズ分、メモリアドレスを進める。
ステップS505において、関数配置調整部120は、ブロックオフセット1つ分、メモリアドレスを進める。
ステップS506において、関数配置調整部120は、現在の配置情報を関数配置情報90として出力し、処理を終了する。
次に、具体例を用いて関数配置調整処理S5について、詳細に説明する。
図27に示す関数配置情報90に対して、関数配置調整処理S5を実行した場合について説明する。関数配置情報90に対して、関数配置調整処理S5を実行した結果を図31の関数配置情報90aとする。
この具体例では、メモリ空間の先頭を0、ブロック内の命令数は2とする。
まず、関数配置調整部120は、メモリアドレス、ブロックアドレス、ブロックオフセットを関数が配置されるメモリ空間の先頭に初期化する。このとき、メモリアドレス0、ブロックアドレス0、ブロックオフセット0となる。
次に、関数配置調整部120は、未配置の関数のうち、ブロックアドレス0、ブロックオフセット0を満たす関数Aを、メモリアドレス0に配置する。そして、関数配置調整部120は、メモリアドレスに関数Aのサイズ5を加算し、メモリアドレス5、ブロックアドレス2、ブロックオフセット1とする。
次に、関数配置調整部120は、ブロックアドレス2、ブロックオフセット1を満たす関数Eを取り出し、メモリアドレス5に配置する。配置後、関数配置調整部120は、メモリアドレスに、関数Eのサイズ6を加算し、メモリアドレス11、ブロックアドレス5、ブロックオフセット1とする。
次のブロックアドレス5、ブロックオフセット1を満たす関数は存在しないため、関数配置調整部120がメモリアドレスをブロックオフセット1進めると、メモリアドレス12、ブロックアドレス6、ブロックオフセット2となる。続いて、同じように処理を進めることにより、関数D、関数C、関数G、関数F、関数Bの順番で関数が配置される。
以上のように、関数配置調整処理S5の結果として、最初の関数の先頭から、最後の関数の最後尾までの領域の内、有効な関数の命令で埋まっている割合は98%となる。
***効果の説明***
本実施の形態に係るプログラム配置装置500aは、配置位置決定部が出力した関数配置情報90に基づいて、関数配置の並び替えを行う関数配置調整部を備える。そして、プログラム配置装置500aはでは、関数配置情報90に従って配置した場合のメモリの空き領域よりもメモリの空き領域が少なくなるように、関数の並び替えを実行する。
以上のように、本実施の形態に係るプログラム配置装置500aによれば、配置位置決定部が出力する関数配置情報90に基づいて、関数配置調整部120が、関数の並び替えを実行することで、メモリの使用効率を向上することができる。
上記の実施の形態では、「取得部」、「配置位置決定部」、「関数配置部」、「命令トレース読出し部」、「仮想キャッシュメモリ生成部」、「仮想キャッシュデータ保持部」、「競合情報生成部」、「関数配置調整部」がそれぞれ独立した機能ブロックであった。しかし、プログラム配置装置は上記のような構成でなくてもよく、プログラム配置装置の構成は任意である。「取得部」、「配置位置決定部」、「関数配置部」、「関数配置調整部」をひとつの機能ブロックで実現してもよい。また、「命令トレース読出し部」、「仮想キャッシュメモリ生成部」、「仮想キャッシュデータ保持部」、「競合情報生成部」を1つの機能ブロックで実現してもよい。
また、プログラム配置装置は、1つの装置でなく、複数の装置から構成されたプログラム配置システムでもよい。プログラム配置装置の機能ブロックは、実施の形態に記載した機能を実現することができれば、任意である。これらの機能ブロックを、他のどのような組み合わせでプログラム配置装置を構成しても構わない。
以上、実施の形態1,2について説明したが、これらの2つの実施の形態のうち、1つの実施の形態を部分的に実施しても構わない。あるいは、これらの2つの実施の形態のうち、複数を部分的に組み合わせて実施しても構わない。その他、これらの2つの実施の形態を、全体としてあるいは部分的に、どのように組み合わせて実施しても構わない。
なお、上記の実施の形態は、本質的に好ましい例示であって、本発明、その適用物や用途の範囲を制限することを意図するものではなく、必要に応じて種々の変更が可能である。
10 プログラム、20 プログラム実行部、21 取得部、30 命令トレース、31 呼び出し順、40 キャッシュ構成情報、50 プログラム情報、60 仮想キャッシュシミュレータ部、70 競合情報、71 競合ミスデータレコード、72 ICB名、73 自ICBとしての合計ミス数、74 他ICBとしての合計ミス数、75 競合ミスエントリ、76 ミスID、77 競合ICB数、78 競合ICBごとのミス数、80 配置位置決定部、90,90a 関数配置情報、100 関数配置部、110 最適化済プログラム、120 関数配置調整部、130 優先順位テーブル、131 ルール、301 命令コード、303 ICBの実行系列、401 キャッシュメモリ、403 仮想キャッシュメモリ、601 仮想キャッシュメモリ生成部、602 仮想キャッシュデータ保持部、603 命令トレース読出し部、604 競合情報生成部、605 シミュレータ部、701 競合命令コード組、702 競合ICB、703 競合回数、801 配置位置、802 再配置位置、500,500a プログラム配置装置、901 プロセッサ、902 補助記憶装置、903 メモリ、904 通信装置、905 入力インタフェース、906 ディスプレイインタフェース、907 入力装置、908
ディスプレイ、910 信号線、911,912 ケーブル、9401 レシーバー、9402 トランスミッター、4015,4016 空き領域、4031 格納エリア、4032 仮格納エリア、4033 呼出命令コード、4039 複数のエリア、S1 取得処理、S1a 仮想キャッシュメモリ生成処理、S2 シミュレーション処理、S3
配置位置決定処理、S4 関数配置処理、S5 関数配置調整処理、S10,S10a
プログラム配置処理。

Claims (8)

  1. 少なくとも1つのウェイを使用するキャッシュメモリに複数の関数を含むプログラムを配置するプログラム配置装置において、
    前記プログラムを実行することにより、前記複数の関数の各関数に含まれる命令コードの呼び出し順を取得する取得部と、
    前記キャッシュメモリの前記ウェイの数分の格納エリアと仮想ウェイの数分の仮格納エリアとを有する仮想キャッシュメモリを生成する仮想キャッシュメモリ生成部と、
    前記仮想キャッシュメモリに対して前記命令コードを前記呼び出し順に呼出命令コードとして呼び出すシミュレーションを実行し、既に呼び出した前記呼出命令コードを再度呼び出した際に前記格納エリアおよび前記仮格納エリアに前記呼出命令コード以外の命令コードが格納されている競合が発生した場合、発生した前記競合の情報を競合情報として取得するシミュレータ部と、
    前記競合情報に基づいて、前記キャッシュメモリにおける前記複数の関数の各関数の配置位置を決定する配置位置決定部と
    を備えるプログラム配置装置。
  2. 前記シミュレータ部は、
    前記複数の関数の各関数に含まれる命令コードのうち前記競合を発生させた命令コードの組み合わせを競合命令コード組として取得し、前記競合命令コード組により発生した前記競合の回数を競合回数として計数し、計数した前記競合回数を前記競合情報として取得し、
    前記配置位置決定部は、
    前記競合回数に基づいて、前記複数の関数の各関数の前記配置位置を決定する請求項1に記載のプログラム配置装置。
  3. 前記仮想キャッシュメモリ生成部は、
    前記仮想キャッシュメモリとして、アドレスが連続する複数のエリアであって前記ウェイの数分の格納エリアと前記ウェイの数分の格納エリアの後ろに連続する前記仮想ウェイの数分の仮格納エリアとからなる複数のエリアを生成する請求項2に記載のプログラム配置装置。
  4. 前記シミュレータ部は、
    前記呼出命令コードを呼び出した際に前記格納エリアに対して前記競合が発生し、かつ、前記呼出命令コードが前記仮格納エリアにある場合、既に前記仮想キャッシュメモリに格納されている前記呼出命令コードより前のエリアに格納されている全ての命令コードと前記呼出命令コードとの組を前記競合命令コード組として取得する請求項3に記載のプログラム配置装置。
  5. 前記シミュレータ部は、
    前記競合命令コード組を取得した後に、既に前記仮想キャッシュメモリに格納されている前記呼出命令コードより前のエリアに格納されている全ての命令コードをそれぞれ1つ後ろのエリアに移動し、既に前記仮想キャッシュメモリに格納されている前記呼出命令コードを前記仮想キャッシュメモリの先頭の前記格納エリアに格納し、前記呼び出し順における前記呼出命令コードの次の命令コードを前記呼出命令コードとして呼び出す請求項4に記載のプログラム配置装置。
  6. 前記プログラム配置装置は、
    前記配置位置決定部により決定された前記複数の関数の各関数の前記配置位置に基づいて、前記複数の関数の各関数を前記配置位置とは異なる再配置位置に並び替える関数配置調整部を備え、
    前記複数の関数の各関数が前記再配置位置に配置された場合の前記キャッシュメモリの空き領域は、前記複数の関数の各関数が前記配置位置に配置された場合の前記キャッシュメモリの空き領域よりも少ない請求項1からのいずれか1項に記載のプログラム配置装置。
  7. 少なくとも1つのウェイを使用するキャッシュメモリに複数の関数を含むプログラムを配置するプログラム配置装置のプログラム配置方法において、
    取得部が、前記プログラムを実行することにより、前記複数の関数の各関数に含まれる命令コードの呼び出し順を取得し、
    仮想キャッシュメモリ生成部が、前記キャッシュメモリの前記ウェイの数分の格納エリアと仮想ウェイの数分の仮格納エリアとを有する仮想キャッシュメモリを生成し、
    シミュレータ部が、前記仮想キャッシュメモリに対して前記命令コードを前記呼び出し順に呼出命令コードとして呼び出すシミュレーションを実行し、既に呼び出した前記呼出命令コードを再度呼び出した際に前記格納エリアおよび前記仮格納エリアに前記呼出命令コード以外の命令コードが格納されている競合が発生した場合、発生した前記競合の情報を競合情報として取得し、
    配置位置決定部が、前記競合情報に基づいて、前記キャッシュメモリにおける前記複数の関数の各関数の配置位置を決定するプログラム配置方法。
  8. 少なくとも1つのウェイを使用するキャッシュメモリに複数の関数を含むプログラムを配置するプログラム配置装置のプログラム配置プログラムにおいて、
    前記プログラムを実行することにより、前記複数の関数の各関数に含まれる命令コードの呼び出し順を取得する取得処理と、
    前記キャッシュメモリの前記ウェイの数分の格納エリアと仮想ウェイの数分の仮格納エリアとを有する仮想キャッシュメモリを生成する仮想キャッシュメモリ生成処理と、
    前記仮想キャッシュメモリに対して前記命令コードを前記呼び出し順に呼出命令コードとして呼び出すシミュレーションを実行し、既に呼び出した前記呼出命令コードを再度呼び出した際に前記格納エリアおよび前記仮格納エリアに前記呼出命令コード以外の命令コードが格納されている競合が発生した場合、発生した前記競合の情報を競合情報として取得するシミュレーション処理と、
    前記競合情報に基づいて、前記キャッシュメモリにおける前記複数の関数の各関数の配置位置を決定する配置位置決定処理とをコンピュータに実行させるプログラム配置プログラム。
JP2016569166A 2015-01-14 2015-01-14 プログラム配置装置、プログラム配置方法及びプログラム配置プログラム Active JP6138384B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/050845 WO2016113869A1 (ja) 2015-01-14 2015-01-14 キャッシュメモリにおける関数の配置装置

Publications (2)

Publication Number Publication Date
JPWO2016113869A1 JPWO2016113869A1 (ja) 2017-04-27
JP6138384B2 true JP6138384B2 (ja) 2017-05-31

Family

ID=56405431

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016569166A Active JP6138384B2 (ja) 2015-01-14 2015-01-14 プログラム配置装置、プログラム配置方法及びプログラム配置プログラム

Country Status (2)

Country Link
JP (1) JP6138384B2 (ja)
WO (1) WO2016113869A1 (ja)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69811159T2 (de) * 1997-02-27 2003-10-23 Koninklijke Philips Electronics N.V., Eindhoven Verfahren zur verminderung der frequenz von zwischenspeicher-fehlgriffen in einem rechner
JP5272346B2 (ja) * 2007-07-30 2013-08-28 富士通セミコンダクター株式会社 キャッシュカラーリング方法
JP4600700B2 (ja) * 2009-03-17 2010-12-15 日本電気株式会社 プログラムのメモリ空間への配置方法、装置、およびプログラム
JP2011008607A (ja) * 2009-06-26 2011-01-13 Adcore-Tech Co Ltd メモリ割当装置及びメモリ割当方法

Also Published As

Publication number Publication date
WO2016113869A1 (ja) 2016-07-21
JPWO2016113869A1 (ja) 2017-04-27

Similar Documents

Publication Publication Date Title
Calder et al. Predictive sequential associative cache
US8938603B2 (en) Cache system optimized for cache miss detection
JP5460486B2 (ja) データをソートする装置及び方法
CN103218309B (zh) 多级指令高速缓存预取的方法、系统与设备
US20150052139A1 (en) Image search device, image search method, program, and computer-readable storage medium
JP7554795B2 (ja) 複数の計算コア上のデータドリブンスケジューラ
JPH04241072A (ja) 配線経路探索装置及び配線経路探索方法
CN105359142B (zh) 哈希连接方法和装置
US10037278B2 (en) Operation processing device having hierarchical cache memory and method for controlling operation processing device having hierarchical cache memory
TW202004494A (zh) 直接記憶體存取方法、裝置、專用計算晶片及異構計算系統
US10275230B2 (en) Cache aware self-referential structure peeling
CN111930668B (zh) 运算装置、方法、多核智能处理器及多核异构智能处理器
JP6138384B2 (ja) プログラム配置装置、プログラム配置方法及びプログラム配置プログラム
JP5979966B2 (ja) 回路設計支援装置及び回路設計支援方法及びプログラム
JP2021192187A (ja) 出現頻度算出プログラム、グラフィックス プロセッシング ユニット、情報処理装置、及び出現頻度算出方法
US8688918B2 (en) Program converting apparatus, program converting method, and medium
JP6567215B2 (ja) アーキテクチャ選定装置、アーキテクチャ選定方法およびアーキテクチャ選定プログラム
US8732687B2 (en) Arrangement method of programs to memory space, apparatus, and recording medium
US20140173225A1 (en) Reducing memory access time in parallel processors
CN115033500A (zh) 缓存系统模拟方法、装置、设备和存储介质
CN114048847A (zh) 一种图神经网络数据缓存方法、装置、设备及存储介质
US12020029B2 (en) Program conversion device, program conversion method, and program conversion program
US20150234656A1 (en) Vector processor, information processing apparatus, and overtaking control method
CN113448958B (zh) 数据处理方法和装置、电子设备、存储介质
WO2024054232A1 (en) Low-latency cache

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161003

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161003

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170425

R150 Certificate of patent or registration of utility model

Ref document number: 6138384

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250