(57)【要約】【課題】  実アーキテクチャの構成を意識しなくても、マルチコアプロセッサを構成する個々のコアにおいて実行されるプログラムを、容易且つ効率良く開発可能なプログラム開発装置等を提供する。【解決手段】  プログラム記述支援部２０１Ａは、複数の演算資源の使用宣言が記述可能であり、且つ、それら演算資源の使用宣言のうち、２以上の使用宣言に同一の識別名称を定義可能なＧＵＩをユーザに提供する。オブジェクトコード生成部２０５Ａは、係るＧＵＩにおいて同一の識別名称が含まれる２以上の使用宣言に対して、アーキテクチャ構成情報２０６Ａに定義されている実アーキテクチャにおいて同一の演算資源に割り付ける。【選択図】  図２８
2016035722.tif 000002
【特許請求の範囲】
【請求項１】
マルチコアプロセッサの実アーキテクチャが有する構成が定義されているアーキテクチャ構成情報を参照することにより、そのマルチコアプロセッサが有する１以上の演算資源の使用宣言を含み、その演算資源の使用順序及び並列関係の少なくとも何れかを表すユーザプログラムを記述可能なＧＵＩを、ユーザに提供するプログラム記述支援手段と、
１以上の前記制御信号に関して記述された前記ユーザプログラムと、前記アーキテクチャ構成情報とに基づいて、前記マルチコアプロセッサに供給するオブジェクトコードを生成するオブジェクトコード生成手段とを備え、
前記プログラム記述支援手段は、
前記ＧＵＩにおいて、前記制御信号別に、複数の前記演算資源の使用宣言が記述可能であり、且つ、それら演算資源の使用宣言のうち、２以上の使用宣言に同一の識別名称を定義可能であり、
前記オブジェクトコード生成手段は、
前記ＧＵＩにおいて前記同一の識別名称が含まれる２以上の使用宣言に対して、前記アーキテクチャ構成情報に定義されている実アーキテクチャにおいて同一の演算資源に割り付ける
プログラム開発装置。
【請求項２】
前記プログラム記述支援手段が提供する前記ＧＵＩは、
前記ユーザプログラムを記述するに際して、前記マルチコアプロセッサが有する各コアが実行する処理及び該コア間の接続関係の少なくとも何れかを変更可能な、１以上の制御信号別に記述可能なＧＵＩである
請求項１記載のプログラム開発装置。
【請求項３】
前記プログラム記述支援手段は、
前記ＧＵＩにおいて、前記制御信号別に、複数の前記演算資源の使用宣言のうち、ユーザ所望の少なくとも２つの演算資源の使用宣言をグループ化する定義と、定義したグループにグループ識別名称を定義することとが可能であり、
前記オブジェクトコード生成手段は、
前記ＧＵＩにおいて同一のグループ識別名称が定義された前記少なくとも２つの演算資源の使用宣言に対して、前記アーキテクチャ構成情報に定義されている実アーキテクチャにおいて同一の演算資源に割り付ける
請求項２記載のプログラム開発装置。
【請求項４】
前記オブジェクトコード生成手段は、
前記ＧＵＩにおいて前記同一の識別名称が含まれる２以上の使用宣言と、その識別名称が定義された演算資源の使用宣言が含まれ、且つ、前記ＧＵＩにおいて同一のグループ識別名称が定義された前記少なくとも２つの演算資源の使用宣言とに対して、前記アーキテクチャ構成情報に定義されている実アーキテクチャにおいて同一の演算資源に割り付ける
請求項３記載のプログラム開発装置。
【請求項５】
前記オブジェクトコード生成手段は、
前記ユーザプログラムを、所定形式の中間プログラムに変換するプログラム整形手段を含み、
前記オブジェクトコード生成手段は、
前記プログラム整形手段によって生成された前記中間プログラムを、前記オブジェクトコードに変換する
請求項１乃至４の何れかに記載のプログラム開発装置。
【請求項６】
前記アーキテクチャ構成情報は、少なくとも、
前記各コアが有する演算資源の数、該演算資源の種類を表す情報、前記実アーキテクチャにおける前記各演算資源の位置及び該演算資源間の接続関係を表す情報を含む
請求項１乃至請求項５の何れかに記載のプログラム開発装置。
【請求項７】
前記演算資源は、前記コアに含まれるＰＥである
請求項１乃至請求項６の何れかに記載のプログラム開発装置。
【請求項８】
情報処理装置が、
マルチコアプロセッサの実アーキテクチャが有する構成が定義されているアーキテクチャ構成情報を参照することにより、そのマルチコアプロセッサが有する以上の演算資源の使用宣言を含み、その演算資源の使用順序及び並列関係の少なくとも何れかを表すユーザプログラムを記述可能なＧＵＩを、ユーザに提供し、
１以上の前記制御信号に関して記述された前記ユーザプログラムと、前記アーキテクチャ構成情報とに基づいて、前記マルチコアプロセッサに供給するオブジェクトコードに変換する際に、
前記ＧＵＩにおいて、前記制御信号別に、複数の前記演算資源の使用宣言が記述可能であり、且つ、それら演算資源の使用宣言のうち、２以上の使用宣言に同一の識別名称を定義可能な環境を提供し、
前記ＧＵＩにおいて前記同一の識別名称が含まれる２以上の使用宣言に対しては、前記アーキテクチャ構成情報に定義されている実アーキテクチャにおいて同一の演算資源に割り付ける
プログラム開発方法。
【請求項９】
前記アーキテクチャ構成情報は、少なくとも、
前記各コアが有する演算資源の数、該演算資源の種類を表す情報、前記実アーキテクチャにおける前記各演算資源の位置及び該演算資源間の接続関係を表す情報を含む
請求項６記載のプログラム開発方法。
【請求項１０】
マルチコアプロセッサの実アーキテクチャが有する構成が定義されているアーキテクチャ構成情報を参照することにより、そのマルチコアプロセッサが有する１以上の演算資源の使用宣言を含み、その演算資源の使用順序及び並列関係の少なくとも何れかを表すユーザプログラムを記述可能なＧＵＩを、ユーザに提供するプログラム記述支援処理と、
１以上の前記制御信号に関して記述された前記ユーザプログラムと、前記アーキテクチャ構成情報とに基づいて、前記マルチコアプロセッサに供給するオブジェクトコードを生成するオブジェクトコード生成処理と
をコンピュータに実現させるに際して、
前記プログラム記述支援処理は、
前記制御信号別に、複数の前記演算資源の使用宣言が記述可能であり、且つ、それら演算資源の使用宣言のうち、２以上の使用宣言に同一の識別名称を定義可能な前記ＧＵＩを提供し、
前記オブジェクトコード生成処理は、
前記ＧＵＩにおいて前記同一の識別名称が含まれる２以上の使用宣言に対して、前記アーキテクチャ構成情報に定義されている実アーキテクチャにおいて同一の演算資源に割り付ける
コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算コアを有するマルチコアプロセッサにて実行されるソフトウェア・プログラムの開発を支援する技術に関する。
【背景技術】
【０００２】
無線通信等に使われる信号処理は、通常、高速性が求められるので、専用回路（専用デバイス）によって実現されるのが一般的である。しかし近年においては、様々な信号処理をプログラム（ソフトウェア・プログラム）によって表し、そのプログラムをプロセッサにて実行することにより、係る信号処理を実現する手法を採用する機会が増えている。この手法は、所望する信号処理を実現するために必要な専用回路の開発、製造、並びに販売までのトータルコストが、その専用回路に関して予想される販売数量を考慮した場合に十分な利益を得られない場合等に有効である。これに伴い、信号処理用のプロセッサの開発が盛んに行われている。
【０００３】
信号処理プロセッサの１つの形態として、例えば、非特許文献１は、以下に説明するマルチコアシステムが開示する。一般に、マルチコアプロセッサは、複数の演算コアと、これらの演算コアにデータを効率よく供給する複数のメモリと、コントローラとを有しており、対象とする信号処理を並列に実施することによって高速性を獲得している。
【０００４】
図１は、非特許文献１に開示されたマルチコアプロセッサシステムの構成を示すブロック図である。このマルチコアプロセッサシステムは、以下の構成を有する。
【０００５】
・システム全体を制御する制御部（Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）１０１、
・複数のサブメモリ・バンク（Ｓｕｂ−Ｍｅｍｏｒｙ  Ｂａｎｋ）１０４、
・複数のサブメモリ・バンク１０４からデータを読み出すアドレス生成器（Ａｄｄｒｅｓｓ  Ｇｅｎｅｒａｔｏｒ）１０２、
・複数のサブメモリ・バンク１０４を持つメモリ・バンク（Ｍｅｍｏｒｙ  Ｂａｎｋ）１０３、
・サブメモリ・バンク１０４から読み出されたデータを、指定された演算コア（Ｐｒｏｃｅｓｓｏｒ  Ｎｏｄｅ：以下、「ＰＮ」と称する場合がある）１０６に供給するメモリ・インタフェース１０５、そして
・メモリ・インタフェース１０５を介して供給されたデータを利用して演算を行う複数のＰＮ１０６、
・メモリ・バンク１０３に接続され、外部からのデータ供給を実現可能な外部バス（Ｅｘｔｅｒｎａｌ  Ｂｕｓ）１０７。
【０００６】
そして、当該マルチコアプロセッサシステムは、様々な信号処理が実現可能なように、ユーザによって作成されたソフトウェア・プログラム（以下、「ユーザプログラム」と称する場合がある）に従って、実行する処理を変更することができる。より具体的には、当該マルチコアプロセッサシステムは、アドレス生成器１０２、ＰＮ１０６間の接続、並びに、メモリ・インタフェース１０５の動作を、ユーザプログラムに従って制御することができる。
【０００７】
当該マルチコアプロセッサシステムにおいて実行される一連の信号処理は、ライブラリＩＤ（識別子：Ｉｄｅｎｔｉｆｉｅｒ）によって識別可能な、複数のライブラリによって規定される。
【０００８】
図２は、非特許文献１に開示されたマルチコアプロセッサシステムにおける信号処理を例示的に説明するシーケンス図である。図２において、処理対象のデータは、既に、外部の制御部（不図示）が外部バス１０７を介して、メモリ・バンク１０３に転送されているとする。
【０００９】
一連の信号処理が開始されると、制御部１０１は、アドレス生成器１０２に対して、実行すべき信号処理に対応するライブラリＩＤを指定する。
【００１０】
アドレス生成器１０２は、処理開始を指定されると、制御部１０１から指定されたライブラリＩＤに対応する、データ読み出し用アドレスの生成を開始する。メモリ・バンク１０３は、当該生成されたアドレスに従って読み出したデータを、メモリ・インタフェース１０５に供給する。更に、アドレス生成器１０２は、コンテキスト・ポインタ（Ｃｏｎｔｅｘｔ  Ｐｏｉｎｔｅｒ）なる制御信号ＣＰを生成し、生成した制御信号ＣＰを、メモリ・インタフェース１５０及びＰＮ１０６に与える。
【００１１】
メモリ・インタフェース１０５は、係る制御信号ＣＰに関連付けられているプログラム（オブジェクトコード）を、対象とするＰＮ１０６にロードする。そしてメモリ・インタフェース１０５は、当該プログラムが当該ＰＮにおいて実行されている間、当該プログラムによって必要とされるデータを、当該ＰＮに供給する。
【００１２】
ＰＮ１０６は、自らが実行すべき処理内容を、与えられた制御信号ＣＰに従って設定し、メモリ・インタフェース１０５から供給されるデータを、当該制御信号ＣＰに従って処理する。ＰＮ１０６にて処理されたデータは、メモリ・インタフェース１０５を介して、メモリ・バンク１０３に転送される。このとき、アドレス生成器１２は、ＰＮ１０６にて処理されたデータをメモリ・バンク１０３に書き込むためのアドレスを生成する。生成されたアドレスに従って、メモリ・バンク１０３に転送されたデータは、メモリ・バンク１０３に格納される。そして、アドレス生成器１０２は、処理終了通知を、制御部１０１に通知する。
【００１３】
上述した処理シーケンスは、説明の便宜上から、制御信号ＣＰが１つ（１種類）の場合における処理構成について説明したが、実際の処理構成は、複数の制御信号ＣＰが用いられた複雑な処理シーケンスであることが想定される。
【００１４】
図３は、図１に示すマルチコアプロセッサシステムが有する個々のＰＮ１０６の内部構成を示すブロック図である。ＰＮ１０６は、以下の構成を有する。
【００１５】
・他のＰＮ１０６とメモリ・インタフェース１０５とのデータ転送を行う通信エージェント（Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ａｇｅｎｔ）１６１、
・データ処理を行うＣＯＲＤＩＣ  Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ（ＣＰＥ）１６２（但し、ＣＯＲＤＩＣは、ＣＯｏｒｄｉｎａｔｅ  Ｒｏｔａｔｉｏｎａｌ  Ｄｉｇｉｔａｌ  Ｃｏｍｐｕｔｅｒの略称である）、
・データのタイミング待ち合わせ処理及びアライメント処理を行うＤｅｌａｙ  Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ（ＤＰＥ）１６３。
【００１６】
ＰＮ１０６は、複数のＣＰＥ１６２と、複数のＤＰＥ１６３を有しており、図３に示す例では、ＣＰＥ１６２とＤＰＥ１６３とがそれぞれ２つ設けられている。係るＣＰＥ１６２とＤＰＥ１６３とは、それぞれ単独で処理を実行可能である。そして、係るＣＰＥ１６２とＤＰＥ１６３とは、複数のＣＰＥ及びＤＰＥが組み合わされた条件において、複数のデータセットを対象として加算演算、バタフライ演算等のより複雑な処理を実行可能である。ＣＰＥ１６２は、内部に複数のレジスタ（不図示）を有し、演算途中のデータや外部から転送されたデータを一時的に保持することができる。
【００１７】
本願出願に先だって存在する他の関連技術としては、例えば特許文献１がある。
【００１８】
即ち、特許文献１は、シングルコア用に開発されたソフトウェアを、マルチコアシステム（マルチコアプロセッサ）に移行する技術が開示されている。この技術では、まず、シングルコア用に開発されたソフトウェアに記述されている複数のタスクにタグが付与される。そしてこの技術によれば、個々のタグの同時実行の可否を表す情報（タグ表）を参照した結果を基に、当該マルチコアプロセッサを構成する複数のコアに対して、個々のタスクを割り当てることができる。
【先行技術文献】
【特許文献】
【００１９】
【特許文献１】特開２０１０−２４４３３２号公報
【非特許文献】
【００２０】
【非特許文献１】Ｋ．Ｓｅｋｉ、Ｔ．Ｋｏｂｏｒｉ、Ｊ．Ｏｋｅｌｌｏ  ａｎｄ  Ｍ．Ｉｋｅｋａｗａ、“Ａ  Ｃｏｒｄｉｃ−Ｂａｓｅｄ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｓｙｓｔｏｌｉｃ  Ａｒｒａｙ  Ｐｒｏｃｅｓｓｏｒ  ｆｏｒ  ＭＩＭＯＯＦＤＭ  Ｗｉｒｅｌｅｓｓ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ，”  Ｐｒｏｃ．  ＩＥＥＥ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍｓ、ｐｐ．６３９−６４４、Ｏｃｔｏｂｅｒ．  ２００７．
【発明の概要】
【発明が解決しようとする課題】
【００２１】
上述した非特許文献１に開示された技術は、ユーザプログラムの作成が難しく、且つ、作成されたユーザプログラムをマルチコアプロセッサに実装する際に、多大な労力と時間を要する。より具体的には、スケーリング等の、データ以外のパラメタが必要とされる場合、そのパラメタの転送先であるＣＰＥと、それを使うＣＰＥとは同一でなければならない。更に、演算途中のデータを内部のレジスタに一旦格納しておき、格納したデータを後で別の演算処理が使う場合、そのデータを格納しているＣＰＥと、そのデータを使うＣＰＥとが同一でなければならない。このため、ユーザは、プログラムの作成に際して、どのＣＰＥ或いはどのＤＰＥに値を格納したかを常に意識しなければならない。更には、作成されたプログラムにおいて、異なるＣＰＥ或いはＤＰＥをユーザが意識せずに使ってしまう場合がある。このような場合、発生している状況の原因を特定するには、ユーザは、シミュレーション結果を分析するしかない。その結果、ユーザは、所望の動作を実現可能なプログラムの作成に多くの時間を要することになる。
【００２２】
上述した特許文献１に開示された技術は、シングルコア用に開発されたソフトウェアをマルチコアプロセッサに移行する技術である。このため、この技術では、同じ時間（タイミング）に異なるプロセッサにおいて実行されるタスクに対して、同一タグが割り付けられる。従って、この技術では、マルチコアプロセッサを構成するある１つコア（プロセッサ）に注目した際に、その単一のコアにおいて実行されるプログラムを効率よく記述することはできない。また、特許文献１には、同一タグを割り付けるべきタスクをどのように決定するかについて明示的に開示されていない。
【００２３】
そこで、本発明は、実アーキテクチャ（物理アーキテクチャ）の構成を意識しなくても、マルチコアプロセッサを構成する個々のコアにおいて実行されるプログラムを、容易且つ効率良く開発可能なプログラム開発装置等を提供することを１つの目的とする。
【課題を解決するための手段】
【００２４】
上記の目的を達成すべく、本発明に係るプログラム開発装置は、以下の構成を備えることを特徴とする。
【００２５】
即ち、本発明の一形態は、
マルチコアプロセッサの実アーキテクチャが有する構成が定義されているアーキテクチャ構成情報を参照することにより、そのマルチコアプロセッサが有する１以上の演算資源の使用宣言を含み、その演算資源の使用順序及び並列関係の少なくとも何れかを表すユーザプログラムを記述可能なＧＵＩを、ユーザに提供するプログラム記述支援手段と、
１以上の前記制御信号に関して記述された前記ユーザプログラムと、前記アーキテクチャ構成情報とに基づいて、前記マルチコアプロセッサに供給するオブジェクトコードを生成するオブジェクトコード生成手段とを備え、
前記プログラム記述支援手段は、
前記ＧＵＩにおいて、前記制御信号別に、複数の前記演算資源の使用宣言が記述可能であり、且つ、それら演算資源の使用宣言のうち、２以上の使用宣言に同一の識別名称を定義可能であり、
前記オブジェクトコード生成手段は、
前記ＧＵＩにおいて前記同一の識別名称が含まれる２以上の使用宣言に対して、前記アーキテクチャ構成情報に定義されている実アーキテクチャにおいて同一の演算資源に割り付ける
プログラム開発装置である。
【００２６】
また、本発明の他の見地は、情報処理装置が、
マルチコアプロセッサの実アーキテクチャが有する構成が定義されているアーキテクチャ構成情報を参照することにより、そのマルチコアプロセッサが有する１以上の演算資源の使用宣言を含み、その演算資源の使用順序及び並列関係の少なくとも何れかを表すユーザプログラムを記述可能なＧＵＩを、ユーザに提供し、
１以上の前記制御信号に関して記述された前記ユーザプログラムと、前記アーキテクチャ構成情報とに基づいて、前記マルチコアプロセッサに供給するオブジェクトコードに変換する際に、
前記ＧＵＩにおいて、前記制御信号別に、複数の前記演算資源の使用宣言が記述可能であり、且つ、それら演算資源の使用宣言のうち、２以上の使用宣言に同一の識別名称を定義可能な環境を提供し、
前記ＧＵＩにおいて前記同一の識別名称が含まれる２以上の使用宣言に対しては、前記アーキテクチャ構成情報に定義されている実アーキテクチャにおいて同一の演算資源に割り付けるプログラム開発方法である。
【００２７】
尚、同目的は、上記構成を有するプログラム開発装置、並びに対応する方法を、コンピュータによって実現するコンピュータ・プログラム、及びそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記録媒体によっても達成される。
【発明の効果】
【００２８】
上記の本発明によれば、実アーキテクチャ（物理アーキテクチャ）の構成を意識しなくても、マルチコアプロセッサを構成する個々のコアにおいて実行されるプログラムを、容易且つ効率良く開発可能なプログラム開発装置等の提供が実現する。
【図面の簡単な説明】
【００２９】
【図１】非特許文献１に開示されたマルチコアプロセッサシステムの構成を示すブロック図である。
【図２】非特許文献１に開示されたマルチコアプロセッサシステムにおける信号処理を例示的に説明するシーケンス図である。
【図３】図１に示すマルチコアプロセッサシステムが有する個々のＰＮ１０６の内部構成を示すブロック図である。
【図４】本発明の第１の実施形態におけるプログラム開発装置の構成を概念的に説明するブロック図である。
【図５】第１の実施形態に係るプログラム開発装置がプログラム記述支援部２０１の実行によって表示する画面（ＧＵＩ）のレイアウトを例示する図である。
【図６】図５に示すＧＵＩにおいて、ユーザがプログラムを記述する際に行うＣＰの選択手順と、タスクの配置手順とを説明する図である。
【図７】図６に示すＧＵＩにおいて、配置された複数のタスク間の遷移と、タグの設定とを行う手順を説明する図である。
【図８】図７に示すＧＵＩにおいて、配置されたタスクの内容を設定する手順を説明する図である。
【図９】第１の実施形態におけるプログラム開発装置がプログラム整形部２０３によって生成する中間プログラムの構成例を説明する図である。
【図１０】第１の実施形態に係るプログラム開発装置が実行するコンパイラ２０５の処理を示すフローチャートである。
【図１１】図１０に示すコンパイラ２０５の処理のうち、配置配線処理の詳細を示すフローチャートである。
【図１２】第１の実施形態の実施例において、プログラム記述支援部２０１を利用して記述したユーザプログラム（ＣＯＮＴＥＸＴ＿１）の表示例を示す図である。
【図１３】第１の実施形態の実施例において、プログラム記述支援部２０１を利用して記述したユーザプログラム（ＣＯＮＴＥＸＴ＿２）の表示例を示す図である。
【図１４】第１の実施形態の実施例において、図１２及び図１３に示すユーザプログラム２０２に基づいて、プログラム整形部２０３が生成した中間プログラムを示す図である。
【図１５】第１の実施形態の実施例におけるプログラム開発装置が生成するオブジェクトコード２０７が実装される演算コアの実アーキテクチャを概念的に示すブロック図である。
【図１６】第１の実施形態の実施例における演算コアの実アーキテクチャに入力されるデータのフォーマットを例示する図である。
【図１７】第１の実施形態の実施例において、タスク「ＤＡＴＡ＿ＩＮ」が制御信号の種別に応じて設定する遅延の大きさを例示する図である。
【図１８Ａ】第１の実施形態の実施例におけるプログラム開発装置が、オブジェクトコード２０７を生成する際に参照するアーキテクチャ構成情報２０６を例示する図（１/２）である。
【図１８Ｂ】第１の実施形態の実施例におけるプログラム開発装置が、オブジェクトコード２０７を生成する際に参照するアーキテクチャ構成情報２０６を例示する図（２/２）である。
【図１９】本発明の第２の実施形態の実施例におけるプログラム開発装置が生成するオブジェクトコード２０７が実装される演算コアの実アーキテクチャを概念的に示すブロック図である。
【図２０】第２の実施形態に係るプログラム開発装置がプログラム記述支援部２０１の実行によって表示する画面（ＧＵＩ）において、ユーザがプログラムを記述する際に必要に応じて行う、複数タスクの結合操作の手順を説明する図である。
【図２１】図２０に示す操作手順によって結合した複数タスク（タスクグループ）に、タスク集約名称ＴＣＮを付与する場合の操作手順を説明する図である。
【図２２】図２０に示す操作手順によってタスクグループにタスク集約名称ＴＣＮを付与した場合に、更に、そのタスクグループを構成するタスクに対して、タスク集約名称ＴＣＮを付与する場合の操作手順を説明する図である。
【図２３】第２の実施形態におけるプログラム開発装置がプログラム整形部２０３によって生成する中間プログラムの構成例を説明する図である。
【図２４Ａ】第２の実施形態の実施例におけるプログラム開発装置が、オブジェクトコード２０７を生成する際に参照するアーキテクチャ構成情報２０６を例示する図（１/２）である。
【図２４Ｂ】第２の実施形態の実施例におけるプログラム開発装置が、オブジェクトコード２０７を生成する際に参照するアーキテクチャ構成情報２０６を例示する図（２/２）である。
【図２５】第２の実施形態の実施例において、プログラム記述支援部２０１を利用して記述したユーザプログラム（ＣＯＮＴＥＸＴ＿１）の表示例を示す図である。
【図２６】第２の実施形態の実施例において、プログラム記述支援部２０１を利用して記述したユーザプログラム（ＣＯＮＴＥＸＴ＿２）の表示例を示す図である。
【図２７】第２の実施形態の実施例において、図２５及び図２６に示すユーザプログラム２０２に基づいて、プログラム整形部２０３が生成した中間プログラムを示す図である。
【図２８】本発明の第３の実施形態におけるプログラム開発装置の構成を概念的に説明するブロック図である。
【図２９】本発明の各実施形態及びその実施例を実現可能なコンピュータ（情報処理装置）のハードウェア構成を例示的に説明する図である。
【発明を実施するための形態】
【００３０】
次に、本発明を実施する形態について図面を参照して詳細に説明する。以下の説明において、“ＰＥ（Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ）”と記述した場合は、図２に示す構成例を参照して説明したように、ＣＰＥとＤＰＥとを総称する文言であるとする。但し、後述する各実施形態を例として説明する本発明において、ＰＥは、ＣＰＥとＤＰＥとには限定されない。
【００３１】
＜＜第１の実施形態＞＞
まず、本実施形態において説明するプログラム開発装置１００の前提及び概要について説明する。本実施形態において取り扱うプロセッサは、複数の演算コアが協調及び連接した状態で動作するマルチコアプロセッサである。このマルチコアプロセッサは、「背景技術」において上述した図１に例示されるような構造を有するプロセッサである。
【００３２】
係るマルチコアプロセッサは、外部から与えられる制御信号ＣＰによって、そのプロセッサ内部の各コアが実行する処理及び当該コア間の接続関係が変化するよう、駆動することができる。即ち、マルチコアプロセッサの外部から与えられる制御信号ＣＰは、その制御信号ＣＰに関連付けられているプログラム（オブジェクトコード）に従って、当該マルチコアプロセッサ内部の各コアが実行する処理及び当該コア間の接続関係を変更可能である。
【００３３】
以下の説明において、マルチコアプロセッサは、単に「プロセッサ」と称する場合がある。そして、係るプロセッサが有する各コアが実行する処理は「タスク」と呼び、複数のコアが協調及び連接した状態で動作する処理は「タスク列」と呼ぶこととする。タスクは、係るマルチコアプロセッサが有する演算資源（この場合はコア或いはＰＥ）の使用宣言の一種と捉えることができる。
【００３４】
係るプロセッサの実運用において、プロセッサのオブジェクトコードは、複数のタスク列と、各タスクに紐付けられた（関連付けされた）制御信号ＣＰとによって構成されている。
【００３５】
以下において、ユーザプログラムは、複数のＣＰと、個々のＣＰ毎に定義されたタスク列によって構成される。ユーザは、このオブジェクトコードを用いて当該プロセッサをブートした後、処理を行いたいタスク列の順に、外部から制御信号ＣＰを与えることによって、当該プロセッサを駆動することができる。
【００３６】
図４は、本発明の第１の実施形態におけるプログラム開発装置１００の構成を概念的に説明するブロック図である。このプログラム開発装置１００は、プログラム記述支援部２０１、プログラム整形部２０３、コンパイラ（オブジェクトコード生成部）２０５、アーキテクチャ構成情報２０６を有する。アーキテクチャ構成情報２０６は、例えば、プログラム開発装置１００によって生成されたオブジェクトコードが供給されるマルチコアプロセッサのメーカー等が、本プログラム開発装置１００のユーザに事前に提供することとする。
【００３７】
本実施形態において、プログラム開発装置１００は、例えば、パーソナル・コンピュータ等の情報処理装置によって実現することができる。このような情報処理装置のハードウェア構成については、図２９に示す例を参照して後述する。プログラム開発装置１００は、図４に示す構成において、ユーザの操作に応じて、ユーザプログラム２０２と、オブジェクトコード２０７とを生成する。
【００３８】
プログラム記述支援部２０１は、図１に例示したようなマルチコアプロセッサのソフトウェアを、ユーザが開発することが可能な機能を有するツール（ユーザプログラムの開発支援ツール）である。ユーザは、プログラム記述支援部２０１を利用することにより、複数の制御信号ＣＰに関する記述を含むユーザプログラム、複数のタスク間において行われるデータ遷移の関係の規定、タグの宣言、タスク等の情報を規定することができる。即ち、プログラム記述支援部２０１は、ユーザによって規定されたこれらの情報を、ユーザプログラム２０２として出力することができる。
【００３９】
プログラム記述支援部２０１は、アーキテクチャ構成情報２０６に従って、ユーザに提示する情報を変更することができる。アーキテクチャ構成情報２０６は、コンパイラ２０５がユーザプログラム２０２を分析する際に参照するファイルである。アーキテクチャ構成情報２０６は、図３に例示したＰＮ１０６のような、演算コアの実際の構成（実アーキテクチャ）を規定する情報を含む。より具体的に、アーキテクチャ構成情報２０６は、少なくとも、以下の情報を含む。
【００４０】
・演算コアが有するＰＥ（ＣＰＥ及びＤＰＥ）の数、
・ＰＥの種類（ＣＰＥ及びＤＰＥ）を表す情報、
・当該演算コアの実アーキテクチャにおける各ＰＥの位置、
・当該演算コアの実アーキテクチャにおける各ＰＥの接続関係（ＰＥ間のデータ転送線の本数や接続先定義等）、
・当該各ＰＥが内部に持つレジスタ数。
【００４１】
プログラム記述支援部２０１は、アーキテクチャ構成情報２０６を参照することにより、後述するように、ユーザが感覚的に把握し易いＧＵＩ(Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ)を提供する。これにより、プログラム記述支援部２０１は、ユーザによるユーザプログラム２０２の記述作業を支援する。プログラム記述支援部２０１は、ユーザが使用するに際して、アーキテクチャ構成情報２０６を参照することにより、演算コアが実際に備えるアーキテクチャ（実アーキテクチャ）の範囲内において、ＣＰＥ、ＤＰＥ、並びに、レジスタを表示するよう規制することができる。更に、プログラム記述支援部２０１は、係る実アーキテクチャが仕様として許容しない接続関係は表示しない、もしくは、ユーザがＧＵＩを介して接続する操作を行っても、その操作をキャンセルすることができる。
【００４２】
図４に示す例では、２つの制御信号ＣＰ（ＣＰ＝１、２）に対応するユーザプログラム２０２が概要的に示されている。図４において、ＣＰ＝１には、タスクＡ、Ｂ、Ｃが定義されており、ＣＰ＝２にはタスクＤ、Ｅ、Ｆが定義されている。即ち、ＣＰ＝１及びＣＰ＝２は、図４に矢印で示す遷移が実現するよう、これらのタスクを実行することを表す。
【００４３】
プログラム整形部２０３は、ユーザがプログラム記述支援部２０１を利用して生成したユーザプログラム２０２を、コンパイラ２０５が解析し易い態様をなす中間プログラム２０４に整形（変換）する機能を有する。より具体的に、本実施形態において、プログラム整形部２０３は、ユーザプログラム２０２を、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）を基本とする中間プログラム２０４に変換する。
【００４４】
コンパイラ（オブジェクトコード生成部）２０５は、ユーザプログラム２０２と、アーキテクチャ構成情報２０６とが入力されるのに応じて、プロセッサの実アーキテクチャにおいて実際に動作するオブジェクトコード２０７を生成する機能を有する。コンパイラ２０５は、アーキテクチャ構成情報２０６を参照しながら、ユーザプログラム２０２に宣言されている個々のタスクのデータ遷移関係及びタグを分析する。そして、コンパイラ２０５は、分析結果に基づいて当該実アーキテクチャへの、当該各タスクのマッピングが施されたオブジェクトコード２０７を生成する。
【００４５】
図４に示す例は、４つのＰＥ（ＰＥ＿Ａ、ＰＥ＿Ｂ、ＰＥ＿Ｃ、ＰＥ＿Ｄ）を持ち、且つ、個々のＰＥが互いにデータを受け渡し可能な実アーキテクチャを有する演算コアにおいて、タスクＡ乃至Ｆにマッピングされたオブジェクトコード２０７の状態を表す。具体的には、ＰＥ＿ＡにはタスクＡ及びＦが配置され、ＰＥ＿ＢにはタスクＢ及びＥが配置され、ＰＥ＿ＣにはタスクＣが配置され、ＰＥ＿ＤにはタスクＤが配置されている。
【００４６】
図４には明示されていないが、ユーザプログラム２０２にて定義されたデータ遷移に関して、オブジェクトコード２０７は、複数のＰＥ間におけるデータ転送関係として定義されていることとする。これに応じて、図４に示す例において、ＣＰ＝１に関して、タスクＡからタスクＣへのデータ遷移は、ＰＥ＿ＡからＰＥ＿Ｃへのデータ転送として定義される。そして、タスクＢからタスクＣへのデータ遷移は、ＰＥ＿ＢからＰＥ＿Ｃへのデータ転送として定義される。一方、ＣＰ＝２に関しては、タスクＤからタスクＥへのデータ遷移は、ＰＥ＿ＤからＰＥ＿Ｂへのデータ転送として定義される。そして、タスクＥからタスクＦへのデータ遷移は、ＰＥ＿ＢからＰＥ＿Ａへのデータ転送として定義される。
【００４７】
図４に示す例において、ＣＰ＝１に規定されているタスクＡと、ＣＰ＝２に規定されているタスクＦには、それぞれ“Ｔｃｎ１”というタスク集約名称（Ｔａｓｋ  Ｃｏｎｓｏｌｉｄａｔｅ  Ｎａｍｅ：以下「ＴＣＮ」と称する）が付与されている。このように、複数のＣＰ間において同じタスク集約名称が付与された複数のタスクが存在する場合、コンパイラ２０５は、それらのタスクを、演算コアの実アーキテクチャにおいて同一のＰＥに配置されるよう、オブジェクトコード２０７を生成する。その結果として、図４に示す例において、オブジェクトコード２０７の概念図には、タスクＡと、タスクＦとが共にＰＥ＿Ａに配置された状態を表されている。即ち、タスク集約名称ＴＣＮは、２以上のタスクに同一の識別名称であるタスク集約名称ＴＣＮが付与されていた場合に、それらのタスクを同一のＰＥに割り付ける識別子である。
【００４８】
以上、本実施形態に係るプログラム開発装置１００の前提及び概要について説明した。次に、プログラム記述支援部２０１と、コンパイラ２０５とについて詳細に説明する。
【００４９】
[プログラム記述支援部２０１]
本実施形態において、ユーザは、ユーザプログラム２０２の開発を、ＧＵＩ(Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ)を利用することによって行うことができる。
【００５０】
プログラム記述支援部２０１は、上述したアーキテクチャ構成情報２０６を参照することによって、ユーザに対して、以下に説明するＧＵＩ（図５乃至図８、図１２、図１３、図２０乃至図２２、図２５、図２６）を提供することができる。
【００５１】
図５は、第１の実施形態に係るプログラム開発装置１００がプログラム記述支援部２０１の実行によって表示する画面（ＧＵＩ）のレイアウトを例示する図である。後述する図６乃至図８、図１２、図１３、図２０乃至図２２、図２５、図２６に示す画面例は、図５を参照して以下に説明するＧＵＩの機能を基本としてユーザが行った操作の具体例であり、個々の機能に関する重複する説明は省略する。但し、これらの図面を参照して以下に説明する操作手順は、あくまでも一例であり、その一例に本発明は何ら限定されない。
【００５２】
図５に示す画面において、右端のフレーム２０１内には、ライブラリＩＤと、このライブラリＩＤにおいて用いることが可能な制御信号ＣＰが宣言されている。より具体的に、図５に示す例では、「ｓａｍｐｌｅ」なるライブラリＩＤが宣言され、”ＣＯＮＴＥＸＴ＿１”及び”ＣＯＮＴＥＸＴ＿２”なる２つの制御信号ＣＰが宣言されている。
【００５３】
図５において、当該フレーム３０１の左側の領域は、プログラム記述支援部２０１が実行されることによってユーザに提供される機能が示されるパレット（Ｐａｌｌｅｔｔｅ）領域３０２である。パレット領域３０２の左側の領域は、ユーザが所望のユーザプログラム２０２を記述可能な、プログラム記述領域３０３である。ユーザは、ユーザプログラム（２０２）の開発に際して、この領域において、ＣＰ毎にタスクを配置する操作を行うと共に、配置したタスク間の依存関係を、接続線によって表す操作を行う。係る描画機能自体は、プログラム記述支援部２０１によってユーザに提供される。この描画機能自体は、一般的な技術を採用することができるので、本実施形態における詳細な説明は省略する。
【００５４】
パレット領域３０２には、プログラム記述支援部２０１が実行されることによってユーザに提供される機能が示される。パレット領域３０２において、「Ｓｅｌｅｃｔ」は、プログラム記述領域３０３に配置されたタスクを選択する際にユーザが操作するソフトウェアボタン（以下、「ボタン」と略記する）である。「Ｃｏｎｎｅｃｔｉｏｎ」ボタンは、プログラム記述領域３０３に配置されたタスク間を接続する際に使用するボタンである。
【００５５】
更にパレット領域３０２において、「ＣＰＥ」、「ＤＰＥ」、「Ｄａｔａ＿ＩＮ」並びに「Ｄａｔａ＿Ｏｕｔ」は、プログラム記述領域３０３にユーザがタスクを配置する際に操作するボタンである。「ＣＰＥ」ボタン及び「ＤＰＥ」ボタンは、順に、演算コアの実アーキテクチャを構成するＣＰＥ、ＤＰＥに対応するタスクを指定可能なボタンである。図５に示す例において、「ＣＰＥ」ボタンには、１つのＣＰ中に使用できるＣＰＥの個数が１６であることが表示される。「ＤＰＥ」ボタンには、１つのＣＰ中に使用できるＤＰＥの上限数が１６であることが表示される。「Ｄａｔａ＿Ｉｎ」ボタン、「Ｄａｔａ＿Ｏｕｔ」ボタンは、順に、メモリ・インタフェース１０５から演算コア（ＰＮ１０６）への転送、ＰＮ１０６からメモリ・インタフェース１０５への転送を定義可能なタスクを配置するボタンである。「Ｄａｔａ＿Ｉｎ」ボタン及び「Ｄａｔａ＿Ｏｕｔ」ボタンには、１つのＣＰ中において使用できるタスク数がそれぞれ１つであることが表示される。ユーザは、これらのボタンを操作することによって所望のタスクを選択し、選択したタスクをプログラム記述領域３０３に配置する。そして、ユーザは、配置したタスクの内容を定義する操作と、設定されているタスク間を「Ｃｏｎｎｅｃｔｉｏｎ」ボタンによって接続する操作を行うことによって、１つのＣＰについてのユーザプログラム（２０２）を作成することができる。
【００５６】
図６は、図５に示すＧＵＩにおいて、ユーザがプログラムを記述する際に行うＣＰの選択手順と、タスクの配置手順とを説明する図である。図６に示すように、ＣＰは、右端フレーム３０１内に表示されているＣＰ名をクリックすることによって選択することができる（手順１）。タスクは、パレット（Ｐａｌｌｅｔｅ）領域３０２に表示されたタスクを表すボタンの中から、プログラム記述領域３０３に配置したいタスクに対応するボタンを、ドラッグ＆ドロップすることによって配置することができる（手順２）。図６に示す例では、８つの出力（０乃至７）を有するタスク「Ｄａｔａ＿Ｉｎ」がプログラム記述領域３０３に配置された状態を表す。
【００５７】
図７は、図６に示すＧＵＩにおいて、配置された複数のタスク間の遷移と、タグの設定とを行う手順を説明する図である。タスク間の遷移を定義するために、ユーザは、プログラム記述領域３０３に配置された複数のタスクのうち、図７に例示するように、所望する２つのタスクにおいて、一方のタスクの出力ポートを始点として選択する。そして、ユーザは、選択した始点からドラッグアンドドロップによって、他方のタスクの入力ポートにおいて離す操作を行う。これにより、プログラム記述領域３０３には、当該一方のタスクの入力ポートを始点とし、当該他方のタスクの入力ポートを終点とする矢印線が表示され、これにより、当該２つのタスク間の遷移の定義を完了する（手順１）。
【００５８】
タグ設定に際して、ユーザは、プログラム記述領域３０３に配置されたタスクのうち、タグを付与したい特定のタスクを選択し、選択したタスクにおいて右クリックを行う（手順２）。ユーザの右クリック操作に応じて、プログラム記述支援部２０１は、プログラム記述領域３０３にメニューウィンドウを表示する。この例は、所望のタスクにタグを付与する例なので、ユーザは、表示されたメニューウィンドウにおいて、“タグ設定”を選択する（手順３）。この選択操作に応じて、プログラム記述支援部２０１は、プログラム記述領域３０３に、タスク集約名称ＴＣＮを入力可能なウィンドウを表示する。プログラム記述支援部２０１は、表示したウィンドウに対してユーザが所望の名前を入力するのに応じて、その名前を表すテキストを、当該特定のタスクの近傍に表示する（手順４）。図７に示す例では、上述した一連の手順によって、上述したタスク「Ｄａｔａ＿Ｉｎ」に加えて、２つの入力（０，１）と２つの出力（０，１）を有するタスク「ＣＰＥ０」が設定された状態において、タスク「Ｄａｔａ＿Ｉｎ」からタスク「ＣＰＥ０」への遷移が定義されている。更に、そのタスク「ＣＰＥ０」の左側には、「Ｔｃｎ１」なるタスク集約名称ＴＣＮが付与されたことが判る。
【００５９】
図８は、図７に示すＧＵＩにおいて、配置されたタスクの内容を設定する手順を説明する図である。タスクの内容を定義するために、ユーザは、内容を定義したいタスクを右クリックによって選択し（手順１）、その選択操作に応じて、プログラム記述支援部２０１は、プログラム記述領域３０３にメニューウィンドウを表示する。この例は、所望のタスクの内容を設定する例なので、ユーザは、表示されたメニューウィンドウにおいて、“タスク設定”を選択する（手順２）。この選択操作に応じて、プログラム記述支援部２０１は、タスク内容を入力可能なウィンドウを表示する。プログラム記述支援部２０１は、表示したウィンドウに対して、当該タスクに規定されている動作仕様の範囲においてユーザが所望の設定内容を入力するのに応じて、その内容を登録する（手順３）。個々のタスクの内容の定義操作や、設定可能な動作内容については、一般的な技術を採用することができるので、本実施形態における説明は省略する。
【００６０】
次に、上記のような手順によってユーザが作成したユーザプログラム２０２に基づいて、プログラム整形部２０３が生成する中間プログラム２０４について説明する。
【００６１】
図９は、第１の実施形態におけるプログラム開発装置１００がプログラム整形部２０３によって生成する中間プログラムの構成例を説明する図である。中間プログラム２０４は、上述した通り、ＸＭＬを基本とする構成である。
【００６２】
図９に示す例において、まず、１行目のタグは、＜ＵＳＥＲ＿ＰＲＯＧＲＡＭ＿ＭＡＳＴＥＲ＞なるタグである。本タグ以下、＜／ＵＳＥＲ＿ＰＲＯＧＲＡＭ＿ＭＡＳＴＥＲ＞なるタグまでの間に、ユーザプログラム２０２にユーザが定義した全てのＣＰに対応するプログラムが格納される。
【００６３】
次に、プログラム整形部２０３は、ＣＰにプログラムを宣言する。これは、＜ＣＰ＞タグによって定義される。＜ＣＰ＞タグは、属性として“ＮＡＭＥ”を持つ。“ＮＡＭＥ”属性は、ユーザがＣＰに対して付与した名前が記録される。図９に示す例では、図５乃至図８に示した例に応じて、”ＣＯＮＴＥＸＴ＿１”と”ＣＯＮＴＥＸＴ＿２”が記録されている。次に、プログラム整形部２０３は、１つのＣＰに対応するユーザプログラム２０２に上記の手順でユーザが記述した全てのタスクを、＜ＴＡＳＫ＞タグによって定義する。個々のタスクは、タスク名“ＮＡＭＥ”と、タグ名“ＴＣＮ１”を属性として持つ。但し、タスク集約名称ＴＣＮは、プログラム記述支援部２０１を利用したユーザによるユーザプログラム２０２の記述に際して任意項目である。
【００６４】
プログラム整形部２０３は、＜ＴＡＳＫ＞タグによって定義された個々のタスクに、タスク固有の仕様と、その仕様に従ってユーザが設定した具体的な処理内容と、データ遷移関係とを定義する。図９に示す例では、図６乃至図８に示した例に応じて、タスクとして、タスク「Ｄａｔａ＿Ｉｎ」とタスク「ＣＰＥ０」とに関するタグが定義され、タスク「ＣＰＥ０」に対しては「Ｔｃｎ１」なるタスク集約名称ＴＣＮが定義されたことが判る。個々のタスクの処理内容については、一般的な技術を採用することができるので、本実施形態における説明は省略する。
【００６５】
プログラム整形部２０３は、タグ＜ＣＯＮ＞によって、個々のタスク間のデータ遷移関係を定義する。タグ＜ＣＯＮ＞は、ＳＲＣ、ＴＲＧ＿ＴＡＳＫ、及びＴＲＧ＿ＰＲＴなる属性を有する。ＳＲＣは、自タスクが複数の出力（出力ポート）を持つ場合、その何番目の出力であるかを定義する。例として、上述したタスク「Ｄａｔａ＿Ｉｎ」に関して説明すると、＜ＴＡＳＫ  ＮＡＭＥ＝“ＤＡＴＡ＿ＩＮ”＞の先頭行に記述されたタグ＜ＣＯＮ＞は、“ＳＲＣ＝０”であり、図７及び図８に示す通り、第１番目の出力ポート（出力ポート０）が指定されていることが判る。次に、“ＴＲＧ＿ＴＡＳＫ”には、相手先タスクの名前が記録される。“ＴＲＧ＿ＰＲＴ”は、当該相手タスクが複数の入力を持つ場合に、その何番目の入力にデータを転送するかが定義される。図７及び図８に示す通り、当該相手タスクが「ＣＰＥ０」であり、“ＴＲＧ＿ＰＲＴ＝０”なので、その相手タスクの第１番目の出力ポート（出力ポート０）が指定されていることが判る。
【００６６】
図９に例示する中間プログラム２０４は、図６乃至図８に示した操作例に加えて、”ＣＯＮＴＥＸＴ＿１”にはタスク「ＣＰＥ１」が設定され、且つ”ＣＯＮＴＥＸＴ＿２”が設定された場合を表すが、同様な手順であるため説明は省略する。
【００６７】
以上説明したように、プログラム整形部２０３は、ユーザがプログラム記述領域３０３に記述した全てのタスクとタスク間の関係に従って、上述した手順によって、中間プログラム２０４を生成する。
【００６８】
[コンパイラ２０５]
次に、コンパイラ２０５について説明する。コンパイラ２０５は、プログラム整形部２０３によって生成された中間プログラム２０４を、アーキテクチャ構成情報２０６を利用してオブジェクトコード２０７に変換する。ここでは、係る変換手順について、図１０を参照して概説する（詳細な手順は後述する実施例において説明する）。
【００６９】
図１０は、第１の実施形態に係るプログラム開発装置１００が実行するコンパイラ２０５の処理を示すフローチャートである。コンパイラ２０５は、まず、中間プログラム２０４を読み込み（ステップＳ１１）、次に、アーキテクチャ構成情報２０６を読み込む（ステップＳ１２）。アーキテクチャ構成情報２０６に含まれる情報については上述した通りである。
【００７０】
次に、コンパイラ２０５は、中間プログラム２０４に記述されている各タスクのＰＥへの配置と、当該ＰＥ間の接続関係を定義する配置配線を行う（ステップＳ１３）。配置配線処理については、図１１を参照して後述する。
【００７１】
コンパイラ２０５は、中間プログラム２０４の記述の中から、プログラム記述支援部２０１を利用してユーザがタスク集約名称ＴＣＮを付与した特定のタスク（上述した例では「Ｔｃｎ１」なるタスク集約名称ＴＣＮのタスク「ＣＰＥ０」）を検索する（ステップＳ１４）。
【００７２】
コンパイラ２０５は、タスク集約名称ＴＣＮが付与されたタスクをステップＳ１４にて検出した場合、中間プログラム２０４の記述の中に、同一のタスク集約名称ＴＣＮが、演算コアの実アーキテクチャにおいて、その演算コアを構成する複数のＰＥのうち、同一のＰＥに配置されているか否か判断する（ステップＳ１５）。この判断において、ステップＳ１４にて検出した当該タスク集約名称ＴＣＮが同一のＰＥとは異なる箇所に配置されている場合（ステップＳ１５にてＮＯ）、コンパイラ２０５は、処理を配置配線（ステップＳ１３）に戻す。このとき、コンパイラ２０５は、改めて行われる配置配線処理に対して、参考となるような情報を与えてもよい。例えば、コンパイラ２０５は、同一のＰＥにマッピングされなかったタスク集約名称ＴＣＮと、係るタスク集約名称ＴＣＮによって特定されるタスクの配置を優先して行うよう指示する情報を、改めて行われる配置配線処理に対して提供してもよい。もしくは、コンパイラ２０５は、ユーザにエラーを報知してから、オブジェクトコード２０７の生成処理を終了してもよい。
【００７３】
次に、コンパイラ２０５は、ステップＳ１３乃至ステップＳ１５の処理結果と、アーキテクチャ構成情報２０６に含まれる実アーキテクチャに関する情報に従って、当該演算コアを構成する個々のＰＥの設定（マッピング）を行う（ステップＳ１６）。そしてコンパイラ２０５は、ステップＳ１６にてマッピングされた状態において当該個々のＰＥが動作するように、中間プログラム２０４を、オブジェクトコード２０７に変換する（ステップＳ１７）。
【００７４】
図１１は、図１０に示すコンパイラ２０５の処理のうち、配置配線処理の詳細を示すフローチャートである。コンパイラ２０５は、配置配線（ステップＳ１３）を、以下のような手順で実行する。尚、同一のタスク集約名称ＴＣＮが付されたタスクが、同一のＰＥに配置されることが保障されるならば、本実施形態で説明する処理とは異なる配置配線処理を採用してもよい。例えば、ランダムな配置配線とトライ＆エラーとを実行する方法や、焼きなまし法（Ｓｉｍｕｌａｔｅｄ  Ａｎｎｅａｌｉｎｇ：ＳＡ）等の採用が想定される。
【００７５】
図１１において、コンパイラ２０５は、中間プログラム２０４の記述に含まれる全てのＣＰに対する処理ループＡ（ステップＳ１０１乃至ステップＳ１１７）を実行する。即ち、コンパイラ２０５は、先ず、ループＡにおいて、中間プログラム２０４の記述に含まれる＜ＣＰ＞タグを一つ選択する。次に、コンパイラ２０５は、選択したＣＰに含まれる全てのタスクに対する処理ループＢ（ステップＳ１０２乃至ステップＳ１１６）を実行する。即ち、コンパイラ２０５は、先ず、ループＢにおいて、当該選択したＣＰに含まれる全てのタスクの中の＜ＴＡＳＫ＞を一つ選択する。次に、コンパイラ２０５は、選択した＜ＴＡＳＫ＞に含まれる全てのタグ＜ＣＯＮ＞に対する処理ループＣ（ステップＳ１０３乃至ステップＳ１１５）を実行する。即ち、コンパイラ２０５は、先ず、ループＣにおいて、当該選択した＜ＴＡＳＫ＞の中から、タグ＜ＣＯＮ＞を一つ選択する。
【００７６】
コンパイラ２０５は、当該選択したタグ＜ＣＯＮ＞に記述されている情報（即ち、ＳＲＣ、ＴＲＧ＿ＴＡＳＫ、ＴＲＧ＿ＰＲＴ）を取得する（ステップＳ１０４）。次に、コンパイラ２０５は、現在注目しているタスク（ＴＲＧ＿ＴＡＳＫ）に関して、ＰＥへの配置が既に完了しているか否かを判断する（ステップＳ１０５）。当該ＴＲＧ＿ＴＡＳＫが未配置であった場合、コンパイラ２０５は、配置候補とすべきＰＥ（配置候補ＰＥ）を検索する（ステップＳ１０６）。この検索処理において、コンパイラ２０５は、アーキテクチャ構成情報２０６に含まれる上述した情報を利用する。具体的に、コンパイラ２０５は、まず、未だタスクが配置されていないＰＥを全て抽出し、抽出したＰＥの中から、現在注目しているタスク（ＴＲＧ＿ＴＡＳＫ）を配置したＰＥからデータ転送が可能な他のＰＥを、配置候補ＰＥとして抽出する。
【００７７】
次に、コンパイラ２０５は、タスク集約名称ＴＣＮによる配置候補ＰＥを絞り込む（ステップＳ１０７）。まず、コンパイラ２０５は、当該ＴＲＧ＿ＴＡＳＫにタスク集約名称ＴＣＮが付与されているか否かを確認する。この確認は、中間プログラム２０４を全て読み込んで検査すればよい。タスク集約名称ＴＣＮが付与されている場合、コンパイラ２０５は、該タスク集約名称ＴＣＮが設定されたＰＥが既に配置済みであるか否かを、それまでの処理結果を保持している内部情報を参照することによって検索する。既に配置済みの場合、コンパイラ２０５は、当該配置済みのＰＥを配置候補ＰＥに設定し、その他のＰＥは全て候補から削除する。一方、タスク集約名称ＴＣＮが付与されていない場合、或いは、タスク集約名称ＴＣＮが付与されていても未だ配置されていない場合、コンパイラ２０５は、当該その他のＰＥを候補から削除しない。
【００７８】
コンパイラ２０５は、配置候補ＰＥの中で、接続が可能なＰＥが存在するか否かを確認する（ステップＳ１０８）。接続可能なＰＥが存在した場合（ステップＳ１０８にてＹＥＳ）、コンパイラ２０５は、当該接続可能なＰＥの中から、ランダムに配置先を決定し（ステップＳ１１４）、ループＣにおいて、次のタグ＜ＣＯＮ＞に関する処理に遷移する。一方、接続可能なＰＥが存在しなかった場合（ステップＳ１０８にてＮＯ）、コンパイラ２０５は、全配置をリセットし（ステップＳ１０９）、ランダム配置のシードを更新する（ステップＳ１１０）。シード更新は、例えば、前回シードの＋１である。これによって、次回は異なる配置を試行することができる。
【００７９】
現在注目しているタスク（ＴＲＧ＿ＴＡＳＫ）に関して、ＰＥへの配置が既に完了いた場合（ステップＳ１０５にてＹＥＳ）、コンパイラ２０５は、当該タスクが配置されたＰＥに対して、現在注目しているＰＥから配線を接続できる否かを確認する（ステップＳ１１１）。この確認に際して、コンパイラ２０５は、上述したアーキテクチャ構成情報２０６を参照する。接続が可能な場合（ステップＳ１１１にてＹＥＳ）、コンパイラ２０５は、ループＣにおいて、次のタグ＜ＣＯＮ＞に関する処理に遷移する。一方、接続ができないと判断した場合（ステップＳ１１１にてＮＯ）、コンパイラ２０５は、全配置をリセットし（ステップＳ１１２）、ランダム配置のシードを更新する（ステップＳ１１３）。シード更新は、例えば、前回シードの＋１である。これによって、次回は異なる配置を試行することができる。
【００８０】
上述した本実施形態に係るプログラム開発装置１００によれば、実アーキテクチャの構成を意識しなくても、ユーザは、マルチコアプロセッサを構成する個々のコアにおいて実行されるプログラムを、容易且つ効率良く開発することができる。その理由は、以下の通りである。
【００８１】
即ち、本実施形態に係るプログラム記述支援部２０１によれば、ユーザは、ＧＵＩ（図５乃至図８）を利用して、演算リソースの宣言である１以上のタスクを、ＣＰ（コンテキスト・ポインタ）なる制御信号ＣＰの宣言によってまとめる。そして、ユーザは、希望するタスクにはタスク集約名称ＴＣＮを付与すると共に、係る制御信号ＣＰを１以上含むユーザプログラム２０２を記述することができる。この前提においてユーザプログラム２０２を記述すれば、ユーザは、実アーキテクチャの構成を意識しなくてよい。
【００８２】
そして、コンパイラ２０５は、記述されたユーザプログラム２０２に含まれる全ての制御信号ＣＰに亘って、同一のタスク集約名称ＴＣＮが付与されたタスクを、同一のＰＥに割り当てることが可能なオブジェクトコード２０７を生成する。即ち、コンパイラ２０５は、生成したオブジェクトコード２０７と、制御信号ＣＰとを関連付ける。
【００８３】
これにより、ユーザは、演算コアの実アーキテクチャを意識しなくとも、自らが設定したタスク集約名称ＴＣＮ（タグ情報）に従って、マルチコアプロセッサを構成する演算コア内部の動作（同一ＰＥにおける動作）を任意に制御可能なプログラムを、簡単且つ短時間で作成することができる。
【００８４】
＜第１の実施形態の実施例＞
次に、上述した第１の実施形態に係るプログラム開発装置１００のより具体的な実施例について説明する。
【００８５】
図１２は、第１の実施形態の実施例において、プログラム記述支援部２０１を利用して記述したユーザプログラム（ＣＯＮＴＥＸＴ＿１）の表示例を示す図である。即ち、図１２は、プログラム記述支援部２０１の実行によってユーザに提供されるＧＵＩを用いて、ユーザが上述した手順によって記述した、「ＣＯＮＴＥＸＴ＿１」なる名称のユーザプログラム２０２を示す。このプログラムには、タスク「Ｄａｔａ＿Ｉｎ」と、タスク「Ｄａｔａ＿Ｏｕｔ」との間に、３つのタスク（ＣＰＥ０、ＣＰＥ１、ＤＰＥ０）が配置されている。
【００８６】
係る「ＣＯＮＴＥＸＴ＿１」プログラムにおいて、タスク「Ｄａｔａ＿Ｉｎ」は、８つの出力ポートを有する。タスク「Ｄａｔａ＿Ｏｕｔ」は、８つの入力ポートを有する。タスク「ＣＰＥ」及び「ＤＰＥ」は、それぞれ、２つの入力ポートと、２つの出力ポートとを有する。そして、タスク「Ｄａｔａ＿Ｉｎ」の出力０及び１は、順に、タスク「ＣＰＥ０」の入力０、１に遷移することが記述され、タスク「Ｄａｔａ＿Ｉｎ」の出力５及び７は、順に、タスク「ＣＰＥ１」の入力０及び１に遷移することが記述されている。
【００８７】
更に、係る「ＣＯＮＴＥＸＴ＿１」プログラムにおいて、タスク「ＣＰＥ０」の出力１と、タスク「ＣＰＥ１」の出力０とは、順に、タスク「ＤＰＥ０」の入力０及び１に遷移することが記述されている。タスク「ＤＰＥ０」の出力０及び１は、順に、タスク「Ｄａｔａ＿Ｏｕｔ」の出力０及び５に遷移することが記述されている。
【００８８】
本実施例において、タスク「ＣＰＥ」及び「ＤＰＥ」には、ユーザが希望する任意のタスク集約名称ＴＣＮを付与することができる。図１２に示す例では、タスク「ＣＰＥ０」に“Ｔｃｎ１”というタスク集約名称ＴＣＮが付与された状態を表す。
【００８９】
図１３は、第１の実施形態の実施例において、プログラム記述支援部２０１を利用して記述したユーザプログラム（ＣＯＮＴＥＸＴ＿２）の表示例を示す図である。即ち、図１３は、図１２と同様な手順に従って、ユーザが記述した、「ＣＯＮＴＥＸＴ＿２」なる名称のユーザプログラム２０２を示す。
【００９０】
係る「ＣＯＮＴＥＸＴ＿２」プログラムにおいて、タスク「Ｄａｔａ＿Ｉｎ」及び「Ｄａｔａ＿Ｏｕｔ」は、図１２の場合と同様な入出力ポートを有する。そして、これらのタスクの間には、図１３に示すように、４つのタスク（ＣＰＥ５、ＣＰＥ６、ＣＰＥ７、ＤＰＥ５）が配置されている。タスク「Ｄａｔａ＿Ｉｎ」の出力０及び７は、順に、タスク「ＣＰＥ５」の入力０及び１に遷移することが記述されている。タスク「Ｄａｔａ＿Ｉｎ」の出力５は、タスク「ＤＰＥ５」の入力０及び１に遷移することが記述されている。即ち、タスク「Ｄａｔａ＿Ｉｎ」の出力５は、タスク「ＤＰＥ５」の２つの入力ポートにおいて複製（コピー）されることが判る。
【００９１】
更に「ＣＯＮＴＥＸＴ＿２」プログラムにおいて、タスク「ＣＰＥ５」の出力０及び１は、順に、タスク「ＣＰＥ６」の入力０及び１に遷移することが記述されている。タスク「ＤＰＥ５」の出力０及び１は、順に、タスク「ＣＰＥ７」の入力０及び１に遷移することが記述されている。そして、タスク「ＣＰＥ６」の出力０及び１と、タスク「ＣＰＥ７」の出力０及び１は、順に、タスク「Ｄａｔａ＿Ｏｕｔ」の入力０，１，２，３に遷移することが記述されている。「ＣＯＮＴＥＸＴ＿２」プログラムにおいて、タスク「ＣＰＥ６」には“Ｔｃｎ１”というタスク集約名称ＴＣＮが付与されている。このタスク集約名称ＴＣＮは、図１２に示す「ＣＯＮＴＥＸＴ＿１」プログラムにおいてタスク「ＣＰＥ０」に付与されたタスク集約名称ＴＣＮと同一である。
【００９２】
図１４は、第１の実施形態の実施例において、図１２及び図１３に示すユーザプログラム２０２に基づいて、プログラム整形部２０３が生成した中間プログラムを示す図である。
【００９３】
本実施例において、プログラム整形部２０３は、ユーザプログラム２０２に記述されていた全てのＣＰを、１つのファイルに格納する。より具体的に、プログラム整形部２０３は、図１４に示す＜ＵＳＥＲ＿ＰＲＯＧＲＡＭ＿ＭＡＳＴＥＲ＞と、＜／ＵＳＥＲ＿ＰＲＯＧＲＡＭ＿ＭＡＳＴＥＲ＞との間に、当該プログラムに記述されていたＣＰに対応する中間プログラムのコードを記述する。プログラム整形部２０３は、この中間プログラムのコード記述を、図１２に示す「ＣＯＮＴＥＸＴ＿１」プログラムと、図１３に示す「ＣＯＮＴＥＸＴ＿２」プログラムとを対象として行う。
【００９４】
即ち、当該各ＣＰに対応するプログラム内容は、＜ＣＰ  ＮＡＭＥ＝＞と、＜／ＣＰ＞との間に配置される。「ＮＡＭＥ＝」の右辺には、ＣＰの名前が登録される。本実施例においては、上述した実施形態において図５等を参照して説明したように、”ＣＯＮＴＥＸＴ＿１”及び”ＣＯＮＴＥＸＴ＿２”なる２つのＣＰがある。このため、図１４に示す中間プログラムには、当該２つのＣＰに関するコードが展開されていることが判る。より具体的に、プログラム整形部２０３は、各ＣＰが持つタスクに関する設定や接続関係を規定するために、以下の通り記述する。
【００９５】
・タスクの設定：  ＜ＴＡＳＫ  ＮＡＭＥ＝  ＴＣＮ＝＞及び＜ＴＡＳＫ＞、
上記において、「ＴＡＳＫ  ＮＡＭＥ＝」の右辺には、タスクの名前が登録される。「ＴＣＮ＝」の右辺には、上述したＧＵＩを利用してユーザが設定した場合にだけ、タスク集約名称ＴＣＮが登録される。
【００９６】
・タスク間の接続関係：  ＜ＣＯＮ  ＳＲＣ＝  ＴＲＧ＿ＴＡＳＫ＝  ＴＲＧ＿ＰＲＴ＞及び＜／ＣＯＮ＞、
上記において「ＳＲＣ＝」の右辺には、自タスクから他のタスクにデータ転送を行う際のソースポートが登録される。「ＴＲＧ＿ＴＡＳＫ＝」の右辺には、出力先タスクが登録される。「ＴＲＧ＿ＰＲＴ」の右辺には、当該出力先タスクの到達ポートが登録される。
【００９７】
本願において、タスク自体の演算内容に関する設定等については、一般的な技術を採用することができるので、本実施形態における説明は省略する。
【００９８】
本実施例においては、上述した既定に従って、図１４に示す通り、ＣＰ＝ＣＯＮＴＥＸＴ＿１の内容と、ＣＰ＝ＣＯＮＴＥＸＴ＿２の内容とが順に記述されている。具体的には、”ＣＯＮＴＥＸＴ＿１”には、図１２に示した「ＣＯＮＴＥＸＴ＿１」プログラムに応じて、５つのタスク（即ち、ＤＡＴＡ＿ＩＮ、ＤＡＴＡ＿ＯＵＴ、ＣＰＥ０、ＣＰＥ１、ＤＰＥ０）が定義される。「ＣＯＮＴＥＸＴ＿１」プログラムには、タスク「ＣＰＥ０」にタスク集約名称ＴＣＮ「Ｔｃｎ１」が登録されていたので、図１４に示す中間プログラムのコードにおいても、対応する記述箇所に同一のタスク集約名称ＴＣＮが登録されている。
【００９９】
次に、プログラム整形部２０３は、上記の如く定義した各タスク間の接続関係を定義する。具体的には、まず、タスク「ＤＡＴＡ＿ＩＮ」では、出力ポート０、１、５、７が、順に、タスク「ＣＰＥ０」及び「ＣＰＥ１」の入力ポート０、１に接続されていることを表す計４つの接続関係が定義される。具体例を説明すると、図１２において、タスク「ＤＡＴＡ＿ＩＮ」の出力ポート０は、タスク「ＣＰＥ０」の入力ポート０に接続されている。このため、上述した既定に従って、プログラム整形部２０３は、図１４に示す４行目のコードの通り、＜ＣＯＮ  ＳＲＣ＝“０”、ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ０”、ＴＲＧ＿ＰＲＴ＝“０”＞と定義する。他のポートについても同様なので、重複する説明は省略する。
【０１００】
そして、図１４においては、タスク「ＤＡＴＡ＿ＩＮ」についての記述の後に、残りの４つのタスク（ＣＰＥ０、ＣＰＥ１、ＤＰＥ０、ＤＡＴＡ＿ＯＵＴ）について同様に定義されることが判る。但し、タスク「ＤＡＴＡ＿ＯＵＴ」は、その後のタスクが接続されていないので、上述したそのほかのタスクのような接続関係を表す記述は定義されない。
【０１０１】
図１４に示す中間プログラムのコードには、このような「ＣＯＮＴＥＸＴ＿１」プログラムに関する記述に続いて、同様な規定に従って、「ＣＯＮＴＥＸＴ＿２」プログラムに関する記述が定義される。即ち、「ＣＯＮＴＥＸＴ＿２」プログラムに関して、プログラム整形部２０３は、係る「ＣＯＮＴＥＸＴ＿２」プログラムが含む６つのタスク（即ち、ＤＡＴＡ＿ＩＮ、ＤＡＴＡ＿ＯＵＴ、ＣＰＥ５、ＣＰＥ６、ＣＰＥ７、ＤＰＥ５）について記述する。そして、図１３に示したように、タスク「ＣＰＥ６」には、ユーザによってタスク集約名称ＴＣＮ「Ｔｃｎ１」が登録されていた。このため、プログラム整形部２０３は、図１４に示すタスク「ＣＰＥ６」に関する記述中に、同一のタスク集約名称ＴＣＮを登録する。
【０１０２】
プログラム整形部２０３は、当該各タスクの接続関係について、上述した「ＣＯＮＴＥＸＴ＿１」プログラムと同様な手順及び規定に従って、「ＣＯＮＴＥＸＴ＿２」プログラム（図１３）に応じて、図１４に示す如く記述する（個々の記述の説明は省略する）。
【０１０３】
ここで、説明を容易にすべく、本実施例に係るプログラム開発装置１００がオブジェクトコード２０７の供給対象とする演算コアの実アーキテクチャについて説明する。その後、係る実アーキテクチャを前提として、当該プログラム開発装置１００がどのようにプログラムをマッピングするかについて説明することとする。
【０１０４】
図１５は、第１の実施形態の実施例におけるプログラム開発装置１００が生成するオブジェクトコード２０７が実装される演算コアの実アーキテクチャを概念的に示すブロック図である。
【０１０５】
本実施例が対象とする演算コアの実アーキテクチャ（構成）は、ＰＥとして、ＣＰＥ＿Ａ、ＣＰＥ＿Ｂ、ＣＰＥ＿Ｃ、ＤＰＥ＿Ａ、ＤＰＥ＿Ｂ、ＤＰＥ＿Ｃ、ＲＯＵＴＥＲ＿Ａを有する。これらのＰＥは、オブジェクトコード２０７の供給（実装）によって、「ＣＯＮＴＥＸＴ＿１」プログラム（図１２）及び「ＣＯＮＴＥＸＴ＿２」プログラム（図１３）によってユーザが記述した接続関係を満足するように接続（配置・配線）される。
【０１０６】
図１５に示す実アーキテクチャは、同図に破線枠で示す“ＤＡＴＡ＿ＩＮ”及び“ＤＡＴＡ＿ＯＵＴ”を介して、メモリ・モジュール（不図示）と接続されているとする。図１５に示す“ＤＡＴＡ＿ＩＮ”及び“ＤＡＴＡ＿ＯＵＴ”は、例えば、当該実アーキテクチャとは異なる外部ＰＥである。この外部ＰＥは、演算対象であるデータを蓄えるメモリ・モジュール（不図示）との入出力を担当する。このため、図１５に示すように、“ＤＡＴＡ＿ＩＮ”は、ルータＡに接続可能な８つの出力ポート（０から７）を有することとする。“ＤＡＴＡ＿ＯＵＴ”は、ルータＡに接続可能な８つの入力ポート（０から７）を有することとする。
【０１０７】
具体例として、係る外部ＰＥは、例えば、図１６に示すフォーマットをなすデータによって、当該メモリ・モジュールと、当該実アーキテクチャとのデータの入出力を司る。図１６に例示するデータフォーマットは、１６ビットのデータと、８ビットの制御信号（制御信号ＣＰ）と、８ビットのｓｒｃ＿ｉｎｆｏ領域とによって構成されている。ｓｒｃ＿ｉｎｆｏ領域は、当該実アーキテクチャを構成する各ＰＥが１６ビットの当該データを当該メモリ・モジュールに転送する際に、自ＰＥを識別可能な識別子（ＩＤ）を付与する領域である。係るｓｒｃ＿ｉｎｆｏは、個々のＰＥを判別可能であれば、数字や記号、各ＰＥの名称などであってもよい。そして、本実施例において、図１５に示す実アーキテクチャを遷移するデータは、図１６に示すデータフォーマットに従うこととする。
【０１０８】
本実施例において、上述した中間プログラム２０４に記述された「ＣＰ＝ＣＯＮＴＥＸＴ＿１」及び「ＣＰ＝ＣＯＮＴＥＸＴ＿２」は、順に、制御信号ＣＰ＝１、２によって表せる（特定できる）こととする。そして、これら２種類の制御信号ＣＰの外部からの切り替えによって、図１５に示す実アーキテクチャを構成する複数のＰＥに関して、演算内容及び接続関係等を、個々のＣＰに対応する構成に変更できることとする。即ち、個々のＣＰに対応する構成とは、当該制御信号ＣＰに対応するプログラムに記述された、当該実アーキテクチャが実現すべき構成である。これは、当該ＣＰ間において、異なるＰＥを共有するような設定を行ってよいことを意味する。
【０１０９】
図１５において、ＤＡＴＡ＿ＩＮは、メモリ・モジュール（不図示）とのインタフェースを担当し、入力されたデータと制御信号ＣＰとを、ルータＡ（ＲＯＵＴＥＲ＿Ａ）に転送する。ＤＡＴＡ＿ＩＮは、制御信号ＣＰに対応した遅延を、当該入力されたデータに対して付与してから、ルータＡに入力することができることとする。具体的に、ＤＡＴＡ＿ＩＮは、例えば図１７に示すように、制御信号ＣＰ＝１に対しては０サイクルの遅延を与え、制御信号ＣＰ＝２に対しては１２８サイクルの遅延を与えてから、当該入力されたデータを、ルータＡに入力することができる。
【０１１０】
ルータＡは、当該実アーキテクチャを構成する複数のＰＥ間、並びに、外部ＰＥとのデータの送受信を司る。即ち、ルータＡは、外部ＰＥ、ＣＰＥ、ＤＰＥ、或いは、当該メモリ・モジュールから転送されたデータを、制御信号ＣＰに従って、適切なＣＰＥ、ＤＰＥ、ＤＡＴＡ＿ＩＮ、ＤＡＴＡ＿ＯＵＴに転送するＰＥである。このルータＡは、転送先テーブル（不図示）を有しており、入力された制御信号ＣＰ及びｓｒｃ＿ｉｎｆｏ情報の内容を判断することによって、適切な転送先を判断する。係る制御信号ＣＰ及びｓｒｃ＿ｉｎｆｏ情報は、ユーザプログラム２０２を解析することによって生成されたオブジェクトコード２０７に従って生成される。
【０１１１】
ＤＰＥ（ＤＰＥ＿Ａ、ＤＰＥ＿Ｂ、ＤＰＥ＿Ｃ）は、制御信号ＣＰ（本実施例では“１”または“２”）に対応した遅延を、入力されたデータ（図１６）に対して施し、係る遅延が施されたデータを出力するＰＥである。本遅延は、ＣＰ（即ち、当該制御信号ＣＰ）毎に定義することができる。ＤＰＥは、入力されたＣＰに応じた遅延（図１７）を、当該入力された２種類のデータに対して適用し、適用後のデータをＲＯＵＴＥＲ＿Ａに入力する。
【０１１２】
ＣＰＥ（ＣＰＥ＿Ａ、ＣＰＥ＿Ｂ、ＣＰＥ＿Ｃ）は、入力された２種類のデータに対し、制御信号ＣＰに対応した演算を施し、その演算結果を出力するＰＥである。本実施例においては、説明を簡単にするため、四則演算に対応したＣＰＥであるとする。
【０１１３】
図１８Ａ及び図１８Ｂは、第１の実施形態の実施例におけるプログラム開発装置１００が、オブジェクトコード２０７を生成する際に参照するアーキテクチャ構成情報２０６を例示する図である。図１８Ａ及び図１８Ｂに示すアーキテクチャ構成情報２０６は、図面表現の制約から２つの図面に分けて表しているが、実際は当該２つの図面を合せた内容を含む１つのデータセット（データレコード）である。
【０１１４】
図１８Ａ及び図１８Ｂに示すアーキテクチャ構成情報２０６は、図１５に概念的に示されたブロック図の実アーキテクチャを表しており、その実アーキテクチャが有する各ＰＥとルータ（ＲＯＵＴＥＲ）とが有する入出力ポート間の接続関係が記述されている。
【０１１５】
図１８Ａ及び図１８Ｂに示す通り、アーキテクチャ構成情報２０６は、＜ＡＲＣＨＩＴＥＣＴＵＲＥ＿ＭＡＳＴＥＲ＞が先頭に宣言されると共に、ＰＥ毎に、＜ＰＥ  ＮＡＭＥ＝＞と＜／ＰＥ＞とによって宣言される。即ち、図１８Ａ及び図１８Ｂに示す例の場合、アーキテクチャ構成情報２０６には、ＲＯＵＴＥＲ＿Ａ、ＣＰＥ＿Ａ、ＣＰＥ＿Ｂ、ＣＰＥ＿Ｃ、ＤＰＥ＿Ａ、ＤＰＥ＿Ｂ、ＤＰＥ＿Ｃなる７つのＰＥが宣言されている。この宣言は、属性としてＮＡＭＥを持ち、対象とするＰＥ（下記の「自ＰＥ」）の名前が、「ＮＡＭＥ＝」の右辺に記述される。＜ＰＥ  ＮＡＭＥ＝＞と＜／ＰＥ＞との間には、自ＰＥと他のＰＥとの接続関係が規定される。
【０１１６】
より具体的に、アーキテクチャ構成情報２０６には、以下の通り接続情報を規定（定義）することが可能である。即ち、
・ＩＮ＿Ｐ  ：  自ＰＥの入力ポート番号（入力ポートｎ）、
・ＳＲＣ＿Ｍ：  自ＰＥへの送信元である他のＰＥ、
・ＳＲＣ＿Ｐ：  自ＰＥへの送信元である他のＰＥの出力ポート番号（出力ポートｎ）、
・ＯＵＴ＿Ｐ：  自ＰＥの出力ポート番号、
・ＴＲＧ＿Ｍ：  自ＰＥからの送信先である他のＰＥ、
・ＴＲＧ＿Ｐ：  自ＰＥからの送信先である他のＰＥの入力ポート番号。
【０１１７】
例として、図１８Ａ及び図１８Ｂにおいて、＜ＰＥ  ＮＡＭＥ＝“ＣＰＥ＿Ａ”＞と＜／ＰＥ＞との間に記述されたＣＰＥ＿Ａに関する定義を参照する。この場合、係るＣＰＥ＿Ａは、自ＰＥとして、２つの入力ポート（０，１）と２つの出力ポート（０，１）とを有するＰＥである。係る２つの入力ポートへの送信元は、ＳＲＣ＿Ｍによって表され、それぞれ、ＲＯＵＴＥＲ＿Ａである。係る２つの出力ポートからの送信先は、ＴＲＧ＿Ｍによって表され、それぞれ、ＲＯＵＴＥＲ＿Ａである。そして、自ＰＥの当該入力ポートに対する送信元の出力ポート番号は、ＳＲＣ＿Ｐによって表され、順に、ポート８，９である。自ＰＥの当該出力ポートに対する送信先の入力ポート番号は、ＴＲＧ＿Ｐによって表され、順に、ポート８，９である。
【０１１８】
アーキテクチャ構成情報２０６は、その他のＰＥについても同様な規則に従って記述されており、同様な説明は省略する。
【０１１９】
以上の前提に基づいて、本実施例に係るプログラム開発装置１００のコンパイラ２０５が中間プログラム２０２をマッピングする手順について、図１０、図１１、図１４、図１８Ａ及び図１８Ｂ等を適宜参照して説明する。
【０１２０】
まず、コンパイラ２０５は、中間プログラム２０２とアーキテクチャ構成情報２０６とを取得し（ステップＳ１１、ステップＳ１２）、内部データとして保持する。
【０１２１】
次に、コンパイラ２０５は、配置配線アルゴリズム（ステップＳ１３、図１１）を実行する。コンパイラ２０５は、中間プログラム２０２（図１４）において、まず、ＣＰとして”ＣＯＮＴＥＸＴ＿１”に定義された各タスクのマッピングを開始する（図１１のループＡ）。次に、コンパイラ２０５は、この”ＣＯＮＴＥＸＴ＿１”に定義された各タスクのうち、はじめに定義されているタスク「ＤＡＴＡ＿ＩＮ」のマッピングを開始する（図１１のループＢ）。本実施例において、タスク「ＤＡＴＡ＿ＩＮ」は、上述した通り、アーキテクチャ構成情報２０６によって、外部ＰＥからの入力を示す。コンパイラ２０５は、このタスク「ＤＡＴＡ＿ＩＮ」についての記述に含まれるタグ＜ＣＯＮ＞に定義された接続情報の分析を開始する（図１１のループＣ）。
【０１２２】
コンパイラ２０５は、まず、図１４に例示された中間プログラム２０２中のタスク「ＤＡＴＡ＿ＩＮ」に関する第一行目の記述＜ＳＲＣ＝“０”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ０”  ＴＲＧ＿ＰＲＴ＝“０”＞を取得する。コンパイラ２０５は、係る記載を参照することにより、現在注目しているＴＲＧ＿ＴＡＳＫにタスク集約名称ＴＣＮが付与されているか否か、並びに、既に配置が完了しているか否かを確認する（ステップＳ１０４、ステップＳ１０５）。本実施例では、図１４に示すユーザプログラム２０２において、タスク「ＣＰＥ０」にはタスク集約名称ＴＣＮ（Ｔｃｎ１）が付与されていることが判る。しかし、タスク「ＣＰＥ０」は、本実施例における一連の処理手順の説明において初出であるので、このタスク「ＣＰＥ０」は未だ配置が行われていない。よって、コンパイラ２０５は、タスク「ＣＰＥ０」を配置することが可能なＰＥ（配置可能ＰＥ）の探索を開始する（ステップＳ１０５にてＮＯ）。
【０１２３】
このとき、アーキテクチャ構成情報２０６（図１８Ａ及び図１８Ｂ）を参照すると、ＤＡＴＡ＿ＩＮの出力ポート０から７に接続可能なＰＥは、ＲＯＵＴＥＲ＿Ａの入力ポート０〜７である。ここで、現在注目している中間プログラム２０２内の”ＣＯＮＴＥＸＴ＿１”に関する記述のうち、タスク「ＤＡＴＡ＿ＩＮ」に関する記述を参照すると、「ＴＲＧ＿ＴＡＳＫ＝」の右辺から、ユーザは、「ＤＡＴＡ＿ＩＮ」からの入力を、ＣＰＥに出力したいことが判る。そこで、アーキテクチャ構成情報２０６に記述されたＣＰＥに関する宣言を参照すると、ＣＰＥ＿Ａ、ＣＰＥ＿Ｂ、ＣＰＥ＿Ｃが定義されている。具体的な例を挙げると、ＣＰＥ＿Ａの場合、コンパイラ２０５は、「ＮＡＭＥ＝ＲＯＵＴＥＲ＿Ａ」の＜ＣＯＮ＞タグ１行目を参照し、次に、「ＮＡＭＥ＝ＣＰＥ＿Ａ」の＜ＣＯＮ＞タグ１行目を参照する。その結果、コンパイラ２０５は、ＤＡＴＡ＿ＩＮの出力ポート０から、ＲＯＵＴＥＲ＿Ａの入力ポート０に入力され、次に、ＲＯＵＴＥＲ＿Ａの出力ポート８を通って、ＣＰＥ＿Ａの入力ポート０に入力する接続が可能であると判断する。次に、ランダム配置を試みる（ステップＳ１０６〜ステップＳ１０８）。ここでは、ＣＰＥ＿Ａが選択されたとする。
【０１２４】
コンパイラ２０５は、上記の処理によって、現在注目しているタスク「ＣＰＥ０」をＣＰＥ＿Ａに配置する（割り付ける）ことを決定する。
【０１２５】
次に、コンパイラ２０５は、係るＣＰＥ＿Ａに対する接続設定を行う（ステップＳ１１４）。ここでは、前記の通り、ＤＡＴＡ＿ＩＮの出力ポート０から、ＲＯＵＴＥＲ＿Ａの入力ポート０に入力され、次に、ＲＯＵＴＥＲ＿Ａの出力ポート８を通って、ＣＰＥ＿Ａの入力ポート０に入力するという接続情報を、コンパイラ２０５は保持することとする。
【０１２６】
次に、コンパイラ２０５は、図１４に例示された中間プログラム２０２中のタスク「ＤＡＴＡ＿ＩＮ」に関する第二行目のタグ＜ＣＯＮ＞に定義された接続情報を取得する（ステップＳ１０４）。係る第二行目のタグ＜ＣＯＮ＞に関する記述は、＜ＣＯＮ  ＳＲＣ＝“１”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ０”  ＴＲＧ＿ＰＲＴ＝“１”＞である。コンパイラ２０５は、上述した手順と同様に、上記第一行目に関する処理結果を前提に分析を進めると、タスク「ＣＰＥ０」はタスク集約名称ＴＣＮが付与されており、既にＣＰＥ＿Ａに配置されていることが判る（ステップＳ１０５にてＹＥＳ）。そこで、コンパイラ２０５は、ＣＰＥ＿Ａを候補として登録し、タスク「ＣＰＥ０」を、ＣＰＥ＿Ａに配置可能であるか検査する。即ち、上述した処理によって、ＣＰＥ＿Ａには、タスク「ＣＰＥ０」を配置することを決定済みであるので、コンパイラ２０５は、そのような状態のＣＰＥ＿Ａに、更なる配線を設定できるか否かを検査する。その結果、コンパイラ２０５は、図１８Ａ及び図１８Ｂに示すアーキテクチャ構成情報２０６において、「ＮＡＭＥ＝ＲＯＵＴＥＲ＿Ａ」の＜ＣＯＮ＞タグ２行目を参照し、次に、「ＮＡＭＥ＝ＣＰＥ＿Ａ」の＜ＣＯＮ＞タグ２行目を参照する。これにより、コンパイラ２０５は、ＤＡＴＡ＿ＩＮの出力ポート１から、ＲＯＵＴＥＲ＿Ａの入力ポート９を通り、ＣＰＥ＿Ａの入力ポート１に入力する接続が可能であると判断する。このため、コンパイラ２０５は、タスク「ＣＰＥ０」を、ＣＰＥ＿Ａに配置可能であると判断する。そこで、コンパイラ２０５は、この接続関係を表す情報によって、係るＣＰＥ＿Ａの接続設定を更新する。
【０１２７】
次に、コンパイラ２０５は、上記第一及び第二行目の結果を前提として、第三及び第四行目のタグ＜ＣＯＮ＞に定義された接続情報について、同様な処理を実行する。
【０１２８】
第三行目の記述は、＜ＣＯＮ  ＳＲＣ＝“５”  ＴＲＧ＿ＴＡＳＫ  ＝“ＣＰＥ１”  ＴＲＧ＿ＰＲＴ＝“０”＞である。タスク「ＣＰＥ１」は未配置であり、タスク集約名称ＴＣＮは付与されていない。コンパイラ２０５は、上記と同様な配置処理によって、ＣＰＥ＿Ｂ及びＣＰＥ＿Ｃが配置候補ＰＥであり、どちらにもタスク「ＣＰＥ１」を配置可能であると判断する。本実施例では、ランダム配置によってＣＰＥ＿Ｂが選択されたとする。
【０１２９】
そして、第四行目の記述は、＜ＣＯＮ  ＳＲＣ＝“７”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ１”  ＴＲＧ＿ＰＲＴ＝“１”＞である。ここで、タスク「ＣＰＥ１」は、前述した第三行目の処理においてＣＰＥ＿Ｂに既に配置されているので、コンパイラ２０５は、係るＣＰＥ＿Ｂへの接続が可能か否かを、アーキテクチャ構成情報２０６（図１８Ａ及び図１８Ｂ）を参照することによって判断する。この場合、コンパイラ２０５は、ＤＡＴＡ＿ＩＮの出力ポート７から、ＲＯＵＴＥＲ＿Ａの出力ポート１１を通って、ＣＰＥ＿Ｂの入力ポート１に接続することが可能と判断する。即ち、図１５に示す実アーキテクチャが表されているアーキテクチャ構成情報２０６において接続関係を確認すると、ＤＡＴＡ＿ＩＮの出力ポート７と、ＲＯＵＴＥＲ＿Ａの入力ポート７とが接続されており、ＲＯＵＴＥＲ＿Ａの出力ポート１１と、ＣＰＥ＿Ｂの入力ポート１とが接続されていることが判る。よって、ＲＯＵＴＥＲ＿Ａ内部において、入力ポート７と出力ポート１１との接続が設定されれば、前述した接続は可能である。よって、「ＣＰＥ１」は、ＣＰＥ＿Ｂに接続可能と判断できるので、コンパイラ２０５は、この接続関係を表す情報によって、係るＣＰＥ＿Ｂの接続設定を更新する。
【０１３０】
以上で、タスク「ＤＡＴＡ＿ＩＮ」についての分析は終了である。コンパイラ２０５は、図１４に示す中間プログラム２０２において、ＣＰＥ０なる名称のタスク（ＴＡＳＫ  ＮＡＭＥ＝“ＣＰＥ０”）についての分析を開始する（図１１のループＣ）。図１４において、ＣＰＥ０に関するタグ＜ＣＯＮ＞に定義された設定は１つ（１行）であり、対応する記述内容は、＜ＣＯＮ  ＳＲＣ＝“１”  ＴＲＧ＿ＴＡＳＫ＝“ＤＰＥ０”  ＴＲＧ＿ＰＲＴ＝“０”＞である。このとき、タスク「ＤＰＥ０」は未配置であり、タスク集約名称ＴＣＮの設定は無い。そこで、コンパイラ２０５は、配置候補ＰＥを、アーキテクチャ構成情報２０６（図１８Ａ及び図１８Ｂ）を参照することによって検索する（ステップＳ１０６）。この場合、ＣＰＥ０の出力ポート１を通って接続できるＰＥは、ＤＰＥ＿Ａ、ＤＰＥ＿Ｂ、ＤＰＥ＿Ｃの３つであることが判る。よって、コンパイラ２０５は、これら３つを候補として登録する。更に、本実施例では、当該３つのＰＥの何れにも接続できるため、これら３つのＰＥ（ＤＰＥ＿Ａ、ＤＰＥ＿Ｂ、ＤＰＥ＿Ｃ）は、配置可能ＰＥである。そこで、コンパイラ２０５は、これら３つのＰＥの中から、ランダムに配置を決定する（ステップＳ１０７〜ステップＳ１１４）。ここでは、ＣＰＥ＿ＡからＲＯＵＴＥＲ＿Ａへの接続が設定済みなので、ＤＰＥ＿Ａが選択されたとする。よって、コンパイラ２０５は、ＣＰＥ０（即ち、ＣＰＥ＿Ａ）の出力ポート１からＲＯＵＴＥＲ＿Ａの入力ポート９へのパス（上記の処理によって決定済み）と、ＲＯＵＴＥＲ＿Ａの出力ポート１４を通過し、ＤＰＥ＿Ａの入力ポート０に接続するパスとを、接続設定に追加する。
【０１３１】
次に、タスク「ＣＰＥ１」についての分析に移行する。タスク「ＣＰＥ１」に関するタグ＜ＣＯＮ＞に定義された設定は、＜ＣＯＮ  ＳＲＣ＝“０”  ＴＲＧ＿ＴＡＳＫ＝“ＤＰＥ０”  ＴＲＧ＿ＰＲＴ＝“１”＞である。ここで、タスク「ＤＰＥ０」は、ＤＰＥ＿Ａに既に配置済みであるので、コンパイラ２０５は、接続確認を行う。具体的には、タスク「ＣＰＥ１」は、前記の通りＣＰＥ＿Ｂに配置されており、タスク「ＤＰＥ０」はＤＰＥ＿Ａに配置されている。これらの情報を元にアーキテクチャ構成情報２０６を参照すると、ＣＰＥ＿Ｂの出力ポート０からは、ＲＯＵＴＥＲ＿Ａの入力ポート１０、及び、出力ポート１５を通り、ＤＰＥ＿Ａの入力ポート１に接続可能であることが判る。よって、コンパイラ２０５は、この接続関係を表す情報によって、係るＤＰＥ＿Ａの接続設定を更新する。
【０１３２】
次に、同様な手順により、コンパイラ２０５は、タスク「ＤＰＥ０」に関する分析を開始する。図１４において、ＤＰＥ０に関するタグ＜ＣＯＮ＞に定義された設定は以下の２つである。即ち、
・＜ＣＯＮ  ＳＲＣ＝“０”  ＴＲＧ＿ＴＡＳＫ＝“ＤＡＴＡ＿ＯＵＴ”  ＴＲＧ＿ＰＲＴ＝“０”＞、
・＜ＣＯＮ  ＳＲＣ＝“１”  ＴＲＧ＿ＴＡＳＫ＝“ＤＡＴＡ＿ＯＵＴ２”  ＴＲＧ＿ＰＲＴ＝“１”＞。
【０１３３】
上記の記述において、タスク「ＤＡＴＡ＿ＯＵＴ」は、本実施例において既に外部ＰＥとして配置及び登録が完了しているので、接続確認が必要である。具体的には、ＤＰＥ０は、前記の通り、ＤＰＥ＿Ａに配置されている。この情報を基にアーキテクチャ構成情報２０６（図１８Ａ及び図１８Ｂ）を参照する。その結果、ＤＰＥ＿Ａの出力ポート０及び１からは、それぞれＲＯＵＴＥＲ＿Ａの入力ポート１４及び１５、そして、出力ポート０及び１を通れば、ＤＡＴＡ＿ＯＵＴの出力ポート０及び１に接続可能であることが判る。即ち、１本目の設定は、ＤＰＥ＿Ａの出力ポート０から、ＲＯＵＴＥＲ＿Ａの入力ポート１４を介して、ＤＡＴＡ＿ＯＵＴの出力ポート０への設定である。２本目の設定は、ＤＰＥ＿Ａの出力ポート１から、ＲＯＵＴＥＲ＿Ａの入力ポート１５を介して、ＤＡＴＡ＿ＯＵＴの出力ポート１への設定である。よってコンパイラ２０５は、この内容を表すように接続設定を更新する。
【０１３４】
以上で、ＣＰ＝ＣＯＮＴＥＸＴ＿１の分析は終了である。コンパイラ２０５は、次に、ＣＰ＝ＣＯＮＴＥＸＴ＿２についても同様の分析を開始する。この場合、ＣＰが異なるので、タスクにタスク集約名称ＴＣＮが付与されていることにより制約がない限りは、コンパイラ２０５は、”ＣＯＮＴＥＸＴ＿２”に関する配置配線において、既に完了した”ＣＯＮＴＥＸＴ＿１” に関する設定による制約を受けずに一連の処理を実行できる。
【０１３５】
以下、ＣＰ＝ＣＯＮＴＥＸＴ＿２についてコンパイラ２０５が実行する処理について説明する（上述した説明と同様な処理構成については重複する説明は省略する）。
【０１３６】
先ず、本実施例では、図１４に示す中間プログラム２０２を参照すると判るように、コンパイラ２０５は、“ＣＯＮＴＥＸＴ＿２”の場合も、タスク「ＤＡＴＡ＿ＩＮ」の分析から開始する。このタスクに関する第一行目の記載は、＜ＣＯＮ  ＳＲＣ＝“０”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ５”  ＴＲＧ＿ＰＲＴ＝“０”＞である。本実施例において、タスク「ＣＰＥ５」は未だ配置であり、且つ、タスク集約名称ＴＣＮも付与されていない。そのため、コンパイラ２０５は、ＤＡＴＡ＿ＩＮからの接続が可能な配置候補ＰＥを探索する（ステップＳ１０４〜ステップＳ１０６）。その結果、コンパイラ２０５は、上述した手順と同様に、ＣＰＥ＿Ａ、ＣＰＥ＿Ｂ、ＣＰＥ＿Ｃを、配置候補ＰＥとして抽出する（ステップＳ１０７）。ここでは、ＣＰＥ＿Ｂが選択されたとする。コンパイラ２０５は、上述した場合と同様な手順によって、現在注目しているタスク「ＤＡＴＡ＿ＩＮ」がＣＰＥ＿ＢなるＰＥに配置・配線されるよう、接続設定を更新する。
【０１３７】
次に、コンパイラ２０５は、ＤＡＴＡ＿ＩＮに関する第二行目の記述＜ＣＯＮ  ＳＲＣ＝“５”  ＴＲＧ＿ＴＡＳＫ＝“ＤＰＥ５”  ＴＲＧ＿ＰＲＴ＝“０”＞の分析を開始する（図１１のループＣ）。本実施例においてＤＰＥ５は未配置であり、且つ、タスク集約名称ＴＣＮも付与されていない。そのため、コンパイラ２０５は、ＤＡＴＡ＿ＩＮからの接続が可能な配置候補ＰＥを探索する（ステップＳ１０４〜ステップＳ１０６）。その結果、コンパイラ２０５は、上述した手順と同様に、ＤＰＥ＿Ａ、ＤＰＥ＿Ｂ、ＤＰＥ＿Ｃを、配置候補ＰＥとして抽出する（ステップＳ１０７）。ここでは、ＤＰＥ＿Ｃが選択されたとする。コンパイラ２０５は、上述した場合と同様な手順によって、現在注目しているタスク「ＤＡＴＡ＿ＩＮ」がＤＰＥ＿ＣなるＰＥに配置・配線されるよう、接続設定を更新する。
【０１３８】
次に、コンパイラ２０５は、ＤＡＴＡ＿ＩＮに関する第三行目の記述＜ＣＯＮ  ＳＲＣ＝“５”  ＴＲＧ＿ＴＡＳＫ＝“ＤＰＥ５”  ＴＲＧ＿ＰＲＴ＝“１”＞の分析を開始する（図１１のループＣ）。ＤＰＥ５は、上述した第二行目の記述に関する一連の処理によって配置済みである。そのため、コンパイラ２０５は、接続可能か否かを確認する（ステップＳ１０５にてＹＥＳ、ステップＳ１１１）。このとき、コンパイラ２０５は、アーキテクチャ構成情報２０６（図１８Ａ及び図１８Ｂ）を参照する。その結果、ＤＡＴＡ＿ＩＮの出力ポート５からＲＯＵＴＥＲ＿Ａの出力ポート１９を通れば、ＤＰＥ＿Ｃの出力ポート１に接続可能であることが判る。よって、コンパイラ２０５は、この接続関係を表す情報によって接続設定を更新する。
【０１３９】
同様に、第四行目の記述＜ＣＯＮ  ＳＲＣ＝“７”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ７”  ＴＲＧ＿ＰＲＴ＝“１”＞については、タスク「ＣＰＥ７」は未配置であり、且つ、タスク集約名称ＴＣＮも付与されていない。そのため、コンパイラ２０５は、ＤＡＴＡ＿ＩＮからの接続が可能な配置候補ＰＥを探索する（ステップＳ１０４〜ステップＳ１０６）。本実施例では、上述した第一行目の処理においてＣＰＥ＿Ｂが設定済みである。その結果、コンパイラ２０５は、ＣＰＥ＿Ａ及びＣＰＥ＿Ｃを、タスク「ＣＰＥ７」の配置候補ＰＥとして抽出する（ステップＳ１０７）。ここでは、ＣＰＥ＿Ｃが選択されたとする。コンパイラ２０５は、上述した場合と同様な手順によって、現在注目しているタスク「ＤＡＴＡ＿ＩＮ」からの接続がＣＰＥ＿ＣなるＰＥに配置・配線されるよう、接続設定を更新する。
【０１４０】
コンパイラ２０５は、ＣＰ＝ＣＯＮＴＥＸＴ＿２に含まれるタスク「ＤＡＴＡ＿ＩＮ」に関する分析を上述した如く完了すると、中間プログラム（図１４）において次に記述されているタスク「ＣＰＥ５」に関する分析を開始する。
【０１４１】
タスク「ＣＰＥ５」に関する記述の第一行目は、＜ＣＯＮ  ＳＲＣ＝“０”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ６”  ＴＲＧ＿ＰＲＴ＝“０”＞である。本実施例において、タスク「ＣＰＥ６」は、未配置であるので、コンパイラ２０５は、配置候補ＰＥを探索する（ステップＳ１０５にてＮＯ、ステップＳ１０６）。
【０１４２】
本実施例におけるこれまでの処理において、未だ配置に使用されていないＰＥは、ＣＰＥ＿Ａである。そこで、コンパイラ２０５は、ＣＰＥ＿Ａを、タスク「ＣＰＥ６」の配置候補ＰＥに設定する（ステップＳ１０７）。そしてこの場合、ソースとなるタスク「ＣＰＥ５」は、ＣＰＥ＿Ｂに既に配置されており、ＣＰＥ＿Ａには、ＲＯＵＴＥＲ＿Ａの入力ポート１０、出力ポート８を使えばよいことが判る。よって接続可能であるので、コンパイラ２０５は、この接続関係を表す情報によって接続設定を更新する。
【０１４３】
次に、コンパイラ２０５は、ＣＰＥ＿５に関する記述の第二行目の分析を開始する。第二行目の記述は、＜ＣＯＮ  ＳＲＣ＝“１”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ６”  ＴＲＧ＿ＰＲＴ＝“１”＞である。タスク「ＣＰＥ６」は、前記によって配置済みである。そのため、コンパイラ２０５は、接続可能かどうかの確認を行う。その結果、ＣＰＥ５（即ち、ＣＰＥ＿ＢからＲＯＵＴＥＲ＿Ａの入力ポート１１及び出力ポート９）を使えばよいことが判る。よって、コンパイラ２０５は、この接続関係を表す情報によって接続設定を更新する。
【０１４４】
コンパイラ２０５は、タスク「ＣＰＥ５」の分析を上記の如く完了した後、タスク「ＤＰＥ５」を分析する。
【０１４５】
まず、タスク「ＤＰＥ５」に関する第一行目の記述は、＜ＣＯＮ  ＳＲＣ＝“０”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ７”  ＴＲＧ＿ＰＲＴ＝“０”＞である。コンパイラ２０５は、この記述についての分析を開始する。タスク「ＣＰＥ７」は、本実施例では、上述したように、前記によって配置済みである。そのため、コンパイラ２０５は、接続可能かどうかの確認を行う。その結果、ＣＰＥ７（即ち、ＣＰＥ＿ＣからＲＯＵＴＥＲ＿Ａの入力ポート１６及び出力ポート１２）を使えばよいことが判る。よって、コンパイラ２０５は、この接続関係を表す情報によって接続設定を更新する。
【０１４６】
次に、タスク「ＤＰＥ５」に関する第二行目の記述は、＜ＣＯＮ  ＳＲＣ＝“１”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ７”  ＴＲＧ＿ＰＲＴ＝“１”＞である。タスク「ＣＰＥ７」は、本実施例では、上述したように、前記によって配置済みである。そのため、コンパイラ２０５は、接続可能かどうかの確認を行う。その結果、ＣＰＥ７（即ち、ＣＰＥ＿ＣからＲＯＵＴＥＲ＿Ａの入力ポート１７及び出力ポート１３を使えばよいことが判る。よって接続可能であるので、コンパイラ２０５は、この接続関係を表す情報によって接続設定を更新する。
【０１４７】
コンパイラ２０５は、タスク「ＤＰＥ５」の分析を上記の如く完了した後、タスク「ＣＰＥ６」を分析する。
【０１４８】
現在注目しているタスク「ＣＰＥ６」には、タスク集約名称ＴＣＮ（Ｔｃｎ１）が付与されている。このため、コンパイラ２０５は、同一のタスク集約名称ＴＣＮが付与されている他のタスクの有無を判断すると共に、そのような他のタスクがある場合には配置状況を分析する。本実施例では、上述したように、“ＣＰ＝ＣＯＮＴＥＸＴ＿１”においてタスク「ＣＰＥ０」が、“ＣＰ＝ＣＯＮＴＥＸＴ＿２”においてタスク「ＣＰＥ６」と同一のタスク集約名称ＴＣＮを有している。そして係るＣＰＥ６は、ＣＯＮＴＥＸＴ＿１に関する一連の処理において既にＣＰＥ＿Ａに配置されていることが判る。よって、コンパイラ２０５は、タスク「ＣＰＥ６」に対する配置候補ＰＥから、ＣＰＥ＿Ａ以外のＰＥを削除する。次に、コンパイラ２０５は、ＣＰＥ＿Ａに対する配置及び接続が可能かどうかを確認する。
【０１４９】
タスク「ＣＰＥ６」に関する第一行目の記述は、＜ＣＯＮ  ＳＲＣ＝“０”  ＴＲＧ＿ＴＡＳＫ＝“ＤＡＴＡ＿ＯＵＴ”  ＴＲＧ＿ＰＲＴ＝“０”＞である。コンパイラ２０５は、この記述についての分析を開始する。上述した通り本実施例において、タスク「ＤＡＴＡ＿ＯＵＴ」は、本実施例において既に外部ＰＥとして配置及び登録が完了済みである。そのため、接続可能かどうかの確認を行う。その結果、ＣＰＥ６（即ち、ＣＰＥ＿ＡからＲＯＵＴＥＲ＿Ａの入力ポート８及び出力ポート０）を使えばよいことが判る。よって、コンパイラ２０５は、この接続関係を表す情報によって接続設定を更新する。
【０１５０】
次に、タスク「ＣＰＥ６」に関する第二行目の記述は、＜ＣＯＮ  ＳＲＣ＝“１”  ＴＲＧ＿ＴＡＳＫ＝“ＤＡＴＡ＿ＯＵＴ”  ＴＲＧ＿ＰＲＴ＝“１”＞である。コンパイラ２０５は、この記述についての分析を開始する。タスク「ＤＡＴＡ＿ＯＵＴ」は、上記の通り配置済みである。そのため、接続可能かどうかの確認を行う。その結果、ＣＰＥ６（即ち、ＣＰＥ＿ＡからＲＯＵＴＥＲ＿Ａの入力ポート９及び出力ポート１）を使えばよいことが判る。よって、コンパイラ２０５は、この接続関係を表す情報によって接続設定を更新する。
【０１５１】
コンパイラ２０５は、タスク「ＣＰＥ６」の分析を上記の如く完了した後、タスク「ＣＰＥ７」を分析する。
【０１５２】
タスク「ＣＰＥ７」に関する第一行目の記述は、＜ＣＯＮ  ＳＲＣ＝“０”  ＴＲＧ＿ＴＡＳＫ＝“ＤＡＴＡ＿ＯＵＴ”  ＴＲＧ＿ＰＲＴ＝“２”＞である。コンパイラ２０５は、この記述についての分析を開始する。タスク「ＤＡＴＡ＿ＯＵＴ」は、上記の通り配置済みである。そのため、接続可能かどうかの確認を行う。その結果、ＣＰＥ７（即ち、ＣＰＥ＿ＣからＲＯＵＴＥＲ＿Ａの入力ポート１２及び出力ポート２）を使えばよいことが判る。よって、コンパイラ２０５は、この接続関係を表す情報によって接続設定を更新する。
【０１５３】
タスク「ＣＰＥ７」に関する第二行目の記述は、＜ＣＯＮ  ＳＲＣ＝“１”  ＴＲＧ＿ＴＡＳＫ＝“ＤＡＴＡ＿ＯＵＴ”  ＴＲＧ＿ＰＲＴ＝“３” である。コンパイラ２０５は、この記述についての分析を開始する。タスク「ＤＡＴＡ＿ＯＵＴ」は、上記の通り配置済みである。そのため、接続可能かどうかの確認を行う。その結果、ＣＰＥ７（即ち、ＣＰＥ＿ＣからＲＯＵＴＥＲ＿Ａの入力ポート１３及び出力ポート３）を使えばよいことが判る。よって接続可能であるので、コンパイラ２０５は、この接続関係を表す情報によって接続設定を更新する。
【０１５４】
以上で、本実施例における中間プログラム（図１４）についての解析は完了である。コンパイラ２０５は、係る分析結果に基づいて、オブジェクトコード２０７を生成すると共に、生成したオブジェクトコードと、制御信号ＣＰとを関連付ける。これにより、本実施例では、制御信号ＣＰ＝１には、中間プログラム２０４の一部であるＣＰ＝ＣＯＮＴＥＸＴ＿１に対応するオブジェクトコード２０７が関連付けされる。そして、制御信号ＣＰ＝２には、中間プログラム２０４の一部であるＣＰ＝ＣＯＮＴＥＸＴ＿２に対応するオブジェクトコード２０７が関連付けされる。オブジェクトコードの生成手順自体は、一般的な技術を採用できるので、本実施例における説明は省略する。
【０１５５】
以上説明した本実施例に係るプログラム開発装置１００によれば、実アーキテクチャの構成を意識しなくても、ユーザは、マルチコアプロセッサを構成する個々のコアにおいて実行されるプログラムを、容易且つ効率良く開発することができる。
【０１５６】
その理由は以下の通りである。即ち、上述したプログラム開発装置１００は、ユーザプログラム２０２を、マルチコアプロセッサを構成する個々のコアに配置するオブジェクトコード２０７に変換する際に、同一のタスク集約名称ＴＣＮが付与されているタスクを同一のコアに割り付けることができるからである。この割り付けは、アーキテクチャ構成情報２０６を参照しながら、係るプログラム開発装置１００が自動的に行う。従ってユーザは、使用するマルチコアプロセッサの実アーキテクチャを詳しく知らなくても、ＧＵＩを利用して制御信号ＣＰ別にユーザプログラム２０２を記述すれば、マルチコアプロセッサが有する演算資源を効率よく利用可能なオブジェクトコード２０７を容易に得ることができる。
【０１５７】
＜＜第２の実施形態＞＞
次に、上述した第１の実施形態に係るプログラム開発装置１００Ａを基本とする第２の実施形態について説明する。
【０１５８】
以下の説明においては、本実施形態に係る特徴的な部分を中心に説明する。その際、上述した第１の実施形態と同様な構成については、同一の参照番号を付すことにより、重複する説明は省略する。
【０１５９】
図１９は、本発明の第２の実施形態の実施例におけるプログラム開発装置１００Ａが生成するオブジェクトコード２０７が実装される演算コアの実アーキテクチャを概念的に示すブロック図である。図１９に示す実アーキテクチャは、ＤＡＴＡ＿ＩＮ、ＤＡＴＡ＿ＯＵＴ、ＲＯＵＴＥＲ＿Ａ、４つのＣＰＥ（ＣＰＥ＿Ａ〜ＣＰＥ＿Ｄ）、並びに４つのＤＰＥ（ＤＰＥ＿Ａ〜ＤＰＥ＿Ｄ）によって構成される。本実施形態においても、図１９に破線枠で示すＤＡＴＡ＿ＩＮ及びＤＡＴＡ＿ＯＵＴは、外部ＰＥであり、外部のメモリ・モジュール（不図示）とのデータの入力及び出力に利用されることとする。
【０１６０】
図１９に示す実アーキテクチャは、幾つかのＰＥの組み合わせによってより複雑な処理を行える。具体的には、以下の４つの組み合わせＰＥ（ＢＬＫ）を利用することができる。
【０１６１】
・ＣＰＥ＿Ａと、ＣＰＥ＿Ｂとによって構成されるＢＬＫ＿Ａ、
・ＣＰＥ＿ＣとＣＰＥ＿Ｄとによって構成されるＢＬＫ＿Ｂ、
・ＤＰＥ＿ＡとＤＰＥ＿Ｂとによって構成されるＢＬＫ＿Ｃ、
・ＤＰＥ＿ＣとＤＰＥ＿Ｄとによって構成されるＢＬＫ＿Ｄ。
【０１６２】
これらＢＬＫは、単体のＰＥでは実行できないような、より多くの入力を同時に扱う複雑な演算を行うことができる。例としては、ＢＬＫ＿Ａ及びＢＬＫ＿Ｂにおいては、例えば、４入力を使った加算、減算等を行うことができる。ＢＬＫ＿Ｃ及びＢＬＫ＿Ｄにおいては、例えば、入力ポートと出力ポートとを入れ替える、４入力−４出力が可能なシャッフル処理を行うことができる。例えば、以下のような入れ替えが可能である。
【０１６３】
・ポート０の入力をポート３に出力、
・ポート１の入力をポート２に出力、
・ポート２の入力をポート１に出力、
・ポート３の入力をポート０に出力。
【０１６４】
上記のような実アーキテクチャを前提として、本実施形態に係るプログラム開発装置１００Ａは、複数のＰＥによって構成されるタスクグループを定義可能である。そして、プログラム開発装置１００Ａは、定義されたタスクグループと、当該タスクグループを構成する各ＰＥについてタスク集約名称ＴＣＮを付与し、そのタスク集約名称ＴＣＮによって配置・配線を制御することができる。より具体的に、係るプログラム開発装置１００Ａにおいて、プログラム記述支援部２０１は、タスクグループに対するタスク集約名称ＴＣＮの付与がユーザによって複数ＣＰ間でなされ、付与された各タスク集約名称ＴＣＮが同一である場合に、実アーキテクチャの、同一タスクグループにＰＥを配置可能である。このような機能を実現する本実施形態に係るプログラム記述支援部２０１について、エラー! 参照元が見つかりません。乃至図２２を参照して説明する。
【０１６５】
図２０は、第２の実施形態に係るプログラム開発装置１００Ａがプログラム記述支援部２０１の実行によって表示する画面（ＧＵＩ）において、ユーザがプログラムを記述する際に必要に応じて行う、複数タスクの結合操作の手順を説明する図である。図２１は、図２０に示す操作手順によって結合した複数タスク（タスクグループ）に、タスク集約名称ＴＣＮを付与する場合の操作手順を説明する図である。そして、図２２は、図２０に示す操作手順によってタスクグループにタスク集約名称ＴＣＮを付与した場合に、更に、そのタスクグループを構成するタスクに対して、タスク集約名称ＴＣＮを付与する場合の操作手順を説明する図である。
【０１６６】
これらの図に示すＧＵＩにおいて、画面の基本的な構成及び機能、個々のタスクの設定操作等は、上述した第１の実施形態と同様である。本実施形態において、ユーザは、ユーザプログラム２０２の作成に際して、このようなＧＵＩを利用して、更に、タスクグループを宣言することができる。
【０１６７】
タスクグループを宣言するために、ユーザは、まず、タスクグループを宣言するために必要なＰＥを配置する。図２０においては、ユーザが宣言したいＰＥは、波線枠で示すＣＰＥ０とＣＰＥ１とであるとする。タスクグループを設定するために、まず、ユーザは、例えばマウスを用いて当該各ＰＥを範囲選択し、右クリックを押す（手順１）。この操作に応じて、プログラム記述支援部２０１は、メニュー画面を表示する。この場合、ユーザは、表示されたメニュー画面の選択肢の中から、“結合”を選択する（手順２）。この操作に応じて、プログラム記述支援部２０１は、タスクグループ要素を定義する。即ち、プログラム記述支援部２０１は、ユーザによる範囲選択によって指定された当該各ＰＥを、１つのタスクグループとして扱う結合処理を実行する。当該メニュー画面に表示される選択肢“解除”は、既に宣言したタスクグループを解体し、各ＰＥに戻す場合に使用される。
【０１６８】
次に、上記の手順によって設定されたタスクグループに対して、ユーザがタスク集約名称ＴＣＮを付与する手順について、図２１を参照して説明する。
【０１６９】
プログラム記述支援部２０１は、上述した操作によって設定済みのタスクグループを、実線枠で表現すると共に、このタスクグループに自機能によって仮に設定した名称（ＵＮＩ＿Ａ）を、当該実線枠内に表示する。ユーザは、この実線枠を選択し、右クリック操作を行う（手順１）。この操作に応じて、プログラム記述支援部２０１は、メニュー画面を表示する。この場合、ユーザは、表示されたメニュー画面の選択肢の中から、“タグ設定”を選択する（手順２）。この操作に応じて、プログラム記述支援部２０１は、タグ設定画面を表示する。ユーザは、このタグ設定画面を利用して、所望のタスク集約名称ＴＣＮを入力する（手順３）。図２１に示す例では、所望のタスク集約名称ＴＣＮとして「Ｔｃｎ＿Ｂ１」が設定された状態を示す。この設定操作に応じて、プログラム記述支援部２０１は、例えば、当該実線枠の左端外部に、当該タスクグループに対してユーザが付与したタスク集約名称ＴＣＮ（Ｔｃｎ＿Ｂ１）を表示する。これに応じて、プログラム記述支援部２０１は、例えば、上記仮に設定した名称（ＵＮＩ＿Ａ）の当該実線枠内への表示を中止する。
【０１７０】
次に、上記の如く設定したタスクグループを構成する各タスクに対して、タスク集約名称ＴＣＮを設定する手順について、図２２を参照して説明する。ユーザは、実線枠によって表示されている当該タスクグループ内の各タスクのうち、所望のタスクを選択し、右クリック操作を行う（手順１）。この例では、タスク「ＣＰＥ０」が設定されたとする。この操作に応じて、プログラム記述支援部２０１は、メニュー画面を表示する。この場合、ユーザは、表示されたメニュー画面の選択肢の中から、“タグ設定”を選択する（手順２）。この操作に応じて、プログラム記述支援部２０１は、タグ設定画面を表示する。ユーザは、このタグ設定画面を利用して、所望のタスク集約名称ＴＣＮを入力する（手順３）。図２２に示す例では、所望のタスク集約名称ＴＣＮとして「Ｔｃｎ１」が設定された状態を示す。この設定操作に応じて、プログラム記述支援部２０１は、例えば、当該実線枠内部の、タスク「ＣＰＥ０」の左端近傍に、当該タスクに対してユーザが付与したタスク集約名称ＴＣＮ（Ｔｃｎ１）を表示する。
【０１７１】
以上説明した手順により、ユーザは、プログラム記述支援部２０１が提供するＧＵＩを利用してタスクグループ、そのタスクグループへのタスク集約名称ＴＣＮの設定、並びに、そのタスクグループを構成する所望のタスクへのタスク集約名称ＴＣＮの設定を行うことができる。係る一連の設定操作において、ユーザは、図１９に示した実アーキテクチャを意識しなくてよい。
【０１７２】
次に、上記のような手順によってユーザが作成したユーザプログラム２０２に基づいて、プログラム整形部２０３が生成する中間プログラム２０４について説明する。
【０１７３】
図２３は、第２の実施形態におけるプログラム開発装置１００Ａがプログラム整形部２０３によって生成する中間プログラムの構成例を説明する図である。本実施形態においても、中間プログラム２０４は、上述した通り、ＸＭＬを基本とする構成である。
【０１７４】
図２３において、タスクグループは、＜ＴＡＳＫＧ＞タグによって定義される。このタグには、属性としてタスクグループ名“ＮＡＭＥ”と、タスクグループのタスク集約名称ＴＣＮ“ＴＣＮ”とを持つ。本実施形態では、上述した操作例に従って、係るタスクグループについてのタスク集約名称ＴＣＮとして、ユーザが入力した“Ｔｃｎ＿Ｂ１”に応じて、“ＴＣＮ＿Ｂ１”が登録されている。そして、タスク「ＣＰＥ０」へのタスク集約名称ＴＣＮとして、ユーザが入力した“Ｔｃｎ１”に応じて、“ＴＣＮ１”なるテキストが登録されている。
【０１７５】
本実施形態においても、コンパイラ２０５がオブジェクトコード２０７を生成する処理の手順は、第１の実施形態において図１１を参照して説明した手順と概ね同じである。以下に、本実施形態に特有な処理構成について説明する。本実施形態では、配置候補ＰＥの検索処理（ステップＳ１０６）と、その絞込み処理（ステップＳ１０７）とが上述した第１の実施形態と異なる。
【０１７６】
（配置候補ＰＥの検索処理）
本実施形態において、コンパイラ２０５は、ステップＳ１０６において、まず、タグ＜ＣＯＮ＞に定義された接続情報に記述されたＴＲＧ＿ＴＡＳＫについて、そのＴＲＧ＿ＴＡＳＫが含まれるＣＰを検査し、そのＴＲＧ＿ＴＡＳＫがタスクグループ（ＴＡＳＫＧ）に関する設定情報を有するか否かを判断する。この判断においてＴＡＳＫＧが設定されている場合、コンパイラ２０５は、そのＴＡＳＫＧを、配置先の候補として設定する。
【０１７７】
より具体的に、コンパイラ２０５は、まず、実アーキテクチャにおいてタスクの配置に未だ使用されていないＢＬＫにおいて、そのＢＬＫを構成するＰＥが、中間プログラム２０２にて宣言されている当該ＴＡＳＫＧの記述に含まれるＰＥを全て有するか否かを判断する。このＢＬＫは、図１９に例示した通り、複数のＰＥの組み合わせである。この判断において、当該ＢＬＫを構成するＰＥが、当該ＴＡＳＫＧの記述に含まれるＰＥを全て有すると判断された場合、このＢＬＫへの配置が可能である。そこでコンパイラ２０５は、当該ＢＬＫを、配置先の候補として設定する。
【０１７８】
一方、上記の判断において、当該ＢＬＫを構成するＰＥが、当該ＴＡＳＫＧの記述に含まれるＰＥを有していないと判断された場合、コンパイラ２０５は、全てのＢＬＫを、配置先の候補として設定する。
【０１７９】
次にコンパイラ２０５は、第１の実施形態の場合と同様に、配置候補ＰＥを検索する。最後に、コンパイラ２０５は、この検索によって候補としたＰＥ（配置候補ＰＥ）と、上記判断において設定したＢＬＫとについての積集合を求める。より具体的に、コンパイラ２０５は、あるＢＬＫに対しては配置候補ＰＥとなるが、その配置候補ＰＥの中に、該ＢＬＫが包含するＰＥが存在しない場合、該ＢＬＫを候補から除外する。逆に、ある配置候補ＰＥに対しては候補となるが、ＢＬＫの候補の中に、該ＰＥを含むＢＬＫがない場合に、コンパイラ２０５は、該ＰＥを候補から除外する。
【０１８０】
（配置候補ＰＥの絞込み処理）
次に、コンパイラ２０５は、上述した本実施形態における配置候補ＰＥの検索処理の次に、ステップＳ１０７において、現在注目しているＴＲＧ＿ＴＡＳＫのＴＡＳＫＧに設定されているタスク集約名称ＴＣＮ（図２３では“Ｔｃｎ＿Ｂ１”）と、ＴＡＳＫに設定されているタスク集約名称ＴＣＮ（図２３では“Ｔｃｎ１”）とを確認する。これにより、コンパイラ２０５は、配置可能なＰＥを絞り込む。
【０１８１】
即ち、コンパイラ２０５は、当該ＴＲＧ＿ＴＡＳＫがＴＡＳＫＧを持ち、そのＴＡＳＫＧにタスク集約名称ＴＣＮが設定されており、且つ、そのタスク集約名称ＴＣＮと同一のタスク集約名称ＴＣＮが既に上記実アーキテクチャを構成するＢＬＫに配置されているという条件を満足するか否かを判断する。そしてコンパイラ２０５は、この判断において、係る条件を満足すると判断した場合、当該ＢＬＫに含まれるＰＥ以外の他の全てのＰＥを候補から削除する。一方、現在注目しているＴＲＧ＿ＴＡＳＫがＴＡＳＫＧを持たない場合やＴＡＳＫＧにタスク集約名称ＴＣＮが設定されていない場合、コンパイラ２０５は、この処理をスキップする。次に、コンパイラ２０５は、当該ＴＲＧ＿ＴＡＳＫがタスク集約名称ＴＣＮを持ち、且つ、そのタスク集約名称ＴＣＮと同一のタスク集約名称ＴＣＮを持つＰＥが既に配置されていた場合、そのＰＥ以外の他の全てのＰＥを、配置候補ＰＥから除外する。
【０１８２】
コンパイラ２０５は、当該ＴＲＧ＿ＴＡＳＫにタスク集約名称ＴＣＮが設定されていない場合、上述した処理をスキップする。
【０１８３】
上述した本実施形態に係るプログラム開発装置１００Ａによれば、実アーキテクチャの構成を意識しなくても、ユーザは、マルチコアプロセッサを構成する個々のコアにおいて実行されるプログラムを、容易且つ効率良く開発することができる。その理由は、上述した第１の実施形態と同様である。更に、本実施形態では、ユーザは、ＧＵＩを利用した容易な操作によってタスクグループを設定すれば、単体のＰＥでは実行できないような、より多くの入力を同時に扱う複雑な演算が可能なオブジェクトコード２０７を容易に得ることができる。
【０１８４】
＜第２の実施形態の実施例＞
次に、上述した第２の実施形態に基づく実施例について説明する。本実施例において前提する実アーキテクチャは、第２の実施形態と同様に図１９である。
【０１８５】
図２４Ａ及び図２４Ｂは、第２の実施形態の実施例におけるプログラム開発装置１００Ａが、オブジェクトコード２０７を生成する際に参照するアーキテクチャ構成情報２０６を例示する図である。この例においても、図２４Ａ及び図２４Ｂに示すアーキテクチャ構成情報２０６は、図面表現の制約から２つの図面に分けて表しているが、実際は当該２つの図面を合せた内容を含む１つのデータセット（データレコード）である。
【０１８６】
本実施例におけるアーキテクチャ構成情報２０６（図２４Ａ及び図２４Ｂ）は、複数のＰＥに関する記述（定義）が、＜ＢＬＫ＞タグによってまとめられている構成を有する。このことが第１の実施形態の実施例に係るアーキテクチャ構成情報２０６（図１８Ａ及び図１８Ｂ）の構成と異なる。また、＜ＢＬＫ＞タグのＮＡＭＥ属性（ＢＬＫ  ＮＡＭＥ＝）には、ＢＬＫ名称が定義される。具体的には、以下の４つのＢＬＫ名称が定義される。即ち、
・ＣＰＥ＿ＡとＣＰＥ＿Ｂとを包括する＜ＢＬＫ  ＮＡＭＥ＝ＢＬＫ＿Ａ＞、
・ＣＰＥ＿ＣとＣＰＥ＿Ｄとを包括する＜ＢＬＫ  ＮＡＭＥ＝ＢＬＫ＿Ｂ＞、
・ＤＰＥ＿ＡとＤＰＥ＿Ｂとを包括する＜ＢＬＫ  ＮＡＭＥ＝ＢＬＫ＿Ｃ＞、
・ＤＰＥ＿ＣとＤＰＥ＿Ｄとを包括する＜ＢＬＫ  ＮＡＭＥ＝ＢＬＫ＿Ｄ＞。
【０１８７】
本実施例が前提とする実アーキテクチャ（図１９）が含むＰＥ（ＣＰＥ、ＤＰＥ）の個数は、図１５の場合と比較して増加している。このため、本実施例において、図２４Ａ及び図２４Ｂに例示するアーキテクチャ構成情報２０６は、図２４Ａ及び図２４Ｂに示すように、ＤＡＴＡ＿ＩＮ及びＤＡＴＡ＿ＯＵＴ等についても対応する情報が定義される。
【０１８８】
図２５は、第２の実施形態の実施例において、プログラム記述支援部２０１を利用して記述したユーザプログラム（ＣＯＮＴＥＸＴ＿１）の表示例を示す図である。本実施例におけるユーザプログラム２０２であるＣＯＮＴＥＸＴ＿１は、基本的には、第１の実施形態の実施例において説明した同名称のユーザプログラム（図１２）の構成と同様である。但し、本実施例では、タスク「ＣＰＥ０」とタスク「ＣＰＥ１」とが、タスクグループとして定義されており、このタスクグループには“ＴＣＮ＿Ｂ１”なるタスク集約名称ＴＣＮが設定されていることが図１２と異なる。
【０１８９】
図２６は、第２の実施形態の実施例において、プログラム記述支援部２０１を利用して記述したユーザプログラム（ＣＯＮＴＥＸＴ＿２）の表示例を示す図である。本実施例におけるユーザプログラム２０２であるＣＯＮＴＥＸＴ＿２は、基本的には、第１の実施形態の実施例において説明した同名称のユーザプログラム（図１３）の構成と同様である。但し、本実施例では、タスク「ＣＰＥ６」とタスク「ＣＰＥ７」とが、タスクグループとして定義されており、このタスクグループには“ＴＣＮ＿Ｂ１”なるタスク集約名称ＴＣＮが設定されていることが図１３と異なる。
【０１９０】
図２７は、第２の実施形態の実施例において、図２５及び図２６に示すユーザプログラム２０２に基づいて、プログラム整形部２０３が生成した中間プログラムを示す図である。本実施例における中間プログラム２０４は、基本的には、第１の実施形態にて上述した実施例の同ＣＰの中間プログラムと同様な構成である。但し、本実施例において、ＣＰ＝ＣＯＮＴＥＸＴ＿１には、上記のユーザプログラム（ＣＯＮＴＥＸＴ＿１）に応じて、タスク「ＣＰＥ０」とタスク「ＣＰＥ１」とに、ＴＣＮ＿Ｂ１なるタスク集約名称ＴＣＮが定義されたタスクグループが設定されている。そして、ＣＰ＝ＣＯＮＴＥＸＴ＿２には、上記のユーザプログラム（ＣＯＮＴＥＸＴ＿２）に応じて、タスク「ＣＰＥ６」とタスク「ＣＰＥ７」とに、ＴＣＮ＿Ｂ１なるタスク集約名称ＴＣＮが定義されたタスクグループが設定されている。これらが第１の実施形態における実施例と異なる。
【０１９１】
但し、本実施例においても、ユーザは、ユーザプログラム２０２の作成に際して、実アーキテクチャ（図１９）を意識する必要はない。ユーザは、上述した説明で参照したＧＵＩ利用時の制約（ルール）に従って、図２５及び図２６に例示するグラフィカルなユーザプログラムを記述すれば、その記述に基づいて、プログラム記述支援部２０１は、図２７に示すユーザプログラム２０２を生成することができる。
【０１９２】
以下、このような本実施例におけるユーザプログラム２０２（図２７）を、コンパイラ２０５が、オブジェクトコート２０７に生成に際して解析する処理（動作）について具体的に説明する。コンパイラ２０５は、本実施例においても、ＣＯＮＴＥＸＴ＿１に記述された順番にタスクの解析を行い、その後、ＣＯＮＴＥＸＴ＿２についても順番にタスクを解析する。但し、解析の順序は、説明の便宜上の例であり、実装に際しては様々な方式が想定される。
【０１９３】
コンパイラ２０５は、ＣＯＮＴＥＸＴ＿１において、先ず、タスク「ＤＡＴＡ＿ＩＮ」についての分析を開始する。このタスクの第一行目の記述は、＜ＣＯＮ  ＳＲＣ＝“０”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ０”  ＴＲＧ＿ＰＲＴ＝“０”＞である。上記の順番で解析が実行される場合、タスク「ＣＰＥ０」は、未配置である。よって、コンパイラ２０５は、タスク「ＣＰＥ０」についての配置候補ＰＥの探索に進む（ステップＳ１０４〜ステップＳ１０６）。本実施例において、タスク「ＣＰＥ０」には、ユーザのＧＵＩ（図２５）への設定操作に応じて、プログラム記述支援部２０１が、タスクグループＵＮＩ＿Ａを設定している。このため、コンパイラ２０５は、まず、ＵＮＩ＿Ａを配置可能なＢＬＫ候補を探索する。本実施例において、当該第一行目の記述の解析は、解析当初である。そのため、コンパイラ２０５は、アーキテクチャ構成情報２０６（図２４Ａ及び図２４Ｂ）を参照することにより、ＢＬＫ＿Ａ及びＢＬＫ＿Ｂはそれぞれ２つのＣＰＥが配置・配線に未使用であると判断する。同様に、ＢＬＫ＿Ｃ及びＢＬＫ＿Ｄにおいては、それぞれ２つのＤＰＥが配置・配線に未使用であることが判る。
【０１９４】
未使用のＢＬＫ解析が完了すると、コンパイラ２０５は、中間プログラム２０４（図２７）に記述（定義）されたところの、ＵＮＩ＿Ａを含むタスク数を解析する。図２７に示す例では、２つのＣＰＥ（ＣＰＥ０、ＣＰＥ６）が宣言されている。従ってこの場合、コンパイラ２０５は、ＵＮＩ＿Ａを配置できるＢＬＫ候補は、ＢＬＫ＿Ａ及びＢＬＫ＿Ｂであると判断する。
【０１９５】
次に、コンパイラ２０５は、ＰＥ候補を探索する。アーキテクチャ構成情報２０６を参照すると、ＤＡＴＡ＿ＩＮのポート０から接続可能なＣＰＥは、ＣＰＥ＿Ａ、ＣＰＥ＿Ｂ、ＣＰＥ＿Ｃ、及びＣＰＥ＿Ｄであることが判る。そこで、コンパイラ２０５は、これらを候補（配置候補ＰＥ）として設定する。
【０１９６】
コンパイラ２０５は、第２の実施形態において上記の如く、ＢＬＫ候補と、ＰＥ候補（配置候補ＰＥ）との抽出が完了すると、上述した積集合を求める。ここでは、全てのＢＬＫ候補が、少なくともＰＥ候補の何れかを含むので、削除するＢＬＫ候補はない。同様に、全てのＰＥ候補が何れかのＢＬＫ候補に属しているので、削除するＰＥ候補はない。
【０１９７】
コンパイラ２０５は、前述の如くＢＬＫ候補及びＰＥ候補を決定した後、タスク集約名称ＴＣＮの確認による絞込みを行う。本実施例では、上述したユーザの操作に応じて、タスクグループとタスクとの両方にそれぞれタスク集約名称ＴＣＮ（Ｔｃｎ＿Ｂ１、Ｔｃｎ１）が設定されている。但し、現在説明しているタイミングは解析当初であるので、同一のタスク集約名称ＴＣＮを有するタスクグループ、或いは、タスクは、未だ配置されていない。このため、コンパイラ２０５は、当該決定したＢＬＫ候補及びＰＥ候補の絞込みは行わない。よって、コンパイラ２０５は、当該決定したＢＬＫ候補及びＰＥ候補を対象として、ランダム配置を行う。ここでは、ＢＬＫ＿Ａと、ＣＰＥ＿Ａとが選択されたとする。
【０１９８】
コンパイラ２０５は、ＢＬＫ＿Ａ及びＣＰＥ＿Ａへの配置が完了したら、次に、アーキテクチャ構成情報２０６を参照することによって接続設定を行う。本実施例において、コンパイラ２０５は、前記の通り、ＤＡＴＡ＿ＩＮのポート０から、ＲＯＵＴＥＲ＿Ａのポート０に入力され、次に、ＲＯＵＴＥＲ＿Ａの出力ポート８を通って、ＣＰＥ＿Ａのポート０に入力する、という情報を保持する。
【０１９９】
次に、コンパイラ２０５は、タスク「ＤＡＴＡ＿ＩＮ」の第二行目の記述を解析する。この記載は、＜ＣＯＮ  ＳＲＣ＝“１”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ０”  ＴＲＧ＿ＰＲＴ＝“１”＞である。前記と同様に分析を進めると、タスク「ＣＰＥ０」にはタスク集約名称ＴＣＮが付与されており、且つ、第一行目の記述に関する処理によって、既にＣＰＥ＿Ａにタスクが配置されていることが判る。そこで、コンパイラ２０５は、配置候補ＰＥと、タスク集約名称ＴＣＮによる候補ＰＥの絞込みとを行う。その結果、コンパイラ２０５は、候補をＣＰＥ＿Ａとして、このＰＥが配置可能であるか検査する。この場合、ＤＡＴＡ＿ＩＮのポート１から、ＲＯＵＴＥＲ＿Ａの出力ポート９を通り、ＣＰＥ＿Ａのポート１に入力すれば、接続することができることが判る。即ち、ＣＰＥ＿Ａにタスクを配置可能であることが判る。よって、コンパイラ２０５は、ＣＰＥ＿Ａの接続設定を更新する。
【０２００】
次に、コンパイラ２０５は、タスク「ＤＡＴＡ＿ＩＮ」の第三行目の記述を解析する。この記載は、＜ＣＯＮ  ＳＲＣ＝“５”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ１”  ＴＲＧ＿ＰＲＴ＝“０”＞である。前記と同様に分析を進めると、タスク「ＣＰＥ１」は、未配置であり、且つ、タスク集約名称ＴＣＮも付与されていない。そこで、コンパイラ２０５は、ＤＡＴＡ＿ＩＮからの接続が可能な配置候補ＰＥを探索する。その結果、前記と同様の手順によって、ＣＰＥ＿Ｂが候補となる。よって、コンパイラ２０５は、この接続関係を表す情報によって接続設定を更新する。
【０２０１】
次に、コンパイラ２０５は、タスク「ＤＡＴＡ＿ＩＮ」の第四行目の記述を解析する。この記載は、＜ＣＯＮ  ＳＲＣ＝“７”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ１”  ＴＲＧ＿ＰＲＴ＝“１” ＞である。前記と同様に分析を進めると、タスク「ＣＰＥ１」は、上記第三行目の記述に関する処理によって配置済みである。そこで、コンパイラ２０５は、ＣＰＥ１への接続が可能か否かを確認する。その結果、ＤＡＴＡ＿ＩＮからＲＯＵＴＥＲ＿Ａの入力ポート７と、出力ポート１１とを利用すれば接続できることが判る。よって、コンパイラ２０５は、この接続関係を表す情報によって接続設定を更新する。
【０２０２】
コンパイラ２０５は、以降の中間プログラム２０４（図２７）の記述に対しても、アーキテクチャ構成情報２０６を参照しながら、同様な手順によって配置・配線を行う。係る一連の処理は、第１の実施形態と同様なので、重複する説明は省略する。
【０２０３】
コンパイラ２０５は、上記の如くＣＰ＝ＣＯＮＴＥＸＴ＿１に関する処理を完了したら、次に、ＣＰ＝ＣＯＮＴＥＸＴ＿２に関する解析を開始する。
【０２０４】
即ち、本実施例において、コンパイラ２０５は、ＣＰ＝ＣＯＮＴＥＸＴ＿２についても、中間プログラム２０４の記述順に従って、まず、タスク「ＤＡＴＡ＿ＩＮ」に関する解析を開始する。
【０２０５】
図２７に示すＣＯＮＴＥＸＴ＿２に関する記述において、タスク「ＤＡＴＡ＿ＩＮ」に関する記述は、第１の実施形態の実施例において参照した中間プログラム（図１４）の対応箇所と同じであり、コンパイラ２０５が実行する処理も同様である。このため、本実施例における重複する説明は省略する。本実施例においても、コンパイラ２０５は、タスク「ＣＰＥ５」及び「ＤＰＥ５」の配置先を決定する。本実施例では、この決定によって、タスク「ＣＰＥ５」はＣＰＥ＿Ｃに配置され、タスク「ＤＰＥ５」はＤＰＥ＿Ａに配置されたとする。
【０２０６】
次に、コンパイラ２０５は、ＣＯＮＴＥＸＴ＿２に関する記述において、タスク「ＣＰＥ５」に関する記述を解析する。この場合、第一行目の記述は、＜ＣＯＮ  ＳＲＣ＝“０”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ６”  ＴＲＧ＿ＰＲＴ＝“０”＞である。図２７を参照すると、タスク「ＣＰＥ５」の後にコンパイラ２０５が解析すべきタスクは、ＣＰＥ６であることが判る。そして、このタスク「ＣＰＥ６」には、タスク集約名称ＴＣＮ“Ｔｃｎ＿Ｂ１”が付与されたタスクグループＵＮＩ＿Ｂが定義されている。このため、コンパイラ２０５は、アーキテクチャ構成情報２０６（図２７）を参照することにより、ＢＬＫ候補を抽出する。この場合、ＣＰＥを含むＢＬＫは、ＢＬＫ＿Ａ及びＢＬＫ＿Ｂである。但し、ＢＬＫ＿Ｂには、ＣＯＮＴＥＸＴ＿１について上述した通り、既にタスク「ＣＰＥ５」がＣＰＥ＿Ｃに配置されている。このため、このＢＬＫ＿Ｂに当該タスクグループＵＮＩ＿Ｂを配置するには、ＣＰＥが不足していることが判る。そこで、コンパイラ２０５は、ＢＬＫ＿ＡのみをＢＬＫ候補として選択する。
【０２０７】
次に、コンパイラ２０５は、ＰＥ候補を抽出する。本実施例では、上述した通りタスク「ＣＰＥ５」をＣＰＥ＿Ｃに配置済みである。このため、コンパイラ２０５は、係るＣＰＥ＿Ｃを除いた、ＣＰＥ＿Ａ、ＣＰＥ＿Ｂ、ＣＰＥ＿Ｄを配置候補ＰＥに設定する。
【０２０８】
そして、コンパイラ２０５は、ＣＯＮＴＥＸＴ＿１の場合と同様に、ＢＬＫ候補とＰＥ候補との積集合を求める。本実施例において、図１９に示した実アーキテクチャから判るように、ＢＬＫ＿Ａは、ＣＰＥ＿ＡとＣＰＥ＿Ｂとによって構成されている。このため、コンパイラ２０５は、配置候補ＰＥとして先に設定した３つのＣＰＥのうち、ＢＬＫ＿Ａに含まれていないＣＰＥ＿Ｄを除外する。その結果、コンパイラ２０５は、最終的に、ＢＬＫ＿ＡをＢＬＫ候補とし、ＣＰＥ＿Ａ及びＣＰＥ＿ＢをＰＥ候補と判断する。
【０２０９】
次に、コンパイラ２０５は、タスクグループについて、タスク集約名称ＴＣＮによる絞込み処理を行う。本実施例において、現在注目しているＣＯＮＴＥＸＴ＿２に関する記述には、タスクグループＵＮＩ＿ＡにＴＣＮ＿Ｂ１なるタスク集約名称ＴＣＮが宣言されている。そして、上述した通り、中間プログラム２０４のＣＯＮＴＥＸＴ＿１に関する記述に関する解析において、同一のタスク集約名称ＴＣＮ“Ｔｃｎ＿Ｂ１”が付与されたタスクグループＵＮＩ＿Ａが存在することが確認されている。そこで、コンパイラ２０５は、ＣＯＮＴＥＸＴ＿１に関する上述した処理においてＵＮＩ＿Ａを配置したＢＬＫ＿Ａのみを残す。
【０２１０】
次に、コンパイラ２０５は、タスクについて、タスク集約名称ＴＣＮによる絞込み処理を行う。本実施例において、現在注目しているタスク「ＣＰＥ６」には、タスク集約名称ＴＣＮとして“Ｔｃｎ１”が付与されている。そのため、コンパイラ２０５は、同一のタスク集約名称ＴＣＮが付与されている他のＰＥの配置状況を分析する。本実施例では、上述した通り、ＣＯＮＴＥＸＴ＿１に関する記述の解析において、タスク「ＣＰＥ０」に同一のタスク集約名称ＴＣＮが付与され、既にＣＰＥ＿Ａに配置されていることが判る。そこでコンパイラ２０５は、配置候補ＰＥから、ＣＰＥ＿Ｂを削除する。
【０２１１】
コンパイラ２０５は、現在注目しているタスク「ＣＰＥ６」を、最後まで配置候補ＰＥとして残ったＣＰＥ＿Ａに対して配置すると共に、接続可能か否かを確認する。本実施例では、ソースとなるタスク「ＣＰＥ５」は、ＣＰＥ＿Ｂに配置されており、アーキテクチャ構成情報２０６（図２７）を参照すると、ＣＰＥ＿Ａには、ＲＯＵＴＥＲ＿Ａの入力ポート１２と、出力ポート８とを使えば、接続することができることが判る。よって、コンパイラ２０５は、この関係を表す情報によって、ＣＰＥ＿Ａの接続設定を更新する。
【０２１２】
以上により、ＣＯＮＴＥＸＴ＿１に定義されているタスク「ＣＰＥ０」と、ＣＯＮＴＥＸＴ＿２に定義されているタスク「ＣＰＥ６」とは、同じＰＥ（ＣＰＥ＿Ａ）に配置（割り付け）されることが決定する。
【０２１３】
次に、コンパイラ２０５は、タスク「ＣＰＥ５」に関する第二行目の記述について、上記と同様な手順で解析する。この記述は、＜ＣＯＮ  ＳＲＣ＝“１”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ６”  ＴＲＧ＿ＰＲＴ＝“１”＞である。タスク「ＣＰＥ６」は、上述した第一行目の処理によって配置・配線が施されている。そのため、コンパイラ２０５は、接続可能かどうかを確認する。その結果、ＣＰＥ５からＣＰＥ６への接続は、ＣＰＥ＿ＣからＲＯＵＴＥＲ＿Ａの入力ポート１３を通り、ＲＯＵＴＥＲ＿Ａの出力ポート９からＣＰＥ＿Ａの入力ポート１を通ればよいことが判る。よって、コンパイラ２０５は、この関係を表す情報によって接続設定を更新する。
【０２１４】
コンパイラ２０５は、タスク「ＣＰＥ＿５」の分析が完了したら、次に、タスク「ＤＰＥ５」に関する分析を開始する。この場合、第一行目の記述は、＜ＣＯＮ  ＳＲＣ＝“０”  ＴＲＧ＿ＴＡＳＫ＝“ＣＰＥ７”  ＴＲＧ＿ＰＲＴ＝“０”＞である。タスク集約名称ＴＣＮそこで、コンパイラ２０５は、タスク「ＣＰＥ＿５」に関しての配置候補ＰＥを分析する。この場合、前述したＣＰＥ＿５に関する処理がＣＰＥ７に関しても行われたこととすると、上記のＣＰＥ５及び６の配置の結果、ＣＰＥ＿Ａ及びＣＰＥ＿Ｃには既にタスクが配置されているので、ＣＰＥ＿Ｂ及びＣＰＥ＿Ｄが候補となる。
【０２１５】
但し、中間プログラム２０４（図２７）のＣＯＮＴＥＸＴ＿２に関する記述において、タスク「ＣＰＥ７」は、タスク集約名称ＴＣＮ“Ｔｃｎ＿Ｂ１”が付与されたタスクグループＵＮＩ＿Ａ内に設定されている。このタスクグループは、ＣＯＮＴＥＸＴ＿１に関して上述したタスクグループの配置処理によって、ＢＬＫ＿Ａに既に配置されている。よって、コンパイラ２０５は、配置候補ＰＥからＣＰＥ＿Ｄを除外するので、現在注目しているタスク「ＣＰＥ７」を、ＣＰＥ＿Ｂに配置すると決定する。
【０２１６】
次に、コンパイラ２０５は、タスク「ＣＰＥ７」に関する第二行目の記述を分析する。この記述は、＜ＣＯＮ  ＳＲＣ＝“１”  ＴＲＧ＿ＴＡＳＫ＝“ＤＡＴＡ＿ＯＵＴ”  ＴＲＧ＿ＰＲＴ＝“３”＞である。タスク「ＣＰＥ７」は、前述した通り配置済みである。そのため、コンパイラ２０５は、接続可能かどうかの確認を行う。その結果、タスク「ＣＰＥ７」（即ち、ＣＰＥ＿ＢからＲＯＵＴＥＲ＿Ａの入力ポート１０及び出力ポート１６）を使えばよいことが判る。よって、コンパイラ２０５は、この関係を表す情報によって接続設定を更新する。
【０２１７】
図２７に示す中間プログラム２０４において、タスクグループＵＮＩ＿Ａ内に設定されているタスク「ＣＰＥ６」及び「ＣＰＥ７」の解析自体は、上述した第１の実施形態の実施例と同様な手順で行うことができるので、本実施形例における重複する説明は省略する。
【０２１８】
以上説明した手順により、コンパイラ２０５は、中間プログラム２０４（図２７）の解析を終了する。その後、コンパイラ２０５は、一般的な技術によってオブジェクトコード２０７を生成すると共に、生成したオブジェクトコードと、制御信号ＣＰとを関連付ける。これにより、本実施例では、制御信号ＣＰ＝１には、中間プログラム２０４の一部であるＣＰ＝ＣＯＮＴＥＸＴ＿１に対応するオブジェクトコード２０７が関連付けされる。そして、制御信号ＣＰ＝２には、中間プログラム２０４の一部であるＣＰ＝ＣＯＮＴＥＸＴ＿２に対応するオブジェクトコード２０７が関連付けされる。
【０２１９】
以上説明した本実施例に係るプログラム開発装置１００Ａによれば、実アーキテクチャの構成を意識しなくても、ユーザは、マルチコアプロセッサを構成する個々のコアにおいて実行されるプログラムを、容易且つ効率良く開発することができる。更に、本実施例によれば、ユーザは、ＧＵＩを利用した容易な操作によってタスクグループを設定すれば、単体のＰＥでは実行できないような、より多くの入力を同時に扱う複雑な演算が可能なオブジェクトコード２０７を容易に得ることができる。
【０２２０】
即ち、上述した第２の実施形態及びその実施例による効果は、以下の構成によって実現される。
【０２２１】
プログラム記述支援部２０１は、ＧＵＩにおいて、制御信号ＣＰ別に複数のタスクを含むユーザプログラム２０２が記述された際、ユーザ所望の少なくとも２つのタスクをグループ化する定義と、定義したグループにグループ識別名称を定義することとが可能である。
【０２２２】
コンパイラ２０５は、係るＧＵＩにおいて同一のグループ識別名称が定義された当該少なくとも２つのタスクに対して、アーキテクチャ構成情報２０６に定義されている実アーキテクチャにおいて同一の演算資源に割り付ける。
【０２２３】
そして、コンパイラ２０５は、係るＧＵＩにおいて同一のタスク集約名称ＴＣＮが含まれる２以上のタスクと、そのタスク集約名称ＴＣＮが定義されたタスクが含まれ、且つ、当該ＧＵＩにおいて同一のグループ識別名称が定義された当該少なくとも２つのタスクとを、アーキテクチャ構成情報２０６に定義されている実アーキテクチャにおいて同一の演算資源に割り付ける。
【０２２４】
＜第１及び第２の実施形態の変形例＞
上述した第１及び第２の実施形態の変形例は、配置候補ＰＥの検索処理（ステップＳ１０６）と、タスク集約名称ＴＣＮによる絞込み処理（ステップＳ１０７）との構成が上述した手順と異なる。
【０２２５】
即ち、本変形例において、中間プログラム２０４は、Ｎ個のタスクグループを有する。この場合、コンパイラ２０５は、Ｎ個のタスクグループそれぞれについて候補検索を行い、最後に、全グループの積集合を求めることにより、配置候補ＰＥを決定する。そして、本変形例において、コンパイラ２０５は、Ｎ個のタスクグループのうち、Ｍ個（Ｎ＞Ｍ）のグループ、もしくは、演算資源の一種であるレジスタが、タスク集約名称ＴＣＮを持つ場合の解析として、各タスク集約名称ＴＣＮについて順に絞込みを行う。
【０２２６】
他の変形例として、コンパイラ２０５は、配置候補を検索する際に、タスク集約名称ＴＣＮによる絞込みを併せて行うことにより、探索範囲を狭くしてもよい。
【０２２７】
更に、他の変形例として、上述した各実施形態及びその実施例では、ユーザによるプログラム開発に際してＧＵＩを採用したが、例えば、ＣＵＩ（Ｃｏｍｍａｎｄ  Ｌｉｎｅ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）を用いてもよい。
【０２２８】
上述した各実施形態およびその実施例では、マルチコアプロセッサが有する演算資源の一例として、コアにタスクを割り付ける場合を例に説明したが、本発明は、タスクには限定されず、例えば、レジスタ等にも適用することができる。
【０２２９】
＜＜第３の実施形態＞＞
次に、上述した各実施形態及びその実施例に共通する概念を表す実施形態について説明する。
【０２３０】
図２８は、本発明の第３の実施形態におけるプログラム開発装置５００の構成を概念的に説明するブロック図である。
【０２３１】
本実施形態に係るプログラム開発装置５００は、プログラム記述支援部２０１Ａと、オブジェクトコード生成部（コンパイラ）２０５Ａとを有する。
【０２３２】
プログラム記述支援部２０１Ａは、アーキテクチャ構成情報２０６Ａを参照することにより、ユーザプログラム２０２Ａを記述可能なＧＵＩを、ユーザに提供する。アーキテクチャ構成情報２０６Ａは、当該マルチコアプロセッサの実アーキテクチャが有する構成が定義されている情報である。このＧＵＩによれば、ユーザは、マルチコアプロセッサが有する１以上の演算資源の使用宣言（例えばタスク）を含み、その演算資源の使用順序及び並列関係の少なくとも何れかを表すことができる。このＧＵＩは、例えば、上述した第１及び第２の実施形態及びその変形例並びに実施例と同様に、１以上の制御信号ＣＰ別に、ユーザがユーザプログラム２０２Ａを記述可能な構成でもよい。この制御信号ＣＰは、マルチコアプロセッサが有する各コアが実行する処理及び該コア間の接続関係の少なくとも何れかを変更可能な制御信号である。
【０２３３】
オブジェクトコード生成部（コンパイラ）２０５Ａは、ユーザによって記述されたユーザプログラム２０２Ａと、アーキテクチャ構成情報２０６Ａとに基づいて、当該マルチコアプロセッサに供給するオブジェクトコード２０７Ａを生成する。
【０２３４】
そして、プログラム記述支援部２０１Ａは、上記ＧＵＩにおいて、複数の演算資源の使用宣言を記述可能であり、且つ、それら演算資源の使用宣言のうち、２以上の使用宣言に同一の識別名称（タスク集約名称ＴＣＮ）を定義可能である。
【０２３５】
オブジェクトコード生成部２０５Ａは、当該ＧＵＩにおいて同一のタスク集約名称ＴＣＮが含まれる２以上の使用宣言に対して、アーキテクチャ構成情報２０６Ａに定義されている実アーキテクチャにおいて同一の演算資源に割り付ける。
【０２３６】
本実施形態に係るプログラム開発装置５００によれば、実アーキテクチャ（物理アーキテクチャ）の構成を意識しなくても、マルチコアプロセッサを構成する個々のコアにおいて実行されるプログラムを、容易且つ効率良く開発可能である。その理由は、プログラム記述支援部２０１Ａを利用してユーザが記述したユーザプログラム２０２Ａに、同一のタスク集約名称ＴＣＮが含まれる２以上の使用宣言が存在する場合がある。この場合、オブジェクトコード生成部２０５Ａは、アーキテクチャ構成情報２０６Ａに定義されている実アーキテクチャにおいて、係る２以上の使用宣言を、同一の演算資源に割り付けるからである。即ち、プログラム開発装置５００は、係る割り付け動作を、ユーザにとって自動的に行うので、このユーザは、実アーキテクチャの構成を熟知していなくても、実用的なオブジェクトコード２０７Ａを得ることができる。
【０２３７】
＜ハードウェアの構成例＞
上述した実施形態において、図４に示したプログラム記述支援部２０１、プログラム整形部２０２、コンパイラ２０５は、ソフトウェア・プログラムの機能（処理）単位（ソフトウェアモジュール）と捉えることができる。これらの各ソフトウェアモジュールは、専用のハードウェアによって実現してもよい。但し、これらの図面に示した各部の区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。この場合のハードウェア環境の一例を、図２９を参照して説明する。
【０２３８】
ここで、上述した各実施形態及びその実施例に係るプログラム開発装置を実現可能なハードウェアの構成例について説明する。図２９は、本発明の各実施形態及びその実施例を実現可能なコンピュータ（情報処理装置）のハードウェア構成を例示的に説明する図である。図２９に示した情報処理装置１０００は、以下の構成がバス１１０６（通信線）を介して接続された一般的なコンピュータである。
【０２３９】
・ＣＰＵ（Ｃｅｎｔｒａｌ＿Ｐｒｏｃｅｓｓｉｎｇ＿Ｕｎｉｔ）１１０１、
・ＲＯＭ（Ｒｅａｄ＿Ｏｎｌｙ＿Ｍｅｍｏｒｙ）１１０２、
・ＲＡＭ（Ｒａｎｄｏｍ＿Ａｃｃｅｓｓ＿Ｍｅｍｏｒｙ）１１０３、
・ハードディスクドライブ等の記憶装置１１０４、
・外部装置との通信インタフェース（Ｉｎｔｅｒｆａｃｅ：以降、「Ｉ／Ｆ」と称する）１１０５、
・ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ＿Ｄｉｓｃ＿Ｒｅａｄ＿Ｏｎｌｙ＿Ｍｅｍｏｒｙ）等のコンピュータ読み取り可能な記録媒体１１０７に格納されたデータを読み書き可能なドライブ装置１１０８、
・ユーザ（操作者）が情報を入力可能なキーボード（マウス等の補助入力デバイスを含む）等の入力装置、並びに、ユーザに対し情報を提供可能なディスプレイである入出力ユーザＩ／Ｆ１１０９。
【０２４０】
そして、上述した各実施形態及びその実施例を利用して説明した本発明は、以下の手順によって達成される。即ち、図２９に示した情報処理装置１０００に対して、上述した説明において参照したブロック構成図（図４）或いはフローチャート（図１０、図１１）の機能を実現可能なコンピュータ・プログラムが供給される。その後、そのコンピュータ・プログラムは、当該ハードウェアのＣＰＵ１１０１に読み出されて解釈され、実行される。また、当該装置内に供給されたコンピュータ・プログラムは、読み書き可能な揮発性の記憶メモリ（ＲＡＭ１１０３）または不揮発性の記憶デバイスである記憶装置１１０４に格納すればよい。
【０２４１】
前記の場合において、当該ハードウェア内へのコンピュータ・プログラムの供給方法は、現在では一般的な手順を採用することができる。例えば、ＣＤ−ＲＯＭ等の各種記録媒体１１０７を介して当該装置内にインストールする方法や、インターネット等の通信回線を介して外部よりダウンロードする方法等である。そして、このような場合において、本発明は、係るコンピュータ・プログラムを構成するコード、或いは、そのコードが格納された記録媒体１１０７によって構成されると捉えることができる。
【０２４２】
以上、本発明を、上述した模範的な実施形態およびその実施例に適用した例として説明した。しかしながら、本発明の技術的範囲は、上述した各実施形態及び実施例に記載した範囲には限定されない。当業者には、係る実施形態に対して多様な変更又は改良を加えることが可能であることは明らかである。そのような場合、係る変更又は改良を加えた新たな実施形態も、本発明の技術的範囲に含まれ得る。そしてこのことは、特許請求の範囲に記載した事項から明らかである。
【０２４３】
尚、上述した実施形態及びその変形例の一部又は全部は、以下の付記のようにも記載されうる。しかしながら、上述した実施形態及びその変形例により例示的に説明した本発明は、以下には限られない。
【産業上の利用可能性】
【０２４４】
本発明は、例えば、各種の組み込み装置への利用が想定される。
【符号の説明】
【０２４５】
１００  プログラム開発装置
１００Ａ  プログラム開発装置
１０１  制御部
１０２  アドレス生成器
１０３  メモリ・バンク
１０４  サブメモリ・バンク
１０５  メモリ・インタフェース
１０６  演算コア（Ｐｒｏｃｅｓｓｏｒ  Ｎｏｄｅ）
１０７  外部バス
１６１  通信エージェント
１６２  ＣＯＲＤＩＣ  Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ（ＣＰＥ）
１６３  Ｄｅｌａｙ  Ｐｒｏｃｅｓｓｉｎｇ  Ｅｌｅｍｅｎｔ（ＤＰＥ）
２０１  プログラム記述支援部
２０２  ユーザプログラム
２０３  プログラム整形部
２０４  中間プログラム
２０５  コンパイラ
２０６  アーキテクチャ構成情報
２０７  オブジェクトコード
３０１  フレーム
３０２  パレット領域
３０３  プログラム記述領域
５００  プログラム開発装置
１１０１  ＣＰＵ
１１０２  ＲＯＭ
１１０３  ＲＡＭ
１１０４  記憶装置
１１０５  通信インタフェース
１１０６  バス（通信線）
１１０７  記録媒体
１１０８  ドライブ装置
１１０９  入出力ユーザインタフェース
【図１】
2016035722.tif 000003
【図２】
2016035722.tif 000004
【図３】
2016035722.tif 000005
【図４】
2016035722.tif 000006
【図５】
2016035722.tif 000007
【図６】
2016035722.tif 000008
【図７】
2016035722.tif 000009
【図８】
2016035722.tif 000010
【図９】
2016035722.tif 000011
【図１０】
2016035722.tif 000012
【図１１】
2016035722.tif 000013
【図１２】
2016035722.tif 000014
【図１３】
2016035722.tif 000015
【図１４】
2016035722.tif 000016
【図１５】
2016035722.tif 000017
【図１６】
2016035722.tif 000018
【図１７】
2016035722.tif 000019
【図１８Ａ】
2016035722.tif 000020
【図１８Ｂ】
2016035722.tif 000021
【図１９】
2016035722.tif 000022
【図２０】
2016035722.tif 000023
【図２１】
2016035722.tif 000024
【図２２】
2016035722.tif 000025
【図２３】
2016035722.tif 000026
【図２４Ａ】
2016035722.tif 000027
【図２４Ｂ】
2016035722.tif 000028
【図２５】
2016035722.tif 000029
【図２６】
2016035722.tif 000030
【図２７】
2016035722.tif 000031
【図２８】
2016035722.tif 000032
【図２９】
2016035722.tif 000033