JP2006252287A - 演算方法、プログラムおよび演算装置 - Google Patents

演算方法、プログラムおよび演算装置 Download PDF

Info

Publication number
JP2006252287A
JP2006252287A JP2005069260A JP2005069260A JP2006252287A JP 2006252287 A JP2006252287 A JP 2006252287A JP 2005069260 A JP2005069260 A JP 2005069260A JP 2005069260 A JP2005069260 A JP 2005069260A JP 2006252287 A JP2006252287 A JP 2006252287A
Authority
JP
Japan
Prior art keywords
overflow
numerical value
integer
sum
squares
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
JP2005069260A
Other languages
English (en)
Inventor
Eiichiro Shigehara
英一郎 繁原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toyota Motor Corp
Original Assignee
Toyota Motor Corp
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 Toyota Motor Corp filed Critical Toyota Motor Corp
Priority to JP2005069260A priority Critical patent/JP2006252287A/ja
Publication of JP2006252287A publication Critical patent/JP2006252287A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】 浮動小数点形式で記述された数値から構成される数列の自乗和を含む演算を実行する際に、オーバーフローの予測を低い計算負荷で行うことが可能な技術を提供する。
【解決手段】 本発明の演算方法は、浮動小数点方式で表現された数値から構成される数列の自乗和を含む演算に係るオーバーフローを予測する演算方法である。その演算方法は、演算に対応した指数の許容値を固定小数点方式で表現する第1整数を特定する工程と、数列を構成するそれぞれの数値について、第1整数と、数値の指数を固定小数点方式で表現する整数とを比較する工程と、第1整数に比べて数値の指数を示す整数が大きい場合に、オーバーフローの発生を示すデータを出力する工程とを実施する工程とを備えている。
【選択図】 図2

Description

