説明

2値ベクトル及び多項式を用いる計算装置及び計算方法

【課題】計算機で行われている計算の実行速度を、多くのハードウェア資源を用いる代わりに向上させることのできる計算装置及び計算方法の提供を目的とする。
【解決手段】本発明の計算装置は、多項式を用いて複数の入力数値を演算する演算装置において、複数の入力数値を読み込む数値読込手段と、上記入力数値を対象とする基本演算の種類を読み込む演算種読込手段と、複数の演算2値化セットを保持する記憶手段と、上記複数の入力数値及び基本的演算の種類の各々を2値からなる複数のベクトルとして受け取り、それらを上記演算2値化セットから構成される結線論理を使用して処理する演算処理手段と、演算結果を出力する出力手段とを有することを特徴としている。必要に応じて演算2値化セットを作成する代数展開部を有するとよい。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、2値からなる複数のベクトル(以下、「2値ベクトル」という)及び多項式を用いる計算装置及び計算方法に関し、詳細には、入力数値の各々を2値ベクトルとみなし、さらにこれらのベクトルに係る演算自体を2値多項式の集まりとみなしたうえで、かかる2値多項式の集まりに基づいて構成される結線論理を使用して、高速な計算が可能な計算装置及び計算方法に関する。
【背景技術】
【0002】
今日では、情報処理装置による計算方法として、様々な方法が考えられている。このような計算方法として、例えば、乗算では、(1)ブースアルゴリズムを利用した計算方法(特開平06−290029号公報参照)が発案されている。(1)の計算方法は、乗数と被乗数とをともに高次のブースアルゴリズムに従ってコード信号化し、このコード信号を用いて乗数及び被乗数を複数の部分に分割し、各分割部分同士を乗算して得られる部分を加算することによって積を得る方法である。
【0003】
また、剰余系における計算方法としては、(2)乗算剰余算の繰返し計算を高速化するための計算方法(特開2007−57811号公報参照)が発案されている。(2)の計算方法は、整数Mを法とする剰余系において、変数U、Vを、Mと互いに素でMより小さな定数Rを用いて、変数X=U・RmodM、変数Y=V・RmodMに変換し、剰余系における乗算剰余算U・VmodMを、演算X・Y・R−1modMに置換することによって計算結果を算出する方法である。
【0004】
これらの手法及び現行の一般的な計算方法は、和算や乗算等の計算全体を、加減算やシフト演算等の単純な演算に組み直すというアプローチに基づいている。このようなアプローチに基づく計算方法は、実行する演算の繰返し回数が多くなるため、十分な量のハードウェアを用いることができる場合でも、計算時間を大幅に短縮することができない。この分析から、効果的に計算時間を短縮するためには、演算の繰返し回数を少なくすることが肝要であるといえる。
【0005】
この点、計算全体を単純な演算ではなく複雑な演算に組み直すことができれば、演算の繰返し回数を減らし、計算時間を短縮することができる。しかし、これまでの手法では、そのような複雑な演算を電子回路として設計し、計算全体をそれらの演算に組み直すことは困難であった。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開平06−290029号公報
【特許文献2】特開2007−57811号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明は、これらの不都合に鑑みてなされたものであり、離散・有限な計算を2値多項式の集まりと捉え、それらを2値ベクトルとして符号化して取り扱うことで、計算を2値多項式の集まりとして定式化される複雑な演算に組み直して計算式における演算の繰返し回数を削減するとともに、2値多項式の集まりに基づいて構成される結線論理を用いて複雑な演算を処理することにより計算の高速化を実現することを目的とするものである。
【課題を解決するための手段】
【0008】
上記課題を解決するためになされた発明は、
多項式を用いて複数の入力数値を演算する演算装置において、
複数の入力数値を読み込む数値読込手段と、
上記入力数値を対象とする基本演算の種類を読み込む演算種読込手段と、
複数の演算2値化セットを保持する記憶手段と、
上記複数の入力数値及び基本演算の種類の各々を2値からなる複数のベクトルとして受け取り、それらを上記演算2値化セットから構成される結線論理を使用して処理する演算処理手段と、
演算結果を出力する出力手段と
を有することを特徴とする計算装置である。
【0009】
当該計算装置は、演算2値化セットから構成される結線論理を使用して計算を複雑な演算に組み直したうえで演算処理するので、計算式における演算の繰返し回数を削減することができる。その結果、当該計算装置は、計算時間を効果的に削減することができる。
【0010】
入力多項式を読み込む多項式読込手段と、この入力多項式を、所定の多項式2値ベクトルを用いて代数展開して演算2値化セットを作成する代数展開手段と、演算2値化セットに含まれる2値多項式に現れる最大変数数及び上記代数展開手段による代数展開の度合いを保存するパラメータ保存手段と、上記入力多項式を代数展開して得られる多項式2値ベクトルを実装する結線論理に必要とされるハードウェア量が妥当であるかを判定し、妥当でないと判断した場合に、パラメータ保存手段によって保存されるパラメータを変更する判定手段とを有し、上記代数展開手段が、上記判定手段によってハードウェア量が妥当でないと判断された場合に、パラメータ保存手段に保存されるパラメータに基づき再度演算2値化セットを作成するとよい。これにより、入力多項式を複数の演算の組合せに展開するとともに、演算2値化セットに含まれる2値多項式に現れる最大変数数や代数展開の度合いを変更することにより、必要となるハードウェア量を調整することができる。その結果、当該計算装置は、使用可能なハードウェア資源に適した計算環境を提供することができる。
【0011】
上記記憶手段が、多入力・多出力論理素子の使用を前提とする演算2値化セットを保持するとよい。これにより、代数展開度合いを大きくし、計算の段数を減少することができる。その結果、当該計算装置は、計算の処理速度をさらに高速化することができる。
【0012】
上記入力多項式と演算2値化セットとの対応を保持する演算2値化セットキャッシュ部を有するとよい。これにより、一度行われた計算の処理速度をさらに向上することができる。
【0013】
上記演算2値化セットに含まれる2値ベクトル値関数及び変数間の対応情報と、結線論理との対応を保持する結線論理キャッシュ部を有するとよい。これにより、一度行われた計算の処理速度をさらに向上することができる。
【0014】
入力信号値及び/又は出力信号値が0又は1である割合やある組合せをとる頻度を記録する記録部を有するとよい。これにより、記録されたデータを当該計算装置の内外で使用することができる。また、これらのデータに基づいて結線論理を作成することにより、結線論理のより効率的な再設計を行うことができる。
【0015】
上記記憶手段が新たな演算2値化セットを書き込み可能に構成されるとよい。これにより、計算を組み直す基本演算を変更し、所望の計算を高速に処理することができる。
【0016】
従って、多項式を用いて複数の入力数値を演算する演算方法において、複数の入力数値を読み込む数値読込ステップと、上記入力数値を対象とする基本演算の種類を読み込む演算種読込ステップと、上記複数の入力数値及び基本演算の種類の各々を2値からなる複数のベクトルとして受け取ったうえ、別途与えられる演算2値化セットから構成される結線論理を使用して複数の入力数値の演算を処理する演算処理ステップと、演算結果を出力する出力ステップとを有することを特徴とする計算方法は、計算を結線論理が表す複雑な演算に組み直し、それらを用いて演算処理するので、計算式における演算の繰返し回数を削減することができる。その結果、当該計算方法は、計算時間を効果的に削減することができる。
【0017】
上記数値読込ステップに加えて、入力多項式を読み込む多項式読込ステップを有し、さらに、この入力多項式を、所定の多項式2値ベクトルを用いて代数展開して演算2値化セットを作成する代数展開ステップと、演算2値化セットに含まれる2値多項式に現れる最大変数数及び上記代数展開ステップによる代数展開度合いを保存するパラメータ保存ステップと、上記入力多項式を代数展開して得られた多項式2値ベクトルを実装する結線論理に必要とされるハードウェア量が妥当であるかを判定し、妥当でないと判断した場合に、パラメータ保存ステップによって保存されるパラメータを変更する判定ステップとを有し、上記代数展開ステップが、上記判定ステップによってハードウェア量が妥当でないと判断された場合に、パラメータ保存ステップによって保存されるパラメータに基づき再度演算2値化セットを作成するとよい。これにより、入力多項式を複数の基本演算の組合せに展開するとともに、演算2値化セットに含まれる2値多項式に現れる最大変数数や代数展開の度合いを変更することにより、必要となるハードウェア量を調整したうえで計算することができる。その結果、当該計算方法は、使用可能なハードウェア資源に適した計算を実現することができる。
【0018】
本明細書において、「多項式」とは、定数、変数が、和、差、積で組み合わせて構成される計算式のことをいい、「2値多項式」とは、現われる定数、変数の定義域が2値である多項式のことをいう。また、定数、変数の積から構成される多項式の構成要素を「項」といい、例えば、2、X*Y、4*X*X*Y等によって表される。この「項」は、「係数を表す部分」、「変数を表す部分」、「変数の次数を表す部分」という3つの部分として符号化することができる。「変数を表す部分」及び「変数の次数を表す部分」は、項に現われる変数の数に応じて長くなるが、項に現われる変数の数及びその次数の最大値を所与・固定とすれば、符号化することができる。「積和形多項式」とは、項が和、差で組み合わされて構成される多項式のことであり、例えば、4*X*X*Y+X*Y−2等で示される。「代数和」は、二つの多項式を足して一つの多項式を作成する演算であり、「代数積」は、二つの多項式を掛けて一つの多項式を作成する演算である。
【0019】
「2値ベクトル値関数」とは、2値多項式の集まりのことをいう。「基本演算」とは、和・差・積・除・剰余算、条件分岐、代数和、代数積のいずれか又はそれらの組み合わせによって表される演算をいう。「既展開多項式2値ベクトル」とは、項を構成する変数の数、項数、定数の定義域などが限られた2分木構造を有さない多項式を符号化する2値ベクトルをいい、「未展開多項式2値ベクトル」とは、未展開多項式2値ベクトルあるいは既展開多項式2値ベクトルから2分木構造を有するよう再帰的に構成される2値ベクトルをいう。また、かかる「既展開多項式2値ベクトル」及び「未展開多項式2値ベクトル」を総称して「多項式2値ベクトル」という。「入力多項式」は、当該計算装置のためのコンパイラにより、当該計算装置で処理可能と判定されたプログラムソースに含まれる多項式から作成された未展開多項式2値ベクトルである。
【0020】
「演算2値化セット」とは、一つの基本演算を実装するために必要な情報であって、一又は複数の2値ベクトル値関数を構成する2値多項式及びこの2値多項式に係る入出力信号線並びに他の2値多項式における変数との対応からなる情報のことをいう。演算2値化セットにおける一つの2値ベクトル値関数は、複数の多項式2値ベクトルとして符号化される。同じ基本演算であっても、演算2値化セットに含まれる2値多項式に現れる最大変数数が異なると、演算2値化セットは通常異なるものになる。「結線論理」とは、電子回路の入力信号線と出力信号線との接続を規定する論理関数の集まりのことをいう。ある結線論理は、ある2値ベクトル値関数及び変数間の対応情報から構成される。
【発明の効果】
【0021】
以上説明したように、本発明の2値ベクトル及び多項式を用いる計算装置及び計算方法は、2値ベクトル値関数及び変数間の対応情報に基づいて構成される結線論理を使用し、計算を複雑な演算に組み直すことで計算式における演算の繰返し回数を削減し、ひいては計算の高速化を実現することができる。
【図面の簡単な説明】
【0022】
【図1】本発明の一実施形態に係る計算装置の構成を示す概略ブロック図である。
【図2】図1の計算装置を備える計算システムを示す概略ブロック図である。
【図3】図1の計算装置による計算処理方法を示すフローチャートである。
【図4】図1の計算装置とは異なる形態に係る計算装置の構成を示す概略ブロック図である。
【図5】図4の計算装置で行われる代数展開の流れを示す概略図である。
【図6】図4の計算装置による計算処理方法を示すフローチャートである。
【発明を実施するための形態】
【0023】
以下、適宜図面を参照しつつ本発明の実施の形態を詳説する。
【0024】
図1の計算装置1は、数値読込部2と、演算種読込部3と、記憶部4と、演算処理部5と、出力部6と、記録部7とを有している。
【0025】
計算装置1は、特に限定されないが、一般的には、図2に示すようにCPUを補佐するコプロセッサとして用いられる。計算装置1がコプロセッサとして用いられる場合、計算装置1が演算処理を行うのと並行して、CPUは別の処理を行うことができ、全体としての効率化を図ることができる。
【0026】
数値読込部2は、CPU等の計算機から入力される複数の入力数値の読み込みを行う。数値読込部2は、計算式に現れる一連の数値を2値ベクトルとして受けとる。ここで、2値ベクトルの表現としては、たとえば符号付き2進数表現や浮動小数点表現を用いることができる。数値読込部2は、複数の入力数値を演算処理部5に送る。また、数値読込部2は、複数の入力数値を、演算処理部5とともに、記録部7にも送る。
【0027】
演算種読込部3は、数値読込部2から入力される入力数値を対象とする基本演算の種類を読み込む。演算種読込部3は、かかる基本演算の種類を2値ベクトルとして読み込み、演算処理部5に送る。演算処理部5は、この情報に基づいて、記憶部4から演算2値化セットを選択する。
【0028】
記憶部4は、複数の演算2値化セットを保持する。一つの演算2値化セットが、計算式に現れる一つの基本演算に対応する。すなわち、ある1つの基本演算は、基本的には、その結果として得られる2値ベクトルの各ビット値を計算する2値多項式を符号化する2値ベクトルの集合として符号化される。これらの2値多項式から、1つの2値ベクトル値関数が構成される。但し、演算2値化セットは、基本演算が多段、たとえば和算と積算の組み合わせなどとなる場合、複数の2値ベクトル値関数を有することになる。2値ベクトル値関数を構成する2値多項式の符号化の形式としては、たとえば、段落0041及び段落0194以下に述べるような積和形多項式表現を用いることができる。2値多項式と変数との対応は、2値多項式の数の上限、変数の数の上限を所与・固定とすれば、各変数へ一意に番号を振ることで、2値ベクトルとして容易に符号化できる。記憶部4は、ROM、RAM等により計算装置1と一体的に構成されていてもよく、またCD−R等の電子媒体として別体的に構成されてもよい。記憶部4がRAMやCD−RWなどの書き込み可能な形で構成されている場合は、演算2値化セットを変更することができる。
【0029】
演算処理部5は、記憶部4に保持される演算2値化セットから構成される結線論理を用いて、数値読込部2及び演算種読込部3から送られる2値ベクトルにより指定される基本演算を処理する。演算処理部5は、演算2値化セットから一又は複数の結線論理を構成する一又は複数の結線ユニット8と、結線論理を実装する一又は複数の実装ユニット9と、2値ベクトル値関数及び変数間の対応情報と結線論理との対応をキャッシュする結線論理キャッシュ部10と、途中の計算結果を保持するレジスタ(図示せず)とを有している。
【0030】
結線ユニット8は、演算2値化セットに含まれる2値ベクトル値関数及び変数間の対応情報から結線論理を作成し、実装ユニット9へ送る。結線ユニット8は、入力対応線、2値ベクトル値関数入力線、出力対応線、出力信号線を有している。まず、演算2値化セットに含まれる2値ベクトル値関数が2値ベクトル値関数入力線から与えられ、2値ベクトル値関数に含まれる変数と入力変数との対応が入力対応線から与えられ、2値多項式と出力変数との対応が出力対応線から与えられる。これらに基づき、結線ユニット8は、入力信号線と2値ベクトル値関数に現れる変数とを対応させ、2値多項式と出力信号線とを対応させ、2値ベクトル値関数を変換して結線論理を作成する。これが出力信号線を通して実装ユニット9及び結線論理キャッシュ部10へ送られる。
【0031】
実装ユニット9は、一つの結線論理が表す電子回路として用いられる。実装ユニット9は、結線論理を用いて入力信号線と出力信号線とを接続させる。実装ユニット9の入力信号線には、数値入力部2から送られる入力数値又は他の実装ユニット9からの出力を符号化した2値ベクトルが与えられる。実装ユニット9の出力信号線から得られる信号は、他の実装ユニット9又は出力部6へ送られる。演算処理部5に複数の結線ユニット8及び実装ユニット9が含まれており、かつ演算2値化セットに含まれる2値ベクトル値関数が複数である場合、各2値ベクトル値関数が個別の結線ユニット8によって結線論理へ変換され、それぞれの結線論理は個別の実装ユニット9により電子回路として実装される。入力数値の各ビットと入力信号線との対応、ある実装ユニット9の出力信号線と他の実装ユニット9の入力信号線又は出力信号線との対応、並びに出力信号線と出力数値の各ビットとの対応は、演算2値化セットから与えられる。演算処理部5は、演算2値化セットに含まれれる変数間の対応情報、及びレジスタを用いて、これら複数の実装ユニット9間の出力・入力を連絡する。
【0032】
結線論理キャッシュ部10は、演算2値化セットに含まれる一つの2値ベクトル値関数及び変数間の対応情報と、結線論理との対応を保持する。当該計算装置1は、結線ユニット8によって結線論理を作成する前にこのデータの有無を調べ、結線論理キャッシュ部10がこのデータを保持していた場合はこのデータを使用する。
【0033】
演算処理部5は、基本演算に現れる入力変数を符号化するビット数の合計値が2値多項式に現れる最大変数数よりも多く、基本演算がブロック化される場合、演算2値化セットに含まれる2値ベクトル値関数が単数であっても、1つの結線論理を複数の異なる実装ユニット9を用いて別個に実装・利用する。例えば、基本演算が二つの数値の加算であり、2値多項式に現れる最大変数数が加算の対象である一つの入力変数を符号化するビット数の3倍であるとき、入力変数のビット群を上位と下位とに分け、下位ビット群を計算するための実装ユニット9及びその結果を桁上がり入力とし上位ビット群を計算するための実装ユニット9を用いることができる。
【0034】
出力部6は、演算結果を出力する。出力部6は、演算処理部5から送られる信号を、2値ベクトルとして、計算機やCPUに送る。
【0035】
記録部7は、電子回路からなり、数値読込部2及び演算種読込部3から演算処理部5への信号線並びに演算処理部5から出力部6への信号線、又はこれらの組み合わせが0、1となる割合やそれらがある組合せをとる頻度のデータを計算・記録する。記録部7で記録されたデータは、計算装置1の内外で使用することができる。
【0036】
次に、図3を参照して、計算装置1の動作手順について説明する。
【0037】
なお、計算装置1の使用に際しては、計算装置1で処理可能な計算を識別できるコンパイラが用いられることが好ましい。かかるコンパイラは、通常は、協調動作するCPUのためのコンパイラと同様に振舞う。このコンパイラは、計算装置1で処理可能な計算式を識別した場合に、これらの開始位置と終了位置に特殊なマークをつける。この開始マークは、終了マークの位置を示すようにする。また、このコンパイラは、必要によっては、計算式に現れる変数とその具体値との対応を計算し、計算式や変数を適宜2値ベクトルへ変換し、それらのデータをコンパイラにより作成されるファイル内に記録する。CPUは、メモリからデータを順に読み込んでいき、この開始マークを見つけた場合、計算装置1へのデータの読み込みを指示する。
【0038】
数値読込ステップ(STP1)は、複数の入力数値を読み込むステップである。これらの複数の入力数値は、数値読込部2によって読み込まれ、2値ベクトルとして演算処理部5に送られる。また、数値読込部2によって読み込まれた複数の入力数値は、演算処理部5に送られるとともに、記録部7へも送られる。
【0039】
演算種読込ステップ(STP2)は、入力数値を対象とする基本演算の種類を読み込むステップである。この情報は演算種読込部3によって読み込まれ、2値ベクトルとして演算処理部5及び記録部7へ送られる。STP2では、STP1と並行して、それらの数値を対象とする基本演算の種類を読み込む。この情報は、演算処理ステップ(STP3)で利用される。
【0040】
演算処理ステップ(STP3)は、記憶部4に保持される演算2値化セットから構成される結線論理を使用して複数の入力数値の基本演算を処理するステップである。具体的には、STP3は、演算処理部5が、記憶部4が保持している演算2値化セットの一つを、複数の入力数値及び演算種読込部3から指定される基本演算の種類に応じて選択することによって行われる。選択された演算2値化セットに含まれる2値多項式は、定数、変数が和、差、積により組み合わされることで構成されている。これらの式を、1−XをNOT Xと変換したうえで、X*YをX AND Y、X+YをX OR Yと変換することで、論理関数とすることができる。ここで、X、Yは、式に現れる変数を表す。論理関数に現れる変数を入力数値の2値ベクトルのあるビットと対応させ、かつ各論理関数を出力数値のあるビット又は他の論理関数に現れる変数と対応させることで、基本演算の結線論理を構成することができる。これらの対応は、記憶部4又は当該計算装置1のためのコンパイラが生成した情報から、演算2値化セットとして与えられる。2値多項式が未展開多項式2値ベクトルとして符号化されている場合は、それを構成する既展開多項式2値ベクトルごとに結線論理を作成し、その結線論理からの出力をレジスタに保持し、ほかの結線論理への入力とすることで、全体をブロック化して計算することができる。
【0041】
基本演算を2値多項式の集まり(2値ベクトル値関数)として定式化する方法について説明する。
【0042】
値域が有限である離散計算を考える。定義域が有限である任意の離散値からなる入力数値をa、bの2つとし、出力数値をzとする。説明容易のため、a、b、zは全て整数であり、正又は負であることを表す符号ビットを有する符号付き2進数として符号化されているとする。また、a、bは、各々、合計3ビットの正又は負の符号付き2進数であるとする。なお、計算対象の数値が浮動小数点型実数であるときは、仮数部・指数部にわけ、仮数部・指数部ごとに数値の桁を揃えることで、符号付き2進数同士の演算と同様に扱うことができる。
【0043】
a、bは、各々、正又は負を表す符号ビットを除いたビット数が2であるから、定義域は[−3、3]である。zの定義域は、演算が和の場合は[−6、6]、差の場合は[−6、6]、積の場合は[−9、9]、除の場合は[−3、3]、剰余の場合は[−2、2]である。
【0044】
入力数値a、bは、1つの表現方法として以下のように符号化することができる。
【0045】
定義域が[−2+1、2−1]である整数a(又はb)が値nをとるか否かをa(b)[n]∈{0、1}(n=−2+1,...,2−1)と表し、この符号化を1進ベクトル符号化と呼ぶ。例えば、10進数においてa=2であれば、a[2]=1、a[n]=0(n≠2)である。
【0046】
また、整数a(又はb)をN+1ビット目が符号を表す長さN+1の2値ベクトル[a(b),aN−1(bN−1),...,a(b),a(b)]として表し、この符号化を2進ベクトル符号化と呼ぶ。ここで、a(又はb)が負値のとき、a(b)=1であり、a(又はb)が正値のとき、a(b)=0であり、a(又はb)が0のとき、a(b)は0又は1のどちらでもよいものとする。例えば、10進数において、a=3であれば、a=1、a=1、a=0(m≠0,1)である。
【0047】
まず、加算の定式化について説明する。以下、a、bをそれぞれ横軸、縦軸と考えたときの、それらの組み合わせが第一象限の場合、第二象限の場合、第三象限の場合及び第四象限の場合に分けて説明する。
【0048】
(1)a、bの組み合わせが第一象限の場合
演算結果が0となる場合(z[0]=1となる場合)を列挙すると表1のようになる。このような列挙は、計算機を用いてプログラムを作成するなどして行うことができる。
【0049】
【表1】

