JP6933810B2 - 演算処理装置および演算処理装置の制御方法 - Google Patents

演算処理装置および演算処理装置の制御方法 Download PDF

Info

Publication number
JP6933810B2
JP6933810B2 JP2018009607A JP2018009607A JP6933810B2 JP 6933810 B2 JP6933810 B2 JP 6933810B2 JP 2018009607 A JP2018009607 A JP 2018009607A JP 2018009607 A JP2018009607 A JP 2018009607A JP 6933810 B2 JP6933810 B2 JP 6933810B2
Authority
JP
Japan
Prior art keywords
bqx
input
bit
coefficient
output
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018009607A
Other languages
English (en)
Other versions
JP2019128763A (ja
Inventor
北村 健一
健一 北村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2018009607A priority Critical patent/JP6933810B2/ja
Priority to US16/243,133 priority patent/US10824395B2/en
Publication of JP2019128763A publication Critical patent/JP2019128763A/ja
Application granted granted Critical
Publication of JP6933810B2 publication Critical patent/JP6933810B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/548Trigonometric functions; Co-ordinate transformations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2101/00Indexing scheme relating to the type of digital function generated
    • G06F2101/04Trigonometric functions

Description

本発明は,演算処理装置および演算処理装置の制御方法に関する。
演算処理装置は、例えばCPU(Central Processing Unit)またはプロセッサであり、命令をデコードする命令デコーダと、デコードされた命令に対応する演算を実行する演算器(演算回路)と、メインメモリのデータの一部を記憶するキャッシュメモリなどを有する。
演算器は、入力オペランドのデータを入力して演算し、演算結果を格納レジスタに格納し、さらに、その演算結果を再度入力オペランドとして入力して同じ演算または別の演算を実行する。また、演算器は、パイプライン構成を有し、上記の演算を所定のクロック周期で繰り返す。このような演算器については、以下の特許文献1−3に開示されている。
一方、数学関数f(x)は、後述するテイラー級数の展開式で表すことができる。そして、三角関数のテイラー級数では、初期値に入力xを乗算しその乗算値に次数番号に対応した係数を加算して積和値rを求め、その積和値rに入力xを乗算しその乗算値に次の次数番号に対応した係数を加算して新たな積和値rを求めることを繰り返す。
三角関数sin(x), cos(x)は、角度の入力xの2πの周期で同じ値になる。また、正弦sin(x)と余弦cos(x)は、互いに入力xがπ/2ずれると同じ値をとる。このような性質に注目すると、演算器は、sin(x)については入力xが2πの周期を4等分した角度範囲のいずれに属するかに応じて、sin(x)を、sin(x-x0), -sin(x-x0), cos(x-x0), -cos(x-x0)のいずれかのテイラー級数で演算することができる。また、sin(x)とcos(x)のテイラー級数の展開式の間には類似性がある。ここで、展開点x0は、上記4等分した角度範囲に対応する基準の角度である。
これらの性質に基づいて、三角関数sin(x), cos(x)のテイラー級数の展開式による演算を高い処理効率で行う演算処理装置が提案されている。例えば、以下の特許文献2などに開示されている。
この演算処理装置は、特殊な補助命令により入力xに対する一定の補助処理を実行し、その後、テイラー級数を演算する積和演算命令を補助処理で求めた値を使用して実行する。前述したとおり、テイラー級数の展開式の演算命令は、テイラー級数の係数を係数メモリから抽出しながら積和演算を繰り返す。
特開2008−234076号公報 特開2011−13728号公報 特開2009−169767号公報
しかしながら、上記の補助命令の演算が完了した後でなければ、テイラー級数の積和演算命令を実行することができず、処理効率の低下が避けられないことが見いだされた。
そこで,本実施の形態の第1の側面の目的は,テイラー級数の演算の処理効率を高めた演算処理装置および演算処理装置の制御方法を提供することにある。
本実施の形態の第1の側面は,
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第1、第2、第3の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第1のバイパス経路と、
前記レジスタファイルと前記第1のバイパス経路のいずれかを選択し、前記積和演算器の第1、第2、第3の入力にそれぞれ出力する第1、第2、第3のマルチプレクサと、
前記積和演算器の出力の符号ビットと、前記第2の入力の最下位ビット(rs2[0]=bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「1.0」とのいずれかを選択する第1のセレクタと、
前記第2の入力の第1ビット(rs2[1]=bqx[1])と前記第1のセレクタの出力の符号ビットとの排他的論理和を演算する排他的論理和回路と、
前記積和演算器の第2の入力の最下位ビット(rs2[0]=bqx[0])を前記係数セレクタに供給する第2のバイパス経路とを有し、
三角関数sin(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx)の4の剰余(qx%4)である展開点識別データ(bqx=qx%4)と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0(bqx*π/2)を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第2の入力とし、第1変数y2tを出力とする第1の補助命令を実行して、前記積和演算器が前記第1の入力yを二乗して二乗値(y2t)を求め、前記論理和回路により、前記第2の入力である展開点識別データbqxの最下位ビット(bqx[0])と前記二乗値の符号ビット(y2t[63])との論理和を求め、前記論理和を前記二乗値(y2t)の符号ビットに格納し前記第1変数y2tを求め、
前記yと展開点識別データbqxを第1、第2の入力とし、第2変数ysを出力とする第2の補助命令を実行して、前記第1のセレクタにより、前記第1の入力yまたは値「1.0」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、当該選択されたデータの符号ビット([63])と前記展開点識別データの第1ビット(bqx[1])との排他的論理和を前記排他的論理和回路により求め、前記選択されたデータの符号ビットに格納して前記第2変数ysを求め、
前回の演算出力(r)と前記第1変数(y2t)と係数インデックスを第1、第2、第3の入力とし積和演算を行う第3の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第3の補助命令の出力に、前記第2の補助命令で求めた前記第2変数ysを乗算して、前記三角関数sin(x)を算出する、演算処理装置である。
本実施の形態の第2の側面は,
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第1、第2、第3の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第1のバイパス経路と、
前記レジスタファイルと前記第1のバイパス経路のいずれかを選択し、前記積和演算器の第1、第2、第3の入力にそれぞれ出力する第1、第2、第3のマルチプレクサと、
前記積和演算器の出力の符号ビット([63])と、前記第2の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「1.0」とのいずれかを選択する第1のセレクタと、
前記第2の入力の最下位ビット(rs2[0]=bqx[0])と第1ビット(rs2[1]=bqx[1])との第1の排他的論理和を演算する第1の排他的論理和回路と、
前記第1の排他的論理和のビットと前記第1のセレクタの出力の符号ビットとの第2の排他的論理和を演算する第2の排他的論理和回路と、
前記積和演算器の第2の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])を前記係数セレクタに供給する第2のバイパス経路(BYP_2)とを有し、
三角関数cos(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx)の4の剰余(qx%4)である展開点識別データ(bqx=qx%4)と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0(bqx*π/2)を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第2の入力とし、第1変数y2tを出力とする第1の補助命令を実行して、前記積和演算器が前記第1の入力yを二乗して二乗値(y2t)を求め、前記論理和回路により、前記第2の入力である展開点識別データbqxの最下位ビットの反転ビット(~bqx[0])と前記二乗値の符号ビット(y2t[63])との論理和を求め、前記論理和を前記二乗値(y2t)の符号ビットに格納して第1変数y2tを求め、
前記yと展開点識別データbqxを第1、第2の入力とし、第2変数ysを出力とする第2の補助命令を実行して、前記第1のセレクタにより、前記第1の入力yまたは値「1.0」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、前記第1の排他的論理和回路により、前記展開点識別データの最下位ビット(bqx[0])と第1ビット(bqx[1])の第1の排他的論理和を求め、前記第2の排他的論理和回路により、前記第1の排他的論理和と前記第1のセレクタで選択されたデータの符号ビット([63])との第2の排他的論理和を求め、前記選択されたデータの符号ビットに格納して前記第2変数ysを求め、
前回の演算出力(r)と前記第1変数(y2t)と係数インデックスを第1、第2、第3の入力とし積和演算を行う第3の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第3の補助命令の出力に、前記第2の補助命令で求めた前記第2変数ysを乗算して、前記三角関数cos(x)を算出する、演算処理装置である。
第1の側面によれば,テイラー級数の演算の処理効率を高めることができる。
演算処理装置の概略を示す図である。 係数メモリ160とセレクタ170の構成を示す図である。 テイラー級数の演算式を示す図である。 図3の演算式に基づいて、正弦sin(y)と余弦cos(y)のテイラー級数を展開した演算式を示す図である。 三角関数sin(x)について展開点x0とsin(y)=sin(x-x0)との関係を示す図である。 展開点識別データbqx=qx%4の下位2ビットと展開すべき関数およびそのテイラー級数の展開式との関係をまとめた図表である。 図6の4種類のテイラー級数の展開式を変形したものを示す図表である。 第1、第2の補助命令Ftrismuld、Ftrisseldのアセンブリ言語表記と、三角関数sin(x)に適用した場合のそれぞれの具体例とを示す図表である。 第1の補助命令Ftrismuldの処理内容を示す図である。 第2の補助命令Ftrisseldの処理内容を示す図である。 テイラー級数の積和演算命令Ftrimadddと乗算命令Fmuldのアセンブリ言語表記と、三角関数sin(x), cos(x)に適用した場合のそれぞれの具体例とを示す図表である。 三角関数sin(x)のテイラー級数展開の演算の前処理のアセンブラ言語記述によるオペレーションコードと演算内容を示す図表である。 後処理でのアセンブラ言語記述のよるオペレーションコードと演算内容との関係図である。 図13の演算のsin(x)の具体的な演算式を示す図である。 積和演算器100の乗算器部分の詳細構成図である。 入力レジスタ101,102と結果レジスタ109のフォーマットを示す図である。 図1の演算処理装置のバイパス経路を示す図である。 本実施の形態における積和演算器100の乗算器部分を含む構成を示す図である。 本実施の形態における演算処理装置のバイパス経路を示す図である。 本実施の形態の演算処理装置1の構成を示す図である。 命令発行制御部202を含む図20の演算処理装置の動作を示すフローチャート図である。 三角関数cos(x)の場合のbqx=qx%4の下位2ビットと展開すべき関数およびそのテイラー級数の展開式との関係をまとめた図表である。 三角関数cos(x)の場合の前処理の補助命令Ftricmuld、Ftricseldのアセンブリ言語表記と、三角関数cos(x)に適用した場合のそれぞれの具体例とを示す図表である。 三角関数cos(x)の場合の演算処理装置1の構成を示す図である。
[演算処理装置の概略]
図1は、演算処理装置の概略を示す図である。この演算処理装置は、前述の補助命令を実行するための構成を有する。まず、概略構成を説明すると、演算処理装置1は、積和演算器100と、積和演算器の演算結果を一時的に格納するリネーミングレジスタ130と、リネーミングレジスタ130に格納した演算結果を演算結果の順番が来た時に格納する格納レジスタ140とを有する。これらのレジスタは、複数のレジスタを有するレジスタファイルである。以下簡略的にレジスタと称する。また、外部のメインメモリ111のデータの一部を記憶するキャッシュメモリを有するキャッシュ120から読み出されたデータが、リネーミングレジスタ130または格納レジスタ140に格納される。
更に、演算処理装置1は、積和演算器の第1のオペランドレジスタに第1の入力データを入力する第1のマルチプレクサ156と、第2のオペランドレジスタに第2の入力データを入力する第2のマルチプレクサ154と、第3のオペランドレジスタに第3の入力データを入力する第3のマルチプレクサ152を有する。これらのマルチプレクサ152,154,156は、セレクタであり、リネーミングレジスタ130、格納レジスタ140、及びバイパスルートBYP_1を含む複数のバイパスルート150のいずれかを選択する。図1では、図示されるとおり、これらのマルチプレクサの入力端子は一部省略され、出力ノードnd1, nd2, nd3が示されている。
また、演算処理装置1は、テイラー級数の演算を行うために、テイラー級数の係数が記憶された係数メモリ(ROM:Read Only Memory)160を有し、インデックスindexで選択された2種類の係数から、セレクタ170により選択された係数が、セレクタ172、180により選択され、積和演算器100の第3のオペランドレジスタに入力される。
積和演算器100は、例えば倍精度の浮動小数点演算を行う。倍精度の場合データは64ビットである。但し、倍精度以外の他の精度の浮動小数点演算を行う積和演算器100でも、本実施の形態に適用可能である。例えば単精度の場合、データ幅は32ビットである。
図1の演算処理装置1は、前述した第1、第2の補助命令Ftrismuld及びFtrisseldと、テイラー級数の展開式を演算する積和演算命令Ftrimadddとを実行する。積和演算命令もテイラー級数の展開式を演算する第3の補助命令である。これらの命令の処理内容は後程詳述するが、演算処理装置1は、2つの補助命令と積和演算命令を実行するために積和演算器100に加えて特殊な構成を有する。
例えば、第1の補助命令Ftrismuldを実行する場合、セレクタ180、182、190がそれぞれ「1」側の入力端子を選択するよう制御される。そして、論理和回路188は、積和演算器100の演算出力の符号ビットである最上位ビット[63]を、係数メモリ160のセット番号となる選択ビットに置き換えるFtrismuldの符号処理回路である。セット番号となる選択ビットは、ノードnd2の最下位ビット[0]である。
また、第2の補助命令Ftrisseldを実行する場合、セレクタ192が「1」側の入力端子を選択するよう制御される。また、セレクタ184がセット番号となる選択ビットに基づいてノードnd1(第1の入力)または値「1.0」のいずれかを選択し、EORゲート186が、セレクタ184の出力の符号ビットである最上位ビット[63]を、ノードnd2(第2の入力)の第1ビット[1]で反転する。
そして、テイラー級数の積和演算命令Ftrimadddを実行する場合、セレクタ172が「1」側の入力を選択するよう制御される。それにより、係数メモリ160から抽出された係数が積和演算器100の第3のオペランドレジスタに入力される。さらに、マルチプレクサ154,156の出力ノードnd2,nd1のデータが、積和演算器100の第2、第1のオペランドレジスタに入力される。
そして、積和演算器100の演算結果は、第1のバイパスルートBYP_1を経由して、積和演算器100の第1の入力オペランドに入力される。同時に、係数メモリから新たに抽出された係数と、第1の補助命令Ftrismuldで算出されたデータとが、積和演算器100の第3、第2の入力オペランドに入力される。これにより、積和演算器100が、前サイクルの積和演算の結果と係数と第1の補助命令で算出されたデータとを積和演算する。かかる積和演算が繰り返されて、テイラー級数の展開式の演算が実行される。
図2は、係数メモリ160とセレクタ170の構成を示す図である。係数メモリ160には、正弦sin(x)と余弦cos(x)のテイラー級数の係数が記憶される。ここで、正弦sin(x)と余弦cos(x)のテイラー級数の係数について説明する。
図3は、テイラー級数の演算式を示す図である。数学関数f(x)は図3のテイラー級数の展開式で表現できる。即ち、テイラー級数の演算式は、入力xについて展開点x0を決定し、級数(x-x0)nに係数(1/n!)f(n)(x0)を乗じて、nについて級数展開する。
図4は、図3の演算式に基づいて、正弦sin(y)と余弦cos(y)のテイラー級数を展開した演算式を示す図である。ここで、yは、入力x、展開点x0とした場合のy=x-x0である。図4に示されるとおり、sin(y)は奇数関数であり、cos(y)は偶数関数であり、それぞれの係数も異なる。
そこで、図2の係数メモリ160は、テイラー級数の次数番号162のインデックスindexにより、行方向のsin(y)(図2ではsin(x))の奇数次の係数と、cos(y) (図2ではcos(x))の偶数次の係数を選択し、sinとcosを選択するセット番号164によりセレクタ170がsin/cosのいずれかの係数を選択するよう構成される。したがって、図1に示すとおり、テイラー級数の展開式で演算する場合、積和演算命令Ftrimadddの引数であるインデックスindexで次数に対応する係数をそれぞれ選択し、セレクタ170がsinまたはcosの係数をセット番号である選択ビットに基づいて選択する。
[三角関数のテイラー級数の展開式と、上記の2つの補助命令Ftrismuld、Ftrisseldと、テイラー級数の積和演算命令Ftrimaddd、乗算命令Fmuld]
次に、三角関数のテイラー級数の展開式と、上記の2つの補助命令Ftrismuld、Ftrisseldと、テイラー級数の積和演算命令Ftrimadddと、乗算命令Fmuldについて説明する。図3にて数学関数f(x)のテイラー級数の展開式を、図4にて三角関数sin(y),cos(y)のテイラー級数の展開式をそれぞれすでに説明した。
図5は、三角関数sin(x)について展開点x0とsin(y)=sin(x-x0)との関係を示す図である。三角関数sin(x)は-∞<x<+∞の入力xに対する値であるが、sin(x)は入力xの2πの周期で同じ値をとる。そこで、入力xに対して0からπ/2ずつ増加する展開点x0 = 0, π/2, π, 3π/2…のいずれかを選択すれば、以下の関係が満たされる。これは、sin(x)とcos(x)とではxがπ/2ずれて等しいからである。
(1)x0=0, 2π, 4π…の場合、sin(x) = sin (x-x0) = sin(y)
(2)x0=0+π/2, 2π+π/2, 4π+π/2…の場合、sin(x) = cos (x-x0) = cos(y)
(3)x0=0+π, 2π+π, 4π+π…の場合、sin(x) = -sin (x-x0) = -sin(y)
(4)x0=0+3π/2, 2π+3π/2, 4π+3π/2…の場合、sin(x) = -cos (x-x0) = -cos(y)
そこで、入力xが上記4種類の展開点x0を中心とする前後±π/4の範囲、(2qx-1)π/4<x≦(2qx+1)π/4 (qxは整数)、内の場合、それぞれsin(x) を以下のようにして演算することができる。
(1)-π/4 < x ≦ +π/4(qx=4N,Nは整数)では、x0=0等, sin(x) = sin (x-x0) = sin(y)
(2)+π/4 < x ≦ +3π/4 (qx=4N+1)では、x0=π/2等, sin(x) = cos (x-x0) = cos(y)
(3)+3π/4 < x ≦ +5π/4 (or -5π/4 < y=x-x0 < -3π/4) (qx=4N+2)では、
x0=π or -π等, sin(x) = -sin (x-x0) = -sin(y)
(4)-3π/4 < x ≦ -π/4 (qx=4N+3)では、x0=3π/2 or -π/2等,
sin(x) = -cos (x-x0) = -cos(y)
上記のように入力xを4つ展開点x0と4つの狭い範囲に分けることで、それぞれの範囲内の入力xに対する三角関数sin(x)の値は、テイラー級数を少ない級数までの展開で、高い精度の値を得ることができる。
4つの範囲と4つの展開点x0は、入力xから以下のようにして算出されるbqx = 0,1,2,3により区別することができる。この算出は図5の右上にも示されている。
qx = int(x/(π/2)) : int(k)はkの小数点以下を切り捨てた整数
bqx = qx mod 4 = qx % 4 :mod, %は剰余である。
そして、x0 = qx * π/2であるので、
y = x - x0 = x - (qx * π/2)
そこで、以下、bqx、特にその下位2ビットbqx[1:0]を展開点識別データと定義する。
図6は、展開点識別データbqx=qx%4の下位2ビットと展開すべき関数およびそのテイラー級数の展開式との関係をまとめた図表である。展開点識別データbqxはbqの4に対する剰余であるので、下位2ビットは二進数では、bqx[1:0] = 00,01,10,11となる。そして、図6では、**はべき乗を、!は階乗をそれぞれ示す。
図7は、図6の4種類のテイラー級数の展開式を変形したものを示す図表である。図7には、展開点識別データbqx[1:0](=qx%4) = 00,01,10,11それぞれの関数sin(y), cos(y), -sin(y), -cos(y)の展開式が記載される。sin関数のテイラー級数の展開式は、y(=x-x0)の奇関数式(y(2n+1))で表される。一方、cos関数のテイラー級数の展開式は、y(=x-x0)の偶関数式(y2n)で表される。そのため、それぞれの展開式の括弧内は、y0, y2…y14にそれぞれsin,cosの係数(a3〜a15, b2〜b14)を乗じた偶関数の多項式(y−a3・y+・・・−a15・y14)という共通点を有する。一方、括弧以外は以下の差異点を有する。
(1)bqx[1:0] = 00の場合のsin(y)は、括弧の多項式にyを乗じる。
(2)bqx[1:0] = 01の場合のcos(y)は、括弧の多項式に1.0を乗じる。
(3)bqx[1:0] = 10の場合の-sin(y)は、括弧の多項式に(-y)を乗じる。
(4)bqx[1:0] = 11の場合の-cos(y)は、括弧の多項式に(-1.0)を乗じる。
そこで、図1の演算処理装置は、三角関数sin(x)を演算する場合、第1に、入力xから展開点識別データbqxを算出し、第2に、bqx[1:0]の2ビットの値と、y=x-x0, y2=(x-x0)2の値と、sin, cosのテイラー級数係数(a3〜a15, b2〜b14)により、後述するテイラー級数の積和演算命令Ftrimadddを繰り返し実行してテイラー級数の級数部分(図7の括弧内の部分)の計算を行う。第3に、乗算命令Fmuldを実行して、前述の級数部分にy, 1.0, -y, -1.0のいずれかを乗算する計算を行う。
したがって、第2の積和演算命令Ftrimadddの繰り返しによる級数部分の計算で使用する係数と、第3の乗算命令Fmuldで使用する乗数は、以下のとおりとなる。
(1)bqx[1:0]=00の場合は、sin(x)の係数と乗数yを使用し
(2)bqx[1:0]=01の場合は、cos(x)の係数と乗数1.0を使用し
(3)bqx[1:0]=00の場合は、sin(x)の係数と乗数-yを使用し
(4)bqx[1:0]=01の場合は、cos(x)の係数と乗数-1.0を使用する。
次に、三角関数sin(x)を求めるための補助命令である、テイラー級数の積和演算命令Ftrimadddと、係数メモリの選択と積和演算命令Ftrimadddの初期値y2を求める第1の補助命令Ftrismuldと、最終段の係数(y,1.0,-y,-1.0)を求める第2の補助命令Ftrisseldを説明する。
[第1の補助命令Ftrismuld]
図8は、第1、第2の補助命令Ftrismuld、Ftrisseldのアセンブリ言語表記と、三角関数sin(x)に適用した場合のそれぞれの具体例とを示す図表である。
まず、第1の補助命令Ftrismuldのアセンブリ言語表記は、以下のとおりである。
Ftrismuld rs1,rs2,rd
そして、処理内容は、以下の通りである。
rd = (rs1 * rs1) | (rs2[0] << 63)
つまり、処理内容は、rs1で指定されるレジスタ(例えば倍精度浮動小数点レジスタ)の値を二乗し、rs2で指定されるレジスタの最下位ビットrs2[0]を符号ビット[63]とする結果を、rdで指定されるレジスタに格納する、である。
三角関数sin(x)の演算での補助命令Ftrismuldの例と処理内容は、以下のとおりとなる。
Ftrismuld y,bqx,y2t
rd = (y * y) | (bqx[0] << 63)
つまり、処理内容は、y2を演算し、その最上位ビットである符号ビットを展開点識別データbqxの最下位ビットbqx[0]で置換する、である。y2は正であるので、bqxの最下位ビットbqx[0]で置換する処理は、y2の符号ビット(正)とbqx[0]の論理和演算で良い。
図9は、第1の補助命令Ftrismuldの処理内容を示す図である。倍精度浮動小数点の例であるので、各レジスタは64ビット[63:0]であり、最上位ビット[63]が符号ビットとなる。但し、倍精度以外の他の精度浮動小数点でも適用可能であり、例えば単精度の場合、最上位ビット[31]が符号ビットとなる。
レジスタrs1にはy=(x-x0)が、レジスタrs2には展開点識別データbqxが格納され、レジスタrdは変数y2tのレジスタである。そして、レジスタrs1の値yの二乗、rs1*rs1=y2=(x-x0)2の符号ビット[63](必ず正)と、レジスタrs2の展開点識別データbqxの最下位ビットbqx[0]とが論理和ゲート188に入力され、その出力であるbqxの最下位ビットbqx[0]がレジスタrdの符号ビット[63]に格納され、rdの符号ビットを除く[62:0]にrs1*rs1=y2=(x-x0)2の[62:0]ビットが格納される。
このレジスタrdの2つの情報、bqx[0]と、y2=(x-x0)2の[62:0]とが、テイラー級数の積和演算命令Ftrimadddを実行するときの、係数セットの選択ビット(sinまたはcosの係数の選択ビット)と、積和演算命令の初期値y2=(x-x0)2に利用される。
[第2の補助命令Ftrisseld]
図8に示されるとおり、第2の補助命令Ftrisseldのアセンブリ言語表記は、以下のとおりである。
Ftrisseld rs1,rs2,rd
そして、処理内容は、以下の通りである。
rd = ((rs2[0] ? 1.0 : rs1) ^ (rs2[1] << 63)
つまり、処理内容は、rs1で指定されるレジスタの値か1.0を、rs2で指定されるレジスタの値の最下位ビットrs2[0]で選択し、その値の符号ビットをrs2レジスタの値のビット1、rs2[1]と排他的論理和をとり、rdで指定されるレジスタに格納する、である。^は排他的論理和(EOR)である。
三角関数sin(x)の演算での補助命令Ftrisseldの例と処理内容は、以下のとおりとなる。
Ftrisseld y,bqx,ys
rd = ((bqx[0] ? 1.0 : y) ^ (bqx[1] << 63)
つまり、処理内容は、bqx[0]=0の場合入力yを、bqx[0]=1の場合1.0をそれぞれ選択し、選択した値の符号ビットとbqx[1]と排他的論理和をとり、rdで指定されるレジスタに格納する、である。つまり、排他的論理和によりbqx[1]=1の場合、選択した値(y又は1.0)の符号ビットが反転される。
図10は、第2の補助命令Ftrisseldの処理内容を示す図である。この場合も倍精度浮動小数点の例で示されるが、倍精度以外の他の精度浮動小数点でも適用可能である。
レジスタrs1にはy=(x-x0)が、レジスタrs2には展開点識別データbqxが格納され、レジスタrdは変数ysのレジスタである。そして、セレクタ184が、bqx[0]=0の場合入力yを、bqx[0]=1の場合1.0をそれぞれ選択する。さらに、EORゲート186が選択された値(y又は1.0)の符号ビット[63]とbqx[1]との排他的論理和を出力し、変数ysのレジスタの符号ビット[63]にEOR186の出力を格納し、変数ysのレジスタの[62:0]に選択された値の[62:0]ビットを格納する。
この処理で算出された変数ys(=y, 1.0, -y, -1.0)は、後述する乗算命令Fmuldにより、積和演算命令Ftrimadddの演算結果(図7の括弧)に乗算される。
[テイラー級数の展開式の積和演算命令Ftrimaddd]
図11は、テイラー級数の積和演算命令Ftrimadddと乗算命令Fmuldのアセンブリ言語表記と、三角関数sin(x), cos(x)に適用した場合のそれぞれの具体例とを示す図表である。
まず、第3の補助命令である積和演算命令Ftrimadddのアセンブリ言語表記は、以下のとおりである。
Ftrimaddd rs1,rs2,index, rd
そして、処理内容は、以下の通りである。
rd = rs1 * Fabs(rs2) + T[rs2[63]][index]
つまり、処理内容は、rs1で指定される倍精度浮動小数点レジスタの値とrs2で指定される倍精度浮動小数点レジスタの値の絶対値を乗じ、さらに、演算器内にあるテーブルメモリからindexで指定される倍精度数を取り出して加算し、結果をrdで指定される倍精度浮動小数点レジスタに格納する、である。Ftrimadddはsin(x), cos(x)の級数部分の計算を行う。
次に、図11には、第3の補助命令である積和演算命令Ftrimadddをsin(x), cos(x)による級数部分の計算に適用した場合の、2つの例1、例2が示される。sin(x), cos(x)の級数部分の計算は、第3の補助命令Ftrimadddを複数回繰り返して行われる。例1は初回の演算、例2は2回目以降の演算例である。2つの例の演算命令と処理内容は次のとおりである。
例1
Ftrimaddd c0,y2t,7, r
r = c0 * Fabs(y2t) + T[y2t[63]][7]
つまり、処理内容は、関数Fabsは絶対値を意味するので、定数c0=0.0に変数y2t=y2の絶対値を乗じ、テーブルTのindex=7(図2の次数番号162)と, y2t[63]=bqx[0](図2のセット番号164)とで選択される係数を加算し、変数rのレジスタに格納する処理である。sin(x)の場合y2t[63]=bqx[0]=0であるので、T[y2t[63]][7]として図2の係数メモリ160内のsin(x)のテイラー級数の15次の係数が選択される。
例2
Ftrimaddd r,y2t,index, r (index=6〜0)
r = r * Fabs(y2t) + T[y2t[63]][index]
つまり、処理内容は、前回の処理結果rに変数y2t=y2の絶対値を乗じ、テーブルTのindex(図2の次数番号162)と, y2t[63]=bqx[0](図2のセット番号164)で選択される係数を加算し、変数rのレジスタに格納する処理である。sin(x)の場合y2t[63]=0であるので、T[y2t[63]][index]として図2の係数メモリ160内のsin(x)のindexに対応するテイラー級数の係数が選択される。
[乗算命令Fmuld]
次に、第4の補助命令である乗算命令Fmuldのアセンブリ言語表記は、以下のとおりである。
Fmuld rs1,rs2,rd
そして、処理内容は、以下の通りである。
rd = rs1 * rs2
つまり、処理内容は、rs1で指定される倍精度浮動小数点レジスタの値とrs2で指定される倍精度浮動小数点レジスタの値とを乗算し、rdで指定される倍精度浮動小数点レジスタに格納する、である。
次に、補助命令Fmuldをsin(x), cos(x)の級数部分の計算に適用した場合の例は、以下のとおりである。
Fmuld r, ys, r
r = r * ys
つまり、第3の補助命令Ftrimadddの演算結果rに、第2の補助命令Ftrisseldの演算結果ysを乗算して変数rのレジスタに格納する処理である。
[三角関数sin(x)のテイラー級数展開の演算の前処理]
図12は、三角関数sin(x)のテイラー級数展開の演算の前処理のアセンブラ言語記述によるオペレーションコードと演算内容を示す図表である。図1の演算器の構成も参照して、前処理を具体的に説明する。
ロード命令lddfで、xに、メモリ内の入力引数memをロードする。
次に、積和命令Fmaddd(Floating multiply add double)により、bqx=((x*rp2)+bg)を演算する。ここで、レジスタrp2(ノードnd2)には、1/(π/2)がセットされており、レジスタbgには、値「1.5*2**52」がセットさている。浮動小数点積和演算器100は、この命令により、レジスタファイル140のxとrp2との積を演算し、この積とbgの和を演算する。
これにより、展開関数と符号を決定する値qx=int(x/(π/2))が、演算結果bqxの仮数部の下位51ビットに得られる。又、値「1.5*2**52」を加算する意味は、この52乗の値を加算すると、小数点以下が四捨五入され、所謂、丸め処理が実行される。
次に、差命令Fsubd(Floating substract double)により、qx = bqx−bgを演算する。浮動小数点積和演算器100は、この命令により、レジスタファイル140のbqxから、bgを減算し、差qxを演算する。このbgを加算して、減算することにより、小数点以下の四捨五入を行う。
次に、積和命令Fnmsubd(Floating negative multiply subtract double)により、y=x-(qx*p2a)を演算する(但し、p2a=π/2)。レジスタp2aには、「π/2」の上位の値がセットされている。浮動小数点積和演算器100は、この命令により、レジスタファイル140のqxとp2aとの積を演算しレジスタに格納した後、この積とxを読み出し差を演算する。
次に、積和命令Fnmsubdにより、y=x-(qx*p2a)を演算する。レジスタp2bには、「π/2」の下位の値がセットされている。浮動小数点積和演算器100は、この命令により、レジスタファイル140のqxと、p2bとの積を演算しレジスタに格納した後、この積とyを読み出し、差を演算する。これにより、テイラー級数演算のy = (x-x0)が得られる。2つの積和命令を用いているのは、π/2の値を、上位ビットと下位ビットに分けて演算し、小数点以下の精度を高めるためである。
次に、三角関数演算の第1の補助命令Ftrismuldを演算する。即ち、命令種別コード200の「ftrismuld」により、通常、レジスタrs2(ノードnd2)を選択するセレクタ182を「1」側に切り替え、セレクタ182からレジスタrs1(ノードnd1)を出力する。このため、浮動小数点積和演算器100は、レジスタrs1(ノードnd1)の値yを二乗する。そして、論理和回路188は、レジスタrs2(ノードnd2)の「0」ビット目のデータrs2[0]が入力され、且つ演算器100からの出力y2の符号ビット、63ビット目がy2 [63]に入力される。そして、セレクタ190を介し、論理和回路188の出力(=rs2[0])が、演算器100の出力の符号ビット[63]に出力される。なお、セレクタ180は「1」側の入力0.0を選択し積和演算器100の加算オペランドに入力する。積和演算器100はレジスタrs1の入力yを二乗するだけであるので、加算値は0.0でよい。
即ち、図9で説明したように、変数y2tのレジスタには、[62:0]ビットにy2が、符号ビット[63]に展開点識別データの最下位ビットbqx[0]が、それぞれ格納される。
次に、三角関数演算の第2の補助命令Ftrisseldを演算する。図1において、セレクタ184は、値1.0(64ビット)と、レジスタrs1(nd1)のデータy(64ビット)を入力し、レジスタrs2(ノードnd2)の[0]ビット目の値rs2[0]=bqx[0]に基づいて、bqx[0]=1なら値1.0を、bqx[0]=0ならデータyを選択する。そして、排他的論理和回路186が、セレクタ184の出力の[63]ビット目の値とレジスタrs2[1]=bqx[1]のEORを演算し、セレクタ184の出力の[63]ビット目をEOR演算結果で置き換え、セレクタ192を介して出力レジスタrd=ysに格納される。
この出力ysの[63]ビット目は、テイラー級数の展開関数の符号(+又は−)を示し、[62:0]ビットがセレクタ184の出力である、y=(x-x0)又は1.0となる。
このようにして、三角関数演算の補助命令Ftrismuld,Ftrisseldと、これらにより動作するセレクタ180,182,184,190,192、排他的論理和回路186、論理和回路188とを設けることにより、命令数を少なくして、テイラー級数の展開関数の決定の他に、テイラー級数演算の最後に乗算する値「y」、「1.0」を決定できる。これにより、前処理を高速化できる。
[三角関数sin(x)のテイラー級数展開の演算の後処理]
次に、三角関数演算の第3の補助命令Ftrimaldddと第4の補助命令である乗算命令Fmuldを用いた後処理を説明する。第3の補助命令Ftrimaldddを繰り返し実行することで、三角関数sin(x)のテイラー展開の演算を高速化できる。
図13は、後処理でのアセンブラ言語記述によるオペレーションコードと演算内容との関係図である。図14は、図13の演算のsin(x)の具体的な演算式を示す図である。図14に示すように、演算順序は、次数の高い係数を先に演算し、順次、その演算結果にy2s=y2を乗算し次数の低い係数を加算していく。即ち、最初に、テイラー展開の次数が最も高い係数(1/15!)を呼び出し,三角関数演算の第3の補助命令Ftrimadddにより、((前回の次数の係数*y)+今回の次数の係数)の積和演算を繰り返し実行する。
図13の演算処理を、図1,図2の構成を参照して具体的に説明する。第3の補助命令Ftrimadddにより図11で示した例1、例2の演算を実行する。
最初の補助命令Ftrimaddd c0, y2t, 7, rは、例1に対応し、以下の演算を実行する。
r = 0.0 * y2t[62:0] + 係数7 = 係数7
ここで、fabs(rs2) = fabs(y2t)は、y2t[63:0]の絶対値であるので、図1のAND回路174が、レジスタrs2(nd2)のy2tの符号ビット[63]を、命令種別コードFtrimaddd=1の反転ビット「0」と論理積演算し、符号ビット[63]を必ず「0」(正)に反転する。これは、第1の補助命令Ftrismuldによりy2t[63:0]の符号ビット[63]にbqx[0]が格納され、y2tの符号ビットが係数メモリ160のセレクタ170の選択ビットとして利用されていたからである。そのため、積和演算器100には、AND回路174によりy2tの符号ビット[63]を「0」に変更したy2t[63:0]が入力される。
また、index=7、y2t[63]に基づいて係数メモリ160から係数7(1/15!)が抽出され、セレクタ180を介して積和演算器100の加算オペランド(第3の入力オペランド)に入力される。そして、積和演算器100が、c0=0.0, y2t[63:0]=y2, 係数7(1/15!)の入力を積和演算して、レジスタrに係数7が格納される。
次に、演算処理装置は、第3の補助命令Ftrimadddとオペレーションコードr、y2t、6、rを指定し、次の演算を実行する。
Ftrimaddd r, y2t, 6, r
この演算処理では、前回のFtrismadddの結果rを積和演算器100の第1の乗算オペランド(第1の入力オペランド)に入力し、AND回路174で絶対値に変更されたy2t[63:0]を第2の乗算オペランド(第2の入力オペランド)に入力する。さらに、係数メモリ係数メモリ160からindex=6, y2t[63]=bqx[0]で抽出された係数(1/13!)を、セレクタ172,180を経由して積和演算器の加算オペランド(第3の入力オペランド)に入力する。そして、積和演算器が以下の演算を実行し、演算結果をレジスタrに格納する。
r = r * y2t[62:0] + 係数6(1/13!)
以下同様にして、次数(index)を順次、5,4,3,2,1,0と下げ、第3の補助命令Ftrimadddと対応するオペレーションコードにより、同様に演算を繰り返し行う。これにより、図13の最後から3段目の演算結果rが得られる。
次に、乗算命令Fmuld(multiply)とオペランドr、rs2 = ys、rを指定し、次の演算を実行する。
Fmuld r, ys, r
この演算処理では、補助命令Ftrimadddの繰り返しで求めたレジスタrの値に、前処理で第2の補助命令Ftrisseldで演算していた変数ys(=y, 1.0, -y, -1.0)の値を乗算して、レジスタrに格納する。この演算により、図14の最下行の多項式に、変数ys(=y, 1.0, -y, -1.0)のいずれかが乗算される。その結果、図7に示したとおり、sin(x),-sin(x)の場合は奇関数になり、cos(x), -cos(x)の場合は偶関数になる。
さらに、ストア命令Stfdfにより、この結果rを、レジスタファイル140のエントリmemにストアする。
このようにして、三角関数演算補助命令Ftrimadddと、これにより動作する係数メモリ160、セレクタ170,172,AND回路174とを設けることにより、命令数を少なくして、テイラー級数展開関数の演算が可能となり、後処理を高速化できる。
[本実施の形態による改良された演算処理装置]
図1の演算処理装置において、三角関数sin(x)をテイラー展開の演算を行う場合、図12に示した前処理で第1、第2の補助命令Ftrismuld、Ftisseldを実行し、次に、図13に示した後処理で第3の補助命令Ftrimadddを繰り返し実行し、更に乗算命令Fmuldを実行する。前処理と後処理との間にはデータの依存関係があり、後処理での第3の補助命令Ftrimadddと乗算命令Fmuldを実行するためには、前処理での第1の補助命令Ftrismuldの結果y2tと第2の補助命令Ftrisseldの結果ysがそれぞれ必要である。
この場合、前処理のFtrisseldの結果ysは、後処理の後半の乗算命令Fmuldまで使用されないので、この依存関係は、演算処理の性能上問題とならない。一方で、前処理のFtrismuldの結果y2tは、直後の後処理の第3の補助命令Ftrimadddで必要となるので、第1の補助命令Ftrismuldの演算レイテンシが三角関数の演算処理全体の性能のネックとなる。
一般には、性能ネックとなるデータ依存関係について、バイパス経路を設けて、前処理の第1の補助命令Ftrismuldの結果y2tをバイパス経路を経由して直接、次の後処理の第3の補助命令Ftrimadddの入力に供給することが考えられる。
しかし、前処理の第1の補助命令Ftrismuldの結果y2t[63:0]には、y2t[63]=bqx[0]と、y2t[62:0]=y2[62:0]とが含まれている。そして、後処理の第3の補助命令Ftrimadddの入力には、y2t[62:0]=y2[62:0]と、y2t[63]=bqx[0]に基づいて係数メモリから選択した係数とが入力される。その結果、前処理の第1の補助命令Ftrismuldの結果y2t[63:0]のうち、y2t[62:0]=y2[62:0]の後処理の第3の補助命令Ftrimadddの入力への論理段数よりも、y2t[63]=bqx[0]に基づいて係数メモリから選択した係数のFtrimadddの入力への論理段数が多い。そのため、y2t[63]=bqx[0]に基づいて係数メモリから選択した係数のFtrimadddの入力への論理段数が、演算処理のクリティカルパスとなる。以下、具体的に演算処理装置の構成に基づいて説明する。
図15は、積和演算器100の乗算器部分の詳細構成図である。積和演算器の乗算器部分は、前処理の第1の補助命令Ftrismuldの場合、入力オペランドOP1,OP2(それぞれオペランドレジスタ101,102)に入力y、yを入力し、入力オペランドOP3に展開点識別データbqx[63:0]のうち最下位ビットbqx[0]を入力する。
積和演算器100の乗算器は、サイクル1のステージに、入力オペランドOP1,OP2のオペランドレジスタ101,102、入力yの仮数fを乗算する乗算器103、指数部eとバイアスBiasを加算する加算器104、符号部sの排他的論理和回路105を有する。さらに、サイクル2のステージに、乗算器103の乗算結果sumとキャリーcryとを加算する加算器106を有する。そして、サイクル3のステージに、加算器の出力である仮数fとEOR105の出力である符号部sとを入力する丸め回路107と、EOR105の出力である符号部sとbqx[0]の論理和回路188とを有する。さらに、サイクル4のステージに加算器108と結果rのレジスタ109を有する。各サイクルの境界には、図示しないラッチ回路が設けられ、ラッチ回路はクロックに同期して入力をラッチする。
図16は、入力レジスタ101,102と結果レジスタ109のフォーマットを示す図である。この例は、倍精度の浮動小数点の例であり、最上位ビット[63]は符号部s、[62:52]ビットは指数部e、[51:0]ビットは仮数fをそれぞれ格納する。また、実線の入力と出力矢印は入力レジスタ101,102の例、破線の入力と出力矢印は出力レジスタ109の例である。
図17は、図1の演算処理装置のバイパス経路を示す図である。積和演算器100の出力r(Ftrismuldの場合は、y2t[63]、y2t[62:0])は、バイパス経路BYP_1を経由して、セレクタ群152−156に入力される。そして、マルチプレクサ154で選択されてノードnd2から分岐したy2t[63]=bqx[0]が、係数メモリ160のセレクタ170に入力され、セレクタ170により選択された係数が、セレクタ172でFtrimaddd=1により選択され、積和演算器100に入力される。一方、マルチプレクサ154により選択されたノードnd2のy2t[62:0]=y2[62:0]は、直接積和演算器100に入力される。したがって、積和演算器100の出力rに含まれるy2t[63]=bqx[0]の、図1のOR回路188、セレクタ190,192、バイパス経路BYP_1、マルチプレクサ154、セレクタ170、セレクタ172、積和演算器の入力に至る論理段数が、後続の第3の補助命令Ftrimaddd実行開始までのクリティカルパスとなり、演算器のサイクル(周波数)を律速する。
図18は、本実施の形態における積和演算器100の乗算器部分を含む構成を示す図である。図18に示された積和演算器100は、サイクル1のステージに、Ftrismuld専用符号出力回路110を有する。それ以外の構成は、図15と同じである。
Ftrismuld専用符号出力回路110は、サイクル1のステージに設けられ、オペランドOP3に入力される展開点識別データの最下位ビットbqx[0]をラッチするラッチ回路である。前述したとおり、Ftrismuldでは、オペランドOP1,OP2に入力されたy=(x-x0)の二乗は、必ず正(符号ビットs=0)であるので、Ftrismuldの符号処理回路である論理和回路188の出力は必ずオペランドOP3の入力bqx[0]と等しい。そこで、本実施の形態では、OR回路188の出力である符号ビットs(y2t[63]=bqx[0])が結果rに含められて、バイパス経路BYP_1らを経由して係数メモリのセレクタ170に入力される代わりに、積和演算器100のサイクル1のステージでオペランドOP3の入力bqx[0]をFtrismuldの専用符号出力回路(ラッチ回路)110がラッチし、出力する。
図19は、本実施の形態における演算処理装置のバイパス経路を示す図である。図19において図18と異なるのは、積和演算器100の専用符号出力回路110の出力bqx[0]をバイパスする第2のバイパス経路BYP_2と、第2のバイパス経路BYP_2を他のレジスタ140,130及びバイパスデータ150らと共に入力し、選択したbqx[0]を係数メモリ160のセレクタ170に出力するセレクタ158である。
そして、後処理の補助命令Ftrimadddでは、セレクタ158が第2のバイパス経路BYP_2を選択して、積和演算器100の専用符号出力回路110の出力bqx[0]を係数メモリ160のセレクタ170に供給し、セレクタ170で選択された係数を、セレクタ172を経由して積和演算器100に入力する。
上記の構成及び動作により、積和演算器100において4サイクルで前処理の補助命令Ftrismuldの演算結果r=y2t[63:0]が生成される間、積和演算器100のサイクル1のステージに設けた専用符号出力回路110の出力bqx[0]を、演算結果rより数サイクル早く出力する。さらに、出力bqx[0]を、第2のバイパス経路BYP_2とセレクタ158を経由して、セレクタ170に供給する。したがって、前処理の補助命令Ftrismuldの実行から、後処理の補助命令Ftrimadddのための係数が積和演算器100に入力されるまでの時間が、積和演算器100内の数サイクルの論理段数分と、第2のバイパス経路BYP_2によりショートカットしたセレクタ190及び192の論理段数分短くなり、前述のクリティカルパスを改善することができる。
図20は、本実施の形態の演算処理装置1の構成を示す図である。図1の構成と異なり、図19に示した第2のバイパス経路BYP_2とセレクタ158が設けられ、命令発行制御部202が示されている。即ち、積和演算器100の専用符号出力sに接続された第2のバイパス経路BYP_2と、第2のバイパス経路BYP_2で供給されるbqx[0]を選択して係数メモリのセレクタ170に供給するセレクタ158と、セレクタ158からセレクタ170までの配線が、新たに設けられる。
図21は、命令発行制御部202を含む図20の演算処理装置の動作を示すフローチャート図である。命令発行制御部202は、まず命令をデコードし(S1)、デコードした命令が特定命令か否か判定する(S2)。例えば、上記の三角関数の演算例の場合、特定命令は前処理での第1の補助命令Ftrismuldである。
デコードした命令が特定命令の場合(S2のYES)、命令発行制御部は、特定命令が後続命令とレジスタのRAW(Read After Write)の依存関係にあるか否か判定する(S3)。RAWの依存関係とは、先行命令が演算結果をレジスタに書込んだ後に後続命令がその演算結果を読み出さなければならない関係である。上記の三角関数の演算例の場合、特定命令Ftrismuldに対し、後続命令Ftrimadddは、特定命令Ftrismuldによりリネーミングレジスタに書込まれた演算結果y2t[63], y2t[62:0]を使用して演算を実行する関係にある。
最後に、命令発行制御部202は、後続命令が特定命令との所定の組み合わせ関係にあるか否か判定する(S4)。上記の例では、FtrimadddはFtrismuldと所定の組み合わせ関係にある。
その後の動作は、演算処理装置の動作であり、積和演算器100は、特定命令Ftrismuldの専用符号出力回路110へ演算結果y2t[63]=bqx[0]を出力し(S5)、その出力y2t[63]=bqx[0]を専用バイパス経路BYP_2を経由してセレクタ158にバイパスする(S6)。セレクタ158が係数メモリの選択信号であるy2t[63]=bqx[0]を選択し(S7)、セレクタ170がその選択信号y2t[63]=bqx[0]で係数メモリ内の係数を選択し(S8)、積和演算器に入力する(S9)。そして、積和演算器100は、選択された係数とFrismuldで算出されたy2t[62:0]を入力して後続命令Ftrimadddを実行し(S10)、演算結果を出力する(S11)。
図20に示したとおり、命令発行制御部202は、図21の工程S2,S3,S4が全てYESの場合、第2のバイパス経路BYP_2を選択する選択信号SLCTをセレクタ158に出力する。それにより、積和演算器100のFrismuld専用符号出力回路110(図20のS)から第2のバイパス経路BYP_2、セレクタ158、セレクタ170の経路で、係数メモリの選択信号bqx[0]が供給される。
一方、図21の工程S2,S3,S4のいずれかがNOの場合、信号bqx[0]は、セレクタ190,192、及び第1のバイパス経路BYP_1、リネーミングレジスタ130、セレクタ158、セレクタ170の経路で供給される。
[三角関数cos(x)の例]
上記では、三角関数sin(x)の例について演算処理装置の改良構造について説明した。それに対して、三角関数cos(x)の場合も同様にして演算処理装置を改良して、クリティカルパスを短縮することができる。
図22は、三角関数cos(x)の場合のbqx=qx%4の下位2ビットと展開すべき関数およびそのテイラー級数の展開式との関係をまとめた図表である。原理は図6の三角関数sin(x)と同じである。すなわち、
(1)-π/4 < x ≦ +π/4(qx=4N,Nは整数)では、x0=0等, cos(x) = cos (x-x0) = cos(y)
(2)+π/4 < x ≦ +3π/4 (qx=4N+1)では、x0=π/2等, cos(x) = -sin (x-x0) = -sin(y)
(3)+3π/4 < x ≦ +5π/4 (or -5π/4 < y=x-x0 < -3π/4) (qx=4N+2)では、
x0=π or -π等, cos(x) = -cos (x-x0) = -cos(y)
(4)-3π/4 < x ≦ -π/4 (qx=4N+3)では、x0=3π/2 or -π/2等,
cos(x) = sin(x-x0) = sin(y)
図22によれば、bqx[0]=0の場合はcos(x)の係数を選択し、bqx[0]=1の場合はsin(x)の係数を選択すればよい。つまり、反転ビットであれば~bqx[0]=0ではsin(x)の係数、~bqx[0]=1ではcos(x)の係数を選択する。~は反転を意味する。また、後処理の補助命令Ftimadddでは、bqx[0]=0の場合は1.0を選択し、bqx[0]=1の場合はyを選択し、bqx[0]^bqx[1]=0の場合に符号ビットをy2t[63]=0(正)に、bqx[0]^bqx[1]=1の場合に符号ビットをy2t[63]=1(負)にすればよい。
[第1の補助命令Ftricmuld]
図23は、三角関数cos(x)の場合の前処理の補助命令Ftricmuld、Ftricseldのアセンブリ言語表記と、三角関数cos(x)に適用した場合のそれぞれの具体例とを示す図表である。
まず、第1の補助命令Ftricmuldのアセンブリ言語表記は、以下のとおりである。
Ftricmuld rs1,rs2,rd
そして、処理内容は、以下の通りである。
rd = (rs1 * rs1) | (~rs2[0] << 63)
つまり、処理内容は、rs1で指定されるレジスタ(例えば倍精度浮動小数点レジスタ)の値を二乗し、rs2で指定されるレジスタの最下位ビットの反転~rs2[0]を符号ビット[63]とする結果を、rdで指定されるレジスタに格納する、である。
三角関数sin(x)の演算での補助命令Ftricmuldの例と処理内容は、以下のとおりとなる。
Ftricmuld y,bqx,y2t
rd = (y * y) | (~bqx[0] << 63)
つまり、処理内容は、y2を演算子、その最上位ビットである符号ビットをbqxの最下位ビットの反転~bqx[0]で置換する、である。y2は正であるので、bqxの最下位ビットの反転~bqx[0]で置換する処理は、y2の符号ビット(正)と~bqx[0]の論理和演算で良い。
[第2の補助命令Ftricseld]
第2の補助命令Ftricseldのアセンブリ言語表記は、以下のとおりである。
Ftrisseld rs1,rs2,rd
そして、処理内容は、以下の通りである。
rd = ((rs2[0] ? rs1 : 1.0) ^ ((rs2[1]^rs2[0]) << 63)
つまり、処理内容は、rs1で指定されるレジスタの値か1.0を、rs2で指定されるレジスタの値の最下位ビットrs2[0]で選択し、その値の符号ビット[63]を、rs2レジスタの値の第1ビットrs2[1]と最下位ビットrs2[0]の排他的論理和と、排他的論理和をとり、rdで指定されるレジスタに格納する、である。
三角関数cos(x)の演算での補助命令Ftricseldの例と処理内容は、以下のとおりとなる。
Ftricseld y,bqx,ys
rd = ((bqx[0] ? y : 1.0) ^ ((bqx[1]^ bqx[0]) << 63)
つまり、処理内容は、bqx[0]=0の場合1.0を、bqx[0]=1の場合yを選択し、選択した値の符号ビット[63]と、bqx[1]とbqx[0]の排他的論理和と、排他的論理和をとり、rdで指定されるレジスタに格納する、である。つまり、排他的論理和によりbqx[1]^bqx[0]=1の場合、選択した値の符号ビット[63]が反転される。
図24は、三角関数cos(x)の場合の演算処理装置1の構成を示す図である。図1,20と同様に、図24では、補助命令Ftricmuldのためにインバータ196、論理和回路188及びセレクタ190が設けられる。また、補助命令Ftricseldのためにセレクタ184、排他的論理和回路194,186、セレクタ192が設けられる。
また、積和演算器100は、図18と同様の構成である。そして、積和演算器100のFtricmuld専用符号出力回路110の出力sをセレクタ158に供給する第2バイパス経路BYP_2とインバータ197が設けられる。そして、命令発行制御部202は、補助命令FtricmuldとFtrimadddの組み合わせが実行される場合に、セレクタ158に第2バイパス経路BYP_2の信号bqx[0]を選択する選択信号SLCTを出力する。これにより、補助命令Ftrimadddを実行する時に、特定命令であるFtricmuldの係数の選択信号bqx[0]の供給パスの論理段数が短くなり、クリティカルパスが短縮される。
以上の実施の形態をまとめると,次の付記のとおりである。
(付記1)
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第1、第2、第3の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第1のバイパス経路と、
前記レジスタファイルと前記第1のバイパス経路のいずれかを選択し、前記積和演算器の第1、第2、第3の入力にそれぞれ出力する第1、第2、第3のマルチプレクサと、
前記積和演算器の出力の符号ビット([63])と、前記第2の入力の最下位ビット(rs2[0]=bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「1.0」とのいずれかを選択する第1のセレクタと、
前記第2の入力の第1ビット(rs2[1]=bqx[1])と前記第1のセレクタの出力の符号ビットとの排他的論理和を演算する排他的論理和回路と、
前記積和演算器の第2の入力の最下位ビット(rs2[0]=bqx[0])を前記係数セレクタに供給する第2のバイパス経路とを有し、
三角関数sin(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx)の4の剰余(qx%4)である展開点識別データ(bqx=qx%4)と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0(bqx*π/2)を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第2の入力とし、第1変数y2tを出力とする第1の補助命令を実行して、前記積和演算器が前記第1の入力yを二乗して二乗値(y2t)を求め、前記論理和回路により、前記第2の入力である展開点識別データbqxの最下位ビット(bqx[0])と前記二乗値の符号ビット(y2t[63])との論理和を求め、前記論理和を前記二乗値(y2t)の符号ビットに格納し前記第1変数y2tを求め、
前記yと展開点識別データbqxを第1、第2の入力とし、第2変数ysを出力とする第2の補助命令を実行して、前記第1のセレクタにより、前記第1の入力yまたは値「1.0」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、当該選択されたデータの符号ビット([63])と前記展開点識別データの第1ビット(bqx[1])との排他的論理和を前記排他的論理和回路により求め、前記選択されたデータの符号ビットに格納して前記第2変数ysを求め、
前回の演算出力(r)と前記第1変数(y2t)と係数インデックスを第1、第2、第3の入力とし積和演算を行う第3の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第3の補助命令の出力に、前記第2の補助命令で求めた前記第2変数ysを乗算して、前記三角関数sin(x)を算出する、演算処理装置。
(付記2)
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第1、第2、第3の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第1のバイパス経路と、
前記レジスタファイルと前記第1のバイパス経路のいずれかを選択し、前記積和演算器の第1、第2、第3の入力にそれぞれ出力する第1、第2、第3のマルチプレクサと、
前記積和演算器の出力の符号ビット([63])と、前記第2の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「1.0」とのいずれかを選択する第1のセレクタと、
前記第2の入力の最下位ビット(rs2[0]=bqx[0])と第1ビット(rs2[1]=bqx[1])との第1の排他的論理和を演算する第1の排他的論理和回路と、
前記第1の排他的論理和のビットと前記第1のセレクタの出力の符号ビットとの第2の排他的論理和を演算する第2の排他的論理和回路と、
前記積和演算器の第2の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])を前記係数セレクタに供給する第2のバイパス経路とを有し、
三角関数cos(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx)の4の剰余(qx%4)である展開点識別データ(bqx=qx%4)と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0(bqx*π/2)を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第2の入力とし、第1変数y2tを出力とする第1の補助命令を実行して、前記積和演算器が前記第1の入力yを二乗して二乗値(y2t)を求め、前記論理和回路により、前記第2の入力である展開点識別データbqxの最下位ビットの反転ビット(~bqx[0])と前記二乗値の符号ビット(y2t[63])との論理和を求め、前記論理和を前記二乗値(y2t)の符号ビットに格納して第1変数y2tを求め、
前記yと展開点識別データbqxを第1、第2の入力とし、第2変数ysを出力とする第2の補助命令を実行して、前記第1のセレクタにより、前記第1の入力yまたは値「1.0」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、前記第1の排他的論理和回路により、前記展開点識別データの最下位ビット(bqx[0])と第1ビット(bqx[1])の第1の排他的論理和を求め、前記第2の排他的論理和回路により、前記第1の排他的論理和と前記第1のセレクタで選択されたデータの符号ビット([63])との第2の排他的論理和を求め、前記選択されたデータの符号ビットに格納して前記第2変数ysを求め、
前回の演算出力(r)と前記第1変数(y2t)と係数インデックスを第1、第2、第3の入力とし積和演算を行う第3の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第3の補助命令の出力に、前記第2の補助命令で求めた前記第2変数ysを乗算して、前記三角関数cos(x)を算出する、演算処理装置。
(付記3)
前記係数メモリは、前記係数インデックスに基づいて前記三角関数のテイラー展開演算式の次数に対応する係数を選択し、前記係数セレクタが前記展開点識別データの最下位ビットに基づいてsin(x)の係数またはcos(x)の係数のいずれかを選択する、付記1または2に記載の演算処理装置。
(付記4)
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第1、第2、第3の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第1のバイパス経路と、
前記レジスタファイルと前記第1のバイパス経路のいずれかを選択し、前記積和演算器の第1、第2、第3の入力にそれぞれ出力する第1、第2、第3のマルチプレクサと、
前記積和演算器の出力の符号ビット([63])と、前記第2の入力の最下位ビット(rs2[0]=bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「1.0」とのいずれかを選択する第1のセレクタと、
前記第2の入力の第1ビット(rs2[1]=bqx[1])と前記第1のセレクタの出力の符号ビットとの排他的論理和を演算する排他的論理和回路と、
前記積和演算器の第2の入力の最下位ビット(rs2[0]=bqx[0])を前記係数セレクタに供給する第2のバイパス経路とを有する演算制御装置の制御方法であって、
三角関数sin(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx)の4の剰余(qx%4)である展開点識別データ(bqx=qx%4)と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0(bqx*π/2)を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第2の入力とし、第1変数y2tを出力とする第1の補助命令を実行して、前記積和演算器が前記第1の入力yを二乗して二乗値(y2t)を求め、前記論理和回路により、前記第2の入力である展開点識別データbqxの最下位ビット(bqx[0])と前記二乗値の符号ビット(y2t[63])との論理和を求め、前記論理和を前記二乗値(y2t)の符号ビットに格納し前記第1変数y2tを求め、
前記yと展開点識別データbqxを第1、第2の入力とし、第2変数ysを出力とする第2の補助命令を実行して、前記第1のセレクタにより、前記第1の入力yまたは値「1.0」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、当該選択されたデータの符号ビット([63])と前記展開点識別データの第1ビット(bqx[1])との排他的論理和を前記排他的論理和回路により求め、前記選択されたデータの符号ビットに格納して前記第2変数ysを求め、
前回の演算出力(r)と前記第1変数(y2t)と係数インデックスを第1、第2、第3の入力とし積和演算を行う第3の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第3の補助命令の出力に、前記第2の補助命令で求めた前記第2変数ysを乗算して、前記三角関数sin(x)を算出する、演算処理装置の制御方法。
(付記5)
レジスタファイルと、
三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
第1、第2、第3の入力に対して積和演算を行う積和演算器と、
前記積和演算器の出力を前記レジスタファイルに供給する第1のバイパス経路と、
前記レジスタファイルと前記第1のバイパス経路のいずれかを選択し、前記積和演算器の第1、第2、第3の入力にそれぞれ出力する第1、第2、第3のマルチプレクサと、
前記積和演算器の出力の符号ビット([63])と、前記第2の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])との論理和を演算する論理和回路と、
前記第1の入力と、値「1.0」とのいずれかを選択する第1のセレクタと、
前記第2の入力の最下位ビット(rs2[0]=bqx[0])と第1ビット(rs2[1]=bqx[1])との第1の排他的論理和を演算する第1の排他的論理和回路と、
前記第1の排他的論理和のビットと前記第1のセレクタの出力の符号ビットとの第2の排他的論理和を演算する第2の排他的論理和回路と、
前記積和演算器の第2の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])を前記係数セレクタに供給する第2のバイパス経路とを有する演算制御装置の制御方法であって、
三角関数cos(x)の演算を実行する場合、
前記三角関数の入力xをπ/2で除算した整数(qx)の4の剰余(qx%4)である展開点識別データ(bqx=qx%4)と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0(bqx*π/2)を減じたy=x-x0とを予め算出し、
前記yと展開点識別データbqxを第1、第2の入力とし、第1変数y2tを出力とする第1の補助命令を実行して、前記積和演算器が前記第1の入力yを二乗して二乗値(y2t)を求め、前記論理和回路により、前記第2の入力である展開点識別データbqxの最下位ビットの反転ビット(~bqx[0])と前記二乗値の符号ビット(y2t[63])との論理和を求め、前記論理和を前記二乗値(y2t)の符号ビットに格納して第1変数y2tを求め、
前記yと展開点識別データbqxを第1、第2の入力とし、第2変数ysを出力とする第2の補助命令を実行して、前記第1のセレクタにより、前記第1の入力yまたは値「1.0」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、前記第1の排他的論理和回路により、前記展開点識別データの最下位ビット(bqx[0])と第1ビット(bqx[1])の第1の排他的論理和を求め、前記第2の排他的論理和回路により、前記第1の排他的論理和と前記第1のセレクタで選択されたデータの符号ビット([63])との第2の排他的論理和を求め、前記選択されたデータの符号ビットに格納して前記第2変数ysを求め、
前回の演算出力(r)と前記第1変数(y2t)と係数インデックスを第1、第2、第3の入力とし積和演算を行う第3の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第3の補助命令の出力に、前記第2の補助命令で求めた前記第2変数ysを乗算して、前記三角関数cos(x)を算出する、演算処理装置の制御方法。
130,140:レジスタファイル
160:係数メモリ
100:積和演算器
BYP_1:第1のバイパス経路
BYP_2:第2のバイパス経路
188:論理和回路
194、186:排他的論理和回路
bqx:展開点識別データ
qx:第2の展開点識別データ
x0:展開点
y2t:第1変数、yの二乗値
ys:第2変数、yまたは1.0
Ftrismuld、Ftricmuld:第1の補助命令
Ftrisseld、Ftricseld:第2の補助命令
Ftrimaddd:第3の補助命令、テイラー級数展開式の演算命令