本発明は浮動小数点演算を高速に行う技術に関する。詳しくは、浮動小数点演算の実行中にオーバーフローが発生する場合にはそれを事前に予測し、それによって無駄な演算を省略して演算を高速に行うことを可能とする演算方法とプログラムと演算装置に関する。
画像認識の分野を始めとして、多くの技術分野において浮動小数点を用いた演算が多用されている。その中でも、浮動小数点を用いて表現された数値の列からなる数列の自乗和を求める過程を含む演算が、様々な技術分野で用いられている。
例えば、SVM(Support Vector Machine)技術を用いた画像認識では、図11に示すように、カメラ等から得られた画像を画像データ1102として取り込む。取り込まれた画像データ1102は、例えば画素毎のRGBそれぞれの色の照度といった、画像を特徴付ける数値分布を示すデジタルデータである。画像データ1102の中に、特定の対象物が存在するか否か、存在する場合には画像データ1102の中のどこに存在するか、といったことがパターン・マッチング処理によって判断される。パターン・マッチング処理では、画像データ1102の中に、辞書データ群1104に含まれている辞書データ1108a、1108b、1108c、・・・と一致する部分があるか否かを検出する処理が行われる。より詳細には、取り込まれた画像データ1102を幾つかの領域に分割し、分割された領域の画像データ1106と辞書データ1108a、1108b、1108c、・・・・とを比較し、一致する度合いを評価することで、辞書データ1108a、1108b、1108c、・・・・で表現されるパターンの有無を判別する。分割された領域の画像データ1106と一つの辞書データ1108aとの比較は、以下に示すような自乗和を含む演算を実施して行う。
Figure 2006252287
上記式において、iは画素の番号を示し、xiはその画素の画像データ1106における数値を示し、aiはその画素の辞書データ1108aにおける数値を示し、nは画素数を示している。
上記の演算によって取得されるF(n)が小さい値であるほど、画像データ1106と辞書データ1108aが一致する度合いは大きい。また上記の演算によって取得されるF(n)が大きい値であるほど、画像データ1106と辞書データ1108aが一致する度合いは小さい。
ある分割された領域の画像データ1106に対して、全ての辞書データ1108a、1108b、1108c、・・・・との比較を行い、上記のF(n)が所定のしきい値を下回るか否かを判断する。上記のF(n)が所定のしきい値を下回る場合、その辞書データで表現されるパターンが、分割された領域の画像データ1106と一致すると判断する。
上記した辞書データとの比較を、画像データ1102に含まれる全ての領域について行うことによって、画像データ1102の内部に存在する対象物を認識することができる。
上記した画像データ1106は、通常は浮動小数点方式で表現された数値から構成される数列x1、x2、・・・、xnで表現されている。上記した辞書データ1108aも、通常は浮動小数点方式で表現された数値から構成される数列a1、a2、・・・、anで表現されている。上記した演算の結果得られるF(n)も、浮動小数点方式の数値で表現されている。
このような浮動小数点で表現された数値の演算は、固定小数点で表現された数値の演算に比べて、一般に計算負荷が高く、処理速度が遅いという難点がある。
浮動小数点の方式としては、現在ではIEEE754に規定される浮動小数点方式が広く用いられている。
IEEE754に規定される浮動小数点方式では、図12に示すように、ある数値データ1202を、1ビットの符号部1204と、8ビットの指数部1206と、23ビットの仮数部1208で表現する。
符号部1204はその数値の正負を示すデータであり、その数値が正である場合には「0」が、その数値が負である場合には「1」が付与される。
指数部1206はその数値を2進法で表現した場合の、有効な最上位桁の位置を示す整数である。この整数は、2進数の固定小数点方式で表現される。例えば数値データ1202が表現する数値が16=2の場合、指数部1206には整数4が付与される。ただし、IEEE754では、指数部に127のバイアスを付加し、指数部が常に正の整数として表記されるようにしているため、上記の場合実際の指数部1206は131が付与される。
仮数部1208はその数値を2進法で表現した場合の、有効数字を示すデータである。このデータは、最上位桁からの「0」と「1」のビット列で表現される。IEEE754では、指数部1206が有効な最上位桁の位置を示しているため、有効数字の最上位桁は必ず「1」になる。従ってIEEE754では、仮数部1208に、最上位桁の「1」を省略して、次の桁以降のビット列が付与される。このような表記の仕方を、仮数部の正規化という。
またIEEE754形式の浮動小数点形式では、演算の結果がオーバーフローした場合、無限大∞を表現するデータが与えられる。本明細書でオーバーフローとは、演算の結果得られる数値が、与えられたビット数の浮動小数点方式で表現可能な範囲を上回る状態を示す。正の無限大は、符号ビットが0であり、指数ビットが全て1であり、仮数ビットが全て0とする状態で表現される。
上記したような演算では、浮動小数点を用いた四則演算が行われる。一般に浮動小数点を用いた四則演算は、固定小数点を用いた四則演算に比べて処理に時間を要するため、演算を少しでも高速に実施できるように従来から様々な工夫がなされている。
演算を高速に実施するための工夫の一つに、オーバーフローの予測処理があげられる。
上記したような演算では、演算中にオーバーフローが発生する場合がある。浮動小数点方式で表現可能な範囲を超えた時点で、オーバーフローが発生し、例外処理が実行される。
オーバーフローの発生を、事前に予測することができれば、無駄な演算を行うことなく、次に行うべき処理へ速やかに移行することができる。例えば上記したパターン・マッチング処理の場合、画像データと辞書データが大きく異なる場合に、F(n)の演算時にオーバーフローが発生する。オーバーフローが発生した場合、画像データと辞書データは一致していないと判断して、次に行うべき処理として画像データと他の辞書データの組合せについての比較処理へ移行する。オーバーフローの発生を事前に予測することができれば、一連の処理に要する時間を大幅に低減することが可能である。
実際に演算をする前にオーバーフローの発生を予測して、数値演算の処理速度を向上する技術が開示されている。
例えば特許文献1には、積和演算を行う際のオーバーフローの可能性を評価し、選択的に飽和演算を行う技術が開示されている。この技術では、まず積和対象となる一方の数列の絶対値の総和を計算するとともに、もう一方の数列の絶対値の最大値を計算する。次にそれらの積を求め、その積を積和演算のとりうる数値範囲の上限値と下限値として設定する。オーバーフローの可能性はその上限値または下限値から判断され、オーバーフローの可能性なしと判断した場合には、逐次飽和演算を含まない単純な積和演算を行い、オーバーフローの可能性ありと判断した場合には、逐次飽和演算を行う。
また特許文献2には、固定小数点のブース乗算を行う際にオーバーフローの発生を予測することで、飽和演算に係る回路構成を簡略化することが可能な技術が開示されている。
特開2002−269066号公報 特開平9−245019号公報
オーバーフローの予測はあくまでも付加的な処理であり、その処理に要する計算負荷は小さいほど好ましく、処理を行うための装置構成は簡素なものであるほど好ましい。オーバーフローの予測の処理に高い計算負荷を要すると、それだけ演算に係る時間が長くなり、演算を高速化する利点が損なわれてしまう。またオーバーフローの予測の処理を行うための装置構成が複雑なものとなると、装置が大型化し、重量の増大や消費電力の増加を招いてしまう。
特許文献2に記載の技術は、固定小数点のブース乗算に特化した技術であって、浮動小数点形式で記述されるデータの演算に適用することはできない。
特許文献1に記載の技術では、オーバーフローの予測を行うために、浮動小数点の四則演算を必要とする。浮動小数点の四則演算は処理に時間を要する。より計算負荷の低い手法でオーバーフローを予測したい。
本発明者らは、多くの技術分野において多用される浮動小数点の自乗和を含む演算において、より低い計算負荷でオーバーフローを予測することが可能な技術を発明した。
本発明の技術は、浮動小数点形式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する際に、低い計算負荷でオーバーフローの発生を予測することが可能な技術を提供する。
本発明の演算方法は、浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する際のオーバーフローの発生を予測する演算方法である。その演算方法は、演算結果の指数の許容値を固定小数点方式で表現した第1整数を特定する工程と、数列を構成するそれぞれの数値について「当該数値の指数を固定小数点方式で表現した整数と第1整数とを比較し前者が後者よりも大きい場合にオーバーフローの発生を示すデータを出力する比較工程」を実施する工程とを備えている。
本発明で扱う浮動小数点方式は、指数部と仮数部をそなえており、指数部が固定小数点方式で記述され、仮数部が正規化されたものであれば、どのようなものであってもよい。
このような浮動小数点方式としては、例えばIEEE754に規定される32ビット浮動小数点方式、64ビット浮動小数点方式などがあげられる。以下では例示のためにIEEE754に規定される32ビット浮動小数点方式の場合について説明する。
上記の演算方法によるオーバーフローの予測の原理を説明する。以下では浮動小数点方式で表現された数値から構成される数列をx1、x2、・・・xnとする。この数列の自乗和を含む演算として、次式で表現される関数F(n)の値を算出する処理を想定する。
Figure 2006252287
IEEE754に規定される32ビットの浮動小数点形式で表現されるデータは、符号部が1ビット、指数部が8ビット、仮数部が23ビットで構成されている。指数部には127のバイアスが付与されており、指数がとりうる値は−126〜127の範囲内である。また仮数部に関しては正規化がなされている。従って、表現可能なデータの最大値は2128より小さい。演算の結果得られる数値の絶対値が2128を超える場合には、オーバーフローが生起する。すなわち、次式の条件が成立する場合、上式で表現される関数F(n)の値はオーバーフローする。
Figure 2006252287
上式の演算において、任意のxiについてその自乗は非負であり、自然対数の底eについての指数関数は単調増加関数であるから、以下の関係が成り立つ。
Figure 2006252287
従って次式の条件を満足する場合、関数F(n)の値はオーバーフローする。
Figure 2006252287
上記の不等式について、両辺の自然対数をとると、次式の条件を得る。
Figure 2006252287
上式の右辺について、ln2128=128×ln2<88.73である。従って、次式の条件が成り立つ場合、F(n)はオーバーフローする。
Figure 2006252287
上記した不等式の平方根を考慮することによって、次式の条件を得る。
Figure 2006252287
従って、あるxiについて、その絶対値が9.42を超える場合、関数F(n)を算出する演算において、オーバーフローが生起する。9.42は2(=16)よりも小さい。従って、数列x1、x2、・・・、xnを構成する数値xiのうちで、どれか一つでも指数が4以上のものがあれば、関数F(n)の値はオーバーフローすることが分かる。数列x1、x2、・・・、xnを構成する数値の指数は全て整数であるから、どれか一つでも指数が3より大きいものがあれば、関数F(n)の値はオーバーフローすることが分かる。
本発明の演算方法では、数列x1、x2、・・・、xnを構成するそれぞれの数値について、その指数を許容値(第1整数に相当する。上記の例の場合3)と比較し、どれか一つでもその指数が許容値を超えるものがあれば、関数F(n)の値を求める演算においてオーバーフローが明らかに生起すると判断して、オーバーフローの発生を示すデータを出力する。
それぞれの数値の指数の許容値は、求めようとする関数F(n)の種類に依存して変化するが、数列x1、x2、・・・、xnを構成するそれぞれの数値には依存しない。従って、それぞれの数値の指数の許容値は、求めようとする関数F(n)に応じて予め与えておくことができる。
本発明のオーバーフローの発生を予測する演算方法は、様々な種類の演算に適用することが可能である。上記した原理からも分かるように、数列x1、x2、・・・、xnの自乗和に対して単調増加する関数の値を算出する演算であれば、どのような演算に対しても適用することができる。例えば、数列の自乗和そのものであってもよいし、数列の自乗和を引数とする双曲線正弦関数や、双曲線余弦関数であってもよい。
上記したオーバーフローの発生を予測する演算方法によれば、数列x1、x2、・・・、xnを構成するそれぞれの数値xiについて、固定小数点方式で表現される整数である指数と、同じく整数である許容値との比較を一回ずつ実施すれば、オーバーフローが生起するか否かを判断することができる。従って、整数同士の比較をn回実施するだけで、数列x1、x2、・・・、xnの自乗和を含む演算がオーバーフローを生起するか否かを予測することができる。
整数同士の比較をする処理は、計算負荷が非常に小さく、極めて高速に実施することができる。従って、上記したオーバーフローの予測の処理は、通常の浮動小数点での四則演算と比較して、極めて高速に実施することが可能である。
本発明の演算方法は、オーバーフローが発生する演算を事前に予測するものであるが、オーバーフローが発生するすべての場合を予測するものではない。本発明の演算方法でオーバーフローの発生が予測されれば実際の演算時にもオーバーフローが発生するが、本発明の演算方法でオーバーフローの発生が予測されない場合でもオーバーフローが発生することがありえる。オーバーフローが発生するすべての演算を予測するのではなく、明らかにオーバーフローが発生するであろう一部の演算を事前に予測することが可能であり、その実質的価値は大きい。
上記したオーバーフローの発生を予測する演算方法は、次のような演算装置を用いることによって好適に実施することができる。
本発明の演算装置は、浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する際のオーバーフローの発生を予測する演算装置である。その演算装置は、入力される数値を記憶する第1レジスタと、数列を構成するそれぞれの数値を第1レジスタに入力する手段と、演算結果の指数の許容値を固定小数点方式で表現した第1整数を記憶する第3レジスタと、第1レジスタに記憶されている数値の指数を固定小数点方式で表現した整数と第3レジスタに記憶されている第1整数を比較する比較器と、比較器によって前者が後者よりも大きいと比較されたときにオーバーフローの発生を示すデータを出力する手段とを備えている。
上記した演算装置を用いれば、浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算をする際のオーバーフローの予測を、少ない計算負荷で高速に実施することができる。
本発明の他の1つの演算方法は、浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する演算方法である。その演算方法は、先に上記したオーバーフローの発生を予測する演算方法を実施し、次いで自乗和を求める過程を含む演算工程を実施することを特徴とする。その演算方法は、数列を構成するそれぞれの数値について比較工程を実施する間に、オーバーフローの発生を示すデータが出力された時点で、演算を終了することを特徴とする。
上記の演算方法では、先ず与えられた数列x1、x2、・・・、xnから、上記したオーバーフローの発生を予測する方法によってオーバーフローの予測を行い、オーバーフローが発生しないと判断された場合に限り、自乗和を求める過程を含む演算を実施する。
上述したように、オーバーフローの予測は非常に短い時間で実行することが可能である。浮動小数点の四則演算を繰返し実施して結局はオーバーフローしてしまう演算を省略することが可能である。従って、例えば辞書ファイルを用いたパターン・マッチングのように、自乗和を求める過程を含む演算を高速化することができる。
上記の演算方法では、オーバーフローを予測する処理と、自乗和を求める過程を含む演算を実施する処理を、同時に実施する必要がなく、まずオーバーフローの予測処理を実施し、次に自乗和を求める過程を含む演算を実施する。このような演算方法であれば、自乗和を求める過程を含む演算を実施するために用いる演算装置に対して、オーバーフローを予測するために用いる演算装置の一部または全部を共用化することができ、装置の小型化、軽量化、省電力化をはかることができる。
上記した演算方法は、次のような演算装置を用いることによって好適に実施することができる。
本発明の他の1つの演算装置は、浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する演算装置である。その演算装置は、上記したオーバーフローの発生を予測する演算装置と、自乗和を求める過程を含む演算を実施する演算装置を備えている。その演算装置は、先に上記したオーバーフローの発生を予測する演算装置が作動し、次いで自乗和を求める過程を含む演算を実施する演算装置が作動することを特徴とする。その演算装置は、上記したオーバーフローの発生を予測する演算装置が作動している間にオーバーフローの発生を示すデータが出力された場合には、自乗和を求める過程を含む演算を実施する演算装置を作動させないことを特徴とする。
本発明の他の1つの演算方法は、浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する演算方法である。その演算方法は、上記したオーバーフローの発生を予測する演算方法と、自乗和を求める過程を含む演算工程を同時に並行して実施することを特徴とする。その演算方法は、数列を構成するそれぞれの数値について比較工程を実施する間に、オーバーフローの発生を示すデータが出力された時点で、演算を終了することを特徴とする。
上記した演算方法では、自乗和を求める過程を含む演算処理と、オーバーフローの予測処理とを並行して実施する。自乗和を求める過程を含む演算処理を実施している間に、オーバーフローの発生が予測されると、上記の演算処理を終了する。
上記した演算方法によれば、オーバーフローの予測処理と並行して、自乗和を求める過程を含む演算処理を実行するため、オーバーフローの予測処理の結果を待つことなく、自乗和を求める過程を含む演算処理を進めることができる。従って、オーバーフローが発生しない場合であっても、予測処理を追加したことによる処理の遅れを生じることがない。またオーバーフローが発生すると判断された場合には、その時点で自乗和を求める過程を含む演算処理を停止して、次に行うべき処理に移行することができる。この演算方法によれば、非常に高速に自乗和を求める過程を含む演算処理を実行することができる。
上記した演算方法は、次のような演算装置を用いることによって、好適に実施することができる。
本発明の他の1つの演算装置は、浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する演算装置である。その演算装置は、上記したオーバーフローの発生を予測する演算装置と、自乗和を求める過程を含む演算を実施する演算装置を備えている。その演算装置は、上記したオーバーフローの発生を予測する演算装置と、自乗和を求める過程を含む演算を実施する演算装置が同時に並行して作動することを特徴とする。その演算装置は、上記したオーバーフローの発生を予測する演算装置が作動している間にオーバーフローの発生を示すデータが出力された時点で、自乗和を求める過程を含む演算を実施する演算装置の作動を終了することを特徴とする。
上記では、1つの数列の自乗和を求める過程を含む演算において、オーバーフローを予測する技術を説明した。上記と同様の原理に基づいて、2つの数列の差の自乗和を求める過程を含む演算においても、オーバーフローの発生を予測することが可能である。
画像認識の分野におけるパターン・マッチングのように、浮動小数点方式で表現された数値の列からなる2つの数列について、それぞれの対応する数値の差の自乗和を求める過程を含む演算を実施したい場合がある。本発明の原理を応用することで、上記のような差の自乗和を求める過程を含む演算についても、オーバーフローの発生を予測することが可能となる。
本発明の他の1つの演算方法は、浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する際のオーバーフローの発生を予測する演算方法である。その演算方法は、演算結果の指数の許容値を固定小数点方式で表現した第1整数を特定する工程と、第1数値の指数を固定小数点方式で表現した整数と第2数値の指数を固定小数点方式で表現した整数の差の許容値を固定小数点方式で表現した第2整数を特定する工程と、対応する第1数値と第2数値の組のそれぞれについて、「第1数値の指数を固定小数点方式で表現した整数と第1整数とを比較する第1比較工程と、第2数値の指数を固定小数点方式で表現した整数と第1整数とを比較する第2比較工程と、第1数値の指数を固定小数点方式で表現した整数と第2数値の指数を固定小数点方式で表現した整数の差の絶対値と第2整数の絶対値とを比較する第3比較工程を実施し、第1比較工程で前者が後者より大きいか、あるいは、第2比較工程で前者が後者より大きく、かつ、第3比較工程で前者が後者よりも大きい場合に、オーバーフローの発生を示すデータを出力する比較工程」を、実施する工程とを備えている。
上記の演算方法によるオーバーフローの予測の原理を説明する。以下では浮動小数点方式で表現された第1数値の列からなる第1数列をx1、x2、・・・xnとし、浮動小数点方式で表現された第2数値の列からなる第2数列をa1、a2、・・・anする。この第1数列と第2数列の差の自乗和を求める過程を含む演算として、次式で表現される関数F(n)の値を算出する処理を想定する。
Figure 2006252287
上式の演算において、任意のiについて、(xi−ai)は非負であり、自然対数の底eに関する指数関数は単調増加関数であるから、以下の関係が成り立つ。
Figure 2006252287
関数F(n)は32ビットの浮動小数点方式で表現されており、その値が2128以上となる場合、オーバーフローが生起する。従って上記の関係式から、次式の条件を満足する場合にF(n)はオーバーフローすることが分かる。
Figure 2006252287
上記の不等式について、両辺の自然対数をとると、次式の条件を得る。
Figure 2006252287
上式の右辺について、ln2128=128×ln2<88.73である。従って、次式の条件が成り立つ場合、F(n)はオーバーフローする。
Figure 2006252287
上記した不等式の平方根を考慮することによって、次式の条件を得る。
Figure 2006252287
従って、あるxi、aiについて、その差の絶対値が9.42を超える場合、関数F(n)を算出する演算において、オーバーフローが生起する。以下では仮にxiの絶対値がaiの絶対値に比べて大きいとする。上式の左辺|xi−ai|の最小値を考慮すると、以下の関係を得る。
Figure 2006252287
ただし、添え字Eは浮動小数点方式で表現した場合の指数の値を示している。xiEは数値xiの指数の値であり、aiEは数値aiの指数の値である。
以上の議論を整理すると、結局以下の条件が満足される場合に、F(n)はオーバーフローすることが分かる。
Figure 2006252287
上記の条件は、例えばxiEが4以上であって、かつxiEとaiEの差が3以上であれば成立する。指数xiE、aiEは整数で与えられているため、上記の条件は、xiEが3より大きく、かつxiEとaiEの差が2より大きい場合に成立する。
上記ではxiの絶対値がaiの絶対値より大きい場合を説明したが、aiの絶対値がxiの絶対値より大きい場合にも、同様の条件が導かれる。この場合には、aiEが3より大きく、かつaiEとxiEの差が2より大きい場合に、オーバーフローが発生する。
従って、第1数列x1、x2、・・・、xnと第2数列a1、a2、・・・、anの差の自乗和を演算する際には、あるxiとaiの組について、いずれか一方の指数が許容値(第1整数に相当する。上記の例の場合3)より大きく、かつ両者の指数の差の絶対値が許容値(第2整数に相当する。上記の例の場合2)より大きい場合に、オーバーフローが発生する。
あるxiとaiの組について、xiの指数を許容値(第1整数)と比較し、aiの指数を許容値(第1整数)と比較することで、いずれか一方の指数が許容値より大きいか否かを判断することができる。また、xiとaiのそれぞれの指数の差を算出しておき、その指数の差の絶対値を、指数の差の許容値(第2整数)の絶対値と比較することで、両者の指数の差の絶対値が許容値より大きいか否かを判断することができる。従って、上記した演算方法によれば、オーバーフローの発生を予測することができる。
上記したxiとaiの両者の指数の差の絶対値と許容値(第2整数)の絶対値との比較は、例えば第2整数を2の補数で表現したものを第3整数として、xiとaiの両者の指数の差を第2整数と比較し、xiとaiの両者の指数の差を第3整数と比較することによって実現することができる。xiとaiの両者の指数の差が第2整数より大きいか、あるいはxiとaiの両者の指数の差が第3整数より小さい場合、xiとaiの両者の指数の差の絶対値は許容値(第2整数)の絶対値より大きい。
上記のオーバーフローの発生を予測する演算方法によれば、浮動小数点の四則演算処理を行うことなく、1組のデータxiおよびaiについて、固定小数点で表現される整数同士の1回の減算処理と、4回の比較処理とによって、オーバーフローの有無を判断することができる。従って、第1数列x1、x2、・・・、xnと第2数列a1、a2、・・・、anの差の自乗和を求める過程を含む演算を実施する際のオーバーフローの有無を、n回の整数の減算処理と、4n回の整数の比較処理によって判断することができる。
上記のオーバーフローの発生を予測する演算方法によれば、低い計算負荷で、極めて高速に、オーバーフローの有無を判断することができる。
上記したオーバーフローの発生を予測する演算方法は、次のような演算装置を用いることによって、好適に実施することができる。
本発明の他の1つの演算装置は、浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する際のオーバーフローの発生を予測する演算装置である。その演算装置は、入力される第1数値を記憶する第1レジスタと、第1数列を構成するそれぞれの第1数値を第1レジスタへ入力する手段と、入力される第2数値を記憶する第2レジスタと、第1レジスタへ入力される第1数値に対応した第2数列を構成するそれぞれの第2数値を第2レジスタへ入力する手段と、演算結果の指数の許容値を固定小数点方式で表現した第1整数を記憶する第3レジスタと、第1数値の指数を固定小数点方式で表現した整数と第2数値の指数を固定小数点方式で表現した整数の差の許容値を固定小数点方式で表現した第2整数を記憶する第4レジスタと、第2整数を2の補数で表現した第3整数値を記憶する第5レジスタと、第1レジスタに記憶されている第1数値の指数から第2レジスタに記憶されている第2数値の指数を減じ、その差を固定小数点方式で表現した整数で出力する減算器と、第1レジスタに記憶されている第1数値の指数を固定小数点方式で表現した整数と、第3レジスタに記憶されている第1整数を比較する第1比較器と、第2レジスタに記憶されている第2数値の指数を固定小数点方式で表現した整数と、第3レジスタに記憶されている第1整数を比較する第2比較器と、減算器の出力する整数と第4レジスタに記憶されている第2整数を比較する第3比較器と、減算器の出力する整数と第5レジスタに記憶されている第3整数を比較する第4比較器と、第1比較器で前者が後者より大きいか、あるいは、第2比較器で前者が後者より大きいと比較され、かつ、第3比較器で前者が後者よりも大きいか、あるいは、第4比較器で前者が後者よりも小さいと比較されたときに、オーバーフローの発生を示すデータを出力する手段とを備えている。
上記したオーバーフローの発生を予測する演算装置を用いれば、浮動小数点方式で表現された数値から構成される2つの数列の差の自乗和を求める過程を含む演算を実施する際のオーバーフローの予測を、少ない計算負荷で高速に実現することが可能となる。
本発明の他の1つの演算方法は、浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する演算方法である。その演算方法は、先に上記したオーバーフローの発生を予測する演算方法を実施し、次いで差の自乗和を求める過程を含む演算工程を実施することを特徴とする。その演算方法は、対応する第1数値と第2数値の組について比較工程を実施する間に、オーバーフローの発生を示すデータ出力された時点で、演算を終了することを特徴とする。
上記の演算方法では、先ず与えられた数列x1、x2、・・・、xnとa1、a2、・・・、anから、オーバーフローの予測を行い、オーバーフローが発生しないと判断された場合に限り、差の自乗和を求める過程を含む演算を実施する。
上記の演算方法によれば、差の自乗和を求める過程を含む演算を実行する際に、浮動小数点の四則演算を繰返し実施しているうちに結局はオーバーフローしてしまう演算の実行を省略することが可能である。従って、例えば辞書ファイルを用いたパターン・マッチングのように、差の自乗和を求める過程を含む演算を行う処理を高速化することができる。
上記の演算方法では、オーバーフローを予測する処理と、差の自乗和を含む演算を実施する処理は、同時に実施する必要がなく、まずオーバーフローの予測処理を実施して、次に差の自乗和を求める過程を含む演算を実施する。このような演算方法であれば、差の自乗和を求める過程を含む演算を実施するために用いる装置に対して、オーバーフローを予測するために用いる装置の一部または全部を共用化することができ、装置の小型化、軽量化、省電力化をはかることができる。
上記の演算方法は、次のような演算装置を用いることによって、好適に実施することができる。
本発明の他の1つの演算装置は、浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する演算装置である。その演算装置は、上記したオーバーフローの発生を予測する演算装置と、差の自乗和を求める過程を含む演算を実施する演算装置を備えている。その演算装置は、先に上記したオーバーフローの発生を予測する演算装置が作動し、次いで差の自乗和を求める過程を含む演算を実施する演算装置が作動することを特徴とする。その演算装置は、上記したオーバーフローの発生を予測する演算装置が作動している間にオーバーフローの発生を示すデータが出力された場合には、差の自乗和を求める過程を含む演算を実施する演算装置を作動させないことを特徴とする。
本発明の他の1つの演算方法は、浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する演算方法である。その演算方法は、上記したオーバーフローの発生を予測する演算方法と、差の自乗和を求める過程を含む演算工程を同時に並行して実施することを特徴とする。その演算方法は、対応する第1数値と第2数値の組について比較工程を実施する間に、オーバーフローの発生を示すデータ出力された時点で、演算を終了することを特徴とする。
上記した演算方法では、差の自乗和を求める過程を含む演算処理と、オーバーフローの予測処理とを並行して実施する。差の自乗和を求める過程を含む演算処理を実施している間に、オーバーフローの発生が予測されると、上記の演算処理を終了する。
上記した演算方法によれば、オーバーフローの予測処理と並行して、差の自乗和を求める過程を含む演算処理を実行するため、オーバーフローの予測処理の結果を待つことなく、差の自乗和を求める過程を含む演算処理を進めることができる。従って、オーバーフローが発生しない場合であっても、予測処理を追加したことによる処理の遅れを生じることがない。またオーバーフローが発生すると判断された場合には、その時点で差の自乗和を求める過程を含む演算処理を停止して、次に行うべき処理へ移行することができる。この演算方法によれば、非常に高速に差の自乗和を求める過程を含む演算処理を実行することができる。
上記の演算方法は、次のような演算装置を用いることによって、好適に実施することができる。
本発明の他の1つの演算装置は、浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する演算装置である。その演算装置は、上記したオーバーフローの発生を予測する演算装置と、差の自乗和を求める過程を含む演算を実施する演算装置を備えている。その演算装置は、上記したオーバーフローの発生を予測する演算装置と、差の自乗和を求める過程を含む演算を実施する演算装置が同時に並行して作動することを特徴とする。その演算装置は、上記したオーバーフローの発生を予測する演算装置が作動している間にオーバーフローの発生を示すデータが出力された時点で、差の自乗和を求める過程を含む演算を実施する演算装置の作動を終了することを特徴とする。
上記した本発明の種々の演算方法は、いずれもプログラムを用いて各工程をコンピュータに実行させることができる。
本発明のオーバーフローの発生を予測する演算方法、プログラムまたは演算装置を用いることで、浮動小数点形式で記述された数値の列からなる数列の自乗和を求める過程を含む演算を実行する際に、オーバーフローの予測を低い計算負荷で行うことができる。
また上記のオーバーフロー予測技術を応用した本発明の演算方法、プログラムまたは演算装置を用いることで、浮動小数点形式で記述された数値から構成される数列の自乗和を求める過程を含む演算や、浮動小数点形式で記述された数値から構成される2つの数列の差の自乗和を求める過程を含む演算を高速に実施することが可能となる。
以下、本発明を具現化した実施例について図面を参照して説明する。最初に実施例の主要な特徴を列記する。
(形態1) 浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算においてオーバーフローが発生するか否かを予測する演算方法であって、
演算結果の指数の許容値を固定小数点方式で表現した第1整数を特定する工程と、
数列を構成するそれぞれの数値について、
(1)当該数値の指数を固定小数点方式で表現した整数と第1整数を比較する工程と、
(2)前者が後者よりも大きい場合にオーバーフローの発生を示すデータを出力する工程
を数列の先頭から末尾に至るまで、順に繰返していくことを特徴とするオーバーフローの発生を予測する演算方法。
(第1実施例)
以下、本発明を具現化した実施例について図面を参照しながら説明する。
図1は演算装置102の構成を示している。演算装置102は、入力された数値x1、x2、・・・、xnの列に基づいて、次式に示す関数F(n)を演算し、演算された値であるF(n)を出力する。
Figure 2006252287
数値x1、x2、・・・、xnおよび関数値F(n)は、いずれもIEEE754に規定されている32ビットの浮動小数点方式で表現される。
図12に示すように、IEEE754に規定されている32ビットの浮動小数点方式では、数値データ1202は1ビットの符号部1204と、8ビットの指数部1206と、23ビットの仮数部1208から構成されている。
以下では、浮動小数点形式で表現された数値のそれぞれについて、添字Sを付してその符号部を、添字Eを付してその指数部を、添字Mを付してその仮数部を表現する。例えば、数値x1について、その符号部をx1Sと記述し、その指数部をx1Eと記述し、その仮数部をx1Mと記述する。
演算装置102は、メイン・コントローラ104と、オーバーフロー予測装置106と、F(n)演算装置108とを備えている。
F(n)演算装置108は、浮動小数点の四則演算および特殊関数の演算が可能なFPUである。F(n)演算装置108は、メイン・コントローラ104からの指示に従い、入力された数値x1、x2、・・・・xnの列に基づいて、F(n)の値を演算して出力する。より詳細には、F(n)演算装置108は、(1)数値xi(i=1,2、・・・、n)の自乗を算出し、(2)算出されたxiの自乗値をすべてのiについて累積加算し、(3)累積加算された和を引数として、自然対数の底eに関する指数関数を算出する。
F(n)演算装置108はまた、メイン・コントローラ104からオーバーフローの検出に伴う演算処理の終了を指示する信号を受信すると、その時点で実施している処理を中断する。処理を中断した後、F(n)演算装置108は、オーバーフローを示すデータ∞を演算の結果として出力する。オーバーフローを示すデータ∞は、指数部が全て1であり、仮数部が全て0のデータである。
オーバーフロー予測装置106は、入力された数値x1、x2、・・・・xnの列に基づいて、F(n)演算装置108が演算を実行したときに、オーバーフローが発生するか否かを判断する。オーバーフローが発生すると判断した場合、オーバーフロー予測装置106はオーバーフロー検出フラグf(n)に「1」を出力する。オーバーフローが発生しないと判断した場合には、オーバーフロー予測装置106はオーバーフロー検出フラグに「0」を出力する。オーバーフロー予測装置106は当初「0」を出力しており、入力された数値x1、x2、・・・・xnにの列に基づいて、自乗和を求める過程を含む演算時にオーバーフローを生じると判断した場合、オーバーフロー検出フラグを「1」に変更する。オーバーフローを生じないと判断した場合、オーバーフロー検出フラグを「0」のままで維持する。
メイン・コントローラ104は、F(n)の演算を開始すると、F(n)演算装置108と、オーバーフロー予測装置106に、並列して処理を実行させる。F(n)演算装置108とオーバーフロー予測装置106がそれぞれの処理を実行している間、メイン・コントローラ104は、オーバーフロー予測装置106から出力されるオーバーフロー検出フラグf(n)を看視する。オーバーフロー検出フラグf(n)が「1」に変化すると、メイン・コントローラ104はF(n)演算装置108に指示して、処理を終了させる。またF(n)演算装置108に、演算の結果として、オーバーフローを示すデータ∞を出力させる。オーバーフロー検出フラグf(n)が「0」から変化しなければ、F(n)演算装置108にそのまま処理を実行させる。
図2はオーバーフロー予測装置106の構成を示している。本実施例のオーバーフロー予測装置106は、サブ・コントローラ202、メモリ204、マルチプレクサ206、32ビットレジスタ208、8ビットレジスタ216、比較器218、1ビットレジスタ220を備えている。
サブ・コントローラ202は、メイン・コントローラ104と通信可能であって、メイン・コントローラ104からの指示によって、オーバーフロー予測処理を開始する。
サブ・コントローラ202は、メモリ204と接続しており、メモリ204へのデータの書込みおよびメモリ204からのデータの読出しを制御する。またサブ・コントローラ202は、マルチプレクサ206と接続しており、マルチプレクサ206から32ビット
レジスタ208への出力信号を選択する。
サブ・コントローラ202は、図示されないカウンタを備えている。このカウンタは、オーバーフロー予測装置106がその時点で処理の対象としている数値xiに対応するカウント値iを保持している。サブ・コントローラ202は、所定のクロック数が経過するごとに、カウント値iを1増加させる。
メモリ204は、32ビットの数値をn個格納しておくことが可能な記憶装置である。メモリ204は、サブ・コントローラ202からの指示によって、入力された数値x1、x2、・・・、xnを格納する。またメモリ204は、サブ・コントローラ202からの指示によって、格納されている数値x1、x2、・・・、xnをマルチプレクサ206へ出力する。
マルチプレクサ206は、サブ・コントローラ202からの制御信号に従って、メモリ204から入力される複数のデータの中から1つを選択して、32ビットレジスタ208へ出力する。
32ビットレジスタ208は、32ビットの浮動小数点方式で表現された数値データを格納することができる。32ビットレジスタ208は、マルチプレクサ206から入力されるデータを格納する。格納されるデータは、1ビットの符号部214と、8ビットの指数部212と、23ビットの仮数部210から構成されている。32ビットレジスタ208は、格納されているデータの指数部212を、8ビットのデータとして、比較器218へ出力する。
8ビットレジスタ216には、8ビットの固定小数点方式で表現された整数が格納されている。8ビットレジスタ216に格納されている整数は、指数の許容値Emaxである。
本実施例のオーバーフロー予測装置106では、数値xiの指数が3より大きい場合に、オーバーフローが生起すると判断する。従って8ビットレジスタ216には、指数の許容値Emaxとして、3にバイアス値127を加えた130が固定小数点方式の整数として格納されている。
8ビットレジスタ216はROMであって、予め数値が格納されている。
比較器218は、入力される2つの8ビットの整数のデータを比較し、比較した結果を1ビットのデータとして出力する。比較器218は、図示Aから入力された数値が図示Bから入力された数値に比べて大きい場合には「1」を出力し、図示Aから入力された数値が図示Bから入力された数値に比べて小さいか等しい場合には「0」を出力する。
1ビットレジスタ220は、比較器218から出力される1ビットのデータを格納する。1ビットレジスタ230は、格納された1ビットのデータをオーバーフロー検出フラグf(n)として出力する。
図3は本実施例の演算装置102の動作を説明するフローチャートである。本実施例の演算装置102は、処理を開始すると、F(n)演算装置108によるF(n)演算処理S302と、オーバーフロー予測装置106によるオーバーフロー予測処理S304とを並行して実施する。オーバーフロー予測処理S304を実施した結果、オーバーフローが生起すると判断されると、F(n)演算処理S302をその時点で終了し、オーバーフローを示すデータを出力して、処理を終了する。
図4は本実施例のオーバーフロー予測装置106の動作を説明するフローチャートである。図4を参照しながら、本実施例のオーバーフロー予測装置106によるオーバーフロー予測処理S304の詳細について説明する。
ステップS402では、サブ・コントローラ202は、カウント値iを1に設定する。
ステップS404では、32ビットレジスタ208に、演算の対象となるデータxiを読込む。サブ・コントローラ202は次に処理の対象とするデータxiを格納しているメモリ204に、読込み信号を出力する。またマルチプレクサ206に制御信号を出力して、32ビットレジスタ208に次に処理の対象とするデータxiを入力させる。32ビットレジスタ208は、入力されたデータxiを格納する。32ビットレジスタ208は、格納されたデータxiのうち、8ビットの指数部212のデータxiEを出力する。
ステップS406では、比較器218において、32ビットレジスタ208に格納されたデータの指数部212の整数xiEと、8ビットレジスタ216に格納された整数Emaxを比較する。
xiEがEmaxにくらべて大きい場合(ステップS406でYESの場合)、比較器218は「1」を出力する。この場合、処理はステップS408へ進む。xiEがEmaxにくらべて小さいか、等しい場合(ステップS406でNOの場合)、比較器218は「0」を出力する。この場合、処理はステップS410へ進む。
ステップS408では、1ビットレジスタ220は比較器218から入力されるデータを格納する。ステップS408では比較器218の出力は「1」であるから、1ビットレジスタ220には「1」が格納される。1ビットレジスタ220は、格納されたデータをオーバーフロー検出フラグf(n)として出力する。
サブ・コントローラ202は、オーバーフロー検出フラグf(n)が「1」に変化したときに、オーバーフロー予測の処理を終了する。
ステップS410では、1ビットレジスタ220は比較器218から入力されるデータを格納する。ステップS410では比較器218の出力は「0」であるから、1ビットレジスタ220には「0」が格納される。1ビットレジスタ220は、格納されたデータをオーバーフロー検出フラグf(n)として出力する。
ステップS412では、サブ・コントローラ202はカウント値iを増加させる。サブ・コントローラ202は、上記した一連の処理を実行するために要するクロック数を予め記憶しており、所定のクロック数が経過する毎にカウント値iを増加させる。
ステップS414では、サブ・コントローラ202は全ての数値xiを処理したか否かを判断する。カウント値iがnを超える場合(ステップS414でYESの場合)、サブ・コントローラ202は数列x1、x2、・・・、xnの全ての数値に関して処理を実行し終えたと判断して、オーバーフロー予測の処理を終了する。カウント値iがnを超えない場合(ステップS414でNOの場合)、サブ・コントローラ202は未だ数列x1、x2、・・・、xnの全ての数値に関して処理を実行していないと判断して、処理はステップS404へ進む。
F(n)演算装置108は、オーバーフロー予測装置106が図4の処理を実行している間も、並行してF(n)を算出する演算を実行している。
オーバーフロー予測装置106から出力されるオーバーフロー検出フラグが「1」になると、メイン・コントローラ104からの指示に従って、F(n)演算装置108はオーバーフローを示すデータ∞を演算結果F(n)として出力する。
オーバーフロー予測装置106から出力されるオーバーフロー検出フラグが「0」のままであれば、F(n)演算装置108はそのまま処理を継続し、F(n)を算出する演算が終わり次第、その演算結果をF(n)として出力する。
上記のオーバーフロー予測装置106は、n回の整数の比較処理のみによって、オーバーフローが生起するか否かを判断する。
以下では例として、数列x1、x2、x3について、F(3)を演算する場合を説明する。例えばx1=1=2であり、x2=8=2であり、x3=16=2であるとする。この場合、x1、x2、x3は、それぞれ32ビットの浮動小数点方式で、以下のように表現される。
Figure 2006252287
x1、x2、x3の指数はそれぞれ0、3、4である。上述の浮動小数点方式では、指数部に127のバイアスが付与されていることに注意されたい。x1、x2、x3のバイアスが付加された指数はそれぞれ127、130、131である。
上記の数列x1、x2、x3に基づいて上記したオーバーフローの予測処理を実行すると、x3に関して、その指数が許容値Emax=130を超えているため、オーバーフローが生起すると予測される。
上記の演算を実際に実行してみると、以下に示すように、確かにオーバーフローが生起することが分かる。
Figure 2006252287
本実施例のオーバーフロー予測装置106によれば、浮動小数点の四則演算を行うことなく、わずかn回の整数の比較処理によって、オーバーフローの生起を予測することができる。これによって、オーバーフローが生起した後に行うべき処理を、より迅速に行うことが可能となり、演算の高速化が図られる。
本実施例の演算装置102によれば、F(n)の演算と並行してオーバーフローの予測を行う。F(n)の演算処理とオーバーフローの予測処理とを互いに独立して実行しているため、オーバーフローが生起しない場合であっても、予測処理の追加による処理の遅延を招くことがない。またオーバーフローが生起する場合には、予測処理によってそれが判明した時点で演算を終了し、次に行うべき処理へ移行することができる。極めて高速に処理を実施することができる。
上記の実施例では8ビットレジスタ216をROMとした例を説明したが、8ビットレジスタ216は例えばRAMといった他のデータ保持手段であってもよい。
当業者にとって、本実施例のオーバーフロー予測の方法は、選択的にハードウェア、ソフトウェア、あるいはハードウェアとソフトウェアの組合せによって実装することができることが明らかである。
(第2実施例)
本発明の他の1つの実施例について説明する。
本実施例の演算装置は、浮動小数点で表現された数値から構成される数列x1、x2、・・・、xnに関して、その自乗和を含む関数F(n)を算出して、その結果を出力する。本実施例の演算装置は、F(n)演算装置と、オーバーフロー予測装置を備える。
本実施例のF(n)演算装置は、第1実施例のF(n)演算装置108と同様の構成を備える、浮動小数点の四則演算および特殊関数の演算が可能なFPUである。
本実施例のオーバーフロー予測装置は、図2に示す第1実施例のオーバーフロー予測装置106と同様の構成を備えているが、サブ・コントローラ202、メモリ204、マルチプレクサ206、32ビットレジスタ208、比較器218、8ビットレジスタ216、1ビットレジスタ220は、全てF(n)演算装置と共用されている。第1実施例のオーバーフロー予測装置106は簡素な構成をしているため、F(n)演算装置として一般的なFPUを用いることで、その内部にオーバーフロー予測装置106と等価な構成を容易に実現することができる。
図5は本実施例の演算装置の動作を説明するフローチャートである。図5に示すように、本実施例の演算装置は、処理を開始すると、先ずオーバーフロー予測の処理S502を実施する。オーバーフロー予測の処理S502においてオーバーフローが生起すると判断されると(S504でYESの場合)、演算装置はF(n)の演算の処理S506を行うことなく、F(n)としてオーバーフローを示すデータ∞を出力して(S508)、処理を終了する。オーバーフロー予測の処理S502においてオーバーフローが生起しないと判断されると(S504でNOの場合)、演算装置はF(n)の演算の処理S506を実施して、その結果を出力する。オーバーフロー予測の処理S502は、第1実施例のオーバーフロー予測装置106が行う図4に示す処理と同様である。
本実施例の演算装置によれば、F(n)演算装置と、オーバーフロー予測装置の構成要素を共用化することによって、小さな回路構成でF(n)の演算処理とオーバーフローの予測処理を行うことができる。回路構成を小型化することで、演算装置の省スペース化、軽量化、省電力化を図ることができる。
(第3実施例)
本発明の他の1つの実施例を説明する。
本実施例の演算装置は、浮動小数点で表現された数値から構成される数列x1、x2、・・・、xnに関して、その自乗和を含む関数F(n)を算出して、その結果を出力する。本実施例の演算装置は、F(n)演算装置と、オーバーフロー予測装置を備える。
F(n)演算装置は、第1実施例のF(n)演算装置108と同様の構成を備え、浮動小数点の四則演算および特殊関数の演算が可能なFPUである。
オーバーフロー予測装置は、図2に示す第1実施例のオーバーフロー予測装置106と同様の構成を備えているが、サブ・コントローラ202、メモリ204、マルチプレクサ206および32ビットレジスタ208はF(n)演算装置と共用されている。F(n)演算装置は、共用された32ビットレジスタ208からxiを読出し、xiの自乗値を算出して、その自乗値を累積加算して自乗和を算出し、算出された自乗和の自然対数の底eに関する指数関数を算出する。
図6は本実施例の演算装置の動作を説明するフローチャートである。本実施例の演算装置の動作を、図6を参照しながら詳細に説明する。
ステップS602では、演算装置はカウント値iを1に設定する。またxiの自乗値の累積加算値dを0に設定する。xiの自乗値の累積加算値dは、F(n)演算装置が備える32ビットレジスタに格納される。
ステップS604では、メモリ204から32ビットレジスタ208に、演算の対象となるデータxiを読込む。32ビットレジスタ208は、入力されたデータxiを格納する。32ビットレジスタ208は、格納されたデータxiのうち、8ビットの指数部212のデータxiEを出力する。
ステップS606では、比較器218において、32ビットレジスタ208に格納されたデータの指数部212の整数xiEと、8ビットレジスタ216に格納された整数Emaxを比較する。
xiEがEmaxにくらべて大きい場合(ステップS606でYESの場合)、比較器218は「1」を出力する。この場合、処理はステップS608へ進む。xiEがEmaxにくらべて小さいか、等しい場合(ステップS606でNOの場合)、比較器218は「0」を出力する。この場合、処理はステップS612へ進む。
ステップS608では、1ビットレジスタ220は比較器218から入力されるデータを格納する。ステップS608では比較器218の出力は「1」であるから、1ビットレジスタ220には「1」が格納される。1ビットレジスタ220は、格納されたデータをオーバーフロー検出フラグf(n)として出力する。
ステップS610では、演算装置はF(n)の演算の結果として、オーバーフローを示すデータ∞を出力し、処理を終了する。
ステップS612では、1ビットレジスタ220は比較器218から入力されるデータを格納する。ステップS612では比較器218の出力は「0」であるから、1ビットレジスタ220には「0」が格納される。1ビットレジスタ220は、格納されたデータをオーバーフロー検出フラグf(n)として出力する。
ステップS614では、32ビットレジスタ208に格納された数値xiの自乗を算出する。数値xiの自乗を算出する演算は、F(n)演算装置が備える浮動小数点の乗算器を用いて実行される。算出されたxiの自乗値qは、F(n)演算装置が備える32ビットレジスタに格納される。
ステップS616では、xiの自乗値の累積加算値dに、ステップS614で算出されたqを加算する。
ステップS618では、カウント値iを1増加させる。
ステップS620では、全ての数値xiを処理したか否かを判断する。カウント値iがnを超える場合(ステップS620でYESの場合)、数列x1、x2、・・・、xnの全ての数値に関して処理を実行したと判断して、処理はステップS622へ進む。カウント値iがnを超えない場合(ステップS620でNOの場合)、未だ数列x1、x2、・・・、xnの全ての数値に関する処理を実行していないと判断して、処理はステップS604へ進む。
ステップS622では、数列x1、x2、・・・、xnの自乗値の累積加算値dを引数として、自然対数の底eに関する指数関数を算出する。算出された値は、関数F(n)として出力される。
本実施例のオーバーフロー予測装置または方法によれば、オーバーフロー予測装置のメモリ、マルチプレクサおよび32ビットレジスタをF(n)演算装置と共用としているため、第1実施例のオーバーフロー予測装置または方法にくらべて、F(n)の演算に要する回路構成を小型化することができる。また32ビットレジスタへの数値xiの読込みを、オーバーフロー予測の処理とF(n)演算の処理で共通としているため、第2実施例のオーバーフロー予測装置にくらべて演算時間を短縮することができる。
(第4実施例)
本発明を具現化した他の1つの実施例について図面を参照しながら説明する。
図7は演算装置702の構成を示している。演算装置702は、入力された数値x1、x2、・・・、xnと、数値a1、a2、・・・、anに基づいて、次式の関数F(n)を演算し、演算されたF(n)を出力する。
Figure 2006252287
数値x1、x2、・・・、xn、数値a1、a2、・・・、an、および関数F(n)は、いずれもIEEE754に規定されている32ビットの浮動小数点方式で表現されている。
演算装置702は、演算の結果得られた数値F(n)を出力する。F(n)は32ビットの浮動小数点方式で記述された数値である。関数F(n)がオーバーフローすると、演算装置702は、オーバーフローしたことを示すデータ∞を出力する。オーバーフローしたことを示すデータ∞は、指数部が全て1であって、仮数部が全て0のデータである。
F(n)演算装置708は、浮動小数点の四則演算および特殊関数の演算が可能なFPUである。F(n)演算装置708は、メイン・コントローラ704からの指示に従って、入力された数値x1、x2、・・・・xnと、数値a1、a2、・・・、anに基づいて、F(n)の値を演算して出力する。より詳細には、F(n)演算装置708は、(1)xiとaiの差を算出し、(2)算出された差の自乗値を算出し、(3)算出された自乗値をすべてのiについて累積加算し、(3)累積加算された値について、自然対数の底eの指数関数を算出する。
オーバーフロー予測装置706は、入力された数値x1、x2、・・・・xnと、数値a1、a2、・・・、anに基づいて、F(n)演算装置708が演算を実行したときにオーバーフローを生起するか否かを判断する。オーバーフローが生起すると判断した場合、オーバーフロー予測装置706はオーバーフロー検出フラグf(n)として「1」を出力する。オーバーフローが生起しないと判断した場合には、オーバーフロー予測装置706はオーバーフロー検出フラグとして「0」を出力する。オーバーフロー予測装置706は当初「0」を出力しており、入力された数値x1、x2、・・・・xnと、数値a1、a2、・・・、anに基づいて、オーバーフローを生じると判断した場合、オーバーフロー検出フラグに「1」に変更する。オーバーフローを生じないと判断した場合、オーバーフロー検出フラグに「0」のままで維持する。
メイン・コントローラ704は、F(n)演算装置708と、オーバーフロー予測装置706に、並列して処理を実行させる。F(n)演算装置708とオーバーフロー予測装置706がそれぞれの処理を実行している間、メイン・コントローラ704は、オーバーフロー予測装置706から出力されるオーバーフロー検出フラグf(n)を看視する。オーバーフロー検出フラグf(n)が「1」に変化すると、メイン・コントローラ704はF(n)演算装置708に指示して、処理を終了させる。またF(n)演算装置708に、演算の結果として、オーバーフローを示すデータ∞を出力させる。オーバーフロー検出フラグf(n)が「0」から変化しなければ、F(n)演算装置708にそのまま処理を実行させる。
図8はオーバーフロー予測装置706の構成を示している。本実施例のオーバーフロー予測装置706は、サブ・コントローラ802、メモリ804、848、マルチプレクサ806、850、32ビットレジスタ808、846、8ビットレジスタ818、820、838、比較器822、824、834、836、減算器816、ORゲート826、832、ANDゲート828、1ビットレジスタ830を備えている。
サブ・コントローラ802は、メイン・コントローラ704と通信可能であって、メイン・コントローラ704からの指示によって、オーバーフロー予測処理を開始する。
サブ・コントローラ802は、メモリ804、848と接続しており、メモリ804、848へのデータの書込みおよびメモリ804、848からのデータの読出しを制御する。またサブ・コントローラ802は、マルチプレクサ806、850と接続しており、マルチプレクサ806から32ビットレジスタ808への出力信号およびマルチプレクサ850から32ビットレジスタ846への出力信号を選択する。
サブ・コントローラ802は、図示されないカウンタを備えている。このカウンタは、オーバーフロー予測装置706がその時点で処理の対象としている数値xiに対応するカウント値iを保持している。サブ・コントローラ802は、所定のクロック数が経過するごとに、カウント値iを1増加させる。
メモリ804、848は、それぞれ32ビットの数値をn個格納しておくことが可能な記憶装置である。メモリ804は、サブ・コントローラ802からの指示によって、入力された数値a1、a2、・・・、anを格納する。メモリ848は、コントローラ802からの指示によって、入力された数値x1、x2、・・・、xnを格納する。
またメモリ804、848は、サブ・コントローラ802からの指示によって、格納されている数値を出力する。メモリ804は、サブ・コントローラ802からの指示によって、格納されている数値a1、a2、・・・、anをマルチプレクサ806へ出力する。メモリ848は、サブ・コントローラ802からの指示によって、格納されている数値x1、x2、・・・、xnをマルチプレクサ850へ出力する。
マルチプレクサ806、850は、サブ・コントローラ802からの制御信号に従って、複数の入力データの中から1つのデータを選択して出力する。
32ビットレジスタ808、846は、32ビットの浮動小数点方式で表現された数値データを格納することができる。
32ビットレジスタ808は、マルチプレクサ806から入力されるデータを格納する。格納されるデータは、1ビットの符号部812と、8ビットの指数部810と、23ビットの仮数部814から構成されている。32ビットレジスタ808は、格納されているデータの指数部810を、8ビットのデータとして出力することができる。
32ビットレジスタ846は、マルチプレクサ850から入力されるデータを格納する。格納されるデータは、1ビットの符号部844と、8ビットの指数部842と、23ビットの仮数部840から構成されている。32ビットレジスタ846は、格納されているデータの指数部842を、8ビットのデータとして出力することができる。
8ビットレジスタ818、820、838には、8ビットの整数が格納されている。
8ビットレジスタ838に格納されている整数は、指数の許容値Emaxである。8ビットレジスタ820に格納されている整数は、指数の差の許容値ΔEmaxである。8ビットレジスタ818に格納されている整数は、8ビットレジスタ820に格納されている整数ΔEmaxの正負を反転した整数−ΔEmaxである。
本実施例のオーバーフロー予測装置706では、数値xiの指数xiEまたは数値aiの指数aiEが3より大きく、かつxiEとaiEの差の絶対値が2より大きい場合に、オーバーフローが生起すると判断する。従って8ビットレジスタ838には、指数の許容値Emaxとして、3にバイアス値127を加えた130が固定小数点方式の整数として格納されている。また8ビットレジスタ820には、指数の差の許容値ΔEmaxとして2が固定小数点方式の整数として格納されている。8ビットレジスタ818には、−ΔEmaxとして−2が固定小数点方式の整数として格納されている。
8ビットレジスタ818、820、838は、いずれもROMであって、予め数値が与えられている。8ビットレジスタ818、820、838は、RAM等のデータを保持することが可能な他の手段に置き換えられていてもよい。
比較器822、824、834、836は、入力される2つの8ビットの整数のデータを比較し、比較した結果を1ビットのデータとして出力する。比較器822、824、834、836は、図示Aから入力された数値が、図示Bから入力された数値に比べて大きい場合、図示Cへ「1」を出力する。比較器822、824、834、836は、図示Aから入力された数値が、図示Bから入力された数値に比べて小さいか、等しい場合には、図示Cへ「0」を出力する。
減算器816は、入力される2つの8ビットの整数の差を演算して出力する。減算器816は、図示Dから入力される整数から、図示Eから入力される整数を減じて、得られる8ビットの整数を図示Fへ出力する。
ORゲート826、832およびANDゲート828は、通常の論理演算子である。
これらの論理演算子は、等価な構成の他の論理回路で構成されていてもよい。
1ビットレジスタ830は、ANDゲート828から出力される1ビットのデータを格納する。1ビットレジスタ830は、格納された1ビットのデータをオーバーフロー検出フラグf(n)として出力する。
本実施例の演算装置702は、処理を開始すると、F(n)演算装置708によるF(n)演算処理と、オーバーフロー予測装置706によるオーバーフロー予測処理とを並行して実施する。オーバーフロー予測処理を実施した結果、オーバーフローが生起すると判断されると、F(n)演算処理をその時点で終了し、オーバーフローを示すデータ∞を出力して、処理を終了する。オーバーフローが生起しないと判断されると、F(n)演算処理をそのまま継続して、算出された結果を出力する。
図9は本実施例のオーバーフロー予測装置706の動作を説明するフローチャートである。図9を参照しながら、本実施例のオーバーフロー予測装置706によるオーバーフロー予測処理の詳細について説明する。
ステップS902では、サブ・コントローラ802はカウント値iを1に設定する。
ステップS904では、32ビットレジスタ846に、演算の対象となるデータxiを読込む。サブ・コントローラ802は次に処理の対象とするデータxiを格納しているメモリ848に、読込み信号を出力する。またマルチプレクサ850に制御信号を出力して、32ビットレジスタ846に次に処理の対象とするデータxiを入力する。32ビットレジスタ846は、入力されたデータxiを格納する。32ビットレジスタ846は、格納されたデータxiのうち、8ビットの指数部842のデータxiEを出力する。
またステップS904では、32ビットレジスタ808に、演算の対象となるデータaiを読込む。サブ・コントローラ802は次に処理の対象とするデータaiを格納しているメモリ804に、読込み信号を出力する。またマルチプレクサ806に制御信号を出力して、32ビットレジスタ808に、次に処理の対象とするデータaiを入力する。32ビットレジスタ808は、入力されたデータaiを格納する。32ビットレジスタ808は、格納されたデータaiのうち、8ビットの指数部810のデータaiEを出力する。
ステップS906では、比較器834において、32ビットレジスタ846に格納されたデータの指数部xiEと、8ビットレジスタ838に格納されたデータEmaxを比較する。
xiEがEmaxに比べて大きい場合(ステップS906でYESの場合)、処理はステップS910へ進む。この場合、比較器834は「1」を出力し、ORゲート832は比較器836からの出力に関わらず「1」を出力する。xiEがEmaxに比べて小さいか、等しい場合(ステップS906でNOの場合)、処理はステップS908へ進む。この場合、比較器834は「0」を出力する。
ステップS908では、比較器836において、32ビットレジスタ808に格納されたデータの指数部aiEと、8ビットレジスタ838に格納されたデータEmaxを比較する。
aiEがEmaxに比べて大きい場合(ステップS908でYESの場合)、処理はステップS910へ進む。この場合、比較器836は「1」を出力し、ORゲート832は「1」を出力する。aiEがEmaxに比べて小さいか等しい場合(ステップS908でNOの場合)、処理はステップS918へ進む。この場合、比較器834は「0」を出力し、ORゲート832は「0」を出力する。従ってANDゲート828は、ORゲート826からの出力に関わらず「0」を出力する。
ステップS910では、減算器816において、32ビットレジスタ846に格納されたデータの指数部xiEから、32ビットレジスタ808に格納されたデータの指数部aiEを減ずる。xiE、aiEはともに固定小数点方式で表現される8ビットの整数であり、減算の結果として得られる差ΔEも固定小数点方式で表現される8ビットの整数である。
減算の結果として得られる差ΔEは、減算器816から、比較器822、824へ出力される。
ステップS912では、比較器824において、減算器816から出力された差ΔEと、8ビットレジスタ820に格納された指数の差の許容値ΔEmaxを比較する。
ΔEがΔEmaxに比べて大きい場合(ステップS912でYESの場合)、処理はステップS916へ進む。この場合、比較器824は「1」を出力し、ORゲート826は比較器822からの出力に関わらず「1」を出力する。従ってANDゲート828は「1」を出力する。ΔEがΔEmaxに比べて小さいか等しい場合(ステップS912でNOの場合)、処理はステップS914へ進む。この場合、比較器824は「0」を出力する。
ステップS914では、比較器822において、8ビットレジスタ818に格納された指数の差の許容値−ΔEmaxと、減算器816から出力された差ΔEを比較する。
−ΔEmaxがΔEに比べて大きい場合(ステップS914でYESの場合)、処理はステップS916へ進む。この場合、比較器822は「1」を出力し、ORゲート826は「1」を出力する。従ってANDゲート828は「1」を出力する。−ΔEmaxがΔEに比べて小さいか等しい場合(ステップS914でNOの場合)、処理はステップS918へ進む。この場合、比較器822は「0」を出力し、ORゲート826は「0」を出力する。従ってANDゲート828は「0」を出力する。
ステップS912とS914の処理は、減算器816から出力された差ΔEの絶対値と、8ビットレジスタ820に格納された指数の差の許容値ΔEmaxの絶対値を比較する処理に相当する。ステップS912とS914の処理を実行することによって、ΔEの絶対値がΔEmaxの絶対値に比べて大きい場合は処理はステップS916へ進み、ΔEの絶対値がΔEmaxの絶対値に比べて小さいか等しい場合は処理はステップS918へ進む。
ステップS916では、1ビットレジスタ830は、ANDゲート828から入力されるデータを格納する。ステップS916では、ORゲート832の出力は「1」であって、かつORゲート826の出力は「1」である。従ってANDゲート828からの出力は「1」である。1ビットレジスタ830には「1」が格納される。
1ビットレジスタ830は、格納されたデータを、オーバーフロー検出フラグf(n)として出力する。
ステップS918では、1ビットレジスタ830は、ANDゲート828から入力されるデータを格納する。ステップS918では、ORゲート832、826の出力は、いずれか一方または両方が「0」である。従ってANDゲート828からの出力は「0」である。1ビットレジスタ830には「0」が格納される。
1ビットレジスタ830は、格納されたデータを、オーバーフロー検出フラグf(n)として出力する。
ステップS920では、サブ・コントローラ802はカウント値iを1増加させる。サブ・コントローラ802は、上記した一連の処理を実行するために要するクロック数を予め記憶しており、所定のクロック数が経過する毎にカウント値iを1増加させる。
ステップS922では、サブ・コントローラ802は全ての数値を処理したか否かを判断する。カウント値iがnを超える場合(ステップS922でYESの場合)、サブ・コントローラ802は数列x1、x2、・・・、xnの全ての数値に関して処理を実行し終えたと判断して、オーバーフロー予測の処理を終了する。カウント値iがnを超えない場合(ステップS922でNOの場合)、サブ・コントローラ802は未だ数列x1、x2、・・・、xnの全ての数値に関する処理を実行していないと判断して、処理はステップS904へ進む。
F(n)演算装置708は、オーバーフロー予測装置706が図9の処理を実行している間も、並行してF(n)を算出する演算を実行している。
オーバーフロー予測装置706から出力されるオーバーフロー検出フラグが「1」になると、メイン・コントローラ704からの指示に従って、F(n)演算装置708はオーバーフローを示すデータ∞を演算結果F(n)として出力する。
オーバーフロー予測装置706から出力されるオーバーフロー検出フラグが「0」のままであれば、F(n)演算装置708はそのまま処理を継続し、F(n)を算出する演算が終わり次第、その演算結果をF(n)として出力する。
上記のオーバーフロー予測装置706は、n回の整数の減算処理と、4n回の整数の比較処理のみによって、オーバーフローが生起するか否かを判断する。
以下では例として、数列x1、x2、x3とa1、a2、a3について、F(3)を演算する場合を説明する。例えばx1=1=2であり、x2=8=2であり、x3=16=2であり、a1=2=2であり、a2=2=2であり、a3=2=2であるとする。この場合、x1、x2、x3、a1、a2、a3は、それぞれ32ビットの浮動小数点方式で、以下のように表現される。
Figure 2006252287
x1、x2、x3の指数はそれぞれ0、3、4である。またa1、a2、a3の指数はすべて1である。上述の浮動小数点方式では、指数部に127のバイアスが付与されていることに注意されたい。x1、x2、x3、a1、a2、a3のバイアスが付加された指数はそれぞれ127、130、131、128、128、128である。
上記の数列x1、x2、x3およびa1、a2、a3に基づいてオーバーフローの予測処理を実行すると、x3の指数が許容値Emax=130を超えており、x3の指数とa3の指数の差が3であって、許容値ΔEmax=2を超えているため、オーバーフローが生起すると予測される。
上記の演算を実際に実行してみると、以下に示すように、確かにオーバーフローが生起することが分かる。
Figure 2006252287
なお図9に示すフローチャートでは、理解を容易にするために、実際には並列的に実施される処理についても、直列的に記載していることに注意されたい。例えば、ステップS906とステップS908とステップS910の処理は、図8のオーバーフロー予測装置706において、同じタイミングで実施される。図8のオーバーフロー予測装置706では、比較器834の出力と比較器836の出力についてOR論理を評価しており、このような構成で実現される処理は、図9のフローチャートに示すステップS906とステップS908の処理と等価である。また図9のステップS912とステップS914の処理も、同じタイミングで実施される。図8のオーバーフロー予測装置706では、比較器822の出力と比較器824の出力についてのOR論理を評価しており、このような構成で実現される処理は、図9のフローチャートに示すステップS912とステップS914の処理と等価である。
本実施例のオーバーフロー予測装置706によれば、浮動小数点の四則演算を行うことなく、わずかn回の整数の減算処理と、4n回の整数の比較処理によって、オーバーフローの生起を予測することができる。これによって、オーバーフローが生起した後に行うべき処理を、より迅速に行うことが可能となり、演算の高速化が図られる。
本実施例の演算装置702によれば、F(n)の演算と並行してオーバーフローの予測を行う。F(n)の演算処理とオーバーフローの予測処理とを互いに独立して実行しているため、オーバーフローが生起しない場合であっても、予測処理の追加による処理の遅延を招くことがない。またオーバーフローが生起する場合には、予測処理によってそれが判明した時点で演算を終了し、次に行うべき処理へ移行することができる。極めて高速に処理を実施することができる。
当業者にとって、本実施例のオーバーフロー予測の方法は、選択的にハードウェア、ソフトウェア、あるいはハードウェアとソフトウェアの組合せによって実装することができることが明らかである。
(第5実施例)
本発明の他の1つの実施例について説明する。
本実施例の演算装置は、F(n)演算装置と、オーバーフロー予測装置を備える。
本実施例のF(n)演算装置は、第4実施例のF(n)演算装置708と同様の構成を備える、浮動小数点の四則演算および特殊関数の演算が可能なFPUである。
本実施例のオーバーフロー予測装置は、図8に示す第4実施例のオーバーフロー予測装置706と同様の構成を備えているが、サブ・コントローラ802、メモリ804、848、マルチプレクサ806、850、32ビットレジスタ808、846、比較器822、824、834、836、8ビットレジスタ818、820、838、ORゲート826、832、ANDゲート828、1ビットレジスタ830は、全てF(n)演算装置と共用されている。第4実施例のオーバーフロー予測装置706は簡素な構成をしているため、F(n)演算装置として一般的なFPUを用いることで、その内部にオーバーフロー予測装置706と等価な構成を容易に実現することができる。
本実施例の演算装置は、処理を開始すると、先ずオーバーフロー予測の処理を実施する。オーバーフロー予測の処理においてオーバーフローが生起すると判断されると、演算装置はF(n)の演算の処理を行うことなく、F(n)としてオーバーフローを示すデータ∞を出力して処理を終了する。オーバーフロー予測の処理においてオーバーフローが生起しないと判断されると、演算装置はF(n)の演算の処理を実施して、その結果を出力する。オーバーフロー予測の処理は、第4実施例のオーバーフロー予測装置706が行う図9に示す処理と同様である。
本実施例の演算装置によれば、F(n)演算装置と、オーバーフロー予測装置の構成要素を共用化することによって、小さな回路構成でF(n)の演算処理に加えてオーバーフローの予測処理を行うことができる。回路構成を小型化することで、演算装置の省スペース化、軽量化、省電力化を図ることができる。
(第6実施例)
本発明の他の1つの実施例を説明する。
本実施例の演算装置は、F(n)演算装置と、オーバーフロー予測装置を備える。
F(n)演算装置は、第4実施例のF(n)演算装置708と同様の構成を備え、浮動小数点の四則演算および特殊関数の演算が可能なFPUである。
オーバーフロー予測装置は、図8に示す第4実施例のオーバーフロー予測装置706と同様の構成を備えているが、サブ・コントローラ802、メモリ804、848、マルチプレクサ806、850および32ビットレジスタ808、846はF(n)演算装置と共用されている。F(n)演算装置は、共用された32ビットレジスタ846からxiを読出し、同じく共用された32ビットレジスタ808からaiを読出し、xiとaiの差を算出し、算出された差の自乗値を算出して、その自乗値を累積加算していく。
図10は本実施例の演算装置の動作を説明するフローチャートである。本実施例の演算装置の動作を、図10を参照しながら詳細に説明する。
ステップS1002では、演算装置はカウント値iを1に設定する。またxiとaiの差の自乗値の累積加算値dを0に設定する。xiとaiの差の自乗値の累積加算値dは、F(n)演算装置が備える32ビットレジスタに格納される。
ステップS1004では、メモリ848から32ビットレジスタ846に、演算の対象となるデータxiを読込む。32ビットレジスタ846は、入力されたデータxiを格納する。32ビットレジスタ846は、格納されたデータxiのうち、8ビットの指数部842のデータxiEを出力する。またステップS1004では、メモリ804から32ビットレジスタ808に、演算の対象となるデータaiを読込む。32ビットレジスタ808は、入力されたデータaiを格納する。32ビットレジスタ808は、格納されたデータaiのうち、8ビットの指数部810のデータaiEを出力する。
ステップS1006では、比較器834において、32ビットレジスタ846に格納されたデータxiの指数部212のデータxiEと、8ビットレジスタ838に格納された整数Emaxを比較する。
xiEがEmaxにくらべて大きい場合(ステップS1006でYESの場合)、比較器834は「1」を出力する。この場合、ORゲート832は、比較器836からの出力に関わらず「1」を出力する。この場合、処理はステップS1010へ進む。xiEがEmaxにくらべて小さいか、等しい場合(ステップS1006でNOの場合)、比較器834は「0」を出力する。この場合、処理はステップS1008へ進む。
ステップS1008では、比較器836において、32ビットレジスタ808に格納されたデータaiの指数部810のデータaiEと、8ビットレジスタ838に格納された整数Emaxを比較する。
aiEがEmaxにくらべて大きい場合(ステップS1008でYESの場合)、比較器836は「1」を出力する。この場合、ORゲート832は「1」を出力する。この場合、処理はステップS1010へ進む。aiEがEmaxにくらべて小さいか、等しい場合(ステップS1008でNOの場合)、比較器836は「0」を出力する。この場合、ORゲート832は「0」を出力し、ANDゲート828はORゲート826の出力に関わらず「0」を出力する。この場合、処理はステップS1020へ進む。
ステップS1010では、減算器816において、32ビットレジスタ846に格納されたデータの指数部xiEから、32ビットレジスタ808に格納されたデータの指数部aiEを減ずる。xiE、aiEはともに固定小数点方式で表現される8ビットの整数であり、減算の結果として得られる差ΔEも固定小数点方式で表現される8ビットの整数である。
減算の結果として得られる差ΔEは、減算器816から、比較器822、824へ出力される。
ステップS1012では、比較器824において、減算器816から出力された差ΔEと、8ビットレジスタ820に格納された指数の差の許容値ΔEmaxを比較する。
ΔEがΔEmaxに比べて大きい場合(ステップS912でYESの場合)、処理はステップS916へ進む。この場合、比較器824は「1」を出力し、ORゲート826は比較器822の出力に関わらず「1」を出力する。ΔEがΔEmaxに比べて小さいか等しい場合(ステップS912でNOの場合)、処理はステップS914へ進む。この場合、比較器824は「0」を出力する。
ステップS1014では、比較器822において、8ビットレジスタ818に格納された指数の差の許容値−ΔEmaxと、減算器816から出力された差ΔEを比較する。
−ΔEmaxがΔEに比べて大きい場合(ステップS1014でYESの場合)、処理はステップS1016へ進む。この場合、比較器822は「1」を出力し、ORゲート826は「1」を出力する。従って、ANDゲート828は「1」を出力する。−ΔEmaxがΔEに比べて小さいか等しい場合(ステップS1014でNOの場合)、処理はステップS1020へ進む。この場合、比較器822は「0」を出力し、ORゲート826は「0」を出力する。従って、ANDゲート828は「0」を出力する。
ステップS1016では、1ビットレジスタ830はANDゲート828から入力されるデータを格納する。ステップS1016ではANDゲート828の出力は「1」であるから、1ビットレジスタ830には「1」が格納される。1ビットレジスタ830は、格納されたデータをオーバーフロー検出フラグf(n)として出力する。
ステップS1018では、F(n)の演算の結果として、オーバーフローを示すデータ∞を出力し、処理を終了する。
ステップS1020では、1ビットレジスタ830はANDゲート828から入力されるデータを格納する。ステップS1020ではANDゲート828の出力は「0」であるから、1ビットレジスタ830には「0」が格納される。1ビットレジスタ830は、格納されたデータをオーバーフロー検出フラグf(n)として出力する。
ステップS1022では、32ビットレジスタ846に格納された数値xiと、32ビットレジスタ808に格納された数値aiとの差rを算出する。数値xiと数値aiの差rの算出は、F(n)演算装置が備える浮動小数点の減算器を用いて実行される。算出された差rは、F(n)演算装置が備える32ビットレジスタに格納される。
ステップS1024では、ステップS1022で算出された差rの自乗を算出する。差rの自乗を算出する演算は、F(n)演算装置が備える浮動小数点の乗算器を用いて実行される。算出された差rの自乗値qは、F(n)演算装置が備える32ビットレジスタに格納される。
ステップS1026では、数値xiと数値aiの差rの自乗値qの累積加算値dに、ステップS1024で算出された自乗値qを加算する。
ステップS1028では、カウント値iを1増加させる。
ステップS1030では、全ての数値xi、aiを処理したか否かを判断する。カウント値iがnを超える場合(ステップS1030でYESの場合)、数列x1、x2、・・・、xnおよび数列a1、a2、・・・、anの全ての数値に関して処理を実行したと判断して、処理はステップS1032へ進む。カウント値iがnを超えない場合(ステップS1030でNOの場合)、未だ数列x1、x2、・・・、xnおよび数列a1、a2、・・・、anの全ての数値に関する処理を実行していないと判断して、処理はステップS1004へ進む。
ステップS1032では、数列x1、x2、・・・、xnと数列a1、a2、・・・、anの自乗和dを引数として、自然対数の底eに関する指数関数を算出する。算出された値は、F(n)として出力される。
上記の実施例の演算装置によれば、オーバーフロー予測装置のメモリ、マルチプレクサおよび32ビットレジスタをF(n)演算装置と共用することによって、第4実施例のオーバーフロー予測装置または方法にくらべて、F(n)の演算に要する回路構成を小型化することができる。また32ビットレジスタへの数値xi、aiの読込みを、オーバーフロー予測の処理とF(n)演算の処理で共通としているため、第5実施例のオーバーフロー予測装置にくらべて演算時間を短縮することができる。
以上、本発明の実施形態について詳細に説明したが、これらは例示に過ぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。
また、本明細書または図面に説明した技術要素は、単独であるいは各種の組み合わせによって技術的有用性を発揮するものであり、出願時請求項記載の組み合わせに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
図1は演算装置102の構成を示す図である。(第1実施例) 図2は演算装置102のオーバーフロー予測装置106の構成を示す図である。(第1実施例) 図3は演算装置102が行う処理を示すフローチャートである。(第1実施例) 図4は演算装置102のオーバーフロー予測装置106が行う処理を示すフローチャートである。(第1実施例) 図5は他の一つの演算装置が行う処理を示すフローチャートである。(第2実施例) 図6は他の一つの演算装置が行う処理を示すフローチャートである。(第3実施例) 図7は他の一つの演算装置702の構成を示す図である。(第4実施例) 図8は演算装置702のオーバーフロー予測装置706の構成を示す図である。(第4実施例) 図9はオーバーフロー予測装置706が行う処理を示すフローチャートである。(第4実施例) 図10は他の一つの演算装置が行う処理を示すフローチャートである。(第6実施例) 図11は画像認識の分野におけるパターン・マッチング処理の概要を示す図である。 図12はIEEE754に規定される32ビットの浮動小数点方式で表現された数値データの構造を示す図である。
符号の説明
102・・・演算装置
104・・・メイン・コントローラ
106・・・オーバーフロー予測装置
108・・・F(n)演算装置
202・・・サブ・コントローラ
204・・・メモリ
206・・・マルチプレクサ
208・・・32ビットレジスタ
210・・・仮数部
212・・・指数部
214・・・符号部
216・・・8ビットレジスタ
218・・・比較器
220・・・1ビットレジスタ
702・・・演算装置
704・・・メイン・コントローラ
706・・・オーバーフロー予測装置
708・・・F(n)演算装置
802・・・サブ・コントローラ
804、848・・・メモリ
806、850・・・マルチプレクサ
808、846・・・32ビットレジスタ
810、842・・・指数部
812、844・・・符号部
814、840・・・仮数部
818、820、838・・・8ビットレジスタ
816・・・減算器
822、824、834、846・・・比較器
826、832・・・ORゲート
828・・・ANDゲート
830・・・1ビットレジスタ
1102・・・画像データ
1106・・・分割された領域の画像データ
1104・・・辞書データ群
1108a、1108b、1108c・・・辞書データ
1202・・・数値データ
1204・・・符号部
1206・・・指数部
1208・・・仮数部

