JPH04152464A - Compile processing system - Google Patents
Compile processing systemInfo
- Publication number
- JPH04152464A JPH04152464A JP27755090A JP27755090A JPH04152464A JP H04152464 A JPH04152464 A JP H04152464A JP 27755090 A JP27755090 A JP 27755090A JP 27755090 A JP27755090 A JP 27755090A JP H04152464 A JPH04152464 A JP H04152464A
- Authority
- JP
- Japan
- Prior art keywords
- vector
- arithmetic
- instruction
- program
- calculates
- 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.)
- Pending
Links
- 238000003491 array Methods 0.000 claims abstract description 18
- 230000001186 cumulative effect Effects 0.000 claims abstract description 9
- 238000004364 calculation method Methods 0.000 claims abstract description 4
- 238000001514 detection method Methods 0.000 claims description 7
- 238000003672 processing method Methods 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000005457 optimization Methods 0.000 description 6
- 238000000034 method Methods 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Abstract
Description
【発明の詳細な説明】
[概要〕
ソースプログラムを対応のオブジェクトプログラムにコ
ンパイルするコンパイル処理方式に関し、実行時間を短
縮するオブジェクトプログラムを生成できるようにする
ことを目的とし、複数の配列の持つ有効な配列要素の総
和を算出する演算記述が、ソースプログラムに記述され
ているか否かを検出する演算パターン検出部と、該当の
演算記述が検出されるときに、その演算記述に記述され
る配列の持つ有効な配列要素を配列要素対応に累積加算
するベクトル加算命令列と、この求められる累積加算値
の総和値を算出するベクトル総和命令とからなるベクト
ル命令列を生成していくことで、検出された演算記述の
持つ演算値を算出するベクトル命令列を生成するベクト
ル命令列生成部とを備え、このベクトル命令列生成部に
より生成されたベクトル命令列に従って、ソースプログ
ラムを対応のオブジェクトプログラムにコンパイルして
いくように構成する。[Detailed Description of the Invention] [Summary] Regarding a compilation processing method for compiling a source program into a corresponding object program, the purpose is to generate an object program that reduces execution time. An operation pattern detection unit that detects whether or not an operation description that calculates the sum of array elements is written in the source program, and when the corresponding operation description is detected, the operation pattern detection unit that detects whether the operation description that calculates the sum of array elements is written in the source program, and Detected by generating a vector instruction sequence consisting of a vector addition instruction sequence that cumulatively adds valid array elements corresponding to the array elements, and a vector summation instruction that calculates the total sum of the required cumulative addition values. and a vector instruction string generation section that generates a vector instruction string for calculating the operation value of the operation description, and compiles the source program into a corresponding object program according to the vector instruction string generated by the vector instruction string generation section. Configure it as you like.
本発明は、ソースプログラムを対応のオブジェクトプロ
グラムにコンパイルするコンパイル処理方式に関し、特
に、実行時間を短縮するオブジェクトプログラムを生成
できるようにするコンパイル処理方式に関するものであ
る。The present invention relates to a compilation processing method for compiling a source program into a corresponding object program, and more particularly to a compilation processing method that can generate an object program that reduces execution time.
従来のコンパイラでは、ソースプログラム中に、複数の
配列の持つ有効な配列要素の総和を算出する演算記述が
記述されている場合、各配列の持つ有効な配列要素の総
和値を算出するベクトル総和命令を生成するとともに、
このベクトル総和命令により算出される総和値を順次加
算していくスカラ加算命令を生成していくことで、その
演算記述をコンパイルしていくように処理していた。With conventional compilers, when a source program contains an operation description that calculates the sum of the valid array elements of multiple arrays, a vector summation instruction that calculates the sum of the valid array elements of each array is used. In addition to generating
By generating a scalar addition instruction that sequentially adds the summation value calculated by this vector summation instruction, processing is performed such that the calculation description is compiled.
例えば、ソースプログラム中に、第4図に示すように、
配列要素番号1(1〜X)が与えられるときに、条件に
よって、(n±1)個用量される配列、
A、tlAJ(1)、A=(2)、・・・A 、 (X
) ]j=1〜(n+1)
の内のいずれか1つの配列の配列要素が有効となって、
Do小ループ従って、その有効となった各配列要素の総
和値を算出する演算記述が記述される場合、従来のコン
パイラでは、第5図に示すように、各配列毎に、
VSUM T、、A、 9M。For example, in the source program, as shown in Figure 4,
When array element number 1 (1 to
) ]j=1~(n+1) The array element of any one of the arrays becomes valid,
Do small loop Therefore, when an operation description is written that calculates the summation value of each array element that has become valid, in a conventional compiler, as shown in Figure 5, for each array, VSUM T, , A , 9M.
ADD s、s、TJ
というように、各配列の持つ有効な配列要素の総和値を
算出するベクトル総和命令(VSUM)を生成するとと
もに、このベクトル総和命令により算出される総和値を
順次加算していくスカラ加夏命令(ADD)を生成して
いくことで、その演算記述をコンパイルしていくように
処理していたのである。ADD s, s, TJ A vector summation instruction (VSUM) is generated to calculate the summation value of the valid array elements of each array, and the summation values calculated by this vector summation instruction are sequentially added. By generating a number of scalar instructions (ADDs), processing was performed in such a way that the arithmetic description was compiled.
第6図に、計算機で実行されるこのコンパイル結果の命
令列を図示する。FIG. 6 illustrates the instruction sequence resulting from this compilation executed by the computer.
ここで、上述のベクトル総和命令のrVsUM。Here, rVsUM of the vector summation instruction described above.
は、第2オペランドの配列の総和を求めて、その結果を
第1オペランドの変数に代入する命令であり、第3オペ
ランドは、IF文等の条件分岐により、第2オペランド
の配列のすべての配列要素が演算の対象とならない場合
に、第2オペランドの配列のどの配列要素が演算の対象
になっているのかを表すものである。また、上述のスカ
ラ加算命令のrADDJは、第2オペランドの変数と第
3オペランドの変数とを加算して、その結果を第1オペ
ランドの変数に代入する命令である。is an instruction that calculates the sum of the arrays of the second operand and assigns the result to the variable of the first operand, and the third operand calculates the total sum of the arrays of the second operand by a conditional branch such as an IF statement. This indicates which array element in the array of the second operand is the target of the operation when no element is the target of the operation. Further, the above-mentioned scalar addition instruction rADDJ is an instruction that adds the variable of the second operand and the variable of the third operand, and assigns the result to the variable of the first operand.
しかしながら、ベクトル総和命令は、特殊の命令である
ために、通常のベクトル命令よりも実行時間が長くかか
るという性質を持っている。例えば、ベクトル要素数が
100個のときに、通常のベクトル加算命令よりも実行
時間が約2.5倍長くかかることになる。これから、従
来のコンパイル処理に従っているならば、ソースプログ
ラム中に、複数の配列の持つ有効な配列要素の総和を算
出する演算記述が含まれている場合、プログラムの実行
時間が長くなってしまうという問題点があったのである
。However, since the vector summation instruction is a special instruction, it has the property that it takes longer to execute than a normal vector instruction. For example, when the number of vector elements is 100, the execution time will be about 2.5 times longer than a normal vector addition instruction. From now on, if you follow the conventional compilation process, if the source program contains an operation description that calculates the sum of valid array elements of multiple arrays, the program execution time will increase. There was a point.
本発明はかかる事情に鑑みてなされたものであって、ソ
ースプログラム中に、複数の配列の持つ有効な配列要素
の総和を算出する演算記述が記述されている場合に、プ
ログラムの実行時間を短縮するオブジェクトプログラム
を生成できるようにする新たなコンパイル処理方式の提
供を目的とするものである。The present invention has been made in view of such circumstances, and reduces program execution time when a source program includes an operation description that calculates the sum of valid array elements of multiple arrays. The purpose of this project is to provide a new compilation processing method that enables the generation of object programs.
第1図は本発明の原理構成図である。 FIG. 1 is a diagram showing the principle configuration of the present invention.
図中、1は本発明を具備するデータ処理装置であって、
ソースプログラムを対応のオブジェクトプログラムにコ
ンパイルするもの、2はデータ処理装置lによりコンパ
イルされるソースプログラム、3はデータ処理装置lに
より生成されるオブジェクトプログラムである。In the figure, 1 is a data processing device equipped with the present invention,
2 is a source program compiled by the data processing device l; 3 is an object program generated by the data processing device l;
データ処理装置1は、ソースプログラム2の入力を受は
付けるプログラム入力部10と、プログラム入力部10
により受は付けられたソースプログラム2の構文意味解
析を行って対応の中間言語を生成するプログラム解析部
11と、プログラム解析部11の出力する中間言語に対
して各種の最適化処理を実行する最適化処理部12と、
最適化処理部12により最適化された中間言語列に対応
するオブジェクトプログラム3を生成して出力するコー
ド生成部13とを備える。The data processing device 1 includes a program input section 10 that receives and receives input of a source program 2;
a program analysis unit 11 that performs syntactic and semantic analysis of the source program 2 accepted by the program to generate a corresponding intermediate language; and an optimization unit that performs various optimization processes on the intermediate language output from the program analysis unit 11. conversion processing unit 12;
The code generation unit 13 generates and outputs an object program 3 corresponding to the intermediate language string optimized by the optimization processing unit 12.
この最適化処理部12は、その最適化処理の1つとして
、複数の配列の持つ有効な配列要素の総和を算出する演
算記述がソースプログラム2に記述されているか否かを
検出する演算パターン検出部14と、演算パターン検出
部14が該当の演算記述を検出するときに、その演算記
述に記述される配列の持つ有効な配列要素を配列要素対
応に累積加算するベクトル加算命令列と、このベクトル
加算命令列により求められる累積加算値の総和値を算出
するベクトル総和命令とからなるベクトル命令列の中間
言語を生成するベクトル命令列生成部15とを備える。As one of its optimization processes, the optimization processing unit 12 detects an operation pattern to detect whether or not an operation description for calculating the sum of valid array elements of a plurality of arrays is written in the source program 2. section 14, a vector addition instruction sequence for cumulatively adding valid array elements of the array described in the operation description corresponding to the array elements when the operation pattern detection section 14 detects the corresponding operation description, and this vector. It includes a vector instruction string generation unit 15 that generates an intermediate language of a vector instruction string including a vector summation instruction for calculating the sum value of cumulative addition values determined by the addition instruction string.
〔作用]
本発明では、演算パターン検出部14が、ソースプログ
ラム2に記述される複数の配列の持つを効な配列要素の
総和を算出する演算記述を検出すると、ベクトル命令列
生成部15は、検出された演算記述に記述される配列の
持つ有効な配列要素を配列要素対応に累積加算するベク
トル加算命令列と、このベクトル加算命令列により求め
られる累積加算値の総和値を算出するベクトル総和命令
とからなるベクトル命令列の中間言語を生成することで
、検出された演算記述の持つ演算値を算出していくベク
トル命令列の中間言語を生成する。[Operation] In the present invention, when the operation pattern detection unit 14 detects an operation description that calculates the sum of effective array elements of a plurality of arrays described in the source program 2, the vector instruction sequence generation unit 15 performs the following operations. A vector addition instruction sequence that cumulatively adds the valid array elements of the array described in the detected operation description for each array element, and a vector summation instruction that calculates the sum of the cumulative addition values determined by this vector addition instruction sequence. By generating an intermediate language for a vector instruction sequence consisting of the following, an intermediate language for a vector instruction sequence that calculates the operation value of the detected operation description is generated.
そして、コード生成部13は、このベクトル命令列生成
部15の処理を受けて、その生成されたベクトル命令列
に対応するコード列をオブジェクトプログラム3に展開
していくよう処理する。Then, the code generation unit 13 receives the processing of the vector instruction sequence generation unit 15 and performs processing to expand the code sequence corresponding to the generated vector instruction sequence into the object program 3.
このようにして、本発明によれば、ソースプログラム2
中に複数の配列の持つ有効な配列要素の総和を算出する
演算記述がある場合に、その演算記述の演算値の算出の
ために、従来技術のように、配列の個数分のベクトル総
和命令を生成していくのではなくて、1つのベクトル総
和命令を生成していくだけで足りることから、プログラ
ムの実行時間を大幅に短縮できるようになる。In this way, according to the invention, source program 2
If there is an operation description that calculates the sum of valid array elements of multiple arrays, as in the prior art, vector summation instructions for the number of arrays are executed to calculate the operation value of the operation description. Since it is sufficient to generate one vector summation instruction instead of generating multiple vector summation instructions, the program execution time can be significantly reduced.
以下、実施例に従って本発明の詳細な説明する。 Hereinafter, the present invention will be explained in detail according to examples.
第1図でも説明したように、本発明を実装するコンパイ
ラでは、ソースプログラム2中に複数の配列の持つ有効
な配列要素の総和を算出する演算記述がある場合、ベク
トル加算命令に従って、各配列の持つ有効な配列要素を
配列要素対応に累積加算し、ベクトル総和命令に従って
、この算出される累積加算値の総和値を算出していくこ
とで、この演算記述のコンパイル処理を実行していく構
成を採るものである。As explained in FIG. 1, when a compiler that implements the present invention has an operation description that calculates the sum of valid array elements of multiple arrays in the source program 2, the compiler implements the present invention. We have a configuration that executes the compilation process of this operation description by cumulatively adding the valid array elements corresponding to the array elements and calculating the sum of the calculated cumulative addition values according to the vector summation instruction. It is something to be taken.
例えば、ソースプログラム2中に、第4図に示すような
演算記述がある場合、本発明のコンパイラでは、第2図
に示すように、各配列毎に、その配列を第3オペランド
とし、これまでに出現した配列の持つ有効な配列要素の
配列要素対応の累積加算値を格納する変数VT(但し、
配列要素の初期値としてはゼロ値が設定される)を第2
オペランドとし、この第2オペランドの変数VTを第1
オペランドとして、第2オペランドの配列と第3オペラ
ンドの配列とを配列要素対応に加算して第1オペランド
の配列に代入していくという下記のベクトル加算命令(
VADD)
VADD VT、VT、A、、M。For example, if the source program 2 has an operation description as shown in Figure 4, the compiler of the present invention uses that array as the third operand for each array, as shown in Figure 2. A variable VT that stores the cumulative addition value corresponding to the array elements of the valid array elements of the array that appeared in (however,
The initial value of the array element is set to zero) as the second
The variable VT of this second operand is the first operand.
As operands, the following vector addition instruction (
VADD) VADD VT, VT, A,,M.
を生成していくことで、ソースプログラム2に記述され
る演算記述の配列の持つ有効な配列要素の配列要素対応
の累積加算値を算出して、変数VTに格納するベクトル
命令列を生成する。そして、最後に、この変数VTに格
納される配列を第2オペランドとし、第3オペランドを
空とし、変数Tを第1オペランドとして、第2オペラン
ドの配列の総和を求めて、その結果を第1オペランドの
変数に代入していくという下記のベクトル総和命令(V
SUM)
VSUM T、VT、φ
を生成していくことで、上記のベクトル命令列により生
成された累積加算値を配列要素として持つ配列の総和値
を算出して、変数Tに格納するベクトル命令を生成する
のである。By generating , the cumulative addition value corresponding to the array elements of the valid array elements of the array of arithmetic descriptions written in the source program 2 is calculated, and a vector instruction sequence to be stored in the variable VT is generated. Finally, set the array stored in this variable VT as the second operand, leave the third operand empty, set the variable T as the first operand, calculate the sum of the arrays of the second operand, and use the result as the first operand. The following vector summation instruction (V
SUM) By generating VSUM T, VT, φ, calculate the sum value of the array that has the cumulative addition values generated by the above vector instruction sequence as array elements, and then write the vector instruction to be stored in the variable T. It generates.
第3図に、計算機で実行されるこのコンパイル結果の命
令列を図示する。FIG. 3 illustrates the instruction sequence resulting from this compilation executed by the computer.
第3図と第5図とを比較すれば明らかなように、ソース
プログラム2中に複数の配列の持つ有効な配列要素の総
和を算出する演算記述が記述されている場合、従来のコ
ンパイラを用いると、演算対象とされる配列の個数が(
n+1)個であるならば、(n+1)個のベクトル総和
命令と、(n+1)個のスカラ加算命令とを生成してい
たのに対して、本発明のコンパイラを用いると、1個の
ベクトル総和命令と、(n+1)個のベクトル加算命令
とを生成すれば足りることになる。As is clear from a comparison between Figures 3 and 5, when source program 2 contains an operation description that calculates the sum of valid array elements of multiple arrays, a conventional compiler is used. , the number of arrays to be operated on is (
n+1), it would generate (n+1) vector summation instructions and (n+1) scalar addition instructions; however, with the compiler of the present invention, one vector summation instruction would be generated. It is sufficient to generate the instruction and (n+1) vector addition instructions.
このように、本発明を用いることで、オブジェクトプロ
グラム3中に展開されるベクトル総和命令の個数を大き
く削減できるようになる。In this way, by using the present invention, the number of vector summation instructions developed in the object program 3 can be greatly reduced.
〔発明の効果]
以上説明したように、本発明によれば、ソースプログラ
ム中に複数の配列の持つ有効な配列要素の総和を算出す
る演算記述がある場合に、その演算記述の演算値の算出
のために必要となるベクトル総和命令の生成個数を大き
く削減できるようになり、これにより、プログラムの実
行時間を大幅に短縮できるようになる。[Effects of the Invention] As explained above, according to the present invention, when there is an operation description in a source program that calculates the sum of valid array elements of a plurality of arrays, it is possible to calculate the operation value of the operation description. The number of vector summation instructions required to be generated can be greatly reduced, and thus the program execution time can be significantly reduced.
第1図は本発明の原理構成図、
第2図及び第3図は本発明のコンパイル処理の説明図、
第4図はソースプログラムの演算記述の説明図第5図及
び第6図は従来のコンパイル処理の説明図である。
図中、1はデータ処理装置、2はソースプログラム、3
はオブジェクトプログラム、IOはプログラム入力部、
11はプログラム解析部、12は最適化処理部、13は
コード生成部、14は演算パターン検出部、15はベク
トル命令列生成部である。Fig. 1 is a diagram showing the principle configuration of the present invention, Figs. 2 and 3 are explanatory diagrams of the compiling process of the present invention, Fig. 4 is an explanatory diagram of the calculation description of the source program, and Figs. 5 and 6 are diagrams of the conventional It is an explanatory diagram of compilation processing. In the figure, 1 is a data processing device, 2 is a source program, and 3 is a data processing device.
is the object program, IO is the program input section,
11 is a program analysis section, 12 is an optimization processing section, 13 is a code generation section, 14 is an operation pattern detection section, and 15 is a vector instruction string generation section.
Claims (1)
るオブジェクトプログラムを生成して出力するコンパイ
ル処理方式において、 複数の配列の持つ有効な配列要素の総和を算出する演算
記述が、ソースプログラムに記述されているか否かを検
出する演算パターン検出部(14)と、該演算パターン
検出部(14)が該当の演算記述を検出するときに、該
演算記述に記述される配列の持つ有効な配列要素を配列
要素対応に累積加算するベクトル加算命令列と、該ベク
トル加算命令列により求められる累積加算値の総和値を
算出するベクトル総和命令とからなるベクトル命令列を
生成していくことで、検出された演算記述の持つ演算値
を算出するベクトル命令列を生成するベクトル命令列生
成部(15)とを備え、 該ベクトル命令列生成部(15)により生成されたベク
トル命令に従って、ソースプログラムを対応のオブジェ
クトプログラムにコンパイルしていくよう処理すること
を、 特徴とするコンパイル処理方式。[Claims] In a compilation processing method that executes compilation processing to generate and output an object program corresponding to a source program, an operation description for calculating the sum of valid array elements of a plurality of arrays is provided in the source program. An arithmetic pattern detection unit (14) detects whether or not it is described in a program, and when the arithmetic pattern detection unit (14) detects a corresponding arithmetic description, the validity of the array described in the arithmetic description is determined. By generating a vector instruction sequence consisting of a vector addition instruction sequence that cumulatively adds array elements corresponding to the array elements, and a vector summation instruction that calculates the sum of the cumulative addition values determined by the vector addition instruction sequence. , a vector instruction string generation unit (15) that generates a vector instruction sequence for calculating the calculation value of the detected operation description, and according to the vector instruction generated by the vector instruction sequence generation unit (15), a source program is generated. A compilation processing method characterized by processing in such a way as to compile a corresponding object program into a corresponding object program.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP27755090A JPH04152464A (en) | 1990-10-16 | 1990-10-16 | Compile processing system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP27755090A JPH04152464A (en) | 1990-10-16 | 1990-10-16 | Compile processing system |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH04152464A true JPH04152464A (en) | 1992-05-26 |
Family
ID=17585097
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP27755090A Pending JPH04152464A (en) | 1990-10-16 | 1990-10-16 | Compile processing system |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH04152464A (en) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS60167062A (en) * | 1984-02-08 | 1985-08-30 | Fujitsu Ltd | Inner-vector product operation system |
-
1990
- 1990-10-16 JP JP27755090A patent/JPH04152464A/en active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS60167062A (en) * | 1984-02-08 | 1985-08-30 | Fujitsu Ltd | Inner-vector product operation system |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Click | Global code motion/global value numbering | |
Dubey et al. | Single-program speculative multithreading (SPSM) architecture: compiler-assisted fine-grained multithreading. | |
JPH06324881A (en) | Compiler device with superposition deciding function of memory data | |
Ishihara et al. | Development and implementation of an interactive parallelization assistance tool for OpenMP: iPat/OMP | |
JPH07110800A (en) | Optimized parallel compiling device and optimized parallel compiling method | |
Pancake | Multithreaded languages for scientific and technical computing | |
JPH04152464A (en) | Compile processing system | |
Rapaport et al. | Streamlining whole function vectorization in C using higher order vector semantics | |
Foley et al. | Efficient partitioning of fragment shaders for multiple-output hardware | |
JP2009265708A (en) | Compiler and code generation method thereof | |
Browne et al. | Visual programming and parallel computing | |
Song et al. | What can we gain by unfolding loops? | |
Yang et al. | A model of parallelizing compiler on multithreading operating systems | |
Chandraiah et al. | Designer-controlled generation of parallel and flexible heterogeneous MPSoC specification | |
JP2701246B2 (en) | Compiler vectorization method | |
Mueller et al. | Formal methods of microcode verification and synthesis | |
Eigenmann et al. | Parallelizing and vectorizing compilers | |
JP2865694B2 (en) | Compilation method | |
Kim et al. | A scheme to extract run-time parallelism form sequential loops | |
Johnstone et al. | Reverse compilation for Digital Signal Processors: a working example | |
JPH0512752B2 (en) | ||
JP2870218B2 (en) | Parallel execution instruction sequence generation method | |
JPS6186844A (en) | Shift system for sequential instruction | |
Hatcher | Guest Editor's Introduction: The Impact of High Performance Fortran | |
Koseki et al. | A global code scheduling technique using guarded PDG |