【0050】
表1と同様に、演算結果が、1、2、3、4、5、6となる場合を列挙すると、それぞれ表2、表3、表4、表5、表6、表7となる。
【0051】
【表2】

【0052】
【表3】

【0053】
【表4】

【0054】
【表5】

【0055】
【表6】

【0056】
【表7】

【0057】
表8に、1進ベクトル符号化した場合の変数が1となる場合と、2進ベクトル符号化した場合の変数が1となるとなる場合の組み合わせを列挙する。ここで、全ての象限を考慮したzの定義域は[−6、6]であるから、zを2進ベクトル符号化した場合の合計ビット数は4で十分である。ここでは、第一象限のみを考慮しているため、a=0、b=0、z=0として問題はない。なお、表8の対応は、zだけでなくa、bについても成立する。
【0058】
【表8】

【0059】
表1から表8より、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(1)のようになる。
【0060】
【数1】

【0061】
同様に、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(2)のようになる。
【0062】
【数2】

【0063】
同様に、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(3)のようになる。
【0064】
【数3】

【0065】
(2)a、bの組み合わせが第二象限の場合
演算結果が−3となる場合(z[−3]=1となる場合)を列挙すると表9のようになる。
【0066】
【表9】

【0067】
表9と同様に、演算結果が、−2、−1、0、1、2、3となる場合を列挙すると、それぞれ表10、表11、表12、表13、表14、表15となる。
【0068】
【表10】