Claims (13)

  1. 浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する際のオーバーフローの発生を予測する演算方法であって、
    演算結果の指数の許容値を固定小数点方式で表現した第1整数を特定する工程と、
    数列を構成するそれぞれの数値について、「当該数値の指数を固定小数点方式で表現した整数と第1整数とを比較し、前者が後者よりも大きい場合にオーバーフローの発生を示すデータを出力する比較工程」を、実施する工程と、
    を備えることを特徴とするオーバーフローの発生を予測する演算方法。
  2. 浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する演算方法であって、
    先に請求項1の演算方法を実施し、次いで自乗和を求める過程を含む演算工程を実施することを特徴とし、
    数列を構成するそれぞれの数値について比較工程を実施する間に、オーバーフローの発生を示すデータが出力された時点で、演算を終了することを特徴とする演算方法。
  3. 浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する演算方法であって、
    請求項1の演算方法と、自乗和を求める過程を含む演算工程を同時に並行して実施することを特徴とし、
    数列を構成するそれぞれの数値について比較工程を実施する間に、オーバーフローの発生を示すデータが出力された時点で、演算を終了することを特徴とする演算方法。
  4. 浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する際のオーバーフローの発生を予測する演算方法であって、
    演算結果の指数の許容値を固定小数点方式で表現した第1整数を特定する工程と、
    第1数値の指数を固定小数点方式で表現した整数と第2数値の指数を固定小数点方式で表現した整数の差の許容値を固定小数点方式で表現した第2整数を特定する工程と、
    対応する第1数値と第2数値の組のそれぞれについて、「第1数値の指数を固定小数点方式で表現した整数と第1整数とを比較する第1比較工程と、第2数値の指数を固定小数点方式で表現した整数と第1整数とを比較する第2比較工程と、第1数値の指数を固定小数点方式で表現した整数と第2数値の指数を固定小数点方式で表現した整数の差の絶対値と第2整数の絶対値とを比較する第3比較工程を実施し、第1比較工程で前者が後者より大きいか、あるいは、第2比較工程で前者が後者より大きく、かつ、第3比較工程で前者が後者よりも大きい場合に、オーバーフローの発生を示すデータを出力する比較工程」を、実施する工程と、
    を備えることを特徴とするオーバーフローの発生を予測する演算方法。
  5. 浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する演算方法であって、
    先に請求項4の演算方法を実施し、次いで差の自乗和を求める過程を含む演算工程を実施することを特徴とし、
    対応する第1数値と第2数値の組について比較工程を実施する間に、オーバーフローの発生を示すデータ出力された時点で、演算を終了することを特徴とする演算方法。
  6. 浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する演算方法であって、
    請求項4の演算方法と、差の自乗和を求める過程を含む演算工程を同時に並行して実施することを特徴とし、
    対応する第1数値と第2数値の組について比較工程を実施する間に、オーバーフローの発生を示すデータ出力された時点で、演算を終了することを特徴とする演算方法。
  7. 請求項1から6のいずれかの演算方法における各工程をコンピュータに実行させるためのプログラム。
  8. 浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する際のオーバーフローの発生を予測する演算装置であって、
    入力される数値を記憶する第1レジスタと、
    数列を構成するそれぞれの数値を第1レジスタに入力する手段と、
    演算結果の指数の許容値を固定小数点方式で表現した第1整数を記憶する第3レジスタと、
    第1レジスタに記憶されている数値の指数を固定小数点方式で表現した整数と、第3レジスタに記憶されている第1整数を比較する比較器と、
    比較器によって前者が後者よりも大きいと比較されたときに、オーバーフローの発生を示すデータを出力する手段と、
    を備えることを特徴とするオーバーフローの発生を予測する演算装置。
  9. 浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する演算装置であって、
    請求項8の演算装置と、自乗和を求める過程を含む演算を実施する演算装置を備えており、
    先に請求項8の演算装置が作動し、次いで自乗和を求める過程を含む演算を実施する演算装置が作動することを特徴とし、
    請求項8の演算装置が作動している間にオーバーフローの発生を示すデータが出力された場合には、自乗和を求める過程を含む演算を実施する演算装置を作動させないことを特徴とする演算装置。
  10. 浮動小数点方式で表現された数値の列からなる数列の自乗和を求める過程を含む演算を実施する演算装置であって、
    請求項8の演算装置と、自乗和を求める過程を含む演算を実施する演算装置を備えており、
    請求項8の演算装置と、自乗和を求める過程を含む演算を実施する演算装置が同時に並行して作動することを特徴とし、
    請求項8の演算装置が作動している間にオーバーフローの発生を示すデータが出力された時点で、自乗和を求める過程を含む演算を実施する演算装置の作動を終了することを特徴とする演算装置。
  11. 浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する際のオーバーフローの発生を予測する演算装置であって、
    入力される第1数値を記憶する第1レジスタと、
    第1数列を構成するそれぞれの第1数値を第1レジスタへ入力する手段と、
    入力される第2数値を記憶する第2レジスタと、
    第1レジスタへ入力される第1数値に対応した第2数列を構成するそれぞれの第2数値を第2レジスタへ入力する手段と、
    演算結果の指数の許容値を固定小数点方式で表現した第1整数を記憶する第3レジスタと、
    第1数値の指数を固定小数点方式で表現した整数と第2数値の指数を固定小数点方式で表現した整数の差の許容値を固定小数点方式で表現した第2整数を記憶する第4レジスタと、
    第2整数を2の補数で表現した第3整数値を記憶する第5レジスタと、
    第1レジスタに記憶されている第1数値の指数から第2レジスタに記憶されている第2数値の指数を減じ、その差を固定小数点方式で表現した整数で出力する減算器と、
    第1レジスタに記憶されている第1数値の指数を固定小数点方式で表現した整数と、第3レジスタに記憶されている第1整数を比較する第1比較器と、
    第2レジスタに記憶されている第2数値の指数を固定小数点方式で表現した整数と、第3レジスタに記憶されている第1整数を比較する第2比較器と、
    減算器の出力する整数と第4レジスタに記憶されている第2整数を比較する第3比較器と、
    減算器の出力する整数と第5レジスタに記憶されている第3整数を比較する第4比較器と、
    第1比較器で前者が後者より大きいか、あるいは、第2比較器で前者が後者より大きいと比較され、かつ、第3比較器で前者が後者よりも大きいか、あるいは、第4比較器で前者が後者よりも小さいと比較されたときに、オーバーフローの発生を示すデータを出力する手段と、
    を備えることを特徴とするオーバーフローの発生を予測する演算装置。
  12. 浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する演算装置であって、
    請求項11の演算装置と、差の自乗和を求める過程を含む演算を実施する演算装置を備えており、
    先に請求項11の演算装置が作動し、次いで差の自乗和を求める過程を含む演算を実施する演算装置が作動することを特徴とし、
    請求項11の演算装置が作動している間にオーバーフローの発生を示すデータが出力された場合には、差の自乗和を求める過程を含む演算を実施する演算装置を作動させないことを特徴とする演算装置。
  13. 浮動小数点方式で表現された第1数値の列からなる第1数列と、浮動小数点方式で表現された第2数値の列からなる第2数列について、対応する第1数値と第2数値の差の自乗和を求める過程を含む演算を実施する演算装置であって、
    請求項11の演算装置と、差の自乗和を求める過程を含む演算を実施する演算装置を備えており、
    請求項11の演算装置と、差の自乗和を求める過程を含む演算を実施する演算装置が同時に並行して作動することを特徴とし、
    請求項11の演算装置が作動している間にオーバーフローの発生を示すデータが出力された時点で、差の自乗和を求める過程を含む演算を実施する演算装置の作動を終了することを特徴とする演算装置。
