JP6217386B2 - マルチプロセッサ用プログラム生成方法 - Google Patents

マルチプロセッサ用プログラム生成方法 Download PDF

Info

Publication number
JP6217386B2
JP6217386B2 JP2013268026A JP2013268026A JP6217386B2 JP 6217386 B2 JP6217386 B2 JP 6217386B2 JP 2013268026 A JP2013268026 A JP 2013268026A JP 2013268026 A JP2013268026 A JP 2013268026A JP 6217386 B2 JP6217386 B2 JP 6217386B2
Authority
JP
Japan
Prior art keywords
memory
information
task
data transfer
core
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
JP2013268026A
Other languages
English (en)
Other versions
JP2015125503A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013268026A priority Critical patent/JP6217386B2/ja
Publication of JP2015125503A publication Critical patent/JP2015125503A/ja
Application granted granted Critical
Publication of JP6217386B2 publication Critical patent/JP6217386B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、マルチプロセッサ用プログラム生成方法に関する。
マルチプロセッサやマルチコアの組込み機器の開発において、あるコアで実行させていたプロセスを別なコアで実行させるように変更する場合がある。かかる場合、プロセスを実行するコアと、プロセスによってアクセスされるメモリとの物理的な位置関係が変わることで、プロセスを実行するコアとプロセスによってアクセスされるメモリとの間の通信手段を変更することになる場合がある。
物理的な位置の変更に伴う通信手段の変更負担を軽減する方法として、通信部分を仮想化する方法がある。仮想通信では、メイン処理プログラムにおいて、通信が行われる箇所では、通信処理を実行するAPI(Application Programming Interface)を呼び出すように記述される。通信元および通信先の定義は初期起動時に初期化され、定義された通信元と通信先とに基づいて、実際に通信を行う通信処理APIがライブラリから動的に呼び出されて実行される。
特開2009−104422号公報 特開2000−181881号公報
しかし、上記の仮想通信では、通信の実行時にAPIを呼び出して通信処理を実行するため、通信処理を呼び出すための前処理や、呼び出した通信処理が終了した後の後処理が行われる。このような前処理や後処理のオーバーヘッドは、メモリへのリード/ライトのように、実行時間が短く頻繁に発生する通信処理では、全体の処理時間のうち、大きな割合を占めることになる。
1つの側面では、本発明は、処理の呼び出しにかかっていた時間の削減を図ることができるマルチプロセッサ用プログラム生成方法を提供することを目的とする。
一つの案では、コンピュータが、プロセスを実行するプロセッサおよびコアの位置情報と、メモリが搭載されたプロセッサの位置情報と、前記プロセスを実行するコアから前記メモリにアクセスする際に使用可能なインターフェイスの情報とを含む通信経路情報に基づいて、プロセス間で前記メモリを介してデータの送受信を実行するAPIに設定するパラメータを特定する処理を実行する。そして、前記コンピュータが、特定したパラメータで動作するAPIのコードを生成する処理を実行する。そして、前記コンピュータが、メイン処理プログラムにおいて、前記プロセス間でのデータの送受信の実行箇所に、生成したAPIのコードを埋め込む処理を実行する。
1つの側面では、本発明は、処理の呼び出しにかかっていた時間の削減を図ることができる。
図1は、実施例1におけるプログラム生成装置の一例を示す説明図である。 図2は、通信経路情報の一例を示す説明図である。 図3は、仮想通信情報の一例を示す説明図である。 図4は、タスクに関する物理位置情報の一例を示す説明図である。 図5は、メモリに関する物理位置情報の一例を示す説明図である。 図6は、マルチプロセッサ装置の一例を示す説明図である。 図7Aは、ポインタによるデータ転送の一例を説明するための図である。 図7Bは、ポインタによるデータ転送の一例を説明するための図である。 図7Cは、ポインタによるデータ転送の一例を説明するための図である。 図8は、タスク間のデータ転送の詳細な一例を示す説明図である。 図9Aは、コアアクセスによるデータ転送(Read Local)の一例を説明するための図である。 図9Bは、コアアクセスによるデータ転送(Read Local)の一例を説明するための図である。 図9Cは、コアアクセスによるデータ転送(Read Local)の一例を説明するための図である。 図10Aは、コアアクセスによるデータ転送(Write Local)の一例を説明するための図である。 図10Bは、コアアクセスによるデータ転送(Write Local)の一例を説明するための図である。 図10Cは、コアアクセスによるデータ転送(Write Local)の一例を説明するための図である。 図11Aは、シェアードメモリによるデータ転送の一例を説明するための図である。 図11Bは、シェアードメモリによるデータ転送の一例を説明するための図である。 図11Cは、シェアードメモリによるデータ転送の一例を説明するための図である。 図12Aは、DMAによるデータ転送の一例を説明するための図である。 図12Bは、DMAによるデータ転送の一例を説明するための図である。 図12Cは、DMAによるデータ転送の一例を説明するための図である。 図13Aは、SRIOによるデータ転送の一例を説明するための図である。 図13Bは、SRIOによるデータ転送の一例を説明するための図である。 図13Cは、SRIOによるデータ転送の一例を説明するための図である。 図14は、実施例1におけるプログラム生成装置の動作の一例を示すフローチャートである。 図15は、実施例2におけるプログラム生成装置の一例を示す説明図である。 図16は、実施例2におけるプログラム生成装置の動作の一例を示すフローチャートである。 図17は、プログラム生成装置の機能を実現するコンピュータの一例を示す説明図である。
以下に、本願の開示するマルチプロセッサ用プログラム生成方法の実施例を詳細に説明する。なお、本実施例により、開示技術が限定されるものではない。また、以下に示す各実施例は、矛盾を起こさない範囲で適宜組み合わせてもよい。
図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がこれらから各プログラムを取得して実行するようにしてもよい。
10 プログラム生成装置
11 通信経路情報格納部
12 特定部
13 生成部
14 埋め込み部

