(57)【要約】  少なくとも１つのプロセッサは、第１オペランド、第２オペランド、および第３オペランドに関する融合された乗算−加算演算をエミュレートすることができる。少なくとも１つのプロセッサは、第１のオペランドを第２のオペランドと乗算することに少なくとも部分的に基づいて中間値を決定し、上位中間値または下位中間値の少なくとも１つを決定し、ここにおいて、前記上位中間値を決定することは、指定されたビット数だけ、前記中間値をゼロ方向へ丸め込むことを備え、前記下位値を決定することは前記上位中間値により前記中間値を減算することと、前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算又は減算することに少なくとも部分的に基づいて上位値および下位値を決定することと、および前記上位値と前記下位値を加算することによりエミュレートされた融合された乗算−加算結果を決定することとを備える。
2017530445.tif 000002
【特許請求の範囲】
【請求項１】
第１オペランド、第２オペランドおよび第３オペランドに関する融合乗算−加算演算をエミュレートする方法において、
少なくとも１つのプロセッサにより、第１のオペランドを第２のオペランドと乗算することに少なくとも部分的に基づいて中間値を決定することと、
前記少なくとも１つのプロセッサにより、上位中間値または下位中間値の少なくとも１つを決定することと、ここにおいて、前記上位中間値を決定することは、指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、前記下位中間値を決定することは、前記中間値を前記上位中間値により減算することを備える、
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することと、および
前記少なくとも１つのプロセッサにより、前記上位値および前記下位値を加算することにより前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することと、
を備える方法。
【請求項２】
前記少なくとも１つのプロセッサにより前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が、指定されたしきい値を上回る値だけ前記第３オペランドの指数より大きいことに応答して、
前記少なくとも１つのプロセッサにより前記上位値を前記上位中間値に設定することと、および
前記少なくとも１つのプロセッサにより、前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することを備える、請求項１の方法。
【請求項３】
前記指定されたしきい値は２である請求項２の方法。
【請求項４】
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記少なくとも１つのプロセッサにより、前記上位中間値と前記第３オペランドの合計を最も近くの偶数値に丸め込むことにより前記上位値を決定することと、
前記少なくとも１つのプロセッサにより前記下位値を0.0に設定することと、
を備える、請求項１の方法。
【請求項５】
前記指定されたしきい値は２である、請求項４の方法。
【請求項６】
前記中間値を決定することは、前記少なくとも１つのプロセッサにより、前記第１オペランドと前記第２オペランドの積を正規化することと、および
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことは、前記中間値を正規化することから得られるスティッキービット(sticky bit)、ラウンドビット(round bit)、およびガードビット(guard bit)の１つまたは複数に少なくとも部分的に基づいて前記上位中間値と前記第３オペランドの前記合計を最も近い偶数に丸め込むことを備える、請求項４の方法。
【請求項７】
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定することは、
前記積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値だけ大きいことに応答して、
前記少なくとも１つのプロセッサにより前記中間値を前記上位中間値に設定することと、および
前記少なくとも１つのプロセッサにより、前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと、
を備えた、請求項１の方法。
【請求項８】
前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することは、
前記少なくとも１つのプロセッサにより、前記上位値と前記下位値の合計を正規化することと、および
前記少なくとも１つのプロセッサにより、前記上位値および前記下位値の正規化された合計を偶数に丸め込むことと、
を備えた、請求項１の方法。
【請求項９】
前記第１オペランド、前記第２オペランド、および前記第３オペランドは３２ビット浮動小数点数を備え、
前記中間値の仮数は４８ビットを備え、および
前記指定されたビット数は２４ビットを備える、請求項１の方法。
【請求項１０】
上位中間値または下位中間値の少なくとも１つを決定することは、さらに、
前記上位中間値を決定することと、および
前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値を上回るだけ大きいことに応答して前記下位中間値を決定することを備える、請求項１の方法。
【請求項１１】
第１オペランド、第２オペランド、および第３オペランドに関する融合された乗算−加算演算をエミュレートするための装置において、
前記第１オペランド、前記第２オペランド、および前記第３オペランドを記憶するように構成されたメモリと、および
前記第１オペランドを前記第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定し、
上位中間値または下位中間値の少なくとも１つを決定し、ここにおいて、前記上位中間値を決定することは、指定されたビット数だけ前記中間値をゼロ方向へ丸めこむことを備え、前記下位中間値を決定することは、前記上位中間値だけ前記中間値を減算することを備える、
前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定し、
前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定する、
ように構成された少なくとも１つのプロセッサと、
を備えた装置。
【請求項１２】
前記少なくとも１つのプロセッサは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、
前記上位値を前記上位中間値に設定し、および
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定する、
ようにさらに構成される、請求項１１の装置。
【請求項１３】
前記指定されたしきい値は２である、請求項１１の装置。
【請求項１４】
前記少なくとも１つのプロセッサは、さらに、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいことに応答して、または前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定し、および
前記下位値を0.0に設定する、
ように構成される、請求項１１の装置。
【請求項１５】
前記指定されたしきい値は２である、請求項１４の装置。
【請求項１６】
前記少なくとも１つのプロセッサはさらに、
前記第１オペランドおよび前記第２オペランドの積を正規化し、
前記中間値を正規化することから生じるガードビット、ラウンドビットおよびスティッキービットの１つまたは複数に少なくとも部分的に基づいて前記上位中間値および前記第３オペランドの合計を最も近い偶数に丸め込む、
ように構成される、請求項１４の装置。
【請求項１７】
前記少なくとも１つのプロセッサはさらに、
前記積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定し、および
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定する、
ようにさらに構成される、請求項１１の装置。
【請求項１８】
前記少なくとも１つのプロセッサはさらに、
前記上位値と前記下位値の合計を正規化し、および
前記上位値と前記下位値の前記正規化された合計を偶数に丸め込む、
ように構成される、請求項１１の装置。
【請求項１９】
前記第１オペランド、前記第２オペランド、および前記第３オペランドは３２ビット浮動小数点数を備え、
前記中間値の仮数は４８ビットを備え、および
前記指定されたビット数は２４ビットを備える、請求項１１の装置。
【請求項２０】
前記少なくとも１つのプロセッサはさらに、
前記上位中間値を決定し、および
前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、前記下位中間値を決定する、
ようにさらに構成される、請求項１１の装置。
【請求項２１】
第１オペランド、第２オペランド、および第３オペランドに関する融合された乗算−加算演算をエミュレートするための装置において、
少なくとも１つのプロセッサにより、第１オペランドを第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定する手段と、
前記少なくとも１つのプロセッサにより、上位中間値または下位中間値の少なくとも１つを決定する手段と、ここにおいて、前記上位中間値を決定する手段は、指定ビット数だけ前記中間値をゼロ方向へ丸め込む手段を備え、前記下位中間値を決定する手段は、前記中間値を前記上位中間値により減算する手段を備える、
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値と下位値を決定する手段と、および
前記少なくとも１つのプロセッサにより前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定する手段と、
を備えた装置。
【請求項２２】
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定する手段は、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値を上まわるだけ大きいことに応答して、
前記上位値を前記上位中間値に設定し、および
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定する手段を備える、請求項２１の装置。
【請求項２３】
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定する前記手段は、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値および前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定し、および
前記下位値を0.0に設定する手段を備えた、請求項２１の装置。
【請求項２４】
前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定する手段は、
前記積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定し、および
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定する手段を備えた、請求項２１の装置。
【請求項２５】
前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定する前記手段は、さらに、
前記上位値と前記下位値の合計を正規化する手段と、および
前記上位値と前記下位値の正規化された合計を偶数に丸め込む手段とを備えた、請求項２１の装置。
【請求項２６】
実行されると、１つまたは複数のプログラマブルプロセッサに、
第１オペランドを第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定させ、
上位中間値または下位中間値の少なくとも１つを決定させ、ここにおいて、前記上位中間値を決定することは指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、前記下位中間値を決定することは、前記上位中間値により前記中間値を減算することを備える、
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定させ、
前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定させる、
命令を記憶するコンピュータ読取可能記憶媒体。
【請求項２７】
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値と下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値を上回るだけ大きいことに応答して、
前記上位値を前記上位中間値に設定すること、および
前記下位中間値および前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することを備える、請求項２６のコンピュータ読み取り可能記憶媒体。
【請求項２８】
前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて上位値と下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定すること、および
前記下位値を0.0に決定することを備える、請求項２６のコンピュータ読取可能記憶媒体。
【請求項２９】
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定することは、
前記積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、および
前記下位中間値および前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと、
を備える、請求項２６のコンピュータ読取可能記憶媒体。
【請求項３０】
前記第１オペランド、前記第２オペランド及び前記第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定することは、さらに、
前記上位値及び前記下位値の合計を決定することと、および
前記上位値および前記下位値の前記正規化された合計を偶数に決定することと、
を備える、請求項２６のコンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]この開示は、コンピュータ処理における融合された乗算-加算演算のエミュレーションに関する。
【背景技術】
【０００２】
[0002]融合された(fused)乗算−加算（ＦＭＡ）は、ドット積、マトリクス乗算、ニュートン−ラプソン(Newton-Raphson)法、等のような計算の精度をスピードアップし改良することができる浮動小数点演算に関するＩＥＥＥ標準７５４−２００８において必要な動作である。オペランドａ、ｂおよびｃを与えられると、ＦＭＡ演算は、オペランドａとｂを乗算し、ａとｂの積をｃに加算するように動作する。ａおよびｂおよびｃの積の合計は以下のような最終結果を生成するために最も近い偶数（ＲＴＥ）に丸め込まれる：結果=RTE（（ａ＊ｂ）＋ｃ）。
【０００３】
[0003]融合されない乗算−加算演算はＦＭＡ演算の結果に近似することができる。オペランドａ、ｂおよびｃを与えられると、融合されない乗算−加算演算はオペランドａおよびｂを乗算し、ａおよびｂの積を最も近い偶数に丸め込み、ａおよびｂの丸め込まれた積をｃに加算し以下のように最終結果を生成する：結果＝ＲＴＥ（ＲＴＥ（ａ＊ｂ）＋ｃ）
【発明の概要】
【０００４】
[0004]この開示は、支援命令の使用を介して融合された乗算−加算（ＦＭＡ）演算をエミュレートするための技術を提示する。この開示の技術によれば、ＦＭＡ演算は、他の特化された(specialized)ハードウエアを必要とすることなく融合された乗算−加算演算をエミュレートするために融合されない乗算−加算演算を実行するための既存のハードウエアが使用されることができるように支援命令を介してＦＭＡ演算がエミュレートされることができる。
【０００５】
[0005]この開示の一例において、第１オペランド、第２オペランドおよび第３オペランドに関する融合された乗算−加算演算をエミュレートするための方法は、少なくとも１つのプロセッサにより第１のオペランドを第２のオペランドと乗算することに少なくとも部分的に基づいて中間値を決定することを含む。この方法は、さらに前記少なくとも１つのプロセッサにより、上位中間値または下位中間値の少なくとも１つを決定することをさらに含み、ここにおいて、上位中間値を決定することは指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、ここにおいて、下位中間値を決定することは前記上位中間値だけ前記中間値を減算することを備える。方法は、さらに、少なくとも１つのプロセッサにより、上位中間値または下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することを含むことができる。この方法はさらに、少なくとも１つのプロセッサにより、上位値と下位値を加算することにより第１オペランド、第２オペランドおよび第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定することを含むことができる。
【０００６】
[0006]他の例において、第１オペランド、第２オペランドおよび第３オペランドに関する融合された乗算−加算演算をエミュレートするための装置は、第１オペランド、第２オペランドおよび第３オペランドを記憶するように構成されたメモリを含むことができる。この装置はさらに、第１オペランドを第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定し、上位中間値または下位中間値の少なくとも１つを決定し、ここにおいて前記上位中間値を決定することは指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、ここにおいて、前記下位中間値を決定することは上位中間値だけ前記中間値を減算することを備え、上位中間値または下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値と下位値を決定し、および前記上位値と前記下位値を加算することにより第１オペランド、第２オペランドおよび第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定する、ように構成された少なくとも１つのプロセッサをさらに含むことができる。
【０００７】
[0007]他の例において、第１オペランド、第２オペランドおよび第３オペランドに関する融合された乗算−加算演算をエミュレートするための装置は、第１のオペランドを第２のオペランドと乗算することに少なくとも部分的に基づいて中間値を決定する手段を含むことができる。装置はさらに、少なくとも１つのプロセッサにより、上位中間値または下位中間値の少なくとも１つを決定する手段を含むことができ、ここにおいて、前記上位中間値を決定する手段は指定されたビット数だけ中間値をゼロ方向へ丸め込む手段を備え、ここにおいて、前記下位中間値を決定する手段は、前記上位中間値だけ前記中間値を減算する手段を備える。装置はさらに、少なくとも１つのプロセッサにより、上位中間値または下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定する手段を含むことができる。装置はさらに、少なくとも１つのプロセッサにより上位値と下位値を加算することにより前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定する手段を含むことができる。
【０００８】
[0008]この開示の他の例において、コンピュータ読取可能記憶媒体は、実行されると１つまたは複数のプログラマブルプロセッサに、第１のオペランドと第２のオペランドを乗算させることに少なくとも部分的に基づいて中間値を決定させ、上位中間値または下位中間値の少なくとも１つを決定させ、ここにおいて、上位中間値を決定させることは、指定されたビット数だけ中間値をゼロ方向へ丸め込むことを備え、前記下位中間値を決定することは上位中間値だけ中間値を減算することを備え、上位中間値または下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定させ、および上位値と下位値を加算することにより第１オペランド、第２オペランドおよび第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定させる命令を記憶することができる。
【０００９】
[0009]１つまたは複数の例の詳細は添付の図面と下記の記述において説明される。他の特徴、目的、および利点は、説明および図面から、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１０】
【図１】[0010]図1は、浮動小数点数フォーマットの一例を示すブロック図である。
【図２】[0011]融合された乗算−加算演算をエミュレートすることに関する技術の一例を示すブロック図である。
【図３】[0012]融合された乗算−加算演算をエミュレートすることにおける例示的シナリオを示すブロック図である。
【図４】[0013]図４は融合された乗算−加算演算をエミュレートすることにおける例示的シナリオを示すブロック図である。
【図５】[0014］図５はこの開示の１つまたは複数の態様をインプリメントするように構成されることができるコンピューティングデバイスの一例を示すブロック図である。
【図６】[0015]図６は融合された乗算−加算演算をエミュレートするための例示プロセスを示すフローチャートである。
【発明を実施するための形態】
【００１１】
[0016]一般に、この開示は、第１および第２のオペランドの中間積を第３のオペランドと加算するための特化された加算器の必要性なく、既存の乗算および加算ハードウエアを用いてＦＭＡ演算が実行されることができるように支援命令を介して融合された乗算−加算（ＦＭＡ）演算をエミュレートするための技法を記載する。第１および第２のオペランドの中間積は第１オペランドまたは第２オペランド単独のいずれかよりもより多くのビットを含むことができるので、中間積と第３オペランドを加算するために特化された加算器ハードウエアを用いる代わりに、通常の加算器ハードウエアを介して第３オペランドが上位部分または下位部分に加算されることができるように、プロセッサは中間積を上位部分および下位部分に分割することができ、上位部分と下位部分は、エミュレートされた融合された乗算−加算結果を提供するために結合されることができる。
【００１２】
[0017]中央処理装置（ＣＰＵ）、グラフィック処理装置（ＧＰＵ）等のようなプロセッサは浮動小数点値を演算するＦＭＡ演算を実行することができる。図１は例示浮動小数点フォーマットを図示する概念図である。図１に示されるように、値-82.3125を有する浮動小数点数５０は３２ビットのＩＥＥＥ７５４−２００８浮動小数点フォーマットで表されることができる。そのような３２ビット浮動小数点フォーマットは単精度フォーマットと考えることができ、一方６４ビット浮動小数点フォーマットは倍精度フォーマットと考えることができ、１６ビット浮動小数点フォーマットは半精度フォーマットと考えることができる。浮動小数点数５０のような単精度ＩＥＥＥ７５４−２００８浮動小数点フォーマット（すなわち、３２−ビット浮動小数点数）はサインビット５２、指数５４および仮数５６を含むことができる。サインビット５２は３２ビット数のサインビット５２であり得、指数５４は３２ビット数の８ビット数を含むことができ、および仮数５６は、３２ビット数の２３ビットを含むことができる。
【００１３】
[0018]一例として、浮動小数点数５０の符号が負である場合符号ビット５２は１であり得、浮動小数点数５０の符号が正である場合０であり得、他の例として逆も同様である。バイアスされていない指数は指数５４の値から１２７を減算することにより指数５４の値から計算されることができるように指数５４は１２７のバイアスを有することができる。仮数５６はその整数ビットを隠れさせることができる。例えば、浮動小数点値-82.3125は-1.01001001012*26と等しくなるなり得る。この例において、サインビット５２は１に設定されることができる。指数５４は100001012であり得、それは指数５４において１２７のバイアスにより１３３であり（すなわち６＋１２７）、1.01001001012の整数ビット１は隠されることが出来るので、仮数５６は010010010100000000000002であり得る。このようにして、仮数５６は、仮数５６が浮動小数点数５０の２３ビットを取ることができるとしても２４ビット値を表すことができる。
【００１４】
[0019]プロセッサはまた浮動小数点計算の間にガードビット(guard bit)５７、ラウンドビット(round bit)５８、およびスティッキービット(sticky bit)５９を追跡することができる。ガードビット５７、ラウンドビット５８およびスティッキービット５９は、仮数５６の正規化および丸め込みの期間に仮数５６をシフトしながらポピュレート(populate)されることができる。たとえば、仮数５６の値が110011なら、110011の右方向のシフトは011001の値を生じることができ、ガードビット５７はシフトされた最も右側のビットを記憶するために１に設定されることができる。011001の次の右方向のシフトは001100の値を生じることができ、ガードビット５７の１は今度はラウンドビット５８に記憶されることができ、ガードビット５７は、シフトされた最も右側のビットを記憶するために１に設定されることができる。001100の次の右方向のシフトは000110の値を生じることができ、ラウンドビット５８に記憶された１はスティッキービット５９に記憶されるようにシフトされることができ、ガードビット５７に記憶された１はラウンドビット５８に記憶されるようにシフトされることができ、ガードビット５７はシフトされた最右ビットを記憶するように０に設定されることができる。000110の次の右方向のシフトは000011の値を生じることができる。この場合一度スティッキービットが１にセットされると、それはラウンドビット５８の値に関係なく１のままであり得る。それゆえ、スティッキービット５９に記憶された１はスティッキービット５９に留め置かれ、ラウンドビット５８に記憶された１はドロップされることができ、ガードビット５７に記憶された０はラウンドビット５８に記憶されるようにシフトされることができ、ガードビット５７はシフトされた最右ビットを記憶するために０に設定されることができる。以上のように、１は最初にガードビット５７に、次にラウンドビット５８に、そして次にスティッキービット５９にシフトされることができる。一度１がスティッキービット５９にシフトされると１はさらなるシフトに無関係にスティッキービット５９に留まることができ、一方ラウンドビット５８に記憶されたビットは他の右方向のシフトで単にドロップオフ(drop off)することができる。代替的に、スティッキービット５９はラウンドビット５８の右にシフトされたビットのすべてにＯＲ演算を実行した結果であり得る。
【００１５】
[0020]浮動小数点数５０は例えば、ＩＥＥＥ７５４−２００８で規定された丸め込みモードの１つを用いて、多数の方法で丸め込みされることができる。浮動小数点数５０を丸め込むことは仮数５６を指定されたビット数に丸め込むことを含むことができる。プロセッサは仮数５６を右方向へシフトすることができ、そのシフトを補償するために指数５４の値を調整することができる。最も近い偶数へ丸め込む丸め込みモード(round-to-nearest-even rounding mode)において、ある数は最も近い値に丸め込まれる。その数が、２つの等価な最も近い値の間の中ほどに収まる場合、最も近い偶数へ丸め込む丸め込みモードにおいて偶数の最下位ビットを有する最も近い値に丸め込まれる。
【００１６】
[0021]指定されたビット数だけゼロ方向へ浮動小数点数５０を丸め込むことは、ガードビット５７、ラウンドビット５８およびスティッキービット５９をドロップすることにより浮動小数点数５０を切り捨てることができる。さらに、浮動小数点数５０が加算の中間結果である場合、２つのオペランドの２４ビット仮数の加算は、ガードビット５７、ラウンドビット５８、およびスティッキービット５９に加えて２５ビットの仮数を生じることができる。この場合、中間結果は正規化されなければならないであろう。これを遂行するために、プロセッサは、１ビットだけ右方向に浮動小数点数５０の仮数５６をシフトすることができ、また、１だけ浮動小数点数５０の指数５４をインクリメントすることができる。同様に、浮動小数点数５０が減算の中間結果である場合、２つのオペランドの仮数の２４ビットの減算は、オペランドの最上位ビットの１つまたは複数がゼロである、仮数の２４ビットを生じることができる。この場合、中間結果は仮数の最上位ビットが１になるまで左にシフトされることにより正規化されることができ、指数は対応的にシフトの大きさだけデクリメントされることができる。
【００１７】
[0022]浮動小数点数５０のような浮動小数点数を最も近い偶数へ丸め込む結果は、それぞれガードビット、ラウンドビット、およびスティッキービット５７−５９の値に少なくとも部分的に基づくことができる。丸め込みは正規化の後に行われることに留意する必要がある。最も近い偶数への丸め込み(round-to-nearest-even)(RTE)の場合、ガードビットが１であり、ラウンドビットおよび／またはスティッキービットが１の場合、１が２４ビット仮数に加算される。さらに、２４ビット仮数の最下位ビットが１の場合、ガードビットがセットされラウンドビットおよびスティッキービットがゼロなら１が仮数のＬＳＢに加算される。奇数への丸め込み(round-to-odd)（ＲＴＯ）の場合、ガードビット、ラウンドビット、スティッキービットのいずれか１つまたは複数が１の場合、１が、２４ビット仮数の最下位ビットへ「ＯＲ」される(ORed)。
【００１８】
[0023]上述したように、ＦＭＡ演算は３つの浮動小数点オペランドのセットに演算することができる。表１は、例示ＦＭＡ演算のステップを示す。オペランドop0=0x7674400016, op1=0x2721A20016、およびop2=0x2088E3EF16, プロセッサはFMA(op1, op2, op3)=RTE((op1*op2)+op3)を決定することができる。
[0024]
【００１９】
【表１】
2017530445.tif 000003
【００２０】
[0025]上記表１に示されるように、プロセッサはop0をop１と乗算することができる。値pを生じるためにop0とop1を乗算することに応答して、プロセッサは、１だけ指数をインクリメントすることにより値ｎを生じるために、結果として生じる値ｐを正規化することができる。次に、プロセッサはop2をｎに加算することができる。２つの浮動小数点値を加算するために、プロセッサは、それらの指数が同じになるように２つの浮動小数点値の小さい方を右シフトすることができる。値ｎは６１のバイアスされていない指数を有するので、プロセッサは、値ｎのバイアスされていない指数と一致する６１のバイアスされていない指数を有する値ｔを生じるために−６２のバイアスされていない指数を有するｏｐ２を１２３だけ右方向にシフトすることができる。ｏｐ２をシフトすることに応答して、プロセッサは値ｎとｔを加算し、加算値を正規化し、ｎとｔの加算値を最も近い偶数に丸め込み２４ビット仮数からなる３２ビット結果に丸め込み、0x5E1A36D116のＦＭＡ結果を生じる。
【００２１】
[0026]図１に示されるように、浮動小数点数５０のような単精度ＩＥＥＥ７５４−２００８浮動小数点値は２３ビット仮数５６を含むことができる。上述したように、仮数５６はその整数ビットを隠すことができるので、２３ビット仮数５６は実際には、２４ビット仮数値を表すことができる。ガードビット、ラウンドビットおよびスティッキービットに対処するために、ガードビット、ラウンドビットおよびスティッキービットの２つのセットおよび２つの２４ビット仮数値を加算することを含む、２つの単精度（すなわち、３２ビット）浮動小数点値を加算するために２７ビット加算器が利用されることができる。
【００２２】
[0027]プロセッサは、ＦＭＡ演算を行うために第３のオペランドに加算される中間値を生成するために第１のオペランドと第２のオペランドを一緒に乗算するので、２つの２４ビット仮数値を乗算することを含む、第１のオペランドと第２のオペランドを乗算することは、４８ビット仮数値を備えた中間値を生成することができる。４８ビット仮数値に対処するために、プロセッサは、４８ビット中間値と第３オペランドの２４ビット仮数とを加算するために５１ビット加算器を含むことを必要とされるかもしれない。
【００２３】
[0028]２７ビット加算器の代わりにプロセッサに５１ビット加算器を組み込むことの潜在的な不利益は、プロセッサに関するより多くのスペースおよび電力要件を含むことができる。さらに、そのような大きなビット数を介して合計値を桁上げ(carrying)することによりクリティカルパスの問題が起こる可能性がある。５１ビット加算を行うために、余分な加算器を必要とすることなくＦＭＡ演算の結果を近似するための１つのアプローチは、融合されない乗算−加算演算であり得る。上述したように、融合されない乗算−加算演算は、ｏｐ０とｏｐ１の２４ビット仮数の積である４８ビット中間値を２４ビットに丸め込んでバックダウン(back down)し、２４ビット中間値をop2と加算し、その後にその合計値の結果を丸め込むことができる。
【００２４】
[0029]いくつかの例において、プロセッサは、ＦＭＡ演算の代わりに融合されていない乗算−加算演算を実行することが可能であるハードウエアを含むことができる。そのようなハードウエアは融合されていない乗算−加算演算を実行するためにデジタル回路、ハードウエア乗算器、加算器、ハードウエアロジック、等を含むことができる。いくつかの例において、ハードウエアはハードウエアパイプラインを備えることができる。融合されていない乗算−加算演算において、第１および第２のオペランドの中間積は、中間積が第３のオペランドと加算される前に丸め込まれるので、融合されていない乗算−加算演算を実行するためのハードウエアは、大きな浮動小数点値を加算するための特殊な加算器を含まなくてもよい。たとえば、表１に示される例において、プロセッサはｏｐ０およびｏｐ１を乗算することから得られる４８ビット仮数を、ｏｐ３がその積に加算される前に２４ビットに丸め込まれることができる。
【００２５】
[0030]しかしながら、融合されない乗算−加算演算は、ＦＭＡ演算の結果と異なる不正確な結果をときどき提供する可能性がある。表１に示される例において、代わりに、プロセッサがｏｐ１、ｏｐ２、およびｏｐ３の融合されない乗算−加算結果を計算する場合、その結果は、代わりに0x5E1A36D016になることができ、それは、0x5E1A36D116のＦＭＡ演算の結果と異なる。たとえば、融合されない乗算−加算において、正規化された値ｐの結果である値ｎの仮数は２４ビット仮数値0x9A36D0hに丸め込むこまれることができるので、合計値ｎ＋ｔの仮数は0x9A36D0800000hの代わりに0x9A36D0hであることができる。したがって、仮数0x9A36D0800000hを正規化した結果としてガードビット、ラウンドビットおよびスティッキービットは１、０、０になり得るけれども、この値は、融合されない乗算−加算における乗算の直後に0x9A36D0に丸め込まれ、ガードビットは失われる。ガードビット、ラウンドビット、およびスティッキービットは融合されない乗算−加算の加算ステージの期間に００１になり得る。従って、００１のガードビット、ラウンドビット、およびスティッキービット値を有する仮数0x9A36D0hを最も近い偶数に丸め込んだ結果は、0x9A36D0hであり得、それは0x5E1A36D016の融合されない乗算−加算結果を生じる。
【００２６】
[0031]本開示の態様に従って、プロセッサは、融合されない乗算−加算演算よりも精度の良いＦＭＡ演算をエミュレートするために融合されない乗算−加算演算を計算するために使用されるのと同じ既存のハードウエアを使用することができる。ＦＭＡ演算をエミュレートするために既存の加算器ハードウエアを利用することにより、プロセッサは、単一精度浮動小数点数に関するＦＭＡ演算を行うためにさらなる５１ビット加算器を提供する必要はないかもしれない。少なくとも１つのプロセッサは、第１のオペランドと第２のオペランドの乗算に少なくとも部分的に基づいて中間値を決定し、上位中間値または下位中間値の少なくとも１つを決定し、ここにおいて上位中間値を決定することは指定されたビット数だけ中間値をゼロ方向へ丸め込むことを備え、下位中間値を決定することは上位中間値により下位中間値を減算することを備え、上位中間値または下位中間値の１つに第３オペランドの適切なビットを加算／減算することに少なくとも部分的に基づいて上位値および下位値を決定し、および上位値および下位値を加算することにより第１オペランド、第２オペランドおよび第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定するように構成されることができる。プロセッサが第３オペランドを加算するか減算するかは、中間積および第３オペランドの符号が同じか異なるかに少なくとも部分的に依存することができる。
【００２７】
[0032]上述したように、単精度浮動小数点値の場合、第１のオペランドと第２のオペランドの２つの２４ビット仮数の積は４８ビットの中間値を生成することができ、中間値の４８ビット仮数と第３オペランドの２４ビット仮数を加算することによりＦＭＡ演算を行うために５１ビット加算器が必要となるかもしれない。代わりに、さらなる５１ビット加算器なしにＦＭＡ演算をエミュレートするために、プロセッサは中間値の仮数をビットの上位部分およびビットの下位部分に分割することができる。例えば、中間値の４８ビット仮数の場合、プロセッサは中間値の４８ビット仮数を、４８ビット仮数の上位２４ビット［４７−２４］を含むビットの上位部分と、４８ビット仮数の下位２４ビット［２３−０］を含むビットの下位部分に均等に分割することができる。
【００２８】
[0033]プロセッサは、上位中間値と下位中間値の少なくとも１つを決定するように構成されることができ、上位中間値の仮数は４８ビット仮数の上位２４ビットを備え、下位中間値は４８ビット仮数の下位２４ビットを備える。プロセッサは、第３オペランドを上位中間値と下位中間値の１つに加算することに少なくとも部分的に基づいて上位中間値と下位中間値を決定することができ、さらに、上位値を下位値を加算することにより第１オペランド、第２オペランドおよび第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定することができる。
【００２９】
[0034]図２はＦＭＡ演算をエミュレートするための例示プロセスを図示するブロック図である。具体的には、プロセッサは、オペランド６０、６２、および６４に関するＦＭＡ演算をエミュレートすることができ、ここでは、演算ＲＴＥ（（オペランド６０＊オペランド６２）＋オペランド６４）がエミュレートされる。図２に示されるように、オペランド６０、６２および６４は、各々が図１に示される浮動小数点数５０に類似する３２ビット単精度浮動小数点値であり得、オペランド６０、６２、および６４はそれぞれ仮数６６、６８、および７０を含むことができる。
【００３０】
[0035]プロセッサは、中間値７２を生成するためにオペランド６０および６２を乗算することができ、それもまた浮動小数点値であり得る。上述したように、オペランド６０と６２は単精度浮動小数点値であり得、仮数６６および６８は各々２４ビット（２３ビット仮数プラス隠れ整数ビット）であり得、オペランド６０および６２を乗算することは、仮数６６および６８を乗算することを含み、中間値７２に４８ビット仮数を結果として生じる。プロセッサは中間値７２の仮数を正規化することができ、中間値７２の正規化された仮数を上位部分７４と下位部分７６に概念的に分割することができる。中間値７２の正規化された仮数を分割することは、上位部分７４が仮数の上位２４ビットを含み、下位部分７６が仮数の下位２４ビットを含むように、２つの同じ大きさの半分に、正規化された仮数を分割することを含む。
【００３１】
[0036]プロセッサは、中間値７２の仮数のビットの半分となるように中間値７２をゼロに丸め込む（すなわち、２４ビットになるように４８ビット仮数をゼロに丸め込む）ことにより上位中間値７８を決定することができる。プロセッサはまた、上位中間値７８により中間値７２を減算することにより下位中間値８０を決定することができる。したがって、上位中間値７８は上位部分７４をその仮数として含むことができ、下位中間値８０は下位部分７６をその仮数として含むことができる。中間値７２は上位中間値７８と下位中間値８０に分割されたので、下位中間値８０の指数値は、上位中間値７８の指数値に比べて２４だけ小さくなることができる。さらに、いくつかの例において、下位中間値の指数値は単精度浮動小数点フォーマットに関する指数値の有効レンジを超えてもよい。
【００３２】
[0037]プロセッサは、下位値８８を生成するためにまたは結果として生じる上位値８６を生成するために、オペランド６４と中間値７２の指数間の差異に少なくとも部分的に基づいて、プロセッサがオペランド６４を上位中間値７８または下位中間値に加算するか否かを決定することができる。浮動小数点演算において、２つの浮動小数点値が同じ指数を有する場合には、２つの浮動小数点値のどちらか一方をシフトせずに２つの浮動小数点値が一緒に加算されることができる。したがって、異なる指数を有する２つの浮動小数点値を加算することは、２つの浮動小数点値が同じ指数を有するように浮動小数点値の一方の仮数をシフトし、その結果生じる仮数を加算することを含むことができる。このため、プロセッサは、オペランド６４の仮数が上位中間値７８または下位中間値８０の指数と一致するようにオペランド６４の仮数および／または中間値７２の仮数の必要とされるシフト量に少なくとも部分的に基づいて上位中間値７８または下位中間値８０にオペランド６４を加算するかどうかを決定することができる。
【００３３】
[0038]いくつかの例において、プロセッサが上位値８６を生じるために上位中間値７８にオペランド６４を加算する場合、プロセッサは下位値８８を０．０に設定することができる。いくつかの他の例において、下位値８８を生じるためにプロセッサが下位中間値８０にオペランド６４を加算する場合、プロセッサは上位中間値７８の値に上位値８６を設定することができる。
【００３４】
[0039]上位値８６と下位値８８を生成することに応答して、プロセッサは、上位値８６を下位値８８に加算することができる。プロセッサは、オペランド６２、６４、および６６に対するエミュレートされたＦＭＡ演算の結果として生じる値９０を生成するために上位値８６と下位値８８の合計を正規化し、下位値８８と上位値８６の正規化された合計を最も近い偶数方向へ丸め込むことができる。
【００３５】
[0040]上述したように、プロセッサは、結果として生じる上位値８６または下位値８８を生成するために上位中間値７８または下位中間値８０にオペランド６４を加算するかどうかを、オペランド６４と中間値７２の指数間の差異に少なくとも部分的に基づいて決定することができる。図３は、中間値７２の指数とオペランド６４の指数間の差分が２より大きい場合で、かつ中間値７２とオペランド６４の符号が同じである場合の状況を例示するブロック図である。言い換えれば、オペランド６４の指数が中間値７２の指数に等しくなるように、オペランド６４の仮数７０は３ビット以上右シフトし、それに応じてオペランド６４の指数が３以上インクリメントされることができるようにオペランド６４の指数は、３以上中間値７２の指数よりも小さい。代替的に、図３に示される状況は、オペランド６４の符号なしの値が４で除算された中間値７２未満である場合として表されることができる。
【００３６】
[0041]図３に示されるように、中間値７２の指数とオペランド６４の指数との間の差分が２より大きいオペランド６４の例は、シナリオ９２、９４、９６、９８および１００を含むことができる。シナリオ９２において、中間値７２の指数とオペランド６４の指数は４８より大きいので、プロセッサは、４９ビット以上仮数７０を右方向にシフトしてオペランド６４の指数を４９以上インクリメントすることができ、それによりオペランド６４の指数は中間値７２の指数と同じ値になる。
【００３７】
[0042]シナリオ９４において、中間値７２の指数とオペランド６４の指数は正確に４８であり、それによりプロセッサは、仮数７０を正確に４８ビット右方向にシフトしてオペランド６４の指数を正確に４８だけインクリメントすることができ、それによりオペランド６４の指数は中間値７２の指数と同じ値になる。シナリオ９６において、中間値７２の指数とオペランド６４の指数は２４より大きく４８より小さいので、プロセッサは仮数７０を２５ビット以上４８ビット未満だけ右方向にシフトしてオペランド６４の指数を２５ビット以上４８ビット未満だけインクリメントすることができ、それによりオペランド６４の指数は中間値７２の指数と同じ値になる。
【００３８】
[0043]シナリオ９８において、中間値７２の指数とオペランド６４の指数は正確に２４であるので、プロセッサは、仮数７０を正確に２４ビットだけ右方向にシフトしてオペランド６４の指数を正確に２４ビットだけインクリメントすることができるので、オペランド６４の指数は中間値７２の指数と同じ値である。シナリオ１００において、中間値の７２の指数とオペランド６４の指数は２より大きく２４未満であるので、プロセッサは、仮数７０を３ビット以上右方向にシフトし、オペランド６４の指数を３以上で２４未満だけインクリメントすることができ、それによりオペランド６４の指数は中間値７２の指数と同じ値である。
【００３９】
[0044]図３に示されるシナリオ９２、９４、９６、９８および１００の各々において、融合された乗算−加算演算をエミュレートするために、プロセッサは、中間値７２とオペランド６４の符号が同じであるかどうかを決定することができる。代替的に、プロセッサは、中間値７２とオペランド６４の符号が同じであるかどうかを決定することができる。中間値７２とオペランド６４の符号が同じであると決定することに応答して、かつ中間値７２の指数とオペランド６４の指数の間の差分が２より大きいかまたはオペランド６４の値が４で除算した中間値７２未満であると決定したことに応答して、プロセッサは上位値８６を上位中間値７８に設定することができる。プロセッサはまた、オペランド６４を下位中間値８０に加算し、オペランド６４と中間値８０の合計を正規化し、オペランド６４と下位中間値８０の正規化された合計を最も近い奇数に丸め込み下位値８８を生成することができる。プロセッサは上位値８６と下位値８８を加算し、上位値と下位値８８の合計を正規化し、上位値８６と下位値８８の正規化された合計を最も近い偶数に丸め込みエミュレートされた融合された乗算−加算結果９０を生成することができる。
【００４０】
[0045]同様に、プロセッサは、融合された乗算−減算演算をエミュレートすることができる。融合された乗算―減算演算は中間値７２とオペランド６４の符号が異なる融合された乗算−加算であり得る。シナリオ９２、９４、９６、９８および１００において、プロセッサは、中間値７２とオペランド６４の符号が異なるかどうかを決定することができる。中間値７２とオペランド６４の符号が異なると決定したことに応答して、プロセッサは上位値８６を上位中間値７８に設定することができる。プロセッサはまた下位中間値８０からオペランド６４を減算し、下位中間値８０とオペランド６４の差分を正規化し、下位中間値８０とオペランド６４の正規化された差分を奇数に丸め込み下位値８８を生成することができる。プロセッサは上位値８６から下位値８８を減算し、上位値８６と下位値８８の差分を正規化し、上位値８６と下位値８８の正規化された合計を最も近い偶数に丸め込みエミュレートされた融合された乗算−減算結果９０を生成することができる。
【００４１】
[0046]図４は、中間値７２の指数とオペランド６４の指数との差分が２以下であるか、あるいはオペランド６４の指数が中間値７２の指数以上である場合に、中間値７２とオペランド６４の符号が同じである状況を例示するブロック図である。言い換えれば、オペランド６４の指数が２以下だけ中間値７２の指数よりも小さく、あるいはオペランド６４の指数が中間値７２の指数よりも大きい。オペランド６４の指数が中間値７２の指数に等しくなるように、オペランド６４の仮数７０は２回以下右にシフトされることができ、それに応じてオペランド６４の指数は、２を超えない値だけインクリメントされることができる。代替的に、図４に示される状況はオペランド６４の符号なしの値が４で除算された中間値７２以上である場合として表されることができる。
【００４２】
[0047]図４に示されるように、中間値７２の指数とオペランド６４の指数との差分が２以下である場合のオペランド６４の例はシナリオ１０２、１０４、１０６、１０８、１１０、１１２、１１４、および１１６を含むことができる。シナリオ１０２において、中間値７２の指数とオペランド６４の指数は正確に２であるので、プロセッサは、オペランド６４の指数は中間値７２の指数と同じ値になるようにオペランド６４の指数を正確に２だけインクリメントするために仮数７０を２ビットだけ右方向にシフトすることができる。
【００４３】
[0048]シナリオ１０４において、オペランド６４の指数は中間値７２の指数と同じ値であるように、オペランド６４の指数を正確に１だけインクリメントするためにプロセッサが仮数７０を１ビットだけ右方向にシフトすることができるように中間値７２の指数とオペランド６４の指数は正確に１である。
【００４４】
[0049]シナリオ１０６において、プロセッサが仮数７０をシフトする必要がないように中間値７２の指数はオペランド６４の指数と同じである。シナリオ１０８において、オペランド６４の指数が中間値７２の指数と同じ値であるように中間値７２の指数を正確に１だけインクリメントするためにプロセッサが中間値７２の仮数を正確に１ビットだけ右方向にシフトすることができるように、オペランド６４の指数は中間値７２の指数よりも正確に１だけ大きい。シナリオ１１０において、オペランド６４の指数が中間値７２の指数と同じ値であるように、中間値７２の指数を正確に２だけインクリメントするために中間値７２の仮数を正確に２ビットだけ右方向にシフトすることができるようにオペランド６４の指数は中間値７２の指数よりも正確に２だけ大きい。
【００４５】
[0050]シナリオ１１２において、オペランド６４の指数が中間値７２の指数と同じ値であるように中間値７２の指数を３以上２４未満だけインクリメントするためにプロセッサが中間値７２の仮数を３ビット以上２４ビット未満だけ右方向にシフトすることができるようにオペランド６４の指数は中間値７２の指数よりも大きい。シナリオ１１４において、オペランド６４の指数が中間値７２の指数と同じ値であるように中間値７２の指数を正確に２４だけインクリメントするためにプロセッサが中間値７２の仮数を正確に２４ビットだけ右方向にシフトすることができるように、オペランド６４の指数は中間値７２の指数よりも正確に２４だけ大きい。
【００４６】
[0051]シナリオ１１６において、オペランド６４の指数が中間値７２の指数と同じ値であるように中間値７２の指数を２５以上インクリメントするために中間値７２の仮数を２５ビット以上右方向にシフトすることができるようにオペランド６４の指数は中間値７２の指数よりも２５以上大きい。
【００４７】
[0052]図４に示されるシナリオ１０２、１０４、１０６、１０８、１１０、１１２、１１４および１１６の各々において、融合された乗算−加算演算をエミュレートするために、プロセッサは、中間値７２の符号とオペランド６４の符号が同じであるかどうかを決定することができる。プロセッサはまた、オペランド６４の指数が、中間値７２の指数よりも２を超えないだけ小さいか、等しいか、または大きいかを決定することができる。中間値７２の符号とオペランド６４の符号が同じであることに応答してさらにオペランド６４の指数が中間値７２の指数よりも２未満だけ小さいか、等しいか、または大きいかに応答してプロセッサは下位値８８を０．０に設定することができる。図４に示されるシナリオ１０２、１０４、１０６、１０８、１１０、１１２、１１４、および１１６に関してオペランド６４と中間値７２が同じ符号を有する場合、プロセッサは、オペランド６４と中間値７２の指数に関わらず下位値８８を０．０に設定することができる。プロセッサはまた上位値８６を生成するためにオペランド６４を上位中間値７８に加算し、オペランド６４と上位中間値７８の合計を正規化し、オペランド６４と上位中間値７８の正規化された合計を最も近い偶数に丸め込むことができる。この例において、プロセッサの乗算ステージは、それぞれガードビット７３、ラウンドビット７５およびスティッキービット７７を形成するために、上位部７４および下位部７６のＭＳＢ、第２ＭＳＢ、並びに残りのビットのＯＲを送信する。プロセッサは、上位値８６および下位値８８を加算し、上位値８６および下位値８８の合計を正規化し、および上位値８６と下位値８８の正規化された合計を最も近い偶数に丸め込み、エミュレートされた融合された乗算−加算結果９０を生成することができる。
【００４８】
[0053]同様に、図４に示されるシナリオ１０２、１０４、１０６、１０８、１１０、１１２、１１４および１１６において、プロセッサは、融合された乗算−減算演算をエミュレートすることができる。上述したように、融合された乗算-減算演算は、中間値７２の符号とオペランド６４の符号が異なる融合された乗算−加算であり得る。シナリオ１０２、１１０、１１２、１１４、および１１６において、プロセッサは下位値８８を０．０に設定することができる。シナリオ１０４、１０６、および１０８において、ＧＰＵは下位値８８を下位部７６の下位２２ビット（すなわち、[21:0]）に設定することができる。
【００４９】
[0054]シナリオ１０２、１０４、１０６に関して、プロセッサは上位値８６を生成するためにオペランド６４と上位中間値７８を加算し、上位中間値７８とオペランド６４の合計を正規化し、上位中間値７８とオペランド６４の正規化された合計を最も近い偶数に丸め込むことができる。上述したように、上位値８６を生成するために丸め込むことは、乗算ステージから生じるガードビット、ラウンドビットおよびスティッキービットに少なくとも部分的に基づくことができる。プロセッサはエミュレートされた融合された乗算−換算結果９０を生成するために上位値８６および下位値８８を加算し、上位値８６と下位値８８の合計を正規化し、上位値８６と下位値８８の正規化された合計を最も近い偶数に丸め込むことができる。
【００５０】
[0055]シナリオ１０８、１１０、１１２、１１４および１１６に関してオペランド６４の符号と中間値７２の符号が異なるとき、上位値８６を生成するためにプロセッサは下位中間値８０からのガードビット、ラウンドビットおよびスティッキービットを有する−上位中間値７８をオペランド６４と合計し、オペランド６４と上位中間値７８の合計を正規化し、オペランド６４と上位中間７８の正規化された合計を最も近い偶数に丸め込むことができる。プロセッサはエミュレートされた融合された乗算−加算結果９０を生成するために上位値８６と下位値８８を加算し、上位値８６と下位値８８の合計を正規化し、上位値８６と下位値８８の正規化された合計を最も近い偶数に丸め込むことができる。
【００５１】
[0056]図４に示されるシナリオ１０２、１０４、１０６、１０８、１１０、１１２、１１４および１１６の各々において、上位値８６を生成するためにオペランド６４と上位中間値７８の正規化された合計または差分を最も近い偶数に丸め込むことの結果が、オペランド６０および６２の積の正規化からの１つまたは複数のガードビット７３、ラウンドビット７５およびスティッキービット７７の値の１つまたは複数に少なくとも部分的に基づくことができるように、プロセッサは、中間値７２を生成するためにオペランド６０および６２の積を正規化することからガードビット７３、ラウンドビット７５およびスティッキービット７７を保存することができる。たとえば、シナリオ１０２、１０４、１０６において、上位値８６を生成するためにオペランド６４と上位中間値７８の正規化された合計または差分を最も近い偶数に丸め込むことは、上位中間値７８に関してそれぞれガードビット、ラウンドビットおよびスティッキービットとして動作するオペランド６０および６２の積の正規化からのガードビット７３、ラウンドビット７５およびスティッキービット７７に基づくことができる。
【００５２】
[0057]シナリオ１０８において、オペランド６０および６２の積の正規化からのガードビット７３の値はラウンドビットであり得、およびオペランド６０および６２の積を正規化することからのスティッキービット７７とオペランド６０および６２の積を正規化することからのラウンドビット７５のＯＲ演算からの結果は、スティッキービットとして動作することができる。７３のＬＳＢがガードビットになる。プロセッサは、これらのガードビット、ラウンドビットおよびスティッキービットに基づいて上位値８６を生成するためにオペランド６４と上位中間値７８の正規化された合計または差分を最も近い偶数に丸め込むことができる。
【００５３】
[0058]シナリオ１１０、１１２、１１４、および１１６において、オペランド６０および６２の積を正規化することからのスティッキービット７７とオペランド６０および６２の積を正規化することからのラウンドビット７５と、オペランド６０および６２の積を正規化することからのガードビット７３とのＯＲ演算の結果はスティッキービットとして作用する。プロセッサは、ガードビット、ラウンドビットおよびスティッキービットに基づいて上位値８６を生成するためにオペランド６４と上位中間値７８の正規化された合計を最も近い偶数に丸め込むことができる。
【００５４】
[0059]表２はエミュレートされた融合された乗算−加算およびエミュレートされた融合された乗算―減算の両方に関するシナリオ９２−１１６を要約する。
【００５５】
【表２】
2017530445.tif 000004
【００５６】
[0061]表２に示されるように、リストされたシナリオは、図３および図４に示されるシナリオ９２−１１６に対応する。上位値は、上位値８６を表すことができ下位値は下位値８８を表すことができる。”uh”は上位中間値７８を表し、”ul”は下位中間値８０を表し、”c”はオペランド６４を表すことができる。ＡＤＤ列は融合された乗算−加算に関する上位値８６および／または下位値８８の値を表すことができ、ＳＵＢ列は融合された乗算-減算に関する上位値８６および／または下位値８８の値を表すことができる。”{“シンボルは１または複数ビットの連結(concatenation)を表すことができ”|”シンボルは１または複数ビットの論理ＯＲを表すことができる。”g”, “r”、および”s”は、下位部７６の最上位ビットから来る中間値７２を正規化することから結果として生じる、それぞれガードビット７３、ラウンドビット７５およびスティッキービット７７を表すことができる。
【００５７】
[0062]シナリオ９６の場合、ul-cが負の値を生じる場合、プロセッサの乗算器は結果として生じた負の値を正規化することができないので、プロセッサは、２の補数の形態で結果として生じた負の値を表すことができる。シナリオ１０４および１０６の場合、(uh{ul(grs)}-cは非常に小さいので結果として生じる値は非正規数として表すことができる。例えば、結果として生じる値は丸め込みのステップの後で−１２６になる−１２７の指数値を有することができる。
【００５８】
[0063]シナリオ１１０、１１２、１１４、および１１６の場合、uhは２以上のビット数右にシフトされることができる。シフトされた値のビット１はラウンドビット７５として作用する。シフトされた値のビット０は(g|r|s)の結果とＯＲされスティッキービット７７を形成することができる。従って、シナリオ１１０、１１２、１１４および１１６において、uh(g|r|s)は、スティッキービット７７を形成するためにガードビット７３、ラウンドビット７５およびスティッキービット７７を、uhのＬＳＢとＯＲした結果をＯＲすることを表すことができる。
【００５９】
[0064]図５はこの開示の１つまたは複数の態様をインプリメントするように構成されることができる例示コンピューティングデバイスを図示するブロック図である。図５に示されるように、コンピューティングデバイス２０２は、これに限定されないがビデオデバイス、メディアプレイヤ、セットトップボックス、モバイル電話のようなワイヤレスハンドセットおよびいわゆるスマートフォン、パーソナルデジタルアシスタンツ（ＰＤＡｓ）、デスクトップコンピュータ、ラップトップコンピュータ、ゲームコンソール、ビデオカンファレンスユニット、タブレットコンピューティングデバイス、等を含むコンピューティングデイバスであり得る。図５の例において、コンピューティングデバイス２０２は、中央処理装置（ＣＰＵ）２０６、システムメモリ２１０、およびＧＰＵ２１２を含むことができる。コンピューティングデバイス２０２はまた、ディスプレイプロセッサ２１４、トランシーバモジュール２０３、ユーザインタフェース２０４およびディスプレイ２０８を含むことができる。トランシーバモジュール２０３およびディスプレイプロセッサ２１４は両方ともＣＰＵ２０６および／またはＧＰＵ２１２と同じ集積回路（ＩＣ）の一部であり得、ＣＰＵ２０６および／またはＧＰＵ２１２を含むＩＣまたは複数のＩＣ群の外部にあってもよいし、あるいはＣＰＵ２０６および／またはＧＰＵ２１２を含むＩＣの外部にあるＩＣ内に形成されることができる。
【００６０】
[0065]コンピューティングデバイス２０２は明瞭さのために図５に示されないさらなるモジュールまたはユニットを含んでいてもよい。例えば、コンピューティングデバイス２０２は、コンピューティングデバイス２０２がモバイルワイヤレス電話である例において電話通信を行うために、図５にはいずれも示されていないスピーカおよびマイクロフォンを含むことができ、あるいは、コンピューティングデバイス２０２がメディアプレイヤであるスピーカを含むことができる。コンピューティングデバイス２０２はまたビデオカメラを含むことができる。さらに、コンピューティングデバイス内に示される種々のモジュールおよびユニットはコンピューティングデバイス２０２のすべての例において必要ではないかもしれない。例えば、ユーザインタフェース２０４およびディスプレイ２０８は、コンピューティングデバイス２０２が、外部ユーザインタフェースまたはディスプレイとインタフェースするために備えられた他のデバイスまたはデスクトップコンピュータである例においてはコンピューティングデバイス２０２の外部にあってよい。
【００６１】
[0066]ユーザインタフェース２０４の例は、これらに限定されないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスを含む。ユーザインタフェース２０４はまたタッチスクリーンであり得、ディスプレイ２０８の一部として組み込まれてもよい。トランシーバモジュール２０３は、コンピューティングデバイス２０２と他のデバイスまたはネットワークとの間の無線または有線通信を可能にするための回路網を含むことができる。
【００６２】
[0067]プロセッサ２０６は、実行のためのコンピュータプログラムの命令群を処理するように構成された中央処理装置（ＣＰＵ）のようなマイクロプロセッサであることができる。プロセッサ２０６はコンピューティングデバイス２０２の動作を制御する汎用または特殊用途のプロセッサを含むことができる。ユーザはプロセッサ２０６に１つまたは複数のソフトウエアアプリケーションを実行させるためにコンピューティングデバイス２０２に入力を提供することができる。プロセッサ２０６上で実行するソフトウエアプリケーションは、例えば、オペレーティングシステム、ワードプロセッサアプリケーション、ｅメールアプリケーション、スプレッドシートアプリケーション、メディアプレイヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインタフェースアプリケーションまたは他のプログラムを含むことができる。さらに、プロセッサ２０６はＧＰＵ２１２の動作を制御するためのＧＰＵドライバ２２２を実行することができる。ユーザは、ユーザ入力インタフェース２０４を介してコンピューティングデバイス２０２に結合されたキーボード、マウス、マイクロフォン、タッチパッドまたは他の入力デバイスのような１つまたは複数の入力デバイス（図示せず）を介してコンピューティングデバイス２０２に入力を提供することができる。プロセッサ２０６はＦＭＡ演算をエミュレートするためにここに開示された技術のいずれかを実行するように構成されることができる。
【００６３】
[0068]プロセッサ２０６上で実行するソフトウエアアプリケーションはプロセッサ２０６に、ディスプレイ２０８にグラフィックデータのレンダリングをさせるように命令する１つまたは複数のグラフィックレンダリング命令を含むことができる。いくつかの例において、ソフトウエア命令は、例えば、Open Graphics Library (OpenGL（登録商標）)API、Open Graphics Library Embedded Systems (OpenGL ES) API、Direct3D API、X3D API、RenderMan API、WebGL API、またはその他の公のまたは独占所有権のある標準グラフィックＡＰＩのようなグラフィックアプリケーションプログラミングインタフェース（ＡＰＩ）に準拠することができる。他の例において、ソフトウエア命令は、Open Computing Language(Open CL) APIのような他のAPIsに準拠することができる。グラフィックレンダリング命令を処理するために、プロセッサ２０６は、ＧＰＵ２１２にグラフィックデータのレンダリングの一部またはすべてを実行させるためにＧＰＵ２１２（例えばＧＰＵドライバ２２２を介して）１つまたは複数のグラフィックレンダリングコマンドを発行することができる。いくつかの例において、レンダリングされるグラフィックデータは、たとえば、点、線、三角形、四角形、三角形片(triangle strips)等のグラフィックプリミティブ(graphic primitives)のリストを含むことができる。典型的に、arcsin、arctan、power等のような関数に関するコンパイラにより数学関数ライブラリが提供されることができる。これらの関数は有理多項式を用いてインプリメントされることができる。そのようなライブラリ関数に関するＦＭＡ命令を用いることは潜在的により高次の精度および実行スピードを提供することができる。
【００６４】
[0069]ＧＰＵ２１２はディスプレイ２０８に１つまたは複数のグラフィックプリミティブをレンダリングするためのグラフィック演算を実行するように構成されることができる。したがって、プロセッサ２０６上で実行中のソフトウエアアプリケーションの１つがグラフィック処理を必要とするとき、プロセッサ２０６はディスプレイ２０８にレンダリングするためのグラフィックコマンドとデータをＧＰＵ２１２に提供することができる。グラフィックデータは、例えば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報等を含むことができる。いくつかの例において、ＧＰＵ２１２は、プロセッサ２０６よりも複雑なグラフィック関連の演算のより効率的な処理を提供する高度並列構造で構築されることができる。例えば、ＧＰＵ２１２は、複数の頂点(vertices)またはピクセル上で並列に演算するように構成されたシェーダーユニット(shader units)のような複数の処理エレメントを含むことができる。ＧＰＵ２１２の高度に並列化した性質は、いくつかのインスタンスにおいて、ＧＰＵ２１２が、プロセッサ２０６を用いてディスプレイ２０８に直接シーンを描画するよりもより速くディスプレイ２０８上にグラフィック画像（例えば、ＧＵＩｓおよび２次元（２Ｄ）および／または３次元（３Ｄ）グラフィックシーン）を描画することを可能にする。
【００６５】
[0070]ＧＰＵ２１２は、いくつかのインスタンスにおいて、コンピューティングデバイス２０２のマザーボードに集積されることができる。他のインスタンスにおいて、ＧＰＵ２１２はコンピューティングデバイス２０２のマザーボード内の１つのポートにインストールされるグラフィックカード上に存在されてもよいし、あるいはさもなければコンピューティングデバイス２０２と同時に使用される(interoperate with)ように構成された周辺装置内に内蔵されてもよい。ＧＰＵ２１２は１つまたは複数のマイクロプロセッサ、特定用途集積回路（ＡＳＩＣｓ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡｓ）、デジタルシグナルプロセッサ（ＤＳＰｓ）、または他の等価な集積またはディスクリートロジック回路のような１つまたは複数のプロセッサを含むことができる。ＧＰＵ２１２はまた、１つまたは複数のプロセッサコアを含むことができるので、ＧＰＵ２１２はマルチコアプロセッサと呼ばれることができる。ＧＰＵ２１２はＦＭＡ演算をエミュレートするためにここに開示された技術のいずれかを実行するように構成されることができる。
【００６６】
[0071]ＧＰＵ２１２は、グラフィックメモリ２４０に直接結合されることができる。したがって、ＧＰＵ２１２はバスを用いずにグラフィックメモリ２４０に対してデータをリードおよびライトすることができる。言い換えれば、ＧＰＵ２１２はオフチップメモリ(off-chip memory)の代わりにローカルストレージを用いてローカルにデータを処理することができる。そのようなグラフィックメモリ２４０はオンチップメモリ(on-chip memory)と呼ばれることができる。これは、ＧＰＵ２１２が、重度のバストラフィックを経験する可能性がある、バスを介したデータをＧＰＵ２１２がリードおよびライトする必要性を無くすことにより、より効率的な方法で動作することを可能にする。しかしながら、いくつかのインスタンスにおいて、ＧＰＵ２１２は別個のメモリを含むことはできないが、その代わりに、バスを介してシステムメモリ２１０を利用することができる。グラフィックメモリ２４０は、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的に消去可能なプログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体または光学ストレージ媒体のような１つまたは複数の揮発性または不揮発性メモリまたはストレージデバイスを含むことができる。
【００６７】
[0072]いくつかの例において、ＧＰＵ２１２はシステムメモリ２１０に完全に形成された画像を記憶することができる。ディスプレイプロセッサ２１４はシステムメモリ２１０から画像を検索してディスプレイ２０８のピクセルに画像を表示するために発光させる値を出力する。ディスプレイ２０８はＧＰＵ２１２により発生された画像コンテンツを表示するコンピューティングデバイス２０２のディスプレイ。ディスプレイ２０８は液晶ディスプレイ（ＬＣＤ）、有機発行ダイオードディスプレイ（ＯＬＥＤ）、陰極線管（ＣＲＴ）ディスプレイ、プラズマディスプレイ、または他のタイプのディスプレイデバイスであり得る。
【００６８】
[0073]ＧＰＵ２１２は乗算−加算ユニット２２４を含むことができ、それは非融合乗算−加算演算を行うように構成されたデジタル回路であり得る。乗算−加算ユニット２２４は、非融合乗算−加算演算を行うのに必要な浮動小数点算術論理演算を行うためのデジタル回路、ハードウエア乗算器、加算器、ハードウエアロジック、およびその他の類似物を含むことができる。ＧＰＵ２１２はＦＭＡ演算をエミュレートするために乗算−加算ユニット２２４を利用することができる。ＧＰＵ２１２はまたＦＭＡ演算をエミュレートするために乗算−加算ユニット２２４を支援するために浮動小数点数の丸め込み、シフト、および正規化を行うためのハードウエアのようなさらなるハードウエアを含むことができる。いくつかの例において、プロセッサ２０６はまた、ここに開示された技術に従ってＦＭＡ演算をエミュレートするように構成されることができるさらなるハードウエアおよび乗算−加算ユニット２２４を含むことができる。
【００６９】
[0074]いくつかの例において、少なくとも乗算−加算ユニット２２４を使用するプロセッサ２０４またはＧＰＵ２１２は、第１オペランド、第２オペランドおよび第３オペランドに関するＦＭＡ演算をエミュレートするように構成されることができる。ＦＭＡ演算をエミュレートするために、プロセッサ２０６またはＧＰＵ２１２は、第１オペランドを第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定し、上位中間値または下位中間値の少なくとも１つを決定し、ここにおいて、上位中間値を決定することは特定のビット数だけ中間値をゼロ方向へ丸め込むことを備え、下位中間値を決定することは上位中間値により中間値を減算することを備え、上位中間値により中間値を減算することを備え、上位中間値または下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位中間値と下位中間値を決定し、および上位値および下位値を加算することにより第１オペランド、第２オペランドおよび第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定することができる。
【００７０】
[0075]図６はＦＭＡ演算をエミュレートするための例示処理を示すフローチャートである。図６に示されるように、プロセスは、第１オペランドを第２オペランドと乗算することに少なくとも部分的に基づいて中間値を、プロセッサ２０６またはＧＰＵ２１２により決定することを含むことができる（６０２）。
【００７１】
[0076]いくつかの例において、第１オペランド、第２オペランドおよび第３オペランドは、３２ビット浮動小数点数、中間値の仮数は４８ビットを備え、指定ビット数は２４ビットを備える。
【００７２】
[0077]プロセスはさらに、上位中間値または下位中間値の少なくとも１つをプロセッサ２０６またはＧＰＵ２１２により決定することを含むことができ、ここにおいて、上位中間値を決定することは指定ビット数だけ中間値をゼロ方向へ丸め込むことを備え、下位中間値を決定することは上位中間値により中間値を減算することを備える（６０４）。いくつかの例において、上位中間値または下位中間値の少なくとも１つを決定することはさらに上位中間値を決定することを含み、中間値の指数が指定されたしきい値を超える値だけ第３オペランドの指数よりも大きいことに応答して下位中間値を決定することを備える。
【００７３】
[0078]プロセスはさらに第３オペランドを上位中間値または下位中間値の１つに加算することに少なくとも部分的に基づいて上位中間値と下位中間値をプロセッサ２０６またはＧＰＵ２１２により決定することを含むことができる（６０６）。
【００７４】
[0079]いくつかの例において、上位中間値または下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位中間値および下位中間値をプロセッサ２０６またはＧＰＵ２１２により決定することは、中間値の符号が第３オペランドの符号と同じであることに応答して、および中間値の指数が第３オペランドの指数よりも指定ビット数を超えて大きいことに応答して：プロセッサ２０６またはＧＰＵ２１２により、上位値を上位中間値に設定し、プロセッサ２０６またはＧＰＵ２１２により下位中間値と第３オペランドの合計を最も近い奇数に丸め込むことにより下位値を決定することを含むことができる。いつかの例において、指定されたしきい値は、指数差が１または０の時キャンセル(cancellation)が起こり得るので、２であることができる。
【００７５】
[0080]いくつかの例において、第３オペランドを上位中間値または下位中間値に加算することに少なくとも部分的に基づいて上位中間値と下位中間値をプロセッサ２０６またはＧＰＵ２１２により決定することは、中間値の符号が第３オペランドの符号と同じであることに応答して、および中間値の指数が第３オペランドの指数よりも指定されたしきい値未満だけ大きいかあるいは、第３オペランドの指数以下であることに応答して、プロセッサ２０６またはＧＰＵ２１２により、上位中間値と第３オペランドの合計を最も近い偶数に丸め込むことにより上位値を決定し、およびプロセッサ２０６およびＧＰＵ２１２により下位値を０．０に設定することを含むことができる。いくつかの例において、指定されたしきい値は２であり得る。いくつかの例において、中間値を決定することはプロセッサ２０６またはＧＰＵ２１２により第１オペランドと第３オペランドの積を正規化することを含み、上位中間値と第３オペランドの合計を最も近い偶数に丸め込むことはプロセッサ２０６またはＧＰＵ２１２により、中間値を正規することから生じるガードビット、ラウンドビットおよびスティッキービットの１つまたは複数に少なくとも部分的に基づいて上位中間値および第３オペランドの合計を最も近い偶数に丸め込むことを含むことができる。
【００７６】
[0081]いくつかの例において、第３オペランドを上位中間値または下位中間値の１つに加算することに少なくとも部分的に基づいて上位中間値と下位中間値を決定することは、積の符号が第３オペランドの符号と異なることに応答して、および中間値の指数が第３オペランドの指数よりも指定されたしきい値だけ大きいことに応答して：プロセッサ２０６またはＧＰＵ２１２により上位値を上位中間値に設定し、プロセッサ２０６またはＧＰＵ２１２により下位中間値と第３オペランドの合計を最も近い奇数に丸め込むことにより下位値を決定することを含むことができる。
【００７７】
[0082]プロセスはさらに、プロセッサ２０６またはＧＰＵ２１２により、上位値および下位値を加算することにより第１オペランド、第２オペランド、および第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定することを含むことができる（６０８）。
【００７８】
[0083]いくつかの例において、第１オペランド、第２オペランドおよび第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定することは、さらにプロセッサ２０６またはＧＰＵ２１２により、上位値と下位値の合計を正規化すること、およびプロセッサ２０６またはＧＰＵ２１２により上位値と下位値の正規化された合計を偶数に丸め込むことを含むことができる。
【００７９】
[0084]本開示は、単精度浮動所数点数に関するＦＭＡ演算をエミュレートする技術を説明するけれども、ここに説明される技術は、半精度浮動小数点数、倍精度浮動小数点数、任意の他のサイズの浮動小数点数、ならびに任意の他の適用可能な浮動所数点フォーマットで表された浮動小数点数にも等しく適用可能であることが理解されるべきである。
【００８０】
[0085]１つまたは複数の例において、記載された機能はハードウエア、ソフトウエア、ファームウエアまたはそれらのいずれかの組み合わせでインプリメントされることができる。ソフトウエアでインプリメントされる場合、機能はコンピュータ可読媒体上の１つまたは複数の命令またはコードとして記憶されあるいは送信されることができる。コンピュータ可読媒体は、１つの場所から他の場所へコンピュータプログラムの転送を容易にする任意の媒体を含むコンピュータデータ記憶媒体または通信媒体を含むことができる。データ記憶媒体は、この開示に記載された技術のインプリメンテーションに関する命令、コードおよび／またはデータ構造を検索するために１つまたは複数のコンピュータまたは１つまたは複数のプロセッサによりアクセスされることができる任意の利用可能な媒体であり得る。例として、これに限定されないが、そのようなコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいはコンピュータによりアクセスされることができ、命令またはデータ構造の形態で所望のプログラムコードを搬送または記憶するために使用されることができる任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に称することができる。例えば、ソフトウエアが、ウエブサイト、サーバ、または同軸ケーブル、ファイバ光ケーブル、ツイストペア、デジタル加入者線（ＤＳＬ）、または赤外線、無線、およびマイクロ波のような無線技術から送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、ＤＳＬ、または赤外線、無線およびマイクロ波のような無線技術は媒体の定義に含まれる。ここで使用されるディスク（disk）およびディスク（disc）はコンパクトディスク（ＣＤ）、レーザディスク（登録商標）、光学ディスク、デジタルバーサタイルディスク（ＤＶＤ）、フロッピ（登録商標）ディスクおよびブルーレイディスクを含む。この場合、ディスク（disks）は通常データを磁気的に再生し、一方、ディスク（discs）はデータをレーザを用いて光学的に再生する。上述の組み合わせもコンピュータ可読媒体の範囲内に含まれるべきである。
【００８１】
[0086]コードは、１つまたは複数のデジタルシグナルプロセッサ(DSPs)、汎用マイクロプロセッサ、特定用途集積回路（ＡＳＩＣｓ）、フィールドプログラマブルロジックアレイ（ＦＰＧＡｓ）、または他の等価な集積またはディスクリートロジック回路網のような１つまたは複数のプロセッサにより実行されることができる。したがって、ここで使用される「プロセッサ」および「処理ユニット」という用語は上述した構造のいずれかまたはここに記載された技術のインプリメンテーションに適した他のいずれかの構造に言及することができる。さらに、いくつかの態様において、ここに記載された機能性は、符号化および復号するために構成されるか、あるいは結合されたコーデックに内蔵された、専用ハードウエアおよび／またはソフトウエアモジュール内に備えられることができる。
【００８２】
[0087]本開示の技術は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣｓのセット（すなわち、チップセット）を含む多種多様のデバイスまたは装置内にインプリメントされることができる。種々のコンポーネント、モジュール、またはユニットは、開示された技術を実行するように構成されたデバイスの機能的観点を強調するために本開示において記載されているが、異なるハードウエアユニットによる実現を必ずしも必要としない。むしろ、上述したように、種々のユニットは、適切なソフトウエアおよび／またはファームウエアと一緒に、上述した１つまたは複数のプロセッサを含む相互動作するハードウエアユニットの集合により提供されるかまたはコーデックハードウエアユニット内に結合されることができる。
【００８３】
[0088]種々の例について記載した。これらの例および他の例は、以下のクレームの範囲内にある。
【図１】
2017530445.tif 000005
【図２】
2017530445.tif 000006
【図３】
2017530445.tif 000007
【図４】
2017530445.tif 000008
【図５】
2017530445.tif 000009
【図６】
2017530445.tif 000010
【手続補正書】
【提出日】平成29年5月1日(2017.5.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１オペランド、第２オペランド、および第３オペランドに関する融合された乗算−加算演算をエミュレートする方法において、
少なくとも１つのプロセッサにより、前記第１オペランドを前記第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定することと、
前記少なくとも１つのプロセッサにより、上位中間値または下位中間値の少なくとも１つを決定することと、ここにおいて、前記上位中間値を決定することは、指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、前記下位中間値を決定することは、前記上位中間値だけ前記中間値を減算することを備える、
前記少なくとも１つのプロセッサにより、前記第３オペランドと前記中間値の指数間の差異に少なくとも部分的に基づいて前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することを含む、上位値および下位値を決定することと、および
前記少なくとも１つのプロセッサにより、前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することと、
を備える、方法。
【請求項２】
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、
前記少なくとも１つのプロセッサにより、前記上位値を前記上位中間値に設定することと、
前記少なくとも１つのプロセッサにより、前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を備える、請求項１の方法。
【請求項３】
前記指定されたしきい値は２である、請求項２の方法。
【請求項４】
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記少なくとも１つのプロセッサにより、前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定することと、
前記少なくとも１つのプロセッサにより、前記下位値を０．０に設定することと
を備える、請求項１の方法。
【請求項５】
前記指定されたしきい値は２である、請求項４の方法。
【請求項６】
前記中間値を決定することは、前記少なくとも１つのプロセッサにより、前記第１オペランドと前記第２オペランドの積を正規化することを備え、
前記上位中間値と前記第３オペランドの前記合計を最も近い偶数に丸め込むことは、前記中間値を正規化することから生じるガードビット、ラウンドビット、およびスティッキービットの１つまたは複数に少なくとも部分的に基づいて、前記上位中間値と前記第３オペランドの前記合計を最も近い偶数に丸め込むことを備える、請求項４の方法。
【請求項７】
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定することは、
積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値だけ大きいことに応答して、
前記少なくとも１つのプロセッサにより、前記上位値を前記上位中間値に設定することと、および
前記少なくとも１つのプロセッサにより、前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を備える、請求項１の方法。
【請求項８】
前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することは、
前記少なくとも１つのプロセッサにより、前記上位値と前記下位値の合計を正規化することと、
前記少なくとも１つのプロセッサにより、前記上位値と前記下位値の前記正規化された合計を偶数に丸め込むことと
をさらに備える、請求項１の方法。
【請求項９】
前記第１オペランド、前記第２オペランド、および前記第３オペランドは３２ビット浮動小数点数を備え、
前記中間値の仮数は４８ビットを備え、および
前記指定されたビット数は２４ビットを備える、請求項１の方法。
【請求項１０】
上位中間値または下位中間値の少なくとも１つを決定することは、
前記上位中間値を決定することと、
前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、前記下位中間値を決定することと
をさらに備える、請求項１の方法。
【請求項１１】
第１オペランド、第２オペランド、および第３オペランドに関する融合された乗算−加算演算をエミュレートするための装置において、
前記第１オペランド、前記第２オペランド、および前記第３オペランドを記憶するように構成されたメモリと、
前記第１オペランドを前記第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定することと、
上位中間値または下位中間値の少なくとも１つを決定することと、ここにおいて、前記上位中間値を決定することは、指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、前記下位中間値を決定することは、前記上位中間値だけ前記中間値を減算することを備える、
前記第３オペランドと前記中間値の指数間の差異に少なくとも部分的に基づいて前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することを含む、上位値および下位値を決定することと、
前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することと、
を行うように構成された少なくとも１つのプロセッサと
を備える、装置。
【請求項１２】
前記少なくとも１つのプロセッサは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと、
を行うようにさらに構成される、請求項１１の装置。
【請求項１３】
前記指定されたしきい値は２である、請求項１１の装置。
【請求項１４】
前記少なくとも１つのプロセッサは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定することと、
前記下位値を０．０に設定することと
を行うようにさらに構成される、請求項１１の装置。
【請求項１５】
前記指定されたしきい値は２である、請求項１４の装置。
【請求項１６】
前記少なくとも１つのプロセッサは、
前記第１オペランドと前記第２オペランドの積を正規化することと、
前記中間値を正規化することから生じるガードビット、ラウンドビットおよびスティッキービットの１つまたは複数に少なくとも部分的に基づいて、前記上位中間値と前記第３オペランドの前記合計を最も近い偶数に丸め込むことと
を行うようにさらに構成される、請求項１４の装置。
【請求項１７】
前記少なくとも１つのプロセッサは、
積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、および
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと、
を行うようにさらに構成される、請求項１１の装置。
【請求項１８】
前記少なくとも１つのプロセッサは、
前記上位値と前記下位値の合計を正規化することと、
前記上位値と前記下位値の前記正規化された合計を偶数に丸め込むことと、
を行うようにさらに構成される、請求項１１の装置。
【請求項１９】
前記第１オペランド、前記第２オペランド、および前記第３オペランドは３２ビット浮動小数点数を備え、
前記中間値の仮数は４８ビットを備え、および
前記指定されたビット数は２４ビットを備える、請求項１１の装置。
【請求項２０】
前記少なくとも１つのプロセッサは、
前記上位中間値を決定することと、
前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、前記下位中間値を決定することと、
を行うようにさらに構成される、請求項１１の装置。
【請求項２１】
第１オペランド、第２オペランド、および第３オペランドに関する融合された乗算−加算演算をエミュレートするための装置において、
少なくとも１つのプロセッサにより、前記第１オペランドを前記第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定する手段と、
前記少なくとも１つのプロセッサにより、上位中間値または下位中間値の少なくとも１つを決定する手段と、ここにおいて、前記上位中間値を決定する前記手段は、指定されたビット数だけ前記中間値をゼロ方向へ丸め込む手段を備え、前記下位中間値を決定する前記手段は、前記上位中間値だけ前記中間値を減算する手段を備える、
前記少なくとも１つのプロセッサにより、前記第３オペランドと前記中間値の指数間の差異に少なくとも部分的に基づいて前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することを含む、上位値および下位値を決定する手段と、および
前記少なくとも１つのプロセッサにより、前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定する手段と、
を備える、装置。
【請求項２２】
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定する前記手段は、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を行う手段を備える、請求項２１の装置。
【請求項２３】
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定する前記手段は、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定することと、
前記下位値を０．０に設定することと
を行う手段を備える、請求項２１の装置。
【請求項２４】
前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定する前記手段は、
積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を行う手段を備える、請求項２１の装置。
【請求項２５】
前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定する前記手段は、
前記上位値と前記下位値の合計を正規化する手段と、
前記上位値と前記下位値の前記正規化された合計を偶数に丸め込む手段と
をさらに備える、請求項２１の装置。
【請求項２６】
実行されると、１つまたは複数のプログラマブルプロセッサに、
第１オペランドを第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定させ、
上位中間値または下位中間値の少なくとも１つを決定させ、ここにおいて、前記上位中間値を決定することは、指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、前記下位中間値を決定することは、前記上位中間値だけ前記中間値を減算することを備える、
第３オペランドと前記中間値の指数間の差異に少なくとも部分的に基づいて、前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することを含む、上位値および下位値を決定させ、
前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定させる
命令を記憶するコンピュータ読取可能記憶媒体。
【請求項２７】
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を備える、請求項２６のコンピュータ読取可能記憶媒体。
【請求項２８】
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定することと、
前記下位値を０．０に決定することと
を備える、請求項２６のコンピュータ読取可能記憶媒体。
【請求項２９】
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定することは、
積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を備える、請求項２６のコンピュータ読取可能記憶媒体。
【請求項３０】
前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することは、
前記上位値と前記下位値の合計を決定することと、
前記上位値と前記下位値の正規化された合計を偶数に決定することと
をさらに備える、請求項２６のコンピュータ読取可能記憶媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００２６
【補正方法】変更
【補正の内容】
【００２６】
[0031]本開示の態様に従って、プロセッサは、融合されない乗算−加算演算よりも精度の良いＦＭＡ演算をエミュレートするために融合されない乗算−加算演算を計算するために使用されるのと同じ既存のハードウエアを使用することができる。ＦＭＡ演算をエミュレートするために既存の加算器ハードウエアを利用することにより、プロセッサは、単一精度浮動小数点数に関するＦＭＡ演算を行うためにさらなる５１ビット加算器を提供する必要はないかもしれない。少なくとも１つのプロセッサは、第１のオペランドと第２のオペランドの乗算に少なくとも部分的に基づいて中間値を決定し、上位中間値または下位中間値の少なくとも１つを決定し、ここにおいて上位中間値を決定することは指定されたビット数だけ中間値をゼロ方向へ丸め込むことを備え、下位中間値を決定することは上位中間値だけ下位中間値を減算することを備え、上位中間値または下位中間値の１つに第３オペランドの適切なビットを加算／減算することに少なくとも部分的に基づいて上位値および下位値を決定し、および上位値および下位値を加算することにより第１オペランド、第２オペランドおよび第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定するように構成されることができる。プロセッサが第３オペランドを加算するか減算するかは、中間積および第３オペランドの符号が同じか異なるかに少なくとも部分的に依存することができる。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００６９
【補正方法】変更
【補正の内容】
【００６９】
[0074]いくつかの例において、少なくとも乗算−加算ユニット２２４を使用するプロセッサ２０４またはＧＰＵ２１２は、第１オペランド、第２オペランドおよび第３オペランドに関するＦＭＡ演算をエミュレートするように構成されることができる。ＦＭＡ演算をエミュレートするために、プロセッサ２０６またはＧＰＵ２１２は、第１オペランドを第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定し、上位中間値または下位中間値の少なくとも１つを決定し、ここにおいて、上位中間値を決定することは特定のビット数だけ中間値をゼロ方向へ丸め込むことを備え、下位中間値を決定することは上位中間値だけ中間値を減算することを備え、上位中間値により中間値を減算することを備え、上位中間値または下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位中間値と下位中間値を決定し、および上位値および下位値を加算することにより第１オペランド、第２オペランドおよび第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定することができる。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００７２
【補正方法】変更
【補正の内容】
【００７２】
[0077]プロセスはさらに、上位中間値または下位中間値の少なくとも１つをプロセッサ２０６またはＧＰＵ２１２により決定することを含むことができ、ここにおいて、上位中間値を決定することは指定ビット数だけ中間値をゼロ方向へ丸め込むことを備え、下位中間値を決定することは上位中間値だけ中間値を減算することを備える（６０４）。いくつかの例において、上位中間値または下位中間値の少なくとも１つを決定することはさらに上位中間値を決定することを含み、中間値の指数が指定されたしきい値を超える値だけ第３オペランドの指数よりも大きいことに応答して下位中間値を決定することを備える。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００８３
【補正方法】変更
【補正の内容】
【００８３】
[0088]種々の例について記載した。これらの例および他の例は、以下のクレームの範囲内にある。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
第１オペランド、第２オペランドおよび第３オペランドに関する融合乗算−加算演算をエミュレートする方法において、
少なくとも１つのプロセッサにより、第１のオペランドを第２のオペランドと乗算することに少なくとも部分的に基づいて中間値を決定することと、
前記少なくとも１つのプロセッサにより、上位中間値または下位中間値の少なくとも１つを決定することと、ここにおいて、前記上位中間値を決定することは、指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、前記下位中間値を決定することは、前記中間値を前記上位中間値により減算することを備える、
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することと、および
前記少なくとも１つのプロセッサにより、前記上位値および前記下位値を加算することにより前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することと、を備える方法。
［Ｃ２］
前記少なくとも１つのプロセッサにより前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が、指定されたしきい値を上回る値だけ前記第３オペランドの指数より大きいことに応答して、
前記少なくとも１つのプロセッサにより前記上位値を前記上位中間値に設定することと、および
前記少なくとも１つのプロセッサにより、前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することを備える、Ｃ１の方法。
［Ｃ３］
前記指定されたしきい値は２であるＣ２の方法。
［Ｃ４］
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記少なくとも１つのプロセッサにより、前記上位中間値と前記第３オペランドの合計を最も近くの偶数値に丸め込むことにより前記上位値を決定することと、
前記少なくとも１つのプロセッサにより前記下位値を0.0に設定することと、を備える、Ｃ１の方法。
［Ｃ５］
前記指定されたしきい値は２である、Ｃ４の方法。
［Ｃ６］
前記中間値を決定することは、前記少なくとも１つのプロセッサにより、前記第１オペランドと前記第２オペランドの積を正規化することと、および
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことは、前記中間値を正規化することから得られるスティッキービット(sticky bit)、ラウンドビット(round bit)、およびガードビット(guard bit)の１つまたは複数に少なくとも部分的に基づいて前記上位中間値と前記第３オペランドの前記合計を最も近い偶数に丸め込むことを備える、Ｃ４の方法。
［Ｃ７］
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定することは、
前記積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値だけ大きいことに応答して、前記少なくとも１つのプロセッサにより前記中間値を前記上位中間値に設定することと、および
前記少なくとも１つのプロセッサにより、前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと、を備えた、Ｃ１の方法。
［Ｃ８］
前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することは、
前記少なくとも１つのプロセッサにより、前記上位値と前記下位値の合計を正規化することと、および
前記少なくとも１つのプロセッサにより、前記上位値および前記下位値の正規化された合計を偶数に丸め込むことと、を備えた、Ｃ１の方法。
［Ｃ９］
前記第１オペランド、前記第２オペランド、および前記第３オペランドは３２ビット浮動小数点数を備え、
前記中間値の仮数は４８ビットを備え、および
前記指定されたビット数は２４ビットを備える、Ｃ１の方法。
［Ｃ１０］
上位中間値または下位中間値の少なくとも１つを決定することは、さらに、前記上位中間値を決定することと、および
前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値を上回るだけ大きいことに応答して前記下位中間値を決定することを備える、Ｃ１の方法。
［Ｃ１１］
第１オペランド、第２オペランド、および第３オペランドに関する融合された乗算−加算演算をエミュレートするための装置において、
前記第１オペランド、前記第２オペランド、および前記第３オペランドを記憶するように構成されたメモリと、および
前記第１オペランドを前記第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定し、
上位中間値または下位中間値の少なくとも１つを決定し、ここにおいて、前記上位中間値を決定することは、指定されたビット数だけ前記中間値をゼロ方向へ丸めこむことを備え、前記下位中間値を決定することは、前記上位中間値だけ前記中間値を減算することを備える、
前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定し、
前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定する、ように構成された少なくとも１つのプロセッサと、を備えた装置。
［Ｃ１２］
前記少なくとも１つのプロセッサは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、
前記上位値を前記上位中間値に設定し、および
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定する、ようにさらに構成される、Ｃ１１の装置。
［Ｃ１３］
前記指定されたしきい値は２である、Ｃ１１の装置。
［Ｃ１４］
前記少なくとも１つのプロセッサは、さらに、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいことに応答して、または前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定し、および
前記下位値を0.0に設定する、ように構成される、Ｃ１１の装置。
［Ｃ１５］
前記指定されたしきい値は２である、Ｃ１４の装置。
［Ｃ１６］
前記少なくとも１つのプロセッサはさらに、
前記第１オペランドおよび前記第２オペランドの積を正規化し、
前記中間値を正規化することから生じるガードビット、ラウンドビットおよびスティッキービットの１つまたは複数に少なくとも部分的に基づいて前記上位中間値および前記第３オペランドの合計を最も近い偶数に丸め込む、ように構成される、Ｃ１４の装置。
［Ｃ１７］
前記少なくとも１つのプロセッサはさらに、
前記積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定し、および
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定する、ようにさらに構成される、Ｃ１１の装置。
［Ｃ１８］
前記少なくとも１つのプロセッサはさらに、
前記上位値と前記下位値の合計を正規化し、および
前記上位値と前記下位値の前記正規化された合計を偶数に丸め込む、ように構成される、Ｃ１１の装置。
［Ｃ１９］
前記第１オペランド、前記第２オペランド、および前記第３オペランドは３２ビット浮動小数点数を備え、
前記中間値の仮数は４８ビットを備え、および
前記指定されたビット数は２４ビットを備える、Ｃ１１の装置。
［Ｃ２０］
前記少なくとも１つのプロセッサはさらに、
前記上位中間値を決定し、および
前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、前記下位中間値を決定する、ようにさらに構成される、Ｃ１１の装置。
［Ｃ２１］
第１オペランド、第２オペランド、および第３オペランドに関する融合された乗算−加算演算をエミュレートするための装置において、
少なくとも１つのプロセッサにより、第１オペランドを第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定する手段と、
前記少なくとも１つのプロセッサにより、上位中間値または下位中間値の少なくとも１つを決定する手段と、ここにおいて、前記上位中間値を決定する手段は、指定ビット数だけ前記中間値をゼロ方向へ丸め込む手段を備え、前記下位中間値を決定する手段は、前記中間値を前記上位中間値により減算する手段を備える、
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値と下位値を決定する手段と、および
前記少なくとも１つのプロセッサにより前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定する手段と、を備えた装置。
［Ｃ２２］
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定する手段は、前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値を上まわるだけ大きいことに応答して、
前記上位値を前記上位中間値に設定し、および
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定する手段を備える、Ｃ２１の装置。
［Ｃ２３］
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定する前記手段は、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値および前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定し、および
前記下位値を0.0に設定する手段を備えた、Ｃ２１の装置。
［Ｃ２４］
前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定する手段は、
前記積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定し、および前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定する手段を備えた、Ｃ２１の装置。
［Ｃ２５］
前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定する前記手段は、さらに、
前記上位値と前記下位値の合計を正規化する手段と、および
前記上位値と前記下位値の正規化された合計を偶数に丸め込む手段とを備えた、Ｃ２１の装置。
［Ｃ２６］
実行されると、１つまたは複数のプログラマブルプロセッサに、
第１オペランドを第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定させ、
上位中間値または下位中間値の少なくとも１つを決定させ、ここにおいて、前記上位中間値を決定することは指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、前記下位中間値を決定することは、前記上位中間値により前記中間値を減算することを備える、
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定させ、
前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランドおよび前記第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定させる、命令を記憶するコンピュータ読取可能記憶媒体。
［Ｃ２７］
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値と下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値を上回るだけ大きいことに応答して、
前記上位値を前記上位中間値に設定すること、および
前記下位中間値および前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することを備える、Ｃ２６のコンピュータ読み取り可能記憶媒体。
［Ｃ２８］
前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて上位値と下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定すること、および
前記下位値を0.0に決定することを備える、Ｃ２６のコンピュータ読取可能記憶媒体。
［Ｃ２９］
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定することは、
前記積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、および
前記下位中間値および前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと、を備える、Ｃ２６のコンピュータ読取可能記憶媒体。
［Ｃ３０］
前記第１オペランド、前記第２オペランド及び前記第３オペランドに関するエミュレートされた融合された乗算−加算結果を決定することは、さらに、
前記上位値及び前記下位値の合計を決定することと、および
前記上位値および前記下位値の前記正規化された合計を偶数に決定することと、を備える、Ｃ２６のコンピュータ読取可能記憶媒体。
【手続補正書】
【提出日】平成29年6月12日(2017.6.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１オペランド、第２オペランド、および第３オペランドに関する融合された乗算−加算演算をエミュレートする方法において、
少なくとも１つのプロセッサにより、前記第１オペランドを前記第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定することと、
前記少なくとも１つのプロセッサにより、上位中間値または下位中間値の少なくとも１つを決定することと、ここにおいて、前記上位中間値を決定することは、指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、前記下位中間値を決定することは、前記上位中間値だけ前記中間値を減算することを備える、
前記少なくとも１つのプロセッサにより、前記第３オペランドと前記中間値の指数間の差異に少なくとも部分的に基づいて前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することを含む、上位値および下位値を決定することと、および
前記少なくとも１つのプロセッサにより、前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することと、
を備える、方法。
【請求項２】
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、
前記少なくとも１つのプロセッサにより、前記上位値を前記上位中間値に設定することと、
前記少なくとも１つのプロセッサにより、前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を備える、請求項１の方法。
【請求項３】
前記指定されたしきい値は２である、請求項２の方法。
【請求項４】
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記少なくとも１つのプロセッサにより、前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定することと、
前記少なくとも１つのプロセッサにより、前記下位値を０．０に設定することと
を備える、請求項１の方法。
【請求項５】
前記指定されたしきい値は２である、請求項４の方法。
【請求項６】
前記中間値を決定することは、前記少なくとも１つのプロセッサにより、前記第１オペランドと前記第２オペランドの積を正規化することを備え、
前記上位中間値と前記第３オペランドの前記合計を最も近い偶数に丸め込むことは、前記少なくとも１つのプロセッサにより、前記中間値を正規化することから生じるガードビット、ラウンドビット、およびスティッキービットの１つまたは複数に少なくとも部分的に基づいて、前記上位中間値と前記第３オペランドの前記合計を最も近い偶数に丸め込むことを備える、請求項４の方法。
【請求項７】
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定することは、
積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値だけ大きいことに応答して、
前記少なくとも１つのプロセッサにより、前記上位値を前記上位中間値に設定することと、および
前記少なくとも１つのプロセッサにより、前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を備える、請求項１の方法。
【請求項８】
前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することは、
前記少なくとも１つのプロセッサにより、前記上位値と前記下位値の合計を正規化することと、
前記少なくとも１つのプロセッサにより、前記上位値と前記下位値の前記正規化された合計を偶数に丸め込むことと
をさらに備える、請求項１の方法。
【請求項９】
前記第１オペランド、前記第２オペランド、および前記第３オペランドは３２ビット浮動小数点数を備え、
前記中間値の仮数は４８ビットを備え、および
前記指定されたビット数は２４ビットを備える、請求項１の方法。
【請求項１０】
上位中間値または下位中間値の少なくとも１つを決定することは、
前記上位中間値を決定することと、
前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、前記下位中間値を決定することと
をさらに備える、請求項１の方法。
【請求項１１】
第１オペランド、第２オペランド、および第３オペランドに関する融合された乗算−加算演算をエミュレートするための装置において、
前記第１オペランド、前記第２オペランド、および前記第３オペランドを記憶するように構成されたメモリと、
前記第１オペランドを前記第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定することと、
上位中間値または下位中間値の少なくとも１つを決定することと、ここにおいて、前記上位中間値を決定することは、指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、前記下位中間値を決定することは、前記上位中間値だけ前記中間値を減算することを備える、
前記第３オペランドと前記中間値の指数間の差異に少なくとも部分的に基づいて前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することを含む、上位値および下位値を決定することと、
前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することと、
を行うように構成された少なくとも１つのプロセッサと
を備える、装置。
【請求項１２】
前記少なくとも１つのプロセッサは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと、
を行うようにさらに構成される、請求項１１の装置。
【請求項１３】
前記指定されたしきい値は２である、請求項１１の装置。
【請求項１４】
前記少なくとも１つのプロセッサは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定することと、
前記下位値を０．０に設定することと
を行うようにさらに構成される、請求項１１の装置。
【請求項１５】
前記指定されたしきい値は２である、請求項１４の装置。
【請求項１６】
前記少なくとも１つのプロセッサは、
前記第１オペランドと前記第２オペランドの積を正規化することと、
前記中間値を正規化することから生じるガードビット、ラウンドビットおよびスティッキービットの１つまたは複数に少なくとも部分的に基づいて、前記上位中間値と前記第３オペランドの前記合計を最も近い偶数に丸め込むことと
を行うようにさらに構成される、請求項１４の装置。
【請求項１７】
前記少なくとも１つのプロセッサは、
積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、および
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと、
を行うようにさらに構成される、請求項１１の装置。
【請求項１８】
前記少なくとも１つのプロセッサは、
前記上位値と前記下位値の合計を正規化することと、
前記上位値と前記下位値の前記正規化された合計を偶数に丸め込むことと、
を行うようにさらに構成される、請求項１１の装置。
【請求項１９】
前記第１オペランド、前記第２オペランド、および前記第３オペランドは３２ビット浮動小数点数を備え、
前記中間値の仮数は４８ビットを備え、および
前記指定されたビット数は２４ビットを備える、請求項１１の装置。
【請求項２０】
前記少なくとも１つのプロセッサは、
前記上位中間値を決定することと、
前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、前記下位中間値を決定することと、
を行うようにさらに構成される、請求項１１の装置。
【請求項２１】
第１オペランド、第２オペランド、および第３オペランドに関する融合された乗算−加算演算をエミュレートするための装置において、
少なくとも１つのプロセッサにより、前記第１オペランドを前記第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定する手段と、
前記少なくとも１つのプロセッサにより、上位中間値または下位中間値の少なくとも１つを決定する手段と、ここにおいて、前記上位中間値を決定する前記手段は、指定されたビット数だけ前記中間値をゼロ方向へ丸め込む手段を備え、前記下位中間値を決定する前記手段は、前記上位中間値だけ前記中間値を減算する手段を備える、
前記少なくとも１つのプロセッサにより、前記第３オペランドと前記中間値の指数間の差異に少なくとも部分的に基づいて前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することを含む、上位値および下位値を決定する手段と、および
前記少なくとも１つのプロセッサにより、前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定する手段と、
を備える、装置。
【請求項２２】
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定する前記手段は、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を行う手段を備える、請求項２１の装置。
【請求項２３】
前記少なくとも１つのプロセッサにより、前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定する前記手段は、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定することと、
前記下位値を０．０に設定することと
を行う手段を備える、請求項２１の装置。
【請求項２４】
前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定する前記手段は、
積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を行う手段を備える、請求項２１の装置。
【請求項２５】
前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定する前記手段は、
前記上位値と前記下位値の合計を正規化する手段と、
前記上位値と前記下位値の前記正規化された合計を偶数に丸め込む手段と
をさらに備える、請求項２１の装置。
【請求項２６】
実行されると、１つまたは複数のプログラマブルプロセッサに、
第１オペランドを第２オペランドと乗算することに少なくとも部分的に基づいて中間値を決定させ、
上位中間値または下位中間値の少なくとも１つを決定させ、ここにおいて、前記上位中間値を決定することは、指定されたビット数だけ前記中間値をゼロ方向へ丸め込むことを備え、前記下位中間値を決定することは、前記上位中間値だけ前記中間値を減算することを備える、
第３オペランドと前記中間値の指数間の差異に少なくとも部分的に基づいて、前記上位中間値または前記下位中間値の１つに前記第３オペランドを加算することを含む、上位値および下位値を決定させ、
前記上位値と前記下位値を加算することにより前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定させる
命令を記憶する非一時的なコンピュータ読取可能記憶媒体。
【請求項２７】
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値を上回るだけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を備える、請求項２６の非一時的なコンピュータ読取可能記憶媒体。
【請求項２８】
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて上位値および下位値を決定することは、
前記中間値の符号が前記第３オペランドの符号と同じであることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値未満だけ大きいかあるいは前記中間値の前記指数が前記第３オペランドの前記指数以下であることに応答して、
前記上位中間値と前記第３オペランドの合計を最も近い偶数に丸め込むことにより前記上位値を決定することと、
前記下位値を０．０に決定することと
を備える、請求項２６の非一時的なコンピュータ読取可能記憶媒体。
【請求項２９】
前記上位中間値または前記下位中間値の１つに第３オペランドを加算することに少なくとも部分的に基づいて前記上位値および前記下位値を決定することは、
積の符号が前記第３オペランドの符号と異なることに応答して、および前記中間値の指数が前記第３オペランドの指数よりも、指定されたしきい値だけ大きいことに応答して、
前記上位値を前記上位中間値に設定することと、
前記下位中間値と前記第３オペランドの合計を最も近い奇数に丸め込むことにより前記下位値を決定することと
を備える、請求項２６の非一時的なコンピュータ読取可能記憶媒体。
【請求項３０】
前記第１オペランド、前記第２オペランド、および前記第３オペランドに関するエミュレートされ融合された乗算−加算結果を決定することは、
前記上位値と前記下位値の合計を決定することと、
前記上位値と前記下位値の正規化された合計を偶数に決定することと
をさらに備える、請求項２６の非一時的なコンピュータ読取可能記憶媒体。
【国際調査報告】
2017530445.tif 000011
2017530445.tif 000012
2017530445.tif 000013