(57)【要約】【課題】ソースプログラムから、マルチスレッド処理に対応した演算処理装置で実行可能なデータへの変換作業を効率化したい。【解決手段】関数抽出部３２０は、所定のプログラム内から、そのプログラムを構成する１つ以上の部分プログラムにて最初に実行されるエントリ関数を抽出する。スレッド割当部３５０は、関数抽出部３２０により抽出されたエントリ関数を含む部分プログラムを、マルチスレッド処理が可能な演算処理装置のスレッドに割り当てる。【選択図】図４
2010140198.tif 000002
【特許請求の範囲】
【請求項１】
所定のプログラム内から、そのプログラムを構成する１つ以上の部分プログラムにて最初に実行されるエントリ関数を抽出する関数抽出部と、
前記関数抽出部により抽出されたエントリ関数を含む部分プログラムを、マルチスレッド処理が可能な演算処理装置のスレッドに割り当てるスレッド割当部と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記スレッド割当部は、前記部分プログラムの実行時に発生するデータ量と前記スレッドが利用可能な記憶領域の容量との間の制限条件を満たすスレッドに、前記部分プログラムを割り当てることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記関数抽出部により抽出されたエントリ関数内から引数を抽出する引数抽出部と、
前記引数抽出部により抽出された引数の受け渡し関係を解析することにより、前記部分プログラムの依存関係を解析する解析部と、
前記スレッド割当部は、前記解析部により解析された前記部分プログラムの依存関係を参照して、前記スレッドで前記引数の入出力が可能なように各部分プログラムを前記演算処理装置内のいずれかのスレッドに割り当てることを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記関数抽出部は、前記所定のプログラム内から、そのプログラムを構成する複数の部分プログラムのそれぞれにて最初に実行されるエントリ関数を抽出し、
前記スレッド割当部による前記複数の部分プログラムのスレッドへの割り当てと、前記解析部により解析された前記複数の部分プログラム間の依存関係を参照して、前記スレッドに対して入出力されるべき引数を、前記スレッド間の当該引数を伝達するための伝達用リソースまたは前記スレッドと外部との間で当該引数を伝達するための伝達用リソースに割り当てる伝達用リソース割当部、
をさらに備えることを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記演算処理装置は、それぞれがマルチスレッド処理を実行可能な複数のコアを含み、
前記スレッド割当部は、前記コア間および前記コア内の前記伝達用リソースの構造と、前記解析部により解析された前記複数の部分プログラム間の依存関係を参照して、前記スレッド間で前記引数の入出力が可能なように各部分プログラムを前記演算処理装置内のいずれかのスレッドに割り当て、
前記伝達用リソース割当部は、前記スレッドに割り当てられた前記複数の部分プログラム間の依存関係にしたがい、各引数を、前記スレッド間の伝達用リソースおよび前記スレッドと外部との伝達用リソースのいずれかに割り当てることを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記解析部は、前記複数の部分プログラムのうちの一つの部分プログラムが受けとる引数が、残りの部分プログラムから渡されたものでない場合、その引数を前記演算処理装置の外部から渡されるものと判定し、
前記伝達用リソース割当部は、その引数を、前記演算処理装置の外部から、その引数を受け取る部分プログラムが割り当てられたスレッドへの伝達用リソースに割り当てることを特徴とする請求項４または５に記載の情報処理装置。
【請求項７】
前記演算処理装置の模式図を表示する表示部と、
前記表示部に、前記複数の部分プログラムが割り当てられた複数のスレッドと、前記複数の引数が割り当てられた複数の伝達用リソースを含む前記模式図を表示させるよう制御する表示制御部と、
をさらに備えることを特徴とする請求項４から６のいずれかに記載の情報処理装置。
【請求項８】
前記引数抽出部は、前記引数のうち、前記部分プログラムが割り当てられたスレッドに対する開始信号とみなされる引数を特定し、
前記スレッド割当部は、前記引数抽出部により特定された開始信号を、その開始信号を使用するスレッドに割り当てることを特徴とする請求項３から７のいずれかに記載の情報処理装置。
【請求項９】
請求項１から８のいずれかに記載の情報処理装置により生成されたリソース割当情報と前記所定のプログラムから、前記演算処理装置で処理されるべき設定データを生成することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッド処理に対応した演算処理装置で実行されるべきソフトウェアの開発を支援する情報処理装置に関する。
【背景技術】
【０００２】
近年、マルチスレッド処理が可能な演算処理装置が普及してきており、この流れのなか、マルチスレッド処理が可能なリコンフィギュラブル装置の開発も進められている。リコンフィギュラブル装置は、複数の演算器（以下適宜、ＡＬＵ（Arithmetic Logic Unit）という）を有する演算部、およびその演算部に設定データを供給する制御部を含む。その設定データにより、当該演算部内のＡＬＵおよび接続部が制御され、当該演算部が全体として所期の回路を構成し、所期の演算処理を実行する。
【０００３】
演算処理装置でマルチスレッド処理を実行する場合、プログラムを各スレッド単位に分割する必要がある（たとえば、特許文献１参照）。通常、プログラムは１つ以上の関数で構成される単位で分割されることが多い。
【特許文献１】特開２００７−１９３４２３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
プログラムを分割し、分割後の複数の部分プログラムを演算処理装置で実行される複数のスレッドにそれぞれ割り当てる作業を、手作業で行うのは煩雑である。演算処理装置内のハードウェア制限が多い場合、そのハードウェア制限を満たした割り当てを行わなければならず、その確認作業も煩雑である。
【０００５】
たとえば、マルチコアを搭載し、それぞれのコアで１つ以上のスレッドを処理する演算処理装置にて、依存関係のある２つの部分プログラムを、配線により接続されていない二つのコアのそれぞれで処理されるスレッドに割り当てることはできない。とくに、リコンフィギュラブル装置の場合、複数のスレッドを完全に時分割に処理する構成ではなく、各時点にてハードウェア資源を分割利用して処理する構成であるため、ハードウェア制限を十分に考慮する必要がある。
【０００６】
本発明はこうした状況に鑑みなされたものであり、その目的は、ソースプログラムから、マルチスレッド処理に対応した演算処理装置で実行可能なデータへの変換作業を効率化することができる技術を提供することにある。
【課題を解決するための手段】
【０００７】
本発明のある態様の情報処理装置は、所定のプログラム内から、そのプログラムを構成する１つ以上の部分プログラムにて最初に実行されるエントリ関数を抽出する関数抽出部と、関数抽出部により抽出されたエントリ関数を含む部分プログラムを、マルチスレッド処理が可能な演算処理装置で実行されるスレッドに割り当てるスレッド割当部と、を備える。
【０００８】
なお、以上の構成要素の任意の組み合わせ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【０００９】
本発明によれば、ソースプログラムから、マルチスレッド処理に対応した演算処理装置で実行可能なデータへの変換作業を効率化することができる。
【発明を実施するための最良の形態】
【００１０】
まず、マルチスレッド処理に対応した演算処理装置の一例としてリコンフィギュラブル装置２００について説明する。
図１は、リコンフィギュラブル装置２００の構成の一例を示す図である。リコンフィギュラブル装置２００は、それぞれがマルチスレッド処理を実行可能な複数のコアを備える。図１では４つのコア（第１コア１００ａ、第２コア１００ｂ、第３コア１００ｃおよび第４コア１００ｄ）を備える。各コア間は配線接続され、コア間通信が可能であるが、第１コア１００ａと第４コア１００ｄとの間は配線接続されておらず、それらの間で直接、通信することはできない。すなわち、第１コア１００ａと第４コア１００ｄとの間のデータ入出力はハードウェア的に制限されている。
【００１１】
図２は、リコンフィギュラブル装置２００の各コア１００の構成の一例を示す図である。各コア１００は、外部から供給される設定データに含まれるコマンドデータに応じて機能の変更が可能である。各コア１００は、演算部１０、制御部２０および記憶部３０を備える。
【００１２】
演算部１０は、制御部２０から供給される設定データに基づいて所定の演算を実行する。演算部１０は、当該設定データに含まれるコマンドデータに応じて動的に機能の変更が可能なリコンフィギュラブル回路を構成する。演算部１０の詳細な構成は後述する。
【００１３】
制御部２０はコマンドデータ保持部２１を含み、コマンドデータ保持部２１に保持されるコマンドデータを演算部１０に供給する。コマンドデータ保持部２１は複数のＲＡＭで構成されてもよい。コマンドデータ保持部２１に保持されるコマンドデータは、ソースプログラムから後述する情報処理装置４００（図９参照）による所定の変換処理を経て生成されたデータであってもよい。
【００１４】
記憶部３０は、演算部１０で処理される演算データを保持する。記憶部３０は複数の記憶領域から構成されており、各記憶領域は複数のＲＡＭで構成されてもよい。記憶部３０に保持される演算データは、最終的な演算結果を示すデータに限らず、演算途中のデータも含まれる。また、この演算データは変数であってもよいし、定数であってもよい。
【００１５】
図３は、演算部１０の構成の一例を示す図である。演算部１０は複数のＡＬＵを備える。ＡＬＵは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、加減算、比較演算、論理演算、シフト演算、選択演算、乗算演算の補助演算などの複数種類の多ビット演算を設定により選択的に実行することができる。各ＡＬＵは、複数の演算機能を設定するためのセレクタを有して構成されている。図示の例では、ＡＬＵが、２つの入力端子と１つの出力端子を有して構成される。
【００１６】
演算部１０は、ＡＬＵがｘ（ｘは２以上の整数）段×ｙ（ｙは２以上の整数）列のアレイ状に配置されたＡＬＵアレイを含む。演算部１０は、接続部１１ａ〜１（ｘ＋１）ａ、およびＡＬＵ列１１ｂ〜１ｘｂを備える。接続部１１ａ〜１（ｘ＋１）ａおよびＡＬＵ列１１ｂ〜１ｘｂの構成は上記コマンドデータにより動的に設定変更される。接続部１１ａ〜１（ｘ＋１）ａは前後段のＡＬＵ列の間に設けられて、前段のＡＬＵの出力と後段のＡＬＵの入力の接続関係を設定する。最下段のＡＬＵ列１ｘｂは、接続部１（ｘ＋１）ａおよび接続部１１ａを介して最上段のＡＬＵ列１１ｂに、他の段間と同様に接続される。
【００１７】
なお、接続部１１ａ〜１（ｘ＋１）ａは、前段の１つのＡＬＵの出力先を後段の直下のＡＬＵとその左右のＡＬＵの３方向に制限してもよい。この接続制限によりＡＬＵ間の接続数を大幅に削減することができる。なお、上記ＡＬＵアレイは、ＡＬＵの物理的配置がアレイ状であることに限定されるものではなく、ＡＬＵ間の接続関係がアレイ状であればよい。
【００１８】
当該ＡＬＵアレイでの処理は段毎に行われており、１段目のＡＬＵ列１１ｂで処理された結果が接続部１２ａを介して２段目のＡＬＵ列１２ｂに渡され、その後に２段目のＡＬＵ列１２ｂで処理されるようになっている。各段の処理は、それぞれ１クロックごとに行われる。
【００１９】
このようなＡＬＵアレイでは、各段でそれぞれ異なる処理が同時に実行されるマルチスレッド処理が可能である。また、各スレッドの処理は、リコンフィギュラブル装置２００の内部で生成される開始信号がアクティブなとき、または他のスレッドの処理により生成される開始信号がアクティブのときに開始される。そして、その開始信号がつぎにアクティブになるまでに1サイクル分の処理が実行される。
【００２０】
以下、本明細書では３段のＡＬＵアレイが使用される場合を例に説明する。この場合、１つのＡＬＵアレイで３つの独立した処理、すなわち３つのスレッドが動作可能である。リコンフィギュラブル装置２００の内部で生成されるデフォルトの開始信号を使用する場合、３つのスレッドはつぎのように処理される。最初のクロックで、スレッド１が１段目のＡＬＵ列１１ｂで処理される。つぎのクロックで、スレッド１が２段目のＡＬＵ列１２ｂで処理されるとともに、スレッド２が１段目のＡＬＵ列１１ｂで処理される。つぎのクロックで、スレッド１が３段目のＡＬＵ列１３ｂで処理されるとともに、スレッド２が２段目のＡＬＵ列１２ｂで処理され、スレッド３が１段目のＡＬＵ列１１ｂで処理される。
【００２１】
図４は、本発明の実施の形態１に係る情報処理装置３００の構成を示すブロック図である。情報処理装置３００は、上記リコンフィギュラブル装置２００で処理されるべき設定データの生成に必要なリソース割当情報を生成する開発支援装置として機能する。情報処理装置３００は、処理部３１０、操作部３８０および表示部３９０を備える。
【００２２】
処理部３１０は、関数抽出部３２０、引数抽出部３３０、解析部３４０、スレッド割当部３５０、伝達用リソース割当部３６０および表示制御部３７０を含む。これらの構成は、ハードウェア的には、任意のコンピュータのＣＰＵ、メモリ、その他のＬＳＩで実現でき、ソフトウェア的にはメモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは、当業者には理解されるところである。
【００２３】
関数抽出部３２０は、所定のソースプログラム内から、所定の文字列を探索することにより、そのプログラムを構成する複数の部分プログラムのそれぞれにて最初に実行されるエントリ関数を抽出する。本明細書では、エントリ関数とは、各スレッドにて上記開始信号がアクティブになった際に最初に実行される処理が記述された関数をいう。エントリ関数内にはそのエントリ関数から呼び出される別の関数が含まれてもよい。さらにその関数から呼び出される別の関数が含まれてもよい。
【００２４】
本明細書では、スレッドを、割り当てられた部分プログラムをある瞬間に実行している演算処理装置内のリソースの意味でも用いる。たとえば、そのリソースには、ＡＬＵ列、そのＡＬＵがアクセスしているメモリ、およびそれらの間の配線が含まれる。リコンフィギュラブル装置２００では当該リソースは時間的に変化する。
【００２５】
上記ソースプログラムのプログラマは、あらかじめスレッドに割り当てられるべき各部分プログラムの範囲を確定する。その際、各部分プログラムに少なくとも１つの関数が含まれるようにその範囲を確定し、各部分プログラムがエントリ関数の最初の文から始まるように確定する。また、プログラマはソースプログラムまたは別ファイルに、部分プログラムの範囲を指定しておいてもよい。
【００２６】
さらに、上記プログラマは、関数抽出部３２０がエントリ関数を抽出する際の目印とすべく、エントリ関数の名称に所定の文字列を含めておく。たとえば、エントリ関数の名称を部分プログラムのファイル名と同じに設定してもよい。なお、上記プログラマは、他の関数から呼び出されていない関数がエントリ関数となるように上記範囲を確定してもよい。
【００２７】
図５は、４つの部分プログラムを含むソースプログラムを示す図である。このソースプログラムはＣ言語で記述されている。第１部分プログラムｔｅｓｔ１．ｃは、第１エントリ関数ｔｅｓｔ１を、第２部分プログラムｔｅｓｔ２．ｃは、第２エントリ関数ｔｅｓｔ２を、第３部分プログラムｔｅｓｔ３．ｃは、第３エントリ関数ｔｅｓｔ３を、および第４部分プログラムｔｅｓｔ４．ｃは、第４エントリ関数ｔｅｓｔ４をそれぞれ含んでいる。この例では、エントリ関数の名称を部分プログラムのファイル名と同じに設定してある。
【００２８】
引数抽出部３３０は、関数抽出部３２０により抽出されたエントリ関数内から引数を抽出する。図５の例では、第１エントリ関数ｔｅｓｔ１から引数ａ、引数＊ｂが、第２エントリ関数ｔｅｓｔ２から引数ｂ、引数＊ｃが、第３エントリ関数ｔｅｓｔ３から引数ａ、引数＊ＲＳ＿ｄが、第４エントリ関数ｔｅｓｔ４から引数ｃ、引数＊ｅがそれぞれ抽出される。
【００２９】
本実施の形態では、エントリ関数の引数をスレッドの入出力と関連づけ、値渡しをスレッドへの入力、ポインタ渡しをスレッドからの出力と定義する。上記プログラマは、このルールにしたがい上記ソースプログラムを作成する。この他、入力または出力を示す文字列を引数名につけて入出力を判別する方法もある。
【００３０】
引数抽出部３３０は、抽出した引数のうち、特定の種類の引数、ここでは上記部分プログラムが割り当てられたスレッドに対する開始信号とみなされる引数を特定する。本実施の形態では、文字列ＲＳ＿が付加されている引数を当該開始信号と定義する。図５の例では、第３エントリ関数ｔｅｓｔ３の引数ＲＳ＿ｄに当該文字列ＲＳ＿が含まれるため、引数抽出部３３０はその引数ＲＳ＿ｄを開始信号と識別する。
【００３１】
解析部３４０は、引数抽出部３３０により抽出された引数の受け渡し関係を解析することにより、上記複数の部分プログラム間の依存関係を解析する。上述したルールにしたがい、解析部３４０は、複数の部分プログラムのうちの１つの部分プログラムが受けとる引数が、残りの部分プログラムから渡されたものでない場合、その引数をリコンフィギュラブル装置２００の外部から渡されるものと判定する。また、解析部３４０は、複数の部分プログラムのうちの１つの部分プログラムが渡す引数が、残りの部分プログラムのいずれにも受け取られない場合、その引数をリコンフィギュラブル装置２００の外部に渡すものと判定する。
【００３２】
図５の例では、解析部３４０は引数ａを、リコンフィギュラブル装置２００の外部から、第１エントリ関数ｔｅｓｔ１が割り当てられるスレッドおよび第３エントリ関数ｔｅｓｔ３が割り当てられるスレッドに入力されるデータと判定する。解析部３４０は引数ｂを、第１エントリ関数ｔｅｓｔ１が割り当てられるスレッドから出力され、第２エントリ関数ｔｅｓｔ２が割り当てられるスレッドに入力されるデータと判定する。解析部３４０は引数ｃを、第２エントリ関数ｔｅｓｔ２が割り当てられるスレッドから出力され、第４エントリ関数ｔｅｓｔ４が割り当てられるスレッドに入力されるデータと判定する。上述したように、解析部３４０は引数ＲＳ＿ｄを開始信号と判定する。解析部３４０は引数ｅを、第４エントリ関数ｔｅｓｔ４が割り当てられるスレッドからリコンフィギュラブル装置２００の外部に出力されるデータと判定する。
【００３３】
スレッド割当部３５０は、関数抽出部３２０により抽出されたエントリ関数を含む部分プログラムを、マルチスレッド処理が可能なリコンフィギュラブル装置２００のいずれかのスレッドに割り当てる。
【００３４】
図６は、エントリ関数をスレッドに割り当てるためのＧＵＩ画面４０の一例を示す図である。このＧＵＩ画面４０は表示部３９０に表示される。この例では、１つのエントリ関数の範囲と１つの部分プログラムの範囲が一致しているものとする。このＧＵＩ画面４０はコア欄４１およびスレッド欄４２を含む。コア欄４１には、リコンフィギュラブル装置２００に搭載されるコア１００の一覧が表示される。スレッド欄４２はエントリ関数一覧４３およびスレッド割当欄４４を含む。エントリ関数一覧４３は、関数抽出部３２０により抽出されたエントリ関数の一覧が表示される。スレッド割当欄４４は、選択されているコアのスレッドに割り当てられるべきエントリ関数が入力される欄である。
【００３５】
スレッド割当部３５０は、ユーザ操作に起因して操作部３８０から入力されるエントリ関数選択信号に応じて、エントリ関数をスレッドに割り当てることができる。たとえば、ユーザが図６のＧＵＩ画面４０上で、ドラッグアンドドロップ操作を行うことにより、特定のエントリ関数を所望のスレッドに割り当てることができる。図６は、第１エントリ関数ｔｅｓｔ１を第１コア１００ａのスレッド１に割り当て、第２エントリ関数ｔｅｓｔ２を第１コア１００ａのスレッド２に割り当てた状態を示している。
【００３６】
つぎに、スレッド割当部３５０がユーザ操作に起因せず、自動的にエントリ関数をスレッドに割り当てる例を説明する。スレッド割当部３５０は、部分プログラムの実行時に発生するデータ量とスレッドが利用可能な記憶領域の容量との間の制限条件を満たすスレッドに、その部分プログラムを割り当てる。すなわち、当該データ量が当該容量を超えないスレッドに、その部分プログラムを割り当てる。逆にいえば、その部分プログラムの実行中に、オーバーフローが発生するスレッドは割り当て候補から除外する。
【００３７】
また、スレッド割当部３５０は、コア１００間およびコア１００内の、後述する伝達用リソース構造と、解析部３４０により解析された複数の部分プログラム間の依存関係を参照して、スレッド間で引数の入出力が可能なように各エントリ関数をリコンフィギュラブル装置２００内のいずれかのスレッドに割り当てる。たとえば、コア間配線が設けられない２つのコアのそれぞれのスレッドに、依存関係がある２つの部分プログラムを割り当てないように処理する。
【００３８】
スレッド割当部３５０は、これらの条件を満たしながら、すべての部分プログラムをリコンフィギュラブル装置２００内のいずれかのスレッドに割り当てる。これらの条件を満たすスレッドが複数存在する場合、いずれのスレッドに割り当ててもよいし、所定のルール、たとえばコアナンバーおよびスレッドナンバーの昇順で割り当ててもよい。
【００３９】
なお、スレッド割当部３５０がユーザ操作に起因して割り当てを行う場合も、これらの条件を満たさないスレッドには割り当てできないように処理してもよい。たとえば、条件を満たさないスレッド割当欄へのドロップを禁止するよう処理してもよい。
【００４０】
また、スレッド割当部３５０は、引数抽出部３３０により特定された開始信号を、その開始信号を使用するスレッドに割り当てる。開始信号の割り当ても、図６のＧＵＩ画面４０と同様の画面を用いることができる。スレッド割当部３５０は、ユーザ操作に起因して操作部３８０から入力される開始信号の選択信号に応じて、開始信号をスレッドに割り当てることができる。
【００４１】
スレッド割当部３５０がユーザ操作に起因せず、自動的に開始信号をスレッドに割り当てることも可能である。たとえば、ソースプログラムや別ファイルに、部分プログラムが使用する開始信号が記述されている場合、スレッド割当部３５０はそれを解析して、指定されたスレッドに割り当てることができる。
【００４２】
なお、各開始信号に対してスレッドがアクティブになる周期または周波数を設定変更可能なツールがＧＵＩに設けられてもよい。ユーザはこのツールを使用して、必要に応じてその周期または周波数を設定変更することができる。ユーザが設定変更しない場合、デフォルトの周期または周波数が使用される。
【００４３】
伝達用リソース割当部３６０は、スレッド割当部３５０による上記複数の部分プログラムのスレッドへの割り当てと、解析部３４０により解析された上記複数の部分プログラム間の依存関係を参照して、スレッドに対して入出力されるべき引数を、スレッド間の当該引数を伝達するための伝達用リソースまたはスレッドと外部との間で当該引数を伝達するための伝達用リソースに割り当てる。より厳密には、各引数を、スレッド間の複数の伝達用リソースおよびスレッドと外部との間の複数の伝達用リソースの、いずれかに割り当てる。この伝達用リソースは、主に、配線であるが、メモリを介してデータを受け渡す場合、そのメモリ部も含まれる。以下、伝達用リソース割当部３６０は、引数を配線に割り当てる例を説明する。
【００４４】
解析部３４０により、上記複数の部分プログラムのうちの１つの部分プログラムが受けとる引数が、残りの部分プログラムから渡されたものでないと解析された引数について、伝達用リソース割当部３６０は、その引数を、リコンフィギュラブル装置２００の外部からその引数を受け取る部分プログラムが割り当てられたスレッドへの配線に割り当てる。反対に、解析部３４０により、上記複数の部分プログラムのうちの１つの部分プログラムが渡す引数が、残りの部分プログラムのいずれにも受け取られないものであると解析された引数について、伝達用リソース割当部３６０は、その引数を、その引数を渡す部分プログラムが割り当てられたスレッドから、リコンフィギュラブル装置２００の外部への配線に割り当てる。
【００４５】
上述した例では、伝達用リソース割当部３６０は、引数aをリコンフィギュラブル装置２００の外部から第１コア１００ａのスレッド１への入力データ線に、引数ｂを第１コア１００ａ内のスレッド１とスレッド２との間のコア内通信データ線に、引数cを第１コア１００ａのスレッド２から第３コア１００ｃのスレッド１へのコア間通信データ線に、引数ＲＳ＿ｄを第２コア１００ｂのスレッド１から第１コア１００ａのスレッド１への開始信号データ線に、引数eを第３コア１００ｃのスレッド１からリコンフィギュラブル装置２００の外部への外部出力データ線に、それぞれ割り当てる。
【００４６】
また、リコンフィギュラブル装置２００と外部との間で入出力データの入出力順を設定するためのツールがＧＵＩに設けられてもよい。リコンフィギュラブル装置２００と外部との間でシリアルにデータが入出力される場合、割り当てられた外部入出力データに対して入出力の順番を決める必要がある。ユーザはそのツールを用いて、必要に応じてその順番を設定することができる。ユーザが設定しない場合、デフォルトの順番に設定される。
【００４７】
表示制御部３７０は、表示部３９０に、上記複数の部分プログラムが割り当てられた複数のスレッドと、上記複数の引数が割り当てられた複数の配線を含む、リコンフィギュラブル装置２００の模式図を表示させるよう制御する。表示部３９０は、表示制御部３７０による制御にしたがい、当該模式図を表示する。当該模式図は、スレッド割当部３５０および伝達用リソース割当部３６０による割当結果を反映したものである。
【００４８】
図７は、図５の４つの部分プログラムを含むソースプログラムをリコンフィギュラブル装置２００の各リソースに割り当てた結果を反映した、リコンフィギュラブル装置２００の模式図の一例を示す。この模式図は、部分プログラムのスレッドへの割り当てと、スレッド間のデータの受け渡しをグラフィカルに描いたものである。この模式図には、リコンフィギュラブル装置２００のコアとスレッドに対応した領域が描かれており、スレッドの領域に、実行されるエントリ関数名が記載されている。また、スレッド間で受け渡される引数名が実線のデータ線とともに描かれている。また、開始信号が点線矢印とともに描かれている。
【００４９】
図８は、本発明の実施の形態１に係る情報処理装置３００の動作を示すフローチャートである。このフローチャートは上述した処理の流れをまとめて記載したものである。まず、関数抽出部３２０は、ソースプログラム内からエントリ関数を抽出する（Ｓ１０）。引数抽出部３３０は、抽出されたエントリ関数の引数を抽出する（Ｓ１２）。抽出された引数のなかには、開始信号を示すものもある。解析部３４０は、抽出された引数にもとづいて、エントリ関数間の依存関係を解析する（Ｓ１４）。スレッド割当部３５０は、エントリ関数間の依存関係を満たすように、抽出された、エントリ関数および開始信号をスレッドに割り当てる（Ｓ１６）。伝達用リソース割当部３６０は、エントリ関数がスレッドに割り当てられた後、その割り当てをもとに、抽出された引数を配線に割り当てる（Ｓ１８）。
【００５０】
このようにして生成された、上記ソースプログラムのリソース割当情報は、表示部３９０に模式図として表示されることが可能である。また、後述する情報処理装置４００に供給される。
【００５１】
以上説明したように実施の形態１によれば、ソースプログラムから、マルチスレッド処理に対応した演算処理装置で実行可能なデータへの変換作業を効率化することができる。すなわち、スレッドへの関数や開始信号の割り当てを、支援または自動化することが可能であり、ユーザの開発効率が向上する。また、割り当て状況をグラフィカルに表示することにより、ユーザは未使用の、スレッドや配線などの情報を直感的に把握することができ、スレッドの割り当て作業や追加する処理の検討作業の効率を高めることができる。
【００５２】
図９は、本発明の実施の形態２に係る情報処理装置４００の構成を示すブロック図である。当該情報処理装置４００は設定データ生成部４１０を含み、設定データ生成部４１０は、ソースプログラムと、実施の形態１に係る情報処理装置３００により生成された、そのリソース割当情報とにもとづいて、リコンフィギュラブル装置２００で処理されるべき設定データを生成する。なお、本発明の実施の形態２に係る情報処理装置４００は図示しないデータフローグラフ生成部を備え、そのデータフローグラフ生成部がソースプログラムをデータフローグラフに変換して設定データ生成部４１０に供給し、設定データ生成部４１０は、そのデータフローグラフと上記リソース割当情報とにもとづいて、設定データを生成してもよい。なお、実施の形態１に係る情報処理装置３００と、実施の形態２に係る情報処理装置４００は一体化されていてもよい。すなわち、リソース割当情報の生成とコンパイルを１つの装置で実行可能としてもよい。
【００５３】
以上、本発明をいくつかの実施形態をもとに説明した。これらの実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００５４】
実施の形態１では、リコンフィギュラブル装置のリソース割当情報を生成する例を説明したが、本発明の情報処理装置３００はマルチコアを搭載した一般的なプロセッサのリソース割当情報を生成することも可能である。
【図面の簡単な説明】
【００５５】
【図１】リコンフィギュラブル装置の構成の一例を示す図である。
【図２】リコンフィギュラブル装置の各コアの構成の一例を示す図である。
【図３】演算部の構成の一例を示す図である。
【図４】本発明の実施の形態１に係る情報処理装置の構成を示すブロック図である。
【図５】４つの部分プログラムを含むソースプログラムを示す図である。
【図６】エントリ関数をスレッドに割り当てるためのＧＵＩ画面の一例を示す図である。
【図７】図５の４つの部分プログラムを含むソースプログラムをリコンフィギュラブル装置の各リソースに割り当てた結果を反映した、リコンフィギュラブル装置の模式図の一例を示す図である。
【図８】本発明の実施の形態１に係る情報処理装置の動作を示すフローチャートである。
【図９】本発明の実施の形態２に係る情報処理装置の構成を示すブロック図である。
【符号の説明】
【００５６】
１０  演算部、  ２０  制御部、  ３０  記憶部、  １００  コア、  ２００  リコンフィギュラブル装置、  ３００  情報処理装置、  ３１０  処理部、  ３２０  関数抽出部、  ３３０  引数抽出部、  ３４０  解析部、  ３５０  スレッド割当部、  ３６０  伝達用リソース割当部、  ３７０  表示制御部、  ３８０  操作部、  ３９０  表示部、  ４００  情報処理装置、  ４１０  設定データ生成部。
【図１】
2010140198.tif 000003
【図２】
2010140198.tif 000004
【図３】
2010140198.tif 000005
【図４】
2010140198.tif 000006
【図５】
2010140198.tif 000007
【図６】
2010140198.tif 000008
【図７】
2010140198.tif 000009
【図８】
2010140198.tif 000010
【図９】
2010140198.tif 000011