以下、本発明を適用した好適な実施形態を、添付図面を参照しながら詳細に説明する。
図1は、本発明の実施形態に係る再構成デバイスを有するシステムの全体構成の一例を示す図である。外部メモリ101は内部に回路構成情報106を保持している。回路構成情報106は、再構成デバイス105を構成する要素を動作させる設定群である。コンフィギュレーションコントローラ102は、上記メモリ101から結線104を通じ、回路構成情報106を取得する。取得した回路構成情報106は結線103を通じて再構成デバイス105へ送られる。ここで再構成デバイス105の例としてプロセッシングエレメントアレイとしている。
また、以下では具体的にプロセッシングエレメントアレイ内の説明をするが、本発明は下記の各プロセッシングエレメントの構成や経路構成に限定されるものではない。
図2は、本実施形態における再構成デバイスであるプロセッシングエレメントアレイの概要を示す図である。再構成デバイスには、8入力8出力の入出力処理手段であるスイッチングエレメント201が二次元格子状に配置され、演算処理手段である4入力4出力のプロセッシングエレメント202が、スイッチングエレメント201の格子内に配置されている。スイッチングエレメント201a〜iの8入力8出力は1入力1出力を一組としてそれぞれ東西南北(右左下上)方向の、他の4つのスイッチングエレメント201と結線203aおよび203bを介して夫々接続されている。さらに、北東、南東、南西、北西方向の、それぞれ別の4つのプロセッシングエレメント202と結線204aおよび204bを介して双方向に接続された構成を持つ。またスイッチングエレメント201a〜201iおよびプロセッシングエレメント202a〜202dは結線205で一方向に数珠繋ぎに接続されている。
結線203a、203bおよび結線204a、204bはスイッチングエレメント201やプロセッシングエレメント202の間で処理対象データを通信するために接続された結線である。結線205は、スイッチングエレメント201やプロセッシングエレメント202に設定を供給するための結線である。上述の設定によって、スイッチングエレメント201においては処理対象データの入出力先が決定され、プロセッシングエレメント202においては処理対象データの入出力先や処理内容が決定される。なお、図2の各結線203a、203b、204a、204b、205の矢印の方向はデータの方向を示している。またスイッチングエレメント201a〜201iはそれぞれ同じ構成を有し、プロセッシングエレメント202a〜202dはそれぞれ同じ構成を有する。
ここで、各結線203a、203b、204a、204b、205の通信プロトコルの一例として、Valid信号とReady信号による2線ハンドシェークを図3に示す。図3では送信側であるモジュールA301と受信側であるモジュールB302間はデータ信号線303、Valid信号線304およびReady信号線305が接続されている。Valid信号はValid信号線304を通じ送信側が受信側に対し送信可能状態を示す信号である。Ready信号はReady信号線305を通じ受信側が送信側に対しデータ受信可能状態を示す信号である。本プロトコルではモジュールA301からのValid信号線304とモジュールB302のReady信号線305とが両方有効となるクロック立ち上がりのタイミングでデータ信号線303のデータがモジュールA301からモジュールB302へと送信される。図3の波形中では306aのタイミングでデータAが、306bのタイミングでデータBが、306cのタイミングでデータC、306dのタイミングでデータDがモジュールA301からモジュールB302へと転送されている。プロセッシングエレメント202の構成を図4に示す。プロセッシングエレメント202は、コンフィギュレーションユニット401、インプットユニット402、コンピュテーショナルユニット403、アウトプットユニット404、テンポラリーバッファ405で構成されている。
コンフィギュレーションユニット401はプロセッシングエレメント202の動作内容を決定するための設定の管理を行う。インプットユニット402はコンフィギュレーションユニット401の設定に基づき、入力処理を行う。コンピュテーショナルユニット403はコンフィギュレーションユニット401の設定に基づき、演算処理を行う。また、コンピュテーショナルユニット403は、再度コンピュテーショナルユニット403に入力するためテンポラリーバッファ405に処理された結果を保持することが可能である。アウトプットユニット404はコンフィギュレーションユニット401の設定に基づき、出力処理を行う。
上記プロセッシングエレメント202の動作をより具体的に説明する。インプットユニット402はコンフィギュレーションユニット401から入力先を決定するための設定を、結線406を通じて取得する。取得した設定はどの入力ポートを介して外部接続されているモジュールと通信を行うかが指定されている。その情報を元に、結線204a−ne、204a−se、204a−sw、204a−nw、を通じて処理対象であるデータを取得する。ここで参照符号のne,se、sw,nwはそれぞれ方向を示しており、結線204a−neは北東に配置されたスイッチングエレメントと接続されている。また、204a−seは南東に配置されたスイッチングエレメントと接続されている。204a−swは南西に配置されたスイッチングエレメントと接続されている。204a−nwは北西に配置されたスイッチングエレメントと接続されている。取得したデータは、結線409を通してコンピュテーショナルユニット403に送られる。
コンピュテーショナルユニット403は、コンフィギュレーションユニット401から処理内容を決定するための設定を、結線407を通じて取得する。取得した設定に基づいてインプットユニット402から送られてくるデータを取得し、設定された処理を行う。処理したデータは結線410を通じてアウトプットユニット404に送られる。
コンピュテーショナルユニット403は、少なくとも一つの演算器を保持している。上記演算器は例えば、加減算器、比較器、乗算器、除算器、論理演算器、などの演算器、または、これらの組合せからなる演算器、さらにはこれらと他の演算器の組合せからなる演算器などである。以下では具体的な例として、上記コンピュテーショナルユニット403では、積和演算と比較演算処理が行え、一度の演算でどちらかを一方を選択的に行うことができるものとし説明する。積和演算では、a・b+c・dの処理を行い、比較演算では、もしa>bならばcを出力、そうでなければdを出力するといった処理を行う。また、コンピュテーショナルユニット403は一度の入力に対して、上記演算器を繰り返し使用することが可能な構成となっている。繰り返しで使用する場合は一旦上記演算器で使用された処理結果を、結線412を通して、テンポラリーバッファに保存し、その後、結線411を通して、再度コンピュテーショナルユニット403に入力する。再度入力されたデータに対して、新たに上記演算器にて処理を行う。後で詳細を述べるが、上記設定とは上記演算の種類や繰り返し処理、またそれぞれの処理で必要な変数a、b、c、dはどの値を参照するか、また固定値ならばその値を指定することを意味する。
アウトプットユニット404は、処理したデータの出力先を示す設定を、結線408を通じて取得する。取得した設定は、どの出力ポートを介してスイッチングエレメントと通信を行うかが指定されている。その情報を元に、結線204b−ne、204b−se、204b−sw、204b−nw、を通じてスイッチングエレメントへ出力する。ここで結線204b−neは北東に配置されたスイッチングエレメントと接続されている。また、204b−seは南東に配置されたスイッチングエレメントと接続されている。204b−swは南西に配置されたスイッチングエレメントと接続されている。204b−nwは北西に配置されたスイッチングエレメントと接続されている。
次にコンフィギュレーションユニット401の動作について説明する。コンフィギュレーションユニット401はプロセッシングエレメント202毎にユニークなIDを保持している。コンフィギュレーションユニットは入力側の結線205より送られてくる設定を取得し、コンフィギュレーションユニット内で処理し、出力側の結線205を通して設定を出力する。コンフィギュレーションユニット401は自らのIDに対応する設定を格納するためコンフィギュレーションメモリ413を有している。
図5にコンフィギュレーションユニットに送受信される、設定のためのコンフィギュレーションコマンド501を示す。コンフィギュレーションコマンド501はリード/ライトモード502、ID503、コンフィギュレーションアドレス504、設定値505で構成されている。リード/ライトモード502はコンフィギュレーションコマンドの読み書きの処理を決定する信号である。ID503は処理対象のプロセッシングエレメント202を決める信号である。コンフィギュレーションアドレス504はコンフィギュレーションユニット401中の設定が保持されているメモリ内の番地を指定する信号である。設定値505は実際の設定値を表す信号である。図5中のビット幅を示すM、N、O、Pは実際に構成するアーキテクチャによって決められる値である。
以下では上述した構成に基づく設定に関してより具体的に説明する。図6中の601はコンフィギュレーションメモリ413のアドレスを示しており、図5のコンフィギュレーションアドレス504で指定されるアドレスに相当する。602は実際の設定値を示しており、図5の設定値505に相当する。本実施形態ではこれら一つ一つを設定と読んでいるが、本発明は上述の単位に限るものではない。図ではインプットユニット402、コンピュテーショナルユニット403、アウトプットユニット404に関する設定がコンフィギュレーションメモリ413に保持されている例を示している。
アドレス0x0000_0000(“0x”は16進数を示している)で示した設定値は、インプットユニット402における入力先を決定するための設定値であり、値に応じて所定の入力先が決まる。アドレス0x0000_0004で示したイタレーションナンバは、コンピュテーショナルユニット403における、演算の繰り返し回数を決定するための設定であり、値に応じて演算の繰り返し回数が決まる。本実施形態では4回までの演算を想定している。
アドレス0x0000_0008で示したオペレーションセッティングは1度目の演算で行う、演算の種類を決定するための設定で、値に応じて積和演算か比較演算かが決まる。アドレス0x0000_000cで示したバリアブルセッティングは1度目の演算で、変数aの値の参照先を決めるための設定である。参照先としては、入力ポートからの入力値、コンフィギュレーションメモリ413に保持されている固定値、以前の計算結果が保持されているテンポラリーバッファの値がある。この値に応じて、上記いずれかの値がこの変数aに入力される。また0x0000_000cと同様に、0x0000_0010、0x0000_0014、0x0000_0018で示したバリアブルセッティングはそれぞれ、1度目の演算における変数b、c、dの値の参照先を決めるための設定である。次に0x0000_001cで示したパラメータは、1度目の演算において0x0000_000cで指定された参照先が固定値の場合の、変数aのための固定値である。0x0000_001cと同様に0x0000_0020、0x0000_0024、0x0000_0028で示した固定値は、それぞれ1度目の演算で変数b、c、d、で使用される場合の値である。
続く0x0000_002c〜から0x0000_0094は、上記0x0000_0008〜0x0000_0028で示した1度目の演算に係る設定と同様にそれぞれ、2度目、3度目、4度目の設定値を示している。最後に0x0000_0098で示したアウトプットセレクトバリューは、アウトプットユニット404における出力先を決定するための設定値で、値に応じて所定の出力先が決まる。
次にコンフィギュレーションユニットで行われる処理フローを図7に示す。ステップS701では、コンフィギュレーションコマンド501を入力する。ステップS702では、入力されたコンフィギュレーションコマンド501で指定されたID503が、コンフィギュレーションユニット401の持つ自身のIDと一致するかどうかを判断する。もし、ステップS702で自身のIDと違うと判断された場合はステップS711、712で、入力されたコンフィギュレーションコマンド501に対して、何も処理せずにそのまま出力する。もし、自身のIDと一致する場合は、次にステップS703でリード/ライトモード502の値がリードモードかどうかを判断する。リードモードでなければステップS707でライトモードかどうかを判断する。いずれのモードでもない場合はステップS711、712で何も処理せずにそのまま出力する。もし、リードモードと判断された場合は、ステップS704において、コンフィギュレーションメモリ413からコンフィギュレーションアドレス504で指定されたデータを読み出す。その後、ステップS705にて、入力されたコンフィギュレーションコマンド501の設定値505に読み出したデータを書き込み、ステップS706でそのコンフィギュレーションコマンド501を出力する。ライトモードと判断された場合は、ステップS708にて入力されたコンフィギュレーションコマンド501の設定値505をコンフィギュレーションアドレス504で指定されたコンフィギュレーションメモリ413に書き込む。次にステップS709では、入力されたコンフィギュレーションコマンド501の値を変更せず、ステップS710にて、そのまま出力する。一度のコンフィギュレーションコマンドで一つの設定値505を変更することが可能であり、順次コンフィギュレーションコマンドを送信し、必要な設定値を全て変更することで所望の処理を実現する。つまり、この設定数が処理内容の切り替え時間を決めていることとなる。
スイッチングエレメント201の構成を図8に示す。スイッチングエレメント201は、コンフィギュレーションユニット801と、クロスバースイッチ802で構成される。コンフィギュレーションユニット801はデータを転送する接続先を決定するための設定値の管理をする。クロスバースイッチ802はコンフィギュレーションユニット801の設定に基づき一対一に入出力を接続する。プロセッシングエレメント202のコンフィギュレーションユニット401と同様、コンフィギュレーションユニット801はスイッチングエレメント201毎にユニークなIDを保持している。コンフィギュレーションユニットは入力側の結線205より送られてくる設定値を取得し、コンフィギュレーションユニット内で処理を行い、出力側の結線205を通して設定値を出力する。コンフィギュレーションユニットは上記取得した設定をコンフィギュレーションメモリ804に保持している。コンフィギュレーションユニットのコンフィギュレーションコマンドとその処理フローは、図5に示したフォーマット、および図7に示した処理フローと同様である。クロスバースイッチ802はコンフィギュレーションユニット801からデータの入出力先を決定する設定を、結線803を通じて取得する。スイッチングエレメント201は取得した設定値に基づき結線203a−w、−s、203b−e、−n、結線204b−ne、−se、−sw、−nwを通じてデータを取得する。取得したデータは、接続されている結線203a−e、−n、203b−w、−s、結線204a−ne、−se、−sw、−nwを通じて渡す。
ここで結線203a−w、−sはそれぞれ西、南に配置されたスイッチングエレメントと接続されていることを意味する。203b−e、−nはそれぞれ東、北に配置されたスイッチングエレメントと接続されていることを意味している。
結線203a−e、−nはそれぞれ東、北に配置されたスイッチングエレメントと接続されていることを意味する。203b−w、−sはそれぞれ西、南に配置されたスイッチングエレメントと接続されていることを意味している。
結線204a−ne、−se、−sw、−nwはそれぞれ北東、南東、南西、北西に配置されたスイッチングエレメントと接続されていることを意味している。結線204b−ne、−se、−sw、−nwはそれぞれ北東、南東、南西、北西に配置されたスイッチングエレメントと接続されていることを意味している。
図9にコンフィギュレーションメモリ804に保持されている、スイッチングエレメント201におけるクロスバースイッチ802の入出力の接続に関する設定例を示す。901はメモリのアドレスを示しており、図5のコンフィギュレーションアドレス504で指定されるアドレスに相当する。902は設定値を示しており、図5の設定値505を示している。アドレス0x0000_0000で示したコネクション設定は結線203a−wからの入力を203a−e、n、203b−w、−s、204a−ne、−se、−sw、−nwのいずれに出力するかを決定するための設定値である。続く、0x0000_0004は結線203a−sからの入力を0x0000_0000と同様どの結線に出力するかを決定する設定値である。0x0000_0008は結線203b−eからの入力を0x0000_0000と同様どの結線に出力するかを決定する設定値である。0x0000_000cは結線203b−nからの入力を0x0000_0000と同様どの結線に出力するかを決定する設定値である。0x0000_0010は結線204b−neからの入力を0x0000_0000と同様どの結線に出力するかを決定する設定値である。0x0000_0014は結線204b−seからの入力を0x0000_0000と同様どの結線に出力するかを決定する設定値である。0x0000_0018は結線204b−swからの入力を0x0000_0000と同様どの結線に出力するかを決定する設定値である。0x0000_001cは結線204b−nwからの入力を0x0000_0000と同様どの結線に出力するかを決定する設定値である。
上述した再構成デバイスの構成を複数種類変更して所望の処理を実現するためのタイムチャート例を図10に示す。図10では同一の再構成デバイスで複数の異なるデータフローA〜Zを順に実行しているタイムチャートを示している。本実施形態では、これらデータフローとデータフローの実行順序とを入力するデータフロー入力によって入力される。
本実施形態で扱うデータフローとは、再構成デバイスへ一度に処理を割り当て可能な単位で構成されたデータフローのことである。各データフローを処理するための設定は予め生成しておく。再構成デバイスに対して予め生成された設定に基づき再構成デバイスを再構成し、その構成のもとで処理をするという一連の処理が、所望の実行順序で順々に行われる。
以下ではデータフローAを処理割り当て済みとし、データフローBを処理割当て対象として説明する。具体的には、処理割当て済みのデータフローAを実行するための設定値を参照し、データフローBの処理割り当てを決定する。データフローAの処理割当てを参照しデータフローBの処理割当てを決定した後、次はデータフローBを処理割り当て済みとし、データフローCを処理割り当て対象とする。具体的にはデータフローBの処理割り当てを決定した時と同様に、処理割り当て済みのデータフローBを実行するための設定値を参照し、データフローCの処理割り当てを決定する。上記の手順を順々に繰り返すことでAからZまでのデータフローの処理割り当てを行うことが可能となる。
次にデータフローの上記再構成デバイスのプロセッシングエレメントへの処理を割り当てについて説明する。ここで、データフローのプロセッシングエレメントへの処理割り当てとは、データフローの各処理をプロセッシングエレメントに論理的に割り当てる方法である。より具体的には図11に示すようにデータフローの各ノードに対応する処理内容をどのプロセッシングエレメントにおいて、どの順序で行うかを決めることである。図11左図はあるデータフローAを表し、中央図は処理割り当て例を表し、右図は処理割り当てに基づく、図6で示した設定を表す。前述の通り、本実施形態で示すプロセッシングエレメントが有する機能としては繰り返し処理数や、各処理回数目での処理内容やその際に必要となる固定値を想定しており、実際にはこの設定を決めることになる。なお、本実施形態では最大の繰り返し処理回数は4回という想定である。上記データフローに対して、中央の図で表すように、1101a〜1104aでくくったグループごとに、異なるプロセッシングエレメント202に順序付けて処理を割り当てる。上記1101a〜1104aに基づき、それぞれプロセッシングエレメント202−1〜202−4に対する設定1101b〜1104bを決定する。
本実施形態は、図10で示したように同一の再構成デバイスにおいて処理内容(データフロー)が切り替わる際に必要となる上記図11で示した設定数の削減を目的とした処理割り当て方法である。図12では再構成デバイスにおける処理がデータフローAからデータフローBへ変更される際に各プロセッシングエレメント202−1〜202−4の設定変更の概要を示している。データフロー1204の処理は、タイムチャートの処理1201に相当し、既に処理割り当て済みであるものとする。データフロー1205の処理は、タイムチャートの処理1203に相当し、処理割り当て対象のデータフローとする。データフロー1204とデータフロー1205のそれぞれの処理が割り当てられるプロセッシングエレメント202−1〜202−4は、それぞれ論理的に同一のプロセッシングエレメントを意味している。1101b〜1104bはそれぞれデータフローAの処理時のプロセッシングエレメント202−1〜202−4に関する設定であり、1206〜1209はそれぞれデータフローBの処理時のプロセッシングエレメント202―1〜202−4に関する設定である。プロセッシングエレメント202−1では、タイムチャートのデータフローAからBへの設定変更期間1202において設定1101bから設定1206へと設定変更1210が行われる。プロセッシングエレメント202−2では、タイムチャートのデータフローAからBへの設定変更期間1202において設定1102bから設定1207へと設定変更1211が行われる。プロセッシングエレメント202−3では、タイムチャートのデータフローAからBへの設定変更期間1202において設定1103bから設定1208へと設定変更1212が行われる。プロセッシングエレメント202−4では、タイムチャートのデータフローAからBへの設定変更期間1202において設定1104bから設定1209へと設定変更1213が行われる。本実施形態ではデータフローBの処理割り当てに際し、まず各プロセッシングエレメント202−1〜202−4における処理割り当て済みのデータフローAを参照する。その上で上記設定変更1210、1211、1212、1213する際に必要な設定変更数を少なくすることを目的としたデータフローBの処理割り当てを行う。
図17は、上記データフローAからデータフローBへの移行する際の回路構成情報106を生成するための装置のブロック構成図を示している。図17において、2501は装置全体の制御を司るCPUである。2502はブートプログラムやBIOSを記憶しているROMである。2503はCPU2501のワークエリアとして利用され、且つ、OS(オペレーティングシステム)、アプリケーションを格納するためのRAMである。2504はOS、回路構成情報106を作成するためのアプリケーション、ならびに、様々なデータを格納するためのハードディスクドライブ(HDD)である。2505はキーボード、2506はマウスであり、ユーザインタフェースとして機能する。2507は内部にビデオメモリ及び表示コントローラを内蔵する表示制御部であり、2508は表示制御部2507からの映像信号を受信し、表示するための表示装置である。2509は各種外部デバイスと通信するインタフェースであり、例えば、図1に示した外部メモリ101を接続することで、本装置が作成した回路構成情報106をその外部メモリ101に書込むことになる。
上記構成において、本装置に電源が投入されると、CPU2501はROM2502に格納されたブートプログラムを実行し、HDD2504に格納されたOSをRAMにロードし、その後、回路構成情報106を作成するアプリケーションを起動することで、本装置が回路構成情報作成装置として機能することになる。
以下、回路構成情報作成装置として機能する本装置の処理手順を、図13のフローチャートを用いて説明する。本手順はシミュレーテッドアニーリングに基づき処理割り当て方法の例を示すが、本発明は上記手法のみに限定されるものではなく、遺伝的アルゴリズムなどの様々な近似解法や数値最適化法でも良い。
まず、図12を用いてフローチャートの説明に必要な要素について言及する。各データフローを示すインデックスをi、プロセッシングエレメントのインデックスをj、図6のアドレス601に相当するプロセッシングエレメント内で保持しているメモリのコンフィギュレーションアドレスをkとする。上記より各メモリ内の設定値はui,j,kと表すことができる。ここで処理割り当て済みのデータフローをi0、処理割り当て対象のデータフローをi1とする。初めに、ステップS1301では複数のデータフローとその実行順序関係(iの順序)を入力する。既に処理割り当て済みのデータフローに関しては、その設定値
ui0,j,kも入力する。本実施形態ではデータフロー1204は既に処理割り当て済みであり、データフロー1204に関する各プロセッシングエレメントの各メモリ内の設定値は固定値として与えられる。データフロー1205に関しては処理割り当て対象である。
次に、ステップS1302で要求仕様とハードウェア制約の条件を入力する。ここでハードウェア制約条件とは再構成デバイス内のプロセッシングエレメントの個数やプロセッシングエレメントで処理可能な繰り返し処理回数、演算器の種類などハードウェア構成上の制約となりうるものである。また要求仕様とは、プロセッシングエレメントの使用個数や繰り返し処理の回数の制限、使用可能な演算器の種類などハードウェア使用上で制限すべき項目である。さらに処理の入出力の順序関係に矛盾がないか、デッドロックがないか、なども本制約に関する。また、既に処理割り当て済みのデータフローに関しては処理割り当てを変更しないという制約も含む。ただし、本発明は上述の制約のみに限られるものではない。
続いてステップS1303では処理割り当て対象となるデータフローの処理割り当てを行う。初期処理割り当てにおいては、ランダムに割り当てる、ないしはデータフローの深さ方向順に処理を割り当て方法があるが、これらの方法に限られるものではない。初期割り当てでない場合は、例えばランダムに二つの配置を選出し交換するようにシミュレーテッドアニーリングに基づき処理割り当てを変更する。本実施形態では、処理割り当て対象のデータフロー1205に関して初期処理割り当て、ないしは処理割り当て変更を行う。処理割り当て済みのデータフローに関しては、制約に基づき処理割り当ての変更は行わない。ステップS1304では、処理割り当て結果がステップS1303で入力した要求仕様を満たしているか判断する。
以下の式に示すように、制約を満たしていれば、ペナルティ変数p0を0とし、違反している場合はペナルティ変数p0をペナルティ値Cp0とする。
ここで本実施形態では、違反があった場合に一律Cp0は定数値として扱っているが、違反項目に応じた変数値としてもよい。ステップS1305では、処理割り当て結果がステップS1302で入力したハードウェア制約条件を満たしているかを判断する。以下の式に示すように、制約を満たしていれば、ペナルティ変数P1を0とし、違反している場合はペナルティ変数P1をペナルティ値Cp1とする。
ここで本実施形態では、違反があった場合に一律Cp1は定数値として扱っているが、違反項目に応じた変数値としてもよい。次にステップS1306では、対象となるデータフロー変更間における設定変更数の算出を行い、評価値を計算する。図12の例で説明すると設定変更1210、1211、1212、1213の際に変更の必要がある設定数である。より具体的には、処理割り当て済みのデータフローi0における、設定値ui0,j,kと、処理割り当て対象のデータフローi1における、同じアドレスの設定値ui1,j,kの値が一致していなければα1を設定変更数に加える。上述の値が一致していれば何も加えない。上述の計算を全てのプロセッシングエレメントjの全てのメモリkに関して行う。以上で説明した設定変更数は以下の式で表すことできる。
ここでα1は通常1であるが、プロセッシングエレメントのコンフィギュレーションメモリの構造に応じて、各設定が格納されているアドレス毎に重み付けを変更することも可能としている。またデータフロー毎に切り替え時間の優先度をつけるためにデータフロー毎に重みづけることも可能としている。
図7で示した通り、一度のコンフィギュレーションコマンドで一つの設定値を変更することができることから、この数が少なくなれば、処理内容の切り替え時間を削減することが可能となる。本ステップで評価値算出する際の式は上述の式より、以下と定義する。
つまり、要求仕様とハードウェア制約条件を満たしつつ、再構成に必要な設定変更数が少なくなるほど上記評価値は小さくなる。最後にステップS1307では、シミュレーテッドアニーリングに基づき目標達成したかを判断し、目標を達成した場合は終了する。目標未達の場合はステップS1303に戻り、ステップS1303〜S1307を繰り返し行う。ここで、目標値とは十分良い結果が得られるまで、もしくは予定された計算時間に達するまで繰り返す。
以上の結果、回路構成情報106がHDD2504に生成されるので、後はインタフェース2509を介して、利用する外部メモリ101にそれを書き出し、実製品に搭載すれば良いことになる。
なお、上記実施形態では、回路構成情報106を、外部装置(図17)にて作成する例を示した。これは以降に説明する全実施形態でも同じである。また、コンフィギュレーションコントローラ102が外部装置の代わりに、図13の処理を実行し、回路構成情報106を作成しても構わない。例えば、外部メモリ101に複数のデータフロー毎の設定(必要なプロセッサ数と各プロセッサの処理パラメータ)を保持させ、コンフィギュレーションコントローラ102が複数のデータフローの設定に基づいて回路構成情報106を作成すればよい。係る点も、以降に説明する全実施形態にも適用できることである。
一般的な再構成デバイスにおけるデータフローのプロセッシングエレメントへの処理割り当て方法では設定変更数を意識しないため、データフローの処理変更間で全ての設定を変更する必要が生じる。本発明では、データフローの処理順に注目し、最小単位である設定レベルでの変更合計数が少なくすることで、設定変更数削減を効果的に行うことが可能となる。
次に、本発明の第2の実施形態について説明する。第2の実施形態に係る処理のタイムチャート及び処理割り当ての概要を図14に示す。本実施形態では再構成デバイスの設定を変更することで複数のデータフローの処理を行う際に、各データフローの処理内容自体は決まっているが、そのデータフローの実行順序が不定で、状況や入力データなどに応じて変更する場合の処理割り当てに関する実施形態である。具体的には図14では再構成デバイスで行う処理として、タイムチャート1401で示すようにその実行順序が結果や状態などに応じて変わるなど、一定でない場合を想定している。
タイムチャート1401における期間1402ではデータフローAに関する処理が行われ、期間1404、1408ではデータフローCに関する処理が行われ、期間1406ではデータフローBに関する処理が行われる。期間1403ではデータフローAからデータフローCの設定変更が行われる。期間1405ではデータフローCからデータフローBの設定変更が行われる。期間1407ではデータフローBからデータフローCの設定変更が行われる。本実施形態では、データフローA、B、Cの実行順序が一定でないため、それぞれのデータフロー間の全ての設定変更を考慮して処理割り当てを行う必要がある。また、データフローA、B、Cは全て処理割り当て対象とする。
図14の1409、1410、1411はそれぞれデータフローA、B、CにおけるPE202−1〜PE202−4の設定例を示しており、これら全てのデータフローA、B、Cの処理割り当てを一度に一括して行う。1409、1410、1411は実施形態1と同様に、図6で示した設定である。本実施形態では、データフローA、B間、B、C間、C、A間のPE202−1〜202−4でデータフロー変更に必要な設定変更数の合計数に注目する。上記合計数を評価値として算出することで再構成デバイスの再構成時の設定変更数の削減を行う。
なお、データフローA、B間でのPE202−1〜202−4の設定変更はそれぞれ1412、1415、1418、1421で表している。またデータフローB、C間でのPE202−1〜202−4の設定変更はそれぞれ1413、1416、1419、1422で表している。データフローC、A間でのPE202−1〜202−4の設定変更は1414、1417、1420、1423で表している。
本実施形態と第1の実施形態との違いは、同時に複数のデータフローの処理割り当てを行う点にある。図13のステップS1301では、複数のデータフローを入力すると同時に、実行順序が任意であることを入力する。
図13のステップS1303で行う処理割り当てでは、処理割り当て対象であるデータフロー1409、1410、1411全てに対して処理割り当てを行う。図13のステップS1306で使用する設定変更数として、第一の実施形態に対して以下の違いがある。
処理割り当て対象のデータフローi0における、設定値ui0,j,kと、処理割り当て対象のデータフローi1における、同じアドレスの設定値ui1,j,kの値が一致していなければα2を設定変更数に加える。また、処理割り当て対象のデータフローi1における、設定値ui1,j,kと、処理割り当て対象のデータフローi2における、同じアドレスの設定値ui2,j,kの値が一致していなければβ2を設定変更数に加える。さらに、処理割り当て対象のデータフローi2における、設定値ui2,j,kと、処理割り当て対象のデータフローi0における、同じアドレスの設定値ui0,j,kの値が一致していなければγ2を設定変更数に加える。上述以外で、設定値が一致していれば何も加えない。次の式のように、上述の計算を全てのプロセッシングエレメントjの全てのメモリkに関して行う。
ここでi0はデータフローA1409、i1はデータフローB1410、i2はデータフローC1411を示しており、上記式で示す値が少なくなるように、これらの設定値ui0,j,k、ui1,j,k、ui2,j,kを決める。またα2、β2、γ2は通常それぞれ1であるが、プロセッシングエレメントのコンフィギュレーションメモリの構造に応じて、各設定が格納されているアドレス毎に重み付けを変更することも可能としている。またデータフロー毎に切り替え時間の優先度をつけるためにデータフロー毎に重みづけることも可能としている。本実施形態により、全てのデータフロー間を考慮することで、処理の実行順序が不定な場合でも平均して設定変更数削減効果が得られる。
次に、本発明の第3の実施形態について説明する。本実施形態に係る処理のタイムチャートおよび、処理割り当ての概要を図15に示す。本実施形態では既に複数のデータフローの実行順序およびそれぞれの処理割り当ても決まっている場合を想定している。上述の実行順序における任意のデータフローの処理間に、挿入前後の処理割り当ては変えずに、新たなデータフローに対応した処理を挿入するための処理割り当てに関する実施形態である。
図15のタイムチャート1501は再構成デバイスで行う実行順序が既に決められ、その処理割り当ても決められているタイムチャートである。タイムチャート1501ではデータフローAの処理1503後、データフローAの設定からデータフローCの設定へ変更する期間1504を経てデータフローCの処理1505を行っている。このタイムチャート1501のデータフローAとデータフローC間に新たにデータフローBを挿入したタイムチャートがタイムチャート1502である。データフローAの処理1503の後にデータフローAの設定からデータフローBの設定へ変更する期間1506を経て新たに挿入したデータフローBの処理1507が行われる。その後データフローBの設定からデータフローCの設定へ変更する期間1508を経てデータフローBの処理1505が行われる。この際データフローAとCの処理割り当ては変更せずにデータフローBの処理割り当てを決定するため、挿入する前後の既に処理割り当て済みのデータフロー間の設定変更量を考慮する。
図15の1509、1510、1511はそれぞれデータフローA、B、CにおけるPE202−1〜PE202−4の設定を示している。本実施形態ではデータフローAおよびCは処理割り当て済みであり、データフローBの処理割り当てを行う。1509、1510、1511は実施形態1と同様に、図6で示した設定である。本実施形態では具体的には、データフローA、Cの処理割り当ては決定済であり、データフローBの処理割り当てを行う。
その際データフローAからBへ、またBからCへと、PE202−1〜202−4の設定変更に必要な設定変更数との合計数に注目している。上記合計数が実施形態1の図13の1308で示す評価値として算出することで再構成デバイスの再構成時の設定変更数の削減を行う。
なお、データフローA、B間での、PE202−1〜202−4の設定変更はそれぞれ1512、1514、1516、1518で表している。またデータフローB、C間での、PE202−1〜202−4の設定変更は、1513、1515、1517、1519で表している。本実施形態と第1の実施形態との違いは、一つのデータフローの処理割り当てに際し、他の複数の処理割り当て済みのデータフローを同時に参照する点である。
図13のステップS1303で行う処理割り当ては、処理割り当て対象であるデータフロー1510である。データフロー1509、1511は処理割り当て済みであり、処理割り当て変更は行わない。図13のステップS1306で使用する設定変更数として、第一の実施形態に対して以下の違いがある。
処理割り当て済みのデータフローi0における、設定値ui0,j,kと、処理割り当て対象のデータフローi1における、同じアドレスの設定値ui1,j,kの値が一致していなければα3を設定変更数に加える。また、処理割り当て対象のデータフローi1における、設定値ui1,j,kと、処理割り当て済みのデータフローi2における、同じアドレスの設定値ui2,j,kの値が一致していなければβ3を設定変更数に加える。上述の値が一致していれば何も加えない。上述の計算を全てのプロセッシングエレメントjの全てのメモリkに関して行う。以上で説明した設定変更数は以下の式で表すことできる。
ここで、i0はデータフローA1509、i1はデータフローB1510、i2はデータフローC1511を示している。これらの設定値の内、ui0,j,k、ui2,j,kは既に処理割り当て済みで、上記式で示す値が少なくなるようにui1,j,kを決めることとなる。またα3、β3は通常それぞれ1であるが、プロセッシングエレメントのコンフィギュレーションメモリの構造に応じて、各設定が格納されているアドレス毎に重み付けを変更することも可能としている。またデータフロー毎に切り替え時間の優先度をつけるためにデータフロー毎に重みづけることも可能としている。新たにデータフロー挿入する場合に、挿入前後のデータフローとの設定変更数の削減に関する効果が得られる。
次に、本発明の第4の実施形態について説明する。本実施形態に係る処理のタイムチャートおよび、処理割り当ての概要を図16に示す。本実施形態では、ある基準となるデータフローの処理後、その結果に応じて次に行われるデータフローが異なる場合の処理割り当てに関する実施形態である。
図16のタイムチャート1601は基準となるデータフローXの処理を期間1602で行った後、その結果に応じて、データフローXからデータフローAかBかCへの設定変更を期間1603で行う。設定完了後、データフローAかBかCの処理が期間1604で行われ、再度基準となるデータフローXの処理を行うため期間1605でデータフローAかBかCからデータフローXへと設定変更を行う。上記実行順序が繰り返されが、データフローAかBかCのどれが行われるかはデータフローXの結果に応じて変わる。
図16の1606、1607、1608、1609はそれぞれデータフローX、A、B、CにおけるPE202−1〜PE202−4の設定を示している。本実施形態では、データフローX、A、B、Cの全てのデータフローの処理割り当てを行う。1606、1607、1608、1609は実施形態1と同様に、図6で示した設定である。本実施形態では具体的には、データフローX、A、B、Cの処理割り当てを行う。
処理割り当てに際して、データフローX、A間、X、B間、X、C間のPE202−1〜202−4でデータフロー変更に必要な設定変更数の合計数に注目している。上記合計数が実施形態1の図13の1304で示す評価値として算出することで再構成デバイスの再構成時の設定変更数の削減を行う。なお、データフローX、A間でのPE202−1〜202−4の設定変更はそれぞれ1610、1613、1616、1619で表している。また、データフローX、B間でのPE202−1〜202−4の設定変更はそれぞれ1611、1614、1617、1620で表している。データフローX、C間でのPE202−1〜202−4の設定変更はそれぞれ1612、1615、1618、1621で表している。本実施形態と第1の実施形態との違いは、実行順序に分岐があり、分岐先と分岐元間のデータフローに対して処理割り当てを行う点にある。
図13のステップS1301では、複数のデータフローを入力すると同時に、部分的に任意の実行順序を入力する。図13のステップS1303で行う処理割り当ては、処理割り当て対象であるデータフロー1606、1607、1608、1609全てに対して処理割り当てを行う。本実施形態では全てのデータフローを処理割り当て対象として扱う例を示しているが、それに限ったものではない。本実施形態はデータフローの実行順序に注目したものであり、少なくとも一つのデータフローが、既に処理割り当て済みの場合には、それ以外のデータフローの処理割り当てを行うこととなる。
図13のステップS1306で使用する設定変更数として、第1の実施形態に対して以下の違いがある。処理割り当て対象のデータフローi0における、設定値ui0,j,kと、処理割り当て対象のデータフローi1における、同じアドレスの設定値ui1,j,kの値が一致していなければα4を設定変更数に加える。また、処理割り当て対象のデータフローi0における、設定値ui0,j,kと、処理割り当て対象のデータフローi2における、同じアドレスの設定値ui2,j,kの値が一致していなければβ4を設定変更数に加える。さらに、処理割り当て対象のデータフローi0における、設定値ui0,j,kと、処理割り当て対象のデータフローi3における、同じアドレスの設定値ui3,j,kの値が一致していなければγ4を設定変更数に加える。上述以外で、設定値が一致している場合は何も加えない。上述の計算を全てのプロセッシングエレメントjの全てのメモリkに関して行う。
ここでi0はデータフローX1606、i1はデータフローA1607、i2はデータフローB1608、i3はデータフローA1609、を示している。上記式で示す値が少なくなるようにui0,j,k、ui1,j,k、ui2,j,k、ui3,j,kを決める。またα4、β4、γ4は通常それぞれ1であるが、プロセッシングエレメントのコンフィギュレーションメモリの構造に応じて、各設定が格納されているアドレス毎に重み付けを変更することも可能としている。またデータフロー毎に切り替え時間の優先度をつけるためにデータフロー毎に重みづけることも可能としている。
本実施形態により、複数のデータフローを順々に行う上で、その実行順序に分岐がある場合でも、分岐元となるデータフローと分岐先となる複数の他のデータフローを考慮することで、設定変更数削減効果が得られる。
上述した実施形態では、ユースケース別に各々の経路設定方法について述べたが、本発明はこれらの方法の組み合わせでも良い。また、再構成デバイスの構成要素としてプロセッシングエレメントを説明したが、これに限るものではなく、LUTや、それとの組み合わせでも良い。また、設定は、実施形態で示した設定に限るものではなく、LUTベースの再構成デバイスで使用される設定でも良い。また、実施形態では入力するデータフロー全てに対して処理割り当て対象としたが、処理割り当て範囲を指定することで、データフローの一部のみに対して処理割り当てを行っても良い。また、実施形態ではプロセッシングエレメント数はデータフロー間で同じとしているが、処理を割り当てるプロセッシングエレメント数が異なっても良い。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。