(57)【要約】  回路規模を小さく抑えつつ処理効率を向上させた演算処理装置及び演算処理装置の制御方法を提供することを目的とする。ベクタレジスタ（１１１Ａ）は、複数の要素レジスタ（１１３Ａ）を有し、複数の演算値が１つずつ要素レジスタ（１１３Ａ）のそれぞれに格納される。積和演算器（１１２Ａ）は、入力された要素データを基に第１選択値を生成し、第１選択値を基に要素レジスタ（１１３Ａ）に格納された演算値の中から第１演算値を取得し、第１演算値を基に演算結果を取得する。
2020084721.tif 000002
【特許請求の範囲】
【請求項１】
複数の要素記憶領域を有し、複数の演算値のそれぞれが各前記要素記憶領域に格納される記憶部と、
入力された要素データを基に第１選択値を生成し、前記第１選択値を基に前記要素記憶領域に格納された前記演算値の中から第１演算値を取得し、前記第１演算値を基に演算結果を取得する演算部と
を備えたことを特徴とする演算処理装置。
【請求項２】
演算部は、前記要素データ又は前記第１選択値を基に第２選択値を生成し、前記第２選択値を基に前記要素記憶領域に格納された前記演算値から第２演算値を取得し、前記第１演算値及び前記第２演算値を基に演算結果を取得することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記演算部が取得する演算結果は、所定数の同型の関数であって複数の係数を含む関数の中から前記要素データに対応する関数を選択して、選択した関数を用いて演算を行った結果であって、
前記要素記憶領域は連番で番号が振られ、且つ、前記番号が連続する前記要素記憶領域は、各前記関数に含まれる各項に応じた前記所定数の係数を前記項毎に連続して保持し、
前記演算部は、前記要素データを基に前記番号の１つである第１番号を生成し、前記第１番号に対応する前記要素記憶領域に格納された第１係数を取得し、前記第１番号に前記所定数を加算して第２番号を生成し、前記第２番号に対応する前記要素記憶領域に格納された第２係数を取得し、前記要素データ、前記第１係数及び前記第２係数を基に演算結果を取得する
ことを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記記憶部は特定数存在し、
前記演算部は、各前記記憶部に対応させて前記特定数が配置され、
各前記演算部は、それぞれが前記要素データを複数含む配列から前記要素データを１つ取得する
ことを特徴とする請求項１に記載の演算処理装置。
【請求項５】
前記演算部は、乗算器及び加算器を有する積和演算機であって、前記第１選択値の生成、前記第１演算値の取得、及び、演算結果の取得を前記乗算器及び前記加算器を用いて行うことを特徴とする請求項１に記載の演算処理装置。
【請求項６】
保持する値を前記記憶部へ入力することで、保持する値に対応する対応値を前記記憶部から前記演算部へ出力させる間接記憶部をさらに有し、
前記記憶部は、前記第１選択値の入力を前記間接記憶部から受けて前記第１演算値を前記演算部へ出力し、
前記演算部は、前記第１選択値を前記間接記憶部に格納することで前記記憶部から前記第１演算値を取得する
ことを特徴とする請求項１に記載の演算処理装置。
【請求項７】
複数の要素記憶領域を有する記憶装置を備えた演算処理装置の制御方法であって、
複数の演算値のそれぞれを各前記要素記憶領域に格納させ、
入力された要素データを基に第１選択値を生成し、
前記第１選択値を基に前記要素記憶領域に格納された前記演算値から第１演算値を取得し、
前記第１演算値を基に演算結果を取得する
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、画像処理等で使用するデータをＣＰＵ（Central  Processing  Unit）等のプロセッサを用いて効率的に処理するために、１つの命令コードに基づいて複数のデータを並列に演算するＳＩＭＤ（Single  Instruction  Multiple  Data）と称する手法が提案されている。以下では、ＳＩＭＤを用いた演算をＳＩＭＤ演算という。【０００３】
例えば、ＳＩＭＤ演算は、深層学習（ディープラーニング）の畳み込み演算などで用いられる。具体的には、深層学習を実行する演算処理装置は、１つの命令に対して複数の積和演算器を用いて並列に畳み込み演算を行うといったＳＩＭＤ演算を行う。【０００４】
一方、ＳＩＭＤ演算を行う場合に、配列の各要素の値に応じて表を参照するような場合がある。例えば、配列の各要素に対して、個々に関数値を求める場合が考えられる。この場合、関数値を求める対象の関数を区間毎に傾きが異なる直線を繋いだ折れ線により近似し、各要素が属する区間における直線を用いて個々の関数値の近似値を算出する方法がある。関数値を求める対象の関数が区間毎に傾きが異なる直線を繋いだ折れ線により近似する処理は、線形補間と呼ばれる場合がある。【０００５】
このような折れ線による近似では、要素の値によって折れ線で表されるグラフのどの区分に属するかが決まるため、属する区分は要素毎に別々となる。そこで、要素毎に異なる傾きと切片を有する１次式を使用して、要素毎の関数の近似値が算出される。そのため、区分毎の傾きと切片とを組にして並べたルックアップテーブル（ＬＵＴ：Look  Up  Table）を用意し、要素の値を上位桁だけで打ち切った値を入力としてその表を参照し、表から得られて値に基づいて１次式を計算して近似値を得る方法が考えられる。【０００６】
例えば、近年の命令セットの中には、ＳＩＭＤ演算において要素毎にルックアップテーブルを参照する命令が用意されている場合がある。また、ＧＰＵ（Graphical  Processing  Unit）では、補間演算専用の補間器が搭載される場合もある。【０００７】
また、インデックスレジスタ内部に記憶されたインデックス値から更新される１つ以上のテーブルレジスタに記憶されたデータ要素を選択し、選択したデータ要素に対応する結果レジスタ内部の位置を決定する従来技術がある。また、レジスタファイルを４つのバンクに分け、１個のオペランドで複数個のレジスタを指定して４個のレジスタに同時にアクセスする従来技術がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−１７４２９４号公報
【特許文献２】特開２００２−１４９４００号公報
【非特許文献】
【０００９】
【非特許文献１】J.  A.  Pineiro,  S.  F.  Oberman,  J.  M.  Muller,  and  J.  D.  Bruguera,  “High-speed  function  approximation  using  a  minimax  quadratic  interpolator,”  IEEE  Trans.  Computers,  vol.  54,  no.  3,  pp.  304-318,  2005.
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら従来の技術では、大きなデメリットを伴うことがある。例えば、命令セットに用意された命令を使用する場合、従来は、要素の値が確定した後に、メモリから対象の表の該当エントリのアドレスの内容が読み出される。この場合、各要素のアドレス計算、メモリからの読み出し及び対象のＳＩＭＤ要素に対応する位置へのデータ配送のオーバヘッドが大きく、ルックアップテーブル参照を高速にＳＩＭＤに処理する場合、大きな遅延が発生するおそれがある。【００１１】
また、ＧＰＵに搭載の補間器では、演算器をベースに、パラメータのテーブルを格納するために、大きな専用回路を追加したものが一般的である。しかし、ＬＳＩへの演算器の搭載密度を極力向上させたいという要望は大きく、追加回路の多い専用補間器の搭載は困難である。【００１２】
また、更新されるテーブルレジスタを介して結果レジスタを選択する従来技術を用いても、テーブルレジスタの領域を確保することから回路規模を小さく抑えることは困難である。また、１個のオペランドで複数のレジスタに同時にアクセスする従来技術であっても、各レジスタに格納されるテーブルのサイズによりレジスタサイズが大きくなるため、複数のレジスタを配置することで回路規模が大きくなるおそれがある。【００１３】
開示の技術は、上記に鑑みてなされたものであって、回路規模を小さく抑えつつ処理効率を向上させた演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本願の開示する演算処理装置及び演算処理装置の制御方法は、一つの態様において、記憶部は、複数の要素記憶領域を有し、複数の演算値を１つずつ前記要素記憶領域のそれぞれに格納する。演算部は、入力された要素データを基に第１選択値を生成し、前記第１選択値を基に前記要素記憶領域に格納された前記演算値の中から第１演算値を取得し、前記第１演算値を基に演算結果を取得する。
【発明の効果】
【００１５】
１つの側面では、本発明は、回路規模を小さく抑えつつ処理効率を向上させることができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、情報処理装置の全体構成図である。
【図２】図２は、積和演算部の詳細な回路図である。
【図３】図３は、実施例１で使用する折れ線近似を表す図である。
【図４】図４は、直線近似関数の関数値を求めるために使用されるルックアップテーブルの一例の図である。
【図５】図５は、実施例１に係る要素レジスタが格納する値を示した図である。
【図６】図６は、与えられた要素データに対応する切片の値を取得するまでの要素レジスタの状態の遷移を説明するための図である。
【図７】図７は、切片の値の取得後から演算結果取得までの要素レジスタの状態の遷移を説明するための図である。
【図８】図８は、図５〜７で示した演算を積和演算部に行わせるためのプログラムの一例の図である。
【図９】図９は、ＳＩＭＤ演算命令の処理のフローチャートである。
【図１０】図１０は、ＳＩＭＤ演算で要素データ毎のテーブル検索演算を実行する処理のフローチャートである。
【図１１】図１１は、実施例２に係るベクタレジスタに格納されるテーブルの値の一例を示す図である。
【図１２】図１２は、２の冪乗を求める演算を積和演算部に行わせるためのプログラムの一例の図である。
【発明を実施するための形態】
【００１７】
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
【実施例１】
【００１８】
図１は、情報処理装置の全体構成図である。情報処理装置５０は、ＰＣＩ（Peripheral  Component  Interconnect）カード１及びホストコンピュータ２を有する。ＰＣＩカード１とホストコンピュータ２とはＰＣＩバスで接続され、互いにデータの送受信を行う。【００１９】
ホストコンピュータ２は、例えば、深層学習を実行する際の全体的な管理を行う。深層学習を実行する場合、ホストコンピュータ２は、ＰＣＩカード１に対して畳み込み演算などの深層学習における所定の演算の実行を指示する。また、ホストコンピュータ２は、ＳＩＭＤ演算に用いる配列に含まれる要素データ毎にテーブルを参照して関数値を取得するなどのＳＩＭＤ演算の実行をＰＣＩカード１に対して指示する。【００２０】
ＰＣＩカード１は、ホストコンピュータ２からの指示を受けて演算を実行し、演算結果をホストコンピュータ２に出力する。ＰＣＩカード１は、図１に示すように、複数の処理ユニット１０、全体命令制御部１１、メモリコントローラ１２、メモリ１３及びＰＣＩ制御部１４を有する。このＰＣＩカード１が、「演算処理装置」の一例にあたる。【００２１】
ＰＣＩ制御部１４は、演算の実行を指示する演算命令や演算で使用する演算データの入力をホストコンピュータ２から受ける。そして、ＰＣＩ制御部１４は、取得した演算命令や演算データをメモリコントローラ１２へ出力する。【００２２】
また、ＰＣＩ制御部１４は、指示された演算に対する演算結果の入力をメモリコントローラ１２から受ける。そして、ＰＣＩ制御部１４は、演算結果をホストコンピュータ２へ出力する。【００２３】
メモリコントローラ１２は、演算命令や演算で使用する演算データの入力をＰＣＩ制御部１４から受ける。そして、メモリコントローラ１２は、取得した演算命令及び演算データをメモリ１３へ格納する。【００２４】
また、メモリコントローラ１２は、演算を実行する際に用いる演算データのベクタレジスタ１１１への格納の指示を全体命令制御部１１から受ける。そして、メモリコントローラ１２は、指定された演算データを指定された積和演算部１００のベクタレジスタ１１１へ格納する。ここで、メモリコントローラ１２は、直列に並んだ処理ユニット１０のうちの後段の処理ユニット１０に対してデータを送信する場合、積和演算部１００を迂回させてマルチプレクサ１０３へ演算データを出力する。【００２５】
また、メモリコントローラ１２は、演算結果の格納指示を全体命令制御部１１から受けると、指定された積和演算部１００のベクタレジスタ１１１から演算結果を取得しメモリ１３へ格納する。さらに、メモリコントローラ１２は、ホストコンピュータ２からＰＣＩ制御部１４を介して指示を受けると、メモリ１３に格納された演算結果を読み出し、ＰＣＩ制御部１４へ出力する。【００２６】
全体命令制御部１１は、ホストコンピュータ２から実行が指示された演算の全体の統括管理を行う。全体命令制御部１１は、ホストコンピュータ２からの指示をＰＣＩ制御部１４経由で受け、メモリ１３に格納された全体命令列を次々と読んでは実行する。全体命令には、メモリ１３から演算命令バッファ１０２に演算命令列を転送する命令、メモリ１３から演算データをベクタレジスタ１１１に格納する命令、演算命令バッファ１０２に格納された演算命令列を演算命令制御部１０１に実行開始させる命令、ベクタレジスタ１１１に格納された演算結果をメモリ１３に格納する命令、命令列の実行を終了する命令などがある。【００２７】
全体命令制御部１１は、演算命令列を処理ユニット１０に実行させる。演算を処理ユニット１０に実行させる場合、全体命令制御部１１は、演算を実行する際に用いる演算データの取得をメモリコントローラ１２に指示する。また、処理ユニット１０における演算が完了すると、全体命令制御部１１は、演算結果の格納をメモリコントローラ１２に指示する。さらに、実行が指示された演算の全ての処理が完了すると、全体命令制御部１１は、演算完了をメモリコントローラ１２へ通知する。【００２８】
次に、処理ユニット１０について説明する。処理ユニット１０は、図１に示すように１つのＰＣＩカード１に複数搭載される。各処理ユニット１０は、並列及び直列に複数接続される。処理ユニット１０は、ある態様においては１２８個である。処理ユニット１０は、積和演算部１００、演算命令制御部１０１、演算命令バッファ１０２及びマルチプレクサ１０３を有する。【００２９】
演算命令制御部１０１は、演算命令の実行処理を管理制御する。演算命令制御部１０１は、個々の演算の実行の指示を全体命令制御部１１から受ける。処理ユニット１０で実行できる命令を、全体命令と対比させて演算命令と呼んでいるが、命令には、積和演算部に演算を行わせる狭義の演算命令のほか、汎用レジスタ（図示しない）の操作命令、分岐命令、繰り返し命令、命令列の実行を停止する命令などが含まれる。【００３０】
演算命令制御部１０１は、演算命令バッファ１０２に格納された演算命令を実行順に取得する。次に、演算命令制御部１０１は、取得した演算命令で指定された演算データの出力をベクタレジスタ１１１に指示する。また、演算命令制御部１０１は、取得した演算命令にしたがい、演算実行の指示を積和演算器１１２へ出力する。その後、演算命令制御部１０１は、積和演算器１１２の内で演算結果を用いた演算をループさせる。また、演算命令制御部１０１は、例えば、要素データ毎にテーブルを参照して関数値を取得するＳＩＭＤ演算の実行命令を発行する。【００３１】
演算命令バッファ１０２は、演算命令列を格納する記憶領域である。演算命令バッファ１０２は、メモリコントローラ１２から入力された演算命令列を指示されたアドレスから入力順に格納する。その後、演算命令制御部１０１からの演算命令の取得要求を受けて、演算命令バッファ１０２は、演算命令制御部１０１に要求されたアドレスの演算命令を出力する。【００３２】
積和演算部１００は、ベクタレジスタ１１１及び積和演算器１１２を有する。ただし、積和演算部１００が有するベクタレジスタ１１１は、処理ユニット１０に搭載されたベクタレジスタ全体の一部にあたる。【００３３】
ベクタレジスタ１１１は、演算を実行する際に用いる演算データの入力をメモリコントローラ１２から受けて、入力された演算データを格納する。その後、ベクタレジスタ１１１は、演算命令制御部１０１からの指示を受けて、演算で使用する演算データを積和演算器１１２に出力する。また、積和演算器１１２による演算のループ処理が完了後、ベクタレジスタ１１１は、積和演算器１１２の演算結果を受け取る。そして、メモリ１３への出力の指示をメモリコントローラ１２から受けると、ベクタレジスタ１１１は、指示された領域に格納された演算結果を、マルチプレクサ１０３へ出力する。【００３４】
また、要素データ毎にテーブルを参照して関数値を取得するＳＩＭＤ演算の場合、ベクタレジスタ１１１は、要素データが属する区間に対応するテーブルの値を保持する。【００３５】
積和演算器１１２は、演算命令制御部１０１からの演算実行の指示を受ける。そして、積和演算器１１２は、ベクタレジスタ１１１から入力された演算データを用いて積和演算を実行する。その後、積和演算器１１２は、演算結果をベクタレジスタ１１１へ出力する。命令により累積を指示された場合は、積和演算器１１２は、累積演算結果を演算器内のレジスタ（アキュムレータ）に保持し、後続の累積演算命令で使用する。【００３６】
積和累積演算の場合、積和演算器１１２は、全ての演算が完了するまでベクタレジスタ１１１から入力された値に対する積和演算を繰返す。その後、積和累積演算のループ処理が終了すると、積和演算器１１２は、演算結果をベクタレジスタ１１１へ出力し、格納させる。【００３７】
また、要素データ毎にテーブルを参照して関数値を取得するＳＩＭＤ演算の場合、積和演算器１１２は、入力された要素データに対応する関数に含まれる係数をベクタレジスタ１１１の参照先を切替えつつベクタレジスタ１１１から順次取得する。そして、積和演算器１１２は、取得した因子を用いて要素データ毎の関数値を算出する。その後、積和演算器１１２は、演算結果をベクタレジスタ１１１へ出力して格納させる。【００３８】
ここで、図２を参照して、積和演算部１００による要素データ毎にテーブルを参照して関数値を取得するＳＩＭＤ演算の処理について詳細に説明する。図２は、積和演算部の詳細な回路図である。図２では、分かり易いように、演算命令制御部１０１から、ベクタレジスタ１１１Ａ、積和演算器１１２Ａ及びマルチプレクサ１２２Ａへ延びる信号入力経路を記載した。ただし、実際には、演算命令制御部１０１からの入力経路は、他のベクタレジスタ１１１Ｂ〜１１１Ｃ、積和演算器１１２Ｂ〜１１２Ｃ及びマルチプレクサ１２２Ｂ〜１２２Ｃへも延びる。【００３９】
積和演算部１００は、図２に示すように、図１に示した積和演算器１１２を複数有する。ここでは、それぞれの積和演算器１１２を、積和演算器１１２Ａ〜１１２Ｃと表す。また、積和演算部１００は、バンクと呼ばれる単位に分割されたベクタレジスタ１１１を有する。ここでは、バンク単位に分割された各ベクタレジスタ１１１を、ベクタレジスタ１１１Ａ〜１１１Ｃと表す。ベクタレジスタ１１１Ａ〜１１１Ｃは、それぞれ積和演算器１１２Ａ〜１１２Ｃに１対１で対応する。さらに、さらに、積和演算部１００は、各ベクタレジスタ１１１Ａ〜１１１Ｃに対応させて、間接アドレスレジスタ１２１Ａ〜１２１Ｃ及びマルチプレクサ１２２Ａ〜１２２Ｃが配置される。以下の説明では、それぞれを区別しない場合、要素レジスタ１１３、積和演算器１１２、間接アドレスレジスタ１２１及びマルチプレクサ１２２と称する。【００４０】
ベクタレジスタ１１１Ａ〜１１１Ｃは、例えばＲＡＭ（Random  Acccess  Memory）である。ベクタレジスタ１１１Ａ〜１１１Ｃは、本実施例では、全部で８つ配置される。そして、ベクタレジスタ１１１Ａがバンク＃０にあたり、ベクタレジスタ１１１Ｂがバンク＃１にあたり、ベクタレジスタ１１１Ｃがバンク＃７にあたる場合で説明する。【００４１】
さらに、ベクタレジスタ１１１Ａは、複数の要素レジスタ１１３Ａを有する。また、ベクタレジスタ１１１Ｂは、複数の要素レジスタ１１３Ｂを有する。ベクタレジスタ１１１Ｃは、複数の要素レジスタ１１３Ｃを有する。ここでは、ベクタレジスタ１１１Ａを例に説明する。【００４２】
各要素レジスタ１１３Ａは、それぞれレジスタ番号が割り当てられたラインと呼ばれる単位と対応する。ここでは、レジスタ番号を表す数値を、ベクタレジスタ１１１の「アドレス」という。すなわち、各要素レジスタ１１３Ａには、それぞれアドレスが割り当てられる。ここでは、ライン＃＃０〜＃＃５１１に対応する各要素レジスタ１１３Ａが存在する場合で説明する。【００４３】
ベクタレジスタ１１１Ａは、各サイクルで演算に用いる複数のオペランドを積和演算器１１２Ａに供給し、また、各サイクルで演算結果をいずれかの要素レジスタ１１３Ａに書き戻すためのリードポート及びライトポートを有する。本実施例では、ベクタレジスタ１１１Ａは、積和演算器１１２Ａに対して３本のリードポートを有する。【００４４】
ここで、本実施例では、ベクタレジスタ１１１Ａの各リードポートが、積和演算器１１２Ａに直接接続されているが、接続はこれに限らず、ルータを経由してもよい。ルータを経由するにあたり、１つのリードポートがルータを経由して積和演算器１１２Ａ〜１１２Ｃへ接続され、他のリードポートは直接積和演算器１１２Ａに接続されてもよい。また、複数のリードポートがルータを経由して積和演算器１１２Ａ〜１１２Ｃへ接続されてもよい。ルータを経由した場合、そのリードポートから出力されるデータは、積和演算器１１２Ａ〜１１２Ｃの何れかにオペランドとして供給されることが可能となる。【００４５】
ここで、本実施例では、図３に示す折れ線近似を行った場合の関数値の取得を例に説明する。図３は、実施例１で使用する折れ線近似を表す図である。【００４６】
本実施例では、積和演算部１００は、グラフ２０１で示すｙ＝ｆ（ｘ）を直線近似して求めたグラフ２０２で示すような関数に対する関数値を取得する命令を受ける。グラフ２０２に示すように直線近似後の関数は、区間Ｄ１ではｆ１（ｘ）＝−０．５（ｘ−１）＋１の１次関数である。すなわち、直線近似後の関数は、区間Ｄ１では、傾きが−０．５であり切片が１．５の１次関数である。また、直線近似後の関数は、区間Ｄ２ではｆ２（ｘ）＝０（ｘ−２）＋０．５の１次関数である。すなわち、直線近似後の関数は、区間Ｄ２では、傾きが０であり切片が０．５の１次関数である。また、直線近似後の関数は、区間Ｄ３ではｆ３（ｘ）＝０．５（ｘ−３）＋０．５の１次関数である。すなわち、直線近似後の関数は、区間Ｄ３では、傾きが０．５であり切片が−１．０の１次関数である。また、直線近似後の関数は、区間Ｄ４ではｆ４（ｘ）＝２（ｘ−４）＋１の１次関数である。すなわち、直線近似後の関数は、区間Ｄ４では、傾きが２であり切片が−７．０の１次関数である。また、直線近似後の関数は、区間Ｄ５ではｆ５（ｘ）＝０．５（ｘ−５）＋３の１次関数である。すなわち、直線近似後の関数は、区間Ｄ５では、傾きが０．５であり切片が０．５の１次関数である。この直線近似後の各関数が、「所定数の同型の関数」の一例にあたる。この場合、同型の関数とは、それぞれで係数が異なる関数を指す。【００４７】
区間の値を入力とした場合、グラフ２０２で表される直線近似関数の関数値を得るために用いられるテーブルは、図４に示すルックアップテーブル２１０となる。図４は、直線近似関数の関数値を求めるために使用されるルックアップテーブルの一例の図である。この場合、要素レジスタ１１３Ａ〜１１３Ｃには、ルックアップテーブル２１０に示される傾きの値及び切片の値が格納される。このベクタレジスタ１１１に格納された各傾きの値及び切片の値が、「演算値」の一例にあたる。【００４８】
より具体的には、図５に示す値が要素レジスタ１１３Ａ〜１１３Ｃに格納される。図５は、実施例１に係る要素レジスタが格納する値を示した図である。図５では、それぞれを表すバンク＃１〜＃７の呼称で、ベクタレジスタ１１１Ａ〜１１１Ｃを表した。ここでは、グラフ２０２の直線近似関数が全部で１６区画に分かれる場合で説明する。すなわち、直線近似関数は、１６個の１次関数で表される。【００４９】
直線近似関数の関数値を取得する場合、図５に示すように、ベクタレジスタ１１１Ａ〜１１１Ｃのアドレス０x０００〜０x００Ｆの各要素レジスタ１１３Ａ〜１１３Ｃに、直線近似関数の各区間Ｄ１〜Ｄ５における１次関数の切片の値が格納される。ここでは、アドレス０x０００〜０x００Ｆの各要素レジスタ１１３Ａ〜１１３Ｃを切片アドレス部３０１とする。また、ベクタレジスタ１１１Ａ〜１１１Ｃのアドレス０x０１０〜０x０１Ｆの各要素レジスタ１１３Ａ〜１１３Ｃに、直線近似関数の各区間Ｄ１〜Ｄ５における１次関数の傾きの値が格納される。ここでは、アドレス０x０１０〜０x０１Ｆの各要素レジスタ１１３Ａ〜１１３Ｃを、傾きアドレス部３０２とする。【００５０】
このように、切片アドレス部３０１と傾きアドレス部３０２とは、先頭から数えた同じ位置に同じ直線近似関数の係数が格納される。この状態が、「各関数の各項に応じた所定数の係数を位置毎に連続して保持」する状態に当たる。本実施例の場合、所定数の係数は、切片の値と傾きの値の２つの係数である。関数の各項とは、一次関数における傾きを表す項及び切片を表す項にあたる。【００５１】
また、ベクタレジスタ１１１Ａ〜１１１Ｃのアドレスｍの各要素レジスタ１１３Ａ〜１１３ＣにＳＩＭＤ演算に用いる配列に含まれる各要素データの値がメモリコントローラ１２により格納される。より具体的には、アドレスｍの各要素レジスタ１１３Ａ〜１１３Ｃの下位に固定小数１６ビット値の要素データが格納される。ここでは、１６ビットの固定小数点値の下位１２ビットが小数部である場合で説明する。この固定小数点の形式は、「Ｑ１２」と表現される場合がある。また、ベクタレジスタ１１１Ａ〜１１１Ｃには、演算が進むことで、各要素データに対応する切片のアドレス、切片の値、傾きのアドレス及び演算結果である関数値が格納される。ここで、乗算結果及び累積値は、３２ビットの固定小数点であり、下位２４ビットが小数となる場合で説明する。この固定小数点の形式は、「Ｑ２４」と表現される場合がある。【００５２】
また、ベクタレジスタ１１１Ａ〜１１１Ｃは、対応する間接アドレスレジスタ１２１Ａ〜１２１Ｃからアドレスの入力を受ける。そして、ベクタレジスタ１１１Ａ〜１１１Ｃは、入力されたアドレスの要素レジスタ１１３Ａ〜１１３Ｃに格納された値を積和演算器１１２Ａ〜１１２Ｃへ出力する。【００５３】
ベクタレジスタ１１１Ａ〜１１１Ｃは、演算が終了すると、メモリコントローラ１２からの指示に応じて、演算結果をメモリコントローラ１２へ出力する。このベクタレジスタ１１１Ａ〜１１１Ｃが、「記憶部」の一例にあたる。そして、要素レジスタ１１３Ａ〜１１３Ｃが、「要素記憶領域」の一例にあたる。【００５４】
間接アドレスレジスタ１２１Ａ〜１２１Ｃは、例えばＦＦ（Flip-Flop）である。直線近似関数を用いたＳＩＭＤ計算を実行する場合、計算開始前の間接アドレスレジスタ１２１Ａ〜１２１Ｃにはデータは未格納である。そして、間接アドレスレジスタ１２１Ａ〜１２１Ｃは、関数値を求める演算の途中で発生する、ベクタレジスタ１１１Ａ〜１１１Ｃにおける切片又は傾きが格納されたアドレスを示す間接アドレスを格納する。その後、間接アドレスレジスタ１２１Ａ〜１２１Ｃは、保持する値をマルチプレクサ１２２Ａ〜１２２Ｃを介してベクタレジスタ１１１Ａへ出力する。この間接アドレスレジスタ１２１Ａ〜１２１Ｃが、「間接記憶部」の一例にあたる。【００５５】
マルチプレクサ１２２Ａ〜１２２Ｃは、間接アドレスレジスタ１２１Ａ〜１２１Ｃからの入力とメモリコントローラ１２からの入力の２つの入力を受ける。そして、マルチプレクサ１２２Ａ〜１２２Ｃは、演算命令制御部１０１からの指示を受けて、２つの入力のいずれかを選択する。その後、マルチプレクサ１２２Ａ〜１２２Ｃは、選択した入力をベクタレジスタ１１１Ａ〜１１１Ｃへ出力する。【００５６】
次に、図６及び７を参照して積和演算器１１２Ａ〜１１２Ｃの機能を説明する。図６は、与えられた要素データに対応する切片の値を取得するまでの要素レジスタの状態の遷移を説明するための図である。また、図７は、切片の値の取得後から演算結果取得までの要素レジスタの状態の遷移を説明するための図である。この積和演算器１１２Ａ〜１１２Ｃが、「演算部」の一例にあたる。【００５７】
図６に示すように、積和演算器１１２Ａは、ベクタレジスタ１１１Ａのアドレスｍに格納された要素データの値を１２ビット右シフトさせ上位４ビットを取得する。そして、積和演算器１１２Ａは、取得した４ビットのデータをアドレスｎの要素レジスタ１１３Ａに格納する（ステップＳ１）。このアドレスｎの要素レジスタ１１３Ａに格納された４ビットのデータは、要素データに対応する切片の値を保持する要素レジスタ１１３Ａのアドレスである。以下では、このアドレスｎの要素レジスタ１１３Ａに格納された４ビットのデータを切片アドレスと言う。この切片アドレスが、「第１選択値」及び「第１番号」の一例にあたる。【００５８】
次に、積和演算器１１２は、アドレスｎの要素レジスタ１１３Ａに格納された切片アドレスを取得し間接アドレスレジスタ１２１Ａにセットする（ステップＳ２）。次に、アドレスｐの要素レジスタ１１３Ａに、メモリコントローラ１２から入力された値である１．０が格納される。その後、間接アドレスレジスタ１２１Ａにセットされた切片アドレスがベクタレジスタ１１１Ａに入力されることで（ステップＳ３）、積和演算器１１２は、切片アドレスの要素レジスタ１１３Ａから出力された切片の値を取得する。さらに、積和演算器１１２は、アドレスｐの要素レジスタ１１３Ａから１．０を取得する。そして、積和演算器１１２は、切片の値に１．０を乗算した値をアドレスｑの要素レジスタ１１３Ａへ格納する（ステップＳ４）。この積和演算器１１２により格納された切片の値が、「第１演算値」及び「第１係数」の一例にあたる。【００５９】
次に、図７に示すように、積和演算器１１２は、アドレスｎの要素レジスタ１１３Ａに格納された値を取得する。そして、積和演算器１１２は、取得した値に直線近似関数に含まれる一次関数の数である１６を付加し、アドレスｎの要素レジスタ１１３Ａに再度格納する（ステップＳ５）。このときアドレスｎの要素レジスタ１１３Ａに格納されたデータは、要素データに対応する傾きの値を保持する要素レジスタ１１３Ａのアドレスである。以下では、このときアドレスｎの要素レジスタ１１３Ａに格納された値を傾きアドレスと言う。ここで、各切片の値及び傾きの値は、ベクタレジスタ１１１において１６個ごとに格納される。すなわち、１６を足すことで、切片アドレスで指定された要素レジスタ１１３Ａの切片アドレス部３０１における位置と同じ傾きアドレス部３０２における位置を示す傾きアドレスが生成できる。この傾きアドレスが、「第２選択値」及び「第２番号」の一例にあたる。【００６０】
次に、積和演算器１１２は、アドレスｎの要素レジスタ１１３Ａに格納された傾きアドレスを取得し間接アドレスレジスタ１２１Ａにセットする（ステップＳ６）。【００６１】
その後、間接アドレスレジスタ１２１Ａにセットされた傾きアドレスがベクタレジスタ１１１Ａに入力されることで（ステップＳ７）、積和演算器１１２は、傾きアドレスの要素レジスタ１１３Ａから出力された傾きの値を取得する。この傾きの値が、「第２演算値」及び「第２係数」の一例にあたる。【００６２】
また、積和演算器１１２Ａは、アドレスｍの要素レジスタ１１３Ａから要素データを取得する。さらに、積和演算器１１２Ａは、アドレスｑの要素レジスタ１１３Ａから切片の値を取得する。そして、積和演算器１１２は、傾きの値と要素データとを掛け合わせ、掛けあわせた結果に切片の値を加算して、要素データに対応する直線近似関数の関数値を求める。その後、積和演算器１１２は、求めた関数値をアドレスｑの要素レジスタ１１３Ａに格納する（ステップＳ６）。【００６３】
図８は、図５〜７で示した演算を積和演算部に行わせるためのプログラムの一例の図である。以下では、紙面に向かって左端の行番号を用いてプログラムが積和演算部１００に実行させる処理を説明する。図８のプログラムでは、アドレスｍ、ｎ、ｐ、ｑの要素レジスタ１１３ＡをそれぞれＦＲ＃ｍ、＃ｎ、＃ｐ、＃ｑとして表した。また、間接アドレスレジスタ１２１ＡをＩＮＤ＿ＲＥＧと表した。【００６４】
１行目は、アドレスｍの要素レジスタ１１３Ａから固定小数点値を取得し、取得した固定小数点値を１２ビット右にシフトさせ上位４ビットを取得し、取得した４ビットのデータをアドレスｎの要素レジスタ１１３Ａの下位４ビットにセットさせる処理を表す。この４ビットのデータは、切片アドレスである。【００６５】
２行目は、アドレスｎの要素レジスタ１１３Ａにセットされた切片アドレスを間接アドレスレジスタ１２１Ａへ格納させる処理を表す。【００６６】
３行目は、１．０をアドレスｐの要素レジスタ１１３Ａに格納させる処理を表す。【００６７】
４行目は、間接アドレスレジスタ１２１Ａに格納された値に、アドレスｐの要素レジスタ１１３Ａに格納された値に乗算させ、乗算結果をアドレスｑの要素レジスタ１１３Ａに格納させる処理を表す。すなわち、４行目は、間接アドレスレジスタ１２１Ａに格納された切片の値をアドレスｑの要素レジスタ１１３Ａに格納させる処理にあたる。ここまでで、図６に示した処理が終了する。【００６８】
５行目は、アドレスｎの要素レジスタ１１３Ａに格納された値に０ｘ０１０を加算して、加算結果である傾きアドレスを間接アドレスレジスタ１２１Ａに格納させる処理を表す。０ｘ０１０は、アドレス１６個分にあたり、５行目は、アドレスを１６ずらす処理にあたる。【００６９】
６行目は、アドレスｎの要素レジスタ１１３Ａに格納された傾きアドレスを取得し、間接アドレスレジスタ１２１Ａに格納させる処理にあたる。【００７０】
７行目は、以下の処理を表す。まず１つの処理は、間接アドレスレジスタ１２１Ａに格納された傾きアドレスを取得し傾きアドレスの要素レジスタ１１３Ａに格納された傾きを取得し、アドレスｍの要素レジスタ１１３Ａに格納された要素データに乗算する処理である。次に、２つ目の処理は、アドレスｑの要素レジスタ１１３Ａに格納された切片に乗算結果を加算する処理である。これにより、アドレスｑの要素レジスタ１１３Ａに演算結果が格納される。【００７１】
次に、図９を参照して、ＳＩＭＤ演算命令の処理の流れを説明する。図９は、ＳＩＭＤ演算命令の処理のフローチャートである。ここでは、任意のバンク＃ｉとして表される各ベクタレジスタ１１１における処理を例に説明する。【００７２】
バンク＃ｉのベクタレジスタ１１１は、演算命令制御部１０１から入力された命令が間接アドレスレジスタ１２１からの読み出し命令か否かを判定する（ステップＳ１０１）。【００７３】
命令が間接アドレスレジスタ１２１からの読み出し命令の場合（ステップＳ１０１：肯定）、ベクタレジスタ１１１は、アドレスをマルチプレクサ１２２から読み出す。そして、ベクタレジスタ１１１は、間接アドレスレジスタ１２１から読み出したアドレスをマルチプレクサ１２２に繋がる入力ポートに対応する出力ポートにおける読み出しアドレスにセットする（ステップＳ１０２）。【００７４】
これに対して、命令が間接アドレスレジスタ１２１からの読み出し命令でない場合（ステップＳ１０１：否定）、ベクタレジスタ１１１は、以下の処理を行う。すなわち、ベクタレジスタ１１１は、命令により与えられ修飾されたアドレスをマルチプレクサ１２２に繋がる入力ポートに対応する出力ポートにおける読み出しアドレスにセットする（ステップＳ１０３）。【００７５】
次に、ベクタレジスタ１１１は、命令により与えられ修飾されたアドレスを他の出力ポートにおける読み出しアドレスにセットする（ステップＳ１０４）。【００７６】
ベクタレジスタ１１１は、読み出しアドレスとしてセットされたアドレスにしたがい要素レジスタ１１３の内容を読み出し各出力ポートから出力しオペランドとしてセットする（ステップＳ１０５）。【００７７】
次に、積和演算器１１２は、演算命令制御部１０１から入力された命令が間接アドレスレジスタ１２１への書き込み命令か否かを判定する（ステップＳ１０６）。【００７８】
命令が間接アドレスレジスタ１２１への書き込み命令でない場合（ステップＳ１０６：否定）、積和演算器１１２は、ベクタレジスタ１１１の各出力ポートに対応する自己の入力ポートから各オペランドの入力を受ける。そして、積和演算器１１２は、各オペランドを用いて命令で指定された演算を実行し、演算結果を自己が有する演算結果レジスタにセットする(ステップＳ１０７)。【００７９】
次に、積和演算器１１２は、命令により与えられ修飾されたアドレスを書き込み用のポートにおける書き込みアドレスとする（ステップＳ１０８）。【００８０】
その後、積和演算器１１２は、演算結果レジスタの内容を書き込み用のポートを用いて書き込みアドレスで指定された要素レジスタ１１３に書き込む（ステップＳ１０９）。【００８１】
これに対して、命令が間接アドレスレジスタ１２１への書き込み命令の場合（ステップＳ１０６：肯定）、ベクタレジスタ１１１は、所定のオペランドを間接アドレスレジスタ１２１にセットする（ステップＳ１１０）。【００８２】
次に、図１０を参照して、ＳＩＭＤ演算で要素データ毎のテーブル検索演算を実行する処理の流れを説明する。図１０は、ＳＩＭＤ演算で要素データ毎のテーブル検索演算を実行する処理のフローチャートである。【００８３】
管理者は、演算において参照対象となるテーブルの値をベクタレジスタ１１１の所定の番号の要素レジスタ１１３に配置する（ステップＳ２０１）。【００８４】
積和演算器１１２は、入力値をベクタレジスタ１１１の参照に用いるアドレスとなるように加工する（ステップＳ２０２）。ここで、入力値は、演算の開始時であれば例えば要素データであり、演算の途中であれば例えば演算結果である。【００８５】
その後、積和演算器１１２は、ベクタレジスタ１１１の参照に用いるアドレスをベクタレジスタ１１１に格納する。ベクタレジスタ１１１は、格納されたベクタレジスタ１１１の参照に用いるアドレスを間接アドレスレジスタ１２１に書き込む（ステップＳ２０３）。【００８６】
次に、積和演算器１１２は、間接アドレスレジスタ１２１に格納された値をアドレスとして要素レジスタ１１３の内容を読み出し他のオペランドとともに演算に使用する（ステップＳ２０４）。【００８７】
その後、積和演算器１１２は、演算が完了したか否かを判定する（ステップＳ２０５）。演算が完了していない場合（ステップＳ２０５：否定）、積和演算器１１２は、ステップＳ２０２へ戻る。【００８８】
これに対して、演算が完了した場合（ステップＳ２０５：肯定）、積和演算器１１２は、演算結果をベクタレジスタ１１１に格納して演算処理を完了する。【００８９】
以上に説明したように、本実施例に係る積和演算部は、テーブルを参照して計算を行う演算を実行する場合に、ベクタレジスタにテーブルの値を登録し、要素データ又は他の入力値を用いて積和演算によりベクタレジスタの参照に用いるアドレスを生成する。そして、積和演算部は、生成したアドレスを間接アドレスレジスタに格納する。そして、積和演算部は、間接アドレスに格納された値を読み出しアドレスとしてベクタレジスタからテーブルの値を取得し演算を行う。このように、バンクごとに間接アドレスレジスタを設けたことで、少ない命令数で効率よくテーブルを参照して計算を行う演算を実行することができる。そして、バンクごとに別々の内容を読み出すことができ、ＳＩＭＤ要素データ毎の計算を高速に処理することが可能となる。すなわち、回路規模を小さく抑えつつ処理効率を向上させることができる。【００９０】
ここで、本実施例では、区分毎に係数の異なる多項式を用いた近似又は補間を行う関数を用いた演算を例に説明したが、使用できる演算はこれに限らず、テーブルを参照して計算を行う演算、すなわち要素データ毎に表検索を行う演算であれば他の演算でもよい。例えば、ニュートン法その他の収束演算における、区分毎に異なる初期値やパラメータの取得などを行う演算を用いてもよい。
【実施例２】
【００９１】
次に、実施例２について説明する。本実施例に係る積和演算部は、要素データを冪数として２の冪乗を求める演算を実行する。本実施例に係る情報処理装置も図１及び２で示される構成を有する。本実施例では、ＳＩＭＤ演算に用いられる各要素データが８ビットの固定小数点である場合で説明する。具体的には、各要素データは、２の補数表現を用いて表されるものとし、下位７ビットが小数である（「Ｑ７表現」）とする。すなわち、各要素データは、ｓｘｘｘｙｙｙｙの８ビット表現で表され、ｓ＝０であれば、２進数である０．ｘｘｘｙｙｙｙを表し、ｓ＝１であれば、２進数である０．ｘｘｘｙｙｙｙ−１．０００００００を表す。また、演算結果は単精度浮動小数点であるＦＰ３２形式で求める場合で説明する。【００９２】
図１１は、実施例２に係るベクタレジスタに格納されるテーブルの値の一例を示す図である。ベクタレジスタ１１１の各要素レジスタ１１３には、図１１に示すように、アドレス００〜０Ｆに、要素データの上位４ビットの数を冪数とした場合の２の冪乗の計算結果となり得る１６個の値が格納される。また、要素レジスタ１１３のアドレス１０〜１Ｆには、要素データの下位４ビットの数を冪数とした場合の２の冪乗数の計算結果となり得る１６個の値が格納される。演算実行前に、アドレス＃ｍの要素レジスタ１１３に要素データが格納される。【００９３】
積和演算器１１２は、アドレス＃ｍの要素レジスタ１１３から要素データを取得する。そして、積和演算器１１２は、取得した要素データと０ｘ００００００Ｆ０との論理積をとり、要素データの上位４ビットより下位のビットを０としたデータを取得する。以下では、要素データの上位４ビットより下位のビットを０としたデータを要素データの上位４ビットを表すデータという。その後、積和演算器１１２は、取得した要素データの上位４ビットを表すデータをアドレス＃ｘの要素レジスタ１１３に格納する。【００９４】
次に、積和演算器１１２は、アドレス＃ｍの要素レジスタ１１３から要素データを取得する。そして、積和演算器１１２は、取得した要素データと０ｘ０００００００Ｆの論理積をとり、要素データの下位４ビットより上位のビットを０としたデータを取得する。以下では、要素データの下位４ビットより上位のビットを０としたデータを要素データの下位４ビットを表すデータという。その後、積和演算器１１２は、取得した要素データの下位４ビットを表すデータをアドレス＃ｙの要素レジスタ１１３に格納する。【００９５】
次に、積和演算器１１２は、結果レジスタであるアドレス＃ｒの要素レジスタ１１３に１．０を格納する。【００９６】
次に、積和演算器１１２は、アドレス＃ｘの要素レジスタ１１３に格納された要素データの上位４ビットを表すデータを取得する。そして、積和演算器１１２は、要素データの上位４ビットを最下位までシフトし、アドレス＃ｍで上位４ビットにあったデータを下位４ビットに移動させたデータを生成する。その後、積和演算器１１２は、上位４ビットを下位４ビットに移動させたデータをアドレス＃ｘの要素レジスタ１１３に格納する。【００９７】
また、積和演算器１１２は、アドレス＃ｙの要素レジスタ１１３に格納された要素データの下位４ビットを表すデータを取得する。そして、積和演算器１１２は、要素データの下位４ビットを表すデータに下位４ビットの計算に用いるテーブルの値の先頭のアドレスである０ｘ０１０を加算する。その後、積和演算器１１２は、要素データの下位４ビットを表すデータに０ｘ０１０を加算したデータをアドレス＃ｙの要素レジスタ１１３に格納する。【００９８】
次に、積和演算器１１２は、アドレス＃ｘの要素レジスタ１１３に格納された要素データの上位４ビットを下位４ビットに移動させたデータを取得する。次に、積和演算器１１２は、上位４ビットを下位４ビットに移動させたデータを間接アドレスレジスタ１２１へ格納する。このデータが、要素データの上位４ビットを冪数として２の冪乗を算出した場合の演算結果が格納されたアドレスにあたる。【００９９】
その後、積和演算器１１２は、間接アドレスレジスタ１２１に格納された値をアドレスとする要素レジスタ１１３の内容を取得する。この取得した値が、要素データの上位４ビットを冪数として２の冪乗を算出した場合の演算結果にあたる。そして、積和演算器１１２は、取得した値をアドレス＃ｒの要素レジスタ１１３に格納された値に乗算してアドレス＃ｒの要素レジスタ１１３に格納する。【０１００】
次に、積和演算器１１２は、アドレス＃ｙの要素レジスタ１１３に格納された要素データの下位４ビットのデータに０ｘ０１０を加算した値を取得する。次に、積和演算器１１２は、要素データの下位４ビットのデータに０ｘ０１０を加算した値を間接アドレスレジスタ１２１へ格納する。この要素データの下位４ビットのデータに０ｘ０１０を加算した値が、要素データの下位４ビットを冪数として２の冪乗を算出した場合の演算結果が格納されたアドレスにあたる。【０１０１】
その後、積和演算器１１２は、間接アドレスレジスタ１２１に格納された値をアドレスとする要素レジスタ１１３の内容を取得する。この取得した値が、要素データの下位４ビットを冪数として２の冪乗を算出した場合の演算結果にあたる。そして、積和演算器１１２は、取得した値をアドレス＃ｒの要素レジスタ１１３に格納された値に乗算してアドレス＃ｒの要素レジスタ１１３に格納する。これにより、要素データを冪数とした２の冪乗の演算が完了する。【０１０２】
ここで、本実施例に係る積和演算部１００は、ＥＸＰ２（Ｘ＋Ｙ）＝ＥＸＰ２（Ｘ）×ＥＸＰ２（Ｙ）の関係を利用して要素データを冪数とする２の冪乗を求める。具体的には、積和演算部１００は、上位４ビットの数と下位４ビットの数の和に要素データを分解し、それぞれを冪数とする２の冪乗の値をベクタレジスタ１１１に格納された値から取得して掛け合わせることで、要素データを冪数とする２の冪乗を求める。【０１０３】
図１２は、２の冪乗を求める演算を積和演算部に行わせるためのプログラムの一例の図である。【０１０４】
１行目は、要素データの上位４ビットを表すデータをアドレスｘの要素レジスタ１１３に格納させる処理を表す。【０１０５】
２行目は、要素データの下位４ビットを表すデータをアドレスｙの要素レジスタ１１３に格納させる処理を表す。【０１０６】
３行目は、結果レジスタであるアドレス＃ｒの要素レジスタ１１３に１．０を格納させる処理を表す。【０１０７】
４行目は、要素データの上位４ビットを表すデータを最下位までシフトさせる処理を表す。【０１０８】
５行目は、要素データの下位４ビットを表すデータに下位４ビットの計算に用いるテーブルの値の開始位置のアドレスを加算させる処理を表す。【０１０９】
６行目は、要素データの上位４ビットを表すデータを間接アドレスレジスタ１２１にセットさせる処理を表す。【０１１０】
７行目は、間接アドレスレジスタ１２１にセットされた値をアドレスとする要素レジスタ１１３から値を取得させ、結果レジスタであるアドレス＃ｒの要素レジスタ１１３の値に乗算させる処理を表す。【０１１１】
８行目は、要素データの下位４ビットを表すデータに０ｘ０１０を加算した値を間接アドレスレジスタ１２１にセットさせる処理を表す。【０１１２】
９行目は、間接アドレスレジスタ１２１にセットされた値をアドレスとする要素レジスタ１１３から値を取得させ、結果レジスタであるアドレス＃ｒの要素レジスタ１１３の値に乗算させる処理を表す。【０１１３】
この場合、要素データの上位４ビットを表すデータが、「第１選択値」の一例にあたる。そして、要素データの上位４ビットを冪数として２の冪乗を算出した場合の演算結果が、「第１演算値」の一例にあたる。また、要素データの下位４ビットを表すデータが、「第２選択値」の一例にあたる。そして、要素データの上位４ビットを冪数として２の冪乗を算出した場合の演算結果が、「第２演算値」の一例にあたる。【０１１４】
以上に説明したように、本実施例に係る積和演算部は、要素データの上位４ビットの数と下位４ビットの数をそれぞれ冪数とした場合の、冪乗の結果として取り得る値をベクトルレジスタに格納する。そして、本実施例に係る積和演算部は、要素データの上位４ビットの数と下位４ビットの数を間接アドレスレジスタに格納し、格納した値を用いてベクトルレジスタを検索して、要素データの上位４ビットの数と下位４ビットの数をそれぞれ冪数とした場合の２の冪乗の計算結果を取得する。その後、積和演算部は、取得した２つの値を乗算することで要素データを冪数とした場合の２の冪乗の演算結果を取得する。【０１１５】
この場合も、少ない命令数で効率よくテーブルを参照して計算を行う演算を実行することができ、ＳＩＭＤ要素毎の計算を高速に処理することが可能となる。すなわち、回路規模を小さく抑えつつ処理効率を向上させることができる。
【符号の説明】
【０１１６】
１  ＰＣＩカード
２  ホストコンピュータ
１０  処理ユニット
１１  全体命令制御部
１２  メモリコントローラ
１３  メモリ
１４  ＰＣＩ制御部
１０１  演算命令制御部
１０２  演算命令バッファ
１０３  マルチプレクサ
１１１，１１１Ａ〜１１１Ｃ  ベクタレジスタ
１１２，１１２Ａ〜１１２Ｃ  積和演算器
１１３，１１３Ａ〜１１３Ｃ  要素レジスタ
１２１，１２１Ａ〜１２１Ｃ  間接アドレスレジスタ
１２２，１２２Ａ〜１２２Ｃ  マルチプレクサ
【図１】
2020084721.tif 000003
【図２】
2020084721.tif 000004
【図３】
2020084721.tif 000005
【図４】
2020084721.tif 000006
【図５】
2020084721.tif 000007
【図６】
2020084721.tif 000008
【図７】
2020084721.tif 000009
【図８】
2020084721.tif 000010
【図９】
2020084721.tif 000011
【図１０】
2020084721.tif 000012
【図１１】
2020084721.tif 000013
【図１２】
2020084721.tif 000014
【国際調査報告】
2020084721.tif 000015
2020084721.tif 000016
2020084721.tif 000017
2020084721.tif 000018