JP2019028540A - Information processing apparatus, compiling method, and compiling program - Google Patents

Information processing apparatus, compiling method, and compiling program Download PDF

Info

Publication number
JP2019028540A
JP2019028540A JP2017144452A JP2017144452A JP2019028540A JP 2019028540 A JP2019028540 A JP 2019028540A JP 2017144452 A JP2017144452 A JP 2017144452A JP 2017144452 A JP2017144452 A JP 2017144452A JP 2019028540 A JP2019028540 A JP 2019028540A
Authority
JP
Japan
Prior art keywords
loop
information
specific
source code
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.)
Granted
Application number
JP2017144452A
Other languages
Japanese (ja)
Other versions
JP6898556B2 (en
Inventor
里織 須戸
Saori Sudo
里織 須戸
恭伸 谷村
Yasunobu Tanimura
恭伸 谷村
修一 千葉
Shuichi Chiba
修一 千葉
鈴木 敏弘
Toshihiro Suzuki
敏弘 鈴木
石川 貴洋
Takahiro Ishikawa
貴洋 石川
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/en
Publication of JP2019028540A publication Critical patent/JP2019028540A/en
Application granted granted Critical
Publication of JP6898556B2 publication Critical patent/JP6898556B2/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

To provide an information processing apparatus, a compiling method, and a compiling program which make it possible to easily acquire information on loop exchange performed by a compiler.SOLUTION: When a source code is compiled, based on the order of memory access performed in a specific loop in which loop exchange is not instructed among loops included in the source code, first information on the specific loop when the loop exchange is performed or second information on the specific loop when the loop exchange is not performed is generated, and the generated first information or the second information is output.SELECTED DRAWING: Figure 11

Description

本発明は、情報処理装置、コンパイル方法及びコンパイルプログラムに関する。   The present invention relates to an information processing apparatus, a compiling method, and a compiling program.

例えば、HPC(High Performance Conputing)等に用いられるコンパイラは、ソースコードのコンパイルを行う際に、処理速度等の処理性能を向上させるための最適化処理を行う。   For example, a compiler used for HPC (High Performance Computing) or the like performs optimization processing for improving processing performance such as processing speed when compiling source code.

具体的に、上記のようなコンパイラは、例えば、ソースコードに含まれる各ループを複数のループに分割するループ分割や、ソースコードに含まれる各ループにおいて用いられる添え字の交換を行うループ交換を行う。これにより、コンパイラは、例えば、ソースコードに対応する処理の実行時におけるメモリアクセスを効率的に行うことが可能になる。そのため、コンパイラは、ソースコードから生成されたオブジェクトコードの実行時におけるHPCの処理性能を向上させることが可能になる(例えば、特許文献1乃至3参照)。   Specifically, the compiler as described above performs, for example, loop division that divides each loop included in the source code into a plurality of loops, and loop exchange that replaces subscripts used in each loop included in the source code. Do. Thereby, for example, the compiler can efficiently perform memory access during execution of processing corresponding to the source code. Therefore, the compiler can improve the processing performance of the HPC when executing the object code generated from the source code (see, for example, Patent Documents 1 to 3).

特開2015−194881号公報Japanese Patent Laying-Open No. 2015-194881 特開2007−226589号公報JP 2007-226589 A 特開2005−122506号公報JP 2005-122506 A

上記のようなループ分割やループ交換は、例えば、ソースコードの開発者(以下、単に開発者とも呼ぶ)による指定が行われた場合だけでなく、コンパイラの判断によって自動的に行われる場合がある。具体的に、コンパイラは、例えば、開発者によってループ交換を行う旨の指定が行われたループに対しても自動的にループ分割を行う。そして、コンパイラは、この場合、ループ分割によって生成した複数のループのそれぞれに対してループ交換を行う。   The loop division and loop exchange as described above may be automatically performed, for example, not only when the source code developer (hereinafter also referred to simply as the developer) designates, but also at the discretion of the compiler. . Specifically, for example, the compiler automatically performs loop division even for a loop designated by the developer to perform loop exchange. In this case, the compiler performs loop exchange for each of the plurality of loops generated by the loop division.

ここで、ループ分割によって生成された複数のループのそれぞれに対してループ交換が行われる場合、これらのループ交換には、HPCの処理性能を向上する観点から行われない方が好ましいループ交換が含まれている場合がある。そのため、開発者は、例えば、コンパイラによって行われたループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かを検証する必要がある。   Here, when loop exchange is performed for each of a plurality of loops generated by loop division, these loop exchanges include loop exchanges that are preferably not performed from the viewpoint of improving the processing performance of HPC. May be. Therefore, the developer needs to verify, for example, whether each loop exchange performed by the compiler is necessary to improve the processing performance of the HPC.

しかしながら、上記のような検証を行う場合、開発者は、例えば、コンパイラが生成したオブジェクトコードを実機において動作させる必要があり、必要な情報を容易に取得することができない。そのため、開発者は、コンパイラによって行われたループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かについての検証を容易に行うことができない場合がある。   However, when performing the verification as described above, for example, the developer needs to operate the object code generated by the compiler in the actual machine, and cannot easily obtain necessary information. Therefore, the developer may not be able to easily verify whether or not each loop exchange performed by the compiler is necessary to improve the processing performance of the HPC.

そこで、一つの側面では、コンパイラによって行われたループ交換に関する情報を容易に取得することを可能とする情報処理装置、コンパイル方法及びコンパイルプログラムを提供することを目的とする。   Therefore, an object of one aspect is to provide an information processing apparatus, a compiling method, and a compiling program that can easily acquire information related to loop exchange performed by a compiler.

実施の形態の一つの態様によれば、ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成する情報生成部と、生成した前記第1の情報または前記第2の情報を出力する情報出力部と、を有する。   According to one aspect of the embodiment, when compiling the source code, among the loops included in the source code, based on the order of memory access performed in a specific loop instructed to replace the loop, An information generator that generates first information about the specific loop when a loop is exchanged or second information about the specific loop when a loop is not exchanged, and An information output unit that outputs the first information or the second information.

一つの側面によれば、コンパイラによって行われたループ交換に関する情報を容易に取得することを可能とする。   According to one aspect, it is possible to easily obtain information regarding loop exchange performed by a compiler.

図1は、情報処理システム10の全体構成を示す図である。FIG. 1 is a diagram illustrating an overall configuration of the information processing system 10. 図2は、情報処理装置1が行うコンパイル処理を説明するフローチャートである。FIG. 2 is a flowchart for explaining a compile process performed by the information processing apparatus 1. 図3は、情報処理装置1が行うコード実行処理を説明するフローチャートである。FIG. 3 is a flowchart for explaining code execution processing performed by the information processing apparatus 1. 図4は、ソースコード131の具体例について説明する図である。FIG. 4 is a diagram for explaining a specific example of the source code 131. 図5は、ソースコード131の具体例について説明する図である。FIG. 5 is a diagram for explaining a specific example of the source code 131. 図6は、ストライドアクセスが行われる場合における具体例を説明する図である。FIG. 6 is a diagram for explaining a specific example when stride access is performed. 図7は、連続アクセスが行われる場合における具体例を説明する図である。FIG. 7 is a diagram illustrating a specific example when continuous access is performed. 図8は、情報処理装置1のハードウエア構成を説明する図である。FIG. 8 is a diagram for explaining the hardware configuration of the information processing apparatus 1. 図9は、情報処理装置1の機能のブロック図である。FIG. 9 is a block diagram of functions of the information processing apparatus 1. 図10は、情報格納領域130に記憶された情報のブロック図である。FIG. 10 is a block diagram of information stored in the information storage area 130. 図11は、S3の処理の概略について説明するフローチャートである。FIG. 11 is a flowchart for explaining the outline of the process of S3. 図12は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャートである。FIG. 12 is a flowchart for explaining the details of the compiling process in the first embodiment. 図13は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャートである。FIG. 13 is a flowchart for explaining the details of the compiling process in the first embodiment. 図14は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャートである。FIG. 14 is a flowchart for explaining details of the compiling process in the first embodiment. 図15は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャートである。FIG. 15 is a flowchart for explaining the details of the compiling process in the first embodiment. 図16は、ループ交換が指示されているループの具体例を説明する図である。FIG. 16 is a diagram illustrating a specific example of a loop in which loop replacement is instructed. 図17は、図16に示すループに対してループ分割が行われた後のループの具体例を説明する図である。FIG. 17 is a diagram illustrating a specific example of the loop after the loop division is performed on the loop shown in FIG. 図18は、図17に示すループに対してループ交換が行われた後のループの具体例を説明する図である。FIG. 18 is a diagram illustrating a specific example of a loop after the loop exchange is performed on the loop shown in FIG. 図19は、図18(A)に示すループから生成される第1の情報135の具体例を説明する図である。FIG. 19 is a diagram illustrating a specific example of the first information 135 generated from the loop illustrated in FIG. 図20は、図18(B)に示すループから生成される第1の情報135の具体例を説明する図である。FIG. 20 is a diagram illustrating a specific example of the first information 135 generated from the loop illustrated in FIG. 図21は、ループ交換が指示されていないループの具体例を説明する図である。FIG. 21 is a diagram illustrating a specific example of a loop for which no loop replacement is instructed. 図22は、図21に示すループに対してループ分割が行われた後のループの具体例を説明する図である。FIG. 22 is a diagram for explaining a specific example of the loop after the loop division is performed on the loop shown in FIG. 図23は、図22(A)に示すループから生成される第2の情報136の具体例を説明する図である。FIG. 23 is a diagram illustrating a specific example of the second information 136 generated from the loop illustrated in FIG. 図24は、図22(B)に示すループから生成される第2の情報136の具体例を説明する図である。FIG. 24 is a diagram illustrating a specific example of the second information 136 generated from the loop illustrated in FIG. 図25は、第2の推奨情報136cが追加された第2の情報136の具体例を説明する図である。FIG. 25 is a diagram illustrating a specific example of the second information 136 to which the second recommended information 136c is added. 図26は、第1の推奨情報135cが追加された第1の情報135の具体例を説明する図である。FIG. 26 is a diagram illustrating a specific example of the first information 135 to which the first recommendation information 135c is added.

[情報処理システムの構成]
図1は、情報処理システム10の全体構成を示す図である。図1に示す情報処理システム10は、情報処理装置1(コンパイラが動作する情報処理装置)と、記憶装置2と、操作端末3とを含む。図1に示す操作端末3は、操作端末3a、3b及び3cが含まれている。
[Configuration of information processing system]
FIG. 1 is a diagram illustrating an overall configuration of the information processing system 10. An information processing system 10 illustrated in FIG. 1 includes an information processing device 1 (an information processing device on which a compiler operates), a storage device 2, and an operation terminal 3. The operation terminal 3 shown in FIG. 1 includes operation terminals 3a, 3b and 3c.

情報処理装置1(情報処理装置1のCPU)は、コンパイルを開始するタイミング(以下、コンパイル開始タイミングとも呼ぶ)になった場合、例えば、記憶装置2に記憶されたソースコード(以下、ソースコード131とも呼ぶ)を取得し、取得したソースコード131のコンパイルを行う処理(以下、コンパイル処理とも呼ぶ)を行うことによってオブジェクトコード(以下、オブジェクトコード133とも呼ぶ)を生成する。コンパイル開始タイミングは、例えば、操作端末3からコンパイルを行う旨の指示を受け付けたタイミングであってよい。   When the information processing apparatus 1 (the CPU of the information processing apparatus 1) reaches the timing for starting compilation (hereinafter also referred to as compilation start timing), for example, the source code stored in the storage device 2 (hereinafter referred to as source code 131). Is also obtained, and an object code (hereinafter also referred to as object code 133) is generated by performing processing for compiling the acquired source code 131 (hereinafter also referred to as compilation processing). The compile start timing may be, for example, a timing when an instruction to compile is received from the operation terminal 3.

また、情報処理装置1は、オブジェクトコード133を実行するタイミング(以下、コード実行タイミングとも呼ぶ)になった場合、コンパイル処理によって生成されたオブジェクトコード133を実行する処理(以下、コード実行処理とも呼ぶ)を行う。以下、情報処理装置1が行うコンパイル処理及びコード実行処理について説明を行う。   In addition, when the timing for executing the object code 133 (hereinafter also referred to as code execution timing) is reached, the information processing apparatus 1 executes processing for executing the object code 133 generated by the compile processing (hereinafter also referred to as code execution processing). )I do. Hereinafter, the compile process and the code execution process performed by the information processing apparatus 1 will be described.

