JP2008502036A - パイプライン化された実数または複素数alu - Google Patents

パイプライン化された実数または複素数alu Download PDF

Info

Publication number
JP2008502036A
JP2008502036A JP2007513850A JP2007513850A JP2008502036A JP 2008502036 A JP2008502036 A JP 2008502036A JP 2007513850 A JP2007513850 A JP 2007513850A JP 2007513850 A JP2007513850 A JP 2007513850A JP 2008502036 A JP2008502036 A JP 2008502036A
Authority
JP
Japan
Prior art keywords
stage
logarithmic
output
subfunction
input
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2007513850A
Other languages
English (en)
Inventor
デント,ポール,ウィルキンソン
Original Assignee
テレフオンアクチーボラゲット エル エム エリクソン(パブル)
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by テレフオンアクチーボラゲット エル エム エリクソン(パブル) filed Critical テレフオンアクチーボラゲット エル エム エリクソン(パブル)
Publication of JP2008502036A publication Critical patent/JP2008502036A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/556Logarithmic or exponential functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/4806Computations with complex numbers

Landscapes

  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)

Abstract

多段パイプラインの対数演算を実行する方法およびALUについて記載される。一実施形態によれば、主関数が2個以上の副関数に分解される。パイプラインに関連付けられたメモリがパイプラインの各段階用に参照表を格納し、各々の表は、対応する副関数に基づいて生成された関数値を表し、ある段階に関連付けられた参照表は、少なくとも1個の他の段階に関連付けられた参照表(群)と異なる。各段階は、段階入力および対応する参照表に基づいて段階出力を計算する。各段階出力を組み合わせることにより、多段パイプラインは対数演算出力を出力する。

Description

関連出願
本出願は2004年6月4日出願の米国特許仮出願第60/577,386号および2005年1月12日出願の第60/643,259号を優先権主張するものであり、その内容は参照により本明細書に引用される。
発明の背景
本発明は、一般にコンピュータ処理およびデジタル信号処理に関し、より具体的には算術論理ユニット(ALU)のパイプライン化された対数演算に関する。
ALUは従来より、加算、減算、乗算、除算等、実数および/または複素数に対する各種の計算機能を実行するために用いられてきた。従来のシステムは、固定小数点または浮動小数点で表わされたALUのいずれかを用いる。精度が制限された実数対数を用いるALUもまた知られている。例えば、「対数演算を用いるデジタルフィルタリング」(N.G.キングズベリー(Kingsbury)およびP.J.W.レイナー(Rayner)、電子通信学会論文集(1971年1月28日)Vol.7、No.2、pp.56〜58)を参照されたい。「欧州対数マイクロプロセッサによる演算」(J.N.コールマン(Coleman)、E.I.チェスター(Chester)、C.I.ソフトリー(Softley)およびJ.カドレック(Kadlec)(2000年7月)IEEE Trans Comput.、Vol.49、No.7、pp.702〜715)に実数用の高精度(32ビット)対数演算ユニットの別の例が示されている。
固定小数点プログラミングは、特に乗算または除算演算の後で、小数点の位置を暗算で追い続ける負担をプログラマに課す。例えば、FIRフィルタが、1000分1の精度で指定せねばならない重み係数−0.607、1.035、−0.607を用いた信号サンプルの重み付き加算を含むと仮定する。固定小数点演算において、例えば1.035を1035で表わす必要がある。その結果、信号サンプルに当該数を掛ける乗算は、結果のワード長を10ビット拡大する。結果を同じメモリワード長に格納するために、10ビットを捨てる必要がある。しかし、捨てられるのがMSB(最上位ビット)または、LSB(最下位ビット)、あるいは各々の一部である否かは信号データ・スペクトルに依存し、従って現実的なデータを用いたシミュレーションにより判定しなければならない。このことは、正確なプログラミングの検証を煩雑にする。
浮動小数点プロセッサは、各々の格納された数の「仮数」部分に関連付けられた「指数」部分を用いて、自動的に小数点位置を追い続けることにより、小数点位置を暗算で監視する不便を回避すべく導入された。IEEE標準浮動小数点形式は、
SEEEEEEEE.MMMMMMMMMMMMMMMMMMMMMMM
である。ここにSは、値の符号(0=+;1=−)、EEEEEEEEは8ビットの指数であり、MMM...MMは23ビットの仮数である。IEEE標準浮動小数点形式により、仮数の第24番目の上位ビットは常に1(真のゼロを除く)であり、従って省略される。IEEE形式では、仮数の実際の値は以下となる。
1.MMMMMMMMMMMMMMMMMMMMMMM
例えば、底が2の対数−1.40625×10−2=−1.8×2−7は、IEEE標準形式により以下のように表わすことができる。
1 01111000.11001100110011001100110
更に、ゼロ指数は01111111であり、従って数+1.0は以下のように書くことができる。
0 01111111.00000000000000000000000
真のゼロを表わすには負に無限の指数を必要とするが、現実的でないため、2−127の代わりに真のゼロとして全桁が0のビット・パターンを解釈することにより擬似的なゼロが作られた。
浮動小数点で表わされた2個の数の乗算には、固定小数点24×24ビット乗算器を用いて、サプレス(suppressed)されたMSBの1が置換された仮数を掛け合わせるが、これは、指数部の加算および127のオフセットの1個の減算を行ない、複雑度が高い割には遅いロジックである。48ビットを占める乗算の結果は次いで、24ビットに切り捨てて、左寄せの後で最上位1ビットを削除しなければならない。乗算はこのように、固定小数点よりも浮動小数点で表わされた数の方がより複雑である。
浮動小数点で表わされた2個の数を加算するには、最初にそれらの指数を減算して、その小数点位置が揃っているか否かを確かめる必要がある。小数点位置が揃っていない場合、仮数を加算する前に、小さい方の数を選んで、暗黙の1を置換しながら、指数の差に等しい2進位置分だけ右へシフトして小数点位置を揃える。シフトを速く実行するために、固定小数点乗算器と構造および複雑度が似ているバレルシフタを用いる場合がある。加算、およびより詳しくは減算の後で、指数を増分させながら先行のゼロを仮数から左へシフトアウトしなければならない。このように、加算および減算もまた、浮動小数点演算における複雑な操作である。
純粋な線型形式では、固定小数点で表わされた数の加算と減算は簡単である一方、乗算、除算、平方、および平方根計算はより複雑である。乗算器は、本質的に多数の論理遅延を有する一連の「シフトおよび条件付加算」回路として構成されている。この遅延を克服すべく、高速プロセッサはパイプライン化を用いる場合があるが、これは通常、プログラミングを複雑にする。従って、高速プロセッサのパイプライン化遅延を最小限に抑えることが関心事である。
浮動小数点で表わされた数表現が対数表現と線型表現が混合したものである点に留意されたい。指数は、当該数の底が2の対数の整数部であり、一方、仮数は線型の小数部である。線型表現では乗算が複雑で、対数表現では加算が複雑であるため、上記は混合浮動小数点表現の場合に両方が複雑である理由を説明するものである。これを克服すべく、上述のような、いくつかの公知のシステムでは純粋の対数表現を用いている。これにより小数点位置の情報を追い続ける課題が解決されて乗算は簡単になり、加算だけが複雑なまま残る。対数加算は、従来技術において参照表を用いて実行された。しかし、表のサイズに対する制約により、この解決策は限られた語長、例えば0〜24ビットの範囲に限定される。上述のコールマンの参照文献において、32ビットの精度が、合理的なサイズの参照表により、乗算器を必要とする補間技術を用いて実現された。このように、コールマンの処理には、依然として乗算に付随する複雑さが伴なう。
加算器を必要とすることなく合理的なサイズの参照表を維持しつつ、精度を向上させるための異なる技術が本願出願人による米国特許第5,944,774号で実数について記述されており、その内容は参照によりここに引用される。しかし、実数および複素数の両方とも無線通信装置等の一般的な用途で求まれるため、両方の処理能力を備えた方法と同様に、特に無線信号処理で有用な複素数演算用の方法および装置が求められている。本出願と並行して出願された米国特許出願第___号(代理人整理番号4015−5181)は、この問題に対処しており、その全文をここに参照におり引用する。更に、多段パイプラインを実装する方法および装置は、複素数および/または実数演算処理を実行しながらスループット速度を向上せせるのに役立つ。
発明の概要
本発明は、対数形式で表現された数を用いて算術演算を実行する算術論理ユニットに関する。対数表現を用いることにより、乗算と除算操作は簡素化されるが、加算と減算はより難しくなる。しかし、以下に簡単に述べる公知のアルゴリズムを用いて2個の数値の和や差の対数計算を簡素化することができる。以下の説明において、a>b且つc=a+bと仮定する。次式が示される。

C=log(c)=log(a+b)=A+log(1+q−r) (1)

ここにqは対数の底、r=A−B、A=log(a)、B=log(b)である。式(1)で表わされた演算(以下、対数加算と称す)は、aとbの和の対数を加算と減算操作だけを用いて計算できるようにし、log(1+q−r)の値は参照表を用いて決定される。しかし、プロセッサは参照表を格納するために十分なメモリを必要とする。32ビットの高精度数値の場合、多くの回路において参照表が実用には大き過ぎるため、直接的に参照する方法(direct look-up method)は一般に16ビットの数値にしか適用できない。
参照表のサイズを減らすべく、引数r=A−Bを最上位部分(r)および最下位部分(r)に分割することにより、関数log(1+q−r)を2個以上の参照関数に分解することができる。対数加算処理の場合、C=A+log(1+q−r)であると示すことができ、ここにlog(1+q−r)は3個の部分値として表わすことができる。

ここに、r はrの拡大されたバージョンを表わし、rは次式で表わすことができる。

また、以下の詳述するように

