[情報処理システムの構成]
図1は、情報処理装置10の全体構成を示す図である。図1に示す情報処理装置10(以下、データ配置決定装置10とも呼ぶ)は、例えば、利用者にサービスを提供するための業務システムを構築する物理マシンである。そして、情報処理装置10は、プロセッサであるCPU(Central Processing Unit)3と、CPU3がアクセス可能な第1メモリ1及び第2メモリ2とを有する。
図1に示す例において、第2メモリ2は、例えば、第1メモリ1よりもバンド幅の大きいメモリである。具体的に、第1メモリ1は、例えば、DDRSDRAM(Double−Data−Rate Synchronous Dynamic Random Access Memory)であり、第2メモリ2は、例えば、3次元積層メモリである。
図1に示す情報処理装置10は、例えば、上記のNUMAアーキテクチャを採用する。この場合、図示しない情報処理装置10のOS(Operating System)は、例えば、図2に示すように、各データのアクセス頻度が高いデータから優先して、メモリアクセスの応答時間が短いメモリ(第2メモリ2)に記憶する。
このメモリアクセスの応答時間は、例えば、以下の式(1)によって算出される
T=x/B+L ・・・ 式(1)
式(1)において、「x」は、メモリアクセス対象のデータのサイズである。また、「B」は、メモリ(第1メモリ1または第2メモリ2)のバンド幅であり、「L」は、CPU3とメモリとの間で通信を行う場合におけるレイテンシの値である。また、「T」は、CPU3がメモリに対してメモリアクセスを行った場合に要する応答時間である。
上記の式(1)において、「x」の値が小さい場合、「x」の値を「B」の値で除算した値が小さくなり、「T」は、「L」の値に大きく依存する。そのため、この場合、情報処理装置10は、レイテンシが低いメモリにアクセス頻度の高いデータを記憶することにより、メモリアクセスの効率化を図ることが可能になる。
一方、上記の式(1)において、「x」の値が大きい場合、「x」の値を「B」の値で除算した値が大きくなり、例えば「T」は、「L」の値よりも「x」の値を「B」の値で除算した値に依存する。そのため、この場合、情報処理装置10は、レイテンシのみではなく、メモリのバンド幅をも考慮した形で各データを記憶するメモリを決定する必要がある。すなわち、情報処理装置10は、各データを記憶するメモリを決定する場合、メモリが実際に行ったメモリアクセス対象のデータのサイズに基づく必要がある。
[トレース情報の具体例]
次に、情報処理装置10がアクセス頻度を算出する際に参照するトレース情報について説明する。
情報処理装置10は、例えば、情報処理装置10の本番稼働(利用者に対してサービスを提供するための稼働)を開始する前に試験データによる試験稼働を行い、この試験稼働に伴って発生したメモリアクセスに関する情報をトレース情報として出力する。そして、情報処理装置10は、出力されたトレース情報に基づいて、アクセス頻度を算出する。
図3は、トレース情報の具体例を説明する図である。図3に示すトレース情報は、トレース情報に含まれる各情報を識別する「番号」と、メモリアクセスがあった時刻を示す「時刻」と、メモリアクセスがあったデータが格納されたアドレスを示す「アドレス」とを項目として有する。また、図3に示すトレース情報は、メモリアクセスがあったデータのサイズを示す「サイズ」を項目として有する。なお、「アドレス」に設定される情報は、16進数の表記である。また、以下、「時刻」に設定される情報の単位は、msec(ミリセック)であり、「サイズ」に設定される情報の単位は、B(バイト)であるものとして説明を行う。
具体的に、図3に示すトレース情報において、「番号」が「1」である行には、「時刻」として「0001」が設定され、「アドレス」として「0x00001000」が設定され、「サイズ」として「8(バイト)」が設定されている。すなわち、「番号」が「1」である行は、「時刻」が「0001」であるときに、「0x00001000」から「8(バイト)」の領域に記憶されているデータに対して、メモリアクセスがあったことを示している。図3の他の情報については説明を省略する。
次に、図4は、対応情報の具体例を説明する図である。対応情報は、図3に示すトレース情報に基づき、メモリ内の所定範囲毎にメモリアクセスが行われた回数(頻度)を集計した情報である。以下、所定範囲が32(バイト)であるものとして説明を行う。
図4に示す対応情報は、対応情報に含まれる各情報を識別する「番号」と、メモリアクセスがあったデータが格納されたアドレスの範囲を示す「アドレス」と、メモリアクセスが行われた回数を示す「アクセス頻度」とを項目として有する。
具体的に、情報処理装置10は、例えば、図3に示すトレース情報に含まれる情報のうち、「アドレス」が「0x00000000」から32(バイト)の領域に格納されているデータに対するメモリアクセスに関する情報を特定する。すなわち、情報処理装置10は、「アドレス」が「0x00000000」から32(バイト)の領域に格納されているデータに対するメモリアクセスに関する情報として、「アドレス」が「0x00000010」及び「0x00000018」である情報を特定する。そして、情報処理装置10は、図4に示すように、例えば、「番号」が「2」である情報の「アドレス」に「0x00000000」を設定し、「番号」が「2」である情報の「アクセス頻度」に「2」を設定する。
その後、情報処理装置10は、図4に示す対応情報を参照し、アクセス頻度が多い領域に格納されたデータから優先して、応答時間が短いメモリ(図2に示す例では第2メモリ2)に配置する。これにより、情報処理装置10は、アクセス効率を高めるためのデータ配置を行うことが可能になる。図4の他の情報については説明を省略する。
ここで、例えば、メモリアクセスを制御するメモリコントローラが複数のメモリアクセスの要求を纏めてメモリアクセスを行う場合であっても、図3に示すようなトレース情報には、メモリアクセスの要求が纏められることなく行われたものとして出力される場合がある。そのため、この場合、実際に行われたメモリアクセスのデータのサイズは、データ配置の決定に反映されない。したがって、この場合、情報処理装置10は、メモリアクセスの効率化を図ることができない場合がある。
そこで、本実施の形態における情報処理装置10は、第1メモリ1に格納されたデータのうち、メモリアクセスされたデータのアドレスとメモリアクセスの頻度に基づき、第1メモリ1に格納された各データを第2メモリ2に格納した場合における削減時間を算出する。そして、情報処理装置10は、削減時間が大きいデータを優先して第2メモリ2に格納する。
これにより、情報処理装置10は、各データに対するメモリアクセスの頻度のみでなく、メモリアクセスされたデータのアドレスを参照して第2メモリ2に格納するデータを決定することができる。そのため、例えば、メモリコントローラが複数のメモリアクセスの要求を纏めてメモリアクセスを行う場合であっても、実際に行われたメモリアクセスの情報を反映させた形で、アクセス効率を高めるためのデータの配置を行うことが可能になる。
なお、以下、情報処理装置10が第1メモリ1及び第2メモリ2を有する場合について説明するが、情報処理装置10は、他の物理マシンが有する複数のメモリに対するデータ配置を決定するものであってもよい。
[情報処理装置のハードウエア構成]
次に、情報処理装置10のハードウエア構成について説明する。図5は、情報処理装置10のハードウエア構成を示す図である。情報処理装置10は、プロセッサであるCPU103と、第1メモリ101(以下、低速メモリ101とも呼ぶ)と、第1メモリ101よりもバンド幅が大きいメモリである第2メモリ102(以下、高速メモリ102とも呼ぶ)とを有する。また、情報処理装置10は、外部の機器とアクセスするための外部インターフェース(I/Oユニット)104を有する。各部は、バス105を介して互いに接続される。CPU103、第1メモリ101及び第2メモリ102は、それぞれ図1で説明したCPU3、第1メモリ1及び第2メモリ2に対応するものであってよい。
図5に示す第2メモリ102は、第2メモリ102内のプログラム格納領域120に、データ配置を決定する処理(以下、データ配置決定処理とも呼ぶ)を実行するためのプログラム110(以下、データ配置決定プログラムとも呼ぶ)を記憶する。CPU103は、図5に示すように、プログラム110の実行時に、プログラム110を第2メモリ102から第1メモリ101にロードし、プログラム110と協働してデータ配置決定処理を行う。また、第2メモリ102は、例えば、データ配置決定処理を行う際に用いられる情報を記憶する情報格納領域130(以下、記憶部130とも呼ぶ)を有する。
なお、プログラム格納領域120及び情報格納領域130は、第2メモリ102以外の記憶領域(第1メモリ101を含む)に記憶されるものであってもよい。
[情報処理装置の機能]
図6は、図5の情報処理装置の機能ブロック図である。情報処理装置10のCPU103は、プログラム110と協働することにより、コンパイル実行部111と、プログラム実行部112と、トレース情報取得部113と、対応情報作成部114として機能する。また、情報処理装置10のCPU103は、プログラム110と協働することにより、削減時間算出部115と、データ配置決定部116と、ソースコード変換部117と、データ配置部118として機能する。また、情報処理装置10の情報格納領域130には、ソースコード131、トレース情報132、環境情報133、対応情報134及び指示情報135が記憶される。
コンパイル実行部111は、情報格納領域130に記憶されたソースコード131のうち、例えば、ソースコードの開発者等(以下、単に開発者とも呼ぶ)によって指定されたソースコードを取得する。ソースコード131は、コンパイル後の実行プログラムが、第1メモリ101に記憶されたデータに対してのみメモリアクセスを行うことを前提としたソースコードである。そして、コンパイル実行部111は、情報格納領域130から取得したソースコードのコンパイルを行い、プログラム実行部112(CPU103)が実行可能な実行プログラムを作成する。
プログラム実行部112は、例えば、開発者から指示があった場合に、コンパイル実行部111が作成した実行プログラムの実行を行う。
トレース情報取得部113は、プログラム実行部112による実行プログラムの実行中に、予め定められた動作が行われたことに応じてトレース情報132の取得を行う。具体的に、トレース情報取得部113は、例えば、第1メモリ101に記憶されたデータに対してメモリアクセスが行われる毎に、トレース情報132の取得を行う。そして、トレース情報取得部113は、取得したトレース情報132を情報格納領域130に記憶する。トレース情報132は、例えば、図3で説明したトレース情報に対応する。
対応情報作成部114は、情報格納領域130に記憶されたトレース情報132から、プログラム実行部112によってメモリアクセスが行われたデータが格納された領域を示すアドレスと、アドレス毎のメモリアクセスの頻度情報とを取得する。そして、対応情報作成部114は、取得したアドレスと頻度情報とを対応付けることにより対応情報134を作成し、情報格納領域130に記憶する。
なお、対応情報作成部114は、アドレス及び頻度情報に加えて、メモリアクセスが行われたデータのサイズを取得し、アドレスと頻度情報とサイズとを対応付けることにより対応情報134を作成するものであってもよい。また、対応情報作成部114は、頻度情報を所定範囲(例えば、32(バイト))のアドレス毎に集計するものであってもよい。本実施の形態における対応情報134の具体例については後述する。
削減時間算出部115は、対応情報作成部114が作成した対応情報134に基づき、第1メモリ101に格納されたデータを、第1メモリ101よりバンド幅の大きいメモリである第2メモリ102に格納した場合におけるメモリアクセスの削減時間をアドレス毎に算出する。具体的に、削減時間算出部115は、予め情報格納領域130に記憶された第1メモリ101及び第2メモリ102に対するメモリアクセスの速度等を算出するための各種情報である環境情報133に基づき、アドレス毎のメモリアクセスの削減時間を算出する。
なお、削減時間算出部115は、メモリアクセスの削減時間を所定範囲(例えば、32(バイト))のアドレス毎に集計するものであってもよい。メモリアクセスの削減時間を算出する際の具体例については後述する。また、環境情報133の具体例については後述する。
データ配置決定部116は、第2メモリ102に記憶すべきデータを決定する。具体的に、データ配置決定部116は、削減時間算出部115が算出したアドレス毎のメモリアクセスの削減時間が大きいデータを、第2メモリ102に記憶すべきデータとして優先的に決定する。そして、データ配置決定部116は、第2メモリ102に記憶することができないデータを第1メモリ101に記憶すべきことを決定する。これにより、データ配置決定部116は、アクセス効率を高めるためのデータ配置を決定することが可能になる。
また、データ配置決定部116は、例えば、決定したデータ配置が行われた場合に対応したソースコードを作成するための情報を、指示情報135として作成する。第2メモリ102に移行すべきデータを決定する際の具体例については後述する。また、指示情報135の具体例については後述する。
ソースコード変換部117は、指示情報135に基づき、データ配置決定部116が決定したデータ配置が行われた場合に対応したソースコードを作成する。具体的に、ソースコード変換部117は、情報格納領域130に記憶されたソースコードを変換することによって、データ配置決定部116が決定したデータ配置が行われた場合に対応したソースコードを作成するものであってよい。
データ配置部118は、データ配置決定部116が決定したデータ配置に基づいて、第1メモリ101及び第2メモリ102に対してデータの記憶を行う。これにより、データ配置部118は、ソースコード変換部117が作成(変換)したソースコードの内容と、各データが実際に記憶されているメモリとの整合性を合わせることが可能になる。
[第1の実施の形態]
次に、第1の実施の形態について説明する。図7は、第1の実施の形態におけるデータ配置決定処理の概略を説明するフローチャート図である。
初めに、情報処理装置10は、データ配置決定タイミングまで待機する(S1のNO)。データ配置決定タイミングは、例えば、開発者から指示があったタイミングであったよい。具体的に、データ配置決定タイミングは、例えば、開発者がソースコードを作成した後であって、そのソースコードをコンパイルしたプログラムを本番稼働させる前である。
次に、データ配置決定タイミングになった場合(S1のYES)、情報処理装置10は、情報格納領域130に記憶されたソースコードのうち、データ配置の決定を行う必要があるソースコードをコンパイルして実行プログラムを作成する(S2)。コンパイルを行うソースコードは、例えば、開発者によって入力された情報に基づいて決定されるものであってよい。
そして、情報処理装置10は、作成した実行プログラムを実行することにより、トレース情報132を取得する(S2)。トレース情報132は、例えば、実行プログラムの実行時において第1メモリ101に記憶されたデータに対するメモリアクセスが発生した場合に、情報処理装置10によって取得されるものであってよい。なお、実行プログラムは、メモリアクセスが行われたことに応じて、トレース情報132を自動的に出力する処理を含んでいるものであってよい。
その後、情報処理装置10は、情報格納領域130に記憶されたトレース情報132から、アドレスとメモリアクセスの頻度情報とを対応付けた対応情報134を作成する(S3)。対応情報134の具体例については後述する。
そして、情報処理装置10は、第1メモリ101に格納されたデータを第2メモリ102に格納した場合におけるアドレス毎のメモリアクセスの削減時間を算出する(S4)。
すなわち、本実施の形態における情報処理装置10は、各データを記憶すべきメモリを決定する際に、各データに対するメモリアクセスの頻度情報だけでなく、メモリアクセスが行われたデータのアドレスを取得する。これにより、情報処理装置10は、メモリアクセスの要求が纏めて行われた場合に、メモリアクセスの頻度情報及びアドレスに基づいて計算を行うことで、実際に行われたメモリアクセスの情報(メモリアクセス対象のデータのサイズ等)を取得することが可能になる。
また、本実施の形態における情報処理装置10は、取得した各情報に基づき、第1メモリ101に格納されたデータを第2メモリ102に格納した場合におけるメモリアクセスの削減時間を算出する。これにより、情報処理装置10は、実際に行われたメモリアクセスの情報を考慮した形で、各データを第2メモリ102に記憶するか否かを決定する場合における優先順位を定めることが可能になる。
そして、情報処理装置10は、S4で算出した削減時間が最も大きいデータを優先して、第2メモリ102に記憶すべきデータとして決定する(S5)。すなわち、情報処理装置10は、第2メモリ102に記憶可能である限り、S4で算出した削減時間が大きいデータから順に、第2メモリ102への記憶を行う。
このように、第1の実施の形態によれば、情報処理装置10は、ソースコードをコンパイルして実行したプログラムから得た第1メモリ101のトレース情報132から、メモリアクセスが行われたデータが格納された領域を示すアドレスを取得する。さらに、情報処理装置10は、アドレス毎の頻度情報を取得する。そして、情報処理装置10は、取得したアドレスと頻度情報とを対応付けた対応情報134を作成する。
次に、情報処理装置10は、作成した対応情報134に基づき、第1メモリ101に格納されたデータを、第1メモリ101より高速なメモリである第2メモリ102に格納した場合におけるメモリアクセスの削減時間をアドレス毎に算出する。そして、情報処理装置10は、削減時間が大きいアドレスに格納されたデータを優先して、第2メモリ102に記憶すべきデータとして決定する。
これにより、情報処理装置10は、実際に行われたメモリアクセスの情報に基づく形で、各データを記憶すべきメモリを決定することが可能になる。
[第1の実施の形態の詳細]
次に、第1の実施の形態の詳細について説明する。図8から図12は、第1の実施の形態におけるデータ配置決定処理の詳細を説明するフローチャート図である。また、図13から図20は、第1の実施の形態におけるデータ配置決定処理の詳細を説明する図である。図3、図7及び図13から図20を参照しながら、図8から図12のデータ配置決定処理の詳細を説明する。
第1の実施の形態の詳細における情報処理装置10は、連続するアドレスに格納された複数のデータに対して連続してメモリアクセスが行われた旨(以下、これを連続アクセスとも呼ぶ)を示す情報が、トレース情報132に含まれているか否かを判定する。そして、情報処理装置10は、トレース情報132に連続アクセスが行われた旨を示す情報(以下、連続アクセス情報とも呼ぶ)が含まれている場合、連続するアドレス全体に対するメモリアクセスがまとめて行われたものとして、対応情報134を作成する。さらに、情報処理装置10は、連続アクセスが行われたアドレス毎に、メモリアクセスの削減時間の算出を行う。
[S1及びS2の処理の詳細]
初めに、図7で説明したS1及びS2の処理の詳細について説明する。
情報処理装置10のコンパイル実行部111は、データ配置決定タイミングまで待機する(図7のS1のNO)。そして、データ配置決定タイミングになった場合(図7のS1のYES)、情報処理装置10のコンパイル実行部111は、図8に示すように、情報格納領域130から、データ配置の決定を行うソースコードを取得する(S11)、その後、コンパイル実行部111は、取得したソースコードをコンパイルして実行プログラムを取得する(S11)。
その後、情報処理装置10のプログラム実行部112は、S11で取得された実行プログラムを実行する(S12)。そして、情報処理装置10のトレース情報取得部113は、S12における実行プログラムの実行に伴って、トレース情報132を取得する(S13)。
S12及びS13において、開発者は、例えば、プログラム実行部112が実行プログラムを実行するための試験環境を用意するものであってもよい。これにより、開発者は、実行プログラムを本番環境(利用者にサービスを提供するために実行プログラムを動作させる環境)にリリースする前に、トレース情報132を取得し、データ配置決定処理を実行することが可能になる。すなわち、開発者は、本番環境に影響を与えることなく、データ配置決定処理を実行することが可能になる。
[S3の処理の詳細]
次に、図7で説明したS3の処理の詳細について説明する。
情報処理装置10の対応情報作成部114は、図9に示すように、各変数に初期値を設定する(S21)。具体的に、対応情報作成部114は、トレース情報132の行を示す「i」に「1」を設定する。また、アドレスが増加する方向の連続アクセスが発生していることを示す「flagA」と、アドレスが減少する方向の連続アクセスが発生していることを示す「flagB」とに、連続アクセスが発生していないことを示す「0」を設定する。また、メモリアクセスが行われたデータの合計サイズである「sizeA」に「0」を設定する。また、連続アクセスが発生している間におけるメモリアクセスが行われたデータの合計サイズである「sizeB」に「0」を設定する。さらに、アクセス対象のデータのアドレスを格納する「addrA」に、トレース情報132の「アドレス」に設定される可能性がある値よりも大きい値(以下、単に十分に大きい値とも呼ぶ)を設定する。
(「i」が「1」の場合の処理)
次に、対応情報作成部114は、トレース情報132の「i」行目の「アドレス」に設定された情報(以下、「addr_i」とも呼ぶ)と、トレース情報132の「i」行目の「サイズ」に設定された情報(以下、「size_i」とも呼ぶ)とを取得する(S22)。また、対応情報作成部114は、トレース情報132の「i+1」行目の「アドレス」に設定された情報(以下、「addr_i+1」とも呼ぶ)と、「サイズ」に設定された情報(以下、「size_i+1」とも呼ぶ)とを取得する(S22)。なお、「addr_i」、「size_i」、「addr_i+1」及び「size_i+1」に含まれる「i」は、S21で説明した変数である「i」に対応する。
具体的に、対応情報作成部114は、例えば、図3に示すトレース情報132において、「addr_1」として、「番号」が「1」である行に対応して設定された「アドレス」である「0x00001000(10進数表記で4096)」を取得する。また、対応情報作成部114は、「size_1」として、「番号」が「1」である行に対応して設定された「サイズ」である「8」を取得する。同様に、対応情報作成部114は、「addr_2」として、「番号」が「2」である行に対応して設定された「アドレス」である「0x00000010(10進数表記で16)」を取得する。また、対応情報作成部114は、「size_2」として、「番号」が「2」である行に対応して設定された「サイズ」である「8」を取得する。
そして、対応情報作成部114は、「sizeA」に設定された値及び「sizeB」に設定された値に、それぞれ「size_i」を加算する更新を行う(S23)。
具体的に、対応情報作成部114は、図3に示すトレース情報132の例において、「sizeA」の値である「0」に、「size_1」の値である「8」を加算し、「sizeA」の値として新たに「8」を設定する。同様に、対応情報作成部114は、「sizeB」の値である「0」に、「size_1」の値である「8」を加算し、「sizeB」の値として新たに「8」を設定する。
次に、対応情報作成部114は、トレース情報132から取得した情報に対応するメモリアクセスが、アドレスが増加する方向(昇順になる方向)の連続アクセス(以下、増加方向の連続アクセスとも呼ぶ)に含まれるメモリアクセスであるか否かを判定する(S24)。
具体的に、対応情報作成部114は、例えば、「addr_i」の値に「size_i」の値を加算した値が、「addr_i+1」の値と等しい場合に、増加方向の連続アクセスが発生していると判定するものであってよい。すなわち、この場合、対応情報作成部114は、トレース情報132の「i」行目の情報に対応するデータと「i+1」行目の情報に対応するデータとが、連続した領域に記憶されていると判定することが可能になる。
さらに、対応情報作成部114は、「flagB」が「0」である場合に、増加方向の連続アクセスが発生していると判定するものであってよい。すなわち、この場合、対応情報作成部114は、「i」行目の情報に対応するメモリアクセスが、アドレスが減少する方向(降順になる方向)の連続アクセス(以下、減少方向の連続アクセスとも呼ぶ)に含まれるメモリアクセスではないと判定することが可能になる。
そして、増加方向の連続アクセスが発生していると判定した場合(S24のYES)、対応情報作成部114は、「flagA」に、増加方向の連続アクセスが発生していることを示す「1」を設定する(S25)。
一方、増加方向の連続アクセスが発生していないと判定した場合(S24のNO)、対応情報作成部114は、トレース情報132から取得した情報に対応するメモリアクセスが、減少方向の連続アクセスに含まれるか否かを判定する(S26)。
具体的に、対応情報作成部114は、例えば、「addr_i」の値から「size_i」の値を減算した値が、「addr_i+1」の値と等しい場合に、減少方向の連続アクセスが発生しているものと判定するものであってよい。さらに、対応情報作成部114は、例えば、「flagA」が「0」である場合に、減少方向の連続アクセスが発生しているものと判定するものであってよい。
そして、減少方向の連続アクセスが発生していると判定した場合(S26のYES)、対応情報作成部114は、「flagB」に、減少方向の連続アクセスが発生していることを示す「1」を設定する(S27)。
図3に示すトレース情報の例において、「addr_1」の値の10進数表記である「4096」に、「size_1」の値である「8」を加算した値は「4104」である。また、「addr_1」の値の10進数表記である「4096」から、「size_1」の値である「8」を減算した値は「4088」である。そのため、いずれの値も「addr_2」の値の2進法表記である「16」と一致しない。したがって、対応情報作成部114は、この場合、S22においてトレース情報132から取得した情報に対応するメモリアクセスが、増加方向または減少方向の連続アクセスに含まれるメモリアクセスではないと判定する(S24のNO、S26のNO)。
次に、対応情報作成部114は、図10に示すように、「addrA」に設定された値と、「addr_i」に設定された値とを比較する(S31)。そして、「addrA」に設定された値が「addr_i」に設定された値よりも大きい場合(S31のYES)、対応情報作成部114は、「addrA」に、「addr_i」に設定されている値を設定する(S32)。一方、「addrA」に設定された値が「addr_i」に設定された値よりも小さい場合(S31のNO)、対応情報作成部114は、「addrA」に、新たな値を設定しない。
すなわち、詳細については後述するが、増加方向または減少方向の連続アクセスが発生している場合(S24のYESまたはS26のYES)、S34において「addrA」に設定された値は初期化されない。したがって、対応情報作成部114は、「addrA」に、増加方向または減少方向の連続アクセスにおいてメモリアクセスされるアドレスのうち、先頭のアドレスが設定する。
なお、連続アクセスに含まれないメモリアクセスが発生した場合(S24のNO、S26のNO)、「addrA」には、十分に大きい値が設定されている(S21、S34)。そのため、対応情報作成部114は、この場合、「addr_i」に設定されている値を「addrA」に設定することになる(S31のYES、S32)。
具体的に、図3に示すトレース情報132の例において、「addrA」には、十分に大きい値が設定されている(S31のYES)。そのため、対応情報作成部114は、「addrA」に、「addr_1」に設定されている値である「0x00001000」を設定する(S32)。
次に、対応情報作成部114は、「addrA」に設定された値と、「sizeB」に設定された値とを対応付けて対応情報134として設定する(S33)。
図13は、「i」に設定されている値が「1」である場合において、S33の処理が行われた後の対応情報134の具体例である。図13に示す対応情報134は、図4で説明した対応情報に含まれる項目に加えて、メモリアクセスされたデータのサイズを示す「サイズ」を項目として有する。
具体的に、図3に示すトレース情報132の例において、対応情報作成部114は、図13に示すように、「addr_1」の値である「0x00001000」を「アドレス」に設定する。同様に、対応情報作成部114は、「sizeB」の値である「8」を「サイズ」に設定する。また、対応情報作成部114は、「0x00001000」を含む領域に対するメモリアクセスが1回行われたことを示す「1」を「アクセス頻度」に設定する。
その後、対応情報作成部114は、各変数の値を更新する(S34)。具体的に、対応情報作成部114は、S21の場合と同様に、「flagA」及び「flagB」に「0」を設定する。また、対応情報作成部114は、「sizeB」に「0」を設定する。また、対応情報作成部114は、「addrA」に十分に大きい値を設定する。すなわち、対応情報作成部114は、トレース情報132から取得した情報を対応情報134に反映させた場合、各変数の初期化を行う。
一方、図9のS25またはS27の処理が行われた場合、対応情報作成部114は、S31の場合と同様に、「addrA」に設定された値と、「addr_i」に設定された値とを比較する(S35)。そして、「addrA」に設定された値が「addr_i」に設定された値よりも大きい場合(S35のYES)、対応情報作成部114は、「addr_i」に設定されている値を「addrA」に設定する(S36)。また、「addrA」に設定された値が「addr_i」に設定された値よりも小さい場合(S35のNO)、対応情報作成部114は、「addrA」に新たな値を設定しない。
次に、対応情報作成部114は、トレース情報132の「i」行目が最終行であるか否かを判定する(S37)。そして、「i」行目が最終行でないと判定した場合(S37のNO)、対応情報作成部114は、「i」に設定されている値に「1」を加算する(S38)。一方、「i」行目が最終行であると判定した場合(S37のYES)、対応情報作成部114は、S22以降の処理を再度実行する。
具体的に、上記の図3に示す例において、「i」行目が最終行(11行目)でないため(S37のNO)、対応情報作成部114は、「i」に設定されている値である「1」に「1」を加算した「2」を、新たな「i」として設定する(S38)。
(「i」が「2」の場合の処理)
図9に戻り、対応情報作成部114は、トレース情報132の2行目の「アドレス」に設定された値である「0x00000010」を「addr_2」として取得する(S22)。また、対応情報作成部114は、トレース情報132の2行目の「サイズ」に設定された値である「8」を「size_2」として取得する(S22)。同様に、対応情報作成部114は、トレース情報132の3行目の「アドレス」に設定された値である「0x00000018(10進数表記で24)」を「addr_3」として取得する(S22)。また、対応情報作成部114は、トレース情報132の3行目の「サイズ」に設定された値である「8」を「size_3」として取得する(S22)。
そして、対応情報作成部114は、「sizeA」に設定された値である「8」に、「size_2」の値である「8」を加算した「16」を、新たな「sizeA」の値として設定する(S23)。同様に、対応情報作成部114は、「sizeB」に設定された値である「0」に、「size_2」の値である「8」を加算した「8」を、新たな「sizeB」の値として設定する(S23)。
次に、対応情報作成部114は、トレース情報132から取得した情報に対応するメモリアクセスが、連続アクセスに含まれるか否かの判定を行う(S24、S26)。具体的に、「addr_2」の値の10進数表記である「16」に、「size_2」の値である「8」を加算した値である「24」は、「addr_3」の値の2進法表記である「24」と一致する。したがって、対応情報作成部114は、トレース情報132から取得した情報に対応するメモリアクセスは、増加方向の連続アクセスに含まれるメモリアクセスであると判定する(S24のYES)。そのため、対応情報作成部114は、「flagA」の値を「1」に設定する(S25)。
そして、「addrA」には、十分に大きい値が設定されているため(S35のYES)、対応情報作成部114は、「addr_2」の値である「0x00000010」を「addrA」に設定する(S36)。その後、トレース情報132の2行目が最終行ではないため(S37のNO)、対応情報作成部114は、「i」の値を「3」に更新する(S38)。
すなわち、「i」の値が「2」である場合、対応情報作成部114は、S33の処理を行わない。そのため、対応情報作成部114は、ここでは対応情報134に情報の設定を行わない。
(「i」が「3」の場合の処理)
図9に戻り、対応情報作成部114は、トレース情報132の3行目の「アドレス」に設定された値である「0x00000018」を「addr_3」として取得する(S22)。また、対応情報作成部114は、トレース情報132の3行目の「サイズ」に設定された値である「8」を「size_3」として取得する(S22)。同様に、対応情報作成部114は、トレース情報132の4行目の「アドレス」に設定された値である「0x00000020(10進数表記で32)」を「addr_4」として取得する(S22)。また、対応情報作成部114は、トレース情報132の4行目の「サイズ」に設定された値である「8」を「size_4」として取得する(S22)。
次に、対応情報作成部114は、「sizeA」に設定された値である「8」に「size_3」の値である「8」を加算した「24」を、新たな「sizeA」の値として設定する(S23)。同様に、対応情報作成部114は、「sizeB」に設定された値である「8」に「size_3」の値である「8」を加算した「16」を、新たな「sizeB」の値として設定する(S23)。
すなわち、S24またはS26の処理において、増加方向または減少方向の連続アクセスが発生していると判定された場合、対応情報作成部114は、「sizeB」及び「addrA」等の変数の初期化を行わない(S24のYES、S26のYES、S34)。そのため、「sizeB」には、連続アクセスが発生している間にメモリアクセスが行われたデータの合計サイズが設定される。また、「addrA」には、連続アクセスが発生している間にメモリアクセスが行われたアドレスのうち、先頭のアドレスが設定される。
そして、「addr_3」の値の2進法表記である「24」に、「size_3」の値である「8」を加算した値である「32」は、「addr_4」の値の2進法表記である「32」と一致する。したがって、対応情報作成部114は、トレース情報132から取得した情報に対応するメモリアクセスは、増加方向の連続アクセスに含まれるメモリアクセスであると判定する(S24のYES)。そのため、対応情報作成部114は、「flagA」の値として「1」を維持する(S25)。
次に、「addrA」には、「addr_2」の値である「0x00000010」が設定されている。そのため、「addrA」の値である「0x00000010」は、「addr_3」の値である「0x00000018」よりも小さい(S35のNO)。したがって、対応情報作成部114は、「addrA」の値の設定を行わない。すなわち、この場合、「addrA」は、「addr_2」の情報を維持する。
そして、トレース情報132の3行目が最終行ではないため(S37のNO)、対応情報作成部114は、「i」の値を「4」に更新する(S38)。
なお、「i」の値が「4」の場合における対応情報作成部114の処理は、「i」が「3」の場合における対応情報作成部114の処理と同じ内容であるため、説明を省略する。
(「i」が「5」の場合の処理)
そして、「i」の値が「5」に更新された場合(S38)、対応情報作成部114は、トレース情報132の5行目の「アドレス」に設定された値である「0x00000028(10進数表記で40)」を「addr_5」として取得する(S22)。そして、対応情報作成部114は、トレース情報132の5行目の「サイズ」に設定された値である「8」を「size_5」として取得する(S22)。さらに、対応情報作成部114は、トレース情報132の6行目の「アドレス」に設定された値である「0x00000078(10進数表記で120)」を「addr_6」として取得する(S22)。そして、対応情報作成部114は、トレース情報132の6行目の「サイズ」に設定された値である「8」を「size_6」として取得する(S22)。
そして、対応情報作成部114は、「sizeA」に設定された値である「32」に、「size_5」の値である「8」を加算した「40」を、新たな「sizeA」の値として設定する(S23)。同様に、対応情報作成部114は、「sizeB」に設定された値である「24」に、「size_5」の値である「8」を加算した「32」を、新たな「sizeB」の値として設定する(S23)。
ここで、「addr_5」の値である「40」に、「size_5」の値である「8」を加算した値である「48」は、「addr_5」の値の2進法表記である「120」と一致しない。また、「addr_5」の値である「40」から、「size_5」の値である「8」を減算した値である「32」は、「addr_5」の値の2進法表記である「120」と一致しない。したがって、対応情報作成部114は、トレース情報132から取得した情報に対応するメモリアクセスが、連続アクセスに含まれるメモリアクセスではないと判定する(S24のNO、S26のNO)。
次に、「addrA」には、「addr_2」の値である「0x00000010」が設定されている。そのため、「addrA」の値である「0x00000010」は、「addr_5」の値である「0x00000028」よりも小さい(S35のNO)。したがって、対応情報作成部114は、「addrA」に設定されている値を維持する。
そして、対応情報作成部114は、「addrA」に設定された値と、「sizeB」に設定された値とを対応付けて対応情報134に設定する(S33)。
図14は、「i」に設定されている値が「5」である場合において、S33の処理が行われた後の対応情報134の具体例である。対応情報作成部114は、図14に示すように、「addrA」の値である「0x00000010」を「アドレス」に設定する。同様に、対応情報作成部114は、「sizeB」の値である「32」を「サイズ」に設定する。また、対応情報作成部114は、「0x00000010」を含む領域に対するメモリアクセスが1回行われたことを示す「1」を「アクセス頻度」に設定する。
図10に戻り、対応情報作成部114は、各変数の値を更新する(S34)。具体的に、対応情報作成部114は、「flagA」及び「flagB」に「0」を設定する。また、対応情報作成部114は、「sizeB」に「0」を設定する。さらに、対応情報作成部114は、「addrA」に十分に大きい値を設定する。
そして、トレース情報132の5行目が最終行ではないため(S37のNO)、対応情報作成部114は、「i」の値を「6」に更新する(S38)。以降のS3の処理については、既に説明した場合と同じであるため省略する。
図15は、図3に示すトレース情報132に含まれる全ての情報を反映させた後の対応情報134の具体例である。図3に示すトレース情報132の例において、「番号」が「7」及び「11」である情報の内容は、「番号」が「1」である情報の内容と同じである。すなわち、図3に示すトレース情報132は、「アドレス」が「0x00001000」から「8(バイト)」の領域に対するメモリアクセスが3回発生したことを示している。したがって、対応情報作成部114は、「番号」が「7」及び「11」である情報について新たな行を追加することなく、図15に示すように、「番号」が「1」である行の「アクセス頻度」を「3」に更新するものであってよい。図15の他の情報については説明を省略する。
[S4の処理の詳細]
次に、図7で説明したS4の処理の詳細について説明する。
情報処理装置10の削減時間算出部115は、図11に示すように、各変数に初期値を設定する(S51)。具体的に、削減時間算出部115は、「i」に「1」を設定する。
そして、削減時間算出部115は、対応情報134の「i」行目に対応するデータが、第1メモリ101に格納されている場合におけるメモリアクセスに要する時間を算出する。また、削減時間算出部115は、対応情報134の「i」行目に対応するデータが、第2メモリ102に格納されている場合におけるメモリアクセスに要する時間を算出する。そして、削減時間算出部115は、それぞれ算出したメモリアクセスに要する時間の差を算出する(S52)。
具体的に、削減時間算出部115は、例えば、以下の式(2)及び式(3)を用いることにより、各メモリアクセスに要する時間の算出を行う。
T1=max(0,(x−Linesize)/B1)+L1 ・・・ 式(2)
T2=max(0,(x−Linesize)/B2)+L2 ・・・ 式(3)
式(2)及び式(3)において、「x」は、メモリアクセス対象のデータのサイズである。また、「B1」は、第1メモリ101のバンド幅(メモリが単位時間あたりに転送可能なデータのサイズ)であり、「B2」は、第2メモリ102のバンド幅である。そして、「L1」は、CPU103と第1メモリ101との間で通信を行う場合におけるレイテンシの値であり、「L2」は、CPU103と第2メモリ102との間で通信を行う場合におけるレイテンシの値である。さらに、「Linesize」は、メモリが1回に読み出すデータのサイズである。また、「T1」は、CPU103が第1メモリ101に対してメモリアクセスを行った場合に要する時間であり、「T2」は、CPU103が第2メモリ102に対してメモリアクセスを行った場合に要する時間である。
なお、max(0,(x−Linesize)/B1)は、「0」及び「(x−Linesize)/B1」の値のうち、大きい方の値を示す関数である。また、以下、「B1」が「4」であり、「L1」が「40」であり、「B2」が「16」であり、「L2」が「40」であり、「Linesize」が「8」であるものとして説明を行う。さらに、「Linesize」の単位は、例えば、B(バイト)であり、「T1」、「T2」、「L1」及び「L2」の単位は、例えば、msec(ミリセック)であり、「B1」及び「B2」の単位は、例えば、B(バイト)/msec(ミリセック)である。
以下、図15の対応情報134に含まれる情報に基づいて、メモリアクセスに要する時間を算出する具体例を説明する。
図15の対応情報134において、「番号」が「1」である情報に対応する「サイズ」は「8」である。したがって、削減時間算出部115は、式(2)に基づき、「番号」が「1」である情報に対応する「サイズ」に設定された値である「8」から「Linesize」に設定された値である「8」を減算した値を、「B1」の値である「4」で除算した値である「0」を算出する。そして、「0」と「0」とは等しいため、削減時間算出部115は、max(0,(x−Linesize)/B1)の値として「0」を算出する。さらに、削減時間算出部115は、算出した「0」に、「L1」の値である「40」を加算した「40」を「T1」の値として算出する。
次に、削減時間算出部115は、式(3)に基づき、「番号」が「1」である情報に対応する「サイズ」に設定された値である「8」から「Linesize」に設定された値である「8」を減算した値を、「B2」の値である「16」で除算した値である「0」を算出する。そして、「0」と「0」とは等しいため、削減時間算出部115は、max(0,(x−Linesize)/B2)の値として「0」を算出する。さらに、削減時間算出部115は、算出した「0」に、「L2」の値である「40」を加算した「40」を「T2」の値として算出する。
そして、削除時間算出部115は、「番号」が「1」である情報に対応するデータを第1メモリ101から第2メモリ102に移行した場合におけるメモリアクセスの削減時間として、「T1」の値である「40」から「T2」の値である「40」を減算した「0」を算出する。
さらに、「アクセス頻度」に「3」が設定されているため、削減時間算出部115は、算出した「0」に「3」を乗算した「0」を算出する。これにより、削減時間算出部115は、「番号」が「1」である情報に対応するデータを第1メモリ101から第2メモリ102に移行した場合におけるメモリアクセスの総削減時間として、「0」を算出することが可能になる。
図11に戻り、削減時間算出部115は、S52で算出した総削減時間を対応情報134に設定する(S53)。
図16は、S52で算出した総削減時間を設定した場合における対応情報134の具体例である。図16に示す対応情報134は、図15で説明した対応情報134が有する項目に加え、S52で算出した総削減時間を設定する「削減時間」の項目を有する。具体的に、削減時間算出部115は、図16に示すように、「アドレス」が「0x00001000」に対応する「削減時間」に、S52で算出した総削減時間である「0」を設定する。なお、「削減時間」の単位は、例えば、msecである。
図11に戻り、削減時間算出部115は、「i」行目が最終行であるか否かを判定する(S54)。そして、「i」行目が最終行である場合(S54のYES)、削減時間算出部115は、S4の処理を終了する。一方、「i」行目が最終行でない場合(S54のNO)、削減時間算出部115は、「i」に設定された値に「1」を加算し(S55)、S52以降の処理を再度実行する。
具体的に、「i」に設定された値が「1」である場合、「i」行目は最終行(5行目)でない。そのため、削減時間算出部115は、「i」の値である「1」に「1」を加算した「2」を、新たな「i」の値として設定する。
次に、「i」に設定された値が「2」である場合におけるS52の処理の具体例を説明する。
図15の対応情報134において、「番号」が「2」である情報に対応する「サイズ」は「32」である。したがって、削減時間算出部115は、式(2)に基づき、「番号」が「2」である情報に対応する「サイズ」に設定された値である「32」から「Linesize」に設定された値である「8」を減算した値を、「B1」の値である「4」で除算した値である「6」を算出する。そして、「6」は「0」よりも大きいため、削減時間算出部115は、max(0,(x−Linesize)/B1)の値として「6」を算出する。さらに、削減時間算出部115は、算出した「6」に、「L1」の値である「40」を加算した「46」を「T1」の値として算出する。
次に、削減時間算出部115は、式(3)に基づき、「番号」が「1」である情報に対応する「サイズ」に設定された値である「32」から「Linesize」に設定された値である「8」を減算した値を、「B2」の値である「16」で除算した値である「1.5」を算出する。そして、「1.5」は「0」よりも大きいため、削減時間算出部115は、max(0,(x−Linesize)/B2)の値として「1.5」を算出する。さらに、削減時間算出部115は、算出した「1.5」に、「L2」の値である「40」を加算した「41.5」を「T2」の値として算出する。
そして、削減時間算出部115は、「番号」が「1」である情報に対応するデータを第1メモリ101から第2メモリ102に移行した場合におけるメモリアクセスの削減時間として、「T1」の値である「46」から「T2」の値である「41.5」を減算した「4.5」を算出する。
さらに、「アクセス頻度」に「1」が設定されているため、削減時間算出部115は、算出した「4.5」に「1」を乗算した「4.5」を算出する。これにより、削減時間算出部115は、「番号」が「2」である情報に対応するデータを第1メモリ101から第2メモリ102に移行した場合におけるメモリアクセスの総削減時間として、「4.5」を算出することが可能になる。
図11に戻り、削減時間算出部115は、S52で算出した総削減時間を対応情報134に設定する(S53)。
図17は、S52で算出した総削減時間を設定した場合における対応情報134の具体例である。具体的に、削減時間算出部115は、図17に示すように、「アドレス」が「0x00000010」に対応する「削減時間」に、S52で算出した総削減時間である「4.5」を設定する。
その後、削減時間算出部115は、図18に示すように、対応情報134に含まれる全ての情報に基づいてメモリアクセスの総削減時間を算出し、「削減時間」に設定する。図18の他の情報については説明を省略する。
[S5の処理の詳細]
次に、図7で説明したS5の処理の詳細について説明する。
情報処理装置10のデータ配置決定部116は、図12に示すように、各変数に初期値を設定する(S61)。
具体的に、データ配置決定部116は、「RestMem」に、第2メモリ102のうち、新たなデータの割り当てが可能な領域(以下、割当可能領域)のサイズを設定する。以下、第2メモリ102の割当可能領域が48(バイト)であり、データ配置決定部116は、S61において、「RestMem」に「48」を設定したものとして説明を行う。
続いて、データ配置決定部116は、対応情報134から、1バイトあたりの「削減時間」が最も大きい情報の「サイズ」を抽出し、「DataMem」に設定する(S62)。
具体的に、図18に示す対応情報134の場合においては、「番号」が「2」の情報に対応する「削減時間」が「4.5」であり、「サイズ」が「32」である。そのため、「番号」が「2」の情報に対応する1バイトあたりの「削減時間」は、「削減時間」である「4.5」を「サイズ」である「32」で除算した「0.14(有効数字2桁)」である。
また、図18に示す対応情報134の場合においては、「番号」が「4」の情報に対応する「削減時間」が「1.5」であり、「サイズ」が「16」である。そのため、「番号」が「4」の情報に対応する1バイトあたりの「削減時間」は、「削減時間」である「1.5」を「サイズ」である「16」で除算した「0.093(有効数字2桁)」である。
さらに、図18に示す対応情報134の場合において、「番号」が「1」、「3」及び「5」の情報に対応する「削減時間」は「0」であるため、それぞれの情報に対応する1バイトあたりの「削減時間」は、「0」である。したがって、データ配置決定部116は、「番号」が「2」である情報に対応する「サイズ」である「32」を「DataMem」に設定する。
次に、データ配置決定部116は、「RestMen」に設定された値と「DataMem」に設定された値とを比較する(S63)。そして、「RestMen」に設定された値が「DataMem」に設定された値よりも大きい場合(S63のYES)、データ配置決定部116は、S62で抽出した情報に対応するデータを、指示情報135として情報格納領域130に記憶する(S64)。
図19は、S64の処理を実行した場合における指示情報135の具体例である。図19に示す指示情報135は、対応情報134と同じ項目を有している。具体的に、データ配置決定部116は、図19に示すように、図18に示す対応情報134における「番号」が「2」である情報と同じ情報を、指示情報135として設定する。すなわち、データ配置決定部116は、この場合、図18に示す対応情報134における「番号」が「2」である情報に対応するデータを、第2メモリ102に記憶すべきデータとして決定する。
図12に戻り、データ配置決定部116は、「RestMem」に設定された値から「DataMem」に設定された値を減算して取得した値を、新たな「RestMem」の値として設定する(S65)。
具体的に、図19に示す指示情報135の例においては、「RestMem」に設定された値である「48」から「DataMem」に設定された値である「32」を減算して取得した値である「16」を、新たな「RestMem」として設定する。
一方、「RestMen」に設定された値が「DataMem」に設定された値よりも小さい場合(S63のNO)、データ配置決定部116は、S64及びS65の処理を実行しない。すなわち、データ配置決定部116は、この場合、第2メモリ102における記憶可能領域が不足しているため、第2メモリ2が「RestMem」に設定された情報に対応するデータを記憶することができないと判定する。
続いて、データ配置決定部116は、対応情報134からS52で抽出した情報を削除する(S66)。そして、データ配置決定部116は、S66において情報の削除を行った後、対応情報134に情報が存在しない場合(S67のYES)、S5の処理を終了する。一方、S66において情報の削除を行った後において、対応情報134に情報が存在する場合(S67のNO)、データ配置決定部116は、S62以降の処理を再度実行する。
次に、データ配置決定部116は、S66において情報が削除された対応情報134から、「削減時間」が最も大きい情報を抽出して「DataMem」に設定する(S62)。具体的に、図18に示す対応情報134の場合において、「番号」が「2」である情報は既に削除されている。そのため、データ配置決定部116は、1バイトあたりの「削減時間」が「0.093(有効数字2桁)」である情報(「番号」が「4」である情報)に対応する「サイズ」である「16」を「DataMem」に設定する。
そして、「RestMen」に設定された値である「16」が「DataMem」に設定された値である「16」と等しいため(S63のYES)、データ配置決定部116は、S62で抽出した情報に対応するデータを指示情報135として情報格納領域130に記憶する(S64)。
図20は、図19に示す状態の後、S64の処理が実行された場合における指示情報135の具体例である。図20に示すように、データ配置決定部116は、図18に示す対応情報134における「番号」が「4」である情報を指示情報135として設定する。
図12に戻り、データ配置決定部116は、「RestMem」に設定された値から「DataMem」に設定された値を減算して取得した値を、新たな「RestMem」の値として設定する(S65)。
具体的に、図19に示す指示情報135の例において、データ配置決定部116は、「RestMem」に設定された値である「16」から「DataMem」に設定された値である「16」を減算して取得した値である「0」を、新たな「RestMem」として設定する。
ここで、「RestMem」に「0」が設定されたため、データ配置決定部116は、新たなデータを第2メモリ102に移行すべきデータとして決定することができない(S63のNO)。したがって、データ配置決定部116は、対応情報134から全ての情報が削除した後、S5の処理を終了する(S66、S67)。すなわち、データ配置決定部116は、図18に示す対応情報134のうち、「番号」が「1」、「3」及び「5」の情報に対応するデータを、第1メモリ101に記憶すべきと決定する。
このように、第1の実施の形態において、情報処理装置10は、トレース情報132において連続アクセスが発生した場合、その連続するアドレス全体に対するメモリアクセスが纏めて行われたものとして、トレース情報132から情報を取得する。そして、第1の実施の形態における情報処理装置10は、取得した情報に基づき、第1メモリ101に記憶したデータを第2メモリ102に移行した場合におけるメモリアクセスの削減時間を算出する。その後、第1の実施の形態における情報処理装置10は、メモリアクセスの削減時間(例えば、1バイトあたりの削減時間)が大きいものを優先して、第2メモリ102に記憶すべきデータを決定する。
これにより、情報処理装置10は、連続アクセスが発生した場合においても、メモリアクセスの効率化を図ることができるデータ配置を決定することが可能になる。
[第2の実施の形態]
次に、第2の実施の形態について説明する。図23から図26は、第2の実施の形態におけるデータ配置決定処理の詳細を説明するフローチャート図である。また、図21、図22及び図27から図35は、第2の実施の形態におけるデータ配置決定処理の詳細を説明する図である。図12、図21、図22及び図27から図35を参照しながら、図23から図26のデータ配置決定処理の詳細を説明する。
第2の実施の形態では、第1メモリ101及び第2メモリ102内の各バンクが、Rowbuffer領域(以下、単にバッファ領域とも呼ぶ)を有する場合を想定している。Rowbuffer領域は、前回メモリアクセスされた各バンク内のデータを記憶(保持)する領域である。
図21は、第2の実施の形態における第1メモリ101の具体例を説明する図である。図232における第1メモリ101は、バンク102a、バンク102b、バンク102c及びバンク102dを有する。そして、それぞれのバンクは、上記のRowbuffer領域を有する。
具体的に、図21に示す例において、CPU103からバンク102aに記憶されたデータに対するメモリアクセスの要求があった場合、第1メモリ101は、バンク102a内のRowbuffer領域を参照する。そして、第1メモリ101は、メモリアクセス対象のデータがバンク102a内のRowbuffer領域に記憶されているか否かを判定する。
その結果、メモリアクセス対象のデータがバンク102a内のRowbuffer領域に記憶されている場合、第1メモリ101は、バンク102a内の他の領域(以下、メモリセル領域とも呼ぶ)に記憶されたデータに対してメモリアクセスを行わない。そして、第1メモリ101は、バンク102a内のRowbuffer領域に記憶されているメモリアクセス対象のデータをCPU103に返す。一方、メモリアクセス対象のデータがバンク102a内のRowbuffer領域に記憶されていない場合、第1メモリ101は、バンク102a内の他の領域に記憶されたデータに対してメモリアクセスを行う。そして、第1メモリ101は、この場合、メモリアクセス対象のデータをバンク102a内のRowbuffer領域に書き込んでから、メモリアクセス対象のデータをCPU103に返す。
すなわち、第1メモリ101は、メモリアクセス対象のデータがRowbuffer領域に記憶されている確率が高いほど、効率的なメモリアクセスを行うことが可能になる。そのため、メモリアクセスの要求元(CPU103)は、一般的に、第1メモリ101に対するメモリアクセスの要求が蓄積された場合、Rowbuffer領域に格納されたデータに対するメモリアクセスが増えるように、メモリアクセスの要求順序の並び替えを行う。
そこで、第2の実施の形態における情報処理装置10は、メモリアクセスの要求元において行われるメモリアクセスの要求順序の並び替えを考慮に入れた形で、第2メモリ102に記憶すべきデータを決定する。これにより、情報処理装置10は、実際に行われるメモリアクセスの状態に沿った形で、データの配置を決定することが可能になる。なお、以下、第1メモリ101は、メモリアクセスされたデータをRowbuffer領域に記憶する際に、メモリアクセスされたデータとアドレスの一部分が同じであるデータ全てについて記憶を行うものとして説明を行う。
図22は、CPU103がメモリアクセスを行う際に指定するアドレスの具体例である。図22に示すアドレスは、データが格納されているメモリセルの行を示す「Row number」と、データが格納されているバンクを示す「Bank」とを有する。また、図22に示すアドレスは、データが格納されているバンクにアクセスするための「Channel」と、カラムの指定を行う「Byte in a page」とを有する。なお、図22に示すアドレスにおいて、「Row number」及び「Byte in a page」が12ビットであり、「Bank」及び「Channel」が4ビットである。そして、第1メモリ101は、例えば、メモリアクセスされたデータをRowbuffer領域に記憶する際に、メモリアクセスされたデータと、「Row number」、「Bank」及び「Channel」が同じであるデータ全てについて記憶を行う。
なお、以下、図7におけるS1、S2及びS5の処理については、第1の実施の形態における処理を同じ内容であるため、説明を省略する。また、「Row number」、「Bank」及び「Channel」が同じであるデータに対して複数のメモリアクセスが発生することを、単に複数アクセスとも呼び、トレース情報132における複数アクセスが発生した旨を示す情報を複数アクセス情報とも呼ぶ。
[S3の処理の詳細]
(トレース情報132に含まれる情報の並び替えを行う処理)
初めに、図7で説明したS3の処理の詳細について説明する。
情報処理装置10の対応情報作成部114は、図23に示すように、各変数に初期値を設定する(S71)。具体的に、対応情報作成部114は、トレース情報132の行を示す「i」に「1」を設定する。
次に、対応情報作成部114は、トレース情報132の「i」行目の「時刻」に設定された時刻から、時間Tが経過するまでの「時刻」が格納された情報を取得する(S72)。以下、時間Tは10(msec)であるものとして説明を行う。
図3に示すトレース情報132の例において、1行目の「時刻」に設定された時刻は「0001」である。したがって、対応情報作成部114は、「0001」から「0011」までの「時刻」を有する情報(「番号」が「1」から「7」である情報)を取得する。
そして、対応情報作成部114は、トレース情報132の「アドレス」に設定された情報のうち、所定の情報が一致する情報が連続するように、S72で取得した情報の並べ替えを行う(S73)。所定の情報は、例えば、トレース情報132の「アドレス」のうち、13ビットから32ビット(16進数表記の場合における上5桁)であってよい。以下、所定の情報が13ビットから32ビットであるものとして説明を行う。
図27は、S73の処理を実行した場合のトレース情報132を説明する具体例である。図3に示すトレース情報132の例において、「番号」が「1」から「7」である情報のうち、「番号」が「1」及び「7」である情報の上5桁は「00001」であり、「番号」が「2」から「6」である情報の上5桁は「00000」である。
したがって、対応情報作成部114は、図27に示すように、「番号」が「2」から「6」である情報が連続し、「番号」が「1」及び「7」である情報が連続するように、図3に示すトレース情報132に含まれる情報を並び替える。これにより、対応情報作成部114は、メモリアクセスの要求順序の並び替えを考慮した形で、第2メモリ102に記憶すべきデータを決定することが可能になる。
図23に戻り、対応情報作成部114は、S72においてトレース情報132に含まれる全ての情報について取得を行ったか否かを判定する(S74)。そして、全ての情報について取得を行っていないと判定した場合(S74のNO)、対応情報作成部114は、S72において取得されていない情報の「番号」を「i」に設定する(S75)。その後、対応情報作成部114は、S72以降の処理を再度実行する。
具体的に、図27の例においては、対応情報作成部114は、「番号」が「7」である情報の取得までを行っている。そのため、対応情報作成部114は、S72において、トレース情報132に含まれる全ての情報の取得を行っていない(S74のNO)。したがって、対応情報作成部114は、この場合、「i」に「8」を設定する(S75)。以降の図23の処理については、既に説明した処理と同じ内容であるため説明を省略する。
図28は、S72において全ての情報の取得が完了した場合におけるトレース情報132の具体例である。図28に示すトレース情報132では、図27に示すトレース情報132と比較して、「番号」が「9」、「10」及び「11」である情報が並び替わっている(図28の下線部分)。すなわち、対応情報作成部114は、「アドレス」の上5桁が「00001」である情報が連続し、「アドレス」の上5桁が「20000」である情報が連続するように、図27に示すトレース情報132に含まれる情報をそれぞれ並び替える。
(対応情報134を作成する処理)
一方、トレース情報132に含まれる全ての情報の取得が完了した場合(S74のYES)、対応情報作成部114は、図24に示すように、各変数に初期値を設定する(S81)。
具体的に、対応情報作成部114は、トレース情報132の行を示す「i」に「1」を設定し、メモリアクセスの頻度情報である「k」に「0」を設定する。また、「アドレス」の上5桁が一致する領域内のデータに対する連続アクセスが発生している間に、メモリアクセスが行われたデータの合計サイズである「size」に「0」を設定する。
(「i」が「1」の場合の処理)
次に、対応情報作成部114は、トレース情報132から、「addr_i」と「size_i」とを取得する(S82)。また、対応情報作成部114は、トレース情報132から、「addr_i+1」と「size_i+1」とを取得する(S82)。
具体的に、図28に示すトレース情報132において、対応情報作成部114は、「addr_1」として、「番号」が「2」である行に対応して設定された「アドレス」である「0x00000010」を取得する。また、図28に示すトレース情報132において、対応情報作成部114は、「size_1」として、「番号」が「2」である行に対応して設定された「サイズ」である「8」を取得する。同様に、対応情報作成部114は、「addr_2」として、「番号」が「3」である行に対応して設定された「アドレス」である「0x00000018」を取得する。また、図28に示すトレース情報132において、対応情報作成部114は、「size_2」として、「番号」が「3」である行に対応して設定された「サイズ」である「8」を取得する。
そして、対応情報作成部114は、「size」に設定された値に、「size_i」を加算する更新を行う(S83)。また、対応情報作成部114は、「k」に設定された値に、「1」を加算する更新を行う(S83)。
具体的に、図28に示すトレース情報の1行目の情報を取得した場合、対応情報作成部114は、「size」の値である「0」に、「size_1」の値である「8」を加算し、「size」の値として新たに「8」を設定する。また、図28に示すトレース情報の1行目の情報を取得した場合、対応情報作成部114は、「k」の値である「0」に、「1」を加算し、「k」の値として新たに「1」を設定する。
次に、対応情報作成部114は、S82においてトレース情報132から取得した「addr_i」の上5桁と「addr_i+1」の上5桁とが一致するか否かを判定する(S84)。そして、S82においてトレース情報132から取得した「addr_i」の上5桁と「addr_i+1」の上5桁とが一致していないと判定した場合(S84のNO)、対応情報作成部114は、図25に示すように、対応情報134の設定を行う(S91)。この場合、対応情報作成部114は、「addr_i」に設定されたアドレスの下3桁を「0」にしたアドレスと、「size」に設定された値と、「k」に設定された値とを対応付けて、対応情報134として情報格納領域130に設定する。
その後、対応情報作成部114は、各変数の値を更新する(S92)。具体的に、対応情報作成部114は、「k」に「0」を設定し、「size」に「0」を設定する。すなわち、対応情報作成部114は、トレース情報132から取得した情報を対応情報134に反映させた場合、各変数の初期化を行う。
一方、「addr_i」の上5桁と「addr_i+1」の上5桁とが一致すると判定した場合(S84のYES)、対応情報作成部114は、S91及びS92の処理は実行しない。
具体的に、図28の例において、「addr_1」の値である「0x00000010」と「addr_2」の値である「0x00000018」とは、上5桁が共に「00000」である。したがって、対応情報作成部114は、「addr_i」の上5桁と「addr_i+1」の上5桁とが一致すると判定する(S84のYES)。
次に、対応情報作成部114は、トレース情報132における「i」行目が最終行であるか否かを判定する(S93)。そして、「i」行目が最終行でないと判定した場合(S93のNO)、対応情報作成部114は、「i」に「1」を加算する(S94)。
具体的に、図28に示すトレース情報132は、11行目まで情報が存在する。そのため、対応情報作成部114は、「i」行目が最終行ではないと判定し(S93のNO)、「i」の値を「2」に更新する(S94)。
一方、「i」行目が最終行であると判定した場合(S93のYES)、対応情報作成部114は、S3の処理を終了する。なお、「i」が「2」から「4」までの場合における処理は、「i」が「1」の場合の処理と同じ内容であるため説明を省略する。
(「i」が「5」の場合の処理)
次に、「i」が「5」の場合における処理について説明を行う。
この場合、対応情報作成部114は、「addr_5」として「0x00000078」を取得し、「addr_6」として「0x00001000」を取得する(S82)。ここで、「0x00000078」の上5桁である「00000」と、「0x00001000」の上5桁である「00001」とは一致しない(S84のNO)。
そのため、対応情報作成部114は、「addr_5」の値である「0x00000078」の下3桁が「000」である「0x00000000」と、「size」の値である「40」と、「k」の値である「5」とを対応付けて対応情報132として設定する(S91)。
具体的に、対応情報作成部114は、図29に示すように、「番号」が「1」である情報に対応付けて、「アドレス」として「0x00000000」を設定し、「アクセス頻度」として「k」の値である「5」を設定し、「サイズ」として「size」の値である「40」を設定する。
そして、対応情報作成部114は、「k」に「0」を設定し、「size」に「0」を設定する(S92)。以降のS3の処理については、既に説明した処理と同じ内容であるため説明を省略する。
図30は、図29に示すトレース情報に含まれる全ての情報の基づく対応情報134の具体例である。図28に示すトレース情報132において、「番号」が「1」及び「7」である情報に対応する「アドレス」のうちの上5桁と、「番号」が「8」及び「11」である情報に対応する「アドレス」のうちの上5桁は、共に「00001」である。しかし、「番号」が「8」及び「11」である情報に対応する「時刻」は、「番号」が「1」である「時刻」よりも、時間T(10(ms))以上後の時刻である。そのため、対応情報作成部114は、図30に示す対応情報134において、「番号」が「1」である情報と「番号」が「4」である情報とを別々の情報として集計している。
[S4の処理の詳細]
次に、図7で説明したS4の処理の詳細について説明する。
情報処理装置10の削減時間算出部115は、図26に示すように、各変数に初期値を設定する(S101)。具体的に、削減時間算出部115は、「i」に「1」を設定する。
そして、削減時間算出部115は、対応情報134の「i」行目に対応するデータが第1メモリ101に格納されている場合におけるメモリアクセスに要する時間を算出する。また、削減時間算出部115は、対応情報134の「i」行目に対応するデータが第2メモリ102に格納されている場合におけるメモリアクセスに要する時間を算出する。そして、削減時間算出部115は、それぞれ算出したメモリアクセスに要する時間の差分(削減時間)を算出する(S102)。すなわち、第2の実施の形態におけるS4では、Rowbuffer領域に格納されるデータ毎(「Row number」、「Bank」及び「Channel」が同じであるデータ毎)に、削減時間の算出を行う。
以下、第1メモリ101のRowbuffer領域にメモリアクセス対象のデータが存在した場合のメモリアクセスに要する時間を20(ms)として説明する。また、第1メモリ101のRowbuffer領域にメモリアクセス対象のデータが存在しなかった場合のメモリアクセスに要する時間を40(ms)として説明する。また、第2メモリ102のRowbuffer領域にメモリアクセス対象のデータが存在した場合のメモリアクセスに要する時間を8(ms)として説明する。さらに、第2メモリ102のRowbuffer領域にメモリアクセス対象のデータが存在しなかった場合のメモリアクセスに要する時間を30(ms)として説明する。なお、これらのメモリアクセスに要する時間は、例えば、上記の式(2)及び式(3)に基づいて算出するものであってよい。
具体的に、図30の対応情報134の「番号」が「1」である情報に対応する「アクセス頻度」は「5」である。そのため、削減時間算出部115は、5回のメモリアクセスのうち、最初のメモリアクセスにおけるメモリアクセス対象のデータがRowbuffer領域に存在しないものとして削減時間の算出を行う。一方、削減時間算出部115は、5回のメモリアクセスのうち、最初以外のメモリアクセス(4回)におけるメモリアクセス対象のデータがRowbuffer領域に存在するものとして削減時間の算出を行う。
したがって、削減時間算出部115は、図30の対応情報134の「番号」が「1」である情報に対応するデータへのメモリアクセスに要する合計時間は、このデータが第1メモリ101に格納されている場合、40、20、20、20及び20を加算した値である120であると判定する。また、削減時間算出部115は、このデータが第2メモリ102に格納されている場合、30、8、8、8及び8を加算した値である62であると判定する。さらに、削減時間算出部115は、「番号」が「1」である情報に対応するデータを第1メモリ101から第2メモリ102に移行した場合におけるメモリアクセスの差分を、120から62を減算した58と判定する。
そして、削減時間算出部115は、図31に示すように、「番号」が「1」である情報に対応する「削減時間」に「58」を設定する(S103)。また、削減時間算出部115は、例えば、「削減時間」に設定された値である「58」を、「サイズ」に設定された値である「40」で除算した値である「1.45」を「1バイトあたりの削減時間」として設定するものであってよい。
図26に戻り、削減時間算出部115は、「i」行目が最終行であるか否かを判定する(S104)。そして、「i」行目が最終行である場合(S104のYES)、削減時間算出部115は、S4の処理を終了する。一方、「i」行目が最終行でない場合(S104のNO)、削減時間算出部115は、「i」に設定された値に「1」を加算し(S105)、S102以降の処理を再度実行する。
具体的に、上記のように「i」に設定された値が「1」である場合、「i」行目は最終行でない。そのため、削減時間算出部115は、「i」の値である「1」に「1」を加算した「2」を、新たな「i」の値として設定する。
その後、削減時間算出部115は、図32に示すように、対応情報134に含まれる全ての情報についてメモリアクセスの削減時間を算出し、「削減時間」に設定する。図32の情報についての説明は省略する。
このように、第2の実施の形態において、情報処理装置10は、メモリアクセスの対象のデータがRowbuffer領域に記憶されている確率を高めるために、トレース情報132に含まれる情報の並び替えを行う。これにより、情報処理装置10は、第1メモリ101及び第2メモリ102がRowbuffer領域を有するメモリである場合であっても、メモリアクセスの効率化を図ることが可能なデータ配置を決定することが可能になる。
以上の実施の形態をまとめると、以下の付記のとおりである。
(付記1)
プログラムを実行した第1メモリのメモリアクセスに関するトレース情報から、メモリアクセスが行われたデータが格納された領域を示すアドレスと、前記アドレス毎のメモリアクセスの頻度情報とを対応付けた対応情報を作成する対応情報作成部と、
前記対応情報に基づき、前記第1メモリに格納されたデータを前記第1メモリよりバンド幅が大きいメモリである第2メモリに格納した場合における前記データのメモリアクセスの削減時間を、前記アドレス毎に算出する削減時間算出部と、
前記削減時間が大きい前記アドレスに格納されたデータを優先して、前記第2メモリに格納すべきことを決定するデータ配置決定部と、を有する、
データ配置決定装置。
(付記2)
付記1において、
前記対応情報作成部は、前記アドレス及び前記頻度情報に、メモリアクセスが行われたデータのサイズを対応付けて前記対応情報を作成する、
データ配置決定装置。
(付記3)
付記1において、
前記対応情報作成部は、前記トレース情報に、連続するアドレスに格納されたデータのそれぞれに対して連続してメモリアクセスが行われた旨を示す連続アクセス情報が含まれている場合、前記連続するアドレスと、前記連続するアドレス毎の前記連続してメモリアクセスが行われた頻度情報とを対応付けて前記対応情報を作成し、
前記削減時間算出部は、前記第1メモリに格納されたデータを、前記第1メモリよりバンド幅が大きいメモリである第2メモリに格納した場合における前記データのメモリアクセスの削減時間を、前記連続するアドレス毎に算出する、
データ配置決定装置。
(付記4)
付記3において、
前記連続アクセス情報は、メモリアクセスが行われたアドレスが昇順または降順になるように連続してメモリアクセスが行われた旨の情報である、
データ配置決定装置。
(付記5)
付記1において、
前記第1及び第2メモリは、メモリアクセスが行われたデータのアドレスを含む所定領域に格納されたデータを保持するバッファ領域を有し、
前記第1及び第2メモリは、メモリアクセスが行われた場合において、前記メモリアクセスの対象であるデータが前記バッファ領域に保持されている場合、前記保持されているデータを返信し、前記メモリアクセスの対象であるデータが前記バッファ領域に保持されていない場合、前記メモリアクセスの対象であるデータのアドレスを含む所定領域に格納されたデータを前記バッファ領域に格納し、前記バッファ領域に格納したデータを返信し、
前記対応情報作成部は、前記トレース情報に、同一の前記所定領域に格納されたデータに対する複数のメモリアクセスがあった旨を示す複数アクセス情報が含まれている場合、前記複数のメモリアクセスが連続して行われたように前記トレース情報に含まれる情報を並び替え、前記並び替えたトレース情報から、前記所定領域に格納されたデータのアドレスと、前記所定領域に格納されたデータのアドレス毎のメモリアクセスの頻度情報とを対応付けて前記対応情報を作成し、
前記削減時間算出部は、前記第1メモリに格納されたデータを、前記第1メモリよりバンド幅が大きいメモリである第2メモリに格納した場合における前記データのメモリアクセスの削減時間を、前記所定領域に格納されたデータのアドレス毎に算出する、
データ配置決定装置。
(付記6)
付記5において、
前記複数アクセス情報は、所定期間内に、同一の前記所定領域に格納されたデータに対する複数のメモリアクセスがあった旨の情報である、
データ配置決定装置。
(付記7)
付記1において、
前記データ配置決定部は、前記削減時間と該削減時間に対応する前記頻度情報とを乗算した値が大きい前記アドレスに格納されたデータを優先して、前記第2メモリに格納すべきことを決定する、
データ配置決定装置。
(付記8)
プログラムを実行した第1メモリのメモリアクセスに関するトレース情報から、メモリアクセスが行われたデータが格納された領域を示すアドレスと、前記アドレス毎のメモリアクセスの頻度情報とを対応付けた対応情報を作成し、
前記対応情報に基づき、前記第1メモリに格納されたデータを前記第1メモリよりバンド幅が大きいメモリである第2メモリに格納した場合における前記データのメモリアクセスの削減時間を、前記アドレス毎に算出し、
前記削減時間が大きい前記アドレスに格納されたデータを優先して、前記第2メモリに格納すべきことを決定する、
処理をコンピュータに実行させるデータ配置決定プログラム。
(付記9)
プログラムを実行した第1メモリのメモリアクセスに関するトレース情報から、メモリアクセスが行われたデータが格納された領域を示すアドレスと、前記アドレス毎のメモリアクセスの頻度情報とを対応付けた対応情報を作成し、
前記対応情報に基づき、前記第1メモリに格納されたデータを前記第1メモリよりバンド幅が大きいメモリである第2メモリに格納した場合における前記データのメモリアクセスの削減時間を、前記アドレス毎に算出し、
前記削減時間が大きい前記アドレスに格納されたデータを優先して、前記第2メモリに格納すべきことを決定する、
データ配置決定方法。