[情報処理装置によるコンパイル処理]
初めに、情報処理装置1が行うコンパイル処理について説明を行う。図2は、情報処理装置1が行うコンパイル処理を説明するフローチャートである。
[Compile processing by information processing device]
First, compilation processing performed by the information processing apparatus 1 will be described. FIG. 2 is a flowchart for explaining a compile process performed by the information processing apparatus 1.

情報処理装置1は、図2に示すように、コンパイル開始タイミングまで待機する(S1のNO)。そして、コンパイル開始タイミングになった場合(S1のYES)、情報処理装置1は、ソースコード131の字句解析及び構文解析を行うことにより、中間言語(以下、中間言語132とも呼ぶ)を生成する(S2)。そして、情報処理装置1は、例えば、生成した中間言語132を情報格納領域130に記憶する。   As shown in FIG. 2, the information processing apparatus 1 waits until the compilation start timing (NO in S1). When the compile start timing comes (YES in S1), the information processing apparatus 1 generates an intermediate language (hereinafter also referred to as an intermediate language 132) by performing lexical analysis and syntax analysis of the source code 131 ( S2). Then, the information processing apparatus 1 stores the generated intermediate language 132 in the information storage area 130, for example.

その後、情報処理装置1は、S2の処理において生成された中間言語132の最適化を行う(S3)。具体的に、情報処理装置1は、中間言語132に含まれるループのそれぞれに対して、ループ分割やループ交換等を行う。   Thereafter, the information processing apparatus 1 optimizes the intermediate language 132 generated in the process of S2 (S3). Specifically, the information processing apparatus 1 performs loop division, loop exchange, and the like for each of the loops included in the intermediate language 132.

そして、情報処理装置1は、例えば、S2で最適化を行った中間言語132からオブジェクトコード133の生成を行う(S4)。そして、情報処理装置1は、例えば、生成したオブジェクトコード133を記憶装置2に記憶する。   Then, for example, the information processing apparatus 1 generates the object code 133 from the intermediate language 132 optimized in S2 (S4). Then, the information processing apparatus 1 stores the generated object code 133 in the storage device 2, for example.

これにより、情報処理装置1は、オブジェクトコード133の実行時におけるHPCの処理性能の最適化を図ることが可能になる。   Thereby, the information processing apparatus 1 can optimize the processing performance of the HPC when the object code 133 is executed.

[情報処理装置によるコード実行処理]
次に、情報処理装置1が行うコード実行処理について説明を行う。図3は、情報処理装置1が行うコード実行処理を説明するフローチャートである。
[Code execution processing by information processing device]
Next, a code execution process performed by the information processing apparatus 1 will be described. FIG. 3 is a flowchart for explaining code execution processing performed by the information processing apparatus 1.

情報処理装置1は、図3に示すように、コード実行タイミングまで待機する(S11のNO)。そして、コード実行タイミングになった場合(S11のYES)、情報処理装置1は、S4の処理で生成したオブジェクトコード133の実行を行う(S12)。具体的に、情報処理装置1は、例えば、記憶装置2に記憶されたオブジェクトコード133を取得して実行する。   As shown in FIG. 3, the information processing apparatus 1 waits until the code execution timing (NO in S11). When the code execution timing comes (YES in S11), the information processing apparatus 1 executes the object code 133 generated in the process of S4 (S12). Specifically, the information processing apparatus 1 acquires and executes the object code 133 stored in the storage device 2, for example.

[ソースコードの具体例]
続いて、ソースコード131の具体例について説明を行う。図4及び図5は、ソースコード131の具体例について説明する図である。なお、ソースコード131は、Fortranによって記述されたソースコードである。
[Specific examples of source code]
Subsequently, a specific example of the source code 131 will be described. 4 and 5 are diagrams for explaining a specific example of the source code 131. FIG. Note that the source code 131 is a source code described by Fortran.

具体的に、図4に示すソースコード131において、「a(i,j)=b(i,j)+c(i,j)」という文字列からなる命令は、二重ループの中に含まれている。また、図4に示すソースコードにおいて、「x(j)=j」という文字列から命令は、二重ループにおける外側ループの中であって最内ループの外に位置している。   Specifically, in the source code 131 shown in FIG. 4, an instruction consisting of a character string “a (i, j) = b (i, j) + c (i, j)” is included in a double loop. ing. In the source code shown in FIG. 4, an instruction from the character string “x (j) = j” is located in the outer loop of the double loop and outside the innermost loop.

そして、コンパイラは、例えば、S3の処理において、図4で説明した二重ループに対してループ分割等を行うことにより、図5に示す中間言語132を生成する。なお、以下、中間言語132をソースコード131と同じ形式によって表現する。   Then, for example, in the process of S3, the compiler generates the intermediate language 132 shown in FIG. 5 by performing loop division or the like on the double loop described in FIG. Hereinafter, the intermediate language 132 is expressed in the same format as the source code 131.

具体的に、コンパイラは、図5に示すように、「x(j)=j」という文字列からなる命令を、図4で説明した二重ループと異なるループの中に含める。   Specifically, as illustrated in FIG. 5, the compiler includes an instruction including a character string “x (j) = j” in a loop different from the double loop described in FIG. 4.

これにより、コンパイラは、図4で説明したソースコード131から生成されたオブジェクトコード133の実行時において、1つのループ内の処理においてアクセスする必要があるデータの量を減少させることが可能になる。そのため、コンパイラは、例えば、メインメモリに記憶されたキャッシュラインをキャッシュメモリに記憶する回数を抑制することが可能になり、キャッシュメモリに記憶されたデータに対するアクセスが発生した場合におけるキャッシュミスの発生率を抑えることが可能になる。   Accordingly, the compiler can reduce the amount of data that needs to be accessed in the processing within one loop when the object code 133 generated from the source code 131 described with reference to FIG. 4 is executed. For this reason, for example, the compiler can suppress the number of times the cache line stored in the main memory is stored in the cache memory, and the rate of occurrence of cache misses when access to the data stored in the cache memory occurs. Can be suppressed.

[メモリアクセスの具体例]
次に、オブジェクトコード133の実行時におけるメモリアクセスの具体例について説明を行う。図6は、ストライドアクセスが行われる場合における具体例を説明する図である。また、図7は、連続アクセスが行われる場合における具体例を説明する図である。具体的に、図6(A)は、ストライドアクセスが行われる二重ループの具体例を説明する図であり、図6(B)は、キャッシュメモリに記憶されたデータに対してストライドアクセスが行われる場合を説明する図である。また、図7(A)は、連続アクセスが行われる二重ループの具体例を説明する図であり、図7(B)は、キャッシュメモリに記憶されたデータに対して連続アクセスが行われる場合を説明する図である。
[Specific examples of memory access]
Next, a specific example of memory access when the object code 133 is executed will be described. FIG. 6 is a diagram for explaining a specific example when stride access is performed. FIG. 7 is a diagram illustrating a specific example when continuous access is performed. Specifically, FIG. 6A illustrates a specific example of a double loop in which stride access is performed, and FIG. 6B illustrates that stride access is performed on data stored in the cache memory. It is a figure explaining the case. FIG. 7A illustrates a specific example of a double loop in which continuous access is performed. FIG. 7B illustrates a case in which continuous access is performed on data stored in the cache memory. FIG.

なお、以下、ストライドアクセスが、連続する記憶領域に対して順に行われないメモリアクセスのことであり、連続アクセスが、連続する記憶領域に対して順に行われるメモリアクセスのことであるものとして説明を行う。   In the following description, it is assumed that stride access is memory access that is not sequentially performed on continuous storage areas, and that continuous access is memory access that is sequentially performed on continuous storage areas. Do.

図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)、・・・」の順で値が設定される。   In the double loop shown in FIG. 6A, the control variable of the innermost loop is j, and the control variable of the outer loop is i. In the double loop shown in FIG. 6A, the number of repetitions of the innermost loop and the outer loop is 10 (times), respectively. The innermost loop of the double loop shown in FIG. 6A includes an instruction consisting of a character string “a (i, j) = b (i, j) * 2 + 1”. Therefore, when the double loop shown in FIG. 6A is executed, (i, j) of the array a and the array b includes “(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のストライドアクセスが行われる。   On the other hand, in the cache memory shown in FIG. 6B, “array b (1, 1) data, array b (2, 1) data, array b (3, 1) data,. The data is stored in the order of (9,1) data, array b (10,1) data,... Array b (1,2) data, array b (2,2) data,. Has been. Therefore, when memory access is performed during execution of the double loop shown in FIG. 6A, the double loop shown in FIG. 6A has a stride with a stride width of 10 as shown in FIG. 6B. Access is made.

これに対し、図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)、・・・」の順で値が設定される。   On the other hand, in the double loop shown in FIG. 7A, the control variable of the innermost loop is i, and the control variable of the outer loop is j. In the double loop shown in FIG. 7A, the number of repetitions of the innermost loop and the outer loop is 10 (times), respectively. The innermost loop of the double loop shown in FIG. 7A includes an instruction made up of a character string “a (i, j) = b (i, j) * 2 + 1”. Therefore, when the double loop shown in FIG. 7A is executed, (i, j) of the array a and the array b includes “(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)に示すように、連続アクセスが行われる。   On the other hand, in the cache memory shown in FIG. 7B, as in the case described in FIG. 6B, “data in array b (1, 1), data in array b (2, 1), array b (3,1) data,... Array b (9,1) data, array b (10,1) data,... Array b (1,2) data, array b (2,2) ) Data,... Therefore, when memory access is performed during execution of the double loop shown in FIG. 7A, continuous access is performed in the double loop shown in FIG. 7A, as shown in FIG. 7B.

