図1は、実施例1におけるプログラム生成装置10の一例を示す説明図である。プログラム生成装置10は、例えば図1に示すように、通信経路情報格納部11と、特定部12と、生成部13と、埋め込み部14とを有する。本実施例において、プログラム生成装置10は、例えば、1つ以上のコアを有するプロセッサを複数有するマルチプロセッサ装置用のプログラムを生成する。また、本実施例において、マルチプロセッサ装置は、例えば無線基地局や無線端末として機能する。
通信経路情報格納部11には、例えば図2に示すような通信経路情報110が格納される。図2は、通信経路情報110の一例を示す説明図である。通信経路情報110には、API名称111、アクセス種別112、アクセス元情報113、アクセス先情報114、最小アクセスサイズ115、領域サイズ116、およびIF(InterFace)種別117が含まれる。API名称111は、タスクからメモリへのデータの転送や、メモリからタスクへのデータの転送を実行するAPIを識別する名称である。タスクは、プロセスの一例である。アクセス種別112は、データの転送がタスクからメモリへの書き込みなのか、メモリからの読み出しなのかを示す情報である。図2に例示したアクセス種別112において、「W」はデータの転送がタスクからメモリへの書き込みであることを示し、「R」はデータの転送がメモリからの読み出しであることを示す。
アクセス元情報113には、メモリにアクセスするアクセス元のタスクの名称と、タスクが実行されるコアの名称と、コアを有するプロセッサの名称とが含まれる。アクセス元情報113に含まれたプロセッサおよびコアの名称を参照することにより、タスクが実行されているコアの位置と、コアを含むプロセッサの位置とを特定することができる。
アクセス先情報114には、タスクがアクセスするアクセス先のメモリの名称と、プロセッサの名称と、コアの名称と、メモリの種別とが含まれる。メモリの種別とは、ローカルメモリやシェアードメモリ等のメモリの種別を示す。図2に例示したアクセス先情報114の種別において、「ローカル」はメモリの種別がローカルメモリであることを示す。コアの名称とは、メモリがローカルメモリである場合、メモリに主としてアクセスするコアの名称である。プロセッサの名称とは、メモリが実装されているプロセッサの名称である。アクセス先情報114に含まれたプロセッサおよびコアの名称を参照することにより、メモリが実装されているプロセッサの位置と、メモリが主としてアクセスされるコアの位置とを特定することができる。
最小アクセスサイズ115は、転送されるデータの最小サイズを示す。領域サイズ116は、転送されるデータを保持するための領域のサイズを示す。IF種別117は、タスクからメモリへのアクセスにおいて使用されるインターフェイスの種別を示す。図2に例示したIF種別117において、「Bus」は、タスクからメモリへのアクセスにおいて使用されるインターフェイスの種別がバスであることを示す。
ここで、図2に例示した通信経路情報110は、例えば、図3に例示する仮想通信情報200と、図4に例示するタスクの物理位置情報210と、図5に例示するメモリの物理位置情報214とに基づいて作成される。仮想通信情報200およびタスクの物理位置情報210は、例えばプログラマ等によって作成される。また、メモリの物理位置情報214は、例えばマルチプロセッサ装置の設計者等によって作成される。
図3は、仮想通信情報200の一例を示す説明図である。仮想通信情報200には、例えば図3に示すように、番号201に対応付けて、アクセス元タスク名称202、アクセス先メモリ名称203、最小アクセスサイズ204、領域サイズ205、アクセス種別206、およびAPI名称207が含まれる。アクセス元タスク名称202は、メモリにアクセスするアクセス元のタスクの名称である。アクセス先メモリ名称203は、タスクがアクセスするアクセス先のメモリの名称である。最小アクセスサイズ204は、転送されるデータの最小サイズを示す。領域サイズ205は、転送されるデータを保持するための領域のサイズを示す。API名称207は、タスクからメモリへのデータの転送や、メモリからタスクへのデータの転送を実行するAPIを識別する名称である。
図4は、タスクに関する物理位置情報210の一例を示す説明図である。タスクの物理位置情報210には、タスク名称211、プロセッサ名称212、およびコア名称213が含まれる。タスク名称211は、それぞれのタスクを識別する名称である。プロセッサ名称212は、タスクが実行されるコアを有するプロセッサの名称である。コア名称213は、タスクを実行するコアの名称である。
図5は、メモリに関する物理位置情報214の一例を示す説明図である。メモリの物理位置情報214には、メモリ名称215、プロセッサ名称216、コア名称217、種別218、および使用IF219が含まれる。メモリ名称215は、それぞれのメモリを識別する名称である。プロセッサ名称216は、メモリが実装されているプロセッサの名称である。コア名称217は、メモリがローカルメモリである場合に、メモリに主としてアクセスするコアの名称である。種別218は、ローカルメモリやシェアードメモリ等のメモリの種別を示す。使用IF219は、メモリにアクセスする場合に使用可能なインターフェイスを示す。
図1に戻って説明を続ける。特定部12は、通信経路情報110を参照し、タスクからアクセスされるメモリの種別や、タスクが実行されるコアの位置等に応じて、タスク間のデータ通信に使用されるインターフェイスのIF種別を修正する。例えば、特定部12は、通信経路情報110内のアクセス先情報を参照し、アクセス先が同一のメモリであるタスクのペアを特定する。そして、特定部12は、特定したタスクのペアによってアクセスされるメモリの種別がローカルか否かを判定する。
アクセス先のメモリの種別がローカルである場合、特定部12は、特定したタスクのペアが同一のプロセッサ内の同一のコアで実行されていれば、通信経路情報110内のIF種別をポインタによるデータ転送に変更する。このように、同一のプロセッサ内の同一のコアで実行されているタスクのデータ転送を、ポインタによるデータ転送に変更することにより、特定部12は、タスク間のデータ転送を高速化することができる。
一方、特定したタスクのペアが同一のプロセッサ内の異なるコアで実行されている場合、特定部12は、通信経路情報110内の最小アクセスサイズが所定サイズ以上か否かを判定する。所定サイズとは、例えばデータ転送専用のハードウェアを使用するインターフェイスを用いたデータ転送の方が高速なデータ転送となるデータのサイズである。データ転送専用のハードウェアを用いたインターフェイスとは、例えばDMA(Direct Memory Access)である。通信経路情報110内の最小アクセスサイズが所定サイズ以上である場合、特定部12は、通信経路情報110内のIF種別を、DMAによるデータ転送に変更する。このように、タスク間で転送されるデータ量が所定サイズ以上の場合に、IF種別をDMAによるデータ転送に変更することにより、特定部12は、より高速なデータ転送を設定することができる。
一方、通信経路情報110内の最小アクセスサイズが所定サイズ未満である場合、特定部12は、通信経路情報110内のIF種別をコアアクセスに変更する。コアアクセスとは、異なるコアで実行されているタスクが、いずれかのタスクが実行されているコアのローカルメモリを介してデータを転送するデータ転送方法である。このように、異なるコアでタスクが実行される場合であっても、いずれかのローカルメモリを介してデータ転送を行う場合に、IF種別をコアアクセスに変更することにより、特定部12は、より高速なデータ転送を設定することができる。
次に、特定部12は、通信経路情報110に基づいて、タスク間でメモリを介してデータの送受信を実行するAPIに設定するパラメータを特定する。特定部12は、例えば、通信経路情報110内のIF種別を参照し、IF種別で示されるインターフェイスを用いた通信を実現するAPIのソースコードを、既存のソースライブラリ内で特定する。そして、特定部12は、特定したAPIの起動に用いられるパラメータを特定する。
生成部13は、特定部12によって特定されたパラメータで動作するAPIのソースコードを生成する。生成部13は、例えば、通信経路情報110内のIF種別を参照し、IF種別で示されるインターフェイスを用いた通信を実現するAPIのソースコードを、既存のソースライブラリから取得する。そして、生成部13は、取得したAPIのソースコードの設定値を、特定部12によって特定されたパラメータに書き換えて、APIのソースコードを生成する。ここで生成されたAPIのソースコードは、本実施例のマルチプロセッサ装置に特化した仮想通信用APIのソースコードである。
埋め込み部14は、メイン処理プログラムのソースコード内で、タスク間のデータ送受信の実行箇所に、生成したAPIのソースコードを埋め込む。ここで、本実施例におけるメイン処理プログラムとは、例えば、個別の処理を行う複数のタスクを実行して所定の処理を実行するプログラムである。また、プログラム生成装置10によって生成されるマルチプロセッサ用プログラムに基づいて動作するマルチプロセッサ装置が、例えば無線基地局として機能する場合、メイン処理プログラムによって実行される所定の処理は、例えば送信処理である。また、メイン処理プログラムによって実行されるタスクは、例えばエンコードの処理等の個別の処理を実行する。
埋め込み部14は、例えば、メイン処理プログラムのソースコード内で、タスク間のデータ通信を実行するAPIが呼び出される箇所を特定する。そして、埋め込み部14は、特定した箇所に、生成部13によって生成されたAPIのソースコードを埋め込んで、マルチプロセッサ用プログラムのソースコードを生成する。
なお、埋め込み部14は、生成したマルチプロセッサ用プログラムのソースコードをプログラム生成装置10内の記憶部に記憶させてもよく、プログラム生成装置10の外部の機器へ出力してもよい。また、埋め込み部14は、生成したマルチプロセッサ用プログラムのソースコードと、他のAPIのソースコードとを、コンパイルおよびリンクし、マルチプロセッサ用の実行コードとして、プログラム生成装置10内の記憶部に記憶させてもよい。また、埋め込み部14は、生成したマルチプロセッサ用の実行コードを、プログラム生成装置10の外部の機器(例えば、マルチプロセッサ装置)へ出力してもよい。
ここで、プログラム生成装置10によって生成されたマルチプロセッサ用プログラムに基づいて動作するマルチプロセッサ装置について説明する。図6は、マルチプロセッサ装置30の一例を示す説明図である。本実施例におけるマルチプロセッサ装置30は、複数のプロセッサであるDSP1およびDSP2と、マルチプロセッサ用ファームウェア31および各種データを格納するROMとを有する。マルチプロセッサ用ファームウェア31は、プログラム生成装置10によって生成されたマルチプロセッサ用プログラムの実行コードであり、マルチプロセッサ装置30の起動前にマルチプロセッサ装置30内のROMに予め格納される。
DSP1には、複数のコアであるCore11およびCore12と、複数のメモリであるMEM11、MEM12およびMEM13とが含まれる。また、DSP1には、DSP1内のコア間でメモリの転送を行うインターフェイスであるDMAと、DSP1の外部の機器と間でシリアル通信を行うインターフェイスの一例であるSRIO(Serial Rapid IO)とが含まれる。DSP1の外部の機器と間でシリアル通信を行うインターフェイスとしては、SRIOの他に、イーサネット(登録商標)、RS232C、PCI等がDSP1に含まれていてもよい。
MEM11は、Core11のローカルメモリであり、主としてCore11からアクセスされる。MEM11は、Core11以外のコア(例えばCore12)からアクセスされることも可能であるが、Core11との間のデータ転送速度の方が、Core11以外のコアとの間のデータ転送速度よりも高速である。
MEM12は、Core12のローカルメモリであり、主としてCore12からアクセスされる。MEM12も、Core12以外のコア(例えばCore11)からアクセスされることが可能であるが、Core12との間のデータ転送速度の方が、Core12以外のコアとの間のデータ転送速度よりも高速である。
MEM13は、Core11およびCore12のシェアードメモリであり、Core11およびCore12の双方からアクセスされ、Core11との間のデータ転送速度と、Core12との間のデータ転送速度とは、同程度である。
DSP2には、複数のコアであるCore21およびCore22と、複数のメモリであるMEM21、MEM22およびMEM23とが含まれる。また、DSP2には、DMAとSRIOとが含まれる。
ROM内のマルチプロセッサ用ファームウェア31には、タスク毎の実行コードが含まれている。DSP1またはDSP2は、マルチプロセッサ用ファームウェア31をROMから読み出し、それぞれのタスクの実行コードを、タスクを実行するコアのローカルメモリに展開する。なお、全てのタスクの実行コードが、いずれかのローカルメモリに必ずしも常時展開されている必要はなく、処理に用いられるタスクの実行コードのみがローカルメモリに展開されてもよい。
それぞれのタスクは、データの送信において、タスクの実行コードに埋め込まれている命令に従って、命令で指定されたインターフェイスを用いて、命令で指定されたメモリにデータを書き込む。また、それぞれのタスクは、データの受信において、タスクの実行コードに埋め込まれている命令に従って、命令で指定されたインターフェイスを用いて、命令で指定されたメモリからデータを読み出す。
各コアは、ローカルメモリ内の実行コードをタスクとして機能させる。そして、それぞれのタスクは、ローカルメモリから読み出した各種データを適宜ローカルメモリやシェアードメモリ上の自身に割り当てられた領域に展開し、この展開した各種データに基づいて各種処理を実行する。
次に、通信経路情報110に基づいてプログラム生成装置10が生成したマルチプロセッサ用プログラムと、マルチプロセッサ用プログラムに基づいて動作するマルチプロセッサ装置30との関係について、図7〜図13を参照して説明する。図7〜図13では、図6において例示したマルチプロセッサ装置30の動作を示している。
図7A〜Cは、ポインタによるデータ転送の一例を示す説明図である。図7Aに例示した仮想通信情報200では、TaskAからTaskBへのデータ転送をMEM12を介して行う仮想通信が定義されている。
図7Bの通信経路情報110に例示されているように、TaskAおよびTaskBは、同一のDSP1内の同一のCore12で実行されている。また、図7Cに例示されているように、MEM12はCore12のローカルメモリであるため、特定部12は、MEM12を介したTaskAからTaskBへのデータ転送におけるIF種別を、例えばポインタによるデータ転送に変更する。図7Bでは、特定部12によってIF種別が変更された後の通信経路情報110が例示されている。
図8は、タスク間のデータ転送の詳細な一例を示す説明図である。データの転送元のTaskAから、データの転送先のTaskBへのデータ転送では、TaskA内のデータ送信部32が転送対象のデータをMEM12に書き込み、TaskB内のデータ受信部33が転送対象のデータをMEM12から読み出す。ただし、IF種別がポインタによるデータの転送に変更となったため、図7A〜Cの例では、データ自体の転送は行われず、データが格納されたMEM12内の場所を示すポインタの情報が、データ送信部32からデータ受信部33へ送られる。
図9A〜Cは、コアアクセスによるデータ転送(Read Local)の一例を示す説明図である。図9Aに例示した仮想通信情報200では、TaskAからTaskBへのデータ転送をMEM12を介して行う仮想通信が定義されている。
図9Bの通信経路情報110に例示されているように、TaskAおよびTaskBは、同一のDSP1内で実行されているが、TaskAはCore11で実行され、TaskBはCore12で実行されている。また、図9Cに例示されているように、MEM12はCore12のローカルメモリであるため、特定部12は、通信経路情報110内の最小アクセスサイズが所定サイズ(例えば512byte)以上か否かを判定する。
通信経路情報110内の最小アクセスサイズ(図9Bの例では256byte)が所定サイズ未満であるため、特定部12は、MEM12を介したTaskAからTaskBへのデータ転送におけるIF種別を、例えばコアアクセスに変更する。図9Bでは、特定部12によってIF種別が変更された後の通信経路情報110が例示されている。データの転送元のTaskAからデータの転送先のTaskBへのデータ転送では、TaskA内のデータ送信部32がコアアクセスにより転送対象のデータをMEM12に書き込み、TaskB内のデータ受信部33が転送対象のデータをMEM12から読み出す。
図10A〜Cは、コアアクセスによるデータ転送(Write Local)の一例を示す説明図である。図10Aに例示した仮想通信情報200では、TaskBからTaskAへのデータ転送をMEM12を介して行う仮想通信が定義されている。
図10Bの通信経路情報110に例示されているように、TaskAおよびTaskBは、同一のDSP1内で実行されているが、TaskAはCore11で実行され、TaskBはCore12で実行されている。また、図10Cに例示されているように、MEM12はCore12のローカルメモリであるため、特定部12は、通信経路情報110内の最小アクセスサイズが所定サイズ(例えば512byte)以上か否かを判定する。
通信経路情報110内の最小アクセスサイズ(図10Bの例では256byte)が所定サイズ未満であるため、特定部12は、MEM12を介したTaskBからTaskAへのデータ転送におけるIF種別を、例えばコアアクセスに変更する。図10Bでは、特定部12によってIF種別が変更された後の通信経路情報110が例示されている。データの転送元のTaskBから、データの転送先のTaskAへのデータ転送では、TaskB内のデータ送信部32が転送対象のデータをMEM12に書き込み、TaskA内のデータ受信部33がコアアクセスにより転送対象のデータをMEM12から読み出す。
図11A〜Cは、シェアードメモリによるデータ転送の一例を示す説明図である。図11Aに例示した仮想通信情報200では、TaskAからTaskBへのデータ転送をMEM13を介して行う仮想通信が定義されている。
図11Bの通信経路情報110に例示されているように、TaskAおよびTaskBは、同一のDSP1内で実行されているが、TaskAはCore11で実行され、TaskBはCore12で実行されている。また、図11Cに例示されているように、MEM13はCore11またはCore12のローカルメモリではないため、特定部12は、MEM13を介したTaskAからTaskBへのデータ転送におけるIF種別の変更を行わない。図11Bに例示した通信経路情報110では、IF種別が変更前のBusのままとなっている。データの転送元のTaskAから、データの転送先のTaskBへのデータ転送では、TaskA内のデータ送信部32が転送対象のデータをMEM13に書き込み、TaskB内のデータ受信部33が転送対象のデータをMEM13から読み出す。
図12A〜Cは、DMAによるデータ転送の一例を示す説明図である。図12Aに例示した仮想通信情報200では、TaskAからTaskBへのデータ転送をMEM12を介して行う仮想通信が定義されている。ただし、最小アクセスサイズの定義は512byteとなっている。
図12Bの通信経路情報110に例示されているように、TaskAおよびTaskBは、同一のDSP1内で実行されているが、TaskAはCore11で実行され、TaskBはCore12で実行されている。また、図12Cに例示されているように、MEM12はCore12のローカルメモリであるため、特定部12は、通信経路情報110内の最小アクセスサイズが所定サイズ(例えば512byte)以上か否かを判定する。
通信経路情報110内の最小アクセスサイズ(図12Bの例では512byte)が所定サイズ以上であるため、特定部12は、MEM12を介したTaskAからTaskBへのデータ転送におけるIF種別を、例えばDMAによるデータ転送に変更する。図12Bでは、特定部12によってIF種別が変更された後の通信経路情報110が例示されている。データの転送元のTaskAから、データの転送先のTaskBへのデータ転送では、TaskA内のデータ送信部32が転送対象のデータをMEM11を介してDMAへ送り、TaskB内のデータ受信部33が転送対象のデータをMEM12から読み出す。
図13A〜Cは、SRIOによるデータ転送の一例を示す説明図である。図13Aに例示した仮想通信情報200では、TaskAからTaskBへのデータ転送をMEM21を介して行う仮想通信が定義されている。
図13Bの通信経路情報110に例示されているように、TaskAおよびTaskBは、異なるプロセッサ内のコアで実行されている。すなわち、TaskAはDSP1内のCore11で実行され、TaskBはDPS2内のCore21で実行されている。図13Cに例示されているように、TaskAおよびTaskBは異なるプロセッサ内で実行されているため、特定部12は、MEM13を介したTaskAからTaskBへのデータ転送におけるIF種別の変更を行わない。図13Bに例示した通信経路情報110では、IF種別が変更前のSRIOのままとなっている。データの転送元のTaskAから、データの転送先のTaskBへのデータ転送では、TaskA内のデータ送信部32が転送対象のデータをMEM11を介してSRIOへ送り、TaskB内のデータ受信部33が転送対象のデータをMEM21から読み出す。なお、プロセッサ間のデータ転送において使用可能なインターフェイス(例えば、SRIO、イーサネット、PCI等)が複数存在する場合には、例えばデータの転送速度が最も高いインターフェイスが採用される。
図14は、プログラム生成装置10の動作の一例を示すフローチャートである。プログラム生成装置10は、例えば、図示しない入力装置を介してユーザからの指示を受け付けた場合等の所定のタイミングで、本フローチャートに示す動作を開始する。
まず、特定部12は、通信経路情報110を参照して、アクセス先のメモリの中で、未選択のメモリを1つ選択する(S100)。そして、特定部12は、通信経路情報110を参照して、選択したメモリにデータを書き込むタスクと読み出すタスクのペアを特定する(S101)。そして、特定部12は、通信経路情報110を参照して、タスクのペアによってアクセスされるメモリの種別がローカルか否かを判定する(S102)。
アクセス先のメモリの種別がローカルである場合(S102:Yes)、特定部12は、通信経路情報110を参照して、タスクのペアが同一のプロセッサ内で実行されているか否かを判定する(S103)。タスクのペアによってアクセスされるメモリの種別がローカルではない場合(S102:No)、または、タスクのペアが異なるプロセッサ内で実行されている場合(S103:No)、特定部12は、ステップS109に示す処理を実行する。
タスクのペアが同一のプロセッサ内で実行されている場合(S103:Yes)、特定部12は、通信経路情報110を参照して、タスクのペアが同一のコアで実行されているか否かを判定する(S104)。タスクのペアが同一のコアで実行されている場合(S104:Yes)、特定部12は、通信経路情報110内のIF種別をポインタによるデータ転送に変更し(S105)、ステップS109に示す処理を実行する。
一方、タスクのペアが異なるコアで実行されている場合(S104:No)、特定部12は、通信経路情報110内の最小アクセスサイズを参照して、最小アクセスサイズが所定サイズ以上か否かを判定する(S106)。最小アクセスサイズが所定サイズ未満である場合(S106:No)、特定部12は、通信経路情報110内のIF種別を、コアアクセスによるデータ転送に変更し(S107)、ステップS109に示す処理を実行する。
一方、最小アクセスサイズが所定サイズ以上である場合(S106:Yes)、特定部12は、通信経路情報110内のIF種別を、DMAによるデータ転送に変更する(S108)。そして、特定部12は、通信経路情報110内のIF種別を参照し、IF種別で示されるインターフェイスを用いた通信を実現するAPIのソースコードを、例えば既存のソースライブラリから取得する(S109)。そして、特定部12は、取得したAPIの起動に用いられるパラメータを特定する(S110)。
次に、生成部13は、ステップS110において特定されたパラメータで起動するように、ステップS109において取得されたソースコードを書き換えることにより、仮想通信APIを生成する(S111)。そして、生成部13は、生成した仮想通信APIをプログラム生成装置10内の記憶部に保持する。そして、特定部12は、通信経路情報110を参照して、アクセス先のメモリを全て選択したか否かを判定する(S112)。未選択のメモリがある場合(S112:No)、特定部12は、再びステップS100に示した処理を実行する。
一方、アクセス先のメモリを全て選択した場合(S112:Yes)、埋め込み部14は、メイン処理プログラムにおいて、タスク間でのデータの送受信の実行箇所に、生成したAPIのソースコードを埋め込むAPIコード埋め込み処理を実行する(S113)。そして、プログラム生成装置10は、本フローチャートに示した動作を終了する。
ステップS113において、埋め込み部14は、例えば、メイン処理プログラムのソースコード内で、タスク間のデータ通信を実行するAPIが呼び出される箇所を特定する。そして、埋め込み部14は、特定した箇所に、生成部13によって生成されたAPIのソースコードを埋め込んで、マルチプロセッサ用プログラムを生成する。
以上、実施例1について説明した。本実施例におけるプログラム生成装置10によれば、マルチプロセッサ装置において、処理の呼び出しにかかっていた時間を削減し、全体的な処理時間の削減を図ることができる。
図15は、実施例2におけるプログラム生成装置の一例を示す説明図である。本実施例におけるプログラム生成装置10’は、例えば図15に示すように、通信経路情報格納部11と、特定部12と、生成部13と、埋め込み部14とを有する。また、プログラム生成装置10’は、仮想通信情報格納部20と、物理位置情報格納部21と、受付部22と、通信経路情報生成部23と、APIソースライブラリ格納部24と、メイン処理プログラム格納部25と、実行コード生成部26とを有する。なお、以下に説明する点を除き、図15において、図1と同じ符号を付した構成は、図1における構成と同一または同様の機能を有するため説明を省略する。
受付部22は、ユーザのコンピュータ等の外部機器から、図3に例示した仮想通信情報200、図4に例示したタスクの物理位置情報210、および図5に例示したメモリの物理位置情報214をそれぞれ受け付ける。そして、受付部22は、受け付けた仮想通信情報200を仮想通信情報格納部20内に格納する。また、受付部22は、受け付けたタスクの物理位置情報210およびメモリの物理位置情報214を物理位置情報格納部21内に格納する。
通信経路情報生成部23は、仮想通信情報格納部20内の仮想通信情報200と、物理位置情報格納部21内のタスクの物理位置情報210およびメモリの物理位置情報214とに基づいて、図2に例示した通信経路情報110を生成する。そして、通信経路情報生成部23は、生成した通信経路情報110を通信経路情報格納部11に格納する。
APIソースライブラリ格納部24は、インターフェイス毎に、インターフェイスを用いた通信を実現するAPIのソースライブラリを格納する。本実施例において、生成部13は、通信経路情報110内のIF種別を参照し、IF種別で示されるインターフェイスを用いた通信を実現するAPIのソースコードを、APIソースライブラリ格納部24から取得する。
メイン処理プログラム格納部25は、メイン処理プログラムのソースコードを格納する。埋め込み部14は、メイン処理プログラム格納部25からメイン処理プログラムのソースコードを取得する。実行コード生成部26は、埋め込み部14によって生成されたマルチプロセッサ用プログラムのソースコードを、他のAPIのソースコードと共にコンパイルおよびリンクし、マルチプロセッサ用の実行コードを生成する。そして、実行コード生成部26は、生成した実行コードを外部機器(例えばマルチプロセッサ装置30等)へ出力する。
図16は、実施例2におけるプログラム生成装置10’の動作の一例を示すフローチャートである。プログラム生成装置10’は、例えば、図示しない入力装置を介してユーザからの指示を受け付けた場合等の所定のタイミングで、本フローチャートに示す動作を開始する。
まず、受付部22は、ユーザのコンピュータ等の外部機器から、仮想通信情報200、タスクの物理位置情報210、およびメモリの物理位置情報214をそれぞれ受け付ける(S200)。そして、受付部22は、受け付けた仮想通信情報200を仮想通信情報格納部20内に格納し、受け付けたタスクの物理位置情報210およびメモリの物理位置情報214を物理位置情報格納部21内に格納する(S201)。
次に、通信経路情報生成部23は、仮想通信情報200、タスクの物理位置情報210、メモリの物理位置情報214に基づいて、タスク名称およびメモリ名称をキーとして、図2に例示した通信経路情報110を生成する(S202)。そして、プログラム生成装置10’は、図14に例示したステップS100〜S113の処理を実行する。
本実施例のプログラム生成装置10’によれば、タスクを実行させるコア等の位置を変更した場合であっても、仮想通信情報、タスクの物理位置情報、およびメモリの物理位置情報を変更することで、変更に対応した実行コードを生成することができる。これにより、タスクを実行するコアやアクセス先のメモリの位置変更に伴うメイン処理プログラムの変更負担を軽減できる。そのため、マルチプロセッサ装置およびマルチプロセッサ装置に適用するファームウェアの開発において、プログラマ等の作業負担を軽減することができる。
なお、上記の実施例1または2において説明したプログラム生成装置における各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。
図17は、プログラム生成装置の機能を実現するコンピュータの一例を示す説明図である。図17に示すように、コンピュータ100は、操作部110aと、スピーカ110bと、カメラ110cと、ディスプレイ120と、通信部130とを有する。さらに、このコンピュータ100は、CPU150と、ROM160と、HDD170と、RAM180とを有する。これら110〜180の各部はバス140を介して接続される。
HDD170には、例えば図17に示すように、生成プログラム170aが予め記憶される。上記実施例1では、生成プログラム170aがコンピュータ100に読み込まれることにより、コンピュータ100は、特定部12、生成部13、および埋め込み部14と同様の機能を発揮する。また、上記実施例1において、RAM180またはHDD170には、通信経路情報格納部11内のデータが格納される。
また、上記実施例2では、生成プログラム170aがコンピュータ100に読み込まれることにより、コンピュータ100は、特定部12、生成部13、埋め込み部14、受付部22、通信経路情報生成部23、および実行コード生成部26と同様の機能を発揮する。また、上記実施例2において、RAM180またはHDD170には、通信経路情報格納部11、仮想通信情報格納部20、物理位置情報格納部21、APIソースライブラリ格納部24、およびメイン処理プログラム格納部25内のデータが格納される。
生成プログラム170aについては、図14または図16に示した各々の構成要素と同様、適宜統合または分離してもよい。また、HDD170に格納される各データは、常に全てのデータがHDD170に格納される必要はなく、処理に用いられるデータのみがHDD170に格納されればよい。
そして、CPU150が、生成プログラム170aをHDD170から読み出してRAM180に展開する。これによって、図17に示すように、生成プログラム170aは、生成プロセス180aとして機能する。この生成プロセス180aは、HDD170から読み出した各種データを適宜RAM180上の自身に割り当てられた領域に展開し、この展開した各種データに基づいて各種処理を実行する。
なお、上記した各実施例における生成プロセス180aは、図1および図15に示した特定部12、生成部13、および埋め込み部14において実行される処理、例えば図14または図16に示した処理を含む。CPU150上で仮想的に実現される各処理部は、常に全ての処理部がCPU150上で動作する必要はなく、処理に用いられる処理部のみが仮想的に実現されればよい。
なお、上記の生成プログラム170aについては、必ずしも最初からHDD170やROM160に記憶させておく必要はない。例えば、コンピュータ100に挿入されるフレキシブルディスク、いわゆるFD、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させる。そして、コンピュータ100がこれらの可搬用の物理媒体から各プログラムを取得して実行するようにしてもよい。また、公衆回線、インターネット、LAN、WANなどを介してコンピュータ100に接続される他のコンピュータまたはサーバ装置などに各プログラムを記憶させておき、コンピュータ100がこれらから各プログラムを取得して実行するようにしてもよい。