【0069】
【表11】

【0070】
【表12】

【0071】
【表13】

【0072】
【表14】

【0073】
【表15】

【0074】
表16に、1進ベクトル符号化した場合の変数が1となる場合と、2進ベクトル符号化した場合の変数が1となるとなる場合の組み合わせを列挙する。ここでは、第二象限のみを考慮しているため、a=1、b=0として問題はない。なお、表16の対応は、zだけでなくa、bについても成立する。
【0075】
【表16】

【0076】
表9から表16より、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(4)のようになる。
【0077】
【数4】

【0078】
同様に、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(5)のようになる。
【0079】
【数5】

【0080】
表16より、z=0である。
【0081】
同様に、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(6)のようになる。
【0082】
【数6】

【0083】
(3)a、bの組み合わせが第三象限の場合
第三象限では、a’=−a、b’=−bを導入することにより、a+b=−a’+(−b’)=−(a’+b’)(a’≧0,b’≧0)とみなすことができ、aを1−aに、bを1−bに入れ替えた上で第一象限の結果を利用することができる。ただし、z=1である。
【0084】
(4)a、bの組み合わせが第四象限の場合
第四象限では、a’=−a、b’=−bを導入することで、a+b=−a’+(−b’)=−(a’+b’)(a’≦0,b’≧0)とみなすことができ、aを1−aに、bを1−bに入れ替えた上で第二象限の結果を利用することができる。但し、zの値は、「1−第二象限の場合のzの計算式」となる。
【0085】
以上より、第k象限のz(m=0,1,2,3)の加算をfka(・,・)とした場合、象限の場合分けを内包することにより、加算によるzの2値多項式を、次式(7)のように定式化することができる。
【0086】
【数7】