すなわち、開発者は、図7(A)に示す二重ループをHPCに実行させることにより、図6(A)に示す二重ループをHPCに実行させる場合と比較して、オブジェクトコード133の実行時における処理性能を高めることが可能になる。そのため、開発者は、例えば、コンパイラに対して、ソースコード131のコンパイル時において必要なループ交換を行う旨の指示を予め行う。   That is, the developer executes the object code 133 by causing the HPC to execute the double loop shown in FIG. 7A, compared with the case where the HPC executes the double loop shown in FIG. It becomes possible to improve the processing performance at the time. Therefore, for example, the developer instructs the compiler in advance to perform loop exchange necessary when compiling the source code 131.

ここで、ループ分割やループ交換は、開発者による指定が行われた場合だけでなく、コンパイラの判断によって自動的に行われる場合がある。具体的に、コンパイラは、例えば、開発者によってループ交換を行う旨の指定が行われたループに対してもループ分割を自動的に行う。そして、コンパイラは、この場合、ループ分割によって生成した複数のループのそれぞれに対してループ交換を行う。   Here, the loop division and the loop exchange may be automatically performed not only when the specification is made by the developer but also by the judgment of the compiler. Specifically, for example, the compiler automatically performs loop division even for a loop designated by the developer to perform loop exchange. In this case, the compiler performs loop exchange for each of the plurality of loops generated by the loop division.

そのため、コンパイラが自動的に行ったループ分割によって生成された複数のループのそれぞれに対してループ交換が行われる場合、それらのループ交換には、HPCの処理性能を向上する観点から行われない方が好ましいループ交換が含まれている場合がある。したがって、開発者は、例えば、上記のようなループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かを検証する必要がある。   Therefore, when loop exchange is performed for each of a plurality of loops generated by loop division automatically performed by the compiler, those loop exchanges are not performed from the viewpoint of improving the processing performance of HPC. May include preferred loop exchanges. Therefore, the developer needs to verify, for example, whether or not each of the loop exchanges as described above was necessary to improve the processing performance of the HPC.

しかしながら、上記のような検証を行う場合、開発者は、例えば、コンパイラが生成したオブジェクトコード133を実機において動作させる必要があり、必要な情報を容易に取得することができない。そのため、開発者は、上記のようなループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かについての検証を容易に行うことができない場合がある。   However, when performing the verification as described above, for example, the developer needs to operate the object code 133 generated by the compiler on the actual machine, and cannot easily obtain necessary information. Therefore, the developer may not be able to easily verify whether or not each of the loop exchanges as described above is necessary for improving the processing performance of the HPC.

そこで、本実施の形態における情報処理装置1は、ソースコード131をコンパイルする際に、ソースコード131に含まれるループのうち、ループ交換が指示されたループ(以下、第1のループとも呼ぶ)において行われるメモリアクセスの順序に基づいて、ループ交換が行われた場合における第1のループに関する情報(以下、第1の情報とも呼ぶ)、または、ループ交換が行われなかった場合における第1のループに関する情報(以下、第2の情報とも呼ぶ)を生成する。そして、情報処理装置1は、生成した第1の情報または第2の情報を出力する。   Therefore, when compiling the source code 131, the information processing apparatus 1 according to the present embodiment uses a loop (hereinafter also referred to as a first loop) in which loop replacement is instructed among the loops included in the source code 131. Based on the order of memory access to be performed, information on the first loop when loop exchange is performed (hereinafter also referred to as first information), or the first loop when loop exchange is not performed Information (hereinafter also referred to as second information) is generated. Then, the information processing apparatus 1 outputs the generated first information or second information.

また、情報処理装置1は、ソースコード131をコンパイルする際に、ソースコード131に含まれるループのうち、ループ交換が指示されていないループ(以下、第2のループとも呼ぶ)において行われるメモリアクセスの順序に基づいて、ループ交換が行われた場合における第2のループに関する第1の情報、または、ループ交換が行われなかった場合における第2のループに関する第2の情報を生成する。そして、情報処理装置1は、生成した第1の情報または第2の情報を出力する。   Further, when the information processing apparatus 1 compiles the source code 131, memory access performed in a loop (hereinafter also referred to as a second loop) in which loop replacement is not instructed among the loops included in the source code 131. Based on the above order, the first information regarding the second loop when the loop exchange is performed or the second information regarding the second loop when the loop exchange is not performed is generated. Then, the information processing apparatus 1 outputs the generated first information or second information.

すなわち、情報処理装置1は、例えば、ソースコード131のコンパイルが行われる際に、第1のループまたは第2のループ(以下、特定のループとも呼ぶ)において行われるメモリアクセスが連続アクセスであるかストライドアクセスであるか否かを判定する。そして、例えば、特定のループにおいてループ交換が行われる場合であって、その特定のループにおいて連続アクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきでないことを示す情報(第1の情報)を出力する。一方、例えば、特定のループにおいてループ交換が行われない場合であって、その特定のループにおいてストライドアクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきであることを示す情報(第2の情報)を出力する。   That is, for example, when the source code 131 is compiled, the information processing apparatus 1 determines whether the memory access performed in the first loop or the second loop (hereinafter also referred to as a specific loop) is continuous access. It is determined whether the access is stride access. For example, when loop exchange is performed in a specific loop and it is determined that continuous access is performed in the specific loop, the information processing apparatus 1 should not perform loop exchange in the specific loop. Information (first information) indicating this is output. On the other hand, for example, when loop exchange is not performed in a specific loop and it is determined that stride access is performed in the specific loop, the information processing apparatus 1 should perform loop exchange in the specific loop. The information (second information) indicating that is output.

これにより、開発者は、情報処理装置1が出力した情報を参照することで、例えば、オブジェクトコード133を実機において動作させることなく、コンパイラによって行われたループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かについての検証を容易に行うことが可能になる。   As a result, the developer refers to the information output by the information processing apparatus 1 so that, for example, each of the loop exchanges performed by the compiler without causing the object code 133 to operate on the actual machine, improves the processing performance of the HPC. It becomes possible to easily verify whether or not it was necessary for improvement.

[情報処理装置のハードウエア構成]
次に、情報処理装置1のハードウエア構成について説明する。図8は、情報処理装置1のハードウエア構成を説明する図である。
[Hardware configuration of information processing device]
Next, the hardware configuration of the information processing apparatus 1 will be described. FIG. 8 is a diagram for explaining the hardware configuration of the information processing apparatus 1.

情報処理装置1は、図8に示すように、プロセッサであるCPU101と、メインメモリ102(以下、単にメモリ102とも呼ぶ)と、外部インターフェース(I/Oユニット)103と、記憶媒体(ストレージ)104とを有する。各部は、バス105を介して互いに接続される。   As illustrated in FIG. 8, the information processing apparatus 1 includes a CPU 101 that is a processor, a main memory 102 (hereinafter also simply referred to as a memory 102), an external interface (I / O unit) 103, and a storage medium (storage) 104. And have. Each unit is connected to each other via a bus 105.

記憶媒体104は、記憶媒体104内のプログラム格納領域(図示しない)に、コンパイル処理及びコード実行処理を行うプログラム110を記憶する。   The storage medium 104 stores a program 110 that performs compilation processing and code execution processing in a program storage area (not shown) in the storage medium 104.

CPU101は、図8に示すように、プログラム110の実行時に、プログラム110を記憶媒体104からメモリ102にロードし、プログラム110と協働することによってコンパイル処理を行う。   As shown in FIG. 8, when executing the program 110, the CPU 101 loads the program 110 from the storage medium 104 to the memory 102 and performs a compilation process by cooperating with the program 110.

記憶媒体104は、例えば、HDD(Hard Disk Drive)やSSD(Solid State Drive)等であり、コンパイル処理等を行う際に用いられる情報を記憶する情報格納領域130(以下、記憶部130とも呼ぶ)を有する。なお、図1で説明した記憶装置2は、例えば、記憶媒体104に対応するものであってよい。   The storage medium 104 is, for example, an HDD (Hard Disk Drive), an SSD (Solid State Drive), or the like, and an information storage area 130 (hereinafter also referred to as a storage unit 130) that stores information used when performing compilation processing or the like. Have Note that the storage device 2 described in FIG. 1 may correspond to the storage medium 104, for example.

また、外部インターフェース103は、ネットワークを介して操作端末3と通信を行う。   The external interface 103 communicates with the operation terminal 3 via a network.

[情報処理装置のソフトウエア構成]
次に、情報処理装置1のソフトウエア構成について説明する。図9は、情報処理装置1の機能のブロック図である。図10は、情報格納領域130に記憶された情報のブロック図である。
[Software configuration of information processing equipment]
Next, the software configuration of the information processing apparatus 1 will be described. FIG. 9 is a block diagram of functions of the information processing apparatus 1. FIG. 10 is a block diagram of information stored in the information storage area 130.

CPU101は、図9に示すように、プログラム110と協働することにより、ループ分割部111と、情報生成部112と、ループ交換部113と、情報出力部114と、コード生成部115と、コード実行部116して動作する。また、情報格納領域130には、図10に示すように、ソースコード131と、中間言語132と、オブジェクトコード133と、ループ分割後情報134と、第1の情報135(以下、単に第1のループ情報135とも呼ぶ)と、第2の情報136(以下、単に第2のループ情報136とも呼ぶ)とが記憶されている。   As shown in FIG. 9, the CPU 101 cooperates with the program 110 to perform a loop division unit 111, an information generation unit 112, a loop exchange unit 113, an information output unit 114, a code generation unit 115, a code, The execution unit 116 operates. Further, in the information storage area 130, as shown in FIG. 10, the source code 131, the intermediate language 132, the object code 133, the post-loop division information 134, and the first information 135 (hereinafter simply referred to as the first information 135). Loop information 135) and second information 136 (hereinafter also simply referred to as second loop information 136) are stored.

なお、以下、ループ分割部111、情報生成部112、ループ交換部113及び情報出力部114が、図2で説明したS3の処理の少なくとも一部を行うものとして説明を行う。また、コード生成部115が、図2で説明したS4の処理の少なくとも一部を行うものとして説明を行う。さらに、コード実行部116が、図3で説明したS12の処理の少なくとも一部を行うものとして説明を行う。   In the following description, it is assumed that the loop dividing unit 111, the information generating unit 112, the loop exchanging unit 113, and the information output unit 114 perform at least part of the process of S3 described in FIG. Further, the description will be made assuming that the code generation unit 115 performs at least a part of the processing of S4 described in FIG. Further, description will be made assuming that the code execution unit 116 performs at least a part of the processing of S12 described in FIG.

ループ分割部111は、ソースコード131に含まれるループに対してループ分割を行う。具体的に、ループ分割部111は、ソースコード131に対して字句解析や構文解析が行われることによって生成された中間言語132に含まれるループのうち、ループ分割を行った方がオブジェクトコード133の実行時におけるHPCの処理性能が向上すると判定したループに対してループ分割を行う。   The loop division unit 111 performs loop division on the loop included in the source code 131. Specifically, the loop division unit 111 performs the loop division among the loops included in the intermediate language 132 generated by performing lexical analysis and syntax analysis on the source code 131, and the object code 133 Loop division is performed on a loop determined to improve the HPC processing performance at the time of execution.