Claims (4)

  1. レジスタファイルと、
    三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
    第1、第2、第3の入力に対して積和演算を行う積和演算器と、
    前記積和演算器の出力を前記レジスタファイルに供給する第1のバイパス経路と、
    前記レジスタファイルと前記第1のバイパス経路のいずれかを選択し、前記積和演算器の第1、第2、第3の入力にそれぞれ出力する第1、第2、第3のマルチプレクサと、
    前記積和演算器の出力の符号ビット([63])と、前記第2の入力の最下位ビット(rs2[0]=bqx[0])との論理和を演算する論理和回路と、
    前記第1の入力と、値「1.0」とのいずれかを選択する第1のセレクタと、
    前記第2の入力の第1ビット(rs2[1]=bqx[1])と前記第1のセレクタの出力の符号ビットとの排他的論理和を演算する排他的論理和回路と、
    前記積和演算器の第2の入力の最下位ビット(rs2[0]=bqx[0])を前記係数セレクタに供給する第2のバイパス経路とを有し、
    三角関数sin(x)の演算を実行する場合、
    前記三角関数の入力xをπ/2で除算した整数(qx)の4の剰余(qx%4)である展開点識別データ(bqx=qx%4)と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0(bqx*π/2)を減じたy=x-x0とを予め算出し、
    前記yと展開点識別データbqxを第1、第2の入力とし、第1変数y2tを出力とする第1の補助命令を実行して、前記積和演算器が前記第1の入力yを二乗して二乗値(y2t)を求め、前記論理和回路により、前記第2の入力である展開点識別データbqxの最下位ビット(bqx[0])と前記二乗値の符号ビット(y2t[63])との論理和を求め、前記論理和を前記二乗値(y2t)の符号ビットに格納し前記第1変数y2tを求め、
    前記yと展開点識別データbqxを第1、第2の入力とし、第2変数ysを出力とする第2の補助命令を実行して、前記第1のセレクタにより、前記第1の入力yまたは値「1.0」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、当該選択されたデータの符号ビット([63])と前記展開点識別データの第1ビット(bqx[1])との排他的論理和を前記排他的論理和回路により求め、前記選択されたデータの符号ビットに格納して前記第2変数ysを求め、
    前回の演算出力(r)と前記第1変数(y2t)と係数インデックスを第1、第2、第3の入力とし積和演算を行う第3の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第3の補助命令の出力に、前記第2の補助命令で求めた前記第2変数ysを乗算して、前記三角関数sin(x)を算出する、演算処理装置。
  2. レジスタファイルと、
    三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
    第1、第2、第3の入力に対して積和演算を行う積和演算器と、
    前記積和演算器の出力を前記レジスタファイルに供給する第1のバイパス経路と、
    前記レジスタファイルと前記第1のバイパス経路のいずれかを選択し、前記積和演算器の第1、第2、第3の入力にそれぞれ出力する第1、第2、第3のマルチプレクサと、
    前記積和演算器の出力の符号ビット([63])と、前記第2の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])との論理和を演算する論理和回路と、
    前記第1の入力と、値「1.0」とのいずれかを選択する第1のセレクタと、
    前記第2の入力の最下位ビット(rs2[0]=bqx[0])と第1ビット(rs2[1]=bqx[1])との第1の排他的論理和を演算する第1の排他的論理和回路と、
    前記第1の排他的論理和のビットと前記第1のセレクタの出力の符号ビットとの第2の排他的論理和を演算する第2の排他的論理和回路と、
    前記積和演算器の第2の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])を前記係数セレクタに供給する第2のバイパス経路とを有し、
    三角関数cos(x)の演算を実行する場合、
    前記三角関数の入力xをπ/2で除算した整数(qx)の4の剰余(qx%4)である展開点識別データ(bqx=qx%4)と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0(bqx*π/2)を減じたy=x-x0とを予め算出し、
    前記yと展開点識別データbqxを第1、第2の入力とし、第1変数y2tを出力とする第1の補助命令を実行して、前記積和演算器が前記第1の入力yを二乗して二乗値(y2t)を求め、前記論理和回路により、前記第2の入力である展開点識別データbqxの最下位ビットの反転ビット(~bqx[0])と前記二乗値の符号ビット(y2t[63])との論理和を求め、前記論理和を前記二乗値(y2t)の符号ビットに格納して第1変数y2tを求め、
    前記yと展開点識別データbqxを第1、第2の入力とし、第2変数ysを出力とする第2の補助命令を実行して、前記第1のセレクタにより、前記第1の入力yまたは値「1.0」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、前記第1の排他的論理和回路により、前記展開点識別データの最下位ビット(bqx[0])と第1ビット(bqx[1])の第1の排他的論理和を求め、前記第2の排他的論理和回路により、前記第1の排他的論理和と前記第1のセレクタで選択されたデータの符号ビット([63])との第2の排他的論理和を求め、前記選択されたデータの符号ビットに格納して前記第2変数ysを求め、
    前回の演算出力(r)と前記第1変数(y2t)と係数インデックスを第1、第2、第3の入力とし積和演算を行う第3の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第3の補助命令の出力に、前記第2の補助命令で求めた前記第2変数ysを乗算して、前記三角関数cos(x)を算出する、演算処理装置。
  3. レジスタファイルと、
    三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
    第1、第2、第3の入力に対して積和演算を行う積和演算器と、
    前記積和演算器の出力を前記レジスタファイルに供給する第1のバイパス経路と、
    前記レジスタファイルと前記第1のバイパス経路のいずれかを選択し、前記積和演算器の第1、第2、第3の入力にそれぞれ出力する第1、第2、第3のマルチプレクサと、
    前記積和演算器の出力の符号ビット([63])と、前記第2の入力の最下位ビット(rs2[0]=bqx[0])との論理和を演算する論理和回路と、
    前記第1の入力と、値「1.0」とのいずれかを選択する第1のセレクタと、
    前記第2の入力の第1ビット(rs2[1]=bqx[1])と前記第1のセレクタの出力の符号ビットとの排他的論理和を演算する排他的論理和回路と、
    前記積和演算器の第2の入力の最下位ビット(rs2[0]=bqx[0])を前記係数セレクタに供給する第2のバイパス経路とを有する演算制御装置の制御方法であって、
    三角関数sin(x)の演算を実行する場合、
    前記三角関数の入力xをπ/2で除算した整数(qx)の4の剰余(qx%4)である展開点識別データ(bqx=qx%4)と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0(bqx*π/2)を減じたy=x-x0とを予め算出し、
    前記yと展開点識別データbqxを第1、第2の入力とし、第1変数y2tを出力とする第1の補助命令を実行して、前記積和演算器が前記第1の入力yを二乗して二乗値(y2t)を求め、前記論理和回路により、前記第2の入力である展開点識別データbqxの最下位ビット(bqx[0])と前記二乗値の符号ビット(y2t[63])との論理和を求め、前記論理和を前記二乗値(y2t)の符号ビットに格納し前記第1変数y2tを求め、
    前記yと展開点識別データbqxを第1、第2の入力とし、第2変数ysを出力とする第2の補助命令を実行して、前記第1のセレクタにより、前記第1の入力yまたは値「1.0」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、当該選択されたデータの符号ビット([63])と前記展開点識別データの第1ビット(bqx[1])との排他的論理和を前記排他的論理和回路により求め、前記選択されたデータの符号ビットに格納して前記第2変数ysを求め、
    前回の演算出力(r)と前記第1変数(y2t)と係数インデックスを第1、第2、第3の入力とし積和演算を行う第3の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第3の補助命令の出力に、前記第2の補助命令で求めた前記第2変数ysを乗算して、前記三角関数sin(x)を算出する、演算処理装置の制御方法。
  4. レジスタファイルと、
    三角関数のテイラー級数展開の係数を記憶し、係数選択信号により選択される係数を出力する係数セレクタを有する係数メモリと、
    第1、第2、第3の入力に対して積和演算を行う積和演算器と、
    前記積和演算器の出力を前記レジスタファイルに供給する第1のバイパス経路と、
    前記レジスタファイルと前記第1のバイパス経路のいずれかを選択し、前記積和演算器の第1、第2、第3の入力にそれぞれ出力する第1、第2、第3のマルチプレクサと、
    前記積和演算器の出力の符号ビット([63])と、前記第2の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])との論理和を演算する論理和回路と、
    前記第1の入力と、値「1.0」とのいずれかを選択する第1のセレクタと、
    前記第2の入力の最下位ビット(rs2[0]=bqx[0])と第1ビット(rs2[1]=bqx[1])との第1の排他的論理和を演算する第1の排他的論理和回路と、
    前記第1の排他的論理和のビットと前記第1のセレクタの出力の符号ビットとの第2の排他的論理和を演算する第2の排他的論理和回路と、
    前記積和演算器の第2の入力の最下位ビットの反転ビット(~rs2[0]=~bqx[0])を前記係数セレクタに供給する第2のバイパス経路とを有する演算制御装置の制御方法であって、
    三角関数cos(x)の演算を実行する場合、
    前記三角関数の入力xをπ/2で除算した整数(qx)の4の剰余(qx%4)である展開点識別データ(bqx=qx%4)と、前記入力xから前記展開点識別データにπ/2を乗じた展開点x0(bqx*π/2)を減じたy=x-x0とを予め算出し、
    前記yと展開点識別データbqxを第1、第2の入力とし、第1変数y2tを出力とする第1の補助命令を実行して、前記積和演算器が前記第1の入力yを二乗して二乗値(y2t)を求め、前記論理和回路により、前記第2の入力である展開点識別データbqxの最下位ビットの反転ビット(~bqx[0])と前記二乗値の符号ビット(y2t[63])との論理和を求め、前記論理和を前記二乗値(y2t)の符号ビットに格納して第1変数y2tを求め、
    前記yと展開点識別データbqxを第1、第2の入力とし、第2変数ysを出力とする第2の補助命令を実行して、前記第1のセレクタにより、前記第1の入力yまたは値「1.0」のいずれかを前記展開点識別データの最下位ビット(bqx[0])に基づいて選択し、前記第1の排他的論理和回路により、前記展開点識別データの最下位ビット(bqx[0])と第1ビット(bqx[1])の第1の排他的論理和を求め、前記第2の排他的論理和回路により、前記第1の排他的論理和と前記第1のセレクタで選択されたデータの符号ビット([63])との第2の排他的論理和を求め、前記選択されたデータの符号ビットに格納して前記第2変数ysを求め、
    前回の演算出力(r)と前記第1変数(y2t)と係数インデックスを第1、第2、第3の入力とし積和演算を行う第3の補助命令を、係数インデックスを最大値から最小値まで変更して繰り返し前記積和演算器で実行し、さらに、前記繰り返し実行した第3の補助命令の出力に、前記第2の補助命令で求めた前記第2変数ysを乗算して、前記三角関数cos(x)を算出する、演算処理装置の制御方法。