【0087】
次に、減算の定式化について説明する。
【0088】
(1)a、bの組み合わせが第一象限の場合
第一象限では、b’=−bを導入することで、a−b=a+b’(a≧0,b’≦0)とみなすことができ、bを1−bに入れ替えた上で第四象限における加算の結果を利用することができる。
【0089】
(2)a、bの組み合わせが第二象限の場合
第二象限では、b’=−bを導入することで、a−b=a+b’(a≦0,b’≦0)とみなすことができ、bを1−bに入れ替えた上で第三象限における加算の結果を利用することができる。
【0090】
(3)a、bの組み合わせが第三象限の場合
第三象限では、b’=−bを導入することで、a−b=a+b’(a≦0,b’≧0)とみなすことができ、bを1−bに入れ替えた上で第二象限における加算の結果を利用することができる。
【0091】
(4)a、bの組み合わせが第四象限の場合
第四象限では、b’=−bを導入することで、a−b=a+b’(a≧0,b’≧0)とみなすことができ、bを1−bに入れ替えた上で第一象限における加算の結果を利用することができる。
【0092】
以上より、第k象限のz(m=0,1,2,3)の減算をfks(・,・)とした場合、象限の場合分けを内包することにより、減算によるzの2値多項式を、次式(8)のように定式化することができる。
【0093】
【数8】

【0094】
次に、乗算の定式化について説明する。
【0095】
(1)a、bの組み合わせが第一象限の場合
演算結果が0となる場合(z[0]=1となる場合)を列挙すると表17のようになる。
【0096】
【表17】

【0097】
表17と同様に、演算結果が、1、2、3、4、6、9となる場合を列挙すると、それぞれ表18、表19、表20、表21、表22、表23となる。なお、演算結果が、5、7、8となる場合は存在しない。
【0098】
【表18】

【0099】
【表19】

【0100】
【表20】

【0101】
【表21】

【0102】
【表22】

【0103】
【表23】

【0104】
表24に、1進ベクトル符号化した場合の変数が1となる場合と、2進ベクトル符号化した場合の変数が1となるとなる場合の組み合わせを列挙する。ここで、全ての象限を考慮したzの定義域は[−9、9]であるから、zを2進ベクトル符号化した場合の合計ビット数は5で十分である。ここでは第一象限のみを考慮しているため、a=0、b=0、z=0として問題ない。なお、表24の対応は、zだけでなくa、bについても成立する。
【0105】
【表24】

【0106】
表17から表24より、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(9)のようになる。
【0107】
【数9】

【0108】
同様に、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(10)のようになる。
【0109】
【数10】

【0110】
同様に、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(11)のようになる。
【0111】
【数11】

【0112】
同様に、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(12)のようになる。
【0113】
【数12】

【0114】
(2)a、bの組み合わせが第二象限の場合
第二象限では、a’=−aを導入することで、ab=−a’b(a’≧0,b≧0)とみなすことができ、aを1−aに入れ替えた上で第一象限の結果を利用することができる。ただし、z=1である。
【0115】
(3)a、bの組み合わせが第三象限の場合
第三象限では、a’=−a、b’=−bを導入することで、ab=−a’(−b’)=a’b’(a’≧0,b’≧0)とみなすことができ、aを1−aに、bを1−bに入れ替えた上で第一象限の結果を利用することができる。
【0116】
(4)a、bの組み合わせが第四象限の場合
第四象限では、b’=−bを代入することで、ab=a(−b’)=−ab’(a≧0,b’≧0)とみなすことができ、bを1−bに入れ替えた上で第一象限の結果を利用することができる。ただし、z=1である。
【0117】
以上より、第k象限のz(m=0,1,2,3)の乗算をfkm(・,・)とした場合、象限の場合分けを内包することにより、乗算によるzの2値多項式を、次式(13)のように定式化することができる。
【0118】
【数13】

【0119】
続いて、除算の定式化について説明する。なお、除算の定式化では、演算対象の数値が分数表現のように複数ではなく、単一の数値で表される場合、複数の入力数値の定義域の大きさが、プログラムを用いて計算機上で列挙可能な範囲に限られる。これに対し、加算・乗算は、一般的に桁上がり入力のある全加算器を用いる場合のようにブロック化することで、定義域が広くすべての演算結果を列挙することが現実的でない場合でも、定式化することができる。但し、除算であっても、数値が分数として二つの数値によって表され、分母・分子をそれぞれ整数として扱うことができるならば、1つの除算を二つの乗算に変換できるため、ブロック化によって定式化可能な規模を向上させることができる。
【0120】
(1)a、bの組み合わせが第一象限の場合
演算結果が0となる場合(z[0]=1となる場合)を列挙すると表25のようになる。ここで説明する演算は、小数をその値よりも0から離れない値のうちもっとも0から遠い整数とする関数を「floor」としたとき、「floor(a÷b)」と表される。小数をその値よりも0に近づかない値のうちもっとも0から近い整数とする関数を「ceil」としたとき、以下に説明するものと同様の手続きにより、「ceil(a÷b)」も表すことができる。ただし、b≠0を前提とする。
【0121】
【表25】

【0122】
表25と同様に、演算結果が、1、2、3となる場合を列挙すると、それぞれ表26、表27、表28となる。
【0123】
【表26】

【0124】
【表27】

【0125】
【表28】

【0126】
表29に、1進ベクトル符号化した場合の変数が1となる場合と、2進ベクトル符号化した場合の変数が1となるとなる場合の組み合わせを列挙する。ここで、全ての象限を考慮したzの定義域は[−3、3]であるから、zを2進ベクトル符号化した場合の合計ビット数は3で十分である。ここでは第一象限のみを考慮しているため、a=0、b=0、z=0として問題ない。なお、表29の対応は、zだけでなくa、bについても成立する。
【0127】
【表29】

【0128】
表25から表29より、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(14)のようになる。
【0129】
【数14】

【0130】
同様に、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(15)のようになる。
【0131】
【数15】

