JP3921722B2 - コンパイラ処理装置 - Google Patents

コンパイラ処理装置 Download PDF

Info

Publication number
JP3921722B2
JP3921722B2 JP01230397A JP1230397A JP3921722B2 JP 3921722 B2 JP3921722 B2 JP 3921722B2 JP 01230397 A JP01230397 A JP 01230397A JP 1230397 A JP1230397 A JP 1230397A JP 3921722 B2 JP3921722 B2 JP 3921722B2
Authority
JP
Japan
Prior art keywords
initial value
initial values
program
storage method
work area
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.)
Expired - Lifetime
Application number
JP01230397A
Other languages
English (en)
Other versions
JPH10207715A (ja
Inventor
幸浩 木村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP01230397A priority Critical patent/JP3921722B2/ja
Publication of JPH10207715A publication Critical patent/JPH10207715A/ja
Application granted granted Critical
Publication of JP3921722B2 publication Critical patent/JP3921722B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、FORTRANなどコンパイラのDATA文(DATA宣言命令)の初期値をオブジェクト・プログラムに変換する技術に関する。
【0002】
【従来の技術】
FORTRANなどコンパイラのDATA文の初期値割り付けの方法には、従来、次のような二つの方法があった。
【0003】
その第一の方法(以下、一括保存法と呼ぶ)を、図11に示すようなプログラム例1をもとに説明する。同図(1)はその一例としてFORTRANプログラムの一部であるDATA文による初期値設定部分のソースプログラムを示しており、プログラム例1とするが、説明の便宜上、以降プログラム例に於ける初期値は、全て符号付4バイトとする。
【0004】
▲1▼の「INTEGER 」は整数の作業域(領域)確保のための宣言命令であり、▲2▼〜▲4▼の「DATA」は作業域への初期値設定のための宣言命令であり、▲5▼の「END 」は原始プログラムの終了命令を示している。
【0005】
同図( 2 )は当プログラム例1の初期値設定及び出力の過程を示したもので、先ず、▲1▼のINTEGER 命令により(1)に示す作業域が確保される。続いて▲2▼〜▲4▼のDATA命令により、それぞれ(2)、(3)を経て(4)の初期値設定がなされ、全ての初期値設定が終了する。
【0006】
しかし、この方法に於いては、図12に示す(1) のプログラム例2のような場合、即ち▲1▼のINTEGER 命令により10,000,000個分の作業域を確保し、▲2▼、▲3▼のDATA命令により、先頭の要素B(1)作業域に初期値「1 」を設定し、最後の要素B(10000000) 作業域に初期値「2 」をそれぞれ設定するような巨大配列( 変数) の場合には、(2) の初期値出力結果に示すように、その間の領域が無駄になる上、作業域を獲得するのに時間が掛かるという問題がある。更に、作業域を確保出来ずに、コンパイルを失敗してしまうケースさえ生ずることもある。尚、この一括保存法による初期値設定に於いて、図では省略・表現していないが、この初期値を管理するための管理ブロック(後述)が存在する。
【0007】
次に第二の方法(以下、分割保存法と呼ぶ)として、先ず初期値が与えられると、その初期値を設定管理するための管理ブロック(4バイト×5項目=20バイトの大きさ)を作成する。図13(1)はこの管理ブロックの内容と初期値設定作業域との関係を示したもので、管理ブロックの内容としては、「次の管理ブロックへのポインタ」、「初期値へのポインタ」、「初期値の割り付け位置」、「作業域の大きさ」、及び「初期値の繰返し回数」を記憶・保持しており、この「初期値へのポインタ」により初期値設定作業域(可変長)に連鎖されている。そして初期値が与えられる都度、即ち初期値の数だけ管理ブロックが作成され、これ等は割り付け位置順に前述の「管理ブロックへのポインタ」により連鎖されて初期値を管理するものである。但し、同じ値の初期値が連続する時は、前述の管理ブロックの「初期値の繰返し回数」を所要数設定するだけで、一つの管理ブロックにより初期値を管理することが出来る。(プログラム例4)
そして、これ等管理ブロックを参照しながら、割り付け位置順にオブジェクトプログラムを出力して完結する。
【0008】
図13(2)は先のプログラム例1について、この分割保存法により初期値出力した時の図であり、初期値の数の三個の管理ブロックが作成され、これ等は割り付け位置順(DATA文に現れた順番を位置順にソートしたもの)に「管理ブロックのポインタ」により連鎖されている。又、初期値「1 」、「2 」、「3 」は「初期値へのポインタ」により初期値設定作業域に連鎖され、設定・記憶されることを示している。
【0009】
しかし、この方法に於いては、初期値の数が多くなると、初期値を保存管理する管理ブロックが増加し、管理ブロックの作業域が大きくなる上、初期値が割り付け位置順に与えられていないようなケースでは、管理ブロックを割り付け位置順にソートする時間も増大し、強いてはコンパイル時間が長くなるという問題が生ずる。
【0010】
このように、DATA文の初期値設定方法には一括保存法と分割保存法とがあり、一括保存法では初期値が連続の作業域上に一括記憶・保存されるよう管理され管理ブロックは一つであるが、分割保存法では初期値が与えられる都度、初期値設定作業域とその管理ブロックが確保・設定されるため初期値が連続の作業域に設定されるとは限らず、初期値設定作業域と管理ブロックの数も基本的に複数となる。但し前述したように同じ値の初期値が連続する時は、管理ブロックの「初期値の繰返し回数」設定により、一つの管理ブロックで初期値を管理することが出来る。
【0011】
【発明が解決しようとする課題】
DATA文による初期値設定に際し、従来は前述の一括保存法に依るか分割保存法に依るか、システム(コンパイラ)によって固定化されている。従ってDATA文の初期値設定の構造に依っては、無駄な作業域が生じたり、作業域を獲得する時間が掛かり、又初期値の数が多くなると、その管理ブロックのための作業域が大きくなる上、初期値が割り付け位置順に与えられていないようなケースでは、管理ブロックを割り付け位置順にソートする時間も増大し、強いてはコンパイル時間が長くなるという問題があった。
【0012】
本発明はこのような点にかんがみて、システム内に複数の初期値設定手段を保持し、DATA文による初期値設定の構造に依って初期値設定手段を選択出来る手段を提供することを目的とする。
【0013】
【課題を解決するための手段】
上記の課題は下記の如くに構成されたコンパイラ処理装置によって解決される。
【0014】
図1は、本発明の構成図である。即ち、
コンピュータプログラムのコンパイラ処理装置に於いて、
初期値設定を表現する文を認識する認識手段と、該文の構造を解析する解析手段と、解析の結果により前記初期値の保存法を選択する保存法選択手段と、該保存法により初期値設定を実行、出力する初期値設定手段とを備えることにより、文の構造に即した初期値の保存法が選択可能となり、作業域の節減に繋がると同時に、より高速な初期値設定が実現出来る。
【0015】
【発明の実施の形態】
以下、DATA文の初期値設定の方法について、幾つかのFORTRANプログラムの例を使用して説明して行くが、その前段として図1を基に初期値設定の全体の流れを概略説明しておく。
【0016】
先ず、同図中の認識手段10 により(ソース)プログラム中の初期値設定を表現する文、即ち初期値を格納する主メモリ上の領域を確保する「INTEGER 」などの宣言命令と、それに続いて前記確保領域に、パラメータで与えられた初期値をセットする「DATA」宣言命令とを認識する。
【0017】
この認識された宣言命令(以下、単に命令と呼ぶ)のパラメータ構造を解析手段11により解析し、解析の結果、複数の初期値保存法、即ち一括保存法と分割保存法の何れの方法に依り初期値を設定・保存するか保存法選択手段12により選択される。
【0018】
そして選択された保存法により、実際の初期値設定が初期値設定手段13により実行、出力され、目的の初期値の設定が完了するというものである。
続いて、これ等処理を具体的なプログラム例を挙げて、どの様な場合に何れの方法を選択するのが有利かを説明し、本発明の構造を示すものとする。
【0019】
図2は、具体的なプログラム例を引用するに当たり、その一般形を示したものであり、▲1▼「INTEGER 」命令の直後のパラメータでは、確保する領域の名称とその大きさ20を指定する。尚、ここでは便宜上、「INTEGER 」命令で代表して説明するが、「REAL」命令など、その他同類の宣言命令でも同様である。
【0020】
又、▲2▼「DATA」命令のパラメータは、「/ 」で区切られた二つの項目から成っており、前項目は「INTEGER 」命令で確保された領域の位置を表現するもので、第一パラメータ21と呼び、後項目は設定する初期値を表現するもので、第二パラメータ22と呼ぶこととする。
【0021】
図3のプログラム例2( 従来の技術の項で引用) は、B 領域のB(1)位置へ初期値「1 」を設定し、B(10000000) 位置へ初期値「2 」を設定するものである。これを一括保存法で初期値設定した場合には、管理ブロックは1 個であるが、初期値設定作業域のB(1)領域とB(10000000) 領域以外はムダな領域となる。又、これを分割保存法で初期値設定した場合には、管理ブロックは2 個となるが、初期値設定作業域は4 バイトの領域が2 個で済む。従ってプログラム例2のような巨大変数の場合には分割保存法で初期値設定するのが、領域上も処理速度上も得策といえる。
【0022】
図4 のプログラム例3 は、マトリックス形式で「2000×2000」の要素をとり、第一パラメータによりC(I,I)の「I 」を「1 」から「2000」まで「2 」増分(1つ置き) しながら、第二パラメータにより「1000」個の要素C(I,I)に初期値「1 」を設定するものである。これを一括保存法で初期値設定した場合には、管理ブロックは1 個であり、初期値設定作業域には1 つ置きに初期値「1 」が設定されるが、膨大な領域を必要とする。これを分割保存法で初期値設定した場合には、管理ブロック1000個に対して各々4 バイトの初期値設定作業域が必要となるが、前者に比べ必要とする領域は少なくて済む。
【0023】
この様に、巨大変数又はマトリックス形式の変数のような、経験値Nに比べて膨大な領域を必要とするプログラムに於いては、分割保存法を採用した方が有利であると言える。
【0024】
図5 のプログラム例4 は、D(20000)から成る各要素に同じ値の初期値「1 」を連続的に設定するものである。これを一括保存法で初期値設定した場合には、管理ブロックは1 個であり、初期値設定作業域には連続的に初期値「1 」が設定されるが、これを分割保存法で初期値設定した場合には、前述した分割保存法の特例とも言うべき、同じ値の初期値を連続的な割付け位置に設定する場合には管理ブロック上の「初期値の繰返し回数」欄を「20000 」までカウントアップし、管理ブロックと初期値設定作業域は新たに作成せず、それぞれ1 個の管理ブロックと初期値設定作業域で初期値設定が可能である。従って当ケースのようなプログラムでは分割保存法が有利である。
【0025】
図6 のプログラム例5 は、E(20000)の各要素順に、異なった初期値「1 」、「2 」、・・・・、「19999 」、「20000 」を設定するものである。これを一括保存法で初期値設定した場合には、管理ブロックは1 個であり、初期値設定作業域の割付け位置順にE(1)からE(20000)に、初期値「1 」から「20000 」が設定される。これを分割保存法で初期値設定した場合には、初期値の数、即ち「20000 」個の膨大な管理ブロックが必要となり、異なった初期値が経験値Mより多い場合には使用領域のみならず、管理ブロックのチェーン処理など処理時間上も一括保存法の方が有利である。
【0026】
図7 のプログラム例6 は、第一パラメータによりF(I)の「I 」を「1 」から「20000 」まで「2 」増分(1つ置き) しながら、第二パラメータにより「10000 」個の要素F(I)に初期値「1 」を設定するものである。これを一括保存法で初期値設定した場合には、管理ブロックは1 個であり、初期値設定作業域には1 つ置きに初期値「1 」が設定されが、これを分割保存法で初期値設定した場合には、管理ブロック10000 個に対して各々4 バイトの初期値設定作業域が必要となり、前者に比べ領域は大きくなる。従って、この様なDO型並び( 第一パラメータによる範囲内繰返し動作指示) の増分値指定により非連続的に初期値設定を行い、且つ初期値設定の要素個数が経験値Pより多い場合には一括保存法が有利である。
【0027】
以上、幾つかの具体的なプログラム例を挙げて、一括保存法と分割保存法による初期値設定の優劣を、主に占有する作業域の側面から説明してきたが、これ等状況を纏めたものが図8 である。同図は、前述の各プログラム例毎に「管理ブロックの数」、「管理ブロックの大きさ」、「初期値設定作業域の大きさ」、そして両者を加えた「合計作業域の大きさ」を一括保存法と分割保存法について比較した表である。尚、同表中の領域の大きさの単位はバイト数である。
【0028】
プログラム例2 、プログラム例3 は経験値Nに対して巨大変数である例であり、この様なプログラムでは分割保存法で処理するのが得策である。プログラム例4 は同じ値の初期値を連続的な割付け位置に設定するもので、同じく分割保存法で処理するのが得策である。プログラム例5 は経験値Mに対して異なった初期値の数が多いプログラムであり、この様なプログラムでは一括保存法で処理するのが得策である。次のプログラム例6 は、同一の初期値を非連続的な要素位置に設定し、且つ経験値Pに対して初期値設定の要素個数が多いプログラムであり、この様なプログラムも一括保存法で処理するのが得策である。
【0029】
以上の様に本発明の構造は、システム内に一括保存法と分割保存法の複数の初期値設定手段を保持し、DATA文による初期値設定の構造を経験値N、M、P等により解析し、適切な初期値設定手段を選択出来るように構成されている。
【0030】
続いて、これ等の処理手順について図9、図10により順次説明する。図9はソースプログラムに於ける命令の解析と、それに伴う保存法の選択に関するフローチャートであり、先ずステップ50に於いて、一括保存法選択を示すフラグを初期設定としてOFF にセットして置き、ステップ51で「INTEGER 」などの宣言命令から、変数の使用する作業域の大きさSを算出する。
【0031】
次にステップ52で、この算出されたSが、メモリに記憶された従来からの経験値Nより大きいか判別され、大きい場合には分割保存法による処理が行われ、否の場合にはステップ53で「DATA」などの宣言命令に於ける第二パラメータの内容が解読され、異なった初期値の数Xが求められる。このXが、メモリに記憶された従来からの経験値Mより大きいかステップ54で判別され、大きい場合には一括保存法による準備処理に移り、否の場合にはステップ55により、第一、第二パラメータの内容解読の結果、初期値割付け構造が増分値指定などにより不連続で、且つ初期値設定位置の要素個数が、メモリに記憶された従来からの経験値Pより大きいか判別され、大きい場合には一括保存法による準備処理に移り、否の場合には分割保存法による処理が行われる。
【0032】
前記ステップ54、ステップ55に於いて、一括保存法による準備処理に入った場合には、ステップ56で一括保存法選択を示すフラグをONにセットし、ステップ57に於いて一括保存法の管理ブロックを作成すると同時に、作業域を確保する。
【0033】
この様にして一括保存法と分割保存法の何れによる処理か選択されたら、次に各保存法による初期値設定作業が図10に示す様なフローチャートの手順に従って実行される。
【0034】
先ず、ステップ60で初期値を一つ取得し、ステップ61で一括保存法フラグがONか判別され、一括保存法の場合( フラグON) には、当該要素割り付け位置に初期値を設定した後、次の初期値処理であるステップ66に移る。一方、分割保存法の場合( フラグOFF)にはステップ62に於いて、同じ値の初期値を連続的な割付け位置に設定するプログラムであるかを判別( 既存管理ブロックの初期値と同一かを判別) し、YES の場合にはステップ64にて、管理ブロックの「初期値の繰返回数」をカウントアップして次の初期値処理であるステップ66に移る。又、否の場合にはステップ63に於いて新規管理ブロックと作業域を確保・作成し初期値設定した後、次の初期値処理であるステップ66に移る。そしてステップ66で初期値設定が終了でなければ、ステップ60へ戻り新たな初期値を取得し、同様の処理を繰り返すことにより、順次初期値を設定して行くものである。
【0035】
尚、本発明に関する説明では、プログラム言語として「FORTRAN」を例に述べてきたが、その他の言語、例えばPL/1などに於いても共有出来るものである。
【0036】
【発明の効果】
以上の説明から明らかなように本発明によれば、システム内に複数の初期値設定手段を保持し、DATA文による初期値設定の構造に依って初期値設定手段が選択出来ることにより、より少ない作業域で、しかも高速にDATA文の初期値設定が可能となり、強いてはコンパイル時間も短く出来るという著しい工業的効果がある。
【図面の簡単な説明】
【図1】 本発明の構成図
【図2】 命令の一般形の説明
【図3】 プログラム例2の保存法比較
【図4】 プログラム例3の保存法比較
【図5】 プログラム例4の保存法比較
【図6】 プログラム例5の保存法比較
【図7】 プログラム例6 の保存法比較
【図8】 各プログラム例の保存法比較表
【図9】 命令の解析と保存法選択のフローチャート
【図10】保存法の実行フローチャート
【図11】従来のDATA文の初期値出力方法( その1) 説明図
【図12】初期値出力方法( その1) の問題点
【図13】従来のDATA文の初期値出力方法( その2) 説明図
【符号の説明】
10 認識手段
11 解析手段
12 保存法選択手段
13 初期値設定手段
20 領域名と領域の大きさ
21 領域の位置( 第一パラメータ)
22 初期値( 第二パラメータ)

Claims (3)

  1. ソースプログラムに記述されたコンピュータへの指示を定義する命令文の列から、コンピュータが解釈実行できる命令語の列であるオブジェクトプログラムを生成するコンパイラ処理装置に於いて、
    前記オブジェクトプログラムがコンピュータにより実行される際に使用するメモリ領域である変数領域を確保し前記確保した変数領域に初期値を設定して前記オブジェクトプログラムを出力する旨を前記コンパイラ装置に指示する宣言命令文を、前記ソースプログラムの中から検出して認識する認識手段と、
    前記宣言命令文の定義に基づいて、前記変数領域に設定する1以上の初期値の設定構造を解析する解析手段と、
    前記宣言命令文の定義に対応して、前記解析手段による解析結果を基に、前記変数領域に設定する1以上の初期値を一括して1個の連続した作業領域に格納して保存する一括保存法と、前記変数領域に設定する1以上の初期値に対して、1個の初期値毎に1個の管理ブロックに管理される1個の作業領域を割り当てて前記1以上の初期値を前記作業領域の各々へ分割格納して保存する分割保存法とのいずれかの保存法を、前記作業領域の総量が小さくなるように選択する保存法選択手段と、
    前記宣言命令文に対応して、前記保存法選択手段により選択された保存法により前記1以上の初期値を前記作業領域に保存し、前記作業領域に保存された前記1以上の初期値を前記変数領域に設定して前記オブジェクトプログラムを出力する初期値設定手段と、
    を備えたことを特徴とするコンパイラ処理装置。
  2. 前記解析手段による前記1以上の初期値の設定構造の解析は、前記宣言命令文で定義される変数領域の大きさ、前記1以上の初期値の数、前記1以上の初期値の連続性、及び、前記変数領域に対する設定位置の数を基に行う
    ことを特徴とする請求項1に記載のコンパイラ処理装置。
  3. 前記ソースプログラムはFORTRANプログラムであり、
    前記宣言命令文は初期値指定のある型宣言文、および、DATA文である
    ことを特徴とする請求項1又は請求項2に記載のコンパイラ処理装置。
JP01230397A 1997-01-27 1997-01-27 コンパイラ処理装置 Expired - Lifetime JP3921722B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP01230397A JP3921722B2 (ja) 1997-01-27 1997-01-27 コンパイラ処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP01230397A JP3921722B2 (ja) 1997-01-27 1997-01-27 コンパイラ処理装置

Publications (2)

Publication Number Publication Date
JPH10207715A JPH10207715A (ja) 1998-08-07
JP3921722B2 true JP3921722B2 (ja) 2007-05-30

Family

ID=11801565

Family Applications (1)

Application Number Title Priority Date Filing Date
JP01230397A Expired - Lifetime JP3921722B2 (ja) 1997-01-27 1997-01-27 コンパイラ処理装置

Country Status (1)

Country Link
JP (1) JP3921722B2 (ja)

Also Published As

Publication number Publication date
JPH10207715A (ja) 1998-08-07

Similar Documents

Publication Publication Date Title
EP2062175B1 (en) Hardware definition language generation for frame-based processing
US5920723A (en) Compiler with inter-modular procedure optimization
JP3032031B2 (ja) ループ最適化方法及び装置
US8359586B1 (en) Code generation
DE69722138T2 (de) Code-Optimierer für Pipeline-Rechner
US8527971B2 (en) Parallel program generation method
US20060206869A1 (en) Methods and systems for developing data flow programs
US7331037B2 (en) Static memory allocation in a graphical programming system
JPH06250846A (ja) コンパイル装置
WO1990001738A1 (en) Machine process for translating programs in binary machine language into another binary machine language
JPH06103463B2 (ja) コード生成方法
US20020083423A1 (en) List scheduling algorithm for a cycle-driven instruction scheduler
US5964861A (en) Method for writing a program to control processors using any instructions selected from original instructions and defining the instructions used as a new instruction set
JP2006154971A (ja) プログラム変換装置、プログラム変換実行装置およびプログラム変換方法、プログラム変換実行方法。
KR20140131200A (ko) 멀티스레드 프로그램 코드의 변환 장치 및 방법
JP3921722B2 (ja) コンパイラ処理装置
US5848262A (en) Simulating digital systems by using vector processing
CN115983378A (zh) 一种机器学习操作***内核的自动化编译方法
JPS62217325A (ja) アセンブラコ−ド最適化方式
JPH03135630A (ja) 命令スケジューリング方式
JPH06230804A (ja) プログラム作成装置
US9304770B2 (en) Method and system adapted for converting software constructs into resources for implementation by a dynamically reconfigurable processor
JPH04307624A (ja) ループ最適化方法及び装置
JP2004021425A (ja) コンパイラにおけるメモリ配置方式
JP3464019B2 (ja) レジスタの割付方式

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060707

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060718

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060912

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061010

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061122

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070212

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100302

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110302

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110302

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120302

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130302

Year of fee payment: 6