情報生成部112は、ソースコード131に含まれるループのうち、特定のループにおいて行われるメモリアクセスの順序に基づいて、ループ交換が行われた場合における特定のループに関する第1の情報135を生成する。また、情報生成部112は、ソースコード131に含まれるループのうち、特定のループにおいて行われるメモリアクセスの順序に基づいて、ループ交換が行われなかった場合における特定のループに関する第2の情報136を生成する。具体的に、情報生成部112は、ループ分割部111がループ分割を行うことによって生成した複数のループに関する情報であるループ分割後情報134を参照し、第1の情報135または第2の情報136の生成を行う。   The information generation unit 112 generates first information 135 related to a specific loop when a loop is exchanged based on the order of memory access performed in the specific loop among the loops included in the source code 131. . The information generation unit 112 also includes second information 136 regarding a specific loop when no loop exchange is performed based on the order of memory access performed in the specific loop among the loops included in the source code 131. Is generated. Specifically, the information generation unit 112 refers to the first information 135 or the second information 136 with reference to post-loop division information 134 that is information regarding a plurality of loops generated by the loop division unit 111 performing the loop division. Is generated.

ループ交換部113は、ソースコード131に含まれるループのうち、ループ交換が指示された特定のループに対してループ交換を行う。ループ交換の指示は、例えば、開発者によってソースコード131に予め記述されるものであってよい。   The loop exchanging unit 113 performs loop exchanging for a specific loop instructed to exchange loops among the loops included in the source code 131. The instruction for loop exchange may be described in advance in the source code 131 by the developer, for example.

情報出力部114は、情報生成部112が生成した第1の情報135または第2の情報136を出力する。具体的に、例えば、情報出力部114は、第1の情報135または第2の情報136を、開発者が閲覧可能な操作端末3に出力する。   The information output unit 114 outputs the first information 135 or the second information 136 generated by the information generation unit 112. Specifically, for example, the information output unit 114 outputs the first information 135 or the second information 136 to the operation terminal 3 that can be browsed by the developer.

コード生成部115は、例えば、ループ分割部111によるループ分割やループ交換部113によるループ交換等が行われた中間言語132からオブジェクトコード133を生成する。そして、コード生成部115は、例えば、生成したオブジェクトコード133を情報格納領域130に記憶する。   For example, the code generation unit 115 generates the object code 133 from the intermediate language 132 in which the loop division by the loop division unit 111, the loop exchange by the loop exchange unit 113, and the like are performed. The code generation unit 115 stores the generated object code 133 in the information storage area 130, for example.

コード実行部116は、例えば、コード実行タイミングになった場合、情報格納領域130に記憶されたオブジェクトコード133を実行する。   For example, when the code execution timing comes, the code execution unit 116 executes the object code 133 stored in the information storage area 130.

[第1の実施の形態の概略]
次に、第1の実施の形態の概略について説明する。具体的に、ここでは、図2で説明したS3の処理の概略について説明する。図11は、S3の処理の概略について説明するフローチャートである。
[Outline of First Embodiment]
Next, an outline of the first embodiment will be described. Specifically, the outline of the process of S3 described in FIG. 2 will be described here. FIG. 11 is a flowchart for explaining the outline of the process of S3.

ループ分割部111は、S2の処理で生成された中間言語を取得する(S21)。そして、ループ分割部111は、S2の処理で生成された中間言語132に含まれるループに対してループ分割を行うことにより、複数のループを生成する(S22)。   The loop division unit 111 acquires the intermediate language generated by the process of S2 (S21). Then, the loop dividing unit 111 generates a plurality of loops by performing loop division on the loop included in the intermediate language 132 generated by the processing of S2 (S22).

続いて、情報生成部112は、S22の処理でループ分割が行われた後の複数のループに関する情報であるループ分割後情報134を取得する(S23)。   Subsequently, the information generation unit 112 acquires post-loop division information 134 that is information regarding a plurality of loops after the loop division is performed in the process of S22 (S23).

その後、情報生成部112及びループ交換部113は、S23の処理で取得したループ分割後情報134を参照し、S22の処理で生成した複数のループのうち、特定のループにループ交換を行う。また、情報生成部112は、ループ交換部113によってループ交換が行われる際に、特定のループで行われるメモリアクセスの順序に基づいて、ループ交換が行われた場合における特定のループに関する第1の情報135、または、ループ交換が行われなかった場合における特定のループに関する第2の情報136を生成する(S24)。   Thereafter, the information generating unit 112 and the loop exchanging unit 113 refer to the post-loop division information 134 acquired in the process of S23, and perform loop exchange for a specific loop among a plurality of loops generated in the process of S22. In addition, when the loop exchange is performed by the loop exchanging unit 113, the information generation unit 112 performs the first operation on the specific loop when the loop exchange is performed based on the order of the memory access performed in the specific loop. The information 135 or the second information 136 related to a specific loop when the loop exchange is not performed is generated (S24).

そして、情報出力部114は、S24の処理で生成した第1の情報135、または、第2の情報136を出力する(S25)。   And the information output part 114 outputs the 1st information 135 produced | generated by the process of S24, or the 2nd information 136 (S25).

すなわち、情報処理装置1は、例えば、ソースコード131のコンパイルが行われる際に、特定のループにおいて行われるメモリアクセスが連続アクセスであるかストライドアクセスであるか否かを判定する。そして、例えば、特定のループにおいてループ交換が行われる場合であって、その特定のループにおいて連続アクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきでないことを示す情報(第1の情報135)を出力する。一方、例えば、特定のループにおいてループ交換が行われない場合であって、その特定のループにおいてストライドアクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきであることを示す情報(第2の情報136)を出力する。   That is, for example, when the source code 131 is compiled, the information processing apparatus 1 determines whether the memory access performed in a specific loop is continuous access or stride access. For example, when loop exchange is performed in a specific loop and it is determined that continuous access is performed in the specific loop, the information processing apparatus 1 should not perform loop exchange in the specific loop. Information indicating that (first information 135) is output. On the other hand, for example, when loop exchange is not performed in a specific loop and it is determined that stride access is performed in the specific loop, the information processing apparatus 1 should perform loop exchange in the specific loop. Is output (second information 136) indicating that the

これにより、開発者は、情報処理装置1が出力した情報を参照することで、例えば、オブジェクトコード133を実機において動作させることなく、コンパイラによって行われたループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かについての検証を容易に行うことが可能になる。そして、開発者は、この場合、例えば、ソースコード131に含まれるループに対して手動で行うことによって複数のループを生成し、生成した複数のループのうち、情報処理装置1が出力した情報に基づいてループ交換を行うべきであると判定したループに対してのみ、ループ交換の指示を行うことが可能になる。   As a result, the developer refers to the information output by the information processing apparatus 1 so that, for example, each of the loop exchanges performed by the compiler without causing the object code 133 to operate on the actual machine, improves the processing performance of the HPC. It becomes possible to easily verify whether or not it was necessary for improvement. In this case, for example, the developer manually generates a plurality of loops with respect to the loop included in the source code 131, and the information output from the information processing apparatus 1 among the plurality of generated loops is generated. Based on this, it is possible to instruct the loop exchange only for the loop that is determined to be subjected to the loop exchange.

[第1の実施の形態の詳細]
次に、第1の実施の形態の詳細について説明する。図12から図15は、第1の実施の形態におけるコンパイル処理の詳細を説明するフローチャートである。具体的に、図12から図15は、図11で説明したS24の処理の詳細について説明するフローチャートである。また、図16から図26は、第1の実施の形態におけるコンパイル処理の詳細を説明する図である。図16から図26を参照しながら、図12から図15に示すS24の処理の詳細について説明を行う。
[Details of First Embodiment]
Next, details of the first embodiment will be described. 12 to 15 are flowcharts illustrating details of the compile processing in the first embodiment. Specifically, FIGS. 12 to 15 are flowcharts illustrating details of the processing of S24 described in FIG. FIGS. 16 to 26 are diagrams for explaining the details of the compiling process in the first embodiment. Details of the processing of S24 shown in FIGS. 12 to 15 will be described with reference to FIGS.

情報生成部112は、図12に示すように、S23の処理で取得したループ分割後情報134に情報が含まれるループを1つ特定する(S31)。   As illustrated in FIG. 12, the information generation unit 112 identifies one loop whose information is included in the post-loop division information 134 acquired in the process of S23 (S31).

そして、S31の処理で特定したループに対してループ交換が指示されている場合(S32のYES)、ループ交換部113は、S31の処理で特定したループに対してループ交換を行う(S34)。その後、情報生成部112は、S34の処理でループ交換が行われたループを解析し、S34でループ交換が行われたループに対応する第1の情報135を生成する(S35)。   When the loop exchange is instructed for the loop identified in the process of S31 (YES in S32), the loop exchange unit 113 performs the loop exchange for the loop identified in the process of S31 (S34). Thereafter, the information generation unit 112 analyzes the loop in which the loop is exchanged in the process of S34, and generates first information 135 corresponding to the loop in which the loop exchange is performed in S34 (S35).

すなわち、ループ交換部113は、この場合、ループ交換が行われた後のループに関する情報を第1の情報135として生成する。以下、第1の情報135が生成される場合の具体例について説明を行う。   That is, in this case, the loop exchanging unit 113 generates information about the loop after the loop exchange is performed as the first information 135. Hereinafter, a specific example when the first information 135 is generated will be described.

[第1の情報が生成される場合の具体例]
初めに、ループ交換が指示されているループと、ループ分割が行われた後のループと、ループ分割及びループ交換が行われた後のループとの具体例について説明を行う。図16は、ループ交換が指示されているループの具体例を説明する図である。また、図17は、図16に示すループに対してループ分割が行われた後のループの具体例を説明する図である。さらに、図18は、図17に示すループに対してループ交換が行われた後のループの具体例を説明する図である。
[Specific example when first information is generated]
First, specific examples of a loop instructed to exchange loops, a loop after loop division, and a loop after loop division and loop exchange will be described. FIG. 16 is a diagram illustrating a specific example of a loop in which loop replacement is instructed. FIG. 17 is a diagram for explaining a specific example of the loop after the loop division is performed on the loop shown in FIG. Further, FIG. 18 is a diagram for explaining a specific example of the loop after the loop exchange is performed on the loop shown in FIG.

図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を入れ替える指示」という文字列が記述されている。   In the double loop shown in FIG. 16, the control variable of the innermost loop is i, and the control variable of the outer loop is j. In the double loop shown in FIG. 16, the inner loop is repeated 10 times and the outer loop is repeated 10,000 times. The innermost loop of the double loop shown in FIG. 16 includes an instruction consisting of a character string “b (j) = b (j) + a (j, i)” and “c (i) = c (i ) + D (i, j) −e (i, j) ”. Further, before the double loop shown in FIG. 16, a character string “instruction for exchanging! And i”, which is an instruction to perform loop exchange, is described.

