JPH11232118A - 一括関数呼出化方法 - Google Patents
一括関数呼出化方法Info
- Publication number
- JPH11232118A JPH11232118A JP3441798A JP3441798A JPH11232118A JP H11232118 A JPH11232118 A JP H11232118A JP 3441798 A JP3441798 A JP 3441798A JP 3441798 A JP3441798 A JP 3441798A JP H11232118 A JPH11232118 A JP H11232118A
- Authority
- JP
- Japan
- Prior art keywords
- function
- call
- batch
- collective
- information
- 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
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
としてインライン展開がある。しかし、インライン展開
の適用により関数呼出をなくすことができても、キャッ
シュミスの機会が増える等の理由により、適用できない
場合がある。インライン展開処理が適用できないとき、
関数呼出オーバヘッドを削減する手段がなく処理性能の
向上の妨げとなっている。インライン展開が適用できな
い場合にも、呼出オーバヘッドの削減を行い、オブジェ
クトプログラムの処理性能の向上を図ることが可能な一
括関数呼出化方法を提供することを目的としている。 【解決手段】 複数回の同一関数の処理を一度に実行す
る一括関数を生成し、複数回の同一関数の呼出を、1回
の一括関数の呼出に置き換える一括化呼出生成手段を設
けたことを特徴としている。これにより、インライン展
開によらない呼出オーバヘッドの削減手段を設けること
ができる。
Description
ログラム変換技術に係わり、特に、関数呼出機構を持つ
言語に対して、関数および関数呼出の関係を解析して関
数情報および呼出情報として生成するプログラム変換の
際の一括関数呼出化方法に関する。
数(手続きとも呼ばれるが、以降では関数で統一する)
による構造化を行うのが一般的である。関数は、一連の
処理をまとめてパラメータ化して記述したもの(以下、
これを関数定義と呼ぶ)で、それを呼出す(以下単に呼
出と呼ぶ)ことにより関数定義内の処理を実現できる。
関数定義側のパラメータには、仮引数、返却変数(以
下、仮返数と呼ぶ)があり、関数定義内の記述では、仮
引数・仮返数(以下、仮パラメータと呼ぶ)を使って処
理を記述する。呼出側のパラメータには、実引数、返却
変数(以下、実返数と呼ぶ)があり、呼出側の変数/式
を使ってパラメータの指定を行う(この呼出インタフェ
ースとなる変数/式を実パラメータと呼ぶ)。尚、以下
では、仮パラメータと実パラメータを総称して、インタ
フェース変数/式と呼ぶ。実パラメータには様々な値を
指定することが可能で、これにより同様の処理(=関数
定義)を繰り返し実行することができる。
な機構である一方で、呼出時にオーバヘッドがかかると
いう問題点を抱えている。即ち、引数の受け渡しや、呼
出時のスタックポインタの更新/退避回復、命令ジャン
プに伴うキャッシュミスの可能性の増大といったことに
より、処理性能の低下を招く。特に、処理内容が簡単な
関数を反復呼出する場合には、呼出オーバヘッドは性能
上無視できないものとなる。
では、インライン展開の機能を備えている場合が多い。
インライン展開は、関数呼出を関数の定義本体の内容で
置き換え、呼出を抑止するものである。具体的には、各
呼出点で、関数定義の内容を展開し、仮パラメータを実
パラメータで置き換えることにより実現する。インライ
ン展開に関しては、佐々 政孝著岩波講座ソフトウェア
科学5「プログラミング言語処理系」( 岩波書店、1
989)のpp.450―451に詳しい。
級言語における呼出オーバヘッド削減のほとんど唯一の
手段である。しかし、インライン展開の適用によりコー
ドサイズが大きくなり過ぎると、キャッシュミスの機会
が増え、かえって性能が低下する場合もある。そのた
め、大きな関数の呼出や、呼出個所が多い場合には、イ
ンライン展開を制限するのが普通である。即ち、コード
量の極端な増加を伴う場合には、インライン展開による
呼出オーバヘッドの削減は行うことができない。すなわ
ち、従来技術においては、インライン展開が適用できな
い場合に、呼出オーバヘッドの削減を行う手段がないと
いう課題があった。本発明の目的は、インライン展開に
よらない呼出オーバヘッドの削減手段を設けることによ
り、インライン展開が適用できない場合にも、呼出オー
バヘッドの削減を行い、オブジェクトプログラムの処理
性能の向上を図ることが可能な一括関数呼出化方法を提
供することにある。
出点で関数定義の処理内容を展開し、(その呼出点で
の)呼出を除去する。従って、インライン展開の適用の
有無は、各呼出点の呼出回数を0とするか否かを判断す
ることになる。複数回の同一関数の呼出の場合、インラ
イン展開が適用できない場合でも、関数定義側に複数呼
出分の処理を展開すれば、コードサイズを極端に増大さ
せることなく、呼出回数を削減することが可能である。
即ち、複数回の同一関数の処理を一度に実行する一括関
数を生成し、複数回の同一関数の呼出を、1回の一括関
数の呼出に置き換える一括化呼出生成手段を設けること
で、インライン展開によらない呼出オーバヘッドの削減
手段を設けることができる。これにより、インライン展
開が適用できない場合にも、呼出オーバヘッドの削減を
行うことが可能となり、オブジェクトプログラムの処理
性能の向上に寄与する。
しを、一括処理する一括関数の呼び出しに変換する方式
に関するものである。以下では、本発明の1実施例を図
面を用いて説明する。尚、本発明は、ソースプログラム
から変換後のソースプログラムを生成する場合にも、コ
ンパイラが中間語から変換後の中間語に変換する場合に
も、同様に適用可能であるが、実施例としてコンパイラ
に適用した場合(但し、中間語は同等なソースプログラ
ムの形式で示す)を説明することにする。
るコンパイラが動作する計算機システムの構成図であ
る。計算機システムは、CPU101、ディスプレイ装
置102、キーボード103、主記憶装置104、外部
記憶装置105より構成されている。キーボード103
より、ユーザからのコンパイラ起動命令を受け付ける。
コンパイラ終了メッセージや、エラーメッセージは、デ
ィスプレイ装置102に表示される。外部記憶装置10
5には、ソースプログラム106とオブジェクトプログ
ラム107が格納される。主記憶装置104には、コン
パイラ108があり、コンパイル過程で必要となる中間
語3、関数情報テーブル4、呼出情報テーブル5、一括
呼出情報テーブル6、一括関数情報テーブル7が格納さ
れる。コンパイル処理は、CPU101によって、制御
される。
示す。構文解析201では、ソースプログラム106を
入力として字句構文解析を行ない、中間語3を出力す
る。ループ展開処理202は中間後3を入力とし、反復
処理を展開して反復回数を低減するループ展開を行い、
中間語3を出力する。一括関数化処理2は、中間語3を
入力とし、複数の関数呼び出しを一括命令関数呼び出し
に変換する一括関数化処理を行ない、中間語3を出力す
る。コード生成処理203は、中間語を最終的なオブジ
ェクトプログラム107の形式に変換する。尚、ループ
展開202は、本発明の適用機会を増やすため望ましい
処理であるが、必須の処理ではない。
法の1実施例を示すフローチャート図であり、図2の関
数呼出一括化処理2の手順を表している。先ず、関数情
報テーブル生成処理21により、ソースプログラム中の
関数定義の各種情報を抽出し、関数情報テーブル4を作
成する。同様に、呼出情報テーブル生成処理22によ
り、関数呼出に関する情報を抽出し、呼出情報テーブル
5を生成する。
により、呼出情報テーブル5から複数の同一関数呼出を
一括処理する一括関数に関する情報を抽出し、一括関数
情報テーブル6を生成する。この一括呼出情報テーブル
生成処理23は、同一関数呼出に関する情報を抽出する
同型呼出抽出処理230と、同型呼出集合から一括呼出
化可能な呼出を抽出する一括呼出抽出処理231、抽出
した一括呼出を一括呼出情報テーブルに登録する一括呼
出情報テーブル登録処理232からなる。各処理に関し
ては図17から図23で詳しく述べる。
関数情報テーブル7に基づき、中間後3に一括関数を生
成する。最後に、一括呼出化変換処理25により、一括
呼出情報テーブル6に基づき、中間語3中の関数呼出を
一括関数呼出に変換する。
処理と、入出力となる中間語やテーブル類の関係を示し
た処理構成図である。但し、中間語3は全般的に参照す
るため入出力関係は、主要なもののみを示した。関数情
報テーブル生成処理21は、一括関数呼出化前中間語3
1を入力とし、関数定義の情報を格納した関数情報テー
ブル4を生成する。関数情報テーブル4は、関数の一覧
を格納する関数テーブル41と、関数のインタフェース
となる仮引数および仮返数の情報を格納する仮パラメー
タテーブル42から成る。呼出情報テーブル生成処理2
2は、一括呼出化前中間語31を入力とし、関数呼出の
情報を格納した呼出情報テーブル5を生成する。呼出情
報テーブル5は、関数呼出の一覧を格納する呼出テーブ
ル51と、関数呼出のインタフェースとなる実引数およ
び実返数の情報を格納する実パラメータテーブル52か
ら成る。
呼出情報テーブル5を入力とし、一括呼出化可能な関数
呼出の情報を格納した一括呼出情報テーブル6と、一括
呼出される関数定義の情報を格納した一括関数情報テー
ブル7を生成する。一括呼出情報テーブル6は、一括呼
出化可能な呼出の一覧を格納する一括呼出テーブル61
と、一括呼出のインタフェースとなる実引数および実返
数の情報を格納する実パラメータテーブル62から成
る。同様に、一括関数情報テーブル7は、一括呼出化さ
れる関数定義の一覧を格納する一括関数テーブル71
と、一括関数のインタフェースとなる仮引数および仮返
数の情報を格納する仮パラメータテーブル72から成
る。
間語31と一括関数情報テーブル7を入力とし、一括呼
出化後中間語32に一括関数を生成する。一括呼出化変
換処理25は、一括呼出化前中間語31と一括呼出情報
テーブル6を入力とし、一括呼出化前中間語31の関数
呼出を一括関数呼出に変換し、一括呼出化後中間語32
に生成する。
対象たるソースプログラムの例を挙げておく。図5は、
本発明の一実施例の説明のためのソースプログラム例
(C言語で書かれたプログラム例)である。本実施例に
おいて、中間語3はソースプログラムと同等の情報を有
しており特別に中間語の形式である必要はない。そこ
で、中間語3の例示に当たっては、ソースプログラムの
形式で記述するものとする。従って、図5はソースプロ
グラム例であるとともに、(一括呼出化前の)中間語3
1の例ともなっている。また、図2の説明でも述べたと
おり、本実施例では(本質的には不要な)ループ展開を
行っている。図5では、ループ展開は適用されていない
が、ループ展開後に同一関数の呼出が生成される場合に
も、一般性を失うことなく適用できる。図5のプログラ
ム例では、関数f、g、mainの3関数があり、関数
mainが関数gを1回、関数gが関数fを2回呼び出
している。17行と20行の関数fの呼出が、一括呼出
可能な関数である。
る一括関数呼出化後のソースプログラム例であり、一括
関数呼出化後中間語32に対応している。図6では、図
5にはなかった一括関数Fが新たに生成されている(3
0行から36行)。また、図5では関数gは関数fを2
回呼び出していたが、図6では一括関数Fの呼出1回
(16行)となっている。即ち、関数fの2回の呼出を
一括関数Fの一回の呼出に変換しており、一括呼出化変
換を行った結果の例である。
説明を行なう。説明にあたっては、図5の中間語を入力
例とし、各種テーブルの出力例を逐次示していく。そこ
で、先ず、各種テーブルの構成例を説明してから、処理
手順の説明を行なう。以下、関数情報テーブル4、呼出
情報テーブル5、一括呼出情報テーブル6、一括関数情
報テーブル7の順にその構成例を述べる。
ブル41の構成例である。関数テーブルは、プログラム
中に出現する関数定義毎に、エントリが作成される。各
関数には、一意な関数番号が付与されており、その関数
番号により各エントリがアクセス可能となっている。各
エントリは、関数番号欄411、関数名称欄412、定
義行番号欄413、仮返数欄414、仮引数集合欄41
5、呼出集合欄416で構成される。
ントリ番号、関数名称欄412には、対応する関数の名
称が格納される。定義行番号欄413には、当該関数の
中間語3での関数定義情報が格納される。この定義行番
号欄により、対応する関数定義の全ての情報を得ること
ができる。例えば、関数の各種インタフェース情報の取
得や、関数定義本体の読み出し/複写等も可能である。
本実施例では、図7で示したように、ソースプログラム
の行番号の形式で示してある。仮返数欄414および仮
引数集合欄415は、当該関数の仮返数および仮引数の
情報が、仮パラメータテーブル42のエントリ番号の形
式で格納される。呼出集合欄416は、当該関数中に存
在する関数呼出の情報が、呼出テーブル51のエントリ
番号の形式で格納される。
ータテーブル42の構成例である。仮パラメータテーブ
ルは、関数テーブル41の関数インタフェース情報を格
納するための補助テーブルである。仮返数や仮引数毎
に、エントリが作成され、そのエントリ番号が関数テー
ブル41の仮返数欄や仮引数集合欄に格納される。各エ
ントリは、仮パラメータ番号欄421、仮パラメータ位
置番号欄422、仮パラメータ型欄423、仮パラメー
タ変数欄424で構成される。
ータテーブルのエントリ番号が格納される。仮パラメー
タ位置番号欄422には、当該仮パラメータの出現位置
が番号で示してある。仮返数の位置番号は0、i番めの
仮引数は位置番号iとなる。仮パラメータ型欄423に
は、仮パラメータの型情報が格納される。仮パラメータ
変数欄424には、対応する仮パラメータの名称が格納
される。
ブル51の構成例である。呼出テーブルは、プログラム
中に出現する関数呼出毎に、エントリが作成される。各
エントリは、呼出番号欄511、呼出行番号欄512、
呼出関数番号欄513、実返数欄514、実引数集合欄
515で構成される。
ントリ番号、呼出行番号欄512には、対応する関数呼
出の行番号が格納される。呼出関数番号欄513には、
当該呼出が呼び出す関数が、関数テーブル41の関数番
号が格納される。実返数欄514および実引数集合欄5
15は、当該呼出の実返数および実引数の情報が、実パ
ラメータテーブル52のエントリ番号の形式で格納され
る。
メータテーブル52の構成例である。実パラメータテー
ブルは、呼出テーブル51の呼出インタフェース情報を
格納するための補助テーブルである。実返数や実引数毎
に、エントリが作成され、そのエントリ番号が呼出テー
ブル51の実返数欄や実引数集合欄に格納される。各エ
ントリは、実パラメータ番号欄521、実パラメータ位
置番号欄522、実パラメータ式欄522で構成され
る。
ータテーブルのエントリ番号が格納される。実パラメー
タ位置番号欄522には、当該実パラメータの出現位置
が番号で示してある。実返数の位置番号は、(仮パラメ
ータテーブル42の仮パラメータ位置番号欄422と同
様に)0、i番めの実引数は位置番号iとなっている。
実パラメータ式欄523には、対応する実パラメータの
名称が格納される。
出テーブル61の構成例である。一括呼出テーブルは、
一括関数の(一括)呼出毎に、エントリが作成される。
各エントリは、一括呼出番号欄611、生成元呼出集合
欄612、一括関数番号欄613、実返数名称欄61
4、実返数型欄615、実返数集合欄616、実引数集
合欄617で構成される。
ブルのエントリ番号が格納される。生成元呼出集合欄6
12には、一括呼出化する呼出の集合が、呼出テーブル
51のエントリ番号の形式で格納される。一括関数番号
欄613には、当該一括呼出が呼び出す一括関数が、一
括関数テーブル71のエントリ番号(一括関数関数番
号)で格納される。実返数名称欄614および実返数型
欄615には、返数の名称および返数の型が格納され
る。実返数集合欄616および実引数集合欄617は、
当該一括呼出の実返数および実引数の情報が、一括実パ
ラメータテーブル62のエントリ番号の形式で格納され
る。
パラメータテーブル62の構成例である。一括実パラメ
ータテーブルは、一括呼出テーブル61の呼出インタフ
ェース情報を格納するための補助テーブルである。実返
数や実引数毎に、エントリが作成され、そのエントリ番
号が一括呼出テーブル61の実返数欄や実引数集合欄に
格納される。各エントリは、一括実パラメータ番号欄6
21、一括実パラメータ位置番号欄622、生成元実パ
ラメータ番号欄623、変換前名称欄624、変換後名
称欄625で構成される。
呼出実パラメータテーブルのエントリ番号が格納され
る。一括実パラメータ位置番号欄622には、当該実パ
ラメータの出現位置が番号で示してある。生成元呼出集
合欄623には、一括化する呼出が、呼出テーブル51
のエントリ番号の集合形式で格納される。変換前名称欄
724には、生成元呼出における実パラメータ名称、変
換後名称欄725には、一括呼出化後の(一括)実パラ
メータ名称がそれぞれ格納される。尚、変換前名称欄7
24と変換後名称欄725は、実返数に対してのみ有効
な欄である(実引数に関しては、常に空白となる)。
数テーブル71の構成例である。一括関数テーブルは、
一括化関数生成を行う関数毎に、エントリが作成され
る。各関数には、一意な一括関数番号が付与されてお
り、その一括関数番号により各エントリがアクセス可能
となっている。各エントリは、一括関数番号欄711、
一括関数名称欄712、一括化係数欄713、生成元関
数番号欄714、仮返数型欄715、仮返数名称欄71
6、仮返数集合欄717、仮引数数集合欄718で構成
される。
ブルのエントリ番号、一括関数名称欄712には、生成
する一括関数の名称が格納される。一括化係数欄713
には、何回の呼出を一括化するかの個数が格納される。
生成元関数番号欄714には、一括化する関数が関数テ
ーブル41の関数番号の形式で格納される。仮返数型欄
715および仮返数名称欄716には、返数の型および
返数の名称が格納される。仮返数集合欄717および仮
引数集合欄718は、当該一括関数の仮返数および仮引
数の情報が、一括仮パラメータテーブル72のエントリ
番号の形式で格納される。
パラメータテーブル72の構成例である。一括仮パラメ
ータテーブルは、一括関数テーブル71の関数インタフ
ェース情報を格納するための補助テーブルである。仮返
数や仮引数毎に、エントリが作成され、そのエントリ番
号が一括関数テーブル71の仮返数集合欄や仮引数集合
欄に格納される。各エントリは、一括仮パラメータ番号
欄721、生成元仮パラメータ番号欄722、一括仮パ
ラメータ位置番号欄723、反復番号欄724、変換前
名称欄725、変換後名称欄726で構成される。
仮パラメータテーブルのエントリ番号が格納される。生
成元仮パラメータ番号欄722には、生成元関数の対応
する仮パラメータが、仮パラメータテーブル42の仮パ
ラメータ番号の形式で格納される。一括仮パラメータ位
置番号欄723には、当該仮パラメータの出現位置が番
号で示してある。一括仮パラメータ位置番号は、仮返数
と仮引数は独立に数えられ、i番めの仮返数/仮引数は
位置番号iとなる。
めの関数の仮パラメータであったかが格納される。この
反復番号は0から数え始め、一括化係数がnのときn−
1までの番号が付与されることになる。変換前名称欄7
25には、生成元関数における仮パラメータ名称、変換
後名称欄726には、一括関数化後の(一括)仮パラメ
ータ名称がそれぞれ格納される。以上で、本実施例で用
いる各種テーブル構成の説明を終る。
各種処理の説明を順に行なう。図15は、関数情報テー
ブル生成処理21のフローチャート図である。関数情報
テーブル生成処理は、中間語3を逐次走査し、関数定義
を検出したらその関数定義情報を収集・登録した関数情
報テーブル4を生成する。以下、その手順を説明する。
piを0で初期化する(ステップ1501)。次に、未
処理関数があるか否かを判定(ステップ1502)し、
未処理関数がなくなるまで、ステップ1503以下の処
理を行なう。未処理関数fがある場合には、先ず、関数
エントリFを生成し、関数番号fiをインクリメントす
る(ステップ1503)。以下、ステップ1504以降
でこの関数エントリFに関数fの関数情報を格納する。
nとする(ステップ1504)。次に、仮パラメータ集
合FPSを求めるため、FPSを空集合で初期化する
(ステップ1505)。そして、未処理仮パラメータが
あるか否かを判定(ステップ1506)し、未処理仮パ
ラメータがなくなるまで、ステップ1507以下の処理
を行なう。未処理仮パラメータfpがある場合には、仮
パラメータエントリFPを生成し、仮パラメータ番号f
piをインクリメントする(ステップ1507)。
ータテーブル42に格納(ステップ1508)し、その
エントリ番号fpiを仮パラメータ集合FPSに加える
(ステップ1509)。以下、未処理仮パラメータがな
くなるまで、ステップ1506からステップ1509を
反復実行する。尚、ステップ1508は仮パラメータ情
報である、仮パラメータ番号、仮パラメータ位置、仮パ
ラメータ種別、仮パラメータ型、仮パラメータ名称をエ
ントリFPに格納するが、詳細は略す(図8の仮パラメ
ータテーブル42の説明を参照)。
点で、仮パラメータ集合FPSの収集が終わるので、F
に全ての関数情報を格納(ステップ1510)して、次
の未処理関数判定(ステップ1502)を行う。全ての
関数を処理し終わった時点で処理を終了する。
プログラムに対し、上記の処理を行なった結果を示す関
数情報テーブルの例となっている。例えば、エントリ4
17は、図5の003行から008行までで定義されて
いる関数fの情報が格納されている。また、仮返数欄に
より、名称rで仮パラメータ位置0(=仮返数)、仮パ
ラメータ型がintである仮返数があることが分かる。
のフローチャート図である。呼出情報テーブル生成処理
は、中間語3を逐次走査し、関数呼出を検出したらその
呼出情報を収集・登録した呼出情報テーブル5を生成す
る。以下、その手順を説明する。
piを0で初期化する(ステップ1601)。次に、未
処理関数があるか否かを判定(ステップ1602)し、
未処理関数がなくなるまで、ステップ1603以下の処
理を行なう。未処理関数fがある場合には、先ず、その
関数エントリをFとし(ステップ1603)、呼出集合
CSを空集合で初期化する(ステップ1604)。次
に、fに未処理の関数呼出があるか否かを判定(ステッ
プ1605)し、存在する場合には、ステップ1606
以降で呼出情報の登録を行う。呼出情報の登録に当たっ
ては、先ず、呼出エントリCを生成し、呼出番号ciを
インクリメントする(ステップ1606)。次に、呼出
行番号cl、呼出関数番号fiを求める(ステップ16
07)。尚、呼出関数番号fiの取得は、関数情報テー
ブル41を検索することで容易に実現できる(関数情報
テーブルに存在しない場合には空欄としておき、一括化
対象から外す)。
め、APSを空集合で初期化する(ステップ160
8)。そして、未処理実パラメータがあるか否かを判定
(ステップ1609)し、未処理実パラメータがなくな
るまで、ステップ1610以下の処理を行なう。即ち、
未処理実パラメータapがある場合には、実パラメータ
エントリAPを生成し、実パラメータ番号apiをイン
クリメント(ステップ1610)後、apの実パラメー
タ情報を実パラメータテーブル52に格納(ステップ1
611)し、そのエントリ番号apiを実パラメータ集
合APSに加える(ステップ1612)。尚、ステップ
1611は、実パラメータ情報である、実パラメータ番
号、実パラメータ位置番号、実パラメータ式をエントリ
APに格納するが、詳細は略す(図14の実パラメータ
テーブル52の説明を参照)。
点で、実パラメータ集合APSの収集が終わるので、C
に全ての呼出情報を格納(ステップ1613)する
(実パラメータ集合APSは、実返数と実引数を合わせ
たもので、呼出情報テーブルの実返数欄と実引数欄に格
納する)。その後、 CSにciを加え(ステップ16
14)、次の未処理呼出判定(ステップ1605)を行
う。ステップ1605の判定がnoとなった段階で、関
数fにおける全ての呼出を処理し終わるので、Fの呼出
集合欄にCSを格納(ステップ1615)し、次の未処
理関数の判定(ステップ1602)に進む。全ての関数
を処理し終わった時点で処理を終了する。
ラムの例に対し、上記の処理を行なった結果を示す呼出
情報テーブル5の例となっている。例えば、図9のエン
トリ516は、17行目の関数fの呼出情報を格納した
ものである。この呼出では、実引数として(p*p,q
*q)を渡し、実返数r1に返却値が格納されることが
分かる。
理23のフローチャート図である。一括呼出化情報テー
ブル生成処理は、呼出情報テーブル51を逐次走査し、
一括呼出化可能な呼出を検出したら、その一括呼出情報
を収集・登録した一括呼出情報テーブル6および一括関
数情報テーブル7を生成する。以下、その手順を説明す
る。
ータ番号aapi、一括関数番号afi、一括実パラメ
ータ番号afpiを0で初期化する(ステップ170
1)。次に、未処理関数エントリがあるか否かを判定
(ステップ1702)し、未処理関数エントリがなくな
るまで、ステップ1703以下の処理を行なう。未処理
関数エントリFがある場合には、先ず、その呼出集合を
CSとする(ステップ1703)。
る同型呼出集合SCSの抽出処理(ステップ1704か
らステップ1711)に移る。この同型呼出集合SCS
の抽出処理は、図3のステップ230に相当する。先
ず、CSをワーク集合WCSに格納し、SCSを空集合
で初期化する(ステップ1704)。次に、CSに未処
理の呼出エントリCがあるか否かを判定(ステップ17
05)し、存在する場合には、Cの呼出番号ciと呼出
関数番号fiを取得(ステップ1706)し、WCSか
らciを除く(ステップ1707) 。次に、WCSに
未処理エントリWCがあるかどうかを判定(ステップ1
708)し、存在する場合には、WCの呼出番号wci
と呼出関数番号wfiを取得(ステップ1709)す
る。そして、fiとwfiの一致判定(ステップ171
0)により、同一関数の呼出であるかを調べる。同一関
数である場合には、SCSにwciを加えて(ステップ
1711)からステップ1708に進む。
の要素を判定した時点で、同型呼出集合SCSの抽出が
完了する。ここで、SCSが複数要素を持つか否かを判
定(ステップ1712)し、複数存在する場合にのみ、
一括呼出化情報抽出処理(ステップ231。詳細は図1
8を参照)を実行し、ステップ1705以降で次の同型
呼出集合SCSの処理に進む。ステップ1705で全エ
ントリを処理したら、ステップ1702に進み、次の関
数エントリを処理する。全ての関数エントリを処理しお
わった時点で、一括呼出化情報テーブル生成処理を終了
する。
のフローチャート図である。一括呼出化情報抽出処理
は、与えられた同型呼出集合SCSから、一括呼出化可
能な呼出を集めた一括呼出集合ASCSを抽出し、一括
呼出情報テーブル6および一括関数情報テーブル7を生
成する。以下、その手順を説明する。先ず、SCSに未
処理の呼出エントリSCがあるか否かを判定(ステップ
1801)し、存在する場合には、Cの呼出番号sci
を取得(ステップ1802)する。次に、SCSをワー
ク集合WSCSに格納し、ASCSを空集合で初期化
(ステップ1803)後、WSCSからsciを除く
(ステップ1804) 。次に、WSCSに未処理エン
トリWSCがあるかどうかを判定(ステップ1805)
し、存在する場合には、WSCの呼出番号wsciを取
得(ステップ1806)する。
能であるかを判定(ステップ1807)し、可能である
場合には、ASCSにwsciを加える(ステップ18
08)。尚、この一括呼出化の可能性判定は、wsci
の呼出が、sciの呼出行番号の位置に移動可能か等に
より判定するが、本発明には直接関係しないので詳細は
略す。その後、ステップ1805に進み、次のWSCの
要素を調べる。ステップ1805で全てのワーク呼出集
合WSCSの要素を判定した時点で、一括化呼出集合A
SCSの抽出が完了する。ここで、ASCSが複数要素
を持つか否かを判定(ステップ1809)し、複数存在
する場合にのみ、一括呼出化情報登録処理(ステップ2
32。詳細は図19を参照)を実行する。次に、SCS
からASCSを除き(ステップ1810)、ステップ1
801以降で次の同型呼出集合SCSの要素の処理に進
む。ステップ1801で全エントリを処理しおわった時
点で、一括呼出化情報抽出処理を終了する。
のフローチャート図である。一括呼出化情報登録処理
は、与えられた一括呼出集合ASCSから、一括呼出情
報テーブル6および一括関数情報テーブル7を生成す
る。以下、その手順を説明する。先ず、一括呼出エント
リACを作成して、aciをインクリメント(ステップ
1901)後、ASCSをACの生成元呼出集合欄に格
納する(ステップ1902)。次に、ASCSの(任意
の要素の)呼出関数番号をci、要素数をafkとする
(ステップ1903)。そして、 ASCSから変数と
なる型artを生成(ステップ1904)し、ACの返
数型欄に格納(ステップ1905)する。尚、 art
は、本実施例では配列型としたが、生成元呼出集合の全
ての返数が表現できる型であれば何でもよい。 その生
成方法は、本発明にとって本質的ではないので詳細は略
す。
実返数名称欄に格納(ステップ1906)後、一括呼出
実引数登録処理(ステップ233。詳細は図20)、一
括呼出実返数登録処理(ステップ234。詳細は図2
1)を行って、一括呼出情報テーブルへの登録を完了す
る。
う。先ず、一括関数エントリAFを作成して、afiを
インクリメントする(ステップ1911)。次に、ar
tをAFの返数型欄に格納(ステップ1912)する。
次に、一意な名称afnを生成し、AFの仮返数名称欄
に格納(ステップ1913)後、一括化係数欄にafk
を格納する(ステップ1914)。最後に、一括関数仮
引数登録処理(ステップ235。詳細は図22)、一括
関数仮返数登録処理(ステップ236。詳細は図23)
を行って、一括関数情報テーブルへの登録を完了する。
以上で、一括呼出情報テーブルと一括関数情報テーブル
への登録が完了するので、一括化呼出情報登録処理を終
了する。
のフローチャート図である。一括呼出実返数登録処理
は、一括呼出テーブルの各エントリにある生成元呼出集
合から一括実パラメータテーブル62を生成し、一括呼
出テーブル61の一括呼出実返数集合欄616に登録す
る。以下、その手順を説明する。先ず、一括呼出実返数
集合AARSを空集合で初期化する(ステップ200
1)。また、一括呼出実返数位置番号aaprも0で初
期化する(ステップ2002)。
(ステップ2003)として、ACSに未処理の呼出C
が存在かを判定(ステップ2004)し、存在するとき
は、ステップ2005からステップ2013を反復実行
する。この反復処理では、Cの実返数集合をARS(ス
テップ2005)とし、ARSに未処理の実返数ARが
存在かを判定(ステップ2006)し、存在するとき
は、ステップ2007からステップ2012を反復実行
する。この反復処理では、先ず、aaprをインクリメ
ントする(ステップ2007)。次に、ARの実パラメ
ータ番号と名称を、それぞれari、arnとする(ス
テップ2008)。次に、一括呼出実返数名称aarn
を生成(ステップ2009)する。次に、一括呼出実パ
ラメータエントリAAPを生成し、aapiをインクリ
メント(ステップ2010)する。
(ステップ2011)後、AARSにaariを加える
(ステップ2012)。ステップ2006の判定でno
となったとき、全ての実返数の処理が終了するので、A
ARSをACの一括呼出実返数集合欄に格納(ステップ
2013)後、次のACSの処理を行う。ACSの全て
の呼出エントリを処理し終えた時点で、一括呼出実返数
登録処理233が終了する。
のフローチャート図である。一括呼出実引数登録処理
は、一括呼出テーブルの各エントリにある生成元呼出集
合から一括実パラメータテーブル62を生成し、一括呼
出テーブル61の一括呼出実引数集合欄617に登録す
る。以下、その手順を説明する。
合で初期化する(ステップ2101)。また、一括呼出
実引数位置番号aapaも0で初期化する(ステップ2
102)。そして、ACの生成呼出元集合をACS(ス
テップ2103)として、ACSに未処理の呼出Cが存
在かを判定(ステップ2104)し、存在するときは、
ステップ2105からステップ2113を反復実行す
る。この反復処理では、Cの実引数集合をAPS(ステ
ップ2105)とし、APSに未処理の実引数APが存
在かを判定(ステップ2106)し、存在するするとき
は、ステップ2107からステップ2112を反復実行
する。この反復処理では、先ず、aapaをインクリメ
ントする(ステップ2107)。
それぞれapi、apnとする(ステップ2108)。
次に、一括呼出実引数名称aapnを生成(ステップ2
109)する。次に、一括呼出実パラメータエントリA
APを生成し、aapiをインクリメント(ステップ2
110)する。次に、AAPに一括呼出実引数情報を登
録(ステップ2111)後、AAASにaapiを加え
る(ステップ2112)。ステップ2106の判定でn
oとなったとき、全ての実引数の処理が終了するので、
AAASをACの一括呼出実返数集合欄に格納(ステッ
プ2013)後、次のACSの処理を行う。ACSの全
ての呼出エントリを処理し終えた時点で、一括呼出実引
数登録処理234が終了する。
で示された呼出情報テーブル5を入力とし、図20およ
び図21の処理を行なった結果を示す一括呼出情報テー
ブル6の例となっている。例えば、図11のエントリ6
18は、図9に示された呼出テーブル51のエントリ5
16とエントリ517の呼出が一括呼出化可能であるこ
とを示している。この一括呼出は、実引数として(p*
p,q*q,p*q ,q*p )を渡し、型がintの
配列である実返数arfに返却値を格納すればよいこと
が分かる。
のフローチャート図である。一括関数仮返数登録処理
は、一括関数テーブルの各エントリにある生成元関数番
号と一括化係数から、一括仮パラメータテーブル72を
生成し、一括関数テーブル71の一括関数仮返数集合欄
717に登録する。以下、その手順を説明する。先ず、
一括関数仮返数集合AFRSを空集合で初期化する(ス
テップ2201)。また、一括関数仮返数位置番号af
prも0で初期化する(ステップ2202)。次に、A
Fの一括化係数をafk、AFの生成元関数エントリを
Fとする(ステップ2203。両者は、既に一括呼出化
常用登録処理で算出済み)。さらに、反復回数iを0で
初期化(ステップ2204)後、 iがafkと等しい
かどうかを判定(ステップ2205)することで、iが
afkと等しくなるまで、 ステップ2206からステ
ップ2212を反復実行する。この反復処理では、先
ず、iをインクリメントする(ステップ2206)。次
に、afprをインクリメントする(ステップ220
7)。
それぞれfpi、fpnとする(ステップ2208)。
次に、一括関数仮返数名称afpnを生成(ステップ2
209)する。次に、一括関数仮パラメータエントリA
FPを生成し、afpiをインクリメント(ステップ2
210)する。次に、AFPに一括関数仮返数情報を登
録(ステップ2211)後、AFRSにafpiを加え
る(ステップ2212)。ステップ2205の判定でn
oとなったとき、AFRSをAFの一括関数仮返数集合
欄に格納(ステップ2213)し、一括関数仮返数登録
処理235が終了する。
のフローチャート図である。一括関数仮引数登録処理
は、一括関数テーブルの各エントリにある生成元関数番
号と一括化係数から、一括仮パラメータテーブル72を
生成し、一括関数テーブル71の一括関数仮引数集合欄
718に登録する。以下、その手順を説明する。先ず、
一括関数仮引数集合AFASを空集合で初期化する(ス
テップ2301)。また、一括関数仮引数位置番号af
paも0で初期化する(ステップ2302)。次に、A
Fの一括化係数をafk、AFの生成元関数エントリを
Fとする(ステップ2303。両者は、既に一括呼出化
常用登録処理で算出済み)。
プ2304)後、 iがafkと等しいかどうかを判定
(ステップ2305)することで、iがafkと等しく
なるまで、 ステップ2306からステップ2315を
反復実行する。この反復処理では、先ず、 iをインク
リメントする(ステップ2206)。次に、Fの仮引数
集合をFAS(ステップ2307)とし、FASに未処
理の仮引数FAが存在かを判定(ステップ2308)
し、存在するするときは、ステップ2309からステッ
プ2314を反復実行する。この反復処理では、先ず、
afpaをインクリメントする(ステップ2309)。
次に、AFの仮パラメータ番号と名称を、それぞれfp
i、fpnとする(ステップ2310)。
(ステップ2311)する。次に、一括関数仮パラメー
タエントリAFPを生成し、afpiをインクリメント
(ステップ2312)する。次に、AFPに一括関数仮
引数情報を登録(ステップ2313)後、AFASにa
fpiを加える(ステップ2314)。ステップ230
8の判定でnoとなったとき、全ての仮引数の処理が終
了するので、AFASをAFの一括関数仮引数集合欄に
格納(ステップ2315)後、次の反復処理を行う。i
とafkが一致するまで、一括化係数分反復実行した時
点で、一括関数仮引数登録処理236が終了する。
示された関数情報テーブル4および呼出情報テーブル5
を入力とし、図17から図23の処理を行なった結果を
示す一括関数情報テーブル7の例となっている。例え
ば、図13のエントリ719は、図7に示された関数テ
ーブル41のエントリ417を、一括化係数2で一括関
数化したものであることを示している。この一括関数
は、仮引数として(x0,y0,x1,y1 )を渡さ
れ、型がintの配列である仮返数frfを返却する。
以上で、一括呼出化情報テーブル生成処理23の説明を
終える。一括呼出化情報テーブル生成処理23の後、一
括化関数生成処理24、一括呼出化変換処理25を行
う。以下順に説明する。
チャート図である。一括関数生成処理は、一括関数情報
テーブル7の各エントリから、中間語3中に一括関数を
生成する。以下、その手順を説明する。未処理の一括関
数エントリAFがあるかどうかを調べ(ステップ240
1)、存在する全ての一括関数エントリに対し、ステッ
プ2402以下の処理を行う。先ず、AFの生成元関数
番号をfi、AFの一括化係数をafkとする(ステッ
プ2402)。次に、AFの仮返数集合AFRSから、
一括関数仮返数定義を生成する(ステップ2403)。
次に、AFの仮引数集合AFASから、一括関数仮引数
定義を生成する(ステップ2404)。以上で、一括関
数の呼出インタフェースの生成が完了するので、次に、
ステップ2406からステップ2413で一括関数本体
を生成する。
テップ2405)後、fiの定義部FBをコピーする
(ステップ2406)。次に、このコピーされた領域F
B中の仮パラメータの変換を行う。先ず、AFの仮返数
集合AFRSと仮引数集合AFASの和集合を一括関数
仮パラメータ集合AFPSとする(ステップ240
7)。AFPSに未処理の仮パラメータエントリAFP
があるか否かを判定(ステップ2408)し、存在する
場合はステップ2409以降で仮パラメータの変換を行
う。
後名称をacnとする(ステップ2409)。次に、F
Bに出現する名称bcnをacnに変換する(ステップ
2410)後、さらに次の仮パラメータの変換のため、
ステップ2408に進む。AFPSの全要素の処理が終
わったら、mをインクリメント(ステップ2411)
し、一括化係数afkと一致するか否かを判定する(ス
テップ2412)。一致しない間は、ステップ2406
に進み反復実行し、mがafkと一致したら、AFの仮
返数名称を用いて一括関数仮返数返却を生成(ステップ
2413)し、ステップ2401に進んで次の一括関数
エントリの処理を行う。全ての一括関数エントリの処理
が終わった時点で、一括関数生成処理が終了する。
括関数情報テーブル7を入力とし、図24の処理を行な
った結果を示す(ソースプログラム形式による)中間語
の例となっている。図6の30行から36行に、図13
のエントリ719で示された一括関数が生成されてい
る。32行には、一括関数仮返数定義が、35行には一
括関数仮返数返却分が、それぞれ生成されている。
ーチャート図である。一括呼出化変換処理は、一括呼出
情報テーブル6を使って、中間語3中の一括化可能同型
呼出を、一括呼出に変換する。以下、その手順を説明す
る。未処理の一括呼出エントリACがあるかどうかを調
べ(ステップ2501)、存在する全ての一括呼出エン
トリに対し、ステップ2502以下の処理を行う。先
ず、ACの実返数名称から、一括呼出実返数定義を生成
する(ステップ2502)。次に、ACの生成元呼出集
合をCS、ACの実返数集合をAAPSとする(ステッ
プ2503)。次に、CSの任意の要素Cを取り出し、
呼出関数番号fiを取得する(ステップ2504)。
置acpを決定する(ステップ2505)。この一括呼
出生成位置は、一括呼出化の可能性の判定により保証さ
れた場所ならば、何処でもよいが、本実施例では、便宜
上、最初の呼出位置の直前とする。次に、ACから一括
呼出を作成し、acpに生成する(ステップ250
6)。尚、一括呼出の作成は、一括呼出実返数名称、一
括関数番号、一括呼出実引数集合により容易に作成でき
るので、詳細は略す。次に、CSに未処理の呼出エント
リCがあるかどうかを判定(ステップ2507)し、存
在する場合は、Cの呼出行番号を見て呼出を削除する
(ステップ2508)。
に未処理の一括呼出実引数エントリAARがあるかどう
かを判定(ステップ2509)し、存在する場合には、
ステップ2510からステップ2511で、実返数の変
換を行う。AARの変換前名称をbcn、変換後名称を
acn(ステップ2510)とし、fiの関数本体領域
に出現するbcnをacnに変換する(ステップ251
1)。ステップ2509の判定のnoとなったとき、全
ての一括呼出実返数の変換が終わり、ACに関する変換
処理が終了する。その後、ステップ2501に進み、次
の一括呼出エントリの一括呼出化変換処理を行う。全て
の一括呼出エントリの処理が終わった時点で、一括呼出
化変換処理が終了する。
括呼出情報テーブル6を入力とし、図25の処理を行な
った結果を示す(ソースプログラム形式による)中間語
の例となっている。図5の17行と21行の2つの関数
呼出が、図6では16行の一括呼出へと変換されてい
る。また、14行には、一括呼出実返数定義生成されて
いる。本実施例によれば、関数呼出の回数を低減するに
より、呼出オーバヘッドの削減を行うことが可能とな
り、オブジェクトプログラムの処理性能の向上に寄与す
る。
ラの処理手順を示す。図26は、ループ展開時に一括関
数呼出化する第2の実施例と、ループ並列化時に一括関
数呼出化する第3の実施例に共通のコンパイラの処理手
順である。構文解析201とコード生成処理203は図
のそれと同様なので説明は省略する。ループ展開ないし
ループ並列化と一括関数呼出化処理205は中間後3を
入力とし、反復処理を直列/並列展開するループ展開/
ループ並列化を行い、一括関数呼出化変換を行った中間
語3を出力する。ループ展開の場合が第2実施例、ルー
プ並列化の場合が第3実施例となる。尚、処理の大部分
とテーブル構成等は、第1の実施例と同様であるため、
以下では、概略のみを説明する。
ープ展開時に一括関数呼出化する場合の図26のステッ
プ205の処理手順を示すフローチャート図である。以
下順に説明する。先ず、関数情報テーブル生成処理27
01により、ソースプログラム中の関数定義の各種情報
を抽出し、関数情報テーブル4を作成する。次に、未処
理のループLが存在するか否かを判定(ステップ270
2)し、存在する場合にはステップ2703からステッ
プ2710までを反復実行する。この反復処理では、先
ずLがループ展開可能であるかどうかを判定(ステップ
2704)し、存在する場合にはステップ2705から
ステップ2710までを反復実行する。
開を行う(ステップ2704)。次に、呼出情報テーブ
ル生成処理(ステップ2705)を行い、関数呼出に関
する情報を抽出し、呼出情報テーブル5を生成する。次
に、Lからループ展開によって生成されたn個の同一関
数の呼出を同型呼出集合SCSとする(ステップ270
6)。次に、同型呼出集合SCSから一括呼出化可能な
呼出を抽出する一括呼出抽出処理(ステップ2707)
を行い、抽出した一括呼出を一括呼出情報テーブルに登
録する(ステップ2708)。ステップ2702でno
となった時、全てのループに対して処理を終え、一括関
数生成処理(ステップ2709)、一括呼出化変換処理
(ステップ2710)を行い、処理を終了する。
ップの対応関係を示す。以下の各ステップの処理内容
は、括弧内で示した図3のステップと同様の処理であ
る。 ステップ2701(図3のステップ21) ステップ2705(図3のステップ22) ステップ2709(図3のステップ231) ステップ2710(図3のステップ232) ステップ2711(図3のステップ24) ステップ2712(図3のステップ25)
の説明のためのソースプログラム例である。本実施例に
おいても、中間語3ソースプログラムの形式で記述する
ものとする。従って、図28はソースプログラム例であ
るとともに、(一括呼出化前の)中間語31の例ともな
っている。図28のプログラム例では、関数gの16行
から22行に、関数fを呼び出すループが存在する。
ープ展開した段階の中間語3を、ソースプログラム形式
で表現したものである。図28の16行から22行に関
数呼出を含むループが、図29の16行から22行へと
ループ展開されている。
とし、図26の処理を行った結果の中間語3を、ソース
プログラム形式で表現したものである。図29の16行
から22行のループ展開中の関数fの呼出が一括関数呼
出化されている。本実施例によれば、ループ展開時に一
括関数呼出化を行うため、ループ展開数に応じた効率的
な一括関数呼出化を行うことができる。
ープ並列化時に一括関数呼出化する場合の図26のステ
ップ205の処理手順を示すフローチャート図である。
本処理手順は、図27とほとんど同じなので説明は省略
する(ステップ3104とステップ3106が若干異な
る)。
ープ並列化した段階の中間語3を、ソースプログラム形
式で表現したものである。図32の18行および19行
にある「x||y;」の記法は、xとyが並列に実行さ
れることを示している。図28の16行から22行に関
数呼出を含むループが、図32の16行から21行へと
ループ並列化されていることが分かる。
力とし、図30の処理を行った結果の中間語3を、ソー
スプログラム形式で表現したものである。図31の16
行から22行のループ並列化中の関数fの呼出が一括関
数呼出化されていることがわかる。本実施例によれば、
ループ並列化時に一括関数呼出化を行うため、ループの
並列度に応じた効率的な一括関数呼出化を行うことがで
きる。
ス変換プログラムは、同一関数の呼出を一括関数の呼出
に変換することができる。即ち、インライン展開によら
ない呼出オーバヘッドの削減手段を提供している。、こ
れにより、インライン展開が適用できない場合にも、呼
出オーバヘッドの削減を行うことが可能となり、オブジ
ェクトプログラムの処理性能の向上に寄与する。
システムの構成図である。
フローチャート図である。
ャート図である。
理2の処理構成図である。
間語31のソースプログラム形式による構成例)であ
る。
ラム形式による構成例である。
る。
る。
ート図である。
ート図である。
ーチャート図である。
ート図である。
ート図である。
ート図である。
ート図である。
ート図である。
ート図である。
ある。
である。
順である。
ャート図である。
プログラムの例である。
式による構成例である。
のソースプログラム形式による構成例である。
チャート図である。
形式による構成例である。
語のソースプログラム形式による構成例である。
Claims (14)
- 【請求項1】 関数および関数呼出の関係を解析して関
数情報および呼出情報として生成するプログラム変換の
際の一括関数呼出化方法であって、 同一関数の複数回の呼出を1回の呼出に変換する一括呼
出化情報を格納する一括呼出化情報生成ステップと、 上記一括呼出化情報から、同一関数の複数回実行処理を
一度に行う一括関数を生成する一括関数生成ステップ
と、 上記一括呼出化情報から、同一関数の複数回の呼出を1
回の一括関数の呼出に変換する一括呼出化変換ステップ
を有することを特徴とする一括関数呼出化方法。 - 【請求項2】 請求項1に記載の一括関数呼出化方法に
おいて、 上記一括呼出化情報生成ステップが、上記関数呼出情報
を用いて同一関数の呼出である同型関数呼出を認識して
同型呼出情報を生成する同型呼出認識ステップと、同型
呼出認識ステップが生成する同型呼出呼出から一括呼出
化可能な呼出を選択する一括呼出選択ステップを有する
ことを特徴とする一括関数呼出化方法。 - 【請求項3】 請求項2に記載の一括関数呼出化方法に
おいて、 上記一括呼出選択ステップが、上記複数の同型呼出が一
個所の呼出点での呼出に置き換えることが可能か否かを
判定する一括呼出化判定ステップと、上記一括呼出化判
定ステップにより一括呼出化可能であると判定された関
数群の一括呼出化の情報を格納する一括呼出化情報登録
ステップを有することを特徴とする一括関数呼出化方
法。 - 【請求項4】 請求項1から3のいずれか一つに記載の
一括関数呼出化方法において、 上記一括呼出化情報が、同一関数の複数回実行処理を一
度に行う一括関数の生成に必要な一括関数情報と、同一
関数の複数回の呼出を1回の一括関数の呼出に変換する
一括呼出変換に必要な一括呼出情報を備えることを特徴
とする一括関数呼出化方法。 - 【請求項5】 請求項4に記載の一括関数呼出化方法に
おいて、 上記一括呼出情報が、上記同一関数の複数回の呼出にお
ける実引数や実返数等の生成元呼出インタフェース情報
を備えることを特徴とする一括関数呼出化方法。 - 【請求項6】 請求項5に記載の一括関数呼出化方法に
おいて、 上記一括呼出情報が、一括呼出化に生成する実引数や実
返数等の変換後呼出インタフェース情報を備え、 上記一括呼出化変換ステップが、上記生成元呼出インタ
フェース情報から上記変換後呼出インタフェース情報に
に合致するような一括呼出に変換することを特徴とする
一括関数呼出化方法。 - 【請求項7】 請求項4に記載の一括関数呼出化方法に
おいて、 上記一括関数情報が、上記一括関数化される関数の仮引
数や仮返数等の生成元関数インタフェース情報を備える
ことを特徴とする一括関数呼出化方法。 - 【請求項8】 請求項7に記載の一括関数呼出化方法に
おいて、 上記一括関数情報が、一括関数生成時に生成する仮引数
や仮返数等の変換後関数インタフェース情報を備え、 上記一括関数生成ステップが、上記生成元関数インタフ
ェース情報から上記変換後関数インタフェース情報に合
致するような一括関数に変換することを特徴とする一括
関数呼出化方法。 - 【請求項9】 請求項4に記載の一括関数呼出化方法に
おいて、 上記一括呼出化情報が、一括呼出が処理する同一関数の
呼出回数である一括化係数を備え、 上記一括呼出化情報生成ステップが一括化係数を決定
し、上記一括関数生成ステップが生成する一括関数が実
行する同一関数の実行回数と、上記一括呼出化変換ステ
ップが生成する一括呼出が実行する同一関数の呼出回数
を、共に一括化係数とすることを特徴とする一括関数呼
出化方法。 - 【請求項10】 請求項9に記載の一括関数呼出化方法
において、 上記一括呼出化情報生成ステップが決定する一括化係数
を 一括呼出化可能な同型呼出の最大数とすることを特
徴とする一括関数呼出化方法。 - 【請求項11】 請求項2に記載の一括関数呼出化方法
において、 上記同型呼出認識ステップが、ループ展開時に生成する
同一関数の呼出を認識してループ展開時同型呼出情報を
生成するループ展開時同型呼出認識ステップであり、 上記一括呼選択ステップが、上記ループ展開時同型呼出
認識ステップが生成するループ展開時同型呼出情報から
一括呼出化可能な呼出を選択した一括呼出化情報を生成
することを特徴とする一括関数呼出化方法。 - 【請求項12】 請求項9または請求項11に記載の一
括関数呼出化方法において、 上記一括呼出化情報生成ステップが決定する一括化係数
をループ展開数とすることを特徴とする一括関数呼出化
方法。 - 【請求項13】 請求項2に記載の一括関数呼出化方法
において、 上記同型呼出認識ステップが、ループ並列化時に生成す
る同一関数の呼出を認識してループ並列化時同型呼出情
報を生成するループ並列化時同型呼出認識ステップであ
り、 上記一括呼選択ステップが、上記ループ並列化時同型呼
出認識ステップが生成するループ展開時同型呼出情報か
ら一括呼出化可能な呼出を選択した一括呼出化情報を生
成することを特徴とする一括関数呼出化方法。 - 【請求項14】 請求項9または請求項13に記載の一
括関数呼出化方法において、 上記一括呼出化情報生成ステップが決定する一括化係数
をループ並列化の展開数とすることを特徴とする一括関
数呼出化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP03441798A JP3726992B2 (ja) | 1998-02-17 | 1998-02-17 | 一括関数呼出化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP03441798A JP3726992B2 (ja) | 1998-02-17 | 1998-02-17 | 一括関数呼出化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH11232118A true JPH11232118A (ja) | 1999-08-27 |
JP3726992B2 JP3726992B2 (ja) | 2005-12-14 |
Family
ID=12413633
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP03441798A Expired - Lifetime JP3726992B2 (ja) | 1998-02-17 | 1998-02-17 | 一括関数呼出化方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3726992B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111095196A (zh) * | 2018-03-07 | 2020-05-01 | 欧姆龙株式会社 | 支持装置以及支持程序 |
-
1998
- 1998-02-17 JP JP03441798A patent/JP3726992B2/ja not_active Expired - Lifetime
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111095196A (zh) * | 2018-03-07 | 2020-05-01 | 欧姆龙株式会社 | 支持装置以及支持程序 |
EP3764219A4 (en) * | 2018-03-07 | 2021-12-01 | Omron Corporation | SUPPORT SYSTEM AND SUPPORT PROGRAM |
US11221828B2 (en) | 2018-03-07 | 2022-01-11 | Omron Corporation | Support device and support program |
CN111095196B (zh) * | 2018-03-07 | 2024-03-01 | 欧姆龙株式会社 | 支持装置以及记录介质 |
Also Published As
Publication number | Publication date |
---|---|
JP3726992B2 (ja) | 2005-12-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Kalnins et al. | Model transformation language MOLA | |
US8453126B1 (en) | System and method for converting base SAS runtime macro language scripts to JAVA target language | |
JPH08202545A (ja) | ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法 | |
JPH02109127A (ja) | 仕様処理方法 | |
US8943472B1 (en) | System and method for directly accessing SAS datasets from a JAVA program | |
Kalnins et al. | Basics of model transformation language MOLA | |
JP4724387B2 (ja) | プログラム変換プログラム、プログラム変換装置およびプログラム変換方法 | |
US20040010780A1 (en) | Method and apparatus for approximate generation of source code cross-reference information | |
Castro et al. | Automatically deriving cost models for structured parallel processes using hylomorphisms | |
JPH11232118A (ja) | 一括関数呼出化方法 | |
JP2002342078A (ja) | プログラム開発システム及び方法 | |
JPH0969041A (ja) | ソフトウェア部品の作成支援方法 | |
JP2609820B2 (ja) | プログラム管理方法 | |
JPH11272524A (ja) | データ変換装置および記憶媒体 | |
KR100353452B1 (ko) | 교환시스템의 데이타 베이스 생성방법 | |
JP3208300B2 (ja) | プログラム中の物理実体の使用形式抽出方法および関連抽出方法 | |
Hřivnáčová et al. | Analysis Tools in Geant4 | |
JPH06214777A (ja) | プログラム開発方法及び装置 | |
JP3019874B2 (ja) | プログラム生成/合成装置および方法 | |
JPH11149368A (ja) | 図式編集プログラム開発方法および方式 | |
JPH07334399A (ja) | 固定長レコード向けコード変換方式 | |
CN115373689A (zh) | 基于llvm的编译优化方法、装置、设备及介质 | |
CN117931151A (zh) | 一种基于JsonPath和Spring容器数据处理的方法 | |
JPH03141427A (ja) | 標準レコード仕様情報作成方法 | |
JPH01191233A (ja) | プログラム自動生成方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20040909 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20041015 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041213 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050107 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050302 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050510 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050627 |
|
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: 20050909 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050922 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081007 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
EXPY | Cancellation because of completion of term |