【0132】
(2)a、bの組み合わせが第二象限の場合
第二象限では、a’=−aを導入することで、a/b=−a’/b(a’≧0,b≧0)とみなすことができ、aを1−aに入れ替えた上で第一象限の結果を利用することができる。ただし、z=1である。
【0133】
(3)a、bの組み合わせが第三象限の場合
第三象限では、a’=−a、b’=−bを導入することで、a/b=a’/b’(a’≧0,b’≧0)とみなすことができ、aを1−aに、bを1−bに入れ替えた上で第一象限の結果を利用することができる。
【0134】
(4)a、bの組み合わせが第四象限の場合
第四象限では、b’=−bを導入することで、a/b=−a/b’(a≧0,b’≧0)とみなすことができ、bを1−bに入れ替えた上で第一象限の結果を利用することができる。ただし、z=1である。
【0135】
以上より、第k象限のz(m=0,1,2)の除算をfkd(・,・)とした場合、象限の場合分けを内包することにより、除算によるzの2値多項式を、次式(16)のように定式化することができる。
【0136】
【数16】

【0137】
次に、剰余算の定式化について説明する。なお、剰余算の定式化については、複数の入力数値の定義域の大きさが、プログラムを用いて計算機上で列挙可能な範囲に限られる。ここで説明する演算は、「amodb」と表すことができる。ただし、b≠0を前提とする。また、演算結果の符号はaと同じとする。たとえば、−3mod2、−3mod(−2)の結果は−1であり、3mod2、3mod(−2)の結果は1である。
【0138】
(1)a、bの組み合わせが第一象限の場合
演算結果が0となる場合(z[0]=1となる場合)を列挙すると表30のようになる。
【0139】
【表30】

【0140】
表30と同様に、演算結果が、1、2となる場合を列挙すると、それぞれ表31、表32となる。
【0141】
【表31】

【0142】
【表32】

【0143】
表33に、1進ベクトル符号化した場合の変数が1となる場合と、2進ベクトル符号化した場合の変数が1となるとなる場合の組み合わせを列挙する。ここで、全ての象限を考慮したzの定義域は[−2、2]であるから、zを2進ベクトル符号化した場合の合計ビット数は3で十分である。ここでは第一象限のみを考慮しているため、a=0、b=0、z=0として問題はない。なお、表33の対応はzだけでなくa、bについても成立する。
【0144】
【表33】

【0145】
表30から表33より、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(17)のようになる。
【0146】
【数17】

【0147】
同様に、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(18)のようになる。
【0148】
【数18】

【0149】
(2)a、bの組み合わせが第二象限の場合
計算結果が−2となる場合(z[−2]=1となる場合)を列挙すると表34のようになる。
【0150】
【表34】

【0151】
表34と同様に、計算結果が、−1、0となる場合を列挙すると、それぞれ表35、表36となる。
【0152】
【表35】

【0153】
【表36】

【0154】
表37に、1進ベクトル符号化した場合の変数が1となる場合と、2進ベクトル符号化した場合の変数が1となるとなる場合の組み合わせを列挙する。ここでは、第二象限のみを考慮しているため、a=1、b=0、z=1として問題はない。なお、表37の対応は、zだけでなくa、bについても成立する。
【0155】
【表37】

【0156】
表34から表37より、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(19)のようになる。
【0157】
【数19】

【0158】
同様に、zを2進ベクトル符号化した場合の変数zの2値多項式は、次式(20)のようになる。
【0159】
【数20】

【0160】
(3)a、bの組み合わせが第三象限の場合
第三象限では、a’=−a、b’=−bを導入することにより、amodb=−(a’modb’)(a’≧0,b’≧0)とみなすことができ、aを1−aに、bを1−bに入れ替えた上で第一象限の結果を利用することができる。ただし、z=1である。
【0161】
(4)a、bの組み合わせが第四象限の場合
第四象限では、b’=−bを導入することにより、amodb=amodb’(b’≧0)とみなすことができ、bを1−bに入れ替えた上で第一象限の結果を利用することができる。
【0162】
以上より、第k象限のz(m=0,1,2)の剰余算をfkr(・,・)とした場合、象限の場合分けを内包することにより、剰余算によるzの2値多項式を、次式(21)のように定式化することができる。
【0163】
【数21】