そのため、ループ分割部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とを交換する。   Therefore, in the process of S21, the loop dividing unit 111 converts the loop shown in FIG. 16 into “b (j) = b (j) + a (j, i)” as shown in FIGS. ”And a loop including“ c (i) = c (i) + d (i, j) −e (i, j) ”. Then, the loop exchanging unit 113 responds to the instruction to perform the loop exchanging in the process of S34, as shown in FIGS. 18A and 18B, the subscript i included in the loop shown in FIG. Exchange the subscript 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とも呼ぶ。   Next, a specific example of the first information 135 generated from the loop shown in FIGS. 18A and 18B will be described. FIG. 19 is a diagram illustrating a specific example of the first information 135 generated from the loop illustrated in FIG. FIG. 20 is a diagram illustrating a specific example of the first information 135 generated from the loop illustrated in FIG. Hereinafter, the first information 135 generated from the loop illustrated in FIG. 18A is also referred to as first information 135a, and the first information 135 generated from the loop illustrated in FIG. 18B is the first information. Also referred to as 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”」を設定する。   Specifically, for example, the information generation unit 112 sets the information of the entire loop shown in FIG. 18A in the item “[[loops]]” like the first information 135a shown in FIG. , “Id1” indicating the loop identifier is set as “loop1_interchanged”, “dimension” indicating the number of dimensions of the loop is set as “2”, and “index” indicating the subscript access order is set as “j” , I "". Then, for example, as in the first information 135a illustrated in FIG. 19, the information generation unit 112 includes “[[loops]]” in the item “[[loops]]” as “innermost loop index” indicating “innermost loop index”. j "" is set, "10000 * 10" is set as "iteration_count" indicating the number of iterations of the loop, and "1" is set as "increment" indicating the increment value of the loop.

また、情報生成部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」を設定する。   Further, for example, the information generation unit 112 sets the first “[[loops] in which information about the array b included in the loop illustrated in FIG. 18A is set like the first information 135a illustrated in FIG. .Arrays]] ”is set to blank as“ operator ”indicating an operator for the array,“ 3 ”is set as“ line ”indicating the line number of the array b in the source code 131, and the array name “B” ”is set as“ name ”indicating“ ”. Then, for example, as in the first information 135a illustrated in FIG. 19, the information generation unit 112 sets “1” as “dimension” indicating the number of dimensions of the array in the item “[[loops.arrays]]”. ”Is set,“ j ”” is set as “index” indicating the access order of subscripts, “def” is set as “def_ref” indicating reference definition information, and “ “10000” is set as “size”.

なお、図19に示す第1の情報135aのうち、図18(A)に示すループに含まれる配列bについての情報が設定される2番目の「[[loops.arrays]]」の項目に設定される情報と、図18(A)に示すループに含まれる配列aについての情報が設定される3番目の「[[loops.arrays]]」の項目に設定される情報とについては説明を省略する。   Of the first information 135a shown in FIG. 19, the second item “[[loops.arrays]]” in which information about the array b included in the loop shown in FIG. 18A is set is set. The description of the information to be set and the information set in the third “[[loops.arrays]]” item in which the information about the array a included in the loop shown in FIG. To do.

また、図20に示す第1の情報135bに含まれる内容は、図19で説明した第1の情報135aに含まれる内容と同じである。そのため、図20に示す第1の情報135bについては詳細な説明を省略する。   Further, the content included in the first information 135b illustrated in FIG. 20 is the same as the content included in the first information 135a described in FIG. Therefore, detailed description of the first information 135b illustrated in FIG. 20 is omitted.

図12に戻り、S31の処理で特定したループに対してループ交換が指示されていない場合(S32のNO)、情報生成部112は、S31の処理で特定したループを解析し、S31の処理で特定したループに対応する第2の情報136を生成する(S33)。   Returning to FIG. 12, when loop replacement is not instructed for the loop specified in the process of S31 (NO in S32), the information generation unit 112 analyzes the loop specified in the process of S31, and performs the process of S31. Second information 136 corresponding to the identified loop is generated (S33).

すなわち、ループ交換部113は、この場合、ループ交換が行われなかった場合のループに関する情報を第2の情報136として生成する。以下、第2の情報136が生成される場合の具体例について説明を行う。   That is, in this case, the loop exchanging unit 113 generates, as the second information 136, information regarding the loop when the loop is not exchanged. Hereinafter, a specific example when the second information 136 is generated will be described.

[第2の情報が生成される場合の具体例]
初めに、ループ交換が指示されていないループと、ループ分割が行われた後のループとの具体例について説明を行う。図21は、ループ交換が指示されていないループの具体例を説明する図である。また、図22は、図21に示すループに対してループ分割が行われた後のループの具体例を説明する図である。
[Specific example when second information is generated]
First, a specific example of a loop for which loop exchange is not instructed and a loop after loop division is described. FIG. 21 is a diagram illustrating a specific example of a loop for which no loop replacement is instructed. FIG. 22 is a diagram illustrating a specific example of the loop after the loop division is performed on the loop shown in FIG.

図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に示す二重ループの前には、ループ交換を行うことの指示が記述されていない。   In the double loop shown in FIG. 21, the control variable of the innermost loop is i, and the control variable of the outer loop is j. In the double loop shown in FIG. 21, the innermost loop has a loop count of 10 (times) and the outer loop has a loop count of 10,000 (times). The double loop shown in FIG. 21 includes an instruction consisting of a character string “b (j) = b (j) + a (j, i)” and “c (i) = c (i) + d (i , J) -e (i, j) ”. Note that an instruction to perform loop exchange is not described before the double loop shown in FIG.

そのため、ループ分割部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との交換を行わない。   Therefore, in the process of S21, the loop dividing unit 111 converts the loop shown in FIG. 21 into “b (j) = b (j) + a (j, i)” as shown in FIGS. 22 (A) and (B). ”And a loop including“ c (i) = c (i) + d (i, j) −e (i, j) ”. In this case, unlike the case described with reference to FIG. 18, the loop exchanging unit 113 does not exchange the subscript i and the subscript j included in the loop shown in FIG.

そして、図23は、図22(A)に示すループから生成される第2の情報136の具体例を説明する図である。また、図24は、図22(B)に示すループから生成される第2の情報136の具体例を説明する図である。以下、図22(A)に示すループから生成される第2の情報136を第2の情報136aとも呼び、図22(B)に示すループから生成される第2の情報136を第2の情報136bとも呼ぶ。   FIG. 23 is a diagram illustrating a specific example of the second information 136 generated from the loop illustrated in FIG. FIG. 24 is a diagram illustrating a specific example of the second information 136 generated from the loop illustrated in FIG. Hereinafter, the second information 136 generated from the loop illustrated in FIG. 22A is also referred to as second information 136a, and the second information 136 generated from the loop illustrated in FIG. 22B is the second information. Also referred to as 136b.

図23に示す第2の情報136a及び図24に示す第2の情報136bに含まれる内容は、図19で説明した第1の情報135aに含まれる内容と同じである。そのため、図23に示す第2の情報136a及び図24に示す第2の情報136bについては詳細な説明を省略する。   The contents included in the second information 136a illustrated in FIG. 23 and the second information 136b illustrated in FIG. 24 are the same as the contents included in the first information 135a described with reference to FIG. Therefore, detailed description of the second information 136a shown in FIG. 23 and the second information 136b shown in FIG. 24 is omitted.

図12に戻り、S33またはS35の処理の後、情報生成部112は、図13に示すように、S31の処理で特定したループに含まれる配列を1つ特定する(S41)。   Returning to FIG. 12, after the process of S33 or S35, the information generation unit 112 identifies one array included in the loop identified in the process of S31 as shown in FIG. 13 (S41).

そして、S41の処理で特定した配列が多次元配列である場合(S42のYES)、情報生成部112は、S41の処理で特定した配列の1次元目の添え字の値が、最内ループ内で不変であるか否かを判定する(S43)。   If the array specified in the process of S41 is a multidimensional array (YES in S42), the information generating unit 112 determines that the value of the first dimension of the array specified in the process of S41 is within the innermost loop. In step S43, it is determined whether or not the change is constant.

その結果、S41の処理で特定した配列の1次元目の添え字の値が最内ループ内で不変であると判定した場合(S44のYES)、情報生成部112は、S41の処理で特定した配列の2次元目以降の添え字が、最内ループの制御変数であるか否かを判定する(S45)。   As a result, when it is determined that the value of the first dimension subscript of the array identified in the process of S41 is invariant in the innermost loop (YES in S44), the information generating unit 112 identifies in the process of S41. It is determined whether or not the second and subsequent subscripts in the array are control variables of the innermost loop (S45).

そして、S41の処理で特定した配列の2次元目以降の添え字が最内ループの制御変数であると判定した場合(S46のYES)、情報生成部112は、図15に示すように、S31の処理で特定したループに対してループ交換が指示されているか否かを判定する(S61)。   If it is determined that the second and subsequent subscripts of the array identified in the processing of S41 are control variables of the innermost loop (YES in S46), the information generating unit 112 performs S31 as shown in FIG. It is determined whether loop exchange is instructed for the loop identified in the process (S61).

その結果、S31の処理で特定したループに対してループ交換が指示されてないと判定した場合(S61のNO)、情報生成部112は、S41の処理で特定した配列について、ループ交換を推奨することを示す情報(以下、第2の推奨情報136cとも呼ぶ)を生成する(S62)。一方、S31の処理で特定したループに対してループ交換が指示されていると判定した場合(S61のYES)、情報生成部112は、S62の処理を行わない。   As a result, when it is determined that loop exchange is not instructed for the loop identified in S31 (NO in S61), the information generation unit 112 recommends loop exchange for the array identified in S41. Information indicating this (hereinafter also referred to as second recommended information 136c) is generated (S62). On the other hand, when it is determined that loop replacement is instructed for the loop specified in the process of S31 (YES in S61), the information generating unit 112 does not perform the process of S62.

すなわち、S41の処理で特定した配列の1次元目の添え字の値が最内ループ内で不変であって、S41の処理で特定した配列の2次元目以降の添え字のいずれかが最内ループの制御変数である場合、情報生成部112は、S41の処理で特定した配列において行われるメモリアクセスがストライドアクセスであると判定する。そのため、情報生成部112は、S41の処理で特定した配列を含むループ(S31の処理で特定したループ)がループ交換を行うべきループであると判定する。具体的に、情報生成部112は、この場合、S41の処理で特定した配列を含むループが、2次元目以降の添え字のうち、最内ループの制御変数であった添え字と、1次元目の添え字とを交換すべきループであると判定する。したがって、情報生成部112は、S31の処理で特定したループに対してループ交換が指示されていない場合、S41の処理で特定した配列に関し、S31の処理で特定したループに対してループ交換を行うべきことを推奨する情報(第2の推奨情報136c)の生成を行う。   That is, the value of the first dimension subscript of the array specified in the process of S41 is unchanged in the innermost loop, and any one of the subscripts after the second dimension of the array specified in the process of S41 is the innermost. If the control variable is a loop control variable, the information generation unit 112 determines that the memory access performed in the array identified in the process of S41 is a stride access. For this reason, the information generation unit 112 determines that the loop including the array specified in the process of S41 (the loop specified in the process of S31) is a loop that should be replaced. Specifically, in this case, the information generation unit 112 determines that the loop including the array specified in the process of S41 is a subscript that is the control variable of the innermost loop among the subscripts after the second dimension, and the one-dimensional It is determined that the loop should replace the subscript of the eye. Therefore, when loop exchange is not instructed for the loop specified in the process of S31, the information generation unit 112 performs loop exchange for the loop specified in the process of S31 with respect to the array specified in the process of S41. Information that recommends what to do (second recommended information 136c) is generated.

