JP6898556B2 - 情報処理装置、コンパイル方法及びコンパイルプログラム - Google Patents

情報処理装置、コンパイル方法及びコンパイルプログラム Download PDF

Info

Publication number
JP6898556B2
JP6898556B2 JP2017144452A JP2017144452A JP6898556B2 JP 6898556 B2 JP6898556 B2 JP 6898556B2 JP 2017144452 A JP2017144452 A JP 2017144452A JP 2017144452 A JP2017144452 A JP 2017144452A JP 6898556 B2 JP6898556 B2 JP 6898556B2
Authority
JP
Japan
Prior art keywords
loop
information
source code
generation unit
exchange
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
JP2017144452A
Other languages
English (en)
Other versions
JP2019028540A (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 JP2017144452A priority Critical patent/JP6898556B2/ja
Publication of JP2019028540A publication Critical patent/JP2019028540A/ja
Application granted granted Critical
Publication of JP6898556B2 publication Critical patent/JP6898556B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、情報処理装置、コンパイル方法及びコンパイルプログラムに関する。
例えば、HPC(High Performance Conputing)等に用いられるコンパイラは、ソースコードのコンパイルを行う際に、処理速度等の処理性能を向上させるための最適化処理を行う。
具体的に、上記のようなコンパイラは、例えば、ソースコードに含まれる各ループを複数のループに分割するループ分割や、ソースコードに含まれる各ループにおいて用いられる添え字の交換を行うループ交換を行う。これにより、コンパイラは、例えば、ソースコードに対応する処理の実行時におけるメモリアクセスを効率的に行うことが可能になる。そのため、コンパイラは、ソースコードから生成されたオブジェクトコードの実行時におけるHPCの処理性能を向上させることが可能になる(例えば、特許文献1乃至3参照)。
特開2015−194881号公報 特開2007−226589号公報 特開2005−122506号公報
上記のようなループ分割やループ交換は、例えば、ソースコードの開発者(以下、単に開発者とも呼ぶ)による指定が行われた場合だけでなく、コンパイラの判断によって自動的に行われる場合がある。具体的に、コンパイラは、例えば、開発者によってループ交換を行う旨の指定が行われたループに対しても自動的にループ分割を行う。そして、コンパイラは、この場合、ループ分割によって生成した複数のループのそれぞれに対してループ交換を行う。
ここで、ループ分割によって生成された複数のループのそれぞれに対してループ交換が行われる場合、これらのループ交換には、HPCの処理性能を向上する観点から行われない方が好ましいループ交換が含まれている場合がある。そのため、開発者は、例えば、コンパイラによって行われたループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かを検証する必要がある。
しかしながら、上記のような検証を行う場合、開発者は、例えば、コンパイラが生成したオブジェクトコードを実機において動作させる必要があり、必要な情報を容易に取得することができない。そのため、開発者は、コンパイラによって行われたループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かについての検証を容易に行うことができない場合がある。
そこで、一つの側面では、コンパイラによって行われたループ交換に関する情報を容易に取得することを可能とする情報処理装置、コンパイル方法及びコンパイルプログラムを提供することを目的とする。
実施の形態の一つの態様によれば、ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成する情報生成部と、生成した前記第1の情報または前記第2の情報を出力する情報出力部と、を有する。
一つの側面によれば、コンパイラによって行われたループ交換に関する情報を容易に取得することを可能とする。
図1は、情報処理システム10の全体構成を示す図である。 図2は、情報処理装置1が行うコンパイル処理を説明するフローチャートである。 図3は、情報処理装置1が行うコード実行処理を説明するフローチャートである。 図4は、ソースコード131の具体例について説明する図である。 図5は、ソースコード131の具体例について説明する図である。 図6は、ストライドアクセスが行われる場合における具体例を説明する図である。 図7は、連続アクセスが行われる場合における具体例を説明する図である。 図8は、情報処理装置1のハードウエア構成を説明する図である。 図9は、情報処理装置1の機能のブロック図である。 図10は、情報格納領域130に記憶された情報のブロック図である。 図11は、S3の処理の概略について説明するフローチャートである。 図12は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャートである。 図13は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャートである。 図14は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャートである。 図15は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャートである。 図16は、ループ交換が指示されているループの具体例を説明する図である。 図17は、図16に示すループに対してループ分割が行われた後のループの具体例を説明する図である。 図18は、図17に示すループに対してループ交換が行われた後のループの具体例を説明する図である。 図19は、図18(A)に示すループから生成される第1の情報135の具体例を説明する図である。 図20は、図18(B)に示すループから生成される第1の情報135の具体例を説明する図である。 図21は、ループ交換が指示されていないループの具体例を説明する図である。 図22は、図21に示すループに対してループ分割が行われた後のループの具体例を説明する図である。 図23は、図22(A)に示すループから生成される第2の情報136の具体例を説明する図である。 図24は、図22(B)に示すループから生成される第2の情報136の具体例を説明する図である。 図25は、第2の推奨情報136cが追加された第2の情報136の具体例を説明する図である。 図26は、第1の推奨情報135cが追加された第1の情報135の具体例を説明する図である。
[情報処理システムの構成]
図1は、情報処理システム10の全体構成を示す図である。図1に示す情報処理システム10は、情報処理装置1(コンパイラが動作する情報処理装置)と、記憶装置2と、操作端末3とを含む。図1に示す操作端末3は、操作端末3a、3b及び3cが含まれている。
情報処理装置1(情報処理装置1のCPU)は、コンパイルを開始するタイミング(以下、コンパイル開始タイミングとも呼ぶ)になった場合、例えば、記憶装置2に記憶されたソースコード(以下、ソースコード131とも呼ぶ)を取得し、取得したソースコード131のコンパイルを行う処理(以下、コンパイル処理とも呼ぶ)を行うことによってオブジェクトコード(以下、オブジェクトコード133とも呼ぶ)を生成する。コンパイル開始タイミングは、例えば、操作端末3からコンパイルを行う旨の指示を受け付けたタイミングであってよい。
また、情報処理装置1は、オブジェクトコード133を実行するタイミング(以下、コード実行タイミングとも呼ぶ)になった場合、コンパイル処理によって生成されたオブジェクトコード133を実行する処理(以下、コード実行処理とも呼ぶ)を行う。以下、情報処理装置1が行うコンパイル処理及びコード実行処理について説明を行う。
[情報処理装置によるコンパイル処理]
初めに、情報処理装置1が行うコンパイル処理について説明を行う。図2は、情報処理装置1が行うコンパイル処理を説明するフローチャートである。
情報処理装置1は、図2に示すように、コンパイル開始タイミングまで待機する(S1のNO)。そして、コンパイル開始タイミングになった場合(S1のYES)、情報処理装置1は、ソースコード131の字句解析及び構文解析を行うことにより、中間言語(以下、中間言語132とも呼ぶ)を生成する(S2)。そして、情報処理装置1は、例えば、生成した中間言語132を情報格納領域130に記憶する。
その後、情報処理装置1は、S2の処理において生成された中間言語132の最適化を行う(S3)。具体的に、情報処理装置1は、中間言語132に含まれるループのそれぞれに対して、ループ分割やループ交換等を行う。
そして、情報処理装置1は、例えば、S2で最適化を行った中間言語132からオブジェクトコード133の生成を行う(S4)。そして、情報処理装置1は、例えば、生成したオブジェクトコード133を記憶装置2に記憶する。
これにより、情報処理装置1は、オブジェクトコード133の実行時におけるHPCの処理性能の最適化を図ることが可能になる。
[情報処理装置によるコード実行処理]
次に、情報処理装置1が行うコード実行処理について説明を行う。図3は、情報処理装置1が行うコード実行処理を説明するフローチャートである。
情報処理装置1は、図3に示すように、コード実行タイミングまで待機する(S11のNO)。そして、コード実行タイミングになった場合(S11のYES)、情報処理装置1は、S4の処理で生成したオブジェクトコード133の実行を行う(S12)。具体的に、情報処理装置1は、例えば、記憶装置2に記憶されたオブジェクトコード133を取得して実行する。
[ソースコードの具体例]
続いて、ソースコード131の具体例について説明を行う。図4及び図5は、ソースコード131の具体例について説明する図である。なお、ソースコード131は、Fortranによって記述されたソースコードである。
具体的に、図4に示すソースコード131において、「a(i,j)=b(i,j)+c(i,j)」という文字列からなる命令は、二重ループの中に含まれている。また、図4に示すソースコードにおいて、「x(j)=j」という文字列から命令は、二重ループにおける外側ループの中であって最内ループの外に位置している。
そして、コンパイラは、例えば、S3の処理において、図4で説明した二重ループに対してループ分割等を行うことにより、図5に示す中間言語132を生成する。なお、以下、中間言語132をソースコード131と同じ形式によって表現する。
具体的に、コンパイラは、図5に示すように、「x(j)=j」という文字列からなる命令を、図4で説明した二重ループと異なるループの中に含める。
これにより、コンパイラは、図4で説明したソースコード131から生成されたオブジェクトコード133の実行時において、1つのループ内の処理においてアクセスする必要があるデータの量を減少させることが可能になる。そのため、コンパイラは、例えば、メインメモリに記憶されたキャッシュラインをキャッシュメモリに記憶する回数を抑制することが可能になり、キャッシュメモリに記憶されたデータに対するアクセスが発生した場合におけるキャッシュミスの発生率を抑えることが可能になる。
[メモリアクセスの具体例]
次に、オブジェクトコード133の実行時におけるメモリアクセスの具体例について説明を行う。図6は、ストライドアクセスが行われる場合における具体例を説明する図である。また、図7は、連続アクセスが行われる場合における具体例を説明する図である。具体的に、図6(A)は、ストライドアクセスが行われる二重ループの具体例を説明する図であり、図6(B)は、キャッシュメモリに記憶されたデータに対してストライドアクセスが行われる場合を説明する図である。また、図7(A)は、連続アクセスが行われる二重ループの具体例を説明する図であり、図7(B)は、キャッシュメモリに記憶されたデータに対して連続アクセスが行われる場合を説明する図である。
なお、以下、ストライドアクセスが、連続する記憶領域に対して順に行われないメモリアクセスのことであり、連続アクセスが、連続する記憶領域に対して順に行われるメモリアクセスのことであるものとして説明を行う。
図6(A)に示す二重ループにおいて、最内ループの制御変数はjであり、外側ループの制御変数はiである。また、図6(A)に示す二重ループにおいて、最内ループ及び外側ループの繰返し回数はそれぞれ10(回)である。そして、図6(A)に示す二重ループの最内ループには、「a(i,j)=b(i,j)*2+1」という文字列からなる命令が含まれている。そのため、図6(A)に示す二重ループが実行された場合、配列a及び配列bの(i,j)には、「(1,1)、(1,2)、(1,3)、・・・(1,9)、(1,10)、(2,1)、(2,2)、・・・」の順で値が設定される。
一方、図6(B)に示すキャッシュメモリには、「配列b(1,1)のデータ、配列b(2,1)のデータ、配列b(3,1)のデータ、・・・配列b(9,1)のデータ、配列b(10,1)のデータ、・・・配列b(1,2)のデータ、配列b(2,2)のデータ、・・・」の順にデータが記憶されている。そのため、図6(A)に示す二重ループの実行時にメモリアクセスが行われる場合、図6(A)に示す二重ループでは、図6(B)に示すように、ストライド幅が10のストライドアクセスが行われる。
これに対し、図7(A)に示す二重ループにおいて、最内ループの制御変数がiであり、外側ループの制御変数がjである。また、図7(A)に示す二重ループにおいて、最内ループ及び外側ループの繰返し回数はそれぞれ10(回)である。そして、図7(A)に示す二重ループの最内ループには、「a(i,j)=b(i,j)*2+1」という文字列からなる命令が含まれている。そのため、図7(A)に示す二重ループが実行された場合、配列a及び配列bの(i,j)には、「(1,1)、(2,1)、(3,1)、・・・(9,1)、(10,1)、(1,2)、(2,2)、・・・」の順で値が設定される。
一方、図7(B)に示すキャッシュメモリには、図6(B)で説明した場合と同様に、「配列b(1,1)のデータ、配列b(2,1)のデータ、配列b(3,1)のデータ、・・・配列b(9,1)のデータ、配列b(10,1)のデータ、・・・配列b(1,2)のデータ、配列b(2,2)のデータ、・・・」の順にデータが記憶されている。そのため、図7(A)に示す二重ループの実行時にメモリアクセスが行われる場合、図7(A)に示す二重ループでは、図7(B)に示すように、連続アクセスが行われる。
すなわち、開発者は、図7(A)に示す二重ループをHPCに実行させることにより、図6(A)に示す二重ループをHPCに実行させる場合と比較して、オブジェクトコード133の実行時における処理性能を高めることが可能になる。そのため、開発者は、例えば、コンパイラに対して、ソースコード131のコンパイル時において必要なループ交換を行う旨の指示を予め行う。
ここで、ループ分割やループ交換は、開発者による指定が行われた場合だけでなく、コンパイラの判断によって自動的に行われる場合がある。具体的に、コンパイラは、例えば、開発者によってループ交換を行う旨の指定が行われたループに対してもループ分割を自動的に行う。そして、コンパイラは、この場合、ループ分割によって生成した複数のループのそれぞれに対してループ交換を行う。
そのため、コンパイラが自動的に行ったループ分割によって生成された複数のループのそれぞれに対してループ交換が行われる場合、それらのループ交換には、HPCの処理性能を向上する観点から行われない方が好ましいループ交換が含まれている場合がある。したがって、開発者は、例えば、上記のようなループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かを検証する必要がある。
しかしながら、上記のような検証を行う場合、開発者は、例えば、コンパイラが生成したオブジェクトコード133を実機において動作させる必要があり、必要な情報を容易に取得することができない。そのため、開発者は、上記のようなループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かについての検証を容易に行うことができない場合がある。
そこで、本実施の形態における情報処理装置1は、ソースコード131をコンパイルする際に、ソースコード131に含まれるループのうち、ループ交換が指示されたループ(以下、第1のループとも呼ぶ)において行われるメモリアクセスの順序に基づいて、ループ交換が行われた場合における第1のループに関する情報(以下、第1の情報とも呼ぶ)、または、ループ交換が行われなかった場合における第1のループに関する情報(以下、第2の情報とも呼ぶ)を生成する。そして、情報処理装置1は、生成した第1の情報または第2の情報を出力する。
また、情報処理装置1は、ソースコード131をコンパイルする際に、ソースコード131に含まれるループのうち、ループ交換が指示されていないループ(以下、第2のループとも呼ぶ)において行われるメモリアクセスの順序に基づいて、ループ交換が行われた場合における第2のループに関する第1の情報、または、ループ交換が行われなかった場合における第2のループに関する第2の情報を生成する。そして、情報処理装置1は、生成した第1の情報または第2の情報を出力する。
すなわち、情報処理装置1は、例えば、ソースコード131のコンパイルが行われる際に、第1のループまたは第2のループ(以下、特定のループとも呼ぶ)において行われるメモリアクセスが連続アクセスであるかストライドアクセスであるか否かを判定する。そして、例えば、特定のループにおいてループ交換が行われる場合であって、その特定のループにおいて連続アクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきでないことを示す情報(第1の情報)を出力する。一方、例えば、特定のループにおいてループ交換が行われない場合であって、その特定のループにおいてストライドアクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきであることを示す情報(第2の情報)を出力する。
これにより、開発者は、情報処理装置1が出力した情報を参照することで、例えば、オブジェクトコード133を実機において動作させることなく、コンパイラによって行われたループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かについての検証を容易に行うことが可能になる。
[情報処理装置のハードウエア構成]
次に、情報処理装置1のハードウエア構成について説明する。図8は、情報処理装置1のハードウエア構成を説明する図である。
情報処理装置1は、図8に示すように、プロセッサであるCPU101と、メインメモリ102(以下、単にメモリ102とも呼ぶ)と、外部インターフェース(I/Oユニット)103と、記憶媒体(ストレージ)104とを有する。各部は、バス105を介して互いに接続される。
記憶媒体104は、記憶媒体104内のプログラム格納領域(図示しない)に、コンパイル処理及びコード実行処理を行うプログラム110を記憶する。
CPU101は、図8に示すように、プログラム110の実行時に、プログラム110を記憶媒体104からメモリ102にロードし、プログラム110と協働することによってコンパイル処理を行う。
記憶媒体104は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)等であり、コンパイル処理等を行う際に用いられる情報を記憶する情報格納領域130(以下、記憶部130とも呼ぶ)を有する。なお、図1で説明した記憶装置2は、例えば、記憶媒体104に対応するものであってよい。
また、外部インターフェース103は、ネットワークを介して操作端末3と通信を行う。
[情報処理装置のソフトウエア構成]
次に、情報処理装置1のソフトウエア構成について説明する。図9は、情報処理装置1の機能のブロック図である。図10は、情報格納領域130に記憶された情報のブロック図である。
CPU101は、図9に示すように、プログラム110と協働することにより、ループ分割部111と、情報生成部112と、ループ交換部113と、情報出力部114と、コード生成部115と、コード実行部116して動作する。また、情報格納領域130には、図10に示すように、ソースコード131と、中間言語132と、オブジェクトコード133と、ループ分割後情報134と、第1の情報135(以下、単に第1のループ情報135とも呼ぶ)と、第2の情報136(以下、単に第2のループ情報136とも呼ぶ)とが記憶されている。
なお、以下、ループ分割部111、情報生成部112、ループ交換部113及び情報出力部114が、図2で説明したS3の処理の少なくとも一部を行うものとして説明を行う。また、コード生成部115が、図2で説明したS4の処理の少なくとも一部を行うものとして説明を行う。さらに、コード実行部116が、図3で説明したS12の処理の少なくとも一部を行うものとして説明を行う。
ループ分割部111は、ソースコード131に含まれるループに対してループ分割を行う。具体的に、ループ分割部111は、ソースコード131に対して字句解析や構文解析が行われることによって生成された中間言語132に含まれるループのうち、ループ分割を行った方がオブジェクトコード133の実行時におけるHPCの処理性能が向上すると判定したループに対してループ分割を行う。
情報生成部112は、ソースコード131に含まれるループのうち、特定のループにおいて行われるメモリアクセスの順序に基づいて、ループ交換が行われた場合における特定のループに関する第1の情報135を生成する。また、情報生成部112は、ソースコード131に含まれるループのうち、特定のループにおいて行われるメモリアクセスの順序に基づいて、ループ交換が行われなかった場合における特定のループに関する第2の情報136を生成する。具体的に、情報生成部112は、ループ分割部111がループ分割を行うことによって生成した複数のループに関する情報であるループ分割後情報134を参照し、第1の情報135または第2の情報136の生成を行う。
ループ交換部113は、ソースコード131に含まれるループのうち、ループ交換が指示された特定のループに対してループ交換を行う。ループ交換の指示は、例えば、開発者によってソースコード131に予め記述されるものであってよい。
情報出力部114は、情報生成部112が生成した第1の情報135または第2の情報136を出力する。具体的に、例えば、情報出力部114は、第1の情報135または第2の情報136を、開発者が閲覧可能な操作端末3に出力する。
コード生成部115は、例えば、ループ分割部111によるループ分割やループ交換部113によるループ交換等が行われた中間言語132からオブジェクトコード133を生成する。そして、コード生成部115は、例えば、生成したオブジェクトコード133を情報格納領域130に記憶する。
コード実行部116は、例えば、コード実行タイミングになった場合、情報格納領域130に記憶されたオブジェクトコード133を実行する。
[第1の実施の形態の概略]
次に、第1の実施の形態の概略について説明する。具体的に、ここでは、図2で説明したS3の処理の概略について説明する。図11は、S3の処理の概略について説明するフローチャートである。
ループ分割部111は、S2の処理で生成された中間言語を取得する(S21)。そして、ループ分割部111は、S2の処理で生成された中間言語132に含まれるループに対してループ分割を行うことにより、複数のループを生成する(S22)。
続いて、情報生成部112は、S22の処理でループ分割が行われた後の複数のループに関する情報であるループ分割後情報134を取得する(S23)。
その後、情報生成部112及びループ交換部113は、S23の処理で取得したループ分割後情報134を参照し、S22の処理で生成した複数のループのうち、特定のループにループ交換を行う。また、情報生成部112は、ループ交換部113によってループ交換が行われる際に、特定のループで行われるメモリアクセスの順序に基づいて、ループ交換が行われた場合における特定のループに関する第1の情報135、または、ループ交換が行われなかった場合における特定のループに関する第2の情報136を生成する(S24)。
そして、情報出力部114は、S24の処理で生成した第1の情報135、または、第2の情報136を出力する(S25)。
すなわち、情報処理装置1は、例えば、ソースコード131のコンパイルが行われる際に、特定のループにおいて行われるメモリアクセスが連続アクセスであるかストライドアクセスであるか否かを判定する。そして、例えば、特定のループにおいてループ交換が行われる場合であって、その特定のループにおいて連続アクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきでないことを示す情報(第1の情報135)を出力する。一方、例えば、特定のループにおいてループ交換が行われない場合であって、その特定のループにおいてストライドアクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきであることを示す情報(第2の情報136)を出力する。
これにより、開発者は、情報処理装置1が出力した情報を参照することで、例えば、オブジェクトコード133を実機において動作させることなく、コンパイラによって行われたループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かについての検証を容易に行うことが可能になる。そして、開発者は、この場合、例えば、ソースコード131に含まれるループに対して手動で行うことによって複数のループを生成し、生成した複数のループのうち、情報処理装置1が出力した情報に基づいてループ交換を行うべきであると判定したループに対してのみ、ループ交換の指示を行うことが可能になる。
[第1の実施の形態の詳細]
次に、第1の実施の形態の詳細について説明する。図12から図15は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャートである。具体的に、図12から図15は、図11で説明したS24の処理の詳細について説明するフローチャートである。また、図16から図26は、第1の実施の形態におけるコンパイル処理の詳細を説明する図である。図16から図26を参照しながら、図12から図15に示すS24の処理の詳細について説明を行う。
情報生成部112は、図12に示すように、S23の処理で取得したループ分割後情報134に情報が含まれるループを1つ特定する(S31)。
そして、S31の処理で特定したループに対してループ交換が指示されている場合(S32のYES)、ループ交換部113は、S31の処理で特定したループに対してループ交換を行う(S34)。その後、情報生成部112は、S34の処理でループ交換が行われたループを解析し、S34でループ交換が行われたループに対応する第1の情報135を生成する(S35)。
すなわち、ループ交換部113は、この場合、ループ交換が行われた後のループに関する情報を第1の情報135として生成する。以下、第1の情報135が生成される場合の具体例について説明を行う。
[第1の情報が生成される場合の具体例]
初めに、ループ交換が指示されているループと、ループ分割が行われた後のループと、ループ分割及びループ交換が行われた後のループとの具体例について説明を行う。図16は、ループ交換が指示されているループの具体例を説明する図である。また、図17は、図16に示すループに対してループ分割が行われた後のループの具体例を説明する図である。さらに、図18は、図17に示すループに対してループ交換が行われた後のループの具体例を説明する図である。
図16に示す二重ループにおいて、最内ループの制御変数はiであり、外側ループの制御変数はjである。また、図16に示す二重ループにおいて、最内ループの繰返し回数は10(回)であり、外側ループの繰返し回数は10000(回)である。そして、図16に示す二重ループの最内ループには、「b(j)=b(j)+a(j,i)」という文字列からなる命令と、「c(i)=c(i)+d(i,j)−e(i,j)」という文字列からなる命令とが含まれている。さらに、図16に示す二重ループの前には、ループ交換を行うことの指示である「!iとjを入れ替える指示」という文字列が記述されている。
そのため、ループ分割部111は、S21の処理において、図17(A)及び(B)に示すように、図16に示すループを、「b(j)=b(j)+a(j,i)」が含まれるループと「c(i)=c(i)+d(i,j)−e(i,j)」が含まれるループとに分割する。そして、ループ交換部113は、S34の処理において、ループ交換を行う旨の指示に応じて、図18(A)及び(B)に示すように、図17に示すループに含まれる添え字iと添え字jとを交換する。
次に、図18(A)及び(B)に示すループから生成される第1の情報135の具体例について説明を行う。図19は、図18(A)に示すループから生成される第1の情報135の具体例を説明する図である。また、図20は、図18(B)に示すループから生成される第1の情報135の具体例を説明する図である。以下、図18(A)に示すループから生成される第1の情報135を第1の情報135aとも呼び、図18(B)に示すループから生成される第1の情報135を第1の情報135bとも呼ぶ。
具体的に、情報生成部112は、例えば、図19に示す第1の情報135aのように、図18(A)に示すループ全体の情報が設定される「[[loops]]」の項目に、ループの識別子を示す「id」として「“loop1_interchanged”」を設定し、ループの次元数を示す「dimension」として「2」を設定し、添え字のアクセス順を示す「index」として「“j,i”」を設定する。そして、情報生成部112は、例えば、図19に示す第1の情報135aのように、「[[loops]]」の項目に、最内ループの添え字を示す「innermost loop index」として「“j”」を設定し、ループの繰返し回数を示す「iteration_count」として「10000*10」を設定し、ループの増分値を示す「increment」として「“1”」を設定する。
また、情報生成部112は、例えば、図19に示す第1の情報135aのように、図18(A)に示すループに含まれる配列bについての情報が設定される1番目の「[[loops.arrays]]」の項目に、配列に対する演算子を示す「operater」としてブランクを設定し、ソースコード131における配列bの行番号を示す「line」として「“3”」を設定し、配列名を示す「name」として「“b”」を設定する。そして、情報生成部112は、例えば、図19に示す第1の情報135aのように、「[[loops.arrays]]」の項目に、配列の次元数を示す「dimension」として「“1”」が設定され、添え字のアクセス順を示す「index」として「“j”」を設定し、参照定義の情報を示す「def_ref」として「“def”」を設定し、配列のサイズを示す「size」として「10000」を設定する。
なお、図19に示す第1の情報135aのうち、図18(A)に示すループに含まれる配列bについての情報が設定される2番目の「[[loops.arrays]]」の項目に設定される情報と、図18(A)に示すループに含まれる配列aについての情報が設定される3番目の「[[loops.arrays]]」の項目に設定される情報とについては説明を省略する。
また、図20に示す第1の情報135bに含まれる内容は、図19で説明した第1の情報135aに含まれる内容と同じである。そのため、図20に示す第1の情報135bについては詳細な説明を省略する。
図12に戻り、S31の処理で特定したループに対してループ交換が指示されていない場合(S32のNO)、情報生成部112は、S31の処理で特定したループを解析し、S31の処理で特定したループに対応する第2の情報136を生成する(S33)。
すなわち、ループ交換部113は、この場合、ループ交換が行われなかった場合のループに関する情報を第2の情報136として生成する。以下、第2の情報136が生成される場合の具体例について説明を行う。
[第2の情報が生成される場合の具体例]
初めに、ループ交換が指示されていないループと、ループ分割が行われた後のループとの具体例について説明を行う。図21は、ループ交換が指示されていないループの具体例を説明する図である。また、図22は、図21に示すループに対してループ分割が行われた後のループの具体例を説明する図である。
図21に示す二重ループにおいて、最内ループの制御変数はiであり、外側ループの制御変数はjである。また、図21に示す二重ループにおいて、最内ループのループ回数は10(回)であり、外側ループのループ回数は10000(回)である。そして、図21に示す二重ループには、「b(j)=b(j)+a(j,i)」という文字列からなる命令と、「c(i)=c(i)+d(i,j)−e(i,j)」という文字列からなる命令とが含まれている。なお、図21に示す二重ループの前には、ループ交換を行うことの指示が記述されていない。
そのため、ループ分割部111は、S21の処理において、図22(A)及び(B)に示すように、図21に示すループを、「b(j)=b(j)+a(j,i)」が含まれるループと「c(i)=c(i)+d(i,j)−e(i,j)」が含まれるループとに分割する。なお、ループ交換部113は、この場合、図18で説明した場合と異なり、図21に示すループに含まれる添え字iと添え字jとの交換を行わない。
そして、図23は、図22(A)に示すループから生成される第2の情報136の具体例を説明する図である。また、図24は、図22(B)に示すループから生成される第2の情報136の具体例を説明する図である。以下、図22(A)に示すループから生成される第2の情報136を第2の情報136aとも呼び、図22(B)に示すループから生成される第2の情報136を第2の情報136bとも呼ぶ。
図23に示す第2の情報136a及び図24に示す第2の情報136bに含まれる内容は、図19で説明した第1の情報135aに含まれる内容と同じである。そのため、図23に示す第2の情報136a及び図24に示す第2の情報136bについては詳細な説明を省略する。
図12に戻り、S33またはS35の処理の後、情報生成部112は、図13に示すように、S31の処理で特定したループに含まれる配列を1つ特定する(S41)。
そして、S41の処理で特定した配列が多次元配列である場合(S42のYES)、情報生成部112は、S41の処理で特定した配列の1次元目の添え字の値が、最内ループ内で不変であるか否かを判定する(S43)。
その結果、S41の処理で特定した配列の1次元目の添え字の値が最内ループ内で不変であると判定した場合(S44のYES)、情報生成部112は、S41の処理で特定した配列の2次元目以降の添え字が、最内ループの制御変数であるか否かを判定する(S45)。
そして、S41の処理で特定した配列の2次元目以降の添え字が最内ループの制御変数であると判定した場合(S46のYES)、情報生成部112は、図15に示すように、S31の処理で特定したループに対してループ交換が指示されているか否かを判定する(S61)。
その結果、S31の処理で特定したループに対してループ交換が指示されてないと判定した場合(S61のNO)、情報生成部112は、S41の処理で特定した配列について、ループ交換を推奨することを示す情報(以下、第2の推奨情報136cとも呼ぶ)を生成する(S62)。一方、S31の処理で特定したループに対してループ交換が指示されていると判定した場合(S61のYES)、情報生成部112は、S62の処理を行わない。
すなわち、S41の処理で特定した配列の1次元目の添え字の値が最内ループ内で不変であって、S41の処理で特定した配列の2次元目以降の添え字のいずれかが最内ループの制御変数である場合、情報生成部112は、S41の処理で特定した配列において行われるメモリアクセスがストライドアクセスであると判定する。そのため、情報生成部112は、S41の処理で特定した配列を含むループ(S31の処理で特定したループ)がループ交換を行うべきループであると判定する。具体的に、情報生成部112は、この場合、S41の処理で特定した配列を含むループが、2次元目以降の添え字のうち、最内ループの制御変数であった添え字と、1次元目の添え字とを交換すべきループであると判定する。したがって、情報生成部112は、S31の処理で特定したループに対してループ交換が指示されていない場合、S41の処理で特定した配列に関し、S31の処理で特定したループに対してループ交換を行うべきことを推奨する情報(第2の推奨情報136c)の生成を行う。
なお、情報生成部112は、第2の推奨情報136cを生成した場合、S33の処理で生成した第2の情報136に第2の推奨情報136cを追加するものであってよい。以下、第2の推奨情報136cが追加された第2の情報136の具体例について説明を行う。
[第2の推奨情報が追加された第2の情報の具体例]
図25は、第2の推奨情報136cが追加された第2の情報136aの具体例を説明する図である。
図22(A)に示す例において、ループに含まれる配列aの1次元目の添え字jの値は、最内ループの制御変数がiであるため不変である。そして、配列aの2次元目の添え字iは、最内ループの制御変数である。さらに、図22(A)に示すループには、ループ交換の指示が記述されていない。そのため、例えば、S31の処理において図22(A)に示すループが特定され、S41の処理において配列aが特定された場合、情報生成部112は、S62の処理において、配列aに関し、図22(A)に示すループに対してループ交換を行った方がHPCの処理性能を向上させることができることを示す第2の推奨情報136cの生成を行う。
そのため、情報生成部112は、例えば、図25に示すように、図23で説明した第2の情報136aのうちの配列aに対応する情報に対し、「hint=“ループ交換を指定した方が実行効率の向上を図ることができます”」という内容の第2の推奨情報136cを追加する。
これにより、情報生成部112は、ソースコード131のコンパイル時において、例えば、コンパイルを行った開発者に対し、HPCの処理性能を向上させるための情報を提供することが可能になる。そのため、開発者は、例えば、コンパイラが生成したオブジェクトコード133を実機において動作させることなく、HPCの処理性能を向上させるための情報を容易に取得することが可能になる。
図13に戻り、S41の処理で特定した配列の1次元目の添え字の値が最内ループ内で不変でないと判定した場合(S44のNO)、または、S41の処理で特定した配列の2次元目以降の添え字が最内ループの制御変数でないと判定した場合(S46のNO)、情報生成部112は、図14に示すように、情報生成部112は、S41の処理で特定した配列の1次元目の添え字が、最内ループの制御変数であるか否かを判定する(S51)。
その結果、S41の処理で特定した配列の1次元目の添え字が最内ループの制御変数であると判定した場合(S52のYES)、情報生成部112は、S41の処理で特定した配列の2次元目以降の添え字の値が、最内ループ内で不変であるか否かを判定する(S53)。
そして、S41の処理で特定した配列の2次元目以降の添え字の値が最内ループ内で不変であると判定した場合(S54のYES)、情報生成部112は、図15に示すように、S31の処理で特定したループに対してループ交換が指示されているか否かを判定する(S65)。
その結果、S31の処理で特定したループに対してループ交換が指示されていると判定した場合(S65のYES)、情報生成部112は、S41の処理で特定した配列について、ループ交換を推奨しないことを示す情報(以下、第1の推奨情報135cとも呼ぶ)を生成する(S66)。一方、S31の処理で特定したループに対してループ交換が指示されていないと判定した場合(S65のNO)、情報生成部112は、S66の処理を行わない。
すなわち、情報生成部112は、S41の処理で特定した配列において行われるメモリアクセスがストライドアクセスでないと判定した場合、S41の処理で特定した配列において行われるメモリアクセスが連続アクセスであるか否かの判定を行う。具体的に、情報生成部112は、S41の処理で特定した配列の1次元目の添え字が最内ループの制御変数であって、S41の処理で特定した配列の2次元目以降の添え字の値が最内ループ内で不変である場合、S41の処理で特定した配列において行われるメモリアクセスが連続アクセスであると判定する。そのため、情報生成部112は、この場合、S41の処理で特定した配列を含むループ(S31の処理で特定したループ)がループ交換を行うべきではないループであると判定する。したがって、情報生成部112は、S31の処理で特定したループに対してループ交換が指示されている場合、S41の処理で特定した配列に関し、S31の処理で特定したループに対してループ交換を行うべきことを推奨しない情報(第1の推奨情報135c)の生成を行う。
なお、情報生成部112は、第1の推奨情報135cを生成した場合、S35の処理で生成した第1の情報135に第1の推奨情報135cを追加するものであってよい。以下、第1の推奨情報135cが追加された第1の情報135の具体例について説明を行う。
[第1の推奨情報が追加された第1の情報の具体例]
図26は、第1の推奨情報135cが追加された第1の情報135の具体例を説明する図である。
図18(B)に示す例において、ループに含まれる配列dの1次元目の添え字iの値は、最内ループの制御変数がjであるため不変である。そして、配列dの2次元目の添え字jは、最内ループの制御変数である。さらに、図18(B)に示すループには、ループ交換の指示が記述されている。そのため、例えば、S31の処理において図18(B)に示すループが特定され、S41の処理において配列dが特定された場合、情報生成部112は、S66の処理において、配列dに関し、図18(B)に示すループに対してループ交換を行わない方がHPCの処理性能を向上させることができることを示す第1の推奨情報135cの生成を行う。同様に、情報生成部112は、図18(B)に示すループに含まれる配列eに関しても同様に、第1の推奨情報135cの生成を行う。
そのため、情報生成部112は、例えば、図26に示すように、図20で説明した第1の情報135のうちの配列dに対応する情報に対し、「hint=“ループ交換を指定しない方が実行効率の向上を図ることができます”」という内容の第1の推奨情報135cを追加する。また、情報生成部112は、図20で説明した第1の情報135のうちの配列eに対応する情報に対しても同様に、「hint=“ループ交換を指定しない方が実行効率の向上を図ることができます”」という内容の第1の推奨情報135cを追加する。
これにより、情報生成部112は、ソースコード131のコンパイル時において、例えば、コンパイルを行った開発者に対し、HPCの処理性能を向上させるための情報を提供することが可能になる。そのため、開発者は、例えば、コンパイラが生成したオブジェクトコード133を実機において動作させることなく、HPCの処理性能を向上させるための情報を容易に取得することが可能になる。
図15に戻り、S62の処理、または、S66の処理の後、情報生成部112は、S41の処理で配列の全ての特定が完了したか否かを判定する(S63)。なお、S41の処理で特定した配列が多次元配列でない場合(S42のNO)、S41の処理で特定した配列の1次元目の添え字が最内ループの制御変数でないと判定した場合(S52のNO)、または、S41の処理で特定した配列の2次元目以降の添え字の値が最内ループ内で不変でないと判定した場合も同様に(S54のNO)、情報生成部112は、S63の処理を行う。
その結果、S41の処理で全ての配列の特定が完了したと判定した場合(S63のYES)、情報生成部112は、S31の処理で全てのループの特定が完了したか否かを判定する(S64)。一方、S41の処理で全ての配列の特定が完了していないと判定した場合(S63のNO)、情報生成部112は、S41以降の処理を再度行う。
そして、S31の処理で全てのループの特定が完了したと判定した場合(S64のYES)、情報処理装置1は、S24の処理を終了する。一方、S31の処理で全てのループの特定が完了したと判定した場合(S64のNO)、情報生成部112は、S31以降の処理を再度行う。
図11に戻り、情報出力部114は、S24の処理で生成した第1の情報または第2の情報を出力する(S25)。具体的に、情報出力部114は、S2で生成された中間言語132に含まれる各ループのそれぞれについて、S24の処理で生成した第1の情報または第2の情報の出力を行う。
このように、本実施の形態における情報処理装置1は、ソースコード131をコンパイルする際に、ソースコード131に含まれるループのうち、ループ交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループ交換が行われた場合における特定のループに関する第1の情報135、または、ループ交換が行われなかった場合における特定のループに関する第2の情報136を生成する。そして、情報処理装置1は、生成した第1の情報135または第2の情報136を出力する。
すなわち、情報処理装置1は、例えば、ソースコード131のコンパイルが行われる際に、特定のループにおいて行われるメモリアクセスが連続アクセスであるかストライドアクセスであるか否かを判定する。そして、例えば、特定のループにおいてループ交換が行われる場合であって、その特定のループにおいて連続アクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきでないことを示す情報(第1の情報135)を出力する。一方、例えば、特定のループにおいてループ交換が行われない場合であって、その特定のループにおいてストライドアクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきであることを示す情報(第2の情報136)を出力する。
これにより、開発者は、情報処理装置1が出力した情報を参照することで、例えば、オブジェクトコード133を実機において動作させることなく、コンパイラによって行われたループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かについての検証を容易に行うことが可能になる。
以上の実施の形態をまとめると、以下の付記の通りである。
(付記1)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成する情報生成部と、
生成した前記第1の情報または前記第2の情報を出力する情報出力部と、を有する、
ことを特徴とする情報処理装置。
(付記2)
付記1において、
前記情報生成部は、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われる場合、前記特定のループに対するループの交換を推奨しないことを示す情報を前記第1の情報として生成する、
ことを特徴とする情報処理装置。
(付記3)
付記1において、
前記情報生成部は、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われない場合、前記特定のループに対するループの交換を推奨することを示す情報を前記第2の情報として生成する、
ことを特徴とする情報処理装置。
(付記4)
付記2または3において、
前記情報生成部は、前記特定のループにおける1次元目の添え字の値が前記特定のループの最内ループ内において不変であり、前記特定のループにおける2次元目以降の添え字が前記最内ループの制御変数である場合、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われないと判定する、
ことを特徴とする情報処理装置。
(付記5)
付記2または3において、
前記情報生成部は、前記特定のループにおける1次元目の添え字が前記特定のループの最内ループの制御変数であり、前記特定のループにおける2次元目の添え字の値が前記最内ループ内において不変である場合、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われると判定する、
ことを特徴とする情報処理装置。
(付記6)
付記1において、
前記特定のループは、前記ソースコードに含まれるループから分割された複数のループであり、
前記情報生成部は、前記複数のループのそれぞれについて、前記第1の情報または前記第2の情報の生成を行う、
ことを特徴とする情報処理装置。
(付記7)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示されていない特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成する情報生成部と、
生成した前記第1の情報または前記第2の情報を出力する情報出力部と、を有する、
ことを特徴とする情報処理装置。
(付記8)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
ことを特徴とするコンパイル方法。
(付記9)
付記8において、
前記生成する工程では、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われる場合、前記特定のループに対するループの交換を推奨しないことを示す情報を前記第1の情報として生成する、
ことを特徴とするコンパイル方法。
(付記10)
付記8において、
前記生成する工程では、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われない場合、前記特定のループに対するループの交換を推奨することを示す情報を前記第2の情報として生成する、
ことを特徴とするコンパイル方法。
(付記11)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示されていない特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
ことを特徴とするコンパイル方法。
(付記12)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
処理をコンピュータに実行させることを特徴とするコンパイルプログラム。
(付記13)
付記12において、
前記生成する工程では、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われる場合、前記特定のループに対するループの交換を推奨しないことを示す情報を前記第1の情報として生成する、
ことを特徴とするコンパイルプログラム。
(付記14)
付記12において、
前記生成する工程では、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われない場合、前記特定のループに対するループの交換を推奨することを示す情報を前記第2の情報として生成する、
ことを特徴とするコンパイルプログラム。
(付記15)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示されていない特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
処理をコンピュータに実行させることを特徴とするコンパイルプログラム。
1:情報処理装置 2:記憶装置
3:操作端末 101:CPU
102:メモリ 103:I/Oユニット
104:記憶媒体 130:情報格納領域