【0164】
なお、かかる定式化は、上述の加・減・乗・除・剰余に限られず、例えば、平方根、階乗、対数等所望の演算についても行うことができる。また、少なくとも加算・減算・乗算については、桁上がり入力を考慮したものへと拡張することができる。
【0165】
出力ステップ(STP4)は、STP3によって行われる演算結果を出力するステップである。STP4は、出力部6により、演算処理部5から送られる信号を、2値ベクトルとして出力する。
【0166】
当該計算装置1は、演算2値化セットから構成される結線論理を使用して計算を複雑な演算に組み直したうえで演算処理を行うので、計算式における演算の繰返し回数を削減することができる。その結果、当該計算装置1は、計算時間を効果的に削減することができる。
【0167】
当該計算装置1は、記憶部4が多入力・多出力論理素子の使用を前提とする演算2値化セットを保持することにより、計算の処理速度をさらに高速化することができる。なお、かかる多入力・多出力論理素子については、特開平03−291014号公報等を参照することができる。また、多入力・多出力論理素子を2入力1出力の論理素子から構成される電子回路で代用することもできる。
【0168】
当該計算装置1は、結線論理キャッシュ部10が保持する情報を用いることにより、結線論理作成の手間を省き、以前に実行された計算の処理速度をさらに高速化することができる。
【0169】
図4の計算装置11は、数値読込部2と、出力部6と、多項式読込部12と、展開部13と、パラメータ部14と、判定部15と、演算2値化セットキャッシュ部16と、記憶部17と、記録部18と、演算処理部19とを有している。
【0170】
以下の説明において、図1の計算装置1と同様の構成については同一番号を付して適宜説明を省略する。
【0171】
多項式読込部12は、2値ベクトルとして符号化された入力多項式を読み込む。多項式読込部12は、かかる2値ベクトルを、機械語ではなく、LISPにおけるS式又は逆ポーランド記法等の2分木構造を保って符号化された未展開多項式2値ベクトルとして読み込み、展開部13や演算2値化セットキャッシュ部16に送る。このように、多項式読込部12は、2分木構造を保持した状態で基本演算を読み込む必要があるため、計算装置11を用いるためには、計算装置11で処理可能な計算を識別できるコンパイラが必要となる。
【0172】
展開部13は、計算装置11が行う計算を、パラメータ部14が保持する情報に従いつつ、できるだけ段数の小さな未展開多項式2値ベクトル、又はできるだけ少数の次数が低い変数から構成される項を含む既展開多項式2値ベクトルとなるよう代数展開して演算2値化セットを作成する。展開部13は、代数展開を表す演算2値化セットを結線論理へ変換するための結線ユニットと、その結線論理を実装する実装ユニットと、計算の途中結果を保持するレジスタと、2分木構造を保って2値ベクトルを保持するためのスタック用レジスタと、処理対象の2値ベクトルを保持するためのオペランド用レジスタと、結線論理キャッシュ部とを有している(ともに図示せず)。展開部13は、多項式読込部12から送られる入力多項式を受け取る。入力数値は、それぞれ、パラメータ部14に保持されているビット数に従い、2値ベクトルに変換される。入力多項式は、2分木構造を保つ2値ベクトルとして与えられる。例えば、「(a+b)*c」という計算式は、逆ポーランド記法で「ab+c*」と表され、+を101、*を111、a、b、cをそれぞれ00101 00000 00000 00000 00000 00000、01001 00000 00000 00000 00000 00000、01101 00000 00000 00000 00000 00000と符号化することで、「00101 00000 00000 00000 00000 00000 01001 00000 00000 00000 00000 00000 101 01101 00000 00000 00000 00000 00000 111」という2値ベクトルとして符号化することができる。展開部13は、まず、2値ベクトルとして与えられた入力多項式を、代数展開多項式を実装する実装ユニットを用いて、所定の多項式2値ベクトルを用いて代数展開する。この結果、代数展開の度合いが十分大きければ、一つの積和形多項式を表す一つの2値ベクトルが得られる。上の例では、まず「a+b」という多項式を表す「00101 00000 00000 01001 00000 00000」という多項式が、続く展開で「a*c+b*c」という多項式を表す「00101 01101 00000 01001 01101 00000」という一つの2値ベクトルが得られる。この代数展開の度合いを制御するために、パラメータ部14に保持されるデータが用いられる。なお、代数展開の途中結果は、レジスタやスタック用レジスタ、オペランド用レジスタに保持される。
【0173】
展開部13は、2値ベクトル値関数として符号化される複数の多項式から、単一の多項式2値ベクトルを構成する。この構成例の様子を、図5に示す。
【0174】
図5では、説明の容易のため、2値ベクトル値関数は同一であり、その表す多項式はx1=a1+b1であるとする。ここで、a1、b1は、それぞれ入力変数である。但し、b1は、他の入力変数c1、d1からなるc1+d1という多項式の出力とする。すなわち、例示している基本演算は、x1=a1+c1+d1という多項式を符号化しているとする。
【0175】
図5(1)は、a1+b1が逆ポーランド記法で符号化され、a1b1+という形で与えられている状況を示す。ここで、a1、b1、+は本来すべて2値ベクトルとして保持されるが、説明の容易のため文字列として表記している。
【0176】
図5(2)では、これらの2値ベクトルのうち、a1の部分がオペランド用レジスタR1へ送られる。この変数はこれ以上代数展開されないことから、そのままスタック用レジスタへ送られる。残りはb1+となる。
【0177】
図5(3)では、b1の部分がオペランド用レジスタR1へ送られる。この変数はさらにc1+d1という多項式に展開されるが、この情報がオペランド用レジスタR2へ送られる。これらのレジスタの値を用いて、c1+d1という多項式が既展開多項式2値ベクトルとしてスタック用レジスタへ送られる。
【0178】
図5(4)は、+を表す2値ベクトルから、対応する基本演算(代数和)が選択され、これから結線ユニットで作成された(又は結線論理キャッシュ部から取り出された)結線論理が実装ユニットへ送られた状況である。ここでは、代数和を符号化する演算2値化セットが記憶部17から利用可能であることを前提としている。図5(3)のスタック用レジスタの上位にある二つの2値ベクトルが、オペランド用レジスタへ送られる。
【0179】
図5(5)は、実装ユニットの入力信号線へオペランド用レジスタの値を入力することで、それらの代数和として得られる既展開多項式2値ベクトルを符号化する2値ベクトルが出力信号線から得られ、これがスタック用レジスタの最上位へ送られた状況を表している。
【0180】
また、展開部13は、作成した多項式2値ベクトル、入力数値と多項式に表れる変数の対応、多項式と他の多項式に現れる変数との対応、多項式と出力数値との対応をまとめ、1つの演算2値化セットを作成する。この際、未展開多項式2値ベクトルが存在する場合には、2分木の葉に位置する多項式をそれぞれ2値ベクトル値関数として符号化し、これらで置き換えられる変数を新たに用意し、これらの変数と2値ベクトル値関数を構成する2値多項式との対応を保持することで、ブロック構造を有するものとして演算2値化セットを作成する。展開部13は、作成した演算2値化セットを判定部15に送る。
【0181】
作成された演算2値化セットは、判定部15によって、使用可能なハードウェアを用いて実現できると判定された場合、展開部13から記憶部17へ送られる。展開部13は、必要に応じて演算2値化セットキャッシュ部16へも演算2値化セットを送る。演算2値化セットキャッシュ部16は、必要に応じて演算2値化セットと入力多項式との対応を記録する。
【0182】
演算処理部19は、通常、複数の演算処理部5を有している。演算処理部19は、展開部13により作成され、記憶部17から送られる演算2値化セットが表す基本演算を処理する。具体的には、演算処理部19は、まず、演算2値化セットに含まれている2値多項式のうち、変数が入力数値と対応するもの(2値ベクトル)だけを選択し、その2値多項式を構成する各項の値を計算し、その後これらの値の多項式全体にわたる総和をとる。この際、記憶部17は、各項の値の計算には積算を表す演算2値化セットを、項に渡る総和の計算には和算を表す演算2値化セットを演算処理部5に与える。演算処理部19は、これらの演算2値化セット及び別途与えられる入力数値を用いて演算を処理する。この計算の途中結果は、適宜レジスタに保存され、使用される。続いて、演算処理部19は、値の確定した2値多項式又は入力数値のみを入力変数とする2値多項式の値を、同様に計算する。そして、演算処理部19は、かかる処理を繰り返すことで、展開部13に与えられた入力多項式の、その変数に入力数値を代入した結果を計算する。この計算結果は、出力部6に送られる。
【0183】
パラメータ部14は、演算2値化セットに含まれる2値多項式に現れる最大変数数を、使用可能なハードウェア量に応じて予め設定する。ここで設定される変数数は、演算2値化セットを作成する時のパラメータとなる。絶対値の計算など入力数値が一つである演算を例にとれば、入力数値の定義域が10ビットでカバーされるとき、最大変数数を10として入力数値を一つの10ビットの2値ベクトルとするか、最大変数数を5として入力数値を二つの5ビットの2値ベクトルとするかは任意である。しかし、前者の変数数では、使用するハードウェア量が大きくなり、実現が難しい場合がある。従って、パラメータ部14は、使用可能なハードウェア量が実現したい計算装置の規模と比べて小さい場合には、計算全体が多段のブロック構造をとる電子回路となることを想定し、1つの数値が多数の2値ベクトルとして符号化されるよう、変数数を少なくする。また、パラメータ部14は、展開部13による演算2値化セットを実装するために必要なハードウェア量に影響を与える、代数展開度合いを保持する。代数展開の度合いが大きい場合、項はより多数の変数から構成されるように、また演算2値化セットはより多数の項から構成されるように作成され、これを実装する際のハードウェア量は大きくなる。それらのパラメータは、計算装置11の外部から計測可能であり、また計算装置11の内部又は外部から設定可能である。
【0184】
なお、ここでいう、「代数展開度合い」とは、未展開多項式2値ベクトルを既展開多項式2値ベクトルへ展開する際に、完全に展開するか、展開を途中でとどめるかを制御するパラメータである。この制御は、例えば、2分木構造の根(ルート)からの深さがある値以上となる位置にある2分木は展開しない、などとなる。この制御は、このように一律に規定するだけでなく、演算の種類に基づいて枝ごとに規定することもできる。
【0185】
判定部15は、展開部13から送られる演算2値化セットから構成される結線論理を実装する際のハードウェア量が妥当であるかを判定する。判定部15は、かかるハードウェア量が妥当でないと判断した場合、パラメータ部14に保持されているパラメータを必要に応じて変更し、展開部13に多項式2値ベクトルの再展開及び演算2値化セットの再作成を指示する。
【0186】
演算2値化セットキャッシュ部16は、多項式読込部12によって読み込まれた入力多項式及び展開部13で作成されて送られた演算2値化セットとの対応を保持する。具体的には、演算2値化セットキャッシュ部16は、入力多項式を表す、2分木構造を保つものとして符号化された2値ベクトルと、演算2値化セットを符号化する2値ベクトルとの対応を関連付けて保存する。
【0187】
記憶部17は、演算処理部19や展開部13で使用される演算2値化セットを2値ベクトルとして保持する。かかる演算2値化セットは、計算装置11の外部から入力されてもよく、展開部13又は演算2値化セットキャッシュ部16から送られてもよい。記憶部17に保持される演算2値化セットは、演算処理部19や展開部13で使用される他、計算装置11の外部で使用されてもよい。なお、記憶部17は、記憶部4と同様、ROM、RAM又はCD−R等により構成される。
【0188】
記録部18は、電子回路からなり、数値読込部2から演算処理部19への信号線並びに演算処理部19から出力部6への信号線、又はこれらの組み合わせが0、1となる割合等のデータを計算・記録する。記録部18で記録されたデータは、展開部13又は計算装置11の内外で使用することができる。
【0189】
次に、図6を参照して、当該計算装置11の動作手順について説明する。
【0190】
まず、パラメータ保存ステップ(図示せず)として、パラメータ部14が、演算2値化セットに含まれる2値多項式に現れる最大変数数を、使用可能なハードウェア量に対応させて設定する。この設定は、計算装置11の内部又は外部から行うことができる。また、パラメータ部14は、展開部13により作成される演算2値化セットを実装する際に必要となるハードウェア量に影響を与える、代数展開度合いを保存する。
【0191】
多項式読込ステップ(STP11)は、入力多項式を読み込むステップである。STP11では、多項式読込部12により、入力多項式が読み込まれる。
【0192】
代数展開ステップ(STP12)は、STP11によって読み込まれた入力多項式を、所定の多項式2値ベクトルを用いて代数展開する。また、STP12は、これらの多項式2値ベクトルに含まれる変数と入力多項式に含まれる変数との対応、多項式2値ベクトルと他の多項式2値ベクトルに現れる変数との対応、多項式2値ベクトルとして符号化される2値多項式と出力変数との対応を計算し、演算2値化セットを作成する。STP12で作成された演算2値化セットは判定部15に送られる。STP12は、展開部13で行われる。なお、展開部13による多項式の展開は、度合いが大きいほど論理関数の段数を少なくすることができる。他方、多項式の展開度合いが大きいほど、項数、各項への入力信号数(項を構成する変数の数に等しい)、各項からの出力信号数等が増加し、必要なハードウェア量が増大する。
【0193】
代数展開の定式化について説明する。なお、後述の定式化では、条件分岐を含む演算も対象とする。条件分岐を含む演算は、前述した和・差・積・除・剰余算の定式化の説明において象限の場合分けを内包するために使われていたものである。
【0194】
(1)代数展開の定式化
以下に、積和形多項式表現の一例及びこれに基づく代数展開多項式の一例について説明する。
【0195】
代数展開の定式化としては、一つの項(単項)と一つの多項式との展開について説明する。複数の項からなる多項式同士の展開等は、これらを2分木構造をもつものとして表せば、それらの式の展開を繰り返すことで行うことができる。記述容易のため、可能な変数の数、可能な項の数を、それぞれN、Mとし、項の係数の定義域の大きさ及び次数の定義域の大きさは、どちらも[−2D−1+1,2D−1−1]とする(すなわち、どちらも符号ビットを含めてDビットで符号化されている)。このとき、ある多項式Aは、次式(22)のように次のようなビット数M(D+ND)の2進ベクトルとして符号化することができる。
【0196】
【数22】

