(57)【要約】  仮数部と、指数部と、シャドー部を有する中間表現を用いて浮動小数点値を処理するための装置及び方法が提供される。浮動小数点値の指数の下位部分が、仮数の表現が保持されるべき仮数部内の位置の範囲を定義する。指数部が、浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す、指数の上位部分の表現を保持する。仮数部の第１の部分が選択されたウィンドウに対応し、第２の部分が、隣接し且つ値範囲のより下位にある更なるウィンドウへの重複部分に対応する。シャドー部は、浮動小数点値の仮数の表現が、選択されたウィンドウに隣接し且つ値範囲のより上位にある上位ウィンドウに移動される場合に、仮数部の第２の部分を埋めるための値を保持する。このシャドー部により、複数の値の総和が、値が総和される順番に関係なく、同じ結果を生成するよう、選択されたウィンドウを移動させることができる。
2018524706.tif 000002
【特許請求の範囲】
【請求項１】
浮動小数点値の中間表現を処理するための回路であって、当該中間表現が、
前記浮動小数点値の仮数の表現を保持するための仮数部であって、前記浮動小数点値の指数の下位部分が、前記仮数の前記表現が保持されるべき当該仮数部内の位置の範囲を定義する仮数部と、
前記浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す、前記浮動小数点値の前記指数の上位部分の表現を保持するための指数部であって、
前記仮数部の第１の部分が前記選択されたウィンドウに対応し、前記仮数部の第２の部分が、前記選択されたウィンドウに隣接し且つ前記値範囲において下位である更なるウィンドウへの重複に対応する、指数部と、
前記浮動小数点値の前記仮数の前記表現が、前記選択されたウィンドウに隣接し且つ前記値範囲において上位である上位ウィンドウに移動されるときに、前記仮数部の前記第２の部分を埋めるための値を保持するためのシャドー部と、
を備える、
回路を備える装置。
【請求項２】
前記中間表現の２つのオペランドに総和演算を行うための総和回路であって、当該総和演算が、
それぞれが前記２つのオペランドの前記指数部からの第１の指数値と第２の指数値とを比較し、前記第１の指数値と前記第２の指数値とが１だけ異なるときに、前記小さい方のオペランドの前記選択されたウィンドウを、前記２つのオペランドのうちの大きい方のオペランドの前記選択されたウィンドウと一致するよう調整するために、前記２つのオペランドのうちの小さい方のオペランドにウィンドウシフト演算を行うことと、
前記中間表現における総和値を生成するために、前記２つのオペランドの前記仮数部と前記シャドー部とをそれぞれ総和することと、
を含む、
総和回路をさらに備える、請求項１に記載の装置。
【請求項３】
前記中間表現を格納する格納回路をさらに備え、前記２つのオペランドの一方を前記格納回路に格納し、前記２つのオペランドの他方が即被加数である、請求項２に記載の装置。
【請求項４】
前記中間表現を格納する格納回路をさらに備え、前記総和演算は、前記格納回路に格納された前記２つのオペランドのうちの前記一つに関する累積演算である、請求項２に記載の装置。
【請求項５】
前記ウィンドウシフト演算を行うために、前記総和回路が、
前記小さい方のオペランドの前記シャドー部を、前記小さい方のオペランドの前記仮数部の前記第２の部分にコピーするためのコピー回路と、
前記小さい方のオペランドの前記シャドー部をクリアし、且つ、前記小さい方のオペランドの前記仮数部の前記第１の部分をクリアするためのクリア回路と、
前記小さい方のオペランドの前記指数値を１だけインクリメントするためのインクリメント回路と、
を備える、請求項２〜４のいずれか一項に記載の装置。
【請求項６】
前記総和回路が、仮数オーバーフローを引き起こす前記２つのオペランドの前記仮数部の前記総和に応答して、前記総和値の選択されたウィンドウを得るために、前記２つのオペランドの前記選択されたウィンドウを調整するように、前記総和値に対して前記ウィンドウシフト演算を行うための回路を有する、請求項２〜５のいずれか一項に記載の装置。
【請求項７】
前記コピー回路が、シャドーオーバーフローを前記小さい方のオペランドの前記仮数部の前記第１の部分の最下位部分にコピーするための回路を有する、請求項６に記載の装置。
【請求項８】
仮数オーバーフローストレージと、前記仮数オーバーフローを引き起こす前記２つのオペランドの前記仮数部の前記総和に応答して、仮数オーバーフローを前記仮数オーバーフローストレージに格納するための回路とをさらに備える、請求項６又は７に記載の装置。
【請求項９】
前記総和回路が、前記２つのオペランドのうちの前記大きい方のオペランドを前記中間表現における総和値として用いて前記総和演算を終了するよう、１を超えて異なる前記第１の指数値と前記第２の指数値に応答する、請求項２又は３に記載の装置。
【請求項１０】
前記中間表現が、特殊数指標を格納するための特殊数部を備え、前記特殊数指標が、前記浮動小数点値が無限大又は非数であるときに、特殊値を有する、請求項１〜９のいずれか一項に記載の装置。
【請求項１１】
前記総和回路が、前記総和値における特殊数指標を前記特殊値に設定して前記総和演算を終了するように、前記特殊値が設定されている前記特殊数指標に応答する特殊数処理回路を備える、請求項２〜９のいずれか一項を引用する、請求項１０に記載の装置。
【請求項１２】
前記インクリメント回路が、前記総和値において前記特殊数指標を前記特殊値に設定するように、前記総和値の前記指数部における指数オーバーフローを引き起こす前記総和値に前記ウィンドウシフト演算を実行することに応答する、請求項５を引用する、請求項１０又は１１に記載の装置。
【請求項１３】
シンドローム情報が、前記仮数部、前記シャドー部、前記特殊数部の少なくとも一つに格納させるように、前記特殊数が設定された前記特殊数指標に応答するシンドローム回路をさらに備え、前記シンドローム情報が、前記無限大または前記非数の原因を示す、請求項１０〜１２のいずれか一項に記載の装置。
【請求項１４】
前記シンドローム情報が、前記無限大または前記非数を生じさせた命令のプログラムカウンタの少なくとも一部を含む、請求項１３に記載の装置。
【請求項１５】
前記シンドローム情報が、命令の一群を示すプログラムカウンタの少なくとも一部を含み、前記一群の中の一命令が、前記無限大または前記非数を生じさせたものである、請求項１３に記載の装置。
【請求項１６】
レーン式ベクトル処理回路をさらに備え、前記仮数部及び指数部の長さが前記レーン式ベクトル処理回路のレーンサイズの第１の倍数に対応し、前記シャドー部の長さが前記レーン式ベクトル処理回路の前記レーンサイズの第２の倍数に対応する、請求項１〜１５のいずれか一項に記載の装置。
【請求項１７】
前記仮数部の前記第２の部分の長さと、前記指数部の前記長さが前記レーンサイズよりも小さく、前記仮数部はさらに仮数延長部を含み、前記第２の部分の前記長さと、前記指数部の前記長さと、前記仮数延長部の長さとの合計が前記レーンサイズの前記長さに等しくなる、請求項１６に記載の装置。
【請求項１８】
前記総和回路が、前記指数部が前記レーン式ベクトル処理回路のレーン内にあるときに、前記第１の指数値及び前記の第２指数値のいずれか一つをゼロにする回路を備える、請求項２を引用する、請求項１６又は１７に記載の装置。
【請求項１９】
前記浮動小数点値の前記中間表現が符号付き中間表現であり、正の値の正の中間表現を処理するための且つ負の値の負の中間表現を処理するための回路をさらに備える、請求項１〜１８のいずれか一項の請求項に記載の装置。
【請求項２０】
前記総和回路が、結果の符号付き中間表現を生成するように、符号付き浮動小数点値と入力される符号付き中間表現との前記２つのオペランドとしての受信に応答し、ここで、
前記符号付き浮動小数点値が正の浮動小数点数であるときに、前記結果の符号付き中間表現の正の成分が、前記入力される符号付き中間表現の正の成分と前記符号付き浮動小数点値の絶対値との総和値を保持し、
前記符号付き浮動小数点値が負の浮動小数点数であるときに、前記結果の符号付き中間表現の負の成分が、前記入力される符号付き中間表現の負の成分と前記符号付き浮動小数点値の絶対値との総和値を保持する、
請求項２を引用する、請求項１８に記載の装置。
【請求項２１】
前記総和回路が、結果の符号付き中間表現を生成するように、２つの入力される符号付き中間表現の前記２つのオペランドとしての受信に応答し、ここで、
前記結果の符号付き中間表現の正の成分が、前記２つの入力される符号付き中間表現の正の成分の総和値を保持し、
前記結果の符号付き中間表現の負の成分が、前記２つの入力される符号付き中間表現の負の成分の総和値を保持する、
請求項２を引用する、請求項１８に記載の装置。
【請求項２２】
前記変換回路が、前記結果の符号付き中間表現の前記正の成分を前記結果の符号付き中間表現の前記負の成分と、前記正の成分の前記絶対値から前記負の成分の前記絶対値を引くことにより、結合するための回路をさらに備える、請求項１８を引用する、請求項２１に記載の装置。
【請求項２３】
前記出力される小数点値の仮数を得るように、前記仮数部の最上位の設定されたビット位置に依存して前記仮数部の内容を選択し、前記最上位の設定されたビット位置に依存して前記中間表現の前記指数部から前記出力される浮動小数点値の指数を生成することにより、前記中間表現を出力される浮動小数点値に変換するための変換回路をさらに備える、請求項１〜２２のいずれか一項に記載の装置。
【請求項２４】
前記仮数部から前記シャドー部への桁上げを伝搬するように、最大値を有する前記指数部に応答する、桁上げ回路をさらに備え、前記指数部が前記最大値を有するときは、前記仮数部と前記シャドー部とが、前記浮動小数点値の前記仮数を格納するように、連結される、請求項２に記載の、又は請求項２を引用する請求項３〜２３のいずれか一項に記載の装置。
【請求項２５】
前記指数部が前記最大値を有するときに、前記仮数部、前記シャドー部、前記特殊数部のうちの少なくとも２つが、前記浮動小数点値の前記仮数を格納するように、連結される、請求項２に記載の、又は請求項２を引用する請求項３〜２４のいずれか一項に記載の装置。
【請求項２６】
前記仮数部の第３の部分が、前記別のウィンドウに隣接し且つ値範囲のより下位であるさらに別のウィンドウへの別の重複に対応する、請求項１〜２５のいずれか一項に記載の装置。
【請求項２７】
前記装置が、格納回路に前記浮動小数点値の前記中間表現を格納させるように、前記浮動小数点値を特定する命令に応答する、請求項１〜２６のいずれか一項に記載の装置。
【請求項２８】
前記装置が、前記総和演算を実行するように、前記即被加数を特定する総和命令に応答する、請求項３に記載の、又は請求項３を引用する請求項４〜２７のいずれか一項に記載の装置。
【請求項２９】
コンピュータデバイス上で実行されると、当該コンピュータデバイスを、請求項１〜２８のいずれか一項に記載の装置として動作させるコンピュータプログラムを一時的でない方法で格納したコンピュータプログラム製品。
【請求項３０】
コンピュータデバイス上で実行されると、当該コンピュータデバイスを、請求項１〜２８のいずれか一項に記載の装置として動作させるソフトウェア。
【請求項３１】
浮動小数点値の中間表現を格納する方法であって、
中間表現の仮数部に浮動小数点値の仮数の表現を格納する工程であって、前記浮動小数点値の指数の下位部分が前記仮数の前記表現が格納されるべき前記仮数部内の位置の範囲を定義する、格納する工程と、
前記浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す、前記中間表現の指数部における前記浮動小数点値の前記指数の上位部分の表現を格納する工程であって、
前記仮数部の第１の部分が前記選択されたウィンドウに対応し、前記仮数部の第２の部分が、前記選択されたウィンドウに隣接し且つ前記値範囲のより下位である別のウィンドウへの重複に対応する、格納する工程と、
前記浮動小数点値の前記仮数の前記表現が、前記選択されたウィンドウに隣接し且つ前記値範囲のより上位である上位ウィンドウに移動されるときに、前記仮数部の前記第２の部分を埋めるための値を格納する工程と、
を含む方法。
【請求項３２】
コンピュータデバイス上で実行されると、請求項３１に記載の方法を前記コンピュータデバイスに実行させるコンピュータプログラムを一時的でない方法で格納したコンピュータプログラム製品。
【請求項３３】
コンピュータデバイス上で実行されると、請求項３１に記載の方法を前記コンピュータデバイスに実行させるソフトウェア。
【請求項３４】
浮動小数点値の中間表現を格納するための手段であって、
当該中間表現の仮数部に当該浮動小数点値の仮数の表現を格納するための手段であって、当該浮動小数点値の指数の下位部分が当該仮数の当該表現が格納されるべき当該仮数部内の位置の範囲を定義する、格納するための手段と、
当該浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す、当該中間表現の指数部における当該浮動小数点値の前記指数の上位部分の表現を格納するための手段であって、
前記仮数部の第１の部分が前記選択されたウィンドウに対応し、前記仮数部の第２の部分が、前記選択されたウィンドウに隣接し且つ前記値範囲の下位である別のウィンドウへの重複に対応する、格納するための手段と、
当該浮動小数点値の前記仮数の前記表現が、前記選択されたウィンドウに隣接し且つ前記値範囲のより上位である上位ウィンドウに移動されるときに、前記仮数部の前記第２の部分を埋めるための値を格納するための手段と、
を含む、
手段を備える装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理に関する。特に、データ処理の実行時の浮動小数点値の取扱いに関する。
【背景技術】
【０００２】
データ処理装置は、浮動小数点のフォーマットでの値を受信可能であったり、例えば、累算処理として浮動小数点入力値の和を生成可能であったりする。しかしながら、そのような浮動小数点加算を行う上で生じる問題としては、それが一般に結合性ではないという点である。言い換えれば、３つ以上の浮動小数点値の総和を求める結果は、その加算が行われる順番に依存する。大きい値に加算される小さい値の効果がない場合があり、プログラマーはまず小さい値の総和を求めることを選択するかもしれない。同様に、正と負の浮動小数点値の総和を求める結果は、総和が行われる順番に依存する。大きい値が相殺することが予想される場合、小さい値を最後に総和すればよい。浮動小数点の数は、一方では、非常に広い範囲の値を表現することができるため有益である符号化を有するが、他方では、複数の浮動小数点値の総和が行われるときに精度の喪失が起こり、値が総和される順番によってこの喪失が異なることがほとんど避けられない。計算に対するこのような非決定的な結果は、通常、データ処理においてはむしろ望ましいものではなく、総和の前の入力値の検査や順序付けはまた、そのような総和を行うデータ処理装置を複雑化させ、さらにその処理速度を低下させてしまう。あるいは、決定的な最終総和を得るように総和順序による変動を出力総和の精度の下に隠すようにして最終総和の精度を限定することも、高精度浮動小数点数においては望ましいものではない。
【発明の概要】
【課題を解決するための手段】
【０００３】
一つの例示的な実施形態には、浮動小数点値の中間表現を処理するための回路であって、中間表現が、浮動小数点値の仮数の表現を保持するための仮数部であって、浮動小数点値の指数の下位部分が、仮数の表現が保持されるべき仮数部内の位置の範囲を定義している仮数部と、浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す、浮動小数点値の指数の上位部分の表現を保持するための指数部であって、仮数部の第１の部分が選択されたウィンドウに対応し、仮数部の第２の部分が、選択されたウィンドウに隣接し且つ値範囲において下位である別のウィンドウへの重複に対応する、指数部と、浮動小数点値の仮数の表現が、選択されたウィンドウに隣接し且つ値範囲において上位である上位ウィンドウに移動されるときに、仮数部の第２の部分を埋めるための値を保持するためのシャドー部と、を具備する、回路を備える装置がある。
【０００４】
他の例示的な実施形態には、コンピュータデバイス上で実行されると、そのコンピュータデバイスを上記の例の装置として動作させるコンピュータプログラムを一時的でない方法で格納したコンピュータプログラム製品がある。
【０００５】
他の例示的な実施形態には、コンピュータデバイス上で実行されると、そのコンピュータデバイスを上記の例の装置として動作させるソフトウェアがある。
【０００６】
他の例示的な実施形態には、浮動小数点値の中間表現を格納する方法であって、中間表現の仮数部に浮動小数点値の仮数の表現を格納する工程であって、浮動小数点値の指数のより下位の部分が仮数の表現が格納されるべき仮数部内の位置の範囲を定義する、格納する工程と、浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す、中間表現の指数部における浮動小数点値の指数のより上位の部分の表現を格納する工程であって、仮数部の第１の部分がその選択されたウィンドウに対応し、仮数部の第２の部分が、その選択されたウィンドウに隣接し且つ値範囲のより下位にある別のウィンドウとの重複部分に対応する、格納する工程と、浮動小数点値の仮数の表現が、その選択されたウィンドウに隣接し且つ値範囲のより上位にあるより上位のウィンドウに移動される場合に、仮数部の第２の部分を埋めるための値を格納する工程と、を含む方法がある。
【０００７】
他の例示的な実施形態には、コンピュータデバイス上で実行されると、上記の例の方法をコンピュータデバイスに実行させるコンピュータプログラムを一時的でない方法で格納したコンピュータプログラム製品がある。
【０００８】
他の例示的な実施形態には、コンピュータデバイス上で実行されると、上記の例の方法をコンピュータデバイスに実行させるソフトウェアがある。
【０００９】
他の例示的な実施形態には、浮動小数点値の中間表現を格納するための手段であって、中間表現の仮数部に浮動小数点値の仮数の表現を格納するための手段であって、浮動小数点値の指数のより下位の部分が仮数の表現が格納されるべき仮数部内の位置の範囲を定義する、格納するための手段と、浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す、中間表現の指数部における浮動小数点値の指数のより上位の部分の表現を格納するための手段であって、仮数部の第１の部分がその選択されたウィンドウに対応し、仮数部の第２の部分が、選択されたウィンドウに隣接し且つ値範囲のより下位にある別のウィンドウとの重複部分に対応する、格納するための手段と、浮動小数点値の仮数の表現が、選択されたウィンドウに隣接し且つ値範囲のより上位にあるより上位のウィンドウに移動される場合に、仮数部の第２の部分を埋めるための値を格納するための手段と、を含む、手段を備える装置がある。
【００１０】
単に例示の目的で添付の図面に示す実施形態を参照して、本技術をさらに説明する。
【図面の簡単な説明】
【００１１】
【図１】一実施形態における本技術の中間表現の作成の一例による、倍精度バイナリ６４ビット浮動小数点のフォーマットの値の範囲と、その範囲内にある３つの浮動小数点値の例を示す。
【図２】一実施形態における関連する回路を含む、倍精度６４ビット浮動小数点値についての本技術の中間表現をさらに詳細に示す。
【図３】一実施形態における、図２に示すものに代わる、本技術の中間表現を示す。
【図４】一実施形態における、２つのシャドー部を有する、図２に示すものに代わる、本技術の中間表現を示す。
【図５】一実施形態における、入力された倍精度浮動小数点値から本技術の中間表現を生成し記憶するための回路を概略的に示す。
【図６】一実施形態の方法により本技術の中間表現において２つのオペランドを総和するために行われる一連の工程を示す。
【図７】一実施形態における本技術の中間表現においてオペランドに対してウィンドウシフト演算を行うために実行される一連の工程を示す。
【図８Ａ】本技術による３つの浮動小数点値の総和の計算の順序非依存性を示す。
【図８Ｂ】本技術による３つの浮動小数点値の総和の計算の順序非依存性を示す。
【図９Ａ】一実施形態における本技術の中間表現を用いて浮動小数点の総和を行うための装置を概略的に示す。
【図９Ｂ】図９Ａに示すものの変形例である、本技術の中間表現を用いて浮動小数点の総和を行うための装置を概略的に示す。
【図１０】一実施形態における本技術へのレーン式ベクトル処理の応用を概略的に示す。
【図１１Ａ】一実施形態における符号付き表現と符号なし表現との両方を含む本技術の中間表現の浮動小数点値を処理するための装置を概略的に示す。
【図１１Ｂ】図１０Ｂの装置が実行可能な６つの命令の例を示す。
【図１２】いくつかの実施形態における本技術のサポートに用いられる汎用コンピュータデバイスを概略的に示す。
【発明を実施するための形態】
【００１２】
少なくともいくつかの実施形態によれば、浮動小数点値の中間表現を処理するための回路であって、中間表現が、浮動小数点値の仮数の表現を保持するための仮数部であって、浮動小数点値の指数の下位部分が、仮数の表現が保持されるべき仮数部内の位置の範囲を定義する仮数部と、浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す浮動小数点値の指数の上位部分の表現を保持するための指数部であって、仮数部の第１の部分がその選択されたウィンドウに対応し、仮数部の第２の部分が、選択されたウィンドウに隣接し且つ値範囲において下位にある更なるウィンドウとの重複部分に対応する、指数部と、浮動小数点値の仮数の表現が上記選択されたウィンドウに隣接し且つ値範囲において上位にある上位ウィンドウに移動されるときに、仮数部の第２の部分を埋めるための値を保持するためのシャドー部と、を含む回路を備えた装置が提供される。
【００１３】
本技術によれば、特定の指数の範囲内の符号なし浮動小数点値のさまざまな固定小数点表示と見なされ得る浮動小数点値の中間表現（本明細書では、スライディングウィンドウアキュムレータ（ＳＷＡｃｃ）とも呼ばれる）が提供される。この中間表現は、３つのコア部分、すなわち、仮数部、指数部、シャドー部を有する。浮動小数点値の指数の値の一部（下位部分）は、浮動小数点値の仮数が中間表現内、具体的には、仮数部内のどこに保持されるべきかを決定する。また、中間表現の指数部は、浮動小数点値の指数の上位部分の表現を保持する。本技術によれば、浮動小数点値の特定のフォーマットに関連する値の範囲（例えば、ＩＥＥＥ７５４規格で規定された倍精度６４ビット浮動小数点数の２−１０２３から２１０２４まで）が複数の連続した「ウィンドウ」に分割され、浮動小数点値の指数の上位部分が、これらの複数のウィンドウのうちの、浮動小数点値の仮数が位置する特定のウィンドウを示している。そして、浮動小数点値の指数の下位部分は、浮動小数点値の仮数がその選択されたウィンドウ内のどこに位置するのかを定義する。
【００１４】
上記中間表現において本技術によって提供されるシャドー部により、選択されたウィンドウ内で表現されるように浮動小数点値の仮数の上位部分のコピーを保持することできるようになり、このことは、本技術の発明者によって、例えば、この中間表現での複数の浮動小数点値の総和を求める場合に、複数の連続したウィンドウのウィンドウ間における浮動小数点値の移動を取り扱うのに有用なメカニズムであることが分かった。つまり、本技術は、本中間表現により、浮動小数点値の仮数が、その仮数について選択されたウィンドウに隣接し且つ値の範囲において下位にある更なるウィンドウへと選択されたウィンドウを超えて及ぶことができるようにするということを定めている。特に、提供されるシャドー部の大きさは、下位の隣接するウィンドウとの重複部の大きさに対応する。これは、中間表現における浮動小数点値についてウィンドウシフトが必要な場合には、例えば、（以下にさらに詳細に説明するように）中間表現における別の浮動小数点値とそろえる必要があるため、又は、中間表現における２つの浮動小数点値の総和を求めた結果が、次の上位ウィンドウでより適切に表される中間表現における合計値になるという事実のために、シャドー部に保持された値によって、その次の上位ウィンドウにおける適切な表現についての正確な決定を行うことが可能となることを意味している。これは、古い現在のウィンドウに重複する次の上位ウィンドウの領域についての正しい値が必要であり、とりわけ、現在のウィンドウにこれまで保持された合計値は、新しい上位ウィンドウにおける合計に影響を与えなかったであろういくつかの値を含んでいてもよいからである。換言すれば、シャドー部は、ウィンドウシフトがもっと早くに生じていたならこの重複部が有していたであろう値を保持するので、そうすると、新しい上位ウィンドウに表された正しい総和を決定することができる。
【００１５】
いくつかの実施形態では、上記装置は、中間表現の２つのオペランドに総和演算を行うための総和回路であって、総和演算が、それぞれが２つのオペランドの指数部からの第１の指数値と第２の指数値とを比較し、第１の指数値と第２の指数値とが１だけ異なる場合に、小さい方のオペランドの選択されたウィンドウを、その２つのオペランドのうちの大きい方のオペランドの選択されたウィンドウと一致するよう調整するために、その２つのオペランドのうちの小さい方のオペランドにウィンドウシフト演算を行うことと、中間表現における総和値を生成するために、２つのオペランドの仮数部とシャドー部とをそれぞれ総和することと、を含む、総和回路をさらに含む。
【００１６】
上記装置は、中間表現の２つのオペランドを総和することを可能にするために、総和回路を備えていてもよい。なお、この総和回路が総和演算のために用いる中間表現での２つのオペランドは、さまざまなソースから生じるものであってもよい。例えば、両方のオペランドが装置によって実行される総和命令において定められてもよく、それらのうちの少なくとも一つがそのような命令において即値として与えられてもよく、また実際には、それらの一方または両方が命令によって元々の浮動小数点フォーマットで提供又は規定され、装置が、総和演算を行う前に、必要に応じて、浮動小数点値の一方又は両方を中間表現の２つのオペランドに変換してもよい。総和演算を行う方法は、２つのオペランドの（中間表現における）指数部によって与えられる指数値を比較する工程を含む。特定すべき特別な特性としては、一方の指数値が他方と１だけ異なる場合、オペランドが隣接するウィンドウに位置することを意味し、この場合、２つのオペランドの選択されたウィンドウを（大きい方のオペランドについてすでに特定されているものに対して）整列させるために、小さい方のオペランドに対してウィンドウシフト演算を行う。これにより、中間表現における総和値を生成するための適切な総和演算が可能になる。
【００１７】
いくつかの実施形態では、上記装置は、一つ以上の中間表現を格納する格納回路をさらに備えていてもよい。総和回路が総和演算を行う場合、２つのオペランドのうちの少なくとも一方はすでに格納回路に格納され（その後そこから読み出され）ているかもしれない。いくつかの実施形態では、２つのオペランドの一方又は両方は、例えば、総和演算を行わせるよう総和回路を構成する命令により与えられる、総和演算の即被加数として与えてもよい。
【００１８】
総和演算の総和の目的にはさまざまな形があるが、いくつかの実施形態では、この総和演算は、格納回路に格納された２つのオペランドのうちの一つに対する累算演算である。
【００１９】
総和演算の一部として実行されなければならない場合もあるウィンドウシフト演算をサポートするために、いくつかの実施形態では、上記装置は、小さい方のオペランドのシャドー部を、小さい方のオペランドの仮数部の第２部分にコピーするコピー回路と、小さい方のオペランドのシャドー部をクリアし、小さい方のオペランドの仮数部の第１部分をクリアするクリア回路と、小さい方のオペランドの指数値を１だけインクリメントするインクリメント回路と、を備えている。したがって、コピー回路は、小さい方のオペランドのシャドー部を、次の上位ウィンドウへのシフトを考慮して、仮数部において新しく位置付けて利用可能にし、クリア回路は、小さい方のオペランドの適切な部分（シャドー部）と、（下位ウィンドウにおいて表現されたときには、仮数部の適切な部分を保持していた）仮数部の第１部分を「リセット」する。最後に、インクリメント回路が、小さい方のオペランドの指数値を次の上位ウィンドウにシフトするよう調整を行うために設けられる。その結果、小さい方のオペランドも大きい方のオペランドも、それらの総和が実行可能な状態で同じウィンドウに直接に表示される。
【００２０】
総和演算の一部として行われる２つのオペランドのシャドー部の総和の結果、オーバーフローが生じる場合があり、いくつかの実施形態では、総和回路は、シャドーオーバーフローを引き起こす２つのオペランドのシャドー部の総和に応答して、２つのオペランドの選択されたウィンドウを、総和値の選択されたウィンドウを得るように調整するように総和値に対してウィンドウシフト演算を行う回路を有している。このようにして、この場合、この回路によって、総和値に対して適切なウィンドウ（すなわち、一般には一つ上のウィンドウ）を与えるように、（もともと一致した、又は、上述のように小さい方のオペランドをそれに合わせて調整した）２つのオペランドの選択されたウィンドウを調整することが可能となる。
【００２１】
そのようなシャドーオーバーフローが生じると、そのシャドーオーバーフローをすぐに利用することができ、いかなる方法でも保持する必要がない場合もあるが、いくつかの実施形態では、上記装置は、シャドーオーバーフローストレージと、シャドーオーバーフローを引き起こす２つのオペランドのシャドー部の総和に対応して、そのシャドーオーバーフローストレージにシャドーオーバーフローを格納する回路とを備えている。いくつかの実施形態では、このようなシャドーオーバーフローが生じる状況を取り扱うために、コピー回路は、小さい方のオペランドの仮数部の第１部分の最下位部分にシャドーオーバーフローをコピーする回路を有している。
【００２２】
また、２つのオペランドの仮数部の総和によって、仮数オーバーフローが引き起こされる場合もあり、いくつかの実施形態では、総和回路は、仮数オーバーフローを引き起こす２つのオペランドの仮数部の総和に応答して、総和値の選択されたウィンドウを得るために２つのオペランドの選択されたウィンドウを調整するように総和値に対してウィンドウシフト演算を行う回路を有している。このように、仮数オーバーフローが実際に発生するときは、中間表現において総和値をより有効に表すために、その表現をあるウィンドウからより上位のウィンドウへ移動させるように、総和回路のこの回路によって総和値のウィンドウシフト演算を行うことが可能となる。
【００２３】
いくつかの実施形態では、コピー回路は、小さい方のオペランドの仮数部の第１の部分の最下位部分に仮数オーバーフローをコピーする回路を有している。総和の結果として生じた仮数オーバーフローの値は、次いで、さらなる処理のために適切に取り込まれる。
【００２４】
このような仮数オーバーフローが発生する状況では、仮数オーバーフロー値をすぐに利用することができ、いかなる方法でも一時的に保持する必要がないこともあるが、いくつかの実施形態では、上記装置は、仮数オーバーフローストレージと、仮数オーバーフローを引き起こす２つのオペランドの仮数部の総和に応答して、その仮数オーバーフローストレージに仮数オーバーフローを格納する回路とをさらに備えている。この仮数オーバーフロー値は、次いで、中間表現の処理の後の段階で使用されるまで保持されることができる。
【００２５】
総和演算の一部として行われる２つのオペランドの指数値の比較の結果、それらが１より大きく異なることが分かった場合、小さい方のオペランドのシャドー部は、大きい方のオペランドのウィンドウに小さい方のオペランドを再び表現するのに利用することができず、実際、小さい方のオペランドは、いかなる点でも大きい方のオペランドよりもはるかに小さいものとして認識され、よって、これら２つのオペランドの総和から生成される最終的な総和値に影響を与えることはない。したがって、いくつかの実施形態では、総和回路は、２つのオペランドのうちの大きい方のオペランドを中間表現における総和値として用いて総和演算を終了するように、第１の指数値と、1より大きく異なる第２指数値とに応答する。換言すれば、この時点で、２つのオペランドのうちの小さい方のオペランドが単に破棄され、大きい方のオペランドが中間表現における総和値として用いられる。
【００２６】
本技術によればさらに、浮動フォーマットで表現され得る特殊な数を取り扱うことが可能となり、したがって、いくつかの実施形態では、浮動小数点値が無限大又は非数である場合に特殊値を有する特殊数指標を記憶するための特殊数部が中間表現に備えられている。この特殊数指標は、さまざまな形態をとることができ、例えば、単に、浮動小数点値が当該特殊数であることを示す単一ビットであってもよいし、中間表現内の他のフィールドが最大値を有しないときに当該特殊数を条件的に表す単一ビットであってもよいし、特殊数の特定の種類、例えば、無限大や非数の、より詳細な表現を保持できるようにする多くのビットであってもよい。
【００２７】
入力された浮動小数点値においてそのような特殊数に遭遇した場合、総和値もそのような特殊数となる（例えば、任意の浮動小数点値を加算された無限大は、無限大）のが、浮動小数点総和の性質であり、したがって、いくつかの実施形態では、総和回路は、特殊値を設定された特殊数指標に応答して、総和値における特殊数指標を特殊値に設定して総和演算を終了する特殊数処理回路を備えている。
【００２８】
当該装置の（特に総和回路における）動作によって、中間表現で表現可能な範囲の外の値が生成される場合もあり、したがって、いくつかの実施形態では、総和値において特殊数指標を特殊値に設定するように、インクリメント回路が、総和値の指数部の指数オーバーフローを引き起こす、総和値に対するウィンドウシフト演算の実行に応答する。
【００２９】
特殊数指標が特殊値を設定されている場合、本技術によれば、例えば、診断目的で、浮動小数点値を中間表現に表せない原因（例えば、無限大又は非数）を示すために、中間表現の少なくとも一つの部分が再利用されてもよいように、さらに規定される。したがって、いくつかの実施形態では、当該装置は、仮数部、シャドー部、特殊数部の少なくともいずれかに、浮動小数点値が無限大や非数である原因を示すシンドローム情報を記憶させるよう、特殊値を設定された特殊数指標に応答するシンドローム回路をさらに備えている。
【００３０】
このシンドローム情報は、さまざまな形をとり得るが、いくつかの実施形態では、シンドローム情報は、浮動小数点値に無限大または非数を生じさせた命令のプログラムカウンタの少なくとも一部を含んでいる。このプログラムカウンタの一部は、通常、ユーザが、浮動小数点値に無限大や非数を生じさせた命令を一意的に特定する（または、その後適切に調査可能な比較的少数の命令を少なくとも特定する）のに十分となるよう選択される。命令は、個別には追跡されず、しかしまとめて（例えば、アウトオブオーダープロセッサにおいて）行われる場合があり、そのため、いくつかの実施形態では、シンドローム情報は、その群の中の命令が無限大や非数を生じさせる命令群を示すプログラムカウンタの少なくとも一部を含む。
【００３１】
本技術によれば、このような技術をレーン式ベクトル処理装置において実装することによって、中間表現に対する処理効率を向上し得ることがさらに分かる。したがって、いくつかの実施形態では、当該装置は、レーン式ベクトル処理回路をさらに備え、仮数部の長さがレーン式ベクトル処理回路のレーンサイズの第１の倍数に対応し、シャドー部の長さがレーン式ベクトル処理回路のレーンサイズの第２の倍数に対応する。このように仮数部とシャドー部をレーン式ベクトル処理回路のレーンサイズ（又はその倍数）に合わせることにより、総和回路がレーン式ベクトル処理構成の利用によって得られ得る処理効率の恩恵を受けられるようになる。
【００３２】
しかしながら、中間表現のこれらの部分の少なくとも一つは、当然にはレーン式ベクトル処理構成のレーンサイズとそろわない場合もあり、そのような場合は、これらの部分の一つを拡張するために、レーンサイズから得られる追加スペースを利用してもよい。例えば、いくつかの実施形態では、仮数部の第２の部分の長さがレーンサイズよりも小さいときには、仮数部は、第２の部分の長さと仮数延長部の長さとの合計がレーンサイズの長さに等しくなる仮数延長部をさらに含む。このようにして、仮数延長部がレーンサイズにおける残りの利用可能なスペースを有効に使い切り、そして、より大きな仮数表現の取り扱いも可能となる。
【００３３】
同様に、レーンサイズのこのような利用可能な「追加」スペースが仮数部に適用される場合には、（シャドー部と仮数部の第２の部分の大きさが一致するため）シャドー部にも適用される可能性があり、したがって、いくつかの実施形態では、シャドー部の長さがレーンサイズよりも小さい場合、シャドー部はさらに、シャドー部の部分の長さとシャドー延長部の部分の長さとの合計がレーンサイズの長さになるシャドー延長部を含む。このように、より大きなシャドーが得られ、すなわち、中間表現において浮動小数点値の仮数が表現されている選択されたウィンドウに隣接し且つそれよりも値の範囲の下位にある別のウィンドウとの重複部分が大きくなる。
【００３４】
中間表現の指数部もレーン式ベクトル処理回路のレーンサイズと揃えられていてもよいが、実行される総和演算については、総和される２つのオペランドの指数値自体は、通常、それぞれのオペランドの仮数がされる方法で総和がされるわけではなく、したがって、いくつかの実施形態では、総和回路は、指数部がレーン式ベクトル処理回路のレーン内にある場合に、第１の指数値及び第２の指数値のいずれか一つをゼロに設定する回路を含む。つまり、実際、第１の及び第２の指数値のいずれか一つをゼロに設定することにより、一つの指数値の残りの（ゼロに設定されていない）値によって総和値の指数値が簡単に得られるという点で、レーン式ベクトル処理回路で中間表現の他の部分と同じようにオペランドの指数部を取り扱う（すなわち、総和が行われる）ことができ、レーン式ベクトル処理回路により、中間表現の他の部分と同じ方法で指数部を効率的に取り扱うことができる。
【００３５】
当該装置は、符号なしと符号付き両方の中間表現を処理可能としてもよく、したがって、いくつかの実施形態では、浮動小数点値の中間表現は符号付き中間表現であり、該装置には、正の値の正の中間表現を処理し且つ負の値の負の中間表現を処理する回路がさらに備えられている。これにより、正負両方の符号付き中間表現が処理可能である。
【００３６】
これらの符号付き中間表現を取り扱う具体的な方法は、さまざまな形態をとることができ、例えば、上記装置は、例えば、総和がそれぞれ別々に、ひいてはもっと簡単に行えるよう、少なくとも一つの正の中間表現のためのストレージと少なくとも一つの負の中間表現のためのストレージを有するように規定されてもよい。
【００３７】
総和回路は、総和演算のオペランドとしての符号付き浮動小数点値の受信にさまざまな方法で応答するよう構成されていてもよいが、いくつかの実施形態では、総和回路は、符号付き浮動小数点値と入力符号付き中間表現との、結果の符号付き中間表現を生成するための２つのオペランドとしての受信に応答するが、ここで、符号付き浮動小数点値が正の浮動小数点数である場合は、結果の符号付き中間表現の正の成分が、入力符号付き中間表現の正の成分と符号付き浮動小数点値の絶対値との総和値を保持し、符号付き浮動小数点値が負の浮動小数点数である場合は、結果の符号付き中間表現の負の成分が、入力符号付き中間表現の負の成分と符号付き浮動小数点値の絶対値との総和値を保持する。こうして、当該装置は、次いで中間表現に変換される符号付き浮動小数点値を受信すると、正の値と負の値について別々の中間表現を保持し、両者を見分けつつ、それぞれの絶対値だけを考慮すればよく、出力浮動小数点総和値を得るために最終的に両者を合わせる必要が生じるまで、正の値と負の値の中間総和を実行することができる。
【００３８】
いくつかの実施形態では、総和回路は、結果の符号付き中間表現を生成するように、２つの符号付き中間表現の２つのオペランドとしての受信に応答するが、ここで、結果の符号付き中間表現の正の成分は、２つの入力符号付き中間表現の正の成分の総和値を保持し、結果の符号付き中間表現の負の成分は、２つの入力符号付き中間表現の負の成分の総和値を保持する。
【００３９】
このような別々の正及び負の中間表現を、出力総和値を得るために組み合わせる必要がある場合は、これは、正の中間表現の絶対値から負の中間表現の絶対値を引くことにより（または正及び負の中間表現を加算することにより）行われてもよく、したがって、いくつかの実施形態では、総和回路には、正の中間表現の絶対値から負の中間表現の絶対値を引くことにより正の中間表現と負の中間表現とを結合する回路をさらに備えていてもよい。
【００４０】
中間表現は装置によって出力されてもよいが、装置が外部ソースから浮動小数点値を受信するよう構成されている場合、一般的には、装置自体が浮動小数点フォーマットで値を出力する方がより有効的であり、したがって、いくつかの実施形態では、装置は、出力浮動小数点値の仮数が得られるように仮数部の最上位の設定ビットの位置によって仮数部の内容を選択し、最上位の設定ビットの位置に従って中間表現の指数部から出力浮動小数点値の指数を生成することにより中間表現を出力浮動小数点値に変換する変換回路をさらに備えている。中間表現の仮数部内における仮数の位置決めは、浮動小数点フォーマットでの仮数の正しい表現を特定するために重要であり、そのような実施形態ではこれは、出力浮動小数点値の仮数をその後生成するために仮数部の最上位の設定ビットの位置を特定する（例えば、先行するゼロの列を破棄する）ことにより行われてもよい。仮数部において仮数がより高位（より左）に表現されるほど、それが対応する出力浮動小数点値の指数が大きいので、出力浮動小数点値の指数もこの最上位の設定ビットの位置に依存している。
【００４１】
また、本技術によれば、いくつかの実施形態において、装置は、仮数部からシャドー部への繰り上がりを伝搬する、最大値を有する指数部に対応する桁上げ回路をさらに備え、ここで、指数部が最大値を有する場合は、仮数部とシャドー部とが浮動小数点値の仮数を格納するように連結させるという点で、浮動小数点値のより大きな値が中間表現において表現可能となる。このように、指数部が最大値を有し、ひいては、さもなければ仮数部で表現可能な最大仮数の観点から限界に達している場合に、このような実施形態により、より大きな仮数を表現するために、シャドー部が（両者を連結させることにより）仮数部を拡張するように利用されてもよいということが規定される。
【００４２】
実際には、通常より大きな仮数を格納するために、このように仮数部とシャドー部とを連結させるだけではなく、仮数部、シャドー部、特殊数部のうちのいずれか（少なくとも）２つをこのように連結させてもよい。したがって、いくつかの実施形態では、指数部が最大値を有する場合、仮数部、シャドー部、特殊数部のうちの少なくとも２つが浮動小数点値の仮数を格納するために連結させる。
【００４３】
いくつかの実施形態では、仮数部の第３の部分が、それにウィンドウに隣接し且つそれよりも値範囲の下位にあるさらに別のウィンドウとのさらなる重複部分に対応する。そのため、そのような実施形態では、中間表現は、仮数が表現されているウィンドウに隣接する２つのウィンドウに対応するシャドー部を維持することができ、その結果、複数のウィンドウのウィンドウシフトに適応できる。
【００４４】
装置は、浮動小数点値の中間表現に関するその機能の特定の態様を実行させる少なくとも一つの専用の命令に応答するものであってもよい。例えば、いくつかの実施形態では、該装置は、浮動小数点値を特定して、浮動小数点値の中間表現を格納回路に格納させる命令に応答する。こうして、この装置は、命令によって特定された浮動小数点値を確認し、それをその中間表現に変換して格納回路に格納することができる。また、装置は、総和演算に対するオペランドを定義する少なくとも一つの総和命令に応答するものであってもよい。上述のように、これらの被加数（summand）はさまざまな方法で、例えば、即値として、もしくは、局所レジスタなどの特定の記憶位置を参照して特定され得るが、いくつかの実施形態では、装置は、総和演算を行うための即被加数を特定する総和命令に応答する。
【００４５】
少なくともいくつかの実施形態によれば、コンピュータデバイス上で実行されると、そのコンピュータデバイスを上述の構成のいずれかの装置として動作させるコンピュータプログラムを一時的でない方法で格納したコンピュータプログラム製品が提供される。
【００４６】
少なくともいくつかの実施形態によれば、コンピュータデバイス上で実行されると、そのコンピュータデバイスを上述の構成のいずれかの装置として動作させるソフトウェアが提供される。
【００４７】
少なくともいくつかの実施形態によれば、浮動小数点値の中間表現を格納する方法であって、中間表現の仮数部に浮動小数点値の仮数の表現を格納する工程であって、浮動小数点値の指数のより下位の部分が仮数の表現が格納されるべき仮数部内の位置の範囲を定義する、格納する工程と、浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す、中間表現の指数部における浮動小数点値の指数のより上位の部分の表現を格納する工程であって、仮数部の第１の部分がその選択されたウィンドウに対応し、仮数部の第２の部分が、その選択されたウィンドウに隣接し且つ値範囲のより下位にある別のウィンドウとの重複部分に対応する、格納する工程と、浮動小数点値の仮数の表現が、その選択されたウィンドウに隣接し且つ値範囲のより上位にあるより上位のウィンドウに移動される場合に、仮数部の第２の部分を埋めるための値を格納する工程とを含む方法が提供される。
【００４８】
少なくともいくつかの実施形態によれば、コンピュータデバイス上で実行されると、上述の方法を、対応する装置の上述の構成のいずれかに従っておそらく適切に適合させられた、そのコンピュータデバイスに実行させるコンピュータプログラムを一時的ではない方法で格納したコンピュータプログラム製品が提供される。
【００４９】
少なくともいくつかの実施形態によれば、コンピュータデバイス上で実行されると、上述の方法を、対応する装置の上述の構成のいずれかに従っておそらく適切に適合させられた、そのコンピュータデバイスに実行させるソフトウェアが提供される。
【００５０】
少なくともいくつかの実施形態によれば、浮動小数点値の中間表現を格納するための手段を備えた装置が提供され、この手段には、中間表現の仮数部に浮動小数点値の仮数の表現を格納するための手段であって、浮動小数点値の指数のより下位の部分が仮数の表現が格納されるべき仮数部内の位置の範囲を定義する、格納するための手段と、浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す、中間表現の指数部における浮動小数点値の指数のより上位の部分の表現を格納するための手段であって、仮数部の第１の部分がその選択されたウィンドウに対応し、仮数部の第２の部分が、選択されたウィンドウに隣接し且つ値範囲のより下位にある別のウィンドウとの重複部分に対応する、格納するための手段と、浮動小数点値の仮数の表現が、選択されたウィンドウに隣接し且つ値範囲のより上位にあるより上位のウィンドウに移動される場合に、仮数部の第２の部分を埋めるための値を格納する手段とが含まれる。
【００５１】
次に、図面を参照して、いくつかの特定の実施形態を説明する。
【００５２】
図１は、本明細書においてスライディングウィンドウアキュムレータ（ＳＷＡｃｃ）と呼ばれる中間表現が、３つの異なる２進６４ビット浮動小数点値（この例では、倍精度ＩＥＥＥ７５４フォーマットの値）を表現するためにどのように利用されるかを示す。図１の水平線は、この浮動小数点フォーマットの値範囲、すなわち、そのような倍精度６４ビット２進値によって表現可能な値の範囲を示している。このように、図示されているように、この水平線は２０９９ビット固定小数点値を効果的に表している。２の適当な累乗の最上位４ビットによって与えられる、中間表現の指数値（ｅ）の範囲と共に、この値範囲にわたる、２の複数の累乗の相対的な位置が示されている。図の上部には、３つの例示の浮動小数点値、Ｘ、Ｙ、Ｚが設定され、それらの２進指数Ｅと後に続く仮数Ｔを示している。なお、各指数Ｅの全１１ビットの内容が示されているが、図示を分かりやすくするため、５２ビットの仮数の最も外側のビット値のみが示されている。それぞれのｅの値によって指示される、これらの３つの浮動小数点値のそれぞれの値範囲の水平線に対する相対的な位置が、それぞれの暗黙的先行仮数ビットも示されて、図に示されている。これらの浮動小数点値のそれぞれをＳＷＡｃｃに変換する際には、以下にさらに詳細に説明する、ｗ＿ｍとｗ＿ｌで示された２つの成分から形成されるＳＷＡｃｃの「純ウィンドウ」に仮数値の１８０ビットがコピーされる。浮動小数点値Ｚについてのこのコピー動作を図１に示す。なお、さらにまた図１に示すように、これらの１８０ビットのうちの上位５２ビットもＳＷＡｃｃの「シャドー」部分にコピーされ、対応する指数値ｅ（この例では、８）も示されている。
【００５３】
図２は、一実施形態において浮動小数点値の内部表現として用いられる、例示の倍精度ＳＷＡｃｃ（図では「ＤＳＷＡｃｃ」と示される）を示す。このＤＳＷＡｃｃは、２５６ビットのベクトルであると見ることができ、さらに、このＤＳＷＡｃｃの２つの主要部分は６４ビットのレーンと１９２ビットのレーンに対応するものとして示され、図１０を参照して以下にさらに詳細に説明するように、このＤＳＷＡｃｃがレーン式ベクトル処理回路によって処理される可能性を指している。なお、ここでは、そのようなレーン式ベクトル処理装置の６４ビットのレーンは、そのようなＤＳＷＡｃｃを処理するよう容易に構成されていてもよい。図２に示すＤＳＷＡｃｃのフィールドは２つの主要部分、図１に示すような複数の連続したウィンドウの一続き（ｅ値によって境界されている）において占有するウィンドウに対応して、左側にシャドーに関連するもの、右側に対応する浮動小数点値の仮数と指数に関連するもの、に分割されている。図示のウィンドウのフィールドは、主ウィンドウｗ＿ｍ（１２８ビット）、下位ウィンドウｗ＿ｌ（５２ビット）、ウィンドウ延長部ｗ＿ｅ（８ビット）であり、シャドーを表す２つの領域は、下位シャドーｓ＿ｌ（５２ビット）とシャドー延長部ｓ＿ｅ（８ビット）である。ここで用いられる用語としては、「全ウィンドウ」は｛ｗ＿ｍ、ｗ＿ｌ、ｗ＿ｅ｝、「純ウィンドウ」は｛ｗ＿ｍ、ｗ＿ｌ｝、「全シャドー」が｛ｓ＿ｌ、ｓ＿ｅ｝、「純シャドー」が｛ｓ＿ｌ｝である。また、このウィンドウのフィールドの一番右には指数表現ｅ（４ビット）が、シャドー部の右側には特殊数部ｎｉ（４ビット）が示されている。さらに、ウィンドウのフィールドは仮数オーバーフローｗ＿ｏｖを有して示され、シャドー部はシャドーオーバーフローｓ＿ｏｖを有して示されている。最後に、ＤＳＷＡｃｃの２つの主要部分は、シャドー部のｎｉフィールドに流れ込み、以下にさらに詳細に説明する、仮数オーバーフロー値ｗ＿ｏｖと「ｉｓＬａｒｇｅ」値とを結合するＡＮＤ論理によって接続されて示されている。
【００５４】
ＤＳＷＡｃｃの成分の特定のビットサイズは他の形をとってもよく、ＤＳＷＡｃｃの別の可能なフォーマットを図３に示す。図３のＤＳＷＡｃｃは、シャドー部は依然として６４ビットのレーンを占める一方、全ウィンドウ部は、この例では、１２８ビットのレーンに対応するという点で、図２のＤＳＷＡｃｃよりも小さいスペースを占める。もちろん、図３で使用されているＤＳＷＡｃｃの表現は、図２のそれよりも小さい仮数しか保持できないが、これは、このようなＤＳＷＡｃｃの処理や格納に利用可能なスペースと、装置出力の所望の精度とに依存する実装トレードオフを示している。別の符号化では、例えば、ｗ＿ｅとｓ＿ｅのサイズによって、１７７から１９１ビットの３２ウィンドウのＤＳＷＡｃｃ実装が利用され得る。符号付き浮動小数点値の明示的な符号付きＳＷＡｃｃ表現のために符号ビットを含んでもよい符号化もある。ｂｉｎａｒｙ３２のためのＳＷＡｃｃ符号化は、２３ビットのシャドーと２０ビットのｗ＿ｍを有する７４ビットでなされ得る。８１ビットの他の例としては、３２ビットのｗ＿ｍ、２３ビットのｗ＿ｌ、３ビットのｅを使用する。他の符号化の例としては、後に続く仮数を２０ビットまで縮小することで、２０ビットのｗ＿ｍでの６４ビットの符号化、又は、２つ目の４ビットのシャドーでの１６ビットのウィンドウを可能にするものがある。
【００５５】
フォーマットの別の具体的な例を、２つのシャドー部（ｗ＿ｓ＿ａとｗ＿ｓ＿ｂ）があり、第１のシャドー部（ｗ＿ｓ＿ａ）は、次の高位のウィンドウ（指数値ｅ＋１）の下位ウィンドウ（ｗ＿ｌ＿ａとｗ＿ｌ＿ｂ）と重複する現ウィンドウ（指数値ｅ）のビットのシャドーコピーを保持するように提供され、第２のシャドー部（ｗ＿ｓ＿ｂ）は、２番目の高位のウィンドウ（指数値ｅ＋２）の下位ウィンドウ（ｗ＿ｌ＿ａとｗ＿ｌ＿ｂ）と重複する現ウィンドウ（指数値ｅ）のビットのシャドーコピーを保持するように提供された、図４に示す。したがって、この中間表現のタイプは、２つのウィンドウのウィンドウシフトを行うことができる。
【００５６】
図５は、一実施形態におけるＳＷＡｃｃの生成と格納のための回路を概略的に示す。図の上部には、倍精度６４ビット浮動小数点入力値が、ＳＷＡｃｃ生成回路１００によって受信されているその成分とともに、示されている。ＳＷＡｃｃ生成回路１００は、３つの構成要素、すなわち、仮数処理回路１０２、指数処理回路１０４、符号識別回路１０６を備えて概略的に示されている。なお、指数処理回路１０４は、仮数処理回路１０２が仮数フィールドの関連する内容を適切に判別できるように、仮数処理回路１０２につながる出力を有する。また、図５には、ＳＷＡｃｃ成分であるｗ＿ｍ、ｗ＿ｌ、ｗ＿ｅ、ｅ、ｓ＿ｌ、ｓ＿ｅ、ｎｉのための格納機能をストレージ部１１０乃至１２２に備えて概略的に示されている、ＳＷＡｃｃストレージ１０８も示されている。ＳＷＡｃｃストレージ１０８は、一つ又は複数のレジスタ、ローカルキャッシュ記憶装置、メモリ内のストレージなどであってもよい。なお、実際には、ＳＷＡｃｃストレージ１０８は、本実施形態では、符号なし浮動小数点値、正の符号付き浮動小数点値、負の符号付き浮動小数点値に対応するＳＷＡｃｃ表現をそれぞれ格納するのに使用されるこれらのストレージ部１１０乃至１２２のそれぞれについて３つの別々の記憶素子を示す。これらの記憶素子のうちのどれが受信された浮動小数点値に対して用いられるかは、ＳＷＡｃｃ生成回路１００によって受信された浮動小数点値を調べることにより、符号識別回路１０６によって決定される。符号付き及び符号なし浮動小数点値のこの処理については、図１１Ａ、図１１Ｂを参照して以下にさらに詳細に説明する。
【００５７】
一実施形態の（例えば、図９Ａを参照して以下に説明する）装置は、２つのＳＷＡｃｃオペランドに対して総和演算を実行可能であり、これはある特定の実施形態では、図６に示す方法の工程に従って行われる。このフローは、２つのＳＷＡｃｃオペランドが総和されるステップ１３０から開始する。この例では、総和演算とは、実際には、一方のオペランドＯＰ１が即値として与えられ、他方のオペランドＯＰ０が累積総和値を格納する累積レジスタに保持される累積演算である。そして、ステップ１３２では、どちらか一方のオペランドが対応する浮動小数点値が無限大又は非数であることを示す特殊数値ｎｉについて設定されているかどうかの判定が行われる。もしそうなら、フローは、それに応じてＯＰ０のｎｉフィールドを設定するステップ１３４へと進み、ステップ１３６でフローを終了する。そうでなければ、フローは、一方のオペランドのｅ値が他方のオペランドのそれより１小さいかどうかの判定が最初に行われるステップ１３８に進む。もしそうなら、フローは、小さい方のオペランド（小さいｅ値を有するオペランド）に対して、このオペランドの表現を大きい方のオペランドのそれと同じウィンドウにシフトするためにウィンドウシフト演算を実行するステップ１４０へ進む。その後、フローはステップ１４８へと進む。しかしながら、上記２つのオペランドのｅ値が１だけ異なっているのではない場合は、ステップ１４２でそれらが１を超えて異なっているかどうかの判定が行われる。もしそうなら、フローは、大きい方のｅ値を有するオペランドの値を保持するようＯＰ０を更新するステップ１４４に進み、この総和演算をステップ１４６で終了する。そうでなければ、ステップ１４８へ進み、ＯＰ０の全シャドー（ｓ＿ｌ、ｓ＿ｅ）をオペランドの全シャドーの総和で置き換え、ステップ１５０で、これらの全シャドーの総和によってシャドーオーバーフローが引き起こされたかどうかの判定が行われる。もしそうなら、フローは、このシャドーオーバーフローをシャドーオーバーフローレジスタ（ｓ＿ｏｖ）に格納するステップ１５２を経由して進む。その後、ステップ１５４で、ＯＰ０の全ウィンドウ（ｗ＿ｍ、ｗ＿ｌ、ｗ＿ｅ）をオペランドの全ウィンドウの総和で置き換える。続いて、ステップ１５６で、オペランドの全ウィンドウの総和によって仮数オーバーフローが引き起こされたかどうかの判定が行われ、そうでなければ、ステップ１５８でフローを終了する。しかしながら、そのような仮数オーバーフローが発生した場合は、次の高位のウィンドウでそれを再表現するために、ステップ１６０でＯＰ０に対してウィンドウシフトが行われる。そして、ステップ１６２でフローを終了する。
【００５８】
図７は、単一のウィンドウシフトを実行するために本技術の一実施形態において行われる一連の工程を示す。このフローは、単一のウィンドウシフトの対象であるＳＷＡｃｃオペランドが存在するステップ１７０から開始する。ステップ１７２で、ｗ＿ｍがゼロにクリアされ、ステップ１７４で、ｓ＿ｏｖ、ｓ＿ｌ、ｓ＿ｅの値がｗ＿ｍ［０］（すなわち、主ウィンドウｗ＿ｍの最下位ビット）、ｗ＿ｌ、ｗ＿ｅにそれぞれコピーされる。その後、ステップ１７６で、シャドー部の成分であるｓ＿ｌ、ｓ＿ｅの両方をゼロに設定する。ステップ１７８で、ＳＷＡｃｃのｅの値を１だけインクリメントする。続いて、ステップ１８０で、このｅのインクリメントによって、そのオーバーフローが引き起こされたかどうかの判定が行われ、もしそうなら、フローは、このＳＷＡｃｃのｎｉ値を、このウィンドウシフトがＳＷＡｃｃを表現不可能な領域に移動させたことを示すよう、１に設定するステップ１８２を経由して進む。ステップ１８４でフローを終了する。
【００５９】
図１に示す３つの例示の浮動小数点値、Ｘ、Ｙ、Ｚについての考察に戻ると、図８Ａ及び図８Ｂは、ＳＷＡｃｃ表現におけるこれら３つの値の総和の２つの異なる順番、すなわち、図８Ａの（Ｚ＋Ｙ）＋Ｘと図８Ｂの（Ｘ＋Ｙ）＋Ｚを示す。図８Ａでは、ＺとＹのＳＷＡｃｃ表現の作成が最初の２つのラインで示され、ここで、それぞれは同じウィンドウ、すなわち、ｅ＝８で表されている。それぞれの主ウィンドウｗ＿ｍの上位５２ビットが下位シャドー部ｓ＿ｌにコピーされる。その後、これらのＳＷＡｃｃ表現が、ＳＷＡｃｃ表現におけるＺ＋Ｙを得るように、図８Ａの３番目のラインにおいて加算される。続いて、その次のラインでＸのＳＷＡｃｃ表現が作成されるが、これによって、Ｘは総和Ｚ＋Ｙより１つ高位のウィンドウ（ｅ＝８と比較して、ｅ＝９）に位置することになることに留意する。したがって、Ｘと同じウィンドウ（すなわち、ｅ＝９）に表現するよう、Ｚ＋Ｙ（ｅの低い方の値を有する値）に対して単一のウィンドウシフトが行われる。このように図８Ａの最後から２番目のラインに示されるように、Ｚ＋Ｙの下位ウィンドウｗ＿ｌへ下位シャドーｓ＿ｌをコピーすることを含むシフトをされ、図８Ａの最後のラインに示すように、（Ｚ＋Ｙ）＋Ｘを得るよう、Ｚ＋ＹとＸとが総和される。図８Ｂは、（Ｘ＋Ｙ）＋Ｚの計算を示し、ここで、この図は、最初にＹをＸのウィンドウ（ｅ＝９）に一致させ、次にＺをＸ＋Ｙのウィンドウ（ｅ＝９）に一致させるために、Ｙと（これとは別に）Ｚのウィンドウシフトを（明確には図示されていないが）含むことに留意すべきである。なお、具体的には、図８Ａ及び図８Ｂのそれぞれの最後のラインに示される値、すなわち、（Ｚ＋Ｙ）＋Ｘと（Ｘ＋Ｙ）＋Ｚは同じであるが、シャドーが（Ｚ＋Ｙ）をｅ＝９のウィンドウにシフトするステップで利用可能でなかったらこうなっていなかったであろう。
【００６０】
図９Ａは、一実施形態における装置２００を概略的に示す。装置２００の主要構成要素は、ＳＷＡｃｃ総和命令回路２０２、ＳＷＡｃｃ生成回路２０４、ＳＷＡｃｃ格納回路２０６、総和回路２０８である。装置２００によるＳＷＡｃｃ総和命令の受信によって、２つのＳＷＡｃｃオペランドの総和の実行のための動作が構成される。実際には、図９Ａの例で受信されるＳＷＡｃｃ総和命令は、ＳＷＡｃｃ格納回路２０６に保持されているすでにＳＷＡｃｃフォーマット（ＯＰ０）の浮動小数点値に、命令内の（浮動小数点フォーマットの）即値ＯＰ１を加える累積命令である。ＳＷＡｃｃ総和命令回路は、上述したように、即値ＯＰ１を、これをＳＷＡｃｃ表現に変換するＳＷＡｃｃ生成回路２０４に手渡す。どのように総和回路２０８の主要構成要素がこの累積／総和演算のために動作するのかを設定するために、ＳＷＡｃｃ総和命令によって定義されるその他の制御情報は、総和回路２０８の制御回路２１０に送られる。
【００６１】
総和回路２０８の、制御回路２１０以外の主要構成要素は、指数比較回路２１２、ウィンドウシフター回路２１４、加算／総和生成回路２１６である。ＳＷＡｃｃ生成回路２０４がＯＰ１のＳＷＡｃｃ表現を生成すると、その指数値ＯＰ１（ｅ）が指数比較回路２１２に送られる。同様に、ＯＰ１が蓄積されるＳＷＡｃｃ値（ＯＰ０）の指数値が（ＳＷＡｃｃ総和命令回路からの制御信号の受信によって開始され、ＳＷＡｃｃ格納回路２０６によって受信されて）ＳＷＡｃｃ格納回路２０６から読み出される。また、このオペランドの指数値ＯＰ１（ｅ）は、指数比較回路２１２にも送られる。指数比較回路２１２は、ＯＰ１（ｅ）とＯＰ０（ｅ）の相対値を比較し、この比較結果がウィンドウシフター回路２１４と加算／総和生成回路２１６に送られる。ＯＰ１（ｅ）とＯＰ０（ｅ）が同じである場合、ウィンドウシフトが行われる必要がなく、加算／総和生成回路２１６は、ＳＷＡｃｃ生成回路２０４とＳＷＡｃｃ格納回路２０６からそれらがそれぞれ受信されると、ＯＰ１とＯＰ０の値に対して加算処理を行うことができる。同様に、ＯＰ１（ｅ）とＯＰ０（ｅ）とが１を超えて異なる場合、ウィンドウシフトは行われず、加算／総和生成回路は、大きい方の指数値を有するオペランドの値として単にＳＷＡｃｃの総和を生成し、格納するためにこれをＳＷＡｃｃ格納回路２０６に送り返す。全ウィンドウ（ｗ＿ｍ、ｗ＿ｌ、ｗ＿ｅ）の（図６のステップ１５４を実行する）加算／総和生成回路２１６による総和によって仮数オーバーフローが生じた場合（ステップ１５６）、それを次の高位ウィンドウで再度表現するために、ＯＰ０に対してウィンドウシフトを行うようウィンドウシフター回路２１４が用いられる（ステップ１６０）。
【００６２】
しかしながら、指数比較回路２１２がオペランドの指数値が１だけ異なると判定した場合、ウィンドウシフター回路２１４によってウィンドウシフト演算が行われる。この演算を実行可能とするために、ウィンドウシフター回路２１４にはコピー回路２１８、クリア回路２２０、インクリメント回路２２２が備えられている。これらの構成要素は、基本的に、単一のウィンドウシフトを行うために図７に示す工程、コピー回路２１８によって実行されるステップ２０２、クリア回路２２０によって実行されるステップ２０４、２０６、インクリメント回路２２２によって実行されるステップ２０８をそれぞれ行う。なお、パスがインクリメント回路２２２から特殊数処理回路２３０とシンドローム処理回路２３２のそれぞれに通じている。ｅのインクリメント（インクリメント回路２２２によって実行されるステップ１７８）によってｅのオーバーフローが生じた場合、特殊数処理回路２３０は、ウィンドウシフトによってこのオペランドが表現可能な範囲の外に移動されたことを示すよう、ウィンドウシフトが行われたオペランドのｎｉの値を設定する。特殊数処理回路２３０は、加算／総和生成回路２１３に介入することによりｎｉの設定を行い、その結果として、そのようなｅのオーバーフローが生じる場合、ｎｉ値がそれに応じて設定されて、加算／総和生成回路２１６によりＳＷＡｃｃ総和が生成される。シンドローム処理回路２３２も、特にｅが最大可能値を有する場合、ｅの値に関する情報をウィンドウシフター回路２１４から受信する。図２に示すようなＤＳＷＡｃｃの例では、これは、ｅ＝０ｘＦの場合であり、ｗ＿ｍ［１２８］も設定された値は、６４ビットの浮動小数点ｂｉｎａｒｙ６４フォーマットで表現するには大きすぎて、倍精度浮動小数点値に変換された場合、事実上無限大となる。にもかかわらず、正負のＳＷＡｃｃ値間の差によって最終結果が範囲内に戻されることもあるため、中間値として有効である。
【００６３】
なお、さらにこの例では、ｅ＝０ｘＦの場合、（ｅのより高い値へのシフトは不可能なため）シャドーは冗長であって、したがって、図９Ａに示す実施形態では、ｅのこの値は、ＳＷＡｃｃにおいて、通常ｗ＿ｍ、ｗ＿ｌ、ｗ＿ｅしか含まない「全ウィンドウ」がｓ＿ｌ、ｓ＿ｅ、ｎｉをさらに含む、すなわち、ＤＳＷＡｃｃでは６４ビット大きいことを示すために用いられる。したがって、ｅ！＝０ｘＦの場合、ｎｉ値は無限大又は非数しか意味しない。図２及び図３を参照すると、通常全ウィンドウ（ｗ＿ｍ、ｗ＿ｌ、ｗ＿ｅ）と全シャドー（ｓ＿ｌ、ｓ＿ｅ）に対応するＤＷＳＡｃｃの部分間の桁上げがどのように「ｉｓＬａｒｇｅ」に依存するのか、すなわち、ｅ＝０ｘＦの場合にｉｓＬａｒｇｅの値が設定されることが分かる。図９Ａは、このＩｓＬａｒｇｅの値がシンドローム処理回路２３２から加算／総和生成回路２１６に送られることを示している。
【００６４】
なお、シンドローム処理回路２３２は、オペランドの一つが特殊数であるときにシンドローム処理回路２３２に示すために用いられる、特殊数処理回路２３０からの入力を有する。特殊数値については全ウィンドウ、全シャドー、およびｅの大部分が無意味であるので、シンドローム処理回路２３２は、ユーザが特殊数の原因を診断するのに有用な任意のシステム情報であってもよく、図９Ａに示す例では、シンドローム処理回路２３２が受信するプログラムカウンタ（ＰＣ）値（又は、少なくとも、高い確率で命令を識別するのに十分なＰＣのビット、例えば、いくつかの最上位ビットと任意の静的な最下位ビットを削除してもよい）であるシンドローム情報を記憶するためにＳＷＡｃｃのこれらの部分を利用するよう手配されている。このシンドローム情報は、生成されたＳＷＡｃｃ値がこのシンドローム情報を伝達するよう、加算／総和生成回路２１６によって伝搬される。
【００６５】
装置２００は、ＳＷＡｃｃ値を取って、適切な浮動小数点フォーマット、例えば、上述したｂｉｎａｒｙ６４フォーマットに変換するＳＷＡｃｃ−浮動小数点変換回路２３４をさらに備えている。この変換は、基本的に、上述した浮動小数点値をＳＷＡｃｃフォーマットに変換ための処理の逆であり、したがって、その全ウィンドウをどれだけ（右に）シフトしなければならないか、と結果として生じるｂｉｎａｒｙ６４値におけるＥの値を決定するために、そのセットに関する全ウィンドウの最上位ビットを見つける必要がある。
【００６６】
図９Ｂは、図９Ａの装置２００の別の構成を少し簡易化して示す。さらに、図９Ａ及び図９Ｂで繰り返されている構成要素については同じ参照符号を用い、ここでは再度説明することはしていない。図９Ａと図９Ｂの装置の重要な違いは、ウィンドウシフター回路２１４が図９Ｂでは、回路２１４Ａ、２１４Ｂ、２１４Ｃで示すように、３つに分割されている点である。これらのウィンドウシフターのそれぞれを規定する論理は、比較的コンパクト、基本的にはマルチプレクサの群、であり、したがって、この方法はそれほど面積を必要としない。
【００６７】
図１０は本技術を効率的に実装し得る、具体的には２つのＳＷＡｃｃ値の加算を行うための、レーン式処理回路を概略的に示す。図２及び図３を参照して上述したように、ＳＷＡｃｃ値（図２及び図３の例ではＤＳＷＡｃｃ値）の構成は、ＳＷＡｃｃ値の要素がレーン式ベクトル処理回路のレーンと揃うよう定義され得る。図１０に示すレーン式ベクトル処理回路３００は、図２に示すようなＤＳＷＡｃｃがこれら４つのレーンによって収容されるように、６４ビットのレーンを４つ有している。したがって、ＳＷＡｃｃ結果値の対応する６４ビット部分を生成するために、各ＳＷＡｃｃオペランドのそれぞれの６４ビット部分は、レーン式ベクトル処理回路によって並列に処理され、対応する演算、例えば、上述した総和演算が、それぞれに対して並列に実行される。なお、図１０に示すレーン式ベクトル処理回路３００には、ｅ値が処理されるレーンにおいてのみ指数ｅ成分をゼロにするよう手配されたゼロ設定回路３０２がさらに備えられている。これらのｅ値の一つをゼロにすることにより、ＳＷＡｃｃの結果におけるｅ値は、オペランドの一つからのゼロにされていないｅ値によって与えられることになるという点で、レーン式ベクトル処理回路で総和演算を実行するよう規定された総和機構を、さらに適応させることなく利用することができる。ＳＷＡｃｃ総和に関しては、同一のｅ値を有するＳＷＡｃｃオペランドに対してこれが行われ、よって、ＳＷＡｃｃの結果のｅ値が正しく設定される、すなわち、両入力オペランドのそれと同じであるということを想起すべきである。
【００６８】
図１１Ａは、符号付き浮動小数点値を取り扱うよう手配された、一実施形態における装置３２０を概略的に示す。これは、それぞれ、正のＳＷＡｃｃ（ＰＳＷＡｃｃ）値を蓄積するための、および負のＳＷＡｃｃ（ＮＳＷＡｃｃ）値を蓄積するための、別々のストレージを設けることで、図示された実施形態により可能とされている。装置３２０は、メモリからフェッチされた命令を復号する復号部３２２から制御信号を受信することで動作が構成される。制御信号は、装置のその他の構成要素の動作を今度は制御する制御部３２４によって装置３２０において受信される。図９Ａにおける対応する構成要素２０４、２０８、２３４について説明したように一般に動作する、ＳＷＡｃｃ生成回路３２６、総和回路３２８、変換回路３３０が示されている。装置３２０はまた、符号なしＳＷＡｃｃストレージ３３２、正の符号付きＳＷＡｃｃストレージ３３４、負の符号付きＳＷＡｃｃストレージ３３６も備えている。制御回路３２４は、累積オペランドの符号なし又は符号付きの性質を識別し、適切なストレージに関する伝達を発生させる。図５を参照すると、この符号識別機能は、符号識別回路１０６によって行われていることが示されている。本技術において、極性に依存した符号付きＳＷＡｃｃの蓄積のこの分類により、アキュムレータのｅ値が決して減少することはなく、ウィンドウシフトが一方向にのみ発生することが確実にされる。さらに、総和の順番への依存も排除する。これら３つの格納部３３２、３３４、３３６のうちの一つからのＳＷＡｃｃ値は、変換部３３０によって、図１１Ａの図示では外部メモリデバイスとして示される汎用ストレージ３４０にその後格納される浮動小数点値に変換されてもよい。汎用記憶装置３４０はまた、実行される命令の性質に依存して累積にオペランドを提供してもよい。正の符号付きＳＷＡｃｃおよび負の符号付きＳＷＡｃｃの値の別々の蓄積から最終的な結果を生成するために、負の符号付きＳＷＡｃｃ値が（総和回路３２８において）正の符号付きＳＷＡｃｃ値から減算される（それぞれは実際には絶対値であり、その極性を定義するのは格納位置であることが理解されよう）。あるいは、正負のＳＷＡｃｃを最初に浮動小数点値に変換して、その後減算してもよい。
【００６９】
図１１Ｂは、例えば、適宜、図９Ａ、図９Ｂ又は図１１Ａの装置によって実行され得る、本技術によって与えられる例示的な命令の組を示す。これらは、
ＳＷＡｃｃフォーマットに変換すべき浮動小数点値と、所要の宛先を提供する、生成命令（ｉ）、
総和すべき２つのＳＷＡｃｃオペランドを提供する、総和命令（ｉｉ）、
総和すべき浮動小数点値とＳＷＡｃｃオペランドを提供する（ただし、浮動小数点値は最初にＳＷＡｃｃフォーマットに変換される）、総和命令（ｉｉｉ）、
総和すべき２つの符号付きＳＷＡｃｃオペランドを提供する、総和命令（ｉｖ）、
総和すべき浮動小数点値と符号付きＳＷＡｃｃオペランドを提供する（ただし、浮動小数点値は最初にＳＷＡｃｃフォーマットに変換される）、総和命令（ｖ）、
総和すべき符号付きＳＷＡｃｃオペランドと符号なしＳＷＡｃｃオペランドを、符号なしＳＷＡｃｃオペランドの符号を示す別の符号値とともに、提供する、総和命令（ｖｉ）、
を示している。
【００７０】
なお、命令（ｉｉ）乃至（ｖｉ）のそれぞれには、任意選択で、結果の宛先を設定してもよいが、そうでなければ、演算は２つのオペランドの２番目に対する累積として扱われる。本技術は、図１１Ｂに示す例示的な命令に限定されるものではなく、本技術が適用可能なさまざまな他の例示的な命令が考えられる。そのような命令の一例をあげると、総和すべき２つの浮動小数点値をＳＷＡｃｃフォーマットで提供する（ただし、それぞれの浮動小数点値は最初にＳＷＡｃｃフォーマットに変換される）、総和命令として、「ＳＷＡＣＣＳＵＭ（ＦＰ、ＦＰ、宛先）」のような命令が提供され得る。
【００７１】
図１２は、上述の技術を実施するのに利用可能なタイプの汎用コンピュータデバイス４００を概略的に示す。汎用コンピュータデバイス４００は、バス４２２で互いに接続された、中央処理装置４０２、ランダムアクセスメモリ４０４、読み取り専用メモリ４０６を含む。また、すべて共通バス４２２で接続された、ネットワークインターフェースカード４０８、ハードディスクドライブ４１０、ディスプレイドライバ４１２及びモニタ４１４、キーボード４１８とマウス４２０とを有するユーザ入出力回路４１６もさらに備えている。動作時には、中央処理装置４０２は、例えば、ランダムアクセスメモリ４０４及び／又は読み取り専用メモリ４０６に格納され得るコンピュータプログラム命令を実行する。この場合、プログラム命令は、ハードディスクドライブ４１０からさらに読み出されてもよいし、ネットワークインターフェースカード４０８を介して動的にダウンロードされてもよい。実行された処理の結果は、接続されたディスプレイドライバ４１２とモニタ４１４を介してユーザに表示されてもよい。汎用コンピュータデバイス４００の動作を制御するためのユーザ入力は、キーボード４１８やマウス４２０から、接続されたユーザ入出力回路４１６を介して受信されてもよい。コンピュータプログラムは多様な異なるコンピュータ言語で書くことが可能である。コンピュータプログラムは、局所的に記録媒体に格納されたり、汎用コンピュータデバイス４００に動的にダウンロードされたりしてもよい。汎用コンピュータデバイス４００は、適切なコンピュータプログラムの制御の下で動作する場合、ＳＷＡｃｃ値の処理と記憶に関連する上記技術を実施することができ、当該技術を実施するための装置を形成するよう考慮されることができる。汎用コンピュータデバイス４００のアーキテクチャは、大幅に変化する可能性があり、図１２はそのほんの一例である。
【００７２】
要約すれば、本技術は、仮数部と、指数部と、シャドー部を有する中間表現を用いて浮動小数点値を処理することに関する。浮動小数点値の指数の下位部分が、仮数の表現が保持されるべき仮数部内の位置の範囲を定義する。指数部は、浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す、指数の上位部分の表現を保持する。仮数部の第１の部分が選択されたウィンドウに対応し、第２の部分が、隣接し且つ値範囲のより下位にある別のウィンドウへの重複部分に対応する。シャドー部は、第２の部分と大きさが対応する第１の部分のより上位の部分のコピーを保持する。シャドー部により、複数の値の総和が、値が総和される順番に関係なく、同じ結果を提供するように、選択されたウィンドウがシフトさせられる。
【００７３】
少なくとも一つの実施形態によれば、浮動小数点値の中間表現を処理するための回路であって、浮動小数点値の仮数の表現を保持する中間表現の仮数部を処理するための仮数処理回路であって、浮動小数点値の指数のより下位の部分が仮数の表現が保持されるべき仮数部内の位置の範囲を定義する仮数処理回路と、浮動小数点値のフォーマットの値範囲にわたる複数の連続したウィンドウのうちの選択されたウィンドウを示す浮動小数点値の指数のより上位の部分の表現を保持する中間表現の指数部を処理するための指数処理回路であって、仮数部の第１の部分が選択されたウィンドウに対応し、仮数部の第２の部分が、選択されたウィンドウに隣接し且つ値範囲のより下位にある別のウィンドウへの重複部分に対応する指数処理回路と、選択されたウィンドウに隣接し且つ値範囲のより上位にあるより上位のウィンドウに浮動小数点値の仮数の表現が移動される場合に、仮数部の第２の部分を埋めるための値を処理するためのシャドー処理回路とを備えた回路を備えた装置が提供される。
【００７４】
本願において、「するよう構成された」という語句は、装置の構成要素が定義された動作を実行可能な構成を有することを意味するものとして用いられる。これに関し、「構成」とは、ハードウェアやソフトウェアの配置や相互接続の方法を指す。例えば、装置は、定義された動作を提供する専用のハードウェアを有していたり、その機能を果たすようプロセッサやその他の処理装置がプログラミングされていてもよい。「するよう構成された」は、装置の構成要素が、定義された動作を提供するために何らか方法で変更される必要があるということを意味するものではない。
【００７５】
本明細書において添付の図面を参照して例示的な実施形態を詳細に説明してきたが、本発明はこれらの正確な実施形態に限定されるものではなく、添付の特許請求の範囲に規定されるように、本発明の範囲や精神から逸脱することなく、当業者によってさまざまな変更、追加及び改良を行えることを理解されたい。例えば、従属クレームの特徴の様々な組み合わせが、本発明の範囲を逸脱することなく独立クレームの特徴とともに行うことができるであろう。
【図１】
2018524706.tif 000003
【図２】
2018524706.tif 000004
【図３】
2018524706.tif 000005
【図４】
2018524706.tif 000006
【図５】
2018524706.tif 000007
【図６】
2018524706.tif 000008
【図７】
2018524706.tif 000009
【図８Ａ】
2018524706.tif 000010
【図８Ｂ】
2018524706.tif 000011
【図９Ａ】
2018524706.tif 000012
【図９Ｂ】
2018524706.tif 000013
【図１０】
2018524706.tif 000014
【図１１Ａ】
2018524706.tif 000015
【図１１Ｂ】
2018524706.tif 000016
【図１２】
2018524706.tif 000017
【国際調査報告】
2018524706.tif 000018
2018524706.tif 000019
2018524706.tif 000020
2018524706.tif 000021
2018524706.tif 000022
2018524706.tif 000023