であり、ここに、r は、元の最下位部分rより、r を取得するためにrを拡大した量だけ少ない量に等しい。所望の値Cはこのように、Aと、参照関数により決定される3個の部分値の和として、計算することができる。式(2)に示すように、参照関数は、3個の部分値の全てについて同一であり、引数だけが変化する。参照関数に対する引数はr=A−Bに基づいており、反復的に計算することができる。第1の参照関数の引数rはA−Bであり、rおよびrで表わすことができる。第2の参照関数の引数r’={r’;r’}はr+F(r)+G(r)により決定され、第3の参照関数の引数r”={r”;r”}はr’+F(r’)+G(r’)により決定される。
このように、Cは、非反復的な方法に比較べて比較的小さい2個の参照表を用いる反復的アルゴリズムに基づいて計算することができる。しかし、反復的方法で必要とされる複数回の反復はより多くの処理時間を必要とする。しかし、補間技術で用いる加算器を超えることは恐らくないであろう。
パイプライン化は、プロセッサのスループットを上げる技術であり、従って計算時間を短縮するものである。パイプライン化の背景にある概念は、複数段階の各段階で計算の一部を実行することである。1回の計算が第1段階を越えて進行したならば、直ちに新たな計算を開始することができる。各段階に1サイクル要する場合、3段パイプラインにおける全ての計算には3サイクルを要する。しかし、前の計算が終了する前に新規の計算を開始することができるため、各サイクル毎に計算が1回完了する。
パイプライン化を用いて上述のように対数計算を実行することができ、その際に各パイプラインの段階は参照関数の計算での1回の反復を実行する。しかし、パイプラインの各段階で参照表を必要とするため、3段パイプラインでは3個の参照表が存在する。対数加算関数において、参照関数は3段階の全てについて同一である。より高いスループットを得るために、パイプラインの複数段階において参照表全体を複製する必要により、参照表のサイズを減らすことであった反復的方法の利点が薄まる。
しかし、対数加算処理の連続的反復における参照関数に対する引数{r,r’,r”...}が単調増加することがわかる。すなわち、数列{r,r’,r”...}は単調増加数列であって、r’はrより少なくとも特定の量だけ大きいことが保証されている。従って、対数加算処理の第2およびそれ以降の反復は完全な参照表を必要としない。第2の反復において、最小値またはr’より小さい引数によりアドレス指定される参照表の値を省略することができる。第3段階において、r”の最小値より小さい引数によりアドレス指定される参照表の値を省略することができる。また、第1段階において、r’の最小値より大きい引数によりアドレス指定される参照表の値を省略することができる。その結果、対数加算の第1、第2、および/または後続段階においてサイズが小さくなった参照表を用いることにより、サイズが小さくなった参照表の利点を享受しながらパイプライン・アーキテクチャを利用することが可能になる。
本発明は、多段パイプラインにおいて対数演算を実行する方法および演算論理ユニット(ALU)を含んでいる。本発明の一実施形態によれば、パイプラインの各段階で2個以上の副関数を使用し、各々の副関数は分解された主関数から導かれる(derived from a decomposed master function)。メモリは、各々の副関数用の副関数参照表を格納する。従って、各々の参照表は、主関数参照表の一部または全部を表わすことができる。
パイプラインの各段階は、段階入力に基づいて各副関数を実行して各段階の出力を得る。出力コンバイナ(output combiner)は、段階出力を組み合わせて対数出力を生成する。一実施形態において、各段階の副関数参照表のサイズは、関連する段階に対する値の予想範囲に基づいている。更に、副関数参照表のサイズは、要素数(number of entries)、語長、またはその両方において、段階毎に異なっていてよい。
本発明の一実施形態によれば、補正表は、段階入力に基づいて少なくとも1個の段階に対する補正値を計算する。本実施形態において、後続段階入力は、補正値および先行段階が生成した段階入力および段階出力に基づいて導かれる。
また、特定の段階に対する引数が、当該段階の予想される引数範囲に含まれない場合、本発明のパイプラインは1個以上の段階をスキップして、引数が当該段階の引数範囲内にある段階に直接引数を適用することができる。例えば、第1段階へ入力された引数がr’の最小値より大きい場合、本発明のパイプラインは第1段階を迂回して、引数を第2段階に直接適用することができる。
本発明は、多段パイプラインにおいて対数を実行する方法および演算論理ユニット(ALU)を含んでいる。本発明の一実施形態によれば、主関数は、パイプラインの各段階が使用する2個以上の副関数に分解される。メモリは、各々の副関数用に副関数参照表を格納する。従って、各々の参照表は、主関数表の一部または全てを表わすことができる。
パイプラインの各段階は、段階入力に基づいて各副関数を実行して、各段階の段階出力を得る。出力コンバイナは、段階出力を組み合わせて最終出力を生成する。一実施形態において、各段階の副関数参照表のサイズは、関連する段階の予想される値の範囲に基づいている。更に、副関数参照表のサイズは、段階毎に異なっていてよい。
本発明の一実施形態によれば、補正表Gは、段階入力に基づいて少なくとも1個の段階に対する補正値を計算する。本実施形態において、後続段階の入力は、補正値および先行段階で生成された段階入力および段階出力に基づいて導かれる。
発明の詳細な説明
本発明は、対数計算を実行すべく簡素化された多段パイプラインを有するALUを提供する。概して、多段パイプラインの各段階は、段階入力によりアドレス指定される関数表Fに基づいて部分対数出力を生成する。パイプラインを簡素化すべく、少なくとも1段階の関数表は、要素数または語長または両方のいずれかにおいて、他の段階の関数表とは異なるサイズであってよい。好適な実施形態において、主関数参照表を複数の副関数参照表に分解することができ、各々の副関数参照表はパイプラインの対応する段階で使用される。ここで用いるように、「主関数参照表」とは主参照関数に関連付けられた主参照表を指す。本実施形態では、全ての段階からの全ての副関数参照表を組み合わせたサイズは、主関数参照表のサイズにほぼ等しい。本発明の詳細および利点をよりよく理解されるよう、以下において数値表現、従来方式の補間、反復的対数演算、高精度の反復的対数加算、高精度の反復的対数減算、および指数近似に関する詳細を述べる。
数値の表現
ALU内で実施される対数演算は一般に、固有の数形式を必要とする。上記のように、従来のプロセッサは、実数または複素数を、固定小数点バイナリ形式または浮動小数点形式にフォーマットすることができる。上記のように、固定小数点形式は純粋に線形形式である。従って、固定小数点で表わされた数を用いる加算と減算は単純であり、一方、乗算はより複雑である。浮動小数点で表わされた数は、対数と線型表現の混合型である。従って、加算、減算、乗算、および除算は、浮動小数点形式では全て複雑である。これらの形式に付随するいくつかの問題を克服すべく、純粋な対数形式を適切なアルゴリズムと共に用いて、対数形式に付随する加算と減算の問題を解決することができる。以下に、本発明に当てはまる範囲で、純粋対数形式に付随する更なる詳細事項について述べる。
純粋対数形式の実数は、(S8.23)と略記され、以下のように表わすことができる。
S xxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxx
2個のこのような実数を、複素数を表わす一つの方法として用いることができる。しかし、関連する米国特許出願第___号(代理人整理番号4015−5281)に述べられているように、複素数を表わすのに対数極形式の方が有利である。
対数に用いる底は自由に選択できる。しかし、ある底を他のものに優先して選択する利点がある。例えば、底を2として選択することに多くの利点がある。第1に、式(5)に示すように、32ビットの純粋対数形式は、(S8.23)IEEE浮動小数点表現と実質的に同一に見える。
純粋対数:S xx...xx.xx ...xx⇔(−1)×2−xx...xx.xx...xx
IEEE:S EE...EE.MM...MM⇔(−1)×(1+0.MM...MM...MM)×2−EE...EE (5)
底2に対する対数の整数部は、IEEE形式に従い127によりオフセットされて、数1.0はいずれの形式でも次のように表現できる。
0 01111111.00000000000000000000000
あるいは、128のオフセットを用いてもよく、この場合、1.0は次のように表現される。
0 10000000.00000000000000000000000
127または128のどちらを好適なオフセットとして用いるかは、実装上の問題である。
全ゼロパターンとは、IEEE浮動小数点形式に従い、擬似的な真ゼロとして定義できる。実際、同じ指数オフセット(127)を用いた場合、そのような純粋対数形式は、例えば4、2、1、0.5等、2のベキ乗である全ての数のIEEE形式と一致し、各々の仮数部は図1に示すように、2のベキ乗の間で僅かに異なるだけである。
純粋対数形式では、表現可能な最大数は以下の通りである。
0 11111111.11111111111111111111111
これは底が2の場合、ほぼ256から127のオフセットを差し引いた対数、すなわち約2129または6.81×1038を表わす。
表現可能な最小数は以下の通りである。
0 00000000.00000000000000000000000
これは底が2の場合、−127に等しい対数、すなわち5.88×10−39を表わす。必要ならば、全ゼロ形式は、IEEEの場合と同様に、擬似的な真ゼロを表わすために予約することができる。このシナリオにおいて、表現可能な最小な数は以下の通りである。
0 00000000.00000000000000000000001
これは底が2の場合、ほぼ−127に等しい対数、すなわち約5.88×10−39に対応する。
1と2の間に値を有するIEEE仮数の量子化精度は、2−23のLSB値であり、精度は2−23と2−24(0.6〜1.2×10−7)の間にある。数xを底が2の対数形式で表現する際の精度は、対数における定数2−23であり、dx/x=log(2)×2−23または0.83×10−7を与え、これはIEEE量子化精度の平均より僅かに良い。
別の実装方式では、底e等、他の底での対数を用いる場合がある。底がeの場合、実数を以下で表わされる32ビット符号付き対数絶対値形式で格納することができる。
S xxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxx
または簡便に(S7.24)で表わす。底が大きい(e=2.718)ため、小数点の左側のビットの個数が少なくてもダイナミックレンジを与えるのに十分である。一方、以下に詳述するように、同じまたはより良い精度を得るには小数点の右側に追加的なビットを必要とする。
対数絶対値部分は、符号付きの固定小数点値であって、最左端のビットが符号であり、表現された数の符号Sと混同しないこと。あるいは、対数絶対値部分は+64(または+63)分オフセットされ、それによりビット・パターン
0 1000000.000000000000000000000000
はゼロ対数(数値=1.0)を表わす。後者の場合、表現可能な最大数は、以下の底eの対数を有する。
0 1111111.111111111111111111111111
これは、ほぼ128であり、64のオフセットを引いて(less the offset of 64)、すなわちe64または6.24×1027であり、その逆数は表現可能な最小数を表わす。式(6)は、底eの対数表現の量子化精度を表わす。

図2は、IEEE浮動小数点形式(オフセットが+127)を、底がeの形式(オフセットが+64)および底が2の形式(オフセットが+127)と比較する。
底を選択することは、実際には固定語長内のダイナミックレンジと精度の間のトレードオフを決定することに等しく、1整数ビットに満たないステップで小数点を移動させること(moving the point in steps of less than one whole bit)に等しい。

