(57)【要約】【課題】アーキテクチャの異なるプラットフォームにおいても、ソフトウェアの移植が容易であるソフトウェア生成装置を提供する。【解決手段】ソフトウェアプログラムを、プラットフォームに依存しない処理をソースコードで記述したモジュール［演算モジュール］、モジュールの種別や入出力情報や処理時間制約条件などの情報［モジュール付帯情報］、ソフトウェア内のモジュールの接続構成や全体の時間制約情報［全体構成情報］の三種類の構成要素により構成する。  ソフトウェア生成装置は、この三種の構成要素から構成されるソフトウェアプログラムと、プロファイル情報（各演算モジュールでの処理時間あるいは処理サイクル数やメモリのアクセス情報など）を元に、ソフトウェアを実行するプラットフォームに適したソースコードを生成する。【選択図】図１
2008250838.tif 000002
【特許請求の範囲】
【請求項１】
プラットフォームが備えるメモリの構成を示すメモリ構成情報が記憶されているプラットフォーム構成情報記憶部と、
前記プラットフォームに依存しない形式で記述された演算処理のソースコードである演算モジュールが記憶されている演算モジュール記憶部と、
前記演算モジュールが用いるメモリの情報が記憶されているモジュール付帯情報記憶部と、
前記演算モジュールの接続関係の情報である演算モジュール接続情報が記憶されている全体構成情報記憶部と、
前記全体構成情報記憶部から演算モジュール接続情報を読み出し、前記読み出した演算モジュール接続情報に基づいて前記演算モジュールの実行順序を決定する演算モジュール順序決定部と、
前記モジュール付帯情報記憶部から読み出した演算モジュールが用いるメモリの情報と、前記プラットフォーム構成情報記憶部から読み出したメモリ構成情報とに基づいて、前記メモリ構成情報で示されるメモリを、前記演算モジュール順序決定部が決定した演算モジュールに割当ててソースコードを生成し出力するソフトウェア生成部と、
を有することを特徴とするソフトウェア生成装置。
【請求項２】
前記メモリ構成情報が、前記プラットフォームが備える異なるアクセス速度を有するメモリの構成情報を含み、
前記演算モジュールが用いる変数と、該変数の優先順位とが関連付けて変数優先順位情報として前記モジュール付帯情報記憶部に記憶されており、
前記ソフトウェア生成部が、
前記モジュール付帯情報記憶部から読み出した変数優先順位情報に基づいて、前記演算モジュール順序決定部が決定した演算モジュールで用いられる変数に、前記異なるアクセス速度を有するメモリを割当てて前記ソースコードを生成し出力する、
ことを特徴とする請求項１に記載のソフトウェア生成装置。
【請求項３】
前記プラットフォーム構成情報記憶部に記憶されているプラットフォーム構成情報が、前記プラットフォームが実行可能な並列実行数の情報である並列実行数情報を含み、
前記ソフトウェア生成装置が、
前記並列実行数情報を前記プラットフォーム構成情報記憶部から読み出し、前記演算モジュール順序決定部が決定した演算モジュールの実行順序と、前記読み出した並列実行数情報とに基づいて、前記実行順序を決定した演算モジュールの並列処理を決定する並列処理割当て部、
を有し、
前記ソフトウェア生成部が、
並列実行単位に基づくソースコードを生成し出力する、
ことを特徴とする請求項１または請求項２に記載のソフトウェア生成装置。
【請求項４】
前記全体構成情報記憶部に記憶されている全体構成情報が、前記演算モジュール接続情報で構成されるモジュールの複数または全体が処理を実行する時間の制約条件であるソフトウェア処理時間制約条件を含み、
前記ソフトウェア生成装置が、
前記ソフトウェア生成部が生成し出力したモジュールの複数または全体に該当するソースコードの実行時間を測定し、該測定した実行時間をプロファイル情報として生成するプロファイラ部と、
前記ソフトウェア処理時間制約条件を前記全体構成情報記憶部から読み出し、前記プロファイラ部が測定した実行時間が、前記読み出したソフトウェア処理時間制約条件を満たすか否かを検出する検出部と、
を有することを特徴とする請求項１から請求項３に記載のソフトウェア生成装置。
【請求項５】
前記検出部が、
前記検出した結果が、前記実行時間が前記ソフトウェア処理時間制約条件を満たさない場合には、前記生成したプロファイル情報に基づいて、前記演算モジュール順序決定部と前記ソフトウェア生成部との処理を繰り返す、
ことを特徴とする請求項４に記載のソフトウェア生成装置。
【請求項６】
前記プラットフォーム構成情報記憶部が、前記プラットフォームが有するアクセラレータを特定する情報であるアクセラレータ情報、または、前記プラットフォームが有するライブラリを特定する情報であるライブラリ情報を含み、
前記演算モジュール順序決定部が、
前記アクセラレータ情報または前記ライブラリ情報を前記プラットフォーム構成情報記憶部から読み出し、前記読み出したアクセラレータ情報で特定されるアクセラレータの処理またはライブラリ情報で特定される処理に該当する１つまたは複数の演算モジュールを、前記読み出した演算モジュール接続情報の中から、置換演算モジュールとして検出し、
前記ソフトウェア生成部が、
前記演算モジュール順序決定部が検出した置換演算モジュールに該当するソースコードとして、前記アクセラレータ情報で特定されるアクセラレータを用いるソースコード、または、前記ライブラリ情報で特定されるライブラリを用いるソースコード、を生成する、
ことを特徴とする請求項１から請求項５に記載のソフトウェア生成装置。
【請求項７】
前記ソフトウェア生成装置が、
前記ソフトウェア生成部が生成し出力したソースコードを、コンパイルしリンクするコンパイラ・リンカ部、
を有することを特徴とする請求項１から請求項６に記載のソフトウェア生成装置。
【請求項８】
前記ソフトウェア生成部が、
前記メモリ構成情報で示されるメモリを、前記演算モジュール順序決定部が決定した演算モジュールに割当ててソースコードを生成し出力する時に、前記モジュールの実行開始から実行終了までに要するサイクル数を取得してプロファイル機能となるソースコードをプロファイル機能ソースコードとしてモジュール毎に生成し、前記生成したプロファイル機能ソースコードを、前記モジュールのソースコードに含めて前記ソースコードを生成し出力する、
ことを特徴とする請求項１から請求項７に記載のソフトウェア生成装置。
【請求項９】
プラットフォームが備えるメモリの構成を示すメモリ構成情報が記憶されているプラットフォーム構成情報記憶部と、
前記プラットフォームに依存しない形式で記述された演算処理のソースコードである演算モジュールが記憶されている演算モジュール記憶部と、
前記演算モジュールが用いるメモリの情報が記憶されているモジュール付帯情報記憶部と、
前記演算モジュールの接続関係の情報である演算モジュール接続情報が記憶されている全体構成情報記憶部と、
を有するソフトウェア生成装置で用いられるソフトウェア生成方法であって、
前記ソフトウェア生成装置が、
前記全体構成情報記憶部から演算モジュール接続情報を読み出し、前記読み出した演算モジュール接続情報に基づいて前記演算モジュールの実行順序を決定し、
前記モジュール付帯情報記憶部から読み出した演算モジュールが用いるメモリの情報と、前記プラットフォーム構成情報記憶部から読み出したメモリ構成情報とに基づいて、前記メモリ構成情報で示されるメモリを、前記決定した演算モジュールに割当ててソースコードを生成し出力する、
ことを特徴とするソフトウェア生成方法。
【請求項１０】
プラットフォームが備えるメモリの構成を示すメモリ構成情報が記憶されているプラットフォーム構成情報記憶部と、
前記プラットフォームに依存しない形式で記述された演算処理のソースコードである演算モジュールが記憶されている演算モジュール記憶部と、
前記演算モジュールが用いるメモリの情報が記憶されているモジュール付帯情報記憶部と、
前記演算モジュールの接続関係の情報である演算モジュール接続情報が記憶されている全体構成情報記憶部と、
を有するソフトウェア生成装置を構成するコンピュータに、
前記全体構成情報記憶部から演算モジュール接続情報を読み出し、前記読み出した演算モジュール接続情報に基づいて前記演算モジュールの実行順序を決定する演算モジュール順序決定手順と、
前記モジュール付帯情報記憶部から読み出した演算モジュールが用いるメモリの情報と、前記プラットフォーム構成情報記憶部から読み出したメモリ構成情報とに基づいて、前記メモリ構成情報で示されるメモリを、前記演算モジュール順序決定手順が決定した演算モジュールに割当ててソースコードを生成し出力するソフトウェア生成手順と、
を実行させるためのソフトウェア生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、移植性の高いソフトウェア生成装置の技術に関し、特に、アーキテクチャの異なるプラットフォームへのソフトウェアの移植を容易にするソフトウェア生成装置の技術に関する。
【背景技術】
【０００２】
従来、ソフトウェアの再利用を目的とし、モジュールとその内部のパラメータとを組み合わせてソフトウェアのソースコードを生成するソフトウェア生成装置が知られている。また、オペレータが入力した情報を元に、モジュールを検索し、検索したモジュールを組み立てることによりソフトウェアを生成するソフトウェア生成装置も知られている。このような、従来技術として、例えば、特許文献１が知られている。
【０００３】
この特許文献１によるソフトウェア生成装置は、プログラム仕様書とソースプログラム(ソースコードと同義)との間の整合性を保つこと、および、再利用が可能なプログラムの蓄積をすることを目的としている。
そして、この特許文献１によるソフトウェア生成装置を用いることで、ソフトウェア資産をモジュールという形で蓄え、蓄えたモジュールを再利用することで、効率的にソフトウェアを生成することが可能である。
【特許文献１】特開平８−３２８８４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に示すソフトウェア生成装置にあっては、ソフトウェアが動作する環境であるプロセッサ種別やメモリ構成などのアーキテクチャが異なるプラットフォームへの移植に対する考慮がなされていない。そのため、上記モジュールとその内部のパラメータとを組み合わせてソフトウェアを生成したとしても、一部のモジュールはそのまま動作することもあるが、生成したソフトウェアは、アーキテクチャが異なるプラットフォームにおいては、一般的には動作不能であるという問題がある。
このように、特許文献１に示すソフトウェア生成装置にあっては、アーキテクチャの異なるプラットフォームにおいて、ソフトウェアの移植が出来ないという問題がある。
【０００５】
また、特許文献１に示すソフトウェア生成装置にあっては、処理時間に関する考慮がなされていないため、予め定められた実時間内での処理を必要とするソフトウェアの生成には向かないという問題がある。特に、無線の信号処理や映像の信号処理などの、リアルタイムに処理を実行する必要のあるソフトウェアを生成することが出来ない、という問題がある。
【０００６】
本発明は、このような事情に鑑みてなされたもので、その目的は、アーキテクチャの異なるプラットフォームにおいても、ソフトウェアの移植が容易であるソフトウェア生成装置を提供することにある。
また、本発明の目的は、リアルタイムでの処理を必要とするソフトウェアの生成を可能とするソフトウェア生成装置を提供することにある。
【課題を解決するための手段】
【０００７】
この発明は上述した課題を解決するためになされたもので、請求項１に記載の発明は、プラットフォームが備えるメモリの構成を示すメモリ構成情報が記憶されているプラットフォーム構成情報記憶部と、前記プラットフォームに依存しない形式で記述された演算処理のソースコードである演算モジュールが記憶されている演算モジュール記憶部と、前記演算モジュールが用いるメモリの情報が記憶されているモジュール付帯情報記憶部と、前記演算モジュールの接続関係の情報である演算モジュール接続情報が記憶されている全体構成情報記憶部と、前記全体構成情報記憶部から演算モジュール接続情報を読み出し、前記読み出した演算モジュール接続情報に基づいて前記演算モジュールの実行順序を決定する演算モジュール順序決定部と、前記モジュール付帯情報記憶部から読み出した演算モジュールが用いるメモリの情報と、前記プラットフォーム構成情報記憶部から読み出したメモリ構成情報とに基づいて、前記メモリ構成情報で示されるメモリを、前記演算モジュール順序決定部が決定した演算モジュールに割当ててソースコードを生成し出力するソフトウェア生成部と、を有することを特徴とするソフトウェア生成装置である。
【０００８】
また、この発明は、前記メモリ構成情報が、前記プラットフォームが備える異なるアクセス速度を有するメモリの構成情報を含み、前記演算モジュールが用いる変数と、該変数の優先順位とが関連付けて変数優先順位情報として前記モジュール付帯情報記憶部に記憶されており、前記ソフトウェア生成部が、前記モジュール付帯情報記憶部から読み出した変数優先順位情報に基づいて、前記演算モジュール順序決定部が決定した演算モジュールで用いられる変数に、前記異なるアクセス速度を有するメモリを割当てて前記ソースコードを生成し出力する、ことを特徴とするソフトウェア生成装置である。
【０００９】
また、この発明は、前記プラットフォーム構成情報記憶部に記憶されているプラットフォーム構成情報が、前記プラットフォームが実行可能な並列実行数の情報である並列実行数情報を含み、前記ソフトウェア生成装置が、前記並列実行数情報を前記プラットフォーム構成情報記憶部から読み出し、前記演算モジュール順序決定部が決定した演算モジュールの実行順序と、前記読み出した並列実行数情報とに基づいて、前記実行順序を決定した演算モジュールの並列処理を決定する並列処理割当て部、を有し、前記ソフトウェア生成部が、並列実行単位に基づくソースコードを生成し出力する、ことを特徴とするソフトウェア生成装置である。
【００１０】
また、この発明は、前記全体構成情報記憶部に記憶されている全体構成情報が、前記演算モジュール接続情報で構成されるモジュールの複数または全体が処理を実行する時間の制約条件であるソフトウェア処理時間制約条件を含み、前記ソフトウェア生成装置が、前記ソフトウェア生成部が生成し出力したモジュールの複数または全体に該当するソースコードの実行時間を測定し、該測定した実行時間をプロファイル情報として生成するプロファイラ部と、前記ソフトウェア処理時間制約条件を前記全体構成情報記憶部から読み出し、前記プロファイラ部が測定した実行時間が、前記読み出したソフトウェア処理時間制約条件を満たすか否かを検出する検出部と、を有することを特徴とするソフトウェア生成装置である。
【００１１】
また、この発明は、前記検出部が、前記検出した結果が、前記実行時間が前記ソフトウェア処理時間制約条件を満たさない場合には、前記生成したプロファイル情報に基づいて、前記演算モジュール順序決定部と前記ソフトウェア生成部との処理を繰り返す、ことを特徴とするソフトウェア生成装置である。
【００１２】
また、この発明は、前記プラットフォーム構成情報記憶部が、前記プラットフォームが有するアクセラレータを特定する情報であるアクセラレータ情報、または、前記プラットフォームが有するライブラリを特定する情報であるライブラリ情報を含み、前記演算モジュール順序決定部が、前記アクセラレータ情報または前記ライブラリ情報を前記プラットフォーム構成情報記憶部から読み出し、前記読み出したアクセラレータ情報で特定されるアクセラレータの処理またはライブラリ情報で特定される処理に該当する１つまたは複数の演算モジュールを、前記読み出した演算モジュール接続情報の中から、置換演算モジュールとして検出し、前記ソフトウェア生成部が、前記演算モジュール順序決定部が検出した置換演算モジュールに該当するソースコードとして、前記アクセラレータ情報で特定されるアクセラレータを用いるソースコード、または、前記ライブラリ情報で特定されるライブラリを用いるソースコード、を生成する、ことを特徴とするソフトウェア生成装置である。
【００１３】
また、この発明は、前記ソフトウェア生成装置が、前記ソフトウェア生成部が生成し出力したソースコードを、コンパイルしリンクするコンパイラ・リンカ部、を有することを特徴とする請求項１から請求項６に記載のソフトウェア生成装置である。
請求項８に記載の発明は、前記ソフトウェア生成部が、前記メモリ構成情報で示されるメモリを、前記演算モジュール順序決定部が決定した演算モジュールに割当ててソースコードを生成し出力する時に、前記モジュールの実行開始から実行終了までに要するサイクル数を取得してプロファイル機能となるソースコードをプロファイル機能ソースコードとしてモジュール毎に生成し、前記生成したプロファイル機能ソースコードを、前記モジュールのソースコードに含めて前記ソースコードを生成し出力する、ことを特徴とするソフトウェア生成装置である。
【００１４】
また、この発明は、プラットフォームが備えるメモリの構成を示すメモリ構成情報が記憶されているプラットフォーム構成情報記憶部と、前記プラットフォームに依存しない形式で記述された演算処理のソースコードである演算モジュールが記憶されている演算モジュール記憶部と、前記演算モジュールが用いるメモリの情報が記憶されているモジュール付帯情報記憶部と、前記演算モジュールの接続関係の情報である演算モジュール接続情報が記憶されている全体構成情報記憶部と、を有するソフトウェア生成装置で用いられるソフトウェア生成方法であって、前記ソフトウェア生成装置が、前記全体構成情報記憶部から演算モジュール接続情報を読み出し、前記読み出した演算モジュール接続情報に基づいて前記演算モジュールの実行順序を決定し、前記モジュール付帯情報記憶部から読み出した演算モジュールが用いるメモリの情報と、前記プラットフォーム構成情報記憶部から読み出したメモリ構成情報とに基づいて、前記メモリ構成情報で示されるメモリを、前記決定した演算モジュールに割当ててソースコードを生成し出力する、ことを特徴とするソフトウェア生成方法である。
【００１５】
また、この発明は、プラットフォームが備えるメモリの構成を示すメモリ構成情報が記憶されているプラットフォーム構成情報記憶部と、前記プラットフォームに依存しない形式で記述された演算処理のソースコードである演算モジュールが記憶されている演算モジュール記憶部と、前記演算モジュールが用いるメモリの情報が記憶されているモジュール付帯情報記憶部と、前記演算モジュールの接続関係の情報である演算モジュール接続情報が記憶されている全体構成情報記憶部と、を有するソフトウェア生成装置を構成するコンピュータに、前記全体構成情報記憶部から演算モジュール接続情報を読み出し、前記読み出した演算モジュール接続情報に基づいて前記演算モジュールの実行順序を決定する演算モジュール順序決定手順と、前記モジュール付帯情報記憶部から読み出した演算モジュールが用いるメモリの情報と、前記プラットフォーム構成情報記憶部から読み出したメモリ構成情報とに基づいて、前記メモリ構成情報で示されるメモリを、前記演算モジュール順序決定手順が決定した演算モジュールに割当ててソースコードを生成し出力するソフトウェア生成手順と、を実行させるためのソフトウェア生成プログラムである。
【発明の効果】
【００１６】
この発明によれば、アーキテクチャの異なるプラットフォームにおいても、ソフトウェアの移植が容易となる効果を奏する。
また、本発明によれば、リアルタイムでの処理を必要とするソフトウェアの生成が可能となるという効果を奏する。
【発明を実施するための最良の形態】
【００１７】
＜概要＞
最初に、本実施形態の概要を説明する。
まず、ソフトウェアプログラムを、（１）プラットフォームに依存しない処理をソースコードで記述したモジュール［演算モジュール］、（２）モジュールの種別や入出力情報、処理時間制約条件などの情報［モジュール付帯情報］、（３）ソフトウェア内のモジュールの接続構成や全体の時間制約情報［全体構成情報］の三種類の構成要素により構成する。
【００１８】
ソフトウェア生成装置は、この三種の構成要素から構成されるソフトウェアプログラムと、プロファイル情報（各演算モジュールでの処理時間あるいは処理サイクル数やメモリのアクセス情報など）を元に、ソフトウェアを実行するプラットフォームに適したソースコード（以降、プラットフォーム依存ソースコード）を生成する。
【００１９】
このとき、ソフトウェア生成装置は、プラットフォームに適切なソースコード（プラットフォーム依存ソースコード）を生成するために、プラットフォームの構成情報（コア数やスレッド数やメモリ構成などのハードウェアの構成）を利用する。
また、ソフトウェア生成装置は、後述するプロファイラからプロファイル情報を取得し、取得したプロファイル情報に基づいて、プラットフォーム依存ソースコードを生成する。
【００２０】
コンパイラやリンカ（以降、コンパイラ・リンカという）は、プラットフォームに対応する通常の開発ツールを利用し、プラットフォーム依存ソースコードをコンパイルおよびリンクし、実行ファイルを生成する。このとき、コンパイラ・リンカは、通常のソフトウェア生成時と同様に、ライブラリを利用することも可能である。
【００２１】
プロファイラは、実行ファイルを実行する際に、処理サイクル数（処理時間）やメモリのアクセス状況などのプロファイル情報を取得する。
【００２２】
＜第１の実施形態＞
以下、図面を参照して、本発明の実施の形態について説明する。図１は、この発明の一実施形態によるソフトウェア生成装置１００の構成を示す概略ブロック図である。
ソフトウェア生成装置１００は、ソフトウェアプログラム記憶部１０と、ソフトウェア生成部１と、プラットフォーム構成情報記憶部２と、プラットフォーム依存ソースコード記憶部３と、ライブラリ記憶部４と、コンパイラ・リンカ部５と、実行ファイル記憶部６と、プロファイラ部７と、を有する。
また、ソフトウェアプログラム記憶部１０は、演算モジュール記憶部１１と、モジュール付帯情報記憶部１２と、全体構成情報記憶部１３と、を有する。
【００２３】
ソフトウェア実行プラットフォーム８は、ソフトウェア生成装置１００が生成するソフトウェアを実行させる対象となる装置である。ソフトウェア実行プラットフォーム８は、例えば、ＰＣ（パーソナルコンピュータ）や携帯電話などの機器である。なお、このソフトウェア実行プラットフォーム８は、ソフトウェア生成装置１００であってもよい。
【００２４】
演算モジュール記憶部１１には、複数の演算モジュールソースコード（以降、モジュールと称して説明する）が記憶されている。
このモジュールは、プラットフォームに依存しない形で記述されている演算処理のコアとなるソースコードである。また、あるまとまった単位の処理で、一つのモジュールが構成されている。
例えば、モジュールの処理は、ＦＦＴ（Fast Fourier Transform）処理やターボ符号処理などである。
【００２５】
モジュール付帯情報記憶部１２には、複数のモジュール付帯情報が記憶されている。このモジュール付帯情報は、モジュールに１対１に対応付けられている。つまり、モジュールとモジュール付帯情報とは、予め関連付けられている。このモジュール付帯情報には、関連付けられているモジュールについて、以下のような情報が含まれる。
【００２６】
このモジュール付帯情報には、モジュールの処理の種別や名称や概要の情報であるモジュール処理情報、モジュールの内部の情報であるモジュール内部情報、他のモジュールとの接続に必要な情報であるモジュールインタフェース情報、が含まれる。
【００２７】
また、このモジュール付帯情報には、モジュールが満たさなければいけない制約条件の情報であるモジュール制約条件、モジュール内部で用いられる変数と高速なメモリへの割当て優先順位の情報である変数優先順位情報、などが含まれる。
【００２８】
例えば、モジュール内部情報として、モジュールで行なう処理の種別の情報がある。また、例えば、モジュールインタフェース情報として、モジュールの入出力におけるデータの型やデータのサイズの情報がある。
また、例えば、モジュール制約条件として、モジュールの処理時間の制約条件の情報がある。また、例えば、変数優先順位情報として、モジュール内部で用いられる変数とその変数の高速なメモリへの割当て優先順位とが関連付けられた情報がある。
【００２９】
全体構成情報記憶部１３には、全体構成情報が記憶されている。
この全体構成情報には、モジュールにより構成するソフトウェアプログラムの全体構造を示す情報であるモジュール接続情報、モジュールにより構成するソフトウェアプログラムの制約条件であるソフトウェア制約条件、などが含まれる。
【００３０】
例えば、モジュール接続情報として、モジュールの接続関係を示す情報がある。また、例えば、ソフトウェア制約条件として、複数モジュールあるいは全体で満たさなければいけない処理時間の制約条件であるソフトウェア処理時間制約条件がある。
【００３１】
プラットフォーム構成情報記憶部２には、プラットフォーム構成情報が記憶されている。  
このプラットフォーム構成情報には、プラットフォームが備えるコア数の情報であるコア数情報、プラットフォームが備えるコア毎の同時に実行可能なスレッド数の情報であるスレッド数情報、プラットフォームが備える異なるアクセス速度を有するメモリの情報であるメモリ構成情報が含まれる。
【００３２】
また、このプラットフォーム構成情報には、プラットフォームが備えるアクセラレータを示す情報であるアクセラレータ情報、プラットフォームが備えるライブラリを示す情報であるライブラリ情報、プラットフォームが備えるダイレクトメモリアクセスをするためのハードウェア構成およびその設定の情報であるＤＭＡ（Direct Memory Access）情報、などが含まれる。
【００３３】
また、アクセラレータ情報には、アクセラレータの処理の名称や、そのアクセラレータを用いる場合の、設定情報やソースコードなどの情報も含まれている。
また、ライブラリ情報には、ライブラリの処理の名称や、そのライブラリを用いる場合の、設定情報やソースコードなどの情報も含まれている。
【００３４】
なお、メモリ構成情報には、異なるアクセス速度を有するメモリの速度の情報とメモリの容量とが、関連付けて記憶されている。
なお、このコア数情報とスレッド数情報とをまとめて、コア数スレッド数情報である並列実行数情報と称する。
【００３５】
ソフトウェア生成部１（演算モジュール順序決定部）は、全体構成情報記憶部１３から演算モジュール接続情報を読み出し、読み出した演算モジュール接続情報に基づいて演算モジュールの実行順序を決定する。
また、ソフトウェア生成部１は、モジュール付帯情報記憶部１２から読み出した変数優先順位情報などによる演算モジュールが用いるメモリの情報と、プラットフォーム構成情報記憶部２から読み出したメモリ構成情報とに基づいて、メモリ構成情報で示されるプラットフォームが備えるメモリを演算モジュールに割当てて、プラットフォーム依存ソースコードを生成する。
また、ソフトウェア生成部１は、生成したプラットフォーム依存ソースコードを、プラットフォーム依存ソースコード記憶部３に出力する。
【００３６】
また、ソフトウェア生成部１は、モジュール付帯情報記憶部１２から読み出した変数優先順位情報に基づいて、順序を決定した演算モジュールで用いられる変数に、異なるアクセス速度を有するメモリを割当ててプラットフォーム依存ソースコードを生成する。
【００３７】
また、ソフトウェア生成部１（並列処理割当て部）は、並列実行数情報をプラットフォーム構成情報記憶部２から読み出し、決定した演算モジュールの実行順序と、読み出した並列実行数情報とに基づいて、実行順序を決定した演算モジュールの並列処理を決定する。
また、ソフトウェア生成部１は、並列処理を決定した演算モジュールに基づいて、すなわち、並列実行単位で、プラットフォーム依存ソースコードを生成し出力する。この並列実行単位とは、例えば、後述する図５（ａ）から図５（ｄ）に示すように、コア毎のスレッドで並行に実行される単位のことである。
【００３８】
なお、ソフトウェア生成部１（並列処理割当て部（＝コアスレッド割当て部））は、コア数またはスレッド数の情報であるコア数スレッド数情報（＝並列実行数情報）をプラットフォーム構成情報記憶部２から読み出し、決定した演算モジュールの実行順序と、読み出したコア数スレッド数情報とに基づいて、実行順序を決定した演算モジュールを、プラットフォームが有するコアまたはスレッドに割り当てる。これにより、ソフトウェア生成部１は、実行順序を決定した演算モジュールの並列処理を決定する。
【００３９】
また、ソフトウェア生成部１は、後述するように、プロファイラ部７が生成したプロファイル情報に基づいて、各コアと各スレッドでの処理量が出来るだけ均一になるように、モジュールの実行順序に従い、各モジュールにコアとスレッドとを割り当てることにより、生成するソフトウェア全体の実行速度を改善したプラットフォーム依存ソースコードを生成する。
【００４０】
プラットフォーム依存ソースコード記憶部３には、ソフトウェア生成部１が生成し出力したプラットフォーム依存ソースコードが記憶される。
ライブラリ記憶部４には、プラットフォーム用のライブラリが記憶されている。
【００４１】
コンパイラ・リンカ部５は、プラットフォーム依存ソースコード記憶部３から読み出したプラットフォーム依存ソースコードと、ライブラリ記憶部４から読み出したライブラリとを、リンクし、コンパイルすることにより、プラットフォーム用の実行ファイルを生成する。
また、コンパイラ・リンカ部５は、生成した実行ファイルを実行ファイル記憶部６に記憶させる。
実行ファイル記憶部６には、コンパイラ・リンカ部５が生成した実行ファイルが記憶される。
【００４２】
プロファイラ部７は、実行ファイル記憶部６に記憶されている実行ファイルを実行することにより、実行ファイルの全体（モジュール全体）、モジュール毎、または複数のモジュールについての、処理サイクル数（処理時間）やメモリのアクセス状況などの、プロファイル情報を取得する。
【００４３】
一例としての、プロファイラ部７が取得したプロファイル情報を、図６に示す。図６では、モジュールＭ１からＭ１１の、全体に占める各モジュールの処理量（処理時間）が割合として示されている。
【００４４】
また、プロファイラ部７は、取得したプロファイル情報を、ソフトウェア生成部１に出力する。
また、ソフトウェア生成部１（検出部）は、実行ファイルの全体（モジュール全体）、モジュール毎、または複数のモジュールの処理サイクル数（処理時間）やメモリのアクセス状況が、モジュール制約条件、ソフトウェア制約条件、ソフトウェア処理時間制約条件を満たすか否かを検出する。
また、ソフトウェア生成部１（検出部）は、検出した結果が、全ての条件を満たさない場合には、再度、プラットフォーム依存ソースコードを生成する。
【００４５】
以上説明したソフトウェア生成部１は、ソフトウェア実行プラットフォーム８用のソフトウェア、すなわち実行ファイル、を生成するが、ソフトウェアプログラム記憶部１０に記憶されている情報は、ソフトウェア実行プラットフォーム８に依存しない。
これは、ソフトウェアプログラム記憶部１０、つまり、演算モジュール記憶部１１と、モジュール付帯情報記憶部１２と、全体構成情報記憶部１３とに記憶されている情報が、モジュールについての情報のみだからである。
【００４６】
一方、プラットフォーム構成情報記憶部２とライブラリ記憶部４とには、ソフトウェア実行プラットフォーム８用のプラットフォーム構成情報とライブラリ情報とが、予め記憶されている。そのため、プラットフォーム構成情報記憶部２とライブラリ記憶部４とは、ソフトウェア実行プラットフォーム８に依存する。
また、コンパイラ・リンカ部５も、ソフトウェア実行プラットフォーム８用のコンパイラおよびリンカであり、ソフトウェア実行プラットフォーム８に依存する。
【００４７】
ソフトウェア生成部１と、プラットフォーム依存ソースコード記憶部３と、実行ファイル記憶部６とは、機能的にはソフトウェア実行プラットフォーム８に依存しないが、それぞれの構成が対象とする情報は、ソフトウェア実行プラットフォーム８に依存する。
プロファイラ部７は、ソフトウェア実行プラットフォーム８用に生成された実行ファイルを実行することによりプロファイル情報を取得するため、ソフトウェア実行プラットフォーム８に依存する。これは、例えば、プロファイラ部７は、ソフトウェア実行プラットフォーム８の動作環境を擬似的に有しており、その擬似的な動作環境で、実行ファイルを実行して、プロファイル情報を取得するからである。
【００４８】
以上説明したように、図１（ａ）で示されるソフトウェアプログラム記憶部１０である演算モジュール記憶部１１と、モジュール付帯情報記憶部１２と、全体構成情報記憶部１３とは、プラットフォーム非依存である。
また、図１（ｂ）で示されるソフトウェア生成部１と、プラットフォーム構成情報記憶部２と、プラットフォーム依存ソースコード記憶部３と、ライブラリ記憶部４と、コンパイラ・リンカ部５と、実行ファイル記憶部６と、プロファイラ部７とは、プラットフォーム依存である。
また、図１（ｃ）で示されるソフトウェア実行プラットフォーム８は、プラットフォームそのものである。
【００４９】
以上のように、ソフトウェア生成装置１００には、プラットフォームに依存しない形でソフトウェアプログラム記憶部１０にソフトウェアが蓄積されており、図１（ｂ）で示されるプラットフォーム構成情報記憶部２に記憶されるプラットフォーム構成情報などのプラットフォーム依存の情報を、対象となるプラットフォームに合わせて変更することのみで、同一のソフトウェアが異なるプラットフォームに合わせた形で、プラットフォーム依存ソースコードとして生成される。
そのため、このソフトウェア生成装置１００は、アーキテクチャの異なるプラットフォームにおいても、ソフトウェアの移植を容易とすることが可能となる効果を奏する。
【００５０】
また、従来においては、ユーザは、プラットフォーム依存ソースコード記憶部３に記憶されるプラットフォーム依存ソースコードに相当するソースコードを、プラットフォーム毎に作成していた。
【００５１】
これに対して、ソフトウェア生成装置１００を使用するユーザは、演算モジュール記憶部１１と、モジュール付帯情報記憶部１２と、全体構成情報記憶部１３とに記憶する情報、つまり、モジュールについての情報のみを作成すればよい。
【００５２】
そのため、このソフトウェア生成装置１００を使用するユーザは、プラットフォームに依存しない形で、プラットフォームに対応したソフトウェアを作成することが可能となる。
【００５３】
次に、図２を用いて、ソフトウェア生成部１の動作について説明する。まず、図２（ａ）のフローチャートを用いて、ソフトウェア生成部１の全体の動作を説明する。
まず、ソフトウェア生成部１が、プラットフォーム依存ソースコードを生成する（ステップＳ１０）。
次に、コンパイラ・リンカ部５が、生成されたプラットフォーム依存ソースコードを、コンパイルおよびリンクして、実行ファイルを生成する（ステップＳ１１）。
次に、プロファイラ部７が、生成された実行ファイルを実行し、プロファイル情報を取得する（ステップＳ１２）。
【００５４】
次に、ソフトウェア生成部１（検出部）が、取得したプロファイル情報が処理時間の制約を満たすか否かを検出する（ステップＳ１３）。
次に、ソフトウェア生成部１は、ステップＳ１３の検出結果が、取得したプロファイル情報が処理時間の制約を満たす場合（ＹＥＳ）には、処理を終了し、逆に、取得したプロファイル情報が処理時間の制約を満たさない場合（ＮＯ）には、ステップＳ１０からの処理を繰り返す。
【００５５】
以上のように、ソフトウェア生成部１（検出部）が、取得したプロファイル情報が処理時間の制約を満たすか否かを検出し（ステップＳ１３）、取得したプロファイル情報が処理時間の制約を満たさない場合（ＮＯ）には、取得したプロファイル情報が処理時間の制約を満たすまで、ステップＳ１０からの処理を繰り返し、ソフトウェア生成部１が再度プラットフォーム依存ソースコードを生成する。
【００５６】
そのため、このソフトウェア生成装置１００は、プロファイル情報が処理時間の制約を満たす実行ファイルを生成する。そのため、ソフトウェア生成装置１００は、リアルタイムでの処理を必要とするソフトウェアを生成することが可能である。
【００５７】
次に、図２（ｂ）のフローチャートを用いて、図２（ａ）のステップＳ１０の動作、つまり、ソフトウェア生成部１の動作の概要に説明する。
ソフトウェア生成部１は、まず、モジュールの実行順序の依存関係を検出する（ステップＳ２１）。次に、モジュールの実行順序を決定する（ステップＳ２２）。
次に、実行順序を決定した各モジュールにコアとスレッドとを割当てる（ステップＳ２３）。次に、モジュールにメモリ割当てを実行する（ステップＳ２４）。
次に、プラットフォーム依存ソースコードを生成し出力し（ステップＳ２５）、処理を終了する。
【００５８】
次に、具体的なアーキテクチャの異なる２つのプラットフォームを例にして、ソフトウェア生成部１の上記各動作について、詳細に説明する。ここでは、アーキテクチャの異なるプラットフォームの例として、下記の二つのプラットフォームの場合について、説明する。
【００５９】
［プラットフォームＡ］シングルコア・シングルスレッドのプロセッサを用いたプラットフォーム。
【００６０】
［プラットフォームＢ］マルチコア・マルチスレッドのプロセッサを用いたプラットフォームデバイス（ここでは、一例として、２コアで、１コアあたり２スレッドの並列実行可な場合について説明する。）
【００６１】
また、ここでは、モジュール接続情報には、図３に示すように、モジュールＭ１の出力とモジュールＭ２の入力とが接続され、モジュールＭ１の出力とモジュールＭ３の入力とが接続され、モジュールＭ１の出力とモジュールＭ４の入力とが接続される、という情報が含まれている場合について説明する。
【００６２】
また、このモジュール接続情報には、モジュールＭ２の出力とモジュールＭ５の入力とが接続され、モジュールＭ３の出力とモジュールＭ５の入力とが接続され、モジュールＭ４の出力とモジュールＭ５の入力とが接続される、という情報が含まれている。
【００６３】
また、このモジュール接続情報には、モジュールＭ５の出力とモジュールＭ６の入力とが接続され、モジュールＭ６の出力とモジュールＭ７の入力とが接続され、モジュールＭ６の出力とモジュールＭ８の入力とが接続される、という情報が含まれている。
【００６４】
また、このモジュール接続情報には、モジュールＭ７の出力とモジュールＭ９の入力とが接続され、モジュールＭ８の出力とモジュールＭ９の入力とが接続され、モジュールＭ９の出力とモジュールＭ１０の入力とが接続され、モジュールＭ１０の出力とモジュールＭ１１の入力とが接続される、という情報が含まれている。
【００６５】
まず、ソフトウェア生成部１は、ステップＳ２１にて、全体構成情報のモジュール接続情報を元に、モジュール間の接続構成を検出する（図３参照）。
【００６６】
次に、ソフトウェア生成部１は、ステップＳ２２にて、ステップＳ２１で検出したモジュールの接続構成から、モジュールの処理を実行する実行順序を決定する。
この実行順序を決定する手法の一例として、図３に示すような接続構成を守りつつモジュールの実行順序を決定し、かつ、処理が複数のモジュールに分かれる箇所（例えば、モジュールＭ２、モジュールＭ３とモジュールＭ４、および、モジュールＭ７とモジュールＭ８）については、モジュール付帯情報や全体構成情報での指定が無い限りにおいて、モジュールの実行順序を任意に決定する。
【００６７】
例えば、図３に示すような接続構成から、モジュールＭ５の出力にはモジュールＭ６の入力のみしか接続されていないため、実行順序として、モジュールＭ５の次はモジュールＭ６と一意に決定する。
【００６８】
また、例えば、図３に示すような接続構成から、モジュールＭ６の出力にはモジュールＭ７とモジュールＭ８の入力とが接続されるため、実行順序として、モジュールＭ６の次はモジュールＭ７とする場合と、モジュールＭ６の次はモジュールＭ８とする場合とがある。このように複数の実行順序がある場合、いずれの順序とするかは任意であるため、乱数やモジュールの番号が小さい順などにより、実行順序を決定する。
【００６９】
以降では、ステップＳ２２の処理により、図３に示すようなモジュールの接続構成において、モジュールの実行順序は、モジュールＭ１からモジュールＭ１１までの、モジュールの番号（Ｍの後の数字）の順として、決定されたものとして説明する。
【００７０】
次に、ソフトウェア生成部１は、ステップＳ２３にて、ステップＳ２２で決定した実行順序に、コアやスレッドの割当てを行う。このコアとスレッドとの割当て方法の一例として、次のような方法がある。
【００７１】
［プラットフォームＡ］の場合、演算の並列処理は行なえず、ステップＳ２２にて決定した実行順序に基づき、逐次実行することとなる。したがって、この場合は、各モジュールを順に呼び出し処理を行なうことになり、ソフトウェア生成部１は、生成するソフトウェアプログラムのフローチャートを、図４（ａ）に示すように決定する。
【００７２】
［プラットフォームＢ］の場合、ステップＳ２２にて決定した実行順序に従い、各モジュールに、コアとスレッドとを割り当てる。このとき、プロファイル情報から各モジュールの処理量（図６参照）を取得し、各コアと各スレッドでの処理量が出来るだけ均一になるように、かつ、隣接する処理は出来るだけ同一コアになるようにスレッドを割り当てる（図７参照）。
【００７３】
上記のように、ソフトウェア生成部１は、各コアと各スレッドでの処理量が出来るだけ均一になるようにすることにより、生成するソフトウェア全体でのボトルネックとなる箇所を無くし、また、プラットフォームのコアなどを有効に利用するプラットフォーム依存ソースコードを生成することが出来る。そのため、ソフトウェア生成部１は、生成するソフトウェア全体の実行速度を改善したプラットフォーム依存ソースコードを生成することが可能となる。
【００７４】
また、ソフトウェア生成部１は、モジュールの実行順序において前後に隣接するモジュールの処理は、出来るだけ同一コアになるようにスレッドを割り当てることにより、モジュールでの処理間の情報の交換の頻度を少なくし、コア間の情報の交換によるオーバーヘッドを少なくするプラットフォーム依存ソースコードを生成することが出来る。そのため、ソフトウェア生成部１は、生成するソフトウェア全体の実行速度を改善したプラットフォーム依存ソースコードを生成することが可能となる。
【００７５】
ここで、ソフトウェア生成部１は、コアとスレッドとを割当てる初回の時などで、プロファイル情報が無い場合には、モジュールの数やソースコードやオブジェクトコードのサイズなどの情報を利用して、各モジュールに、コアとスレッドとを割当ててもよい。例えば、予め定められた関数に、モジュールの数やソースコードやオブジェクトコードのサイズなどの情報を入力して、プロファイル情報を算出し、算出したプロファイル情報に基づいて、各モジュールに、コアとスレッドとを割当ててもよい。
【００７６】
次に、図７を用いて、ソフトウェア生成部１がステップＳ２３にて、各モジュールにコアやスレッドの割当てを行う場合に、各コアと各スレッドでの処理量が出来るだけ均一になるように、モジュールの実行順序に従い、各モジュールにコアとスレッドとを割り当てる一例としての方法について説明する。
【００７７】
まず、モジュールの実行順序のリストを生成する（ステップＳ１０１）。
次に、スレッド平均負荷を算出する（ステップＳ１０２）。このスレッド平均負荷は、次の（式１）で算出する。
【００７８】
スレッド平均負荷＝全モジュール負荷／全スレッド数  ・・・（式１）
【００７９】
次に、以降に説明するステップＳ１０４からステップＳ１０９の処理を、コア数分繰り返す（ステップＳ１０３とステップＳ１１０）。
次に、以降に説明するステップＳ１０５からステップＳ１０８の処理を、コアに含まれるスレッド数分繰り返す（ステップＳ１０４とステップＳ１０９）。
【００８０】
次に、スレッド負荷を０に初期化する（ステップＳ１０５）。
次に、モジュールの実行順のリストから先頭のモジュールを取り出し、スレッドへ割当てる（ステップＳ１０６）。
次に、スレッド負荷に、取り出したモジュールの負荷を加算する（ステップＳ１０７）。
次に、モジュールの実行順序リストが空であるか否かを検出し、また、スレッド負荷がスレッド平均負荷より大きいか否かを検出する（ステップＳ１０８）。
【００８１】
ステップＳ１０８の検出結果が、モジュールの実行順序リストが空である場合、または、スレッド負荷がスレッド平均負荷より大きい場合（ＹＥＳ）には、次のステップＳ１０９に進み、上記に説明した、ステップＳ１０５からステップＳ１０８の処理を、コアに含まれるスレッド数分繰り返す（ステップＳ１０４とステップＳ１０９）。
一方、ステップＳ１０８の検出結果が、モジュールの実行順序リストが空でなく、かつ、スレッド負荷がスレッド平均負荷より大きくない場合（ＮＯ）には、ステップＳ１０６からの処理を繰り返す。
【００８２】
また、ソフトウェア生成部１が、ステップＳ２３にて、各モジュールへのコアとスレッドとを割当てる他の方法として、プロファイル情報のモジュールの処理時間（処理量）、モジュールの処理時間制約条件、モジュールの接続関係、モジュールの実行に必要とするメモリ量、コア数、コア毎のスレッド数などをパラメータとして、予め定められた評価関数により決定するようにしてもよい。
【００８３】
以上のようにして、ソフトウェア生成部１は、生成するソフトウェアプログラムのフローチャートを、例えば、図５（a）〜図５（ｄ）に示すように決定する。
【００８４】
次に、ソフトウェア生成部１は、ステップＳ２４にて、ステップS２３でコアとスレッドとを割当てたモジュールに、メモリの割当てを実行する。このメモリの割当ての一例としては、プラットフォーム構成情報のメモリ構成情報と、モジュール付帯情報の変数優先順位情報とに基づいて、モジュール内において、優先度の高い変数から高速なメモリの空き領域を割り当てる。
【００８５】
次に、メモリの割当ての一例としての方法を、図８のフローチャートを用いて、説明する。
まず、モジュールが有する変数を割当て優先順位でソートする（ステップＳ２０１）。以降では、この変数を割当て優先順位でソートした後の変数を、変数リストvarlistとして説明する。
【００８６】
次に、変数リストvarlistの変数の中から、一番優先順位の高い変数ｘを選択する（ステップＳ２０２）。
次に、メモリ種別を示す変数であるmemtype（以降、メモリ種別変数memtype）を、一番高速なメモリに設定する（ステップＳ２０３）。
次に、メモリ種別変数memtypeで示されるメモリの残りサイズは、変数ｘのサイズよりも大きいか否かを検出する（ステップＳ２０４）。
【００８７】
ステップＳ２０４の検出結果が、メモリ種別変数memtypeで示されるメモリの残りサイズが変数ｘのサイズよりも大きい（ＹＥＳ）場合には、メモリ種別変数memtypeで示されるメモリに、変数ｘを割当てる（ステップＳ２０５）。
次に、メモリ種別変数memtypeで示されるメモリの残りサイズから、変数ｘのサイズ分を、減算する（ステップＳ２０６）。
次に、変数リストvarlistから変数ｘを削除する（ステップＳ２０７）。
【００８８】
次に、変数リストvarlistは空か否かを検出する（ステップＳ２０８）。
ステップＳ２０８の検出結果が、変数リストvarlistは空である（ＹＥＳ）場合には、メモリ割当てを終了する。
一方、ステップＳ２０８の検出結果が、変数リストvarlistは空でない（ＮＯ）場合には、ステップＳ２０２からの処理を繰り返す。
【００８９】
一方、ステップＳ２０４の検出結果が、メモリ種別変数memtypeで示されるメモリの残りサイズが変数ｘのサイズよりも大きくない（ＮＯ）場合には、メモリ種別変数memtypeで示されるメモリよりも、低速なメモリがあるか否かを検出する（ステップＳ２０９）。
ステップＳ２０９の検出結果が、メモリ種別変数memtypeで示されるメモリよりも、低速なメモリがない（ＮＯ）場合には、割当て不可エラーを出力する（ステップＳ２１０）。割当て不可エラーを受信したソフトウェア生成装置１００は、例えば、ソフトウェアの生成を中断する。
【００９０】
一方、ステップＳ２０９の検出結果が、メモリ種別変数memtypeで示されるメモリよりも、低速なメモリがある（ＹＥＳ）場合には、メモリ種別変数memtypeで示されるメモリを、次に、高速なメモリに設定し、ステップＳ２０４からの処理を繰り返す（ステップＳ２１１）。
【００９１】
なお、他のメモリの割当ての手法として、メモリ種別ごとの残容量、アクセスに要する時間、割当てが必要な容量などをパラメータとし、予め定められた評価関数により、メモリの割当てを決定するようにしてもよい。
【００９２】
ソフトウェア生成部１は、図２（ｂ）のステップＳ２４のメモリの割当てが決定後、ステップＳ２５にて、プラットフォーム依存のソースコードを出力する。
例えば、ソフトウェア生成部１は、各モジュールの処理を接続するインタフェース部分のソースコードを、モジュール付帯情報（モジュールインタフェース情報）や、全体構成情報（モジュール接続情報）に基づき、プラットフォームに適切な形で生成し、モジュールのソースコードと結合して、プラットフォーム依存ソースコードとして出力する。
【００９３】
ここで、あるモジュールをモジュールMxとし、このモジュールＭｘについて、ソフトウェア生成部１が、インタフェース部分のソースコードを生成し結合して、プラットフォーム依存ソースコードとする場合について説明する。なお、このｘは、任意の自然数である。
【００９４】
［プラットフォームＡ］の場合、ソフトウェア生成部１は、モジュールMxについて、モジュール呼び出し処理（モジュールＭｘ呼び出し処理）となる、プラットフォーム依存のソースコードを生成する。
このモジュールＭｘ呼び出し処理とは、モジュールＭｘの前のモジュールから出力情報を受け取る処理と、受け取った出力情報をモジュールＭｘに渡す処理と、また、受け取った出力情報についてモジュールＭｘに処理を実行させる処理と、を含む処理である。
【００９５】
また、このモジュールＭｘ呼び出し処理は、出力情報を受け取る場合には、プラットフォーム情報に基づいてメモリや変数やＤＭＡ転送を設定し、プラットフォームに合わせた適切な方法で受け取る。
ソフトウェア生成部１は、上記のようなモジュールＭｘ呼び出し処理となるプラットフォーム依存のソースコードを生成する。（図４（ｂ）参照）。
【００９６】
また、ソフトウェア生成部１は、モジュールの処理が完了後の終了処理（モジュールＭｘ終了処理）となる、プラットフォーム依存のソースコードを生成する（図４（ｂ）参照）。
このモジュールＭｘ終了処理とは、モジュールＭｘの出力情報を、後続のモジュールに受け渡す処理である。
【００９７】
また、このモジュールＭｘ終了処理は、出力情報を受け渡す場合には、プラットフォーム情報に基づいてメモリや変数やＤＭＡ転送を設定し、プラットフォームに適切な方法で受け渡す。
ソフトウェア生成部１は、上記のようなモジュールＭｘ終了処理となるプラットフォーム依存のソースコードを生成する。（図４（ｂ）参照）。
【００９８】
次に、ソフトウェア生成部１は、生成したモジュールＭｘ呼び出し処理となるプラットフォーム依存のソースコードを、モジュールＭｘの先頭に追加し、また、生成したモジュールＭｘ終了処理となるプラットフォーム依存のソースコードを、モジュールＭｘの最後に追加する（図４（ｂ）参照）。
【００９９】
［プラットフォームＢ］の場合は、図５（ａ）から図５（ｄ）に示すように、一つ以上のモジュールで一つのスレッドが構成され、各スレッドが並列に動作する。
しかし、同一スレッド内での各モジュール入出力部は、プラットフォームＡの場合と同様であるため、ソフトウェア生成部１は、プラットフォームＡの場合と同様に、各モジュールについて、モジュールＭｘ呼び出し処理となるプラットフォーム依存のソースコードを生成し、また、モジュールＭｘ終了処理となるプラットフォーム依存のソースコードを生成する（図５（ｅ）参照）。
【０１００】
また、ソフトウェア生成部１は、生成したモジュールＭｘ呼び出し処理となるプラットフォーム依存のソースコードを、モジュールＭｘの先頭に追加し、また、生成したモジュールＭｘ終了処理となるプラットフォーム依存のソースコードを、モジュールＭｘの最後に追加する（図５（ｅ）参照）。
【０１０１】
なお、ソフトウェア生成部１は、スレッドをまたがるモジュール間のデータの入出力が発生する際には、モジュールを逐次呼び出す形ではなく、スレッド間の同期処理を行ない、前後のモジュールからデータの受渡しを行なうように、モジュールの呼び出し処理や終了処理を生成して、ソースコードを生成する。
【０１０２】
例えば、ソフトウェア生成部１は、並列な処理を行なうモジュールＭ２とモジュールＭ３とモジュールＭ４とについては（図３参照）、それぞれのモジュールは、モジュールＭ１からの出力結果が得られた後に実行可能となり、また、モジュールＭ５は、モジュールＭ２とモジュールＭ３とモジュールＭ４からの出力結果がそろった時点で、実行可能となるように、同期処理を行なうように、各モジュールの呼び出し処理や終了処理を生成して、ソースコードを生成する。
【０１０３】
また、ソフトウェア生成部１は、同様に、並列な処理を行なうモジュールＭ７とモジュールＭ８については（図３参照）、それぞれのモジュールは、モジュールＭ６の出力結果が得られたら実行可能となり、また、モジュールＭ９は、モジュールＭ７とモジュールＭ８とからの出力結果がそろった時点で、実行可能となるように、同期処理を行なうように、各モジュールの呼び出し処理や終了処理を生成して、ソースコードを生成する。
【０１０４】
なお、上記の説明においては、プラットフォーム構成情報は、ソフトウェア生成装置１００の内部のプラットフォーム構成情報記憶部２に、あらかじめ記憶されているものとして説明したが、これに限られるものではなく、このプラットフォーム構成情報は、ソフトウェア生成装置１００に外部から入力され、入力されたプラットフォーム構成情報が、プラットフォーム構成情報記憶部２に記憶されるようにしてもよい。例えば、ソフトウェア生成装置１００が、プラットフォーム構成情報のファイルを読み込むようにしてもよい。
【０１０５】
ソフトウェア生成装置１００が、プラットフォーム構成情報を、内部のプラットフォーム構成情報記憶部２に、あらかじめ記憶している場合には、このソフトウェア生成装置１００を特定のプラットフォーム専用のソフトウェア生成装置として用いるのに好適である。
【０１０６】
逆に、ソフトウェア生成装置１００が、プラットフォーム構成情報を、外部のファイルから読み込むようにする場合には、このソフトウェア生成装置１００を複数のプラットフォームに対応するソフトウェア生成装置として用いるのに好適である。
【０１０７】
また、ソフトウェア生成装置１００は、コンパイラ・リンカ部５を有する。そのため、ソフトウェア生成装置１００は、出力としてプラットフォーム依存ソースコードを出力することなく、プラットフォーム用の直接コンパイルを行なうことが可能となる。
このソフトウェア生成装置１００は、プラットフォーム依存ソースコードを介することがないため、ダイレクトにプラットフォームの構成に合わせた実行ファイルを生成することが可能となる。これにより、ソフトウェア生成装置１００は、プラットフォームに対して、より柔軟かつきめ細かな制御が可能となり、プラットフォームに最適な実行ファイルを生成可能となる。
【０１０８】
＜第２の実施形態＞
次に、第２の実施形態について説明する。第２の実施形態として、第１の実施形態に比較して、更に、対象とするプラットフォームが特定処理に利用可能なアクセラレータやライブラリを持つ場合について説明する。
【０１０９】
一般的に、プラットフォームが提供するアクセラレータやライブラリは、ソースコードで記述する処理よりも高速に処理でき、かつ、少ないメモリ容量で処理できることが多い。従って、ソフトウェア生成装置１００は、アクセラレータやライブラリを積極的に利用することが望ましい。
【０１１０】
この第２の実施形態では、ソフトウェア生成部１は、モジュール間の接続構成を把握する際に、次の動作を行なう。ソフトウェア生成部１は、付帯情報や全体構成情報を参照し、一つ以上のモジュールにより実施される処理が、プラットフォームの持つアクセラレータやライブラリで置き換え可能と検出した場合に、該当する一つ以上のモジュールの代わりに、アクセラレータあるいはライブラリの使用を決定する。
【０１１１】
ここで、アクセラレータやライブラリで置き換え可能か否かの検出は、例えば、ソフトウェア生成部１が、モジュール付帯情報記憶部１２から読み出したモジュール処理情報のモジュールの処理の名称と、プラットフォーム構成情報記憶部２から読み出したアクセラレータ情報またはライブラリ情報による処理の名称とが、一致するか否かを検出することにより、実行する。
【０１１２】
このとき、ソフトウェア生成部１は、アクセラレータあるいはライブラリに対応するモジュールのソースコードは使用せず、当該モジュールで行なわれる処理は、アクセラレータあるいはライブラリで行なう。
【０１１３】
一例としては、モジュールの呼び出し処理では、アクセラレータあるいはライブラリへの入力処理を行なうようにプラットフォーム依存のソースコードを生成する。また、モジュールの終了処理では、アクセラレータあるいはライブラリからの出力を受け取る処理を行なうようにプラットフォーム依存のソースコードを生成する。これにより、ソフトウェアプログラムの処理は変わらずに、より高速な処理や少ないメモリ量での処理が可能となる。
【０１１４】
一例としては、ソフトウェア生成部１が、以下のように動作することにより、アクセラレータあるいはライブラリを用いたプラットフォーム依存のソースコードを生成する。
まず、ソフトウェア生成部１（演算モジュール順序決定部）が、アクセラレータ情報またはライブラリ情報をプラットフォーム構成情報記憶部２から読み出し、読み出したアクセラレータ情報で特定されるアクセラレータの処理またはライブラリ情報で特定される処理に該当する１つまたは複数の演算モジュールを、読み出した演算モジュール接続情報の中から、置換演算モジュールとして検出する。
【０１１５】
次に、ソフトウェア生成部１が、検出した置換演算モジュールに該当するソースコードとして、アクセラレータ情報で特定されるアクセラレータを用いるソースコード、または、ライブラリ情報で特定されるライブラリを用いるソースコードを生成し、生成したソースコードをプラットフォーム依存ソースコードに含める。
【０１１６】
＜第３の実施形態＞
次に、第３の実施形態について説明する。第３の実施形態として、第１または第２の実施形態と同様の構成において、ソフトウェア生成部１が、プロファイラ機能となるソースコードを生成する場合について説明する。
【０１１７】
一般に、プロファイラとしては、プラットフォームが提供するプロファイラツールと、ソフトウェアの内部にプロファイル機能を担うソースコードを埋め込む手法がある。前者は、シミュレータ上などで実行する際に、シミュレータなどがソフトウェアを実行しながら、処理サイクル数やメモリのアクセス頻度などの各種統計情報を収集するような形で実現されていることが多い。
【０１１８】
後者は、シミュレータでも利用可能だが、実機などでソフトウェアを実行する際に、フリーランのカウンタ(動作クロック周期やInstruction cycleをカウントするカウンタで、サイクルカウンタなどと呼ばれる)の値を特定のレジスタやAPIを利用して取得できる機能を利用して、ソフトウェア自身が実行時に要するサイクル数や時間を取得する仕組みである。
【０１１９】
この第３の実施形態では、各モジュールのプロファイル情報を取得するために、ソフトウェア生成装置が、プロファイル情報取得のためのソースコードを生成し出力する構成である。例えば、モジュールの処理に要する時間を測定する際には、図４（ｂ）や図５（ｅ）に示される呼び出し処理において、サイクルカウンタの値を取得し保存し、終了処理でも同様にサイクルカウンタの値を取得する。この二つのカウンタ値の差分を取ることで、当該モジュールで要するサイクル数を求め、そこから処理時間を計算することが可能となる。
【０１２０】
一例としては、ソフトウェア生成部１が、メモリ構成情報で示されるメモリを、演算モジュールに割当ててソースコードを生成し出力する時に、モジュールの実行開始から実行終了までに要するサイクル数を取得してプロファイル機能となるソースコードをプロファイル機能ソースコードとしてモジュール毎に生成し、生成したプロファイル機能ソースコードを、対応するモジュールのプラットフォーム依存ソースコード部分に含めてプラットフォーム依存ソースコードを生成する。
【０１２１】
以上に説明した第１から第３の実施形態によれば、以下の効果を奏する。
プラットフォームのアーキテクチャ(プロセッサ、メモリ構成、コア数、スレッド数など)が異なる環境へのソフトウェアの移植が容易となる、という効果を奏する。
また、処理に要する時間を考慮したソフトウェアの生成が可能となるため、リアルタイムでの信号処理ソフトウェア(音声・映像信号処理ソフトウェアやソフトウェア無線の信号処理ソフトウェアなど)の移植が容易に行なえる、という効果を奏する。
【０１２２】
また、あるプラットフォーム向けのソフトウェア開発において、最終的なターゲットプラットフォームを利用することなく、PC（パーソナルコンピュータ）上で同一のソフトウェアの開発・実行が可能となるため、ソフトウェアの開発効率が向上する、という効果を奏する。
また、PC上のネイティブ実行ファイルを生成できるため、最終ターゲットのプラットフォームの模擬することなく、高速なシミュレーションが可能となり、ソフトウェアの動作検証が容易となり、ソフトウェアの開発効率が向上する、という効果を奏する。
また、ソフトウェアを変更することなく、その時点で最適な処理能力を持つプラットフォームを選択・利用することが可能となる、という効果を奏する。
【０１２３】
なお、プラットフォーム構成情報記憶部２、プラットフォーム依存ソースコード記憶部３、ライブラリ記憶部４、実行ファイル記憶部６、ソフトウェアプログラム記憶部１０、演算モジュール記憶部１１、モジュール付帯情報記憶部１２、または、全体構成情報記憶部１３である記憶部は、ハードディスク装置や光磁気ディスク装置、フラッシュメモリ等の不揮発性のメモリや、ＣＲ−ＲＯＭ等の読み出しのみが可能な記憶媒体、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような揮発性のメモリ、あるいはこれらの組み合わせにより構成されるものとする。
【０１２４】
また、図１におけるソフトウェア生成部１、コンパイラ・リンカ部５、または、プロファイラ部７の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりソフトウェア生成部１、コンパイラ・リンカ部５、または、プロファイラ部７の機能を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。
【０１２５】
また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含むものとする。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
【０１２６】
以上、この発明の実施形態を図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【図面の簡単な説明】
【０１２７】
【図１】この発明の一実施形態によるソフトウェア生成装置の構成を示すブロック図である。
【図２】図１のソフトウェア生成装置の動作を示すフローチャートである。
【図３】一例としてのモジュールの接続構成を例示する説明図である。
【図４】シングルコアおよびシングルスレッドの場合の一例としてのモジュールの割当てを例示する説明図である。
【図５】マルチコアおよびマルチスレッドの場合の一例としてのモジュールの割当てを例示する説明図である。
【図６】モジュールの一例としてのプロファイル情報を例示する説明図である。
【図７】コアとスレッドとをモジュールに割当てる場合の動作を説明するフローチャートである。
【図８】メモリをモジュールの変数に割当てる場合の動作を説明するフローチャートである。
【符号の説明】
【０１２８】
１  ソフトウェア生成部
２  プラットフォーム構成情報記憶部
３  プラットフォーム依存ソースコード記憶部
４  ライブラリ記憶部
５  コンパイラ・リンカ部
６  実行ファイル記憶部
７  プロファイラ部
８  ソフトウェア実行プラットフォーム
１０  ソフトウェアプログラム記憶部
１１  演算モジュール記憶部
１２  モジュール付帯情報記憶部
１３  全体構成情報記憶部
１００  ソフトウェア生成装置
【図１】
2008250838.tif 000003
【図２】
2008250838.tif 000004
【図３】
2008250838.tif 000005
【図４】
2008250838.tif 000006
【図５】
2008250838.tif 000007
【図６】
2008250838.tif 000008
【図７】
2008250838.tif 000009
【図８】
2008250838.tif 000010