(57)【要約】【課題】  双曲線正接関数の演算を実行する演算処理装置の回路規模を低減する。【解決手段】  演算処理装置は、双曲線正接関数の演算を実行する演算部を有する。演算部は、“２”を２の自然対数で除算した定数値と記憶部から演算部に転送されるデータ値とを乗算した定数乗算値を算出する乗算部と、定数乗算値を整数部と小数部に分離する分離部と、定数乗算値の小数部の値を指数とする２のべき乗で表される小数べき乗値を算出する第１べき乗部と、定数乗算値の整数部の値に“−１”を乗算した値を指数とする２のべき乗で表される整数べき乗値を算出する第２べき乗部と、小数べき乗値と整数べき乗値とを加算したべき乗加算値を算出する加算部と、小数べき乗値から整数べき乗値を減算したべき乗減算値を算出する減算部と、データ値で双曲線正接関数の演算を実行した結果として、べき乗減算値をべき乗加算値で除算した除算値を算出する除算部とを有する。【選択図】  図１
2019101896.tif 000002
【特許請求の範囲】
【請求項１】
データ値を記憶する記憶部と前記データ値を用いて双曲線正接関数の演算を実行する演算部とを有する演算処理装置において、
前記演算部は、
“２”を２の自然対数で除算した定数値と前記記憶部から前記演算部に転送される前記データ値とを乗算した定数乗算値を算出する乗算部と、
前記定数乗算値を整数部と小数部に分離する分離部と、
前記定数乗算値の小数部の値を指数とする２のべき乗で表される小数べき乗値を算出する第１べき乗部と、
前記定数乗算値の整数部の値に“−１”を乗算した値を指数とする２のべき乗で表される整数べき乗値を算出する第２べき乗部と、
前記小数べき乗値と前記整数べき乗値とを加算したべき乗加算値を算出する加算部と、
前記小数べき乗値から前記整数べき乗値を減算したべき乗減算値を算出する減算部と、
前記データ値で双曲線正接関数の演算を実行した結果として、前記べき乗減算値を前記べき乗加算値で除算した除算値を算出する除算部と
を有することを特徴とする演算処理装置。
【請求項２】
請求項１に記載の演算処理装置において、
前記演算部は、さらに、
前記記憶部から転送される前記データ値の絶対値を、前記定数値に乗算する前記データ値として前記乗算部に出力する符号処理部と、
前記絶対値で双曲線正接関数の演算を実行した結果に前記データ値の符号を反映し、反映結果を、前記データ値で双曲線正接関数の演算を実行した結果として前記記憶部に出力する符号反映部と
を有することを特徴とする演算処理装置。
【請求項３】
請求項２に記載の演算処理装置において、
前記演算部は、さらに、
前記絶対値が所定値以上の場合、前記絶対値で双曲線正接関数の演算を実行した結果として“１”を前記符号反映部に出力し、前記絶対値が前記所定値未満の場合、前記絶対値で双曲線正接関数の演算を実行した結果として前記除算値を前記符号反映部に出力する選択部を有する
ことを特徴とする演算処理装置。
【請求項４】
請求項１ないし請求項３のいずれか１項に記載の演算処理装置において、
前記除算部は、
所定のビット数で表される前記べき乗加算値をシフトして正規化する正規化部と、
前記べき乗減算値を正規化されたべき乗加算値で除算する除算演算部と、
前記除算演算部による除算結果を前記正規化によるシフト量に基づいて補正することで前記除算値を算出する補正部と
を有することを特徴とする演算処理装置。
【請求項５】
請求項４に記載の演算処理装置において、
前記正規化部は、前記除算演算部による除算の除数を予め決められた範囲内に収めるシフト量で、前記べき乗加算値をシフトする
ことを特徴とする演算処理装置。
【請求項６】
データ値を記憶する記憶部と前記データ値を用いて双曲線正接関数の演算を実行する演算部とを有する演算処理装置の制御方法において、
前記演算部が有する乗算部が、“２”を２の自然対数で除算した定数値と前記記憶部から前記演算部に転送される前記データ値とを乗算した定数乗算値を算出し、
前記演算部が有する分離部が、前記定数乗算値を整数部と小数部に分離し、
前記演算部が有する第１べき乗部が、前記定数乗算値の小数部の値を指数とする２のべき乗で表される小数べき乗値を算出し、
前記演算部が有する第２べき乗部が、前記定数乗算値の整数部の値に“−１”を乗算した値を指数とする２のべき乗で表される整数べき乗値を算出し、
前記演算部が有する加算部が、前記小数べき乗値と前記整数べき乗値とを加算したべき乗加算値を算出し、
前記演算部が有する減算部が、前記小数べき乗値から前記整数べき乗値を減算したべき乗減算値を算出し、
前記演算部が有する除算部が、前記データ値で双曲線正接関数の演算を実行した結果として、前記べき乗減算値を前記べき乗加算値で除算した除算値を算出する
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
双曲線正接関数（ｔａｎｈ）等の関数を用いた変換処理は、例えば、各入力値に対する出力値である所定の関数値が予め記憶された関数テーブルを用いて実現される（例えば、特許文献１、２、３参照）。関数テーブルは、例えば、演算処理装置が有するメモリ等の記憶部に格納される。また、三角関数、双曲線関数等の演算を実行する方法として、ＣＯＲＤＩＣ（COordinate Rotation DIgital Computer）アルゴリズムが知られている（例えば、特許文献４参照）。また、双曲線正弦関数（ｓｉｎｈ）、双曲線余弦関数（ｃｏｓｈ）等の演算の引数を２のべき乗で展開した展開式に基づいて、引数の演算を漸化式で表し、漸化式に基づく反復計算により、引数の演算を実行する演算装置が提案されている（例えば、特許文献５参照）
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−２６２５０６号公報
【特許文献２】特開２００９−８０６９３号公報
【特許文献３】特開２０１７−２７３１４号公報
【特許文献４】特開昭６３−１８４１３５号公報
【特許文献５】特開２００３−９９２４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
関数テーブルを用いて双曲線正接関数を算出する演算処理装置では、関数テーブルを記憶部に格納するため、回路規模が増加するおそれがある。例えば、関数テーブルの入力値が取り得る値の数が増加するにしたがい関数テーブルの規模が増加し、演算処理装置の回路規模が増加する。
【０００５】
また、ＣＯＲＤＩＣアルゴリズムをハードウェアで実現したＣＯＲＤＩＣ回路は、例えば、ＣＯＲＤＩＣアルゴリズムに用いる定数が記憶されたルックアップテーブル、近似値の算出に用いる演算器、データをシフトするシフタ等を有する。例えば、ルックアップテーブルに記憶される定数の数が増加するにしたがい、ＣＯＲＤＩＣ回路の規模が増加する。このため、ＣＯＲＤＩＣ回路を用いて双曲線正接関数を算出する演算処理装置では、回路規模が増加するおそれがある。なお、ＣＯＲＤＩＣ回路を用いて双曲線正接関数を算出する演算処理装置は、ＣＯＲＤＩＣ回路の他に、ＣＯＲＤＩＣ回路で算出した双曲線正弦関数の値を双曲線余弦関数の値で除算する除算演算器、除算演算器に入力する除数を正規化するシフタ等を有する。
【０００６】
１つの側面では、本発明は、双曲線正接関数の演算を実行する演算処理装置の回路規模を低減することを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様では、演算処理装置は、データ値を記憶する記憶部とデータ値を用いて双曲線正接関数の演算を実行する演算部とを有する。演算部は、“２”を２の自然対数で除算した定数値と記憶部から演算部に転送されるデータ値とを乗算した定数乗算値を算出する乗算部と、定数乗算値を整数部と小数部に分離する分離部と、定数乗算値の小数部の値を指数とする２のべき乗で表される小数べき乗値を算出する第１べき乗部と、定数乗算値の整数部の値に“−１”を乗算した値を指数とする２のべき乗で表される整数べき乗値を算出する第２べき乗部と、小数べき乗値と整数べき乗値とを加算したべき乗加算値を算出する加算部と、小数べき乗値から整数べき乗値を減算したべき乗減算値を算出する減算部と、データ値で双曲線正接関数の演算を実行した結果として、べき乗減算値をべき乗加算値で除算した除算値を算出する除算部とを有する。
【発明の効果】
【０００８】
１つの側面では、本発明は、双曲線正接関数の演算を実行する演算処理装置の回路規模を低減することができる。
【図面の簡単な説明】
【０００９】
【図１】演算処理装置および演算処理装置の制御方法の一実施形態を示す図である。
【図２】演算処理装置および演算処理装置の制御方法の別の実施形態を示す図である。
【図３】演算処理装置および演算処理装置の制御方法の別の実施形態を示す図である。
【図４】図３に示した演算処理装置の動作の一例を示す図である。
【図５】図３に示した演算部内の各ブロックの一例を示す図である。
【図６】演算処理装置および演算処理装置の制御方法の別の実施形態を示す図である。
【発明を実施するための形態】
【００１０】
以下、実施形態について、図面を用いて説明する。データが示す値には、データと同じ符号を使用する。
【００１１】
図１は、演算処理装置および演算処理装置の制御方法の一実施形態を示す。図１に示す演算処理装置１０は、例えば、ＣＰＵ（Central Processing Unit）等のプロセッサであり、サーバまたはスーパーコンピュータ等の情報処理装置１に含まれる。演算処理装置１０は、データ値ｘを記憶するレジスタファイル等の記憶部２０と、記憶部２０に記憶されたデータ値ｘを用いて双曲線正接関数の演算を実行する演算部３０とを有する。
【００１２】
例えば、データ値ｘを変数ｘとした場合の双曲線正接関数“ｙ＝ｔａｎｈ（ｘ）”は、“２ｘ／ｌｎ２”の整数部の値Ｉおよび“２ｘ／ｌｎ２”の小数部の値Ｆを用いて、式（１）で表される。
【００１３】
ｙ＝ｔａｎｈ（ｘ）
＝（ｅｘ−ｅ−ｘ）／（ｅｘ＋ｅ−ｘ）
＝（ｅ２ｘ−１）／（ｅ２ｘ＋１）
＝（２２ｘ／ｌｎ２−１）／（２２ｘ／ｌｎ２＋１）
＝（２Ｉ＋Ｆ−１）／（２Ｉ＋Ｆ＋１）
＝（２Ｆ−２−Ｉ）／（２Ｆ＋２−Ｉ）                ・・・（１）
なお、符号ｌｎは、自然対数を示す。また、符号ｅは、自然対数の底であるネイピア数である。
【００１４】
演算部３０は、上述の式（１）に基づいて、双曲線正接関数の演算を実行する。例えば、演算部３０は、乗算部３１０、分離部３２０、第１べき乗部３３０、第２べき乗部３４０、加算部３５０、減算部３６０および除算部３７０を有する。
【００１５】
乗算部３１０は、定数値“２／ｌｎ２”と記憶部２０から演算部３０に転送されたデータ値ｘとを乗算した定数乗算値Ｄｍｘを算出し、算出した定数乗算値Ｄｍｘを分離部３２０に転送する。なお、定数乗算値Ｄｍｘは、式（１）の“２ｘ／ｌｎ２”である。また、定数値“２／ｌｎ２”は、例えば、演算処理装置１０の外部の図示しないメインメモリ等の記憶装置に予め格納されており、記憶装置から乗算部３１０等が有する図示しないレジスタに転送される。あるいは、定数値“２／ｌｎ２”は、乗算部３１０等が有する図示しないレジスタに予め格納されてもよい。
【００１６】
分離部３２０は、定数乗算値Ｄｍｘを整数部と小数部に分離する。そして、分離部３２０は、定数乗算値Ｄｍｘの小数部の値Ｆを第１べき乗部３３０に転送し、定数乗算値Ｄｍｘの整数部の値Ｉを第２べき乗部３４０に転送する。値Ｆは、式（１）の“Ｆ”であり、値Ｉは、式（１）の“Ｉ”である。
【００１７】
第１べき乗部３３０は、定数乗算値Ｄｍｘの小数部の値Ｆを指数とする２のべき乗で表される小数べき乗値Ｄｅｆ（＝２Ｆ）を算出する。そして、第１べき乗部３３０は、小数べき乗値Ｄｅｆを加算部３５０および減算部３６０に転送する。例えば、第１べき乗部３３０は、２のべき乗の計算（２を底とする指数関数の演算）を実行するべき乗演算器により実現される。
【００１８】
第２べき乗部３４０は、定数乗算値Ｄｍｘの整数部の値Ｉに“−１”を乗算した値を指数とする２のべき乗で表される整数べき乗値Ｄｅｉ（＝２-Ｉ）を算出する。そして、第２べき乗部３４０は、整数べき乗値Ｄｅｉを加算部３５０および減算部３６０に転送する。
【００１９】
なお、第２べき乗部３４０は、値Ｉが整数であるため、整数べき乗値Ｄｅｉを２進数で表した場合、値Ｉに応じて予め決められたビットを“１”に設定することにより、整数べき乗値Ｄｅｉ（＝２-Ｉ）を算出できる。すなわち、第２べき乗部３４０の機能をデコーダで実現することができる。
【００２０】
加算部３５０は、小数べき乗値Ｄｅｆ（＝２Ｆ）と整数べき乗値Ｄｅｉ（＝２-Ｉ）とを加算したべき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）を算出する。そして、加算部３５０は、べき乗加算値Ｄｅａを除算部３７０に転送する。
【００２１】
減算部３６０は、小数べき乗値Ｄｅｆ（＝２Ｆ）から整数べき乗値Ｄｅｉ（＝２-Ｉ）を減算したべき乗減算値Ｄｅｓ（＝２Ｆ−２-Ｉ）を算出する。そして、減算部３６０は、べき乗減算値Ｄｅｓを除算部３７０に転送する。
【００２２】
除算部３７０は、データ値ｘで双曲線正接関数の演算を実行した結果ｙ（＝ｔａｎｈ（ｘ））として、べき乗減算値Ｄｅｓをべき乗加算値Ｄｅａで除算した除算値Ｄｄｉｖを算出する。そして、演算部３０は、データ値ｘで双曲線正接関数の演算を実行した結果ｙとして、除算値Ｄｄｉｖを記憶部２０に格納する。
【００２３】
このように、演算部３０は、定数値“２／ｌｎ２”とデータ値ｘとを乗算した定数乗算値Ｄｍｘを算出し、定数乗算値Ｄｍｘを整数部（値Ｉ）と小数部（値Ｆ）に分離する。そして、演算部３０は、“２Ｆ”で表される小数べき乗値Ｄｅｆと、“２−Ｉ”で表される整数べき乗値Ｄｅｉとを算出する。また、演算部３０は、小数べき乗値Ｄｅｆと整数べき乗値Ｄｅｉとを加算したべき乗加算値Ｄｅａと、小数べき乗値Ｄｅｆから整数べき乗値Ｄｅｉを減算したべき乗減算値Ｄｅｓとを算出する。そして、演算部３０は、データ値ｘで双曲線正接関数の演算を実行した結果ｙとして、べき乗減算値Ｄｅｓをべき乗加算値Ｄｅａで除算した除算値Ｄｄｉｖを算出する。
【００２４】
すなわち、演算部３０は、双曲線正弦関数（ｓｉｎｈ）および双曲線余弦関数（ｃｏｓｈ）の各々の値を算出することなく、データ値ｘで双曲線正接関数の演算を実行した結果ｙ（＝ｔａｎｈ（ｘ））を算出できる。これにより、演算部３０は、双曲線正弦関数および双曲線余弦関数の各々の値を算出するＣＯＲＤＩＣ回路を用いることなく、データ値ｘで双曲線正接関数の演算を実行した結果ｙ（＝ｔａｎｈ（ｘ））を算出できる。この結果、双曲線正接関数の演算を実行する演算処理装置１０の回路規模を、ＣＯＲＤＩＣ回路を用いる場合に比べて、低減することができる。
【００２５】
また、例えば、乗算部３１０、第１べき乗部３３０および除算部３７０は、既存の演算部が有する乗算器、２のべき乗の計算（２を底とする指数関数の演算）を実行するべき乗演算器および除算器を利用して実現される。このため、乗算器、べき乗演算器、除算器等を有する既存の演算部に双曲線正接関数の演算を実行する演算器を追加する場合、ＣＯＲＤＩＣ回路を用いる場合に比べて、新たに追加する回路の規模を削減することができる。
【００２６】
なお、演算処理装置１０の構成および演算処理装置１０の制御方法は、図１に示す例に限定されない。例えば、乗算部３１０は、記憶部２０から演算部３０に転送されたデータ値ｘが負の値である場合、データ値ｘの絶対値（｜ｘ｜）を定数値“２／ｌｎ２”に乗算して定数乗算値Ｄｍｘを算出してもよい。この場合、演算部３０は、除算部３７０で算出された除算値Ｄｄｉｖに“−１”を乗算した値（＝−ｔａｎｈ（｜ｘ｜））を、データ値ｘで双曲線正接関数の演算を実行した結果ｙ（＝ｔａｎｈ（ｘ））として記憶部２０に格納する。
【００２７】
以上、図１に示す実施形態では、演算部３０は、変数ｘの双曲線正接関数ｔａｎｈ（ｘ）を“２ｘ／ｌｎ２”の整数部の値Ｉおよび“２ｘ／ｌｎ２”の小数部の値Ｆを用いて表した式（１）に基づいて、双曲線正接関数の演算を実行する。例えば、演算部３０は、定数値“２／ｌｎ２”とデータ値ｘとを乗算した定数乗算値Ｄｍｘの整数部の値Ｉおよび小数部の値Ｆを算出し、“２Ｆ”で表される小数べき乗値Ｄｅｆと“２−Ｉ”で表される整数べき乗値Ｄｅｉとを算出する。そして、演算部３０は、小数べき乗値Ｄｅｆから整数べき乗値Ｄｅｉを減算したべき乗減算値Ｄｅｓを、小数べき乗値Ｄｅｆと整数べき乗値Ｄｅｉとを加算したべき乗加算値Ｄｅａで除算することにより、除算値Ｄｄｉｖを算出する。除算値Ｄｄｉｖは、データ値ｘで双曲線正接関数の演算を実行した結果ｙである。このように、演算部３０は、双曲線正弦関数および双曲線余弦関数の各々の値を算出するＣＯＲＤＩＣ回路を用いることなく、双曲線正接関数の演算を実行できる。この結果、双曲線正接関数の演算を実行する演算処理装置１０の回路規模を低減することができる。
【００２８】
図２は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図１で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図２に示す演算処理装置１２は、例えば、ＣＰＵ等のプロセッサであり、サーバまたはスーパーコンピュータ等の情報処理装置１に含まれる。演算処理装置１２は、図１に示した演算部３０の代わりに演算部３２を有することをのぞいて、図１に示した演算処理装置１０と同一または同様である。例えば、演算処理装置１２は、データ値ｘを記憶するレジスタファイル等の記憶部２０と、記憶部２０に記憶されたデータ値ｘを用いて双曲線正接関数の演算を実行する演算部３２とを有する。
【００２９】
図２に示す演算部３２は、双曲線正接関数が図２のカギ括弧内に示すように奇関数であるため、データ値ｘが負の場合、データ値ｘの絶対値｜ｘ｜で双曲線正接関数の演算を実行した結果Ｄｄｉｖに負の符号を付加する。これにより、データ値ｘで双曲線正接関数の演算を実行した結果ｙが得られる。データ値ｘの符号の抽出および付加等は、後述する符号処理部３０２および符号反映部３９０により実行される。
【００３０】
演算部３２は、符号処理部３０２および符号反映部３９０が図１に示した演算部３０に追加されることを除いて、図１に示した演算部３０と同一または同様である。例えば、演算部３２は、符号処理部３０２、乗算部３１０、分離部３２０、第１べき乗部３３０、第２べき乗部３４０、加算部３５０、減算部３６０、除算部３７０および符号反映部３９０を有する。
【００３１】
符号処理部３０２は、記憶部２０から演算部３２に転送されたデータ値ｘの符号を抽出して、データ値ｘの符号を示す符号情報ＳＩＮＦを符号反映部３９０に出力する。また、符号処理部３０２は、記憶部２０から演算部３２に転送されたデータ値ｘの絶対値｜ｘ｜を、定数値“２／ｌｎ２”に乗算するデータ値ｘとして乗算部３１０に出力する。
【００３２】
乗算部３１０、分離部３２０、第１べき乗部３３０、第２べき乗部３４０、加算部３５０、減算部３６０および除算部３７０は、図１に示した実施形態と同一または同様である。例えば、乗算部３１０は、データ値ｘの絶対値｜ｘ｜をデータ値ｘとして受けるため、定数値“２／ｌｎ２”とデータ値ｘの絶対値｜ｘ｜とを乗算した定数乗算値Ｄｍｘ（＝２｜ｘ｜／ｌｎ２）を算出し、算出した定数乗算値Ｄｍｘを分離部３２０に転送する。このため、除算部３７０で算出された除算値Ｄｄｉｖは、データ値ｘの絶対値｜ｘ｜で双曲線正接関数の演算を実行した結果（ｔａｎｈ（｜ｘ｜））を示す。
【００３３】
符号反映部３９０は、データ値ｘの絶対値｜ｘ｜で双曲線正接関数の演算を実行した結果（ｔａｎｈ（｜ｘ｜））として除算値Ｄｄｉｖを除算部３７０から受け、データ値ｘの符号を示す符号情報ＳＩＮＦを符号処理部３０２から受ける。そして、符号反映部３９０は、データ値ｘの絶対値｜ｘ｜で双曲線正接関数の演算を実行した結果Ｄｄｉｖにデータ値ｘの符号を反映する。例えば、符号反映部３９０は、符号情報ＳＩＮＦが示す符号を除算値Ｄｄｉｖに付加する。そして、符号反映部３９０は、符号情報ＳＩＮＦが示す符号を付加した除算値Ｄｄｉｖ、すなわち、符号の反映結果を、データ値ｘで双曲線正接関数の演算を実行した結果ｙ（＝ｔａｎｈ（ｘ））として記憶部２０に出力する。このように、演算処理装置１２は、データ値ｘが負の場合、データ値ｘの絶対値｜ｘ｜で双曲線正接関数の演算を実行した結果Ｄｄｉｖに負の符号を付加する。
【００３４】
演算処理装置１２では、データ値ｘの絶対値｜ｘ｜が乗算部３１０に転送されるため、乗算部３１０、分離部３２０、第１べき乗部３３０、第２べき乗部３４０、加算部３５０、減算部３６０および除算部３７０の各々が受ける入力値が０以上になる。例えば、定数乗算値Ｄｍｘが０以上になるため、値Ｆは、０以上で１未満の実数になり、値Ｉは、０以上の自然数になる。このため、べき乗減算値Ｄｅｓ（＝２Ｆ−２-Ｉ）は、０以上で２未満の範囲に収まり、べき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）は、１以上で３未満の範囲に収まる。除算部３７０に除数として転送されるべき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）の取り得る範囲が１以上で３未満になるため、除数の値を所定の範囲に正規化して除算する場合、べき乗加算値Ｄｅａ（除数）を正規化するシフタ等の回路規模を低減することができる。このように、乗算部３１０、分離部３２０、第１べき乗部３３０、第２べき乗部３４０、加算部３５０、減算部３６０および除算部３７０を含むブロックの回路規模を、負の値を処理する場合に比べて低減することができる。
【００３５】
また、演算処理装置１２では、上述したように、べき乗減算値Ｄｅｓ（＝２Ｆ−２-Ｉ）は、０以上で２未満の範囲に収まり、べき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）は、１以上で３未満の範囲に収まる。すなわち、双曲線正接関数の演算における途中の計算結果として算出されるべき乗減算値Ｄｅｓおよびべき乗加算値Ｄｅａは、発散しない。このため、演算処理装置１２は、発散に対する例外処理等をソフトウェアで対策することなく、双曲線正接関数の演算を実行できる。
【００３６】
なお、演算処理装置１２の構成および演算処理装置１２の制御方法は、図２に示す例に限定されない。例えば、双曲線正接関数“ｙ＝ｔａｎｈ（ｘ）”は、図２のカギ括弧内に示すように、データ値ｘが無限大の場合、ｙ＝１に漸近する。このため、演算部３２は、データ値ｘの絶対値｜ｘ｜が所定値以上の場合、除算値Ｄｄｉｖを“１”に置き換えて符号反映部３９０に出力する選択部を有してもよい。
【００３７】
以上、図２に示す実施形態においても、図１に示した実施形態と同様の効果を得ることができる。例えば、演算部３２は、図１で説明した式（１）、すなわち、双曲線正接関数“ｙ＝ｔａｎｈ（ｘ）”を“２ｘ／ｌｎ２”の整数部の値Ｉと小数部の値Ｆを用いて表した式に基づいて、双曲線正接関数の演算を実行する。これにより、演算部３２は、ＣＯＲＤＩＣ回路を用いることなく、双曲線正接関数の演算を実行できる。この結果、双曲線正接関数の演算を実行する演算処理装置１２の回路規模を低減することができる。
【００３８】
さらに、演算処理装置１２は、データ値ｘが負の場合、データ値ｘの絶対値｜ｘ｜で双曲線正接関数の演算を実行した結果Ｄｄｉｖに負の符号を付加する。これにより、乗算部３１０、分離部３２０、第１べき乗部３３０、第２べき乗部３４０、加算部３５０、減算部３６０および除算部３７０を含むブロックの回路規模を、負の値を処理する場合に比べて低減することができる。この結果、双曲線正接関数の演算を実行する演算処理装置１２の回路規模を低減することができる。
【００３９】
図３は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図１から図２で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図３に示す演算処理装置１４は、例えば、ＣＰＵ等のプロセッサであり、サーバまたはスーパーコンピュータ等の情報処理装置１に含まれる。演算処理装置１４は、図２に示した演算部３２の代わりに演算部３４を有することをのぞいて、図２に示した演算処理装置１２と同一または同様である。例えば、演算処理装置１４は、データ値ｘを記憶するレジスタファイル等の記憶部２０と、記憶部２０に記憶されたデータ値ｘを用いて双曲線正接関数の演算を実行する演算部３４とを有する。
【００４０】
図３に示す演算部３４は、選択部３８０が図２に示した演算部３２に追加されることを除いて、図２に示した演算部３２と同一または同様である。例えば、演算部３４は、符号処理部３０２、乗算部３１０、分離部３２０、第１べき乗部３３０、第２べき乗部３４０、加算部３５０、減算部３６０、除算部３７０、選択部３８０および符号反映部３９０を有する。
【００４１】
乗算部３１０、分離部３２０、第１べき乗部３３０、第２べき乗部３４０、加算部３５０、減算部３６０、除算部３７０および符号反映部３９０は、図２に示した実施形態と同一または同様である。なお、符号反映部３９０は、選択部３８０から受ける値（除算値Ｄｄｉｖおよび“１”のいずれか）にデータ値ｘの符号を反映し、反映結果を、データ値ｘで双曲線正接関数の演算を実行した結果ｙ（＝ｔａｎｈ（ｘ））として記憶部２０に出力する。
【００４２】
選択部３８０は、データ値ｘの絶対値｜ｘ｜で双曲線正接関数の演算を実行した結果（ｔａｎｈ（｜ｘ｜））として除算値Ｄｄｉｖを除算部３７０から受け、データ値ｘの絶対値｜ｘ｜を符号処理部３０２から受ける。そして、選択部３８０は、データ値ｘの絶対値｜ｘ｜が所定値未満の場合、データ値ｘの絶対値｜ｘ｜で双曲線正接関数の演算を実行した結果（ｔａｎｈ（｜ｘ｜））として除算値Ｄｄｉｖを符号反映部３９０に出力する。
【００４３】
また、選択部３８０は、データ値ｘの絶対値｜ｘ｜が所定値以上の場合、データ値ｘの絶対値｜ｘ｜で双曲線正接関数の演算を実行した結果（ｔａｎｈ（｜ｘ｜））として“１”を符号反映部３９０に出力する。値“１”は、例えば、選択部３８０等が有する図示しないレジスタに予め格納される。あるいは、選択部３８０の２つのデータ入力端子のうちの一方が値“１”に固定されてよい。
【００４４】
このように、演算部３４は、データ値ｘの絶対値｜ｘ｜が所定値以上の場合、除算値Ｄｄｉｖに拘わらず、データ値ｘの符号に応じて“１”および“−１”のいずれかを、データ値ｘで双曲線正接関数の演算を実行した結果として記憶部２０に出力する。この場合、乗算部３１０、分離部３２０、第１べき乗部３３０、第２べき乗部３４０、加算部３５０、減算部３６０および除算部３７０の各々は、処理を停止してもよい。乗算部３１０、分離部３２０、第１べき乗部３３０、第２べき乗部３４０、加算部３５０、減算部３６０および除算部３７０が処理を停止した場合、演算処理装置１４の消費電力を低減することができる。
【００４５】
なお、演算処理装置１４の構成および演算処理装置１４の制御方法は、図３に示す例に限定されない。例えば、選択部３８０は、図１に示した演算部３０に追加されてもよい。この場合、演算部３０に追加された選択部３８０は、データ値ｘの大きさに応じて、除算値Ｄｄｉｖ、“１”および“−１”のいずれかを、データ値ｘで双曲線正接関数の演算を実行した結果として選択する。例えば、演算部３０に追加された選択部３８０は、データ値ｘの絶対値｜ｘ｜が所定値以上の場合、除算値Ｄｄｉｖに拘わらず、データ値ｘの符号に応じて“１”および“−１”のいずれかを、データ値ｘで双曲線正接関数の演算を実行した結果として選択する。また、演算部３０に追加された選択部３８０は、データ値ｘの絶対値｜ｘ｜が所定値未満の場合、データ値ｘで双曲線正接関数の演算を実行した結果として除算値Ｄｄｉｖを選択する。
【００４６】
図４は、図３に示した演算処理装置１４の動作の一例を示す。図４に示す動作は、演算処理装置１４の制御方法の一例である。なお、図４に示す例は、データ値ｘで双曲線正接関数の演算を実行する場合の演算部３４の動作を示す。
【００４７】
ステップＳ１００では、符号処理部３０２は、記憶部２０から演算部３４に転送されたデータ値ｘが０未満か否かを判定する。データ値ｘが０以上の場合、演算部３４の動作は、ステップＳ１１０Ａに移る。一方、データ値ｘが０未満の場合、演算部３４の動作は、ステップＳ１１０Ｂに移る。
【００４８】
ステップＳ１１０Ａでは、符号処理部３０２は、記憶部２０から演算部３４に転送されたデータ値ｘを、定数値“２／ｌｎ２”に乗算するデータ値ｘとして乗算部３１０に出力する（ｘ＝ｘ）。なお、記憶部２０から演算部３４に転送されたデータ値ｘが０以上であるため、データ値ｘは、データ値ｘの絶対値｜ｘ｜と同じ値である。すなわち、符号処理部３０２は、記憶部２０から演算部３４に転送されたデータ値ｘの絶対値｜ｘ｜を、定数値“２／ｌｎ２”に乗算するデータ値ｘとして乗算部３１０に出力する（ｘ＝｜ｘ｜）。
【００４９】
次に、ステップＳ２００Ａでは、演算部３４は、データ値ｘに対する双曲線正接関数の値を算出するｔａｎｈ（ｘ）算出処理を実行する。ｔａｎｈ（ｘ）算出処理は、図４に示すように、ステップＳ２１０からステップＳ２２８までの一連の処理を含む。
【００５０】
例えば、ステップＳ２１０では、選択部３８０は、符号処理部３０２から乗算部３１０に転送されたデータ値ｘが９以上か否かを判定する。なお、数値“９”は、データ値ｘの絶対値｜ｘ｜と比較される所定値の数値例である。所定値は、“９”に限定されない。データ値ｘが９以上の場合、演算部３４の動作は、ステップＳ２１２に移る。一方、データ値ｘが９未満の場合、演算部３４の動作は、ステップＳ２２０に移る。
【００５１】
ステップＳ２１２では、選択部３８０は、除算値Ｄｄｉｖとして、“１”を符号反映部３９０に出力する（Ｄｄｉｖ＝１）。これにより、データ値ｘが９以上の場合のｔａｎｈ（ｘ）算出処理が終了し、演算部３４の動作は、ステップＳ３００Ａに移る。一方、データ値ｘが９未満の場合、上述したように、演算部３４は、ステップＳ２２０を実行する。
【００５２】
ステップＳ２２０では、乗算部３１０は、定数値“２／ｌｎ２”と符号処理部３０２から受けたデータ値ｘとを乗算して定数乗算値Ｄｍｘ（＝２ｘ／ｌｎ２）を算出する。
【００５３】
次に、ステップＳ２２２では、分離部３２０は、ステップＳ２２０で算出された定数乗算値Ｄｍｘを整数部（値Ｉ）と小数部（値Ｆ）とに分離する。
【００５４】
次に、ステップＳ２２４では、演算部３４は、ステップＳ２２２で分離した定数乗算値Ｄｍｘの整数部の値Ｉと小数部の値Ｆとを用いて、整数べき乗値Ｄｅｉ（＝２-Ｉ）と小数べき乗値Ｄｅｆ（＝２Ｆ）とを算出する。例えば、第１べき乗部３３０が小数べき乗値Ｄｅｆ（＝２Ｆ）を算出し、第２べき乗部３４０が整数べき乗値Ｄｅｉ（＝２-Ｉ）を算出する。
【００５５】
次に、ステップＳ２２６では、演算部３４は、ステップＳ２２４で算出した整数べき乗値Ｄｅｉおよび小数べき乗値Ｄｅｆを用いて、べき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）とべき乗減算値Ｄｅｓ（＝２Ｆ−２-Ｉ）とを算出する。例えば、加算部３５０がべき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）を算出し、減算部３６０がべき乗減算値Ｄｅｓ（＝２Ｆ−２-Ｉ）を算出する。
【００５６】
次に、ステップＳ２２８では、除算部３７０は、ステップＳ２２６で算出されたべき乗減算値ＤｅｓをステップＳ２２６で算出されたべき乗加算値Ｄｅａで除算して除算値Ｄｄｉｖ（＝（２Ｆ−２-Ｉ）／（２Ｆ＋２-Ｉ））を算出する。これにより、データ値ｘが９未満の場合のｔａｎｈ（ｘ）算出処理が終了し、演算部３４の動作は、ステップＳ３００Ａに移る。
【００５７】
ステップＳ３００Ａでは、符号反映部３９０は、ステップＳ２００Ａのｔａｎｈ（ｘ）算出処理により算出された除算値Ｄｄｉｖを、データ値ｘで双曲線正接関数の演算を実行した結果ｙとして記憶部２０に格納する（ｙ＝Ｄｄｉｖ）。これにより、記憶部２０から演算部３４に転送されたデータ値ｘが０以上の場合の演算部３４の動作は、終了する。一方、記憶部２０から演算部３４に転送されたデータ値ｘが０未満の場合、上述したように、演算部３４は、ステップＳ１１０Ｂを実行する。
【００５８】
ステップＳ１１０Ｂでは、符号処理部３０２は、記憶部２０から演算部３４に転送されたデータ値ｘに“−１”を乗算した値（＝−ｘ）を、定数値“２／ｌｎ２”に乗算するデータ値ｘとして乗算部３１０に出力する（ｘ＝−ｘ）。なお、記憶部２０から演算部３４に転送されたデータ値ｘが０未満であるため、データ値ｘに“−１”を乗算した値（＝−ｘ）は、データ値ｘの絶対値｜ｘ｜と同じ値である。すなわち、符号処理部３０２は、記憶部２０から演算部３４に転送されたデータ値ｘの絶対値｜ｘ｜を、定数値“２／ｌｎ２”に乗算するデータ値ｘとして乗算部３１０に出力する（ｘ＝｜ｘ｜）。
【００５９】
次に、ステップＳ２００Ｂでは、演算部３４は、データ値ｘに対する双曲線正接関数の値を算出するｔａｎｈ（ｘ）算出処理を実行する。ステップＳ２００Ｂのｔａｎｈ（ｘ）算出処理は、ステップＳ２００Ａのｔａｎｈ（ｘ）算出処理と同じである。ステップＳ２００Ｂのｔａｎｈ（ｘ）算出処理により、データ値ｘ（＝｜ｘ｜）に対する双曲線正接関数の値として、除算値Ｄｄｉｖが符号反映部３９０に転送される。例えば、符号処理部３０２から乗算部３１０に転送されたデータ値ｘ（＝｜ｘ｜）が９以上の場合、選択部３８０は、除算値Ｄｄｉｖとして、“１”を符号反映部３９０に出力する（Ｄｄｉｖ＝１）。また、符号処理部３０２から乗算部３１０に転送されたデータ値ｘ（＝｜ｘ｜）が９未満の場合、選択部３８０は、除算値Ｄｄｉｖ（＝（２Ｆ−２-Ｉ）／（２Ｆ＋２-Ｉ））を符号反映部３９０に出力する。演算部３４は、ステップＳ２００Ｂのｔａｎｈ（ｘ）算出処理を実行した後、動作をステップＳ３００Ｂに移す。
【００６０】
ステップＳ３００Ｂでは、符号反映部３９０は、ステップＳ２００Ｂのｔａｎｈ（ｘ）算出処理により算出された除算値Ｄｄｉｖに“−１”を乗算した値を、データ値ｘで双曲線正接関数の演算を実行した結果ｙとして記憶部２０に格納する（ｙ＝−Ｄｄｉｖ）。これにより、記憶部２０から演算部３４に転送されたデータ値ｘが０未満の場合の演算部３４の動作は、終了する。
【００６１】
なお、演算処理装置１４の動作は、図４に示す例に限定されない。例えば、ステップＳ１００の判定処理は、ｔａｎｈ（ｘ）算出処理が実行された後に実行されてもよい。この場合、符号処理部３０２は、ステップＳ１１０Ａ、Ｓ１１０Ｂの代わりに、記憶部２０から演算部３４に転送されたデータ値ｘの絶対値｜ｘ｜を、定数値“２／ｌｎ２”に乗算するデータ値ｘとして乗算部３１０に出力する。そして、演算部３４は、データ値ｘの絶対値｜ｘ｜を用いてｔａｎｈ（ｘ）算出処理を実行した後、ステップＳ１００の判定処理の判定結果に応じて、ステップＳ３００Ａ、Ｓ３００Ｂのいずれかの処理を実行する。
【００６２】
図５は、図３に示した演算部３４内の各ブロックの一例を示す。なお、図５では、データ等の流れを分かりやすくするために、記憶部２０も記載している。図５では、記憶部２０と演算部３４との間で転送されるデータが３２ビットで、データの表現形式がＩＥＥＥ（The Institute of Electrical and Electronics Engineers）７５４に準拠した単精度浮動小数点数の場合を例にして、演算部３４の動作を説明する。なお、演算部３４が扱うデータの表現形式は、単精度浮動小数点数に限定されない。例えば、演算部３４が扱うデータの表現形式は、固定小数点数でもよい。図５において、データの先頭に示す“８’ｈ”、“１’ｂ”等の先頭の数字はデータのビット数を示し、“ｈ”は１６進数を示し、“ｂ”は２進数を示す。
【００６３】
図５に示す例では、乗算部３１０および除算部３７０（より詳細には、除算部３７０の一部）は、既存の演算処理装置が有する乗算器および除算器３７４を利用して実現される。また、分離部３２０および第１べき乗部３３０は、既存の演算処理装置が有する２のべき乗の計算（２を底とする指数関数の演算）を実行するべき乗演算器３３２を利用して実現される。例えば、分離部３２０は、べき乗演算器３３２が有する機能の１つであるデータの整数部と小数部とを分離する分離機能を利用して実現される。そして、第１べき乗部３３０は、べき乗演算器３３２が有する２のべき乗の計算（２を底とする指数関数の演算）を実行するべき乗演算部を利用して実現される。
【００６４】
符号処理部３０２は、符号抽出部３０３および減算器３０４を有する。符号抽出部３０３は、記憶部２０から演算部３４に転送されたデータｘ［３１：０］の符号ビットであるデータｘ［３１］を符号情報ＳＩＮＦとして抽出する。そして、符号抽出部３０３は、データｘ［３１：０］から抽出した符号情報ＳＩＮＦ（＝ｘ［３１］）を、後述する符号反映部３９０内の符号付加部３９２に出力する。
【００６５】
また、符号抽出部３０３は、データｘ［３１：０］の指数部ｘ［３０：２３］および仮数部ｘ［２２：０］を、それぞれデータｘｅ［７：０］およびデータｘｆ［２２：０］として抽出する。そして、符号抽出部３０３は、データｘ［３１：０］の指数部ｘ［３０：２３］であるデータｘｅ［７：０］を、減算器３０４に出力する。また、符号抽出部３０３は、データｘ［３１：０］の仮数部ｘ［２２：０］であるデータｘｆ［２２：０］を、後述する選択部３８０内の判定部３８１に出力する。
【００６６】
さらに、符号抽出部３０３は、データｘ［３１：０］の絶対値｜ｘ｜を、定数値“２／ｌｎ２”に乗算するデータｘとして乗算部３１０に出力する。例えば、符号抽出部３０３は、データｘ［３１：０］の符号ビットを“０”にしたデータｘ（＝｛１’ｂ０，ｘｅ［７：０］，ｘｆ［２２：０］｝を、乗算部３１０に出力する。
【００６７】
減算器３０４は、符号抽出部３０３から受けたデータｘｅ［７：０］から、ＩＥＥＥ７５４表現のバイアス値（＝１２７）を減算してデータｘｅｒ［７：０］を算出する。そして、減算器３０４は、データｘｅ［７：０］から“１２７”を減算したデータｘｅｒ［７：０］を、判定部３８１に出力する。
【００６８】
乗算部３１０は、例えば、定数値“２／ｌｎ２”と符号抽出部３０３から受けたデータｘとを乗算して定数乗算値Ｄｍｘ（＝２ｘ／ｌｎ２）を算出する。そして、乗算部３１０は、定数乗算値Ｄｍｘ（＝２ｘ／ｌｎ２）を、べき乗演算器３３２に出力する。
【００６９】
分離部３２０は、乗算部３１０から受けた定数乗算値Ｄｍｘを整数部と小数部とに分離し、定数乗算値Ｄｍｘの整数部の値Ｉを第２べき乗部３４０に出力し、定数乗算値Ｄｍｘの小数部の値Ｆを第１べき乗部３３０に出力する。
【００７０】
第１べき乗部３３０は、分離部３２０から受けた定数乗算値Ｄｍｘの小数部の値Ｆを用いて、小数べき乗値Ｄｅｆ（＝２Ｆ）を算出する。そして、第１べき乗部３３０は、算出した小数べき乗値Ｄｅｆ（＝２Ｆ）を加算部３５０および減算部３６０に出力する。
【００７１】
第２べき乗部３４０は、例えば、出力データの複数のビットのうち、入力データに応じて予め決められたビットを“１”に設定するデコーダにより実現される。例えば、第２べき乗部３４０は、整数べき乗値Ｄｅｉを示すデータの複数のビットのうち、分離部３２０から受けた定数乗算値Ｄｍｘの整数部の値Ｉに応じて予め決められたビットを“１”に設定する。これにより、整数べき乗値Ｄｅｉ（＝２-Ｉ）が算出される。そして、第２べき乗部３４０は、算出した整数べき乗値Ｄｅｉ（＝２-Ｉ）を加算部３５０および減算部３６０に出力する。
【００７２】
加算部３５０は、例えば、加算器により実現され、第１べき乗部３３０から受けた小数べき乗値Ｄｅｆと第２べき乗部３４０から受けた整数べき乗値Ｄｅｉとを加算してべき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）を算出する。そして、加算部３５０は、算出したべき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）を、後述する除算部３７０内の比較器３７１、右シフタ３７２およびセレクタ３７３に出力する。
【００７３】
減算部３６０は、例えば、減算器により実現され、第１べき乗部３３０から受けた小数べき乗値Ｄｅｆから、第２べき乗部３４０から受けた整数べき乗値Ｄｅｉを減算してべき乗減算値Ｄｅｓ（＝２Ｆ−２-Ｉ）を算出する。そして、減算部３６０は、算出したべき乗減算値Ｄｅｓ（＝２Ｆ−２-Ｉ）を、後述する除算部３７０内の除算器３７４に出力する。
【００７４】
除算部３７０は、比較器３７１、右シフタ３７２、セレクタ３７３、３７６、除算器３７４および減算器３７５を有する。比較器３７１、右シフタ３７２およびセレクタ３７３を含むブロックは、所定のビット数で表されるべき乗加算値Ｄｅａをシフトして正規化する正規化部の一例である。
【００７５】
除算部３７０に除数として転送されるべき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）の取り得る範囲は、値Ｆが０以上で１未満の実数で、値Ｉが０以上の自然数であるため、１以上で３未満である。このため、例えば、除算器３７４による除算における除数の範囲が１以上で２未満に決められている場合、値が２以上のべき乗加算値Ｄｅａは、１以上で２未満の範囲内に納めるシフト量でシフトされ正規化される。
【００７６】
例えば、比較器３７１は、加算部３５０から受けたべき乗加算値Ｄｅａと値“２”とを比較し、べき乗加算値Ｄｅａが２以上か否かを示す比較結果を選択制御信号としてセレクタ３７３、３７６に出力する。
【００７７】
右シフタ３７２は、加算部３５０から受けたべき乗加算値Ｄｅａ（より詳細には、べき乗加算値Ｄｅａを示すデータ）を右に１ビットシフトする。これにより、値が２以上のべき乗加算値Ｄｅａは、１以上で２未満の範囲内に正規化される。そして、右シフタ３７２は、右シフトしたべき乗加算値Ｄｅａをセレクタ３７３に出力する。
【００７８】
セレクタ３７３は、右シフタ３７２から受けたべき乗加算値Ｄｅａ（右シフトされたべき乗加算値Ｄｅａ）と加算部３５０から受けたべき乗加算値Ｄｅａとのいずれかを、比較器３７１から受ける選択制御信号に基づいて選択する。例えば、セレクタ３７３は、べき乗加算値Ｄｅａが２以上であることを示す選択制御信号を比較器３７１から受けた場合、右シフタ３７２から受けたべき乗加算値Ｄｅａを、正規化されたべき乗加算値Ｄｅａｎとして除算器３７４に出力する。また、セレクタ３７３は、べき乗加算値Ｄｅａが２未満であることを示す選択制御信号を比較器３７１から受けた場合、加算部３５０から受けたべき乗加算値Ｄｅａを、正規化されたべき乗加算値Ｄｅａｎとして除算器３７４に出力する。
【００７９】
除算器３７４は、べき乗減算値Ｄｅｓを正規化されたべき乗加算値Ｄｅａ（べき乗加算値Ｄｅａｎ）で除算する除算演算部の一例である。例えば、除算器３７４は、減算部３６０から受けたべき乗減算値Ｄｅｓ（＝２Ｆ−２-Ｉ）を、セレクタ３７３から受けたべき乗加算値Ｄｅａｎ（“２Ｆ＋２-Ｉ”を１以上で２未満の範囲内に正規化したべき乗加算値Ｄｅａｎ）で除算して、除算値Ｄｄｉｖを算出する。そして、除算器３７４は、除算値Ｄｄｉｖの指数部Ｄｄｉｖ［３０：２３］である値Ｄｄｉｖｅ［７：０］を減算器３７５およびセレクタ３７６に出力する。また、除算器３７４は、除算値Ｄｄｉｖの仮数部Ｄｄｉｖ［２２：０］である値Ｄｄｉｖｆ［２２：０］を、後述する選択部３８０内のセレクタ３８３に出力する。
【００８０】
減算器３７５およびセレクタ３７６を含むブロックは、除算器３７４（除算演算部）による除算結果を正規化によるシフト量に基づいて補正することで除算値を算出する補正部の一例である。例えば、減算器３７５は、除算器３７４から受けた値Ｄｄｉｖｅ［７：０］（除算値Ｄｄｉｖの指数部）から“１”を減算し、減算結果をセレクタ３７６に出力する。すなわち、減算器３７５は、除算値Ｄｄｉｖを“２”で除算した値の指数部をセレクタ３７６に出力する。除算値Ｄｄｉｖを“２”で除算した値は、べき乗加算値Ｄｅａｎがべき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）を右に１ビットシフトして正規化されている場合、べき乗減算値Ｄｅｓ（＝２Ｆ−２-Ｉ）をべき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）で除算した値である。すなわち、減算器３７５は、べき乗加算値Ｄｅａｎがべき乗加算値Ｄｅａを右に１ビットシフトして正規化されている場合、べき乗減算値Ｄｅｓを正規化される前のべき乗加算値Ｄｅａで除算した除算値Ｄｄｉｖの指数部を、セレクタ３７６に出力する。
【００８１】
セレクタ３７６は、減算器３７５から受けた減算結果（値Ｄｄｉｖｅ［７：０］から“１”を減算した演算結果）と除算器３７４から受けた値Ｄｄｉｖｅ［７：０］とのいずれかを、比較器３７１から受ける選択制御信号に基づいて選択する。例えば、セレクタ３７６は、べき乗加算値Ｄｅａが２以上であることを示す選択制御信号を比較器３７１から受けた場合、減算器３７５から受けた減算結果を除算値Ｄｄｉｖの指数部として、後述する選択部３８０内のセレクタ３８２に出力する。また、セレクタ３７６は、べき乗加算値Ｄｅａが２未満であることを示す選択制御信号を比較器３７１から受けた場合、除算器３７４から受けた値Ｄｄｉｖｅ［７：０］を、除算値Ｄｄｉｖの指数部としてセレクタ３８２に出力する。
【００８２】
このように、べき乗加算値Ｄｅａｎがべき乗加算値Ｄｅａ（＝２Ｆ＋２-Ｉ）を右に１ビットシフトして正規化されている場合、除算器３７４による除算結果（除算値Ｄｄｉｖ）は、正規化によるシフト量に基づいて補正される。
【００８３】
選択部３８０は、判定部３８１およびセレクタ３８２、３８３を有する。判定部３８１は、符号抽出部３０３から乗算部３１０に転送されたデータｘ（＝｜ｘ｜）が９以上か否かを判定する。そして、判定部３８１は、乗算部３１０に転送されたデータｘ（＝｜ｘ｜）が９以上か否かを示す判定結果を選択制御信号としてセレクタ３８２、３８３に出力する。
【００８４】
例えば、判定部３８１は、減算器３０４から受けたデータｘｅｒ［７：０］が“８’ｈ０４”以上の場合、乗算部３１０に転送されたデータｘ（＝｜ｘ｜）が９以上であると判定する。すなわち、判定部３８１は、データｘの指数部の値（バイアス値（＝１２７）を減算した後の指数部の値）が１６以上の場合、乗算部３１０に転送されたデータｘ（＝｜ｘ｜）が９以上であると判定する。また、判定部３８１は、データｘｅｒ［７：０］が“８’ｈ０３”で、かつ、符号抽出部３０３から受けたデータｘｆ［２２：０］が“２３’ｈ１０＿００００”以上の場合、乗算部３１０に転送されたデータｘ（＝｜ｘ｜）が９以上であると判定する。すなわち、判定部３８１は、データｘの指数部の値（バイアス値（＝１２７）を減算した後の指数部の値）が“８”で、データｘの仮数部の値が１．１２５以上の場合、乗算部３１０に転送されたデータｘ（＝｜ｘ｜）が９以上であると判定する。
【００８５】
セレクタ３８２は、“１”をＩＥＥＥ７５４で表現した場合の指数部からバイアス値（＝１２７）を減算した値“８’ｈ００”と、セレクタ３７６から受けた除算値Ｄｄｉｖの指数部とのいずれかを、判定部３８１から受ける選択制御信号に基づいて選択する。例えば、セレクタ３８２は、データｘ（＝｜ｘ｜）が９以上であることを示す選択制御信号を判定部３８１から受けた場合、値“８’ｈ００”を、後述する符号反映部３９０内の加算器３９１に出力する。また、セレクタ３８２は、データｘ（＝｜ｘ｜）が９未満であることを示す選択制御信号を判定部３８１から受けた場合、セレクタ３７６から受けた除算値Ｄｄｉｖの指数部を、符号反映部３９０内の加算器３９１に出力する。
【００８６】
セレクタ３８３は、“１”をＩＥＥＥ７５４で表現した場合の仮数部の値“２３’ｈ００＿００００”と、除算器３７４から受けた除算値Ｄｄｉｖの仮数部の値Ｄｄｉｖｆ［２２：０］とのいずれかを、判定部３８１から受ける選択制御信号に基づいて選択する。例えば、セレクタ３８３は、データｘ（＝｜ｘ｜）が９以上であることを示す選択制御信号を判定部３８１から受けた場合、値“２３’ｈ００＿００００”を値ｙｆ［２２：０］として、後述する符号反映部３９０内の符号付加部３９２に出力する。また、セレクタ３８３は、データｘ（＝｜ｘ｜）が９未満であることを示す選択制御信号を判定部３８１から受けた場合、除算値Ｄｄｉｖの仮数部の値Ｄｄｉｖｆ［２２：０］を値ｙｆ［２２：０］として、符号反映部３９０内の符号付加部３９２に出力する。
【００８７】
このように、セレクタ３８２、３８３は、データｘ（＝｜ｘ｜）が９未満であることを示す選択制御信号を判定部３８１から受けた場合、除算部３７０による除算の結果として、“１”を符号反映部３９０に出力する。
【００８８】
符号反映部３９０は、加算器３９１および符号付加部３９２を有する。加算器３９１は、セレクタ３８２から受けた値（値“８’ｈ００”と除算値Ｄｄｉｖの指数部とのいずれか）とＩＥＥＥ７５４表現のバイアス値（＝１２７）とを加算して値ｙｅ［７：０］を算出し、算出した値ｙｅ［７：０］を符号付加部３９２に出力する。なお、値ｙｅ［７：０］は、データｘで双曲線正接関数の演算を実行した結果ｙ［３１：０］をＩＥＥＥ７５４で表現した場合の指数部の値である。
【００８９】
符号付加部３９２は、符号抽出部３０３から受けた符号情報ＳＩＮＦが示す値を、データｘで双曲線正接関数の演算を実行した結果ｙ［３１：０］の符号ビットｙ［３１］に設定する。これにより、データｘの絶対値｜ｘ｜で双曲線正接関数の演算を実行した結果にデータｘの符号が反映される。また、符号付加部３９２は、加算器３９１から受けた値ｙｅ［７：０］を結果ｙ［３１：０］の指数部ｙ［３０：２３］に設定し、セレクタ３８３から受けた値ｙｆ［２２：０］を結果ｙ［３１：０］の仮数部ｙ［２２：０］に設定する。これにより、結果ｙ［３１：０］を示すデータ（ＩＥＥＥ７５４に準拠した単精度浮動小数点数）が生成される。そして、符号付加部３９２は、生成したデータｙ［３１：０］（＝｛ＳＩＮＦ，ｙｅ［７：０］，ｘｙ［２２：０］｝を、記憶部２０に格納する。
【００９０】
すなわち、演算部３４は、データｘが９（所定値）以上の場合、データｘで双曲線正接関数の演算を実行した結果ｙ［３１：０］として、“１”を記憶部２０に格納し、データｘが−９以下の場合、結果ｙ［３１：０］として、“−１”を記憶部２０に格納する。また、演算部３４は、データｘが０以上で９未満の場合、データｘで双曲線正接関数の演算を実行した結果ｙ［３１：０］として、データｘの絶対値｜ｘ｜を用いて算出した除算値Ｄｄｉｖを記憶部２０に格納する。そして、演算部３４は、データｘが０未満で−９より大きい場合、データｘで双曲線正接関数の演算を実行した結果ｙ［３１：０］として、データｘの絶対値｜ｘ｜を用いて算出した除算値Ｄｄｉｖに“−１”を乗算した値を、記憶部２０に格納する。
【００９１】
なお、演算部３４内の各ブロックの構成は、図５に示す例に限定されない。例えば、減算器３０４は、選択部３８０内のブロックとして定義されてもよい。あるいは、比較器３７１、右シフタ３７２、セレクタ３７３、３７６および減算器３７５は、除算部３７０の外部のブロックとして定義されてもよい。
【００９２】
ここで、図５に示す演算部３４では、乗算器（乗算部３１０）、べき乗演算器３３２等を有する既存の演算処理装置に、双曲線正接関数の演算を実行する機能を追加する場合、ＣＯＲＤＩＣ回路を用いる場合に比べて、新たに追加する回路の規模を削減できる。
【００９３】
例えば、除算部３７０に入力する被除数（べき乗減算値Ｄｅｓ）および除数（べき乗加算値Ｄｅａ）は、第２べき乗部３４０、加算部３５０および減算部３６０を既存の演算処理装置に追加することにより、生成可能である。第２べき乗部３４０は、デコーダで実現できるため、ＣＯＲＤＩＣ回路内のシフタに比べて、回路規模を低減できる。
【００９４】
例えば、データｘの絶対値｜ｘ｜が９以上では、除算部３７０の除算結果（除算値Ｄｄｉｖ）が選択されないため、第２べき乗部３４０は、絶対値｜ｘ｜が９未満の場合に、整数べき乗値Ｄｅｉを算出できればよい。絶対値｜ｘ｜が９未満の場合、定数乗算値Ｄｍｘが“９＊２／ｌｎ２”（＝２５．９６８５１・・・）未満であるため、値Ｉの範囲は、０以上で２５以下である。この場合、値Ｉが５ビットで表されるため、第２べき乗部３４０は、出力１ビットあたり、５入力ＡＮＤを含む回路程度の規模になる。これに対し、ＣＯＲＤＩＣ回路を用いて、双曲線正接関数の演算を単精度浮動小数点数で実行する場合、ＣＯＲＤＩＣ回路内のシフタ（例えば、シフト量が１から２３ビット）は、出力１ビットあたり、２入力ＡＮＤおよび２３入力ＯＲを含む回路程度の規模になる。
【００９５】
また、除算器３７４の前段の右シフタ３７２のシフト量は、上述したように、１ビットである。これに対し、ＣＯＲＤＩＣ回路で算出した双曲線余弦関数（ｃｏｓｈ）を除算器３７４の除数として正規化するシフタのシフト量は、例えば、最大で１１ビット程度である。このため、演算部３４では、ＣＯＲＤＩＣ回路を用いて双曲線正接関数の演算を実行する場合に比べて、除算器３７４に入力する除数を正規化するシフタ（右シフタ３７２）の回路規模を低減できる。
【００９６】
以上、図３から図５に示す実施形態においても、図１または図２に示した実施形態と同様の効果を得ることができる。例えば、演算部３４は、図１で説明した式（１）、すなわち、双曲線正接関数“ｙ＝ｔａｎｈ（ｘ）”を“２ｘ／ｌｎ２”の整数部の値Ｉと小数部の値Ｆを用いて表した式に基づいて、双曲線正接関数の演算を実行する。これにより、演算部３４は、ＣＯＲＤＩＣ回路を用いることなく、双曲線正接関数の演算を実行できる。この結果、双曲線正接関数の演算を実行する演算処理装置１４の回路規模を低減することができる。
【００９７】
さらに、演算処理装置１４は、データｘの絶対値｜ｘ｜が所定値（例えば、“９”）以上の場合、データ値ｘで双曲線正接関数の演算を実行した結果ｙ［３１：０］として、“１”または“−１”をデータｘの符号に応じて記憶部２０に格納する。すなわち、定数乗算値Ｄｍｘ（＝２ｘ／ｌｎ２）に基づく演算の結果（例えば、除算値Ｄｄｉｖ等）は、データｘの絶対値｜ｘ｜が９未満の場合に使用される。このため、演算処理装置１４では、定数乗算値Ｄｍｘの整数部の値Ｉの範囲を限定すること（例えば、０≦Ｉ≦２５）ができ、第２べき乗部３４０の回路規模を低減することができる。
【００９８】
図６は、演算処理装置および演算処理装置の制御方法の別の実施形態を示す。図１から図５で説明した要素と同一または同様の要素については、同一または同様の符号を付し、これ等については、詳細な説明を省略する。図６に示す演算処理装置１６は、例えば、ＣＰＵ等のプロセッサであり、サーバまたはスーパーコンピュータ等の情報処理装置１に含まれる。演算処理装置１６は、図５に示した演算部３４を複数有することをのぞいて、図３に示した演算処理装置１４と同一または同様である。例えば、演算処理装置１６は、データ値ｘを記憶するレジスタファイル等の記憶部２０と、記憶部２０に記憶されたデータ値ｘを用いて双曲線正接関数の演算を実行する複数の演算部３４（３４ａ、３４ｂ、３４ｃ、３４ｄ）とを有する。並列に配置された複数の演算部３４は、例えば、双曲線正接関数等の演算を１つの命令に基づいて同時に実行するＳＩＭＤ（Single Instruction Multiple Data）型演算器として動作する。
【００９９】
演算処理装置１６は、乗算、２のべき乗の計算（２を底とする指数関数の演算）および除算の各々を同時に実行するＳＩＭＤ演算命令に加えて、双曲線正接関数の演算を同時に実行するＳＩＭＤ演算命令を実行可能である。例えば、演算処理装置１６は、双曲線正接関数の演算を同時に実行するＳＩＭＤ演算命令が発行された場合、記憶部２０から３２ビットの４つの入力データを４つの演算部３４にそれぞれ転送する。そして、４つの演算部３４の各々が、双曲線正接関数の演算を実行し、各々の演算結果（４つの演算結果）を記憶部２０に書き戻す。演算処理装置１６は、４つの演算結果を記憶部２０に書き戻した時点で、双曲線正接関数の演算を同時に実行するＳＩＭＤ演算命令を完了する。
【０１００】
演算処理装置１６は、例えば、活性化関数に双曲線正接関数を用いるディープニューラルネットワーク（Deep Neural Network）の演算処理を目的とした計算機に適用される。活性化関数に双曲線正接関数を用いるディープニューラルネットワークでは、演算処理に複数の双曲線正接関数の演算が要求される。また、要求される複数の双曲線正接関数の演算は、互いに依存性がなくデータが並列であるため、ＳＩＭＤ方式による並列化に適している。例えば、活性化関数に双曲線正接関数を用いるディープニューラルネットワークによる画像認識が実行される場合、画像データに対して畳み込み演算や行列演算等を実行して得られるデータが４つの演算部３４に並列に入力される。そして、４つの演算部３４による演算結果（双曲線正接関数の演算を実行した結果）は、例えば、ディープニューラルネットワークによる画像認識の結果として、記憶部２０に書き戻される。
【０１０１】
なお、演算処理装置１６の構成および演算処理装置１６の制御方法は、図６に示す例に限定されない。例えば、演算処理装置１６が有する演算部３４の数は、２つでもよいし、３つでもよい。あるいは、演算処理装置１６が有する演算部３４の数は、５つ以上でもよい。
【０１０２】
以上、図６に示す実施形態においても、図３から図５に示した実施形態と同様の効果を得ることができる。例えば、双曲線正接関数の演算を実行する演算処理装置１６の回路規模を低減することができる。さらに、演算処理装置１６は、１つの命令（ＳＩＭＤ演算命令）に基づいて、双曲線正接関数の演算を同時に実行できる。
【０１０３】
以上の実施形態において説明した発明を整理して、付記として以下の通り開示する。
（付記１）
データ値を記憶する記憶部と前記データ値を用いて双曲線正接関数の演算を実行する演算部とを有する演算処理装置において、
前記演算部は、
“２”を２の自然対数で除算した定数値と前記記憶部から前記演算部に転送される前記データ値とを乗算した定数乗算値を算出する乗算部と、
前記定数乗算値を整数部と小数部に分離する分離部と、
前記定数乗算値の小数部の値を指数とする２のべき乗で表される小数べき乗値を算出する第１べき乗部と、
前記定数乗算値の整数部の値に“−１”を乗算した値を指数とする２のべき乗で表される整数べき乗値を算出する第２べき乗部と、
前記小数べき乗値と前記整数べき乗値とを加算したべき乗加算値を算出する加算部と、
前記小数べき乗値から前記整数べき乗値を減算したべき乗減算値を算出する減算部と、
前記データ値で双曲線正接関数の演算を実行した結果として、前記べき乗減算値を前記べき乗加算値で除算した除算値を算出する除算部と
を有することを特徴とする演算処理装置。
（付記２）
付記１に記載の演算処理装置において、
前記演算部は、さらに、
前記記憶部から転送される前記データ値の絶対値を、前記定数値に乗算する前記データ値として前記乗算部に出力する符号処理部と、
前記絶対値で双曲線正接関数の演算を実行した結果に前記データ値の符号を反映し、反映結果を、前記データ値で双曲線正接関数の演算を実行した結果として前記記憶部に出力する符号反映部と
を有することを特徴とする演算処理装置。
（付記３）
付記２に記載の演算処理装置において、
前記演算部は、さらに、
前記絶対値が所定値以上の場合、前記絶対値で双曲線正接関数の演算を実行した結果として“１”を前記符号反映部に出力し、前記絶対値が前記所定値未満の場合、前記絶対値で双曲線正接関数の演算を実行した結果として前記除算値を前記符号反映部に出力する選択部を有する
ことを特徴とする演算処理装置。
（付記４）
付記１ないし付記３のいずれか１項に記載の演算処理装置において、
前記除算部は、
所定のビット数で表される前記べき乗加算値をシフトして正規化する正規化部と、
前記べき乗減算値を正規化されたべき乗加算値で除算する除算演算部と、
前記除算演算部による除算結果を前記正規化によるシフト量に基づいて補正することで前記除算値を算出する補正部と
を有することを特徴とする演算処理装置。
（付記５）
付記４に記載の演算処理装置において、
前記正規化部は、前記除算演算部による除算の除数を予め決められた範囲内に収めるシフト量で、前記べき乗加算値をシフトする
ことを特徴とする演算処理装置。
（付記６）
付記１に記載の演算処理装置において、
前記演算部は、さらに、
前記記憶部から転送される前記データ値の絶対値が所定値以上の場合、前記除算値に拘わらず、前記データ値の符号に応じて“１”および“−１”のいずれかを、前記データ値で双曲線正接関数の演算を実行した結果として選択する選択部を有する
ことを特徴とする演算処理装置。
（付記７）
データ値を記憶する記憶部と前記データ値を用いて双曲線正接関数の演算を実行する演算部とを有する演算処理装置の制御方法において、
前記演算部が有する乗算部が、“２”を２の自然対数で除算した定数値と前記記憶部から前記演算部に転送される前記データ値とを乗算した定数乗算値を算出し、
前記演算部が有する分離部が、前記定数乗算値を整数部と小数部に分離し、
前記演算部が有する第１べき乗部が、前記定数乗算値の小数部の値を指数とする２のべき乗で表される小数べき乗値を算出し、
前記演算部が有する第２べき乗部が、前記定数乗算値の整数部の値に“−１”を乗算した値を指数とする２のべき乗で表される整数べき乗値を算出し、
前記演算部が有する加算部が、前記小数べき乗値と前記整数べき乗値とを加算したべき乗加算値を算出し、
前記演算部が有する減算部が、前記小数べき乗値から前記整数べき乗値を減算したべき乗減算値を算出し、
前記演算部が有する除算部が、前記データ値で双曲線正接関数の演算を実行した結果として、前記べき乗減算値を前記べき乗加算値で除算した除算値を算出する
ことを特徴とする演算処理装置の制御方法。
【０１０４】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１０５】
１‥情報処理装置；１０、１２、１４、１６‥演算処理装置；２０‥記憶部；３０、３２、３４‥演算部；３０２‥符号処理部；３０３‥符号抽出部；３０４‥減算器；３１０‥乗算部；３２０‥分離部；３３０‥第１べき乗部；３３２‥べき乗演算器；３４０‥第２べき乗部；３５０‥加算部；３６０‥減算部；３７０‥除算部；３７１‥比較器；３７２‥右シフタ；３７３、３７６、３８２、３８３‥セレクタ；３７４‥除算器；３７５‥減算器；３８０‥選択部；３８１‥判定部；３９０‥符号反映部；３９１‥加算器；３９２‥符号付加部
【図１】
2019101896.tif 000003
【図２】
2019101896.tif 000004
【図３】
2019101896.tif 000005
【図４】
2019101896.tif 000006
【図５】
2019101896.tif 000007
【図６】
2019101896.tif 000008