(57)【要約】【課題】非対称マルチプロセッサにおいて、少ないオーバヘッドで排他制御及び一貫性制御を行えるプログラムを生成するプログラム生成装置を提供する。【解決手段】プログラム生成装置１は、複数のプロセッサを含む非対称マルチプロセッサ上で実行され、OSのライブラリ３ｂを含むソースコード１１から実行モジュール１３を生成する。プログラム生成装置１は、各プロセッサ３０と、ライブラリ３ｂと、オブジェクトとの関係を定義するスコープ情報５１を参照して、スコープ情報５１と、各プロセッサ３０のキャッシュの有無の情報とに基づいて、各プロセッサについて、排他制御及び一貫性保持制御の少なくとも１つを行うライブラリプログラムを生成あるいは選択して、コンパイルすることによって、実行モジュールを生成する実行モジュール生成部３ａとを有する。【選択図】図２
2009193343.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサを含む非対称マルチプロセッサ上で実行され、OSのライブラリを含むソースコード形式のアプリケーションプログラムから実行モジュールを生成するプログラム生成装置であって、
各プロセッサと、前記ライブラリと、前記ライブラリが操作するオブジェクトとの関係を定義するスコープ情報を記憶するスコープ情報記憶部と、
前記アプリケーションプログラムを入力し、前記スコープ情報記憶部に記憶された前記スコープ情報を参照して得られた前記スコープ情報と、前記各プロセッサのキャッシュの有無の情報とに基づいて、前記各プロセッサについて、排他制御及び一貫性保持制御の少なくとも１つを行うライブラリプログラムを生成あるいは選択して、コンパイルすることによって、前記実行モジュールを生成する実行モジュール生成部と、
を有することを特徴とするプログラム生成装置。
【請求項２】
前記ライブラリプログラムが生成される場合、前記ライブラリプログラムは、予め用意されたテンプレートプログラムから生成されることを特徴とする請求項１に記載のプログラム生成装置。
【請求項３】
前記ライブラリプログラムが選択される場合、前記ライブラリプログラムは、前記排他制御及び一貫性保持制御の有無の組み合わせのパターンに応じて予め用意された複数のパターンプログラムの中から、選択されることを特徴とする請求項１に記載のプログラム生成装置。
【請求項４】
前記実行モジュール生成部は、前記スコープ情報から、前記オブジェクトが前記複数のプロセッサから操作されるか否かによって、前記各プロセッサについて、プロセッサ間の排他制御を行うか否かを判断することを特徴とする請求項１に記載のプログラム生成装置。
【請求項５】
複数のプロセッサを含む非対称マルチプロセッサ上で実行され、OSのライブラリを含むソースコード形式のアプリケーションプログラムから実行モジュールを生成するプログラム生成方法であって、
前記アプリケーションプログラムを入力し、
各プロセッサと、前記ライブラリと、前記ライブラリが操作するオブジェクトとの関係を定義するスコープ情報を参照し、
前記スコープ情報と、前記各プロセッサのキャッシュの有無の情報とに基づいて、前記各プロセッサについて、排他制御及び一貫性保持制御の少なくとも１つを行うライブラリプログラムを生成あるいは選択して、コンパイルすることによって、前記実行モジュールを生成することを特徴とするプログラム生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム生成装置及びプログラム生成方法に関し、特に、非対称なマルチプロセッサ上で動作するプログラムの生成装置及びその生成方法に関する。
【背景技術】
【０００２】
従来より、マルチプロセッサ向けオペレーティングシステムは、各プロセッサ上で実行中の全てのタスクに対して、全てのオブジェクトへの操作ができることを保証するように排他制御機能を有している。
【０００３】
そして、たとえ、それぞれのタスクからの各オブジェクトへの操作の特性、例えば、排他制御操作の回数、排他制御される対象であるプロセッサの分布、等の特性が、タスク間で大きく異なるという情報が既知の場合であったとしても、オペレーティングシステム（以下、OSという）は、その情報を活用してプロセッサごとに最適な排他制御を行なってはいない。
【０００４】
具体的には、例えば、マルチプロセッサ中、プロセッサによってはキャッシュを有しないものと有するものが混在するような場合であって、あるオブジェクトに対するアクセスがキャッシュを有するプロセッサのみしか行わない場合であっても、OSは全てのプロセッサに対して同一の手順を用いた排他制御をするため、キャッシュを有するプロセッサのキャッシュ機能は、その排他制御のためのオーバヘッドの影響を受けてアクセス動作が遅くなってしまうという問題がある。
【０００５】
また、全てのプロセッサからの操作を保障するため、排他制御の処理中に、tas命令等の冗長な機能を含める必要が生じる場合もある。さらに、プロセッサの特性に応じて互いに制御方法の異なる複数の排他制御方法を用いる方法も考えられる。
【０００６】
例えば、特開２００１−１８８６８５号公報及び特開平０９−２２３０３２号公報には、互いに特性の異なる複数の排他制御方法を用いることができるようにする方法の提案がされている。しかし、全てのプロセッサからの操作は引き続き保障されなければならないという制約は、依然として残るため、例えばあるプロセッサ上のタスクがオブジェクトを全く操作しないことが既知の場合であっても、その情報は活用されず、そのようなオブジェクトへの排他制御等を完全に割愛することができない。また、これらの提案にかかる技術においても、上述した非対称マルチプロセッサにおける動作の不均一性の問題も残る。さらに、複数の排他制御方法の中から最適な排他制御方法を実行中の負荷に応じて選択する方法の場合、その選択のためのオーバヘッドが増加するという問題がある。
【０００７】
ところで、プロセッサ間でのオブジェクトへの参照範囲を規定するスコープの情報を利用すれば、OSによるプロセッサ間での冗長な排他制御を無くすことが可能となり、さらに、OSは、プロセッサ固有の特性を活用した排他制御の方法及び一貫性制御の方法を選択することが可能となる。特に、プロセッサ間で機能等が互いに異なるような非対称マルチプロセッサの場合、例えば特定の処理に特化したプロセッサ等が含まれるようなマルチプロセッサの場合、各タスクの動作は不均一になり、あるオブジェクトへの操作回数があるタスクに偏る。さらに、複数のタスクの操作回数が互いに同じ場合であっても、複数のタスクによる操作タイミングが、互いに異なる特定のタイミングに集中して生じることもある。従って、このような場合、上述したスコープの情報はより有効に活用できる。
【０００８】
そこで、特開平０８−３２９０１９号公報には、プロセス毎の操作頻度が確定していた場合、複数のプロセスをプロセスグループとして扱うことにより冗長な排他制御を抑制する方法が提案されている。
【０００９】
しかし、その提案にかかる方法を採用しても、特性の異なる複数の排他制御の中から使用する排他制御を用いた場合のその選択のためのオーバヘッドが増加するという問題は依然として残る。さらに、データの一貫性制御機能も必要となる。
【特許文献１】特開２００１−１８８６８５号公報
【特許文献２】特開平０９−２２３０３２号公報
【特許文献３】特開平０８−３２９０１９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
そこで、本発明は、非対称マルチプロセッサにおいて、少ないオーバヘッドで排他制御及び一貫性制御を行えるプログラムを生成するプログラム生成装置及びプログラム生成方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の一態様によれば、複数のプロセッサを含む非対称マルチプロセッサ上で実行され、OSのライブラリを含むソースコード形式のアプリケーションプログラムから実行モジュールを生成するプログラム生成装置であって、各プロセッサと、前記ライブラリと、前記ライブラリが操作するオブジェクトとの関係を定義するスコープ情報を記憶するスコープ情報記憶部と、前記アプリケーションプログラムを入力し、前記スコープ情報記憶部に記憶された前記スコープ情報を参照して得られた前記スコープ情報と、前記各プロセッサのキャッシュの有無の情報とに基づいて、前記各プロセッサについて、排他制御及び一貫性保持制御の少なくとも１つを行うライブラリプログラムを生成あるいは選択して、コンパイルすることによって、前記実行モジュールを生成する実行モジュール生成部と、を有するプログラム生成装置を提供することができる。
【発明の効果】
【００１２】
本発明のプログラム生成装置によれば、非対称マルチプロセッサにおいて、少ないオーバヘッドで排他制御及び一貫性制御を行えるプログラムを生成することができる。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照して本発明の実施の形態を説明する。  
まず図１に基づき、本実施の形態に係わるシステムの構成を説明する。図１は、本実施の形態に係わるプログラム生成装置の構成を示す構成図である。プログラム生成装置１は、パーソナルコンピュータ（以下、PCという）等のコンピュータ装置２と、コンピュータ装置２に接続された記憶装置３とを有して構成されている。コンピュータ装置２は、表示装置２ａと中央処理装置（CPU）２ｂを含む。記憶装置３は、ソースプログラムから実行モジュールを生成する実行モジュール生成部３ａと、OSの有するライブラリプログラム群（以下、単にライブラリという）３ｂと、後述するスコープ情報が記憶されるスコープ情報記憶部３ｃとを有する。実行モジュール生成部３ａは、CPU２ｂにより読み出されて実行されるプログラムである。
【００１４】
プログラムを開発する者（以下、ユーザという）は、マルチプロセッサ上で実行されるソースコード形式のアプリケーションプログラムを記述し、このプログラム生成装置１に入力すると、プログラム生成装置１は、そのマルチプロセッサ上で実行可能な実行モジュール、すなわちオブジェクトプログラムを生成して出力する。ここでは、マルチプロセッサは、特定の処理に特化したプロセッサ等が含まれる複数のプロセッサを有する非対称マルチプロセッサである。本実施の形態のプログラム生成装置１により生成された実行モジュールは、非対称マルチプロセッサにおいて、各プロセッサにおける排他制御及び一貫性制御の機能のためのオーバヘッドが少なく実行され得るものである。ここでは、排他制御には、プロセッサ間の排他制御と、プロセッサ内の排他制御とを含む。
【００１５】
プログラムを開発するユーザは、自己のオリジナルなコードを記述するだけでなく、OSのライブラリを利用しながら、所望の目的を達成するプログラムを記述する。よって、ユーザの作成するアプリケーションプログラムは、OSのライブラリに含まれる複数のオブジェクトを含む。OSのライブラリに含まれるオブジェクトとしてのタスクとしては、関数等のタスクがあり、オブジェクトとしてのデータとしては、プロセッサ間での排他制御に利用されるセマフォ、メールボックス等のデータがある。
【００１６】
図２は、ユーザの記述したソースプログラムから、実行モジュールが生成される過程を説明するための図である。ユーザの記述したソースプログラム１１は、マルチプロセッサ上で実行されるアプリケーションプログラムであり、ライブラリ３ｂ中の複数のタスク等を含んで記述されている。すなわち、ユーザは、自己のオリジナルのコードを記述し、オリジナルの関数を定義しながら、アプリケーションプログラムを作成するだけでなく、さらにOSのライブラリも利用してアプリケーションプログラムを作成する。よって、ユーザの作成するアプリケーションプログラムに対応する実行モジュール１３は、OSの有するライブラリ３ｂを用いながら、実行される。図２に示すように、コンパイラの機能を有する実行モジュール生成部３ａは、アプリケーションプログラムであるソースプログラム１１を入力しコンパイルして、OSのライブラリ３ｂ中に複数のタスクTを含む実行モジュール１３を生成する。実行モジュール生成部３ａは、後述するように、スコープ情報記憶部３ｃのスコープ情報を参照して、実行モジュール１３を生成する。実行モジュール生成部３ａは、プログラム生成装置１のCPU２ｂにより実行されるプログラムである。
【００１７】
具体的には、図２は、ソースプログラム１１中には、ライブラリ３ｂ中のライブラリプログラムであるタスクＴ１ａ、Ｔ１ｂ、Ｔ２，Ｔ３，Ｔ４が含まれていることを示している。ライブラリ３ｂ中には、タスクＴ１ａに対応して、複数のタスクが設けられている。具体的には、タスクＴ１ａに対して、４つのパターンのタスク（以下、パターンタスクという）Ｔ１ａ（Ｐ１）、Ｔ１ａ（Ｐ２）、Ｔ１ａ（Ｐ３）、Ｔ１ａ（Ｐ４）がライブラリ３ｂ中に設けられている。同様に、他のタスクＴ１ｂ、Ｔ２等に対しても、それぞれ４つのパターンタスクＴ１ｂ（Ｐ１）からＴ１ｂ（Ｐ４）、Ｔ２（Ｐ１）からＴ２（Ｐ４）等が、ライブラリ３ｂ中に設けられている。後述するように、実行モジュール生成部３ａは、スコープ情報記憶部３ｃに記憶されたスコープ情報と各プロセッサのキャッシュの有無情報を参照して、そのスコープ情報とキャッシュの有無情報に基づいて、ライブラリ３ｂ中の各タスクＴの複数のパターンタスクの中から適切なパターンタスクを選択し、その選択したパターンタスクを用いてコンパイルすることによって、実行モジュール１３を生成する。
【００１８】
すなわち、各タスクに対応して、ライブラリ３ｂには、複数のパターンタスクのプログラムが予め用意されている。ここでは、タスクＴ１ａについては、パターンＰ１に対応するパターンタスクＴ１ａ（Ｐ１）、パターンＰ２に対応するパターンタスクＴ１ａ（Ｐ２）、パターンＰ３に対応するパターンタスクＴ１ａ（Ｐ３）、パターンＰ４に対応するパターンタスクＴ１ａ（Ｐ４）の４つのパターンタスクが予め準備されている。同様に、タスクＴ１ｂについては、パターンＰ１に対応するパターンタスクＴ１ｂ（Ｐ１）、パターンＰ２に対応するパターンタスクＴ１ｂ（Ｐ２）、パターンＰ３に対応するパターンタスクＴ１ｂ（Ｐ３）、パターンＰ４に対応するパターンタスクＴ１ｂ（Ｐ４）の４つのパターンタスクが予め用意されている。
【００１９】
各パターンは、後述するように、そのタスクＴが実行されるプロセッサにおいて、プロセッサ内とプロセッサ間の排他制御の有無、及びキャッシュの有無の組み合わせに応じて、予め決められたパターンである。そして、複数のパターンにそれぞれ対応する複数のパターンタスクＴは、プロセッサ内とプロセッサ間の排他制御の有無、キャッシュの有無の組み合わせのパターンに応じて、必要な排他制御機能と一貫性制御機能を実現するように、排他制御機能と一貫性制御機能の少なくとも１つを行う、予め作成されたパターンプログラムである。
【００２０】
次に、アプリケーションプログラムが実行されるマルチプロセッサについて説明する。  
図３は、複数の、ここでは４個のプロセッサを含むマルチプロセッサ２１と、共有メモリとしてのSDRAM２２とからなるプロセッサシステムの構成を示すブロック図である。マルチプロセッサ２１とSDRAM２２とは、１チップ上に形成されていてもよいし、互いに別のチップ上に形成されていてもよい。
【００２１】
マルチプロセッサ２１は、４つのプロセッサ３０A、３０B、３０C、３０D（以下、纏めて複数のあるいは一つのプロセッサを指すときはプロセッサ３０という）を含み、４つのプロセッサ３０は、内部バス２３により互いに接続されている。マルチプロセッサ２１は、非対称マルチプロセッサである。マルチプロセッサ２１は、SDRAM２２と信号ライン２４により接続されている。
【００２２】
プロセッサ３０Aは、プロセッサ間でオブジェクトの排他制御を行うためのtas命令及びipi命令の実行機能を有する第１の排他制御部を有さないが、プロセッサ内でタスク間で排他制御を行うためのei命令及びdi命令の実行機能を有する第２の排他制御部３２Aと、キャッシュメモリ３４Aのための、データの一貫性保持制御を行うためのキャッシュ命令機能を有する一貫性保持制御部３３Aとを有する。
【００２３】
プロセッサ３０Bは、第１の排他制御部３１Bと、一貫性保持制御部３３Bとを有するが、キャッシュメモリを有さないので、一貫性保持制御部３３Bは設けられているが、使用されない。よって、一貫性保持制御部３３Bは無くてもよい。
【００２４】
プロセッサ３０Cと３０Dは、それぞれ、第１の排他制御部３１C、３１Dと、一貫性保持制御部３３C、３３Dと、キャッシュメモリ３４C、３４Dを含んでいる。
【００２５】
各第１の排他制御部３１B、３１C、３１D（以下、纏めて複数のあるいは一つの第１の排他制御部を指すときは第１の排他制御部３１という）、第２の排他制御部３２A（以下、複数のあるいは一つの第２の排他制御部を指すときは第２の排他制御部３２という）、及び一貫性保持制御部３３A、３３B、３３C、３３D（以下、纏めて複数のあるいは一つの一貫性保持制御部を指すときは一貫性保持制御部３３という）は、それぞれハードウエア回路で形成されている。キャッシュメモリ３４A、３４C、３４D（以下、纏めて複数のあるいは一つのキャッシュメモリを指すときはキャッシュメモリ３４という）も、それぞれハードウエア回路で形成されている。
【００２６】
各第1の排他制御部３１は、tas/ipi命令による、プロセッサ間でオブジェクトの排他制御を行なうための機構部である。また、第２の排他制御部３２は、ei/di命令による、タスク間での排他制御するための機構部である。
【００２７】
各一貫性保持制御部３３は、キャッシュ命令による、キャッシュ３４とSDRAM２２との間でのデータの一貫性を保持するための制御を行うための機構部である。
【００２８】
オブジェクトとしての各タスクTと各データは、SDRAM２２に記憶されており、各プロセッサ３０は、必要なタスクとデータをSDRAM２２から読み出して実行する。
【００２９】
図４は、マルチプロセッサ２１上で動作するソフトウエアプログラムの構成を示すブロック図である。マルチプロセッサ２１のハードウエア(H/W)４１上で、OS４２が動作し、そのOS４２上で、アプリケーションプログラム（AP）４３が動作する。OS４２も、それぞれが並行処理単位である複数のタスクTから構成され、さらに、各タスクTが操作するデータのオブジェクト（セマフォ、メールボックスなども含む）も有している。上述したように、アプリケーションプログラム４３は、オリジナルなプログラムだけでなく、OS４２のライブラリ３ｂに含まれる複数のタスクTも実行するように記述されている。
【００３０】
図５は、４つのプロセッサ３０において実行される、OS４２のライブラリ３ｂ中のタスクTが、複数のオブジェクトに対して操作、例えばリード、ライトの操作を行う場合を説明するための図である。  
例として、以下のような条件で各タスクTが動作するものとする。ここでは、説明を簡単にするために、OSのライブラリ３ｂ中の５つのタスクが、４つのオブジェクトを操作する場合を例として説明する。
【００３１】
アプリケーションプログラム（AP）は、OS４２のライブラリ３ｂ中の複数のタスクT1a,T1b,T2,T3,T4を含む。タスクT1a,T1bは、プロセッサ３０Aにおいて実行されるプログラムであり、タスク1a,1bは、オブジェクト１を操作する。タスクT2は、プロセッサ３０Bにおいて実行されるプログラムであり、タスクT2は、オブジェクト３を操作する。タスクT3は、プロセッサ３０Cにおいて実行されるプログラムであり、タスクT3は、オブジェクト２と３を操作する。タスクT4は、プロセッサ３０Dにおいて実行されるプログラムであり、タスクT4は、オブジェクト２、３と４を操作する。
【００３２】
上述したように、プロセッサ３０Aは、キャッシュメモリ３４Aを有するが、第１の排他制御部は有しない。プロセッサ３０Bは、tas命令等の実行機能を有する第１の排他制御３１Bは有するが、キャッシュメモリを有さず、一貫性保持制御部３３Bを有していても使用されない。プロセッサ３０C，３０Dは、それぞれ、キャッシュメモリ３４C、３４Dと、第１の排他制御部３１C、３１Dと、キャッシュ命令等の実行機能を有する一貫性保持制御部３３C、３３Dとを有する。例えば、プロセッサ３０Aは、映像データ等のコーデック専用のプロセッサであり、他のプロセッサ３０B、３０C、３０Dは、通常の処理のプロセッサである。
【００３３】
以上のように、ユーザは、上述した構成のマルチプロセッサ２１において、上述したようなOS４２のライブラリ３ｂ中の複数のタスクTを実行するアプリケーションプログラムを記述したとする。
【００３４】
ユーザは、アプリケーションプログラムを作成すると、次に、スコープを定義、すなわち記述する。  
図６は、スコープの記述例を説明するための図である。ここでは、スコープ情報記憶部３ｃに記憶されるスコープ情報５１は、各タスクと各プロセッサの関係と、各オブジェクトと各プロセッサの関係とを定義している。
【００３５】
具体的には、「create_task(“タスク１ａ”, “プロセッサ３０A”) 」は、プロセッサ３０Aは、タスク１ａを実行するというタスクの定義を示す。同様に、「create_task(“タスク１ｂ”, “プロセッサ３０A”) 」は、プロセッサ３０Aは、タスク１ｂを実行するというタスクの定義を示す。「create_task(“タスク２”, “プロセッサ３０B”) 」は、プロセッサ３０Bは、タスク２を実行するというタスクの定義を示す。「create_task(“タスク３”, “プロセッサ３０C”) 」は、プロセッサ３０Cは、タスク３を実行するというタスクの定義を示す。「create_task(“タスク４”, “プロセッサ３０D”) 」は、プロセッサ３０Dは、タスク４を実行するというタスクの定義を示す。
【００３６】
さらに、「create_object(“オブジェクト１”,{“プロセッサ３０A”}) 」は、オブジェクト１は、プロセッサ３０Aから操作されるというオブジェクトの定義を示す。同様に、「create_object(“オブジェクト２”,{“プロセッサ３０C”,”プロセッサ３０D”}) 」は、オブジェクト２は、プロセッサ３０Cと３０Dから操作されるというオブジェクトの定義を示す。「create_object(“オブジェクト３”,{“プロセッサ３０B”,”プロセッサ３０C,”プロセッサ３０D”}) 」は、オブジェクト３は、プロセッサ３０B，３０C及び３０Dから操作されるというオブジェクトの定義を示す。「create_object(“オブジェクト４”,{“プロセッサ３０D”}) 」は、オブジェクト４は、プロセッサ３０Dから操作されるというオブジェクトの定義を示す。
【００３７】
スコープ情報５１は、図５において点線で示した関係を規定すなわち定義している。従って、タスクとオブジェクトの関係も間接的に定義されていることになる。ユーザは、アプリケーションプログラムを作成しているときに、スコープ情報５１において定義されるべき内容あるいは関係を知っているので、スコープ情報５１を記述することができる。
【００３８】
ここで、パターン情報について説明する。図７は、パターン情報の構成例を示す図である。パターン情報は、テーブル形式のデータである。図７のパターン情報テーブル５２は、各プロセッサにおける、第１の排他制御部、第２の排他制御部及び一貫性保持制御部の有無の組み合わせのパターンを定義するテーブルである。パターン情報テーブル５２は、パターン毎に、tas/ipi命令機能の有無、ei/di命令機能の有無、及びキャッシュ命令機能の有無が示されている。
【００３９】
図７に示すように、パターンP1は、指定された１以上のタスクをプロセッサが実行するために、tas/ipi命令機能を利用せず、ei/di命令機能は利用し、かつキャッシュ命令機能を利用するパターンであることが示されている。  
パターンP2は、指定された１以上のタスクをプロセッサが実行するために、tas/ipi命令機能を利用し、プロセッサ間での排他制御を行うことができるようにしているが、ei/di命令機能は利用せず、またキャッシュ命令機能を利用するパターンであることが示されている。  
パターンP3は、指定された１以上のタスクをプロセッサが実行するために、tas/ipi命令機能とei/di命令機能を利用せず、さらにキャッシュ命令機能も利用しないパターンであることが示されている。  
パターンP4は、指定された１以上のタスクをプロセッサが実行するために、tas/ipi命令機能を利用し、ei/di命令機能を利用せず、またキャッシュ命令機能を利用しないパターンであることが示されている。
【００４０】
ちなみに、これら４つのパターン間でタスクの処理速度を比較すると、パターンP1の処理速度が最も速い。これは、パターンP1の場合、キャッシュ命令機能があるため速いだけでなく、ei/di命令機能を有して、tas/ipi命令機能を有していないからである。  
パターンP2の場合、キャッシュ命令機能はあっても、ei/di命令機能よりもオーバヘッドが大きいtas/ipi命令機能を有しているため、パターンP1よりも処理速度は遅い。  
パターンP3は、キャッシュ命令機能はないので、パターンP2よりも処理速度は遅い。パターンP3の場合、ei/di命令機能もtas/ipi命令機能も有していないので、パターンP2よりも処理速度は遅い。  
パターンP4の場合、キャッシュ命令機能はなく、さらにei/di命令機能もないが、tas/ipi命令機能があるため、パターンP3よりも、処理速度は遅い。
【００４１】
ユーザが、アプリケーションプログラムを作成し、上述したスコープ情報をスコープ情報記憶部３ｃに記憶した後に、以下に説明する処理を実行させることによって、ユーザは、各プロセッサにおいて実行されるプログラムが少ないオーバヘッドで排他制御及び一貫性制御を行えるプログラムを作成することができる。
【００４２】
図８は、プログラム生成装置１における実行モジュール生成部３ａの処理の流れの例を示すフローチャートである。  
ユーザは、作成したアプリケーションプログラムのソースコード１１とスコープ情報５１を準備して所定のコマンドを、プログラム生成装置１に与えると、図８の処理が実行される。なお、キャッシュの有無の情報は、マルチプロセッサ２１に関する情報の一部として、記憶装置３の所定の記憶領域に記憶されている。
【００４３】
まず、プログラム生成装置１のCPU２ｂは、スコープ情報記憶部３ｃに記憶された、図６に示すスコープ情報５１を参照する（ステップS1）。  
そして、CPU２ｂは、スコープ情報５１に基づいて、プロセッサ内での排他制御の必要性をチェックする（ステップS2）。言い換えると、プロセッサ毎に、プロセッサ内に複数のタスクが存在するか否かが判断される。例えば、スコープ情報５１を参照すると、プロセッサ３０Aでは、２つのタスクＴ１ａ，Ｔ１ｂが実行されるため、ei/di制御機能、すなわちプロセッサ内での排他制御が必要と判断される。すなわち、各プロセッサ内での排他制御を行うと判断される。他方、他のプロセッサ３０Ｂ、３０Ｃ、３０Ｄでは、複数のタスクは実行されないので、ei/di制御機能、すなわちプロセッサ内での排他制御が不必要と判断される。すなわち、各プロセッサ内での排他制御を行わないと判断される。
【００４４】
次に、CPU２ｂは、スコープ情報５１に基づいて、プロセッサ間での排他制御の必要性をチェックする（ステップS3）。言い換えると、オブジェクト毎に、オブジェクトに対して複数のプロセッサから参照等の操作がされるか否かが判断される。例えば、スコープ情報５１を参照すると、プロセッサ３０Aでは、２つのタスクＴ１ａ，Ｔ１ｂは、オブジェクト１のみを参照して実行され、かつそのオブジェクト１は他のタスクから操作されないので、tas/ipi制御機能、すなわちプロセッサ間での排他制御は不必要と判断される。すなわち、各プロセッサ間での排他制御を行わないと判断される。他方、他のプロセッサ３０Ｂ、３０Ｃでは、それぞれのタスクが操作するオブジェクトは他のタスクからも操作されるので、tas/ipi制御機能、すなわちプロセッサ間での排他制御が必要と判断される。すなわち、各プロセッサ間での排他制御を行うと判断される。また、プロセッサ３０Dでは、そのタスクが操作するオブジェクトは、他のタスクから操作されないので、tas/ipi制御機能、すなわちプロセッサ間での排他制御が必要でないと判断される。
【００４５】
そして、CPU２ｂは、マルチプロセッサ２１についての基本情報が記憶された記憶領域（図示せず）を参照して、各プロセッサのキャッシュの有無をチェックする（ステップS4）。上述したように、３つのプロセッサ３０Ａ、３０Ｃ、３０Ｄは、それぞれキャッシュ３４Ａ、３４Ｃ、３４Ｄを有していると判断される。
【００４６】
なお、ステップS4において、スコープ情報も加味してキャッシュの有無を判定するようにしてもよい。すなわち、プロセッサと関連付けられたオブジェクトについて、そのオブジェクトと関連付けられた全てのプロセッサがキャッシュを有するか否かによって、キャッシュの有無が判定される。例えば、オブジェクト１に関連付けられたプロセッサは、プロセッサ３０Aのみであり、そのプロセッサ３０Aはキャッシュ２３Aを有する。オブジェクト３に関連付けられたプロセッサは、プロセッサ３０B、３０C、３０Dであるが、全てにキャッシュはない。オブジェクト２に関連付けられたプロセッサは、プロセッサ３０C、３０Dであり、プロセッサ３０C、３０Dは、それぞれキャッシュ２３C、２３Dを有する。オブジェクト４に関連付けられたプロセッサは、プロセッサ３０Dのみであり、そのプロセッサ３０Dはキャッシュ２３Dを有する。以上のように、スコープ情報から、ステップS4と同様の結果を得ることができる。
【００４７】
さらになお、上記の手順の中で、判定基準を「プロセッサと関連付けられたオブジェクトについて、そのオブジェクトと関連付けられた全てのプロセッサがキャッシュを有するか否か」としたが、「プロセッサと関連付けられたオブジェクトについて、そのオブジェクトと関連付けられた全てのプロセッサのうちの、多数のプロセッサがキャッシュを有するか否か」としてもよい。マルチプロセッサ２１では、一貫性保持処理の追加による性能上の不利がキャッシュ活用による性能上の有利を上回る場合に、前者の判定基準を用いると後者の判定基準より有効なパターンを決定できる。一方、マルチプロセッサ２１では、キャッシュ活用による性能上の有利が一貫性保持処理の追加による性能上の不利を上回る場合に、後者の判定基準を用いると前者の判定基準より有利なパターンを決定できる。
【００４８】
続いて、CPU２ｂは、パターン情報テーブル５２を参照し、上述したステップS2からS4のチェック結果に基づいて、各プロセッサのパターンを決定する（ステップS5）。例えば、プロセッサ３０Aは、tas/ipi命令機能を有さず、ei/di命令機能とキャッシュ命令機能を有するので、図７におけるパターンP1であると決定される。同様に、プロセッサ３０Bは、tas/ipi命令機能を有し、ei/di命令機能とキャッシュ命令機能を有しないので、図７におけるパターンP4であると決定され、プロセッサ３０C、３０Dは、tas/ipi命令機能とキャッシュ命令機能を有し、ei/di命令機能を有しないので、図７におけるパターンP2であると決定される。
【００４９】
以上のようにして、各プロセッサのパターンを決定した後に、CPU２ｂは、各プロセッサで実行される、OS４２のライブラリ３ｂ中の各タスクについて、それぞれについて決定されたパターンに対応するパターンタスクを選択して、コンパイルを実行する（ステップS6）。
【００５０】
例えば、プロセッサ３０Aで実行されるタスクT１ａは、プロセッサ３０ＡがパターンＰ１であるので、ライブラリ３ｃ中のタスクＴ１ａに関する４つのパターンタスクＴ１ａ（Ｐ１）、Ｔ１ａ（Ｐ２）、Ｔ１ａ（Ｐ３）、Ｔ１ａ（Ｐ４）の中から、パターンＰ１に対応するパターンタスクＴ１ａ（Ｐ１）が選択されて、コンパイル時に利用される。タスクＴ１ｂについても、タスクＴ１ａと同様の理由から、パターンＰ１に対応するパターンタスクＴ１ｂ（Ｐ１）が選択されて、コンパイル時に利用される。
【００５１】
プロセッサ３０Bで実行されるタスクT２は、プロセッサ３０BがパターンＰ４であるので、ライブラリ３ｃ中のタスクＴ２に関する４つのパターンタスクＴ２（Ｐ１）、Ｔ２（Ｐ２）、Ｔ２（Ｐ３）、Ｔ２（Ｐ４）の中から、パターンＰ４に対応するパターンタスクＴ２（Ｐ４）が選択されて、コンパイル時に利用される。
【００５２】
プロセッサ３０cで実行されるタスクT３は、プロセッサ３０CがパターンＰ２であるので、ライブラリ３ｃ中のタスクＴ３に関する４つのパターンタスクＴ３（Ｐ１）、Ｔ３（Ｐ２）、Ｔ３（Ｐ３）、Ｔ３（Ｐ４）の中から、パターンＰ２に対応するパターンタスクＴ３（Ｐ２）が選択されて、コンパイル時に利用される。タスクＴ４についても、タスクＴ３と同様の理由から、パターンＰ２に対応するパターンタスクＴ４（Ｐ２）が選択されて、コンパイル時に利用される。
【００５３】
以上のようにして、それぞれがライブラリプログラムである、選択された複数のパターンタスクは、コンパイルされ、リンクされて、１つの実行モジュールが生成される。  
従って、各タスクが各オブジェクトを操作するときに必要な排他制御および一貫性制御のみを実行するので、生成された実行モジュール１３は、各プロセッサ３０において、実行されるタスクが少ないオーバヘッドで排他制御及び一貫性制御の少なくとも１つを行うことになる。例えば、プロセッサ３０Aは、コーデック専用のプロセッサであり、パターン１のパターンタスクが利用されるため、他のプロセッサのオーバヘッド処理の影響を受けることなく、自己の処理を実行する。他のプロセッサは、それぞれ、必要なオーバヘッド処理を実行する、各パターンに対応するパターンタスクを利用して、自己の処理を実行する。
【００５４】
さらに、例えば、プロセッサ３０Ｂとプロセッサ３０Ｃとプロセッサ３０Ｄとは協調して動作する画像処理装置であり、プロセッサ３０Ｂがカメラ・ディスプレイ処置からのデータ入出力処理を行い、転送されたデータを、プロセッサ３０Ｃとプロセッサ３０Ｄとでエンコード・デコードするような場合、プロセッサ３０Ｃと３０Ｄの間ではパターンＰ２によるキャッシュを経由した高速な協調動作が可能となる。
【００５５】
なお、以上説明した例は、パターンタスクが４つ（Ｐ１、Ｐ２、Ｐ３、Ｐ４）ある場合であるが、さらに多くの組み合わせの中から選択できるようにしてもよい。  
図９は、例えば、あるセマフォについて、８つのパターンタスクが用意されることを説明するための図である。
【００５６】
図９に示すように、パターン情報テーブル５２Ａでは、パターンＰ１からＰ８が定義されている。パターンＰ１からＰ４は、キャッシュ命令を利用し、パターンＰ５からＰ８は、キャッシュ命令を利用しない。パターンＰ１からＰ４の中で、パターンＰ１，Ｐ２がtas/ipi命令機能を有さず、パターンＰ５からＰ８の中で、パターンＰ５，Ｐ６がtas/ipi命令機能を有さない。ei/di命令機能を、パターンＰ１、Ｐ３、Ｐ５、Ｐ７は有していない。
【００５７】
これら８つのパターンに対応して、セマフォのパターンタスクを８つ用意しておき、各プロセッサの特性に応じて、最適なセマフォのパターンタスクが選択されてコンパイルされる。
【００５８】
図９のパターン情報テーブル５２Ａの場合、処理速度は、パターンＰ１が最も速く、パターンＰ２からＰ８の順に、遅くなっていく。
【００５９】
さらになお、上述した例では、各タスクに対応するパターンタスクは予め複数用意され、その複数のパターンタスクの中から、決定されたパターンに対応するパターンタスクが選択されるが、各タスクについて、予め全てのパターンに対応可能な機能を有する、テンプレートとしての１つのタスクだけを用意しておき、そのテンプレートのタスクから、決定されたパターンに対応するタスクを生成するようにしてもよい。
【００６０】
図１０は、図８におけるステップS5の後であって、ステップS6のコンパイル処理の前において実行されるパターンに対応するタスクすなわちライブラリプログラムを生成する処理の例を示すフローチャートである。すなわち、図１０の処理は、コンパイル処理の前において、テンプレートのタスクプログラムから、決定されたパターンに基づいて、そのパターンに対応するタスクを生成する処理である。
【００６１】
まず、タスクのテンプレートのプログラムを読み出す（ステップS11）。そして、決定されたパターンに合致する部分のみを抽出する（ステップS12）。その結果、テンプレートのプログラムの中から、不必要な部分は除去される。そして、抽出した部分のデータを出力する（ステップS13）。出力されたデータは、テンプレートに含まれる余分な機能を除いたデータである。
【００６２】
すなわち、ライブラリ３ｂに各タスクに対応するテンプレートを予め用意しておき、コンパイルする前に、決定されたパターンに合致するように、テンプレートから必要な部分のみを抽出してコンパイル処理に利用される。このようにタスクを生成する方法によっても、パターンに合致したタスクを得ることができる。
【００６３】
以上のように、上述した実施の形態にかかるプログラム生成装置によれば、タスクと、オブジェクトと、プロセッサとの関連をスコープ情報として定義することにより、マルチプロセッサ上で動作するOSがそのスコープ情報の定義に応じて、最適な排他制御と、一貫性保持制御とを組み合わせて、実行モジュールを生成することができる。よって、非対称マルチプロセッサにおいて、各プロセッサにおいて少ないオーバヘッドで排他制御及び一貫性制御を行えるプログラムを生成することができる。
【００６４】
本明細書における各「部」は、実施の形態の各機能に対応する概念的なもので、必ずしも特定のハードウエアやソフトウエア・ルーチンに１対１には対応しない。従って、本明細書では、以上のように、実施の形態の各機能を有する仮想的回路ブロック（部）を想定して実施の形態を説明した。また、本実施の形態における各手順の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、あるいは実行毎に異なった順序で実行してもよい。
【００６５】
なお、以上説明した動作を実行するプログラムは、コンピュータプログラム製品として、フレキシブルディスク、ＣＤ−ＲＯＭ等の可搬媒体や、ハードディスク等の記憶装置等に、その全体あるいは一部が記録され、あるいは記憶されている。そのプログラムがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明のプログラム生成装置を実現することができる。
【００６６】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【００６７】
【図１】本発明の実施の形態に係わるプログラム生成装置の構成を示す構成図である。
【図２】本発明の実施の形態に係わる、ユーザの記述したソースプログラムから、実行モジュールが生成される過程を説明するための図である。
【図３】本発明の実施の形態に係わる、マルチプロセッサと、共有メモリとしてのSDRAMとからなるプロセッサシステムの構成を示すブロック図である。
【図４】本発明の実施の形態に係わる、マルチプロセッサ上で動作するソフトウエアプログラムの構成を示すブロック図である。
【図５】本発明の実施の形態に係わる、４つのプロセッサにおいて実行される、OSのライブラリ中のタスクが、複数のオブジェクトに対して操作、例えばリード、ライトの操作を行う場合を説明するための図である。
【図６】本発明の実施の形態に係わる、スコープの記述例を説明するための図である。
【図７】本発明の実施の形態に係わる、パターン情報の構成例を示す図である。
【図８】本発明の実施の形態に係わる、プログラム生成装置１における実行モジュール生成部の処理の流れの例を示すフローチャートである。
【図９】本発明の実施の形態に係わる、あるセマフォについて、８つのパターンタスクが用意されることを説明するための図である。
【図１０】本発明の実施の形態に係わる、パターンに対応するタスクを生成する処理の例を示すフローチャートである。
【符号の説明】
【００６８】
１  プログラム生成装置、２  コンピュータ装置、２ａ  表示装置、２ｂ  ＣＰＵ、３  記憶装置、３ａ  実行モジュール生成部、３ｂ  ライブラリ、３ｃ  スコープ情報記憶部、１１  ソースプログラム、１３  実行モジュール、２１  マルチプロセッサ、２２  ＳＤＲＡＭ、２３  内部バス、２４  信号ライン、  ３０Ａ，３０Ｂ，３０Ｃ，３０Ｄ  プロセッサ、３１Ｂ，３１Ｃ，３１Ｄ  第１の排他制御部、３２Ａ  第２の排他制御部、３３Ａ，３３Ｂ，３３Ｃ，３３Ｄ  一貫性保持制御部、３４Ａ，３４Ｃ，３４Ｄ  キャッシュメモリ、４１  ハードウエア、４２  ＯＳ、４３  アプリケーションプログラム、５１  スコープ情報、５２，５２Ａ  パターン情報テーブル
【図１】
2009193343.tif 000003
【図２】
2009193343.tif 000004
【図３】
2009193343.tif 000005
【図４】
2009193343.tif 000006
【図５】
2009193343.tif 000007
【図６】
2009193343.tif 000008
【図７】
2009193343.tif 000009
【図８】
2009193343.tif 000010
【図９】
2009193343.tif 000011
【図１０】
2009193343.tif 000012