Claims (11)

  1. ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された第1のループにおいて行われるメモリアクセスの順序に基づいて、第1のループに対するループの交換を推奨しないことを示す第1の情報を生成し、前記ソースコードに含まれるループのうち、ループの交換が指示されていない第2のループにおいて行われるメモリアクセスの順序に基づいて第2のループに対するループの交換を推奨することを示す第2の情報を生成する情報生成部と、
    生成した前記第1の情報または前記第2の情報を出力する情報出力部と、を有する、
    ことを特徴とする情報処理装置。
  2. 請求項1において、
    前記情報生成部は、前記第1のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われる場合、記第1の情報生成する、
    ことを特徴とする情報処理装置。
  3. 請求項1において、
    前記情報生成部は、前記第2のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われない場合、記第2の情報生成する、
    ことを特徴とする情報処理装置。
  4. 請求項2おいて、
    前記情報生成部は、前記第1のループにおける1次元目の添え字の値が前記第1のループの最内ループ内において不変であり、前記第1のループにおける2次元目以降の添え字が前記最内ループの制御変数である場合、前記第1のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われないと判定する、
    ことを特徴とする情報処理装置。
  5. 請求項2おいて、
    前記情報生成部は、前記第1のループにおける1次元目の添え字が前記第1のループの最内ループの制御変数であり、前記第1のループにおける2次元目の添え字の値が前記最内ループ内において不変である場合、前記第1のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われると判定する、
    ことを特徴とする情報処理装置。
  6. 請求項3において、
    前記情報生成部は、前記第2のループにおける1次元目の添え字の値が前記第2のループの最内ループ内において不変であり、前記第2のループにおける2次元目以降の添え字が前記最内ループの制御変数である場合、前記第2のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われないと判定する、
    ことを特徴とする情報処理装置。
  7. 請求項3において、
    前記情報生成部は、前記第2のループにおける1次元目の添え字が前記第2のループの最内ループの制御変数であり、前記第2のループにおける2次元目の添え字の値が前記最内ループ内において不変である場合、前記第2のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われると判定する、
    ことを特徴とする情報処理装置。
  8. 請求項1において、
    前記第1のループは、前記ソースコードに含まれるループから分割された複数のループであり、
    前記情報生成部は、前記複数のループのそれぞれについて、前記第1の情報生成を行う、
    ことを特徴とする情報処理装置。
  9. 請求項1において、
    前記第2のループは、前記ソースコードに含まれるループから分割された複数のループであり、
    前記情報生成部は、前記複数のループのそれぞれについて、前記第2の情報の生成を行う、
    ことを特徴とする情報処理装置。
  10. ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された第1のループにおいて行われるメモリアクセスの順序に基づいて、第1のループに対するループの交換を推奨しないことを示す第1の情報を生成し、前記ソースコードに含まれるループのうち、ループの交換が指示されていない第2のループにおいて行われるメモリアクセスの順序に基づいて第2のループに対するループの交換を推奨することを示す第2の情報を生成し、
    生成した前記第1の情報または前記第2の情報を出力する、
    ことを特徴とするコンパイル方法。
  11. ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された第1のループにおいて行われるメモリアクセスの順序に基づいて、第1のループに対するループの交換を推奨しないことを示す第1の情報を生成し、前記ソースコードに含まれるループのうち、ループの交換が指示されていない第2のループにおいて行われるメモリアクセスの順序に基づいて第2のループに対するループの交換を推奨することを示す第2の情報を生成し、
    生成した前記第1の情報または前記第2の情報を出力する、
    処理をコンピュータに実行させることを特徴とするコンパイルプログラム。