JP2005069260A 2005-03-11 2005-03-11 演算方法、プログラムおよび演算装置 Pending JP2006252287A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005069260A JP2006252287A (ja) 2005-03-11 2005-03-11 演算方法、プログラムおよび演算装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005069260A JP2006252287A (ja) 2005-03-11 2005-03-11 演算方法、プログラムおよび演算装置

Publications (1)

Publication Number Publication Date
JP2006252287A true JP2006252287A (ja) 2006-09-21

Family

ID=37092709

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005069260A Pending JP2006252287A (ja) 2005-03-11 2005-03-11 演算方法、プログラムおよび演算装置

Country Status (1)

Country Link
JP (1) JP2006252287A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1956490A2 (en) 2006-09-19 2008-08-13 Ricoh Company, Ltd. Managing memory in virtualization system

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1956490A2 (en) 2006-09-19 2008-08-13 Ricoh Company, Ltd. Managing memory in virtualization system

Similar Documents

Publication Publication Date Title
TWI405126B (zh) 微處理器及其執行指令之方法
US4758972A (en) Precision rounding in a floating point arithmetic unit
CN108139885B (zh) 浮点数舍入
KR20190090817A (ko) 부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법
US10140092B2 (en) Closepath fast incremented sum in a three-path fused multiply-add design
KR20080055985A (ko) 선택가능 준정밀도를 가진 부동―소수점 프로세서
JP4388543B2 (ja) 3項入力の浮動小数点加減算器
US20080288571A1 (en) Arithmetic device for performing division or square root operation of floating point number and arithmetic method therefor
JP2006154979A (ja) 浮動小数点数演算回路
KR20150079389A (ko) 부동 소수점 수를 정수로 변환하기 위한 전자 장치 및 시스템, 및 그것의 작동 방법
US5187678A (en) Priority encoder and floating-point normalization system for IEEE 754 standard
US8620983B2 (en) Leading sign digit predictor for floating point near subtractor
JP4806453B2 (ja) 演算処理装置、情報処理装置、および演算方法
JPH08212058A (ja) 加算オーバフロ検出回路
CN112835551A (zh) 用于处理单元的数据处理方法、电子设备和计算机可读存储介质
KR100331846B1 (ko) 실수 연산기
JP2006252287A (ja) 演算方法、プログラムおよび演算装置
KR101922462B1 (ko) 데이터 처리장치 및 이진수에 대해 시프트 기능을 수행하는 방법
US8041927B2 (en) Processor apparatus and method of processing multiple data by single instructions
CN114077419A (zh) 用于处理浮点数的方法和系统
JP4243277B2 (ja) データ処理装置
CN111124361A (zh) 算术处理装置及其控制方法
CN113377334B (zh) 一种浮点数据处理方法、装置及存储介质
He et al. Multiply-add fused float point unit with on-fly denormalized number processing
JP3512700B2 (ja) 浮動小数点演算装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070517

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080919

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081007

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090224