(57)【要約】【課題】プログラマブルロジックを含んだ情報処理装置および情報処理システムにおいて、演算効率の向上を実現する。【解決手段】情報処理装置は、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢと、コンフィギュレーションメモリＣＲＡＭと、データ監視部ＣＵＮＴと、コンフィグ制御部ＣＮＦＧＣと、ＣＲＡＭコントローラＣＲＡＭＣとを有する。ＦＰＧＡファブリック部は、ユーザ論理回路を実装し、コンフィギュレーションメモリは、当該ユーザ論理回路の回路構成を定めるコンフィグデータを保持する。データ監視部は、ユーザ論理回路の動作状態を監視し、コンフィグ制御部は、当該監視結果に基づいてコンフィグデータの変更要否を判定する。ＣＲＡＭコントローラは、コンフィグ制御部の判定結果に基づいてコンフィギュレーションメモリのコンフィグデータを変更する。【選択図】図１
2020053059.tif 000002
【特許請求の範囲】
【請求項１】
それぞれがｎ個の入力数を持つＫ個のルックアップテーブルと、
前記Ｋ個のルックアップテーブルにそれぞれ対応するＭ個のコンフィギュレーションメモリと、
前記Ｋ個のルックアップテーブルから出力されるＫ個の出力信号の相互作用を判定し、当該判定結果に基づき新たなデータを生成する相関評価回路と、
前記相関評価回路によって生成された新たなデータを、アドレスを指定して前記Ｍ個のコンフィギュレーションメモリに書き戻すＣＲＡＭ書き込み回路と、
を有する情報処理装置であって、
前記Ｍ個のコンフィギュレーションメモリのそれぞれは、２のｎ乗ビットで構成され、
前記Ｋ個のルックアップテーブルのそれぞれは、ｎビットの入力信号に応じて、対応するコンフィギュレーションメモリの中の１ビットを選択して出力し、
前記Ｋ個のルックアップテーブルには、前記ｎビットの入力信号が共通に入力され、
前記Ｍ個のコンフィギュレーションメモリのそれぞれのビットには、イジングモデルに基づく各イジングノードの演算結果のデータがマッピングされる、
情報処理装置。
【請求項２】
請求項１記載の情報処理装置において、
さらに、前記ＣＲＡＭ書き込み回路が指定する前記アドレスをシフトするアドレス変換部を有する、
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および情報処理システムに関し、例えば、ＦＰＧＡ（Field Programmable Gate Array）を代表とするプログラマブルロジックを含んだ情報処理装置、および当該情報処理装置を備えた情報処理システムに関する。
【背景技術】
【０００２】
演算の高速化や高機能化を実現するために、フィールドプログラマブル論理ＬＳＩによるダイナミックリコンフィグ技術が知られている。この技術は、予めユーザが設計したデータをＲＯＭからＦＰＧＡ内のコンフィギュレーションメモリへ展開し、ＦＰＧＡに所望の演算を実行させるものであり、このコンフィギュレーションメモリへ格納するデータをＬＳＩが稼動状態の中で、動的書き換える技術である。
【０００３】
例えば、非特許文献１には、データセンタを構成する各サーバにＦＰＧＡを搭載する技術が示される。当該技術では、ＦＰＧＡに対して適宜ダイナミックリコンフィグを行うことで、スループットの向上等を図れる。また、非特許文献２には、特にＦＰＧＡとは関係なく、イジングモデルに基づく処理を行うＣＭＯＳ型のイジングチップの構成が示される。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】“A reconfigurable fabric for accelerating large-scale datacenter services,” ACM/IEEE 41st International Symposium on Computer Architecture (ISCA), 2014.
【非特許文献２】“20k-spin Ising chip for combinational optimization problem with CMOS annealing,” Solid-State Circuits Conference - (ISSCC), 2015 IEEE International, Session 24.3.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
情報処理を高速化する上で、現在知られているアーキテクチャが最適とは断言できない。数ある可能性の中で、人間が考え出したよりよい解法を論理ＬＳＩにて実現し、演算を実行しているからである。演算最適化は解くべき問題に依存するので、本来的には、解くべき問題に依存してハード構成が自己最適化を進めるように変化することが望ましい。ただし、現時点で自己最適化を完全に実現するのは難しく、設計されたデータを元に変更を加えていくことが現実的であろう。
【０００６】
これまで、遺伝的アルゴリズムなどのソフトウエアとしての進化アルゴリズムは開発されてきている。こうした中、本発明者等は、ＦＰＧＡのコンフィギュレーションに、このような自己最適化の技術を導入できないかと考えた。コンフィギュレーションを変更するということは、論理接続情報を変更することであり、プロセッサ上でプログラム的に進化アルゴリズムを実行する場合よりも演算の高速化が見込める。その際、演算データの関連を考慮してコンフィギュレーションを自律的に変更できることが望ましい。
【０００７】
本発明は、このようなことに鑑みてなされたものであり、その目的の一つは、プログラマブルロジックを含んだ情報処理装置および情報処理システムにおいて、演算効率の向上を実現することにある。
【０００８】
本発明の前記並びにその他の目的と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００９】
本願において開示される発明のうち、代表的な実施の形態の概要を簡単に説明すれば、次のとおりである。
【００１０】
本実施の形態による情報処理装置は、ＦＰＧＡファブリック部と、コンフィギュレーションメモリと、データ監視部と、コンフィグ制御部と、ＣＲＡＭコントローラとを有する。ＦＰＧＡファブリック部は、ユーザ論理回路を実装し、コンフィギュレーションメモリは、当該ユーザ論理回路の回路構成を定めるコンフィグデータを保持する。データ監視部は、ユーザ論理回路の動作状態を監視し、コンフィグ制御部は、当該監視結果に基づいてコンフィグデータの変更要否を判定する。ＣＲＡＭコントローラは、コンフィグ制御部の判定結果に基づいてコンフィギュレーションメモリのコンフィグデータを変更する。
【発明の効果】
【００１１】
本願において開示される発明のうち、代表的な実施の形態によって得られる効果を簡単に説明すると、演算効率の向上が実現可能になる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施例１による情報処理システムにおいて、全体の概略構成例を示すブロック図である。
【図２】図１におけるＣＲＡＭコントローラの構成例を示すブロック図である。
【図３】図１の情報処理装置において、コンフィグデータの変更を行う際の制御フローの一例を示すフロー図である。
【図４】図３のフローに伴う、図１の情報処理装置の入出力信号の一例を示すシーケンス図である。
【図５】本発明の実施例２による情報処理装置において、ＣＲＡＭのアドレスマップの構造例を示す概略図である。
【図６】（ａ）および（ｂ）は、本発明の実施例３による情報処理装置において、コンフィグデータの変更方法の一例を説明する概念図である。
【図７】本発明の実施例４による情報処理システムにおいて、コンフィグデータの変更方法の一例を説明する概念図である。
【図８】本発明の実施例５による情報処理システムにおいて、その全体の概略構成例を示すブロック図である。
【図９】本発明の実施例６による情報処理装置において、コンフィグデータの変更方法の一例を説明する概念図である。
【図１０】本発明の実施例７による情報処理システムにおいて、その主要部の概略構成例を示すブロック図である。
【図１１】一般的なＬＵＴの構成例を示す回路図である。
【図１２】本発明の実施例８による情報処理装置において、その主要部の構成例を示す概略図である。
【図１３】図１２における具体的な演算シーケンスの一例を示す波形図である。
【図１４】イジングチップへマッピングする２次元イジングモデルの基本単位であるＰＥ（Primitive Element）の一例を示す図である。
【図１５】ＰＥにおける演算の基本単位であるＥＵ（Execlusion Unit）の一例を説明する図である。
【図１６】図１５のＥＵの詳細構成例を示す図である。
【図１７】図１５のＰＥをＦＰＧＡへマッピングした場合の構成例を示す概略図である。
【図１８】図１７の構成を用いて演算を実施する際の全体的な動作例を示す図である。
【発明を実施するための形態】
【００１３】
以下の実施例において、便宜上その必要があるときは、複数のセクションまたは実施例に分割して説明するが、特に明示した場合を除き、それらは互いに無関係なものではなく、一方は他方の一部または全部の変形例、詳細、補足説明等の関係にある。また、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良い。
【００１４】
さらに、以下の実施例において、その構成要素（要素ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
【００１５】
以下、本発明の実施例を図面に基づいて詳細に説明する。なお、実施例を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【実施例１】
【００１６】
《ＦＰＧＡの概要》
【００１７】
一般にＦＰＧＡは、論理記述言語（たとえばＶｅｒｉｌｏｇ  ＨＤＬ（Hardware Description Language）やＶＨＤＬ）を用いて設計され、この論理回路はＲＴＬ（Register Transfer Level）と呼ばれる手法にて記述される。一般的に、ＲＴＬからＬＳＩへの集積は、次の手順で実施される。すなわち、ＲＴＬの論理接続情報を実際のＬＳＩに集積されるトランジスタの物理的な配置を考慮していわゆるネットリストへ変換し、さらに、各信号線のタイミング制約を考慮して静的タイミング解析シミュレーション（ＳＴＡ）を実施し、その配置を最適化した後に、ＬＳＩへ集積する。
【００１８】
ＦＰＧＡにおいてもほぼ同様の手続きで実施され、このＲＴＬを設計後、論理合成を実施し、信号線のタイミングを調整しながら、調整後のデータをＦＰＧＡのコンフィギュレーションメモリ（以降、ＣＲＡＭと呼ぶ）へ格納するデータへ変換する。この変換を、以降、ＣＲＡＭへのマッピングと呼ぶ。
【００１９】
ＣＲＡＭへのマッピングは、より詳細には、ＦＰＧＡ内部に集積された基本論理回路および配線接続スイッチの構成の物理的な配置を考慮し、論理記述情報から変換されたトランジスタレベル結線情報（ネットリスト）を元に、ＦＰＧＡのＣＲＡＭへのビット列（ビットストリーム）へ変換することで実現される。ＦＰＧＡのＣＲＡＭへ当該ビットストリームを格納することによって、所望の動作をターゲットのＦＰＧＡで実現できることになる。ＦＰＧＡで所望の機能を実現するためにＲＴＬから変換されたネットリストと、ＦＰＧＡへ格納されるＣＲＡＭのデータ列（ビットストリーム）とは、１対１対応している。
《情報処理システムの全体構成》
【００２０】
図１は、本発明の実施例１による情報処理システムにおいて、全体の概略構成例を示すブロック図である。図１に示す情報処理システムは、一乃至複数の情報処理装置（ここではＦＰＧＡチップＦＰＧＡ＿ＣＨ）と、評価部インターフェースＥＶＡＬ＿ＩＦと、外部コンフィグ記憶装置ＳＴＲＧと、これらを接続する各種信号線とを備える。各種信号線には、制御信号線（ＳＣＴＬ）、コンフィグ信号線（ＳＣＦＧ）、データ信号線（ＳＤＡＴ）が含まれる。
【００２１】
図１の構成例は、当該構成のみの形で所望の情報処理システムを構成することもできるが、例えば、プロセッサシステムの一部に適用され、当該プロセッサシステムのハードウエアアクセラレータとして用いることも可能である。なお、図１には、一般的な情報処理装置が情報処理を行う上で通常備えるストレージやネットワークは、不図示とし、ＦＰＧＡのコンフィギュレーション変更に関する要部のみを記載する。
【００２２】
ＦＰＧＡチップＦＰＧＡ＿ＣＨは、複数のＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢと、ＣＲＡＭと、ＣＲＡＭコントローラＣＲＡＭＣと、データ監視部ＣＵＮＴと、チップ統括コントローラＣＨＰＣ、オンチップバスＤＢＵＳと、コンフィグ制御部ＣＮＦＧＣとを備える。ＣＲＡＭは、ユーザ論理回路の回路構成を定めるためのコンフィグデータを保持する。ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢは、当該ＣＲＡＭのコンフィグデータに基づくユーザ論理回路を実装する。ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢは、詳細には、複数のＬＵＴ（Lookup table）によって所望の論理真理値表を実装するプログラマブルロジック部ＬＯＧと、複数のスイッチによって各ＬＵＴ間を任意に接続するスイッチ部ＳＷとを備える。
【００２３】
ＣＲＡＭコントローラＣＲＡＭＣは、ＣＲＡＭまたは加えて外部コンフィグ記憶装置ＳＴＲＧとの間でコンフィグデータの読み出し／書き込み等を行う。オンチップバスＤＢＵＳは、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢの入力出信号を伝送する。具体的には、オンチップバスＤＢＵＳは、各ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢ間、または、各ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢとデータ信号線（ＳＤＡＴ）との間の通信データを伝送する。データ監視部ＣＵＮＴは、例えば、データの流通を計測すること等で、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢに実装されるユーザ論理回路の動作状態を監視する。チップ統括コントローラＣＨＰＣは、チップ全体の動作を制御する。
【００２４】
なお、図１では、便宜上、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢのみがプログラマブルロジックで構成されているが、これに加えて、データ監視部ＣＵＮＴ、コンフィグ制御部ＣＮＦＧＣ、ＣＲＡＭコントローラＣＲＡＭＣ、およびチップ統括コントローラＣＨＰＣの一部もプログラマブルロジックで構成されてもよい。また、このようなＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢを除く部分は、ＦＰＧＡに内蔵されるハードコア・プロセッサ（予めプロセッサのハードウェアが実装されたもの）またはソフトコア・プロセッサ（プログラマブルロジックを用いてプロセッサを構成したもの）を利用して構成されてもよい。
【００２５】
また、図１では、便宜上、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢがあたかも分割されているように記載されている。これは、ＦＰＧＡへ搭載する機能ブロック毎に論理的に分割されていることを判りやすく示すためである。もちろん、実際には、ＦＰＧＡ内部は、ＦＰＧＡファブリックＦＰＧＡ＿ＦＡＢが一様に配置されていてもよい。
【００２６】
データ信号線（ＳＤＡＴ）は、複数のＦＰＧＡチップＦＰＧＡ＿ＣＨ間でデータ信号ＳＤＡＴを送受信するための信号線であり、例えば、高速シリアル通信線などで実現される。コンフィグ信号線（ＳＣＦＧ）は、複数のＦＰＧＡチップＦＰＧＡ＿ＣＨ間、または、各ＦＰＧＡチップＦＰＧＡ＿ＣＨと、不揮発メモリやハードディスクドライブ等で構成される外部コンフィグ記憶装置ＳＴＲＧとの間で、ＣＲＡＭのコンフィグ信号（コンフィグデータ）ＳＣＦＧを送受信するための信号線である。制御信号線（ＳＣＴＬ）は、コンフィグデータの変更依頼や変更通知などを各ＦＰＧＡチップＦＰＧＡ＿ＣＨへ伝達する信号線である。ここでは、これらの信号線を明示的に分けて記載したが、時分割多重方式等で共用配線を用いて伝達することも可能である。
【００２７】
データ監視部ＣＵＮＴは、図１の例では、オンチップバスＤＢＵＳに接続され、例えばカウンタ回路等によってオンチップバスＤＢＵＳ上のデータ通信量を監視する。例えば、オンチップバスＤＢＵＳでパケット通信やＩ２Ｃ（Inter Integrated Circuit）通信等を用いる場合、データ監視部ＣＵＮＴは、データ中の送信元および宛先情報を参照し、送信元および宛先の組合せ毎にデータ通信量を計測する。ただし、データ監視部ＣＵＮＴは、必ずしも当該位置に限定されず、例えば、各ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢの内部（具体的には、オンチップバスＤＢＵＳとのインタフェース部）に設けられてもよい。この場合、当該データ監視部ＣＵＮＴは、例えば、受信したデータ中の送信元情報を参照し、各送信元毎にデータ通信量を計測する。
【００２８】
コンフィグ制御部ＣＮＦＧＣは、データ監視部ＣＵＮＴの監視結果に基づいて、閾値テーブルＴＢＬを参照しながら、コンフィグデータの変更要否を判定する。変更要と判定した場合、コンフィグ制御部ＣＮＦＧＣは、コンフィグデータ変更要求をＣＲＡＭコントローラＣＲＡＭＣへ発行する。閾値テーブルＴＢＬには、例えば、通信レートの統計データ等が格納され、コンフィグ制御部ＣＮＦＧＣは、監視結果に基づく通信レートまたは通信レートの変動量等が、当該統計データに基づく閾値を超えた場合に、コンフィグデータ変更要求を発行する。当該変更要求を受けたＣＲＡＭコントローラＣＲＡＭＣは、ＣＲＡＭの保持内容（すなわちコンフィグデータ）を書き換える。
【００２９】
図２は、図１におけるＣＲＡＭコントローラの構成例を示すブロック図である。ＣＲＡＭコントローラＣＲＡＭＣは、ＣＲＡＭの読み書きを制御するＣＲＡＭアクセスコントローラＣＲＡＭＡＣと、ＣＲＡＭのアドレスマップを保有するアドレスマップ保持部ＡＤＲＭＡＰと、ＣＲＡＭとのデータ授受および、外部コンフィグ記憶装置ＳＴＲＧとのデータ授受を実施するポートＰＴとを備える。ＣＲＡＭコントローラＣＲＡＭＣは、コンフィグデータを変更後、ポートＰＯＲＴを介してコンフィグデータのＣＲＣ等の符号化コードチェックをコードチェック部ＣＯＤＥＣＨＫにて実施し、その演算した符号化コードをＲＡＭへ格納する。ＲＡＭへ格納した符号化コードを用いることで、例えば、ＣＲＡＭのコンフィグデータを定期的に読み出し、エラー検出・訂正などを行える。
【００３０】
ここで、本実施例１の方式では、前述したように、コンフィグ制御部ＣＮＦＧＣがデータ監視部ＣＵＮＴの監視結果に基づいてコンフィグデータ変更要求を発行し、これに応じて、ＣＲＡＭコントローラＣＲＡＭＣがコンフィグデータを変更する。ＣＲＡＭアクセスコントローラＣＲＡＭＡＣは、コンフィグデータ変更要求を受けると、アドレスマップ保持部ＡＤＲＭＡＰを参照し、コマンド・アドレス信号ＣＭＤを介して所定のＣＲＡＭアドレスへのデータ読み出しを実施する。
【００３１】
これに応じてＣＲＡＭから読み出されたコンフィグデータ（ＲＤ）は、ポートＰＯＲＴを介してコンフィグ更新部ＣＮＦＧ＿ＭＤＦＹへ入力される。コンフィグ更新部ＣＮＦＧ＿ＭＤＦＹは、コンフィグデータの変更を実施し、当該変更後のコンフィグデータ（ＷＴ）をポートＰＯＲＴを介してＣＲＡＭに書き込む。この際に、当該コンフィグデータ（ＷＴ）は、ポートＰＯＲＴを介してコードチェック部ＣＯＤＥＣＨＫにも入力される。コードチェック部ＣＯＤＥＣＨＫは、コンフィグデータ（ＷＴ）に対する符号化コードを生成し、それをＲＡＭに記憶する。
【００３２】
なお、当該コンフィグデータ（ＷＴ）は、例えば変更履歴とともに、外部コンフィグ記憶装置ＳＴＲＧにも記憶される。また、ＣＲＡＭコントローラＣＲＡＭＣは、必要に応じて、外部コンフィグ記憶装置ＳＴＲＧからのコンフィグデータを読み出し、それをＣＲＡＭに格納することや、当該読み出したコンフィグデータをコンフィグ更新部ＣＮＦＧ＿ＭＤＦＹで更新したのち、それをＣＲＡＭに格納することもできる。その際にも、コードチェック部ＣＯＤＥＣＨＫによる処理が行われる。
【００３３】
以上のように、本実施例１の方式の主要な特徴の一つは、データ監視部ＣＵＮＴおよびコンフィグ制御部ＣＮＦＧＣが各ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢの動作状態を監視および判定し、その判定結果に基づいてＣＲＡＭコントローラＣＲＡＭＣがＣＲＡＭのコンフィグデータを更新する点にある。各ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢの動作状態は、例えば、前述したように、各ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢ間のデータ通信量や、または、各ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢ毎のデータ処理量等である。各ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢ毎のデータ処理量は、通常、各ＦＰＧＡファブリック部で入出力されるデータ量に比例すると考えられ、例えば、各ＦＰＧＡファブリック部間のデータ通信量から得ることができる。
【００３４】
また、本実施例１の方式の主要な特徴の他の一つは、図２のコンフィグ更新部ＣＮＦＧ＿ＭＤＦＹのように、ＣＲＡＭまたは外部コンフィグ記憶装置ＳＴＲＧから読み出したコンフィグデータを変更し、それをＣＲＡＭ、または加えて外部コンフィグ記憶装置ＳＴＲＧに書き込めるような仕組み（プラットフォーム）を備える点にある。特に限定はされないが、コンフィグデータの具体的な変更方法として、進化アルゴリズム等に基づき、コンフィグデータの一部のビットを変更すること等が挙げられる。このような処理は、外部コンフィグ記憶装置ＳＴＲＧに、コンフィグデータの履歴を適宜残すことで実現できる。あるいは、具体的な変更方法として、データ量の監視結果に基づき、クリティカルな機能ブロック等を対象に補強を行うこと等が挙げられる。なお、コンフィグデータの具体的な変更方法の一例に関しては、以降にて適宜述べる。
【００３５】
ここで、例えば非特許文献１に示されるような一般的なダイナミックリコンフィグは、予め複数のユーザ論理回路（言い換えればコンフィグデータ）を定めておき、その定めたユーザ論理回路を予め定めたシーケンスに沿って順次切り換えるようなものである。例えば、予め演算処理Ａを実行するユーザ論理回路Ａと演算処理Ｂを実行するユーザ論理回路Ｂとを設け、所定のシーケンスに基づき演算処理Ａから演算処理Ｂへ切り換える際に、これに合わせてユーザ論理回路Ａをユーザ論理回路Ｂにリコンフィグする。このように、一般的な情報処理装置（ＦＰＧＡチップＦＰＧＡ＿ＣＨ）は、特に判断を行うことなく、単に既定の手順に基づいてユーザ論理回路を他律的に変更する。
【００３６】
一方、本実施例１の方式は、あるユーザ論理回路（言い換えればコンフィグデータ）を出発点として、その動作状態を監視しながら、動作状態が改善する方向に向かうようにユーザ論理回路を自律的に最適化していくものである。すなわち、情報処理装置（ＦＰＧＡチップＦＰＧＡ＿ＣＨ）は、自らの判断に基づいてユーザ論理回路を自律的に変更する。さらに、例えば、進化アルゴリズム等を用いる場合、本実施例１の方式は、言うなれば、あるユーザ論理回路を出発点として、その動作状態を監視しながら、動作状態が改善する方向に向かう回路箇所を探索し、当該探索結果に基づいてユーザ論理回路を自律的に最適化していくようなものである。
【００３７】
このように、所定の演算処理を実行するユーザ論理回路を、当該演算処理に特化した形で自律的に最適化できる仕組みを設けることで、情報処理装置（ＦＰＧＡチップＦＰＧＡ＿ＣＨ）に実装したユーザ論理回路の演算効率を向上させることが可能になる。なお、ここでは、主に、情報処理装置内で各ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢ間のデータ量を監視する場合を例としたが、同様にして、情報処理システム内で情報処理装置間のデータ量を監視することも可能である。
【００３８】
例えば、図１において、複数の情報処理装置（ＦＰＧＡチップＦＰＧＡ＿ＣＨ）が同一の演算を実行する場合、複数のＦＰＧＡチップＦＰＧＡ＿ＣＨで構成されるサブシステム全体の性能を評価することが望ましい。この場合、評価部インターフェースＥＶＡＬ＿ＩＦは、各ＦＰＧＡチップＦＰＧＡ＿ＣＨ間のデータ量を監視し、前述したコンフィグ制御部ＣＮＦＧＣと同様に、閾値テーブル等を用いてコンフィグデータの変更要否を判定する。そして、評価部インターフェースＥＶＡＬ＿ＩＦは、当該判定結果に基づき、所定のＦＰＧＡチップＦＰＧＡ＿ＣＨに向けて、制御信号線（ＳＣＴＬ）を介してコンフィグデータの変更依頼等を行う。なお、この監視結果の判定の際には、例えば、閾値テーブルのパラメータを適宜変更することで、全体性能に及ぼす影響が大きいパラメータを判定すること等も可能である。
《情報処理装置の動作》
【００３９】
図３は、図１の情報処理装置において、コンフィグデータの変更を行う際の制御フローの一例を示すフロー図である。図３において、情報処理装置（ＦＰＧＡチップＦＰＧＡ＿ＣＨ）は、各ＦＰＧＡファブリック部（機能ブロック）ＦＰＧＡ＿ＦＡＢで所定の演算処理を行わせながら、データ監視部ＣＵＮＴを用いて機能ブロック間のデータ流通を監視し、演算時のデータ流通を監視する（ステップＳ１０１）。この際に、データ監視部ＣＵＮＴは、前述したように、例えば、各機能ブロックへのデータ送受信回数や経過時間などをカウントする。
【００４０】
情報処理装置は、例えば、データ送受信回数が所定の回数に達した際や、または所定の経過時間に達した際などに、コンフィグデータの書き換えが必要かどうかの判断を実施する（ステップＳ１０２）。具体的には、コンフィグ制御部ＣＮＦＧＣが、例えば、データ監視部ＣＵＮＴの監視結果に基づく通信レートと、閾値テーブルＴＢＬに格納される通信レートの閾値または通信レートの変動量の閾値等とを比較することなどで判断する。
【００４１】
その結果、書き換えが不要な場合、情報処理装置は、ステップＳ１０１にもどり、監視を続行する。一方、書き換えが必要な場合、情報処理装置は、ステップＳ１０３へ進んでＣＲＡＭのコンフィグデータの変更処理に入る。具体的には、ＣＲＡＭアクセスコントローラＣＲＡＭＡＣおよびコンフィグ更新部ＣＮＦＧ＿ＭＤＦＹは、ＣＲＡＭからコンフィグデータを読み出したのち当該データを変更し（ステップＳ１０３）、新しいコンフィグデータをＣＲＡＭに書き込む（ステップＳ１０４）。
【００４２】
次いで、ＣＲＡＭコントローラＣＲＡＭＣは、コードチェック部ＣＯＤＥＣＨＫを用いた符号化コードの生成やＲＡＭへの格納を行い（ステップＳ１０５）、さらに、新しいコンフィグデータを外部コンフィグ記憶装置ＳＴＲＧへ格納する処理を行う（ステップＳ１０６）。このような処理は、所定の演算処理が終了するまで繰り返し行われる（ステップＳ１０７）。なお、ここでは、ステップＳ１０５，Ｓ１０６の処理を順次行ったが、これらの処理をステップＳ１０４の処理のバックグランドで並行して行ってもよい。そうすることで、より一層の高速化が実現できる。
【００４３】
図４は、図３のフローに伴う、図１の情報処理装置の入出力信号の一例を示すシーケンス図である。まず、時刻Ｔ１で、データ監視部ＣＵＮＴは、ＣＮＴ＿Ｓ信号をアサート（ここでは‘Ｈ’レベルに制御）し、バスモニタ（ＤＢＵＳ）の監視結果をコンフィグ制御部ＣＮＦＧＣへ伝達する。これを受けて、コンフィグ制御部ＣＮＦＧＣは、コンフィグデータの変更要否を判定し、変更要の場合には、時刻Ｔ２で、ＲＣＯＮＦ＿Ｓ信号をアサートする。
【００４４】
ＣＲＡＭコントローラＣＲＡＭＣは、ＲＣＯＮＦ＿Ｓ信号のアサートを受けて、時刻Ｔ３で、ＣＣＳ＿Ｓ信号をアサートする。これを受けて、チップ統括コントローラＣＨＰＣは、リコンフィグに伴うＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢの制御を実施する。具体的には、チップ統括コントローラＣＨＰＣは、ＦＦＳ＿Ｓ信号をＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢへ伝達する。
【００４５】
ここで、ＦＦＳ＿Ｓ信号は、リセット信号（ＲＥＳＢ＿Ｓ信号）、論理演算実行信号（ＥＸＥ＿Ｓ信号）、状態ホールド信号（ＨＯＬＤ＿Ｓ信号）で構成される。時刻Ｔ４で、ＥＸＥ＿Ｓ信号がネゲートされると、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢに実装されるユーザ論理回路は、演算処理を中断する。次いで、時刻Ｔ５で、ＨＯＬＤ＿Ｓ信号がアサートされると、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢは、オンチップバスＤＢＵＳを介したデータ通信をホールドする。
【００４６】
次いで、オンチップバスＤＢＵＳを介した信号授受が停止した状態で、チップ統括コントローラＣＨＰＣは、時刻Ｔ７で、リコンフィグ開始可能信号（ＣＣＳＡ＿Ｓ信号）を発行し、これを受けて、ＣＲＡＭコントローラＣＲＡＭＣは、時刻Ｔ８で、リコンフィグ信号（ＣＲＡＭＣ＿Ｓ信号）をアサートする（すなわち、ＣＲＡＭのコンフィグデータを変更する）。また、時刻Ｔ８では、当該コンフィグデータ（ＣＲＡＭＤ＿Ｓ）の変更に応じて、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢにおけるユーザ論理回路の再構築が行われる。
【００４７】
その後、時刻Ｔ９で、ＣＲＡＭ（言い換えればＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢ）のコンフィギュレーションが完了すると、ＣＲＡＭＣ＿Ｓ信号がネゲートされ、時刻Ｔ１０で、リコンフィグ信号（ＲＣＯＮＦ＿Ｓ信号）がネゲートされる。引き続き、時刻Ｔ１１で、状態ホールド信号（ＨＯＬＤ＿Ｓ信号）がネゲートされ、時刻Ｔ１２で、リセット信号（ＲＥＳＢ＿Ｓ信号）がアサートされた後、時刻Ｔ１３で、論理演算実行信号（ＥＸＥ＿Ｓ信号）がアサートされる。これにより、再構築されたユーザ論理回路は、演算を再開する。オンチップバスＤＢＵＳにおいて、データ通信は、ここでは、時刻Ｔ１から時刻Ｔ１３までは中断され、時刻Ｔ１３で再開される。
【００４８】
なお、ここでは、簡単のため、ひとつのＦＰＧＡファブリック部（機能ブロック）ＦＰＧＡ＿ＦＡＢに対するコンフィギュレーション実行のシーケンスについて述べた。しかし、ＦＰＧＡチップＦＰＧＡ＿ＣＨ上には複数の機能ブロックが搭載されており、それらの一部が動作中でも図３および図４のような処理は可能である。そのため、図４の時刻Ｔ１から時刻Ｔ１３までの期間では、リコンフィギュレーションの非対象となる機能ブロック間でのオンチップバスＤＢＵＳを介したデータ通信が行われていてもよい。
【００４９】
また、ここでは、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢのユーザ論理回路を変更する場合を例としたが、これに限らず、内部バスのバス幅の増減することや、ユーザ論理回路を新たに追加するようなことも、ＦＰＧＡチップＦＰＧＡ＿ＣＨ内リソースが許される範囲で実施可能である。例えば、図４の時刻Ｔ１に応じて機能ブロックの増加が必要と判断される場合があり、この際には、機能ブロックの増加と共に、バス幅を増やすことが望ましいことがある。あるいは、元々、同じ演算を行う複数の機能ブロックがあった場合でも、その機能ブロック間のデータ通信のバンド幅を増やすような判断がなされることがある。このような場合には、バス幅を増やすようなコンフィギュレーション変更が実施されるので、時刻Ｔ１３以降はバス幅が増えた形でのデータ通信が実施される。
【００５０】
以上、本実施例１の情報処理装置および情報処理システムを用いることで、代表的には、演算効率の向上等が実現可能になる。
【実施例２】
【００５１】
本実施例２では、ＣＲＡＭのビットストリームの構成について述べる。図５は、本発明の実施例２による情報処理装置において、ＣＲＡＭのアドレスマップの構造例を示す概略図である。実施例１で述べたようにして、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢのユーザ論理回路を変更するにあたり、例えば、ＬＵＴの構成を維持したまま、その数を増減させ、これに応じて各ＬＵＴ間の接続関係（すなわち図１のスイッチ部ＳＷの構成）を変えたいような場合がある。
【００５２】
このような場合、図５に示すように、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢのスイッチ部ＳＷの構成を定めるＣＲＡＭアドレスと、プログラマブルロジック部ＬＯＧの構成を定めるＣＲＡＭアドレスとを明示的に分けておくことが望ましい。ここでは、スイッチ部ＳＷを構成する複数のスイッチと、プログラマブルロジック部ＬＯＧを構成する複数のＬＵＴとに、それぞれ２５６ＭｂｉｔのＣＲＡＭ容量が付与され、各スイッチおよび各ＬＵＴが１６ビットで構成される場合を例としている。ただし、勿論、ＣＲＡＭ容量や、各スイッチおよび各ＬＵＴのビット数は、これに限定されるものではない。
【実施例３】
【００５３】
本実施例３では、コンフィグデータの変更方法の一例について述べる。図６（ａ）および図６（ｂ）は、本発明の実施例３による情報処理装置において、コンフィグデータの変更方法の一例を説明する概念図である。ここでは、例えば、図１のコンフィグ制御部ＣＮＦＧＣによって機能ブロックＡの処理能力が不足すると判定され、これに応じて、機能ブロックＡを構成する回路ブロックＡを増強する場合を例とする。
【００５４】
図６（ａ）では、回路ブロックＡ（ＣＲＣＩＴＢＫ＿Ａ）〜回路ブロックＣ（ＣＲＣＩＴＢＫ＿Ｃ）と、スペアの回路ブロックＸ（ＣＲＣＩＴＢＫ＿Ｘ）と、スイッチブロック１（ＳＷＢＫ１）およびスイッチブロック２（ＳＷＢＫ２）と、各回路ブロックおよび各スイッチブロックに対応するＣＲＡＭとが示される。この図では、簡単のため、左から右へデータ処理が流れる例を示している。
【００５５】
ここで、回路ブロックＸ（ＣＲＣＩＴＢＫ＿Ｘ）の論理を生成する方法について述べる。このブロックは、本実施例３では、予めスペアとして準備しておいた領域であり、この部分に、回路ブロックＡ（ＣＲＣＩＴＢＫ＿Ａ）を生成することで、処理能力不足を解消することができる。具体的には、図１のＣＲＡＭコントローラＣＲＡＭＣは、まず、ＣＲＡＭを読み出し、ＦＰＧＡチップＦＰＧＡ＿ＣＨに設けられるユーザメモリ内に、変更する回路ブロックＡに対応するＣＲＡＭアドレスとデータを格納する。そして、この際に、図１のＣＲＡＭコントローラＣＲＡＭＣは、図６（ｂ）に示すように、回路ブロックＸに対応するＣＲＡＭアドレス（ＣＡＤＲ＿Ｘ）のデータを、回路ブロックＡと同じデータ（ＣＤＡＴＡ＿Ａ）に定める。
【００５６】
さらに、ＣＲＡＭコントローラＣＲＡＭＣは、図６（ｂ）に示すように、スイッチブロック１，２にそれぞれ対応するＣＲＡＭアドレス（ＣＡＤＲ＿ＳＷ１，ＣＡＤＲ＿ＳＷ２）のデータを、それぞれ所定のデータ（ＣＤＡＴＡ＿ＳＷ１’，ＣＤＡＴＡ＿ＳＷ２’）に定める。例えば、データＣＤＡＴＡ＿ＳＷ１’は、変更前のデータＣＤＡＴＡ＿ＳＷ１に含まれる回路ブロックＡに向けた結線データを、回路ブロックＡに加えて回路ブロックＸに向けた結線データに変更したものである。データＣＤＡＴＡ＿ＳＷ２’に関しても、これと同様である。
【００５７】
ＣＲＡＭコントローラＣＲＡＭＣは、ユーザメモリ内でこのようにして定めた各コンフィグデータをＣＲＡＭへ書き込む。この際に、ＣＲＡＭコントローラＣＲＡＭＣは、実施例１で述べたように、ＥＣＣやＣＲＣ等の符号化コードの生成も行う。なお、このようなコンフィグデータの生成は、ＦＰＧＡチップＦＰＧＡ＿ＣＨ外部のメモリを活用してもよい。チップ内にＲＡＭからＣＲＡＭへの転送経路を設けることが望ましいが、それが存在しない場合は、一旦外部コンフィグ記憶装置ＳＴＲＧを介して転送することも可能である。
【００５８】
以上のように、本実施例３の方式を用いると、ＦＰＧＡチップＦＰＧＡ＿ＣＨ内のリソースを有効に活用し、最大限のパフォーマンスを出せるように自律的な制御が可能になる。
【実施例４】
【００５９】
本実施例４では、コンフィグデータの変更方法の他の一例について述べる。図７は、本発明の実施例４による情報処理システムにおいて、コンフィグデータの変更方法の一例を説明する概念図である。図７に示す情報処理システムは、ｎ＋１個のＦＰＧＡチップＦＰＧＡ＿ＣＨ０〜ＦＰＧＡ＿ＣＨｎで構成されるＦＰＧＡサブシステムＦＰＧＡ＿ＳＳＹＳと、図１に示した評価部インターフェースＥＶＡＬ＿ＩＦと、外部コンフィグ記憶装置ＳＴＲＧとを備える。ＦＰＧＡチップＦＰＧＡ＿ＣＨ０には、機能ブロックＦＵＮＣ＿Ａ０〜ＦＵＮＣ＿Ａ２が実装され、ＦＰＧＡチップＦＰＧＡ＿ＣＨ１には、機能ブロックＦＵＮＣ＿Ｂ０〜ＦＵＮＣ＿Ｂ２が実装され、ＦＰＧＡチップＦＰＧＡ＿ＣＨ２には、機能ブロックＦＵＮＣ＿Ｃ０〜ＦＵＮＣ＿Ｃ２が実装されている。
【００６０】
評価部インターフェースＥＶＡＬ＿ＩＦは、システムの最適化を行う最適化制御部ＣＴＬＰを備える。最適化制御部ＣＴＬＰは、図１に示したデータ監視部ＣＵＮＴ、コンフィグ制御部ＣＮＦＧＣおよびＣＲＡＭコントローラＣＲＡＭＣと同様の機能を備える。また、各ＦＰＧＡチップＦＰＧＡ＿ＣＨ０〜ＦＰＧＡ＿ＣＨｎ内にも当該機能に該当する最適化制御部ＣＴＬＣが備わっている。
【００６１】
ここで、評価部インターフェースＥＶＡＬ＿ＩＦの最適化制御部ＣＴＬＰは、例えば、データ信号線（ＳＤＡＴ）の監視を行ったり、あるいは、各チップ内の最適化制御部ＣＴＬＣでの監視結果を取得すること等で、ＦＰＧＡサブシステムＦＰＧＡ＿ＳＳＹＳ内の演算処理能力を監視する。そして、最適化制御部ＣＴＬＰは、例えば、閾値テーブルを用いた統計処理によって演算処理能力が不足する傾向にあると判断した場合、新たな機能ブロックを生成する。
【００６２】
この例では、ＦＰＧＡチップＦＰＧＡ＿ＣＨ０の機能ブロックＦＵＮＣ＿Ａ０と、ＦＰＧＡチップＦＰＧＡ＿ＣＨ１の機能ブロックＦＵＮＣ＿Ｂ２と、ＦＰＧＡチップＦＰＧＡ＿ＣＨ２の機能ブロックＦＵＮＣ＿Ｃ１の使用頻度が高く、最適化制御部ＣＴＬＰは、これらのブロックの増強が効率的であると判断したものとする。この場合、最適化制御部ＣＴＬＰは、例えば、当該各機能ブロックＦＵＮＣ＿Ａ０，ＦＵＮＣ＿Ｂ２，ＦＵＮＣ＿Ｃ１のコンフィグデータを各チップからコンフィグ信号線（ＳＣＦＧ）を介して読み出し、当該コンフィグデータを実装するように、制御信号線（ＳＣＴＬ）を介してＦＰＧＡチップＦＰＧＡ＿ＣＨｎの最適化制御部ＣＴＬＣに指示する。
【００６３】
なお、このようなコンフィグデータのコピーを行う際には、各機能ブロックのインターフェースが統一されていると便利であり、入出力ピン数などをそろえておくことが望ましい。ただし、入力ピン数がそろっていない場合でも、スイッチ部ＳＷにおいて、余ったピンに対して、‘Ｈ’レベル固定、‘Ｌ’レベル固定、オープン等の処理を実施すれば、問題なく実装できる。
【００６４】
以上のように、本実施例４の方式を用いると、情報処理システム内のリソースを有効に活用し、最大限のパフォーマンスを出せるように自律的な制御が可能になる。
【実施例５】
【００６５】
本実施例５では、図１に示した情報処理装置（ＦＰＧＡチップＦＰＧＡ＿ＣＨ）の変形例と共に、コンフィグデータの変更方法の更に他の一例について述べる。図８は、本発明の実施例５による情報処理システムにおいて、その全体の概略構成例を示すブロック図である。図１では、オンチップバスＤＢＵＳ上のデータ授受の統計的なデータを利用してコンフィグデータを変更する例を示したが、本実施例５では、データの流れではなく、データの処理に応じてコンフィグデータを変更する。
【００６６】
図８の情報処理装置（ＦＰＧＡチップＦＰＧＡ＿ＣＨ）では、図１と異なり、データ監視部ＣＵＮＴはオンチップバスＤＢＵＳに接続されているのではなく、各ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢに直接接続されている。データ監視部ＣＵＮＴは、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢからの演算処理の終了信号に応じて、コンフィグ切り替え信号をコンフィグ制御部ＣＮＦＧＣへ送信する。演算処理の終了信号は、ＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢによって所定の単位の演算処理を終了する毎に送信される。
【００６７】
コンフィグ切り替えに際しては、演算処理の終了信号そのものを用いてもよいが、演算処理の開始から終了までの時間間隔や、演算処理の実行回数などを計測する（すなわち、演算処理の負荷の重さや演算処理の頻度を計測する）ことがより効果的である。また、例えば、プログラムの解析に基づいて予め演算処理の時系列な推移が予測できるような場合、タイマを内蔵し、設定時刻になったら切り替えることも可能である。
【００６８】
さらに、割り込み処理の回数や、割り込み処理の種類に応じて、最適な論理構成になるように自律的にユーザ論理回路を変更することもできる。つまり、割り込み処理の演算が固定であり、しかもその頻度が高い場合は、ほとんど演算処理を実行していないＦＰＧＡファブリック部ＦＰＧＡ＿ＦＡＢに、割り込み処理を実行するユーザ論理回路を実装することが可能になる。
【００６９】
この割り込み処理の概念は、演算処理部の更新の概念にも拡張することができる。一般的に、割り込みというと、通常の制御シーケンスの中で、緊急的な処理のルーチンや追加の演算処理要求にこたえるために、ソフトウエアを分岐させるイメージが強い。一方、本実施例の方式は、そのような固定的ないわゆる設計されたプログラム分岐のみならず、設計当初は考慮していなかった追加機能の拡充という概念まで含めることができる。
【００７０】
例えば、割り込み処理と呼ぶ新規の演算処理は、設計当初において頻度が少ないもしくは想定範囲外ということで、低い優先順位で設計されているかもしくは当初の設計には入っていなかった場合でも、処理するサービスやアプリケーションの進化に応じて頻繁に発生するようになり得る。すなわち、新規の演算処理の優先順位が動的に高まるような事態が生じ得る。本実施例の方式を用いると、このような動的な優先順位の高まりを受けて、その状況変化に適応するように、ハードウエア処理を進化させていくことができる。このように専用のハードウエアで演算処理を行うことで、ソフトウエアで演算処理を行う場合と比較して、高速性や低消費電力化を実現できる。
【００７１】
以上のように、本実施例５の方式を用いると、情報処理装置内のリソースを有効に活用し、最大限のパフォーマンスを出せるように自律的な制御が可能になる。
【実施例６】
【００７２】
本実施例６では、コンフィグデータの変更方法の更に他の一例について述べる。前述した実施例では、ＦＰＧＡチップＦＰＧＡ＿ＣＨに搭載したユーザ論理回路間のデータ通信回数（または演算処理回数）等に基づいて、主に、ユーザ論理回路（機能ブロック）のコンフィグデータを変更する例を示した。本実施例６では、スイッチ部のコンフィグデータを変更する例について説明する。図９は、本発明の実施例６による情報処理装置において、コンフィグデータの変更方法の一例を説明する概念図である。
【００７３】
図９に示す情報処理装置ＦＰＧＡ＿ＣＨは、複数の機能ブロックＦＵＮＣ＿Ａ〜ＦＵＮＣ＿Ｆと、各機能ブロック間を接続するスイッチ部ＳＷと、図７で述べたような最適化制御部ＣＴＬＣとを備える。ここでは、簡単のため、各機能ブロック間の信号は４本に制限して説明する。機能ブロックＦＵＮＣ＿Ａは、出力インタフェースＩＦＯを備え、当該出力インタフェースＩＦＯからの信号は、１本が機能ブロックＦＵＮＣ＿Ｄへ、１本が機能ブロックＦＵＮＣ＿Ｅへ、２本が機能ブロックＦＵＮＣ＿Ｆへ接続されている。
【００７４】
同様に機能ブロックＦＵＮＣ＿Ｂの出力インタフェースＩＦＯからの信号は、２本が機能ブロックＦＵＮＣ＿Ｄへ、１本が機能ブロックＦＵＮＣ＿Ｅへ、１本が機能ブロックＦＵＮＣ＿Ｆへ接続されている。さらに、機能ブロックＦＵＮＣ＿Ｃからの信号は、１本が機能ブロックＦＵＮＣ＿Ｄへ、１本が機能ブロックＦＵＮＣ＿Ｅへ、２本が機能ブロックＦＵＮＣ＿Ｆへ接続されている。
【００７５】
ここで、最適化制御部ＣＴＬＣは、例えば、機能ブロックＦＵＮＣ＿Ａと機能ブロックＦＵＮＣ＿Ｄとの関係が強いと判断した場合、機能ブロックＦＵＮＣ＿Ａと機能ブロックＦＵＮＣ＿Ｄとの間の結合度を変更する。この例では、機能ブロックＦＵＮＣ＿Ａからの信号は、２本が機能ブロックＦＵＮＣ＿Ｄへ、１本が機能ブロックＦＵＮＣ＿Ｅへ、１本が機能ブロックＦＵＮＣ＿Ｆへ接続されるように変更される。この接続は、機能ブロック間のデータの連結度に依存して柔軟に変更できるので、限られたトランジスタおよび配線資産を活用しながら、チップ全体の演算速度の向上が期待できる。なお、このような変更を容易に行うためには、実施例２に示したようなＣＲＡＭのビットストリームを用いることが望ましい。
【００７６】
以上のように、本実施例６の方式を用いると、情報処理装置内のリソースを有効に活用し、最大限のパフォーマンスを出せるように自律的な制御が可能になる。
【実施例７】
【００７７】
本実施例７では、図１に示した情報処理システムの変形例と共に、コンフィグデータの変更方法の更に他の一例について述べる。本実施の形態では、機能ブロックのパフォーマンスや機能ブロック間のデータの授受等の情報を利用して、演算効率の向上や演算速度の向上を目指している。これまでの実施例は、主に、既存の設計データを再利用し、機能ブロック数の増減や接続関係の再定義と、運用後に新規に設計したハードウエアの自律的な組込みに関するものであった。本実施例７では、ＣＲＡＭのビット反転を故意に引き起こし、論理の変更によって、演算パフォーマンスを向上させる仕組みについて述べる。
【００７８】
図１０は、本発明の実施例７による情報処理システムにおいて、その主要部の概略構成例を示すブロック図である。図１０に示す情報処理システムは、図７の場合と同様に、複数のＦＰＧＡチップＦＰＧＡ＿ＣＨ０〜ＦＰＧＡ＿ＣＨｎからなるＦＰＧＡサブシステムＦＰＧＡ＿ＳＳＹＳを備える。図７との差異は、サブシステムの進化を制御する進化ブロックＥＶＯＬが新たに設けられる点と、進化を促す信号線（ＳＥＶＬ）が追加される点と、各ＦＰＧＡチップに、必要に応じてコンフィグデータを進化させるためのコンフィグデータ生成部ＧＥＮが設けられる点にある。
【００７９】
各チップのコンフィグデータ生成部ＧＥＮは、進化ブロックＥＶＯＬからのイネーブル信号や設定情報を、信号ＳＥＶＬを介してそれぞれ独立に受信し、ＣＲＡＭを更新する。図１０の例では、ＦＰＧＡチップＦＰＧＡ＿ＣＨ０，ＦＰＧＡ＿ＣＨ１に対して、まず、同じ機能ブロックＦＵＮＣ＿Ａ０，ＦＵＮＣ＿Ａ１，ＦＵＮＣ＿Ａ２を実装し、その後の演算処理の最中にＦＰＧＡチップＦＰＧＡ＿ＣＨ１のコンフィグデータを故意に変化させて演算結果がどうなるかを調べるような動作が行われる。ＦＰＧＡチップＦＰＧＡ＿ＣＨ０は設計された状態でデータの処理を進める機能ブロックであり、ＦＰＧＡチップＦＰＧＡ＿ＣＨ１は設計されたデータから出発して、よりよい論理構成を求める評価ブロックになる。このように、本実施例７では、実データを活用しながらハードウエアをよりよい状態に変更していくための方式が示される。
【００８０】
ＣＲＡＭの更新には、ランダムなビット反転や、遺伝的アルゴリズムによるＣＲＡＭの部分的な変更などが考えられる。ランダムなビット反転を用いる場合、例えば、図２のコンフィグ更新部ＣＮＦＧ＿ＭＤＦＹにコンフィグデータ生成部ＧＥＮを設ければよい。コンフィグ更新部ＣＮＦＧ＿ＭＤＦＹは、ＣＲＡＭから読み出したコンフィグデータに対して、乱数または擬似乱数を用いてビットをランダムに選択し、当該選択したビットを反転させたのちＣＲＡＭに書き戻す。
【００８１】
一方、遺伝的アルゴリズムを用いる場合、予め設けた複数の染色体（ここではコンフィグデータ）に対して、淘汰、交叉および突然変異といったような操作を繰り返しながら、全体的に適応度が高い（動作状態が最良な）染色体を探索するような処理が行われる。交叉とは、例えば、ある染色体における一部のビットと別の染色体における一部のビットとを入れ替えるような操作であり、突然変異とは、ある染色体における一部のビットを反転させるような操作である。また、淘汰とは、適応度が高い染色体を残し、適応度が低い染色体を排除するような操作である。
【００８２】
交叉や突然変異の操作を行ったのち、残された染色体に対して、さらに、交叉や突然変異の操作を行うことで、最も適応度が高い染色体（すなわち動作状態が最良なコンフィグデータ）を探索することができる。このような操作の過程で、淘汰されないコンフィグデータは、外部コンフィグ記憶装置ＳＴＲＧに蓄えられ、淘汰されたコンフィグデータは、外部コンフィグ記憶装置ＳＴＲＧから削除される。
【００８３】
図１０の例では、評価部インターフェースＥＶＡＬ＿ＩＦは、ＦＰＧＡチップＦＰＧＡ＿ＣＨ０とＦＰＧＡチップＦＰＧＡ＿ＣＨ１との比較（データの正当性や処理能力の比較等）を逐次行う。進化ブロックＥＶＯＬは、この比較結果に基づいて、例えば前述した淘汰等を行い、ＦＰＧＡチップＦＰＧＡ＿ＣＨ１のコンフィグデータ生成部ＧＥＮにＣＲＡＭの更新を指示する。コンフィグデータ生成部ＧＥＮは、外部コンフィグ記憶装置ＳＴＲＧで淘汰されていないコンフィグデータを用いて例えば交叉や突然変異等の操作を行い、ＣＲＡＭを更新する。ここで、評価部インターフェースＥＶＡＬ＿ＩＦにおける比較の方法の具体例としては、演算処理の時間間隔の比較や、演算結果の性能等が考えられる。
【００８４】
前者の演算処理の時間間隔は、単純に処理の開始と終了を計測すればよい。その際、設計時のデータを基準として、ＦＰＧＡチップＦＰＧＡ＿ＣＨ１で逐次試行を実施しながら、その試行の前後の時間間隔を比較することで、より高速処理が実現可能な（すなわちより適応度が高い）コンフィグデータを得ることができる。また、後者の演算結果の性能については、例えば、画像認識のような処理を実施する際、認識率の向上度合いなどを閾値として判定するなどの方法が考えられる。
【００８５】
このような処理を商用ベースの実データを活用しながら蓄積し、よりよいコンフィグデータを外部コンフィグ記憶装置ＳＴＲＧに保存する。いわば、活きたデータを活用しながら学習を進め、より効率的な処理を模索するということになる。その際、評価部インターフェースＥＶＡＬ＿ＩＦでの評価結果や処理時刻、処理データ情報を同時に格納できるようにしておくことが望ましい。また、評価部インターフェースＥＶＡＬ＿ＩＦでの評価においては、不図示であるが、電力モニタ等の計測結果を踏まえることで、電力効率の評価も可能である。
【００８６】
図１１は、一般的なＬＵＴの構成例を示す回路図である。一般的なＬＵＴは、ＣＲＡＭの情報がセレクタを介して選択的に出力されるような構成になっており、４入力の場合は、１６ビットのＣＲＡＭで構成される。このＬＵＴひとつで実現可能なＣＲＡＭの設定可能な値は、２＾１６＝６５５３６通り、および入力Ｉ０〜Ｉ３のとりうる値は、２＾４＝１６通りである。これらを独立に変化させると１０４８５７６通りの組み合わせが実現できる。一般に、ＦＰＧＡにはＬＵＴが１００万個程度集積されており、そのデータ処理ビットは莫大な数になる。本実施例７の方式は、人間の経験と論理合成ツールによって設計された機能ブロックを、人間の想定範囲を超えて自律的に進化させ、よりよい性能を得るためのひとつの手段になる。
【００８７】
なお、ここでは、情報処理システム内でのＦＰＧＡチップ間での比較結果に基づいて所定のＦＰＧＡチップの最適化を図ったが、同様にして、ＦＰＧＡチップ内でのＦＰＧＡファブリック部間での比較結果に基づいて所定のＦＰＧＡファブリック部の最適化を図ることも可能である。また、ここでは、エラーが無いデータを確実に得るため、データの処理を進める機能ブロックと、最適化を進める評価ブロックとを設けたが、例えば、画像・音声処理等のように多少のエラーは許容できる場合には、１個のブロックでデータの処理と最適化の両方を進めることも可能である。
【実施例８】
【００８８】
これまでの実施例は、ＣＲＡＭの進化による演算装置としてのハードの性能向上を実現する実施例であった。ここでは、さらに、コンフィグデータの頻繁な更新による新たな効果として、高速演算チップの実現に関する実施例を述べる。図１２は、本発明の実施例８による情報処理装置において、その主要部の構成例を示す概略図である。図１２に示す構成は、プログラマブルロジックを用いてイジングチップを実現し、ＣＲＡＭに格納したデータを進化させていくものである。
【００８９】
この例では、ＣＲＡＭ自体をデータメモリのようにして扱い、ＦＰＧＡの構成を用いて演算処理を実施する。図１２には、簡単のために、それぞれ１６ビットを持つ４つのＣＲＡＭと、当該４つのＣＲＡＭに対応する４つのＬＵＴが設けられる例を示している。このＣＲＡＭには処理するデータを搭載し、４つのＬＵＴの入力を夫々共通化して接続することで、例えば、４個のＣＲＡＭのそれぞれにおける所定の１ビット（例えばビット＃０）を、ＬＵＴを構成するセレクタを介して同時に選択して出力することが可能である。この例では、当該所定の１ビットは１６ビット分あるため、４ビットで構成される情報を１面と定義すると、１６面の情報の選択が可能である。たとえば、この４ビットの情報を変更しながら、演算を進める計算機の場合、４つのＬＵＴで１６種の演算を実現できることになる。
【００９０】
図１３は、図１２における具体的な演算シーケンスの一例を示す波形図である。入力信号Ｉ０〜Ｉ３は、クロック同期で変化させ、同時に、相互作用判定回路ＩＮＴＲＡＣやデータ生成部ＤＧＥＮにもクロックが入力される。クロックに同期させて、ＣＲＡＭ１６面の演算を実施させつつ、ＣＲＡＭのコンフィグを実行させる。入力信号Ｉ０〜Ｉ３は、図１３の波形図に示すように、１６回の演算が実施できるようになっており、夫々の演算をステートと呼ぶと、４つのＬＵＴに対応する４つのＣＲＡＭのビット情報が、各ステート毎に、０番から１５番まで順に出力され、演算される。
【００９１】
この例では、４つのＬＵＴからの出力信号は、相互作用判定回路ＩＮＴＲＡＣへも入力され、相互作用判定回路ＩＮＴＲＡＣは、４つのＬＵＴからの出力信号の相互作用を判定することで、ＣＲＡＭに格納されるデータの相関を評価する。相互作用判定回路ＩＮＴＲＡＣは、たとえば、各ビット間の相関や重み付けのパラメータを加え、積和演算や平均化処理を実行する。その演算結果を受けて、データ生成部ＤＧＥＮは、ＣＲＡＭに格納していたビット情報を反転させるかそのままにするかを決める。このように、本実施例８では、ＣＲＡＭのビット情報間の関連性を検出して、ＣＲＡＭの更新を実施する。
【００９２】
図１４〜図１６は、イジングチップの概念を説明する図である。物理現象の基底状態の計算手法として、イジングモデルと呼ばれる手法が提案されている。これは、物質を構成する粒子の特にスピンの向きのよるエネルギー状態を計算し、より安定な状態を求めるための計算モデルであり、たとえば、スピンを持った粒子を平面に並べてそれらの最近接のスピン間の相互作用を計算し安定状態へ導くものである。図１４は、一例として２次元イジングモデルをＦＰＧＡへマッピングする例を示したものである。
【００９３】
図１４において、イジングの各スピン粒子（イジングノード（Ｉｎｄ）と呼ぶ）は丸印で表され、平面に一様に並べられている。この図では、それらを６×６の行列単位でまとめて、ＰＥ（Primitive Element）として定義している。以降で、これをＦＰＧＡへマッピングする例を説明する。
【００９４】
図１５は、ひとつのＰＥを抜き出し、近接イジングノードＩｎｄ間の接続関係を示した図である。ひとつのイジングノードＩｎｄに着目し、それらを縦横斜めの関連を計算することを念頭に置くと、図１５に示すように、８本の相互作用線Ｉｂ（Interaction bond）が考えられる。この８本の相互作用線Ｉｂで結ばれた基本単位（以降、ＥＵ：Execution Unitと呼ぶ）ごとに演算を実行する。
【００９５】
この時、演算の組み合わせとして、初期のＣＲＡＭビットに格納されているデータを用いて演算する上で、１６通りの演算の組み合わせが存在することになり、ひとつのＰＥの中に、図１５に示されるように、１６個のＥＵ（ＥＵ０〜ＥＵ１５）が定義される。図１５では、見易さのため、それらの関係が重ならないように示されており、（Ａ）〜（Ｉ）の９個の図中に１６通りの組み合わせをすべて表現している。つまり、ひとつのＰＥを考える場合、１６通りの計算ができることが必要となる。ＥＵの構成について、図１６に詳細を示す。ＥＵ内は、このモデルでは、９個のイジングノードＩｎｄ０〜Ｉｎｄ８と、８本の相互作用線Ｉｂ０〜Ｉｂ７により構成される。本実施例８では、各イジングノードをＬＵＴに割り当て、その相互作用の演算をユーザ論理回路で実施する。
【００９６】
図１７は、図１５のＰＥ（をＦＰＧＡへマッピングした場合の構成例を示す概略図である。図１７には、９個のＬＵＴ（ＬＵＴ０〜ＬＵＴ８）と、各ＬＵＴへの入力である４ビットの入力信号Ｉ０〜Ｉ３と、入力信号を９つのＬＵＴへ接続するスイッチ回路ＳＷＣと、演算データを一時的に保持するフリップフロップＦＦと、相関評価回路ＩＥＵと、メモリＲＡＭと、アドレス変換部ＡＤＲＣＶと、ＣＲＡＭ書き込み回路ＣＲＷＴとが示される。
【００９７】
相関評価回路ＩＥＵは、図１２の相互作用判定回路ＩＮＴＲＡＣおよびデータ生成部ＤＧＥＮに該当し、イジングノードの相互作用を演算し、その相互作用（Ｅ）の演算結果および当該演算結果から導出される各イジングノード（σｉ，σｊ）のデータをメモリＲＡＭに格納する。メモリＲＡＭは、例えば、予めＦＰＧＡ内に搭載される。ＣＲＡＭ書き込み回路ＣＲＷＴは、メモリＲＡＭに書き込んだイジングノードの演算結果のデータを、アドレスを指定してＣＲＡＭへ書き戻す。アドレス変換部ＡＤＲＣＶは、ＣＲＡＭ書き込み回路ＣＲＷＴが書き戻しを行う際のアドレスを変更する機能を備える。各ＬＵＴには、対応するＣＲＡＭが備わり、本実施例８では４入力のＬＵＴを想定し、１６ビットのＣＲＡＭがひとつのＬＵＴに関連付けられる。ＬＵＴ０にはＣＲＡＭ０が対応し、そのＣＲＡＭは、ビット＃０〜＃１５の１６ビットを備える。
【００９８】
図１５と対応させて、図１７の構成について述べる。図１５では、ひとつのＥＵにおいて、相互作用を実施するイジングノードＩｎｄは９個あり、相互作用線Ｉｂは８本ある。イジングノードＩｎｄについて、８本の相互作用線を定義しているが、この相互作用の元となる９個のイジングノードＩｎｄを、９個のＬＵＴで実現している。図１７の例では、９個のＬＵＴの夫々に対して４つの入力信号Ｉ０〜Ｉ３が共通に入力される。図１３の場合と同様に、４つの入力信号で１６通りの入力を行うと、これに応じて、９個のＬＵＴは、対応するＣＲＡＭの中から１ビットを選択し、後段のフリップフロップＦＦへ出力する動作を１６回行う。
【００９９】
ここで、図１５に示した１６個のＥＵ０〜ＥＵ１５は、それぞれ、各ＬＵＴのＣＲＡＭのビット＃０からビット＃１５に対応する。すなわち、図１５のＥＵ０は、ＣＲＡＭ０〜ＣＲＡＭ８のビット＃０に対応し、当該ＣＲＡＭ０〜ＣＲＡＭ８のビット＃０は、それぞれ、当該ＥＵ０のイジングノードＩｎｄ０〜Ｉｎｄ８（図１６）に対応する。また、図１５のＥＵ１は、ＣＲＡＭ０〜ＣＲＡＭ８のビット＃１に対応し、当該ＣＲＡＭ０〜ＣＲＡＭ８のビット＃１は、それぞれ、当該ＥＵ１のイジングノードＩｎｄ０〜Ｉｎｄ８（図１６）に対応する。
【０１００】
イジングモデルでは、イジングノード（σｉ，σｊ）との間の相互作用を計算するので、単純な演算では、重み係数（相互作用係数）（ｗｉｊ）とσｉ，σｊ（各σ＝−１か１）を掛け合わせて総和を計算する。この時、ＣＲＡＭに格納されるデータは０，１であるので、０については、四則演算時に−１に変換する処理を実施する。総和演算の結果、エネルギーの増減を計算するが、その際、以前の値との比較を実施することで、よりエネルギー状態の低い方向となるように粒子のスピンの向きを変える。粒子のスピンの向きは、σｉ，σｊで記述されるので、演算結果で更新されたσｉ，σｊをメモリＲＡＭへ書き込む。
【０１０１】
イジングモデルでは、全粒子間の相互作用を計算し、エネルギーが最低もしくは極小になる状態を見つける。そのため、図１４に記載のＰＥは、この図に示した区分だけでは無く、ＰＥを上下左右に１イジングノードだけずらしたＰＥを定義して計算する必要がある。そのために、図１７に示したハードの基本構成を変えるのではなく、ＥＵのイジングノードの情報を格納するＣＲＡＭのメモリアドレスを変更することで、あたかも評価するイジングノード位置を変化させたかのごとく表現する。
【０１０２】
これにより、基本的なハードを固定しながら、イジングノード間の相互作用を、逐次的に、あまねく計算することが可能となる。そのための手段として、メモリＲＡＭ内の更新されたイジングノードのデータをＣＲＡＭに書き戻す際、アドレス変換部ＡＤＲＣＶを介してＣＲＡＭに格納する。たとえば、最初、ＣＲＡＭ０のビット＃０に格納されていたデータを、演算の結果、ＣＲＡＭ０のビット＃１に格納するなどが考えられる。このようにすることで、最初のイジングノードが、たとえば図１４、もしくは、図１５に記載の例では、右へ１ビットずれる形になり、相対的にＥＵがイジングノードひとつ分左へシフトすることになり、結果として、相互作用を計算する関係がイジングノードひとつ分ずれることになる。
【０１０３】
図１７に示した例では、ひとつのＰＥを計算する場合について述べたが、実際は、このＰＥが多数ＦＰＧＡ上に展開されている。そのため、他のＰＥも同様に同じ演算サイクルで計算され、演算結果をメモリ格納後、新たにＣＲＡＭへ格納するために、アドレス変換が実施される。ただし、ＰＥは、便宜上分けただけであるので、隣接するＰＥともイジングノードを介して相互作用をさせる必要がある。すなわち、他のＰＥとの間で演算結果を授受する必要がある。図１７には、そのための信号経路を簡略化して記載した。実際、データの授受には、メモリ間の転送であってもよい。メモリ間で転送後、ＣＲＡＭにセットするためのアドレス変換を実施しＣＲＡＭへ格納すればよいからである。
【０１０４】
なお、図１７には、ＣＲＡＭ書き込み回路ＣＲＷＴがＰＥ内に入っている例を示したが、このＣＲＡＭ書き込み回路ＣＲＷＴは、チップ内に集合的に集積してもかまわない。チップ内にある程度集積させることで、論理回路の集積度が向上できる効果がある。また、本実施例８の方式では、ＦＰＧＡを、いわゆる通常の意味での論理回路を集積するＬＳＩとしても使用可能であり、汎用使用においても何ら問題が生じない。以上のように、本実施例８の方式を用いることで、汎用のＣＯＴＳ（Commercial Off The Shelf）製品を使った高性能ＬＳＩの実現が可能になる。
【０１０５】
図１８は、図１７の構成を用いて演算を実施する際の全体的な動作例を示す図である。図１８において、パターンＡの状態は、イジングノードを３６個分集めてＰＥを構成し、それを、縦横に配置した状態となっている。パターンＢの状態は、そのイジングノードの集まりをイジングノード１つ分だけ右にずらしてＰＥを定義し、それを縦横に並べた状態となっている。同様に、パターンＣの状態は、イジングノードの集まりをイジングノード１つ分だけさらに右にずらしてＰＥを定義し、それを縦横に並べた状態となっている。
【０１０６】
ここで、図１８に示した動作波形図では、時刻Ｔ１にて、パターンＡの状態ですべてのＰＥを演算し、演算結果をメモリＲＡＭへ格納し、その後、アドレス変換を加えてＣＲＡＭへ格納するまでの演算がシーケンシャルに実施される。その後、時刻Ｔ２では、パターンＢの状態において、ＰＥに関するすべての演算が実施される。以下、時刻Ｔ３では、パターンＣの状態において、ＰＥに関するすべての演算が実施され、以降同様にして、イジングノード１つ分だけ上下左右にずらした演算が複数回実施され、すべてのイジングノード間の演算が実施されることになる。
【０１０７】
なお、本実施例８では、４入力のＬＵＴについて例示的に述べてきたが、ＬＵＴの入力数は４入力に限定されるものではない。入力数が５の場合は、ＥＵの数が２倍の３２個まで取れることになり、ＰＥ２つ分を、９個のＬＵＴで実現する形になるので、より高集積化ができる効果がある。このように、ＬＵＴの入力数は４入力以外であっても本実施例８の方式を適用することは可能である。
【０１０８】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。例えば、前述した実施の形態は、本発明を分かり易く説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【符号の説明】
【０１０９】
ＣＮＦＧＣ  コンフィグ制御部
ＣＲＡＭ  コンフィギュレーションメモリ
ＣＲＡＭＣ  ＣＲＡＭコントローラ
ＣＵＮＴ  データ監視部
ＤＢＵＳ  オンチップバス
ＥＶＡＬ＿ＩＦ  評価部インターフェース
ＦＰＧＡ＿ＣＨ  ＦＰＧＡチップ
ＦＰＧＡ＿ＦＡＢ  ＦＰＧＡファブリック部
ＳＴＲＧ  外部コンフィグ記憶装置
【図１】
2020053059.tif 000003
【図２】
2020053059.tif 000004
【図３】
2020053059.tif 000005
【図４】
2020053059.tif 000006
【図５】
2020053059.tif 000007
【図６】
2020053059.tif 000008
【図７】
2020053059.tif 000009
【図８】
2020053059.tif 000010
【図９】
2020053059.tif 000011
【図１０】
2020053059.tif 000012
【図１１】
2020053059.tif 000013
【図１２】
2020053059.tif 000014
【図１３】
2020053059.tif 000015
【図１４】
2020053059.tif 000016
【図１５】
2020053059.tif 000017
【図１６】
2020053059.tif 000018
【図１７】
2020053059.tif 000019
【図１８】
2020053059.tif 000020