JP2017144452A 2017-07-26 2017-07-26 情報処理装置、コンパイル方法及びコンパイルプログラム Active JP6898556B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017144452A JP6898556B2 (ja) 2017-07-26 2017-07-26 情報処理装置、コンパイル方法及びコンパイルプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017144452A JP6898556B2 (ja) 2017-07-26 2017-07-26 情報処理装置、コンパイル方法及びコンパイルプログラム

Publications (2)

Publication Number Publication Date
JP2019028540A JP2019028540A (ja) 2019-02-21
JP6898556B2 true JP6898556B2 (ja) 2021-07-07

Family

ID=65478392

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017144452A Active JP6898556B2 (ja) 2017-07-26 2017-07-26 情報処理装置、コンパイル方法及びコンパイルプログラム

Country Status (1)

Country Link
JP (1) JP6898556B2 (ja)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08241208A (ja) * 1995-03-06 1996-09-17 Fujitsu Ltd キャッシュの情報表示システム
JP2003256214A (ja) * 2002-02-27 2003-09-10 Hitachi Ltd 配列拡張によるループ変換方法
JP2006107339A (ja) * 2004-10-08 2006-04-20 Matsushita Electric Ind Co Ltd プログラム処理装置
JP2015194881A (ja) * 2014-03-31 2015-11-05 富士通株式会社 コンパイル装置、コンパイラプログラム、コンパイル方法