【0197】
ここで、A=〈Ai,1,...,Ai,D〉は、項iの係数を表す。Ai,j∈{0,1}は、項iの係数を2進ベクトル符号化したときのjビットの値を表す。また、A=〈Ai,1,...,Ai,N〉は、項iに含まれる変数の次数の集合を表す。Ai,jが非0をとることは、項iに変数jが現れ、その次数がAi,jであることを表す。Ai,jが0であることは、項iに変数jが現れないことを表す。Ai,j=〈Ai,j,1,...,Ai,j,D〉は、項iの変数jの次数を表し、Ai,j,k∈{0,1}は、項iの変数jの次数を2値ベクトル符号化したときのkビットの値を表す。
【0198】
一つの項からなる多項式A(A≠0,A=0(i≠1))及び多項式Bを対象とするx+(y+z)=x+y+zという形の代数和による代数展開は、計算結果の多項式をCとしたとき、次式(23)〜(25)のように表すことができる。ここで、2進ベクトルとスカラとの比較は、2進ベクトルを10進数の整数へ変換した後での比較を表すことにする。また、多項式Bは0でない、すなわち∃i∈{1,...,M}(B≠0)とする。
【0199】
=Aなる項iがあれば、∀i’∈{1,...,M}について、
【0200】
【数23】

【0201】
そうでなければ、以下のように、係数が0である項をAで置き換える。
【0202】
=0なる項iが存在すれば、∀i’∈{1,...,M}について、
【0203】
【数24】

【0204】
ここで、Z∈{0,1}は、項iがB=0なる添字のうち最小であるか否かを表し、次のように計算される。
【0205】
【数25】

【0206】
=0なる項iが存在しなければ、項数がMを越えているので、異常フラグをたて、何もしない。
【0207】
但しここでは、多項式内に全ての変数の次数が同じ項(即ち、変数が同じである項)が複数含まれることはないこと、及び演算が定義域に収まらなかったことを表す異常フラグが存在すること、を前提としている。
【0208】
かかる多項式展開は、次式(26)、(27)のように2値多項式として定式化することができる。
【0209】
【数26】

【0210】
【数27】

【0211】
ここで、F∈{0,1}はA=Bなる項iが存在するか否かを表す。この値の計算は次のように定式化できる。
【0212】
【数28】

【0213】
但し、F∈{0,1}はA=Bが成立するかを表す。この値の計算は次のように定式化できる。
【0214】
【数29】

【0215】
なお、A1,j,D、Bi,j,Dは、それぞれA1,j、Bi,jの符号を表すビットとする。
【0216】
の計算は、次のように定式化することができる。
【0217】
【数30】

【0218】
なお、Bi,Dは、Bの符号を表すビットとする。
【0219】
また、一つの項からなる多項式A(A≠0,A=0(i≠1))と多項式Bを対象とするx(yz)=xyz,x(y+z)=xy+yzという形の代数積による代数展開は、計算結果の多項式をCとして次式(31)のように表すことができる。
【0220】
【数31】

【0221】
また、この代数展開は、次式(32)、(33)のように定式化することができる。
【0222】
【数32】

【0223】
【数33】

【0224】
なお、以上の計算式では、表記の容易のために、本来2値ベクトルの要素ごとに示すべき計算式を略記している。例えば、X:=YというDビットの2値ベクトル間の代入式は、正確には、次式(34)を表す。
【0225】
【数34】

