(57)【要約】【課題】アプリケーションの更新があった際に対応するオフロード記述の更新効率を向上できるソースコード変換プログラムおよびソースコード変換方法を提供する。【解決手段】ソースコード変換プログラムは、ソースコードを有するアプリケーションに基づいて、ハードウェアで動作させるオフロード記述に対応する、アプリケーションのアルゴリズム情報の挿入箇所をタグで示すとともにハードウェアのアーキテクチャを表すオフロード記述テンプレートを取得する処理をコンピュータに実行させる。ソースコード変換プログラムは、ソースコードが更新された場合、更新を反映したソースコードから、タグに対応するアルゴリズム情報を抽出する処理をコンピュータに実行させる。ソースコード変換プログラムは、抽出したアルゴリズム情報をオフロード記述テンプレートの対応する箇所に挿入してオフロード記述を更新する処理をコンピュータに実行させる。【選択図】図１
2019197308.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードを有するアプリケーションに基づいて、ハードウェアで動作させるオフロード記述に対応する、前記アプリケーションのアルゴリズム情報の挿入箇所をタグで示すとともに前記ハードウェアのアーキテクチャを表すオフロード記述テンプレートを取得し、
前記ソースコードが更新された場合、更新を反映したソースコードから、前記タグに対応するアルゴリズム情報を抽出し、
抽出した前記アルゴリズム情報を前記オフロード記述テンプレートの対応する箇所に挿入して前記オフロード記述を更新する、
処理をコンピュータに実行させることを特徴とするソースコード変換プログラム。
【請求項２】
前記抽出する処理は、前記ソースコードが更新された場合、前記更新を反映したソースコードに、前記アルゴリズム情報の抽出用タグを挿入し、前記タグに対応する前記アルゴリズム情報を抽出する、
ことを特徴とする請求項１に記載のソースコード変換プログラム。
【請求項３】
前記抽出する処理は、前記アルゴリズム情報の抽出用タグを挿入するパッチを用いて、前記抽出用タグを挿入する、
ことを特徴とする請求項２に記載のソースコード変換プログラム。
【請求項４】
前記抽出する処理は、前記アルゴリズム情報の抽象構文木を用いて、前記抽出用タグを挿入する、
ことを特徴とする請求項２に記載のソースコード変換プログラム。
【請求項５】
前記抽出する処理は、前記更新を反映したソースコードに、前記アルゴリズム情報の抽出用タグを挿入できない箇所がある場合、前記オフロード記述テンプレートの更新を要する旨を通知する、
ことを特徴とする請求項２〜４のいずれか１つに記載のソースコード変換プログラム。
【請求項６】
ソースコードを有するアプリケーションに基づいて、ハードウェアで動作させるオフロード記述に対応する、前記アプリケーションのアルゴリズム情報の挿入箇所をタグで示すとともに前記ハードウェアのアーキテクチャを表すオフロード記述テンプレートを取得し、
前記ソースコードが更新された場合、更新を反映したソースコードから、前記タグに対応するアルゴリズム情報を抽出し、
抽出した前記アルゴリズム情報を前記オフロード記述テンプレートの対応する箇所に挿入して前記オフロード記述を更新する、
処理をコンピュータが実行することを特徴とするソースコード変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード変換プログラムおよびソースコード変換方法に関する。
【背景技術】
【０００２】
近年、高位合成等の回路合成技術の進歩により、ＣやＣ＋＋等の汎用的なソフトウェア言語でハードウェア設計が行われる場合がある。このため、ＣＰＵ（Central  Processing  Unit）で動作するアプリケーションを、高速化のためにＦＰＧＡ（Field  Programmable  Gate  Array）やＧＰＵ（Graphics  Processing  Unit）等のハードウェアにオフロードして動作させることが提案されている。ところが、多くのアプリケーションは、ＣＰＵを対象に記述されており、そのままの記述では、十分なハードウェア性能を引き出すことが難しい。
【０００３】
従って、アプリケーションのソースコードについて、アルゴリズムに対応する部分と、ハードウェアのアーキテクチャに対応する部分とに分類して設計し、これらを纏めてオフロード記述に書き換えることが求められる。このオフロード記述への書き換えは、データ構造の変更、関数呼び出しや繰り返し等の制御構造の変更が多いため自動化が難しく、多大な工数を掛けた人手作業で行うことが一般的である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１７／０５６４２７号
【特許文献２】特表２０１４−５０９１０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一方、アプリケーションのソースコードは、バージョンアップやバグ修正等により、頻繁に更新される傾向にある。ソースコードの更新には、パッチと呼ばれるソースコードの差分情報が提供されることが多い。しかしながら、ハードウェアに合わせて書き換えたオフロード記述に対して、ソースコード用のパッチを適用することは困難である。このため、更新後のソースコードに対応するオフロード記述の書き換えは、人手作業で行われることになり、アプリケーションの更新頻度が高い場合、書き換えに掛かる工数が増大することになる。
【０００６】
一つの側面では、アプリケーションの更新があった際に対応するオフロード記述の更新効率を向上できるソースコード変換プログラムおよびソースコード変換方法を提供することにある。
【課題を解決するための手段】
【０００７】
一つの態様では、ソースコード変換プログラムは、ソースコードを有するアプリケーションに基づいて、ハードウェアで動作させるオフロード記述に対応する、前記アプリケーションのアルゴリズム情報の挿入箇所をタグで示すとともに前記ハードウェアのアーキテクチャを表すオフロード記述テンプレートを取得する処理をコンピュータに実行させる。ソースコード変換プログラムは、前記ソースコードが更新された場合、更新を反映したソースコードから、前記タグに対応するアルゴリズム情報を抽出する処理をコンピュータに実行させる。ソースコード変換プログラムは、抽出した前記アルゴリズム情報を前記オフロード記述テンプレートの対応する箇所に挿入して前記オフロード記述を更新する処理をコンピュータに実行させる。
【発明の効果】
【０００８】
アプリケーションの更新があった際に対応するオフロード記述の更新効率を向上できる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例の変換装置の構成の一例を示すブロック図である。
【図２】図２は、ソースコードとオフロード記述の一例を示す図である。
【図３】図３は、アルゴリズム情報とオフロード記述テンプレートの一例を示す図である。
【図４】図４は、抽出用タグの挿入の一例を示す図である。
【図５】図５は、タグ挿入パッチの一例を示す図である。
【図６】図６は、アルゴリズム情報の一例を示す図である。
【図７】図７は、グルーロジックの挿入の一例を示す図である。
【図８】図８は、オフロード記述テンプレートの一例を示す図である。
【図９】図９は、オフロード記述の生成の一例を示す図である。
【図１０】図１０は、オフロード記述テンプレートの更新を要する場合におけるパッチプログラムの出力の一例を示す図である。
【図１１】図１１は、抽象構文木における差分の一例を示す図である。
【図１２】図１２は、抽象構文木を用いてアルゴリズム情報の抽出を行う場合の一例を示す図である。
【図１３】図１３は、プログラム言語変換の一例を示す図である。
【図１４】図１４は、実施例の初回抽出処理の一例を示すフローチャートである。
【図１５】図１５は、実施例の変換処理の一例を示すフローチャートである。
【図１６】図１６は、ソースコード変換プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面に基づいて、本願の開示するソースコード変換プログラムおよびソースコード変換方法の実施例を詳細に説明する。なお、本実施例により、開示技術が限定されるものではない。また、以下の実施例は、矛盾しない範囲で適宜組みあわせてもよい。
【実施例】
【００１１】
図１は、実施例の変換装置の構成の一例を示すブロック図である。図１に示す変換装置１００は、アプリケーション（以下、アプリともいう。）のソースコードをハードウェア記述に変換する処理を行う情報処理装置の一例である。変換装置１００は、ソースコードを有するアプリケーションに基づいて、ハードウェアで動作させるオフロード記述に対応するオフロード記述テンプレートを取得する。オフロード記述テンプレートは、アプリケーションのアルゴリズム情報の挿入箇所をタグで示すとともにハードウェアのアーキテクチャを表すものである。変換装置１００は、ソースコードが更新された場合、更新を反映したソースコードから、タグに対応するアルゴリズム情報を抽出する。変換装置１００は、抽出したアルゴリズム情報をオフロード記述テンプレートの対応する箇所に挿入してオフロード記述を更新する。これにより、変換装置１００は、アプリケーションの更新があった際に対応するオフロード記述の更新効率を向上できる。
【００１２】
まず、図２および図３を用いてソースコードとオフロード記述について説明する。図２は、ソースコードとオフロード記述の一例を示す図である。図２に示すソースコード１０およびオフロード記述１１は、それぞれ同じ処理を行うものである。なお、ソースコード１０は、Ｃで記述されており、オフロード記述１１は、ＳｙｓｔｅｍＣで記述されている。また、オフロード記述１１は、対象ハードウェアに実装するプログラム、または、回路データのコンパイル可能なソースコードである。
【００１３】
オフロード記述１１は、ハードウェア上のアーキテクチャを表現するため、記述１２〜１４に示す点がソースコード１０と異なっている。記述１２は、入出力に関する記述であり、ソースコード１０ではポインタ変数、オフロード記述１１ではＦＩＦＯ（First  In  First  Out）変数となっている。記述１３は、ループ構造に関する記述であり、ソースコード１０では３個のｆｏｒ文、オフロード記述１１では１個のｗｈｉｌｅ文となっている。記述１４は、変数名や変数へのアクセスに関する記述であり、記述１２，１３に起因するものである。
【００１４】
図３は、アルゴリズム情報とオフロード記述テンプレートの一例を示す図である。図３に示すオフロード記述１５は、アルゴリズム情報１６とオフロード記述テンプレート１７とに分類することができる。アルゴリズム情報１６は、オフロード記述１５の中でデータに対する演算を行っている箇所を示す。オフロード記述テンプレート１７は、オフロード記述１５の中で入出力とメモリの宣言文、入出力とメモリへのアクセス、および、入出力とメモリへのアクセスを含む制御文を示す。制御文には、例えば、ｆｏｒ文、ｗｈｉｌｅ文、ｕｎｔｉｌ文の様なループや、ｉｆ文、ｅｌｓｅ文、ｓｗｉｔｃｈ文の様な条件分岐が含まれる。
【００１５】
次に、変換装置１００の構成について説明する。図１に示すように、変換装置１００は、通信部１１０と、表示部１１１と、操作部１１２と、記憶部１２０と、制御部１３０とを有する。なお、変換装置１００は、図１に示す機能部以外にも既知のコンピュータが有する各種の機能部、例えば各種の入力デバイスや音声出力デバイス等の機能部を有することとしてもかまわない。
【００１６】
通信部１１０は、例えば、ＮＩＣ（Network  Interface  Card）等によって実現される。通信部１１０は、図示しないネットワークを介して他の情報処理装置と有線または無線で接続され、他の情報処理装置との間で情報の通信を司る通信インタフェースである。通信部１１０は、例えば、他の端末からソースコードの更新パッチを受信する。また、通信部１１０は、他の端末に、更新後のオフロード記述を送信する。
【００１７】
表示部１１１は、各種情報を表示するための表示デバイスである。表示部１１１は、例えば、表示デバイスとして液晶ディスプレイ等によって実現される。表示部１１１は、制御部１３０から入力された表示画面等の各種画面を表示する。
【００１８】
操作部１１２は、変換装置１００のユーザから各種操作を受け付ける入力デバイスである。操作部１１２は、例えば、入力デバイスとして、キーボードやマウス等によって実現される。操作部１１２は、ユーザによって入力された操作を操作情報として制御部１３０に出力する。なお、操作部１１２は、入力デバイスとして、タッチパネル等によって実現されるようにしてもよく、表示部１１１の表示デバイスと、操作部１１２の入力デバイスとは、一体化されるようにしてもよい。
【００１９】
記憶部１２０は、例えば、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子、ハードディスクや光ディスク等の記憶装置によって実現される。記憶部１２０は、ソースコード記憶部１２１と、タグ挿入パッチ記憶部１２２と、テンプレート記憶部１２３と、アルゴリズム情報記憶部１２４と、オフロード記述記憶部１２５とを有する。また、記憶部１２０は、制御部１３０での処理に用いる情報を記憶する。
【００２０】
ソースコード記憶部１２１は、アプリのソースコードを記憶する。また、ソースコード記憶部１２１は、ソースコードの更新パッチによって更新されたソースコードを記憶する。
【００２１】
タグ挿入パッチ記憶部１２２は、ソースコードのアルゴリズムが記述された部分を特定する抽出用タグを挿入するためのタグ挿入パッチを記憶する。なお、初回のタグ挿入パッチは、初版のソースコードと、初版のソースコードに人手作業にて抽出用タグを挿入されたタグ挿入済みソースコードとに基づいて生成される。また、初版のソースコードとは、オフロード記述の生成が最初という意味であり、初版のソースコードには、アプリ自体の版数としては任意の版数のものを用いてもよい。
【００２２】
テンプレート記憶部１２３は、オフロード記述テンプレートを記憶する。オフロード記述テンプレートは、アプリのアルゴリズム情報の挿入箇所をタグで示すとともに、ハードウェアのアーキテクチャを表すものである。
【００２３】
アルゴリズム情報記憶部１２４は、ソースコードのアルゴリズム部分を抽出したアルゴリズム情報を記憶する。
【００２４】
オフロード記述記憶部１２５は、オフロード記述テンプレートとアルゴリズム情報とに基づいて生成されたオフロード記述を記憶する。
【００２５】
制御部１３０は、例えば、ＣＰＵやＭＰＵ（Micro  Processing  Unit）等によって、内部の記憶装置に記憶されているプログラムがＲＡＭを作業領域として実行されることにより実現される。また、制御部１３０は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ等の集積回路により実現されるようにしてもよい。制御部１３０は、取得部１３１と、抽出部１３２と、更新部１３３とを有し、以下に説明する情報処理の機能や作用を実現または実行する。なお、制御部１３０の内部構成は、図１に示した構成に限られず、後述する情報処理を行う構成であれば他の構成であってもよい。
【００２６】
取得部１３１は、例えば、通信部１１０を介して、他の端末から初版のソースコード、タグ挿入済みソースコードおよびオフロード記述テンプレートを取得する。取得部１３１は、取得した初版のソースコードおよびオフロード記述テンプレートを、それぞれソースコード記憶部１２１およびテンプレート記憶部１２３に記憶する。ここで取得するタグ挿入済みソースコードは、初版のソースコードに人手作業にて抽出用タグを挿入されたものである。また、ここで取得するオフロード記述テンプレートは、初版のソースコードから人手作業にて生成されたオフロード記述に対して、アルゴリズム情報に代えて挿入箇所を示すタグを記述したものである。
【００２７】
取得部１３１は、初版のソースコードおよびタグ挿入済みソースコードに基づいて、タグ挿入パッチを生成する。取得部１３１は、生成したタグ挿入パッチをタグ挿入パッチ記憶部１２２に記憶する。
【００２８】
抽出部１３２は、例えば、通信部１１０を介して、他の端末からソースコード更新パッチを取得する。抽出部１３２は、ソースコード記憶部１２１からパッチ対象のソースコードを読み出し、読み出したソースコードに対してソースコード更新パッチを適用する。つまり、抽出部１３２は、ソースコード更新パッチに基づいて、ソースコードを更新する。抽出部１３２は、更新したソースコードをソースコード記憶部１２１に記憶する。
【００２９】
抽出部１３２は、タグ挿入パッチ記憶部１２２を参照し、更新したソースコードにタグ挿入パッチを適用する。なお、タグ挿入パッチは、差分情報であるので、ソースコードが更新されても高い確率でタグ挿入箇所を特定できる。抽出部１３２は、タグ挿入パッチを適用できたか否かを判定する。抽出部１３２は、タグ挿入パッチを適用できないと判定した場合には、オフロード記述テンプレートの更新を要する旨のメッセージを表示部１１１に出力して表示させる。
【００３０】
一方、抽出部１３２は、タグ挿入パッチを適用できると判定した場合には、タグ挿入済みソースコードを生成する。また、抽出部１３２は、オフロード記述テンプレートの更新が不要である旨のメッセージを表示部１１１に出力して表示させる。なお、抽出部１３２は、タグ挿入パッチに代えて、ソースコードのアルゴリズム情報の抽象構文木を用いて、タグ挿入済みソースコードを生成するようにしてもよい。パッチでは、ソースコードの行、インデント、引数の名前等が一致していないと使えない場合がある。一方、抽象構文木では、多少記述が変わっていてもアルゴリズム情報を抽出してタグ挿入済みソースコードを生成することができる。
【００３１】
抽出部１３２は、生成したタグ挿入済みソースコードからアルゴリズム情報を抽出する。つまり、抽出部１３２は、タグ挿入済みソースコードのうち、タグで囲まれた箇所を抽出することでアルゴリズム情報を抽出する。抽出部１３２は、抽出したアルゴリズム情報をアルゴリズム情報記憶部１２４に記憶する。抽出部１３２は、アルゴリズム情報をアルゴリズム情報記憶部１２４に記憶すると、更新指示を更新部１３３に出力する。
【００３２】
言い換えると、抽出部１３２は、ソースコードが更新された場合、更新を反映したソースコードから、タグに対応するアルゴリズム情報を抽出する。また、抽出部１３２は、ソースコードが更新された場合、更新を反映したソースコードに、アルゴリズム情報の抽出用タグを挿入し、タグに対応するアルゴリズム情報を抽出する。また、抽出部１３２は、アルゴリズム情報の抽出用タグを挿入するパッチを用いて、抽出用タグを挿入する。また、抽出部１３２は、アルゴリズム情報の抽象構文木を用いて、抽出用タグを挿入する。また、抽出部１３２は、更新を反映したソースコードに、アルゴリズム情報の抽出用タグを挿入できない箇所がある場合、オフロード記述テンプレートの更新を要する旨を通知する。
【００３３】
更新部１３３は、抽出部１３２から更新指示が入力されると、テンプレート記憶部１２３およびアルゴリズム情報記憶部１２４から、それぞれオフロード記述テンプレートおよびアルゴリズム情報を読み出す。更新部１３３は、読み出したオフロード記述テンプレートのタグ部分にアルゴリズム情報を挿入してオフロード記述を生成する。更新部１３３は、生成したオフロード記述をオフロード記述記憶部１２５に記憶する。
【００３４】
ここで、図４から図９を用いて、ソースコードからオフロード記述への変換の具体例について説明する。図４は、抽出用タグの挿入の一例を示す図である。図４に示すソースコード１０は、行番号Ｌ６，Ｌ９，Ｌ１２がアルゴリズム部分であるとする。ソースコード１０が初版のソースコードである場合には、人手作業によりアルゴリズム情報の抽出用タグが挿入され、タグ挿入済みソースコード１８が生成される。ソースコード１０が二版以降のソースコードである場合には、抽出部１３２が、タグ挿入パッチを適用することで、タグ挿入済みソースコード１８を生成する。
【００３５】
アルゴリズム情報の抽出用タグは、アルゴリズム部分の箇所ごとに関数ペアで囲む。つまり、抽出用タグは、例えば、「//_OFFLOAD_BEGIN()」と「//_OFFLOAD_END()」の関数ペアの呼び出しで表現する。また、関数ペアの引数には、アルゴリズム部分の箇所を識別するために、例えば、「offload_1」、「offload_2」、「offload_3」といったＩＤを与える。
【００３６】
図５は、タグ挿入パッチの一例を示す図である。図５に示すタグ挿入パッチ１９は、初版のソースコードと、タグ挿入済みソースコードとの差分をｄｉｆｆプログラムによって求めることで生成できる。抽出部１３２は、一度、差分情報であるタグ挿入パッチ１９を生成すると、二版以降のソースコードに、パッチ（ｐａｔｃｈ）プログラムを用いてタグ挿入パッチ１９を適用することで、二版以降に対応するタグ挿入済みソースコードを生成できる。
【００３７】
図６は、アルゴリズム情報の一例を示す図である。図６に示すアルゴリズム情報２０は、タグ挿入済みソースコードから抽出用タグの関数ペアで囲まれた箇所を、抽出用タグのＩＤと対応付けたものである。抽出部１３２は、例えば、図４に示すタグ挿入済みソースコード１８から、「//_OFFLOAD_BEGIN(offload_1)」と「//_OFFLOAD_END(offload_1)」の関数ペアで囲まれた「c[i]=a[i]+b[i];」をアルゴリズムとして抽出する。抽出部１３２は、例えば、アルゴリズム情報２０に示すように、アルゴリズム部分の箇所を識別するＩＤを引数にとるタグ「//_OFFLOAD_BODY(offload_1)」に続いて抽出したアルゴリズム「c[i]=a[i]+b[i];」をコピーする。抽出部１３２は、ＩＤ「offload_2」、「offload_3」についても同様にアルゴリズムを抽出し、タグと対応付けてコピーして、アルゴリズム情報２０を生成する。
【００３８】
図７は、グルーロジックの挿入の一例を示す図である。図７に示すオフロード記述１１は、ソースコード１０から人手により書き換え作業が行われた直後の生のオフロード記述である。一方、アルゴリズム情報２０は、ソースコード１０から抽出されたものであるため、オフロード記述１１とはアルゴリズム部分の記述についても一対一の対応が取れない状態である。このため、人手作業によりアルゴリズム情報２０の記述を直接オフロード記述に挿入できるように、橋渡しをするグルーロジックを挿入する。オフロード記述２１は、オフロード記述１１に対してグルーロジックの挿入を行うことでアルゴリズム情報２０と整合性をとったものである。
【００３９】
グルーロジックの挿入は、例えば、（１）要素数「１」の配列を定義、（２）ループ変数を定義、（３）入出力（ＦＩＦＯ）のアクセス関数に置換の３つのステップを行う。図７の例では、（１）として、オフロード記述１１に、a[1]，b[1]，c[1]，d[1]，x[1]を定義する。（２）として、オフロード記述１１に、i=0，j=0，k=0を定義する。（３）として、オフロード記述１１のＦＩＦＯのアクセス方法を、afifo.read()，bfifo.read()，xfifo.write()に置換する。なお、グルーロジック自体は、高位合成ツールの最適化機能により削除される可能性が高く、性能劣化の原因にはなりにくいと考えられる。
【００４０】
図８は、オフロード記述テンプレートの一例を示す図である。図８に示すオフロード記述テンプレート２２は、オフロード記述２１からタグ「//_OFFLOAD_BODY()」を残してアルゴリズムの記述を削除したものである。つまり、オフロード記述２１のタグ「//_OFFLOAD_BODY()」以外の記述は、ハードウェアのアーキテクチャを表す記述である。
【００４１】
図９は、オフロード記述の生成の一例を示す図である。図９に示すように、更新部１３３は、オフロード記述テンプレート２２の各タグ「//_OFFLOAD_BODY()」に対して、アルゴリズム情報２０の対応するＩＤのアルゴリズムの記述を挿入し、オフロード記述２３を生成する。なお、図９の説明では、ソースコード１０から抽出したアルゴリズム情報２０を用いたので、オフロード記述２３は、オフロード記述２１と同じ記述となったが、更新されたソースコードに基づくアルゴリズム情報を用いれば、更新が適用されたオフロード記述となる。
【００４２】
図１０は、オフロード記述テンプレートの更新を要する場合におけるパッチプログラムの出力の一例を示す図である。図１０に示すメッセージ２４は、抽出部１３２においてタグ挿入パッチを適用できないと判定した場合に出力するメッセージの一例である。メッセージ２４は、パッチプログラムが失敗した場合のメッセージであり、「ＦＡＩＬＥＤ」を含んだ警告メッセージである。抽出部１３２は、タグ挿入パッチを適用できないと判定した場合に、メッセージ２４を表示してもよいし、メッセージ２４に基づいて、例えば「オフロード記述テンプレートの更新が必要です。」といったメッセージを表示するようにしてもよい。なお、抽出部１３２は、タグ挿入パッチを適用できると判定した場合には、例えば「オフロード記述テンプレートの更新は不要です。」といったメッセージを表示する。
【００４３】
続いて、図１１から図１３を用いて、タグ挿入パッチに代えて、ソースコードのアルゴリズム情報の抽象構文木を用いる場合について説明する。図１１は、抽象構文木における差分の一例を示す図である。図１１に示すソースコード２５は、Ｃによる記述であり、抽象構文木２６は、ソースコード２５に対応する。また、ソースコード２７は、ソースコード２５を更新するソースコードである。抽象構文木２８は、ソースコード２７に対応する。ソースコード２５とソースコード２７とを比較すると、演算子「＋」が「＊」に更新されている。一方、抽象構文木２６と抽象構文木２８とを比較すると、演算子に関する記述２９ａが記述２９ｂに更新されていることがわかる。つまり、記述２９ａ，２９ｂが抽象構文木における差分となる。
【００４４】
図１２は、抽象構文木を用いてアルゴリズム情報の抽出を行う場合の一例を示す図である。図１２の例では、抽出部１３２は、Ｃで記述されているソースコード３０を抽象構文木３１に変換し、アルゴリズムに対応する記述３２を探索する。記述３２は、ソースコード３０の関数ｍａｉｎ中の変数ｘへの代入文に対応する。抽出部１３２は、記述３２に基づいて、アルゴリズム情報３３を抽出する。なお、アルゴリズム情報３３では、タグは省略している。抽出部１３２は、抽出したアルゴリズム情報３３に基づいて、タグ挿入済みソースコードを生成する。このように、抽象構文木を用いる場合、パッチの様な行単位ではなく、プログラム言語の文法単位でアルゴリズム箇所を特定できる。また、抽出部１３２は、抽象構文木を用いることで、プログラム言語変換を行うこともできる。
【００４５】
図１３は、プログラム言語変換の一例を示す図である。図１３は、ＦＯＲＴＲＡＮのソースコード３４をＣで記述されたアルゴリズム情報３７に変換する場合の一例である。抽出部１３２は、ソースコード３４を抽象構文木３５に変換し、アルゴリズムに対応する記述３６を探索する。記述３６は、ソースコード３４の関数ｍａｉｎ中の変数ｘへの代入文に対応する。抽出部１３２は、記述３６に基づいて、アルゴリズム情報３７を抽出する。抽出部１３２は、アルゴリズム情報３７をＣで記述されたソースコードのテンプレートに挿入することで、ＦＯＲＴＲＡＮからＣに言語変換を行うことができる。なお、抽出部１３２は、アルゴリズム情報３７に基づいて、オフロード記述を生成してもよい。
【００４６】
次に、実施例の変換装置１００の動作について説明する。まず、図１４を用いて初回抽出処理について説明する。図１４は、実施例の初回抽出処理の一例を示すフローチャートである。
【００４７】
取得部１３１は、例えば、他の端末から初版のソースコード、タグ挿入済みソースコードおよびオフロード記述テンプレートを取得する（ステップＳ１）。取得部１３１は、取得した初版のソースコードおよびオフロード記述テンプレートを、それぞれソースコード記憶部１２１およびテンプレート記憶部１２３に記憶する。
【００４８】
取得部１３１は、初版のソースコードおよびタグ挿入済みソースコードに基づいて、タグ挿入パッチを生成する（ステップＳ２）。取得部１３１は、生成したタグ挿入パッチをタグ挿入パッチ記憶部１２２に記憶する。
【００４９】
抽出部１３２は、タグ挿入済みソースコードからアルゴリズム情報を抽出する（ステップＳ３）。抽出部１３２は、抽出したアルゴリズム情報をアルゴリズム情報記憶部１２４に記憶する。これにより、変換装置１００は、初版のソースコード、タグ挿入パッチ、オフロード記述テンプレート、および、アルゴリズム情報を記憶し、二版以降のソースコード変換処理の準備を整えることができる。すなわち、変換装置１００は、アプリのアルゴリズム情報と、ハードウェア実装上のアーキテクチャを表すオフロード記述テンプレートとを分離して管理することができる。
【００５０】
続いて、図１５を用いてソースコードが更新された場合における変換処理について説明する。図１５は、実施例の変換処理の一例を示すフローチャートである。
【００５１】
抽出部１３２は、例えば、他の端末からソースコード更新パッチを取得する（ステップＳ１１）。抽出部１３２は、ソースコード更新パッチに基づいて、ソースコードを更新する（ステップＳ１２）。抽出部１３２は、更新したソースコードをソースコード記憶部１２１に記憶する。
【００５２】
抽出部１３２は、タグ挿入パッチ記憶部１２２を参照し、更新したソースコードにタグ挿入パッチを適用する（ステップＳ１３）。抽出部１３２は、タグ挿入パッチを適用できたか否かを判定する（ステップＳ１４）。抽出部１３２は、タグ挿入パッチを適用できると判定した場合には（ステップＳ１４：肯定）、タグ挿入済みソースコードを生成する（ステップＳ１５）。
【００５３】
抽出部１３２は、オフロード記述テンプレートの更新が不要である旨のメッセージを表示部１１１に出力して表示させる（ステップＳ１６）。抽出部１３２は、生成したタグ挿入済みソースコードからアルゴリズム情報を抽出する（ステップＳ１７）。抽出部１３２は、抽出したアルゴリズム情報をアルゴリズム情報記憶部１２４に記憶し、更新指示を更新部１３３に出力する。
【００５４】
更新部１３３は、抽出部１３２から更新指示が入力されると、テンプレート記憶部１２３およびアルゴリズム情報記憶部１２４から、それぞれオフロード記述テンプレートおよびアルゴリズム情報を読み出す。更新部１３３は、読み出したオフロード記述テンプレートのタグ部分にアルゴリズム情報を挿入してオフロード記述を生成する（ステップＳ１８）。更新部１３３は、生成したオフロード記述をオフロード記述記憶部１２５に記憶し、変換処理を終了する。
【００５５】
一方、抽出部１３２は、ステップＳ１４において、タグ挿入パッチを適用できないと判定した場合には（ステップＳ１４：否定）、オフロード記述テンプレートの更新を要する旨のメッセージを表示部１１１に出力して表示させ（ステップＳ１９）、変換処理を終了する。これにより、変換装置１００は、アプリケーションの更新があった際に対応するオフロード記述の更新効率を向上できる。つまり、変換装置１００は、アプリまたはハードウェアの変更に対して柔軟な更新が可能となる。また、変換装置１００は、タグ挿入パッチを適用できないと判定した場合に、更新したソースコードの対象箇所を容易に特定できる。従って、変換装置１００は、オフロード記述テンプレートの変更箇所も容易に特定できる。
【００５６】
なお、上記実施例では、アプリのソースコードをＣまたはＣ＋＋、オフロード記述をＳｙｓｔｅｍＣで記述した場合について説明したが、これに限定されない。例えば、アプリのソースコードとして、ＦＯＲＴＲＡＮ、ＣＯＢＯＬ、Ｊａｖａ（登録商標）、Ｐｅｒｌ、Ｐｙｔｈｏｎ、Ｒｕｂｙ等の各種の言語のソースコードを用いることができる。また、例えば、オフロード記述として、ＳｙｓｔｅｍＶｅｒｉｌｏｇ等の各種の言語のオフロード記述を用いることができる。
【００５７】
このように、変換装置１００は、ソースコードを有するアプリケーションに基づいて、ハードウェアで動作させるオフロード記述に対応する、アプリケーションのアルゴリズム情報の挿入箇所をタグで示すとともにハードウェアのアーキテクチャを表すオフロード記述テンプレートを取得する。また、変換装置１００は、ソースコードが更新された場合、更新を反映したソースコードから、タグに対応するアルゴリズム情報を抽出する。また、変換装置１００は、抽出したアルゴリズム情報をオフロード記述テンプレートの対応する箇所に挿入してオフロード記述を更新する。その結果、変換装置１００は、アプリケーションの更新があった際に対応するオフロード記述の更新効率を向上できる。
【００５８】
また、変換装置１００は、ソースコードが更新された場合、更新を反映したソースコードに、アルゴリズム情報の抽出用タグを挿入し、タグに対応するアルゴリズム情報を抽出する。その結果、変換装置１００は、更新されたソースコードに対応するアルゴリズム情報を取得できる。
【００５９】
また、変換装置１００は、アルゴリズム情報の抽出用タグを挿入するパッチを用いて、抽出用タグを挿入する。その結果、変換装置１００は、アルゴリズムに関する記述を特定できる。
【００６０】
また、変換装置１００は、アルゴリズム情報の抽象構文木を用いて、抽出用タグを挿入する。その結果、変換装置１００は、アルゴリズムに関する記述を特定できる。
【００６１】
また、変換装置１００は、更新を反映したソースコードに、アルゴリズム情報の抽出用タグを挿入できない箇所がある場合、オフロード記述テンプレートの更新を要する旨を通知する。その結果、変換装置１００は、ハードウェアのアーキテクチャに関する部分の更新があったことをユーザに知らせることができる。
【００６２】
また、図示した各部の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各部の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、抽出部１３２と更新部１３３とを統合してもよい。また、図示した各処理は、上記の順番に限定されるものでなく、処理内容を矛盾させない範囲において、同時に実施してもよく、順序を入れ替えて実施してもよい。
【００６３】
さらに、各装置で行われる各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ（Micro  Controller  Unit）等のマイクロ・コンピュータ）上で、その全部または任意の一部を実行するようにしてもよい。また、各種処理機能は、ＣＰＵ（またはＭＰＵ、ＭＣＵ等のマイクロ・コンピュータ）で解析実行されるプログラム上、またはワイヤードロジックによるハードウェア上で、その全部または任意の一部を実行するようにしてもよいことは言うまでもない。
【００６４】
ところで、上記の各実施例で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行することで実現できる。そこで、以下では、上記の各実施例と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図１６は、ソースコード変換プログラムを実行するコンピュータの一例を示す図である。
【００６５】
図１６に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、データ入力を受け付ける入力装置２０２と、モニタ２０３とを有する。また、コンピュータ２００は、記憶媒体からプログラム等を読み取る媒体読取装置２０４と、各種装置と接続するためのインタフェース装置２０５と、他の情報処理装置等と有線または無線により接続するための通信装置２０６とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ２０７と、ハードディスク装置２０８とを有する。また、各装置２０１〜２０８は、バス２０９に接続される。
【００６６】
ハードディスク装置２０８には、図１に示した取得部１３１、抽出部１３２および更新部１３３の各処理部と同様の機能を有するソースコード変換プログラムが記憶される。また、ハードディスク装置２０８には、ソースコード記憶部１２１、タグ挿入パッチ記憶部１２２、テンプレート記憶部１２３、アルゴリズム情報記憶部１２４、オフロード記述記憶部１２５、および、ソースコード変換プログラムを実現するための各種データが記憶される。入力装置２０２は、例えば、コンピュータ２００のユーザから操作情報等の各種情報の入力を受け付ける。モニタ２０３は、例えば、コンピュータ２００のユーザに対して表示画面等の各種画面を表示する。インタフェース装置２０５は、例えば印刷装置等が接続される。通信装置２０６は、例えば、図１に示した通信部１１０と同様の機能を有し図示しないネットワークと接続され、他の情報処理装置と各種情報をやりとりする。
【００６７】
ＣＰＵ２０１は、ハードディスク装置２０８に記憶された各プログラムを読み出して、ＲＡＭ２０７に展開して実行することで、各種の処理を行う。また、これらのプログラムは、コンピュータ２００を図１に示した取得部１３１、抽出部１３２および更新部１３３として機能させることができる。
【００６８】
なお、上記のソースコード変換プログラムは、必ずしもハードディスク装置２０８に記憶されている必要はない。例えば、コンピュータ２００が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ２００が読み出して実行するようにしてもよい。コンピュータ２００が読み取り可能な記憶媒体は、例えば、ＣＤ−ＲＯＭやＤＶＤ（Digital  Versatile  Disc）、ＵＳＢ（Universal  Serial  Bus）メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、ＬＡＮ等に接続された装置にこのソースコード変換プログラムを記憶させておき、コンピュータ２００がこれらからソースコード変換プログラムを読み出して実行するようにしてもよい。
【符号の説明】
【００６９】
１００  変換装置
１１０  通信部
１１１  表示部
１１２  操作部
１２０  記憶部
１２１  ソースコード記憶部
１２２  タグ挿入パッチ記憶部
１２３  テンプレート記憶部
１２４  アルゴリズム情報記憶部
１２５  オフロード記述記憶部
１３０  制御部
１３１  取得部
１３２  抽出部
１３３  更新部
【図１】
2019197308.tif 000003
【図２】
2019197308.tif 000004
【図３】
2019197308.tif 000005
【図４】
2019197308.tif 000006
【図５】
2019197308.tif 000007
【図６】
2019197308.tif 000008
【図７】
2019197308.tif 000009
【図８】
2019197308.tif 000010
【図９】
2019197308.tif 000011
【図１０】
2019197308.tif 000012
【図１１】
2019197308.tif 000013
【図１２】
2019197308.tif 000014
【図１３】
2019197308.tif 000015
【図１４】
2019197308.tif 000016
【図１５】
2019197308.tif 000017
【図１６】
2019197308.tif 000018