なお、情報生成部112は、第2の推奨情報136cを生成した場合、S33の処理で生成した第2の情報136に第2の推奨情報136cを追加するものであってよい。以下、第2の推奨情報136cが追加された第2の情報136の具体例について説明を行う。   In addition, when the 2nd recommendation information 136c is produced | generated, the information generation part 112 may add the 2nd recommendation information 136c to the 2nd information 136 produced | generated by the process of S33. Hereinafter, a specific example of the second information 136 to which the second recommended information 136c is added will be described.

[第2の推奨情報が追加された第2の情報の具体例]
図25は、第2の推奨情報136cが追加された第2の情報136aの具体例を説明する図である。
[Specific example of second information to which second recommended information is added]
FIG. 25 is a diagram illustrating a specific example of the second information 136a to which the second recommended information 136c is added.

図22(A)に示す例において、ループに含まれる配列aの1次元目の添え字jの値は、最内ループの制御変数がiであるため不変である。そして、配列aの2次元目の添え字iは、最内ループの制御変数である。さらに、図22(A)に示すループには、ループ交換の指示が記述されていない。そのため、例えば、S31の処理において図22(A)に示すループが特定され、S41の処理において配列aが特定された場合、情報生成部112は、S62の処理において、配列aに関し、図22(A)に示すループに対してループ交換を行った方がHPCの処理性能を向上させることができることを示す第2の推奨情報136cの生成を行う。   In the example shown in FIG. 22A, the value of the first dimension subscript j of the array a included in the loop is invariant because the control variable of the innermost loop is i. The subscript i in the second dimension of the array a is a control variable of the innermost loop. Furthermore, the loop shown in FIG. 22A does not describe a loop replacement instruction. Therefore, for example, when the loop shown in FIG. 22A is specified in the process of S31 and the array a is specified in the process of S41, the information generating unit 112 relates to the array a in the process of S62. The second recommendation information 136c indicating that the performance of the HPC can be improved by performing the loop exchange on the loop shown in A) is generated.

そのため、情報生成部112は、例えば、図25に示すように、図23で説明した第2の情報136aのうちの配列aに対応する情報に対し、「hint=“ループ交換を指定した方が実行効率の向上を図ることができます”」という内容の第2の推奨情報136cを追加する。   Therefore, for example, as illustrated in FIG. 25, the information generation unit 112 may specify “hint =“ loop exchange ”for information corresponding to the array a in the second information 136 a described with reference to FIG. 23. Execution efficiency can be improved "and the second recommended information 136c with the content" "is added.

これにより、情報生成部112は、ソースコード131のコンパイル時において、例えば、コンパイルを行った開発者に対し、HPCの処理性能を向上させるための情報を提供することが可能になる。そのため、開発者は、例えば、コンパイラが生成したオブジェクトコード133を実機において動作させることなく、HPCの処理性能を向上させるための情報を容易に取得することが可能になる。   As a result, when the source code 131 is compiled, the information generation unit 112 can provide information for improving the processing performance of the HPC to, for example, the developer who performed the compilation. Therefore, for example, the developer can easily acquire information for improving the processing performance of the HPC without operating the object code 133 generated by the compiler in the actual machine.

図13に戻り、S41の処理で特定した配列の1次元目の添え字の値が最内ループ内で不変でないと判定した場合(S44のNO)、または、S41の処理で特定した配列の2次元目以降の添え字が最内ループの制御変数でないと判定した場合(S46のNO)、情報生成部112は、図14に示すように、情報生成部112は、S41の処理で特定した配列の1次元目の添え字が、最内ループの制御変数であるか否かを判定する(S51)。   Returning to FIG. 13, when it is determined that the value of the first dimension subscript of the array specified in the process of S41 is not unchanged in the innermost loop (NO in S44), or 2 of the array specified in the process of S41 When it is determined that the subscripts after the dimension are not control variables of the innermost loop (NO in S46), the information generation unit 112, as shown in FIG. 14, the information generation unit 112 uses the array specified in the process of S41. It is determined whether or not the first-dimensional subscript is a control variable of the innermost loop (S51).

その結果、S41の処理で特定した配列の1次元目の添え字が最内ループの制御変数であると判定した場合(S52のYES)、情報生成部112は、S41の処理で特定した配列の2次元目以降の添え字の値が、最内ループ内で不変であるか否かを判定する(S53)。   As a result, when it is determined that the first-dimensional subscript of the array specified in the process of S41 is the control variable of the innermost loop (YES in S52), the information generating unit 112 stores the array specified in the process of S41. It is determined whether or not the value of the subscript after the second dimension is unchanged in the innermost loop (S53).

そして、S41の処理で特定した配列の2次元目以降の添え字の値が最内ループ内で不変であると判定した場合(S54のYES)、情報生成部112は、図15に示すように、S31の処理で特定したループに対してループ交換が指示されているか否かを判定する(S65)。   If it is determined that the subscript values after the second dimension of the array identified in the process of S41 are unchanged in the innermost loop (YES in S54), the information generating unit 112, as shown in FIG. Then, it is determined whether or not a loop exchange is instructed for the loop specified in the process of S31 (S65).

その結果、S31の処理で特定したループに対してループ交換が指示されていると判定した場合(S65のYES)、情報生成部112は、S41の処理で特定した配列について、ループ交換を推奨しないことを示す情報(以下、第1の推奨情報135cとも呼ぶ)を生成する(S66)。一方、S31の処理で特定したループに対してループ交換が指示されていないと判定した場合(S65のNO)、情報生成部112は、S66の処理を行わない。   As a result, when it is determined that loop replacement is instructed for the loop identified in S31 (YES in S65), the information generation unit 112 does not recommend loop replacement for the array identified in S41. Information indicating this (hereinafter also referred to as first recommended information 135c) is generated (S66). On the other hand, when it is determined that loop replacement is not instructed for the loop specified in the process of S31 (NO in S65), the information generating unit 112 does not perform the process of S66.

すなわち、情報生成部112は、S41の処理で特定した配列において行われるメモリアクセスがストライドアクセスでないと判定した場合、S41の処理で特定した配列において行われるメモリアクセスが連続アクセスであるか否かの判定を行う。具体的に、情報生成部112は、S41の処理で特定した配列の1次元目の添え字が最内ループの制御変数であって、S41の処理で特定した配列の2次元目以降の添え字の値が最内ループ内で不変である場合、S41の処理で特定した配列において行われるメモリアクセスが連続アクセスであると判定する。そのため、情報生成部112は、この場合、S41の処理で特定した配列を含むループ(S31の処理で特定したループ)がループ交換を行うべきではないループであると判定する。したがって、情報生成部112は、S31の処理で特定したループに対してループ交換が指示されている場合、S41の処理で特定した配列に関し、S31の処理で特定したループに対してループ交換を行うべきことを推奨しない情報(第1の推奨情報135c)の生成を行う。   That is, if the information generation unit 112 determines that the memory access performed in the array specified in the process of S41 is not a stride access, whether the memory access performed in the array specified in the process of S41 is a continuous access or not. Make a decision. Specifically, the information generation unit 112 determines that the first-dimensional subscript of the array specified in the process of S41 is the control variable of the innermost loop, and the subscripts for the second and subsequent dimensions of the array specified in the process of S41. Is unchanged in the innermost loop, it is determined that the memory access performed in the array specified in the process of S41 is a continuous access. Therefore, in this case, the information generation unit 112 determines that the loop including the array identified in the process of S41 (the loop identified in the process of S31) is a loop that should not be replaced. Therefore, when the loop exchange is instructed for the loop specified in the process of S31, the information generation unit 112 performs the loop exchange for the loop specified in the process of S31 with respect to the array specified in the process of S41. Information that is not recommended to be generated (first recommended information 135c) is generated.

なお、情報生成部112は、第1の推奨情報135cを生成した場合、S35の処理で生成した第1の情報135に第1の推奨情報135cを追加するものであってよい。以下、第1の推奨情報135cが追加された第1の情報135の具体例について説明を行う。   Note that when the first recommendation information 135c is generated, the information generation unit 112 may add the first recommendation information 135c to the first information 135 generated in the process of S35. Hereinafter, a specific example of the first information 135 to which the first recommendation information 135c is added will be described.

[第1の推奨情報が追加された第1の情報の具体例]
図26は、第1の推奨情報135cが追加された第1の情報135の具体例を説明する図である。
[Specific example of first information to which first recommended information is added]
FIG. 26 is a diagram illustrating a specific example of the first information 135 to which the first recommendation information 135c is added.

図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の生成を行う。   In the example shown in FIG. 18B, the value of the first dimension subscript i of the array d included in the loop is invariant because the control variable of the innermost loop is j. The subscript j in the second dimension of the array d is a control variable of the innermost loop. Further, a loop exchange instruction is described in the loop shown in FIG. Therefore, for example, when the loop shown in FIG. 18B is specified in the process of S31 and the array d is specified in the process of S41, the information generation unit 112 relates to the array d in the process of S66. The first recommendation information 135c is generated to indicate that the HPC processing performance can be improved when the loop is not exchanged for the loop shown in B). Similarly, the information generation unit 112 similarly generates the first recommended information 135c for the array e included in the loop illustrated in FIG.

そのため、情報生成部112は、例えば、図26に示すように、図20で説明した第1の情報135のうちの配列dに対応する情報に対し、「hint=“ループ交換を指定しない方が実行効率の向上を図ることができます”」という内容の第1の推奨情報135cを追加する。また、情報生成部112は、図20で説明した第1の情報135のうちの配列eに対応する情報に対しても同様に、「hint=“ループ交換を指定しない方が実行効率の向上を図ることができます”」という内容の第1の推奨情報135cを追加する。   Therefore, for example, as illustrated in FIG. 26, the information generation unit 112 should not specify “hint =“ loop exchange ”for information corresponding to the array d in the first information 135 described in FIG. 20. Execution efficiency can be improved, and first recommendation information 135c having the content "" is added. Similarly, the information generation unit 112 also improves the execution efficiency of the information corresponding to the array e in the first information 135 described with reference to FIG. 20 by not specifying “hint =“ loop exchange ”. The first recommendation information 135c having the content “can be planned” is added.

これにより、情報生成部112は、ソースコード131のコンパイル時において、例えば、コンパイルを行った開発者に対し、HPCの処理性能を向上させるための情報を提供することが可能になる。そのため、開発者は、例えば、コンパイラが生成したオブジェクトコード133を実機において動作させることなく、HPCの処理性能を向上させるための情報を容易に取得することが可能になる。   As a result, when the source code 131 is compiled, the information generation unit 112 can provide information for improving the processing performance of the HPC to, for example, the developer who performed the compilation. Therefore, for example, the developer can easily acquire information for improving the processing performance of the HPC without operating the object code 133 generated by the compiler in the actual machine.

