(57)【特許請求の範囲】
【請求項１】
マルチコアプロセッサで実行されるプログラムの開発を支援するプログラム開発支援装置であって、
前記プログラムを解析して前記プログラムに含まれる関数の関数情報と、オフロード先のコアを特定する情報との対応付けを設定するユーザインターフェイスとなる一覧表と、前記オフロード対象の関数が実行されるコアの有効／無効を示す情報を含む関数定義体と、を作成する作成手段と、
設定された前記コアからオフロード対象の関数を特定し、前記オフロード対象の関数に関数情報に基づきオフロードするための記述を挿入する挿入手段と、
を有するプログラム開発支援装置。
【請求項２】
前記関数情報は、前記関数の定義が記述された定義箇所を示す定義情報と、前記関数が呼び出される参照箇所を示す参照情報とを含み、
前記挿入手段は、
前記定義箇所と、前記参照箇所とへ前記関数をオフロードするための記述をそれぞれ挿入する、請求項１記載のプログラム開発支援装置。
【請求項３】
前記定義箇所と前記参照箇所とは、前記関数をオフロードするための記述を挿入された記述にそれぞれ置き換えられる、請求項２記載のプログラム開発支援装置。
【請求項４】
前記定義箇所に前記関数をオフロードするための記述が挿入された関数のファイルを生成し、生成された前記ファイルを前記関数が実行されるコアのプロジェクトとして登録する登録手段を有する、請求項３記載のプログラム開発支援装置。
【請求項５】
前記定義箇所へ挿入される前記関数をオフロードするための記述と、前記参照箇所へ挿入される前記関数をオフロードするための記述とをそれぞれテンプレートとして保持する、請求項２乃至４の何れか一項に記載のプログラム開発支援装置。
【請求項６】
前記作成手段は、
前記一覧表に基づき、前記オフロード対象の関数が実行されるコアの有効／無効を示す情報と、前記記述が挿入される前の前記オフロード対象の関数の前記定義情報と、前記記述が挿入された後の前記オフロード対象の関数の前記定義情報とを対応付けた関数定義体を作成する、請求項２乃至５の何れか一項に記載のプログラム開発支援装置。
【請求項７】
前記オフロード対象の関数が実行されるコアの有効／無効を示す情報の設定を変更して前記オフロード対象の関数を設定する手段を有する、請求項１乃至６の何れか一項に記載のプログラム開発支援装置。
【請求項８】
前記オフロード対象の関数が実行されるコアの有効／無効を示す情報は、前記一覧表のコア属性に基づき設定され、前記コア属性は、関数を実行するコアを特定する情報である、請求項６又は７に記載のプログラム開発支援装置。
【請求項９】
マルチコアプロセッサで実行されるプログラムの開発を支援するプログラム開発支援装置におけるプログラム開発支援方法であって、
前記プログラムを解析して前記プログラムに含まれる関数の関数情報と、オフロード先のコアを特定する情報との対応付けを設定するユーザインターフェイスとなる一覧表と、前記オフロード対象の関数が実行されるコアの有効／無効を示す情報を含む関数定義体と、を作成する作成手順と、
設定された前記コアからオフロード対象の関数を特定し、前記オフロード対象の関数に関数情報に基づきオフロードするための記述を挿入する挿入手順と、を実行するプログラム開発支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサで実行されるプログラムの開発を支援するプログラム開発支援装置及びプログラム開発支援方法に関する。
【背景技術】
【０００２】
ソフトウェア開発では、ソースプログラムやプログラム中の関数の依存関係等をプロジェクト管理する方法が知られており、ＡＭＰ（Asymmetric Multiple Processor）等のマルチコアプロセッサ向けのソフトウェア開発においてもプロジェクト管理が行われている。
【０００３】
例えばコア毎に役割の決まっているマルチコアプロセッサ向けのソフトウェアは、コア毎に処理を割り当てる際に、特定の処理を他のコアで処理させるようにするオフロードと呼ばれる処理を意識して開発される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２７７４５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
オフロードを行う場合には、対象となるターゲットプログラムをソースプログラムから切り出し、他のコアで実行されるプロジェクトとして登録し直す作業が必要となる。従来では、この作業は、プログラム開発者が経験に基づき手動で行っていた。すなわち従来では、ターゲットプログラムをソースプログラムから切り出してターゲットプログラムを他のコアで実行させるための記述をプログラム開発者が手入力することによって、オフロードさせるようにしており、その作業は煩雑なものであった。
【０００６】
本発明は、マルチコアプロセッサ用のプログラムの開発において、煩雑さを軽減することが可能なプログラム開発支援装置及びプログラム開発支援方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、マルチコアプロセッサで実行されるプログラムの開発を支援するプログラム開発支援装置であって、前記プログラムを解析して前記プログラムに含まれる関数の関数情報と、オフロード先のコアを特定する情報との対応付けを設定するユーザインターフェイスとなる一覧表と、前記オフロード対象の関数が実行されるコアの有効／無効を示す情報を含む関数定義体と、を作成する作成手段と、設定された前記コアからオフロード対象の関数を特定し、前記オフロード対象の関数に関数情報に基づきオフロードするための記述を挿入する挿入手段と、を有する。
【発明の効果】
【０００８】
マルチコアプロセッサ用のプログラムの開発において、煩雑さを軽減することができる。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施例に係るプログラム開発支援装置のハードウェア構成を示す図である。
【図２】本発明の一実施例に係るプログラム開発支援装置の機能構成を示す図である。
【図３】関数定義体の一例を示す図である。
【図４】本発明の一実施例に係るプログラム開発支援装置の動作を説明するフローチャートである。
【図５】本発明の一実施例に係るプログラム開発支援装置の関数参照部作成部を説明する図である。
【図６】図４のステップＳ４０７の処理の詳細を説明するフローチャートである。
【図７】本発明の一実施例に係るプログラム開発支援装置の関数定義部作成部を説明する図である。
【図８】図４のステップＳ４０８の処理の詳細を説明するフローチャートである。
【図９】本発明の一実施例に係るプログラム開発支援装置のプロジェクト登録部を説明する図である。
【図１０】図４のステップＳ４０９の処理の詳細を説明するフローチャートである。
【図１１】関数定義体の別の例を示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態を図面に基づいて説明する。
【００１１】
本発明に係る方法を実現するプログラム開発支援装置１００は、マルチコアプロセッサ用に開発されたプログラムをコア毎に対応付けることによって、プロジェクトとして管理する装置であって、図１に示すようなハードウェア構成を有する。図１は、本発明の一実施例に係るプログラム開発支援装置のハードウェア構成を示す図である。
【００１２】
図１において、プログラム開発支援装置１００は、コンピュータによって制御される装置であって、ＣＰＵ（Central Processing Unit）１１と、メモリユニット１２と、表示ユニット１３と、入力ユニット１５と、記憶装置１７と、ドライバ１８とで構成され、システムバスＢに接続される。
【００１３】
ＣＰＵ１１は、メモリユニット１２に格納されたプログラムに従ってプログラム開発支援装置１００を制御する。メモリユニット１２は、ＲＡＭ（Random Access Memory）及びＲＯＭ（Read-Only Memory）等にて構成され、ＣＰＵ１１にて実行されるプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を格納する。また、メモリユニット１２の一部の領域が、ＣＰＵ１１での処理に利用されるワークエリアとして割り付けられている。
【００１４】
表示ユニット１３は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。入力ユニット１５は、マウス、キーボード等を有し、利用者がプログラム開発支援装置１００が処理を行なうための必要な各種情報を入力するために用いられる。
【００１５】
記憶装置１７は、例えば、ハードディスクユニットにて構成され、各種処理を実行するプログラム等のデータを格納する。
【００１６】
プログラム開発支援装置１００によって行われるプログラム開発支援方法での処理を実現するプログラムは、例えば、ＣＤ−ＲＯＭ（Compact Disk Read-Only Memory）等の記憶媒体１９によってプログラム開発支援装置１００に提供される。即ち、プログラムが保存された記憶媒体１９がドライバ１８にセットされると、ドライバ１８が記憶媒体１９からプログラムを読み出し、その読み出されたプログラムがシステムバスＢを介して記憶装置１７にインストールされる。そして、プログラムが起動されると、記憶装置１７にインストールされたプログラムに従ってＣＰＵ１１がその処理を開始する。
【００１７】
尚、プログラムを格納する媒体としてＣＤ−ＲＯＭに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。プログラム開発支援装置１００が外部とのネットワーク通信を行う通信ユニットを有する場合には、本発明に係る処理を実現するプログラムを通信ユニットによってネットワークを介してダウンロードし、記憶装置１７にインストールするようにしても良い。また、プログラム開発支援装置１００が外部記憶装置との接続を行うＵＳＢ（Universal Serial Bus）等のインタフェースを有する場合には、ＵＳＢ接続によって外部記憶媒体からプログラムを読み込んでもよい。
【００１８】
図２は、本発明の一実施例に係るプログラム開発支援装置の機能構成を示す図である。本実施例のプログラム開発支援装置１００は、プロジェクト作成部１１０、ソース登録部１２０、一覧作成部１３０、プロジェクト制御部１４０、ビルド部１８０、デバッグ部１９０、チューニング部２００を有する。
【００１９】
プロジェクト作成部１１０は、マルチコアを構成するコアとプログラムファイル名とを登録することによって、プロジェクトを作成する。図２においてプロジェクト作成部１１０により作成されたプロジェクトをプロジェクトＰ１とする。プロジェクトＰ１は、後述する関数を実行するコアを指定する前のプロジェクトである。
【００２０】
ソース登録部１２０は、登録されたプログラムファイル名のソースプログラムを登録する。登録されたソースプログラムは、例えばプログラム開発支援装置１００の記憶装置１７内に格納される。
【００２１】
一覧作成部１３０は、静的解析部１３１、関数情報作成部１３２、コア属性作成部１３３を有し、ソースプログラムの静的解析により関数や処理の定義、参照情報を解析してコア属性を付加し、オフロードに備える。尚オフロードとは、特定の処理（関数）を他のコアで実行させて処理を並列化するための処理である。一覧作成部１３０の詳細は後述する。
【００２２】
プロジェクト制御部１４０は、関数参照部作成部１５０、関数定義部作成部１６０、プロジェクト登録部１７０を有し、一覧作成部１３０によりコア属性が付加された関数に対してコアの指定を行い、指定後のソースプログラムをプロジェクトに登録する。プロジェクト制御部１４０により登録されたプロジェクトを図２ではプロジェクトＰ２とした。プロジェクト制御１４０の詳細は後述する。
【００２３】
ビルド部１８０は、プロジェクト制御部１４０により登録されたソースプログラムをビルドする。デバッガ部１９０は、ターゲットとなるファイルをデバッガに取り込んでデバッグを行う。チューニング部２００は、性能情報の測定を行う。
【００２４】
以下に、一覧作成部１３０の詳細を説明する。
【００２５】
本実施例の一覧作成部１３０は、静的解析部１３１、関数情報作成部１３２、コア属性作成部１３３を有し、登録されたソースプログラムからソースプログラムに含まれる関数の情報や、関数が実行されるコアの属性等を解析し、関数一覧表３００を作成する。
【００２６】
一覧作成部１３０において、静的解析部１３１は、登録されたソースプログラムを静的に解析する。関数情報作成部１３２は、解析結果からソースプログラムに含まれる関数の情報（以下、関数情報）を作成する。コア属性作成部１３３は、解析結果から関数を実行するコアの属性（以下、コア属性）を作成する。一覧作成部１３０は、ソースプログラムに含まれる関数名と、関数情報作成部１３２により作成された関数情報と、コア属性作成部１３３により作成されたコア属性とを対応付けて関数一覧表３００とする。
【００２７】
本実施例の関数情報は、定義情報と参照情報とを含む。定義情報とは関数の定義が記述された位置を示す情報であり、参照情報とは関数の呼出命令が記述された位置を示している。例えば関数一覧表３００において、関数ｆｕｎｃ１（）の定義はファイルａ．ｃの１２行目に記述されており、関数ｆｕｎｃ１（）の呼出命令はファイルｂ．ｃの３４行目に記述されていることがわかる。同様に関数ｆｕｎｃ２（）の定義は、ファイルｃ．ｃの５行目に記述されており、関数ｆｕｎｃ２（）の呼出命令はファイルｄ．ｃの６行目に記述されていることがわかる。
【００２８】
また本実施例のコア属性とは、関数を実行するコアを特定する情報であり、本実施例ではコア番号とする。関数一覧表３００では、コア属性が０の場合は対応する関数はコア０で実行され、コア属性が１の場合は対応する関数のコア１で実行されるものとする。
【００２９】
関数一覧表３００において、関数ｆｕｎｃ１（）のコア属性は０であるから、関数ｆｕｎｃ１（）はコア０で実行される。関数ｆｕｎｃ２（）のコア属性は１であるから、関数ｆｕｎｃ２（）はコア２で実行される。すなわち関数ｆｕｎｃ２（）は、プロジェクトＰ１においてコア０からコア１へオフロードされる関数である。以下の説明では、オフロードされる関数をオフロード対象関数と呼ぶ。
【００３０】
また本実施例の一覧作成部１３０は、関数一覧表３００と対応した関数定義体３１０を作成し、プログラム開発支援装置１００のメモリユニット１２内に記憶する。
【００３１】
本実施例の関数一覧表３００は、例えばプログラム開発支援装置１００の表示ユニット１３等に表示されるユーザインターフェイスである。プログラム開発支援装置１００のユーザであるプログラム開発者は、関数一覧表３００を閲覧して関数情報やコア属性を把握しながら関数毎にオフロードさせるための設定を行うことができる。
【００３２】
これに対し関数定義体３１０は、関数一覧表３００と対応しており、ＣＰＵ１１が以下に説明する処理を実行する際に参照するものである。図３は、関数定義体の一例を示す図である。
【００３３】
本実施例の関数定義体３１０は、コア属性と、オフロード対象関数のオフロード前の状態を示すオフロード前情報と、オフロード後の状態を示すオフロード後情報とが対応付けられている。オフロード前情報とは、ソース登録部１１０により登録されたソースプログラムの関数名及びファイル名である。オフロード後情報とは、以下に説明する処理によりオフロードを実行させる記述が挿入されたソースプログラムに対して自動生成された関数名及びファイル名である。関数定義体３１０におけるコア属性は、オフロード対象関数のオフロード先のコアの属性であり、コア番号と、コア番号のコアへのオフロードを有効（オン）とするか無効（オフ）とするかを示す情報が含まれる。
【００３４】
図３の関数定義体３１０のコア属性には、コア番号１（以下、コアＣ１）と、コアＣ１へのオフロードを有効とする情報とが含まれる。コアＣ１のコア属性に対応付けられたオフロード前情報は、オフロード対象関数である関数ｆｕｎｃ２（）があるファイルと、ファイルにおける関数ｆｕｎｃ２（）が定義されている位置が含まれる。ここでは関数ｆｕｎｃ２（）の定義は、ファイルｃ．ｃの５行目に記述されていることがわかる。コアＣ１のコア属性に対応付けられたオフロード後情報は、コアＣ０からコアＣ１へとオフロードさせる関数ｆｕｎｃ２（）を関数ｆｕｎｃ２＿ｏｆｆｌｏａｄ（）とし、ファイルｃ＿ｆｕｎｃ２．ｃに含ませることを示している。
【００３５】
したがって関数定義体３１０によれば、オフロードが有効の場合には、関数ｆｕｎｃ２（）ではなく、ファイルｃ＿ｆｕｎｃ２．ｃの関数ｆｕｎｃ２＿ｏｆｆｌｏａｄ（）がコアＣ１で実行されることになる。
【００３６】
尚関数定義体３１０のコア属性においてコアＣ１へのオフロードが無効となっていた場合には、関数ｆｕｎｃ２（）はコアＣ１にオフロードされず、オフロード前情報に示されるファイルｃ．ｃの関数ｆｕｎｃ２（）がコアＣ０で実行される。
【００３７】
また本実施例では、関数一覧表３００において、プログラム開発支援装置１００のユーザによるコア番号の設定操作に応じて、関数定義体３１０のオフロードの有効（オン）又は無効（オフ）が連動して設定される。したがって、関数一覧表３００と関数定義体３１０とは同義のものとし、以下の説明では関数一覧表３００を用いて各部の処理を説明する。
【００３８】
次に、図４を参照して本実施例のプログラム開発支援装置１００の動作について説明する。図４は、本発明の一実施例に係るプログラム開発支援装置の動作を説明するフローチャートである。
【００３９】
本実施例のプログラム開発支援装置１００は、プロジェクト作成部１１０によりプロジェクトを作成する（ステップＳ４０１）。次にプログラム開発支援装置１００は、ソース登録部１２０によりソースプログラムを登録する（ステップＳ４０２）。登録されたソースプログラムは、例えばプロジェクト開発管理装置１００の記憶装置１７内に格納される。
【００４０】
次に一覧作成部１３０は、関数一覧表３００を読み込み済みか否かを判断する（ステップＳ４０３）。ここで読み込まれる関数一覧表３００は、後述する処理で作成されたものであっても良いし、ユーザによって設定操作が成された後のものであっても良い。さらには予め与えられたものであっても良い。
【００４１】
ステップＳ４０３において関数一覧表３００を読み込み済みでない場合、一覧作成部１３０は、静的解析部１３１によりソースプログラムの静的解析を行う（ステップＳ４０４）。次に一覧作成部１３０は、関数情報作成部１３２により関数情報を作成する（ステップＳ４０５）。続いて一覧作成部１３０は、コア属性作成部１３３によりコア属性を作成し（ステップＳ４０６）、関数一覧表３００を作成する。尚このとき関数定義体３１０も作成される。
【００４２】
ステップＳ４０３において、関数一覧表３００を読み込み済みであった場合、後述するステップＳ４１４へ進む。
【００４３】
次にプロジェクト制御部１４０は、関数参照部作成部１５０により、オフロード対象関数の参照箇所を書き換える（ステップＳ４０７）。続いてプロジェクト制御部１４０は、関数定義部作成部１６０により、オフロード対象関数の定義箇所を書き換える（ステップＳ４０８）。続いてプロジェクト制御部１４０は、プロジェクト登録部１７０により、オフロードにより更新されたソースプログラムをコア属性に基づきプロジェクトに登録し直す（ステップＳ４０９）。尚ステップＳ４０７からステップＳ４０９の処理の詳細は後述する。
【００４４】
次にプログラム開発支援装置１００は、ビルド部１８０により、ステップＳ４０９で吐登録されたソースプロジェクトのコンパイル、アセンブル、リンク等の処理を行う（ステップＳ４１０）。次にプログラム開発支援装置１００は、ステップＳ４１０でビルドされたターゲットプログラムをロードし（ステップＳ４１１）、ターゲットプログラムを実行する（ステップＳ４１２）。
【００４５】
次にプログラム開発支援装置１００は、チューニング部２００により、性能情報を測定し、ターゲットプログラムの実行によりマルチコアとして十分な性能が得られたか否かをユーザに判断させる（ステップＳ４１３）。尚本実施例の性能情報とは、例えばサイクル数や並列度、キャッシュヒット情報等である。
【００４６】
ステップＳ４１３において、ユーザにより十分な性能が得られていないと判断された場合、プログラム開発支援装置１００は、ユーザからオフロードを無効とする指示を受けたか否かを判断する（ステップＳ４１４）。ステップＳ４１４においてオフロードを無効とする指示を受けていた場合、プログラム開発支援装置１００は、関数定義体３１０において有効であったコアを無効とする（ステップＳ４１５）。
【００４７】
ステップＳ４１４においてオフロードを無効とする指示を受けていない場合、プログラム開発支援装置１００は、ステップＳ４０３へ戻る。このときステップＳ４０３では、一覧作成部１３０は関数一覧表３００を読み込み済みと判断し、ステップＳ４１４へ進む。そして一覧作成部１３０は、関数一覧表３００のコア属性をユーザに設定させ（ステップＳ４１６）、ステップＳ４０７以降の処理を繰り返す。
【００４８】
尚ステップＳ４１６におけるコア属性の設定は、ユーザにどの関数をどのコアで実行するか設定させても良いし、予め備えられたコア属性の設定テーブル等に基づき設定しても良い。また本実施例では、予めコア属性の設定テーブルと性能情報とを対応させた対応表を設けておき、ステップＳ４１３で得られた性能情報と対応する設定テーブルを用いてコア属性を設定しても良い。
【００４９】
ステップＳ４１３で十分な性能が得られるとユーザが判断した場合、プログラム開発支援装置１００は処理を終了する。
【００５０】
次に、図５、図６を参照して図４のステップＳ４０７の処理の詳細を説明する。図５は、本発明の一実施例に係るプログラム開発支援装置の関数参照部作成部を説明する図であり、図６は、図４のステップＳ４０７の処理の詳細を説明するフローチャートである。
【００５１】
本実施例の関数参照部作成部１５０は、静的解析情報認識部１５１、参照箇所特定部１５２、テンプレート適用部１５３を有する。
【００５２】
以下に図６を参照して関数参照部作成部１５０の処理について説明する。
【００５３】
本実施例の関数参照部作成部１５０は、静的解析情報認識部１５１により、関数一覧表３００を認識し（ステップＳ６０１）、オフロード対象関数が存在するか否かを判断する（ステップＳ６０２）。ステップＳ６０２においてオフロード対象関数が存在する場合、参照箇所特定部１５２は、関数一覧表３００に基づきソースプログラムにおける参照箇所を特定する（ステップＳ６０３）。
【００５４】
例えば図５に示す関数一覧表３００では、コア属性が１である関数ｆｕｎｃ２（）がオフロード対象関数である。そこで参照箇所特定部１５２は、関数一覧表３００の関数ｆｕｎｃ２（）の参照情報に示される箇所を参照箇所と特定する。したがって参照箇所特定部１５２は、ファイルｄ．ｃの６行目を参照箇所と特定する。
【００５５】
次にテンプレート適用部１５３は、特定された参照箇所においてテンプレートＴ１が適用されているか否かを判断する（ステップＳ６０４）。
【００５６】
ここで関数参照部作成部１５０が用いるテンプレートＴ１について説明する。図５に示すテンプレートＴ１は、関数参照部作成部１５０により用いられるテンプレートである。このテンプレートＴ１には、オフロード先のコア（コアＣ１）が有効である場合にオフロード対象関数をオフロードすることが記述されている。
【００５７】
本実施例のテンプレートＴ１では、ＭＵＬ＝１である場合はオフロード先のコアが有効を示し、オフロード対象関数がオフロードされる。尚ＭＵＬは、マクロ変数である。マクロ変数ＭＵＬ＝０の場合、オフロード先のコアが無効となるため、オフロード対象関数はオフロードされない。尚本実施例のテンプレートＴ１は、例えばプログラム開発支援装置１００のメモリユニット１２又は記憶装置１７の所定領域に予め格納されている。
【００５８】
ステップＳ６０４において、参照箇所で既にテンプレートＴ１が適用されていた場合、関数参照部作成部１５０は処理を終了する。
【００５９】
ステップＳ６０４においてテンプレートＴ１が適用されていない場合、テンプレート適用部１５３は、テンプレートＴ１のオフロード対象関数を関数ｆｕｎｃ２（）とし、オフロード先のコアをコアＣ１として、ソースプログラムの参照箇所に適用（挿入）する（ステップＳ６０５）。そしてテンプレート適用部１５３は、テンプレートＴ１が適用された結果をファイルｄ′．ｃとして出力し（ステップＳ６０６）、処理を終了する。
【００６０】
ステップＳ６０２においてオフロード対象関数が存在しないと判断された場合、関数参照部作成部１５０は、テンプレートＴ１内のマクロ変数ＭＵＬの値をＭＵＬ＝０としてオフロード先のコアを無効とし（ステップＳ６０７）、処理を終了する。
【００６１】
次に、図７、図８を参照して図４のステップＳ４０８の処理の詳細を説明する。図７は、本発明の一実施例に係るプログラム開発支援装置の関数定義部作成部を説明する図であり、図８は、図４のステップＳ４０８の処理の詳細を説明するフローチャートである。
【００６２】
本実施例の関数定義部作成部１６０は、静的解析情報認識部１６１、定義箇所特定部１６２、テンプレート適用部１６３を有する。
【００６３】
以下に図８を参照して関数定義部作成部１６０の処理について説明する。
【００６４】
本実施例の関数定義部作成部１６０は、静的解析情報認識部１６１により、関数一覧表３００を認識し（ステップＳ８０１）、オフロード対象関数が存在するか否かを判断する（ステップＳ８０２）。ステップＳ８０２においてオフロード対象関数が存在しない場合、関数定義部作成部１６０は処理を終了する。
【００６５】
ステップＳ８０２においてオフロード対象関数が存在する場合、定義箇所特定部１６２は、関数一覧表３００に基づきソースプログラムにおけるオフロード対象関数の定義箇所を特定する（ステップＳ８０３）。
【００６６】
例えば図７に示す関数一覧表３００では、コア属性が１である関数ｆｕｎｃ２（）がオフロード対象関数である。そこで定義箇所特定部１６２は、関数一覧表３００の関数ｆｕｎｃ２（）の定義情報に示される箇所を定義箇所と特定する。したがって定義箇所特定部１６２は、ファイルｃ．ｃの５行目を定義箇所と特定する。
【００６７】
次にテンプレート適用部１６３は、特定された定義箇所においてテンプレートＴ２、Ｔ３が適用されているか否かを判断する（ステップＳ８０４）。
【００６８】
ここで関数定義部作成部１６０が用いるテンプレートＴ２、Ｔ３について説明する。図７に示すテンプレートＴ２、Ｔ３は、関数定義部作成部１６０により用いられるテンプレートである。
【００６９】
テンプレートＴ２には、オフロード先のコアの有効／無効を示す情報が記述される。テンプレートＴ２では、マクロ変数ＭＵＬ＝１である場合はオフロード先のコアが有効となりコアＣ０に関数ｆｕｎｃ２（）はロードされず、マクロ変数ＭＵＬ＝０である場合はオフロード先のコアが無効となりコアＣ０に関数ｆｕｎｃ２（）がロードされることを示す。
【００７０】
テンプレートＴ３には、オフロード先のコアが有効／無効を示す情報と、オフロード先のコアで実行される関数とが記述される。テンプレートＴ３では、マクロ変数ＭＵＬ＝１の場合に、オフロード先のコアで関数％ｘｘｘ＿ｏｆｌｏａｄ（）が実行されることを示す。尚本実施例のテンプレートＴ２、Ｔ３は、プログラム開発支援装置１００のメモリユニット１２に予め格納されている。尚「％ｘｘｘ＿」は変数を示し、オフロード対象関数の関数名が代入される。
【００７１】
ステップＳ８０４において、ソースプログラムの定義箇所にテンプレートＴ２、Ｔ３が適用されていない場合、テンプレート適用部１６３はソースプログラムにテンプレートＴ２、Ｔ３を適用する（ステップＳ８０５）。
【００７２】
始めにテンプレート適用部１６３は、テンプレートＴ２をソースプログラムの定義箇所に適用する。またテンプレート適用部１６３は、ソースプログラムの定義箇所にテンプレートＴ３を適用したプログラムを新規ソースとして生成する（ステップＳ８０６）。そしてテンプレート適用部１６３は、テンプレートＴ２の適用結果と、テンプレートＴ３の適用結果とを出力し（ステップＳ８０７）、処理を終了する。
【００７３】
例えば図７の例では、オフロード対象関数である関数ｆｕｎｃ２（）の定義箇所は、ファイルｃ．ｃの５行目である。よってテンプレート適用部１６３は、テンプレートＴ２をこの定義箇所に適用（挿入）し、その結果のファイルｃ′．ｃとして出力する。
【００７４】
またテンプレート適用部１６３は、オフロード先のコアで実行される関数を関数ｆｕｎｃ２＿ｏｆｌｏａｄ（）としたテンプレートＴ３を関数ｆｕｎｃ２（）の定義箇所に適用（挿入）したソースプログラムを新規に生成し、ファイルｃ＿ｆｕｎｃ２．ｃとして出力する。
【００７５】
次に、図９、図１０を参照して図４のステップＳ４０９の処理の詳細を説明する。図９は、本発明の一実施例に係るプログラム開発支援装置のプロジェクト登録部を説明する図であり、図１０は、図４のステップＳ４０９の処理の詳細を説明するフローチャートである。
【００７６】
本実施例のプロジェクト登録部１７０は、更新ソース認識部１７１、コア属性認識部１７２、登録部１７３を有する。
【００７７】
以下に図１０を参照してプロジェクト登録部１７０の処理について説明する。
【００７８】
本実施例のプロジェクト登録部１７０は、更新ソース認識部１７１により、更新されたソースプログラムを認識する（ステップＳ１００１）。更新されたソースプログラムとは、図８のステップＳ８０７で出力されたソースプログラムである。
【００７９】
次にプロジェクト登録部１７０は、コア属性認識部１７２により関数一覧表３００から関数のコア属性を認識する（ステップＳ１００２）。コア属性を認識すると、登録部１７３は、コア属性に基づきオフロード対象関数のソースプログラムをオフロード先のプロジェクトに登録する（ステップＳ１００３）。そして登録部１７３は、更新後のプロジェクトファイルを出力して（ステップＳ１００４）、処理を終了する。
【００８０】
例えばコア属性認識部１７２は、コア属性を認識して関数ｆｕｎｃ２（）がコアＣ１へオフロードされることを認識すると、登録部１７３が関数定義体３１０を参照する。そしてオフロード先としてコアＣ１が有効である場合に、プロジェクトＰ１のコアＣ０のファイルｄ．ｃとファイルｃ．ｃをファイルｄ′．ｃとファイルｃ′．ｃとに書き換えて登録し、ファイルｃ＿ｆｕｎｃ２．ｃをコアＣ１のプロジェクトとして登録する。このようにしてファイルが登録し直されたプロジェクトがプロジェクトＰ２となる。
【００８１】
以上に説明したように、本実施例では、オフロード対象関数をソースプログラムから切り出し、他のコアで実行されるプロジェクトとして登録し直す作業を自動で行うことができる。したがって本実施例によれば、マルチコアプロセッサ用のプログラムの開発において、煩雑さを軽減することができる。
【００８２】
尚本実施例の関数一覧表３００においてコア属性の設定が変更された場合には、関数定義体３１０のコア属性も対応して変更される。本実施例では、一度コア属性の設定が変更された場合は、その変更の履歴として関数定義体３１０へ保存しておく。
【００８３】
また本実施例では、コアが２つ（コアＣ０、Ｃ１）の場合について説明したが、コアは３つ以上であっても良い。
【００８４】
以下に図１１を参照して、さらにコアＣ２を加えたマルチコアプロセッサにおける例を説明する。図１１は、関数定義体の別の例を示す図である。図１１では、オフロード先として有効であったコアＣ１を無効とし、関数ｆｕｎｃ３（）をコアＣ２へのオフロード対象関数とするようにコア属性が設定された場合の関数定義体３１０を示している。
【００８５】
図１１の関数定義体３１０では、関数ｆｕｎｃ２（）がオフロード対象関数ではないため、ラインＬ１の関数ｆｕｎｃ２（）にオフロード前情報とオフロード後情報は保持したまま、コアＣ１のコア属性を無効（オフ）とされる。
【００８６】
そして新たにオフロード対象関数とされた関数ｆｕｎｃ３（）について、オフロード前情報とオフロード後情報がラインＬ２に追加される。そして関数ｆｕｎｃ３（）のコア属性において、オフロード先であるコアＣ２は有効（オン）とされる。尚コアＣ２を無効とする場合には、関数ｆｕｎｃ３（）のコア属性をオフすれば良い。例えばコアＣ１及びコアＣ２に対応させて、それぞれマクロ変数ＭＵＬ１及びＭＵＬ２とすることによってコア毎のオフロードを制御することができる。
【００８７】
この場合関数一覧表３００のコア属性には、関数定義体３１０と同様にコア番号とコアの有効/無効を示す情報とが含まれることが好ましい。また例えばコアが３つある場合にソースプログラムをシングルコアの資産として管理するときは、３つのコアのうち２つのコアを無効とするようにコア属性を設定すれば良い。
【００８８】
このように本実施例では、一度オフロード対象関数となった関数は、コア属性と、オフロード前情報と、オフロード後情報とが対応付けられたまま関数定義体３１０に保持される。よって本実施例では、コア属性の有効／無効を切り替えるだけで、コア属性と対応する関数をオフロードするか否かを制御できる。また本実施例では、例えば関数定義体３１０のコア属性を全て無効とすれば、ソースプログラムをシングルコアの資産として管理できる。
【００８９】
したがって本実施例では、ユーザインターフェイスとなる関数一覧表３００において、関数毎のコア属性の設定を変更すれば、各関数が実行されるコアを切り替えることができる、関数が実行されるコアを容易に管理することができる。
【００９０】
本発明は、以下に記載する付記のような構成が考えられる。
（付記１）
マルチコアプロセッサで実行されるプログラムの開発を支援するプログラム開発支援装置であって、
前記プログラムを解析して前記プログラムに含まれる関数の関数情報と、ユーザによってオフロード先のコアを設定可能とするコア属性とを対応付けた一覧表を作成する作成手段と、
ユーザによって設定された前記コア属性からオフロード対象の関数を特定し、前記オフロード対象の関数に関数情報に基づきオフロードするための記述を挿入する挿入手段と、を有するプログラム開発支援装置。
（付記２）
前記関数情報は、前記関数の定義が記述された定義箇所を示す定義情報と、前記関数が呼び出される参照箇所を示す参照情報とを含み、
前記挿入手段は、
前記定義箇所と、前記参照箇所とへ前記関数をオフロードするための記述をそれぞれ挿入する付記１記載のプログラム開発支援装置。
（付記３）
前記定義箇所と前記参照箇所とは、前記関数をオフロードするための記述を挿入された記述にそれぞれ置き換えられる付記２記載のプログラム開発支援装置。
（付記４）
前記定義箇所に前記関数をオフロードするための記述が挿入された関数のファイルを生成し、生成された前記ファイルを前記関数が実行されるコアのプロジェクトとして登録する登録手段を有する付記３記載のプログラム開発支援装置。
（付記５）
前記定義箇所へ挿入される前記関数をオフロードするための記述と、前記参照箇所へ挿入される前記関数をオフロードするための記述とをそれぞれテンプレートとして保持する付記１乃至４の何れか一項に記載のプログラム開発支援装置。
（付記６）
前記一覧表の前記コア属性の設定を変更して前記オフロード対象の関数を設定する手段を有する付記１乃至５記載のプログラム開発支援装置。
（付記７）
前記作成手段は、
前記一覧表に基づき、前記オフロード対象の関数が実行されるコアの有効／無効を示す情報と、前記記述が挿入される前の前記オフロード対象の関数の前記定義情報と、前記記述が挿入された後の前記オフロード対象の関数の前記定義情報とを対応付けた関数定義体を作成する付記２乃至６記載のプログラム開発支援装置。
（付記８）
前記関数定義体におけるコアの有効／無効を示す情報は、前記一覧表の前記コア属性に基づき設定される付記７記載のプログラム開発支援装置。
（付記９）
マルチコアプロセッサで実行されるプログラムの開発を支援するプログラム開発支援装置におけるプログラム開発支援方法であって、
前記プログラムを解析して前記プログラムに含まれる関数の関数情報と、ユーザによってオフロード先のコアを設定可能とするコア属性とを対応付けた一覧表を作成する作成手順と、
ユーザによって設定された前記コア属性からオフロード対象の関数を特定し、前記オフロード対象の関数に関数情報に基づきオフロードするための記述を挿入する記述挿入手順と、を実行するプログラム開発支援方法。
（付記１０）
マルチコアプロセッサで実行されるプログラムの開発を支援するプログラム開発支援装置において実行されるプログラム開発支援プログラムであって、
前記プログラム開発支援装置に。
【００９１】
前記プログラムを解析して前記プログラムに含まれる関数の関数情報と、ユーザによってオフロード先のコアを設定可能とするコア属性とを対応付けた一覧表を作成する作成ステップと、
ユーザによって設定された前記コア属性からオフロード対象の関数を特定し、前記オフロード対象の関数に関数情報に基づきオフロードするための記述を挿入する記述挿入ステップと、を実行させるプログラム開発支援プログラム。
【００９２】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【００９３】
１００  プログラム開発支援装置
１１０  プロジェクト作成部
１２０  ソース登録部
１３０  一覧作成部
１３１  静的解析部
１３２  関数情報作成部
１３３  コア属性作成部
１４０  プロジェクト制御部
１５０  関数参照部作成部
１６０  関数定義部作成部
１７０  プロジェクト登録部
３００  関数一覧表
３１０  関数定義体
【図１】
0005456457.tif 000002
【図２】
0005456457.tif 000003
【図３】
0005456457.tif 000004
【図４】
0005456457.tif 000005
【図５】
0005456457.tif 000006
【図６】
0005456457.tif 000007
【図７】
0005456457.tif 000008
【図８】
0005456457.tif 000009
【図９】
0005456457.tif 000010
【図１０】
0005456457.tif 000011
【図１１】
0005456457.tif 000012