特許第6625943号(P6625943)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧

<>
  • 特許6625943-情報処理装置 図000014
  • 特許6625943-情報処理装置 図000015
  • 特許6625943-情報処理装置 図000016
  • 特許6625943-情報処理装置 図000017
  • 特許6625943-情報処理装置 図000018
  • 特許6625943-情報処理装置 図000019
  • 特許6625943-情報処理装置 図000020
  • 特許6625943-情報処理装置 図000021
  • 特許6625943-情報処理装置 図000022
  • 特許6625943-情報処理装置 図000023
  • 特許6625943-情報処理装置 図000024
  • 特許6625943-情報処理装置 図000025
  • 特許6625943-情報処理装置 図000026
  • 特許6625943-情報処理装置 図000027
  • 特許6625943-情報処理装置 図000028
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6625943
(24)【登録日】2019年12月6日
(45)【発行日】2019年12月25日
(54)【発明の名称】情報処理装置
(51)【国際特許分類】
   G06F 1/03 20060101AFI20191216BHJP
   H03K 19/173 20060101ALI20191216BHJP
【FI】
   G06F1/03
   H03K19/173 130
【請求項の数】6
【全頁数】23
(21)【出願番号】特願2016-151127(P2016-151127)
(22)【出願日】2016年8月1日
(65)【公開番号】特開2018-22212(P2018-22212A)
(43)【公開日】2018年2月8日
【審査請求日】2019年2月8日
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】特許業務法人藤央特許事務所
(72)【発明者】
【氏名】菅野 雄介
(72)【発明者】
【氏名】阪田 健
(72)【発明者】
【氏名】大川 雅司
(72)【発明者】
【氏名】小野 豪一
(72)【発明者】
【氏名】山岡 雅直
【審査官】 佐賀野 秀一
(56)【参考文献】
【文献】 米国特許出願公開第2010/0219860(US,A1)
【文献】 特表2009−543472(JP,A)
【文献】 特開2016−054475(JP,A)
【文献】 特開2008−305947(JP,A)
【文献】 米国特許第07295035(US,B1)
【文献】 特開平09−181598(JP,A)
【文献】 特開平07−248841(JP,A)
【文献】 米国特許第05414638(US,A)
【文献】 特開2002−305439(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 1/02 − 1/035
G06F 7/544− 7/556
H03K 19/098−19/23
(57)【特許請求の範囲】
【請求項1】
隣接する演算ノードの値を入力として当該演算ノードの値を演算する情報処理装置であって、
前記演算ノードは、
隣接する演算ノードの値を入力として、前記入力の数に応じた値を予め設定したルックアップテーブルと、
当該演算ノードの値を保持するフリップフロップと、
前記ルックアップテーブルから出力された値を、入力されたエラー信号に応じて反転させる反転回路と、
前記エラー信号を制御するアニーリング制御回路と、を有し、
隣接する演算ノードの値を前記ルックアップテーブルに入力して、前記ルックアップテーブルから出力された値から当該演算ノードの値を決定して、前記フリップフロップで保持することを特徴とする情報処理装置。
【請求項2】
請求項1に記載の情報処理装置であって、
前記フリップフロップに初期値を設定する初期化回路をさらに有することを特徴とする情報処理装置。
【請求項3】
請求項2に記載の情報処理装置であって、
前記初期化回路は、
初期化信号を受け付けた時に、所定の値を前記フリップフロップに設定するセレクタであることを特徴とする情報処理装置。
【請求項4】
請求項1に記載の情報処理装置であって、
前記演算ノードは、フィールドプログラマブルゲートアレイ内に構成され、
ローカルインタコネクトに接続された複数の演算ノードを演算ノードブロックとし、前記演算ノードブロック同士をグローバルインタコネクトで接続することを特徴とする情報処理装置。
【請求項5】
請求項1に記載の情報処理装置であって、
前記演算ノードの入力の数よりも、少ない入力数のルックアップテーブルを複数段で接続することを特徴とする情報処理装置。
【請求項6】
隣接する演算ノードの値を入力として当該演算ノードの値を演算する情報処理装置であって、
前記演算ノードは、
隣接する演算ノードの値を入力として、前記入力の数に応じた値を予め設定したルックアップテーブルと、
当該演算ノードの値を保持するフリップフロップと、
エラー信号を制御するアニーリング制御回路と、を有し、
隣接する演算ノードの値を前記ルックアップテーブルに入力して、前記ルックアップテーブルから出力された値から当該演算ノードの値を決定して、前記フリップフロップで保持し、
前記ルックアップテーブルは、
隣接する演算ノードの値に加えてエラー信号を入力し、当該エラー信号に応じて出力を反転させることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、2次元平面あるいは3次元以上の空間の多数の演算ノードに解くべき問題をマッピングし、近傍の演算ノードの相互作用を演算することにより問題を解く情報処理装置に関する。
【背景技術】
【0002】
ノイマン型コンピューティングの限界を打破すべく、さまざまな取り組みがなされている。その有力候補の一つがイジングコンピューティングであり、半導体チップを用いた実現方法が特許文献1や非特許文献1に述べられている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2015−191340号公報
【非特許文献】
【0004】
【非特許文献1】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.
【発明の概要】
【発明が解決しようとする課題】
【0005】
非特許文献1では、Fig. 4に示されているように、アナログ多数決回路により、近傍の演算ノードの相互作用を演算する。近傍の演算ノードの値と重みとの積和をとる複雑な演算を、少ないトランジスタ数で実現することができるが、MOSトランジスタの素子特性バラつきの影響を受けやすい。
【0006】
そこで、本発明では、2次元平面あるいは3次元以上の空間の多数の演算ノードに解くべき問題をマッピングし、近傍の演算ノードの相互作用を演算することにより問題を解く情報処理装置を実現するにあたって、各演算ノードの演算を小さな回路規模のデジタル回路で実現することを目的とする。
本発明の前記並びにその他の目的と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【0007】
本発明は、隣接する演算ノードの値を入力として当該演算ノードの値を演算する情報処理装置であって、前記演算ノードは、隣接する演算ノードの値を入力として、前記入力の数に応じた値を予め設定したルックアップテーブルと、当該演算ノードの値を保持するフリップフロップと、前記ルックアップテーブルから出力された値を、入力されたエラー信号に応じて反転させる反転回路と、前記エラー信号を制御するアニーリング制御回路と、を有し、隣接する演算ノードの値を前記ルックアップテーブルに入力して、前記ルックアップテーブルから出力された値から当該演算ノードの値を決定して、前記フリップフロップで保持する。
【発明の効果】
【0008】
したがって、本発明は、2次元平面あるいは3次元以上の空間の多数の演算ノードに解くべき問題をマッピングし、近傍の演算ノードの相互作用を演算することにより問題を解く情報処理装置において、ルックアップテーブルにより各演算ノードの演算を行うことにより、各演算ノードの演算を小さな回路規模のデジタル回路で実現できる。
【図面の簡単な説明】
【0009】
図1】本発明の第1の実施例を示し、4入力演算ノードの構成の一例を示すブロック図である。
図2】本発明の第1の実施例を示し、4入力演算ノードを2次元平面に多数配置する構成の一例を示す図である。
図3】本発明の第1の実施例を示し、ルックアップテーブルの構成の一例を示すブロック図である。
図4】本発明の第2の実施例を示し、6入力演算ノードの構成の一例を示すブロック図である。
図5】本発明の第2の実施例を示し、6入力演算ノードを3次元空間に多数配置する構成の一例を示す図である。
図6】本発明の第3の実施例を示し、4入力演算ノードを3次元空間にダイヤモンド格子状に多数設ける構成の一例を示す図である。
図7】本発明の第4の実施例を示し、情報処理装置をフィールドプログラマブルゲートアレイで構成した一例を示すブロック図である。
図8】本発明の第4の実施例を示し、演算ノードの構成の一例を示すブロック図である。
図9】本発明の第4の実施例を示し、演算ノードを2枚の2次元平面に多数設ける構成の一例を示す図である。
図10】本発明の第5の実施例を示し、3個のルックアップテーブルを組み合わせた6入力の演算ノードの構成の一例を示すブロック図である。
図11】本発明の第6の実施例を示し、3個のルックアップテーブルを組み合わせた8入力の演算ノードの構成の一例を示すブロック図である。
図12】本発明の第7の実施例を示し、4個のルックアップテーブルを組み合わせた9入力の演算ノードの構成の一例を示すブロック図である。
図13】本発明の第8の実施例を示し、4入力ルックアップテーブルを組み合わせた8入力の演算ノードの構成の一例を示すブロック図である。
図14】本発明の第9の実施例を示し、フィールドプログラマブルゲートアレイで情報処理装置を構成する設計処理の一例を示すフローチャートである。
図15】本発明の第9の実施例を示し、設計処理のイメージを示す図である。
【発明を実施するための形態】
【0010】
以下、本発明の実施形態を添付図面に基づいて説明する。
【実施例1】
【0011】
図1は、本発明による4入力演算ノードの構成の一例を示すブロック図である。図示の4入力演算ノードCNは、半導体製の情報処理装置の一部を構成する演算ノードである。
【0012】
4入力演算ノードCNは、4入力ルックアップテーブルLUT4と、排他的OR回路XORと、フリップフロップDFFからなる。4入力ルックアップテーブルを用いて演算することが特長である排他的OR回路XORは、エラー信号ERRが「1」の時に4入力ルックアップテーブルLUT4から出力された演算結果NCの値を反転させる。
【0013】
これにより、非特許文献1で述べられているようなアニーリング動作が可能になる。排他的OR回路XORの出力はフリップフロップDFFに入力される。フリップフロップDFFは、他の演算ノードとの同期のために設けられており、入力されたクロックCLKで、保持された値を出力する。
【0014】
4入力ルックアップテーブルLUT4の入力NO_U、NO_D、NO_L、NO_Rには、図2で隣接する演算ノードCN_U、CN_D、CN_L、CN_Rの値が入力される。
【0015】
図2は、図1に示した4入力演算ノードCNを2次元平面で格子状に配置する情報処理装置の構成例を示す。
【0016】
図中白丸が4入力演算ノードCN〜CN_Rであり、ここでは説明を簡易にするため9個の4入力演算ノードしか示していないが、実際には多数の4入力演算ノードを配置する。4入力演算ノード間の矢印が、相互関係を持たせることを示している。この図は概念的なものであり、情報処理装置に実装する際に、これに沿った配置にする必要はない。解くべき問題を、例えば特許文献1に述べられているような手法で、この2次元平面にマッピングし、隣接する4入力演算ノードCN_U〜CN_Rの相互作用を演算することにより所定の問題を解く。
【0017】
各4入力演算ノードCNは、−1か+1のいずれかの値NVを持ち、0か1のバイナリの値NOで出力する。値NVと出力NOは、(1)式の関係を有する。
【0018】
NV = 2 ・ NO - 1 ………(1)
【0019】
着目する4入力演算ノードCNには、4個の4入力演算ノードCN_U,CN_D,CN_L,CN_Rが隣接する。これらの隣接4入力演算ノードの値をNV_U,NV_D,NV_L,NV_Rとし、隣接4入力演算ノードから4入力演算ノードCNへの相関関係を示す重みをI_U,I_D,I_L,I_Rとする。また、4入力演算ノードCN自身が持ち、オフセットとなる重みをISとする。ここで、これらの重みは、任意の実数である。
【0020】
この時、以下の(2)式の積和演算の結果SNを判定し、負であればNVを−1、NOを0とし、0または正であればNVを+1、NOを1とする。
【0021】
SN = IS + NV_U ・ I_U + NV_D ・ I_D + NV_L ・ I_L + NV_R ・ I_R ……(2)
【0022】
ただし、エラー信号ERRが1の時には、演算結果SNを反転させる。
【0023】
図3は、4入力ルックアップテーブルLUT4の構成の一例を示すブロック図である。16個のメモリセルMC_0〜MC_Fと、15個の2入力セレクタSEL2からなる。メモリセルMC_0〜MC_Fに蓄積された値を、4個の入力IN_0〜IN_3に応じて、2入力セレクタSEL2で選択して、出力OUTとする。このように、2以上の自然数Nに対して、N入力ルックアップテーブルは、2のN乗個のメモリセルと、(2のN乗−1)個の2入力セレクタで構成できる。
【0024】
図1の4入力演算ノードCNで4入力ルックアップテーブルLUT4は、隣接する4個の演算ノードの出力NO_U,NO_D,NO_L,NO_Rが入力され、NCに出力する。
【0025】
バイナリの4入力の16通りに対し、設定する重みに対する上記(2)式の判定結果を、4入力ルックアップテーブルLUT4内の16個のメモリセルMC_0〜MC_Fに予め蓄積しておくことにより、テーブルのルックアップによって所望の演算が実現できる。なお、図3に示した4入力ルックアップテーブルLUT4の4個の入力IN_0〜IN_3は、図2に示した入力NO_U、NO_D、NO_L、NO_Rが対応する。
【0026】
この演算は、重み次第で複雑な論理式となるが、ルックアップテーブルを用いることにより、任意の実数の重みに対応できる。デジタル回路であるため、CMOS回路で実現する際、MOSトランジスタの素子特性バラつきの影響を受けにくく、さらに、微細プロセスを用いることで集積度を向上させることができる。
【0027】
各4入力演算ノードCNが、ランダムな値を保持している状態から、上記のような演算を繰り返すことにより、例えばイジングモデルであれば基底状態を探索でき、所定の問題を解くことができる。その際、ローカルミニマムに陥る恐れがあるため、意図的に所望の4入力演算ノードにエラー(ERR)を注入するアニーリングと呼ばれている処理を行う。
【0028】
説明を簡易にするため、図1では図示していないが、フリップフロップDFFには初期値を設定する機能が含まれる。例えば、多数の4入力演算ノードCNのフリップフロップDFFを、リセット時の値を0とするものと、1とするものをランダムに作り分ける。あるいは、多数の4入力演算ノードCNのフリップフロップDFFの間で順に信号を送っていくスキャンチェーンを設け、スキャンチェーンにランダムなデータを入力する初期化回路(パス)を加えることにより、フリップフロップDFFをランダムに初期化する。
【0029】
また、図1では、4入力ルックアップテーブル4LUTの演算結果NCを反転させるために、排他的OR回路XORを設けているが、AND回路あるいはOR回路を用いることにより、0あるいは1に固定することも可能である。
【0030】
以上のように、本実施例1によれば、2次元平面の空間で多数の4入力演算ノードCNに解くべき問題をマッピングし、隣接する4入力演算ノードCNの相互作用を演算することにより問題を解く情報処理装置において、4入力ルックアップテーブルLUT4に予め相互作用の係数を保持させておくことで、テーブルのルックアップで演算を実現できる。これにより、各4入力演算ノードCNの演算を小さな回路規模のデジタル回路で実現できる。
【0031】
ルックアップテーブルLUTは、入力数Nに応じた数(2)のメモリセルMCを有し、各メモリセルMCには、入力される隣接演算ノードの値に応じた相互作用係数を予め設定しておく。これにより、ルックアップテーブルLUTに隣接演算ノードの値を入力すると、入力数Nに応じた2通りの中から相互作用係数を得て当該演算ノードCNの値を算出することができ、N入力演算ノードの演算を小さな回路規模で実現可能となる。
【実施例2】
【0032】
図4は、本発明の第2の実施例を示し、6入力演算ノードCNの構成の一例を示すブロック図である。6入力演算ノードCNは、6入力ルックアップテーブルLUT6と、排他的OR回路XORと、フリップフロップDFFからなる。6入力ルックアップテーブルLUT6は、前記実施例1の図3と同様にして、2の6乗である64個のメモリセルと、63個の2入力セレクタで構成することができる。
【0033】
6入力ルックアップテーブルLUT6は、6つの入力NO_F〜NO_Rと、ひとつの出力を有し、出力は排他的OR回路XORの2つの入力のうち一方に入力される。排他的OR回路XORの2つの入力のうち他方には、出力を反転させるエラー信号ERRが入力される。
【0034】
排他的OR回路XORの出力は、フリップフロップDFFの2つの入力のうち一方の入力に接続され、他方の入力には、他の演算ノードCNと出力NOを同期させるためにクロックCLKで入力される。
【0035】
図5は、図4の6入力演算ノードCNを3次元空間で立方格子状に配置する構成例を、概念的に示す。図中白丸が6入力演算ノードCNであり、ここでは説明を簡易にするため27個しか示していないが、多数配置する。
【0036】
6入力演算ノードCN間の矢印が、相互関係を持たせることを示しており、着目する6入力演算ノードCNについては、隣接する6個の演算ノードCN_F,CN_B,CN_U,CN_D,CN_L,CN_Rとの間にある。
【0037】
これらの隣接する6入力演算ノードCN_F〜CN_Rの値を、NV_F,NV_B,NV_U,NV_D,NV_L,NV_Rとし、6入力演算ノードCNへの相関関係を示す重みをI_F,I_B,I_U,I_D,I_L,I_Rとし、6入力演算ノードCN自身が持ちオフセットとなる重みをISとする。なお、図4の6つの入力NO_F〜NO_Rには、隣接する演算ノードCN_F〜CN_Rの出力NV_F〜NV_Rが入力される。
【0038】
ここで、これらの重みは、任意の実数である。また、次に示す(3)式の積和演算の結果SN6を判定し、負であればNVを−1、NOを0とし、0または正であればNVを+1、NOを1とする。
【0039】
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 ………(3)
【0040】
上記(3)式の演算は、6入力ルックアップテーブルLUT6内のメモリセル(図示省略)を、重みI_F〜I_Rに応じた値に設定することにより実現する。
【0041】
このように、3次元空間に解くべき問題をマッピングすることにより、2次元平面にマッピングするよりも、マッピングする問題の制約が緩和される。その際、演算ノードCNの入力数が増加するが、前記実施例1と同様に、相互作用係数を予め設定した6入力ルックアップテーブルLUT6を用いて演算を行うことにより、入力数を増やしても小さな回路規模のデジタル回路で実現できる。
【実施例3】
【0042】
図6は、本発明の第3の実施例を示し、4入力演算ノードを3次元空間でダイヤモンド格子状に多数配置する構成の一例を示す図である。ダイヤモンド格子では配位数が4であり、着目する演算ノードCNに隣接する4入力演算ノードはCN_0〜CN_3の4個である。そのため、前記実施例1の図1に示したような4入力演算ノードCNを用いることができる。
【0043】
前述のように、6入力ルックアップテーブルは、4入力ルックアップテーブルの約4倍の回路規模であるので、図4の6入力演算ノードは図1の4入力演算ノードの約4倍の回路規模である。図6のようなダイヤモンド格子状に演算ノードCNを配置することで、3次元空間で規則的に演算ノードを概念的に配置する構成を、回路規模の小さい演算ノードを用いて実現できる。
【実施例4】
【0044】
図7は、本発明の第4の実施例を示し、情報処理装置をフィールドプログラマブルゲートアレイFPGAで構成した一例を示すブロック図である。
【0045】
フィールドプログラマブルゲートアレイFPGAは、演算ノードブロックCNBを複数有し、グローバルインタコネクトGICで演算ノードブロックCNB同士を相互に接続する。
【0046】
演算ノードブロックCNB内には、複数の演算ノードCNUとブロック入出力コントローラBIOCがローカルインタコネクトLICに接続される。ローカルインタコネクトLICは、ブロック入出力コントローラBIOC介して、グローバルインタコネクトGICに接続する。
【0047】
さらに、FPGAは、外部との入出力を制御する入出力コントローラIOCと、フィールドプログラマブルゲートアレイFPGAのコンフィグレーションに用いるコンフィグレーションコントローラCFGCと、前述のアニーリング処理を制御するアニーリングコントローラANLCとを含む。
【0048】
図7のフィールドプログラマブルゲートアレイFPGAでは、複数の演算ノードCNUをローカルインタコネクトLICで接続して演算ノードブロックCNBとしてグループ化する。演算ノードブロックCNB間をグローバルインタコネクトGICで接続して演算ノードブロックCNBを階層的に配置する。
【0049】
図8は、演算ノードCNUの構成の一例を示すブロック図である。演算ノードCNUは、6入力ルックアップテーブルLUT6と、2入力セレクタSEL2と、フリップフロップDFFからなる。フリップフロップDFFは、同期処理のために設けており、入力されたクロックCLKで出力が制御される。
【0050】
2入力セレクタSEL2の入力には、6入力ルックアップテーブルLUT6の出力NC_Eと、初期値NO0が入力される。2入力セレクタSEL2のセレクト信号は、初期化信号INITにより制御され、初期化する際に初期値NO0をフリップフロップDFFに送る。フリップフロップDFFは、前記実施例1と同様であり、2入力セレクタSEL2の出力をクロックCLKに応じて出力NOに送信する。
【0051】
6入力ルックアップテーブルLUT6は、前記実施例3と同様の6入力であるが、隣接する5つの演算ノードの入力NO_B〜NO_Rに加えて、エラー信号ERRを6入力ルックアップテーブルLUT6へ入力する点が前記実施例3と相違する。6入力ルックアップテーブルLUT6は、前記従来例3の排他的OR回路XORに代わって、入力されたエラー信号ERRに応じて出力を反転させることができる。
【0052】
図9は、図8の演算ノードCNUを2枚の2次元平面で格子状に配置する構成の一例を示す図である。この配置は、前記非特許文献1で述べられているものと同じ配置である。
【0053】
図中白丸が演算ノードCNUであり、ここでは説明を簡易にするため18個の演算ノードしか示していないが、多数配置する。演算ノード間の矢印が、相互関係を持たせることを示している。着目する演算ノードCNUについては、隣接する5個の演算ノードCNU_B,CNU_U,CNU_D,CNU_L,CNU_Rとの間にある。
【0054】
6入力ルックアップテーブルLUT6に、隣接する5個の演算ノードの出力NO_B,NO_U,NO_D,NO_L,NO_Rに加え、エラー信号ERRが入力されている。
【0055】
隣接演算ノードの値をNV_B,NV_U,NV_D,NV_L,NV_Rとし、演算ノードCNUへの相関関係を示す重みをI_B,I_U,I_D,I_L,I_Rとし、演算ノードCNU自身が持ちオフセットとなる重みをISとする。ここで、これらの重みは、任意の実数である。次に示す(4)式の積和演算の結果SN5を判定する。
【0056】
SN5 = IS + NV_B ・ I_B + NV_U ・ I_U + NV_D ・ I_D + NV_L ・ I_L + NV_R ・ I_R
………(4)
【0057】
エラー信号ERRが0の時、結果SN5が負であれば出力NOを0とし、結果SN5が0または正であれば出力NOを1とする。エラー信号ERRが1の時には逆に、結果SN5が負であれば出力NOを1とし、結果SN5が0または正であれば出力NOを0とする。この演算は、6入力ルックアップテーブルLUT6内のメモリセル(図示省略)を、重みに応じた値に設定することにより実現する。
【0058】
図8の演算ノードCNUの構成は、近年の高集積な市販フィールドプログラマブルゲートアレイのコアファブリックFPGAのロジックモジュールの単位構成に合致しており、効率的に実装できる。近年の近年の高集積な市販フィールドプログラマブルゲートアレイFPGAでは、ロジックモジュールの単位構成に6入力ルックアップテーブルLUT6が含まれている。
【0059】
6入力ルックアップテーブルLUT6を効率的に使うため、エラー信号ERRによる反転も6入力ルックアップテーブルLUT6で実現し、前記実施例1の図1図4に示した演算ノードでの排他的OR回路XOR2を不要にしている。また、エラー信号ERRの制御は、アニーリングコントローラANLCで行う。
【0060】
近年のフィールドプログラマブルゲートアレイFPGAでは、コンフィグレーションメモリ(CRAM)へのエラー注入機能を有するものもあり、その機能を活かしてアニーリング処理を行うことも可能である。また、部分的にコンフィグレーションメモリを書き換えることにより、アニーリング処理を行うことも可能である。その場合、アニーリングコントローラANLCにより、コンフィグレーションコントローラCFGCを制御して、コンフィグレーションメモリへのエラー注入を行う。
【0061】
本実施例4においても、3次元空間で規則的に演算ノードCNUを配置する構成を、回路規模の小さい演算ノードを用いて実現できる。
【実施例5】
【0062】
図10は、本発明の第5の実施例を示し、4入力ルックアップテーブルを3つ組み合わせた6入力演算ノードの構成の一例を示すブロック図である。図10の演算ノードは、前記実施例4に示した演算ノードCNUとして適用可能である。
【0063】
図10の演算ノードCNは、3個の4入力ルックアップテーブルLUT4_0〜LUT4_2と、排他的OR回路XORと、フリップフロップDFFからなる。前記実施例2の図4に示した6入力演算ノードと同様に、図5のような3次元空間で立方格子状に演算ノードを配置することができる。
【0064】
実施例2の図5と同様に、着目する演算ノードCNに対し、隣接する6個の演算ノードCN_F,CN_B,CN_U,CN_D,CN_L,CN_Rからの相関関係を判定して、出力NOを得る。これらの隣接演算ノードの値をNV_F,NV_B,NV_U,NV_D,NV_L,NV_Rとし、演算ノードCNへの相関関係を示す重みをI_F,I_B,I_U,I_D,I_L,I_Rとし、演算ノードCN自身が持ちオフセットとなる重みをISとする。
【0065】
ここで、これらの重みは、−1, 0, +1のいずれかの値とする。以下の(5)〜(7)式の積和演算の結果SN6を判定し、負であればNVを−1、NOを0とし、0または正であればNVを+1、NOを1とする。
【0066】
6入力を、4入力ルックアップテーブルLUT4_2、LUT4_1に入力される4つと、4入力ルックアップテーブルLUT4_0に入力される2つに分けて考える。
【0067】
SU = IS + NV_F ・ I_F + NV_B ・ I_B + NV_U ・ I_U + NV_D ・ I_D ………(5)
SL = NV_L ・ I_L + NV_R ・ I_R ………(6)
とすると、結果SN6は、
SN6 = SU + SL ………(7)
となる。
【0068】
演算ノードCNの出力NOは−1、+1のいずれかであり、重みは−1、0、+1のいずれかであるので、上記(7)式の変数SUは−5から+5の整数のいずれかとなり、変数SLは−2から+2の整数のいずれかとなる。
【0069】
さらに、重みI_L、I_Rの値について、両方が0ではないか両方が0である場合と、いずれか一方が0である場合に、場合分けして考える。
【0070】
重みI_L、I_Rの両方が0ではないか両方が0である場合、変数SLは−2、0、+2のいずれかとなる。このとき、結果SN6が負であるか、0または正であるかの判定による4入力ルックアップテーブルLUT4_0の出力NC_0は、表1に示すようになる。
【0071】
【表1】
【0072】
すなわち、変数SUを表1の4通りに分ければ良い。4通りは2ビットで表現できるので、次の表2に示すように、4入力ルックアップテーブルLUT4_2、LUT4_1の出力NC_2、NC_1に割り付ける。
【0073】
【表2】
【0074】
表1と表2は、3個の4入力ルックアップテーブルLUT4_0〜LUT4_2のメモリセルを、所与の重みの値に応じて設定することにより実現できる。
【0075】
重みI_L、I_Rの一方だけが0である場合、変数SLは−1、+1のいずれかとなる。このとき、結果SN6が負であるか、0または正であるかの判定による4入力ルックアップテーブルLUT4_0の出力NC_0は、次の表3に示すようになる。
【0076】
【表3】
【0077】
すなわち、変数SUを表3に示した3通りに分ければ良い。3通りは2ビットで表現できるので、表4に示すように、4入力ルックアップテーブルLUT4_2、LUT4_1の出力NC_2、NC_1に割り付ける。
【0078】
【表4】
【0079】
表3と表4も、3個の4入力ルックアップテーブルLUT4_0〜LUT4_2のメモリセルを、所与の重みの値に応じて設定することにより実現できる。
【0080】
以上のように、重みの値を−1、0、+1のいずれかに限定することにより、4入力ルックアップテーブルLUT4を3個用いて6入力演算ノードCNを実現できる。前記実施例2の図4に示した6入力演算ノードCNで用いている6入力ルックアップテーブルLUT6は、4入力ルックアップテーブルLUT4の約4倍の回路規模であるため、図4に示した6入力演算ノードCNに比べて図10の6入力演算ノードCNは約4分の3の回路規模となる。実施例2で述べたように、演算ノードCNは多数設けるため、この回路規模の削減効果は大きい。
【0081】
なお、ここでは説明を簡単にするため、重みIS、I_F、I_B、I_U、I_D、I_L、I_Rの値が全て−1、0、+1のいずれかであるとしたが、4入力ルックアップテーブルLUT_0のNC_0に入力されるI_L、I_Rの二つが、−1、0、+1に限定することなく、同じ3通りの値のいずれかをとるならば、図10に示した6入力演算ノードCNを構成できる。重みIS、I_F、I_B、I_U、I_Dについては、任意の実数にできる。
【0082】
以上のように、演算ノードCNの入力の数よりも、少ない入力数のルックアップテーブルLUTを複数段で接続することで、情報処理装置全体の回路規模を削減することが可能となる。
【実施例6】
【0083】
図11は、本発明の第6の実施例を示し、6入力ルックアップテーブルと4入力ルックアップテーブルを組み合わせた8入力演算ノードCNの構成例を示すブロック図である。
【0084】
本実施例6の演算ノードCNは、2個の6入力ルックアップテーブルLUT6_2、LUT6_1と、4入力ルックアップテーブルLUT4_0と排他的OR回路XORと、フリップフロップDFFからなる。
【0085】
着目する演算ノードCNに対し、他の8個の演算ノードからの相関関係を判定して、出力NOを得る。これらの演算ノードCNの値をNV_0〜NV_7とし、それらをバイナリの演算ノード出力NO_0〜NO_7として入力する。また、演算ノードCNへの相関関係を示す重みをI_0〜I_7とし、演算ノードCN自身が持ちオフセットとなる重みをISとする。
【0086】
ここで、これらの重みISは、−1、0、+1のいずれかの値とする。以下の(8)式の積和演算の結果SN8を判定し、負であればNVを−1、NOを0とし、0または正であればNVを+1、NOを1とする。
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 ………(8)
【0087】
8入力を、6入力ルックアップテーブルLUT6_2、LUT6_1に入力される6つと、4入力ルックアップテーブルLUT4_0に入力される2つに分けて考える。
【0088】
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 ………(9)
SL = NV_1 ・ I_1 + NV_0 ・ I_0 ………(10)
とすると、上記(8)式の結果SN8は、
SN8 = SU + SL ………(11)
となる。
【0089】
なお、上記(9)式と(10)式は、前記実施例5の(5)式及び(6)式に相当するため同じ変数SU、SLを用いている。変数SUは−7から+7の整数のいずれかとなり、変数SLは−2から+2の整数のいずれかとなる。
【0090】
実施例5と同様に、さらに、重みI_1、I_0の値を、両方が0ではないか両方が0である場合と、いずれか一方が0である場合に、場合分けして考える。両方が0ではないか両方が0である場合、上記表1と表2に示すように割り付ける。また、一方が0である場合、上記表3と表4に示すように割り付ける。これらの表は、2個の6入力ルックアップテーブルLUT6_2、LUT6_1と、4入力ルックアップテーブルLUT4_0のメモリセルを、重みの値に応じて設定することにより実現できる。
【0091】
以上のように、重みの値を−1、0、+1のいずれかに限定することにより、8入力と入力数が多い演算ノードCNを比較的小さな回路規模で実現できる。8入力演算ノードCNは、4次元空間に解くべき問題をマッピングする場合に好適である。なお、重みIS、I_2〜I_7については、任意の実数であっても、図11の8入力演算ノードCNを実現できる。
【0092】
4入力ルックアップテーブルLUT4_0は、6入力ルックアップテーブルを使用することも可能なのは、言うまでもない。6入力ルックアップテーブルをロジックモジュールの単位構成としているフィールドプログラマブルゲートアレイに実装する場合、それを4入力ルックアップテーブルLUT4_0に用いることができる。そのような場合、前記実施例4の図8に示した演算ノードCNと同様に、エラー信号ERRによる反転も6入力ルックアップテーブルで実現し、排他的OR回路XOR2を削除することも可能である。
【0093】
本実施例6においても、4次元空間等で規則的に演算ノードCNを配置する構成を、回路規模の小さい演算ノードを用いて実現できる。
【実施例7】
【0094】
図12は、本発明の第7の実施例を示し、6入力ルックアップテーブルを組み合わせた9入力演算ノードCNの構成の一例を示すブロック図である。図12の演算ノードCNは、前記実施例4に示した演算ノードCNUとして適用可能である。
【0095】
本実施例7の演算ノードCNは、4個の6入力ルックアップテーブルLUT6_0〜LUT6_3と排他的OR回路XORと、フリップフロップDFFからなる。本実施例7の演算ノードCNは、着目する演算ノードCNに対し、隣接する他の8個の演算ノードからの相関関係を判定して、出力NOを得る。
【0096】
これらの隣接する演算ノードCNの値をNV_0〜NV_8とし、それらをバイナリの演算ノード出力NO_0〜NO_8として当該演算ノードCNに入力する。また、演算ノードCNへの相関関係を示す重みをI_0〜I_8とし、演算ノードCN自身が持ちオフセットとなる重みをISとする。
【0097】
ここで、これらの重みは、−1、0、+1のいずれかの値とする。次の(12)式の積和演算の結果SN9を判定し、負であればNVを−1、NOを0とし、0または正であればNVを+1、NOを1とする。
【0098】
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 ………(12)
9入力を、6入力ルックアップテーブルLUT6_1〜LUT6_3に入力される6つと、6入力ルックアップテーブルLUT6_0に入力される2つに分けて考える。
【0099】
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 ………(13)
SL3 = NV_2 ・ I_2 + NV_1 ・ I_1 + NV_0 ・ I_0 ………(14)
とすると、(12)式の結果SN9は、
SN9 = SU6 + SL 3………(15)
【0100】
となる。結果SU6は−7から+7の整数のいずれかとなり、変数SL3は−3から+3の整数のいずれかとなる。
【0101】
さらに、重みI_0〜I_2の値について、いずれも0ではないか2個が0である場合と、いずれか1個が0である場合に、場合分けして考える。いずれも0ではないか2個が0である場合には、SL3は−3、−1、+1、+3のいずれかとなる。このとき、SN9が負であるか、0または正であるかの判定による6入力ルックアップテーブルLUT6_0の出力N6_0は、表5に示すようになる。
【0102】
【表5】
【0103】
すなわち、結果SU6を表5の5通りに分ければ良い。5通りは3ビットで表現できるので、表6に示すように、6入力ルックアップテーブルLUT6_1〜LUT6_3の出力N6_1〜N6_3に割り付ける。
【0104】
【表6】
【0105】
表5と表6は、4個の6入力ルックアップテーブルLUT6_0〜LUT6_3のメモリセルを、所与の重みの値に応じて設定することにより実現できる。
【0106】
いずれか1個が0である場合、SL3は−2、0、+2のいずれかとなる。このとき、6入力ルックアップテーブルLUT6_0の出力NC_0は、表7に示すようになる。
【0107】
【表7】
【0108】
すなわち、結果SU6を表7の4通りに分ければ良い。4通りは2ビットで表現できるので、表8に示すように、6入力ルックアップテーブルLUT6_3の出力N6_3を0として、6入力ルックアップテーブルLUT6_2、LUT6_1の出力N6_2、N6_1に割り付ける。
【0109】
【表8】
【0110】
前記表7と表8も、4個の6入力ルックアップテーブルLUT6_0〜LUT6_3のメモリセルを、所与の重みの値に応じて設定することにより実現できる。
【0111】
以上のように、重みの値を−1、0、+1のいずれかに限定することにより、6入力ルックアップテーブル4個を用いて9入力と入力数が多い演算ノードCNを比較的小さな回路規模で実現できる。9入力演算ノードCNは、二つの4次元空間を連結させて解くべき問題をマッピングする場合に好適である。なお、重みIS、I_3〜I_8については、任意の実数であっても、図12の9入力演算ノードCNを実現できる。
【0112】
本実施例7においても、多次元空間等で規則的に演算ノードCNを配置する構成を、回路規模の小さい演算ノードCNを用いて実現できる。
【実施例8】
【0113】
図13は、本発明の第8の実施例を示し、4入力ルックアップテーブルを組み合わせた8入力演算ノードCNの構成例を示す。演算ノードCNは、10個の4入力ルックアップテーブルLUT4_0、LUT4_2〜LUT4_Aと、論理ゲートCGと、排他的OR回路XORと、フリップフロップDFFからなる。
【0114】
論理ゲートCGは、出力NC_4を反転させて出力NC_3とのANDをとり、NC_1に出力する。CMOSインバータと2入力NOR回路で構成できるが、2入力ルックアップテーブルで実現することもできる。
【0115】
前記実施例6の図11に示した演算ノードCNと同様に、着目する演算ノードCNに対し、他の8個の演算ノードからの相関関係を判定して、出力NOを得る。これらの演算ノードCNの値をNV_0〜NV_7とし、それらをバイナリの演算ノード出力NO_0〜NO_7として入力する。
【0116】
また、演算ノードCNへの相関関係を示す重みをI_0〜I_7とし、演算ノードCN自身が持ちオフセットとなる重みをISとする。ここで、これらの重みは、−1、0、+1のいずれかの値とする。前記(8)式の積和演算の結果SN8を判定し、負であればNVを−1、NOを0とし、0または正であればNVを+1、NOを1とする。
【0117】
以下では、演算ノードCNの処理を、2段階で場合分けして考える。まず、実施例6と同様に、8入力を4入力ルックアップテーブルLUT4_2〜LUT4_Aに入力される6つの入力と、4入力ルックアップテーブルLUT4_0に入力される2つの入力に分けて考える。すなわち、前記(11)式のように、上記(8)式の結果SN8を、前記(9)式のSUと、前記(10)式のSLに分けて考える。実施例6で説明したように、重みI_1、I_0の両方が0ではないか両方が0である場合には表1と表2を、重みI_1、I_0のいずれか一つが0である場合には表3と表4を、それぞれ満たせば良い。
【0118】
ここで、論理ゲートCGにより、NC_4の反転を/NC_4として、
NC_1 = /NC_4 ・ NC_3 ………(16)
であるので、以下の表9のように設定することで前記表2を、以下の表10のように設定することで前記表4を、それぞれ満たす。
【0119】
【表9】
【0120】
【表10】
【0121】
次に、8入力を4入力ルックアップテーブルLUT4_5〜LUT4_Aに入力される4つと、4入力ルックアップテーブルLUT4_0及びLUT4_2〜LUT4_4に入力される4つに分けて考える。
【0122】
S74 = IS + NV_7 ・ I_7 + NV_6 ・ I_6 + NV_5 ・ I_5 + NV_4 ・ I_4 ………(17)
S30 = NV_3 ・ I_3 + NV_2 ・ I_2 + NV_1 ・ I_1 + NV_0 ・ I_0 ………(18)
とすると、上記(8)式の結果SN8は、
SN8 = S74 + S30 ………(19)
となる。ここで、重みI_0〜I_3の0の個数が偶数の場合は表11、奇数の場合は表12の設定とする。
【0123】
【表11】
【0124】
【表12】
【0125】
4入力ルックアップテーブルLUT4_5〜LUT4_Aは、表11あるいは表12に従い設定する。4入力ルックアップテーブルLUT4_2〜LUT4_4は、表11あるいは表12に対し、表9あるいは表10となるように設定する。また、4入力ルックアップテーブルLUT4_0は、前記表1あるいは表3に従って設定する。
【0126】
以上により、重みの値を−1、0、+1のいずれかに限定することにより、8入力演算ノードCNを、4入力ルックアップテーブルLUT4を用いて、比較的小さな回路規模で実現できる。この回路構成は、4入力ルックアップテーブルLUT4をロジックモジュールの単位構成としているフィールドプログラマブルゲートアレイFPGAに、8入力演算ノードCNを実装する場合に有用である。
【0127】
この例のように、実施例5から実施例7で説明したような手法を拡張して、入力数が多い演算ノードCNを、入力数が少ないルックアップテーブルを用いて、比較的小さな回路規模で実現できる。
【実施例9】
【0128】
図14図15は、本発明の第9の実施例を示す。図15は、フィールドプログラマブルゲートアレイFPGAを用いて本発明を実現する設計の概要を示す図である。
【0129】
まず、イジングノードとイジングノード間の相互作用を設計する(S1)。このイジングノードのデータは、LUT(ルックアップテーブル)とFF(フリップフロップ)に集積される。
【0130】
相互作用のデータは、CRAMへ格納されるデータである。なお、相互作用を示すひとつのイジングノードにつながる接続数は、LUTの入力数であり、解くべき問題に応じて入力数を定義する。
【0131】
次に、このイジングの問題を真理値表にマッピングする(S2)。真理値表では、LUTの入力数に応じた入力と、ひとつの出力との関係を定義する。相互作用の強さは真理表の出力値が0か1かで表現する。この真理値表の作成が完了すると、後は、通常の設計フローに従い、ビットストリームを生成し(S3)、FPGAへ集積(コンフィグレーション)する(S4)。
【0132】
なお、上記では本発明をイジングコンピューティングに適用する例を示したが、ニューラルネットワークの演算にも適用することができ、FPGAの構成メモリの再構成時にニューラルネットワークの重み係数を設定することができる。
【0133】
図14は、設計の手順を示すフローチャートである。従来のFPGA設計と同様に、所望の構造の演算ノード群を含んだRTL(Register Transfer Level)の記述141を論理合成142により、ネットリスト143とし、配置配線144により、回路情報145とする。
【0134】
さらに、FPGAの構成メモリ(CRAM)へ格納するためのビットストリームへの変換146を行う。また、解くべき問題148について、所望の演算ノード群へのマッピング149を行い、演算内容を定めるルックアップテーブルを設定するための真理値表150を得る。これについても、FPGAの構成メモリへ格納するためのビットストリームへの変換151を行う。
【0135】
インタコネクトのビットストリームは変換146により得られる。一方、ルックアップテーブルLUTのビットストリーム152は、変換146、151の両方の結果を合成したものとする。これにより、フィールドプログラマブルゲートアレイFPGAを、本発明による情報処理装置を実現するICとすることができる。
【0136】
このような設計手順とすることにより、同じ構造の演算ノード群ならば、解くべき問題に応じてマッピング149と変換151を行うことで、別な問題を解くことができる。すなわち、フィールドプログラマブルゲートアレイを用いて、本発明の情報処理装置の専用チップと同様な使用法が可能となる。
【0137】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【0138】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【0139】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【0140】
ANLC アニーリングコントローラ
BIOC ブロック入出力コントローラ
CFGC コンフィグレーションコントローラ
CN、CNU 演算ノード
CNB 演算ノードブロック
DFF フリップフロップ
FPGA フィールドプログラマブルゲートアレイ
GIC グローバルインタコネクト
IOC 入出力コントローラ
LIC ローカルインタコネクト
LUT4 4入力ルックアップテーブル
LUT6 6入力ルックアップテーブル
MC メモリセル
SEL2 2入力セレクタ
XOR 2入力排他的OR回路
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15