図15に戻り、S62の処理、または、S66の処理の後、情報生成部112は、S41の処理で配列の全ての特定が完了したか否かを判定する(S63)。なお、S41の処理で特定した配列が多次元配列でない場合(S42のNO)、S41の処理で特定した配列の1次元目の添え字が最内ループの制御変数でないと判定した場合(S52のNO)、または、S41の処理で特定した配列の2次元目以降の添え字の値が最内ループ内で不変でないと判定した場合も同様に(S54のNO)、情報生成部112は、S63の処理を行う。   Returning to FIG. 15, after the process of S62 or the process of S66, the information generating unit 112 determines whether or not all of the arrays have been specified in the process of S41 (S63). If the array specified in the process of S41 is not a multidimensional array (NO in S42), it is determined that the first-dimensional subscript of the array specified in the process of S41 is not a control variable of the innermost loop (in S52) NO) or when it is determined that the values of the subscripts after the second dimension of the array specified in the processing of S41 are not invariant in the innermost loop (NO in S54), the information generating unit 112 also performs S63. Perform the process.

その結果、S41の処理で全ての配列の特定が完了したと判定した場合(S63のYES)、情報生成部112は、S31の処理で全てのループの特定が完了したか否かを判定する(S64)。一方、S41の処理で全ての配列の特定が完了していないと判定した場合(S63のNO)、情報生成部112は、S41以降の処理を再度行う。   As a result, when it is determined that the identification of all the arrays has been completed in the process of S41 (YES in S63), the information generating unit 112 determines whether the identification of all the loops has been completed in the process of S31 ( S64). On the other hand, when it is determined that the identification of all the arrays has not been completed in the process of S41 (NO in S63), the information generation unit 112 performs the processes after S41 again.

そして、S31の処理で全てのループの特定が完了したと判定した場合(S64のYES)、情報処理装置1は、S24の処理を終了する。一方、S31の処理で全てのループの特定が完了したと判定した場合(S64のNO)、情報生成部112は、S31以降の処理を再度行う。   And when it determines with the identification of all the loops having been completed by the process of S31 (YES of S64), the information processing apparatus 1 complete | finishes the process of S24. On the other hand, if it is determined that the identification of all the loops has been completed in the process of S31 (NO in S64), the information generating unit 112 performs the processes after S31 again.

図11に戻り、情報出力部114は、S24の処理で生成した第1の情報または第2の情報を出力する(S25)。具体的に、情報出力部114は、S2で生成された中間言語132に含まれる各ループのそれぞれについて、S24の処理で生成した第1の情報または第2の情報の出力を行う。   Returning to FIG. 11, the information output unit 114 outputs the first information or the second information generated in the process of S24 (S25). Specifically, the information output unit 114 outputs the first information or the second information generated in the process of S24 for each of the loops included in the intermediate language 132 generated in S2.

このように、本実施の形態における情報処理装置1は、ソースコード131をコンパイルする際に、ソースコード131に含まれるループのうち、ループ交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループ交換が行われた場合における特定のループに関する第1の情報135、または、ループ交換が行われなかった場合における特定のループに関する第2の情報136を生成する。そして、情報処理装置1は、生成した第1の情報135または第2の情報136を出力する。   Thus, when the information processing apparatus 1 according to the present embodiment compiles the source code 131, the order of memory access performed in a specific loop instructed to replace the loop among the loops included in the source code 131. The first information 135 related to the specific loop when the loop exchange is performed or the second information 136 related to the specific loop when the loop exchange is not performed is generated. Then, the information processing apparatus 1 outputs the generated first information 135 or second information 136.

すなわち、情報処理装置1は、例えば、ソースコード131のコンパイルが行われる際に、特定のループにおいて行われるメモリアクセスが連続アクセスであるかストライドアクセスであるか否かを判定する。そして、例えば、特定のループにおいてループ交換が行われる場合であって、その特定のループにおいて連続アクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきでないことを示す情報(第1の情報135)を出力する。一方、例えば、特定のループにおいてループ交換が行われない場合であって、その特定のループにおいてストライドアクセスが行われると判定した場合、情報処理装置1は、その特定のループにおいてループ交換を行うべきであることを示す情報(第2の情報136)を出力する。   That is, for example, when the source code 131 is compiled, the information processing apparatus 1 determines whether the memory access performed in a specific loop is continuous access or stride access. For example, when loop exchange is performed in a specific loop and it is determined that continuous access is performed in the specific loop, the information processing apparatus 1 should not perform loop exchange in the specific loop. Information indicating that (first information 135) is output. On the other hand, for example, when loop exchange is not performed in a specific loop and it is determined that stride access is performed in the specific loop, the information processing apparatus 1 should perform loop exchange in the specific loop. Is output (second information 136) indicating that the

これにより、開発者は、情報処理装置1が出力した情報を参照することで、例えば、オブジェクトコード133を実機において動作させることなく、コンパイラによって行われたループ交換のそれぞれが、HPCの処理性能を向上するために必要であったか否かについての検証を容易に行うことが可能になる。   As a result, the developer refers to the information output by the information processing apparatus 1 so that, for example, each of the loop exchanges performed by the compiler without causing the object code 133 to operate on the actual machine, improves the processing performance of the HPC. It becomes possible to easily verify whether or not it was necessary for improvement.

以上の実施の形態をまとめると、以下の付記の通りである。   The above embodiment is summarized as follows.

(付記1)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成する情報生成部と、
生成した前記第1の情報または前記第2の情報を出力する情報出力部と、を有する、
ことを特徴とする情報処理装置。
(Appendix 1)
When compiling source code, among the loops included in the source code, the identification when the loop is exchanged based on the order of memory access performed in the specific loop instructed to exchange the loop An information generation unit that generates first information about the loop of the second loop or information about the specific loop when the loop is not exchanged;
An information output unit that outputs the generated first information or the second information;
An information processing apparatus characterized by that.

(付記2)
付記1において、
前記情報生成部は、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われる場合、前記特定のループに対するループの交換を推奨しないことを示す情報を前記第1の情報として生成する、
ことを特徴とする情報処理装置。
(Appendix 2)
In Appendix 1,
When the memory access performed in the specific loop is sequentially performed on consecutive storage areas, the information generation unit displays information indicating that it is not recommended to replace the loop with respect to the specific loop. Generate as information,
An information processing apparatus characterized by that.

(付記3)
付記1において、
前記情報生成部は、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われない場合、前記特定のループに対するループの交換を推奨することを示す情報を前記第2の情報として生成する、
ことを特徴とする情報処理装置。
(Appendix 3)
In Appendix 1,
The information generation unit receives information indicating that a loop replacement for the specific loop is recommended when the memory access performed in the specific loop is not sequentially performed on continuous storage areas. Generate as information
An information processing apparatus characterized by that.

(付記4)
付記2または3において、
前記情報生成部は、前記特定のループにおける1次元目の添え字の値が前記特定のループの最内ループ内において不変であり、前記特定のループにおける2次元目以降の添え字が前記最内ループの制御変数である場合、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われないと判定する、
ことを特徴とする情報処理装置。
(Appendix 4)
In Appendix 2 or 3,
In the information generation unit, the value of the first dimension subscript in the specific loop is unchanged in the innermost loop of the specific loop, and the second and subsequent subscripts in the specific loop are in the innermost loop. If it is a control variable of a loop, it is determined that the memory access performed in the specific loop is not performed in order for a continuous storage area;
An information processing apparatus characterized by that.

(付記5)
付記2または3において、
前記情報生成部は、前記特定のループにおける1次元目の添え字が前記特定のループの最内ループの制御変数であり、前記特定のループにおける2次元目の添え字の値が前記最内ループ内において不変である場合、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われると判定する、
ことを特徴とする情報処理装置。
(Appendix 5)
In Appendix 2 or 3,
In the information generation unit, the first-dimensional subscript in the specific loop is a control variable of the innermost loop of the specific loop, and the second-dimensional subscript value in the specific loop is the innermost loop. Determining that the memory access performed in the specific loop is sequentially performed on consecutive storage areas,
An information processing apparatus characterized by that.

(付記6)
付記1において、
前記特定のループは、前記ソースコードに含まれるループから分割された複数のループであり、
前記情報生成部は、前記複数のループのそれぞれについて、前記第1の情報または前記第2の情報の生成を行う、
ことを特徴とする情報処理装置。
(Appendix 6)
In Appendix 1,
The specific loop is a plurality of loops divided from a loop included in the source code,
The information generation unit generates the first information or the second information for each of the plurality of loops.
An information processing apparatus characterized by that.

(付記7)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示されていない特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成する情報生成部と、
生成した前記第1の情報または前記第2の情報を出力する情報出力部と、を有する、
ことを特徴とする情報処理装置。
(Appendix 7)
When the source code is compiled, the loop in the case where the loop is exchanged based on the order of the memory access performed in a specific loop that is not instructed to exchange the loop among the loops included in the source code. An information generation unit that generates first information about a specific loop or second information about the specific loop when no loop is exchanged;
An information output unit that outputs the generated first information or the second information;
An information processing apparatus characterized by that.

(付記8)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
ことを特徴とするコンパイル方法。
(Appendix 8)
When compiling source code, among the loops included in the source code, the identification when the loop is exchanged based on the order of memory access performed in the specific loop instructed to exchange the loop Generating first information regarding a loop of the second loop, or second information regarding the specific loop when no loop is exchanged,
Outputting the generated first information or the second information;
A compiling method characterized by the above.

(付記9)
付記8において、
前記生成する工程では、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われる場合、前記特定のループに対するループの交換を推奨しないことを示す情報を前記第1の情報として生成する、
ことを特徴とするコンパイル方法。
(Appendix 9)
In Appendix 8,
In the generating step, when the memory access performed in the specific loop is sequentially performed on a continuous storage area, information indicating that the replacement of the loop for the specific loop is not recommended is displayed in the first loop. Generate as information,
A compiling method characterized by the above.

(付記10)
付記8において、
前記生成する工程では、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われない場合、前記特定のループに対するループの交換を推奨することを示す情報を前記第2の情報として生成する、
ことを特徴とするコンパイル方法。
(Appendix 10)
In Appendix 8,
In the generating step, when the memory access performed in the specific loop is not sequentially performed on a continuous storage area, information indicating that a loop replacement for the specific loop is recommended is provided in the second loop. Generate as information
A compiling method characterized by the above.

(付記11)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示されていない特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
ことを特徴とするコンパイル方法。
(Appendix 11)
When the source code is compiled, the loop in the case where the loop is exchanged based on the order of the memory access performed in a specific loop that is not instructed to exchange the loop among the loops included in the source code. Generating first information about a specific loop, or second information about the specific loop in the case where no loop exchange has occurred,
Outputting the generated first information or the second information;
A compiling method characterized by the above.

