(57)【特許請求の範囲】
【請求項１】
シングルプロセッサ用のソースプログラムを複数のプロセッサを有するマルチプロセッサ装置用のプログラムに変換するタスク分配プログラムにおいて，
メモリ内に格納された定義ファイルであって，前記ソースプログラムの複数の異なるタスクのそれぞれに対して前記マルチプロセッサ装置のいずれかのプロセッサで実行させるかを前記プロセッサの負荷バランスに応じて対応付けた定義ファイルを参照して，前記ソースプログラムが実行用のオブジェクトコードに変換される前の状態で，当該ソースプログラムの複数の異なるタスクを変更せずに前記複数のプロセッサに順次前記プロセッサの負荷バランスに応じて分配し，プロセッサごとの分配された前記タスクをそれぞれ有し前記複数のプロセッサに分離された複数の分配ソースプログラムを生成し，前記分配されたタスクに，当該タスクによる処理対象タスクのプロセッサＩＤを引数として追加するタスク分配手段をコンピュータに構築させ，
前記タスク分配手段が生成した複数の分配ソースプログラムは，コンパイラ手段によって前記複数のプロセッサのオブジェクトコードにそれぞれ変換され，リンカ手段によって前記複数のプロセッサのオブジェクトコードに，対応するプロセッサのライブラリコードがリンクされ実行可能なオブジェクトコードにそれぞれ変換されるタスク分配プログラム。
【請求項２】
シングルプロセッサ用のソースプログラムを複数のプロセッサを有するマルチプロセッサ装置用に変換するタスク分配装置において，
前記ソースプログラムの複数の異なるタスクのそれぞれに対して前記マルチプロセッサ装置のいずれかのプロセッサで実行させるかを前記プロセッサの負荷バランスに応じて対応付けた定義ファイルを格納する定義ファイルメモリと，
前記定義ファイルを参照して，前記ソースプログラムが実行用のオブジェクトコードに変換される前の状態で，当該ソースプログラムの複数の異なるタスクを変更せずに前記複数のプロセッサに順次前記プロセッサの負荷バランスに応じて分配し，プロセッサごとの分配された前記タスクをそれぞれ有し前記複数のプロセッサに分離された複数の分配ソースプログラムを生成し，前記分配されたタスクに，当該タスクによる処理対象タスクのプロセッサＩＤを引数として追加するタスク分配手段とを有し，
前記タスク分配手段が生成した複数の分配ソースプログラムは，コンパイラ手段によって前記複数のプロセッサのオブジェクトコードにそれぞれ変換され，リンカ手段によって前記複数のプロセッサのオブジェクトコードに，対応するプロセッサのライブラリコードがリンクされ実行可能なオブジェクトコードにそれぞれ変換されるタスク分配装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，シングルプロセッサ用に開発されたソースプログラムをマルチプロセッサを有するプロセッサ装置用に移植する時に利用するタスク分配プログラム及びタスク分配装置に関する。
【背景技術】
【０００２】
近年のプロセッサ装置は，複数のプロセッサを内蔵するプロセッサチップまたはプロセッサチップセットで構成される。マルチプロセッサにすることでタスクの実行時間を短くすることができる。そのため，近年において，従来のシングルプロセッサ装置をマルチプロセッサを有するプロセッサ装置に置き換えてよりパワフルなプロセッサシステムにすることが行われている。
【０００３】
特許文献１には，複数のプロセッサ（ＣＰＵ）によって一つのソースプログラムを実行するマルチプロセッサシステムが記載されている。この特許文献１によれば，複数のプロセッサがバスなどのプロセッサ間結合装置によって結合され，バスには共有メモリ及び入出力制御装置が接続される。そして，タスク割付プログラムがインストールされ，そのタスク割付プロセッサがソースプログラムの複数のタスクをいずれかのプロセッサに割り付けて，プログラムの実行効率が向上するか否かを判定し，実行効率が向上するようにタスクの割付を行う。
【特許文献１】特開２００４−１７１２３４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら，特許文献１のマルチプロセッサシステムは，例えば複数のパーソナルコンピュータにソースプログラムの複数のタスクを割り付けするものであり，プロセッサチップやプロセッサチップセットなどのように各プロセッサの専用のメモリ内に実行すべきプログラムを格納する構成ではない。マルチプロセッサチップやチップセットでは，各プロセッサが専用のメモリ空間を有し，それぞれのメモリ空間内のプログラムコードを実行するので，共通のソースプログラムのタスクを順番に割り付けて実行する方法は適切ではない。
【０００５】
さらに，特許文献１のマルチプロセッサシステムでは，共通のソースプログラムの実行中に，ソースプログラム内のタスクを複数のプロセッサに適切に割付を行うものである。このようにソースプログラムの実行時にタスク割付を並行して行うと，プログラムの実行時間が長くなり，プロセッサチップやプロセッサチップセットに適した方法とは言えない。
【０００６】
そこで，本発明の目的は，シングルプロセッサ用に開発されたソースプログラムをマルチプロセッサを有するプロセッサ装置用に簡単に移植することができるタスク分配プログラム及びタスク分配装置を提供することにある。
【課題を解決するための手段】
【０００７】
上記の目的を達成するために，本発明の第１の側面によれば，シングルプロセッサ用のソースプログラムを複数のプロセッサを有するマルチプロセッサ装置用のプログラムに変換するタスク分配プログラムにおいて，メモリ内に格納された定義ファイルであって，前記ソースプログラムのタスクに対して前記マルチプロセッサ装置のいずれかのプロセッサを対応付けた定義ファイルを参照して，前記ソースプログラムを，当該ソースプログラムの複数のタスクを前記複数のプロセッサに分配した分配ソースプログラムに変換し，当該分配されたタスクに，当該タスクによる処理対象タスクのプロセッサＩＤを引数として追加するタスク分配手段をコンピュータに構築させることを特徴とする。また，上記タスク分配プログラムがインストールされたタスク分配装置である。
【発明の効果】
【０００８】
上記の発明のタスク分配プログラムまたはタスク分配装置によれば，シングルプロセッサ用のソースプログラムの複数のタスクを，定義ファイルの対応付けに基づいて，複数のプロセッサに分配した分配ソースプログラムに変換すると共に，分配されたタスクにその引数として，当該タスクが処理する対象タスクの分配先プロセッサＩＤを追加するので，マルチプロセッサ装置用に簡単に移植することができる。
【発明を実施するための最良の形態】
【０００９】
以下，図面にしたがって本発明の実施の形態について説明する。但し，本発明の技術的範囲はこれらの実施の形態に限定されず，特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１０】
図１は，シングルプロセッサ装置からマルチプロセッサ装置にリプレースする場合のプログラムの移植を説明する図である。シングルプロセッサ装置であるシングルプロセッサチップ１００をマルチプロセッサ装置であるマルチプロセッサチップまたはチップセット２００にリプレースする場合，シングルプロセッサ用に開発されたプログラム１０２をマルチプロセッサ装置用のプログラム２０２，２１２に移植または変換することが必要である。シングルプロセッサ装置１００は，１つのプロセッサＣＰＵ０と，バス１０１を介して接続されるメモリＭＥＭ０とを有し，メモリＭＥＭ０内に，プログラム１０２とオペレーションシステム１０４とが格納されている。プログラム１０２は，ソースコードからコンフィグレータ，コンパイラ，リンカなどにより変換された実行可能なオブジェクトコードの形態で，読み出し専用メモリ（ＲＯＭ）内に格納される。
【００１１】
一方，マルチプロセッサ装置２００は，例えば２つのプロセッサＣＰＵ１，ＣＰＵ２と，それぞれのバス２０１，２１１を介して接続される専用のメモリＭＥＭ１，ＭＥＭ２とを有する。そして，メモリＭＥＭ１内には，プロセッサＣＰＵ１が実行するプログラム２０２とオペレーションシステム２０４とが格納され，メモリＭＥＭ２内には，プロセッサＣＰＵ２が実行するプログラム２１２とオペレーションシステム２１４とが格納される。そして，プロセッサ間には割込信号などの通信配線２０６が設けられる。したがって，各プロセッサＣＰＵ１，ＣＰＵ２は，それぞれ専用の内部メモリＭＥＭ１，２に対して専用のメモリ空間を有し，そこに格納されているプログラム２０２，２１２をフェッチして実行する。
【００１２】
図１の例では，シングルプロセッサ用のプログラム１０２が４つのタスクtask1〜task4を有し，それぞれタスクtask1,3がプロセッサＣＰＵ１に分配され，タスクtask2,4がプロセッサＣＰＵ２に分配されている。マルチプロセッサ装置２００によれば，マルチプロセッサＣＰＵ１，２が，それぞれ分配されたタスクを実行することで，シングルプロセッサ装置１００より高速に処理を行うことができる。
【００１３】
しかしながら，シングルプロセッサ用に開発されたプログラムのリソースを，マルチプロセッサ装置用に移植する作業は単純ではない。通常は，人的パワーを利用して，シングルプロセッサ用のソースプログラムを複数プロセッサに分配し，それぞれ分配されたソースプログラムのソースコードを，コンパイラ，リンカなどにより実行可能なオブジェクトコードに変換する。
【００１４】
図２は，一般的なプログラムの移植処理を説明するための図である。図の左から右に向かって移植処理が行われる。破線で囲まれた工程Ｓ１０が移植処理に必要なタスク分配処理である。シングルプロセッサ用に開発されたソースプログラムＳＰ０の複数のタスクを，プロセッサＣＰＵ１とプロセッサＣＰＵ２とに分配してソースプログラムＳＰ１とＳＰ２とを生成する。この分配は人手によって行う。分配作業では，タスクの種類やプロセッサＣＰＵ１，ＣＰＵ２の負荷のバランスなどを考慮して各タスクを最適と思われるプロセッサ側に分配する。そして，分配されたソースプログラムＳＰ１，ＳＰ２のソースコードをコンフィグレータ１１，１２に与えると，コンフィグレータ１１，１２が，それぞれのタスクに対してタスクの属性（動作条件など）を有する定義ファイルＤＦ１，ＤＦ２を参照し，中間ファイルＦ１１，Ｆ１２を生成する。このように工程Ｓ１０では，各プロセッサに分配された中間ファイルＦ１１，Ｆ１２が生成される。
【００１５】
この中間ファイルＦ１１，Ｆ１２は，ソースプログラムＳＰ１，ＳＰ２のソースコードと，それに含まれるタスクの定義ファイルとを有する。この中間ファイルＦ１１，Ｆ１２がコンパイラ２０によりそれぞれオブジェクトコードＦ２１，Ｆ２２に変換され，さらに，リンカ３１，３２によりオペレーションシステム内のライブラリコードＬＩＢをオブジェクトコードＦ２１，Ｆ２２にリンクして，実行可能なオブジェクトコードＦ３１，Ｆ３２に変換される。上記の一連のビルドにより実行可能なオブジェクトコードが生成され，それがマルチプロセッサ装置２００Ａ，２００Ｂの各プロセッサＣＰＵ１，ＣＰＵ２の内部メモリＭＥＭ１，ＭＥＭ２内にロードされる。
【００１６】
しかしながら，ソースプログラムＳＰ０をソースプログラムＳＰ１，ＳＰ２に分配する作業は必ずしも単純ではなく，異なるプロセッサで実行されるタスクに対する処理を行うタスクには異なるプロセッサを識別する引数が必要であり，共通の変数を有するタスクの順番が入れ替わると処理結果が不適切になるなど種々の留意すべきことがある。したがって，過去に開発した膨大なシングルプロセッサ用のソースプログラムをマルチプロセッサ用のプログラムに変換するプログラムツールが求められる。
【００１７】
［第１の実施の形態］
図３は，本実施の形態におけるタスク分配装置の構成図である。このタスク分配装置は，プロセッサユニット１２にバスＢＵＳを介してキーボードやマウスなどの入力手段１４と，モニタ１６と，内部メモリ１８と，コンフィグレータプログラムファイル１１とが接続されている。このプログラムファイルは通常メモリ内にインストールされている。そして，シングルプロセッサ用に開発されているソースプログラムＳＰ０のソースコードと，各タスクに対応してマルチプロセッサ装置のいずれのプロセッサで処理させるかの対応付けを定義した定義ファイルＤＦとが供給される。プロセッサユニット１２は，コンフィグレータプログラム１１を実行して，ソースプログラムＳＰ０の複数のタスクを複数のプロセッサに分配した分配ソースプログラムＳＰ１１，ＳＰ１２のソースコードに変換する。コンフィグレータプログラム１１を実行することで，プロセッサユニット１２は，図２と同様に，分配されたソースコードＳＰ１１，ＳＰ１２にそれぞれのタスクの定義ファイルＤＦ１１，ＤＦ１２を付加した中間ファイルＦ１１，Ｆ１２を生成する。
【００１８】
図３のタスク分配装置には，コンフィグレータプログラム１１に加えて，コンパイラ，リンカのプログラムファイル，オペレーションシステムのファイルが設けられ，プロセッサユニット１２がそれらを実行することで，コンパイル，リンク処理を行うようにしても良い。
【００１９】
図４は，本実施の形態におけるビルド処理フローを示す図である。ビルドとは，プログラム開発においてソースプログラム（ソースコード）をコンパイルし，実行プログラム（実行形式のオブジェクトコード）を作成することであり，コンフィグレータ，コンパイラ，リンカによる一連の処理からなる。シングルプロセッサ用のソースプログラムＳＰ０をマルチプロセッサ用の実行プログラムＦ３１，Ｆ３２に変換するために，最初に，ソースプログラムＳＰ０に含まれるタスクについての定義ファイルＤＦが作成される。この定義ファイルＤＦは，図２に示したタスク毎の動作条件などの属性データに加えて，どのタスクをどのプロセッサに実行させるかの対応付けデータを含む。
【００２０】
コンフィグレータ１１は，シングルプロセッサ用のソースプログラムＳＰ０のソースコードを，定義ファイルＤＦに定義されたタスクと実行プロセッサとの対応を参照して，ソースプログラムＳＰ０の複数のタスクをマルチプロセッサ装置の複数のプロセッサに分配する。図４の例では，ソースプログラムＳＰ０の３つのタスクtask1〜3の２つのタスクtask1,3がプロセッサＣＰＵ１に，１つのタスクtask2がプロセッサＣＰＵ２にそれぞれ分配されている。同時に，コンフィグレータ１１は，後述するとおり分配されたタスクに，そのタスクの処理対象タスクが分配されたプロセッサＩＤを引数として追加する。つまり，ソースプログラムＳＰ０のタスクを単純に分離するだけでなく，分離に伴う必要なプログラムの変更を実行する。さらに，共通の変数を有する複数のタスクが異なるプロセッサに分配された場合に警告を出力する。この点については，後で具体例により説明する。
【００２１】
コンフィグレータ１１は，図３で説明したとおり，分配ソースプログラムＳＰ１１，ＳＰ１２にそのソースプログラムのタスクの定義ファイルＤＦ１１，ＤＦ１２を加えた中間ファイルＦ１１，Ｆ１２を出力する。
【００２２】
その後は，通常のビルドと同様に，中間ファイルＦ１１，Ｆ１２のソースコードはコンパイラ２０によりオブジェクトコードに変換され，オブジェクトコードファイルＦ２１，Ｆ２２がリンカに与えられる。リンカ３１，３２は，与えられたオブジェクトコードＦ２１，Ｆ２２とオペレーションシステムファイルＯＳに予め用意されたライブラリコードＬＩＢをリンクして，実行可能なオブジェクトコードＦ３１，Ｆ３２を生成する。これらの実行可能なオブジェクトコードＦ３１，Ｆ３２が，マルチプロセッサ装置２００Ａ，２００Ｂの各プロセッサＣＰＵ１，ＣＰＵ２のメモリＭＥＭ１，ＭＥＭ２にインストールされる。
【００２３】
図５は，本実施の形態におけるコンフィグレータの動作を説明する具体例を示す図である。また，図６は，コンフィグレータによるコンフィグレーション処理の詳細フローチャート図である。図５に示したシングルプロセッサ用のソースプログラムＳＰ０には，２つのタスクtask1,task2が含まれ，タスクtask1はスリープタスク（slp_tsk()）で，タスクtask2はスリープしたタスクtask1をウエークアップするウエイクアップタスク（wup_tsk(1)）である。なお，これらのソースプログラムの言語は，μＩＴＲＯＮ仕様準拠のＯＳ下で動作するソースプログラム言語である。ウエイクアップタスクwup_tsk(1)は，どのスリープタスクに対する処理かを示す引数「１」（図中５４）を有する。つまり，ウエイクアップタスクwup_tsk(1)はタスクtask1へのシステムコールである。
【００２４】
定義ファイルＤＦは，ソースプログラムＳＰ０に含まれるタスク５０をいずれのプロセッサにより処理させるかを示す対応データ５２と，各タスクの属性データ５６とを有する。属性データ５６には，それぞれのタスク実行の条件など一般的な属性が含まれる。
【００２５】
コンフィグレータ１１は，供給されるソースプログラムＳＰ０のソースコードの各タスクを，定義ファイルのタスク５０に対応付けられたプロセッサデータ５２に基づいて，各プロセッサに分配し，分配ソースプログラムＳＰ１１，ＳＰ１２を生成する。定義ファイルＤＦによれば，タスクtask1はプロセッサＣＰＵ１に，タスクtask2はプロセッサＣＰＵ２にそれぞれ対応付けられている。したがって，コンフィグレータ１１は，プロセッサＣＰＵ１１用の分配ソースプログラムＳＰ１１にタスクtask1を分配し，プロセッサＣＰＵ１２用の分配ソースプログラムＳＰ１２にタスクtask2を分配する。
【００２６】
ただし，プロセッサＣＰＵ１１に分配されたタスクtask2のウエイクアップタスクwup_tsk(1)の引数「１」（図中５４）はタスクtask1を示すが，タスクtask1は異なるプロセッサＣＰＵ１１に分配されている。したがって，コンフィグレータ１１は，タスクtask2のウエイクアップタスクwup_tsk(1)の引数にプロセッサＣＰＵ１のＩＤデータ「ＣＰＵ１」（図中５８）を追加する。その結果，ウエイクアップタスクwup_tsk(1，CPU1)は，プロセッサＣＰＵ１に分配された分配プログラムＳＰ１１内のタスクtask1に対応するウエイクアップタスクであることを明示することになる。
【００２７】
コンフィグレータ１１は，定義ファイルＤＦを参照して各タスクを各プロセッサに分配するが，共通の変数を有する複数のタスクが異なるプロセッサに分配されることは，複数のタスクの処理順序が逆になり変数に対する処理結果が異なる可能性があり好ましくない。そこで，コンフィグレータ１１は，タスク分配処理において，共通の変数を有する複数のタスクが異なるプロセッサに分配された場合は，警告メッセージを出力する。上記の引数の追加処理とあわせて警告メッセージを出力できるようにするために，例えば，コンフィグレータ１１は，分配されたタスクと，各タスクの処理の対象となっているタスクＩＤと，各タスクの変数との関係を示すテーブルを作成する。そして，コンフィグレータ１１は，この関係テーブルを検索して，異なるプロセッサに分配されたタスクに対する処理を行うタスクに対しては，その異なるプロセッサのＩＤを引数として追加し，また，ある変数を含む複数のタスクが異なるプロセッサに分配されているかをチェックし必要な警告メッセージを出力する。
【００２８】
図６のフローチャートにしたがって本実施の形態におけるビルド内のコンフィグレーション処理Ｓ１０について説明する。ビルドは，タスクの分配を含むコンフィグレーション処理Ｓ１０と，コンパイル処理Ｓ１２と，リンク処理Ｓ１４とを有し，その結果，マルチプロセッサ装置の各プロセッサ毎に実行形式のオブジェクトコードファイルが出力される（Ｓ１６）。
【００２９】
コンフィグレーション処理Ｓ１０では，シングルプロセッサ用のソースプログラムＳＰ０の各タスクに対して次の処理が行われる。まずコンフィグレータ１１は，定義ファイルＤＦを検索して，タスクに対応付けられたプロセッサの対応データ５２を参照して，各プロセッサＣＰＵ１，ＣＰＵ２に分配する（Ｓ１０２）。そして，各プロセッサのソースファイルを作成し（Ｓ１０４，Ｓ１１４），各ソースファイルＳＰ１１，ＳＰ１２にそれぞれのプロセッサに割り付けるタスクをソースプログラムＳＰ０から抽出する（Ｓ１０６，Ｓ１１６）。
【００３０】
一例として図５のソースプログラムＳＰ０の場合であれば，タスクtask1のスリープタスクslp_tsk()の場合は，定義ファイルＤＦでプロセッサＣＰＵ１に対応付けられているので，プロセッサＣＰＵ１用のソースファイルＳＰ１１に割り付けられる（Ｓ１０６）。また，タスクtask2のウエイクアップタスクwup_tsk(1)の場合は，定義ファイルＤＦでプロセッサＣＰＵ２に対応付けられているので，プロセッサＣＰＵ２用のソースファイルＳＰ１２に割り付けられる（Ｓ１１６）。
【００３１】
シングルプロセッサ用のソースプログラムＳＰ０の全てのタスクが各プロセッサ用のソースファイルに割り付けられたあと，分配ソースプログラムＳＰ１１について，異なるプロセッサＣＰＵ２のタスクに対するシステムコールが含まれるか否かチェックされる（Ｓ１０８）。同様に分配ソースプログラムＳＰ１２についても，異なるプロセッサＣＰＵ１のタスクに対するシステムコールが含まれるか否かがチェックされる（Ｓ１１８）。図５の例では，分配ソースプログラムＳＰ１２のウエイクアップタスクwup_tsk(1)が，プロセッサＣＰＵ１のタスクtask1に対するシステムコールであるので，そのシステムコールにプロセッサＣＰＵ１の引数（図５の５８）が追加される（Ｓ１２０）。分配ソースプログラムＳＰ１１においても，同様にプロセッサＣＰＵ２のタスクに対するシステムコールがあれば，それにプロセッサＣＰＵ２の引数が追加される。図５の例では，それが存在しないので引数の追加はない。
【００３２】
そして，最後に，各ソースプログラムＳＰ１１，ＳＰ１２において，タスク内の変数が異なるプロセッサのタスクの変数と共通か否かがチェックされ，共通する変数が検出されると警告（ワーニング）メッセージが出力される（Ｓ１１２，Ｓ１２２）。
【００３３】
以上のコンフィグレーション処理Ｓ１０により，シングルプロセッサ用のソースプログラムＳＰ０の各タスクは，複数のプロセッサＣＰＵ１，ＣＰＵ２用の分配ソースプログラムＳＰ１１，ＳＰ１２に分配され，且つ，必要に応じて異なるプロセッサの引数が追加され，共通の変数を持つ複数のタスクが分離されたことが通知される。
【００３４】
上記の定義ファイルＤＦでは，所定のルールに基づいてタスクとプロセッサとの対応付けが行われる。または，アトランダムにタスクとプロセッサとの対応付けが行われても良い。そして，複数の定義ファイルが準備され，各定義ファイルに基づいて上記のコンフィグレーション処理によりタスクの分配が行われ，それぞれ分配されたソースプログラムから生成された実行可能なオブジェクトコードＦ３１，Ｆ３２がマルチプロセッサ装置２００にインストールされる。各定義ファイルに対応するマルチプロセッサ装置２００が実際にインストールされたオブジェクトコードを実行して，いずれの定義ファイルが最適であるかの評価が行われる。評価項目は，例えば，省電力性，処理の効率，処理速度などであり，一部の項目に基づいてまたは複数の項目に基づいて最適な定義ファイルが決定される。
【００３５】
以上のように，本実施の形態のタスク分配プログラムであるコンフィグレータを利用することにより，シングルプロセッサ用のソースプログラムから，マルチプロセッサの各プロセッサに分配された分配ソースプログラムを自動的に生成することができる。しかも，複数プロセッサに分配したことに伴って必要となるプロセッサのＩＤの引数が自動的に追加される。また，共通の変数を含む複数のタスクが異なるプロセッサに分離されたことを知らせる警告メッセージが出力されるので，処理結果が不適切になる可能性を検出することができる。
【００３６】
［第２の実施の形態］
第２の実施の形態では，コンフィグレータが定義ファイルを参照して，シングルプロセッサ用のソースプログラムの各タスクに対応付けられるプロセッサに応じて，ソースプログラムの各タスクのシステムコールの前後にｉｆ文とｅｎｄ文からなる条件文を追加し，一つの分配ソースプログラムを生成する。つまり，第１の実施の形態では，コンフィグレータがタスクを各プロセッサに対応した分配ソースプログラムに分離し，複数プロセッサに分離された分配ソースプログラムファイルが生成される。それに対して，第２の実施の形態では，複数のプロセッサに共通の一つの分配ソースプログラムファイルが生成される。ただし，その分配ソースプログラムには，いずれのプロセッサで実行されるかを示すｉｆ文とｅｎｄ文からなる条件文が追加されている。したがって，コンパイラが変換したオブジェクトコードをｉｆ文にしたがって各プロセッサに分離して出力する。
【００３７】
図７は，第２の実施の形態における処理フローを示す図である。図４の第１の実施の形態と異なり，コンフィグレータ１１が一つの中間ファイルＦ１４を生成する。この中間ファイルＦ１１の分配ソースプログラムには，シングルプロセッサ用のソースプログラムＤＰ０内の各タスクのシステムコール（task1()，task2()，task3()）の前後に，ｉｆ文「＃ｉｆｄｅｆ」とｅｎｄ文「＃ｅｎｄｉｆ」とが追加され，ｉｆ文の条件としていずれのプロセッサに分配されるかが定義ファイルＤＦを参照して決定される。また，中間ファイルＦ１４は，図３と同様に分配ソースプログラムに定義ファイルが付加されている。
【００３８】
この中間ファイルＦ１１は，図４と同様にコンパイラ２０に供給され，プロセッサ毎のオブジェクトコードＦ２１，Ｆ２２を生成する。コンパイラ２０は，分配ソースプログラムに追加されたｉｆ文の条件に基づいて，変換したオブジェクトコードを各プロセッサに分離して出力する。そして，リンカ３０，３２がコンパイルされたオブジェクトコードＦ１２，Ｆ２２にライブラリコードＬＩＢをリンクして，実行可能なオブジェクトコードＦ３１３，Ｆ３２を出力する。
【００３９】
図８は，第２の実施の形態におけるコンフィグレータの動作を説明する具体例を示す図である。また，図９は，コンフィグレータによるコンフィグレーション処理の詳細フローチャート図である。図８に示したシングルプロセッサ用のソースプログラムＳＰ０も，図５と同様に，２つのタスクtask1,2が含まれ，タスクtask1はスリープタスク（slp_tsk()）で，タスクtask2はウエイクアップタスク（wup_tsk(1)）である。予め準備される定義ファイルＤＦは，図５と同じであり，各タスク（図中５０）にプロセッサが対応付けられる（図中５２）。
【００４０】
コンフィグレータ１１は，ソースプログラムＳＰ０の各システムコールの前後に，ｉｆ文とｅｎｄ文の対６０，６２を追加して，分配ソースプログラムファイルを含む中間ファイルＦ１４を出力する。このｉｆ文内のプロセッサの条件は，定義ファイルＤＦの対応付けデータ５２に基づいて付加される。さらに，コンフィグレータ１１は，第１の実施の形態と同様に，異なるプロセッサのタスクに対する処理を行うタスクに，その呼び出し元のプロセッサの引数（図中５８）を追加する。さらに，コンフィグレータ１１は，共通の変数を含む複数のタスクが，異なるプロセッサに分配されたか否かをチェックし，分配されている場合は警告メッセージを出力する。
【００４１】
図９のフローチャートにしたがって第２の実施の形態でのコンフィグレーション処理Ｓ１０について説明する。ビルドのフローチャートは図６と同じである。そして，コンフィグレーション処理Ｓ１０では，シングルプロセッサ用のソースプログラムＳＰ０が与えられ，それに含まれるタスクについてコンフィグレーション処理が行われる。まず，定義ファイルが検索され（Ｓ１００），タスクに対応付けられたプロセッサをチェックする（Ｓ１０２）。そして，ソースプログラムＳＰ０のシステムコール（図８のtask1()，task2()）の前後にｉｆ文とｅｎｄ文からなる条件文６０，６２を追加する。つまり，システムコール「task1()」の前にｉｆ文「#ifdef CPU1」を，後にｅｎｄ文「#endif」を追加する。また，システムコール「task2()」の前にｉｆ文「#ifdef CPU2」を，後にｅｎｄ文「#endif」を追加する。この条件文には，システムコール対象のタスクがいずれのプロセッサで処理されるかが条件として含まれる。
【００４２】
コンフィグレータ１１は，上記の条件文の追加が終わった後に，生成された分配ソースプログラムに対して，異なるプロセッサＣＰＵのタスクへのシステムコールが存在しないか否かを検索する（Ｓ１３２）。そして，かかるシステムコールが存在する場合は，そのシステムコールに読み出し元のプロセッサの引数を追加する（Ｓ１３４）。つまり，図８の例の図中５８がタスクtask2のウエイクアップタスクwup_tsk(1)に新たな引数「CPU1」である。タスクtask2はプロセッサＣＰＵ２に分配されているが，ウエイクアップタスクの処理対象のスリープ状態のタスクはプロセッサＣＰＵ１に分配されているタスクtask1であるので，引数「CPU1」を追加してプロセッサＣＰＵ２がプロセッサＣＰＵ１のタスクtask1に対してウエイクアップタスクを実行できるようにする。
【００４３】
コンフィグレータ１１は，分配ソースプログラムにおいて，タスク内の変数が異なるプロセッサに分配されたタスクの変数と共通するか否かをチェックする。もし共通する場合は，共通の変数を有する複数のタスクが異なるプロセッサで所望の順番とは異なる順番で実行されて，不適切な結果が得られる可能性があるので，警告メッセージが出力される（Ｓ１３６）。これらの工程Ｓ１３２，１３４，１３６は，図６の工程Ｓ１０８，Ｓ１１０，Ｓ１１２やＳ１１８，Ｓ１２０，Ｓ１２２と同じである。
【００４４】
以上のように，第２の実施の形態では，コンフィグレータ１１がソースプログラムＳＰ０のタスクを分配するが，各タスクのシステムコール毎に条件文を追加した単一の分配ソースプログラムを出力する。そして，その分配ソースプログラムを含む中間ファイルＦ１４が，コンパイラによって，分配されたプロセッサに対応する個々のオブジェクトコードファイルに変換される。
【００４５】
以上説明したコンフィグレータは，タスク分配機能を有するプログラムツールであり，タスクを複数のプロセッサに分配する場合に必要な，異なるプロセッサの引数の追加機能や，共通の変数を有するタスクが異なるプロセッサに分配されたことのチェック機能を有する。そして，コンフィグレータは，一般的なコンフィグレータと異なり，ソースプログラムに条件ファイルを付加するだけでなく，分配ソースプログラムに引数を追加したりして，マルチプロセッサ装置の複数のプロセッサに分配するときに必要な処理を自動的の実行する。このプログラムツールにより，シングルプロセッサ用のソースプログラムを，簡単にマルチプロセッサ装置用の実行可能なオブジェクトコードに変換することができ，プロセッサの移植作業の効率を高めることができる。
【００４６】
以上の実施の形態をまとめると，次の付記のとおりである。
【００４７】
（付記１）シングルプロセッサ用のソースプログラムを複数のプロセッサを有するマルチプロセッサ装置用のプログラムに変換するタスク分配プログラムにおいて，
メモリ内に格納された定義ファイルであって，前記ソースプログラムのタスクに対して前記マルチプロセッサ装置のいずれかのプロセッサを対応付けた定義ファイルを参照して，前記ソースプログラムを，当該ソースプログラムの複数のタスクを前記複数のプロセッサに分配した分配ソースプログラムに変換し，当該分配されたタスクに，当該タスクによる処理対象タスクのプロセッサＩＤを引数として追加するタスク分配手段をコンピュータに構築させるタスク分配プログラム。
【００４８】
（付記２）付記１において，
前記タスク分配手段は，前記ソースプログラム内の共通の変数を有する複数のタスクが異なるプロセッサに分配された場合に，警告を出力することを特徴とするタスク分配プログラム。
【００４９】
（付記３）付記１において，
前記タスク分配手段は，前記分配ソースプログラムへの変換に際して，前記複数のプロセッサに分離された複数の分配ソースプログラムを生成することを特徴とするタスク分配プログラム。
【００５０】
（付記４）付記１において，
前記タスク分配手段は，前記分配ソースプログラムへの変換に際して，前記ソースプログラムの複数のタスクそれぞれに対して，前記分配されたプロセッサを条件とする条件文を追加して前記分配ソースプログラムを出力することを特徴とするタスク分配プログラム。
【００５１】
（付記５）付記４において，
更に，前記タスク分配手段が変換した分配ソースプログラムのソースコードを，前記複数のプロセッサのオブジェクトコードに変換するコンパイラ手段と，
前記複数のプロセッサのオブジェクトコードに，対応するプロセッサのライブラリコードをリンクさせて実行可能なオブジェクトコードに変換するリンカ手段とをコンピュータに構築させると共に，
前記コンパイラ手段は，前記条件文の条件に基づいて，前記分配ソースプログラム内の複数のタスクのソースコードを，複数のプロセッサに分離したオブジェクトコードに変換することを特徴とするタスク分配プログラム。
【００５２】
（付記６）付記１において，
更に，前記タスク分配手段が変換した分配ソースプログラムのソースコードを，前記複数のプロセッサのオブジェクトコードに変換するコンパイラ手段と，
前記複数のプロセッサのオブジェクトコードに，対応するプロセッサのライブラリコードをリンクさせて実行可能なオブジェクトコードに変換するリンカ手段とをコンピュータに構築させるタスク分配プログラム。
【００５３】
（付記７）付記６において，
前記定義ファイルは，タスクに対応して属性データを有し，
前記タスク分配手段は，前記定義ファイルから抽出した前記分配ソースプログラム内のタスクの属性データを当該分配ソースプログラムに加えた中間ファイルを出力することを特徴とするタスク分配プログラム。
【００５４】
（付記８）シングルプロセッサ用のソースプログラムを複数のプロセッサを有するマルチプロセッサ装置用に変換するタスク分配装置において，
前記ソースプログラムのタスクに対して前記マルチプロセッサ装置のいずれかのプロセッサを対応付けた定義ファイルを格納する定義ファイルメモリと，
前記定義ファイルを参照して，前記ソースプログラムを，当該ソースプログラムの複数のタスクを前記複数のプロセッサに分配した分配ソースプログラムに変換し，当該分配されたタスクに，当該タスクによる処理対象タスクのプロセッサＩＤを引数として追加するタスク分配手段とを有するタスク分配装置。
【００５５】
（付記９）付記８において，
前記タスク分配手段は，前記ソースプログラム内の共通の変数を有する複数のタスクが異なるプロセッサに分配された場合に，警告を出力することを特徴とするタスク分配装置。
【００５６】
（付記１０）付記８において，
前記タスク分配手段は，前記分配ソースプログラムへの変換に際して，前記複数のプロセッサに分離された複数の分配ソースプログラムを生成することを特徴とするタスク分配装置。
【００５７】
（付記１１）付記８において，
前記タスク分配手段は，前記分配ソースプログラムへの変換に際して，前記ソースプログラムの複数のタスクそれぞれに対して，前記分配されたプロセッサを条件とする条件文を追加して前記分配ソースプログラムを出力することを特徴とするタスク分配装置。
【００５８】
（付記１２）付記１１において，
更に，前記タスク分配手段が変換した分配ソースプログラムのソースコードを，前記複数のプロセッサのオブジェクトコードに変換するコンパイラ手段と，
前記複数のプロセッサのオブジェクトコードに，対応するプロセッサのライブラリコードをリンクさせて実行可能なオブジェクトコードに変換するリンカ手段とをコンピュータに構築させると共に，
前記コンパイラ手段は，前記条件文の条件に基づいて，前記分配ソースプログラム内の複数のタスクのソースコードを，複数のプロセッサに分離したオブジェクトコードに変換することを特徴とするタスク分配プログラム。
【図面の簡単な説明】
【００５９】
【図１】シングルプロセッサ装置からマルチプロセッサ装置にリプレースする場合のプログラムの移植を説明する図である。
【図２】一般的なプログラムの移植処理を説明するための図である。
【図３】本実施の形態におけるタスク分配装置の構成図である。
【図４】本実施の形態におけるビルド処理フローを示す図である。
【図５】本実施の形態におけるコンフィグレータの動作を説明する具体例を示す図である。
【図６】コンフィグレータによるコンフィグレーション処理の詳細フローチャート図である。
【図７】第２の実施の形態における処理フローを示す図である。
【図８】第２の実施の形態におけるコンフィグレータの動作を説明する具体例を示す図である。
【図９】コンフィグレータによるコンフィグレーション処理の詳細フローチャート図である。
【符号の説明】
【００６０】
ＳＰ０：シングルプロセッサ用のソースプログラム
ＳＰ１１，ＳＰ１２：マルチプロセッサ用分配ソースプログラム
ＤＦ：定義ファイル
１１：コンフィグレータ，タスク分配プログラム
１２：プロセッサユニット
【図１】
0005119590.tif 000002
【図２】
0005119590.tif 000003
【図３】
0005119590.tif 000004
【図４】
0005119590.tif 000005
【図５】
0005119590.tif 000006
【図６】
0005119590.tif 000007
【図７】
0005119590.tif 000008
【図８】
0005119590.tif 000009
【図９】
0005119590.tif 000010