の底を選択すること(一般的には

、但しNは正または負の整数)は、同一性能をもたらしつつ小数点をプラスまたはマイナスNビット分移動させることに等しい。しかし、8の底を選択することは、対数を3で除算するため、小数点を整数個分移動させることには等しくない。換言すれば、対数の底の選択は、数学的に2進小数点の右側と左側の間のビットの分割を変更することに等しく、精度とダイナミックレンジの間の妥協点が変わる。しかし、小数点はステップ単位でしか移動されず、一方、底は連続的に変更され得る。符号付き対数絶対値の場合(符号無し、127オフセットの対数絶対値とは対照的に)、符号ビットは、これを対数絶対値の符号として参照することにより、数値(Sビット)の符号とは区別される。これを更に明らかにするために、底が10の対数log10(3)=0.4771、あるいはlog10(1/3)=−0.4771を考慮する。このように、+3の値を対数で示すには、数値とその対数の符号は共に+であり、++0.4771と書くことができる。下表にこの表記法を示す。
全ての対数表現が必ず正であるようにすべく、オフセット表現を用いる場合がある。例えば、数値を、ある選択された数、例えば0.0001の何倍大きいかを示す対数で表現する場合、3の表現はlog10(3/0.0001)=4.4771に、また1/3の表現はlog10(0.3333/0.0001)=3.5229となる。オフセットにより、両方とも正になっている。0.0001の表現は、log(0.0001/0.0001)=0となる。従って、全ゼロ・ビット・パターンは、可能な最小数0.0001を表わす。
従来の対数表では、真数を参照するために、0.0000と0.9999の間の対数用に10,000個の数を格納する必要があり、同じ精度まで対数を得るために同様の個数が必要である。参照表のサイズを減らすために、対数的同一性(logarithmic identities)を用いる場合がある。例えば、log10(3)=0.4771、およびlog10(2)=0.3010である。これから、演繹すれば直ちに次式が得られる。
log10(6)=log10(2×3)=log10(3)+log10(2)=0.4771+0.3010=0.7781
これを演繹すれば直ちに以下も得られる。
log10(1.5)=log10(3/2)=log10(3)−log10(2)=0.4771−0.3010=0.1761
しかし、与えられた数値0.4771および0.3010をどのように単純に演算しても直ちに以下を演繹することはできない。
log10(5)=log10(2+3)=0.6990
更に、3と2の対数からどのように以下を推論できるかも明らかではない。
log10(1)=log10(3−2)=0
この問題に対処すべく、対数加算関数Fに基づく参照表を用いる場合がある。例えば、(2+3)の対数は、底が10の場合、log10(3)とlog10(2)のうち大きい方、すなわち0.4771を、それらの差の関数F[log10(3)−log10(2)]=F(0.1761)に加算することで得られる。
(x)=log10(1+10−x) (7)
同様に、3−2の対数は、log10(3)とlog10(2)のうち大きい方から関数F(0.1761)を減算して得られる。ここに、底が10の場合のF(x)は以下の通りである。
(x)=log10(1−10−x) (8)
しかし、F(x)およびF(x)用の参照表は依然として、各々の関数用に少なくとも10,000個の数値を格納する必要がある。
補間法
補間を用いて、参照表に格納する値の数を減らすことができる。後の考察を容易にすべく、以下で補間を更に詳しく調べる。説明を簡便にすべく、底eを用いる。しかし、他の底も同様に適用できる点を理解されたい。
例えばxの有限個の表の値を用いて、すなわち表の点xの回りの関数F(x)のテイラー/マクローリン展開を用いて、関数F(x)=log(1+e−x)を計算すれば、次式が得られる。
F(x)=F(x)+(x−x)F’(x)+0.5(x−xF”(x)..., (9)
ここに、’は1次導関数を表わし、”は2次導関数を表わす。この展開に基づいて、log(c)=log(a+b)をテイラー/マクローリン展開の利点を用いてlog(a)+F(x)として計算することができる。ここに、x=log(a)−log(b)であり、xの値は表で提供される。
32ビットの底がeの場合に簡単な線型補間を用いるには、2次導関数F”を含む2次項が、24番目の2進位置、例えば2−25未満まで無視できなければならない。F(x)=log(1+e−x)を微分して次式が得られる。

”(x)は、x=0のとき最大値0.25をとる。従って、2次項は、(x−x)<2−11のとき2−25未満である。この必要条件を満たすには、最上位ビットは、形式(5.11)で表の点xをアドレス指定する。すなわち、
xxxxx.xxxxxxxxxxx
である。これは、剰余dx=x−xが以下の形式であって、
0.00000000000xxxxxxxxxxxxx、
従って2−11未満であるようにするためである。このように、dxは13ビットの数値であり、xは16ビットの数値である。
線型補間項F’(x)の精度もまた、2−25のオーダーでなければならない。F’(x)には2−11未満であるdxが乗算されるため、F’(x)の精度は2−14でなければならない。F(x)が丸め誤差の減少に寄与すべく表に1対の追加的なLSBを提供してもよいが、この場合、各々のx値についてFとF’を格納するために幅が5バイト(40ビット)の参照表が必要となる。
従って、タブラー値は、26ビットのFの216=65,536個の値、および同じ個数の対応する14ビットF’値を含んでいる。また、dx・F’の形成に14×13ビット乗算器が必要である。このような乗算器は、本質的に、13個のシフトおよび加算演算を実行し、従って約13個の論理遅延を含んでいる。乗算器の複雑さと遅延はブースのアルゴリズムを用いて若干減らすことができるが、ベンチマークとして従来の乗算器を用いてもよい。
図3に、上述の線型補間を実装する従来型ALUの例証的なブロック図を示す。図3のALUは、減算器10、加算器20、F/F’参照表30、乗算器40、および減算器50を用いて、値C=log(A+B)を推定する。本例で用いるように、A=log(a)且つB=log(b)である。後述するように、特異点を避けるべく減算用に後方補間を行なう必要があるため、図3にX、すなわちxの最上位16ビット部分より1ビット大きいxの値、からの補間を示す。従って、F用の参照表30はX+1におけるFの値を含み、含まれるF’用の値は当該区間の中央値、すなわちX+0.5で計算されたF’の値である。乗算器40は、14ビットのF’(X)の値に、xの最下位13ビットの、13ビットで表わされる2の補数である(by the 13 bit two's complement of the least significant 13 bits of x)

を乗ずる。更に、乗算器40は、結果がF’(X)と

の27ビットで表わされる積であるように構成されている。
27ビットで表わされる積のLSBは、減算器50への桁下げとして入力されて、残り26ビットが26ビットF’(X)値から減算されて26ビットへの補間値を生成し、その値は次いで出力加算器20内でAとBのうち大きい方に加算され、「1」の桁上げビットによりその結果Cを対数絶対値の31ビットに切上げることができる。
従って、線型補間に基づく実用的な31ビット対数加算器は、約65,536×40=2.62Mビットの参照表30、および13×14ビットの乗算器40を含んでいる。これらの構成要素は、かなり大きいシリコン領域(silicon area)を占有して、論理遅延に関して速度面での効果が無い。しかし、補間方法を用いて減算または複素数算術演算に対処すべく、語長および乗算器構成を大幅に調整する必要がある。
例えば、補間を用いて減算を実行するために、以下に与えられる減算関数方程式により関数値が決定される。
(x)=log(1−e−x) (11)
(x)のテイラー/マクローリン補間は、以下の1次導関数を含んでいる。

これはxが0に近づくにつれ無限大に発散する。この特異点からの演算を遠ざけるべく、次式を用いて、x=log(A)−log(B)(A>Bの場合)の実際の値より大きいLSB1個分タブラー値から後方に関数を補間する場合がある。
(x)=F(x)−(x−x)F’(x) (13)
これは、図3の対数加算について示した実装方式である。次いで、少なくともxの最上位ビットがゼロである場合、特異点を回避するためにのみ、xは値においてLSB1個分大きい。
加算の場合と同じ16/13ビット分割により、xの最小値は2−11であって、F’のサイズは約2,048個の値である。しかし、F’の値は自身の対数加算の相手より12ビット長いため、dx・F’を形成する乗算器のサイズを13×26ビットの装置へ増大させる。上記に鑑みて、実数の加算と実数の減算とのシナジーは、複素数演算の場合と同様に、補間を実装するALUに制限される。同時係属出願(4015−5281)に提案されている、後者の問題に対する一つ解決策は、参照表がチップ領域を占有することから、加算と減算用に別々の回路を形成しても殆どコストが掛からないとの認識に基づいており、従ってバタフライの実行(FFTで有用な加算と減算の同時実行)を可能にするものである。引数が類似していることから、実数および複素数演算用に別々の回路を形成して並列処理を可能にすることが示唆される。いずれにせよ、補間を実行するために参照表および乗算の両方が必要なことから、従来の補間法をハードウェアロジックで実装するのはより複雑になる。
反復的対数演算
上述の補間処理に代わるものとして、また記憶要件を減らすために、反復的解法を用いる場合がある。反復的解法は2個の比較的小さい参照表を用いて、表にされた関数に基づき反復的な処理を用いて対数出力を計算する。反復的解法を示すために、10進数の例として、log10(3)=0.4771およびlog10(2)=0.3010からlog10(5)=log10(3+2)およびlog10(1)=log10(3−2)を推論する仕方について説明する。
対数加算関数表(以下でF表とも呼ぶ)は、底が10の場合に、0.0と4.9の間におけるxの値を0.1刻みで、式(7)に基づいて50個の値を格納している。他の表(以下で補正表またはG表と呼ぶ)は、次式に基づいて、0.001と0.099の間におけるyの値を0.001刻みで99個の値を格納する。
G(y)=−log10(1−10−y) (14)
以下に、これら2個の参照表を用いて上述のlog(5)=log(3+2)の例に対する2表反復処理を示す。以下は底が10の場合について記述しているが、当業者であれば任意の底を用いてもよいことが理解されよう。底10とは異なる底を用いる実施形態のために、式(7)および(14)が各々底10での計算用の関数および補正表を定義する一方、式(15)は一般に、任意の底qについて関数および補正表を定義することが理解されよう。
(x)=log(1+q−x
G(y)=−log(1−q−y) (15)
対数加算処理の場合、引数x=A−B=log10(3)−log10(2)=0.1761は最初に、最も近い小数点以下1桁(the nearest tenth)すなわち0.2に丸められる。50個の値を含むF表から、F(0.2)=0.2124であることがわかる。0.2124を0.4771に加算した結果、log10(2+3)の第1近似として0.6895が得られる。xを0.1761から0.2に丸めることで生じる誤差分値は、0.0239である。この誤差は決して0.099を超えないため、値99の補正参照表G(y)を用いる。補正値y=0.0239が0.024へ切上げられてG表は補正値1.2695を与える。G(y)=1.2695、第1参照表からの値F(0.2)=(0.2124)、およびx(0.1761)の当初の値を組み合わせてFのための新たな引数、x’=1.658が生成される。当業者であれば、この場合xを修飾するプライム記号(’)は微分を表わしていない点を理解されよう。
最も近い小数点以下1桁に切上げられた場合、x’=1.7である。F(1.7)=0.0086であり、これをlog10(2+3)の第1近似値0.6895に加算すれば0.6981の第2近似が得られる。1.658を1.7に切上げたことによる誤差は、0.042である。y=0.042をG表で調べると、値1.035が得られ、これを0.0086の前のF値に加算し、且つx’=1.658であることから、新しいx値すなわちx”=2.7016が得られる。x”を2.8に切上げた後でF表を用いれば、F(2.8)=0.0007が得られる。第2近似値(0.6981)に0.0007を加算することにより、第3且つ最終の近似値0.6988が得られ、これは50個の値しか含まないF参照表、および100個の値しか含まないG参照表を使用した場合に期待できる精度で、実際の値0.6990に十分近いと見なされる。必要ならば、更なる反復を行なって、若干精度な上げることができる。しかし、加算の場合、一般に4回以上の反復は必要ない。あるいは、最大反復回数が予め3に設定されている場合、最後の反復のFの引数を常に2.7の最も近い小数点以下1桁へ切上げるのではなく、切捨ててもよい。F(2.7)=0.0009であり、これをlog10(3+2)の第2近似値0.6981に加算すれば、予想結果log10(5)=log10(3+2)=0.6990が得られる。
2表反復的処理は、乗算が回避され且つ参照表のサイズが百分の一に減少するのと引き換えに3段階の処理を受け入れることを含んでいる。ハードウェア実装において、3回の反復に必要な論理遅延の総数は実際には、乗算器の反復的な加算/シフト構造を通過する論理遅延の数より少なくて済む。いずれにせよ、上述の参照表サイズの縮小は、シリコン領域および/または精度が主な重要事項である場合に有用である。
log10(3−2)の値も同様に計算することができる。開始時の近似値は、より大きい数、すなわち0.4771の対数である。減算用のF表は以下の値を0.1刻みで格納し、G表は不変のままである。
(x)=log10(1−10−x)(底が10の場合)
(x)=log(1−q−x)(一般的な底qの場合) (16)
log10(3)とlog10(2)の差0.1761は最も近い小数点以下1桁0.2へ切上げられる。減算関数表で0.2を参照すればF(0.2)=−0.4329が得られる。開始時近似値0.4771に−0.4329を加算すればlog10(1)に対する第1近似値0.0442が得られる。
0.1761を0.2に切上げたことによる誤差は、加算の場合、0.0239である。先に定義されたようにG表を0.024でアドレス指定すれば値1.2695が返される。先のF引数x=0.1761および先のF表参照値−0.4329に1.2695を加算することにより、新たなF表引数x’=1.0127が得られる。x’を最も近い小数点以下1桁1.1に切上げ、且つF表を用いることで再びF(1.1)=−0.0359が得られる。第1近似値(0.0442)に−0.0359を加算することにより、log10(1)の第2近似値0.0083が得られる。1.0127を1.1に切上げたことによる誤差は0.0873である。値0.087を用いてG表をアドレス指定すればG(0.087)=0.7410が得られる。これを先の丸めていないF表引数1.0127およびF表参照値−0.0359に加算したならば、新たなF表引数x”=1.7178が得られる。x”を1.8に切上げた結果F(1.8)=−0.0069が得られ、これを第2近似値0.0083に加算して結果的にlog10(1)の第3近似値0.0014が得られる。1.7178を1.8に切上げたことによる誤差は0.0822である。0.082でG表をアドレス指定すれば値0.7643が返される。これを先のF表引数1.7178および先のF表参照値−0.0069に加算することにより新たなF表引数x’’’=2.4752が得られる。2.4752を2.5に切上げることにより関数値F(2.5)=−0.0014が得られる。第3近似値(0.0014)に−0.0014を加算することにより、予想通りlog10(1)=log10(3−2)=0が得られる。各々の反復についてFの引数が増大する結果、次第に補正が小さくなるため、本アルゴリズムは収束する。
減算の場合の上述の方法は、F表の減算バージョンを用いる点が異なるが、加算に関して同様である。しかし、加算と減算は同一のG表を用いる。更に、減算で良い精度を得るには加算より1回多くの反復が必要である。この理由は、減算の場合、F値を加算した際の増分が負であるため、各反復におけるFの引数の立ち上がり僅かに遅く、特に最初の反復でこれが顕著だからである。
高精度対数加算
一般に、より一般的な底がqの対数について解決すべき対数加算問題は、以下のステップで与えることができる。
・A=log(a)およびB=log(b)と仮定する。ここに、aおよびbは正数、且つqは底である。
・目的:C=log(c)を見つけること。ここで、c=a+bである。
・従って、C=log(a+b)=log(q+q)である。
・AをAとBのうち大きい方とする。
・この場合C=log(q(1+q−(A−B)
=A+log(1+q−(A−B)
=A+log(1+q−r)、ここにr=A−B、且つ正である。
従って、当該問題は1変数rの関数log(1+q−r)の計算に帰着された。
rの語長に制限がある場合、関数値を関数参照表により取得してもよい。例えば、16ビットのr値の場合、関数参照表は65,536個のワードを格納しなければならない。更に、底がq=e=2.718の場合にr>9であるならば、関数の値は2−13未満の差でゼロと異なり、このことは、12ビットの小数部と共に、15までの範囲のrの4ビットの整数部だけを考慮すればよいことを示唆している。従って、r>9の場合、関数値は小数点以下2進12桁までゼロであり、従って参照表は、9×4,096=36,864ワードのメモリを占める、最大9までのrの値だけが必要とされる。
r=0の場合、関数の最大値がlog(2)=0.69であるため、12ビットの小数部だけを格納すればよく、従って必要なメモリは65,536個の16ビットワードではなく、36,864個の12ビットのワードだけで済む。底が2の場合、関数はr>13の場合に2進12桁までゼロであるため、ここでもrの4ビットの整数部だけを考慮すれば済む。符号に1ビットを用いる場合、対数絶対値部分の長さは、例えば4.11形式または5.10形式では、15ビットに過ぎず、且つ上述の数値は適宜調整できる。
しかし、例えば32ビットの語長を用いて、16ビットよりもはるかに高い精度を得るには、関数のための直接参照表(a direct look-up table for the function)が極端に大きくなる。例えば、IEEEの32ビット浮動小数点標準と同等の精度およびダイナミックレンジを与えるには、底がeの場合にAおよびBは各々7ビットの整数部、24ビットの小数部、および符号ビット1個を有していなければならない。関数が24ビットの精度でゼロである前に、rの値が25log(2)=17.32より大きくなければならず、これはrの5ビットの正整数部により表現可能である。このように、5.24形式で可能な29ビットのr値を関数Fの引数とみなさなればならない。0と18の間のr値を直接参照するために、18×224すなわち3億200万個の24ビットワードの参照表サイズが必要となる。実質的に、あらゆる対数演算の研究はこれらの表のサイズを減らすことを意図しており、64ビット語長を実用的にすることが究極の目的である。本明細書に述べるいくつかの技術は、この目的へ向けて技術を進歩させるものである。
rの全てのビットをアドレスとして用いる対数加算関数Fを直接参照する必要により、参照表のサイズを単一の大きな表から減らすべく、本発明の一実施形態は、rを最上位(MS)および最下位(LS)部分、すなわちrとrに分割するステップを含んでいる。以下に述べるように、これらのMSおよびLS部は、はるかに小さい2個の表F、Gを参照する。MS部は、入力値の「切上げられた」バージョンを表わし、一方LS部は切上げられたバージョンと元の完全な引数値との差を表わす。
式(17)に示すように、rをr<32の最上位14ビット、rをrの最下位15ビットとする。
=xxxxx.xxxxxxxxx
=00000.000000000xxxxxxxxxxxxxxx (17)
簡便のため、rおよびrの長さを略して(5.9)および(15)と表記する場合がある。本方法に明らかな変更を加えることにより、rを最上位および最下位ビット部分に分割する他の仕方も等しく使用可能であり、以下に詳述する特定の分割を好適な対象とした考察では、異なる語長(例:16ビット)または複素数演算に対して同じFおよびG表を再利用可能なことが関心事項である。
を、rの可能な最大値、すなわち00000.000000000111111111111111により増分されたrの値とする。これは、最下位15ビットが1に設定された元のr値そのものである点を理解されたい。いくつかの実施形態において、代替的にrを0.000000001だけ増分することができる。すなわち次式が得られる。
=xxxxx.xxxxxxxxx+00000.000000001 (18)
の補数値を次式で表わすことができる。
=r −r (19)
これは、rに対する上述の2個の代替的な増分のどちらが使われるかに応じて、rの補数または2の補数のいずれかである。すなわち、r
00000.000000000111111111111111−00000.000000000xxxxxxxxxxxxxxx(rの補数)またはr =00000.000000001000000000000000−00000.000000000xxxxxxxxxxxxxxx(rの2の補数)である。ここから、底eの場合に以下の結果が得られる。

ここに、

である。log(1+e−r)を同様に拡張すれば次式が得られる。

ここに、

である。結論に至るまで反復することにより、所望の解は以下の関数の和を含んでいることがわかる。

これらは各々のr引数の最上位14ビットだけに依存し、それらの引数は16,384ワードしか含まない参照表から取得することができる。
式(20)〜(22)の文脈において、表記r値の修飾に用いるプライム記号(群)は、導関数を表わすものではない。その代わりに、一連のr値、すなわちr、r’、r”等は、対数加算関数参照表(F)から直近に得た値を先行する値に累算して(accumulating)、rの最下位15ビットすなわち、r が15ビット値であるため32,768ワードを有する補正参照表すなわちG表により与えられる値

に依存する値を加算することにより、導かれる。
格納された値がr およびr から計算されているが、関数および補正参照表を各々rおよびrにより直接参照することができる。これらの参照表関数を各々関数FおよびGと呼び、補正値が常に極めて大きな負値である点に注目して、正の補正値をG表に格納してもよい。負の値を格納してこれを減算するのではなく、この正の補正値を先のr引数に加算する。更に、格納されている値からG表の最小補正値または少なくともその整数部を減算して、格納されているビット数を減らし、表から値が抽出される都度足し戻してもよい。底が2の場合、最小補正値として値8が適しており、いくつか実施形態では足し戻す必要さえない。その場合反復処理は以下のとおりである。
1.出力アキュムレータ値CをAとBのうち大きい方に初期化する。
2.Aの方が大きい場合はrをA−Bに、またはBの方が大きい場合はB−Aに初期化する。
3.rをrとrに分割する。
4.各々rおよびrによる指定に従いF(r )およびG(r )を参照する。
5.FにCを、およびF+Gにrを累算する。
6.r<STOP_THRESHOLD(以下に詳述)の場合はステップ3から繰返す。
当業者であれば、論理b6.OR.(b5.AND.(b4.OR.b3.OR.b2))(第8、4または2ビットのうち1個が設定される、第32ビットの設定または第16ビットの設定)を用いて18より大きいr値を検出するために数個の論理ゲートを用いてよいこと(ここで、ビット・インデックスは小数点の左側にビット位置を示す)が理解されよう。関数

の値は常に約6.24より大きく、従って反復は常に3サイクル以下で終了する。底が2の場合、補正値は比例的に大きく、そのため底が2の場合にrは常に高々3サイクルで25を超える。一般に、任意の底に対して3サイクルで十分である。
高精度2表対数減算
AおよびBに関連付けられた符号Sが、aとbは同じ符号を有することを示す場合、上述の対数加算アルゴリズム(「対数加算」と略す)を用いることができる。そうでない場合、対数減算アルゴリズム(「対数減算」と略す)が必要である。下表に各々のアルゴリズムが用いられる場合分けを示す。

対数加算アルゴリズムを用いた場合、結果の符号は常に大きい方の対数絶対値に関連付けられた符号である。
第2の引数に関連付けられた符号が最初に反転された場合、同じことが対数減算アルゴリズムでも成り立つ。減算を行うことが求められた場合、対数演算ユニットへの入力に第2の引数が適用されたならば、第2の引数の符号の反転が行なわれる。「対数減算」アルゴリズムは、以下のように導かれる。A=log(|a|)且つB=log(|b|)が与えられていると仮定する。C=log(c)を見出すことが求められ、ここにc=|a|−|b|である。Aは、AとBのうち大きい方とする。わかりやすく絶対値文字(||)を外し、ここでaとbの両方が正と仮定すれば、次式が得られる。
C=log(a−b)=log(e−e) (23)

対数加算と同様に、本例でも説明目的だけのために底としてeを用いているが、これに限定されない。
AがBより大きいと仮定しているため、次式が得られる。
C=log(e(1−e−(A−B)))
=A+log(1−e−(A−B)
=A+log(1−e−r) (24)

ここにr=A−Bであり、その値は正である。従って、問題は1変数rの関数log(1−e−r)の計算に帰着する。r、r、r およびr を以前定義された通りとする。すると、底eの場合、次式が得られる。

ここに、

である。log(1−e−r’)を拡張すれば次式が得られる。

ここに、

であり、以下同様である。結論に至るまで反復することにより、所望の解は以下の関数の和を含んでいることがわかる。

これらは各々の全語長r値の最上位14ビットだけに依存し、16,384のワードだけを含む参照表により与えられる。
対数加算と同様に、対数減算用の参照表は、格納された値がr とr から計算されているものの、rとrにより直接参照できるように構成することができる。更に、対数加算と同様に、表記されたr値を修飾するために用いるプライム記号(群)は導関数を表わすものではない。
これらの参照表FおよびG(Gは対数加算アルゴリズムの場合と同じ参照表である)を各々呼び出して、上述のようにGの正値を格納することにより、対数減算処理用に必要なFおよびG表が生成される。1−e−rが常に1より小さいため、Fは常に負であり、従って正の大きさ(positive magnitude)を格納して加算ではなく減算することができる。別の方法は、負の符号ビットを外した負値を格納して、減算が実行中の場合は最上位「1」を付加することにより負のビット符号を参照表の外側で置換しておく。好適な選択は、以下で詳述するように、どちらの論理が単純で、加算と減算の間の参照表の値に最大のシナジーが得られるかによる。いずれにせよ、以下のステップが「対数減算」処理の概要を示す。
1.出力アキュムレータ値CをAとBのうち大きい方に初期化する。
2.Aの方が大きい場合はrをA−Bに、またはBの方が大きい場合はB−Aに初期化する。
3.rをrとrに分割する。
4.各々rおよびrによる指定に従いF(r )およびG(r )を参照する。
5.FにCを、およびF+Gにrを累算する。
6.r<STOP_THRESHOLD(以下に詳述)の場合はステップ3から繰返す。
対数加算および対数減算アルゴリズムの両方において、STOP_THRESHOLDは、その後の反復からの寄与がLSBの半分に満たないよう、選択される。これは、小数点以下2進24桁を有する底eの場合は17.32(18を用いてよい)で生じ、あるいは小数点以下2進23桁を有する底2の場合は24で生じる。原理的には、STOP_THRESHOLD31を与える、底2より小さい底を見出す可能性があり、その場合、rの選択されたMSBによりアドレス指定可能な全アドレス空間にわたり定義されるF関数を用いる。あるいは、STOP_THRESHOLD15を与え、同じ特性を有する、底eより大きい底を見出す場合がある。しかし、F表のために全アドレス空間を用いることで得られる利点よりも、底が2であることの実際的な利点の方が大きいと思われる。一般に、底が2の場合、STOP_THRESHOLDは、小数点以下の対数表現の2進位置の個数より単に1、2個大きいだけである。
上に挙げた10進数の例で示唆されるように、F表を参照するために用いた最後の引数、例えば

を、

から切上げるのではなく切捨てれば、有限回数の反復の後で精度が向上する。2表反復処理が常に一定回数の反復を実行するか、あるいは処理が最後の反復を識別するならば、Fの引数を最後の反復で切り捨てることができる。最後の反復は、rが例えばSTOP_THRESHOLDのある範囲(底eの場合〜6、底が2の場合〜8)内にあって、次の反復がSTOP_THRESHOLDを超える筈であることが示されることにより識別できる。この方法を用いる場合、rの左端ビットが最後の反復でゼロになったならば、F表へのアドレスを1だけ減らすことができる。後述するパイプライン実装において、最終的なF表の内容は、切り捨てられた引数のために単純に計算される。
対数減算と対数加算アルゴリズムの唯一の違いは、参照表としてFではなくFを用いる点である。両方ともサイズが16,384ワードであるため、+または−のバージョンを選択するための追加的アドレス・ビットを有する単一関数のF表に組み合わせすることができ、これをF(r,opcode)と表記する。ここで、追加的な引数「演算コード(opcode)」が、対数加算または対数減算アルゴリズムのどちらを適用するべきかを示す0または1の値を取る追加的なアドレス・ビットである。あるいは、周辺ロジック(すなわち入出力アキュムレータおよび加算器/減算器)は各々の参照表に比べて小さいため、周辺ロジックを複製して独立の加算器および減算器を形成するためにほとんどコストを要しない。以下に考察する更に別の可能性として、関数Fと−Fの類似性を利用することができる。
指数近似
上述のように、r は、rの取り得る最大の値(0.00000000011111111111111)だけ増やしたrを含んでいても、あるいは0.000000001だけ増やしたrを含んでいてよい。rの増分として0.000000001ではなく0.0000000001111111....1を選択する利点は、r=0の場合に直接Fの値を得るために、反復的アルゴリズムを実行する間にrの補数でG表をアドレス指定しても、あるいはr(補数を取られていない)により参照してもよい点であり、従って他の方法では困難な、2個のほぼ等しい値の減算を行なうのに単一の反復で十分な点である。補数を取った値及び補数を取らなかった値の両方を利用可能にする方が、桁上げを伝播する必要がなくなるため、2の補数を求めるよりも簡単且つ高速に行なえる。
対数加算の場合、F表の値は次式で定義することができる。

ここにdは、好適にはXが取り得る最大値、すなわち全桁1である増分を表わす。当該関数は、Xによりアドレス指定される参照表として構成することができる。減算の場合、F表の値は次式で定義することができる。

の大きい値に対してF(X)=F(X)であり、且つ32ビット演算および16〜24の範囲の引数に対して両方とも次式により正確に近似することができる。

ここに、XM1はXの整数部(小数点の左側のビット)、XM2は小数部、すなわち小数点の右側のビットである。カッコ内の関数は、小さい指数参照表に格納することができる。右シフタが整数部を実装することにより、小数ビットだけが指数関数を参照すればよくなるため、表のサイズが小さくなる。
図4に、指数近似(E)と真の関数値(F,F)の類似を示す。引数が16〜24の範囲で変動する場合、Eは実質的にFおよびFに等しい。更に、図4はまた、次式の更なる近似値がどのように指数近似と真の関数値の差、すなわちdF=E−FおよびdF=F−Eを十分に近似するかを示す。

従って、図4から分かるように、8〜16の範囲のXに対して、長さが8ビット以下の小さい補正値Eにより補正された場合に指数近似Eを用いてもよい。その結果は、2進小数点以下24桁が必要な場合、長さが17ビットである。
E曲線の下側の領域は、指数近似の実装に必要なシリコン領域に概ね近いため、図4はまた対数加算および対数減算演算用の関数表を実装するために必要な近似的シリコン領域をも示す。垂直スケールとして底が2の対数スケールを用いることは、高さが2進値で語長を表わすことを意味する。水平スケールはそのような値の個数を表わす。従って、曲線の下側の領域は、曲線値を格納するために必要なROMのビット数を表わす。しかし、指数関数Eは周期的であり、その値は1増分される都度右シフトされる点を除いて繰り返される。従って、小数部XM2によりアドレス指定される1サイクルだけを格納して、その結果をXM1が与える位置の個数分シフトすればよい。指数関数Eは従って、極めて小さい表で済む。更に、補正値dFまたはEは明らかに元のFおよびF関数よりも曲線の下側の領域が小さいため、指数近似Eを用いて補正値dFおよびEを格納する方がFとFを格納するよりも表サイズが小さくて済み、従って、より小さいシリコン領域で済む。
式(32)は最下位ビットのG関数を次式で与える。

ここに、(d−X)はdが全1である場合のXの補数に等しい。G(X)の最小値は、XとXの間で31ビットの対数絶対値の分割に依存する。Xが5.8形式である場合、Xは0.00000000xxxxxxxxxxxxxxx形式であって2−8より小さい。従って、X=0の場合、Gの最小値は8.5である。形式(5.7)のXの場合、Gの最小値は7.5であり、形式(5.9)のXの場合、Gの最小値は9.5である。各サイクルでXの値は少なくともGの値分増加するため、3個のG値が平均して8を超える限り、Xは3サイクル以内に24を超える。以下、説明の都合上引き続き32ビット演算であると仮定する。Gの最小値が8.5である場合、格納されている値から底の値8を減算する場合がある。
図5に、指数近似に加えて補正表を用いて、引数の全範囲0〜24にわたり関数FおよびFを実装する方法を示す。しかし、8〜16の範囲にわたりFだけを近似する場合は、図6に示すように構成が簡単になる。
パイプライン
上で述べた各種の2表反復的方法を用いて、対数演算の実行に必要なメモリの量を減らすことができるが、所望の結果を得るために必要な複数回の反復の実行が、長時間を要することを理解されたい。対数演算処理の時間を短縮するため、従って速度を上げるために、本発明は、ある段階から後続段階へのフィードフォワードを有するハードウェアの新規な多段パイプラインを実装するALUを開示する。F(r)関数用の参照表が各段階において連続的に大きくなるr値によりアドレス指定されるため、各段階における参照表は、先行段階で扱われた最大r値と後続段階で扱われる最小r値の間にあるアドレスの範囲だけを扱えばよい。実際に、単一の参照表F(r)は、各々にパイプラインの各段階が関連付けられている、同時にアドレス指定可能な複数の副関数参照表に分解することができる。更に、rが増加するにつれてF(r)の値が減少するため、各連続する表の語長を短縮することができる。チップに占める読み出し専用メモリ(ROM)のシリコン領域はビット数、より具体的には格納されている2進の1、先行するゼロ(leading zeros)、および特定の構造を必要としない他のゼロの個数に比例するため、F(r)表の分割により全体のシリコン領域を減らすことができる。
上述のように、対数ALUに関するあらゆる研究は実質的に、表のサイズを減らすことを関心対象としている。本明細書に開示する最適化は、この目的を達成するために重要な寄与をもたらす。本出願において、多段パイプラインは通常、実数の加算よび実数の減算の場合に各々収束させる必要に応じて3または4段階の反復を実装して、あるいは複素数演算での必要に応じてより多くの段階を実装しており、各段階について最適化されたハードウェアが直列接続されている。このようにした場合、後続のハードウェア段階が先行する計算の第2且つ後続する段階を扱うとき、新規の計算の第1段階を開始することができる。これにより、3〜4段階またはサイクル遅延毎に1回の算術演算から、単一段階遅延毎に1回の算術演算へ、スループットが向上する。
上は、対数加算の実行に3サイクルを用い、対数減算の実行に4サイクルを用いる2表反復的方法について述べたものである。本発明の新規なパイプラインによれば、各段階は1サイクルを実行する。各段階はFおよびG表の完全な組を含んでいるが、以下に、F参照表から抽出するために用いた関数を、副関数参照表を定義する副関数に分解することにより、表のサイズを減らす(各段階は、対応する副関数参照表を有する)方法を記述する。
上述の3サイクル加算アルゴリズムにおいて、第1段階で用いるF参照表用の引数Xは、0〜24の範囲にわたっていてよい。しかし、X≧8ならば、24を超える所望の終端値までXを増やすには2段階で十分であるため、第1段階をスキップまたは迂回することができる。その場合、8より大きいFの引数と第2段階で最初に遭遇することにより、第1段階は、X<8である値を扱うことに限定され、従って最初の段階の参照表のサイズが減少する。
同様に、第2段階でX≧16ならば、Xが第3段階の後だけでも24を超える筈であるため、第2段階をスキップまたは迂回することができる。従って、初めて16以上のFの引数に遭遇するのは第3段階においてであり、Fに対する第2段階の引数は8≦X<16の範囲に限られる。
第3段階におけるFに対する引数は従って、16〜24(16≦X<24)の範囲にある。X>24の場合、F=0、すなわち、関数値を生成する必要は無い。Xの引数の範囲が0〜9、9〜18および>18に等しく分割することができる点を理解されたい。しかし、8、16、および24の境界を設定することは、分割を特に容易とする。Xの2個の最上位ビットだけがこれらの境界を決定し、F表を2進小数点の左側3ビットによりアドレス指定するだけで済むためである。これにより、格納されたG−表値から底の値8が減算されても、これらの3ビットに影響を及ぼさないため、足し戻す必要がない理由が明らかになる。
図7に、本発明に基づく多段パイプラインを実行する、一つの例証的なALU100を示す。ALU100は、減算器102、複数のパイプライン段階、および1個以上の出力コンバイナ118、128、132を含んでいる。各段階は、分解された主参照表から導かれた副関数参照表112、122、130を含んでいる。このように、副関数参照表の組合せのサイズは主参照表のサイズに近い。減算器102は、2個の対数数値AおよびBの減算を行なってXを得る。ここにA=log(a)およびB=log(b)である。更に、減算器102は、大きい方をコンバイナ118に出力し、また差の法を参照表110、112およびコンバイナ114に出力する。形式(5.8)でありながら24未満の値である差(X)の最上位ビットは、F表112をアドレス指定する一方、最下位ビット(X)はG表110をアドレス指定する。コンバイナ118は、本明細書で部分出力と称する形式(0.24)のF表の出力を、AとBの大きい方と組み合わせる。G表の出力は、最大でも24より僅かに小さい値(それ以上大きい値は計算を終了させてしまうため不要)であり、形式(5.24)をなしている。コンバイナ114は、G表の出力をXの先行値およびF表112からの部分出力と組み合わせて、Xの次の値であるX’を得る。LSB群XはMSB群より先に減算器102の外で安定しているため(Because the LSBs XL are stable out of subtracter 102 before the MSBs)、G表110の出力はF表112の出力よりも先に有効になる。このように、G表110の出力は、図7に示すように、先にXに加算することができる。この結果も、語長が5.24より長い必要はなく、F表112が提供する部分出力に加算される。X>24でアルゴリズムが収束することを、繰り返し示す必要がないよう、パイプラインの任意の段階でX値が24を超えそうなことが検出されたならば、処理を終了して早い時点での結果を抽出できるようにすればよい。更に、ある段階に入力されたXの値がF表への最大アドレス値を超えた場合、FおよびG表の出力値を強制的にゼロとすることにより、Xにも、AとBの大きい方にも何も加算されることがないようにできる。変更されなかった値は、次のクロックサイクルで後続段階へ単に渡される。
コンバイナ116の出力は形式(5.24)で29ビットある。最上位13ビット(5.8)が副関数表122をアドレス指定する。F表122が部分F表である理由は、この時点におけるXの値が、上記のように常に8より大きいためである。要するに、第1段階の後では、Xは常に8より大きい。その理由は、以下通りである。
・Xの最小開始値は0より僅かに大きい。
・従ってF表122からの値はほぼ1である。
・G表120からの最小値は−log(1−2−8)= 8.53である。
従って、副関数表122に対する最小の引数は9.5である。従って、9.5と24の間でXの値を提供すれば済むため、大幅に少ないビット数で済む。しかし、8まで下げたXを提供することにより、2個のMSビットだけに基づいて第1段階を迂回することをより簡単に決定することができる。コンバイナ128は、副関数表122からの部分出力を、これまでの結果と組み合わせる。
第2のG表120は、コンバイナ116の出力の第24LSBを無視すれば、第1のG表110と同一であってよく、従って依然として15ビットだけでアドレス指定される。一方、望むのであれば、第2段階のビット分割は、第1段階のものと同じである必要はない。例えば、F値の語長が短いために副関数表122がかなり小さい前提で、X’は1ビットだけ長く、X’は1ビット短くてもよい(あるいは、第24LSBを用いてもよい)。第3段階のビット分割はまた、以下に詳述するように、別々に最適化することができる。
コンバイナ124は、形式5.24をなすG表120の出力を29ビットのX’値と組み合わせ、コンバイナ126は29ビットの結果を副関数表122からの部分出力と組み合わせて、Xの次の値であるX”を得る。X”の最上位13ビット(5.8)は、別の副関数表130をアドレス指定する。当該表130は、上述のようにこの時点におけるX”の値が常に18(または16)より大きいため、副関数表122よりも小さい。従って、F値としては、第3段階では1バイト値しか無い。コンバイナ132は、最終のF表130からの部分出力をコンバイナ128からの結果と組み合わせて、最終結果Cを生成し、次いでS8.24からS8.23へ切り捨てる。
いくつかの状況において、上で簡単に述べたように、パイプラインの1段階以上を迂回することができる。例えば、第1段階でX>8ならば、第2段階へ値をフィードフォワードして、これらの値を処理に挿入することにより、第1段階を迂回することができる。これは、単にXおよび部分出力にゼロを加えながら、次のクロックサイクルを待機することで実行でき、その結果、1段階先の計算を前方へ伝播することができる(the calculation that is ahead one stage can propagate forward)。同様に、第2段階でX’>16ならば、変更されていない値を第3段階へフィードフォワードすることにより、第2段階を迂回することができる。換言すれば、特定の段階の入力値が当該段階の参照表の範囲を超えた場合、図7の破線で示すように、変更されていない値をフィードフォワードすることにより、当該段階を迂回することができる。待機期間を省略することは、パイプラインが満杯でない場合のみ、あるいは1段階先の値が伝播するのを待機する等、衝突を避けるべく他の手段が取られた場合のみ、可能である。従って、パイプラインが満杯である場合、この迂回方法には必ずしも速度の利点がない。8を超える値がF表122の先へ押しやられるため、初期F表112は従って、X=0〜8の範囲に限られる。実際、F表112は、F表122とF表130のサイズ分だけ減らされて、パイプライン化された対数加算用のF表のサイズの和は、非パイプライン化反復用に使用する主F表のサイズと実質的に同一である。時分割するのに十分速くないとの仮定に基づき(assuming it is not fast enough to time-share)、G表だけが全体的に複製される。
「迂回」または「前進」アルゴリズムを実行するのに異なる方法がある。電力消費を増やす恐れのある過度の調整リップル(settling ripple)を避けるべく、ある段階からの後続段階へのビット遷移の再同期(リタイミング)を行なうことが高速ロジック上、望ましい。パイプライン・アルゴリズムには、第1および第2段階の間、および/または第2および第3段階の間でのフリップフロップの再同期を含んでいてよい。LSBの再同期がMSBの再同期より早く生じ得る点に、また、一般に、ワードのビットは、リップル−桁上げ遅延(ripple-carry delay)に合致すべく、意図的にスタガー遅延されたクロックにより(with a deliberately stagger-delayed)再同期できる点に、注意されたい。パイプラインの順序を乱すことを避けるために、常に値が、3つの再同期された段階を介して伝播するように構成することができる。ただし、いずれかの段階でのX値がこれに関連付けられた副関数表が扱う値より大きい場合には、「無操作」を実行して、適当な再同期の後で、実質的に変更されていないX値および部分出力が後続段階へ渡される。8の底がG表の項目から減算されている場合に、ある段階が迂回されたならば、Xから値8を減算することができる。これはまた、F表の引数が特定の段階のF表の範囲外にある場合に、FおよびG表がゼロ値を出力するように構成することにより、実現することができる。このように、異なる副関数F表により扱われるX範囲に重なりが全くあるいはほとんど必要とされないため、F表に必要とされるビットの総数は、非パイプライン化アルゴリズムで使用する主F表に必要とされるビットの総数を超えない。いくつかの実施形態において、最終段階のF表は、補正なしで指数近似値だけを用いることができる。
対数減算は、異なる関数Fを用いる以外は上述の対数加算と実質的に同一であり、通常は収束のために加算よりもう1回の反復を行なう。図8に、対数減算アルゴリズムに関連付けられたパイプラインを実行する、一つの例証的なALU200を示す。減算器202は2個の対数値AおよびBの減算を行なう。入力値は共に同符号を有するものと仮定され、そうでない場合はそれらの減算は代わりに対数加算アルゴリズムの使用が必要となるであろう。入力減算器202は、大きい方の対数絶対値により入力値を決定して、結果の符号を決定する。該符号は、Bの対数絶対値が大きい場合は入力符号と逆であり、Aの対数絶対値が大きい場合は、入力符号と同一である。結果の符号は32ビット出力のMSBであり、出力までのコンバイナの連鎖218、238、248、252による影響を受けないままである。
差分MSB群Xがゼロならば、F(X)の値は直接G(X)により与えられて、パイプラインを早く終了することができる。従って、第1段階のF表212が扱わなければならないXの最小値は00000.00000001である。ただし、そのアドレスに対して格納される値は、−log(1−2−0.000000011....1)である。これをコンバイナ216のG表値(にコンバイナ214からのXの前の値を加えたもの)から減算して、常に正の結果X’を得る。これはXの先の値よりも、少なくとも以下の値だけ大きい。


この結果を得るには、Xは0.00000000111111111111111でなければならず、X’は少なくとも1.001977となる。従って、F表232は、原理的に全範囲を扱わねばならないF表212に比べて、1〜24の範囲の引数だけを扱えばよい。しかし、パイプライン化された対数加算について上で述べた迂回原理を実装することにより、Xの初期値が1以上ならば、パイプラインの第1段階を迂回してXを最初にF表232へ渡すことができる。従って、F表212は0≦X<1の範囲だけを扱えばよい。
パイプラインにおけるX値が1を超えたならば、各々の連続するX値は対数加算アルゴリズムとほぼ同程度(8.5)増加し、連続するF表は、語長が短くなって、各段階で処理されるXの範囲に対応する値の個数のみ格納する。従って、いずれにせよ、迂回方法を利用することにより、G表を対数減算用に3倍に、対数加算用に2倍にする必要があるものの、パイプライン化されたアルゴリズム用の全ての副関数F表のサイズの和が、非パイプライン化システムで使用される主関数F表のサイズと同一となり得ることがわかる。対数加算および対数減算の両パイプライン化アルゴリズムにおいて、最終段階用の副関数参照表は、反復回数が打ち切られる前提のもとで結果の精度を向上させるべく、非増加X値用の関数の値を保持することができる。
対数減算アルゴリズムにおいて、上述のように1段階以上が迂回されない限り、本明細書で部分出力と呼ぶ連続するF表出力は、減算器の連鎖218、228、238、252においてAとBの大きい方から減算される。F表の出力は、所望の精度よりも少なくとも1個追加されるLSBを含んでいてよく、そのため、全てが同じ方向に1/2LSB分丸められている4個のF値が組み合わされた場合、全体の丸めは所望の精度よりLSB1個分を下回る。中間コンバイナ218、228および238はこの語長拡張により動作する一方、コンバイナ252は、所望の31ビット正符号へ適切に丸めることにより、結果を切り捨てる場合がある。
上述のように、対数加算および対数減算パイプライン用のF表のサイズは、F関数の引数の予想される範囲に基づいて、パイプラインの異なる段階毎に変動する場合がある。しかし、関数および/または補正表のサイズは、段階入力に適用されるビット分割に基づいて更に最適化できる点も理解されたい。換言すれば、ビット分割を1段階以上について最適化して、格納された表のサイズを最適化することができる。例えば、XとX間の例証的なビット分割(5.8;15)の場合、第2段階のF関数は約2.3キロバイトの参照表しか必要としないが、G関数は約130.1kバイトを必要とし、合計で第2段階では132.4kに及ぶメモリ容量となる。しかし、下表に示すように、Xにより多く、Xにより少なくビットを割り当てるような、異なるビット分割により、第2段階に必要とされるメモリの総量を最小化することができる。
上の表は、第2段階における関数と補正表の最小の組み合わせサイズがビット分割(5.11;12)で生じることを示している。実際のメモリチップ領域は、関数表の最も長い語(17ビット)より短い値および補正表の8ビットより短い値について先行するゼロを省略することにより、更に小さくできる。表のサイズを減らす他の手段を用いて、更なる削減を行なってもよい。
0〜8の間のXの場合、指数近似を用いるよりも、F用の直接参照表を使用する方がより効率的であろう。加算用に格納される値は、1.0より小さく、0.24形式で、小数点以下24ビットの精度に格納することができる。従って、Fの引数範囲0≦X<8の関数の第1段階の事例は、第2段階と同様に最適化することができる。この場合、直接参照表がF関数を実装し、全ての語長が3バイトであると仮定される。従って、第1段階の場合、最適分割は下表に示すように(5.10;13)である。
加算アルゴリズムの最終段階(第3段階)の場合、次のX値が必要ないため、G関数を計算する必要がない。更に、引数の範囲16≦X<24の場合、指数近似だけで十分であり、Xの最上位ビットだけが必要である。例えば、形式5.8を用いることができ、256バイトの指数表で十分である。
各段階について最小合計を選択すれば、3段パイプライン用に必要とされる表参照の総量は、第1段階の分割(5.10;13)、第2段階の分割(5.11;12)、および第3段階の分割(5.8)について、57,344+34,816+256=92,416バイトである。これはチップ領域だけを近似的に示すものである。ROM構造の仕様により、トランジスタが存在すれば「1」、トランジスタが存在しなければ「0」を表わすならば、多くの値が必ずしもチップ域を占有しない数個の先行するゼロを有することが指摘されるためである。
また、最終段階ではXの先頭8個のバイナリの箇所(the first 8 binary places)のみが必要であるため、第2段階における前のG関数用の小数点以下の24個の箇所が不要である点も理解されたい。第2段階のG表のサイズは従って半分になり、第2段階に対して以下のようにサイズにトレードオフが生じた表が得られる。
パイプライン化された対数減算アルゴリズムのためのXおよびXへのビット分割もまた、各段階におけるFおよびG表の合計サイズを最小化すべく、パイプラインの1段階以上で異なっていてよい。減算器パイプライン200の第1段階F表212は、0〜1のXの値だけを扱えばよく、従って2進小数点の左側がゼロである。F関数の値は当該引数範囲の場合、最大長さ29ビット(5.24)とすることができ、これが4バイトまで切り上げられる。この結果、以下のトレードオフ表が得られる。
とXの間のビット分割(12:11)を選択することにより、合計メモリが最小化され、平均して、パイプラインの第2段階に11:12の分割に比べより大きいX’の値が入ることが保証される。
減算器パイプライン200の第2段階F表232は、1より大きく8より小さい形式3.23のX’を取扱う。第2段階が最大9までの値を扱えるようにして、2アドレス空間が全面的に使用できるようになれば便利であろう。第1段階から渡されるX’の値を1減算して、F表232に対して0〜8の間、すなわち2進小数点の3ビット左のアドレスを提示することができる。F関数の値は1より小さいため、小数点の右側に24ビットすなわち3バイトしか有していない。この結果、以下のトレードオフ表が得られる。
従って、(3.11:12)分割が、第2のパイプライン段階にとり好適な選択である。
第2のパイプライン段階からのX”の値は11より大きくなるが、第3のパイプライン段階もまた、第2段階を迂回する9より大きい値を扱わなければならない。このように、第3段階の副関数表は、9より大きく17より小さいX”の値を扱わなければならない。F関数の値はこの場合、2バイトよりも短い。更に、最終段階においてX”の最上位部分だけがF表をアドレス指定するために必要となるので、G関数は2バイトの精度で格納できれば十分である。第3段階のF表へのアドレスは9を減算することにより再び9減らされて0〜8の範囲となる。すなわち、アドレスは小数点の左側に3ビットを有し、その結果、以下のトレードオフ表が得られる。
上の表から、第3段階の最適分割は(3.10:13)であることが明らかである。
最終段階におけるF表は、17より大きく最大25までの、Xの可能な残りの値を扱う。関数の値は、当該引数範囲で自身の表現用に8個のLSBだけが必要であるため、最終段階のF表は2〜4キロバイトのオーダーであればよい。4段パイプライン対数減算アルゴリズムに対する合計参照表の要件を合算すれば、118,688バイト、すなわち約12OkBを得るが、これは典型的な最新のデジタル集積回路チップのシリコン領域の10%未満である。
ビット分割の最適化によりFおよびG表のサイズが最適化されるが、ビット分割の最適化はまた、完全な実数バタフライ演算を実行すべく、対数加算および対数減算がパイプライン化方法において別々に実装されている場合に有用である。これにより、僅かに異なる語長を含んでいてパイプライン化にもう1段階必要な対数減算を、別個に最適化することができる。
同じ値の組の加算と減算を必要としない場合であっても、別々の対数加算および対数減算装置を有していることにより、加算される値の組と減算される値の組との別々の待ち行列を同時に処理することが可能になる。これはランダムなデータで、各々全体の時間の50%生起し、従って処理速度が2倍になるものと期待される。パイプライン化された方法を実装している場合、処理速度を最大化したいとの要望があるはずなので、対数加算および対数減算の並列実行は歓迎されるものと思われる。
パイプライン化の目的はスループット速度を上げることである。この目的で、パイプラインを介した伝播遅延を減らす方法を見つけることは有用である。伝播遅延は、最下位ビットから最上位ビットまで潜在的に全経路を通る桁上げ伝播に十分な時間を与えることが必要なため、主にコンバイナにおいて起こる。このような遅延を減らすべく、先読み桁上げ生成(look-ahead carry generation)の各種の方式が知られている。
図7に、コンバイナ114が、減算器102からの差分値をG表110の出力と組み合わせ、コンバイナ116が、コンバイナ114の出力をF表112の出力と組み合わせる様子を示す。しかし、単に値X+G(X)をG表110に格納することにより、Xの最下位部分XをG(X)の最下位部分に加算する必要をなくすことができる。同様に、コンバイナ114内でXの最上位部分XをG表出力に加算するのではなく、Xを同じくコンバイナ116で組み合わせてもよい。しかし、これは、単にX+F(X)の値を副関数表112に格納することにより回避することができる。この状況において、副関数表112の出力はまたコンバイナ118でも用いられるため、減算器102から出力された「LARGER(A,B)」の値を補正することにより、Xの加算を補償する必要がある。この目的で、小さい方の値の最上位部分がコンバイナ118へ入力される。また、減算器102の最下位部分からの桁下げが、コンバイナ118へ桁上げ入力としてフィードフォワードされる。
上の数学的表現は以下の通りである。(A,A)は各々Aの最上位および最下位部分を表わすものとする。同様に(B,B)は各々Bの最上位および最下位部分を表わすものとする。更に、A>Bと仮定する。すると、その語長を法としてX=A−Bであり、X=A−B−bである。ここに、bは演算A−Bからの桁下げビットを表わす。次に、第1段階からの出力および第2段階への入力は次式で表わされる。
X’=X+F(X)+G(X
=(X,X)+F(X)+G(X
=[X+F(X)]+[X+G(X)] (33)
=F(X)+G(X
ここに、関数FおよびGは、各々既に組み込まれたXおよびXの加算を有する(the addition of XM and XL, respectively, already built in)。X”も同様にX’から計算することができ、以下同様である。このように、パイプライン段階毎に1個の組み合せが除去された。対数加算処理の所望の結果は次式で得られる。
A+F(X)+F(X’)+F(X”)=(A,A)+F(X)+F(X’)+F(X”)−(X+X’+X”
(34)

+bをA−Xで置換すれば、上式はまた次式のように書くことができる。
A+F(X)+F(X’)+F(X”)=(B+b,A)+F(X)+F(X’)+F(X”)−(X’+X”
(35)

X’’’が必要でないため、パイプラインの最終段階にF関数を用いる必要がない。従って、最終段階は、余分のX”を組み込むことなく、上述の正規のF関数を使用し、その結果、次式を得る。
A+F(X)+F(X’)+F(X”)=(B+b,A)+F(X)+F(X’)+F(X”)−X’
(36)

ここに、(X’,X’)=X’=F(X)+G(X)且つ(X”,X”)=X”=F(X’)+G(X’)である。更に、上で指摘したように、X”を計算する必要がないため、第2のG表は、G値で最上位部分だけを含んでいればよい。しかし、第2段階の副関数参照表は、対数加算処理の結果に寄与するため、F値の最下位(LS)部分を含んでいなければならない。
図9に、上の構成を実行する、一つの例証的なALU300を示す。ここで減算器102は、最上位部分パート減算器302および最下位部分減算器304に分割されている。差分出力X、Xは、図7の減算器102からの出力と同じである。すなわち、Aが大きい方の対数絶対値ならばA−B、さもなければB−Aである。また、大きい方であると判定されたAまたはBの最下位部分がLLとして出力され、これも図7の減算器102の場合と同じである。しかし、減算器302の最上位部分から出力された値Sm(the value Sm output from the most significant part of subtracter 302)は、ここではAとBの小さい方の最上位部分であり、これはコンバイナ328への部分出力F(X)にXを余分に加算したことに起因して、大きい方の最上位部分に有効に補正される。また、Aが大きい方であるときにA−Bが桁下げを生じるか、Bが大きい方であるときにB−Aが桁下げを生じる場合に、Smは1だけ増やされる。1だけ増やすことは、必要なときに、コンバイナ328の桁上げ入力に1を加えることにより実現することができる。
表320は、自身の最上位ビットに予め加算されたF関数の値を、表の引数/アドレスXと共に格納し、G表322も同様に、自身の最下位ビットに予め加算されたG関数の値を、自身の引数/アドレスXと共に格納する。このようにX’の値は、FおよびG表がその値をGおよびFと既に組み合わせているため、単に1個のコンバイナF(X)+G(X)により計算可能である。コンバイナ324、326は必須の加算を実行してX’を生成する。このようにして、1個のコンバイナの伝播遅延、シリコン領域、および電力消費が除去される。
この処理は、第2段階まで続く。ここに、X’は第2段階への入力を表わす。F330およびG表332は各々、X’およびX’に基づく新たな関数および補正値を提供する。コンバイナ334は、関数および補正出力値の最上位ビットを組み合わせて、X”を生成する。コンバイナ338は、部分出力F(X’)の最下位ビットをコンバイナ329の出力と組み合わせて、最下位出力ビットの新たな推定値を生成し、一方、コンバイナ336は、部分出力F(X’)の最上位ビットをコンバイナ328の出力と組み合わせて、最上位出力ビットの新たな推定値を生成する。
最後に、第3段階において、X”がF表340へ入力されて、X”に基づいて関数値の最上位および最下位ビットを生成する。コンバイナ342は、部分出力F(X”)の最上位ビットをコンバイナ336の出力と組み合わせて、最上位出力ビットの最終的な推定値を生成する。同様に、コンバイナ344は、部分出力F(X”)の最下位ビットをコンバイナ338の出力と組み合わせて、最下位出力ビットの最終的な推定値を生成する。
パイプライン化された複素数アルゴリズムは、ビット分割に応じて収束により多くの段階を必要とする場合があるものの、実数の対数加算/減算アルゴリズムと同じ仕方で構築することができる。ただし、実数のアルゴリズムと同様に、任意の段階におけるFの引数のlog(R)部分が自身のアドレス範囲を超えた場合、当該段階を迂回する場合がある。従って、部分的な複素数F表のサイズの和は、非パイプライン化アルゴリズムでの同表の総サイズに保たれる(keeping the sum of the sizes of the partial complex F-tables to the same total size as in the unpipilined algorithm)。
本発明が本明細書に明示していないメモリ圧縮技術と共に利用できることを理解されたい。例えば、米国仮特許出願第60/577,386号に記載のメモリ圧縮技術および/または米国特許出願第_____号(代理人整理番号4015−5288)に記載のメモリ圧縮技術を本出願の発明と合わせて用いてもよい。
本発明は無論、本発明の基本的特徴から逸脱することなく、本明細書に具体的に開示した方法とは別の仕方で実施することができる。本実施形態はあらゆる点で説明目的であって限定的ではなく、添付の特許請求の範囲の意味および均等の範囲内で生じる変更がすべて本発明に包含されることを理解されたい。
図面の簡単な説明
IEEE浮動小数点形式と、実数用の真の対数形式を比較したプロット図を示す。 IEEE浮動小数点形式と、実数用の真の対数形式を比較したチャートを示す。 線形補間器のブロック図を示す。 真のF関数と、指数近似を比較したプロット図を示す。 F表構築システムのブロック図を示す。 簡素化されたF表構築システムのブロック図を示す。 本発明による対数加算多段パイプラインの一つの例証的なブロック図を示す。 本発明による対数減算多段パイプラインの一つの例証的なブロック図を示す。 本発明による変形された対数加算多段パイプラインの一つの例証的なブロック図を示す。

Claims (55)

  1. 多段パイプラインにおける第1および第2のオペランドに基づいて対数計算を実行する方法であって、
    主参照表に関連付けられた主参照関数を2個以上の副関数に分解するステップと、
    各々の副関数に対して副関数参照表をメモリに格納するステップであって、各々の副関数参照表が前記主参照表の一部を含んでいる、ステップと、
    前記多段パイプラインの各段階において少なくとも1個の副関数参照表を使用して段階入力に基づいて段階出力を得るステップと、
    各段階出力を組み合わせて対数出力を生成するステップとを含む方法。
  2. 各段階入力が、対応する前記副関数参照表をアドレス指定する、請求項1に記載の方法。
  3. 前記段階入力が、MS部およびLS部を含んでいて、前記段階入力のMS部が前記副関数参照表をアドレス指定する、請求項1に記載の方法。
  4. 前記第2オペランドから前記第1オペランドを減算して前記多段パイプラインの第1段階用に段階入力を生成するステップを更に含む、請求項3に記載の方法。
  5. 先行段階からの段階入力および段階出力に補正値を累算することにより、後続段階への段階入力を生成するステップを更に含む、請求項4に記載の方法。
  6. 前記メモリに格納された補正表を前記段階入力のLS部によりアドレス指定して前記補正値を生成するステップを更に含む、請求項5に記載の方法。
  7. 前記対数計算の実行が、第1および第2の値の和または差の対数を決定するステップを含んでいて、前記第1オペランドが前記第1値の対数を表わし、前記第2オペランドが前記第2値の対数を表わす、請求項1に記載の方法。
  8. 前記段階出力を組み合わせて対数出力を生成するステップが、前記段階出力を前記第1および第2オペランドのうち一方と組み合わせて対数出力を生成するステップを含む、請求項7に記載の方法。
  9. 前記第1オペランドをMSおよびLS部に分割するステップと、
    前記第2オペランドをMSおよびLS部に分割するステップと、
    前記第1および第2オペランドのLS部を減算して前記パイプラインの第1段階用の段階入力のLS部を生成するステップと、
    前記第1および第2オペランドのMS部を減算して前記パイプラインの第1段階用の段階入力のMS部を生成するステップとを更に含む、請求項1に記載の方法。
  10. 前記第1および第2オペランドのLS部を減算するステップが更に桁下げ部を生成し、前記第1および第2オペランドのMS部を減算するステップが前記桁下げ部を考慮している、請求項9に記載の方法。
  11. 先行段階からの段階出力のLS部にLS補正値を累算することにより、後続段階への段階入力のLS部を生成するステップと、
    先行段階からの段階出力のMS部にMS補正値を累算することにより、後続段階への段階入力のMS部を生成するステップとを更に含む、請求項9に記載の方法。
  12. 先行段階から段階出力のLS部にLS補正値を累算するステップが更に桁上げ部を生成し、後続段階への段階入力のMS部を生成するステップが、前記桁上げ部に先行段階からの段階出力のMS部および前記MS補正値を累算するステップを含む、請求項11に記載の方法。
  13. 変更された補正表を前記段階入力のLS部でアドレス指定して前記MS補正値およびLS補正値を生成するステップを更に含む、請求項11に記載の方法。
  14. 各々の副関数を実行するステップが、対応する副関数参照表または変更された副関数参照表を前記段階入力のMS部でアドレス指定して前記段階出力のMS部および前記段階出力のLS部を生成するステップを含む、請求項11に記載の方法。
  15. 前記段階出力を組み合わせて対数出力を生成するステップが、
    段階出力のLS部を前記第2オペランドのLS部と組み合わせて前記出力のLS部を生成するステップと、
    段階出力のMS部を前記第1オペランドのMS部と組み合わせて前記出力のMS部を生成するステップと、
    前記出力のMSおよびLS部を結合して対数出力を生成するステップとを含む、請求項14に記載の方法。
  16. 前記段階出力を組み合わせるステップが、前記第1オペランドのMS部を前記桁下げ部を考慮している少なくとも1個の段階出力のMS部と組み合わせるステップを含む、請求項15に記載の方法。
  17. 前記段階出力のLS部を前記第2オペランドのLS部と組み合わせるステップが更に桁上げ部を生成し、前記段階出力のMS部を前記第1オペランドのMS部と組み合わせるステップが、前記段階出力のMS部を前記桁上げ部と組み合わせるステップを含む、請求項15に記載の方法。
  18. 前記段階入力が所定の値を超えた場合に段階を迂回するステップを更に含む、請求項1に記載の方法。
  19. 段階を迂回するステップが、迂回された段階についてゼロに等しい段階出力を生成し、前記迂回された段階への段階入力を後続段階の段階入力として用いるステップを含む、請求項18に記載の方法。
  20. 各段への段階入力をMSおよびLS部に分割するステップを更に含む、請求項1に記載の方法。
  21. 前記段階入力のMSおよびLS部が、異なる段階において異なるサイズを有している、請求項20に記載の方法。
  22. 少なくとも1個の副関数参照表のサイズが、段階入力値の予想範囲に基づいている、請求項1に記載の方法。
  23. 前記格納された参照表は、語長が少なくとも2個の連続する段階で減少する、請求項1に記載の方法。
  24. 1個以上の副関数参照表が異なるサイズを有している、請求項1に記載の方法。
  25. 各段階からの前記副関数参照表をまとめると前記主参照表に等しい、請求項1に記載の方法。
  26. 第1および第2のオペランドに基づいて対数計算を実行する対数ALUであって、
    パイプラインの各々の段階が、主関数を分解した各副関数を実行して段階出力を生成する多段パイプラインと、
    各々の副関数に対する副関数参照表を格納するメモリであって、各々の副関数参照表が前記主関数に関連する前記主参照表の一部を含んでいる、メモリと、
    前記パイプラインの各段階により生成された段階出力に基づいて対数出力を生成する少なくとも1個のコンバイナとを含むALU。
  27. 各段階入力が、対応する副関数参照表をアドレス指定する、請求項26に記載の対数ALU。
  28. 各段階入力が、MS部およびLS部を含んでいて、各段階入力のMS部が前記対応副関数参照表をアドレス指定する、請求項27に記載の対数ALU。
  29. 前記第2オペランドから第1オペランドを減算して前記第1段階への段階入力を生成する減算器を更に含む、請求項28に記載の対数ALU。
  30. 前記多段パイプラインの少なくとも1個の段階が、先行段階からの段階入力および段階出力を先行段階からの補正値と組み合わせて後続段階への段階入力を生成する段階コンバイナを含む、請求項29に記載の対数ALU。
  31. 前記メモリが更に補正表を格納し、前記段階入力のLS部が前記補正表をアドレス指定して対応する段階の補正値を生成する、請求項30記載の対数ALU。
  32. 前記ALUが、第1および第2の値の和または差の対数を決定することにより対数計算を実行し、前記第1オペランドが前記第1値の対数を表わし、前記第2オペランドが前記第2値の対数を表わす、請求項26に記載の対数ALU。
  33. 前記出力コンバイナが、前記第2オペランドに前記段階出力を累算して対数出力を生成する2個以上のアキュムレータを含む、請求項32に記載の対数ALU。
  34. 前記第1および第2オペランドのLS部を減算して前記第1段階への段階入力のLS部を生成し、前記第1および第2オペランドのMS部を減算して前記第1段階への段階入力のMS部を生成する減算器を更に含む、請求項26に記載の対数ALU。
  35. 前記減算器が更に、前記第1および第2オペランドのLS部の減算に基づいて桁下げ部を生成し、前記減算器が更に、前記第1および第2オペランドのMS部を減算して前記第1段階への段階入力のMS部を生成する際に前記桁下げ部を考慮に入れる、請求項34に記載の対数ALU。
  36. 前記多段パイプラインの少なくとも1段階が、
    先行段階からの段階出力のLS部にLS補正値を累算して後続段階への段階入力のLS部を生成するLS段階コンバイナと、
    先行段階からの段階出力のMS部にMS補正値を累算して後続段階への段階入力のMS部を生成するMS段階コンバイナとを含む、請求項35に記載の対数ALU。
  37. 前記LS段階コンバイナが更に、先行段階からの段階出力のLS部へのLS補正値の累算に基づいて桁上げ部を生成し、前記MS段階コンバイナが前記桁上げ部に先行段階からの段階出力のMS部および前記MS補正値を累算して後続段階入力のMS部を生成する、請求項36に記載の対数ALU。
  38. 前記メモリが更に、前記パイプラインの少なくとも1段階用に、変更された補正表を格納し、前記段階入力のLS部が前記補正表をアドレス指定して前記補正値を生成する、請求項37に記載の対数ALU。
  39. 前記メモリに格納された少なくとも1個の副関数参照表が、変更された副関数参照表を含む、請求項37に記載の対数ALU。
  40. 前記段階入力のMS部が、前記副関数参照表または変更された副関数参照表をアドレス指定して、前記段階出力のMS部および前記段階出力のLS部を生成する、請求項39に記載の対数ALU。
  41. 少なくとも1個の出力コンバイナが、
    前記段階出力のLS部を前記第2オペランドのLS部と組み合わせて前記対数出力のLS部を生成するLSコンバイナと、
    前記段階出力のMS部を前記第1オペランドのMS部と組み合わせて前記対数出力のMS部を生成するMSコンバイナとを含む、請求項40に記載の対数ALU。
  42. 前記MSコンバイナが、前記桁下げ部を考慮に入れながら、前記第1オペランドのMS部を段階出力のMS部と組み合わせる、請求項41に記載の対数ALU。
  43. 前記LSコンバイナが更に、前記段階出力のLS部と前記対数出力のLS部の組合せに基づいて桁上げ部を生成し、MSコンバイナが更に、前記段階出力のMS部を前記第1オペランドのMS部および前記桁上げ部と組み合わせて前記対数出力のMS部を生成すべく構成されている、請求項41に記載の対数ALU。
  44. 各々の副関数参照表の語長が、少なくとも2個の連続する段階で減少する、請求項26に記載の対数ALU。
  45. 前記段階入力がMS部およびLS部を含んでいて、前記MSおよびLS部が異なる段階において異なるサイズを有し得る、請求項26に記載の対数ALU。
  46. 少なくとも1個の副関数参照表のサイズが、予想される段階入力値の範囲に基づいている、請求項26に記載の対数ALU。
  47. 1個以上の副関数参照表が異なるサイズを有している、請求項26に記載の対数ALU。
  48. 各段階からの前記副関数参照表をまとめると前記主参照表に等しい、請求項26に記載の対数ALU。
  49. 多段パイプラインにおいて対数計算を実行する方法であって、
    前記多段パイプラインの各段階に対する副関数参照表を格納するステップであって、前記副関数参照表が主関数表の一部を含んでいる、ステップと、
    対応する副関数参照表および段階入力を用いて、少なくとも1段階に対する段階出力を計算するステップと、
    各段階出力を組み合わせて対数出力を生成するステップとを含む方法。
  50. 各段階への段階入力をMSおよびLS部に分割するステップを更に含む、請求項49に記載の方法。
  51. 前記段階入力の前記MSおよびLS部が異なる段階において異なるサイズを有し得る、請求項50に記載の方法。
  52. 前記段階入力が所定の値を超えた場合、段階を迂回するステップを更に含む、請求項49に記載の方法。
  53. 少なくとも1個の副関数参照表のサイズが、予想される前記段階入力値の範囲に基づいている、請求項49に記載の方法。
  54. 1個以上の副関数参照表が異なるサイズを有している、請求項49に記載の方法。
  55. 対数形式の数に対して演算を実行するALUであって、対数関数に関連付けられた参照表を格納するメモリを含み、前記参照表が、アドレス範囲により少なくとも2個の同時にアドレス指定可能な副表に分割されていて、前記ALUが、前記副表のうち少なくとも1個をアドレス指定する入力に基づいて、前記参照表を使用して対数加算および対数減算処理のうち少なくとも一つを行なうALU。
JP2007513850A 2004-06-04 2005-06-02 パイプライン化された実数または複素数alu Pending JP2008502036A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US57738604P 2004-06-04 2004-06-04
US64325905P 2005-01-12 2005-01-12
US11/142,485 US7711764B2 (en) 2004-06-04 2005-06-01 Pipelined real or complex ALU
PCT/EP2005/005911 WO2005119427A2 (en) 2004-06-04 2005-06-02 Pipelined real or complex alu

Publications (1)

Publication Number Publication Date
JP2008502036A true JP2008502036A (ja) 2008-01-24

Family

ID=35450231

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007513850A Pending JP2008502036A (ja) 2004-06-04 2005-06-02 パイプライン化された実数または複素数alu

Country Status (4)

Country Link
US (1) US7711764B2 (ja)
EP (1) EP1766508A2 (ja)
JP (1) JP2008502036A (ja)
WO (1) WO2005119427A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3118737A1 (en) 2015-07-16 2017-01-18 Fujitsu Limited Arithmetic processing device and method of controlling arithmetic processing device

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7945765B2 (en) * 2008-01-31 2011-05-17 International Business Machines Corporation Method and structure for asynchronous skip-ahead in synchronous pipelines
US20120188406A1 (en) * 2011-01-20 2012-07-26 Apple Inc. Reduced power consumption filter
US9753695B2 (en) 2012-09-04 2017-09-05 Analog Devices Global Datapath circuit for digital signal processors
US9329936B2 (en) 2012-12-31 2016-05-03 Intel Corporation Redundant execution for reliability in a super FMA ALU
US9779272B2 (en) * 2015-04-14 2017-10-03 Analog Devices, Inc. Extended use of logarithm and exponent instructions
GB2581507B (en) * 2019-02-21 2022-10-19 Xmos Ltd Logarithmic number system
US12039330B1 (en) * 2021-09-14 2024-07-16 Amazon Technologies, Inc. Programmable vector engine for efficient beam search
CN116070556A (zh) * 2021-11-01 2023-05-05 华为技术有限公司 一种多级查找表电路、函数求解方法及相关设备
US12008368B2 (en) 2022-09-21 2024-06-11 Amazon Technologies, Inc. Programmable compute engine having transpose operations

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6334623A (ja) * 1986-07-29 1988-02-15 Mitsubishi Electric Corp ルツクアツプテ−ブル

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US577386A (en) 1897-02-16 Sylvester s
US4727508A (en) * 1984-12-14 1988-02-23 Motorola, Inc. Circuit for adding and/or subtracting numbers in logarithmic representation
US4626825A (en) 1985-07-02 1986-12-02 Vlsi Technology, Inc. Logarithmic conversion apparatus
US4737925A (en) * 1985-12-06 1988-04-12 Motorola, Inc. Method and apparatus for minimizing a memory table for use with nonlinear monotonic arithmetic functions
US5337266A (en) * 1987-12-21 1994-08-09 Arnold Mark G Method and apparatus for fast logarithmic addition and subtraction
SE463540B (sv) 1988-09-19 1990-12-03 Ericsson Telefon Ab L M Saett foer att i ett radiokommunikationssystem digitalisera godtyckliga radiosignaler samt anordning foer utoevande av saettet
SE463584B (sv) 1989-04-20 1990-12-10 Ericsson Telefon Ab L M Saett och anordning foer noggrann digital maetning av tids- eller faslaeget i ett signalpulstaag
US5070303A (en) 1990-08-21 1991-12-03 Telefonaktiebolaget L M Ericsson Logarithmic amplifier/detector delay compensation
US5944774A (en) 1997-09-26 1999-08-31 Ericsson Inc. Methods apparatus and computer program products for accumulating logarithmic values
US6711596B1 (en) 1999-05-14 2004-03-23 University Of Newcastle Upon Tyne Method and apparatus for determining the approximate valve of a logarithmic function

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6334623A (ja) * 1986-07-29 1988-02-15 Mitsubishi Electric Corp ルツクアツプテ−ブル

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6010024984, CHICHYANG CHEN, "Pipelined computation of LNS addition/subtraction with very small lookup tables", Computer Design: VLSI in Computers and Processors, 1998. ICCD ’98. Proceedings., 19981005, p.292−297, US, IEEE COMPUT.SOC *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3118737A1 (en) 2015-07-16 2017-01-18 Fujitsu Limited Arithmetic processing device and method of controlling arithmetic processing device
US10037188B2 (en) 2015-07-16 2018-07-31 Fujitsu Limited Arithmetic processing device and method of controlling arithmetic processing device

Also Published As

Publication number Publication date
US7711764B2 (en) 2010-05-04
WO2005119427A3 (en) 2006-06-29
WO2005119427A2 (en) 2005-12-15
US20050273481A1 (en) 2005-12-08
EP1766508A2 (en) 2007-03-28

Similar Documents

Publication Publication Date Title
JP2008502036A (ja) パイプライン化された実数または複素数alu
US7689639B2 (en) Complex logarithmic ALU
JP6694880B2 (ja) 有効度整合
JP5175379B2 (ja) 選択可能な下位精度を有する浮動小数点プロセッサ
US7395304B2 (en) Method and apparatus for performing single-cycle addition or subtraction and comparison in redundant form arithmetic
US20160004508A1 (en) Subdivision of a fused compound arithmetic operation
JPH1078863A (ja) 浮動小数点式ハードウェアを用いたマイクロプロセッサ整数除法演算を実行するための方法および装置
US6108682A (en) Division and/or square root calculating circuit
JPH0749772A (ja) 除算及び開平算に関して修正ニュートン−ラプソン技術を用いる浮動小数点演算装置
TW200907793A (en) Exponent processing systems and related methods
JPH11288411A (ja) 基本関数の高精度推定
JP2012089144A (ja) ブース乗算方法及びシステムのための電力効率の良い符号拡張
US10101970B2 (en) Efficient modulo calculation
US6941334B2 (en) Higher precision divide and square root approximations
KR100433131B1 (ko) 작은 사이즈의 룩업 테이블을 갖는 파이프라인 나눗셈연산기 및 연산방법
JP3598096B2 (ja) ニュートンラフソン法を用いた演算方式
JP2003271056A (ja) 剰余演算器
CN115562622A (zh) 平方根处理电路系统和方法
Schulte et al. Floating-point division algorithms for an x86 microprocessor with a rectangular multiplier
Jaiswal et al. Taylor series based architecture for quadruple precision floating point division
Wires et al. Reciprocal and reciprocal square root units with operand modification and multiplication
Bruguera Radix-64 floating-point division and square root: Iterative and pipelined units
Hsiao et al. Multi-Precision Table-Addition Designs for Computing Nonlinear Functions in Deep Neural Networks
Kumm et al. Reduced complexity single and multiple constant multiplication in floating point precision
AU2020424575B2 (en) Secure square root computation system, secure normalization system, methods therefor, secure computation apparatus, and program

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080502

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100507

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100806

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100813

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100907

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100914

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101007

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110506