【0226】
また、2値ベクトル同士の和積算(例えば、A×B)を構成する2値多項式は、別途演算2値化セットにより与えられていることを前提にしている。
【0227】
(2)条件分岐式の定式化
条件分岐式の定式化の例として、|A−B|(A≧0、B≧0)を例に説明する。|A−B|は、「B≧AであればB−A、そうでなければA−B」という条件に従う条件分岐式として表すことができる。そして、B≧Aであるか否かは、A−Bの結果が負であるか否かとして、A、BともにNビットで符号化されているとして、f1s(A,B)として定式化することができる。一方、B−Aの結果はf1s(B,A)として、またA−Bの結果はf1s(A,B)(k=0,1,2,・・・,N−1)として定式化することができる。従って、「C」を条件が成立するか否かを1,0で表現する変数として定義し、C=f1s(A,B)とすることにより、計算結果Hは、H=Cf1s(B,A)+(1−C)f1s(A,B)=f1s(A,B)f1s(B,A)+(1−f1s(A,B))f1s(A,B)(k=0,1,2,・・・,N−1)として定式化することができる。
【0228】
判定ステップ(STP13)は、展開部13から送られる演算2値化セットを実装する際に必要となるハードウエア量が妥当であるか否かを判定するステップである。STP13は、判定部15により行われる。判定部15は、使用可能なハードウェア量を考慮したうえ、用いられるハードウェア量が妥当でないと判断した場合、パラメータ部14が保持するパラメータの変更を行うとともに、展開部13に再展開を指示する。一方、判定部15がハードウェア量が妥当であると判断した場合は、演算処理ステップ(STP14)に移行する。
【0229】
STP13においてハードウエア量が妥当でないと判断された場合はSTP12に移行する。この場合、展開部13は、パラメータ部14が保持する変更後のパラメータに従って、多項式を再展開する。
【0230】
数値読込ステップ(STP16)は、入力多項式により処理される具体的数値を読み込むステップである。STP16は、数値読込部2により行われる。STP16は、STP11で読み込まれた入力多項式に現れる入力変数へ代入する具体的数値を、代入先の入力変数との対応と併せて読み込む。それらの情報は、計算装置11に対応するコンパイラにより作成される。
【0231】
演算処理ステップ(STP14)は、展開部13により作成され、記憶部17から送られる演算2値化セットが表す演算を処理するステップである。STP14は、演算処理部19により行われる。
【0232】
出力ステップ(STP15)は、STP14により行われた演算結果を出力するステップである。STP15は、出力部6により、演算処理部19から送られる信号を2値ベクトルとして出力する。この際、典型的には、符号付き2進数表現が用いられるが、浮動小数点表現を用いることも可能である。
【0233】
当該計算装置11は、多項式を2値ベクトルとして符号化することができる。当該計算装置11は、入力多項式を複数の演算の組合せに展開するとともに、演算2値化セットに含まれる2値多項式に現れる最大変数数や代数展開の度合いを変更することにより、必要となるハードウェア量を調整することができる。その結果、当該計算装置11は、使用可能なハードウェア資源に応じた計算環境を提供することができる。
【0234】
当該計算装置11は、多入力・多出力論理素子が利用可能な場合、記憶部17が、多入力・多出力論理素子の使用を前提とした演算2値化セットを保持することにより、代数展開度合いを大きくし、計算の段数を減少することができ、ひいては計算の処理速度をさらに高速化することができる。
【0235】
当該計算装置11は、演算2値化セットキャッシュ部16により、多項式読込部12によって読み込まれた入力多項式及びそれを展開部13で展開することで作成された演算2値化セットが対応付けられて保存されている。従って、当該計算装置11は、過去に計算された入力多項式については、演算2値化セットキャッシュ部16に保存されているデータを記憶部17に送ることにより、展開部13が演算2値化セットを作成する手間を省略することができる。その結果、当該計算装置11は、一度行われた計算の処理速度をさらに向上することができる。
【0236】
当該計算装置11は、演算処理部5の内部又は展開部13の内部にある結線論理キャッシュ部により、演算2値化セットに含まれる一つの2値ベクトル値関数及び変数間の対応情報と、結線論理とが対応づけられて保存されている。当該計算装置11は、演算2値化セットに含まれる2値ベクトル値関数及び変数間の対応情報から結線ユニットを用いて結線論理を作成する手間を、対応する結線論理が結線論理キャッシュ部に保持されている場合に省くことができる。その結果、当該計算装置11は、一度行われた計算の処理速度をさらに向上することができる。
【0237】
当該計算装置11は、記録部18により、入力信号値及び/又は出力信号値が0又は1となる割合やそれらがある組み合わせをとる頻度が記録されている。従って、当該計算装置11は、展開部13が多項式を作成するに際して、記録部18に保存されているデータを利用することができる。展開部13は、これらの割合に基づいて演算2値化セットを作成することにより、より効率的な代数展開を行うことができる。
【0238】
当該計算装置11は、記憶部17を書き込み可能な媒体として構成し、記憶部17に新たな演算2値化セットを書き込めるようにすることにより、計算を組み直す基本演算を変更し、所望の計算を高速処理することができる。その結果、当該計算装置11は、各ユーザに特化した計算を高速に行うことができる。
【0239】
なお、本発明の2値ベクトルを用いる計算装置及び計算方法は、上記態様の他、種々の変更、改良を施した態様で実施することができる。例えば、当該計算装置は、電子回路をProgrammable Array Logic、Generic Array Logic、Complex Programmable Logic Device、Field Programmable Logic Array等の書き換え可能な計算装置を用いて実装することができる。
【0240】
また、当該計算装置は、複数の演算処理部19を具備するように構成されてもよい。これにより、当該計算装置は、入力多項式又は入力多項式を代数展開することで得られる2値多項式を構成する複数の基本演算を並行して処理することができる。具体的には、当該計算装置は、入力多項式が代数展開ステップによって、例えばab+acd+aceに展開された場合、この多項式の各項(ab、acd及びace)を複数の演算処理部19によって別個に並行して処理することができる。従って、当該計算装置は、各々の演算処理部19の処理結果を他の演算処理部19に送ることができるように互いに関連付けて構成することで、入力多項式の計算時間をさらに短縮することができる。
【0241】
さらに、当該計算装置は、展開部を複数備えることによって、未展開多項式2値ベクトルの一部となっている未展開多項式2値ベクトルを切り出し、その代数展開を別の展開部で行うことができ、計算の高速化を向上することができる。
【産業上の利用可能性】
【0242】
以上のように、本発明の2値ベクトル及び多項式を用いる計算装置及び計算方法は、2値ベクトル値関数及び変数間の対応情報に基づいて構成される結線論理を使用し、計算を複雑な演算に組み直すことで計算式における演算の繰返し回数を削減して計算の高速化を実現するのに適している。
【符号の説明】
【0243】
1 計算装置
2 数値読込部
3 演算種読込部
4 記憶部
5 演算処理部
6 出力部
7 記録部
8 結線ユニット
9 実装ユニット
10 結線論理キャッシュ部
11 計算装置
12 多項式読込部
13 展開部
14 パラメータ部
15 判定部
16 演算2値化セットキャッシュ部
17 記憶部
18 記録部
19 演算処理部

【特許請求の範囲】
【請求項1】
多項式を用いて複数の入力数値を演算する演算装置において、
複数の入力数値を読み込む数値読込手段と、
上記入力数値を対象とする基本演算の種類を読み込む演算種読込手段と、
複数の演算2値化セットを保持する記憶手段と、
上記複数の入力数値及び基本演算の種類の各々を2値からなる複数のベクトルとして受け取り、それらを上記演算2値化セットから構成される結線論理を使用して処理する演算処理手段と、
演算結果を出力する出力手段と
を有することを特徴とする計算装置。
【請求項2】
入力多項式を読み込む多項式読込手段と、
この入力多項式を、所定の多項式2値ベクトルを用いて代数展開して演算2値化セットを作成する代数展開手段と、
演算2値化セットに含まれる2値多項式に現れる最大変数数及び上記代数展開手段による代数展開の度合いを保存するパラメータ保存手段と、
上記入力多項式を代数展開して得られる多項式2値ベクトルを実装する結線論理に必要とされるハードウェア量が妥当であるかを判定し、妥当でないと判断した場合に、パラメータ保存手段によって保存されるパラメータを変更する判定手段とを有し、
上記代数展開手段が、上記判定手段によってハードウェア量が妥当でないと判断された場合に、パラメータ保存手段に保存されるパラメータに基づき再度演算2値化セットを作成する請求項1に記載の計算装置。
【請求項3】
上記記憶手段が、多入力・多出力論理素子の使用を前提とする演算2値化セットを保持する請求項1又は請求項2に記載の計算装置。
【請求項4】
上記入力多項式と演算2値化セットとの対応を保持する演算2値化セットキャッシュ部を有する請求項2又は請求項3に記載の計算装置。
【請求項5】
上記演算2値化セットに含まれる2値ベクトル値関数及び変数間の対応情報と、結線論理との対応を保持する結線論理キャッシュ部を有する請求項1から請求項4のいずれか1項に記載の計算装置。
【請求項6】
入力信号値及び/又は出力信号値が0又は1である割合やある組合せをとる頻度を記録する記録部を有する請求項1から請求項5のいずれか1項に記載の計算装置。
【請求項7】
上記記憶手段が新たな演算2値化セットを書き込み可能に構成される請求項1から請求項6のいずれか1項に記載の計算装置。
【請求項8】
多項式を用いて複数の入力数値を演算する演算方法において、
複数の入力数値を読み込む数値読込ステップと、
上記入力数値を対象とする基本演算の種類を読み込む演算種読込ステップと、
上記複数の入力数値及び基本演算の種類の各々を2値からなる複数のベクトルとして受け取ったうえ、別途与えられる演算2値化セットから構成される結線論理を使用して複数の入力数値の演算を処理する演算処理ステップと、
演算結果を出力する出力ステップと
を有することを特徴とする計算方法。
【請求項9】
上記数値読込ステップに加えて、入力多項式を読み込む多項式読込ステップを有し、
さらに、
この入力多項式を、所定の多項式2値ベクトルを用いて代数展開して演算2値化セットを作成する代数展開ステップと、
演算2値化セットに含まれる2値多項式に現れる最大変数数及び上記代数展開ステップによる代数展開度合いを保存するパラメータ保存ステップと、
上記入力多項式を代数展開して得られた多項式2値ベクトルを実装する結線論理に必要とされるハードウェア量が妥当であるかを判定し、妥当でないと判断した場合に、パラメータ保存ステップによって保存されるパラメータを変更する判定ステップとを有し、
上記代数展開ステップが、上記判定ステップによってハードウェア量が妥当でないと判断された場合に、パラメータ保存ステップによって保存されるパラメータに基づき再度演算2値化セットを作成する請求項8に記載の計算方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2012−32967(P2012−32967A)
【公開日】平成24年2月16日(2012.2.16)
【国際特許分類】
【出願番号】特願2010−171200(P2010−171200)
【出願日】平成22年7月29日(2010.7.29)
【出願人】(510207933)