(57)【要約】【課題】近傍の演算ノードの相互作用を演算することにより問題を解く情報処理装置を実現するにあたって、各演算ノードの演算を小さな回路規模のデジタル回路で実現する。【解決手段】隣接する演算ノードの値を入力として当該演算ノードの値を演算する情報処理装置であって、前記演算ノードは、隣接する演算ノードの値を入力として、前記入力の数に応じた値を予め設定したルックアップテーブルと、当該演算ノードの値を保持するフリップフロップと、を有し、隣接する演算ノードの値を前記ルックアップテーブルに入力して、前記ルックアップテーブルから出力された値から当該演算ノードの値を決定して、前記フリップフロップで保持する。【選択図】図８
2018022212.tif 000002
【特許請求の範囲】
【請求項１】
隣接する演算ノードの値を入力として当該演算ノードの値を演算する情報処理装置であって、
前記演算ノードは、
隣接する演算ノードの値を入力として、前記入力の数に応じた値を予め設定したルックアップテーブルと、
当該演算ノードの値を保持するフリップフロップと、を有し、
隣接する演算ノードの値を前記ルックアップテーブルに入力して、前記ルックアップテーブルから出力された値から当該演算ノードの値を決定して、前記フリップフロップで保持することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記ルックアップテーブルから出力された値を、入力されたエラー信号に応じて反転させる反転回路を有することを特徴とする情報処理装置。
【請求項３】
請求項１に記載の情報処理装置であって、
前記ルックアップテーブルは、
隣接する演算ノードの値に加えてエラー信号を入力し、当該エラー信号に応じて出力を反転させることを特徴とする情報処理装置。
【請求項４】
請求項２または請求項３に記載の情報処理装置であって、
前記エラー信号を制御するアニーリング制御回路をさらに有することを特徴とする情報処理装置。
【請求項５】
請求項１に記載の情報処理装置であって、
前記フリップフロップに初期値を設定する初期化回路をさらに有することを特徴とする情報処理装置。
【請求項６】
請求項５に記載の情報処理装置であって、
前記初期化回路は、
初期化信号を受け付けた時に、所定の値を前記フリップフロップに設定するセレクタであることを特徴とする情報処理装置。
【請求項７】
請求項１に記載の情報処理装置であって、
前記演算ノードは、フィールドプログラマブルゲートアレイ内に構成され、
ローカルインタコネクトに接続された複数の演算ノードを演算ノードブロックとし、前記演算ノードブロック同士をグローバルインタコネクトで接続することを特徴とする情報処理装置。
【請求項８】
請求項１に記載の情報処理装置であって、
前記演算ノードの入力の数よりも、少ない入力数のルックアップテーブルを複数段で接続することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、２次元平面あるいは３次元以上の空間の多数の演算ノードに解くべき問題をマッピングし、近傍の演算ノードの相互作用を演算することにより問題を解く情報処理装置に関する。
【背景技術】
【０００２】
ノイマン型コンピューティングの限界を打破すべく、さまざまな取り組みがなされている。その有力候補の一つがイジングコンピューティングであり、半導体チップを用いた実現方法が特許文献１や非特許文献１に述べられている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−１９１３４０号公報
【非特許文献】
【０００４】
【非特許文献１】M. Yamaoka et al., “A 20k-Spin Ising Chip to Solve Combinatorial Optimization Problems With CMOS Annealing,” IEEE J. Solid-State Circuits, vol. 51, no. 1, pp. 303-309, Jan. 2016.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
非特許文献１では、Fig. 4に示されているように、アナログ多数決回路により、近傍の演算ノードの相互作用を演算する。近傍の演算ノードの値と重みとの積和をとる複雑な演算を、少ないトランジスタ数で実現することができるが、ＭＯＳトランジスタの素子特性バラつきの影響を受けやすい。
【０００６】
そこで、本発明では、２次元平面あるいは３次元以上の空間の多数の演算ノードに解くべき問題をマッピングし、近傍の演算ノードの相互作用を演算することにより問題を解く情報処理装置を実現するにあたって、各演算ノードの演算を小さな回路規模のデジタル回路で実現することを目的とする。
本発明の前記並びにその他の目的と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
本発明は、隣接する演算ノードの値を入力として当該演算ノードの値を演算する情報処理装置であって、前記演算ノードは、隣接する演算ノードの値を入力として、前記入力の数に応じた値を予め設定したルックアップテーブルと、当該演算ノードの値を保持するフリップフロップと、を有し、隣接する演算ノードの値を前記ルックアップテーブルに入力して、前記ルックアップテーブルから出力された値から当該演算ノードの値を決定して、前記フリップフロップで保持する。
【発明の効果】
【０００８】
したがって、本発明は、２次元平面あるいは３次元以上の空間の多数の演算ノードに解くべき問題をマッピングし、近傍の演算ノードの相互作用を演算することにより問題を解く情報処理装置において、ルックアップテーブルにより各演算ノードの演算を行うことにより、各演算ノードの演算を小さな回路規模のデジタル回路で実現できる。
【図面の簡単な説明】
【０００９】
【図１】本発明の第１の実施例を示し、４入力演算ノードの構成の一例を示すブロック図である。
【図２】本発明の第１の実施例を示し、４入力演算ノードを２次元平面に多数配置する構成の一例を示す図である。
【図３】本発明の第１の実施例を示し、ルックアップテーブルの構成の一例を示すブロック図である。
【図４】本発明の第２の実施例を示し、６入力演算ノードの構成の一例を示すブロック図である。
【図５】本発明の第２の実施例を示し、６入力演算ノードを３次元空間に多数配置する構成の一例を示す図である。
【図６】本発明の第３の実施例を示し、４入力演算ノードを３次元空間にダイヤモンド格子状に多数設ける構成の一例を示す図である。
【図７】本発明の第４の実施例を示し、情報処理装置をフィールドプログラマブルゲートアレイで構成した一例を示すブロック図である。
【図８】本発明の第４の実施例を示し、演算ノードの構成の一例を示すブロック図である。
【図９】本発明の第４の実施例を示し、演算ノードを２枚の２次元平面に多数設ける構成の一例を示す図である。
【図１０】本発明の第５の実施例を示し、３個のルックアップテーブルを組み合わせた６入力の演算ノードの構成の一例を示すブロック図である。
【図１１】本発明の第６の実施例を示し、３個のルックアップテーブルを組み合わせた８入力の演算ノードの構成の一例を示すブロック図である。
【図１２】本発明の第７の実施例を示し、４個のルックアップテーブルを組み合わせた９入力の演算ノードの構成の一例を示すブロック図である。
【図１３】本発明の第８の実施例を示し、４入力ルックアップテーブルを組み合わせた８入力の演算ノードの構成の一例を示すブロック図である。
【図１４】本発明の第９の実施例を示し、フィールドプログラマブルゲートアレイで情報処理装置を構成する設計処理の一例を示すフローチャートである。
【図１５】本発明の第９の実施例を示し、設計処理のイメージを示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態を添付図面に基づいて説明する。
【実施例１】
【００１１】
図１は、本発明による４入力演算ノードの構成の一例を示すブロック図である。図示の４入力演算ノードＣＮは、半導体製の情報処理装置の一部を構成する演算ノードである。
【００１２】
４入力演算ノードＣＮは、４入力ルックアップテーブルＬＵＴ４と、排他的ＯＲ回路ＸＯＲと、フリップフロップＤＦＦからなる。４入力ルックアップテーブルを用いて演算することが特長である排他的ＯＲ回路ＸＯＲは、エラー信号ＥＲＲが「１」の時に４入力ルックアップテーブルＬＵＴ４から出力された演算結果ＮＣの値を反転させる。
【００１３】
これにより、非特許文献１で述べられているようなアニーリング動作が可能になる。排他的ＯＲ回路ＸＯＲの出力はフリップフロップＤＦＦに入力される。フリップフロップＤＦＦは、他の演算ノードとの同期のために設けられており、入力されたクロックＣＬＫで、保持された値を出力する。
【００１４】
４入力ルックアップテーブルＬＵＴ４の入力ＮＯ＿Ｕ、ＮＯ＿Ｄ、ＮＯ＿Ｌ、ＮＯ＿Ｒには、図２で隣接する演算ノードＣＮ＿Ｕ、ＣＮ＿Ｄ、ＣＮ＿Ｌ、ＣＮ＿Ｒの値が入力される。
【００１５】
図２は、図１に示した４入力演算ノードＣＮを２次元平面で格子状に配置する情報処理装置の構成例を示す。
【００１６】
図中白丸が４入力演算ノードＣＮ〜ＣＮ＿Ｒであり、ここでは説明を簡易にするため９個の４入力演算ノードしか示していないが、実際には多数の４入力演算ノードを配置する。４入力演算ノード間の矢印が、相互関係を持たせることを示している。この図は概念的なものであり、情報処理装置に実装する際に、これに沿った配置にする必要はない。解くべき問題を、例えば特許文献１に述べられているような手法で、この２次元平面にマッピングし、隣接する４入力演算ノードＣＮ＿Ｕ〜ＣＮ＿Ｒの相互作用を演算することにより所定の問題を解く。
【００１７】
各４入力演算ノードＣＮは、−１か＋１のいずれかの値ＮＶを持ち、０か１のバイナリの値ＮＯで出力する。値ＮＶと出力ＮＯは、（１）式の関係を有する。
【００１８】
NV = 2 ・ NO - 1  ………（１）
【００１９】
着目する４入力演算ノードＣＮには、４個の４入力演算ノードＣＮ＿Ｕ，ＣＮ＿Ｄ，ＣＮ＿Ｌ，ＣＮ＿Ｒが隣接する。これらの隣接４入力演算ノードの値をＮＶ＿Ｕ，ＮＶ＿Ｄ，ＮＶ＿Ｌ，ＮＶ＿Ｒとし、隣接４入力演算ノードから４入力演算ノードＣＮへの相関関係を示す重みをＩ＿Ｕ，Ｉ＿Ｄ，Ｉ＿Ｌ，Ｉ＿Ｒとする。また、４入力演算ノードＣＮ自身が持ち、オフセットとなる重みをＩＳとする。ここで、これらの重みは、任意の実数である。
【００２０】
この時、以下の（２）式の積和演算の結果ＳＮを判定し、負であればＮＶを−１、ＮＯを０とし、０または正であればＮＶを＋１、ＮＯを１とする。
【００２１】
SN = IS + NV_U ・ I_U + NV_D ・ I_D + NV_L ・ I_L + NV_R ・ I_R  ……（２）
【００２２】
ただし、エラー信号ＥＲＲが１の時には、演算結果ＳＮを反転させる。
【００２３】
図３は、４入力ルックアップテーブルＬＵＴ４の構成の一例を示すブロック図である。１６個のメモリセルＭＣ＿０〜ＭＣ＿Ｆと、１５個の２入力セレクタＳＥＬ２からなる。メモリセルＭＣ＿０〜ＭＣ＿Ｆに蓄積された値を、４個の入力ＩＮ＿０〜ＩＮ＿３に応じて、２入力セレクタＳＥＬ２で選択して、出力ＯＵＴとする。このように、２以上の自然数Ｎに対して、Ｎ入力ルックアップテーブルは、２のＮ乗個のメモリセルと、（２のＮ乗−１）個の２入力セレクタで構成できる。
【００２４】
図１の４入力演算ノードＣＮで４入力ルックアップテーブルＬＵＴ４は、隣接する４個の演算ノードの出力ＮＯ＿Ｕ，ＮＯ＿Ｄ，ＮＯ＿Ｌ，ＮＯ＿Ｒが入力され、ＮＣに出力する。
【００２５】
バイナリの４入力の１６通りに対し、設定する重みに対する上記（２）式の判定結果を、４入力ルックアップテーブルＬＵＴ４内の１６個のメモリセルＭＣ＿０〜ＭＣ＿Ｆに予め蓄積しておくことにより、テーブルのルックアップによって所望の演算が実現できる。なお、図３に示した４入力ルックアップテーブルＬＵＴ４の４個の入力ＩＮ＿０〜ＩＮ＿３は、図２に示した入力ＮＯ＿Ｕ、ＮＯ＿Ｄ、ＮＯ＿Ｌ、ＮＯ＿Ｒが対応する。
【００２６】
この演算は、重み次第で複雑な論理式となるが、ルックアップテーブルを用いることにより、任意の実数の重みに対応できる。デジタル回路であるため、ＣＭＯＳ回路で実現する際、ＭＯＳトランジスタの素子特性バラつきの影響を受けにくく、さらに、微細プロセスを用いることで集積度を向上させることができる。
【００２７】
各４入力演算ノードＣＮが、ランダムな値を保持している状態から、上記のような演算を繰り返すことにより、例えばイジングモデルであれば基底状態を探索でき、所定の問題を解くことができる。その際、ローカルミニマムに陥る恐れがあるため、意図的に所望の４入力演算ノードにエラー（ＥＲＲ）を注入するアニーリングと呼ばれている処理を行う。
【００２８】
説明を簡易にするため、図１では図示していないが、フリップフロップＤＦＦには初期値を設定する機能が含まれる。例えば、多数の４入力演算ノードＣＮのフリップフロップＤＦＦを、リセット時の値を０とするものと、１とするものをランダムに作り分ける。あるいは、多数の４入力演算ノードＣＮのフリップフロップＤＦＦの間で順に信号を送っていくスキャンチェーンを設け、スキャンチェーンにランダムなデータを入力する初期化回路（パス）を加えることにより、フリップフロップＤＦＦをランダムに初期化する。
【００２９】
また、図１では、４入力ルックアップテーブル４ＬＵＴの演算結果ＮＣを反転させるために、排他的ＯＲ回路ＸＯＲを設けているが、ＡＮＤ回路あるいはＯＲ回路を用いることにより、０あるいは１に固定することも可能である。
【００３０】
以上のように、本実施例１によれば、２次元平面の空間で多数の４入力演算ノードＣＮに解くべき問題をマッピングし、隣接する４入力演算ノードＣＮの相互作用を演算することにより問題を解く情報処理装置において、４入力ルックアップテーブルＬＵＴ４に予め相互作用の係数を保持させておくことで、テーブルのルックアップで演算を実現できる。これにより、各４入力演算ノードＣＮの演算を小さな回路規模のデジタル回路で実現できる。
【００３１】
ルックアップテーブルＬＵＴは、入力数Ｎに応じた数（２Ｎ）のメモリセルＭＣを有し、各メモリセルＭＣには、入力される隣接演算ノードの値に応じた相互作用係数を予め設定しておく。これにより、ルックアップテーブルＬＵＴに隣接演算ノードの値を入力すると、入力数Ｎに応じた２Ｎ通りの中から相互作用係数を得て当該演算ノードＣＮの値を算出することができ、Ｎ入力演算ノードの演算を小さな回路規模で実現可能となる。
【実施例２】
【００３２】
図４は、本発明の第２の実施例を示し、６入力演算ノードＣＮの構成の一例を示すブロック図である。６入力演算ノードＣＮは、６入力ルックアップテーブルＬＵＴ６と、排他的ＯＲ回路ＸＯＲと、フリップフロップＤＦＦからなる。６入力ルックアップテーブルＬＵＴ６は、前記実施例１の図３と同様にして、２の６乗である６４個のメモリセルと、６３個の２入力セレクタで構成することができる。
【００３３】
６入力ルックアップテーブルＬＵＴ６は、６つの入力ＮＯ＿Ｆ〜ＮＯ＿Ｒと、ひとつの出力を有し、出力は排他的ＯＲ回路ＸＯＲの２つの入力のうち一方に入力される。排他的ＯＲ回路ＸＯＲの２つの入力のうち他方には、出力を反転させるエラー信号ＥＲＲが入力される。
【００３４】
排他的ＯＲ回路ＸＯＲの出力は、フリップフロップＤＦＦの２つの入力のうち一方の入力に接続され、他方の入力には、他の演算ノードＣＮと出力ＮＯを同期させるためにクロックＣＬＫで入力される。
【００３５】
図５は、図４の６入力演算ノードＣＮを３次元空間で立方格子状に配置する構成例を、概念的に示す。図中白丸が６入力演算ノードＣＮであり、ここでは説明を簡易にするため２７個しか示していないが、多数配置する。
【００３６】
６入力演算ノードＣＮ間の矢印が、相互関係を持たせることを示しており、着目する６入力演算ノードＣＮについては、隣接する６個の演算ノードＣＮ＿Ｆ，ＣＮ＿Ｂ，ＣＮ＿Ｕ，ＣＮ＿Ｄ，ＣＮ＿Ｌ，ＣＮ＿Ｒとの間にある。
【００３７】
これらの隣接する６入力演算ノードＣＮ＿Ｆ〜ＣＮ＿Ｒの値を、ＮＶ＿Ｆ，ＮＶ＿Ｂ，ＮＶ＿Ｕ，ＮＶ＿Ｄ，ＮＶ＿Ｌ，ＮＶ＿Ｒとし、６入力演算ノードＣＮへの相関関係を示す重みをＩ＿Ｆ，Ｉ＿Ｂ，Ｉ＿Ｕ，Ｉ＿Ｄ，Ｉ＿Ｌ，Ｉ＿Ｒとし、６入力演算ノードＣＮ自身が持ちオフセットとなる重みをＩＳとする。なお、図４の６つの入力ＮＯ＿Ｆ〜ＮＯ＿Ｒには、隣接する演算ノードＣＮ＿Ｆ〜ＣＮ＿Ｒの出力ＮＶ＿Ｆ〜ＮＶ＿Ｒが入力される。
【００３８】
ここで、これらの重みは、任意の実数である。また、次に示す（３）式の積和演算の結果ＳＮ６を判定し、負であればＮＶを−１、ＮＯを０とし、０または正であればＮＶを＋１、ＮＯを１とする。
【００３９】
SN6 = IS + NV_F ・ I_F + NV_B ・ I_B + NV_U ・ I_U + NV_D ・ I_D + NV_L ・ I_L + NV_R ・ I_R  ………（３）
【００４０】
上記（３）式の演算は、６入力ルックアップテーブルＬＵＴ６内のメモリセル（図示省略）を、重みＩ＿Ｆ〜Ｉ＿Ｒに応じた値に設定することにより実現する。
【００４１】
このように、３次元空間に解くべき問題をマッピングすることにより、２次元平面にマッピングするよりも、マッピングする問題の制約が緩和される。その際、演算ノードＣＮの入力数が増加するが、前記実施例１と同様に、相互作用係数を予め設定した６入力ルックアップテーブルＬＵＴ６を用いて演算を行うことにより、入力数を増やしても小さな回路規模のデジタル回路で実現できる。
【実施例３】
【００４２】
図６は、本発明の第３の実施例を示し、４入力演算ノードを３次元空間でダイヤモンド格子状に多数配置する構成の一例を示す図である。ダイヤモンド格子では配位数が４であり、着目する演算ノードＣＮに隣接する４入力演算ノードはＣＮ＿０〜ＣＮ＿３の４個である。そのため、前記実施例１の図１に示したような４入力演算ノードＣＮを用いることができる。
【００４３】
前述のように、６入力ルックアップテーブルは、４入力ルックアップテーブルの約４倍の回路規模であるので、図４の６入力演算ノードは図１の４入力演算ノードの約４倍の回路規模である。図６のようなダイヤモンド格子状に演算ノードＣＮを配置することで、３次元空間で規則的に演算ノードを概念的に配置する構成を、回路規模の小さい演算ノードを用いて実現できる。
【実施例４】
【００４４】
図７は、本発明の第４の実施例を示し、情報処理装置をフィールドプログラマブルゲートアレイＦＰＧＡで構成した一例を示すブロック図である。
【００４５】
フィールドプログラマブルゲートアレイＦＰＧＡは、演算ノードブロックＣＮＢを複数有し、グローバルインタコネクトＧＩＣで演算ノードブロックＣＮＢ同士を相互に接続する。
【００４６】
演算ノードブロックＣＮＢ内には、複数の演算ノードＣＮＵとブロック入出力コントローラＢＩＯＣがローカルインタコネクトＬＩＣに接続される。ローカルインタコネクトＬＩＣは、ブロック入出力コントローラＢＩＯＣ介して、グローバルインタコネクトＧＩＣに接続する。
【００４７】
さらに、ＦＰＧＡは、外部との入出力を制御する入出力コントローラＩＯＣと、フィールドプログラマブルゲートアレイＦＰＧＡのコンフィグレーションに用いるコンフィグレーションコントローラＣＦＧＣと、前述のアニーリング処理を制御するアニーリングコントローラＡＮＬＣとを含む。
【００４８】
図７のフィールドプログラマブルゲートアレイＦＰＧＡでは、複数の演算ノードＣＮＵをローカルインタコネクトＬＩＣで接続して演算ノードブロックＣＮＢとしてグループ化する。演算ノードブロックＣＮＢ間をグローバルインタコネクトＧＩＣで接続して演算ノードブロックＣＮＢを階層的に配置する。
【００４９】
図８は、演算ノードＣＮＵの構成の一例を示すブロック図である。演算ノードＣＮＵは、６入力ルックアップテーブルＬＵＴ６と、２入力セレクタＳＥＬ２と、フリップフロップＤＦＦからなる。フリップフロップＤＦＦは、同期処理のために設けており、入力されたクロックＣＬＫで出力が制御される。
【００５０】
２入力セレクタＳＥＬ２の入力には、６入力ルックアップテーブルＬＵＴ６の出力ＮＣ＿Ｅと、初期値ＮＯ０が入力される。２入力セレクタＳＥＬ２のセレクト信号は、初期化信号ＩＮＩＴにより制御され、初期化する際に初期値ＮＯ０をフリップフロップＤＦＦに送る。フリップフロップＤＦＦは、前記実施例１と同様であり、２入力セレクタＳＥＬ２の出力をクロックＣＬＫに応じて出力ＮＯに送信する。
【００５１】
６入力ルックアップテーブルＬＵＴ６は、前記実施例３と同様の６入力であるが、隣接する５つの演算ノードの入力ＮＯ＿Ｂ〜ＮＯ＿Ｒに加えて、エラー信号ＥＲＲを６入力ルックアップテーブルＬＵＴ６へ入力する点が前記実施例３と相違する。６入力ルックアップテーブルＬＵＴ６は、前記従来例３の排他的ＯＲ回路ＸＯＲに代わって、入力されたエラー信号ＥＲＲに応じて出力を反転させることができる。
【００５２】
図９は、図８の演算ノードＣＮＵを２枚の２次元平面で格子状に配置する構成の一例を示す図である。この配置は、前記非特許文献１で述べられているものと同じ配置である。
【００５３】
図中白丸が演算ノードＣＮＵであり、ここでは説明を簡易にするため１８個の演算ノードしか示していないが、多数配置する。演算ノード間の矢印が、相互関係を持たせることを示している。着目する演算ノードＣＮＵについては、隣接する５個の演算ノードＣＮＵ＿Ｂ，ＣＮＵ＿Ｕ，ＣＮＵ＿Ｄ，ＣＮＵ＿Ｌ，ＣＮＵ＿Ｒとの間にある。
【００５４】
６入力ルックアップテーブルＬＵＴ６に、隣接する５個の演算ノードの出力ＮＯ＿Ｂ，ＮＯ＿Ｕ，ＮＯ＿Ｄ，ＮＯ＿Ｌ，ＮＯ＿Ｒに加え、エラー信号ＥＲＲが入力されている。
【００５５】
隣接演算ノードの値をＮＶ＿Ｂ，ＮＶ＿Ｕ，ＮＶ＿Ｄ，ＮＶ＿Ｌ，ＮＶ＿Ｒとし、演算ノードＣＮＵへの相関関係を示す重みをＩ＿Ｂ，Ｉ＿Ｕ，Ｉ＿Ｄ，Ｉ＿Ｌ，Ｉ＿Ｒとし、演算ノードＣＮＵ自身が持ちオフセットとなる重みをＩＳとする。ここで、これらの重みは、任意の実数である。次に示す（４）式の積和演算の結果ＳＮ５を判定する。
【００５６】
SN5 = IS + NV_B ・ I_B + NV_U ・ I_U + NV_D ・ I_D + NV_L ・ I_L + NV_R ・ I_R
………（４）
【００５７】
エラー信号ＥＲＲが０の時、結果ＳＮ５が負であれば出力ＮＯを０とし、結果ＳＮ５が０または正であれば出力ＮＯを１とする。エラー信号ＥＲＲが１の時には逆に、結果ＳＮ５が負であれば出力ＮＯを１とし、結果ＳＮ５が０または正であれば出力ＮＯを０とする。この演算は、６入力ルックアップテーブルＬＵＴ６内のメモリセル（図示省略）を、重みに応じた値に設定することにより実現する。
【００５８】
図８の演算ノードＣＮＵの構成は、近年の高集積な市販フィールドプログラマブルゲートアレイのコアファブリックＦＰＧＡのロジックモジュールの単位構成に合致しており、効率的に実装できる。近年の近年の高集積な市販フィールドプログラマブルゲートアレイＦＰＧＡでは、ロジックモジュールの単位構成に６入力ルックアップテーブルＬＵＴ６が含まれている。
【００５９】
６入力ルックアップテーブルＬＵＴ６を効率的に使うため、エラー信号ＥＲＲによる反転も６入力ルックアップテーブルＬＵＴ６で実現し、前記実施例１の図１や図４に示した演算ノードでの排他的ＯＲ回路ＸＯＲ２を不要にしている。また、エラー信号ＥＲＲの制御は、アニーリングコントローラＡＮＬＣで行う。
【００６０】
近年のフィールドプログラマブルゲートアレイＦＰＧＡでは、コンフィグレーションメモリ（ＣＲＡＭ）へのエラー注入機能を有するものもあり、その機能を活かしてアニーリング処理を行うことも可能である。また、部分的にコンフィグレーションメモリを書き換えることにより、アニーリング処理を行うことも可能である。その場合、アニーリングコントローラＡＮＬＣにより、コンフィグレーションコントローラＣＦＧＣを制御して、コンフィグレーションメモリへのエラー注入を行う。
【００６１】
本実施例４においても、３次元空間で規則的に演算ノードＣＮＵを配置する構成を、回路規模の小さい演算ノードを用いて実現できる。
【実施例５】
【００６２】
図１０は、本発明の第５の実施例を示し、４入力ルックアップテーブルを３つ組み合わせた６入力演算ノードの構成の一例を示すブロック図である。図１０の演算ノードは、前記実施例４に示した演算ノードＣＮＵとして適用可能である。
【００６３】
図１０の演算ノードＣＮは、３個の４入力ルックアップテーブルＬＵＴ４＿０〜ＬＵＴ４＿２と、排他的ＯＲ回路ＸＯＲと、フリップフロップＤＦＦからなる。前記実施例２の図４に示した６入力演算ノードと同様に、図５のような３次元空間で立方格子状に演算ノードを配置することができる。
【００６４】
実施例２の図５と同様に、着目する演算ノードＣＮに対し、隣接する６個の演算ノードＣＮ＿Ｆ，ＣＮ＿Ｂ，ＣＮ＿Ｕ，ＣＮ＿Ｄ，ＣＮ＿Ｌ，ＣＮ＿Ｒからの相関関係を判定して、出力ＮＯを得る。これらの隣接演算ノードの値をＮＶ＿Ｆ，ＮＶ＿Ｂ，ＮＶ＿Ｕ，ＮＶ＿Ｄ，ＮＶ＿Ｌ，ＮＶ＿Ｒとし、演算ノードＣＮへの相関関係を示す重みをＩ＿Ｆ，Ｉ＿Ｂ，Ｉ＿Ｕ，Ｉ＿Ｄ，Ｉ＿Ｌ，Ｉ＿Ｒとし、演算ノードＣＮ自身が持ちオフセットとなる重みをＩＳとする。
【００６５】
ここで、これらの重みは、−１，  ０，  ＋１のいずれかの値とする。以下の（５）〜（７）式の積和演算の結果ＳＮ６を判定し、負であればＮＶを−１、ＮＯを０とし、０または正であればＮＶを＋１、ＮＯを１とする。
【００６６】
６入力を、４入力ルックアップテーブルＬＵＴ４＿２、ＬＵＴ４＿１に入力される４つと、４入力ルックアップテーブルＬＵＴ４＿０に入力される２つに分けて考える。
【００６７】
SU = IS + NV_F ・ I_F + NV_B ・ I_B + NV_U ・ I_U + NV_D ・ I_D  ………（５）
SL = NV_L ・ I_L + NV_R ・ I_R  ………（６）
とすると、結果ＳＮ６は、
ＳＮ６  ＝  ＳＵ  ＋  ＳＬ    ………（７）
となる。
【００６８】
演算ノードＣＮの出力ＮＯは−１、＋１のいずれかであり、重みは−１、０、＋１のいずれかであるので、上記（７）式の変数ＳＵは−５から＋５の整数のいずれかとなり、変数ＳＬは−２から＋２の整数のいずれかとなる。
【００６９】
さらに、重みＩ＿Ｌ、Ｉ＿Ｒの値について、両方が０ではないか両方が０である場合と、いずれか一方が０である場合に、場合分けして考える。
【００７０】
重みＩ＿Ｌ、Ｉ＿Ｒの両方が０ではないか両方が０である場合、変数ＳＬは−２、０、＋２のいずれかとなる。このとき、結果ＳＮ６が負であるか、０または正であるかの判定による４入力ルックアップテーブルＬＵＴ４＿０の出力ＮＣ＿０は、表１に示すようになる。
【００７１】
【表１】
2018022212.tif 000003
【００７２】
すなわち、変数ＳＵを表１の４通りに分ければ良い。４通りは２ビットで表現できるので、次の表２に示すように、４入力ルックアップテーブルＬＵＴ４＿２、ＬＵＴ４＿１の出力ＮＣ＿２、ＮＣ＿１に割り付ける。
【００７３】
【表２】
2018022212.tif 000004
【００７４】
表１と表２は、３個の４入力ルックアップテーブルＬＵＴ４＿０〜ＬＵＴ４＿２のメモリセルを、所与の重みの値に応じて設定することにより実現できる。
【００７５】
重みＩ＿Ｌ、Ｉ＿Ｒの一方だけが０である場合、変数ＳＬは−１、＋１のいずれかとなる。このとき、結果ＳＮ６が負であるか、０または正であるかの判定による４入力ルックアップテーブルＬＵＴ４＿０の出力ＮＣ＿０は、次の表３に示すようになる。
【００７６】
【表３】
2018022212.tif 000005
【００７７】
すなわち、変数ＳＵを表３に示した３通りに分ければ良い。３通りは２ビットで表現できるので、表４に示すように、４入力ルックアップテーブルＬＵＴ４＿２、ＬＵＴ４＿１の出力ＮＣ＿２、ＮＣ＿１に割り付ける。
【００７８】
【表４】
2018022212.tif 000006
【００７９】
表３と表４も、３個の４入力ルックアップテーブルＬＵＴ４＿０〜ＬＵＴ４＿２のメモリセルを、所与の重みの値に応じて設定することにより実現できる。
【００８０】
以上のように、重みの値を−１、０、＋１のいずれかに限定することにより、４入力ルックアップテーブルＬＵＴ４を３個用いて６入力演算ノードＣＮを実現できる。前記実施例２の図４に示した６入力演算ノードＣＮで用いている６入力ルックアップテーブルＬＵＴ６は、４入力ルックアップテーブルＬＵＴ４の約４倍の回路規模であるため、図４に示した６入力演算ノードＣＮに比べて図１０の６入力演算ノードＣＮは約４分の３の回路規模となる。実施例２で述べたように、演算ノードＣＮは多数設けるため、この回路規模の削減効果は大きい。
【００８１】
なお、ここでは説明を簡単にするため、重みＩＳ、Ｉ＿Ｆ、Ｉ＿Ｂ、Ｉ＿Ｕ、Ｉ＿Ｄ、Ｉ＿Ｌ、Ｉ＿Ｒの値が全て−１、０、＋１のいずれかであるとしたが、４入力ルックアップテーブルＬＵＴ＿０のＮＣ＿０に入力されるＩ＿Ｌ、Ｉ＿Ｒの二つが、−１、０、＋１に限定することなく、同じ３通りの値のいずれかをとるならば、図１０に示した６入力演算ノードＣＮを構成できる。重みＩＳ、Ｉ＿Ｆ、Ｉ＿Ｂ、Ｉ＿Ｕ、Ｉ＿Ｄについては、任意の実数にできる。
【００８２】
以上のように、演算ノードＣＮの入力の数よりも、少ない入力数のルックアップテーブルＬＵＴを複数段で接続することで、情報処理装置全体の回路規模を削減することが可能となる。
【実施例６】
【００８３】
図１１は、本発明の第６の実施例を示し、６入力ルックアップテーブルと４入力ルックアップテーブルを組み合わせた８入力演算ノードＣＮの構成例を示すブロック図である。
【００８４】
本実施例６の演算ノードＣＮは、２個の６入力ルックアップテーブルＬＵＴ６＿２、ＬＵＴ６＿１と、４入力ルックアップテーブルＬＵＴ４＿０と排他的ＯＲ回路ＸＯＲと、フリップフロップＤＦＦからなる。
【００８５】
着目する演算ノードＣＮに対し、他の８個の演算ノードからの相関関係を判定して、出力ＮＯを得る。これらの演算ノードＣＮの値をＮＶ＿０〜ＮＶ＿７とし、それらをバイナリの演算ノード出力ＮＯ＿０〜ＮＯ＿７として入力する。また、演算ノードＣＮへの相関関係を示す重みをＩ＿０〜Ｉ＿７とし、演算ノードＣＮ自身が持ちオフセットとなる重みをＩＳとする。
【００８６】
ここで、これらの重みＩＳは、−１、０、＋１のいずれかの値とする。以下の（８）式の積和演算の結果ＳＮ８を判定し、負であればＮＶを−１、ＮＯを０とし、０または正であればＮＶを＋１、ＮＯを１とする。
SN8 = IS + NV_7 ・ I_7 + NV_6 ・ I_6 + NV_5 ・ I_5 + NV_4 ・ I_4 + NV_3 ・I_3 + NV_2 ・ I_2 + NV_1 ・ I_1 + NV_0 ・I_0  ………（８）
【００８７】
８入力を、６入力ルックアップテーブルＬＵＴ６＿２、ＬＵＴ６＿１に入力される６つと、４入力ルックアップテーブルＬＵＴ４＿０に入力される２つに分けて考える。
【００８８】
SU = IS + NV_7 ・ I_7 + NV_6 ・ I_6 + NV_5 ・ I_5 + NV_4 ・ I_4 + NV_3 ・ I_3 + NV_2 ・ I_2  ………（９）
SL = NV_1 ・ I_1 + NV_0 ・ I_0    ………（１０）
とすると、上記（８）式の結果ＳＮ８は、
ＳＮ８  ＝  ＳＵ  ＋  ＳＬ  ………（１１）
となる。
【００８９】
なお、上記（９）式と（１０）式は、前記実施例５の（５）式及び（６）式に相当するため同じ変数ＳＵ、ＳＬを用いている。変数ＳＵは−７から＋７の整数のいずれかとなり、変数ＳＬは−２から＋２の整数のいずれかとなる。
【００９０】
実施例５と同様に、さらに、重みＩ＿１、Ｉ＿０の値を、両方が０ではないか両方が０である場合と、いずれか一方が０である場合に、場合分けして考える。両方が０ではないか両方が０である場合、上記表１と表２に示すように割り付ける。また、一方が０である場合、上記表３と表４に示すように割り付ける。これらの表は、２個の６入力ルックアップテーブルＬＵＴ６＿２、ＬＵＴ６＿１と、４入力ルックアップテーブルＬＵＴ４＿０のメモリセルを、重みの値に応じて設定することにより実現できる。
【００９１】
以上のように、重みの値を−１、０、＋１のいずれかに限定することにより、８入力と入力数が多い演算ノードＣＮを比較的小さな回路規模で実現できる。８入力演算ノードＣＮは、４次元空間に解くべき問題をマッピングする場合に好適である。なお、重みＩＳ、Ｉ＿２〜Ｉ＿７については、任意の実数であっても、図１１の８入力演算ノードＣＮを実現できる。
【００９２】
４入力ルックアップテーブルＬＵＴ４＿０は、６入力ルックアップテーブルを使用することも可能なのは、言うまでもない。６入力ルックアップテーブルをロジックモジュールの単位構成としているフィールドプログラマブルゲートアレイに実装する場合、それを４入力ルックアップテーブルＬＵＴ４＿０に用いることができる。そのような場合、前記実施例４の図８に示した演算ノードＣＮと同様に、エラー信号ＥＲＲによる反転も６入力ルックアップテーブルで実現し、排他的ＯＲ回路ＸＯＲ２を削除することも可能である。
【００９３】
本実施例６においても、４次元空間等で規則的に演算ノードＣＮを配置する構成を、回路規模の小さい演算ノードを用いて実現できる。
【実施例７】
【００９４】
図１２は、本発明の第７の実施例を示し、６入力ルックアップテーブルを組み合わせた９入力演算ノードＣＮの構成の一例を示すブロック図である。図１２の演算ノードＣＮは、前記実施例４に示した演算ノードＣＮＵとして適用可能である。
【００９５】
本実施例７の演算ノードＣＮは、４個の６入力ルックアップテーブルＬＵＴ６＿０〜ＬＵＴ６＿３と排他的ＯＲ回路ＸＯＲと、フリップフロップＤＦＦからなる。本実施例７の演算ノードＣＮは、着目する演算ノードＣＮに対し、隣接する他の８個の演算ノードからの相関関係を判定して、出力ＮＯを得る。
【００９６】
これらの隣接する演算ノードＣＮの値をＮＶ＿０〜ＮＶ＿８とし、それらをバイナリの演算ノード出力ＮＯ＿０〜ＮＯ＿８として当該演算ノードＣＮに入力する。また、演算ノードＣＮへの相関関係を示す重みをＩ＿０〜Ｉ＿８とし、演算ノードＣＮ自身が持ちオフセットとなる重みをＩＳとする。
【００９７】
ここで、これらの重みは、−１、０、＋１のいずれかの値とする。次の（１２）式の積和演算の結果ＳＮ９を判定し、負であればＮＶを−１、ＮＯを０とし、０または正であればＮＶを＋１、ＮＯを１とする。
【００９８】
SN9 = IS + NV_8 ・ I_8 + NV_7 ・ I_7 + NV_6 ・ I_6 + NV_5 ・ I_5 + NV_4 ・ I_4 + NV_3 ・ I_3 + NV_2 ・ I_2 + NV_1 ・ I_1 + NV_0 ・ I_0    ………（１２）
９入力を、６入力ルックアップテーブルＬＵＴ６＿１〜ＬＵＴ６＿３に入力される６つと、６入力ルックアップテーブルＬＵＴ６＿０に入力される２つに分けて考える。
【００９９】
SU6 = IS + NV_8 ・ I_8 + NV_7 ・ I_7 + NV_6 ・ I_6 + NV_5 ・ I_5 + NV_4 ・ I_4 + NV_3 ・ I_3    ………（１３）
SL3 = NV_2 ・ I_2 + NV_1 ・ I_1 + NV_0 ・ I_0    ………（１４）
とすると、（１２）式の結果ＳＮ９は、
ＳＮ９  ＝  ＳＵ６  ＋  ＳＬ  ３………（１５）
【０１００】
となる。結果ＳＵ６は−７から＋７の整数のいずれかとなり、変数ＳＬ３は−３から＋３の整数のいずれかとなる。
【０１０１】
さらに、重みＩ＿０〜Ｉ＿２の値について、いずれも０ではないか２個が０である場合と、いずれか１個が０である場合に、場合分けして考える。いずれも０ではないか２個が０である場合には、ＳＬ３は−３、−１、＋１、＋３のいずれかとなる。このとき、ＳＮ９が負であるか、０または正であるかの判定による６入力ルックアップテーブルＬＵＴ６＿０の出力Ｎ６＿０は、表５に示すようになる。
【０１０２】
【表５】
2018022212.tif 000007
【０１０３】
すなわち、結果ＳＵ６を表５の５通りに分ければ良い。５通りは３ビットで表現できるので、表６に示すように、６入力ルックアップテーブルＬＵＴ６＿１〜ＬＵＴ６＿３の出力Ｎ６＿１〜Ｎ６＿３に割り付ける。
【０１０４】
【表６】
2018022212.tif 000008
【０１０５】
表５と表６は、４個の６入力ルックアップテーブルＬＵＴ６＿０〜ＬＵＴ６＿３のメモリセルを、所与の重みの値に応じて設定することにより実現できる。
【０１０６】
いずれか１個が０である場合、ＳＬ３は−２、０、＋２のいずれかとなる。このとき、６入力ルックアップテーブルＬＵＴ６＿０の出力ＮＣ＿０は、表７に示すようになる。
【０１０７】
【表７】
2018022212.tif 000009
【０１０８】
すなわち、結果ＳＵ６を表７の４通りに分ければ良い。４通りは２ビットで表現できるので、表８に示すように、６入力ルックアップテーブルＬＵＴ６＿３の出力Ｎ６＿３を０として、６入力ルックアップテーブルＬＵＴ６＿２、ＬＵＴ６＿１の出力Ｎ６＿２、Ｎ６＿１に割り付ける。
【０１０９】
【表８】
2018022212.tif 000010
【０１１０】
前記表７と表８も、４個の６入力ルックアップテーブルＬＵＴ６＿０〜ＬＵＴ６＿３のメモリセルを、所与の重みの値に応じて設定することにより実現できる。
【０１１１】
以上のように、重みの値を−１、０、＋１のいずれかに限定することにより、６入力ルックアップテーブル４個を用いて９入力と入力数が多い演算ノードＣＮを比較的小さな回路規模で実現できる。９入力演算ノードＣＮは、二つの４次元空間を連結させて解くべき問題をマッピングする場合に好適である。なお、重みＩＳ、Ｉ＿３〜Ｉ＿８については、任意の実数であっても、図１２の９入力演算ノードＣＮを実現できる。
【０１１２】
本実施例７においても、多次元空間等で規則的に演算ノードＣＮを配置する構成を、回路規模の小さい演算ノードＣＮを用いて実現できる。
【実施例８】
【０１１３】
図１３は、本発明の第８の実施例を示し、４入力ルックアップテーブルを組み合わせた８入力演算ノードＣＮの構成例を示す。演算ノードＣＮは、１０個の４入力ルックアップテーブルＬＵＴ４＿０、ＬＵＴ４＿２〜ＬＵＴ４＿Ａと、論理ゲートＣＧと、排他的ＯＲ回路ＸＯＲと、フリップフロップＤＦＦからなる。
【０１１４】
論理ゲートＣＧは、出力ＮＣ＿４を反転させて出力ＮＣ＿３とのＡＮＤをとり、ＮＣ＿１に出力する。ＣＭＯＳインバータと２入力ＮＯＲ回路で構成できるが、２入力ルックアップテーブルで実現することもできる。
【０１１５】
前記実施例６の図１１に示した演算ノードＣＮと同様に、着目する演算ノードＣＮに対し、他の８個の演算ノードからの相関関係を判定して、出力ＮＯを得る。これらの演算ノードＣＮの値をＮＶ＿０〜ＮＶ＿７とし、それらをバイナリの演算ノード出力ＮＯ＿０〜ＮＯ＿７として入力する。
【０１１６】
また、演算ノードＣＮへの相関関係を示す重みをＩ＿０〜Ｉ＿７とし、演算ノードＣＮ自身が持ちオフセットとなる重みをＩＳとする。ここで、これらの重みは、−１、０、＋１のいずれかの値とする。前記（８）式の積和演算の結果ＳＮ８を判定し、負であればＮＶを−１、ＮＯを０とし、０または正であればＮＶを＋１、ＮＯを１とする。
【０１１７】
以下では、演算ノードＣＮの処理を、２段階で場合分けして考える。まず、実施例６と同様に、８入力を４入力ルックアップテーブルＬＵＴ４＿２〜ＬＵＴ４＿Ａに入力される６つの入力と、４入力ルックアップテーブルＬＵＴ４＿０に入力される２つの入力に分けて考える。すなわち、前記（１１）式のように、上記（８）式の結果ＳＮ８を、前記（９）式のＳＵと、前記（１０）式のＳＬに分けて考える。実施例６で説明したように、重みＩ＿１、Ｉ＿０の両方が０ではないか両方が０である場合には表１と表２を、重みＩ＿１、Ｉ＿０のいずれか一つが０である場合には表３と表４を、それぞれ満たせば良い。
【０１１８】
ここで、論理ゲートＣＧにより、ＮＣ＿４の反転を／ＮＣ＿４として、
ＮＣ＿１  ＝  ／ＮＣ＿４  ・  ＮＣ＿３  ………（１６）
であるので、以下の表９のように設定することで前記表２を、以下の表１０のように設定することで前記表４を、それぞれ満たす。
【０１１９】
【表９】
2018022212.tif 000011
【０１２０】
【表１０】
2018022212.tif 000012
【０１２１】
次に、８入力を４入力ルックアップテーブルＬＵＴ４＿５〜ＬＵＴ４＿Ａに入力される４つと、４入力ルックアップテーブルＬＵＴ４＿０及びＬＵＴ４＿２〜ＬＵＴ４＿４に入力される４つに分けて考える。
【０１２２】
S74 = IS + NV_7 ・ I_7 + NV_6 ・ I_6 + NV_5 ・ I_5 + NV_4 ・ I_4  ………（１７）
S30 = NV_3 ・ I_3 + NV_2 ・ I_2 + NV_1 ・ I_1 + NV_0 ・ I_0  ………（１８）
とすると、上記（８）式の結果ＳＮ８は、
SN8 ＝ S74 ＋ S30  ………（１９）
となる。ここで、重みＩ＿０〜Ｉ＿３の０の個数が偶数の場合は表１１、奇数の場合は表１２の設定とする。
【０１２３】
【表１１】
2018022212.tif 000013
【０１２４】
【表１２】
2018022212.tif 000014
【０１２５】
４入力ルックアップテーブルＬＵＴ４＿５〜ＬＵＴ４＿Ａは、表１１あるいは表１２に従い設定する。４入力ルックアップテーブルＬＵＴ４＿２〜ＬＵＴ４＿４は、表１１あるいは表１２に対し、表９あるいは表１０となるように設定する。また、４入力ルックアップテーブルＬＵＴ４＿０は、前記表１あるいは表３に従って設定する。
【０１２６】
以上により、重みの値を−１、０、＋１のいずれかに限定することにより、８入力演算ノードＣＮを、４入力ルックアップテーブルＬＵＴ４を用いて、比較的小さな回路規模で実現できる。この回路構成は、４入力ルックアップテーブルＬＵＴ４をロジックモジュールの単位構成としているフィールドプログラマブルゲートアレイＦＰＧＡに、８入力演算ノードＣＮを実装する場合に有用である。
【０１２７】
この例のように、実施例５から実施例７で説明したような手法を拡張して、入力数が多い演算ノードＣＮを、入力数が少ないルックアップテーブルを用いて、比較的小さな回路規模で実現できる。
【実施例９】
【０１２８】
図１４、図１５は、本発明の第９の実施例を示す。図１５は、フィールドプログラマブルゲートアレイＦＰＧＡを用いて本発明を実現する設計の概要を示す図である。
【０１２９】
まず、イジングノードとイジングノード間の相互作用を設計する（Ｓ１）。このイジングノードのデータは、ＬＵＴ（ルックアップテーブル）とＦＦ（フリップフロップ）に集積される。
【０１３０】
相互作用のデータは、ＣＲＡＭへ格納されるデータである。なお、相互作用を示すひとつのイジングノードにつながる接続数は、ＬＵＴの入力数であり、解くべき問題に応じて入力数を定義する。
【０１３１】
次に、このイジングの問題を真理値表にマッピングする（Ｓ２）。真理値表では、ＬＵＴの入力数に応じた入力と、ひとつの出力との関係を定義する。相互作用の強さは真理表の出力値が０か１かで表現する。この真理値表の作成が完了すると、後は、通常の設計フローに従い、ビットストリームを生成し（Ｓ３）、ＦＰＧＡへ集積（コンフィグレーション）する（Ｓ４）。
【０１３２】
なお、上記では本発明をイジングコンピューティングに適用する例を示したが、ニューラルネットワークの演算にも適用することができ、ＦＰＧＡの構成メモリの再構成時にニューラルネットワークの重み係数を設定することができる。
【０１３３】
図１４は、設計の手順を示すフローチャートである。従来のＦＰＧＡ設計と同様に、所望の構造の演算ノード群を含んだＲＴＬ（Register Transfer Level）の記述１４１を論理合成１４２により、ネットリスト１４３とし、配置配線１４４により、回路情報１４５とする。
【０１３４】
さらに、ＦＰＧＡの構成メモリ（ＣＲＡＭ）へ格納するためのビットストリームへの変換１４６を行う。また、解くべき問題１４８について、所望の演算ノード群へのマッピング１４９を行い、演算内容を定めるルックアップテーブルを設定するための真理値表１５０を得る。これについても、ＦＰＧＡの構成メモリへ格納するためのビットストリームへの変換１５１を行う。
【０１３５】
インタコネクトのビットストリームは変換１４６により得られる。一方、ルックアップテーブルＬＵＴのビットストリーム１５２は、変換１４６、１５１の両方の結果を合成したものとする。これにより、フィールドプログラマブルゲートアレイＦＰＧＡを、本発明による情報処理装置を実現するＩＣとすることができる。
【０１３６】
このような設計手順とすることにより、同じ構造の演算ノード群ならば、解くべき問題に応じてマッピング１４９と変換１５１を行うことで、別な問題を解くことができる。すなわち、フィールドプログラマブルゲートアレイを用いて、本発明の情報処理装置の専用チップと同様な使用法が可能となる。
【０１３７】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【０１３８】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０１３９】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１４０】
ＡＮＬＣ  アニーリングコントローラ
ＢＩＯＣ  ブロック入出力コントローラ
ＣＦＧＣ  コンフィグレーションコントローラ
ＣＮ、ＣＮＵ  演算ノード
ＣＮＢ  演算ノードブロック
ＤＦＦ  フリップフロップ
ＦＰＧＡ  フィールドプログラマブルゲートアレイ
ＧＩＣ  グローバルインタコネクト
ＩＯＣ  入出力コントローラ
ＬＩＣ  ローカルインタコネクト
ＬＵＴ４  ４入力ルックアップテーブル
ＬＵＴ６  ６入力ルックアップテーブル
ＭＣ  メモリセル
ＳＥＬ２  ２入力セレクタ
ＸＯＲ  ２入力排他的ＯＲ回路
【図１】
2018022212.tif 000015
【図２】
2018022212.tif 000016
【図３】
2018022212.tif 000017
【図４】
2018022212.tif 000018
【図５】
2018022212.tif 000019
【図６】
2018022212.tif 000020
【図７】
2018022212.tif 000021
【図８】
2018022212.tif 000022
【図９】
2018022212.tif 000023
【図１０】
2018022212.tif 000024
【図１１】
2018022212.tif 000025
【図１２】
2018022212.tif 000026
【図１３】
2018022212.tif 000027
【図１４】
2018022212.tif 000028
【図１５】
2018022212.tif 000029