Claims (3)

  1. コンピュータが、
    プロセスを実行するプロセッサおよびコアの位置情報と、メモリが搭載されたプロセッサの位置情報と、前記プロセスを実行するコアから前記メモリにアクセスする際に使用可能なインターフェイスの情報とを含む通信経路情報に基づいて、プロセス間で前記メモリを介してデータの送受信を実行するインターフェイスを規定するAPI(Application Programming Interface)に設定するパラメータを特定し、
    特定したパラメータで動作するAPIのコードを生成し、
    メイン処理プログラムにおいて、前記プロセス間でのデータの送受信の実行箇所に、生成したAPIのコードを埋め込む
    処理を実行し、
    前記通信経路情報には、
    前記プロセスが前記メモリにアクセスする際の最小のデータサイズの情報が含まれ、
    前記コンピュータは、前記特定する処理において、
    前記最小のデータサイズが、予め定められた値以上の場合に、前記プロセスを実行するコアから前記メモリにアクセスする際に使用可能なインターフェイスの情報を、データ転送専用のハードウェアを用いたインターフェイスに変更し、変更されたインターフェイスを規定するAPIに設定するパラメータを特定することを特徴とするマルチプロセッサ用プログラム生成方法。
  2. 前記コンピュータが、
    前記プロセス間でのデータの送受信において前記プロセスがアクセスする前記メモリの情報を含む仮想通信情報と、
    前記プロセスを実行するプロセッサおよびコアの位置情報を含むタスクの物理位置情報と、
    前記メモリが搭載されたプロセッサの位置情報および前記メモリにアクセスする際に使用可能なインターフェイスの情報を含むメモリの物理位置情報と、
    を外部から受け付け、
    受け付けた前記仮想通信情報、前記タスクの物理位置情報、および前記メモリの物理位置情報に基づいて、前記通信経路情報を生成する
    処理をさらに実行することを特徴とする請求項1に記載のマルチプロセッサ用プログラム生成方法。
  3. 前記データ転送専用のハードウェアを用いたインターフェイスは、DMA(Direct Memory Access)であることを特徴とする請求項1または2に記載のマルチプロセッサ用プログラム生成方法。
