退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置
【課題】効率的なデータ退避が可能になること。
【解決手段】プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定し、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、決定されたチェックポイントにおいて退避するデータとして判別する。
【解決手段】プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定し、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、決定されたチェックポイントにおいて退避するデータとして判別する。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置に関する。
【背景技術】
【0002】
従来より、科学技術計算など、同じ演算処理が繰り返されるプログラムを実行する際には、当該演算処理を行なうコンピュータの故障に対処するために、定期的に演算結果のデータを退避して保存することが行なわれている。
【0003】
ここで、演算処理を行なうコンピュータは、ユーザの設定に従って、定期的に演算結果のデータを退避して保存する。例えば、10000回のループを繰り返すプログラムを実行して演算処理を行なうコンピュータは、ユーザの設定に従って、例えば、100回ごとの演算結果のデータを退避して保存する。
【0004】
従って、仮に、510回目のループにおける演算処理実行中に、コンピュータの故障が発生した場合でも、故障復旧後のコンピュータは、退避して保存しておいた500回目の演算結果のデータを利用することで、1回目のループにおける演算処理からではなく、501回目のループにおける演算処理から処理を再開することが可能になる。
【0005】
なお、特許文献1では、主CPU側のメモリからDMA(direct memory access)により従CPU側のメモリにデータを転送して保存するプログラマブルコントローラが開示されている。
【0006】
【特許文献1】特公平6−30002号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
ところで、上記した従来の技術は、ユーザが設定された時点における演算結果のデータをすべて退避して保存するので、データ転送における処理に負荷がかかり、非効率的なデータ退避しかできないという問題点があった。
【0008】
すなわち、プログラム中に設定されたデータ退避を行なう地点であるチェックポイントにおいて、退避する演算結果のデータが、例えば、二次元以上の配列要素からなる変数値のように膨大な量からなるデータの場合、これらをすべて退避して保存するには、データ転送に時間がかかり、非効率的なデータ退避しかできないという問題点があった。
【0009】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、効率的なデータ退避が可能になる退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置を提供することを目的とする。
【課題を解決するための手段】
【0010】
上述した課題を解決し、目的を達成するため、請求項1に係る発明は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法であって、前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出工程と、前記ループ構造検出工程によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、前記ループ構造検出工程によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、を含んだことを特徴とする。
【0011】
また、請求項2に係る発明は、上記の発明において、前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする。
【0012】
また、請求項3に係る発明は、上記の発明において、前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、前記参照先行要素に該当する要素はないと判別することを特徴とする。
【0013】
また、請求項4に係る発明は、上記の発明において、前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、前記定義サブループが一回もしくは複数回出現した後に、前記参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする。
【0014】
また、請求項5に係る発明は、上記の発明において、前記チェックポイント決定工程によって決定された前記チェックポイントと、前記参照先行要素判別工程によって判別された前記参照先行要素とを所定の出力部に表示するように指示をする表示指示工程をさらに含んだことを特徴とする。
【0015】
また、請求項6に係る発明は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法をコンピュータに実行させる退避データ判別プログラムであって、前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手順と、前記ループ構造検出手順によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手順と、前記ループ構造検出手順によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手順によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手順と、をコンピュータに実行させることを特徴とする。
【0016】
また、請求項7に係る発明は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別装置であって、前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手段と、前記ループ構造検出手段によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手段と、前記ループ構造検出手段によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手段によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手段と、を備えたことを特徴とする。
【発明の効果】
【0017】
請求項1、6または7の発明によれば、プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、検出されたメインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定し、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、決定されたチェックポイントにおいて退避するデータとして判別するので、すべての演算結果ではなく、プログラム実行再開に際して必要最低限なデータである参照先行要素のみを退避することにより退避データ量を削減することができ、効率的なデータ退避が可能になる。
【0018】
また、請求項2の発明によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【0019】
また、請求項3の発明によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別するので、退避すべきデータがないプログラムと容易に判別することができ、効率的なデータ退避が可能になる。
【0020】
また、請求項4の発明によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【0021】
また、請求項5の発明によれば、決定されたチェックポイントと、判別された参照先行要素とを所定の出力部に表示するように指示をするので、例えば、プログラマは、自動的に判別された参照先行要素を確認するとともに、プログラマ自身が「退避すべきと判別する要素」もしくは「退避しなくてもよいと判別する要素」が当該参照先行要素に含まれるか否かを容易に判別することができるので、効率的なデータ退避が可能になる。
【発明を実施するための最良の形態】
【0022】
以下に添付図面を参照して、この発明に係る退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置の実施例を詳細に説明する。なお、以下では、退避データ判別方法を実施する退避データ判別装置を実施例として説明する。また、以下では、実施例1における退避データ判別装置の概要および特徴、実施例1における退避データ判別装置の構成および処理の手順、実施例1の効果を順に説明し、最後に、他の実施例について説明する。
【実施例1】
【0023】
[実施例1における商品情報管理装置の概要および特徴]
まず最初に、図1を用いて、実施例1における退避データ判別装置の主たる特徴を具体的に説明する。図1は、実施例1における退避データ判別装置の概要および特徴を説明するための図である。
【0024】
実施例1における退避データ判別装置は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別することを概要とする。
【0025】
例えば、図1−1の(A)に示すように、コンピュータが、N行N列からなる配列要素(配列A)を用いて演算を行い、演算結果を再び配列Aに格納する演算処理が10000回繰り返されるプログラムを実行する際に、演算結果が格納される配列Aの要素の中から、定期的(例えば、100回ごと)に退避するデータを判別することを概要とする。
【0026】
ここで本発明は、効率的なデータ退避が可能になることに主たる特徴がある。この主たる特徴について簡単に説明すると、実施例1における退避データ判別装置は、プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出する。
【0027】
例えば、図1−1の(B)に示すように、プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループ(「DO T=1,10000〜ENDDO」のループ)と当該メインループに含まれる2つのサブループ(「DO J=2,N−1〜ENDDO」のループおよび「DO J=1,N〜ENDDO」のループ)とを検出する。
【0028】
そして、実施例1における退避データ判別装置は、検出された前記メインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定する。例えば、図1−1の(B)に示すように、プログラムのメインループの開始行である「DO T=1,10000」の直後の地点を、配列Aに格納された演算結果を退避する地点であるチェックポイントとして決定する。
【0029】
そして、実施例1における退避データ判別装置は、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素のみを、決定されたチェックポイントにおいて退避するデータとして判別する。
【0030】
例えば、検出されたメインループ内に記述される演算処理の内容を解析すると、図1−1の(B)に示すように、最初のサブループにおける演算処理は、A(I,J)が左辺にあることから、配列Aの「2行目からN−1行目」および「2列目からN−1列目」で指定される範囲(図1−1の(C)に示す白抜きの範囲)の要素を定義する演算処理であることがわかる。また、2番目のサブループにおける演算処理は、A(I,J)が右辺にあることから、配列Aのすべての要素を参照する演算処理であることがわかる。
【0031】
このことから、実施例1における退避データ判別装置は、図1−1の(C)に示す灰色の範囲は、参照のみされる要素であり、これらの範囲にある要素を、決定されたチェックポイントにおいて退避するデータである参照先行要素として判別する。
【0032】
具体的には、実施例1における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、以下の3つのパターンにあてはまる場合それぞれにおいて、参照先行要素の判別を行なう。
【0033】
すなわち、実施例1における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別する。
【0034】
例えば、図1−2の(D)に示すように、定義サブループである「A(I0:u0)が左辺にあるサブループ」および「A(I1:u1)が左辺にあるサブループ)」の2つが出現した後に、参照サブループである「A(I2:u2)が右辺にあるサブループ」と「A(I3:u3)が右辺にあるサブループ)」と「A(I5:u5)が右辺にあるサブループ)」との3つが出現する場合は、『「定義サブループすべてによって定義される要素(定義要素)の和集合の補集合」と、「参照サブループすべてによって参照される要素(参照要素)の和集合」との積集合』を参照先行要素として判別する。
【0035】
また、実施例1における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別する。
【0036】
例えば、図1−2の(E)に示すように、すべての配列要素を定義する定義サブループである「A(1:N)が左辺にあるサブループ」が最初に出現する場合は、そののち、定義サブループや参照サブループがいかなるパターンで出現したとしても、参照先行要素に該当する要素はないと判別する。
【0037】
また、実施例1における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別する。
【0038】
例えば、図1−2の(F)に示すように、定義サブループである「A(I0:u0)が左辺にあるサブループ」が出現した後に、要素を参照する演算処理のサブループである参照サブループである「A(I1:u1)が右辺にあるサブループ)」が出現し、さらに、後続定義サブループである「A(I2:u2)が左辺にあるサブループ」および「A(I3:u3)が左辺にあるサブループ)」の2つが出現する場合、「最初の定義サブループによって定義される要素」が「後続定義サブループによって定義される要素」をすべて含むならば(図1−2の(F)の(1)参照)、後続定義サブループを判別対象から除外して、『「定義サブループすべてによって定義される要素(定義要素)の和集合の補集合」と、「参照サブループすべてによって参照される要素(参照要素)の和集合」との積集合』を参照先行要素として判別する(図1−2の(F)の(2)参照)。
【0039】
なお、図1−2の(D)〜(F)に示すように、すべてのプログラムにおいて、「DO T=1,10000」の直後の地点をチェックポイントとして決定している。
【0040】
そして、実施例1における退避データ判別装置は、決定されたチェックポイントと、判別された参照先行要素とを、モニタの画面などに表示するように指示をする。例えば、決定されたチェックポイントと、図1−1の(C)に示す参照先行要素とを、モニタの画面に表示させる。これを参照することにより、プログラマは、例えば、図1−2の(G)に示すように、プログラムに「exclude_elements(A,2:N−1,2:N−1)」を入力して、図1−1の(C)に示す白抜きの範囲は除外した要素(すなわち、参照先行要素のみ)を退避するよう指示を行なうことができる。
【0041】
なお、本実施例では、上述した3つのパターンそれぞれについて解析する場合について説明したが、本発明はこれに限定されるものではなく、3つのパターンから任意に選択して解析する場合であってもよい。例えば、入力されたプログラムのメインループ内のサブループの処理内容が、図1−2の(D)に示すパターンに対応するか否かのみを解析して参照先行要素を判別する場合であってもよい。
【0042】
このようなことから、実施例1における退避データ判別装置は、すべての演算結果ではなく、プログラム実行再開に際して必要最低限なデータである参照先行要素のみを退避することにより退避データ量を削減することができ、上記した主たる特徴の通り、効率的なデータ退避が可能になる。
【0043】
[実施例1における退避データ判別装置の構成]
次に、図2〜9を用いて、実施例1における退避データ判別装置を説明する。図2は、実施例1における退避データ判別装置の構成を示すブロック図であり、図3および4は、実施例1におけるループ構造検出部を説明するための図であり、図5は、実施例1におけるチェックポイント決定部を説明するための図であり、図6〜9は、実施例1における参照先行要素判別部を説明するための図である。
【0044】
図2に示すように、実施例1における退避データ判別装置10は、入力部11と、出力部12と、入出力制御I/F部13と、記憶部20と、処理部30とから構成される。
【0045】
入力部11は、各種情報を入力する。例えば、キーボードや、タッチパネルなどがこれに該当し、特に本発明に密接に関連するものとしては、処理部30による各種処理に用いるプログラムのソースコードを入力したり、退避データ判別要求を入力したりする。
【0046】
出力部12は、各種情報を出力する。例えば、画面がこれに該当し、特に本発明に密接に関連するものとしては、チェックポイント決定部32(後述)および参照先行要素判別部33(後述)の処理結果を、表示指示部34(後述)の指示によって、モニタの画面に表示したりする。
【0047】
入出力制御I/F部13は、入力部11および出力部12と、記憶部20および処理部30との間におけるデータ転送を制御する。
【0048】
記憶部20は、処理部30による各種処理結果を記憶し、特に本発明に密接に関連するものとしては、図2に示すように、ループ構造記憶部21と、チェックポイント記憶部22と、参照先行要素記憶部23とを備える。なお、各部については、後に詳述する。
【0049】
処理部30は、入出力制御I/F部13から転送されたプログラムのソースコードに基づき各種処理を実行し、特に本発明に密接に関連するものとしては、図2に示すように、ループ構造検出部31と、チェックポイント決定部32と、参照先行要素判別部33と、表示指示部34とを備える。ここで、ループ構造検出部31は、特許請求の範囲に記載の「ループ構造検出工程」に対応し、チェックポイント決定部32は、同じく「チェックポイント決定工程」に対応し、参照先行要素判別部33は、同じく「参照先行要素判別工程」に対応し、表示指示部34は、同じく「表示指示工程」に対応する。なお、各部については、以下に詳述する。
【0050】
ループ構造検出部31は、入力されたプログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、その結果をループ構造記憶部21に格納する。具体的には、第一段階として、図3に示す解析方法によって、入力されたプログラムのソースコードから当該プログラムのメインループを検出する。すなわち、図3に示すように、プログラムに記述される命令文を1行ずつ最終行(EOF)まで解析する。ループ行が開始されるごとに「loopLevel」を1ずつインクリメントし(初期値は0)、ループ行が終了するごとに「loopLevel」を1ずつデクリメントする。「loopLevel」が「1」となる命令文の行がメインループの開始行と終了行を示す。各ループネストの開始行、終了行を配列 「loopNestStart」と「loopNestEnd」にセットする(図3の(1)参照)。また、メインループの開始行が検出されるごとに「loopNestNo」をインクリメントする(初期値は0)し、合計数をメインループのループネストの数として「nLoopNests」にセットする(図3の(2)参照)。これにより、何行目からそれぞれのメインループが開始され、何行目で当該メインループが終了するかを検出する。
【0051】
そして、ループ構造検出部31は、第二段階として、図4に示す解析方法によって、入力されたプログラムのソースコードから検出されたメインループ内からサブループを検出する。すなわち、図4に示すように、メインループの開始行(start)の次の行から記述される命令文を1行ずつメインループの終了行(end)になる前まで解析する。上記したメインループの検出と同様な方法により、「loopLevel」が「1」となるサブループのループネストを検出し、各ループネストの開始行、終了行を配列 「subloopNestStart」と「subloopNestEnd」にセットする(図4の(1)参照)。また、検出したサブループループネストの数を「subLoopNestNo」にセットする(図4の(2)参照)。これにより、サブループごとに、何行目から当該サブループが開始され、何行目で当該サブループが終了するかを検出する。
【0052】
チェックポイント決定部32は、ループ構造検出部31によって検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定し、その結果をチェックポイント記憶部22に格納する。すなわち、図5に示すように、検出したメインループのループネストにおいて、開始行の直後をチェックポイントとする。なお、図5のプログラム表記部分の記載は図3と同じなので、説明は省略する。
【0053】
参照先行要素判別部33は、ループ構造検出部31によって検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、チェックポイント決定部32によって決定されたチェックポイントにおいて退避するデータとして判別し、その結果を参照先行要素記憶部23に格納する。
【0054】
具体的には、参照先行要素判別部33は、第一段階として、図6に示す解析方法によって、検出したメインループ内のサブループに記述される演算処理の内容を解析する。すなわち、図6に示すように、サブループ内の演算処理を解析して、それぞれの演算処理において使用される配列をすべて収集し、これらが、左辺のみに現れる配列「定義のみ(kind(No, nArrays)がDEF)」と、右辺のみに現れる配列「参照のみ(kind(No, nArrays)がREF)」と、右辺にも左辺にも現れる配列「定義および参照共にある(kind(No, nArrays)がDEFREF)」とに分類する(図6の(1)参照)。また、解析したサブループごとに、当該サブループに含まれる配列名の数を配列要素「nArraysOfSubLoopNest(No)」にセットする(図6の(2)参照)。
【0055】
すなわち、左辺に現れる配列(定義される配列)を抽出して、これらが右辺にも現れるか否かを判定し、右辺にも現れた場合は、定義および参照共にある「(kind(No, nArrays)=DEFREF)」と分類し、右辺に現れなかった場合は、定義のみ「(kind(No, nArrays)=DEF)」と分類する。そして、右辺に現れる配列(参照される配列)を抽出して、これらが左辺にも現れるか否かを判定し、左辺にも現れた場合は、定義および参照共「(kind(No, nArrays)=DEFREF)」と分類し、左辺に現れなかった場合は、参照のみ「(kind(No, nArrays)=REF)」と分類する。図6の例では、メインループネストごとに、そのメインループネストの開始行(start)の次の行から終了行(end)の前の行まで解析を行う。
【0056】
そして、参照先行要素判別部33は、第二段階として、第一段階でサブループごとに分類された配列の種類(DEF,REF,DEFREF)に基づいて、以下の3つのパターンにあてはまる場合それぞれにおいて、参照先行要素の判別を行なう。
【0057】
すなわち、参照先行要素判別部33は、第一のパターンとして、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別する。
【0058】
具体的には、図7の(A)に示す解析処理(analyzeArray1)を行い、サブループごとに出現する配列のパターンが、定義ばかりが連続した後に参照ばかりが連続する(AllRefs)パターンである「AllRefsAfterAllDefs」の場合には、「PARTIAL1で参照先行要素を判別」とし、引き続き、図7の(B)に示す解析処理(analyzePartial1)を行って、参照先行要素を求める。すなわち、『「elmDefsの補集合」と、「elmRefs」との積集合』を参照先行要素として求める。
【0059】
すなわち、定義ばかりが連続した後に参照ばかりが連続する配列のパターンである場合には、図7の(A)に示すように、「areAllRefsAfterAllDefs==1」を与えて「SAVE_PARTILAL1」とし、「analyzePartial1」の解析に移り、図7の(B)に示すように、配列Aの要素のうち、当該サブループネストで定義されている要素の集合を求めて「elmD」とし、配列Aの要素のうち、当該サブループネストで参照されている要素の集合を求めて「elmR」とし、『「elmDefsの補集合」と、「elmRefs」との積集合』を参照先行要素として退避すると判定する。また、上記のパターンに該当しない場合は、図7の(A)に示すように、「areAllRefsAfterAllDefs=0」を与え、「退避する要素は判定されなかった(SAVE_UNKNOWN)」として処理を終える。
【0060】
また、参照先行要素判別部33は、第二のパターンとして、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別する。
【0061】
具体的には、図8に示す解析処理(analyzeArray2)を行い、例えば、最初のサブループに出現する配列Aのパターンが、定義でありかつ「配列Aの全要素数と定義される要素数とが等しい」場合には、「SAVE_NONE」として「参照先行要素なし」と判別する。また、上記のパターンに該当しない場合は、図8に示すように、「退避する要素は判定されなかった(SAVE_UNKNOWN)」として処理を終える。
【0062】
また、参照先行要素判別部33は、第三のパターンとして、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別する。
【0063】
具体的には、図9の(A)に示す解析処理(analyzeArray3)を行い、サブループごとに出現する配列において、「定義サブループによって定義される範囲(W1)」を求め、さらに「後続サブループによって定義される範囲(W2)」を求める。そして、「W2がW1に含まれる」場合には、「W2」に関しては「何もしない」とし、「W1」を対象に、「SAVE_PARTILAL3」として「analyzePartial3」の解析に移る。すなわち、図9の(B)に示すように、配列Aの要素のうち、当該サブループネストで定義されている要素の集合を求めて「elmD」とし、配列Aの要素のうち、当該サブループネストで参照されている要素の集合を求めて「elmR」とし、『「elmDefsの補集合」と、「elmRefs」との積集合』を参照先行要素として退避すると判定する。また、上記のパターンに該当しない場合は、図9の(A)に示すように、「退避する要素は判定されなかった(SAVE_UNKNOWN)」として処理を終える。
【0064】
表示指示部34は、チェックポイント記憶部22が記憶する決定されたチェックポイントと、参照先行要素記憶部23が判別した参照先行要素とを、モニタの画面に表示するように指示をする。例えば、決定されたチェックポイントと、図1−1の(C)に示す参照先行要素とを、モニタの画面に表示させる。これを参照することにより、プログラマは、例えば、図1−2の(G)に示すように、プログラムに「exclude_elements(A,2:N−1,2:N−1)」を入力して、図1−1の(C)に示す白抜きの範囲は除外した要素を退避するよう指示を行なうことができる。
【0065】
なお、本実施例では、参照先行要素判別部33が、図7〜9に示す解析処理をすべて行う場合について説明したが、本発明はこれに限定されるものではなく、例えば、参照先行要素判別部33が、図7の(A)に示す解析処理(analyzeArray1)のみを行なって参照先行要素を判別する場合であってもよく、参照先行要素判別部33は、設定によって任意の解析処理を行うことが可能である。また、参照先行要素判別部33は、サブループ内の演算処理が、すべて参照のみである場合には、すべての配列要素を参照先行要素と判別する。
【0066】
[実施例1における退避データ判別装置による処理の手順]
次に、図10を用いて、実施例1における退避データ判別装置10による処理を説明する。図10は、実施例1における退避データ判別装置の処理の手順を説明するための図である。
【0067】
まず、実施例1における退避データ判別装置10は、プログラムのソースコードが入力されると(ステップS1001肯定)、ループ構造検出部31は、入力されたプログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出する(ステップS1002)。
【0068】
具体的には、第一段階として、図3に示す解析によって、入力されたプログラムのソースコードから当該プログラムのメインループし、第二段階として、図4に示す解析によって、検出されたメインループ内からサブループを検出する。
【0069】
そして、チェックポイント決定部32は、ループ構造検出部31によって検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定する(ステップS1003)。図5に示すように、検出したメインループのループネストにおいて、開始行の直後をチェックポイントとする。
【0070】
さらに、参照先行要素判別部33は、ループ構造検出部31によって検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、チェックポイント決定部32によって決定されたチェックポイントにおいて退避するデータとして判別する(ステップS1004)。
【0071】
具体的には、参照先行要素判別部33は、図7の(A)に示す解析処理(analyzeArray1)を行い、これに相当するパターンであるならば、引き続き、図7の(B)に示す解析処理(analyzePartial1)を行って、参照先行要素を求める。すなわち、『「elmDefsの補集合」と、「elmRefs」との積集合』を参照先行要素として求める。
【0072】
また、参照先行要素判別部33は、図8に示す解析処理(analyzeArray2)を行い、これに相当するパターンであるならば、「参照先行要素なし」と判別する。
【0073】
また、参照先行要素判別部33は、図9の(A)に示す解析処理(analyzeArray3)を行い、これに相当するパターンであるならば、引き続き、図9の(B)に示す解析処理(analyzePartial3)を行って、参照先行要素を求める。すなわち、『「elmDefsの補集合」と、「elmRefs」との積集合』を参照先行要素として求める。
【0074】
そして、参照先行要素判別部33は、表示指示部34は、チェックポイント記憶部22が記憶する決定されたチェックポイントと、参照先行要素記憶部23が判別した参照先行要素とを、モニタの画面に表示するように指示をして(ステップS1005)、処理を終了する。例えば、決定されたチェックポイントと、図1−1の(C)に示す参照先行要素とを、モニタの画面に表示させる。これを参照することにより、プログラマは、例えば、図1−2の(G)に示すように、プログラムに「exclude_elements(A,2:N−1,2:N−1)」を入力して、図1−1の(C)に示す白抜きの範囲は除外した要素を退避するよう指示を行なうことができる。
【0075】
[実施例1の効果]
上記したように、実施例1によれば、プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定し、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、決定されたチェックポイントにおいて退避するデータとして判別するので、すべての演算結果ではなく、プログラム実行再開に際して必要最低限なデータである参照先行要素のみを退避することにより退避データ量を削減することができ、効率的なデータ退避が可能になる。
【0076】
また、実施例1によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【0077】
また、実施例1によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別するので、退避すべきデータがないプログラムと容易に判別することができ、効率的なデータ退避が可能になる。
【0078】
また、実施例1によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【0079】
また、実施例1によれば、決定されたチェックポイントと、判別された前記参照先行要素とを所定の出力部に表示するように指示をするので、例えば、プログラマは、自動的に判別された参照先行要素を確認するとともに、プログラマ自身が「退避すべきと判別する要素」もしくは「退避しなくてもよいと判別する要素」が当該参照先行要素に含まれるか否かを容易に判別することができるので、効率的なデータ退避が可能になる。
【実施例2】
【0080】
さて、これまで実施例1における退避データ判別装置について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、実施例2における退避データ判別装置として、種々の異なる実施例を(1)〜(2)に区分けして説明する。
【0081】
(1)システム構成等
また、上記の実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動でおこなうこともでき(例えば、表示指示部34が決定されたチェックポイントと判別された参照先行要素とを、自動的に表示する指示を行なうのではなく、ユーザからの表示要求に従って、決定されたチェックポイントと判別された参照先行要素と表示するなど)、あるいは、手動的におこなうものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文章中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、例えば、図10に示すステップS1002とS1003とを同時に行なうなど、特記する場合を除いて任意に変更することができる。
【0082】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各処理部および各記憶部の分散・統合の具体的形態(例えば、図2の形態など)は図示のものに限られず、例えば、ループ構造検出部31とチェックポイント決定部32とを統合するなど、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0083】
(2)退避データ判別プログラム
ところで上記の実施例1では、ハードウェアロジックによって各種の処理を実現する場合を説明したが、本発明はこれに限定されるものではなく、あらかじめ用意されたプログラムをコンピュータで実行するようにしてもよい。そこで以下では、図11を用いて、上記の実施例1に示した退避データ判別装置10と同様の機能を有する退避データ判別プログラムを実行するコンピュータの一例を説明する。図11は、実施例1における退避データ判別プログラムを実行するコンピュータを示す図である。
【0084】
図11に示すように、情報処理装置としてのコンピュータ110は、キーボード111、ディスプレイ112、CPU113、ROM114、HDD115、RAM116をバス117などで接続して構成される。
【0085】
ROM114には、上記の実施例1に示した退避データ判別装置10と同様の機能を発揮する退避データ判別プログラム、つまり、図11に示すように、ループ構造検出プログラム114a、チェックポイント決定プログラム114b、参照先行要素判定プログラム114c、表示指示プログラム114dが予め記憶されている。なお、これらのプログラム114a〜114dについては、図2に示した退避データ判別装置10の各構成要素と同様、適宜統合または分散してもよい。
【0086】
そして、CPU113が、これらのプログラム114a〜114dをROM114から読みだして実行することで、図11に示すように、各プログラム114a〜114dは、ループ構造検出プロセス113a、チェックポイント決定プロセス113b、参照先行要素判定プロセス113c、表示指示プロセス113dとして機能するようになる。なお、各プロセス113a〜113dは、図2に示した、ループ構造検出部31、チェックポイント決定部32、参照先行要素判別部33、表示指示部34にそれぞれ対応する。
【0087】
そしてCPU113は、RAM116に格納されたループ構造データ116aと、チェックポイントデータ116bと、参照先行要素データ116cとに基づいて退避データ判別処理を実行する。
【0088】
なお、上記した各プログラム114a〜114dについては、必ずしも最初からROM114に記憶させておく必要はなく、例えばコンピュータ110に挿入されるフレキシブルディスク(FD)、CD−ROM、MOディスク、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」、または、コンピュータ110の内外に備えられるHDDなどの「固定用物理媒体」、さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータ110に接続される「他のコンピュータ(またはサーバ)」などに各プログラムを記憶させておき、コンピュータ110がこれらから各プログラムを読み出して実行するようにしてもよい。
【0089】
(付記1)コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出工程と、
前記ループ構造検出工程によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、
前記ループ構造検出工程によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、
を含んだことを特徴とする退避データ判別方法。
【0090】
(付記2)前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする付記1に記載の退避データ判別方法。
【0091】
(付記3)前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、前記参照先行要素に該当する要素はないと判別することを特徴とする付記1に記載の退避データ判別方法。
【0092】
(付記4)前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、前記定義サブループが一回もしくは複数回出現した後に、前記参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする付記1に記載の退避データ判別方法。
【0093】
(付記5)前記チェックポイント決定工程によって決定された前記チェックポイントと、前記参照先行要素判別工程によって判別された前記参照先行要素とを所定の出力部に表示するように指示をする表示指示工程をさらに含んだことを特徴とする付記1に記載の退避データ判別方法。
【0094】
(付記6)コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法をコンピュータに実行させる退避データ判別プログラムであって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手順と、
前記ループ構造検出手順によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手順と、
前記ループ構造検出手順によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手順によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手順と、
をコンピュータに実行させることを特徴とする退避データ判別プログラム。
【0095】
(付記7)コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別装置であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手段と、
前記ループ構造検出手段によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手段と、
前記ループ構造検出手段によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手段によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手段と、
を備えたことを特徴とする退避データ判別装置。
【0096】
(付記8)コンピュータが、配列要素を用いて演算を行い、演算結果を再び同じ配列に格納する演算処理が繰り返されるプログラムを実行する際に、演算結果が格納される配列の要素の中から、定期的に退避するデータを判別する退避データ判別方法であって、
ループ構造検出部が、前記プログラムのソースコードに記述される命令文を解析し、当該プログラムにおいて繰り返される演算処理のメインループの開始行と終了行、及び当該メインループに含まれるサブループの開始行と終了行とを検出するループ構造検出工程と、
チェックポイント決定部が、前記ループ構造検出工程によって検出された前記メインループの開始行の直後を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、
参照先行要素判別部が、前記ループ構造検出工程によって検出された前記メインループに含まれるサブループ全てに対して、各サブループ内に記述される演算処理の内容を解析し、それぞれの演算処理において使用される配列が左辺のみに現れる配列を定義のみ、右辺のみに現れる配列を参照のみ、右辺にも左辺にも現れる配列を定義および参照共にある配列と分類し、前記メインループ内で参照のみされる配列および前記メインループ内で参照された後に定義される要素である参照先行配列を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、
を含んだことを特徴とする退避データ判別方法。
【産業上の利用可能性】
【0097】
以上のように、本発明に係る退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する場合に有用であり、特に、効率的なデータ退避が可能になることに適する。
【図面の簡単な説明】
【0098】
【図1−1】実施例1における退避データ判別装置の概要および特徴を説明するための図である。
【図1−2】実施例1における退避データ判別装置の概要および特徴を説明するための図である。
【図2】実施例1における退避データ判別装置の構成を示すブロック図である。
【図3】実施例1におけるループ構造検出部を説明するための図である。
【図4】実施例1におけるループ構造検出部を説明するための図である。
【図5】実施例1におけるチェックポイント決定部を説明するための図である。
【図6】実施例1における参照先行要素判別部を説明するための図である。
【図7】実施例1における参照先行要素判別部を説明するための図である。
【図8】実施例1における参照先行要素判別部を説明するための図である。
【図9】実施例1における参照先行要素判別部を説明するための図である。
【図10】実施例1における退避データ判別装置の処理を説明するための図である。
【図11】実施例1の退避データ判別プログラムを実行するコンピュータを示す図である。
【符号の説明】
【0099】
10 退避データ判別装置
11 入力部
12 出力部
13 入出力制御I/F部
20 記憶部
21 ループ構造記憶部
22 チェックポイント記憶部
23 参照先行要素記憶部
30 処理部
31 ループ構造検出部
32 チェックポイント決定部
33 参照先行要素判別部
34 表示指示部
【技術分野】
【0001】
この発明は、退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置に関する。
【背景技術】
【0002】
従来より、科学技術計算など、同じ演算処理が繰り返されるプログラムを実行する際には、当該演算処理を行なうコンピュータの故障に対処するために、定期的に演算結果のデータを退避して保存することが行なわれている。
【0003】
ここで、演算処理を行なうコンピュータは、ユーザの設定に従って、定期的に演算結果のデータを退避して保存する。例えば、10000回のループを繰り返すプログラムを実行して演算処理を行なうコンピュータは、ユーザの設定に従って、例えば、100回ごとの演算結果のデータを退避して保存する。
【0004】
従って、仮に、510回目のループにおける演算処理実行中に、コンピュータの故障が発生した場合でも、故障復旧後のコンピュータは、退避して保存しておいた500回目の演算結果のデータを利用することで、1回目のループにおける演算処理からではなく、501回目のループにおける演算処理から処理を再開することが可能になる。
【0005】
なお、特許文献1では、主CPU側のメモリからDMA(direct memory access)により従CPU側のメモリにデータを転送して保存するプログラマブルコントローラが開示されている。
【0006】
【特許文献1】特公平6−30002号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
ところで、上記した従来の技術は、ユーザが設定された時点における演算結果のデータをすべて退避して保存するので、データ転送における処理に負荷がかかり、非効率的なデータ退避しかできないという問題点があった。
【0008】
すなわち、プログラム中に設定されたデータ退避を行なう地点であるチェックポイントにおいて、退避する演算結果のデータが、例えば、二次元以上の配列要素からなる変数値のように膨大な量からなるデータの場合、これらをすべて退避して保存するには、データ転送に時間がかかり、非効率的なデータ退避しかできないという問題点があった。
【0009】
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、効率的なデータ退避が可能になる退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置を提供することを目的とする。
【課題を解決するための手段】
【0010】
上述した課題を解決し、目的を達成するため、請求項1に係る発明は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法であって、前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出工程と、前記ループ構造検出工程によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、前記ループ構造検出工程によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、を含んだことを特徴とする。
【0011】
また、請求項2に係る発明は、上記の発明において、前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする。
【0012】
また、請求項3に係る発明は、上記の発明において、前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、前記参照先行要素に該当する要素はないと判別することを特徴とする。
【0013】
また、請求項4に係る発明は、上記の発明において、前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、前記定義サブループが一回もしくは複数回出現した後に、前記参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする。
【0014】
また、請求項5に係る発明は、上記の発明において、前記チェックポイント決定工程によって決定された前記チェックポイントと、前記参照先行要素判別工程によって判別された前記参照先行要素とを所定の出力部に表示するように指示をする表示指示工程をさらに含んだことを特徴とする。
【0015】
また、請求項6に係る発明は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法をコンピュータに実行させる退避データ判別プログラムであって、前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手順と、前記ループ構造検出手順によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手順と、前記ループ構造検出手順によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手順によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手順と、をコンピュータに実行させることを特徴とする。
【0016】
また、請求項7に係る発明は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別装置であって、前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手段と、前記ループ構造検出手段によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手段と、前記ループ構造検出手段によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手段によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手段と、を備えたことを特徴とする。
【発明の効果】
【0017】
請求項1、6または7の発明によれば、プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、検出されたメインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定し、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、決定されたチェックポイントにおいて退避するデータとして判別するので、すべての演算結果ではなく、プログラム実行再開に際して必要最低限なデータである参照先行要素のみを退避することにより退避データ量を削減することができ、効率的なデータ退避が可能になる。
【0018】
また、請求項2の発明によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【0019】
また、請求項3の発明によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別するので、退避すべきデータがないプログラムと容易に判別することができ、効率的なデータ退避が可能になる。
【0020】
また、請求項4の発明によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【0021】
また、請求項5の発明によれば、決定されたチェックポイントと、判別された参照先行要素とを所定の出力部に表示するように指示をするので、例えば、プログラマは、自動的に判別された参照先行要素を確認するとともに、プログラマ自身が「退避すべきと判別する要素」もしくは「退避しなくてもよいと判別する要素」が当該参照先行要素に含まれるか否かを容易に判別することができるので、効率的なデータ退避が可能になる。
【発明を実施するための最良の形態】
【0022】
以下に添付図面を参照して、この発明に係る退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置の実施例を詳細に説明する。なお、以下では、退避データ判別方法を実施する退避データ判別装置を実施例として説明する。また、以下では、実施例1における退避データ判別装置の概要および特徴、実施例1における退避データ判別装置の構成および処理の手順、実施例1の効果を順に説明し、最後に、他の実施例について説明する。
【実施例1】
【0023】
[実施例1における商品情報管理装置の概要および特徴]
まず最初に、図1を用いて、実施例1における退避データ判別装置の主たる特徴を具体的に説明する。図1は、実施例1における退避データ判別装置の概要および特徴を説明するための図である。
【0024】
実施例1における退避データ判別装置は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別することを概要とする。
【0025】
例えば、図1−1の(A)に示すように、コンピュータが、N行N列からなる配列要素(配列A)を用いて演算を行い、演算結果を再び配列Aに格納する演算処理が10000回繰り返されるプログラムを実行する際に、演算結果が格納される配列Aの要素の中から、定期的(例えば、100回ごと)に退避するデータを判別することを概要とする。
【0026】
ここで本発明は、効率的なデータ退避が可能になることに主たる特徴がある。この主たる特徴について簡単に説明すると、実施例1における退避データ判別装置は、プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出する。
【0027】
例えば、図1−1の(B)に示すように、プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループ(「DO T=1,10000〜ENDDO」のループ)と当該メインループに含まれる2つのサブループ(「DO J=2,N−1〜ENDDO」のループおよび「DO J=1,N〜ENDDO」のループ)とを検出する。
【0028】
そして、実施例1における退避データ判別装置は、検出された前記メインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定する。例えば、図1−1の(B)に示すように、プログラムのメインループの開始行である「DO T=1,10000」の直後の地点を、配列Aに格納された演算結果を退避する地点であるチェックポイントとして決定する。
【0029】
そして、実施例1における退避データ判別装置は、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素のみを、決定されたチェックポイントにおいて退避するデータとして判別する。
【0030】
例えば、検出されたメインループ内に記述される演算処理の内容を解析すると、図1−1の(B)に示すように、最初のサブループにおける演算処理は、A(I,J)が左辺にあることから、配列Aの「2行目からN−1行目」および「2列目からN−1列目」で指定される範囲(図1−1の(C)に示す白抜きの範囲)の要素を定義する演算処理であることがわかる。また、2番目のサブループにおける演算処理は、A(I,J)が右辺にあることから、配列Aのすべての要素を参照する演算処理であることがわかる。
【0031】
このことから、実施例1における退避データ判別装置は、図1−1の(C)に示す灰色の範囲は、参照のみされる要素であり、これらの範囲にある要素を、決定されたチェックポイントにおいて退避するデータである参照先行要素として判別する。
【0032】
具体的には、実施例1における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、以下の3つのパターンにあてはまる場合それぞれにおいて、参照先行要素の判別を行なう。
【0033】
すなわち、実施例1における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別する。
【0034】
例えば、図1−2の(D)に示すように、定義サブループである「A(I0:u0)が左辺にあるサブループ」および「A(I1:u1)が左辺にあるサブループ)」の2つが出現した後に、参照サブループである「A(I2:u2)が右辺にあるサブループ」と「A(I3:u3)が右辺にあるサブループ)」と「A(I5:u5)が右辺にあるサブループ)」との3つが出現する場合は、『「定義サブループすべてによって定義される要素(定義要素)の和集合の補集合」と、「参照サブループすべてによって参照される要素(参照要素)の和集合」との積集合』を参照先行要素として判別する。
【0035】
また、実施例1における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別する。
【0036】
例えば、図1−2の(E)に示すように、すべての配列要素を定義する定義サブループである「A(1:N)が左辺にあるサブループ」が最初に出現する場合は、そののち、定義サブループや参照サブループがいかなるパターンで出現したとしても、参照先行要素に該当する要素はないと判別する。
【0037】
また、実施例1における退避データ判別装置は、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別する。
【0038】
例えば、図1−2の(F)に示すように、定義サブループである「A(I0:u0)が左辺にあるサブループ」が出現した後に、要素を参照する演算処理のサブループである参照サブループである「A(I1:u1)が右辺にあるサブループ)」が出現し、さらに、後続定義サブループである「A(I2:u2)が左辺にあるサブループ」および「A(I3:u3)が左辺にあるサブループ)」の2つが出現する場合、「最初の定義サブループによって定義される要素」が「後続定義サブループによって定義される要素」をすべて含むならば(図1−2の(F)の(1)参照)、後続定義サブループを判別対象から除外して、『「定義サブループすべてによって定義される要素(定義要素)の和集合の補集合」と、「参照サブループすべてによって参照される要素(参照要素)の和集合」との積集合』を参照先行要素として判別する(図1−2の(F)の(2)参照)。
【0039】
なお、図1−2の(D)〜(F)に示すように、すべてのプログラムにおいて、「DO T=1,10000」の直後の地点をチェックポイントとして決定している。
【0040】
そして、実施例1における退避データ判別装置は、決定されたチェックポイントと、判別された参照先行要素とを、モニタの画面などに表示するように指示をする。例えば、決定されたチェックポイントと、図1−1の(C)に示す参照先行要素とを、モニタの画面に表示させる。これを参照することにより、プログラマは、例えば、図1−2の(G)に示すように、プログラムに「exclude_elements(A,2:N−1,2:N−1)」を入力して、図1−1の(C)に示す白抜きの範囲は除外した要素(すなわち、参照先行要素のみ)を退避するよう指示を行なうことができる。
【0041】
なお、本実施例では、上述した3つのパターンそれぞれについて解析する場合について説明したが、本発明はこれに限定されるものではなく、3つのパターンから任意に選択して解析する場合であってもよい。例えば、入力されたプログラムのメインループ内のサブループの処理内容が、図1−2の(D)に示すパターンに対応するか否かのみを解析して参照先行要素を判別する場合であってもよい。
【0042】
このようなことから、実施例1における退避データ判別装置は、すべての演算結果ではなく、プログラム実行再開に際して必要最低限なデータである参照先行要素のみを退避することにより退避データ量を削減することができ、上記した主たる特徴の通り、効率的なデータ退避が可能になる。
【0043】
[実施例1における退避データ判別装置の構成]
次に、図2〜9を用いて、実施例1における退避データ判別装置を説明する。図2は、実施例1における退避データ判別装置の構成を示すブロック図であり、図3および4は、実施例1におけるループ構造検出部を説明するための図であり、図5は、実施例1におけるチェックポイント決定部を説明するための図であり、図6〜9は、実施例1における参照先行要素判別部を説明するための図である。
【0044】
図2に示すように、実施例1における退避データ判別装置10は、入力部11と、出力部12と、入出力制御I/F部13と、記憶部20と、処理部30とから構成される。
【0045】
入力部11は、各種情報を入力する。例えば、キーボードや、タッチパネルなどがこれに該当し、特に本発明に密接に関連するものとしては、処理部30による各種処理に用いるプログラムのソースコードを入力したり、退避データ判別要求を入力したりする。
【0046】
出力部12は、各種情報を出力する。例えば、画面がこれに該当し、特に本発明に密接に関連するものとしては、チェックポイント決定部32(後述)および参照先行要素判別部33(後述)の処理結果を、表示指示部34(後述)の指示によって、モニタの画面に表示したりする。
【0047】
入出力制御I/F部13は、入力部11および出力部12と、記憶部20および処理部30との間におけるデータ転送を制御する。
【0048】
記憶部20は、処理部30による各種処理結果を記憶し、特に本発明に密接に関連するものとしては、図2に示すように、ループ構造記憶部21と、チェックポイント記憶部22と、参照先行要素記憶部23とを備える。なお、各部については、後に詳述する。
【0049】
処理部30は、入出力制御I/F部13から転送されたプログラムのソースコードに基づき各種処理を実行し、特に本発明に密接に関連するものとしては、図2に示すように、ループ構造検出部31と、チェックポイント決定部32と、参照先行要素判別部33と、表示指示部34とを備える。ここで、ループ構造検出部31は、特許請求の範囲に記載の「ループ構造検出工程」に対応し、チェックポイント決定部32は、同じく「チェックポイント決定工程」に対応し、参照先行要素判別部33は、同じく「参照先行要素判別工程」に対応し、表示指示部34は、同じく「表示指示工程」に対応する。なお、各部については、以下に詳述する。
【0050】
ループ構造検出部31は、入力されたプログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、その結果をループ構造記憶部21に格納する。具体的には、第一段階として、図3に示す解析方法によって、入力されたプログラムのソースコードから当該プログラムのメインループを検出する。すなわち、図3に示すように、プログラムに記述される命令文を1行ずつ最終行(EOF)まで解析する。ループ行が開始されるごとに「loopLevel」を1ずつインクリメントし(初期値は0)、ループ行が終了するごとに「loopLevel」を1ずつデクリメントする。「loopLevel」が「1」となる命令文の行がメインループの開始行と終了行を示す。各ループネストの開始行、終了行を配列 「loopNestStart」と「loopNestEnd」にセットする(図3の(1)参照)。また、メインループの開始行が検出されるごとに「loopNestNo」をインクリメントする(初期値は0)し、合計数をメインループのループネストの数として「nLoopNests」にセットする(図3の(2)参照)。これにより、何行目からそれぞれのメインループが開始され、何行目で当該メインループが終了するかを検出する。
【0051】
そして、ループ構造検出部31は、第二段階として、図4に示す解析方法によって、入力されたプログラムのソースコードから検出されたメインループ内からサブループを検出する。すなわち、図4に示すように、メインループの開始行(start)の次の行から記述される命令文を1行ずつメインループの終了行(end)になる前まで解析する。上記したメインループの検出と同様な方法により、「loopLevel」が「1」となるサブループのループネストを検出し、各ループネストの開始行、終了行を配列 「subloopNestStart」と「subloopNestEnd」にセットする(図4の(1)参照)。また、検出したサブループループネストの数を「subLoopNestNo」にセットする(図4の(2)参照)。これにより、サブループごとに、何行目から当該サブループが開始され、何行目で当該サブループが終了するかを検出する。
【0052】
チェックポイント決定部32は、ループ構造検出部31によって検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定し、その結果をチェックポイント記憶部22に格納する。すなわち、図5に示すように、検出したメインループのループネストにおいて、開始行の直後をチェックポイントとする。なお、図5のプログラム表記部分の記載は図3と同じなので、説明は省略する。
【0053】
参照先行要素判別部33は、ループ構造検出部31によって検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、チェックポイント決定部32によって決定されたチェックポイントにおいて退避するデータとして判別し、その結果を参照先行要素記憶部23に格納する。
【0054】
具体的には、参照先行要素判別部33は、第一段階として、図6に示す解析方法によって、検出したメインループ内のサブループに記述される演算処理の内容を解析する。すなわち、図6に示すように、サブループ内の演算処理を解析して、それぞれの演算処理において使用される配列をすべて収集し、これらが、左辺のみに現れる配列「定義のみ(kind(No, nArrays)がDEF)」と、右辺のみに現れる配列「参照のみ(kind(No, nArrays)がREF)」と、右辺にも左辺にも現れる配列「定義および参照共にある(kind(No, nArrays)がDEFREF)」とに分類する(図6の(1)参照)。また、解析したサブループごとに、当該サブループに含まれる配列名の数を配列要素「nArraysOfSubLoopNest(No)」にセットする(図6の(2)参照)。
【0055】
すなわち、左辺に現れる配列(定義される配列)を抽出して、これらが右辺にも現れるか否かを判定し、右辺にも現れた場合は、定義および参照共にある「(kind(No, nArrays)=DEFREF)」と分類し、右辺に現れなかった場合は、定義のみ「(kind(No, nArrays)=DEF)」と分類する。そして、右辺に現れる配列(参照される配列)を抽出して、これらが左辺にも現れるか否かを判定し、左辺にも現れた場合は、定義および参照共「(kind(No, nArrays)=DEFREF)」と分類し、左辺に現れなかった場合は、参照のみ「(kind(No, nArrays)=REF)」と分類する。図6の例では、メインループネストごとに、そのメインループネストの開始行(start)の次の行から終了行(end)の前の行まで解析を行う。
【0056】
そして、参照先行要素判別部33は、第二段階として、第一段階でサブループごとに分類された配列の種類(DEF,REF,DEFREF)に基づいて、以下の3つのパターンにあてはまる場合それぞれにおいて、参照先行要素の判別を行なう。
【0057】
すなわち、参照先行要素判別部33は、第一のパターンとして、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別する。
【0058】
具体的には、図7の(A)に示す解析処理(analyzeArray1)を行い、サブループごとに出現する配列のパターンが、定義ばかりが連続した後に参照ばかりが連続する(AllRefs)パターンである「AllRefsAfterAllDefs」の場合には、「PARTIAL1で参照先行要素を判別」とし、引き続き、図7の(B)に示す解析処理(analyzePartial1)を行って、参照先行要素を求める。すなわち、『「elmDefsの補集合」と、「elmRefs」との積集合』を参照先行要素として求める。
【0059】
すなわち、定義ばかりが連続した後に参照ばかりが連続する配列のパターンである場合には、図7の(A)に示すように、「areAllRefsAfterAllDefs==1」を与えて「SAVE_PARTILAL1」とし、「analyzePartial1」の解析に移り、図7の(B)に示すように、配列Aの要素のうち、当該サブループネストで定義されている要素の集合を求めて「elmD」とし、配列Aの要素のうち、当該サブループネストで参照されている要素の集合を求めて「elmR」とし、『「elmDefsの補集合」と、「elmRefs」との積集合』を参照先行要素として退避すると判定する。また、上記のパターンに該当しない場合は、図7の(A)に示すように、「areAllRefsAfterAllDefs=0」を与え、「退避する要素は判定されなかった(SAVE_UNKNOWN)」として処理を終える。
【0060】
また、参照先行要素判別部33は、第二のパターンとして、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別する。
【0061】
具体的には、図8に示す解析処理(analyzeArray2)を行い、例えば、最初のサブループに出現する配列Aのパターンが、定義でありかつ「配列Aの全要素数と定義される要素数とが等しい」場合には、「SAVE_NONE」として「参照先行要素なし」と判別する。また、上記のパターンに該当しない場合は、図8に示すように、「退避する要素は判定されなかった(SAVE_UNKNOWN)」として処理を終える。
【0062】
また、参照先行要素判別部33は、第三のパターンとして、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別する。
【0063】
具体的には、図9の(A)に示す解析処理(analyzeArray3)を行い、サブループごとに出現する配列において、「定義サブループによって定義される範囲(W1)」を求め、さらに「後続サブループによって定義される範囲(W2)」を求める。そして、「W2がW1に含まれる」場合には、「W2」に関しては「何もしない」とし、「W1」を対象に、「SAVE_PARTILAL3」として「analyzePartial3」の解析に移る。すなわち、図9の(B)に示すように、配列Aの要素のうち、当該サブループネストで定義されている要素の集合を求めて「elmD」とし、配列Aの要素のうち、当該サブループネストで参照されている要素の集合を求めて「elmR」とし、『「elmDefsの補集合」と、「elmRefs」との積集合』を参照先行要素として退避すると判定する。また、上記のパターンに該当しない場合は、図9の(A)に示すように、「退避する要素は判定されなかった(SAVE_UNKNOWN)」として処理を終える。
【0064】
表示指示部34は、チェックポイント記憶部22が記憶する決定されたチェックポイントと、参照先行要素記憶部23が判別した参照先行要素とを、モニタの画面に表示するように指示をする。例えば、決定されたチェックポイントと、図1−1の(C)に示す参照先行要素とを、モニタの画面に表示させる。これを参照することにより、プログラマは、例えば、図1−2の(G)に示すように、プログラムに「exclude_elements(A,2:N−1,2:N−1)」を入力して、図1−1の(C)に示す白抜きの範囲は除外した要素を退避するよう指示を行なうことができる。
【0065】
なお、本実施例では、参照先行要素判別部33が、図7〜9に示す解析処理をすべて行う場合について説明したが、本発明はこれに限定されるものではなく、例えば、参照先行要素判別部33が、図7の(A)に示す解析処理(analyzeArray1)のみを行なって参照先行要素を判別する場合であってもよく、参照先行要素判別部33は、設定によって任意の解析処理を行うことが可能である。また、参照先行要素判別部33は、サブループ内の演算処理が、すべて参照のみである場合には、すべての配列要素を参照先行要素と判別する。
【0066】
[実施例1における退避データ判別装置による処理の手順]
次に、図10を用いて、実施例1における退避データ判別装置10による処理を説明する。図10は、実施例1における退避データ判別装置の処理の手順を説明するための図である。
【0067】
まず、実施例1における退避データ判別装置10は、プログラムのソースコードが入力されると(ステップS1001肯定)、ループ構造検出部31は、入力されたプログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出する(ステップS1002)。
【0068】
具体的には、第一段階として、図3に示す解析によって、入力されたプログラムのソースコードから当該プログラムのメインループし、第二段階として、図4に示す解析によって、検出されたメインループ内からサブループを検出する。
【0069】
そして、チェックポイント決定部32は、ループ構造検出部31によって検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定する(ステップS1003)。図5に示すように、検出したメインループのループネストにおいて、開始行の直後をチェックポイントとする。
【0070】
さらに、参照先行要素判別部33は、ループ構造検出部31によって検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、チェックポイント決定部32によって決定されたチェックポイントにおいて退避するデータとして判別する(ステップS1004)。
【0071】
具体的には、参照先行要素判別部33は、図7の(A)に示す解析処理(analyzeArray1)を行い、これに相当するパターンであるならば、引き続き、図7の(B)に示す解析処理(analyzePartial1)を行って、参照先行要素を求める。すなわち、『「elmDefsの補集合」と、「elmRefs」との積集合』を参照先行要素として求める。
【0072】
また、参照先行要素判別部33は、図8に示す解析処理(analyzeArray2)を行い、これに相当するパターンであるならば、「参照先行要素なし」と判別する。
【0073】
また、参照先行要素判別部33は、図9の(A)に示す解析処理(analyzeArray3)を行い、これに相当するパターンであるならば、引き続き、図9の(B)に示す解析処理(analyzePartial3)を行って、参照先行要素を求める。すなわち、『「elmDefsの補集合」と、「elmRefs」との積集合』を参照先行要素として求める。
【0074】
そして、参照先行要素判別部33は、表示指示部34は、チェックポイント記憶部22が記憶する決定されたチェックポイントと、参照先行要素記憶部23が判別した参照先行要素とを、モニタの画面に表示するように指示をして(ステップS1005)、処理を終了する。例えば、決定されたチェックポイントと、図1−1の(C)に示す参照先行要素とを、モニタの画面に表示させる。これを参照することにより、プログラマは、例えば、図1−2の(G)に示すように、プログラムに「exclude_elements(A,2:N−1,2:N−1)」を入力して、図1−1の(C)に示す白抜きの範囲は除外した要素を退避するよう指示を行なうことができる。
【0075】
[実施例1の効果]
上記したように、実施例1によれば、プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出し、検出されたメインループに突入する地点を、演算結果のデータを退避する地点であるチェックポイントとして決定し、検出されたメインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、決定されたチェックポイントにおいて退避するデータとして判別するので、すべての演算結果ではなく、プログラム実行再開に際して必要最低限なデータである参照先行要素のみを退避することにより退避データ量を削減することができ、効率的なデータ退避が可能になる。
【0076】
また、実施例1によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【0077】
また、実施例1によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、参照先行要素に該当する要素はないと判別するので、退避すべきデータがないプログラムと容易に判別することができ、効率的なデータ退避が可能になる。
【0078】
また、実施例1によれば、検出されたメインループに含まれる複数のサブループごとの演算処理の内容を解析して、定義サブループが一回もしくは複数回出現した後に、参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、定義サブループすべてによって定義される要素の和集合の補集合と、参照サブループすべてによって参照される要素の和集合との積集合を参照先行要素として判別するので、プログラマが参照先行要素を判別することなく、プログラムのソースコードを解析して自動的に参照先行要素を判別することができるとともに、例えば、決定されたチェックポイントにおいて、判別された参照先行要素を退避するように当該プログラムのソースコードを書き換えて再コンパイルすることができ、効率的なデータ退避が可能になる。
【0079】
また、実施例1によれば、決定されたチェックポイントと、判別された前記参照先行要素とを所定の出力部に表示するように指示をするので、例えば、プログラマは、自動的に判別された参照先行要素を確認するとともに、プログラマ自身が「退避すべきと判別する要素」もしくは「退避しなくてもよいと判別する要素」が当該参照先行要素に含まれるか否かを容易に判別することができるので、効率的なデータ退避が可能になる。
【実施例2】
【0080】
さて、これまで実施例1における退避データ判別装置について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、実施例2における退避データ判別装置として、種々の異なる実施例を(1)〜(2)に区分けして説明する。
【0081】
(1)システム構成等
また、上記の実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動でおこなうこともでき(例えば、表示指示部34が決定されたチェックポイントと判別された参照先行要素とを、自動的に表示する指示を行なうのではなく、ユーザからの表示要求に従って、決定されたチェックポイントと判別された参照先行要素と表示するなど)、あるいは、手動的におこなうものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文章中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、例えば、図10に示すステップS1002とS1003とを同時に行なうなど、特記する場合を除いて任意に変更することができる。
【0082】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各処理部および各記憶部の分散・統合の具体的形態(例えば、図2の形態など)は図示のものに限られず、例えば、ループ構造検出部31とチェックポイント決定部32とを統合するなど、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0083】
(2)退避データ判別プログラム
ところで上記の実施例1では、ハードウェアロジックによって各種の処理を実現する場合を説明したが、本発明はこれに限定されるものではなく、あらかじめ用意されたプログラムをコンピュータで実行するようにしてもよい。そこで以下では、図11を用いて、上記の実施例1に示した退避データ判別装置10と同様の機能を有する退避データ判別プログラムを実行するコンピュータの一例を説明する。図11は、実施例1における退避データ判別プログラムを実行するコンピュータを示す図である。
【0084】
図11に示すように、情報処理装置としてのコンピュータ110は、キーボード111、ディスプレイ112、CPU113、ROM114、HDD115、RAM116をバス117などで接続して構成される。
【0085】
ROM114には、上記の実施例1に示した退避データ判別装置10と同様の機能を発揮する退避データ判別プログラム、つまり、図11に示すように、ループ構造検出プログラム114a、チェックポイント決定プログラム114b、参照先行要素判定プログラム114c、表示指示プログラム114dが予め記憶されている。なお、これらのプログラム114a〜114dについては、図2に示した退避データ判別装置10の各構成要素と同様、適宜統合または分散してもよい。
【0086】
そして、CPU113が、これらのプログラム114a〜114dをROM114から読みだして実行することで、図11に示すように、各プログラム114a〜114dは、ループ構造検出プロセス113a、チェックポイント決定プロセス113b、参照先行要素判定プロセス113c、表示指示プロセス113dとして機能するようになる。なお、各プロセス113a〜113dは、図2に示した、ループ構造検出部31、チェックポイント決定部32、参照先行要素判別部33、表示指示部34にそれぞれ対応する。
【0087】
そしてCPU113は、RAM116に格納されたループ構造データ116aと、チェックポイントデータ116bと、参照先行要素データ116cとに基づいて退避データ判別処理を実行する。
【0088】
なお、上記した各プログラム114a〜114dについては、必ずしも最初からROM114に記憶させておく必要はなく、例えばコンピュータ110に挿入されるフレキシブルディスク(FD)、CD−ROM、MOディスク、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」、または、コンピュータ110の内外に備えられるHDDなどの「固定用物理媒体」、さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータ110に接続される「他のコンピュータ(またはサーバ)」などに各プログラムを記憶させておき、コンピュータ110がこれらから各プログラムを読み出して実行するようにしてもよい。
【0089】
(付記1)コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出工程と、
前記ループ構造検出工程によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、
前記ループ構造検出工程によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、
を含んだことを特徴とする退避データ判別方法。
【0090】
(付記2)前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする付記1に記載の退避データ判別方法。
【0091】
(付記3)前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、前記参照先行要素に該当する要素はないと判別することを特徴とする付記1に記載の退避データ判別方法。
【0092】
(付記4)前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、前記定義サブループが一回もしくは複数回出現した後に、前記参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする付記1に記載の退避データ判別方法。
【0093】
(付記5)前記チェックポイント決定工程によって決定された前記チェックポイントと、前記参照先行要素判別工程によって判別された前記参照先行要素とを所定の出力部に表示するように指示をする表示指示工程をさらに含んだことを特徴とする付記1に記載の退避データ判別方法。
【0094】
(付記6)コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法をコンピュータに実行させる退避データ判別プログラムであって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手順と、
前記ループ構造検出手順によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手順と、
前記ループ構造検出手順によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手順によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手順と、
をコンピュータに実行させることを特徴とする退避データ判別プログラム。
【0095】
(付記7)コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別装置であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手段と、
前記ループ構造検出手段によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手段と、
前記ループ構造検出手段によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手段によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手段と、
を備えたことを特徴とする退避データ判別装置。
【0096】
(付記8)コンピュータが、配列要素を用いて演算を行い、演算結果を再び同じ配列に格納する演算処理が繰り返されるプログラムを実行する際に、演算結果が格納される配列の要素の中から、定期的に退避するデータを判別する退避データ判別方法であって、
ループ構造検出部が、前記プログラムのソースコードに記述される命令文を解析し、当該プログラムにおいて繰り返される演算処理のメインループの開始行と終了行、及び当該メインループに含まれるサブループの開始行と終了行とを検出するループ構造検出工程と、
チェックポイント決定部が、前記ループ構造検出工程によって検出された前記メインループの開始行の直後を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、
参照先行要素判別部が、前記ループ構造検出工程によって検出された前記メインループに含まれるサブループ全てに対して、各サブループ内に記述される演算処理の内容を解析し、それぞれの演算処理において使用される配列が左辺のみに現れる配列を定義のみ、右辺のみに現れる配列を参照のみ、右辺にも左辺にも現れる配列を定義および参照共にある配列と分類し、前記メインループ内で参照のみされる配列および前記メインループ内で参照された後に定義される要素である参照先行配列を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、
を含んだことを特徴とする退避データ判別方法。
【産業上の利用可能性】
【0097】
以上のように、本発明に係る退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置は、コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する場合に有用であり、特に、効率的なデータ退避が可能になることに適する。
【図面の簡単な説明】
【0098】
【図1−1】実施例1における退避データ判別装置の概要および特徴を説明するための図である。
【図1−2】実施例1における退避データ判別装置の概要および特徴を説明するための図である。
【図2】実施例1における退避データ判別装置の構成を示すブロック図である。
【図3】実施例1におけるループ構造検出部を説明するための図である。
【図4】実施例1におけるループ構造検出部を説明するための図である。
【図5】実施例1におけるチェックポイント決定部を説明するための図である。
【図6】実施例1における参照先行要素判別部を説明するための図である。
【図7】実施例1における参照先行要素判別部を説明するための図である。
【図8】実施例1における参照先行要素判別部を説明するための図である。
【図9】実施例1における参照先行要素判別部を説明するための図である。
【図10】実施例1における退避データ判別装置の処理を説明するための図である。
【図11】実施例1の退避データ判別プログラムを実行するコンピュータを示す図である。
【符号の説明】
【0099】
10 退避データ判別装置
11 入力部
12 出力部
13 入出力制御I/F部
20 記憶部
21 ループ構造記憶部
22 チェックポイント記憶部
23 参照先行要素記憶部
30 処理部
31 ループ構造検出部
32 チェックポイント決定部
33 参照先行要素判別部
34 表示指示部
【特許請求の範囲】
【請求項1】
コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出工程と、
前記ループ構造検出工程によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、
前記ループ構造検出工程によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、
を含んだことを特徴とする退避データ判別方法。
【請求項2】
前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする請求項1に記載の退避データ判別方法。
【請求項3】
前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、前記参照先行要素に該当する要素はないと判別することを特徴とする請求項1に記載の退避データ判別方法。
【請求項4】
前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、前記定義サブループが一回もしくは複数回出現した後に、前記参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする請求項1に記載の退避データ判別方法。
【請求項5】
前記チェックポイント決定工程によって決定された前記チェックポイントと、前記参照先行要素判別工程によって判別された前記参照先行要素とを所定の出力部に表示するように指示をする表示指示工程をさらに含んだことを特徴とする請求項1に記載の退避データ判別方法。
【請求項6】
コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法をコンピュータに実行させる退避データ判別プログラムであって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手順と、
前記ループ構造検出手順によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手順と、
前記ループ構造検出手順によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手順によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手順と、
をコンピュータに実行させることを特徴とする退避データ判別プログラム。
【請求項7】
コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別装置であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手段と、
前記ループ構造検出手段によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手段と、
前記ループ構造検出手段によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手段によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手段と、
を備えたことを特徴とする退避データ判別装置。
【請求項1】
コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出工程と、
前記ループ構造検出工程によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定工程と、
前記ループ構造検出工程によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定工程によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別工程と、
を含んだことを特徴とする退避データ判別方法。
【請求項2】
前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、要素を定義する演算処理のサブループである定義サブループが一回もしくは複数回出現した後に、要素を参照する演算処理のサブループである参照サブループが一回もしくは複数回出現する場合は、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする請求項1に記載の退避データ判別方法。
【請求項3】
前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、すべての要素を定義する演算処理のサブループが最初に出現する場合は、前記参照先行要素に該当する要素はないと判別することを特徴とする請求項1に記載の退避データ判別方法。
【請求項4】
前記参照先行要素判別工程は、前記ループ構造検出工程によって検出された前記メインループに含まれる複数のサブループごとの演算処理の内容を解析して、前記定義サブループが一回もしくは複数回出現した後に、前記参照サブループが一回もしくは複数回出現し、さらに要素を定義する演算処理のサブループである後続定義サブループが一回もしくは複数回出現した場合、当該後続定義サブループによって定義されるすべての要素が、当該定義サブループによって定義されるすべての要素に含まれるならば、前記定義サブループすべてによって定義される要素の和集合の補集合と、前記参照サブループすべてによって参照される要素の和集合との積集合を前記参照先行要素として判別することを特徴とする請求項1に記載の退避データ判別方法。
【請求項5】
前記チェックポイント決定工程によって決定された前記チェックポイントと、前記参照先行要素判別工程によって判別された前記参照先行要素とを所定の出力部に表示するように指示をする表示指示工程をさらに含んだことを特徴とする請求項1に記載の退避データ判別方法。
【請求項6】
コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別方法をコンピュータに実行させる退避データ判別プログラムであって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手順と、
前記ループ構造検出手順によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手順と、
前記ループ構造検出手順によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手順によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手順と、
をコンピュータに実行させることを特徴とする退避データ判別プログラム。
【請求項7】
コンピュータが同じ演算処理が繰り返されるプログラムを実行する際に、定期的に退避する要素からなる演算結果のデータを判別する退避データ判別装置であって、
前記プログラムのソースコードから当該プログラムのループ構造を解析して、当該プログラムにおいて繰り返される演算処理のメインループと当該メインループに含まれるサブループとを検出するループ構造検出手段と、
前記ループ構造検出手段によって検出された前記メインループに突入する地点を、前記演算結果のデータを退避する地点であるチェックポイントとして決定するチェックポイント決定手段と、
前記ループ構造検出手段によって検出された前記メインループ内に記述される演算処理の内容を解析して、参照のみされる要素および参照された後に定義される要素である参照先行要素を、前記チェックポイント決定手段によって決定された前記チェックポイントにおいて退避するデータとして判別する参照先行要素判別手段と、
を備えたことを特徴とする退避データ判別装置。
【図1−1】
【図1−2】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図1−2】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2008−234058(P2008−234058A)
【公開日】平成20年10月2日(2008.10.2)
【国際特許分類】
【出願番号】特願2007−69508(P2007−69508)
【出願日】平成19年3月16日(2007.3.16)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成20年10月2日(2008.10.2)
【国際特許分類】
【出願日】平成19年3月16日(2007.3.16)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]