JP2018009607A 2018-01-24 2018-01-24 演算処理装置および演算処理装置の制御方法 Active JP6933810B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2018009607A JP6933810B2 (ja) 2018-01-24 2018-01-24 演算処理装置および演算処理装置の制御方法
US16/243,133 US10824395B2 (en) 2018-01-24 2019-01-09 Arithmetic processing device and control method for arithmetic processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018009607A JP6933810B2 (ja) 2018-01-24 2018-01-24 演算処理装置および演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2019128763A JP2019128763A (ja) 2019-08-01
JP6933810B2 true JP6933810B2 (ja) 2021-09-08

Family

ID=67298671

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018009607A Active JP6933810B2 (ja) 2018-01-24 2018-01-24 演算処理装置および演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US10824395B2 (ja)
JP (1) JP6933810B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11423313B1 (en) * 2018-12-12 2022-08-23 Amazon Technologies, Inc. Configurable function approximation based on switching mapping table content
US11269630B2 (en) * 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
CN112650973B (zh) * 2019-10-11 2022-05-20 珠海格力电器股份有限公司 三角函数计算装置及电子设备
CN111402873B (zh) * 2020-02-25 2023-10-20 北京声智科技有限公司 语音信号处理方法、装置、设备及存储介质
US11671239B2 (en) * 2020-05-08 2023-06-06 Samsung Electronics Co., Ltd. Encryption method and apparatus based on homomorphic encryption using odd function property
US10942204B1 (en) * 2020-10-27 2021-03-09 North China Electric Power University Taylor weighted least squares method for estimating synchrophasor

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4755129B2 (ja) 2007-03-16 2011-08-24 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP2009169767A (ja) 2008-01-17 2009-07-30 Toshiba Corp パイプライン型プロセッサ
JP5304483B2 (ja) 2009-06-30 2013-10-02 富士通株式会社 演算処理装置
WO2013145276A1 (ja) * 2012-03-30 2013-10-03 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Also Published As