JP2013268026A 2013-12-25 2013-12-25 マルチプロセッサ用プログラム生成方法 Active JP6217386B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013268026A JP6217386B2 (ja) 2013-12-25 2013-12-25 マルチプロセッサ用プログラム生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013268026A JP6217386B2 (ja) 2013-12-25 2013-12-25 マルチプロセッサ用プログラム生成方法

Publications (2)

Publication Number Publication Date
JP2015125503A JP2015125503A (ja) 2015-07-06
JP6217386B2 true JP6217386B2 (ja) 2017-10-25

Family

ID=53536188

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013268026A Active JP6217386B2 (ja) 2013-12-25 2013-12-25 マルチプロセッサ用プログラム生成方法

Country Status (1)

Country Link
JP (1) JP6217386B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11755382B2 (en) 2017-11-03 2023-09-12 Coherent Logix, Incorporated Programming flow for multi-processor system

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9250973B2 (en) * 2009-03-12 2016-02-02 Polycore Software, Inc. Apparatus and associated methodology of generating a multi-core communications topology
US8539456B2 (en) * 2009-06-30 2013-09-17 Intel Corporation Automatic conversion of MPI source code programs into MPI thread-based programs
US20120221621A1 (en) * 2009-10-15 2012-08-30 Tomoyoshi Sugawara Distributed system, communication means selection method, and communication means selection program

Also Published As

Publication number Publication date
JP2015125503A (ja) 2015-07-06

Similar Documents

Publication Publication Date Title
KR102300451B1 (ko) Protobuf 기반 프로젝트들에 대한 일반 검증 방법
KR102519580B1 (ko) 다수 코어 처리를 위한 고속 동기화 장벽 기술
TW201435574A (zh) 用於表示、指定和使用期限之方法、設備及系統
WO2017084313A1 (zh) 文件下载方法、装置和电子设备
US9043806B2 (en) Information processing device and task switching method
US10102159B2 (en) Method of achieving low write latency in a data storage system
US20160117154A1 (en) Automated software include graph and build environment analysis and optimization in compiled language
JP6998991B2 (ja) 情報処理用方法及び装置
US20160103723A1 (en) System-on-chip verification
US9606923B2 (en) Information processing device with shared memory, memory order guarantee method using counters fence instructions in relation to cache-oriented requests, and recording medium storing program
US20200371827A1 (en) Method, Apparatus, Device and Medium for Processing Data
CN113312182B (zh) 一种云计算节点、文件处理方法及装置
TW201246068A (en) Methods and systems for mapping a function pointer to the device code
JP2007206933A (ja) 情報処理装置、情報処理装置におけるブートローダ生成方法およびプログラム転送方法
JP6217386B2 (ja) マルチプロセッサ用プログラム生成方法
KR101332839B1 (ko) 병렬 컴퓨팅 프레임워크 기반 클러스터 시스템의 호스트 노드 및 메모리 관리 방법
TWI650703B (zh) 在記憶體內之資料的非同步複製
US8806078B2 (en) Information processing device and program product
JP6740719B2 (ja) 情報処理装置、情報処理方法、およびプログラム
JP5293609B2 (ja) マルチプロセッサ並びにそのキャッシュ同期制御方法及びプログラム
US11481250B2 (en) Cooperative workgroup scheduling and context prefetching based on predicted modification of signal values
JP2007048019A (ja) エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム
JP2020140284A (ja) ベクトル演算処理装置、ベクトル演算処理装置による配列変数初期化方法、及び、ベクトル演算処理装置による配列変数初期化プログラム
JP6222079B2 (ja) 計算機システム、その処理方法、及びプログラム
EP4293502A1 (en) Processing unit, computing device and instruction processing method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160905

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170531

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170613

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170720

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170911

R150 Certificate of patent or registration of utility model

Ref document number: 6217386

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150