(57)【要約】【課題】変換前のライブラリ中の関数にかかる関数名および機能と変換対象のライブラリ中の関数にかかる関数名および機能が一致しなくとも関数を容易に変換可能とすること。【解決手段】本実施例にかかるライブラリ変換装置１００は、予め、前処理部２００が、逐次／並列ライブラリリンク構造情報３００ａを生成する。そして、コンパイルコマンドを後処理部４００が受け取った場合に、指示内容を解析し、コンパイルコマンドの指示内容を基に、逐次／並列ライブラリリンク構造情報３００ａを変換し、変換された逐次／並列ライブラリリンク情報３００ａを基にして、プログラム中の逐次ライブラリ関数を、並列ライブラリ関数に置換する。【選択図】        図１
2006164142.tif 000002
【特許請求の範囲】
【請求項１】
プログラム上のライブラリに含まれる関数を異なるライブラリの関数に変換するライブラリ変換プログラムであって、
ライブラリに含まれる関数と該ライブラリと異なるライブラリに含まれる関数とを関連付けた情報であるライブラリリンク構造情報を生成するリンク構造情報生成手順と、
前記ライブラリリンク構造情報を基にして、ライブラリに含まれる関数を異なるライブラリで同等の機能を有する関数に変換する変換処理手順と、
をコンピュータに実行させることを特徴とするライブラリ変換プログラム。
【請求項２】
前記リンク構造情報生成手順は、逐次ライブラリに含まれる関数と並列ライブラリに含まれる関数とを関連付けたライブラリリンク構造情報を生成し、前記変換処理手順は、前記ライブラリリンク構造情報を基にして、逐次ライブラリに含まれる関数を並列ライブラリで同等の機能を有する関数に変換することを特徴とする請求項１に記載のライブラリ変換プログラム。
【請求項３】
前記リンク構造情報生成手順は、前記逐次ライブラリに含まれる関数と関連付ける並列ライブラリの関数の精度および性能の情報を含んだ関連付先情報を取得する関連付先情報取得手順と、前記関連付先情報を基にして、前記逐次ライブラリの関数と並列ライブラリの関数とが１対１または多対１に関連付けられた情報であるライブラリリンク構造情報を生成するリンク生成手順とをさらにコンピュータに実行させることを特徴とする請求項２に記載のライブラリ変換プログラム。
【請求項４】
前記逐次ライブラリの関数に関連付けられる並列ライブラリの関数に対する入力データのデータ分割形式を解読し、前記並列ライブラリの関数の並列プロセスに利用されるデータを分割分配する分割関数を生成すると共に、該分割関数を前記プログラムに追加する分割関数生成手順をさらにコンピュータに実行させることを特徴とする請求項２または３に記載のライブラリ変換プログラム。
【請求項５】
前記逐次ライブラリの関数に関連付けられる並列ライブラリの関数に対する出力データのデータ分割形式を解読し、前記並列ライブラリの関数の並列プロセスから分割されたデータを収集し結合する収集関数を生成すると共に、該収集関数を前記プログラムに追加する収集関数生成手順をさらにコンピュータに実行させることを特徴とする請求項２、３または４に記載のライブラリ変換プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラム上のライブラリに含まれる関数を異なるライブラリの関数に変換するライブラリ変換プログラムに関し、特に変換前のライブラリ中の関数にかかる関数名と変換対象のライブラリ中の関数にかかる関数名が一致しなくとも関数を容易に変換可能とするライブラリ変換プログラムに関するものである。
【背景技術】
【０００２】
従来、プログラム上で使用されるライブラリ中の関数を、異なるライブラリの関数に変換し、プログラムを効率よく実行させるライブラリ変換装置が利用されている。
【０００３】
具体的に、このライブラリ変換装置は、変換前のライブラリ中の関数に対する関数名や機能が変換対象となるライブラリ中の関数の関数名や機能と同様である場合に、変換前のライブラリに対するリンク先を変換対象となるライブラリに変更することによって、ライブラリ中の関数を異なるライブラリの関数に変換している（例えば非特許文献１参照）。
【０００４】
【非特許文献１】富士通株式会社、“Parallelnavi 2.x”、［online］、［平成１６年１１月１８日検索］、インターネット＜URL：http://primeserver.fujitsu.com/primepower/products/soft/opt/paranavi_2x/＞
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、かかる従来の技術では、変換前のライブラリ中の関数に対する関数名が変換対象となるライブラリ中の関数の関数名と異なる場合には、容易に変換前のライブラリ中の関数を変換対象となるライブラリ中の関数に変換することができないという問題があった。
【０００６】
すなわち、変換前のライブラリ中の関数に対する関数名と変換対象となるライブラリ中の関数の関数名が異なる場合には、ユーザが変換前のライブラリ中の関数の関数名を変換対象となるライブラリの関数に対応するようにわざわざプログラムを修正する必要があった。
【０００７】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、変換前のライブラリ中の関数にかかる関数名と変換対象のライブラリ中の関数にかかる関数名とが一致しなくとも関数を容易に変換可能とするライブラリ変換プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、請求項１の発明に係るライブラリ変換プログラムは、プログラム上のライブラリに含まれる関数を異なるライブラリの関数に変換するライブラリ変換プログラムであって、ライブラリに含まれる関数と該ライブラリと異なるライブラリに含まれる関数とを関連付けた情報であるライブラリリンク構造情報を生成するリンク構造情報生成手順と、前記ライブラリリンク構造情報を基にして、ライブラリに含まれる関数を異なるライブラリで同等の機能を有する関数に変換する変換処理手順と、をコンピュータに実行させることを特徴とする。
【０００９】
この請求項１の発明によれば、ライブラリ変換プログラムは、ライブラリに含まれる関数と該ライブラリと異なるライブラリに含まれる関数とを関連付けた情報であるライブラリリンク構造情報を生成し、生成したライブラリリンク構造情報を基にして、ライブラリに含まれる関数を異なるライブラリで同等の機能を有する関数に変換する。
【００１０】
また、請求項２の発明に係るライブラリ変換プログラムは、請求項１の発明において、前記リンク構造情報生成手順は、逐次ライブラリに含まれる関数と並列ライブラリに含まれる関数とを関連付けたライブラリリンク構造情報を生成し、前記変換処理手順は、前記ライブラリリンク構造情報を基にして、逐次ライブラリに含まれる関数を並列ライブラリで同等の機能を有する関数に変換することを特徴とする。
【００１１】
この請求項２の発明によれば、ライブラリ変換プログラムは、逐次ライブラリに含まれる関数と並列ライブラリに含まれる関数とを関連付けたライブラリリンク構造情報を生成し、生成したライブラリリンク構造情報を基にして、逐次ライブラリに含まれる関数を並列ライブラリで同等の機能を有する関数に変換する。
【００１２】
また、請求項３の発明に係るライブラリ変換プログラムは、請求項２の発明において、前記リンク構造情報生成手順は、前記逐次ライブラリに含まれる関数と関連付ける並列ライブラリの関数の精度および性能の情報を含んだ関連付先情報を取得する関連付先情報取得手順と、前記関連付先情報を基にして、前記逐次ライブラリの関数と並列ライブラリの関数とが１対１または多対１に関連付けられた情報であるライブラリリンク構造情報を生成するリンク生成手順とをさらにコンピュータに実行させることを特徴とする。
【００１３】
この請求項３の発明によれば、ライブラリ変換プログラムは、逐次ライブラリに含まれる関数と関連付ける並列ライブラリの関数の精度および性能の情報を含んだ関連付先情報を取得し、該関連付先情報を基にして、逐次ライブラリの関数と並列ライブラリの関数とが１対１または多対１に関連付けられた情報であるライブラリリンク構造情報を生成し、生成したライブラリリンク構造情報を基にして、逐次ライブラリに含まれる関数を並列ライブラリで同等の機能を有する関数に変換する。
【００１４】
また、請求項４の発明に係るライブラリ変換プログラムは、請求項２または３に記載の発明において、前記逐次ライブラリの関数に関連付けられる並列ライブラリの関数に対する入力データのデータ分割形式を解読し、前記並列ライブラリの関数の並列プロセスに利用されるデータを分割分配する分割関数を生成すると共に、該分割関数を前記プログラムに追加する分割関数生成手順をさらにコンピュータに実行させることを特徴とする。
【００１５】
この請求項４の発明によれば、ライブラリ変換プログラムは、逐次ライブラリ関数に関連付けられる並列ライブラリの関数に対する入力データのデータ分割形式を解読し、並列ライブラリの関数の並列プロセスに利用されるデータを分割分配する分割関数を生成すると共に、分割関数をプログラムに追加する。
【００１６】
また、請求項５の発明に係るライブラリ変換プログラムは、請求項２、３または４に記載の発明において、前記逐次ライブラリの関数に関連付けられる並列ライブラリの関数に対する出力データのデータ分割形式を解読し、前記並列ライブラリの関数の並列プロセスから分割されたデータを収集し結合する収集関数を生成すると共に、該収集関数を前記プログラムに追加する収集関数生成手順をさらにコンピュータに実行させることを特徴とする。
【００１７】
この請求項５の発明によれば、ライブラリ変換プログラムは、逐次ライブラリの関数に関連付けられる並列ライブラリの関数に対する出力データのデータ分割形式を解読し、並列ライブラリの関数の並列プロセスから分割されたデータを収集し結合する収集関数を生成すると共に、収集関数をプログラムに追加する。
【発明の効果】
【００１８】
請求項１の発明によれば、ライブラリ変換プログラムは、ライブラリに含まれる関数と該ライブラリと異なるライブラリに含まれる関数とを関連付けた情報であるライブラリリンク構造情報を生成し、生成したライブラリリンク構造情報を基にして、ライブラリに含まれる関数を異なるライブラリで同等の機能を有する関数に変換するので、変換前のライブラリの関数と、変換後のライブラリの関数との関数名が異なっていても効率よく関数を変換することができる。
【００１９】
また、請求項２の発明によれば、ライブラリ変換プログラムは、逐次ライブラリに含まれる関数と並列ライブラリに含まれる関数とを関連付けたライブラリリンク構造情報を生成し、生成したライブラリリンク構造情報を基にして、逐次ライブラリに含まれる関数を並列ライブラリで同等の機能を有する関数に変換するので、変換前の逐次ライブラリの関数と、変換後の並列ライブラリの関数との関数名が異なっていても効率よく関数を変換することができる。
【００２０】
また、請求項３の発明によれば、ライブラリ変換プログラムは、逐次ライブラリに含まれる関数と関連付ける並列ライブラリの関数の精度および性能の情報を含んだ関連付先情報を取得し、該関連付先情報を基にして、逐次ライブラリの関数と並列ライブラリの関数とが１対１または多対１に関連付けられた情報であるライブラリリンク構造情報を生成し、生成したライブラリリンク構造情報を基にして、逐次ライブラリに含まれる関数を並列ライブラリで同等の機能を有する関数に変換するので、変換前の逐次ライブラリの関数と、変換後の並列ライブラリの関数との機能が異なっていても効率よく関数を変換することができる。
【００２１】
また、請求項４の発明によれば、ライブラリ変換プログラムは、逐次ライブラリ関数に関連付けられる並列ライブラリの関数に対する入力データのデータ分割形式を解読し、並列ライブラリの関数の並列プロセスに利用されるデータを分割分配する分割関数を生成すると共に、分割関数をプログラムに追加するので、ユーザは、並列プログラムのノウハウを知らなくとも容易に並列プログラムを作成することができる。
【００２２】
また、請求項５の発明によれば、ライブラリ変換プログラムは、逐次ライブラリの関数に関連付けられる並列ライブラリの関数に対する出力データのデータ分割形式を解読し、並列ライブラリの関数の並列プロセスから分割されたデータを収集し結合する収集関数を生成すると共に、収集関数をプログラムに追加するので、ユーザは、並列プログラムのノウハウを知らなくとも容易に並列プログラムを作成することができる。
【発明を実施するための最良の形態】
【００２３】
以下に添付図面を参照して、この発明に係るライブラリ変換プログラムの好適な実施の形態を詳細に説明する。
【実施例】
【００２４】
まず、本実施例にかかるライブラリ変換の概念について説明する。本実施例に示すライブラリ変換装置は、プログラム上に存在する逐次ライブラリの関数（以下、逐次ライブラリ関数）の変換対象となる並列ライブラリの関数（以下、並列ライブラリ関数）を選択／変換すると共に、変換後の並列ライブラリ関数の前後に分割データを分割／収集する関数を追加する。
【００２５】
なお、本実施例では一例として、逐次ライブラリ関数を並列ライブラリ関数に変換する場合を示すが、これに限定されるものではなく、例えば、逐次ライブラリ関数を異なる逐次ライブラリ関数に変換することができる。
【００２６】
次に、本実施例に示すライブラリ変換装置の構成について説明する。図１は、本実施例に示すライブラリ変換装置の構成を示す機能ブロック図である。同図に示すように、このライブラリ変換装置１００は、キーボードやマウスなどの入力装置４０およびディスプレイなどの表示装置５０に接続されている。
【００２７】
また、ライブラリ変換装置１００は、前処理部２００と、記憶部３００と、後処理部４００とを有する。前処理部２００は、逐次ライブラリ関数の関数名や引数などの関係を示す逐次ライブラリテーブルと、並列ライブラリ関数の関数名、引数、精度、特性などの関係を示す並列ライブラリテーブルとを生成する処理部である（並列ライブラリテーブルは、入力装置４０から入力される並列ライブラリ関数の精度や特性などの情報を基にして生成される）。
【００２８】
さらに、前処理部２００は、生成した逐次ライブラリテーブルと並列ライブラリテーブルとを表示装置５０に表示し、各ライブラリ間で機能の等しい関数の情報を入力装置４０から取得する（ユーザが表示装置５０に表示された情報を基にして、各ライブラリ間で機能の等しい関数の情報を入力装置４０から入力する）。
【００２９】
そして、前処理部２００は、取得した情報を基に逐次ライブラリテーブルの逐次ライブラリ関数と並列ライブラリテーブルの並列ライブラリ関数とを関連付け、関連付けた情報を逐次／並列ライブラリリンク構造情報３００ａとして記憶部３００に記憶させる。
【００３０】
記憶部３００は、逐次／並列ライブラリリンク構造情報３００ａおよびライブラリ関数の変換対象となるプログラム３００ｂとを記憶する記憶部である。
【００３１】
後処理部４００は、プログラム３００ｂに含まれる逐次ライブラリ関数を並列ライブラリ関数に変換する処理部である。具体的に、この後処理部４００は、プログラム３００ｂの逐次ライブラリ関数に関連付けられた並列ライブラリ関数を逐次／並列ライブラリリンク構造情報３００ａから検索し、検索した並列ライブラリ関数と、対応する逐次ライブラリ関数とを置換する。なお、後処理部４００は、並列ライブラリ関数に対応する分割データが存在する場合には、分割データを分散／収集する関数を並列ライブラリ関数の前後に追加する。
【００３２】
次に、図１に示した前処理部２００の構成について説明する。図２は、図１に示した前処理部２００の構成を示す機能ブロック図である。同図に示すように、前処理部２００は、逐次ライブラリ情報記憶部２１０と、逐次ライブラリテーブル生成部２２０と、逐次ライブラリテーブル記憶部２３０と、並列ライブラリ情報記憶部２４０と、並列ライブラリテーブル生成部２５０と、並列ライブラリテーブル記憶部２６０と、逐次／並列ライブラリ初期リンク生成部２７０とを有する。
【００３３】
逐次ライブラリ情報記憶部２１０は、逐次ライブラリ関数の関数名や引数の情報を記憶する記憶部であり、逐次ライブラリテーブル生成部２２０は、逐次ライブラリ情報記憶部２１０に記憶された逐次ライブラリ関数の関数名や引数の情報を基にして、逐次ライブラリテーブルを作成する処理部である。
【００３４】
図３は、逐次ライブラリテーブルの一例を示す図である。同図に示すように、この逐次ライブラリテーブルは、「関数名」、「引数の数」および「引数１〜６」から構成される。ここで、「関数名」には逐次ライブラリ関数の名前が登録され、「引数の数」には逐次ライブラリ関数で利用される引数の数が登録され、「引数１〜６」には各引数の型、サイズ、入力データまたは出力データかを識別するための情報（ｉｎの場合は入力データであることを示し、ｏｕｔの場合は出力データであることを示す）が登録される。
【００３５】
なお、逐次ライブラリテーブル生成部２２０は、生成した逐次ライブラリテーブルを表示装置５０に表示させると共に、逐次ライブラリテーブルを逐次ライブラリテーブル記憶部２３０に記憶させる。逐次ライブラリテーブル記憶部２３０は、逐次ライブラリテーブルを記憶する記憶部である。
【００３６】
並列ライブラリ情報記憶部２４０は、並列ライブラリ関数の関数名や引数の情報を記憶する記憶部であり、並列ライブラリテーブル生成部２５０は、並列ライブラリ情報記憶部２４０に記憶された並列ライブラリ関数の関数名や引数の情報と、入力装置６０から入力される情報とを基にして並列ライブラリテーブルを生成する処理部である。
【００３７】
入力装置６０から並列ライブラリ生成部２５０に入力される情報は、並列ライブラリ関数の精度、性能および使用するメモリ量の情報を有する。また、並列ライブラリ関数が、プロセス並列用の関数であり、かつ使用されるデータを各プロセスに分割する必要のある関数である場合には、ユーザは、各プロセスに対応するように分割したデータ（以下、分割データ）と分割データの分割形式とを入力装置６０から並列ライブラリ生成部２５０に入力する。
【００３８】
図４は、並列ライブラリテーブルの一例を示す図である。同図に示すように、この並列ライブラリテーブルは、「関数名」、「引数の数」、「引数１〜６」、「精度」、「性能」、「メモリ量」および「分割データ」から構成される。
【００３９】
ここで、「関数名」には並列ライブラリ関数の名前が登録され、「引数の数」には並列ライブラリ関数で利用される引数の数が登録され、「引数１〜６」には各引数の型、サイズ、入力データまたは出力データかを識別するための情報（ｉｎの場合は入力データであることを示し、ｏｕｔの場合は出力データであることを示す）が登録される。
【００４０】
また、「精度」には並列ライブラリ関数の精度が登録され（＊の数が少ないほど精度が高い）、「性能」には並列ライブラリ関数の性能が登録され（＊の数が少ないほど性能が高い）、「メモリ量」には並列ライブラリ関数で使用されるメモリの量が登録され（＊の数が少ないほどメモリ使用量が少ない）、「分割データ」には分割変数と分割形式とが登録される。なお、“＊”は、入力装置のユーザインターフェースとして使用される表示形態である。
【００４１】
なお、並列ライブラリテーブル生成部２５０は、生成した並列ライブラリテーブルを表示装置５０に表示させると共に、並列ライブラリテーブルを並列ライブラリテーブル記憶部２６０に記憶させる。並列ライブラリテーブル記憶部２６０は、並列ライブラリテーブルを記憶する記憶部である。
【００４２】
逐次／並列ライブラリ初期リンク生成部２７０は、逐次ライブラリテーブル記憶部２１０に記憶された逐次ライブラリテーブルと、並列ライブラリテーブル記憶部２４０に記憶された並列ライブラリテーブルと、入力装置４０から入力される逐次ライブラリ関数および並列ライブラリ関数の結合情報とを基にして、逐次ライブラリ関数と並列ライブラリ関数とをリンク付け（関連付け）した逐次／並列ライブラリリンク構造情報３００ａを生成し、生成した逐次／並列ライブラリリンク構造情報３００ａを記憶部３００に記憶させる処理部である。
【００４３】
なお、逐次／並列ライブラリ初期リンク生成部２７０は、逐次ライブラリテーブルおよび並列ライブラリテーブルを表示装置５０に出力させ、ユーザが入力装置５０を介して機能の等しい逐次ライブラリ関数と並列ライブラリ関数とを関連付けることによって結合情報をえることになる。
【００４４】
図５は、逐次／並列ライブラリ初期リンク生成部２７０によって生成される逐次／並列ライブラリリンク構造情報３００ａの一例を示す図である。（なお、この図５に示される表示内容は、表示装置５０に表示されるものとする。）同図に示すように、この逐次／並列ライブラリリンク構造情報３００ａは、機能の等しい逐次ライブラリ関数と並列ライブラリ関数とが関連付けられている。
【００４５】
具体的には、逐次ライブラリテーブルの「dsyevx」が並列ライブラリテーブルの「dsyevx」「dsyevd」および「dsyevr」に関連付けられ、逐次ライブラリテーブルの「dsyevd」が並列ライブラリテーブルの「dsyevx」、「dsyevd」および「dsyevr」に関連付けられ、逐次ライブラリテーブルの「dsyevr」が、並列ライブラリテーブルの「dsyevx」、「dsyevd」および「dsyevr」に関連付けられ、逐次ライブラリテーブルの「dgemm」が並列ライブラリテーブルの「dgemm」に関連付けられている。
【００４６】
次に、図１に示した後処理部４００の構成について説明する。図６は、図１に示した後処理部４００の構成を示す機能ブロック図である。同図に示すように、この後処理部４０００は、コマンド受付部４１０と、リンク再構成処理部４２０と、ライブラリ置換処理部４３０と、ライブラリ関数検索部４４０とオブジェクトコード変換部４５０とを有する。
【００４７】
コマンド受付部４１０は、プログラム３００ｂのコンパイルを行うコマンド（以下、コンパイルコマンドと表記する）を入力装置４０から取得し、取得したコンパイルコマンドの指示内容を解析すると共に、解析した指示内容をリンク再構成処理部４２０に渡す処理部である。
【００４８】
例えば、コマンド受付部４１０がコンパイルコマンド「ffc-mxxx.c-laaa-lbbb-lccc-linktable link.lf」を取得した場合には、このコンパイルコマンドの指示内容は「ffc」○○社製Ｃコンパリラを使用し、「-m」ライブラリ関数の優先要素はメモリ量を優先し、「laaa-lbbb-lccc」リンクするライブラリをlaaaとlbbbとlcccとに指定し、「linktablle link.lf」利用するリンクテーブルを逐次／並列ライブラリリンク構造情報３３０ａに指定する旨を示している。
【００４９】
なお、コンパイルコマンドにかかる優先要素が「p」の場合には精度を優先する旨を示し、優先要素が「m」の場合には使用メモリを優先する（使用メモリ量の最も少ないライブラリ関数を優先する）旨を示し、優先要素が「s」の場合には処理速度を優先する旨を示す。
【００５０】
また、優先要素が「ms」の場合には、使用メモリ量を第一優先とし、メモリ使用量が最小の関数を検索する。メモリ使用量が最小の関数が複数存在する場合には、第二優先として、メモリ使用量が最小の関数の内、最も処理速度が速い関数を選択する旨を示す。その他、優先要素は「pm」、「pms」および「mp」などのように「p」、「m」、「s」を組み合わせて、ユーザが所望する関数を選択することができる。
【００５１】
さらに、優先要素は「m0.4s0.5p0.1」と指定することもできる（本実施例では一例を示す）。この場合、使用メモリ量を４０％の割合、処理速度を５０％の割合、精度を１０％の割合で優先することを示す。
【００５２】
リンク再構成処理部４２０は、逐次／並列ライブラリリンク構造情報３００ａをコマンド受付部４１０から渡される指示内容を基にして再構成する処理部であり、リンク構造排除処理部４２０ａと、Ｎ（多）対１リンク構造生成部４２０ｂとを有する。
【００５３】
リンク構造排除処理部４２０ａは、コマンド受付部４１０からリンクするライブラリにかかる情報（以下、リンクライブラリ情報）を取得し、取得したリンクライブラリ情報を基にして逐次／並列ライブラリリンク構造情報３００ａの初期リンク構造にある不要なライブラリテーブルやリンク構造を削除する。
【００５４】
図７は、初期リンク構造にある不要なライブラリテーブルやリンク構造の削除を説明するための説明図である。同図に示すように、初期リンク構造では、逐次ライブラリテーブル１が並列ライブラリ４にリンクされ、逐次ライブラリテーブル２が並列ライブラリテーブル５、６にリンクされ、逐次ライブラリテーブル３が並列ライブラリテーブル４〜８にリンクされている。
【００５５】
そして、リンク構造排除処理部４２０ａが、逐次ライブラリテーブル３と並列ライブラリテーブル４〜７をリンクする旨のリンクライブラリ情報を取得した場合には、逐次ライブラリテーブル１，２を削除すると共に、逐次ライブラリテーブル１と並列ライブラリテーブル４とのリンク、逐次ライブラリテーブル２と並列ライブラリテーブル５，６とのリンク、逐次ライブラリテーブル３と並列ライブラリテーブル８とのリンクを削除する。
【００５６】
Ｎ対１リンク構造生成部４２０ｂは、コマンド受付部４１０からコンパイルコマンドの優先要素にかかる情報（以下、優先要素情報）を取得し、取得した優先要素情報を基にして、逐次／並列ライブラリリンク構造情報３００ａでリンクされている複数の並列ライブラリ関数の内、最適な並列ライブラリ関数を選択し、「１対１またはＮ（多）対１」のリンク構造に再構成する処理部である。
【００５７】
図８は、メモリ量を優先した場合に、再構成される逐次／並列ライブラリリンク構造情報３００ａを示す図である。元々、逐次／並列ライブラリリンク構造情報３００ａは、図５に示したように、逐次ライブラリ関数「dsyevx」が並列ライブラリ関数「dsyevx」、「dsyevd」および「dsyevr」に関連付けれ、逐次ライブラリ関数「dsyevd」が並列ライブラリ関数「dsyevx」、「dsyevd」および「dsyevr」に関連付けれ、逐次ライブラリ関数「dsyevr」が並列ライブラリ関数「dsyevx」、「dsyevd」および「dsyevr」に関連付けれ、逐次ライブラリ関数「dgemm」が並列ライブラリ関数「dgemm」に関連付けられていた。
【００５８】
しかし、メモリ量を優先する場合には、図８に示すように、関連付けられた並列ライブラリ関数の内、使用されるメモリ量が最も少ない並列ライブラリ関数以外の関連付けを解除する。具体的には、逐次ライブラリ関数「dsyevx」を並列ライブラリ関数「dsyevr」のみに関連付け、逐次ライブラリ関数「dsyevd」を並列ライブラリ関数「dsyevr」のみに関連付け、逐次ライブラリ関数「dsyevr」を並列ライブラリ関数「dsyevr」のみに関連付ける。なお、逐次ライブラリ関数「dgemm」に関しては、一つの並列ライブラリ関数「dgemm」のみに関連付けられているため、関連付けに変更はない。
【００５９】
なお、図８に示した各関数の関連付けは、実際には関連付け先となる並列ライブラリ関数のポインタを利用することになる。図９は、ポインタによって関連付けられた逐次／並列ライブラリリンク構造情報３００ａの一例を示す図である。
【００６０】
同図に示すように、各逐次ライブラリ関数はそれぞれ関連付け先となる並列ライブラリ関数のポインタを有し、このポインタによって、関連付けられる並列ライブラリ関数が特定される。また、並列ライブラリテーブルの精度、性能およびメモリ量は、「＊」ではなく、実際には数字によって登録される。また、並列ライブラリテーブルのポインタ領域は「null」に設定され使用されない。
【００６１】
ライブラリ置換処理部４３０は、逐次／並列ライブラリリンク構造情報３００ａを基にして、プログラム上の逐次ライブラリ関数を並列ライブラリ関数に置換する処理部であり、整合性調整処理部４３０ａと、分割データ生成部４３０ｂと、収集データ生成部４３０ｃと、並列ライブラリ結合部４３０ｄとを有する。
【００６２】
整合性調整処理部４３０ａは、引数コンバータライブラリを保持し、関連付けられた逐次ライブラリ関数と並列ライブラリ関数との引数の並び順が異なる場合に、引数コンバータライブラリに含まれる引数コンバータライブラリ関数を利用して、逐次ライブラリ関数の引数の並び順と等しい並列ライブラリ関数を新たに生成し、生成した並列ライブラリ関数と逐次ライブラリ関数とを新たに関連付ける処理部である。
【００６３】
図１０は、整合性調整処理部４３０ａの処理を説明するための説明図である。同図に示すように、整合性調整処理部４３０ａは、逐次ライブラリ関数１０の引数の並びが並列ライブラリ関数１１の引数の並びと異なる場合に、並列ライブラリ関数１１の前に、引数コンバータライブラリ関数「argv_converter」を設定することによって、逐次ライブラリ関数１０の引数の並びと同様の引数の並びを有する並列ライブラリ関数１２を生成し、逐次ライブラリ関数１０と並列ライブラリ関数１２とを新たにリンク付ける。なお、整合性調整処理部４３０ａは、逐次ライブラリ関数１０と並列ライブラリ関数１１とのリンク付けは解除する。
【００６４】
分割データ生成部４３０ｂは、データ分割／収集ライブラリを保持し、置換対象となる並列ライブラリ関数に分割データの指定があり、かつ分割データが入力データに対応する場合に、分割データを各プロセスに分配する機能を有する関数をデータ分割／収集ライブラリから検索し、検索した関数と分割データとで分割関数を生成し、生成した分割関数を並列ライブラリ結合部４３０ｄに渡す処理部である。
【００６５】
例えば、変換対象となる並列ライブラリ関数が、図２に示す「dsyevr」であり、dsyevrに対する分割変数が「A,B,C」であり、この分割変数の内、「A,B」が入力データである場合には、分割データ生成部４３０ｂは、分割関数「div_data(a…)」、「div_data(b…)」を生成し、生成した分割関数を、並列ライブラリ結合部４３０に渡す。
【００６６】
収集データ生成部４３０ｃは、データ分割／収集ライブラリを保持し、置換対象となる並列ライブラリ関数に分割データの指定があり、かつ分割データが出力データに対応する場合に、各プロセスから出力されるデータを収集する機能を有する関数をデータ分割／収集ライブラリから検索し、検索した関数と分割データとで収集関数を生成し、生成した収集関数を並列ライブラリ結合部４３０ｄに渡す処理部である。
【００６７】
例えば、変換対象となる並列ライブラリ関数が、図２に示す「dsyevr」であり、dsyevrに対する分割変数が「A,B,C」であり、この分割変数の内、「C」が出力データである場合には、収集データ生成部４３０ｂは、収集関数「gather_data(c…)」を生成し、生成した収集関数を、並列ライブラリ結合部４３０ｄに渡す。
【００６８】
並列ライブラリ結合部４３０ｄは、プログラム３００ｂに含まれる逐次ライブラリ関数を、並列ライブラリ関数に置換する処理部である。具体的に、並列ライブラリ結合部４３０ｄは、並列ライブラリ関数に置換する場合に、並列ライブラリ関数の情報を整合性調整処理部４３０、分割データ生成部４３０ｂおよび収集データ生成部４３０ｃに通知する。
【００６９】
そして、整合性調整処理部４３０ａによって逐次ライブラリ関数と並列ライブラリ関数との引数の順番を調整され、分割データ生成部４３０ｂが分割関数を生成し、収集データ生成部４３０ｃが収集関数を生成し、並列ライブラリ結合部４３０ｄが変換対象となる並列ライブラリ関数と分割関数と収集関数とを結合し、結合した並列ライブラリ関数とプログラム上の逐次ライブラリ関数とを置換する。
【００７０】
図１１は、並列ライブラリ結合部４３０ｄが行う処理を説明するための説明図である。同図に示すように、並列ライブラリ結合部４３０ｄは、並列ライブラリテーブルの並列ライブラリ関数「dsyevr」と、分割関数「div_data(a…)」、「div_data(b…)」と、収集関数「gather_data(c…)」とを結合し、各関数を結合した並列ライブラリ関数と、プログラム上の逐次ライブラリ関数とを置換する。
【００７１】
なお、プログラム上にプラグマ（コンパイラへ特別な指示をするように開発プログラム中に書き込む指示文）が存在する場合は、並列ライブラリ結合部４３０ｄは、プラグマを解読し、プラグマによって指定された逐次ライブラリ関数を関連付けられた並列ライブラリ関数に変換する。
【００７２】
ライブラリ関数検索部４４０は、プログラム３００ｂ中のライブラリ関数のコールを検索し、コールされている逐次ライブラリ関数の情報を並列ライブラリ結合部４３０に通知する処理部である。並列ライブラリ結合部４３０ｄは、通知を受けた逐次ライブラリ関数のポインタを検索し、逐次ライブラリ関数が関連付けられている場合に（ポインタがnull以外の場合に）、逐次ライブラリ関数を並列ライブラリ関数に置換することになる。
【００７３】
また、ライブラリ関数検索部４４０は、プログラム中からプラグマを検出した場合には、プラグマを検出した旨と、対応する逐次ライブラリ関数の情報とを並列ライブラリ結合部４３０ｄに通知する。さらに、ライブラリ関数検索部４４０は、プログラム中からライブラリ関数のコールおよびプラグマを検索し終わった場合に、検索が終了した旨をオブジェクトコード変換部４５０に通知する。
【００７４】
オブジェクトコード変換処理部４５０は、ライブラリ関数検索部４４０からプログラム３００ｂ上のライブラリ関数のコールおよびプラグマを検索し終わった旨の通知を取得した場合に、プログラム３００ｂをオブジェクトコードに変換する処理部である。
【００７５】
次に、図６に示した後処理部４００の処理について説明する。図１２は、図６に示した後処理部４００の処理手順を示すフローチャートである。同図に示すように、後処理部４００は、コマンド受付部４１０がコンパイルコマンドを取得して、コンパイルコマンドの指示内容をリンク再編成処理部４２０に通知し（ステップＳ１０１）、リンク再編成処理部４２０が逐次／並列ライブラリリンク構造情報３００ａを取得する（ステップＳ１０２）。
【００７６】
そして、リンク構造排除処理部４２０ａが不要なライブラリとそのリンク構造を排除し（ステップＳ１０３）、Ｎ対１リンク構造生成部４２０ｂがコンパイルコマンドの指示内容に対するリンク構造を生成し（ステップＳ１０４）、ライブラリ関数検索部４４０がプログラム中にライブラリ関数コールがあるか否かを判定する（ステップＳ１０５）。
【００７７】
プログラム中にライブラリ関数のコールがない場合には（ステップＳ１０５，Ｎｏ）、処理を終了し、プログラム中にライブラリ関数のコールがある場合には（ステップＳ１０５，Ｙｅｓ）、並列ライブラリ結合部４３０ｄが、リンクされている関数があるか否かを判定する（ステップＳ１０６）。
【００７８】
リンクされている関数がない場合には（ステップＳ１０６，Ｎｏ）、処理を終了し、リンクされている関数がある場合には（ステップＳ１０６，Ｙｅｓ）、並列ライブラリ結合部４３０ｄがライブラリ関数の置換を行い（ステップＳ１０７）、整合性調整処理部４３０ａがリンクされた関数どうしの引数が一致するか否かを判定する（ステップＳ１０８）。
【００７９】
リンクされた関数どうしの引数が一致しない場合には（ステップＳ１０８，Ｎｏ）、整合性調整処理部４３０ａが引数並びの同じ関数を生成し、新たなリンク付けを行い（ステップＳ１０９）、分割データ生成部４３０ｂおよび収集データ生成部４３０ｃが変換後の関数に分割データがあるか否かを判定する（ステップＳ１１０）。一方、リンクされた関数どうしの引数が一致する場合には（ステップＳ１０８，Ｙｅｓ）、そのままステップＳ１１０に移行する。
【００８０】
関数に分割データがない場合には（ステップＳ１１０，Ｎｏ）、処理を終了し、関数に分割データがある場合には（ステップＳ１１０，Ｙｅｓ）、分割データ生成部４３０ｂが分割関数を生成し、収集データ生成部４３０ｃが収集関数を生成し、並列ライブラリ結合部４３０ｄが、分割関数または収集関数をプログラムに挿入する（ステップＳ１１１）。
【００８１】
このように、プログラム中のライブラリ関数にコールがあり、且つコールされた関数がリンクされている場合には、並列ライブラリ結合部４３０が、プログラム中の逐次ライブラリ関数を、並列ライブラリ関数に置換し、分割関数または収集関数をプログラムに挿入するので、置換対象となる逐次ライブラリ関数の機能などが、置換元の並列ライブラリ関数の機能などと異なっていてもユーザが元プログラム修正することなくライブラリ関数を置換することができる。
【００８２】
次に、プログラム中のプラグマを考慮した後処理部４００ｂの処理について説明する。図１３は、プログラム中のプラグマを考慮した後処理部４００ｂの処理手順を示すフローチャートである。同図に示すように、後処理部４００は、コマンド受付部４１０がコンパイルコマンドを取得して、コンパイルコマンドの指示内容をリンク再編成処理部４２０に通知し（ステップＳ２０１）、リンク再編成処理部４２０が逐次／並列ライブラリリンク構造情報３００ａを取得する（ステップＳ２０２）。
【００８３】
そして、リンク構造排除処理部４２０ａが不要なライブラリとそのリンク構造を排除し（ステップＳ２０３）、ライブラリ関数検索部４４０がプログラム中にプラグマ指定があるか否かを判定し（ステップＳ２０４）、プログラム中にプラグマ指定がある場合には（ステップＳ２０４，Ｙｅｓ）、ライブラリ置換処理部４３０がプラグマ処理を行い（ステップＳ２０５）、Ｎ対１リンク構造生成部４２０ｂがコンパイルコマンドの指示内容に対するリンク構造を生成する（ステップＳ２０６）。一方、プログラム中にプラグマ指定がない場合には（ステップＳ２０４，Ｎｏ）、そのままステップＳ２０６に移行する。
【００８４】
続いて、ライブラリ関数検索部４４０がプログラム中にライブラリ関数（プラグマ指定以外）コールがあるか否かを判定し（ステップＳ２０７）、プログラム中にライブラリ関数コールがない場合には（ステップＳ２０７，Ｎｏ）、処理を終了し、プログラム中にライブラリ関数コールがある場合には（ステップＳ２０７，Ｙｅｓ）、並列ライブラリ結合部４３０ｄが、リンクされている関数があるか否かを判定する（ステップＳ２０８）。
【００８５】
リンクされている関数がない場合には（ステップＳ２０８，Ｎｏ）、処理を終了し、リンクされている関数がある場合には（ステップＳ２０８，Ｙｅｓ）、並列ライブラリ結合部４３０ｄがライブラリ関数の置換を行い（ステップＳ２０９）、整合性調整処理部４３０ａがリンクされた関数どうしの引数が一致するか否かを判定する（ステップＳ２１０）。
【００８６】
リンクされた関数どうしの引数が一致しない場合には（ステップＳ２１０，Ｎｏ）、整合性調整処理部４３０ａが引数並びの同じ関数を生成し、新たなリンク付けを行い（ステップＳ２１１）、分割データ生成部４３０ｂおよび収集データ生成部４３０ｃが変換後の関数に分割データがあるか否かを判定する（ステップＳ２１２）。一方、リンクされた関数どうしの引数が一致する場合には（ステップＳ２１０，Ｙｅｓ）、そのままステップＳ２１２に移行する。
【００８７】
変換後の関数に分割データがない場合には（ステップＳ２１２，Ｎｏ）、処理を終了し、変換後の関数に分割データがある場合には（ステップＳ２１２，Ｙｅｓ）、分割データ生成部４３０ｂが分割関数を生成し、収集データ生成部４３０ｃが収集関数を生成し、並列ライブラリ結合部４３０ｄが分割関数または収集関数をプログラムに挿入する（ステップＳ２１３）。
【００８８】
次に、図１３のステップＳ２０５に示したプラグマ処理について説明する。図１４は、図１３のステップＳ２０５に示したプラグマ処理を示すフローチャートである。同図に示すように、後処理部４００は、並列ライブラリ結合部４３０ｄが使用するライブラリ関数を決定し、ライブラリ関数を置換する（ステップＳ３０１）。
【００８９】
そして、整合性調整部４３０ａがリンクされている関数どうしの引数が一致するか否かを判定し（ステップＳ３０２）、リンクされた関数どうしの引数が一致しない場合には（ステップＳ３０２，Ｎｏ）、整合性調整処理部４３０ａが引数並びの同じ関数を生成し、新たなリンク付けを行い（ステップＳ３０３）、分割データ生成部４３０ｂおよび収集データ生成部４３０ｃが変換後の関数に分割データがあるか否かを判定する（ステップＳ３０４）。一方、リンクされた関数どうしの引数が一致する場合には（ステップＳ３０２，Ｙｅｓ）、そのままステップＳ３０４に移行する。
【００９０】
変換後の関数に分割データがない場合には（ステップＳ３０４，Ｎｏ）、プラグマ処理を終了し、変換後の関数に分割データがある場合には（ステップＳ３０４，Ｙｅｓ）、分割データ生成部４３０ｂが分割関数を生成し、収集データ生成部４３０ｃが収集関数を生成し、並列ライブラリ結合部４３０ｄが分割関数または収集関数をプログラムに挿入する（ステップＳ３０５）。
【００９１】
このように、プログラム中にプラグマが存在する場合であっても、並列ライブラリ結合部４３０ｄがプラグマ指定されたライブラリ関数を、置換対象となるライブラリ関数に変換し、分割関数および収集関数を、置換したライブラリ関数の前後に追加するので、効率よくライブラリ関数を置換することができる。
【００９２】
上述してきたように、本実施例にかかるライブラリ変換装置１００は、予め、前処理部２００が、逐次／並列ライブラリリンク構造情報３００ａを生成する。そして、コンパイルコマンドをコマンド受付部４１０が受け取った場合に、コマンド受付部４１０が指示内容を解析し、リンク再構成処理部４２０がコンパイルコマンドの指示内容を基に、逐次／並列ライブラリリンク構造情報３００ａを変換し、ライブラリ置換処理部４３０が、変換された逐次／並列ライブラリリンク情報３００ａを基にして、プログラム中の逐次ライブラリ関数を、並列ライブラリ関数に置換するので、置換元の逐次ライブラリ関数関数名と置換対象となる並列ライブラリ関数関数名とが異なっていてもユーザが元プログラムを修正することなくライブラリ関数を置換することができる。
【００９３】
また、元プログラムを修正することなく、逐次ライブラリ関数を並列ライブラリ関数に変換することができるので、ユーザは並列プログラムのノウハウを知らなくとも容易に並列プログラムを作成することができ、並列プログラム開発を短縮化することが出来る。
【００９４】
ところで、上記の実施例で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することによって実現することができる。そこで、以下では、図１５を用いて、上記の実施例と同様の機能を有するライブラリ変換プログラムを実行するコンピュータの一例を説明する。図１５は、ライブラリ変換プログラムを実行するコンピュータを示す図である。
【００９５】
同図に示すように、ライブラリ変換装置としてのコンピュータ３０は、入力装置３１、表示装置３２、ＲＡＭ３３、ＨＤＤ３４、ＲＯＭ３５およびＣＰＵ３６をバス３７で接続して構成される。ここで、入力装置３１および表示装置３２は、図１に示した入力装置４０および表示装置５０にそれぞれ対応する。
【００９６】
そして、ＲＯＭ３５には、上記の実施例と同様の機能を発揮するライブラリ変換プログラム、つまり、図１５に示すように、逐次／並列ライブラリリンク生成プログラム３５ａ、並列ライブラリ結合処理プログラム３５ｂ、が予め記憶されている。
【００９７】
そして、ＣＰＵ３５が、これらのプログラム３５ａ，３５ｂをＲＯＭ３５から読み出して実行することで、図１５に示すように、各プログラム３５ａ，３５ｂは、逐次／並列ライブラリリンク生成プロセス３６ａ、並列ライブラリ結合処理プロセス３６ｂとして機能するようになる。逐次／並列ライブラリリンク生成プロセス３６ａは、図１に示した前処理部２００に対応し、並列ライブラリ結合処理プロセス３６ｂは、図１に示した後処理部４００に対応する。
【００９８】
また、ＨＤＤ３４には、図１５に示すように、変換対象プログラム３４ａとライブラリ情報３４ｂが記録される。なお、変換対象プログラム３４ａは、図１に示したプログラム３００ｂに対応し、ライブラリ情報３４ｂは、図２に示した逐次ライブラリ情報記憶部２１０および並列ライブラリ情報記憶部２４０に対応する。そして、ＣＰＵ３６は、変換対象プログラム３４ａおよびライブラリ情報３４ｂを読み出して、ＲＡＭ３３に格納する。また、ＣＰＵ３６は、逐次／並列ライブラリリンク構造情報３３ｃを作成し、作成した逐次／並列ライブラリリンク構造情報３３ｃを基にして、変換対象プログラム３３ａのライブラリ関数を置換する。ここで、逐次／並列ライブラリリンク構造情報３３ｃは、図１に示した逐次／並列ライブラリリンク構造情報３００ａに対応する。
【００９９】
ところで、上記したプログラム３５ａ、３５ｂについては、必ずしも最初からＲＯＭ３５に記憶させておく必要はなく、例えば、コンピュータに挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯディスク、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータ３０の内外に備えられるハードディスクドライブ（ＨＤＤ）などの「固定用の物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータ３０に接続される。「他のコンピュータ（またはサーバ）」などに各プログラムを記憶させておき、コンピュータ３０がこれらから各プログラムを読み出して実行するようにしてもよい。
【０１００】
（付記１）プログラム上のライブラリに含まれる関数を異なるライブラリの関数に変換するライブラリ変換プログラムであって、
ライブラリに含まれる関数と該ライブラリと異なるライブラリに含まれる関数とを関連付けた情報であるライブラリリンク構造情報を生成するリンク構造情報生成手順と、
前記ライブラリリンク構造情報を基にして、ライブラリに含まれる関数を異なるライブラリで同等の機能を有する関数に変換する変換処理手順と、
をコンピュータに実行させることを特徴とするライブラリ変換プログラム。
【０１０１】
（付記２）前記リンク構造情報生成手順は、逐次ライブラリに含まれる関数と並列ライブラリに含まれる関数とを関連付けたライブラリリンク構造情報を生成し、前記変換処理手順は、前記ライブラリリンク構造情報を基にして、逐次ライブラリに含まれる関数を並列ライブラリで同等の機能を有する関数に変換することを特徴とする付記１に記載のライブラリ変換プログラム。
【０１０２】
（付記３）前記リンク構造情報生成手順は、前記逐次ライブラリに含まれる関数と関連付ける並列ライブラリの関数の精度および性能の情報を含んだ関連付先情報を取得する関連付先情報取得手順と、前記関連付先情報を基にして、前記逐次ライブラリの関数と並列ライブラリの関数とが１対１または多対１に関連付けられた情報であるライブラリリンク構造情報を生成するリンク生成手順とをさらにコンピュータに実行させることを特徴とする付記２に記載のライブラリ変換プログラム。
【０１０３】
（付記４）前記逐次ライブラリの関数に関連付けられる並列ライブラリの関数に対する入力データのデータ分割形式を解読し、前記並列ライブラリの関数の並列プロセスに利用されるデータを分割分配する分割関数を生成すると共に、該分割関数を前記プログラムに追加する分割関数生成手順をさらにコンピュータに実行させることを特徴とする付記２または３に記載のライブラリ変換プログラム。
【０１０４】
（付記５）前記逐次ライブラリの関数に関連付けられる並列ライブラリの関数に対する出力データのデータ分割形式を解読し、前記並列ライブラリの関数の並列プロセスから分割されたデータを収集し結合する収集関数を生成すると共に、該収集関数を前記プログラムに追加する収集関数生成手順をさらにコンピュータに実行させることを特徴とする付記２、３または４に記載のライブラリ変換プログラム。
【０１０５】
（付記６）プログラムに含まれるプラグマを検索し、プラグマに対応する逐次ライブラリの関数を同等の機能を有する並列ライブラリの関数に変換するプラグマ処理手順をさらにコンピュータに実行させることを特徴とする付記１〜５のいずれか一つに記載のライブラリ変換プログラム。
【０１０６】
（付記７）プログラム上のライブラリに含まれる関数を異なるライブラリの関数に変換するライブラリ変換方法であって、
ライブラリに含まれる関数と該ライブラリと異なるライブラリに含まれる関数とを関連付けた情報であるライブラリリンク構造情報を生成するリンク構造情報生成工程と、
前記ライブラリリンク構造情報を基にして、ライブラリに含まれる関数を異なるライブラリで同等の機能を有する関数に変換する変換処理工程と、
を含んだことを特徴とするライブラリ変換方法。
【０１０７】
（付記８）前記リンク構造情報生成工程は、逐次ライブラリに含まれる関数と並列ライブラリに含まれる関数とを関連付けたライブラリリンク構造情報を生成し、前記変換処理工程は、前記ライブラリリンク構造情報を基にして、逐次ライブラリに含まれる関数を並列ライブラリで同等の機能を有する関数に変換することを特徴とする付記７に記載のライブラリ変換方法。
【０１０８】
（付記９）前記リンク構造情報生成工程は、前記逐次ライブラリに含まれる関数と関連付ける並列ライブラリの関数の精度および性能の情報を含んだ関連付先情報を取得する関連付先情報取得工程と、前記関連付先情報を基にして、前記逐次ライブラリの関数と並列ライブラリの関数とが１対１または多対１に関連付けられた情報であるライブラリリンク構造情報を生成するリンク生成工程とをさらに含んだことを特徴とする付記８に記載のライブラリ変換方法。
【０１０９】
（付記１０）前記逐次ライブラリの関数に関連付けられる並列ライブラリの関数に対する入力データのデータ分割形式を解読し、前記並列ライブラリの関数の並列プロセスに利用されるデータを分割分配する分割関数を生成すると共に、該分割関数を前記プログラムに追加する分割関数生成工程をさらに含んだことを特徴とする付記８または９に記載のライブラリ変換方法。
【０１１０】
（付記１１）前記逐次ライブラリの関数に関連付けられる並列ライブラリの関数に対する出力データのデータ分割形式を解読し、前記並列ライブラリの関数の並列プロセスから分割されたデータを収集し結合する収集関数を生成すると共に、該収集関数を前記プログラムに追加する収集関数生成工程をさらに含んだことを特徴とする付記８、９または１０に記載のライブラリ変換方法。
【０１１１】
（付記１２）プログラムに含まれるプラグマを検索し、プラグマに対応する逐次ライブラリの関数を同等の機能を有する並列ライブラリの関数に変換するプラグマ処理工程をさらに含んだことを特徴とする付記７〜１１のいずれか一つに記載のライブラリ変換方法。
【産業上の利用可能性】
【０１１２】
以上のように、本発明にかかるライブラリ変換プログラムは、置換前のライブラリ関数と、置換後のライブラリ関数との関数名が異なる場合であっても、ライブラリ関数を容易に置換する必要のあるライブラリ変換装置などに対して有用である。
【図面の簡単な説明】
【０１１３】
【図１】本実施例に示すライブラリ変換装置の構成を示す機能ブロック図である。
【図２】図１に示した前処理部の構成を示す機能ブロック図である。
【図３】逐次ライブラリテーブルの一例を示す図である。
【図４】並列ライブラリテーブルの一例を示す図である。
【図５】逐次／並列ライブラリ初期リンク生成部によって生成される逐次／並列ライブラリリンク構造情報の一例を示す図である。
【図６】図１に示した後処理部の構成を示す機能ブロック図である。
【図７】初期リンク構造にある不要なライブラリテーブルやリンク構造の削除を説明するための説明図である。
【図８】メモリ量を優先した場合に、再構成される逐次／並列ライブラリリンク構造情報を示す図である。
【図９】ポインタによって関連付けられた逐次／並列ライブラリリンク構造情報の一例を示す図である。
【図１０】整合性調整処理部の処理を説明するための説明図である。
【図１１】並列ライブラリ結合部が行う処理を説明するための説明図である。
【図１２】図６に示した後処理部の処理手順を示すフローチャートである。
【図１３】プログラム中のプラグマを考慮した後処理部の処理手順を示すフローチャートである。
【図１４】図１３のステップＳ２０５に示したプラグマ処理を示すフローチャートである。
【図１５】ライブラリ変換プログラムを実行するコンピュータを示す図である。
【符号の説明】
【０１１４】
４０  入力装置
５０  表示装置
１００    ライブラリ変換装置
２００    前処理部
２１０    逐次ライブラリ情報記憶部
２２０    逐次ライブラリテーブル生成部
２３０    逐次ライブラリテーブル記憶部
２４０    並列ライブラリ情報記憶部
２５０    並列ライブラリテーブル生成部
２６０    並列ライブラリテーブル記憶部
２７０    逐次／並列ライブラリ初期リンク生成部
３００    記憶部
３００ａ  逐次／並列ライブラリリンク構造情報
３００ｂ  プログラム
４００    後処理部
４１０    コマンド受付部
４２０    リンク再構成処理部
４２０ａ  リンク構造排除処理部
４２０ｂ  Ｎ対１リンク構造生成部
４３０    ライブラリ置換処理部
４３０ａ  整合性調整処理部
４３０ｂ  分割データ生成部
４３０ｃ  収集データ生成部
４３０ｄ  並列ライブラリ結合部
４４０    ライブラリ関数検索処理部
４５０    オブジェクトコード変換部
【図１】
2006164142.tif 000003
【図２】
2006164142.tif 000004
【図３】
2006164142.tif 000005
【図４】
2006164142.tif 000006
【図５】
2006164142.tif 000007
【図６】
2006164142.tif 000008
【図７】
2006164142.tif 000009
【図８】
2006164142.tif 000010
【図９】
2006164142.tif 000011
【図１０】
2006164142.tif 000012
【図１１】
2006164142.tif 000013
【図１２】
2006164142.tif 000014
【図１３】
2006164142.tif 000015
【図１４】
2006164142.tif 000016
【図１５】
2006164142.tif 000017