Publication number Publication date
JP2019128763A (ja) 2019-08-01
US20190227771A1 (en) 2019-07-25
US10824395B2 (en) 2020-11-03

Similar Documents

Publication Publication Date Title
JP6933810B2 (ja) 演算処理装置および演算処理装置の制御方法
CN107077416B (zh) 用于以选择性舍入模式进行向量处理的装置和方法
US20170199726A1 (en) Multiply add functional unit capable of executing scale, round, getexp, round, getmant, reduce, range and class instructions
JP4418578B2 (ja) 第1、第2、第3オペランドに浮動小数点演算を適用するためのデータ処理装置および方法
JPH08185309A (ja) 4倍精度演算の実行方法
JP2012084142A (ja) 融合型積和演算機能ユニット
Joldeş et al. Arithmetic algorithms for extended precision using floating-point expansions
JPH0863353A (ja) 掛け算累算命令を使用したデータ処理
JP4388980B2 (ja) 浮動小数点数の除算または平方根演算を行う演算装置及び演算方法
JP5304483B2 (ja) 演算処理装置
JP4755129B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP4601544B2 (ja) 入力値に逆数演算を実施して結果値を作り出すデータ処理装置および方法
US9703626B2 (en) Recycling error bits in floating point units
US20060184594A1 (en) Data processing apparatus and method for determining an initial estimate of a result value of a reciprocal operation
JP5794385B2 (ja) 演算処理装置及び演算処理装置の制御方法
US5805489A (en) Digital microprocessor device having variable-delay division hardware
GB2549153A (en) Apparatus and method for supporting a conversion instruction
Iordache et al. An Overview of Floating-point Support and Math Library on the Intel/spl reg/XScale/spl trade/architecture
Boldo et al. Emulating round-to-nearest ties-to-zero “augmented” floating-point operations using round-to-nearest ties-to-even arithmetic
TWI822952B (zh) 迭代運算的處理
US7237000B2 (en) Speed of execution of a conditional subtract instruction and increasing the range of operands over which the instruction would be performed correctly
Hellström et al. Assessing RISC-V Vector Extension for Machine Learning
Underwood et al. IEEE floating-point extension for containing er-ror in the RISC-V architecture
Pedone Design and characterization of Variable Latency adders for floating-point arithmetic units
Fahmy Decimal Floating Point Number System

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201008

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210630

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210720

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210802

R150 Certificate of patent or registration of utility model

Ref document number: 6933810

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150