JP5521616B2 - 転送プログラム生成装置、転送プログラム生成方法およびプログラム - Google Patents

転送プログラム生成装置、転送プログラム生成方法およびプログラム Download PDF

Info

Publication number
JP5521616B2
JP5521616B2 JP2010032397A JP2010032397A JP5521616B2 JP 5521616 B2 JP5521616 B2 JP 5521616B2 JP 2010032397 A JP2010032397 A JP 2010032397A JP 2010032397 A JP2010032397 A JP 2010032397A JP 5521616 B2 JP5521616 B2 JP 5521616B2
Authority
JP
Japan
Prior art keywords
function
data
input data
declaration
program
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.)
Active
Application number
JP2010032397A
Other languages
English (en)
Other versions
JP2011170512A (ja
Inventor
一久 石坂
淳嗣 酒井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2010032397A priority Critical patent/JP5521616B2/ja
Publication of JP2011170512A publication Critical patent/JP2011170512A/ja
Application granted granted Critical
Publication of JP5521616B2 publication Critical patent/JP5521616B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、転送プログラム生成装置、処理システム、転送プログラム生成方法およびプログラムに関し、特には、複数のプロセッサを用いてプログラムを実行する際に用いられる転送用プログラムを生成する転送プログラム生成装置、処理システム、転送プログラム生成方法およびプログラムに関する。
あるプロセッサ(以下「第1プロセッサ」と呼ぶ)が実行しているプログラムにて規定された処理の一部を、別のプロセッサ(以下「第2プロセッサ」と呼ぶ)が実行する分散処理が知られている。
分散処理では、複数のプロセッサが並列にプログラムを実行できる。このため、分散処理では、プログラムの処理時間を短縮することができる。また、分散処理では、第1プロセッサが単独でプログラムを実行するときに比べて、第1プロセッサの負荷が下がるので、第1プロセッサが同時に別のプログラムを実行することが可能になる。また、分散処理では、第1プロセッサが、第2プロセッサが有する固有の機能を利用することが可能になる。
一般に、互いに異なる計算機上のプロセッサは、互いに異なるメモリアドレス空間(以下「アドレス空間」と呼ぶ)を使用する。
このため、第2プロセッサが、第1プロセッサが使用するアドレス空間と異なるアドレス空間(以下「別アドレス空間」と呼ぶ)を使用する場合、互いに異なるアドレス空間を使用する第1および第2プロセッサが、1つのプログラムを実行することになる。また、マルチコアプロセッサを持つ単一の計算機でも、複数のOS(Operating System)が搭載され、かつ、OSごとにアドレス空間が異なる場合は、アドレス空間の異なる複数のプロセッサが1つのプログラムを動かすことになる。
第1プロセッサが実行しているプログラムにて規定された処理の一部を、別アドレス空間を使用する第2プロセッサに実行させる手続きは、リモートプロシージャコール(RPC:Remote Procedure Call)として知られている。
RPCは、第1プロセッサが別アドレス空間上の関数を呼び出す技術である。RPCが用いられると、第1プロセッサで実行されるプログラム中の一部の関数を、別アドレス空間を使用する第2プロセッサに実行させることが可能になる。
プログラムを実行している第1プロセッサとアドレス空間が異なる第2プロセッサが、プログラムで規定された関数を実行するためには、第1プロセッサが、第2プロセッサが関数を実行するために必要なデータを第2プロセッサに転送し、第2プロセッサが、関数の実行結果を第1プロセッサに転送する必要がある。このため、プログラムに、データ転送処理を規定する転送プログラムを追加する必要がある(以下、この追加されるプログラムを「スタブ」と呼ぶ)。
スタブの追加は、プログラマにとって余計な手間であるため、第2プロセッサに処理の一部をオフロードする際の障壁となる。
特許文献1には、インターフェース定義言語(IDL:Interface Definition Language)を利用してスタブを生成するクライアント/サーバアプリケーション作成装置(以下、単に「作成装置」と呼ぶ)が記載されている。
IDLは、プログラムのソースコードを記述するための言語ではなく、関数の入出力を定義するための言語である。特許文献1に記載の作成装置は、IDLで定義された情報を用いて、自動的にスタブを作成する。
特開2005−352891号公報
特許文献1に記載の作成装置では、スタブを作成するためにIDLが利用される。このため、特許文献1に記載の作成装置を使用するプログラマは、IDLを利用して関数の入出力を定義する必要がある。よって、プログラマは、IDLについて学習する必要があり、プログラムのソースコードとは別に、IDLを用いて関数の入出力を定義する必要があるという課題があった。
本発明の目的は、上述した課題を解決可能な転送プログラム生成装置、処理システム、転送プログラム生成方法およびプログラムを提供することにある。
本発明の転送プログラム生成装置は、所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析手段と、前記解析手段にて特定された入力データを送信し、その後、前記解析手段にて特定された出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成手段と、前記解析手段にて特定された入力データを受信し、その後、前記解析手段にて特定された出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成手段と、を含み、
前記関数の宣言には、データサイズが規定された複数の引数と、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す属性とが、記述されており、
前記解析手段は、前記関数の宣言に記述された引数のうち、前記属性にて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にて出力データであると示された引数を、前記出力データとして特定し、
前記属性は、前記引数に付加された文字列であり、
前記文字列は、当該文字列が付加された引数に対して、入力か出力かを区別するデータ転送方向と、転送するデータサイズと、を特定する方法を示す文字列で構成される。また
発明の転送プログラム生成装置は、
所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析手段と、
前記解析手段にて特定された入力データを送信し、その後、前記解析手段にて特定された出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成手段と、
前記解析手段にて特定された入力データを受信し、その後、前記解析手段にて特定された出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成手段と、を含み、
前記関数の宣言には、引数を用いて前記入力データと前記入力データのサイズとを規定するための所定仕様に従って前記入力データと前記入力データのサイズが規定されており、
前記所定仕様は、前記引数に対して、入力に対応するデータ転送方向と、転送するデータサイズと、を特定する方法を示す仕様であり、
前記解析手段は、前記所定仕様に従って前記関数の宣言を解析することによって、前記規定されたサイズの入力データを特定する。
本発明の転送プログラム生成方法は、転送プログラム生成装置が行う転送プログラム生成方法であって、所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析ステップと、前記入力データを送信し、その後、前記出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成ステップと、前記入力データを受信し、その後、前記出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成ステップと、を含み、
前記関数の宣言には、データサイズが規定された複数の引数と、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す属性とが、記述されており、
前記解析ステップでは、前記関数の宣言に記述された引数のうち、前記属性にて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にて出力データであると示された引数を、前記出力データとして特定し、
前記属性は、前記引数に付加された文字列であり、
前記文字列は、当該文字列が付加された引数に対して、入力か出力かを区別するデータ転送方向と、転送するデータサイズと、を特定する方法を示す文字列で構成される。また
発明の転送プログラム生成方法は、
転送プログラム生成装置が行う転送プログラム生成方法であって、
所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析ステップと、
前記入力データを送信し、その後、前記出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成ステップと、
前記入力データを受信し、その後、前記出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成ステップと、を含み、
前記関数の宣言には、引数を用いて前記入力データと前記入力データのサイズとを規定するための所定仕様に従って前記入力データと前記入力データのサイズが規定されており、
前記所定仕様は、前記引数に対して、入力に対応するデータ転送方向と、転送するデータサイズと、を特定する方法を示す仕様であり、
前記解析ステップでは、前記所定仕様に従って前記関数の宣言を解析することによって、前記規定されたサイズの入力データを特定する。
本発明のプログラムは、コンピュータに、所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析手順と、前記入力データを送信し、その後、前記出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成手順と、前記入力データを受信し、その後、前記出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成手順と、を実行させ、
前記関数の宣言には、データサイズが規定された複数の引数と、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す属性とが、記述されており、
前記解析手順では、前記関数の宣言に記述された引数のうち、前記属性にて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にて出力データであると示された引数を、前記出力データとして特定し、
前記属性は、前記引数に付加された文字列であり、
前記文字列は、当該文字列が付加された引数に対して、入力か出力かを区別するデータ転送方向と、転送するデータサイズと、を特定する方法を示す文字列で構成される。また
発明のプログラムは、
コンピュータに、
所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析手順と、
前記入力データを送信し、その後、前記出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成手順と、
前記入力データを受信し、その後、前記出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成手順と、を実行させ、
前記関数の宣言には、引数を用いて前記入力データと前記入力データのサイズとを規定するための所定仕様に従って前記入力データと前記入力データのサイズが規定されており、
前記所定仕様は、前記引数に対して、入力に対応するデータ転送方向と、転送するデータサイズと、を特定する方法を示す仕様であり、
前記解析手順では、前記所定仕様に従って前記関数の宣言を解析することによって、前記規定されたサイズの入力データを特定する。
本発明によれば、転送プログラムを生成する際のプログラマの負担を軽減することが可能になる。
本発明の第1実施形態の構成を説明するための図面である。 本発明の第1実施形態の変形例を説明するための図面である。 本発明の第1実施形態の動作を説明するための図面である。 本発明の第1実施形態の動作を説明するための図面である。 本発明の第2実施形態の構成を説明するための図面である。 本発明の第3実施形態の構成を説明するための図面である。 本発明の第4実施形態の構成を説明するための図面である。 本発明の第4実施形態で用いられる追加仕様を説明するための図面である。 本発明の第4実施形態で用いられる追加仕様を説明するための図面である。 本発明の第5実施形態の構成を説明するための図面である。 本発明の第5実施形態の変形例を説明するための図面である。 本発明の第6実施形態の構成を説明するための図面である。
次に、本発明を実施するための形態について図面を参照して詳細に説明する。
(第1実施形態)
図1は、本発明の第1実施形態のスタブ生成部1の構成を示すブロック図である。
図1において、スタブ生成部1は、一般的に転送プログラム生成装置と呼ぶことができる。スタブ生成部1は、転送データ決定部11と、呼び出し元スタブ生成部12と、呼び出し先スタブ生成部13と、を含む。転送データ決定部11は、関数宣言解析部2を備える。
スタブ生成部1は、主プログラムに記述されたある関数(以下「リモート関数」と呼ぶ)についての関数の宣言(以下「リモート関数の宣言」と呼ぶ)101を受け付け、呼び出し元スタブ102と、呼び出し先スタブ103と、を出力する。
リモート関数の宣言101は、例えば、主プログラムのヘッダファイルに記述されている。リモート関数は、一般的に所定関数と呼ぶことができる。呼び出し元スタブ102は、一般的に第1転送プログラムまたは呼出元プログラムと呼ぶことができる。呼び出し先スタブ103は、一般的に第2転送プログラムまたは呼出先プログラムと呼ぶことができる。
リモート関数とは、主プログラムを実行しリモート関数の呼び出し元であるプロセッサ(以下「呼び出し元プロセッサ」と呼ぶ)が使用するアドレス空間とは異なるアドレス空間を使用するプロセッサ(以下「呼び出し先プロセッサ」と呼ぶ)で実行される関数とする。
呼び出し元プロセッサは、一般的に第1プロセッサと呼ぶことができる。呼び出し先プロセッサは、一般的に第2プロセッサと呼ぶことができる。
本実施形態では、リモート関数として、呼び出し元プロセッサが呼び出し先プロセッサにリモート関数を実行させるために呼び出し元プロセッサと呼び出し先プロセッサとの間で転送される必要があるデータ(以下「転送データ」と呼ぶ)をプログラミング言語の仕様に従った関数の宣言(リモート関数の宣言101)から判断できる関数が用いられる。本実施形態でリモート関数として用いられる関数の例については後述する。
転送データは、入力データと出力データとから構成される。入力データとは、リモート関数の実行前に、呼び出し元プロセッサから呼び出し先プロセッサに転送されるデータである。さらに言えば、入力データは、呼び出し先プロセッサがリモート関数を実行するために必要なデータである。出力データとは、リモート関数の実行後に、呼び出し先プロセッサから呼び出し元プロセッサへ転送されるデータである。さらに言えば、出力データは、リモート関数の実行結果である。
なお、関数の宣言とは、プログラミング言語にて規定された情報であって、関数を呼び出すために必要な情報であり、一般に、関数の名前(名称)、引数リスト(引数単位で、引数の型と引数となる変数名とを示したリスト)、および、戻り値の型などの情報を含み、関数の処理内容の記述を含まない。
スタブ生成部1は、リモート関数が記述された主プログラムを実行する呼び出し元プロセッサにて実行される呼び出し元スタブ102と、呼び出し先プロセッサにて実行される呼び出し先スタブ103と、を生成する。
転送データ決定部11は、一般的に解析手段と呼ぶことができる。
転送データ決定部11は、主プログラムのソースコードに記述された特定情報を受け付ける。特定情報は、転送データを特定するための情報である。転送データ決定部11は、特定情報を受け付けると、その特定情報に基づいて、転送データを特定する。本実施形態では、特定情報として、リモート関数の宣言101が用いられる。
関数宣言解析部2は、主プログラムのソースコードの記述に使用されたプログラミング言語の仕様に基づきリモート関数の宣言101を解析することによって、転送データを決定する。
呼び出し元スタブ生成部12は、一般的に第1生成手段と呼ぶことができる。
呼び出し元スタブ生成部12は、転送データ決定部11によって決定された転送データに基づいて、呼び出し元スタブ102を生成する。
呼び出し元スタブ102は、転送データ決定部11にて特定された入力データをリモート関数の実行前に送信し、転送データ決定部11にて特定された出力データをリモート関数の実行終了後に受信する、という手順を少なくとも含む処理を、呼び出し元プロセッサに実行させるために使用される呼出元プログラムである。
呼び出し先スタブ生成部13は、一般的に第2生成手段と呼ぶことができる。
呼び出し先スタブ生成部13は、転送データ決定部11によって決定された転送データに基づいて、呼び出し先スタブ103を生成する。
呼び出し先スタブ103は、転送データ決定部11にて特定された入力データをリモート関数の実行前に受信し、転送データ決定部11にて特定された出力データをリモート関数の実行終了後に送信する、という手順を少なくとも含む処理を、呼び出し先プロセッサに実行させるために使用される呼出先プログラムである。
なお、スタブ生成部1は、コンピュータにて実現されてもよい。図2は、スタブ生成部1が、コンピュータであるCPU(Central Processing Unit)100にて実現される例を示した図である。図2において、図1に示したものと同一機能を有するものには同一符号を付してある。
図2では、CPU100は、ハードディスク200に記録されたプログラムを読み込み実行することによって、関数宣言解析部2、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13として機能する。ハードディスク200は、コンピュータにて読み取り可能な記録媒体の一例である。なお、記録媒体は、ハードディスク200に限らず適宜変更可能である。また、関数宣言解析部2、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13のそれぞれは、ハードウェアにて実現されてもよい。
次に、本実施形態の動作について説明する。
最初に、スタブ生成部1によるスタブ生成動作を説明する。
まず、関数宣言解析部2が、リモート関数の宣言101を読み込む。
本実施形態では、リモート関数として、転送データをリモート関数の宣言101から判断できる関数が用いられている。本実施形態では、リモート関数の宣言101には、データサイズが規定された引数を示す引数情報(引数リスト)と、データサイズが規定された戻り値を示す戻り値情報(戻り値の型および関数名)とが、少なくとも記述されている。
関数宣言解析部2は、リモート関数の宣言101を読み込むと、主プログラムのプログラミング言語の仕様に基づきリモート関数の宣言101を解析することによって、リモート関数の入力データおよび出力データ、つまり、転送データを決定する。
関数宣言解析部2がリモート関数の入力データおよび出力データを決定する方法としては、例えば、リモート関数の宣言101に記述されたリモート関数の引数を入力データとして決定し、リモート関数の戻り値を出力データとして決定する方法が用いられる。
関数宣言解析部2は、リモート関数の入力データおよび出力データを決定すると、リモート関数の入力データおよび出力データを、呼び出し元スタブ生成部12と、呼び出し先スタブ生成部13と、に提供する。
呼び出し元スタブ生成部12は、リモート関数の入力データおよび出力データを受け付けると、呼び出し元スタブ102を生成する。
呼び出し先スタブ生成部13は、リモート関数の入力データおよび出力データを受け付けると、呼び出し先スタブ103を生成する。
次に、呼び出し元スタブ102と呼び出し先スタブ103とを利用して、リモート関数を、主プログラムを実行するプロセッサ(呼び出し元プロセッサ)と異なるプロセッサ(呼び出し先プロセッサ)で実行する場合の動作(以下「実行動作」と呼ぶ)について説明する。
なお、実行動作は、リモートプロシージャコール(RPC)技術で一般的な動作であるため、ここでは実行動作を簡単に説明する。
以下では、主プログラムAを実行しているプロセッサ1aが、リモート関数104をプロセッサ1b上で実行させる場合について説明する。
図3は、リモート関数104の実行までの動作を示した図である。
まず、プロセッサ1aは、主プログラムAを実行することによって、呼び出し元スタブ102を呼び出し、呼び出し元スタブ102を実行する。
プロセッサ1aは、呼び出し元スタブ102を実行すると、入力データをプロセッサ1bに送信し、その後、プロセッサ1bにリモート関数104の実行を指示する。
続いて、プロセッサ1b上で呼び出し先スタブ103が実行され、プロセッサ1bは、入力データを受信し、リモート関数104を呼び出し、リモート関数104の実行を開始する。
図4は、リモート関数104の実行終了後の動作を示した図である。
リモート関数104の実行が終了すると、呼び出し先スタブ103を実行するプロセッサ1bが、リモート関数104の演算結果を、出力データとして、プロセッサ1aに送信する。呼び出し元スタブ102を実行するプロセッサ1aは、出力データを受信し、その出力データをプログラムAに渡す。
なお、プロセッサ1aとプロセッサ1bとは、単一計算機上の異なるプロセッサでもよいし、異なる計算機上のプロセッサでもよい。
次に、本実施形態の一具体例を説明する。
本実施形態では、リモート関数として、リモート関数の転送データをリモート関数の宣言101から決定することが可能な関数(以下「第1関数」と呼ぶ)が用いられる。
具体的な第1関数についての関数の定義および関数宣言をプログラム言語であるC言語で記述した例を以下に示す。
なお、第1関数についての関数の宣言には、リモート関数の名称と、リモート関数の戻り値が存在することを示し戻り値のデータサイズを規定する戻り値の型と、リモート関数の引数が存在することを示し引数のデータサイズを規定する引数リストと、が記述されている。
関数の定義:
int add(int x, int y)
[
int z;
z = x + y;
return z;
]
関数の宣言:
int add(int x, int y);
リモート関数を呼び出すプログラムの例を以下に示す。
void main(void)
[
int a, b, c;
:
c = add(a, b);
]
add関数の定義および宣言から、add関数の実行に必要な入力データは、引数であるxとyであることと、add関数からの出力データは、戻り値であることが分かる。また、add関数の定義および宣言から、x、yおよび戻り値のそれぞれはint型の変数であることが分かり、よって、転送するべきデータのサイズも決定できる。
したがって、add関数は、リモート関数の宣言101から転送データを決定できる関数である。
関数宣言解析部2は、リモート関数の宣言101を解析して、リモート関数の引数を入力データとして決定し、リモート関数の戻り値を出力データとして決定し、各データのサイズを、データ(引数と戻り値)の型から決定する。
呼び出し元スタブ生成部12は、関数宣言解析部2が決定したadd関数についての転送データに基づき、呼び出し元スタブ102として、int型変数2個を引数に取り、戻り値がint型であるスタブ関数を生成する。
呼び出し元スタブ102であるスタブ関数には、引数で受け取った2つのint型のデータを呼び出し先プロセッサへ送信し、呼び出し先プロセッサにadd関数を実行するように指示をした後、呼び出し先プロセッサからint型のデータを1つ受け取るという一連の動作が記述される。呼び出し元スタブ102であるスタブ関数を、以下に示す。
int add_caller_stub(int x, int y)
[
int z;
send(&x, sizeof(int));
send(&y, sizeof(int));
call(ADD);
recv(&z, sizeof(int));
return z;
]
なお、上記スタブ関数において、sendはデータの送信、callは指定した関数の呼び出し、recvはデータの受信を示すための擬似的な関数である。実際には、呼び出し先プロセッサを特定するための引数などが追加されても良い。例えば、呼び出し元スタブ生成部12は、呼び出し先プロセッサを特定するための引数をさらに受け付け、その引数を、上記スタブ関数に追加してもよい。
次に、呼び出し先スタブ生成部13が生成する呼び出し先スタブ(スタブ関数)103を以下に示す。
void add_callee_stub(void)
[
int x, y, z;
recv(&x, sizeof(int));
recv(&y, sizeof(int));
z = add(x, y);
send(&z, sizeof(int));
]
呼び出し先スタブ103には、呼び出し元プロセッサからint型のデータを2つ受信し、次に、これらの受信されたデータを引数として用いてadd関数を実行し、add関数の実行結果を呼び出し元プロセッサに送信するという一連の動作が記述される。なお、実際には、呼び出し先スタブ103には、呼び出し元プロセッサを特定するための引数などが追加されても良い。例えば、呼び出し先スタブ生成部13は、呼び出し元プロセッサを特定するための引数をさらに受け付け、その引数を、呼び出し先スタブ103に追加してもよい。
本実施形態によれば、転送データ決定部11は、主プログラムのソースコードに記述された特定情報(入力データと出力データとを特定するための情報)に基づいて、入力データと出力データとを特定する。
呼び出し元スタブ生成部12は、転送データ決定部11にて特定された入力データおよび出力データを用いて、呼び出し元スタブ102を生成する。また、呼び出し先スタブ生成部13は、転送データ決定部11にて特定された入力データおよび出力データを用いて、呼び出し先スタブ103を生成する。
このため、主プログラムのソースコードに記述された特定情報に基づいて、呼び出し元スタブ102と呼び出し先スタブ103を生成することが可能になる。
したがって、主プログラムのソースコードの他に、IDLを用いて関数の入出力を定義しなくても、呼び出し元スタブ102と呼び出し先スタブ103を生成することが可能になる。
よって、スタブ(転送プログラム)を生成するために、プログラマが、プログラムのソースコードとは別に、IDLを用いて関数の入出力を定義する必要がなくなり、プログラマの負担を軽減することが可能になる。
また、呼び出し元スタブ102と呼び出し先スタブ103が生成されるため、プログラマは、リモート関数を呼び出し先プロセッサで実行させるためのデータ転送処理を規定する関数をソースコード内に生成する必要がなくなり、プログラマの負担を軽減することが可能になる。
また、本実施形態では、リモート関数の宣言101には、データサイズが規定された引数を示す引数情報と、データサイズが規定された戻り値を示す戻り値情報とが、少なくとも記述されている。そして、関数宣言解析部2は、引数情報に示された引数を入力データとして特定し、戻り値情報に示された戻り値を出力データとして特定する。
この場合、リモート関数の宣言101から、入力データおよび出力データを特定することが可能になる。
(第2実施形態)
次に、本発明の第2実施形態について説明する。
図5は、本実施形態のスタブ生成部1Aの構成を示すブロック図である。図5において、図1に示したものと同一構成のものには同一符号を付してある。
図5において、スタブ生成部1Aは、一般的に転送プログラム生成装置と呼ぶことができる。スタブ生成部1Aは、転送データ決定部11Aと、呼び出し元スタブ生成部12と、呼び出し先スタブ生成部13と、を含む。転送データ決定部11Aは、引数属性解析部3を備える。
スタブ生成部1Aは、主プログラムに記述されたリモート関数についてのリモート関数の宣言101Aを受け付け、呼び出し元スタブ102と、呼び出し先スタブ103と、を出力する。なお、リモート関数の宣言101Aは、例えば、主プログラムのヘッダファイルに記載されている。
本実施形態では、リモート関数として、プログラミング言語の仕様に従った関数の宣言から転送データを判断できない関数が用いられる。本実施形態でリモート関数として用いられる関数の例については後述する。
本実施形態では、リモート関数の宣言101Aには、データサイズが規定された複数の引数と、引数のそれぞれが入力データであるか出力データであるかを示す属性とが、少なくとも記述されている。例えば、リモート関数の宣言101Aは、プログラミング言語の仕様に従った関数の宣言に、属性が追加して記述されたものである。
転送データ決定部11Aは、一般的に解析手段と呼ぶことができる。
転送データ決定部11Aは、主プログラムのソースコードに記述された特定情報を受け付ける。転送データ決定部11Aは、特定情報を受け付けると、その特定情報に基づいて、転送データを特定する。本実施形態では、特定情報として、リモート関数の宣言101Aが用いられる。
引数属性解析部3は、リモート関数の宣言101Aに記述された情報を用いて、転送データを決定する。
本実施形態のその他の構成要素は、第1実施形態に記載されたものと同じであるため説明を省略する。
なお、スタブ生成部1Aは、コンピュータにて実現されてもよい。この場合、コンピュータは、ハードディスク等の記録媒体に記録されたプログラムを読み込み実行することによって、引数属性解析部3、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13として機能する。なお、引数属性解析部3、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13のそれぞれは、ハードウェアにて実現されてもよい。
また、呼び出し元プロセッサ(例えば、図3、4に示したプロセッサ1a)は、主プログラムと呼び出し元スタブ102とを実行し、呼び出し先プロセッサ(例えば、図3、4に示したプロセッサ1b)は、呼び出し先スタブ103とリモート関数とを実行する。
本実施形態は、プログラミング言語の仕様で定められたリモート関数の宣言のみ(リモート関数の宣言101Aから属性を除いたもの)では、転送データが決定できない場合にも、転送データを決定できるという効果を奏する。本実施形態でリモート関数として用いられる関数の例については後述する。
本実施形態の特徴的な動作は、引数属性解析部3の動作である。その他の部分の動作は、第1実施形態から明らかであるため、説明を省略する。引数属性解析部3の動作を以下に示す。
引数属性解析部3は、リモート関数の宣言101Aを読み込み、リモート関数の宣言101Aに記述された引数のうち、属性にて入力データであると示された引数を入力データとして特定し、リモート関数の宣言101Aに記述された引数のうち、属性にて出力データであると示された引数を出力データとして特定する。
次に、本実施形態の一具体例を説明する。
本実施形態では、リモート関数として、リモート関数の転送データを、プログラミング言語の仕様に従った関数の宣言(リモート関数の定義)から決定できない関数(以下「第2関数」と呼ぶ)が用いられる。なお、リモート関数として、第1実施形態で示した第1関数が用いられてもよい。
具体的な第2関数についての関数の定義および関数宣言をプログラム言語であるC言語で記述した例を以下に示す。
下に示す。
関数の宣言:
void func(int *x, int *y);
関数の定義:
void func(int *x, int *y)
[
*y = *x * 2;
]
関数の定義によれば、この関数では、入力データは1個のint型データ(*x)で、出力データは1個のint 型データ(*y)である。しかしながら、関数の宣言だけでは、それぞれの引数(int *x, int *y)が入力データであるのか出力データであるのかを判断することができない。
本実施形態では、リモート関数の宣言に以下のような属性が付加される。
void func(_ _input int *x, _ _output int *y);
ここで、属性_ _inputは、ポインタ型変数(int *x)が入力であることを示し、属性_ _outputはポインタ型変数(int *y)が出力であることを示す。
引数属性解析部3は、属性_ _inputが付加されたポインタ型の引数(int *x)を入力データとし、属性_ _outputが付加されたポインタ側の引数(int *y)を出力データとすることで、転送データを決定する。
引数属性解析部3は、転送データを、呼び出し元スタブ生成部12と呼び出し先スタブ生成部13に提供する。呼び出し元スタブ生成部12は、転送データに基づいて、呼び出し元スタブ102を生成し、呼び出し先スタブ生成部13は、転送データに基づいて、呼び出し先スタブ103を生成する。
呼び出し元スタブ102と呼び出し先スタブ103を以下に示す。
呼び出し元スタブ102
void stub_caller_func(int *x, int *y)
[
send(x, sizeof(int));
call(FUNC);
recv(y, sizeof(int));
]
呼び出し先スタブ103
void stub_callee_func(void)
[
int x, y;
recv(&x, sizeof(int));
func(&x, &y);
send(&y, sizeof(int));
]
本実施形態によれば、リモート関数の宣言101Aには、データサイズが規定された複数の引数と、引数のそれぞれが入力データであるか出力データであるかを示す属性とが、少なくとも記述されている。そして、引数属性解析部3は、リモート関数の宣言101Aに記述された引数のうち、属性にて入力データであると示された引数を入力データとして特定し、リモート関数の宣言101Aに記述された引数のうち、属性にて出力データであると示された引数を出力データとして特定する。
このため、プログラミング言語の仕様で定められたリモート関数の宣言のみ(リモート関数の宣言101Aから属性を除いたもの)では、転送データが決定できない場合にも、リモート関数の宣言101Aに記載された属性情報を参照することによって、転送データを決定することが可能になる。
なお、本実施形態は、以下のように変形されてもよい。
例えば、属性として、関数の宣言に記述された引数のそれぞれのデータサイズと、関数の宣言に記述された引数のそれぞれが入力データであるか出力データであるかと、を示す属性が用いられてもよい。
例えば、属性_ _input4が引数の直前に記述された場合、属性_ _input4は、属性_ _input4の直後に記述された引数が入力データであり、その引数のサイズが4byteであることを示す。また、属性_ _output4が引数の直前に記述された場合、属性_ _output4は、属性_ _output4の直後に記述された引数が出力データであり、その引数のサイズが4byteであることを示す。
この場合、引数属性解析部3は、関数の宣言に記述された引数のうち、属性にてデータサイズが示され入力データであると示された引数を、入力データとして特定し、関数の宣言に記述された引数のうち、属性にてデータサイズが示され出力データであると示された引数を、出力データとして特定する。
この変形例では、属性によって、引数のデータサイズと、引数のそれぞれが入力データであるか出力データであるかを特定することが可能になる。
(第3実施形態)
次に、本発明の第3実施形態について説明する。
図6は、本実施形態のスタブ生成部1Bの構成を示すブロック図である。図6において、図1に示したものと同一構成のものには同一符号を付してある。
図6において、スタブ生成部1Bは、一般的に転送プログラム生成装置と呼ぶことができる。スタブ生成部1Bは、転送データ決定部11Bと、呼び出し元スタブ生成部12と、呼び出し先スタブ生成部13と、を含む。転送データ決定部11Bは、コメント解析部4を備える。
スタブ生成部1Bは、主プログラムに記述されたリモート関数についてのリモート関数の宣言101Bおよびリモート関数の宣言101Bに付加されたコメントを受け付け、呼び出し元スタブ102と、呼び出し先スタブ103と、を出力する。なお、コメントが付加されたリモート関数の宣言101Bは、例えば、主プログラムのヘッダファイルに記載されている。
本実施形態では、リモート関数として、第1関数が用いられる。本実施形態でリモート関数として用いられる関数の例については後述する。
本実施形態では、リモート関数の宣言101Bには、データサイズが規定された複数の引数が少なくとも記述されている。例えば、リモート関数の宣言101Bは、プログラミング言語の仕様に従った関数の宣言と同一の情報を示す。また、コメントには、引数のそれぞれが入力データであるか出力データであるかを示す情報が示されている。
転送データ決定部11Bは、一般的に解析手段と呼ぶことができる。
転送データ決定部11Bは、主プログラムのソースコードに記述された特定情報を受け付ける。転送データ決定部11Bは、特定情報を受け付けると、その特定情報に基づいて、転送データを特定する。本実施形態では、特定情報は、リモート関数の宣言101Bと、リモート関数の宣言101Bに付加されたコメントにて構成される。
コメント解析部4は、リモート関数の宣言101Bに記述された情報(例えば、リモート関数の名称、戻り値の型および引数リスト)とリモート関数の宣言101Bに付加されたコメントを用いて、転送データを決定する。
本実施形態のその他の構成要素は、第1実施形態に記載されたものと同じであるため説明を省略する。
なお、スタブ生成部1Bは、コンピュータにて実現されてもよい。この場合、コンピュータは、ハードディスク等の記録媒体に記録されたプログラムを読み込み実行することによって、コメント解析部4、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13として機能する。なお、コメント解析部4、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13のそれぞれは、ハードウェアにて実現されてもよい。
また、呼び出し元プロセッサ(例えば、図3、4に示したプロセッサ1a)は、主プログラムと呼び出し元スタブ102とを実行し、呼び出し先プロセッサ(例えば、図3、4に示したプロセッサ1b)は、呼び出し先スタブ103とリモート関数とを実行する。
本実施形態は、プログラミング言語の仕様で定められたリモート関数の宣言のみ(リモート関数の宣言101Bにコメント付加されていないもの)では、転送データが決定できない場合にも、転送データを決定できるという効果を奏する。
なお、入力データと出力データとを示すコメントは、プログラムの可読性を向上させることなどを目的として、主プログラムのソースコードに記述されることがある。このため、プログラムの可読性を向上させることを目的として記述されたコメントを、転送データを決定するために使用すれば、新たにコメントを付加する作業を軽減できるという効果も奏する。本実施形態でリモート関数として用いられる関数の例については後述する。
本実施形態の特徴的な動作は、コメント解析部4の動作である。その他の部分の動作は、第1実施形態から明らかであるため、説明を省略する。コメント解析部4の動作を以下に示す。
コメント解析部4は、リモート関数の宣言101Bに記述された引数のうち、コメントにて入力データであると示された引数を入力データとして特定し、リモート関数の宣言101Bに記述された引数のうち、コメントにて出力データであると示された引数を出力データとして特定する。
次に、本実施形態の一具体例を説明する。
本実施形態では、リモート関数として、第2実施形態で説明した第2関数が用いられる。
C言語にて記述された、コメントが付加されたリモート関数の宣言101Bを以下に示す。
/**
* @param[in] x
* @param[out] y
*/
void func(int *x, int *y);
本実施形態では、コメント解析部4は、コメント中で@param[in]で修飾された引数は入力データであり、コメント中で@param[out]で修飾された引数は出力データであると決定する動作を行う。
コメント解析部4は、転送データを、呼び出し元スタブ生成部12と呼び出し先スタブ生成部13に提供する。呼び出し元スタブ生成部12は、転送データに基づいて、呼び出し元スタブ102を生成し、呼び出し先スタブ生成部13は、転送データに基づいて、呼び出し先スタブ103を生成する。
呼び出し元スタブ生成部12にて生成される呼び出し元スタブ102は、第2実施形態で示したものと同じであり、呼び出し先スタブ生成部13にて生成される呼び出し元スタブ生成部13も、第2実施形態で示したものと同じである。
本実施形態によれば、リモート関数の宣言101Bには、データサイズが規定された複数の引数が少なくとも記述されている。また、コメントには、引数のそれぞれが入力データであるか出力データであるかを示す情報が示されている。そして、コメント解析部4は、リモート関数の宣言101Bに記述された引数のうち、コメントにて入力データであると示された引数を入力データとして特定し、リモート関数の宣言101Bに記述された引数のうち、コメントにて出力データであると示された引数を出力データとして特定する。
このため、プログラミング言語の仕様で定められたリモート関数の宣言のみ(リモート関数の宣言101Bのみ)では、転送データが決定できない場合にも、リモート関数の宣言101Bに付加されたコメントを参照することによって、転送データを決定することが可能になる。
なお、本実施形態は、以下のように変形されてもよい。
例えば、コメントとして、関数の宣言に記述された引数のそれぞれのデータサイズと、関数の宣言に記述された引数のそれぞれが入力データであるか出力データであるかと、を示すコメントが用いられてもよい。
例えば、
/**
* @param[in]4 x
* @param[out]4 y
*/
というコメントが用いられる。
この場合、コメント解析部4は、コメント中で@param[in]4で修飾された引数はデータサイズが4byteの入力データであり、コメント中で@param[out]4で修飾された引数はデータサイズが4byteの出力データであると決定する動作を行う。
この変形例では、コメントによって、引数のデータサイズと、引数のそれぞれが入力データであるか出力データであるかを特定することが可能になる。
また、本実施形態は、属性を用いた第2実施形態を含むように変形されてもよい。
例えば、関数の宣言には、複数の引数と、引数のそれぞれが入力データであるか出力データであるかとを示す属性とが、記述され、コメントには、引数のそれぞれのデータサイズを示す情報が示される。この変形例では、特定情報は関数の宣言とコメントにて構成される。
この場合、転送データ決定部11Bは、関数の宣言に記述された引数のうち、コメントにてデータサイズが示され属性にて入力データであると示された引数を、入力データとして特定し、関数の宣言に記述された引数のうち、コメントにてデータサイズが示され属性にて出力データであると示された引数を、出力データとして特定する。
また、例えば、関数の宣言には、複数の引数と、引数のそれぞれのデータサイズを示す属性とが、記述され、コメントには、引数のそれぞれが入力データであるか出力データであるかを示す情報が示される。この変形例でも、特定情報は関数の宣言とコメントにて構成される。
この場合、転送データ決定部11Bは、関数の宣言に記述された引数のうち、属性にてデータサイズが示されコメントにて入力データであると示された引数を、入力データとして特定し、関数の宣言に記述された引数のうち、属性にてデータサイズが示されコメントにて出力データであると示された引数を、出力データとして特定する。
上記各変形例では、属性とコメントとに基づいて、転送データを決定することが可能になる。
(第4実施形態)
次に、本発明の第4実施形態について説明する。
図7は、本実施形態のスタブ生成部1Cの構成を示すブロック図である。図7において、図1に示したものと同一構成のものには同一符号を付してある。
図7において、スタブ生成部1Cは、一般的に転送プログラム生成装置と呼ぶことができる。スタブ生成部1Cは、転送データ決定部11Cと、呼び出し元スタブ生成部12と、呼び出し先スタブ生成部13と、を含む。転送データ決定部11Cは、追加仕様解析部5を備える。
スタブ生成部1Cは、主プログラムに記述されたリモート関数についてのリモート関数の宣言101Cと、入力データと出力データとを規定するための追加仕様を示した情報(以下「追加仕様」と呼ぶ)104と、を受け付け、呼び出し元スタブ102と、呼び出し先スタブ103と、を出力する。なお、リモート関数の宣言101Cは、例えば、主プログラムのヘッダファイルに記載されている。また、追加仕様は、一般的に所定仕様と呼ぶことができる。
追加仕様104は、プログラミング言語の仕様では定められていない仕様であり、関数の入力データと出力データとを規定するための仕様である。
リモート関数の宣言101Cは、プログラミング言語の仕様と追加仕様104の両方に従って記述されたものである。
転送データ決定部11Cは、一般的に解析手段と呼ぶことができる。
転送データ決定部11Cは、主プログラムのソースコードに記述された特定情報を受け付ける。転送データ決定部11Cは、特定情報を受け付けると、その特定情報に基づいて、転送データを特定する。本実施形態では、特定情報として、リモート関数の宣言101Cが用いられる。
追加仕様解析部5は、リモート関数の宣言101Cと追加仕様104とを受け付ける。
追加仕様解析部5は、追加仕様104に従ってリモート関数の宣言101Cを解析することによって、転送データを決定する。
本実施形態のその他の構成要素は、第1実施形態に記載されたものと同じであるため説明を省略する。
なお、スタブ生成部1Cは、コンピュータにて実現されてもよい。この場合、コンピュータは、ハードディスク等の記録媒体に記録されたプログラムを読み込み実行することによって、追加仕様解析部5、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13として機能する。なお、追加仕様解析部5、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13のそれぞれは、ハードウェアにて実現されてもよい。
また、呼び出し元プロセッサ(例えば、図3、4に示したプロセッサ1a)は、主プログラムと呼び出し元スタブ102とを実行し、呼び出し先プロセッサ(例えば、図3、4に示したプロセッサ1b)は、呼び出し先スタブ103とリモート関数とを実行する。
本実施形態は、呼び出し先プロセッサで実行できる関数が、追加仕様に従ってリモート関数の宣言で記述された関数に限定されるが、プログラミング言語の仕様で定められたリモート関数の宣言では、転送データが決定できない場合にも、転送データを決定できるという効果を奏する。本実施形態でリモート関数として用いられる関数の例については後述する。
本実施形態の特徴的な動作は、追加仕様解析部5の動作である。その他の部分の動作は、第1実施形態から明らかであるため、説明を省略する。追加仕様解析部5の動作を以下に示す。
追加仕様解析部5は、リモート関数の宣言101Cと追加仕様104とを読み込み、追加仕様104に従ってリモート関数の宣言101Cを解析することによって、転送データを決定する。
次に、本実施形態の一具体例を説明する。
まず、第2実施形態で示した関数funcを例に説明する。
この関数の宣言を以下に示す。なお、第2実施形態で述べたように、この関数は、第2関数である。
void func(int *x, int *y);
本実施形態では、関数funcの追加仕様として、1つ目の引数は入力データへのポインタ型変数(int *x)、2つ目の引数は出力データへのポインタ型変数(int *y)であると定める。図8(a)は、この追加仕様を説明するための図である。
追加仕様解析部5は、この追加仕様を利用して、転送データとして、*xが入力データ、*yが出力データであると決定する。図9(a)は、追加仕様解析部5の動作の一例を規定したプログラムを示した図である。
呼び出し元スタブ生成部12にて生成される呼び出し元スタブ102は、第2実施形態で示したものと同じであり、呼び出し先スタブ生成部13にて生成される呼び出し元スタブ生成部13は、第2実施形態で示したものと同じである。
次に、以下の関数を例に、別の追加仕様の例を説明する。
int func2(_ _input_pointer void *p, int size);
ここで、属性_ _input_pointerは、この属性が付加された引数のポインタで示されるアドレスから先のデータが入力データであることを示す属性であるとする。しかし、この属性だけでは入力データのサイズを決定することができない。そこで、属性_ _input_pointerが付加された引数の次の引数はデータのサイズを示す引数であるという追加仕様が加えられる。図8(b)は、この追加仕様を説明するための図である。
追加仕様解析部5は、この追加仕様を元に、転送するべき入力データのサイズを決定する。図9(b)は、追加仕様解析部5の動作の一例を規定したプログラムを示した図である。
呼び出し元スタブ生成部12にて生成される呼び出し元スタブ102の例を以下に示す。
int stub_caller_func2(void *p, int size)
[
int tmp;
send(&size, sizeof(int));
send(p, size);
call(FUNC2);
recv(&tmp, sizeof(int));
return tmp;
]
呼び出し先スタブ生成部13にて生成される呼び出し先スタブ103の例を以下に示す。
int stub_callee_func2(void)
[
void *p;
int size;
int tmp;
recv(&size, sizeof(int));
p = malloc(size);
recv(p, size);
tmp = func2(p, size);
send(&tmp, sizeof(int));
]
本実施形態によれば、リモート関数の宣言101Cには、追加仕様に従って特定情報が記述されている。追加仕様解析部5は、追加仕様に従ってリモート関数の宣言Cを解析することによって、入力データと出力データとを特定する。
このため、プログラミング言語の仕様で定められたリモート関数の宣言のみでは、転送データが決定できない場合にも、転送データを決定することが可能になる。
(第5実施形態)
次に、本発明の第5実施形態について説明する。
図10は、本実施形態のスタブ生成部1Dの構成を示すブロック図である。図10において、図1に示したものと同一構成のものには同一符号を付してある。
図10において、スタブ生成部1Dは、一般的に転送プログラム生成装置と呼ぶことができる。スタブ生成部1Dは、転送データ決定部11Dと、呼び出し元スタブ生成部12と、呼び出し先スタブ生成部13と、を含む。転送データ決定部11Dは、関数定義解析部6を備える。
スタブ生成部1Dは、主プログラムに記述されたリモート関数についてのリモート関数の定義105を受け付け、呼び出し元スタブ102と、呼び出し先スタブ103と、を出力する。
リモート関数の定義とは、リモート関数の処理内容を記述したプログラムのソースコードである。
転送データ決定部11Dは、一般的に解析手段と呼ぶことができる。
転送データ決定部11Dは、主プログラムのソースコードに記述された特定情報を受け付ける。転送データ決定部11Dは、特定情報を受け付けると、その特定情報に基づいて、転送データを特定する。本実施形態では、特定情報として、リモート関数の定義105が用いられる。
関数定義解析部6は、リモート関数の定義105を受け付け、リモート関数の定義105を解析して、転送データを決定する。本実施形態のその他の構成要素は、第1実施形態に記載されたものと同じであるため説明を省略する。
なお、スタブ生成部1Dは、コンピュータにて実現されてもよい。この場合、コンピュータは、ハードディスク等の記録媒体に記録されたプログラムを読み込み実行することによって、関数定義解析部6、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13として機能する。なお、関数定義解析部6、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13のそれぞれは、ハードウェアにて実現されてもよい。
また、呼び出し元プロセッサ(例えば、図3、4に示したプロセッサ1a)は、主プログラムと呼び出し元スタブ102とを実行し、呼び出し先プロセッサ(例えば、図3、4に示したプロセッサ1b)は、呼び出し先スタブ103とリモート関数とを実行する。
本実施形態は、スタブを生成するためにリモート関数の定義105が必要となるが、プログラミング言語の仕様で定められたリモート関数の宣言からは転送データが決定できない場合にも、リモート関数の定義を解析することで、転送データを決定できるという効果がある。
本実施形態の特徴的な動作は、関数定義解析部6の動作である。その他の部分の動作は、第1実施形態から明らかであるため、説明を省略する。関数定義解析部6の動作を以下に示す。
関数定義解析部6は、リモート関数の定義105を読み込み、リモート関数の定義105を解析して入力データと出力データとを決定する。
次に、本実施形態の一具体例を説明する。
まず、第2実施形態で示した関数funcを例に説明する。
この関数の宣言を以下に示す。第2実施形態で述べたように、この関数は、第2関数である。
関数の宣言:
void func(int *x, int *y);
以下に関数の定義を示す。
関数の定義:
void func(int *x, int *y)
[
*y = *x * 2;
]
関数定義解析部6は、この関数の定義を読み込み、この関数の定義を解析することによって、引数xが入力データへのポインタで、引数yが出力データへのポインタであると決定する。
呼び出し元スタブ生成部12にて生成される呼び出し元スタブ102は、第2実施形態の一例で示したものと同じであり、呼び出し先スタブ生成部13にて生成される呼び出し元スタブ生成部13は、第2実施形態の一例で示したものと同じである。
本実施形態によれば、関数定義解析部6は、リモート関数の定義105に基づいて転送データを決定する。このため、プログラミング言語の仕様で定められたリモート関数の宣言からは転送データが決定できない場合にも、リモート関数の定義を解析することで、転送データを決定できるという効果がある。
なお、本実施形態の変形例として、転送データ決定部11Dが、関数宣言解析部2、引数属性解析部3、コメント解析部4、追加仕様解析部5および関数定義解析部6のそれぞれの解析部のうち、複数の解析部を備える構成をとっても良い。この場合、リモート関数の特徴に合わせて、転送データを決定する解析部を選定することが可能になる。
図11は、転送データ決定部11Dが、関数宣言解析部2と引数属性解析部3を備えた変形例を示した図である。
図11に示した変形例では、リモート関数の宣言に属性が付加されなくてもリモート関数の宣言から転送データを決定できるリモート関数に対しては、関数宣言解析部2を用いて転送データが決定され、それ以外のリモート関数に対しては引数属性解析部3を用いて転送が決定される。
図11に示した変形例では、リモート関数の宣言に付加する属性の数を少なくすることが可能となり、プログラマの負担を軽減することができるという効果がある。
(第6実施形態)
次に、本発明の第6実施形態について説明する。
図12は、本実施形態のスタブ生成部1Eの構成を示すブロック図である。図12において、図1に示したものと同一のものには同一符号を付してある。
図12において、スタブ生成部1Eは、一般的に転送プログラム生成装置と呼ぶことができる。スタブ生成部1Eは、主プログラムに記述されたリモート関数群の宣言106を受け付け、呼び出し元スタブ102と、呼び出し先スタブ103と、を出力する。スタブ生成部1Eの内部の構成については、第1乃至第5実施形態のスタブ生成部のいずれの構成をとっても良い。
リモート関数群の宣言106は、複数のリモート関数のそれぞれについてのリモート関数の宣言を含む。なお、リモート関数群の宣言106は、プログラムのヘッダファイルに記載されている。
本実施形態では、リモート関数として、関数一つだけを別のプロセッサで実行する場合は転送データを決定できないが、複数の関数を別のプロセッサで実行する場合には、転送データが決定できる関数が用いられる。なお、複数のリモート関数のそれぞれは、一般的に特定関数と呼ぶことができ、互いに異なる処理を規定する。
また、本実施形態では、主プログラムのソースコードには、複数のリモート関数と、複数のリモート関数のすべてが呼び出し先プロセッサで実行される場合に特定されるリモート関数ごとの特定情報と、が記述されている。
本実施形態は、スタブ生成部1Eが、リモート関数群を構成する複数のリモート関数のそれぞれに対してスタブを生成する。リモート関数群を構成する複数のリモート関数のそれぞれは、スタブ生成部1Eにて生成されたスタブを用いることによって、呼び出し先プロセッサで実行される。このため、本実施形態は、個々の関数単体では呼び出し先プロセッサで実行するための転送データを決定できない関数を、呼び出し先プロセッサで実行することを可能にするという効果を奏する。
例えば、本実施形態は、ライブラリ内の関数が単体では呼び出し先プロセッサで実行できない関数である場合にも、ライブラリ内の複数の関数を呼び出し先プロセッサで実行することで、単体では不可能だったオフロードが可能になるというような状況で用いることができる。
本実施形態は、内部構造が隠蔽されたライブラリを、呼び出し先プロセッサ(呼び出し元プロセッサが使用するアドレス空間とは異なるアドレス空間を使用するプロセッサ)にオフロードする場合に利用できるという特徴がある。
ライブラリは、ヘッダファイルとオブジェクトファイルの形で提供されることが多いが、内部構造が隠蔽されているために、関数の引数にポインタが利用されている場合に、そのポインタが指すデータの実体を知ることができない。したがって、関数一つをオフロードするための転送データを決定することができない。
しかしながら、内部構造へのアクセスはライブラリ内の関数で行われるため、ライブラリ内の関数をすべて呼び出し先プロセッサで実行する場合は、内部構造へのアクセスはすべて呼び出し先プロセッサで実行される。このため、ライブラリ内の関数をすべて呼び出し先プロセッサで実行する場合は、ポインタが指すデータの実体を転送する必要はなく、ポインタのみを転送すれば良い。したがって、第1乃至4実施形態のスタブ生成部を用いて、スタブを生成することによって、ライブラリ全体を呼び出し先プロセッサで実行することができる。
なお、スタブ生成部1Eは、コンピュータにて実現されてもよい。この場合、コンピュータは、ハードディスク等の記録媒体に記録されたプログラムを読み込み実行することによって、スタブ生成部1E内の転送データ決定部、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13として機能する。なお、転送データ決定部、呼び出し元スタブ生成部12および呼び出し先スタブ生成部13のそれぞれは、ハードウェアにて実現されてもよい。
また、呼び出し元プロセッサ(例えば、図3、4に示したプロセッサ1a)は、主プログラムと呼び出し元スタブ102とを実行し、呼び出し先プロセッサ(例えば、図3、4に示したプロセッサ1b)は、呼び出し先スタブ103とリモート関数とを実行する。
次に、本実施形態の一具体例を説明する。
以下の具体例は、内部構造が隠蔽されたライブラリ内の全ての関数を呼び出し先プロセッサで実行する場合の例である。
まず、ライブラリのヘッダファイル(dog.hとする)を以下に示す。
struct dog Dog;
Dog *dog_init(int id);
void dog_get_id(Dog *p);
このライブラリは、1つのデータ型と2つの関数から構成されている。dog_init関数は、Dog型のデータをメモリ上に確保し、dog_get_id関数は、Dog型データを参照してidを返すという動作とする。両関数の実装とDog型データの実装は、ライブラリを利用する側には隠蔽されているとする。これらの関数を利用する例は以下の様になる。
#include "dog.h"
void main(void)
[
int id;
Dog *p = dog_init(1);
id = dog_get_id(p);
]
まず、二つの関数のうち、dog_get_id関数のみを呼び出し先プロセッサで実行する場合を考える。
まず、dog_init関数によって、Dog型のデータが呼び出し元のメモリアドレス空間上に確保される。
dog_get_id関数を、呼び出し先プロセッサで実行するためには、ポインタ引数pで示されるDog型データとidを送信する必要がある(dog_get_id関数の実装によっては、ポインタ引数pで示されるDog型データとidを送信する必要がない場合もあるが、関数の実装を参照しない本実施形態では、そのような場合を考慮しない)。
しかしながら、Dog型の実装が隠蔽されているため、データのサイズが分からず転送データを決定できない。このため、dog_get_id関数のみを呼び出し先プロセッサで実行することができない。
次に、dog_get_id関数とdog_init関数との両方を呼び出し先プロセッサで実行する場合を考える。
この場合は、まず、dog_init関数を呼び出し先プロセッサで実行すると、呼び出し先プロセッサ上のアドレス空間にDog型のデータが確保される。
続いて、dog_get_id関数も呼び出し先プロセッサで実行する際は、Dog型データは既に呼び出し先プロセッサ上のアドレス空間に存在するため、呼び出し先プロセッサへ転送する必要があるのは、ポインタ引数pで示されるDog型データの実体ではなく、ポインタのみで良い。同様に、dog_init関数の出力データも、Dog型データではなく、ポインタのみで良い。
したがって、ポインタのみを渡すという仕様に加えて、dog_init関数とdog_get_id関数の両方を呼び出し先プロセッサで実行させることによって、単体では呼び出し先プロセッサで実行不可能だった関数も実行可能になる。
この場合に生成されるスタブの例を以下に示す。
dog_init関数についての呼び出し元スタブ102:
Dog * stub_caller_dog_init(int id)
[
Dog *p;
send(&id, sizeof(int));
call(DOG_INIT);
recv(&p, sizeof(Dog *));
return p;
]
dog_init関数についての呼び出し先スタブ103:
void stub_callee_dog_init(void)
[
int id;
Dog *p;
recv(&id, sizeof(int));
p = dog_init(id);
send(&p, sizeof(Dog *));
]
dog_get_id関数についての呼び出し元スタブ102:
int stub_caller_dog_get_id(Dog *p)
[
int id;
send(&p, sizeof(Dog *));
call(DOG_GET_ID);
recv(&id, sizeof(int));
return id;
]
dog_get_id関数についての呼び出し先スタブ103:
void stub_callee_dog_get_id(void)
[
int id;
Dog *p;
recv(&p, sizeof(Dog *));
id = dog_get_id(p);
send(&id, sizeof(int));
]
本実施形態では、主プログラムのソースコードには、リモート関数群を構成する複数のリモート関数と、リモート関数群を構成する複数のリモート関数のすべてが呼び出し先プロセッサ実行される場合に特定されるリモート関数ごとの特定情報と、が記述されている。
なお、リモート関数群を構成する複数のリモート関数は、同一のライブラリに登録されているものでもよい。
スタブ生成部1E内の転送データ決定部は、リモート関数ごとに、リモート関数についての特定情報に基づいて転送データ(入力データと出力データ)を特定する。
スタブ生成部1E内の呼び出し元スタブ生成部12は、リモート関数ごとに特定された転送データ(入力データおよび出力データ)に基づいて、リモート関数ごとに、呼び出し元スタブ102を生成する。
スタブ生成部1E内の呼び出し先スタブ生成部13は、リモート関数ごとに特定された転送データ(入力データおよび出力データ)に基づいて、リモート関数ごとに、呼び出し先スタブ103を生成する。
このため、本実施形態によれば、個々の関数単体では呼び出し先プロセッサで実行するための転送データを決定できない関数を、呼び出し先プロセッサで実行することを可能にするという効果を奏する。
なお、上記各実施形態では、主プログラムのソースコードがC言語で記述された例を示したが、主プログラムのソースコードを記述するために使用されるプログラム言語は、C言語に限らず適宜変更可能である。
上記各実施形態は、ある計算機上のプログラムの一部を他の計算機上で実行させることによって、単一の計算機では処理できないプログラムを実行したり、他のプログラムを実行させるために計算機の負荷を下げるといった用途に適用できる。また、上記各実施形態は、単一計算機上の複数のプロセッサを用いて、あるプロセッサ上で動作しているプログラムの一部を別のプロセッサで動作させ、同様の効果を得るといった用途にも利用できる。
以上説明した各実施形態において、図示した構成は単なる一例であって、本発明はその構成に限定されるものではない。
(付記1)所定関数が記述された主プログラムを実行する第1プロセッサ用の第1転送プログラムと、前記第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用し前記所定関数を実行する第2プロセッサ用の第2転送プログラムと、を生成する転送プログラム生成装置であって、
前記第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データと、を特定するための、前記主プログラムのソースコードに記述された特定情報に基づいて、前記入力データと前記出力データとを特定する解析手段と、
前記解析手段にて特定された入力データを送信し、その後、前記解析手段にて特定された出力データを受信する、という処理を規定した呼出元プログラムを、前記第1転送プログラムとして生成する第1生成手段と、
前記解析手段にて特定された入力データを受信し、その後、前記解析手段にて特定された出力データを送信する、という処理を規定した呼出先プログラムを、前記第2転送プログラムとして生成する第2生成手段と、を含む転送プログラム生成装置。
(付記2)付記1に記載の転送プログラム生成装置において、
前記主プログラムのソースコードには、互いに異なる処理を規定し各々が前記所定関数である複数の特定関数と、前記複数の特定関数のすべてが前記第2プロセッサで実行される場合での当該特定関数ごとの特定情報と、が記述されており、
前記解析手段は、前記特定関数ごとに、当該特定関数についての特定情報に基づいて前記入力データと前記出力データとを特定し、
前記第1生成手段は、前記解析手段にて前記特定関数ごとに特定された入力データおよび出力データに基づいて、前記特定関数ごとに、前記呼出元プログラムを前記第1転送プログラムとして生成し、
前記第2生成手段は、前記解析手段にて前記特定関数ごとに特定された入力データおよび出力データに基づいて、前記特定関数ごとに、前記呼出先プログラムを前記第2転送プログラムとして生成する、転送プログラム生成装置。
(付記3)付記2に記載の転送プログラム生成装置において、
前記複数の特定関数は、同一のライブラリに登録されたものである、転送プログラム生成装置。
(付記4)付記1に記載の転送プログラム生成装置において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言が記述されており、
前記関数の宣言には、複数の引数と、前記引数のそれぞれのデータサイズと前記引数のそれぞれが前記入力データであるか前記出力データであるかとを示す属性とが、記述されており、
前記特定情報は、前記関数の宣言であり、
前記解析手段は、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され出力データであると示された引数を、前記出力データとして特定する、転送プログラム生成装置。
(付記5)付記1に記載の転送プログラム生成装置において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言と、前記関数宣言に付加されたコメントが記述されており、
前記関数の宣言には、複数の引数が記述されており、
前記コメントには、前記引数のそれぞれのデータサイズと、前記引数のそれぞれが前記入力データであるか前記出力データであるかと、を示す情報が示され、
前記特定情報は、前記関数の宣言と前記コメントにて構成され、
前記解析手段は、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され出力データであると示された引数を、前記出力データとして特定する、転送プログラム生成装置。
(付記6)付記1に記載の転送プログラム生成装置において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言と、前記関数宣言に付加されたコメントが記述されており、
前記関数の宣言には、複数の引数と、前記引数のそれぞれが前記入力データであるか前記出力データであるかとを示す属性とが、記述されており、
前記コメントには、前記引数のそれぞれのデータサイズを示す情報が示され、
前記特定情報は、前記関数の宣言と前記コメントにて構成され、
前記解析手段は、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され前記属性にて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され前記属性にて出力データであると示された引数を、前記出力データとして特定する、転送プログラム生成装置。
(付記7)付記1に記載の転送プログラム生成装置において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言と、前記関数宣言に付加されたコメントが記述されており、
前記関数の宣言には、複数の引数と、前記引数のそれぞれのデータサイズを示す属性とが、記述されており、
前記コメントには、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す情報が示され、
前記特定情報は、前記関数の宣言と前記コメントにて構成され、
前記解析手段は、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され前記コメントにて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され前記コメントにて出力データであると示された引数を、前記出力データとして特定する、転送プログラム生成装置。
(付記8)所定関数が記述された主プログラムを実行する第1プロセッサ用の第1転送プログラムと、前記第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用し前記所定関数を実行する第2プロセッサ用の第2転送プログラムと、を生成する転送プログラム生成装置での転送プログラム生成方法であって、
前記第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データと、を特定するための、前記主プログラムのソースコードに記述された特定情報に基づいて、前記入力データと前記出力データとを特定する解析ステップと、
前記入力データを送信し、その後、前記出力データを受信する、という処理を規定した呼出元プログラムを、前記第1転送プログラムとして生成する第1生成ステップと、
前記入力データを受信し、その後、前記出力データを送信する、という処理を規定した呼出先プログラムを、前記第2転送プログラムとして生成する第2生成ステップと、を含む転送プログラム生成方法。
(付記9)付記8に記載の転送プログラム生成方法において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言が記述されており、
前記関数の宣言には、データサイズが規定された引数を示す引数情報と、データサイズが規定された戻り値を示す戻り値情報とが、記述されており、
前記特定情報は、前記関数の宣言であり、
前記解析ステップでは、前記引数情報に示された引数を、前記入力データとして特定し、前記戻り値情報に示された戻り値を、前記出力データとして特定する、転送プログラム生成方法。
(付記10)付記8に記載の転送プログラム生成方法において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言が記述されており、
前記関数の宣言には、データサイズが規定された複数の引数と、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す属性とが、記述されており、
前記特定情報は、前記関数の宣言であり、
前記解析ステップでは、前記関数の宣言に記述された引数のうち、前記属性にて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にて出力データであると示された引数を、前記出力データとして特定する、転送プログラム生成方法。
(付記11)付記8に記載の転送プログラム生成方法において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言と、前記関数宣言に付加されたコメントが記述されており、
前記関数の宣言には、データサイズが規定された複数の引数が記述されており、
前記コメントには、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す情報が示され、
前記特定情報は、前記関数の宣言と前記コメントにて構成され、
前記解析ステップでは、前記関数の宣言に記述された引数のうち、前記コメントにて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記コメントにて出力データであると示された引数を、前記出力データとして特定する、転送プログラム生成方法。
(付記12)付記8に記載の転送プログラム生成方法において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言が記述されており、
前記関数の宣言には、前記入力データと前記出力データとを規定するための所定仕様に従って前記特定情報が記述されており、
前記解析ステップでは、前記所定仕様に従って前記関数の宣言を解析することによって、前記入力データと前記出力データとを特定する、転送プログラム生成方法。
(付記13)付記8に記載の転送プログラム生成方法において、
前記主プログラムのソースコードには、前記所定関数についての関数の定義が記述されており、
前記関数の定義には、前記所定関数の処理内容が記述されており、
前記特定情報は、前記関数の定義であり、
前記解析ステップでは、前記関数の定義を解析することによって、前記入力データと前記出力データとを特定する、転送プログラム生成方法。
(付記14)付記8に記載の転送プログラム生成方法において、
前記主プログラムのソースコードには、互いに異なる処理を規定し各々が前記所定関数である複数の特定関数と、前記複数の特定関数のすべてが前記第2プロセッサで実行される場合での当該特定関数ごとの特定情報と、が記述されており、
前記解析ステップでは、前記特定関数ごとに、当該特定関数についての特定情報に基づいて前記入力データと前記出力データとを特定し、
前記第1生成ステップでは、前記特定関数ごとに特定された入力データおよび出力データに基づいて、前記特定関数ごとに、前記呼出元プログラムを前記第1転送プログラムとして生成し、
前記第2生成ステップでは、前記特定関数ごとに特定された入力データおよび出力データに基づいて、前記特定関数ごとに、前記呼出先プログラムを前記第2転送プログラムとして生成する、転送プログラム生成方法。
(付記15)付記8に記載の転送プログラム生成方法において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言が記述されており、
前記関数の宣言には、複数の引数と、前記引数のそれぞれのデータサイズと前記引数のそれぞれが前記入力データであるか前記出力データであるかとを示す属性とが、記述されており、
前記特定情報は、前記関数の宣言であり、
前記解析ステップでは、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され出力データであると示された引数を、前記出力データとして特定する、転送プログラム生成方法。
(付記16)付記8に記載の転送プログラム生成方法において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言と、前記関数宣言に付加されたコメントが記述されており、
前記関数の宣言には、複数の引数が記述されており、
前記コメントには、前記引数のそれぞれのデータサイズと、前記引数のそれぞれが前記入力データであるか前記出力データであるかと、を示す情報が示され、
前記特定情報は、前記関数の宣言と前記コメントにて構成され、
前記解析ステップでは、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され出力データであると示された引数を、前記出力データとして特定する、転送プログラム生成方法。
(付記17)付記8に記載の転送プログラム生成方法において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言と、前記関数宣言に付加されたコメントが記述されており、
前記関数の宣言には、複数の引数と、前記引数のそれぞれが前記入力データであるか前記出力データであるかとを示す属性とが、記述されており、
前記コメントには、前記引数のそれぞれのデータサイズを示す情報が示され、
前記特定情報は、前記関数の宣言と前記コメントにて構成され、
前記解析ステップでは、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され前記属性にて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され前記属性にて出力データであると示された引数を、前記出力データとして特定する、転送プログラム生成方法。
(付記18)付記8に記載の転送プログラム生成方法において、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言と、前記関数宣言に付加されたコメントが記述されており、
前記関数の宣言には、複数の引数と、前記引数のそれぞれのデータサイズを示す属性とが、記述されており、
前記コメントには、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す情報が示され、
前記特定情報は、前記関数の宣言と前記コメントにて構成され、
前記解析ステップでは、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され前記コメントにて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され前記コメントにて出力データであると示された引数を、前記出力データとして特定する、転送プログラム生成方法。
(付記19)所定関数が記述された主プログラムを実行する第1プロセッサ用の第1転送プログラムと、前記第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用し前記所定関数を実行する第2プロセッサ用の第2転送プログラムと、を生成するコンピュータに、
前記第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データと、を特定するための、前記主プログラムのソースコードに記述された特定情報に基づいて、前記入力データと前記出力データとを特定する解析手順と、
前記入力データを送信し、その後、前記出力データを受信する、という一連の処理を規定した呼出元プログラムを、前記第1転送プログラムとして生成する第1生成手順と、
前記入力データを受信し、その後、前記出力データを送信する、という一連の処理を規定した呼出先プログラムを、前記第2転送プログラムとして生成する第2生成手順と、を実行させるためのプログラム。
(付記20)付記19に記載のプログラムにおいて、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言が記述されており、
前記関数の宣言には、データサイズが規定された引数を示す引数情報と、データサイズが規定された戻り値を示す戻り値情報とが、記述されており、
前記特定情報は、前記関数の宣言であり、
前記解析手順では、前記引数情報に示された引数を、前記入力データとして特定し、前記戻り値情報に示された戻り値を、前記出力データとして特定する、プログラム。
(付記21)付記19に記載のプログラムにおいて、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言が記述されており、
前記関数の宣言には、データサイズが規定された複数の引数と、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す属性とが、記述されており、
前記特定情報は、前記関数の宣言であり、
前記解析手順では、前記関数の宣言に記述された引数のうち、前記属性にて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にて出力データであると示された引数を、前記出力データとして特定する、プログラム。
(付記22)付記19に記載のプログラムにおいて、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言と、前記関数宣言に付加されたコメントが記述されており、
前記関数の宣言には、データサイズが規定された複数の引数が記述されており、
前記コメントには、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す情報が示され、
前記特定情報は、前記関数の宣言と前記コメントにて構成され、
前記解析手順では、前記関数の宣言に記述された引数のうち、前記コメントにて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記コメントにて出力データであると示された引数を、前記出力データとして特定する、プログラム。
(付記23)付記19に記載のプログラムにおいて、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言が記述されており、
前記関数の宣言には、前記入力データと前記出力データとを規定するための所定仕様に従って前記特定情報が記述されており、
前記解析手順では、前記所定仕様に従って前記関数の宣言を解析することによって、前記入力データと前記出力データとを特定する、プログラム。
(付記24)付記19に記載のプログラムにおいて、
前記主プログラムのソースコードには、前記所定関数についての関数の定義が記述されており、
前記関数の定義には、前記所定関数の処理内容が記述されており、
前記特定情報は、前記関数の定義であり、
前記解析手順では、前記関数の定義を解析することによって、前記入力データと前記出力データとを特定する、プログラム。
(付記25)付記19に記載のプログラムにおいて、
前記主プログラムのソースコードには、互いに異なる処理を規定し各々が前記所定関数である複数の特定関数と、前記複数の特定関数のすべてが前記第2プロセッサで実行される場合での当該特定関数ごとの特定情報と、が記述されており、
前記解析手順では、前記特定関数ごとに、当該特定関数についての特定情報に基づいて前記入力データと前記出力データとを特定し、
前記第1生成手順では、前記特定関数ごとに特定された入力データおよび出力データに基づいて、前記特定関数ごとに、前記呼出元プログラムを前記第1転送プログラムとして生成し、
前記第2生成手順では、前記特定関数ごとに特定された入力データおよび出力データに基づいて、前記特定関数ごとに、前記呼出先プログラムを前記第2転送プログラムとして生成する、プログラム。
(付記26)付記19に記載のプログラムにおいて、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言が記述されており、
前記関数の宣言には、複数の引数と、前記引数のそれぞれのデータサイズと前記引数のそれぞれが前記入力データであるか前記出力データであるかとを示す属性とが、記述されており、
前記特定情報は、前記関数の宣言であり、
前記解析手順では、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され出力データであると示された引数を、前記出力データとして特定する、プログラム。
(付記27)付記19に記載のプログラムにおいて、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言と、前記関数宣言に付加されたコメントが記述されており、
前記関数の宣言には、複数の引数が記述されており、
前記コメントには、前記引数のそれぞれのデータサイズと、前記引数のそれぞれが前記入力データであるか前記出力データであるかと、を示す情報が示され、
前記特定情報は、前記関数の宣言と前記コメントにて構成され、
前記解析手順では、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され出力データであると示された引数を、前記出力データとして特定する、プログラム。
(付記28)付記19に記載のプログラムにおいて、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言と、前記関数宣言に付加されたコメントが記述されており、
前記関数の宣言には、複数の引数と、前記引数のそれぞれが前記入力データであるか前記出力データであるかとを示す属性とが、記述されており、
前記コメントには、前記引数のそれぞれのデータサイズを示す情報が示され、
前記特定情報は、前記関数の宣言と前記コメントにて構成され、
前記解析手順では、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され前記属性にて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記コメントにてデータサイズが示され前記属性にて出力データであると示された引数を、前記出力データとして特定する、プログラム。
(付記29)付記19に記載のプログラムにおいて、
前記主プログラムのソースコードには、前記所定関数についての関数の宣言と、前記関数宣言に付加されたコメントが記述されており、
前記関数の宣言には、複数の引数と、前記引数のそれぞれのデータサイズを示す属性とが、記述されており、
前記コメントには、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す情報が示され、
前記特定情報は、前記関数の宣言と前記コメントにて構成され、
前記解析手順では、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され前記コメントにて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にてデータサイズが示され前記コメントにて出力データであると示された引数を、前記出力データとして特定する、プログラム。
1、1A、1B、1C、1D、1E スタブ生成部
1a、1b プロセッサ
11、11A、11B、11C、1D 転送データ決定部
12 呼び出し元スタブ生成部
13 呼び出し先スタブ生成部
2 関数宣言解析部
3 引数属性解析部
4 コメント解析部
5 追加仕様解析部
6 関数定義解析部
100 CPU
200 ハードディスク

Claims (6)

  1. 所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析手段と、
    前記解析手段にて特定された入力データを送信し、その後、前記解析手段にて特定された出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成手段と、
    前記解析手段にて特定された入力データを受信し、その後、前記解析手段にて特定された出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成手段と、を含み、
    前記関数の宣言には、データサイズが規定された複数の引数と、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す属性とが、記述されており、
    前記解析手段は、前記関数の宣言に記述された引数のうち、前記属性にて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にて出力データであると示された引数を、前記出力データとして特定し、
    前記属性は、前記引数に付加された文字列であり、
    前記文字列は、当該文字列が付加された引数に対して、入力か出力かを区別するデータ転送方向と、転送するデータサイズと、を特定する方法を示す文字列で構成される、転送プログラム生成装置。
  2. 所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析手段と、
    前記解析手段にて特定された入力データを送信し、その後、前記解析手段にて特定された出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成手段と、
    前記解析手段にて特定された入力データを受信し、その後、前記解析手段にて特定された出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成手段と、を含み、
    前記関数の宣言には、引数を用いて前記入力データと前記入力データのサイズとを規定するための所定仕様に従って前記入力データと前記入力データのサイズが規定されており、
    前記所定仕様は、前記引数に対して、入力に対応するデータ転送方向と、転送するデータサイズと、を特定する方法を示す仕様であり、
    前記解析手段は、前記所定仕様に従って前記関数の宣言を解析することによって、前記規定されたサイズの入力データを特定する、転送プログラム生成装置。
  3. 転送プログラム生成装置が行う転送プログラム生成方法であって、
    所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析ステップと、
    前記入力データを送信し、その後、前記出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成ステップと、
    前記入力データを受信し、その後、前記出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成ステップと、を含み、
    前記関数の宣言には、データサイズが規定された複数の引数と、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す属性とが、記述されており、
    前記解析ステップでは、前記関数の宣言に記述された引数のうち、前記属性にて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にて出力データであると示された引数を、前記出力データとして特定し、
    前記属性は、前記引数に付加された文字列であり、
    前記文字列は、当該文字列が付加された引数に対して、入力か出力かを区別するデータ転送方向と、転送するデータサイズと、を特定する方法を示す文字列で構成される、転送プログラム生成方法。
  4. 転送プログラム生成装置が行う転送プログラム生成方法であって、
    所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析ステップと、
    前記入力データを送信し、その後、前記出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成ステップと、
    前記入力データを受信し、その後、前記出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成ステップと、を含み、
    前記関数の宣言には、引数を用いて前記入力データと前記入力データのサイズとを規定するための所定仕様に従って前記入力データと前記入力データのサイズが規定されており、
    前記所定仕様は、前記引数に対して、入力に対応するデータ転送方向と、転送するデータサイズと、を特定する方法を示す仕様であり、
    前記解析ステップでは、前記所定仕様に従って前記関数の宣言を解析することによって、前記規定されたサイズの入力データを特定する、転送プログラム生成方法。
  5. コンピュータに、
    所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析手順と、
    前記入力データを送信し、その後、前記出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成手順と、
    前記入力データを受信し、その後、前記出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成手順と、を実行させ、
    前記関数の宣言には、データサイズが規定された複数の引数と、前記引数のそれぞれが前記入力データであるか前記出力データであるかを示す属性とが、記述されており、
    前記解析手順では、前記関数の宣言に記述された引数のうち、前記属性にて入力データであると示された引数を、前記入力データとして特定し、前記関数の宣言に記述された引数のうち、前記属性にて出力データであると示された引数を、前記出力データとして特定し、
    前記属性は、前記引数に付加された文字列であり、
    前記文字列は、当該文字列が付加された引数に対して、入力か出力かを区別するデータ転送方向と、転送するデータサイズと、を特定する方法を示す文字列で構成される、プログラム。
  6. コンピュータに、
    所定関数を呼び出す処理が記述された主プログラムを実行する第1プロセッサが使用するアドレス空間とは異なるアドレス空間を使用して前記所定関数を実行する第2プロセッサが前記所定関数を実行するために必要な入力データと、前記所定関数の実行結果である出力データとを、前記主プログラムのソースコードに記述された前記所定関数についての関数の宣言に基づいて特定する解析手順と、
    前記入力データを送信し、その後、前記出力データを受信する、という処理を規定した、前記主プログラムおよび前記所定関数とは異なる呼出元プログラムを生成する第1生成手順と、
    前記入力データを受信し、その後、前記出力データを送信する、という処理を規定した、前記所定関数とは異なる呼出先プログラムを生成する第2生成手順と、を実行させ、
    前記関数の宣言には、引数を用いて前記入力データと前記入力データのサイズとを規定するための所定仕様に従って前記入力データと前記入力データのサイズが規定されており、
    前記所定仕様は、前記引数に対して、入力に対応するデータ転送方向と、転送するデータサイズと、を特定する方法を示す仕様であり、
    前記解析手順では、前記所定仕様に従って前記関数の宣言を解析することによって、前記規定されたサイズの入力データを特定する、プログラム。
JP2010032397A 2010-02-17 2010-02-17 転送プログラム生成装置、転送プログラム生成方法およびプログラム Active JP5521616B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010032397A JP5521616B2 (ja) 2010-02-17 2010-02-17 転送プログラム生成装置、転送プログラム生成方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010032397A JP5521616B2 (ja) 2010-02-17 2010-02-17 転送プログラム生成装置、転送プログラム生成方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2011170512A JP2011170512A (ja) 2011-09-01
JP5521616B2 true JP5521616B2 (ja) 2014-06-18

Family

ID=44684596

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010032397A Active JP5521616B2 (ja) 2010-02-17 2010-02-17 転送プログラム生成装置、転送プログラム生成方法およびプログラム

Country Status (1)

Country Link
JP (1) JP5521616B2 (ja)

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0588939A (ja) * 1991-03-15 1993-04-09 Nec Corp 副プログラム単体テスト方式
JPH06236283A (ja) * 1993-02-10 1994-08-23 Sharp Corp 言語処理システム
JPH07282017A (ja) * 1994-04-12 1995-10-27 Hitachi Ltd インタフェース定義ファイル生成装置
JPH09160762A (ja) * 1995-12-04 1997-06-20 Hitachi Ltd プログラム変換方式
JPH1165832A (ja) * 1997-08-21 1999-03-09 Sony Corp ソースコード変換方法及び記録媒体
JP2002132502A (ja) * 2000-10-25 2002-05-10 Nec Software Hokuriku Ltd 言語機能解釈による分散オブジェクト自動生成システム及び方法
JP2003076563A (ja) * 2001-06-15 2003-03-14 Ntt Software Corp 分散オブジェクトミドルウェア連携方法及びプログラムを記録した記録媒体並びにプログラム

Also Published As

Publication number Publication date
JP2011170512A (ja) 2011-09-01

Similar Documents

Publication Publication Date Title
CN110096338B (zh) 智能合约执行方法、装置、设备及介质
JP5679989B2 (ja) デバッグパイプライン
US9092332B2 (en) Activity based sampling of diagnostics data
JP5167589B2 (ja) アプリケーションサーバ装置および仮想マシンプログラム
US9009676B2 (en) Common recording and replaying performance test tool for a client-server environment
US8615750B1 (en) Optimizing application compiling
US20110161840A1 (en) Performance of template based javascript widgets
CN108287708B (zh) 一种数据处理方法、装置、服务器及计算机可读存储介质
EP2153344A1 (en) Dynamically loading scripts
US9491222B2 (en) System and method for interoperability between flex applications and .NET applications
JP2013528884A (ja) グラフに基づく計算の動的ロード
US11321090B2 (en) Serializing and/or deserializing programs with serializable state
US7975255B2 (en) Method, apparatus, and program product for building integration workflow endpoints into web components
Wilkinson et al. QMachine: commodity supercomputing in web browsers
US10387126B2 (en) Data marshalling optimization via intermediate representation of workflows
JP7025104B2 (ja) 情報処理装置、方法およびプログラム
US20070006121A1 (en) Development activity recipe
US9672020B2 (en) Selectively loading precompiled header(s) and/or portion(s) thereof
US8661421B2 (en) Methods and apparatuses for endian conversion
US7673051B2 (en) Resource usage conflict identifier
JP5521616B2 (ja) 転送プログラム生成装置、転送プログラム生成方法およびプログラム
JPH08502375A (ja) コンピュータにて並列実行処理可能なオブジェクト指向プログラムの少なくとも1つのオブジェクトにおける少なくとも1つのテストの実施方法
JP7073813B2 (ja) 制御プログラム、制御方法および情報処理装置
JP2012128581A (ja) 通信コード生成装置および関数利用コンピュータおよび関数公開コンピュータおよびコンピュータシステムおよび通信コード生成方法およびプログラム
JP2013235508A (ja) オブジェクト指向プログラム生成装置、その方法、プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130111

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130821

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131008

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131118

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20131217

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140205

A911 Transfer of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20140218

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140324

R150 Certificate of patent or registration of utility model

Ref document number: 5521616

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150