(付記12)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
処理をコンピュータに実行させることを特徴とするコンパイルプログラム。
(Appendix 12)
When compiling source code, among the loops included in the source code, the identification when the loop is exchanged based on the order of memory access performed in the specific loop instructed to exchange the loop Generating first information regarding a loop of the second loop, or second information regarding the specific loop when no loop is exchanged,
Outputting the generated first information or the second information;
A compiling program for causing a computer to execute processing.

(付記13)
付記12において、
前記生成する工程では、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われる場合、前記特定のループに対するループの交換を推奨しないことを示す情報を前記第1の情報として生成する、
ことを特徴とするコンパイルプログラム。
(Appendix 13)
In Appendix 12,
In the generating step, when the memory access performed in the specific loop is sequentially performed on a continuous storage area, information indicating that the replacement of the loop for the specific loop is not recommended is displayed in the first loop. Generate as information,
A compiled program characterized by that.

(付記14)
付記12において、
前記生成する工程では、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われない場合、前記特定のループに対するループの交換を推奨することを示す情報を前記第2の情報として生成する、
ことを特徴とするコンパイルプログラム。
(Appendix 14)
In Appendix 12,
In the generating step, when the memory access performed in the specific loop is not sequentially performed on a continuous storage area, information indicating that a loop replacement for the specific loop is recommended is provided in the second loop. Generate as information
A compiled program characterized by that.

(付記15)
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示されていない特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
処理をコンピュータに実行させることを特徴とするコンパイルプログラム。
(Appendix 15)
When the source code is compiled, the loop in the case where the loop is exchanged based on the order of the memory access performed in a specific loop that is not instructed to exchange the loop among the loops included in the source code. Generating first information about a specific loop, or second information about the specific loop in the case where no loop exchange has occurred,
Outputting the generated first information or the second information;
A compiling program for causing a computer to execute processing.

1:情報処理装置 2:記憶装置
3:操作端末 101:CPU
102:メモリ 103:I/Oユニット
104:記憶媒体 130:情報格納領域
1: Information processing device 2: Storage device 3: Operation terminal 101: CPU
102: Memory 103: I / O unit 104: Storage medium 130: Information storage area

Claims (11)

ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成する情報生成部と、
生成した前記第1の情報または前記第2の情報を出力する情報出力部と、を有する、
ことを特徴とする情報処理装置。
When compiling source code, among the loops included in the source code, the identification when the loop is exchanged based on the order of memory access performed in the specific loop instructed to exchange the loop An information generation unit that generates first information about the loop of the second loop or information about the specific loop when the loop is not exchanged;
An information output unit that outputs the generated first information or the second information;
An information processing apparatus characterized by that.
請求項1において、
前記情報生成部は、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われる場合、前記特定のループに対するループの交換を推奨しないことを示す情報を前記第1の情報として生成する、
ことを特徴とする情報処理装置。
In claim 1,
When the memory access performed in the specific loop is sequentially performed on consecutive storage areas, the information generation unit displays information indicating that it is not recommended to replace the loop with respect to the specific loop. Generate as information,
An information processing apparatus characterized by that.
請求項1において、
前記情報生成部は、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われない場合、前記特定のループに対するループの交換を推奨することを示す情報を前記第2の情報として生成する、
ことを特徴とする情報処理装置。
In claim 1,
The information generation unit receives information indicating that a loop replacement for the specific loop is recommended when the memory access performed in the specific loop is not sequentially performed on continuous storage areas. Generate as information
An information processing apparatus characterized by that.
請求項2または3において、
前記情報生成部は、前記特定のループにおける1次元目の添え字の値が前記特定のループの最内ループ内において不変であり、前記特定のループにおける2次元目以降の添え字が前記最内ループの制御変数である場合、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われないと判定する、
ことを特徴とする情報処理装置。
In claim 2 or 3,
In the information generation unit, the value of the first dimension subscript in the specific loop is unchanged in the innermost loop of the specific loop, and the second and subsequent subscripts in the specific loop are in the innermost loop. If it is a control variable of a loop, it is determined that the memory access performed in the specific loop is not performed in order for a continuous storage area;
An information processing apparatus characterized by that.
請求項2または3において、
前記情報生成部は、前記特定のループにおける1次元目の添え字が前記特定のループの最内ループの制御変数であり、前記特定のループにおける2次元目の添え字の値が前記最内ループ内において不変である場合、前記特定のループにおいて行われる前記メモリアクセスが、連続する記憶領域に対して順に行われると判定する、
ことを特徴とする情報処理装置。
In claim 2 or 3,
In the information generation unit, the first-dimensional subscript in the specific loop is a control variable of the innermost loop of the specific loop, and the second-dimensional subscript value in the specific loop is the innermost loop. Determining that the memory access performed in the specific loop is sequentially performed on consecutive storage areas,
An information processing apparatus characterized by that.
請求項1において、
前記特定のループは、前記ソースコードに含まれるループから分割された複数のループであり、
前記情報生成部は、前記複数のループのそれぞれについて、前記第1の情報または前記第2の情報の生成を行う、
ことを特徴とする情報処理装置。
In claim 1,
The specific loop is a plurality of loops divided from a loop included in the source code,
The information generation unit generates the first information or the second information for each of the plurality of loops.
An information processing apparatus characterized by that.
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示されていない特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成する情報生成部と、
生成した前記第1の情報または前記第2の情報を出力する情報出力部と、を有する、
ことを特徴とする情報処理装置。
When the source code is compiled, the loop in the case where the loop is exchanged based on the order of the memory access performed in a specific loop that is not instructed to exchange the loop among the loops included in the source code. An information generation unit that generates first information about a specific loop or second information about the specific loop when no loop is exchanged;
An information output unit that outputs the generated first information or the second information;
An information processing apparatus characterized by that.
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
ことを特徴とするコンパイル方法。
When compiling source code, among the loops included in the source code, the identification when the loop is exchanged based on the order of memory access performed in the specific loop instructed to exchange the loop Generating first information regarding a loop of the second loop, or second information regarding the specific loop when no loop is exchanged,
Outputting the generated first information or the second information;
A compiling method characterized by the above.
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示されていない特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
ことを特徴とするコンパイル方法。
When the source code is compiled, the loop in the case where the loop is exchanged based on the order of the memory access performed in a specific loop that is not instructed to exchange the loop among the loops included in the source code. Generating first information about a specific loop, or second information about the specific loop in the case where no loop exchange has occurred,
Outputting the generated first information or the second information;
A compiling method characterized by the above.
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示された特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
処理をコンピュータに実行させることを特徴とするコンパイルプログラム。
When compiling source code, among the loops included in the source code, the identification when the loop is exchanged based on the order of memory access performed in the specific loop instructed to exchange the loop Generating first information regarding a loop of the second loop, or second information regarding the specific loop when no loop is exchanged,
Outputting the generated first information or the second information;
A compiling program for causing a computer to execute processing.
ソースコードをコンパイルする際に、前記ソースコードに含まれるループのうち、ループの交換が指示されていない特定のループにおいて行われるメモリアクセスの順序に基づいて、ループの交換が行われた場合における前記特定のループに関する第1の情報、または、ループの交換が行われなかった場合における前記特定のループに関する第2の情報を生成し、
生成した前記第1の情報または前記第2の情報を出力する、
処理をコンピュータに実行させることを特徴とするコンパイルプログラム。
When the source code is compiled, the loop in the case where the loop is exchanged based on the order of the memory access performed in a specific loop that is not instructed to exchange the loop among the loops included in the source code. Generating first information about a specific loop, or second information about the specific loop in the case where no loop exchange has occurred,
Outputting the generated first information or the second information;
A compiling program for causing a computer to execute processing.
JP2017144452A 2017-07-26 2017-07-26 Information processing equipment, compilation method and compilation program Active JP6898556B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017144452A JP6898556B2 (en) 2017-07-26 2017-07-26 Information processing equipment, compilation method and compilation program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017144452A JP6898556B2 (en) 2017-07-26 2017-07-26 Information processing equipment, compilation method and compilation program

Publications (2)

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

Family

ID=65478392

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017144452A Active JP6898556B2 (en) 2017-07-26 2017-07-26 Information processing equipment, compilation method and compilation program

Country Status (1)

Country Link
JP (1) JP6898556B2 (en)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08241208A (en) * 1995-03-06 1996-09-17 Fujitsu Ltd Information display system for cache
JP2003256214A (en) * 2002-02-27 2003-09-10 Hitachi Ltd Loop conversion method using array extension
JP2006107339A (en) * 2004-10-08 2006-04-20 Matsushita Electric Ind Co Ltd Program processor
JP2015194881A (en) * 2014-03-31 2015-11-05 富士通株式会社 Compilation device, compilation program, and compilation method

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08241208A (en) * 1995-03-06 1996-09-17 Fujitsu Ltd Information display system for cache
JP2003256214A (en) * 2002-02-27 2003-09-10 Hitachi Ltd Loop conversion method using array extension
JP2006107339A (en) * 2004-10-08 2006-04-20 Matsushita Electric Ind Co Ltd Program processor
JP2015194881A (en) * 2014-03-31 2015-11-05 富士通株式会社 Compilation device, compilation program, and compilation method

Also Published As

Publication number Publication date
JP6898556B2 (en) 2021-07-07

Similar Documents

Publication Publication Date Title
US9645803B2 (en) Methods and systems for forming an adjusted perform range
CA2288614C (en) Loop allocation for optimizing compilers
US9047399B2 (en) Generating visualization from running executable code
CN108369591B (en) System and method for caching and parameterizing IR
US9430203B2 (en) Information processing apparatus and compilation method
US20130139137A1 (en) Systems and Methods for Customizing Optimization/Transformation/ Processing Strategies
EP3685258B1 (en) Ranking of software code parts
CN103365707A (en) Method and device for controlling returning of asynchronous calls
US9081587B1 (en) Multiversioned functions
Mendis et al. Revec: program rejuvenation through revectorization
JP7060803B2 (en) Information processing equipment, compiler program and compilation method
JP6665720B2 (en) Information processing apparatus, compile program, compile method, and cache control method
US11733981B2 (en) Methods, systems, articles of manufacture and apparatus to automatically optimize software programs
JP6898556B2 (en) Information processing equipment, compilation method and compilation program
Goss Machine code optimization-improving executable object code
CN113031952A (en) Method and device for determining execution code of deep learning model and storage medium
Basthikodi et al. HPC Based Algorithmic Species Extraction Tool for Automatic Parallelization of Program Code
Paulavicius et al. Basbl: Branch-and-sandwich bilevel solver. ii. implementation and computational study with the basblib test sets
JP2018206175A (en) Compiler, information processor, and compile method
JP2014099108A (en) Execution time calculating device, execution time calculating method, and program
Lin et al. Vector data flow analysis for SIMD optimizations on OpenCL programs
JP6547477B2 (en) Source code optimization apparatus, source code optimization program and object code generation method
Kumar et al. Transparent debugging of dynamically optimized code
Jensen et al. Code Commentary and Automatic Refactorings using Feedback from Multiple Compilers
US9880841B2 (en) Computation method for computing performance value when processor executes code, computation apparatus for computing performance value when processor executes code, and computer readable storage medium storing computation program for computing performance value when processor executes code

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 Request for written amendment filed

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