図1は、本発明の実施例に係る処理装置10の構成図である。処理装置10は、集積回路装置26、コンパイル部30、設定データ生成部32、および記憶部34を備える。集積回路装置26は、回路構成を再構成可能とする機能を有する。
集積回路装置26は1チップとして構成され、リコンフィギュラブル回路12、設定部14、制御部18、内部状態保持回路20、出力回路22、第1切替回路23、第2切替回路25、メモリ部27、第3切替回路28および経路部24、29を備える。
リコンフィギュラブル回路12は、パイプライン構成を有し、論理回路の設定を変更することにより、機能の変更を可能とする。本実施例に係るリコンフィギュラブル回路12は、複数のスレッドを同時に実行することができる。スレッドは、リコンフィギュラブル回路12に実行させる処理であり、各スレッドの処理は、それ自体で完結する。複数のスレッドは、互いに独立して実行され、スレッド同士の間でデータの受け渡しがあるものであってもよい。処理装置10は、複数種類の回路のコンフィギュレーションをリコンフィギュラブル回路12上で同時に実現できる。
設定部14は、第1回路設定部14a、第2回路設定部14b、第3回路設定部14c、および回路処理制御部16を有し、リコンフィギュラブル回路12に所期の回路を構成するための設定データ40を供給する。具体的には、第1回路設定部14a、第2回路設定部14b、第3回路設定部14cは、それぞれ異なるスレッドを実行するための設定データ40を回路処理制御部16に供給する。回路処理制御部16は、第1回路設定部14a、第2回路設定部14b、第3回路設定部14cから送られてきた設定データ40を、リコンフィギュラブル回路12のパイプラインの各段に相当するリコンフィギュラブルユニットに所定の順序で供給する。これにより、リコンフィギュラブル回路12の各段には、複数種類の回路の一部がそれぞれ構成されることになり、マルチスレッド処理機能が実現される。
経路部24、29は、フィードバックパスとして機能し、リコンフィギュラブル回路12の出力を、第3切替回路28に出力する。設定部14は、プログラムカウンタのカウント値に基づいて記憶したデータを出力するコマンドメモリとして構成されてもよい。この場合、制御部18がプログラムカウンタの出力を制御する。この意味において、設定データ40はコマンドデータと呼ばれてもよい。
メモリ部27は、制御部18からの指示に基づきリコンフィギュラブル回路12から出力されるデータ信号を格納するための記憶領域を有する。メモリ部27はリコンフィギュラブル回路12内に設けられてもよく、またリコンフィギュラブル回路12の外部に設けられていてもよい。
メモリ部27は複数のRAMなどから構成される。複数のスレッドの実行中、それぞれのRAMは、リコンフィギュラブル回路12上で実行されるスレッドに割り当てられる。例えばスレッドA、スレッドB、スレッドCの3つのスレッドが同時に実行される場合、1番目のRAMはスレッドAに、2番目のRAMはスレッドBに、3番目のRAMはスレッドCに割り当てられる。RAMに対するスレッドの割当ては、制御部18により制御される。
特に、スレッド間にデータの受け渡しがある場合には、制御部18は、所定のタイミングでRAMに対するスレッドの割当てを変更することが好ましい。例えば、スレッドAの処理結果をスレッドBが使用する場合、スレッドAの処理が終了して、その処理結果が格納された1番目のRAMは、続くタイミングで、制御部18によりスレッドBを割り当てられる。これにより、スレッドBは、スレッドAの処理結果を1番目のRAMから2番目のRAMにコピーする必要もなく、1番目のRAMに格納されたスレッドAの処理結果を効率的に利用できる。メモリ部27の前段には第1切替回路23が設けられ、後段には第2切替回路25が設けられる。
第1切替回路23は、リコンフィギュラブル回路12からの出力をスレッドに応じて選択して、メモリ部27のRAMに供給する。これにより、RAMに対するスレッドの割当てが設定されることになる。したがって、第1切替回路23におけるスイッチ設定に変更がなければ、あるRAMには、同じスレッドからのデータが格納されることになる。第2切替回路25は、複数のRAMからの出力の1つをスレッドに応じて選択して、リコンフィギュラブル回路12の入力にフィードバックさせる。
第2切替回路25は複数の第2切替部を有して構成され、それぞれの第2切替部は、1つのスレッドについてのデータを選択するように設定される。メモリ部27に格納されたデータ信号は、第2切替回路25におけるスイッチ設定に基づいて、経路部29を通じてリコンフィギュラブル回路12への入力として伝達される。第1切替回路23、第2切替回路25、メモリ部27の動作は、制御部18により制御される。
リコンフィギュラブル回路12への入力は、経路部24、経路部29の2系統存在するが、経路部24は、メモリ部27を介さないために高速なフィードバック処理を可能とする。特にメモリ部27が低速で動作処理する場合には、経路部24は経路部29よりもさらに高速なフィードバック処理を可能とする。
第3切替回路28は、回路処理制御部16からの指示信号に応答して、外部からの入力信号および経路部24、29からの入力信号を選択的にリコンフィギュラブル回路12に出力する。具体的には、設定データ40に基づいて決定される所定のタイミングで、回路処理制御部16から切替指示がなされる。
内部状態保持回路20および出力回路22は、リコンフィギュラブル回路12の出力を受けて、たとえばデータフリップフロップ(D−FF)などの順序回路として構成される。内部状態保持回路20は経路部24に接続されている。メモリ部27は、経路部29と接続されている。リコンフィギュラブル回路12は、組合せ回路と、フリップフロップ回路で構成され、パイプライン動作を実現する。
リコンフィギュラブル回路12は、機能の変更が可能な論理回路を有して構成される。具体的にリコンフィギュラブル回路12は、複数の演算機能を選択的に実行可能な論理回路を複数段に配列させた構成を備え、さらに前段の論理回路列の出力と後段の論理回路列の入力との接続関係を設定可能な接続部を備える。
この接続部は、前段の論理回路列の出力すなわち内部状態を保持する状態保持回路(以下、FF回路とも呼ぶ)の機能も備える。複数の論理回路は、マトリックス状に配置される。各論理回路の機能と、論理回路間の接続関係は、設定部14により供給される設定データ40に基づいて設定される。設定データ40は、以下の手順で生成される。
集積回路装置26により実現されるべきプログラム36が、記憶部34に保持されている。プログラム36は、回路における処理の動作を記述した動作記述を示し、信号処理回路または信号処理アルゴリズムなどをC言語などの高級言語で記述したものである。
コンパイル部30は、記憶部34に格納されたプログラム36をコンパイルし、データフローグラフ(DFG)38に変換して記憶部34に格納する。データフローグラフ38は、回路における演算間の実行順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。一般に、データフローグラフ38は、上から下に向かって演算が進むように作成される。
設定データ生成部32は、データフローグラフ38から設定データ40を生成する。設定データ40は、データフローグラフ38をリコンフィギュラブル回路12にマッピングするためのデータであり、リコンフィギュラブル回路12における論理回路の機能や論理回路間の接続関係を定める。設定データ生成部32は、1つの生成すべきターゲット回路を分割してできる複数の分割回路の設定データ40を生成する。
設定データ生成部32は、リコンフィギュラブル回路12における論理回路の配列構造とデータフローグラフ38によって、ターゲット回路の分割方法を定める。なお、リコンフィギュラブル回路12でパイプライン処理を行うことが予め分かっている場合には、リコンフィギュラブル回路12におけるリコンフィギュラブルユニットの配列構造に基づいて、ターゲット回路の分割方法を定めてもよい。リコンフィギュラブル回路12の配列構造は、制御部18から設定データ生成部32に伝えられてもよく、また予め記憶部34に記録されていてもよい。また、制御部18が、ターゲット回路の分割方法を設定データ生成部32に指示してもよい。
以上の手順を実行することにより、記憶部34は、リコンフィギュラブル回路12を所期の回路として構成するための複数の設定データ40を記憶する。複数の設定データ40は、ターゲット回路を分割した複数の分割回路をそれぞれ表現したものである。このように、リコンフィギュラブル回路12の回路規模に応じて、生成すべきターゲット回路の設定データ40を生成することにより、汎用性の高い処理装置10を実現することが可能となる。別の視点からみると、実施例の処理装置10によれば、回路規模の小さいリコンフィギュラブル回路12を用いて、所望の回路を再構成することが可能となる。
図2は、リコンフィギュラブル回路12の構成を示す。リコンフィギュラブル回路12は、複数の演算機能を選択的に実行可能な論理回路50より構成される論理回路列を複数備える。具体的に、リコンフィギュラブル回路12は、論理回路列の多段配列と、各段に設けられた接続部52を備えて構成される。
接続部52は、前段の論理回路の出力と後段の論理回路の入力の任意の接続関係あるいは予め定められた接続関係の組合せの中から選択された接続関係を設定することができる。また接続部52は、前段の論理回路の出力信号を保持することができる。リコンフィギュラブル回路12では、論理回路の多段配列構造により、上段から下段に向かって演算が進められる。
リコンフィギュラブル回路12は、論理回路50としてALU(Arithmetic Logic Unit)を有している。ALUは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、論理和、論理積、ビットシフトなどの複数種類の多ビット演算を設定により選択的に実行できる。各ALUは、複数の演算機能を設定するためのセレクタを有して構成されている。図示の例では、ALUが、2つの入力端子と2つの出力端子を有して構成される。
図示のように、リコンフィギュラブル回路12は、縦方向にX個、横方向にY個のALUが配置されたX段Y列のALUアレイとして構成される。第1段のALU11、ALU12、・・・、ALU1Yには、入力変数や定数が入力され、設定された所定の演算がなされる。演算結果の出力は、第1段の接続部52に設定された接続にしたがって、第2段のALU21、ALU22、・・・、ALU2Yに入力される。
第1段の接続部52においては、第1段のALU列の出力と第2段のALU列の入力の間で任意の接続関係、あるいは予め定められた接続関係の組合せの中から選択された接続関係を実現できるように結線が構成されており、設定により所期の結線が有効となる。以下、最終段である第X段の接続部52まで同様の構成である。接続部52はFF回路としての機能も有しており、最終段の接続部52は、図1に示す内部状態保持回路20として機能してもよい。
なお、図2のリコンフィギュラブル回路12においては、接続部52が、ALU列と交互に1段ずつ設けられた構成を示している。この接続部52を各ALU列の下段に配置することにより、リコンフィギュラブル回路12は、1段ずつのALU列から構成されるX段のリコンフィギュラブルユニットに分割されることになる。
具体的に、1段のリコンフィギュラブルユニットは、1段のALU列と1段の接続部52で構成される。この分割は、接続部52に含まれるFF回路にしたがうものであり、例えば2段のALU列毎に接続部52を設け、2段のALU列の間を、FF回路を有しない接続部で接続する場合には、2段ずつのALU列で構成されるX/2段のリコンフィギュラブルユニットに分割されることになる。それ以外にも、FF回路を所定段のALU列毎に設けることにより、所望段のリコンフィギュラブルユニットを構成することができる。
回路のコンフィギュレーションは1クロックで行われる。具体的に、回路処理制御部16が1クロック毎に設定データをリコンフィギュラブル回路12にマッピングする。各ALU列の出力は、後段の接続部52に保持される。複数スレッドの実行中、接続部52のFF回路は、前段の論理回路から出力されるデータを格納し、次のクロックで、前段の論理回路が実行していたスレッドと同一のスレッドを実行する後段の論理回路に、格納したデータを供給する。
このように、1つのスレッドの処理は、クロック毎に1つ下段のALU列において実行されることになる。最終段で処理されると、また最上段のALU列からクロック毎に1段ずつ下がっていく。これにより、マルチスレッド処理を実行でき、効率的な回路コンフィギュレーションを実現できる。
図3は、リコンフィギュラブル回路の構成の別の例を示す。図3に示すリコンフィギュラブル回路12aは、図2に示すリコンフィギュラブル回路12の機能をさらに拡張している。図3に示すリコンフィギュラブル回路12aにおいて、接続部52aは、図2の接続部52の機能に加えて、外部から入力される変数や定数を、所期のALUに供給する機能を有している。
また、接続部52aは、前段のALUの演算結果を外部に直接出力することもできる。この構成により、図2に示されるリコンフィギュラブル回路12の構成よりも多様な組合せ回路を構成することが可能となり、設計の自由度が向上する。
図4は、データフローグラフ38の例を示す図である。データフローグラフ38においては、入力される変数や定数の演算の流れが段階的にグラフ構造で表現されている。図中、演算子は丸印で示されている。設定データ生成部32は、このデータフローグラフ38をリコンフィギュラブル回路12にマッピングするための設定データ40を生成する。
特にデータフローグラフ38をリコンフィギュラブル回路12にマッピングしきれない場合に、データフローグラフ38を複数の領域に分割し、分割回路の設定データ40を生成する。実施例では、リコンフィギュラブル回路12上で複数のスレッドが実行されるが、各スレッドは、リコンフィギュラブル回路12におけるリコンフィギュラブルユニットにてそれぞれ実行されることになる。
したがって、設定データ生成部32は、リコンフィギュラブルユニットの回路規模に応じて、データフローグラフ38を複数の領域に分割し、分割回路の設定データ40を生成する。データフローグラフ38による演算の流れを回路上で実現するべく、設定データ40は、演算機能を割り当てる論理回路を特定し、また論理回路間の接続関係を定め、さらに入力変数や入力定数などを定義したデータとなる。したがって、設定データ40は、各論理回路50の機能を選択するセレクタに供給する選択情報、接続部52の結線を設定する接続情報、必要な変数データや定数データなどを含んで構成される。
図5は、1つの生成すべきターゲット回路42を分割してできる複数の回路の設定データ40について説明するための図である。このターゲット回路42には、独立した動作を実行する3つのターゲット回路A、ターゲット回路B、ターゲット回路Cが含まれている。ターゲット回路A、ターゲット回路B、ターゲット回路Cは、それぞれ独立したスレッドを構成し、リコンフィギュラブルユニットの回路規模に合わせて分割される。
この例では、それぞれのターゲット回路が、3つの分割回路に分割されている。すなわち、ターゲット回路Aは、分割回路A_0、分割回路A_1、分割回路A_2に分割され、ターゲット回路Bは、分割回路B_0、分割回路B_1、分割回路B_2に分割され、ターゲット回路Cは、分割回路C_0、分割回路C_1、分割回路C_2に分割される。設定データ生成部32は、各分割回路に対して設定データ40を生成する。
各ターゲット回路は、データフローグラフ38における演算の流れにしたがって分割される。データフローグラフ38において、上から下に向かう方向に演算の流れが表現される場合、そのデータフローグラフ38を上から所定の間隔で切り取り、その切り取った部分を分割回路として設定する。流れにしたがって切り取る間隔は、リコンフィギュラブル回路12におけるリコンフィギュラブルユニットの段数以下に定められる。ターゲット回路42は、データフローグラフ38の横方向で分割されてもよい。横方向に分割する幅は、リコンフィギュラブル回路12における論理回路の1段当たりの個数以下に定められる。
例えば、リコンフィギュラブル回路12が3段のALU列で構成され、各段に接続部52が設けられている場合、リコンフィギュラブルユニットには、1段のALU列が含まれることになる。このとき、各ターゲット回路の分割回路は、1段のデータフローグラフ分を表現することになる。
したがって、図5の例では、各ターゲット回路が3段のデータフローグラフ38により表現されていることになる。実際のターゲット回路の回路規模は、数十以上の段数のデータフローグラフ38で表現されることが多いが、本明細書では説明の簡便のため、図5に示す分割回路が設定された場合について説明する。
図6は、リコンフィギュラブル回路上に構成するターゲット回路Aの処理の流れを示す図である。リコンフィギュラブル回路12では、1回のマッピング処理を1クロックで実行することができる。ここでは、3段のALU列(リコンフィギュラブルユニット)で構成されるリコンフィギュラブル回路12を想定する。
1クロック目に、1段目のALU列に分割回路A_0が生成され、1段目の接続部52におけるFF回路が、分割回路A_0から出力されるデータを格納する。2クロック目に、2段目のALU列に分割回路A_1が生成され、1段目の接続部52におけるFF回路が、1クロック目に格納したデータを、生成された分割回路A_1に供給する。
3クロック目に、3段目のALU列に分割回路A_2が生成され、2段目の接続部52におけるFF回路が、2クロック目に格納したデータを、生成された分割回路A_2に供給する。実施例では、ターゲット回路Aが3つの分割回路により構成されているため、分割回路A_2がデータを出力することで、ターゲット回路Aの処理というスレッドが完了する。なお、ターゲット回路Aが4つ以上の分割回路により構成されている場合には、分割回路A_2の出力がフィードバックされて、1段目のALU列に供給されることになる。
このように、1つのスレッドは、リコンフィギュラブル回路12の各段に構成されたリコンフィギュラブルユニット毎に処理される。図6からも明らかなように、リコンフィギュラブル回路12を1つのスレッドの処理のみに用いると、動作しないALU列が生じる。そこで、本実施例では、リコンフィギュラブル回路12を有効に活用するために、空いたALU列で別のスレッドを実行させるようにする。これにより、マルチスレッド処理を実現できる。
図7は、リコンフィギュラブル回路上で実現するマルチスレッド動作の流れを示す図である。各スレッドは、互いに独立して実行される。リコンフィギュラブル回路12におけるリコンフィギュラブルユニット間のデータの受け渡しについては、図6に関して説明したとおりである。
1クロック目に、リコンフィギュラブル回路12の1段目のALU列に分割回路A_0が生成される。2クロック目に、1段目のALU列に分割回路B_0が生成され、2段目のALU列に分割回路A_1が生成される。3クロック目に、1段目のALU列に分割回路C_0が生成され、2段目のALU列に分割回路B_1が生成され、3段目のALU列に分割回路A_2が生成される。
3クロック目で、ターゲット回路Aの処理、すなわちスレッドAの実行は完了する。4クロック目に、1段目のALU列に分割回路A_0が生成され、2段目のALU列に分割回路C_1が生成され、3段目のALU列に分割回路B_2が生成される。4クロック目で、ターゲット回路Bの処理、すなわちスレッドBの実行は完了し、新たなスレッドAが実行される。
5クロック目に、1段目のALU列に分割回路B_0が生成され、2段目のALU列に分割回路A_1が生成され、3段目のALU列に分割回路C_2が生成される。5クロック目で、ターゲット回路Cの処理、すなわちスレッドCの実行は完了し、新たなスレッドBが実行される。6クロック目に、1段目のALU列に分割回路C_0が生成され、2段目のALU列に分割回路B_1が生成され、3段目のALU列に分割回路A_2が生成される。6クロック目で、スレッドAの実行は完了し、新たなスレッドCが実行される。以後、同様に各スレッドがクロック毎に処理される。
このように、リコンフィギュラブル回路12が複数のスレッドを同時に実行することで、リコンフィギュラブル回路12のハード資源を有効に活用することができるとともに、もとのターゲット回路42全体の処理速度を高速化できる。
図8は、集積回路装置26の詳細な構成を示す。図8は、主としてマルチスレッド処理を実現するための構成、具体的にはリコンフィギュラブル回路12の入出力に関与する構成を示す。ここでは、図3に示すような各段の接続部52aからの途中出力およびメモリ部27からの途中入力が可能なリコンフィギュラブル回路12を示している。図8では、説明の便宜上、接続部の符号は、「52」を利用する。図1、図3および図4の構成と同一の符号を付した構成は、同一の構造および機能を有している。
メモリ部27は、複数のRAM27a、RAM27b、RAM27cを有する。各RAMは、リコンフィギュラブル回路12からの出力を記憶する。本実施例では、各RAMは、リコンフィギュラブル回路12上で実行されるスレッドに割り当てられる。
すなわち、1つのRAMは、1つのスレッドからのデータを記憶し、またそのスレッドの実行に必要なデータをリコンフィギュラブル回路12上のALUに供給する。したがってRAMの個数は、少なくとも同時に実行するスレッドの数だけ存在していることが好ましい。
第1切替回路23は、第1切替部23a、第1切替部23b、第1切替部23cを有する。第1切替部23a、23b、23cのそれぞれは、それぞれRAM27a、27b、27cに対応して設けられる。第1切替部23a、23b、23cは、リコンフィギュラブル回路12からの出力をスレッドに応じて選択して、対応するRAM27a、27b、27cに供給する。それぞれの第1切替部は、全段の接続部52の出力線と接続されている。
同時実行されるスレッド数が3つの場合には、1つのスレッドは、いずれかのALU列において実行されることとなり、したがって、各第1切替部は、対応するRAMが割り当てられているスレッドからのデータを選択して、そのRAMに供給する。
第2切替回路25は、第2切替部25a、第2切替部25b、第2切替部25cを有する。第2切替部25a、25b、25cのそれぞれは、スレッドに対応して設けられる。第2切替部25a、25b、25cのそれぞれは、RAM27a、27b、27cからの出力の1つをスレッドに応じて選択して、リコンフィギュラブル回路12の入力に供給する。具体的に、第2切替部25aは、スレッドAの処理に必要なデータを選択して経路部29に出力する。
同様に、第2切替部25bは、スレッドBの処理に必要なデータを選択して経路部29に出力し、第2切替部25cは、スレッドCの処理に必要なデータを選択して経路部29に出力する。これにより、経路部29から供給されるデータとスレッドとを対応付けることができ、リコンフィギュラブル回路12の入力設定および機能設定を容易にすることができる。
図9は、スレッド間のデータの受け渡しの一例を示す図である。スレッドAは例えば外部からの入力ないしは設定データによる入力を受けて実行される。スレッドBはスレッドAの処理結果を利用し、スレッドCはスレッドBの処理結果を利用して、自身の処理結果を出力する。各スレッドは独立した処理を行うため、図7に示すようにマルチスレッドで実行することができる。
スレッドに対するRAMの割当てについて考察する。RAMをスレッドに対して任意に割り当てる場合、各RAMに格納されているデータがどのスレッドのデータであるかを判断する必要がある。またデータを読み出すタイミングおよび書き込むタイミングも、適宜判断しなければならない。
各スレッドA、B、Cは、他のスレッドと無関係に独立してリコンフィギュラブル回路12上にマッピングされて動作しているため、RAMをスレッドに対して任意に割り当てたのであれば、データの読出および書込の制御が非常に複雑となる。以上の各構成の動作は、コンパイル部30により実行されてDFGに変換されるものであるが、1つのRAMから複数のデータを同時に読み出すことができないなどの複雑な条件を全て考慮する必要があるため、コンパイルプログラムが複雑化することが確実である。
一方、スレッドAをRAM27aに、スレッドBをRAM27bに、スレッドCをRAM27cに固定的に割り当てた場合を考える。スレッドBの処理でスレッドAの処理結果を利用するため、スレッドBは、スレッドAを割り当てられたRAM27aから処理結果を読み出すことになる。一方、RAM27aには、スレッドAからのデータが書き込まれる。RAM27aのアドレスXにスレッドAの処理結果が格納されている場合、スレッドBが読み出すタイミングが、スレッドAがアドレスXにデータを書き込むタイミングよりも早ければ問題は生じない。
しかしながら、スレッドAがデータを書き込むタイミングの方が早ければ、スレッドBは、新たに書き込まれたデータを読み出すことになり、正しい処理結果を読み出すことができない。
この場合、スレッドAの処理結果がRAM27aに書き込まれると、一旦スレッドAの動作を中断して、スレッドBで使用するデータをスレッドB用のRAM27bにコピーすればよい。
同様に、スレッドBの処理結果がRAM27bに書き込まれると、スレッドBの動作を中断して、スレッドCで使用するデータをスレッドC用のRAM27cにコピーする。これにより、必要なデータを上書きして消失する事態を回避できる。
このとき、データのコピーは、経路部29を介してリコンフィギュラブル回路12の入力にフィードバックし、データを別のRAMに転送することで行われる。この間、ALUは、本来のスレッド処理とは異なる動作に使用されるため、非効率である。そこで、以下では、より効率的にマルチスレッド処理を実行する方法について説明する。具体的には、RAMに対するスレッドの割当てを、時分割的に変化させることで対応する。
図10は、メモリ部27における複数のRAMへのスレッドの割当てと、RAMの記憶領域の状態を示す。図中、RAMに入る矢印は、リコンフィギュラブル回路12から書き込まれるデータの流れを示し、RAMから出る矢印は、リコンフィギュラブル回路12にフィードバックされるデータの流れを示す。
また、例えばA→Bは、スレッドBに引き渡されるべきスレッドAの処理結果を格納する領域を示す。また例えば、A_areaは、スレッドA用に割り当てられるテンポラリな領域を示し、処理を実行するために必要な途中結果を格納する領域である。
図10(a)〜図10(e)に示されるRAMの記憶領域の状態は、全てのスレッドが終了したときの状態をそれぞれ示している。上記した例では、3クロックで終了する単純なスレッドについて説明したが、実際には、数百クロック程度は必要となるスレッドが想定される。例えば、スレッドAが120クロック、スレッドBが150クロック、スレッドCが100クロック必要であるとすると、全てのスレッドが終了する時間は、少なくとも150クロックかかる。
スレッド間でデータの受け渡しを行うため、各スレッドを確実に実行するためには、150クロックを単位時間として、各スレッドが実行されるようにしてもよい。本実施例では、この150クロックを単位時間に設定して、RAMに対するスレッドの割当ての変更を、150クロック毎に実行する。
以下、この基準時間をサイクルとして表現する。なお、サイクルは、同時に実行するスレッドの処理時間のうち、最も時間のかかるスレッドの処理時間以上に設定される。したがって、同時に実行する複数のスレッドの処理は、1サイクルの間に終了されることになる。
図10(a)は、1サイクル目の状態を示す。1サイクル目では、スレッドAがRAM27aに、スレッドBがRAM27bに、スレッドCがRAM27cに割り当てられる。1サイクル目では、RAM27aに、次回以降のサイクルでスレッドBに引き渡すべき処理結果を格納する領域(A→B)と、スレッドAの途中結果を格納する領域(A_area)が設定される。なお、A→Bの前に表記される(N)は、Nサイクル目に生成された処理結果であることを示す。
同様に、RAM27bに、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(B→C)と、スレッドBの途中結果を格納する領域(B_area)が設定される。また、RAM27cに、スレッドCの途中結果および処理結果を格納する領域(C_area)が設定される。
図10(b)は、2サイクル目の状態を示す。2サイクル目では、スレッドBがRAM27aに、スレッドCがRAM27bに、スレッドAがRAM27cに割り当てられる。RAMに対するスレッドの割当ては、制御部18により実行される。制御部18は、サイクル毎にスレッドの割当てを変更して、前回のサイクルとは異なるスレッドからのデータをRAMに記憶させるようにする。
なお、スレッドの割当てを変更する順番は、図9に示すスレッド間のデータの引渡しの関係をもとに定められる。図9に示すように、スレッドAの処理結果がスレッドBに引き渡される場合には、前回のサイクルでスレッドAに割り当てられていたRAMを、今回のサイクルでスレッドBに割り当てるように定める。そのため、スレッドBは、今回のサイクルで自身に割り当てられたRAM中に格納されるスレッドAの処理結果を容易に利用することができる。
すなわち、RAM27aには、前回のサイクルでスレッドAから引き渡されるべき処理結果が格納されているため、スレッドBは、この処理結果を自身の処理に使用できる。同様に、前回のサイクルでスレッドBに割り当てられていたRAMは、今回のサイクルでスレッドCに割り当てられる。
図示されるように、制御部18は、スレッドの割当てを全てのRAMに対して同時に変更させる。このタイミングは、既述したように全てのスレッドの実行が終了した後のタイミングである。このとき、スレッドの割当てを循環的に変更させることで、コンパイル処理を容易にするとともに、図9に示すスレッド間の関係にしたがったデータの引渡しを効率的に行うことが可能となる。このようにRAMに対するスレッドの割当てを効率よく循環的に変更することで、処理装置10の高速化を実現できる。
2サイクル目では、RAM27aに、前回のサイクルで生成されたスレッドAの処理結果を格納する領域(A→B)、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(B→C)と、スレッドBの途中結果を格納する領域(B_area)が設定される。スレッドAの処理結果およびスレッドBの途中結果は、スレッドBの実行のためにリコンフィギュラブル回路12の入力に読み出される。なお、スレッドAの処理結果が読み出されて、その後、スレッドBで使用しないことが分かっている場合には、スレッドAの処理結果を格納した領域(A→B)を開放して、データの書込みを許してもよい。
同様に、RAM27bに、前回のサイクルで生成されたスレッドBの処理結果を格納する領域(B→C)と、スレッドCの途中結果および処理結果を格納する領域(C_area)が設定される。スレッドBの処理結果およびスレッドCの途中結果は、スレッドCの実行のためにリコンフィギュラブル回路12の入力に読み出される。なお、スレッドBの処理結果が読み出されて、その後、スレッドCで使用しないことが分かっている場合には、スレッドBの処理結果を格納した領域(B→C)を開放して、データの書込みを許してもよい。
また、RAM27cに、次回以降のサイクルでスレッドBに引き渡すべき処理結果を格納する領域(A→B)と、スレッドAの途中結果を格納する領域(A_area)が設定される。スレッドAの途中結果は、スレッドAの実行のためにリコンフィギュラブル回路12の入力に読み出される。
図10(c)は、3サイクル目の状態を示す。3サイクル目では、スレッドCがRAM27aに、スレッドAがRAM27bに、スレッドBがRAM27cに割り当てられる。3サイクル目では、RAM27aに、前回のサイクルで生成されたスレッドBの処理結果を格納する領域(B→C)と、スレッドCの途中結果および処理結果を格納する領域(C_area)が設定される。
なお、RAM27aにおいて、2サイクル目で設定されていた領域(A→B)は、2サイクル目でデータの読出しが終了しているため、この例ではC_areaとして利用されている。これにより、RAM27aを効率的に利用することができる。
同様にRAM27bに、次回以降のサイクルでスレッドBに引き渡すべき処理結果を格納する領域(A→B)と、スレッドAの途中結果を格納する領域(A_area)が設定される。RAM27bにおいて、2サイクル目で設定されていた領域(B→C)は、2サイクル目でデータの読出しが終了しているため、この例ではA_areaとして利用されている。
またRAM27cに、前回のサイクルで生成されたスレッドAの処理結果を格納する領域(A→B)と、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(B→C)と、スレッドBの途中結果を格納する領域(B_area)が設定される。
図10(d)は、4サイクル目の状態を示す。4サイクル目では、1サイクル目と同様に、スレッドAがRAM27aに、スレッドBがRAM27bに、スレッドCがRAM27cに割り当てられる。4サイクル目では、RAM27aに、次回以降のサイクルでスレッドBに引き渡すべき処理結果を格納する領域(A→B)と、スレッドAの途中結果を格納する領域(A_area)が設定される。
同様にRAM27bに、前回のサイクルで生成されたスレッドAの処理結果を格納する領域(A→B)と、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(B→C)と、スレッドBの途中結果を格納する領域(B_area)が設定される。またRAM27cに、前回のサイクルで生成されたスレッドBの処理結果を格納する領域(B→C)と、スレッドCの途中結果および処理結果を格納する領域(C_area)が設定される。
図10(e)は、5サイクル目の状態を示す。5サイクル目では、2サイクル目と同様に、スレッドBがRAM27aに、スレッドCがRAM27bに、スレッドAがRAM27cに割り当てられる。なお、RAMの記憶領域の状態についても、図10(b)に示す2サイクル目の状態と同一である。以後、図10(b)、図10(c)、図10(d)に示す状態をサイクリックに繰り返して、図9に示す処理が継続されることになる。
図11は、スレッド間のデータの受け渡しの別の例を示す図である。スレッドAは例えば外部からの入力ないしは設定データによる入力を受けて実行される。スレッドBはスレッドAの処理結果を利用し、スレッドCはスレッドAの処理結果およびスレッドBの処理結果を利用して、自身の処理結果を出力する。各スレッドは独立した処理を行い、図7に示すようにマルチスレッドで実行することができる。図9および図10に関して示した処理と同様に、マルチスレッド処理では、RAMに対するスレッドの割当てを、時分割的に変化させる。
図12および図13は、メモリ部27における複数のRAMへのスレッドの割当てと、RAMの記憶領域の状態を示す。図中、RAMに入る矢印は、リコンフィギュラブル回路12から書き込まれるデータの流れを示し、RAMから出る矢印は、リコンフィギュラブル回路12にフィードバックされるデータの流れを示す。
また、例えばA→Bは、スレッドBに引き渡されるべきスレッドAの処理結果を格納する領域を示す。また例えば、A_areaは、スレッドA用に割り当てられるテンポラリな領域を示し、処理を実行するために必要な途中結果を格納する領域である。図12(a)〜図12(d)および図13(a)〜図13(d)に示されるRAMの記憶領域の状態は、全てのスレッドが終了したときの状態をそれぞれ示している。図12および図13におけるスレッドの割当ての変更は、制御部18により実行される。
図12(a)は、1サイクル目の状態を示す。1サイクル目では、スレッドAがRAM27aに、スレッドBがRAM27bに、スレッドCがRAM27cに割り当てられる。1サイクル目では、RAM27aに、次回以降のサイクルでスレッドBに引き渡すべき処理結果を格納する領域(A→B)と、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(A→C)と、スレッドAの途中結果を格納する領域(A_area)が設定される。
同様に、RAM27bに、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(B→C)と、スレッドBの途中結果を格納する領域(B_area)が設定される。また、RAM27cに、スレッドCの途中結果および処理結果を格納する領域(C_area)が設定される。
図12(b)は、2サイクル目の状態を示す。2サイクル目では、スレッドBがRAM27aに、スレッドCがRAM27bに、スレッドAがRAM27cに割り当てられる。2サイクル目では、RAM27aに、前回のサイクルで生成されたスレッドAの処理結果を格納する領域(A→B)、(A→C)、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(B→C)と、スレッドBの途中結果を格納する領域(B_area)が設定される。
スレッドBに引き渡されるべきスレッドAの処理結果およびスレッドBの途中結果は、スレッドBの実行のためにリコンフィギュラブル回路12の入力に読み出される。領域(A→C)に格納されているスレッドAの処理結果は、次のサイクルで使用されるため、領域(A→C)への書き込みは禁止される。
なお、領域(A→B)に格納されているスレッドAの処理結果が読み出されて、その後、スレッドBで使用しないことが分かっている場合には、領域(A→B)を開放して、データの書込みを許してもよい。
同様に、RAM27bに、前回のサイクルで生成されたスレッドBの処理結果を格納する領域(B→C)と、スレッドCの途中結果および処理結果を格納する領域(C_area)が設定される。スレッドBの処理結果およびスレッドCの途中結果は、スレッドCの実行のためにリコンフィギュラブル回路12の入力に読み出される。
なお、スレッドBの処理結果が読み出されて、その後、スレッドCで使用しないことが分かっている場合には、スレッドBの処理結果を格納した領域(B→C)を開放して、データの書込みを許してもよい。
また、RAM27cに、次回以降のサイクルでスレッドBに引き渡すべき処理結果を格納する領域(A→B)、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(A→C)と、スレッドAの途中結果を格納する領域(A_area)が設定される。スレッドAの途中結果は、スレッドAの実行のためにリコンフィギュラブル回路12の入力に読み出される。
図12(c)は、3サイクル目の状態を示す。3サイクル目では、スレッドCがRAM27aに、スレッドAがRAM27bに、スレッドBがRAM27cに割り当てられる。3サイクル目では、RAM27aに、前回のサイクルで生成されたスレッドBの処理結果を格納する領域(B→C)と、前々回のサイクルで生成されたスレッドAの処理結果を格納する領域(A→C)、スレッドCの途中結果および処理結果を格納する領域(C_area)が設定される。
なお、RAM27aにおいて、2サイクル目で設定されていた領域(A→B)は、2サイクル目でデータの読出しが終了しているため、この例ではC_areaとして利用されている。これにより、RAM27aを効率的に利用することができる。
同様にRAM27bに、次回以降のサイクルでスレッドBに引き渡すべき処理結果を格納する領域(A→B)、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(A→C)と、スレッドAの途中結果を格納する領域(A_area)が設定される。RAM27bにおいて、2サイクル目で設定されていた領域(B→C)は、2サイクル目でデータの読出しが終了しているため、この例ではA_areaとして利用されている。
またRAM27cに、前回のサイクルで生成されたスレッドAの処理結果を格納する領域(A→B)、(A→C)と、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(B→C)と、スレッドBの途中結果を格納する領域(B_area)が設定される。
図12(d)は、4サイクル目の状態を示す。4サイクル目では、1サイクル目と同様に、スレッドAがRAM27aに、スレッドBがRAM27bに、スレッドCがRAM27cに割り当てられる。4サイクル目では、RAM27aに、次回以降のサイクルでスレッドBに引き渡すべき処理結果を格納する領域(A→B)、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(A→C)と、スレッドAの途中結果を格納する領域(A_area)が設定される。
同様にRAM27bに、前回のサイクルで生成されたスレッドAの処理結果を格納する領域(A→B)、(A→C)と、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(B→C)と、スレッドBの途中結果を格納する領域(B_area)が設定される。
またRAM27cに、前回のサイクルで生成されたスレッドBの処理結果を格納する領域(B→C)と、前々回のサイクルで生成されたスレッドAの処理結果を格納する領域(A→C)と、スレッドCの途中結果および処理結果を格納する領域(C_area)が設定される。
図13(a)は、5サイクル目の状態を示す。5サイクル目では、2サイクル目と同様に、スレッドBがRAM27aに、スレッドCがRAM27bに、スレッドAがRAM27cに割り当てられる。5サイクル目では、RAM27aに、前回のサイクルで生成されたスレッドAの処理結果を格納する領域(A→B)、(A→C)、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(B→C)と、スレッドBの途中結果を格納する領域(B_area)が設定される。
同様に、RAM27bに、前回のサイクルで生成されたスレッドBの処理結果を格納する領域(B→C)、前々回のサイクルで生成されたスレッドAの処理結果を格納する領域(A→C)と、スレッドCの途中結果および処理結果を格納する領域(C_area)が設定される。
また、RAM27cに、次回以降のサイクルでスレッドBに引き渡すべき処理結果を格納する領域(A→B)、次回以降のサイクルでスレッドCに引き渡すべき処理結果を格納する領域(A→C)と、スレッドAの途中結果を格納する領域(A_area)が設定される。
図13(b)は、6サイクル目の状態を示す。6サイクル目では、3サイクル目と同様に、スレッドCがRAM27aに、スレッドAがRAM27bに、スレッドBがRAM27cに割り当てられる。なお、RAMの記憶領域の状態についても、図12(c)に示す3サイクル目の状態と同一である。
図13(c)は、7サイクル目の状態を示す。7サイクル目では、4サイクル目と同様に、スレッドAがRAM27aに、スレッドBがRAM27bに、スレッドCがRAM27cに割り当てられる。なお、RAMの記憶領域の状態についても、図12(d)に示す4サイクル目の状態と同一である。
図13(d)は、8サイクル目の状態を示す。8サイクル目では、5サイクル目と同様に、スレッドBがRAM27aに、スレッドCがRAM27bに、スレッドAがRAM27cに割り当てられる。なお、RAMの記憶領域の状態についても、図13(a)に示す4サイクル目の状態と同一である。以後、図12(c)、図12(d)、図13(a)に示す状態をサイクリックに繰り返して、図11に示す処理が継続されることになる。
また、図9又は図11に示すスレッド間の関係は、他のスレッドからスレッドAへのフィードバックデータがない場合のものであった。図14(a)および図14(b)は、スレッドAへのフィードバックデータが存在する場合のスレッド間のデータの受け渡しの例を示す図である。
スレッドAへのフィードバックデータが存在する場合であっても、図9および図11に関連して説明したように、RAMに対するスレッドの割当てをサイクル毎に変更することによって、効率的なリコンフィギュラブル回路12のコンフィギュレーションを実現することが可能である。
また、各スレッド間でデータの受け渡しの競合の無い構成を実現することで、データ受け渡しの調停回路を不要とできる。これにより、回路の小型化および低消費電力化が可能な技術を提供できる。
図15は、図8に示す構成の別の例を示す図である。上記図8では、スレッドAの処理結果がスレッドBに引き渡される場合には、前回のサイクルでスレッドAに割り当てられていたRAMは、今回のサイクルでスレッドBに割り当てられる。そして、スレッドBの処理結果がスレッドCに引き渡される場合には、前回のサイクルでスレッドBに割り当てられていたRAMは、今回のサイクルでスレッドCに割り当てられる。
このように、第1切替部23がRAMに割り当てられるスレッドをサイクル毎に順次切替(スレッドA→スレッドB→スレッドCの順番で切替)を実行することにより、当該RAMにおいて一方のスレッドの処理結果が他方のスレッドに引き渡されている。このため、第1切替部23は、当該一方のスレッド(ここではスレッドA)から他方のスレッド(ここではスレッドC)にデータを引き渡すには、最大(スレッド数−1)回(ここでは2回)の切替をしなければならず、処理時間を増大させていた。この点を解消するために図15は以下に示す構成を備えている。以下詳細に説明する。
図15に示すように、集積回路装置26は、リコンフィギュラブル回路12と、第1切替部23と、第3切替部28と、スレッドAB用記憶ユニット60と、スレッドBC用記憶ユニット70と、スレッドCA用記憶ユニット80とを備えている。
なお、図8に示す第1切替部23は、図15に示す第1切替回路23及び第4切替部(第4切替部61,71,81)に対応する。すなわち、図8に示す第1切替回路23は、リコンフィギュラブル回路12から出力される各スレッドの選択、及びRAM27のそれぞれに対応するスレッドの選択を実行しているが、図15に示す第1切替回路23はリコンフィギュラブル回路12から出力される各スレッドの選択を実行し、図15に示す第4切替部(第4切替部61,71,81)はそれぞれのRAMに対応するスレッドの選択を実行している。
例えば、第1切替部23aはスレッドAの出力を選択し、第1切替部23bはスレッドBの出力を選択し、第1切替部23cはスレッドCの出力を選択する。
また、第4切替部61はRAM64a,RAM64bのそれぞれに対応するスレッドA又はスレッドBの出力を供給する。また、第4切替部71はRAM74a,RAM74bのそれぞれに対応するスレッドB又はスレッドCの出力を供給する。さらに、第4切替部81はRAM84a,RAM84bのそれぞれに対応するスレッドC又はスレッドAの出力を供給する。
また、図8に示す第2切替部25は、図15に示す第5切替部(第5切替部65,75,85)に対応する。なお、図8に示す構成と共通する説明については省略する。
記憶ユニット60は、第4切替部61と、RAM62と、RAM63と、RAM64a,RAM64b(一対の記憶手段)と、第5切替部65と、第6切替部66と、第6切替部67とを備えている。
RAM62には、スレッドAのみが固定的に割り当てられている。同様にして、RAM63には、スレッドBのみが固定的に割り当てられている。ここで、本実施形態では、上記RAM62及びRAM64a,RAM64bのそれぞれは、リコンフィギュラブル回路12からの所定スレッド(ここではスレッドA)の出力を共通して記憶可能に構成されており、情報記憶ユニットを構成している。また、RAM63及びRAM64a,RAM64bのそれぞれは、リコンフィギュラブル回路12からの所定スレッド(ここではスレッドB)の出力を共通して記憶可能に構成されており、情報記憶ユニットを構成している。
RAM64aには、2つのスレッドのうちの一方のスレッドが割り当てられており、一方のスレッドの割り当ては、所定サイクル毎に他方のスレッドへ割り当てを切り替えられる。同様にして、RAM64bには、2つのスレッドのうちの一方のスレッドが割り当てられており、一方のスレッドの割り当ては、所定サイクル毎に他方のスレッドへ割り当てを切り替えられる。なお、スレッドの割り当ての切り替えは、第4切替部61及び第5切替部65により実行される。すなわち、第4切替部61は、RAM64a,RAM64bの入力側でスレッドの割り当てを切り替え、第5切替部65は、RAM64a,RAM64bの出力側でスレッドの割り当てを切り替える。
例えば、RAM64aにスレッドA及びスレッドBのうちの一方のスレッドAが割り当てられている場合には、所定サイクルが経過した後に該スレッドAの割り当ては他方のスレッドBへ割り当てを切り替えられる。さらに所定サイクルが経過した後は、スレッドBの割り当ては他方のスレッドAへ割り当てを切り替えられる。
また、RAM64a,RAM64bには、異なるスレッドがそれぞれに割り当てられている場合には、RAM64a,RAM64bのそれぞれに対応するスレッドの割り当ては、所定サイクル毎に互いに切り替えられてもよい。なお、スレッドの割り当ての切り替えは、第4切替部61及び第5切替部65により実行される。
例えば、RAM64aにスレッドAが割り当てられ、RAM64bにスレッドBが割り当てられている場合には、所定サイクルが経過した後に、RAM64aに対応するスレッドAの割り当てがスレッドBの割り当てに切り替えられるとともに、RAM64bに対応するスレッドBの割り当てがスレッドAの割り当てに切り替えられる。さらに所定サイクルが経過した後は、RAM64aに対応するスレッドBの割り当てがスレッドAの割り当てに切り替えられるとともに、RAM64bに対応するスレッドAの割り当てがスレッドBの割り当てに切り替えられる。
したがって、第4切替部61は、第1切替部23aのスレッドAの出力と、第1切替部23bのスレッドBの出力とが入力されると、第1切替部23aのスレッドAの出力をRAM64aに出力し、第1切替部23bのスレッドBの出力をRAM64bに出力する。
また、所定のサイクルが経過した後は、RAM64aに対応するスレッドAの割り当てがスレッドBの割り当てに切り替えられ、RAM64bに対応するスレッドBの割り当てがスレッドAの割り当てに切り替えられる。そして、第4切替部61は、第1切替部23bのスレッドBの出力をRAM64aに出力し、第1切替部23aのスレッドAの出力をRAM64bに出力する。
第5切替部65は、RAM64aにスレッドAが割り当てられ、RAM64bにスレッドBが割り当てられている場合には、RAM64aの出力を第6切替部66を通してリコンフィギュラブル回路12におけるスレッドAに対応する処理に出力し、RAM64bの出力を第6切替部67を通してリコンフィギュラブル回路12におけるスレッドBに対応する処理へ出力する。
また、所定のサイクルが経過した後は、RAM64aに対応するスレッドAの割り当てがスレッドBの割り当てに切り替えられ、RAM64bに対応するスレッドBの割り当てがスレッドAの割り当てに切り替えられるため、第5切替部65は、RAM64aの出力を第6切替部67を通してリコンフィギュラブル回路12におけるスレッドBに対応する処理に出力し、RAM64bの出力を第6切替部66を通してリコンフィギュラブル回路12におけるスレッドAに対応する処理へ出力する。
第6切替部66は、RAM62及び第5切替部65のいずれかの出力を選択して出力する。第6切替部67は、RAM63及び第5切替部65のいずれかの出力を選択して出力する。
ここで、スレッドA、スレッドB及びスレッドCのそれぞれは、複数のアドレス空間を有している。本実施形態では、スレッドAは、アドレス空間A−1とアドレス空間A−2とを有しているものとする。スレッドBは、アドレス空間B−1とアドレス空間B−2とを有しているものとする。スレッドCは、アドレス空間C−1とアドレス空間C−2とを有しているものとする。それぞれのアドレス空間には、001番から200番が割り振られている。以下では、スレッドとアドレス空間とRAMとの関係について詳細に説明する。
先ず、RAM62は、スレッドAのアドレス空間A−1のうち001番から100番に(固定的に)割り振られている。RAM64aがスレッドAに割り当てられた場合には、RAM64aはスレッドAのアドレス空間A−1のうち101番から200番に割り振られる。また、RAM64bがスレッドAに割り当てられた場合には、RAM64bはスレッドAのアドレス空間A−1のうち101番から200番に割り振られる。
すなわち、スレッドAのアドレス空間A−1に対して行われる処理はアドレス範囲により決定され、アドレス空間A−1の001番から100番に対する処理はRAM62に行われ、アドレス空間A−1の101番から200番に対する処理は、RAMに対応するスレッドの割り当てに応じてRAM64a又はRAM64bに対して行われる。
RAM63は、スレッドBのアドレス空間B−2のうち001番から100番に(固定的に)割り振られている。RAM64aがスレッドBに割り当てられた場合には、RAM64aはスレッドBのアドレス空間B−2のうち101番から200番に割り振られる。また、RAM64bがスレッドBに割り当てられた場合には、RAM64bはスレッドBのアドレス空間B−2のうち101番から200番に割り振られる。
すなわち、スレッドBのアドレス空間B−2に対して行われる処理はアドレス範囲により決定され、アドレス空間B−2の001番から100番に対する処理はRAM63に行われ、アドレス空間B−2の101番から200番に対する処理は、RAMに対応するスレッドの割り当てに応じてRAM64a又はRAM64bに対して行われる。
同様にして、スレッドBのアドレス空間B−1に対して行われる処理はアドレス範囲により決定され、アドレス空間B−1の001番から100番に対する処理はRAM72に行われ、アドレス空間B−1の101番から200番に対する処理は、RAMに対応するスレッドの割り当てに応じてRAM74a又はRAM74bに対して行われる。
また、スレッドCのアドレス空間C−2に対して行われる処理はアドレス範囲により決定され、アドレス空間C−2の001番から100番に対する処理はRAM73に対して行われ、アドレス空間C−2の101番から200番に対する処理は、RAMに対応するスレッドの割り当てに応じてRAM74a又はRAM74bに対して行われる。
また、スレッドCがアドレス空間C−1に対して行われる処理はアドレス範囲により決定され、アドレス空間C−1の001番から100番に対する処理はRAM82に対して行われ、アドレス空間C−1の101番から200番に対する処理は、RAMに対応するスレッドの割り当てに応じてRAM84a又はRAM84bに対して行われる。
さらに、スレッドAのアドレス空間A−2に対して行われる処理はアドレス範囲により決定され、アドレス空間A−2の001番から100番に対する処理はRAM83に対して行われ、アドレス空間A−2の101番から200番に対する処理は、RAMに対応するスレッドの割り当てに応じてRAM84a又はRAM84bに対して行われる。
上述したスレッドとアドレス空間とRAMとの関係により、スレッド間でデータがやり取りされる。例えば、RAM64aがスレッドAに割り当てられ、RAM64bがスレッドBに割り当てられた場合には、スレッドAのアドレス空間A−1に対する処理はRAM62又はRAM64aに対して行われ、スレッドBのアドレス空間B−2に対する処理はRAM63又はRAM64bに対して行われる。
また、所定のサイクルが経過した後に、RAM64aがスレッドBに割り当てられ、RAM64bがスレッドAに割り当てられると、スレッドAのアドレス空間A−1に対する処理はRAM62又はRAM64bに対して行われ、スレッドBのアドレス空間B−2に対する処理はRAM63又はRAM64aに対して行われる。
つまり、RAM64aとRAM64bとはスレッドAとスレッドBとの間のデータのやり取りに利用される領域であり、これらのRAMに割り当てられるスレッドが切り替わることにより、スレッドAとスレッドBとの間でデータが相互にやり取りされる。
例えば、スレッドAとスレッドBとの間でデータがやり取りされる場合には、スレッドAがスレッドBに渡すデータをアドレス空間A−1の101番から200番に書き込み、スレッドBがスレッドAに渡すデータをアドレス空間B−2の101番から200番に書き込む。このときに、RAM64aがスレッドAに割り当てられ、RAM64bがスレッドBに割り当てられている場合には、スレッドAがスレッドBに渡すデータはRAM64aに書き込まれ、スレッドBがスレッドAに渡すデータはRAM64bに書き込まれることになる。
そして、所定のサイクルが経過した後に、RAM64bがスレッドAに割り当てられ、RAM64aがスレッドBに割り当てられると、RAM64bに書き込まれたスレッドBのデータをスレッドAがアドレス空間A−1の101番〜200番の領域から読み込み、RAM64aに書き込まれたスレッドAのデータをスレッドBがアドレス空間B−2の101番〜200番の領域から読み込むこととなる。これにより、RAM64a及びRAM64bのそれぞれに対応するスレッドが相互に1回切り替えられるだけで、スレッドAとスレッドBとの間でデータをやり取りすることができる。
なお、本実施形態では、スレッド(例えば、スレッドA)は2つのアドレス空間(例えば、アドレス空間A−1、アドレス空間A−2)を有しており、1つのアドレス空間(例えば、アドレス空間A−1)は2つの領域(例えば、スレッドAに固定的に割り当てられる領域(001番から100番)と、スレッドBとのデータをやり取りするための領域(101番から200番))に分けられているが、これに限定されるものではない。
例えば、スレッドAに固定的に割り当てられる領域(001番から100番)、スレッドBとのデータをやり取りするための領域(101番から200番)、スレッドCとのデータをやり取りするための領域(201番から300番)の3つに分けられて構成されるアドレス空間を有してもよい。
記憶ユニット70には、スレッドB及びスレッドCが割り当てられる。記憶ユニット70は、第4切替部71と、RAM72と、RAM73と、RAM74a,RAM74bと、第5切替部75と、第6切替部76と、第6切替部77とを備えている。記憶ユニット70は、上述した記憶ユニット60と同様の機能を有しているため、詳細な説明は省略する。
記憶ユニット80には、スレッドC及びスレッドAが割り当てられる。記憶ユニット80は、第4切替部81と、RAM82と、RAM83と、RAM84a,RAM84bと、第5切替部85と、第6切替部86と、第6切替部87とを備えている。記憶ユニット80は、上述した記憶ユニット60と同様の機能を有しているため、詳細な説明は省略する。
なお、図15は、3つのスレッドが存在する場合の構成であるが、これに限定されずに、4つ以上のスレッドが存在する場合の構成であってもよい。例えば、4つのスレッドが存在する場合には、スレッドA及びスレッドBに割り当てられる記憶ユニット(AB用)、スレッドA及びスレッドCに割り当てられる記憶ユニット(AC用)、スレッドA及びスレッドDに割り当てられる記憶ユニット(AD用)、スレッドB及びスレッドCに割り当てられる記憶ユニット(BC用)、スレッドB及びスレッドDに割り当てられる記憶ユニット(BD用)、スレッドC及びスレッドDに割り当てられる記憶ユニット(CD用)の6つが備えられることとなる。
なお、本発明は、図15に示す各RAMに限定されずに、図15に示す各RAM以外のRAMを備えてもよい。具体的には、図15に示す各RAMに加えて、スレッドが固定的に割り当てられるRAMが備えられてもよい。例えば、スレッドAは、上述したアドレス空間A−1、アドレス空間A−2に加えて、新たにアドレス空間A−3を有するものとする。そして、スレッドAが固定的に割り当てられるRAMが、アドレス空間A−3に割り振られる。
上記図15に示す構成によれば、第4切替部及び第5切替部は、記憶ユニット60,70,80内における各RAM(例えば、RAM64a,RAM64b)のそれぞれに対応するスレッドの割り当てを、所定サイクル毎に互いに切り替えることができる。これにより、第4切替部及び第5切替部は、記憶ユニット60,70,80内において一方のスレッド(例えば、スレッドA)の処理結果を1回の切り替えで他方のスレッド(例えば、スレッドB)に引き渡し、これと同時に他方のスレッド(例えば、スレッドB)の処理結果を1回の切り替えで一方のスレッド(例えば、スレッドA)に引き渡すことができる。
さらに、スレッドAとスレッドBとの間のみならずに、スレッドBとスレッドCとの間、スレッドCとスレッドAとの間でも同様に、一方のスレッドの処理結果を1回の切り替えで他方のスレッドに引渡し、これと同時に他方のスレッドの処理結果を1回の切り替えで一方のスレッドに引き渡すことができるため、任意のスレッド間で同時にデータを引き渡すことができる。よって、各スレッドの処理結果が利用されるまでの待ち時間を短くすることができ、図8に示す構成よりも処理時間を大幅に削減することができる。
また、図8に示す構成では、1つのスレッドが有するアドレス空間のうちの1つは、スレッド間のデータの引き渡しに用いられる領域だけとなるため、これらアドレス空間には、次のサイクルで同一スレッドが利用するスレッドの処理結果を記憶することができない。これに対し、図15に示す構成では、それぞれのアドレス空間において、スレッド間のデータを引き渡すための領域だけではなく、さらにスレッドに固定的に割り当てられる領域をも有しているため、どのアドレス空間に対しても、次のサイクルで同一スレッドが利用するスレッドの処理結果を記憶することができる。
例えば、図8に示す構成では、アドレス空間は、スレッド間のデータの引渡しをするために用いられ、次のサイクルで同一スレッドが利用するスレッドの処理結果を記憶することができない。このため、次のサイクルで同一スレッドが利用するスレッドの処理結果は、その他のアドレス空間に記憶されることになる。
これに対し、図15に示す構成では、1つのスレッドの持つ2つのアドレス空間のいずれにも、次のサイクルで同一スレッドが利用するスレッドの処理結果を記憶する記憶部を有している。このため、次のサイクルで同一スレッドが利用するスレッドの処理結果が2つある場合でも、それら2つの演算結果を別々のアドレス空間に同時に記憶させることも可能となる。
以上、本発明を実施例をもとに説明した。実施例は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。例えば、図8に示した集積回路装置26は、リコンフィギュラブル回路12への途中入力またはリコンフィギュラブル回路からの途中出力を可能とする構成であったが、本発明は、途中入力または途中出力のない構成に対しても適用できる。
例えば、リコンフィギュラブル回路12におけるALUの配列は、縦方向にのみ接続を許した多段配列に限らず、横方向の接続も許した、メッシュ状の配列であってもよい。また、上記の説明では、段を飛ばして論理回路を接続する結線は設けられていないが、このような段を飛ばす接続結線を設ける構成としてもよい。
また、図1では、処理装置10が1つのリコンフィギュラブル回路12を有する場合を示しているが、複数のリコンフィギュラブル回路12を有していてもよい。
図8に示した構成では、集積回路装置26が、第1切替回路23および複数のRAMから構成されるメモリ部27を有していた。以下の変形例では、メモリ部27が、複数のRAMを有する代わりに、同時アクセス可能な複数の入出力ポートを備えた1つのRAMを有してもよい。この場合、RAMの記憶領域は複数に分割されており、分割されたそれぞれの記憶領域は、リコンフィギュラブル回路12上で実行されるスレッドに割り当てられる。複数の入出力ポートのそれぞれは、分割されたそれぞれの記憶領域に対応する。
RAMの分割は、例えばアドレスの所定位置のビット値を利用して行われる。例えば、第1の入出力ポートは、アドレスの最上位2ビットが”00”である記憶領域に対応付けられ、第2の入出力ポートは、アドレスの最上位2ビットが”01”である記憶領域に対応付けられ、第3の入出力ポートは、アドレスの最上位2ビットが”10”である記憶領域に対応付けられる。
複数のスレッドのそれぞれを各入出力ポートに対応付けることで、スレッドと分割した記憶領域とが対応付けられる。リコンフィギュラブル回路12および第2切替回路25、また制御部18などの他の構成は、上記した実施例と同様である。
すなわち、実施例では複数のRAMが存在していたが、この変形例では、実施例における1つのRAMが、RAMにおいて分割された1つの記憶領域に対応する。なお、アドレス中の2ビットを用いる場合には、記憶領域を最大で4つに分割することが可能であるが、さらに記憶領域を分割する必要がある場合には、アドレス中の3ビット以上を用いる。
以上のように、図8に示す第1切替回路23およびメモリ部27を、複数の入出力ポートを有する1つのRAMに置き換えてもよい。このように、メモリ部27として、複数のデータの同時書込および/または読出を可能とするRAMを使用することで、実施例で説明した同様の効果を得ることができ、さらに第1切替回路23を集積回路装置26から省略できるため、回路規模を削減できる。
なお、リコンフィギュラブル回路12については、本実施例で説明したものに限定されずに、CPU、DSP又はFPGA等のプログラム可能なデバイスも含まれる。また、スレッドの実行については、例えば図2に示すような一つの回路上で複数のスレッドが実行されるケースについてしか説明していないが、個別の回路が存在し、そのそれぞれ回路で別のスレッドが同時に実行される場合も含まれる。
今回開示された実施例はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
10…処理装置、12…リコンフィギュラブル回路、14…設定部、16…回路処理制御部、18…制御部、20…内部状態保持回路、22…出力回路、23…第1切替回路、24…経路部、25…第2切替回路、26…集積回路装置、27…メモリ部、28…第3切替回路、29…経路部、30…コンパイル部、32…設定データ生成部、34…記憶部、36…プログラム、38…データフローグラフ、40…設定データ、50…論理回路、52…接続部