Also Published As

Publication number Publication date
JP2019028540A (ja) 2019-02-21

Similar Documents

Publication Publication Date Title
US9047399B2 (en) Generating visualization from running executable code
US8276130B2 (en) Method and compiler of compiling a program
US20120030652A1 (en) Mechanism for Describing Values of Optimized Away Parameters in a Compiler-Generated Debug Output
Hiniker et al. Improving region selection in dynamic optimization systems
WO2013079006A1 (en) Systems and Methods for Customizing Optimization/Transformation/ Processing Strategies
TW201405424A (zh) 編譯系統以及編譯方法
Mendis et al. Revec: program rejuvenation through revectorization
CN112434266A (zh) 一种shellcode控制流扁平化混淆方法
US10013244B2 (en) Apparatus and method to compile a variadic template function
JP6665720B2 (ja) 情報処理装置、コンパイルプログラム、コンパイル方法、およびキャッシュ制御方法
JP7060803B2 (ja) 情報処理装置、コンパイラプログラム及びコンパイル方法
JP6898556B2 (ja) 情報処理装置、コンパイル方法及びコンパイルプログラム
JP6730587B2 (ja) キャッシュミス推定プログラム、キャッシュミス推定方法及び情報処理装置
CN107817972B (zh) 缓存代码处理方法、装置、存储介质及电子设备
Goss Machine code optimization-improving executable object code
JP4719415B2 (ja) 情報処理システム及びコード生成方法
Glück A self‐applicable online partial evaluator for recursive flowchart languages
JPWO2017204139A1 (ja) データ処理装置、データ処理方法、およびプログラム記録媒体
JP5021584B2 (ja) マイコンシミュレータ、そのシミュレーション方法、プログラム、及びコンピュータ読み取り可能な媒体
JP6558310B2 (ja) 並列化方法、並列化ツール
CN113031952A (zh) 深度学习模型的执行代码的确定方法、装置及存储介质
JP2018206175A (ja) コンパイラ、情報処理装置及びコンパイル方法
US20170344351A1 (en) Information processing apparatus, compiling management method, and recording medium
JP2008071065A (ja) インライン展開を行うコンパイル装置、方法、プログラム、記憶媒体
JP2014099108A (ja) 実行時間算出装置、実行時間算出方法、およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200409

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210216

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210217

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210414

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210524

R150 Certificate of patent or registration of utility model

Ref document number: 6898556

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150