(57)【要約】【課題】  機能の変更が可能なリコンフィギュラブル回路を備えた集積回路装置を提供する。【解決手段】  本発明の集積回路装置２６は、複数のスレッドを同時に実行できるリコンフィギュラブル回路１２を備える。メモリ部２７に設けられたＲＡＭは、リコンフィギュラブル回路１２上で実行されるスレッドに割り当てられる。第１切替回路２３における第１切替部は、ＲＡＭ毎に設けられて、リコンフィギュラブル回路１２からの出力をスレッドに応じて選択して、ＲＡＭに供給する。スレッド間でデータの受け渡しが行われる場合、全てのスレッド処理の終了後、ＲＡＭに対するスレッドの割当てが変更される。【選択図】図８
2006040254.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算機能を選択的に実行可能な論理回路を複数有し、複数のスレッドを同時に実行することができるリコンフィギュラブル回路であって、
前段の論理回路と後段の論理回路との間に記憶部が設けられ、
前記複数のスレッドの実行中に、前記記憶部は、第１のタイミングにおいて前記前段の論理回路から出力されるデータを格納し、前記第１のタイミングに続く第２のタイミングにおいて、前記第１のタイミングにおいて前記前段の論理回路が実行していたスレッドと同一のスレッドを実行する前記後段の論理回路に、格納した前記前段の論理回路から出力されたデータを供給することを特徴とするリコンフィギュラブル回路。
【請求項２】
複数の演算機能を選択的に実行可能な論理回路を複数有し、複数のスレッドを同時に実行することができるリコンフィギュラブル回路と、
前記リコンフィギュラブル回路からの出力を記憶する第１記憶部とを備え、
前記第１記憶部は、前記リコンフィギュラブル回路上で実行されるスレッドに割り当てられることを特徴とする処理装置。
【請求項３】
前記第１記憶部は、複数の記憶手段を有して構成され、
前記複数の記憶手段の少なくとも一部のそれぞれは、所定のサイクル毎に割り当てられるスレッドを変更されることを特徴とする請求項２に記載の処理装置。
【請求項４】
前記リコンフィギュラブル回路からの出力をスレッドに応じて選択して、前記第１記憶部に供給する第１切替部をさらに備えることを特徴とする請求項２又は請求項３のいずれかに記載の処理装置。
【請求項５】
前記複数の記憶手段からの出力の１つをスレッドに応じて選択して、前記リコンフィギュラブル回路の入力に供給する第２切替部をさらに備えることを特徴とする請求項２乃至請求項４のいずれかに記載の処理装置。
【請求項６】
前記第１記憶部は、複数の記憶手段を備え、
前記記憶手段には、該記憶手段に対応する２つのスレッドのうちの一方のスレッドが割り当てられており、該一方のスレッドの割り当ては、所定サイクル毎に他方のスレッドへ割り当てを切り替えられることを特徴とする請求項２乃至請求項５のいずれかに記載の処理装置。
【請求項７】
前記第１記憶部は、少なくとも一対の記憶手段を備え、
前記一対の記憶手段には、異なるスレッドがそれぞれに割り当てられており、該一対の記憶手段のそれぞれに対応するスレッドの割り当ては、所定サイクル毎に互いに切り替えられることを特徴とする請求項２乃至請求項５のいずれかに記載の処理装置。
【請求項８】
前記第１記憶部は、複数の記憶手段を有する情報記憶ユニットを備え、
前記情報記憶ユニットに備えられた記憶手段のいずれかは、前記リコンフィギュラブル回路からの所定スレッドの出力を記憶することを特徴とする請求項２乃至請求項７のいずれかに記載の処理装置。
【請求項９】
前記情報記憶ユニットに備えられた記憶手段のいずれかは、特定のスレッドのみが固定的に割り当てられることを特徴とする請求項８に記載の処理装置。
【請求項１０】
前記情報記憶ユニットに備えられた記憶手段のそれぞれは、同一のアドレス空間に割振られることを特徴とする請求項８乃至請求項９のいずれかに記載の処理装置。
【請求項１１】
前記情報記憶ユニットに備えられた記憶手段のいずれかは、前記リコンフィギュラブル回路からの前記所定スレッドの出力を記憶するか否かを、特定のアドレス範囲により決定されることを特徴とする請求項８乃至請求項１０のいずれかに記載の処理装置。
【請求項１２】
前記第１記憶部の記憶領域は複数に分割されており、
分割された前記記憶領域の少なくとも一部のそれぞれは、所定のサイクル毎に割り当てられるスレッドを変更されることを特徴とする請求項２に記載の処理装置。
【請求項１３】
分割された前記複数の記憶領域からの出力の１つをスレッドに応じて選択して、前記リコンフィギュラブル回路の入力に供給する切替部をさらに備えることを特徴とする請求項２又は請求項１２のいずれかに記載の処理装置。
【請求項１４】
前記リコンフィギュラブル回路は、前記前段の論理回路と前記後段の論理回路の間に、該前段の論理回路から出力されるデータを格納し、該前段の論理回路が実行していたスレッドと同一のスレッドを実行する前記後段の論理回路に、格納したデータを供給する第２記憶部を有することを特徴とする請求項２乃至請求項１３のいずれかに記載の処理装置。
【請求項１５】
前記第１記憶部に対するスレッドの割当てを制御する制御部をさらに備え、
前記制御部は、前記第１記憶部に対するスレッドの割当てを変更して、異なるスレッドからのデータを前記第１記憶部に記憶させることを特徴とする請求項２乃至請求項１４のいずれかに記載の処理装置。
【請求項１６】
前記制御部は、前記複数の記憶手段または分割された前記複数の記憶領域に対するスレッドの割当てを同時に変更させることを特徴とする請求項１５に記載の処理装置。
【請求項１７】
前記制御部は、前記第１記憶部に対するスレッドの割当てを循環的に変更させることを特徴とする請求項１５又は請求項１６のいずれかに記載の処理装置。
【請求項１８】
前記制御部は、全てのスレッドの実行が終了した後のタイミングで、前記第１記憶部とスレッドとの対応を変更させることを特徴とする請求項１５乃至請求項１７のいずれかに記載の処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、機能の変更が可能なリコンフィギュラブル回路、およびリコンフィギュラブル回路を備えた処理装置に関する。
【背景技術】
【０００２】
近年、アプリケーションに応じてハードウエアの動作を変更可能なリコンフィギュラブルプロセッサの開発が進められている。リコンフィギュラブルプロセッサを実現するためのアーキテクチャとしては、ＤＳＰ(Digital Signal Processor)や、ＦＰＧＡ(Field Programmable Gate Array)を用いる方法が存在する。
【０００３】
ＦＰＧＡ（Field Programmable Gate Array）はＬＳＩ製造後に回路データを書き込んで比較的自由に回路構成を設計することが可能であり、専用ハードウエアの設計に利用されている。ＦＰＧＡは、論理回路の真理値表を格納するためのルックアップテーブル（ＬＵＴ）と出力用のフリップフロップからなる基本セルと、その基本セル間を結ぶプログラマブルな配線リソースとを含む。ＦＰＧＡでは、ＬＵＴに格納するデータと配線データを書き込むことで目的とする論理演算を実現できる。
【０００４】
しかし、ＦＰＧＡでＬＳＩを設計した場合、ＡＳＩＣ（Application Specific IC）による設計と比べると、実装面積が非常に大きくなり、コスト高になる。そこで、ＦＰＧＡを動的に再構成することで、回路構成の再利用を図る方法が提案されている（例えば、特許文献１参照。）。
【特許文献１】特開平１０−２５６３８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
例えば衛星放送では、季節などにより、放送モードを切り替えて画質の調整などを行うこともある。受信機では、放送モード毎に複数の回路を予めハードウエア上に作り込んでおき、放送モードに合わせて選択器で回路を切り替えて受信している。
【０００６】
したがって、受信機の他の放送モード用の回路はその間、遊んでいることになる。モード切り替えのように、複数の専用回路を切り替えて使用し、その切り替え間隔が比較的長い場合、複数の専用回路を作り込む代わりに、切り替え時にＬＳＩを瞬時に再構成することにすれば、回路構造をシンプルにして汎用性を高め、同時に実装コストを抑えることができる。
【０００７】
このようなニーズに応えるべく、動的に再構成可能なＬＳＩに製造業界の関心が集まっている。特に、携帯電話やＰＤＡ（Personal Data Assistance）などのモバイル端末に搭載されるＬＳＩは小型化が必須であり、ＬＳＩを動的に再構成し、用途に合わせて適宜機能を切り替えることができれば、ＬＳＩの実装面積を抑えることができる。
【０００８】
ＦＰＧＡは回路構成の設計自由度が高く、汎用的である反面、全ての基本セル間の接続を可能とするため、多数のスイッチとスイッチのＯＮ／ＯＦＦを制御するための制御回路を含む必要があり、必然的に制御回路の実装面積が大きくなる。また、基本セル間の接続に複雑な配線パターンをとるため、配線が長くなる傾向があり、さらに１本の配線に多くのスイッチが接続される構造のため、遅延が大きくなる。
【０００９】
そのため、ＦＰＧＡによるＬＳＩは、試作や実験のために利用されるにとどまることが多く、実装効率、性能、コストなどを考えると、量産には適していない。さらに、ＦＰＧＡでは、多数のＬＵＴ方式の基本セルに構成情報を送る必要があるため、回路のコンフィグレーションにはかなりの時間がかかる。そのため、瞬時に回路構成の切り替えが必要な用途にはＦＰＧＡは適していない。
【００１０】
それらの課題を解決するため、近年、ＡＬＵ(Arithmetic Logic Unit)と呼ばれる基本演算機能を複数持つ多機能素子を多段に並べたＡＬＵアレイの検討が行われるようになった。ＡＬＵアレイでは、処理が上段から下段の一方向に流れるので、水平方向のＡＬＵを結ぶ配線は基本的には不要である。そのため、ＦＰＧＡと比較して回路規模を小さくすることが可能となる。
【００１１】
ＡＬＵアレイでは、ＡＬＵの出力をＡＬＵの入力にフィードバックすることにより、回路のコンフィギュレーションを実行する。回路のコンフィギュレーションを高速に実行することによって、ＡＬＵアレイの処理速度を高めることが可能となる。特に、実行するべきスレッドが複数存在する場合、複数のスレッドを効率的に処理することが好ましい。
【００１２】
本発明はこうした状況に鑑みてなされたもので、その目的は、複数のスレッドを効率的に実行する技術を提供することにある。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明のある態様は、複数の演算機能を選択的に実行可能な論理回路を複数有し、複数のスレッドを同時に実行することができるリコンフィギュラブル回路に関する。
【００１４】
この態様のリコンフィギュラブル回路において、前段の論理回路と後段の論理回路との間に記憶部が設けられ、複数のスレッドの実行中に、記憶部は、第１のタイミングにおいて前段の論理回路から出力されるデータを格納し、第１のタイミングに続く第２のタイミングにおいて、第１のタイミングにおいて前段の論理回路が実行していたスレッドと同一のスレッドを実行する後段の論理回路に、格納した前段の論理回路から出力されたデータを供給する。
【００１５】
なお、記憶部は、データフリップフロップ回路などにより構成されてもよく、リコンフィギュラブル回路のコンフィギュレーションの切替が１クロックで行われる場合には、第２のタイミングは、第１のタイミングから１クロックだけ遅れたタイミングであってよい。
【００１６】
なお、前段および後段という用語は、処理の方向を意味するものである。前段の論理回路の出力が、後段の論理回路の入力として処理されればよく、物理的な位置関係としての前段および後段を意味するものではない。
【００１７】
なお、リコンフィギュラブル回路が論理回路の多段接続構造を有して構成されてもよく、その場合であっても、前段と後段という用語は、処理の方向を意味する。前段と後段の論理回路の間に記憶部を設けることで、同時期に前段と後段の論理回路で異なるスレッドを処理することが可能となり、複数のスレッドを実行可能なリコンフィギュラブル回路を構成することができる。
【００１８】
なお、第１記憶部は、複数の記憶手段を備え、記憶手段には、記憶手段に対応する２つのスレッドのうちの一方のスレッドが割り当てられており、一方のスレッドの割り当ては、所定サイクル毎に他方のスレッドへ割り当てを切り替えられてもよい。
【００１９】
なお、第１記憶部は、少なくとも一対の記憶手段を備え、一対の記憶手段には、異なるスレッドがそれぞれに割り当てられており、一対の記憶手段のそれぞれに対応するスレッドの割り当ては、所定サイクル毎に互いに切り替えられてもよい。
【００２０】
なお、第１記憶部は、複数の記憶手段を有する情報記憶ユニットを備え、情報記憶ユニットに備えられた記憶手段のいずれかは、リコンフィギュラブル回路からの所定スレッドの出力を記憶してもよい。
【００２１】
なお、情報記憶ユニットに備えられた記憶手段のいずれかは、特定のスレッドのみが固定的に割り当てられてもよい。
【００２２】
なお、情報記憶ユニットに備えられた記憶手段の少なくとも２以上は、同一のアドレス空間に割振られてもよい。
【００２３】
なお、情報記憶ユニットに備えられた記憶手段のいずれかは、リコンフィギュラブル回路からの所定スレッドの出力を記憶するか否かを、特定のアドレス範囲により決定されてもよい。
【００２４】
本発明の別の態様は、複数の演算機能を選択的に実行可能な論理回路を複数有し、複数のスレッドを同時に実行することができるリコンフィギュラブル回路と、リコンフィギュラブル回路からの出力を記憶する第１記憶部とを備えた処理装置に関する。
【００２５】
この態様の処理装置において、第１記憶部は、リコンフィギュラブル回路上で実行されるスレッドに割り当てられる。第１記憶部は、ＲＡＭなどの記憶手段により構成されてもよい。第１記憶部は、複数のＲＡＭなどの記憶手段を有してもよく、また１つのＲＡＭなどの記憶手段が複数の記憶領域に分割されたものであってもよい。後者の場合、複数の記憶領域は、同時アクセス可能であることが好ましい。スレッド間でデータの受け渡しを行う場合には、所定のタイミングで、第１記憶部に対するスレッドの割当てを変更することが好ましい。スレッドの割当てを変更することで、スレッド間の効率的なデータの受け渡しを実現できる。
【００２６】
なお、論理回路は、複数種類の多ビット演算を選択的に実行可能な算術論理回路であってよい。
【００２７】
なお、以上の構成要素の任意の組み合わせ、本発明の表現を方法、装置、システム、コンピュータプログラムとして表現したものもまた、本発明の態様として有効である。
【発明の効果】
【００２８】
本発明によれば、複数のスレッドを効率的に実行する技術を提供することができる。
【発明を実施するための最良の形態】
【００２９】
図１は、本発明の実施例に係る処理装置１０の構成図である。処理装置１０は、集積回路装置２６、コンパイル部３０、設定データ生成部３２、および記憶部３４を備える。集積回路装置２６は、回路構成を再構成可能とする機能を有する。
【００３０】
集積回路装置２６は１チップとして構成され、リコンフィギュラブル回路１２、設定部１４、制御部１８、内部状態保持回路２０、出力回路２２、第１切替回路２３、第２切替回路２５、メモリ部２７、第３切替回路２８および経路部２４、２９を備える。
【００３１】
リコンフィギュラブル回路１２は、パイプライン構成を有し、論理回路の設定を変更することにより、機能の変更を可能とする。本実施例に係るリコンフィギュラブル回路１２は、複数のスレッドを同時に実行することができる。スレッドは、リコンフィギュラブル回路１２に実行させる処理であり、各スレッドの処理は、それ自体で完結する。複数のスレッドは、互いに独立して実行され、スレッド同士の間でデータの受け渡しがあるものであってもよい。処理装置１０は、複数種類の回路のコンフィギュレーションをリコンフィギュラブル回路１２上で同時に実現できる。
【００３２】
設定部１４は、第１回路設定部１４ａ、第２回路設定部１４ｂ、第３回路設定部１４ｃ、および回路処理制御部１６を有し、リコンフィギュラブル回路１２に所期の回路を構成するための設定データ４０を供給する。具体的には、第１回路設定部１４ａ、第２回路設定部１４ｂ、第３回路設定部１４ｃは、それぞれ異なるスレッドを実行するための設定データ４０を回路処理制御部１６に供給する。回路処理制御部１６は、第１回路設定部１４ａ、第２回路設定部１４ｂ、第３回路設定部１４ｃから送られてきた設定データ４０を、リコンフィギュラブル回路１２のパイプラインの各段に相当するリコンフィギュラブルユニットに所定の順序で供給する。これにより、リコンフィギュラブル回路１２の各段には、複数種類の回路の一部がそれぞれ構成されることになり、マルチスレッド処理機能が実現される。
【００３３】
経路部２４、２９は、フィードバックパスとして機能し、リコンフィギュラブル回路１２の出力を、第３切替回路２８に出力する。設定部１４は、プログラムカウンタのカウント値に基づいて記憶したデータを出力するコマンドメモリとして構成されてもよい。この場合、制御部１８がプログラムカウンタの出力を制御する。この意味において、設定データ４０はコマンドデータと呼ばれてもよい。
【００３４】
メモリ部２７は、制御部１８からの指示に基づきリコンフィギュラブル回路１２から出力されるデータ信号を格納するための記憶領域を有する。メモリ部２７はリコンフィギュラブル回路１２内に設けられてもよく、またリコンフィギュラブル回路１２の外部に設けられていてもよい。
【００３５】
メモリ部２７は複数のＲＡＭなどから構成される。複数のスレッドの実行中、それぞれのＲＡＭは、リコンフィギュラブル回路１２上で実行されるスレッドに割り当てられる。例えばスレッドＡ、スレッドＢ、スレッドＣの３つのスレッドが同時に実行される場合、１番目のＲＡＭはスレッドＡに、２番目のＲＡＭはスレッドＢに、３番目のＲＡＭはスレッドＣに割り当てられる。ＲＡＭに対するスレッドの割当ては、制御部１８により制御される。
【００３６】
特に、スレッド間にデータの受け渡しがある場合には、制御部１８は、所定のタイミングでＲＡＭに対するスレッドの割当てを変更することが好ましい。例えば、スレッドＡの処理結果をスレッドＢが使用する場合、スレッドＡの処理が終了して、その処理結果が格納された１番目のＲＡＭは、続くタイミングで、制御部１８によりスレッドＢを割り当てられる。これにより、スレッドＢは、スレッドＡの処理結果を１番目のＲＡＭから２番目のＲＡＭにコピーする必要もなく、１番目のＲＡＭに格納されたスレッドＡの処理結果を効率的に利用できる。メモリ部２７の前段には第１切替回路２３が設けられ、後段には第２切替回路２５が設けられる。
【００３７】
第１切替回路２３は、リコンフィギュラブル回路１２からの出力をスレッドに応じて選択して、メモリ部２７のＲＡＭに供給する。これにより、ＲＡＭに対するスレッドの割当てが設定されることになる。したがって、第１切替回路２３におけるスイッチ設定に変更がなければ、あるＲＡＭには、同じスレッドからのデータが格納されることになる。第２切替回路２５は、複数のＲＡＭからの出力の１つをスレッドに応じて選択して、リコンフィギュラブル回路１２の入力にフィードバックさせる。
【００３８】
第２切替回路２５は複数の第２切替部を有して構成され、それぞれの第２切替部は、１つのスレッドについてのデータを選択するように設定される。メモリ部２７に格納されたデータ信号は、第２切替回路２５におけるスイッチ設定に基づいて、経路部２９を通じてリコンフィギュラブル回路１２への入力として伝達される。第１切替回路２３、第２切替回路２５、メモリ部２７の動作は、制御部１８により制御される。
【００３９】
リコンフィギュラブル回路１２への入力は、経路部２４、経路部２９の２系統存在するが、経路部２４は、メモリ部２７を介さないために高速なフィードバック処理を可能とする。特にメモリ部２７が低速で動作処理する場合には、経路部２４は経路部２９よりもさらに高速なフィードバック処理を可能とする。
【００４０】
第３切替回路２８は、回路処理制御部１６からの指示信号に応答して、外部からの入力信号および経路部２４、２９からの入力信号を選択的にリコンフィギュラブル回路１２に出力する。具体的には、設定データ４０に基づいて決定される所定のタイミングで、回路処理制御部１６から切替指示がなされる。
【００４１】
内部状態保持回路２０および出力回路２２は、リコンフィギュラブル回路１２の出力を受けて、たとえばデータフリップフロップ（Ｄ−ＦＦ）などの順序回路として構成される。内部状態保持回路２０は経路部２４に接続されている。メモリ部２７は、経路部２９と接続されている。リコンフィギュラブル回路１２は、組合せ回路と、フリップフロップ回路で構成され、パイプライン動作を実現する。
【００４２】
リコンフィギュラブル回路１２は、機能の変更が可能な論理回路を有して構成される。具体的にリコンフィギュラブル回路１２は、複数の演算機能を選択的に実行可能な論理回路を複数段に配列させた構成を備え、さらに前段の論理回路列の出力と後段の論理回路列の入力との接続関係を設定可能な接続部を備える。
【００４３】
この接続部は、前段の論理回路列の出力すなわち内部状態を保持する状態保持回路（以下、ＦＦ回路とも呼ぶ）の機能も備える。複数の論理回路は、マトリックス状に配置される。各論理回路の機能と、論理回路間の接続関係は、設定部１４により供給される設定データ４０に基づいて設定される。設定データ４０は、以下の手順で生成される。
【００４４】
集積回路装置２６により実現されるべきプログラム３６が、記憶部３４に保持されている。プログラム３６は、回路における処理の動作を記述した動作記述を示し、信号処理回路または信号処理アルゴリズムなどをＣ言語などの高級言語で記述したものである。
【００４５】
コンパイル部３０は、記憶部３４に格納されたプログラム３６をコンパイルし、データフローグラフ（ＤＦＧ）３８に変換して記憶部３４に格納する。データフローグラフ３８は、回路における演算間の実行順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。一般に、データフローグラフ３８は、上から下に向かって演算が進むように作成される。
【００４６】
設定データ生成部３２は、データフローグラフ３８から設定データ４０を生成する。設定データ４０は、データフローグラフ３８をリコンフィギュラブル回路１２にマッピングするためのデータであり、リコンフィギュラブル回路１２における論理回路の機能や論理回路間の接続関係を定める。設定データ生成部３２は、１つの生成すべきターゲット回路を分割してできる複数の分割回路の設定データ４０を生成する。
【００４７】
設定データ生成部３２は、リコンフィギュラブル回路１２における論理回路の配列構造とデータフローグラフ３８によって、ターゲット回路の分割方法を定める。なお、リコンフィギュラブル回路１２でパイプライン処理を行うことが予め分かっている場合には、リコンフィギュラブル回路１２におけるリコンフィギュラブルユニットの配列構造に基づいて、ターゲット回路の分割方法を定めてもよい。リコンフィギュラブル回路１２の配列構造は、制御部１８から設定データ生成部３２に伝えられてもよく、また予め記憶部３４に記録されていてもよい。また、制御部１８が、ターゲット回路の分割方法を設定データ生成部３２に指示してもよい。
【００４８】
以上の手順を実行することにより、記憶部３４は、リコンフィギュラブル回路１２を所期の回路として構成するための複数の設定データ４０を記憶する。複数の設定データ４０は、ターゲット回路を分割した複数の分割回路をそれぞれ表現したものである。このように、リコンフィギュラブル回路１２の回路規模に応じて、生成すべきターゲット回路の設定データ４０を生成することにより、汎用性の高い処理装置１０を実現することが可能となる。別の視点からみると、実施例の処理装置１０によれば、回路規模の小さいリコンフィギュラブル回路１２を用いて、所望の回路を再構成することが可能となる。
【００４９】
図２は、リコンフィギュラブル回路１２の構成を示す。リコンフィギュラブル回路１２は、複数の演算機能を選択的に実行可能な論理回路５０より構成される論理回路列を複数備える。具体的に、リコンフィギュラブル回路１２は、論理回路列の多段配列と、各段に設けられた接続部５２を備えて構成される。
【００５０】
接続部５２は、前段の論理回路の出力と後段の論理回路の入力の任意の接続関係あるいは予め定められた接続関係の組合せの中から選択された接続関係を設定することができる。また接続部５２は、前段の論理回路の出力信号を保持することができる。リコンフィギュラブル回路１２では、論理回路の多段配列構造により、上段から下段に向かって演算が進められる。
【００５１】
リコンフィギュラブル回路１２は、論理回路５０としてＡＬＵ(Arithmetic Logic Unit)を有している。ＡＬＵは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、論理和、論理積、ビットシフトなどの複数種類の多ビット演算を設定により選択的に実行できる。各ＡＬＵは、複数の演算機能を設定するためのセレクタを有して構成されている。図示の例では、ＡＬＵが、２つの入力端子と２つの出力端子を有して構成される。
【００５２】
図示のように、リコンフィギュラブル回路１２は、縦方向にＸ個、横方向にＹ個のＡＬＵが配置されたＸ段Ｙ列のＡＬＵアレイとして構成される。第１段のＡＬＵ１１、ＡＬＵ１２、・・・、ＡＬＵ１Ｙには、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第１段の接続部５２に設定された接続にしたがって、第２段のＡＬＵ２１、ＡＬＵ２２、・・・、ＡＬＵ２Ｙに入力される。
【００５３】
第１段の接続部５２においては、第１段のＡＬＵ列の出力と第２段のＡＬＵ列の入力の間で任意の接続関係、あるいは予め定められた接続関係の組合せの中から選択された接続関係を実現できるように結線が構成されており、設定により所期の結線が有効となる。以下、最終段である第Ｘ段の接続部５２まで同様の構成である。接続部５２はＦＦ回路としての機能も有しており、最終段の接続部５２は、図１に示す内部状態保持回路２０として機能してもよい。
【００５４】
なお、図２のリコンフィギュラブル回路１２においては、接続部５２が、ＡＬＵ列と交互に１段ずつ設けられた構成を示している。この接続部５２を各ＡＬＵ列の下段に配置することにより、リコンフィギュラブル回路１２は、１段ずつのＡＬＵ列から構成されるＸ段のリコンフィギュラブルユニットに分割されることになる。
【００５５】
具体的に、１段のリコンフィギュラブルユニットは、１段のＡＬＵ列と１段の接続部５２で構成される。この分割は、接続部５２に含まれるＦＦ回路にしたがうものであり、例えば２段のＡＬＵ列毎に接続部５２を設け、２段のＡＬＵ列の間を、ＦＦ回路を有しない接続部で接続する場合には、２段ずつのＡＬＵ列で構成されるＸ／２段のリコンフィギュラブルユニットに分割されることになる。それ以外にも、ＦＦ回路を所定段のＡＬＵ列毎に設けることにより、所望段のリコンフィギュラブルユニットを構成することができる。
【００５６】
回路のコンフィギュレーションは１クロックで行われる。具体的に、回路処理制御部１６が１クロック毎に設定データをリコンフィギュラブル回路１２にマッピングする。各ＡＬＵ列の出力は、後段の接続部５２に保持される。複数スレッドの実行中、接続部５２のＦＦ回路は、前段の論理回路から出力されるデータを格納し、次のクロックで、前段の論理回路が実行していたスレッドと同一のスレッドを実行する後段の論理回路に、格納したデータを供給する。
【００５７】
このように、１つのスレッドの処理は、クロック毎に１つ下段のＡＬＵ列において実行されることになる。最終段で処理されると、また最上段のＡＬＵ列からクロック毎に１段ずつ下がっていく。これにより、マルチスレッド処理を実行でき、効率的な回路コンフィギュレーションを実現できる。
【００５８】
図３は、リコンフィギュラブル回路の構成の別の例を示す。図３に示すリコンフィギュラブル回路１２ａは、図２に示すリコンフィギュラブル回路１２の機能をさらに拡張している。図３に示すリコンフィギュラブル回路１２ａにおいて、接続部５２ａは、図２の接続部５２の機能に加えて、外部から入力される変数や定数を、所期のＡＬＵに供給する機能を有している。
【００５９】
また、接続部５２ａは、前段のＡＬＵの演算結果を外部に直接出力することもできる。この構成により、図２に示されるリコンフィギュラブル回路１２の構成よりも多様な組合せ回路を構成することが可能となり、設計の自由度が向上する。
【００６０】
図４は、データフローグラフ３８の例を示す図である。データフローグラフ３８においては、入力される変数や定数の演算の流れが段階的にグラフ構造で表現されている。図中、演算子は丸印で示されている。設定データ生成部３２は、このデータフローグラフ３８をリコンフィギュラブル回路１２にマッピングするための設定データ４０を生成する。
【００６１】
特にデータフローグラフ３８をリコンフィギュラブル回路１２にマッピングしきれない場合に、データフローグラフ３８を複数の領域に分割し、分割回路の設定データ４０を生成する。実施例では、リコンフィギュラブル回路１２上で複数のスレッドが実行されるが、各スレッドは、リコンフィギュラブル回路１２におけるリコンフィギュラブルユニットにてそれぞれ実行されることになる。
【００６２】
したがって、設定データ生成部３２は、リコンフィギュラブルユニットの回路規模に応じて、データフローグラフ３８を複数の領域に分割し、分割回路の設定データ４０を生成する。データフローグラフ３８による演算の流れを回路上で実現するべく、設定データ４０は、演算機能を割り当てる論理回路を特定し、また論理回路間の接続関係を定め、さらに入力変数や入力定数などを定義したデータとなる。したがって、設定データ４０は、各論理回路５０の機能を選択するセレクタに供給する選択情報、接続部５２の結線を設定する接続情報、必要な変数データや定数データなどを含んで構成される。
【００６３】
図５は、１つの生成すべきターゲット回路４２を分割してできる複数の回路の設定データ４０について説明するための図である。このターゲット回路４２には、独立した動作を実行する３つのターゲット回路Ａ、ターゲット回路Ｂ、ターゲット回路Ｃが含まれている。ターゲット回路Ａ、ターゲット回路Ｂ、ターゲット回路Ｃは、それぞれ独立したスレッドを構成し、リコンフィギュラブルユニットの回路規模に合わせて分割される。
【００６４】
この例では、それぞれのターゲット回路が、３つの分割回路に分割されている。すなわち、ターゲット回路Ａは、分割回路Ａ＿０、分割回路Ａ＿１、分割回路Ａ＿２に分割され、ターゲット回路Ｂは、分割回路Ｂ＿０、分割回路Ｂ＿１、分割回路Ｂ＿２に分割され、ターゲット回路Ｃは、分割回路Ｃ＿０、分割回路Ｃ＿１、分割回路Ｃ＿２に分割される。設定データ生成部３２は、各分割回路に対して設定データ４０を生成する。
【００６５】
各ターゲット回路は、データフローグラフ３８における演算の流れにしたがって分割される。データフローグラフ３８において、上から下に向かう方向に演算の流れが表現される場合、そのデータフローグラフ３８を上から所定の間隔で切り取り、その切り取った部分を分割回路として設定する。流れにしたがって切り取る間隔は、リコンフィギュラブル回路１２におけるリコンフィギュラブルユニットの段数以下に定められる。ターゲット回路４２は、データフローグラフ３８の横方向で分割されてもよい。横方向に分割する幅は、リコンフィギュラブル回路１２における論理回路の１段当たりの個数以下に定められる。
【００６６】
例えば、リコンフィギュラブル回路１２が３段のＡＬＵ列で構成され、各段に接続部５２が設けられている場合、リコンフィギュラブルユニットには、１段のＡＬＵ列が含まれることになる。このとき、各ターゲット回路の分割回路は、１段のデータフローグラフ分を表現することになる。
【００６７】
したがって、図５の例では、各ターゲット回路が３段のデータフローグラフ３８により表現されていることになる。実際のターゲット回路の回路規模は、数十以上の段数のデータフローグラフ３８で表現されることが多いが、本明細書では説明の簡便のため、図５に示す分割回路が設定された場合について説明する。
【００６８】
図６は、リコンフィギュラブル回路上に構成するターゲット回路Ａの処理の流れを示す図である。リコンフィギュラブル回路１２では、１回のマッピング処理を１クロックで実行することができる。ここでは、３段のＡＬＵ列（リコンフィギュラブルユニット）で構成されるリコンフィギュラブル回路１２を想定する。
【００６９】
１クロック目に、１段目のＡＬＵ列に分割回路Ａ＿０が生成され、１段目の接続部５２におけるＦＦ回路が、分割回路Ａ＿０から出力されるデータを格納する。２クロック目に、２段目のＡＬＵ列に分割回路Ａ＿１が生成され、１段目の接続部５２におけるＦＦ回路が、１クロック目に格納したデータを、生成された分割回路Ａ＿１に供給する。
【００７０】
３クロック目に、３段目のＡＬＵ列に分割回路Ａ＿２が生成され、２段目の接続部５２におけるＦＦ回路が、２クロック目に格納したデータを、生成された分割回路Ａ＿２に供給する。実施例では、ターゲット回路Ａが３つの分割回路により構成されているため、分割回路Ａ＿２がデータを出力することで、ターゲット回路Ａの処理というスレッドが完了する。なお、ターゲット回路Ａが４つ以上の分割回路により構成されている場合には、分割回路Ａ＿２の出力がフィードバックされて、１段目のＡＬＵ列に供給されることになる。
【００７１】
このように、１つのスレッドは、リコンフィギュラブル回路１２の各段に構成されたリコンフィギュラブルユニット毎に処理される。図６からも明らかなように、リコンフィギュラブル回路１２を１つのスレッドの処理のみに用いると、動作しないＡＬＵ列が生じる。そこで、本実施例では、リコンフィギュラブル回路１２を有効に活用するために、空いたＡＬＵ列で別のスレッドを実行させるようにする。これにより、マルチスレッド処理を実現できる。
【００７２】
図７は、リコンフィギュラブル回路上で実現するマルチスレッド動作の流れを示す図である。各スレッドは、互いに独立して実行される。リコンフィギュラブル回路１２におけるリコンフィギュラブルユニット間のデータの受け渡しについては、図６に関して説明したとおりである。
【００７３】
１クロック目に、リコンフィギュラブル回路１２の１段目のＡＬＵ列に分割回路Ａ＿０が生成される。２クロック目に、１段目のＡＬＵ列に分割回路Ｂ＿０が生成され、２段目のＡＬＵ列に分割回路Ａ＿１が生成される。３クロック目に、１段目のＡＬＵ列に分割回路Ｃ＿０が生成され、２段目のＡＬＵ列に分割回路Ｂ＿１が生成され、３段目のＡＬＵ列に分割回路Ａ＿２が生成される。
【００７４】
３クロック目で、ターゲット回路Ａの処理、すなわちスレッドＡの実行は完了する。４クロック目に、１段目のＡＬＵ列に分割回路Ａ＿０が生成され、２段目のＡＬＵ列に分割回路Ｃ＿１が生成され、３段目のＡＬＵ列に分割回路Ｂ＿２が生成される。４クロック目で、ターゲット回路Ｂの処理、すなわちスレッドＢの実行は完了し、新たなスレッドＡが実行される。
【００７５】
５クロック目に、１段目のＡＬＵ列に分割回路Ｂ＿０が生成され、２段目のＡＬＵ列に分割回路Ａ＿１が生成され、３段目のＡＬＵ列に分割回路Ｃ＿２が生成される。５クロック目で、ターゲット回路Ｃの処理、すなわちスレッドＣの実行は完了し、新たなスレッドＢが実行される。６クロック目に、１段目のＡＬＵ列に分割回路Ｃ＿０が生成され、２段目のＡＬＵ列に分割回路Ｂ＿１が生成され、３段目のＡＬＵ列に分割回路Ａ＿２が生成される。６クロック目で、スレッドＡの実行は完了し、新たなスレッドＣが実行される。以後、同様に各スレッドがクロック毎に処理される。
【００７６】
このように、リコンフィギュラブル回路１２が複数のスレッドを同時に実行することで、リコンフィギュラブル回路１２のハード資源を有効に活用することができるとともに、もとのターゲット回路４２全体の処理速度を高速化できる。
【００７７】
図８は、集積回路装置２６の詳細な構成を示す。図８は、主としてマルチスレッド処理を実現するための構成、具体的にはリコンフィギュラブル回路１２の入出力に関与する構成を示す。ここでは、図３に示すような各段の接続部５２ａからの途中出力およびメモリ部２７からの途中入力が可能なリコンフィギュラブル回路１２を示している。図８では、説明の便宜上、接続部の符号は、「５２」を利用する。図１、図３および図４の構成と同一の符号を付した構成は、同一の構造および機能を有している。
【００７８】
メモリ部２７は、複数のＲＡＭ２７ａ、ＲＡＭ２７ｂ、ＲＡＭ２７ｃを有する。各ＲＡＭは、リコンフィギュラブル回路１２からの出力を記憶する。本実施例では、各ＲＡＭは、リコンフィギュラブル回路１２上で実行されるスレッドに割り当てられる。
【００７９】
すなわち、１つのＲＡＭは、１つのスレッドからのデータを記憶し、またそのスレッドの実行に必要なデータをリコンフィギュラブル回路１２上のＡＬＵに供給する。したがってＲＡＭの個数は、少なくとも同時に実行するスレッドの数だけ存在していることが好ましい。
【００８０】
第１切替回路２３は、第１切替部２３ａ、第１切替部２３ｂ、第１切替部２３ｃを有する。第１切替部２３ａ、２３ｂ、２３ｃのそれぞれは、それぞれＲＡＭ２７ａ、２７ｂ、２７ｃに対応して設けられる。第１切替部２３ａ、２３ｂ、２３ｃは、リコンフィギュラブル回路１２からの出力をスレッドに応じて選択して、対応するＲＡＭ２７ａ、２７ｂ、２７ｃに供給する。それぞれの第１切替部は、全段の接続部５２の出力線と接続されている。
【００８１】
同時実行されるスレッド数が３つの場合には、１つのスレッドは、いずれかのＡＬＵ列において実行されることとなり、したがって、各第１切替部は、対応するＲＡＭが割り当てられているスレッドからのデータを選択して、そのＲＡＭに供給する。
【００８２】
第２切替回路２５は、第２切替部２５ａ、第２切替部２５ｂ、第２切替部２５ｃを有する。第２切替部２５ａ、２５ｂ、２５ｃのそれぞれは、スレッドに対応して設けられる。第２切替部２５ａ、２５ｂ、２５ｃのそれぞれは、ＲＡＭ２７ａ、２７ｂ、２７ｃからの出力の１つをスレッドに応じて選択して、リコンフィギュラブル回路１２の入力に供給する。具体的に、第２切替部２５ａは、スレッドＡの処理に必要なデータを選択して経路部２９に出力する。
【００８３】
同様に、第２切替部２５ｂは、スレッドＢの処理に必要なデータを選択して経路部２９に出力し、第２切替部２５ｃは、スレッドＣの処理に必要なデータを選択して経路部２９に出力する。これにより、経路部２９から供給されるデータとスレッドとを対応付けることができ、リコンフィギュラブル回路１２の入力設定および機能設定を容易にすることができる。
【００８４】
図９は、スレッド間のデータの受け渡しの一例を示す図である。スレッドＡは例えば外部からの入力ないしは設定データによる入力を受けて実行される。スレッドＢはスレッドＡの処理結果を利用し、スレッドＣはスレッドＢの処理結果を利用して、自身の処理結果を出力する。各スレッドは独立した処理を行うため、図７に示すようにマルチスレッドで実行することができる。
【００８５】
スレッドに対するＲＡＭの割当てについて考察する。ＲＡＭをスレッドに対して任意に割り当てる場合、各ＲＡＭに格納されているデータがどのスレッドのデータであるかを判断する必要がある。またデータを読み出すタイミングおよび書き込むタイミングも、適宜判断しなければならない。
【００８６】
各スレッドＡ、Ｂ、Ｃは、他のスレッドと無関係に独立してリコンフィギュラブル回路１２上にマッピングされて動作しているため、ＲＡＭをスレッドに対して任意に割り当てたのであれば、データの読出および書込の制御が非常に複雑となる。以上の各構成の動作は、コンパイル部３０により実行されてＤＦＧに変換されるものであるが、１つのＲＡＭから複数のデータを同時に読み出すことができないなどの複雑な条件を全て考慮する必要があるため、コンパイルプログラムが複雑化することが確実である。
【００８７】
一方、スレッドＡをＲＡＭ２７ａに、スレッドＢをＲＡＭ２７ｂに、スレッドＣをＲＡＭ２７ｃに固定的に割り当てた場合を考える。スレッドＢの処理でスレッドＡの処理結果を利用するため、スレッドＢは、スレッドＡを割り当てられたＲＡＭ２７ａから処理結果を読み出すことになる。一方、ＲＡＭ２７ａには、スレッドＡからのデータが書き込まれる。ＲＡＭ２７ａのアドレスＸにスレッドＡの処理結果が格納されている場合、スレッドＢが読み出すタイミングが、スレッドＡがアドレスＸにデータを書き込むタイミングよりも早ければ問題は生じない。
【００８８】
しかしながら、スレッドＡがデータを書き込むタイミングの方が早ければ、スレッドＢは、新たに書き込まれたデータを読み出すことになり、正しい処理結果を読み出すことができない。
【００８９】
この場合、スレッドＡの処理結果がＲＡＭ２７ａに書き込まれると、一旦スレッドＡの動作を中断して、スレッドＢで使用するデータをスレッドＢ用のＲＡＭ２７ｂにコピーすればよい。
【００９０】
同様に、スレッドＢの処理結果がＲＡＭ２７ｂに書き込まれると、スレッドＢの動作を中断して、スレッドＣで使用するデータをスレッドＣ用のＲＡＭ２７ｃにコピーする。これにより、必要なデータを上書きして消失する事態を回避できる。
【００９１】
このとき、データのコピーは、経路部２９を介してリコンフィギュラブル回路１２の入力にフィードバックし、データを別のＲＡＭに転送することで行われる。この間、ＡＬＵは、本来のスレッド処理とは異なる動作に使用されるため、非効率である。そこで、以下では、より効率的にマルチスレッド処理を実行する方法について説明する。具体的には、ＲＡＭに対するスレッドの割当てを、時分割的に変化させることで対応する。
【００９２】
図１０は、メモリ部２７における複数のＲＡＭへのスレッドの割当てと、ＲＡＭの記憶領域の状態を示す。図中、ＲＡＭに入る矢印は、リコンフィギュラブル回路１２から書き込まれるデータの流れを示し、ＲＡＭから出る矢印は、リコンフィギュラブル回路１２にフィードバックされるデータの流れを示す。
【００９３】
また、例えばＡ→Ｂは、スレッドＢに引き渡されるべきスレッドＡの処理結果を格納する領域を示す。また例えば、Ａ＿ａｒｅａは、スレッドＡ用に割り当てられるテンポラリな領域を示し、処理を実行するために必要な途中結果を格納する領域である。
【００９４】
図１０（ａ）〜図１０（ｅ）に示されるＲＡＭの記憶領域の状態は、全てのスレッドが終了したときの状態をそれぞれ示している。上記した例では、３クロックで終了する単純なスレッドについて説明したが、実際には、数百クロック程度は必要となるスレッドが想定される。例えば、スレッドＡが１２０クロック、スレッドＢが１５０クロック、スレッドＣが１００クロック必要であるとすると、全てのスレッドが終了する時間は、少なくとも１５０クロックかかる。
【００９５】
スレッド間でデータの受け渡しを行うため、各スレッドを確実に実行するためには、１５０クロックを単位時間として、各スレッドが実行されるようにしてもよい。本実施例では、この１５０クロックを単位時間に設定して、ＲＡＭに対するスレッドの割当ての変更を、１５０クロック毎に実行する。
【００９６】
以下、この基準時間をサイクルとして表現する。なお、サイクルは、同時に実行するスレッドの処理時間のうち、最も時間のかかるスレッドの処理時間以上に設定される。したがって、同時に実行する複数のスレッドの処理は、１サイクルの間に終了されることになる。
【００９７】
図１０（ａ）は、１サイクル目の状態を示す。１サイクル目では、スレッドＡがＲＡＭ２７ａに、スレッドＢがＲＡＭ２７ｂに、スレッドＣがＲＡＭ２７ｃに割り当てられる。１サイクル目では、ＲＡＭ２７ａに、次回以降のサイクルでスレッドＢに引き渡すべき処理結果を格納する領域（Ａ→Ｂ）と、スレッドＡの途中結果を格納する領域（Ａ＿ａｒｅａ）が設定される。なお、Ａ→Ｂの前に表記される（Ｎ）は、Ｎサイクル目に生成された処理結果であることを示す。
【００９８】
同様に、ＲＡＭ２７ｂに、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＢの途中結果を格納する領域（Ｂ＿ａｒｅａ）が設定される。また、ＲＡＭ２７ｃに、スレッドＣの途中結果および処理結果を格納する領域（Ｃ＿ａｒｅａ）が設定される。
【００９９】
図１０（ｂ）は、２サイクル目の状態を示す。２サイクル目では、スレッドＢがＲＡＭ２７ａに、スレッドＣがＲＡＭ２７ｂに、スレッドＡがＲＡＭ２７ｃに割り当てられる。ＲＡＭに対するスレッドの割当ては、制御部１８により実行される。制御部１８は、サイクル毎にスレッドの割当てを変更して、前回のサイクルとは異なるスレッドからのデータをＲＡＭに記憶させるようにする。
【０１００】
なお、スレッドの割当てを変更する順番は、図９に示すスレッド間のデータの引渡しの関係をもとに定められる。図９に示すように、スレッドＡの処理結果がスレッドＢに引き渡される場合には、前回のサイクルでスレッドＡに割り当てられていたＲＡＭを、今回のサイクルでスレッドＢに割り当てるように定める。そのため、スレッドＢは、今回のサイクルで自身に割り当てられたＲＡＭ中に格納されるスレッドＡの処理結果を容易に利用することができる。
【０１０１】
すなわち、ＲＡＭ２７ａには、前回のサイクルでスレッドＡから引き渡されるべき処理結果が格納されているため、スレッドＢは、この処理結果を自身の処理に使用できる。同様に、前回のサイクルでスレッドＢに割り当てられていたＲＡＭは、今回のサイクルでスレッドＣに割り当てられる。
【０１０２】
図示されるように、制御部１８は、スレッドの割当てを全てのＲＡＭに対して同時に変更させる。このタイミングは、既述したように全てのスレッドの実行が終了した後のタイミングである。このとき、スレッドの割当てを循環的に変更させることで、コンパイル処理を容易にするとともに、図９に示すスレッド間の関係にしたがったデータの引渡しを効率的に行うことが可能となる。このようにＲＡＭに対するスレッドの割当てを効率よく循環的に変更することで、処理装置１０の高速化を実現できる。
【０１０３】
２サイクル目では、ＲＡＭ２７ａに、前回のサイクルで生成されたスレッドＡの処理結果を格納する領域（Ａ→Ｂ）、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＢの途中結果を格納する領域（Ｂ＿ａｒｅａ）が設定される。スレッドＡの処理結果およびスレッドＢの途中結果は、スレッドＢの実行のためにリコンフィギュラブル回路１２の入力に読み出される。なお、スレッドＡの処理結果が読み出されて、その後、スレッドＢで使用しないことが分かっている場合には、スレッドＡの処理結果を格納した領域（Ａ→Ｂ）を開放して、データの書込みを許してもよい。
【０１０４】
同様に、ＲＡＭ２７ｂに、前回のサイクルで生成されたスレッドＢの処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＣの途中結果および処理結果を格納する領域（Ｃ＿ａｒｅａ）が設定される。スレッドＢの処理結果およびスレッドＣの途中結果は、スレッドＣの実行のためにリコンフィギュラブル回路１２の入力に読み出される。なお、スレッドＢの処理結果が読み出されて、その後、スレッドＣで使用しないことが分かっている場合には、スレッドＢの処理結果を格納した領域（Ｂ→Ｃ）を開放して、データの書込みを許してもよい。
【０１０５】
また、ＲＡＭ２７ｃに、次回以降のサイクルでスレッドＢに引き渡すべき処理結果を格納する領域（Ａ→Ｂ）と、スレッドＡの途中結果を格納する領域（Ａ＿ａｒｅａ）が設定される。スレッドＡの途中結果は、スレッドＡの実行のためにリコンフィギュラブル回路１２の入力に読み出される。
【０１０６】
図１０（ｃ）は、３サイクル目の状態を示す。３サイクル目では、スレッドＣがＲＡＭ２７ａに、スレッドＡがＲＡＭ２７ｂに、スレッドＢがＲＡＭ２７ｃに割り当てられる。３サイクル目では、ＲＡＭ２７ａに、前回のサイクルで生成されたスレッドＢの処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＣの途中結果および処理結果を格納する領域（Ｃ＿ａｒｅａ）が設定される。
【０１０７】
なお、ＲＡＭ２７ａにおいて、２サイクル目で設定されていた領域（Ａ→Ｂ）は、２サイクル目でデータの読出しが終了しているため、この例ではＣ＿ａｒｅａとして利用されている。これにより、ＲＡＭ２７ａを効率的に利用することができる。
【０１０８】
同様にＲＡＭ２７ｂに、次回以降のサイクルでスレッドＢに引き渡すべき処理結果を格納する領域（Ａ→Ｂ）と、スレッドＡの途中結果を格納する領域（Ａ＿ａｒｅａ）が設定される。ＲＡＭ２７ｂにおいて、２サイクル目で設定されていた領域（Ｂ→Ｃ）は、２サイクル目でデータの読出しが終了しているため、この例ではＡ＿ａｒｅａとして利用されている。
【０１０９】
またＲＡＭ２７ｃに、前回のサイクルで生成されたスレッドＡの処理結果を格納する領域（Ａ→Ｂ）と、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＢの途中結果を格納する領域（Ｂ＿ａｒｅａ）が設定される。
【０１１０】
図１０（ｄ）は、４サイクル目の状態を示す。４サイクル目では、１サイクル目と同様に、スレッドＡがＲＡＭ２７ａに、スレッドＢがＲＡＭ２７ｂに、スレッドＣがＲＡＭ２７ｃに割り当てられる。４サイクル目では、ＲＡＭ２７ａに、次回以降のサイクルでスレッドＢに引き渡すべき処理結果を格納する領域（Ａ→Ｂ）と、スレッドＡの途中結果を格納する領域（Ａ＿ａｒｅａ）が設定される。
【０１１１】
同様にＲＡＭ２７ｂに、前回のサイクルで生成されたスレッドＡの処理結果を格納する領域（Ａ→Ｂ）と、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＢの途中結果を格納する領域（Ｂ＿ａｒｅａ）が設定される。またＲＡＭ２７ｃに、前回のサイクルで生成されたスレッドＢの処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＣの途中結果および処理結果を格納する領域（Ｃ＿ａｒｅａ）が設定される。
【０１１２】
図１０（ｅ）は、５サイクル目の状態を示す。５サイクル目では、２サイクル目と同様に、スレッドＢがＲＡＭ２７ａに、スレッドＣがＲＡＭ２７ｂに、スレッドＡがＲＡＭ２７ｃに割り当てられる。なお、ＲＡＭの記憶領域の状態についても、図１０（ｂ）に示す２サイクル目の状態と同一である。以後、図１０（ｂ）、図１０（ｃ）、図１０（ｄ）に示す状態をサイクリックに繰り返して、図９に示す処理が継続されることになる。
【０１１３】
図１１は、スレッド間のデータの受け渡しの別の例を示す図である。スレッドＡは例えば外部からの入力ないしは設定データによる入力を受けて実行される。スレッドＢはスレッドＡの処理結果を利用し、スレッドＣはスレッドＡの処理結果およびスレッドＢの処理結果を利用して、自身の処理結果を出力する。各スレッドは独立した処理を行い、図７に示すようにマルチスレッドで実行することができる。図９および図１０に関して示した処理と同様に、マルチスレッド処理では、ＲＡＭに対するスレッドの割当てを、時分割的に変化させる。
【０１１４】
図１２および図１３は、メモリ部２７における複数のＲＡＭへのスレッドの割当てと、ＲＡＭの記憶領域の状態を示す。図中、ＲＡＭに入る矢印は、リコンフィギュラブル回路１２から書き込まれるデータの流れを示し、ＲＡＭから出る矢印は、リコンフィギュラブル回路１２にフィードバックされるデータの流れを示す。
【０１１５】
また、例えばＡ→Ｂは、スレッドＢに引き渡されるべきスレッドＡの処理結果を格納する領域を示す。また例えば、Ａ＿ａｒｅａは、スレッドＡ用に割り当てられるテンポラリな領域を示し、処理を実行するために必要な途中結果を格納する領域である。図１２（ａ）〜図１２（ｄ）および図１３（ａ）〜図１３（ｄ）に示されるＲＡＭの記憶領域の状態は、全てのスレッドが終了したときの状態をそれぞれ示している。図１２および図１３におけるスレッドの割当ての変更は、制御部１８により実行される。
【０１１６】
図１２（ａ）は、１サイクル目の状態を示す。１サイクル目では、スレッドＡがＲＡＭ２７ａに、スレッドＢがＲＡＭ２７ｂに、スレッドＣがＲＡＭ２７ｃに割り当てられる。１サイクル目では、ＲＡＭ２７ａに、次回以降のサイクルでスレッドＢに引き渡すべき処理結果を格納する領域（Ａ→Ｂ）と、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ａ→Ｃ）と、スレッドＡの途中結果を格納する領域（Ａ＿ａｒｅａ）が設定される。
【０１１７】
同様に、ＲＡＭ２７ｂに、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＢの途中結果を格納する領域（Ｂ＿ａｒｅａ）が設定される。また、ＲＡＭ２７ｃに、スレッドＣの途中結果および処理結果を格納する領域（Ｃ＿ａｒｅａ）が設定される。
【０１１８】
図１２（ｂ）は、２サイクル目の状態を示す。２サイクル目では、スレッドＢがＲＡＭ２７ａに、スレッドＣがＲＡＭ２７ｂに、スレッドＡがＲＡＭ２７ｃに割り当てられる。２サイクル目では、ＲＡＭ２７ａに、前回のサイクルで生成されたスレッドＡの処理結果を格納する領域（Ａ→Ｂ）、（Ａ→Ｃ）、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＢの途中結果を格納する領域（Ｂ＿ａｒｅａ）が設定される。
【０１１９】
スレッドＢに引き渡されるべきスレッドＡの処理結果およびスレッドＢの途中結果は、スレッドＢの実行のためにリコンフィギュラブル回路１２の入力に読み出される。領域（Ａ→Ｃ）に格納されているスレッドＡの処理結果は、次のサイクルで使用されるため、領域（Ａ→Ｃ）への書き込みは禁止される。
【０１２０】
なお、領域（Ａ→Ｂ）に格納されているスレッドＡの処理結果が読み出されて、その後、スレッドＢで使用しないことが分かっている場合には、領域（Ａ→Ｂ）を開放して、データの書込みを許してもよい。
【０１２１】
同様に、ＲＡＭ２７ｂに、前回のサイクルで生成されたスレッドＢの処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＣの途中結果および処理結果を格納する領域（Ｃ＿ａｒｅａ）が設定される。スレッドＢの処理結果およびスレッドＣの途中結果は、スレッドＣの実行のためにリコンフィギュラブル回路１２の入力に読み出される。
【０１２２】
なお、スレッドＢの処理結果が読み出されて、その後、スレッドＣで使用しないことが分かっている場合には、スレッドＢの処理結果を格納した領域（Ｂ→Ｃ）を開放して、データの書込みを許してもよい。
【０１２３】
また、ＲＡＭ２７ｃに、次回以降のサイクルでスレッドＢに引き渡すべき処理結果を格納する領域（Ａ→Ｂ）、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ａ→Ｃ）と、スレッドＡの途中結果を格納する領域（Ａ＿ａｒｅａ）が設定される。スレッドＡの途中結果は、スレッドＡの実行のためにリコンフィギュラブル回路１２の入力に読み出される。
【０１２４】
図１２（ｃ）は、３サイクル目の状態を示す。３サイクル目では、スレッドＣがＲＡＭ２７ａに、スレッドＡがＲＡＭ２７ｂに、スレッドＢがＲＡＭ２７ｃに割り当てられる。３サイクル目では、ＲＡＭ２７ａに、前回のサイクルで生成されたスレッドＢの処理結果を格納する領域（Ｂ→Ｃ）と、前々回のサイクルで生成されたスレッドＡの処理結果を格納する領域（Ａ→Ｃ）、スレッドＣの途中結果および処理結果を格納する領域（Ｃ＿ａｒｅａ）が設定される。
【０１２５】
なお、ＲＡＭ２７ａにおいて、２サイクル目で設定されていた領域（Ａ→Ｂ）は、２サイクル目でデータの読出しが終了しているため、この例ではＣ＿ａｒｅａとして利用されている。これにより、ＲＡＭ２７ａを効率的に利用することができる。
【０１２６】
同様にＲＡＭ２７ｂに、次回以降のサイクルでスレッドＢに引き渡すべき処理結果を格納する領域（Ａ→Ｂ）、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ａ→Ｃ）と、スレッドＡの途中結果を格納する領域（Ａ＿ａｒｅａ）が設定される。ＲＡＭ２７ｂにおいて、２サイクル目で設定されていた領域（Ｂ→Ｃ）は、２サイクル目でデータの読出しが終了しているため、この例ではＡ＿ａｒｅａとして利用されている。
【０１２７】
またＲＡＭ２７ｃに、前回のサイクルで生成されたスレッドＡの処理結果を格納する領域（Ａ→Ｂ）、（Ａ→Ｃ）と、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＢの途中結果を格納する領域（Ｂ＿ａｒｅａ）が設定される。
【０１２８】
図１２（ｄ）は、４サイクル目の状態を示す。４サイクル目では、１サイクル目と同様に、スレッドＡがＲＡＭ２７ａに、スレッドＢがＲＡＭ２７ｂに、スレッドＣがＲＡＭ２７ｃに割り当てられる。４サイクル目では、ＲＡＭ２７ａに、次回以降のサイクルでスレッドＢに引き渡すべき処理結果を格納する領域（Ａ→Ｂ）、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ａ→Ｃ）と、スレッドＡの途中結果を格納する領域（Ａ＿ａｒｅａ）が設定される。
【０１２９】
同様にＲＡＭ２７ｂに、前回のサイクルで生成されたスレッドＡの処理結果を格納する領域（Ａ→Ｂ）、（Ａ→Ｃ）と、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＢの途中結果を格納する領域（Ｂ＿ａｒｅａ）が設定される。
【０１３０】
またＲＡＭ２７ｃに、前回のサイクルで生成されたスレッドＢの処理結果を格納する領域（Ｂ→Ｃ）と、前々回のサイクルで生成されたスレッドＡの処理結果を格納する領域（Ａ→Ｃ）と、スレッドＣの途中結果および処理結果を格納する領域（Ｃ＿ａｒｅａ）が設定される。
【０１３１】
図１３（ａ）は、５サイクル目の状態を示す。５サイクル目では、２サイクル目と同様に、スレッドＢがＲＡＭ２７ａに、スレッドＣがＲＡＭ２７ｂに、スレッドＡがＲＡＭ２７ｃに割り当てられる。５サイクル目では、ＲＡＭ２７ａに、前回のサイクルで生成されたスレッドＡの処理結果を格納する領域（Ａ→Ｂ）、（Ａ→Ｃ）、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ｂ→Ｃ）と、スレッドＢの途中結果を格納する領域（Ｂ＿ａｒｅａ）が設定される。
【０１３２】
同様に、ＲＡＭ２７ｂに、前回のサイクルで生成されたスレッドＢの処理結果を格納する領域（Ｂ→Ｃ）、前々回のサイクルで生成されたスレッドＡの処理結果を格納する領域（Ａ→Ｃ）と、スレッドＣの途中結果および処理結果を格納する領域（Ｃ＿ａｒｅａ）が設定される。
【０１３３】
また、ＲＡＭ２７ｃに、次回以降のサイクルでスレッドＢに引き渡すべき処理結果を格納する領域（Ａ→Ｂ）、次回以降のサイクルでスレッドＣに引き渡すべき処理結果を格納する領域（Ａ→Ｃ）と、スレッドＡの途中結果を格納する領域（Ａ＿ａｒｅａ）が設定される。
【０１３４】
図１３（ｂ）は、６サイクル目の状態を示す。６サイクル目では、３サイクル目と同様に、スレッドＣがＲＡＭ２７ａに、スレッドＡがＲＡＭ２７ｂに、スレッドＢがＲＡＭ２７ｃに割り当てられる。なお、ＲＡＭの記憶領域の状態についても、図１２（ｃ）に示す３サイクル目の状態と同一である。
【０１３５】
図１３（ｃ）は、７サイクル目の状態を示す。７サイクル目では、４サイクル目と同様に、スレッドＡがＲＡＭ２７ａに、スレッドＢがＲＡＭ２７ｂに、スレッドＣがＲＡＭ２７ｃに割り当てられる。なお、ＲＡＭの記憶領域の状態についても、図１２（ｄ）に示す４サイクル目の状態と同一である。
【０１３６】
図１３（ｄ）は、８サイクル目の状態を示す。８サイクル目では、５サイクル目と同様に、スレッドＢがＲＡＭ２７ａに、スレッドＣがＲＡＭ２７ｂに、スレッドＡがＲＡＭ２７ｃに割り当てられる。なお、ＲＡＭの記憶領域の状態についても、図１３（ａ）に示す４サイクル目の状態と同一である。以後、図１２（ｃ）、図１２（ｄ）、図１３（ａ）に示す状態をサイクリックに繰り返して、図１１に示す処理が継続されることになる。
【０１３７】
また、図９又は図１１に示すスレッド間の関係は、他のスレッドからスレッドＡへのフィードバックデータがない場合のものであった。図１４（ａ）および図１４（ｂ）は、スレッドＡへのフィードバックデータが存在する場合のスレッド間のデータの受け渡しの例を示す図である。
【０１３８】
スレッドＡへのフィードバックデータが存在する場合であっても、図９および図１１に関連して説明したように、ＲＡＭに対するスレッドの割当てをサイクル毎に変更することによって、効率的なリコンフィギュラブル回路１２のコンフィギュレーションを実現することが可能である。
【０１３９】
また、各スレッド間でデータの受け渡しの競合の無い構成を実現することで、データ受け渡しの調停回路を不要とできる。これにより、回路の小型化および低消費電力化が可能な技術を提供できる。
【０１４０】
図１５は、図８に示す構成の別の例を示す図である。上記図８では、スレッドＡの処理結果がスレッドＢに引き渡される場合には、前回のサイクルでスレッドＡに割り当てられていたＲＡＭは、今回のサイクルでスレッドＢに割り当てられる。そして、スレッドＢの処理結果がスレッドＣに引き渡される場合には、前回のサイクルでスレッドＢに割り当てられていたＲＡＭは、今回のサイクルでスレッドＣに割り当てられる。
【０１４１】
このように、第１切替部２３がＲＡＭに割り当てられるスレッドをサイクル毎に順次切替（スレッドＡ→スレッドＢ→スレッドＣの順番で切替）を実行することにより、当該ＲＡＭにおいて一方のスレッドの処理結果が他方のスレッドに引き渡されている。このため、第１切替部２３は、当該一方のスレッド（ここではスレッドＡ）から他方のスレッド（ここではスレッドＣ）にデータを引き渡すには、最大（スレッド数−１）回（ここでは２回）の切替をしなければならず、処理時間を増大させていた。この点を解消するために図１５は以下に示す構成を備えている。以下詳細に説明する。
【０１４２】
図１５に示すように、集積回路装置２６は、リコンフィギュラブル回路１２と、第１切替部２３と、第３切替部２８と、スレッドＡＢ用記憶ユニット６０と、スレッドＢＣ用記憶ユニット７０と、スレッドＣＡ用記憶ユニット８０とを備えている。
【０１４３】
なお、図８に示す第１切替部２３は、図１５に示す第１切替回路２３及び第４切替部（第４切替部６１，７１，８１）に対応する。すなわち、図８に示す第１切替回路２３は、リコンフィギュラブル回路１２から出力される各スレッドの選択、及びＲＡＭ２７のそれぞれに対応するスレッドの選択を実行しているが、図１５に示す第１切替回路２３はリコンフィギュラブル回路１２から出力される各スレッドの選択を実行し、図１５に示す第４切替部（第４切替部６１，７１，８１）はそれぞれのＲＡＭに対応するスレッドの選択を実行している。
【０１４４】
例えば、第１切替部２３ａはスレッドＡの出力を選択し、第１切替部２３ｂはスレッドＢの出力を選択し、第１切替部２３ｃはスレッドＣの出力を選択する。
【０１４５】
また、第４切替部６１はＲＡＭ６４ａ，ＲＡＭ６４ｂのそれぞれに対応するスレッドＡ又はスレッドＢの出力を供給する。また、第４切替部７１はＲＡＭ７４ａ,ＲＡＭ７４ｂのそれぞれに対応するスレッドＢ又はスレッドＣの出力を供給する。さらに、第４切替部８１はＲＡＭ８４ａ,ＲＡＭ８４ｂのそれぞれに対応するスレッドＣ又はスレッドＡの出力を供給する。
【０１４６】
また、図８に示す第２切替部２５は、図１５に示す第５切替部（第５切替部６５，７５，８５）に対応する。なお、図８に示す構成と共通する説明については省略する。
【０１４７】
記憶ユニット６０は、第４切替部６１と、ＲＡＭ６２と、ＲＡＭ６３と、ＲＡＭ６４ａ，ＲＡＭ６４ｂ（一対の記憶手段）と、第５切替部６５と、第６切替部６６と、第６切替部６７とを備えている。
【０１４８】
ＲＡＭ６２には、スレッドＡのみが固定的に割り当てられている。同様にして、ＲＡＭ６３には、スレッドＢのみが固定的に割り当てられている。ここで、本実施形態では、上記ＲＡＭ６２及びＲＡＭ６４ａ，ＲＡＭ６４ｂのそれぞれは、リコンフィギュラブル回路１２からの所定スレッド（ここではスレッドＡ）の出力を共通して記憶可能に構成されており、情報記憶ユニットを構成している。また、ＲＡＭ６３及びＲＡＭ６４ａ，ＲＡＭ６４ｂのそれぞれは、リコンフィギュラブル回路１２からの所定スレッド（ここではスレッドＢ）の出力を共通して記憶可能に構成されており、情報記憶ユニットを構成している。
【０１４９】
ＲＡＭ６４ａには、２つのスレッドのうちの一方のスレッドが割り当てられており、一方のスレッドの割り当ては、所定サイクル毎に他方のスレッドへ割り当てを切り替えられる。同様にして、ＲＡＭ６４ｂには、２つのスレッドのうちの一方のスレッドが割り当てられており、一方のスレッドの割り当ては、所定サイクル毎に他方のスレッドへ割り当てを切り替えられる。なお、スレッドの割り当ての切り替えは、第４切替部６１及び第５切替部６５により実行される。すなわち、第４切替部６１は、ＲＡＭ６４ａ，ＲＡＭ６４ｂの入力側でスレッドの割り当てを切り替え、第５切替部６５は、ＲＡＭ６４ａ，ＲＡＭ６４ｂの出力側でスレッドの割り当てを切り替える。
【０１５０】
例えば、ＲＡＭ６４ａにスレッドＡ及びスレッドＢのうちの一方のスレッドＡが割り当てられている場合には、所定サイクルが経過した後に該スレッドＡの割り当ては他方のスレッドＢへ割り当てを切り替えられる。さらに所定サイクルが経過した後は、スレッドＢの割り当ては他方のスレッドＡへ割り当てを切り替えられる。
【０１５１】
また、ＲＡＭ６４ａ，ＲＡＭ６４ｂには、異なるスレッドがそれぞれに割り当てられている場合には、ＲＡＭ６４ａ，ＲＡＭ６４ｂのそれぞれに対応するスレッドの割り当ては、所定サイクル毎に互いに切り替えられてもよい。なお、スレッドの割り当ての切り替えは、第４切替部６１及び第５切替部６５により実行される。
【０１５２】
例えば、ＲＡＭ６４ａにスレッドＡが割り当てられ、ＲＡＭ６４ｂにスレッドＢが割り当てられている場合には、所定サイクルが経過した後に、ＲＡＭ６４ａに対応するスレッドＡの割り当てがスレッドＢの割り当てに切り替えられるとともに、ＲＡＭ６４ｂに対応するスレッドＢの割り当てがスレッドＡの割り当てに切り替えられる。さらに所定サイクルが経過した後は、ＲＡＭ６４ａに対応するスレッドＢの割り当てがスレッドＡの割り当てに切り替えられるとともに、ＲＡＭ６４ｂに対応するスレッドＡの割り当てがスレッドＢの割り当てに切り替えられる。
【０１５３】
したがって、第４切替部６１は、第１切替部２３ａのスレッドＡの出力と、第１切替部２３ｂのスレッドＢの出力とが入力されると、第１切替部２３ａのスレッドＡの出力をＲＡＭ６４ａに出力し、第１切替部２３ｂのスレッドＢの出力をＲＡＭ６４ｂに出力する。
【０１５４】
また、所定のサイクルが経過した後は、ＲＡＭ６４ａに対応するスレッドＡの割り当てがスレッドＢの割り当てに切り替えられ、ＲＡＭ６４ｂに対応するスレッドＢの割り当てがスレッドＡの割り当てに切り替えられる。そして、第４切替部６１は、第１切替部２３ｂのスレッドＢの出力をＲＡＭ６４ａに出力し、第１切替部２３ａのスレッドＡの出力をＲＡＭ６４ｂに出力する。
【０１５５】
第５切替部６５は、ＲＡＭ６４ａにスレッドＡが割り当てられ、ＲＡＭ６４ｂにスレッドＢが割り当てられている場合には、ＲＡＭ６４ａの出力を第６切替部６６を通してリコンフィギュラブル回路１２におけるスレッドＡに対応する処理に出力し、ＲＡＭ６４ｂの出力を第６切替部６７を通してリコンフィギュラブル回路１２におけるスレッドＢに対応する処理へ出力する。
【０１５６】
また、所定のサイクルが経過した後は、ＲＡＭ６４ａに対応するスレッドＡの割り当てがスレッドＢの割り当てに切り替えられ、ＲＡＭ６４ｂに対応するスレッドＢの割り当てがスレッドＡの割り当てに切り替えられるため、第５切替部６５は、ＲＡＭ６４ａの出力を第６切替部６７を通してリコンフィギュラブル回路１２におけるスレッドＢに対応する処理に出力し、ＲＡＭ６４ｂの出力を第６切替部６６を通してリコンフィギュラブル回路１２におけるスレッドＡに対応する処理へ出力する。
【０１５７】
第６切替部６６は、ＲＡＭ６２及び第５切替部６５のいずれかの出力を選択して出力する。第６切替部６７は、ＲＡＭ６３及び第５切替部６５のいずれかの出力を選択して出力する。
【０１５８】
ここで、スレッドＡ、スレッドＢ及びスレッドＣのそれぞれは、複数のアドレス空間を有している。本実施形態では、スレッドＡは、アドレス空間Ａ−１とアドレス空間Ａ−２とを有しているものとする。スレッドＢは、アドレス空間Ｂ−１とアドレス空間Ｂ−２とを有しているものとする。スレッドＣは、アドレス空間Ｃ−１とアドレス空間Ｃ−２とを有しているものとする。それぞれのアドレス空間には、００１番から２００番が割り振られている。以下では、スレッドとアドレス空間とＲＡＭとの関係について詳細に説明する。
【０１５９】
先ず、ＲＡＭ６２は、スレッドＡのアドレス空間Ａ−１のうち００１番から１００番に（固定的に）割り振られている。ＲＡＭ６４ａがスレッドＡに割り当てられた場合には、ＲＡＭ６４ａはスレッドＡのアドレス空間Ａ−１のうち１０１番から２００番に割り振られる。また、ＲＡＭ６４ｂがスレッドＡに割り当てられた場合には、ＲＡＭ６４ｂはスレッドＡのアドレス空間Ａ−１のうち１０１番から２００番に割り振られる。
【０１６０】
すなわち、スレッドＡのアドレス空間Ａ−１に対して行われる処理はアドレス範囲により決定され、アドレス空間Ａ−１の００１番から１００番に対する処理はＲＡＭ６２に行われ、アドレス空間Ａ−１の１０１番から２００番に対する処理は、ＲＡＭに対応するスレッドの割り当てに応じてＲＡＭ６４ａ又はＲＡＭ６４ｂに対して行われる。
【０１６１】
ＲＡＭ６３は、スレッドＢのアドレス空間Ｂ−２のうち００１番から１００番に（固定的に）割り振られている。ＲＡＭ６４ａがスレッドＢに割り当てられた場合には、ＲＡＭ６４ａはスレッドＢのアドレス空間Ｂ−２のうち１０１番から２００番に割り振られる。また、ＲＡＭ６４ｂがスレッドＢに割り当てられた場合には、ＲＡＭ６４ｂはスレッドＢのアドレス空間Ｂ−２のうち１０１番から２００番に割り振られる。
【０１６２】
すなわち、スレッドＢのアドレス空間Ｂ−２に対して行われる処理はアドレス範囲により決定され、アドレス空間Ｂ−２の００１番から１００番に対する処理はＲＡＭ６３に行われ、アドレス空間Ｂ−２の１０１番から２００番に対する処理は、ＲＡＭに対応するスレッドの割り当てに応じてＲＡＭ６４ａ又はＲＡＭ６４ｂに対して行われる。
【０１６３】
同様にして、スレッドＢのアドレス空間Ｂ−１に対して行われる処理はアドレス範囲により決定され、アドレス空間Ｂ−１の００１番から１００番に対する処理はＲＡＭ７２に行われ、アドレス空間Ｂ−１の１０１番から２００番に対する処理は、ＲＡＭに対応するスレッドの割り当てに応じてＲＡＭ７４ａ又はＲＡＭ７４ｂに対して行われる。
【０１６４】
また、スレッドＣのアドレス空間Ｃ−２に対して行われる処理はアドレス範囲により決定され、アドレス空間Ｃ−２の００１番から１００番に対する処理はＲＡＭ７３に対して行われ、アドレス空間Ｃ−２の１０１番から２００番に対する処理は、ＲＡＭに対応するスレッドの割り当てに応じてＲＡＭ７４ａ又はＲＡＭ７４ｂに対して行われる。
【０１６５】
また、スレッドＣがアドレス空間Ｃ−１に対して行われる処理はアドレス範囲により決定され、アドレス空間Ｃ−１の００１番から１００番に対する処理はＲＡＭ８２に対して行われ、アドレス空間Ｃ−１の１０１番から２００番に対する処理は、ＲＡＭに対応するスレッドの割り当てに応じてＲＡＭ８４ａ又はＲＡＭ８４ｂに対して行われる。
【０１６６】
さらに、スレッドＡのアドレス空間Ａ−２に対して行われる処理はアドレス範囲により決定され、アドレス空間Ａ−２の００１番から１００番に対する処理はＲＡＭ８３に対して行われ、アドレス空間Ａ−２の１０１番から２００番に対する処理は、ＲＡＭに対応するスレッドの割り当てに応じてＲＡＭ８４ａ又はＲＡＭ８４ｂに対して行われる。
【０１６７】
上述したスレッドとアドレス空間とＲＡＭとの関係により、スレッド間でデータがやり取りされる。例えば、ＲＡＭ６４ａがスレッドＡに割り当てられ、ＲＡＭ６４ｂがスレッドＢに割り当てられた場合には、スレッドＡのアドレス空間Ａ−１に対する処理はＲＡＭ６２又はＲＡＭ６４ａに対して行われ、スレッドＢのアドレス空間Ｂ−２に対する処理はＲＡＭ６３又はＲＡＭ６４ｂに対して行われる。
【０１６８】
また、所定のサイクルが経過した後に、ＲＡＭ６４ａがスレッドＢに割り当てられ、ＲＡＭ６４ｂがスレッドＡに割り当てられると、スレッドＡのアドレス空間Ａ−１に対する処理はＲＡＭ６２又はＲＡＭ６４ｂに対して行われ、スレッドＢのアドレス空間Ｂ−２に対する処理はＲＡＭ６３又はＲＡＭ６４ａに対して行われる。
【０１６９】
つまり、ＲＡＭ６４ａとＲＡＭ６４ｂとはスレッドＡとスレッドＢとの間のデータのやり取りに利用される領域であり、これらのＲＡＭに割り当てられるスレッドが切り替わることにより、スレッドＡとスレッドＢとの間でデータが相互にやり取りされる。
【０１７０】
例えば、スレッドＡとスレッドＢとの間でデータがやり取りされる場合には、スレッドＡがスレッドＢに渡すデータをアドレス空間Ａ−１の１０１番から２００番に書き込み、スレッドＢがスレッドＡに渡すデータをアドレス空間Ｂ−２の１０１番から２００番に書き込む。このときに、ＲＡＭ６４ａがスレッドＡに割り当てられ、ＲＡＭ６４ｂがスレッドＢに割り当てられている場合には、スレッドＡがスレッドＢに渡すデータはＲＡＭ６４ａに書き込まれ、スレッドＢがスレッドＡに渡すデータはＲＡＭ６４ｂに書き込まれることになる。
【０１７１】
そして、所定のサイクルが経過した後に、ＲＡＭ６４ｂがスレッドＡに割り当てられ、ＲＡＭ６４ａがスレッドＢに割り当てられると、ＲＡＭ６４ｂに書き込まれたスレッドＢのデータをスレッドＡがアドレス空間Ａ−１の１０１番〜２００番の領域から読み込み、ＲＡＭ６４ａに書き込まれたスレッドＡのデータをスレッドＢがアドレス空間Ｂ−２の１０１番〜２００番の領域から読み込むこととなる。これにより、ＲＡＭ６４ａ及びＲＡＭ６４ｂのそれぞれに対応するスレッドが相互に１回切り替えられるだけで、スレッドＡとスレッドＢとの間でデータをやり取りすることができる。
【０１７２】
なお、本実施形態では、スレッド（例えば、スレッドＡ）は２つのアドレス空間（例えば、アドレス空間Ａ−１、アドレス空間Ａ−２）を有しており、１つのアドレス空間（例えば、アドレス空間Ａ−１）は２つの領域（例えば、スレッドＡに固定的に割り当てられる領域（００１番から１００番）と、スレッドＢとのデータをやり取りするための領域（１０１番から２００番））に分けられているが、これに限定されるものではない。
【０１７３】
例えば、スレッドＡに固定的に割り当てられる領域（００１番から１００番）、スレッドＢとのデータをやり取りするための領域（１０１番から２００番）、スレッドＣとのデータをやり取りするための領域（２０１番から３００番）の３つに分けられて構成されるアドレス空間を有してもよい。
【０１７４】
記憶ユニット７０には、スレッドＢ及びスレッドＣが割り当てられる。記憶ユニット７０は、第４切替部７１と、ＲＡＭ７２と、ＲＡＭ７３と、ＲＡＭ７４ａ，ＲＡＭ７４ｂと、第５切替部７５と、第６切替部７６と、第６切替部７７とを備えている。記憶ユニット７０は、上述した記憶ユニット６０と同様の機能を有しているため、詳細な説明は省略する。
【０１７５】
記憶ユニット８０には、スレッドＣ及びスレッドＡが割り当てられる。記憶ユニット８０は、第４切替部８１と、ＲＡＭ８２と、ＲＡＭ８３と、ＲＡＭ８４ａ，ＲＡＭ８４ｂと、第５切替部８５と、第６切替部８６と、第６切替部８７とを備えている。記憶ユニット８０は、上述した記憶ユニット６０と同様の機能を有しているため、詳細な説明は省略する。
【０１７６】
なお、図１５は、３つのスレッドが存在する場合の構成であるが、これに限定されずに、４つ以上のスレッドが存在する場合の構成であってもよい。例えば、４つのスレッドが存在する場合には、スレッドＡ及びスレッドＢに割り当てられる記憶ユニット（ＡＢ用）、スレッドＡ及びスレッドＣに割り当てられる記憶ユニット（ＡＣ用）、スレッドＡ及びスレッドＤに割り当てられる記憶ユニット（ＡＤ用）、スレッドＢ及びスレッドＣに割り当てられる記憶ユニット（ＢＣ用）、スレッドＢ及びスレッドＤに割り当てられる記憶ユニット（ＢＤ用）、スレッドＣ及びスレッドＤに割り当てられる記憶ユニット（ＣＤ用）の６つが備えられることとなる。
【０１７７】
なお、本発明は、図１５に示す各ＲＡＭに限定されずに、図１５に示す各ＲＡＭ以外のＲＡＭを備えてもよい。具体的には、図１５に示す各ＲＡＭに加えて、スレッドが固定的に割り当てられるＲＡＭが備えられてもよい。例えば、スレッドＡは、上述したアドレス空間Ａ−１、アドレス空間Ａ−２に加えて、新たにアドレス空間Ａ−３を有するものとする。そして、スレッドＡが固定的に割り当てられるＲＡＭが、アドレス空間Ａ−３に割り振られる。
【０１７８】
上記図１５に示す構成によれば、第４切替部及び第５切替部は、記憶ユニット６０，７０，８０内における各ＲＡＭ（例えば、ＲＡＭ６４ａ，ＲＡＭ６４ｂ）のそれぞれに対応するスレッドの割り当てを、所定サイクル毎に互いに切り替えることができる。これにより、第４切替部及び第５切替部は、記憶ユニット６０，７０，８０内において一方のスレッド（例えば、スレッドＡ）の処理結果を１回の切り替えで他方のスレッド（例えば、スレッドＢ）に引き渡し、これと同時に他方のスレッド（例えば、スレッドＢ）の処理結果を１回の切り替えで一方のスレッド（例えば、スレッドＡ）に引き渡すことができる。
【０１７９】
さらに、スレッドＡとスレッドＢとの間のみならずに、スレッドＢとスレッドＣとの間、スレッドＣとスレッドＡとの間でも同様に、一方のスレッドの処理結果を１回の切り替えで他方のスレッドに引渡し、これと同時に他方のスレッドの処理結果を１回の切り替えで一方のスレッドに引き渡すことができるため、任意のスレッド間で同時にデータを引き渡すことができる。よって、各スレッドの処理結果が利用されるまでの待ち時間を短くすることができ、図８に示す構成よりも処理時間を大幅に削減することができる。
【０１８０】
また、図８に示す構成では、１つのスレッドが有するアドレス空間のうちの１つは、スレッド間のデータの引き渡しに用いられる領域だけとなるため、これらアドレス空間には、次のサイクルで同一スレッドが利用するスレッドの処理結果を記憶することができない。これに対し、図１５に示す構成では、それぞれのアドレス空間において、スレッド間のデータを引き渡すための領域だけではなく、さらにスレッドに固定的に割り当てられる領域をも有しているため、どのアドレス空間に対しても、次のサイクルで同一スレッドが利用するスレッドの処理結果を記憶することができる。
【０１８１】
例えば、図８に示す構成では、アドレス空間は、スレッド間のデータの引渡しをするために用いられ、次のサイクルで同一スレッドが利用するスレッドの処理結果を記憶することができない。このため、次のサイクルで同一スレッドが利用するスレッドの処理結果は、その他のアドレス空間に記憶されることになる。
【０１８２】
これに対し、図１５に示す構成では、１つのスレッドの持つ２つのアドレス空間のいずれにも、次のサイクルで同一スレッドが利用するスレッドの処理結果を記憶する記憶部を有している。このため、次のサイクルで同一スレッドが利用するスレッドの処理結果が２つある場合でも、それら２つの演算結果を別々のアドレス空間に同時に記憶させることも可能となる。
【０１８３】
以上、本発明を実施例をもとに説明した。実施例は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。例えば、図８に示した集積回路装置２６は、リコンフィギュラブル回路１２への途中入力またはリコンフィギュラブル回路からの途中出力を可能とする構成であったが、本発明は、途中入力または途中出力のない構成に対しても適用できる。
【０１８４】
例えば、リコンフィギュラブル回路１２におけるＡＬＵの配列は、縦方向にのみ接続を許した多段配列に限らず、横方向の接続も許した、メッシュ状の配列であってもよい。また、上記の説明では、段を飛ばして論理回路を接続する結線は設けられていないが、このような段を飛ばす接続結線を設ける構成としてもよい。
【０１８５】
また、図１では、処理装置１０が１つのリコンフィギュラブル回路１２を有する場合を示しているが、複数のリコンフィギュラブル回路１２を有していてもよい。
【０１８６】
図８に示した構成では、集積回路装置２６が、第１切替回路２３および複数のＲＡＭから構成されるメモリ部２７を有していた。以下の変形例では、メモリ部２７が、複数のＲＡＭを有する代わりに、同時アクセス可能な複数の入出力ポートを備えた１つのＲＡＭを有してもよい。この場合、ＲＡＭの記憶領域は複数に分割されており、分割されたそれぞれの記憶領域は、リコンフィギュラブル回路１２上で実行されるスレッドに割り当てられる。複数の入出力ポートのそれぞれは、分割されたそれぞれの記憶領域に対応する。
【０１８７】
ＲＡＭの分割は、例えばアドレスの所定位置のビット値を利用して行われる。例えば、第１の入出力ポートは、アドレスの最上位２ビットが”００”である記憶領域に対応付けられ、第２の入出力ポートは、アドレスの最上位２ビットが”０１”である記憶領域に対応付けられ、第３の入出力ポートは、アドレスの最上位２ビットが”１０”である記憶領域に対応付けられる。
【０１８８】
複数のスレッドのそれぞれを各入出力ポートに対応付けることで、スレッドと分割した記憶領域とが対応付けられる。リコンフィギュラブル回路１２および第２切替回路２５、また制御部１８などの他の構成は、上記した実施例と同様である。
【０１８９】
すなわち、実施例では複数のＲＡＭが存在していたが、この変形例では、実施例における１つのＲＡＭが、ＲＡＭにおいて分割された１つの記憶領域に対応する。なお、アドレス中の２ビットを用いる場合には、記憶領域を最大で４つに分割することが可能であるが、さらに記憶領域を分割する必要がある場合には、アドレス中の３ビット以上を用いる。
【０１９０】
以上のように、図８に示す第１切替回路２３およびメモリ部２７を、複数の入出力ポートを有する１つのＲＡＭに置き換えてもよい。このように、メモリ部２７として、複数のデータの同時書込および／または読出を可能とするＲＡＭを使用することで、実施例で説明した同様の効果を得ることができ、さらに第１切替回路２３を集積回路装置２６から省略できるため、回路規模を削減できる。
【０１９１】
なお、リコンフィギュラブル回路１２については、本実施例で説明したものに限定されずに、ＣＰＵ、ＤＳＰ又はＦＰＧＡ等のプログラム可能なデバイスも含まれる。また、スレッドの実行については、例えば図２に示すような一つの回路上で複数のスレッドが実行されるケースについてしか説明していないが、個別の回路が存在し、そのそれぞれ回路で別のスレッドが同時に実行される場合も含まれる。
【０１９２】
今回開示された実施例はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１９３】
【図１】実施例に係る処理装置の構成図である。
【図２】リコンフィギュラブル回路の構成図である。
【図３】リコンフィギュラブル回路の別の構成図である。
【図４】データフローグラフの例を示す図である。
【図５】生成すべきターゲット回路を分割してできる複数の回路の設定データについて説明するための図である。
【図６】リコンフィギュラブル回路上に構成するターゲット回路の処理の流れを示す図である。
【図７】リコンフィギュラブル回路上で実現するマルチスレッド動作の流れを示す図である。
【図８】集積回路装置の詳細な構成を示す図である。
【図９】スレッド間のデータの受け渡しの一例を示す図である。
【図１０】メモリ部における複数のＲＡＭへのスレッドの割当てと、ＲＡＭの記憶領域の状態を示す図である。
【図１１】スレッド間のデータの受け渡しの別の例を示す図である。
【図１２】メモリ部における複数のＲＡＭへのスレッドの割当てと、ＲＡＭの記憶領域の状態を示す図である。
【図１３】メモリ部における複数のＲＡＭへのスレッドの割当てと、ＲＡＭの記憶領域の状態を示す図である。
【図１４】スレッドへのフィードバックデータが存在する場合のスレッド間のデータの受け渡しの例を示す図である。
【図１５】集積回路装置の詳細な構成の他の例を示す図である。
【符号の説明】
【０１９４】
１０…処理装置、１２…リコンフィギュラブル回路、１４…設定部、１６…回路処理制御部、１８…制御部、２０…内部状態保持回路、２２…出力回路、２３…第１切替回路、２４…経路部、２５…第２切替回路、２６…集積回路装置、２７…メモリ部、２８…第３切替回路、２９…経路部、３０…コンパイル部、３２…設定データ生成部、３４…記憶部、３６…プログラム、３８…データフローグラフ、４０…設定データ、５０…論理回路、５２…接続部
【図１】
2006040254.tif 000003
【図２】
2006040254.tif 000004
【図３】
2006040254.tif 000005
【図４】
2006040254.tif 000006
【図５】
2006040254.tif 000007
【図６】
2006040254.tif 000008
【図７】
2006040254.tif 000009
【図８】
2006040254.tif 000010
【図９】
2006040254.tif 000011
【図１０】
2006040254.tif 000012
【図１１】
2006040254.tif 000013
【図１２】
2006040254.tif 000014
【図１３】
2006040254.tif 000015
【図１４】
2006040254.tif 000016
【図１５】
2006040254.tif 000017