(57)【要約】【課題】演算処理速度を向上させる演算処理装置及び演算処理装置の制御方法を提供する。【解決手段】複数の浮動小数点レジスタ５００は、データを格納する。処理実行部１３１は、浮動小数点レジスタ５００に格納されたデータを用いて演算処理を行う。第１スイッチ１４３及び第２スイッチ１４４は、処理実行部１３１と浮動小数点レジスタ５００とを結ぶ経路を選択する。スイッチ制御部１４１は、処理実行部１３１からの切替指示を基に、選択経路を切り替えるように第１スイッチ１４３及び第２スイッチ１４４を制御する。【選択図】図１
2018022339.tif 000002
【特許請求の範囲】
【請求項１】
データを格納する複数の格納部と、
前記格納部に格納されたデータを用いて演算処理を行う処理実行部と、
前記処理実行部と前記格納部とを結ぶ経路を選択する経路選択部と、
前記処理実行部からの切替指示を基に、選択経路を切り替えるように前記経路選択部を制御する切替制御部と
を備えたことを特徴とする演算処理装置。
【請求項２】
前記処理実行部は、前記経路選択部の切替パターンを選択するための情報を含む切替指示を前記切替制御部に通知し、
前記切替制御部は、前記切替パターンを予め複数有し、前記切替指示にしたがい前記切替パターンを選択し、選択した切替パターンにしたがい前記経路選択部を制御する
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記処理実行部は、１つの命令で所定数の演算を並行して実行させる命令を取得し、各前記命令に応じて前記切替指示を通知し、前記格納部から前記データを読み出し前記所定数の前記演算のそれぞれを行い、
前記切替制御部は、前記処理実行部が実行する前記所定数の前記演算のそれぞれに応じて前記経路選択部の前記選択経路を切り替える
ことを特徴とする請求項１又は２に記載の演算処理装置。
【請求項４】
前記切替制御部は、前記処理実行部による前記データの読み出し時及び前記データの書き込み時に、前記選択経路を切り替えるように前記経路選択部を制御し、
前記処理実行部は、前記切替制御部によって前記選択経路が切り替えられた前記経路選択部を介して前記格納部に対して前記データの読み出し及び書き込みを行う
ことを特徴とする請求項１〜３のいずれか一つに記載の演算処理装置。
【請求項５】
複数のレジスタ、演算器及び前記演算器と前記レジスタとを結ぶ経路の選択を行うスイッチを有する演算処理装置の制御方法であって、
前記レジスタにデータを格納し、
前記演算器から送信された切替指示に応じて前記スイッチを切り替え、
前記演算器に、切り替えられた前記スイッチにより選択された前記経路を介して前記レジスタに格納されたデータを読み出させて演算を行わせる
ことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、人工知能は、機械学習を行い識別や予測といった処理を高精度で行うことが可能になっている。さらに、機械学習では、多重構造を有するニューラルネットワークを使用した学習方法である深層学習（ディープラーニング）という技術が注目されている。深層学習を用いた学習は、多くの行列計算が用いられる。
【０００３】
演算処理装置に用いられるＧＰＵ（Graphic  Processing  Unit）は、元々は画像処理用のプロセッサであるが、複数の積和演算器を有し、行列計算を得意としているため、信号学習用の処理を行うプロセッサとしても用いられることが多い。そして、深層学習を行う処理においても、ＧＰＵが用いられることが一般的である。
【０００４】
深層学習の中で主に画像認識で用いられる畳み込みニューラルネットワークという処理がある。畳み込みニューラルネットワークでは、畳み込みと呼ばれる演算が多用される。以下では、「畳み込み演算」という。例えば、画像認識を行う場合、入力画像上の領域に予め決められたパラメータを各要素として有する重み枠を元画像に配置する。そして、重み枠が配置された入力画像の各要素と、重み枠の各要素とを乗算したものを合計することで、入力画像における重み枠が配置された領域の特徴量を算出する。この元画像への重み枠の配置を予め決められた重み枠の移動幅を用いて入力画像全体に行い、算出した特徴量をまとめたものが、畳み込み演算の結果として出力される出力画像となる。重み枠は、「フィルタ」と呼ばれる場合がある。
【０００５】
例えば、入力画像として、８×８の要素を有する、すなわち８×８ビットのグレースケールの画像を考える。以下では、８×８の入力画像という。また、４×４の要素を有するフィルタを用いる場合で、且つフィルタを入力画像における１列又は１行ずつずらす場合を説明する。以下では、４×４のフィルタという。この場合、入力画像の行方向の一方の端に配置されたフィルタを８−３回ずらすと他方の端に到達する。すなわち、出力画像は行方向に５つの要素を有する。同様に、入力画像の列方向の一方の端に配置されたフィルタを８−３回ずらすと他方の端に到達する。すなわち、出力画像は列方向にも５つの要素を有する。したがって、出力画像は、５×５の画像となる。そして、出力画像の各要素は、フィルタを入力画像に配置した状態の、フィルタの各要素とその各要素に対応する位置の入力画像の各要素を乗算した合計値となる。
【０００６】
このように、乗算した値を合計する演算を行う場合、演算処理装置は、ｆｍａ（Fused  Multiply  Add）と呼ばれる命令を用いることが多い。ｆｍａとは、（Ａ×Ｂ）＋Ｃの形で表される浮動小数点の積和演算を行う命令である。
【０００７】
さらに、このような畳み込み演算を行う場合に、１つの命令を同時に複数のデータに適用して複数の演算を並列処理させて同時に複数の出力を得るＳＩＭＤ（Single  Instruction  Multiple  Data）という方式が用いられる場合がある。例えば、４個のデータを並列に処理するＳＩＭＤを用いた演算の場合で説明する。以下では、ｎ個のデータを並列に処理するＳＩＭＤを、ｎＳＩＭＤという。すなわち、この場合の演算処理は、４ＳＩＭＤの演算処理といえる。また、以下では、ＳＩＭＤを用いた演算を、ＳＩＭＤ演算という。
【０００８】
上述した８×８の入力画像及び４×４のフィルタを用いた畳み込み演算の場合、演算装置は、フィルタを１列ずつ４回ずらした各配置状態のフィルタの１つの要素と対応する入力画像の要素とを乗算した結果である４つの値を一度で計算できる。すなわち、４ＳＩＭＤの演算を行う場合、演算処理装置は、４つの異なる配置のフィルタの状態と対応する出力画像の要素を並行して算出することができる。
【０００９】
このようなＳＩＭＤを用いた演算処理を行う場合、演算処理装置は、メモリに格納された入力画像のデータのうち、１度の演算に用いるデータを、ＳＩＭＤ演算で用いるレジスタに格納してから１回の演算を行う。この処理を繰り返すことで、演算処理装置は、畳み込み演算を行うことができる。例えば、４ＳＩＭＤの演算処理の場合、１回のＳＩＭＤ演算に用いられるレジスタは４つである。このように、１回のＳＩＭＤ演算を行う際に用いる数のレジスタをまとめて、１つのＳＩＭＤレジスタという。演算処理装置は、ＳＩＭＤレジスタへのデータの格納を行う場合、ＳＩＭＤのロード命令を用いて１度にＳＩＭＤレジスタの全てのレジスタにデータを格納する。
【００１０】
ここで、畳み込み演算では、出力画像の１つの要素を求める場合に、フィルタの各要素とそれに対応する入力画像の各要素とを用いる。さらに、ＳＩＭＤを用いた畳み込み演算では、並行する畳み込み演算の中で、１つの畳み込み演算に用いた値が、他の畳み込み演算に用いられる。そのため、ＳＩＭＤを用いた畳み込み演算を行う場合、ＳＩＭＤレジスタの各レジスタに格納された値を並行する畳み込み演算で使い回すことが好ましい。ただし、フィルタは入力画面を所定列ずつずれていき、また所定行ずつずれていく。そのため、ＳＩＭＤレジスタの各レジスタに格納された値を、他の畳み込み演算に回すとともに、使用が終了した値が捨てられ、新たな値がレジスタに格納される。以下では、このように、使用が終了した値を削除し、他の値を他の畳み込み演算に回し、新たな値をレジスタに格納する処理を「ローテート」という。
【００１１】
ここで、ＳＩＭＤ命令には、例えば、シャッフル命令及びブロードキャスト命令がある。シャッフル命令は、レジスタに格納されたデータを入れ替える命令である。また、ブロードキャスト命令は、１つのレジスタに格納されたデータを他の複数のレジスタに複製して配置する命令である。従来は、ＳＩＭＤ命令としてシャッフル命令を用いてローテートを実現していた。
【００１２】
例えば、畳み込み演算に関する技術としては、１ライン毎に乗算器を設け、各ラインの重みを格納するシフトレジスタを設け、値をシフトさせて順次乗算を行い、乗算結果を加算する従来技術がある。また、隣接するライン同士が乗算器を共有するように、各ラインに対応させて乗算器を設け、畳み込み演算を行う従来技術がある。また、メモリについてラインデータを格納する領域と重みデータを格納する領域とに分け、メモリ領域を循環させて演算を行う従来技術がある。また、乗算器の出力を他の乗算器に渡して演算を行う従来技術がある。また、ＳＩＭＤレジスタをバンク構成にし、各演算器に供給するデータを任意のレジスタの任意の位置のデータとすることで、レジスタ内データの再配置を不要にする従来技術がある。さらに、ＳＩＭＤレジスタへのデータをロードする際にバッファレジスタにコピーを作成しておき、各演算器に供給するデータを任意のレジスタの任意の位置のデータとすることで、レジスタ内データの再配置を不要にする従来技術がある。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２０１０−１３４６９７号公報
【特許文献２】特開２０１５−２１０７０９号公報
【特許文献３】特開２００８−３１０７００号公報
【特許文献４】特開２０１２−２０５２９８号公報
【特許文献５】特開２００５−３０９４９９号公報
【特許文献６】特開２０１１−２９０８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、ＳＩＭＤ命令は、同じＳＩＭＤレジスタ内のレジスタにアクセスする。すなわち、ＳＩＭＤ命令では、あるＳＩＭＤレジスタ内のレジスタのデータを他のＳＩＭＤレジスタのレジスタに移動することは困難である。そのため、例えば、ローテートを行う場合、シャッフル命令の他に、あるＳＩＭＤレジスタからデータを読み出し、他のＳＩＭＤレジスタに移動する命令が加わる。このように、ＳＩＭＤ命令を用いて、ローテートを実現するには、他の命令をさらに用いることになり、処理が冗長になってしまい演算処理速度が低下するおそれがある。
【００１５】
また、１ライン毎に設けた各ラインの重みを格納するシフトレジスタを用いて順次乗算する従来技術や、隣接するライン同士が乗算器を共有するように乗算器を設けられた従来技術では、ＳＩＭＤ命令について考慮していない。さらに、ラインデータを格納する領域と重みデータを格納する領域とにメモリを分けて演算を行う従来技術や、乗算器の出力を他の乗算器に渡して演算を行う従来技術においても、ＳＩＭＤ命令については考慮されていない。そのため、これらの従来技術を用いても、演算処理速度を向上させることは困難である。
【００１６】
開示の技術は、上記に鑑みてなされたものであって、演算処理速度を向上させる演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様において、複数の格納部は、データを格納する。処理実行部は、前記格納部に格納されたデータを用いて演算処理を行う。経路選択部は、前記処理実行部と前記格納部とを結ぶ経路を選択する。切替制御部は、前記処理実行部からの切替指示を基に、選択経路を切り替えるように前記経路選択部を制御する。
【発明の効果】
【００１８】
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様によれば、演算処理速度を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１９】
【図１】図１は、実施例１に係る４ＳＩＭＤのプロセッサのブロック図である。
【図２】図２は、畳み込み演算を行うＳＩＭＤ命令を処理する場合の整数レジスタのフォーマットの一例の図である。
【図３】図３は、畳み込みを実行するＳＩＭＤ命令のアセンブリ言語記述及び生成されるＳＩＭＤ命令のフォーマットの一例を表す図である。
【図４】図４は、畳み込み演算の一例を説明するための図である。
【図５】図５は、実施例１に係るスイッチ切替表の一例を示す図である。
【図６】図６は、入力画像データ、フィルタ及び出力画像データのデータを格納するレジスタを表す図である。
【図７】図７は、４ＳＩＭＤ命令を使用した場合の畳み込み演算を表す図である。
【図８】図８は、畳み込み演算を実行させるためのＳＩＭＤ命令の一例の図である。
【図９】図９は、クロスバスイッチを用いた畳み込み演算の疑似コードを表す図である。
【図１０】図１０は、実施例１に係るプロセッサによる命令処理のフローチャートである。
【図１１】図１１は、実施例１に係るプロセッサのハードウェア構成図である。
【図１２】図１２は、実施例１に係るクロスバスイッチのハードウェア構造図である。
【図１３】図１３は、実施例２に係る８ＳＩＭＤのプロセッサのブロック図である。
【図１４】図１４は、実施例２に係るＳＩＭＤを用いた行列転置命令のアセンブリ言語記述及び生成される行列転置命令のフォーマットを表す図である。
【図１５】図１５は、行列転置を行うＳＩＭＤ命令を処理する場合の整数レジスタのフォーマットの一例の図である。
【図１６】図１６は、８×８行列を表現する浮動小数点レジスタを表す図である。
【図１７】図１７は、実施例２に係るスイッチ切替表を表す図である。
【図１８】図１８は、行列転置を実行するためのＳＩＭＤ命令を表す図である。
【図１９】図１９は、行列転置の１回目の移動処理を説明するための図である。
【図２０】図２０は、行列転置の２回目の移動処理を説明するための図である。
【図２１】図２１は、行列転置の３回目の移動処理を説明するための図である。
【図２２】図２２は、実施例２に係るプロセッサのハードウェア構成図である。
【発明を実施するための形態】
【００２０】
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
【実施例１】
【００２１】
図１は、実施例１に係る４ＳＩＭＤのプロセッサのブロック図である。図１に示すように、演算処理装置であるプロセッサ１は、命令フェッチ部１１、命令デコード部１２、命令処理部１３、レジスタ切替部１４及びデータ格納部１５を有する。
【００２２】
データ格納部１５は、命令実行時の演算処理に用いるデータを格納する。データ格納部１５は、整数レジスタ１５１及び浮動小数点レジスタ部１５２を有する。この浮動小数点レジスタ５００が、「格納部」の一例にあたる。
【００２３】
ＳＩＭＤ演算を行う場合、整数レジスタ１５１には、図２に示すような、ＳＩＭＤ命令で指定されるｓｉｍｄ−ｃｆｇ（configuration）の値に対応するパターン選択値が予め格納されるか、処理前に設定される。整数レジスタの数は特に制限は無い。パターン選択値は、切替パターンを選択するための情報である。図２は、畳み込み演算を行うＳＩＭＤ命令を処理する場合の整数レジスタのフォーマットの一例の図である。整数レジスタ１５１の上位側には、フォーマット１５３で示すように、ｓｒｃｘｂ（Source  Cross  Bar）１で表される、１回のＳＩＭＤ演算における後述する第１スイッチ１４３の４つの切替パターンを指定するためのパターン選択値が格納される。さらに、整数レジスタ１５１の下位側には、フォーマット１５３で示されるように、ｓｒｃｘｂ２で表される、１回のＳＩＭＤ演算における後述する第２スイッチ１４４の４つの切替パターンを指定するためのパターン選択値が格納される。
【００２４】
浮動小数点レジスタ部１５２は、複数の浮動小数点レジスタ５００を有する。浮動小数点レジスタ５００は、ＳＩＭＤ演算が実行される場合、予め決められたＳＩＭＤ数の浮動小数点レジスタ５００をまとめてＳＩＭＤレジスタ５０が形成される。ここでは、ＳＩＭＤ数が４の場合で説明する。すなわち、４つの浮動小数点レジスタ５００がまとめられた１つのＳＩＭＤレジスタ５０が形成される。ここで、図１では、一例として、２つのＳＩＭＤレジスタ５０とそれらに含まれる浮動小数点レジスタ５００を記載したが、浮動小数点レジスタ５００及びＳＩＭＤレジスタ５０の数は特に制限は無い。
【００２５】
命令フェッチ部１１は、命令をメモリ２から取得する。命令フェッチ部１１が取得した命令には、例えば図３に示すように命令種別を表すオペコードが付加される。図３は、畳み込みを実行するＳＩＭＤ命令のアセンブリ言語記述及び生成されるＳＩＭＤ命令のフォーマットの一例を表す図である。アセンブリ言語表記１９０において指定したオペコードおよび各オペランドに対応して、ＳＩＭＤ命令２００には、オペコード２１、宛先情報（ｄｓｔ：destination）２２、ＳＩＭＤ設定情報（ｓｉｍｄ−ｃｆｇ）の格納元情報２３、第１格納元情報（ｓｒｃ（source）１）２４及び第２格納元情報（ｓｒｃ２）２５が格納される。例えば、オペコード２１とは命令の種別情報である。宛先情報２２とは出力先のレジスタ番号である。ＳＩＭＤ設定情報の格納元情報２３とは、図２に示す整数レジスタのフォーマットを有するＳＩＭＤ設定情報が格納された場所の整数レジスタ番号である。第１格納元情報２４及び第２格納元情報２５とは入力元１及び２のレジスタ番号である。命令フェッチ部１１は、取得した命令を命令デコード部１２へ出力する。
【００２６】
命令デコード部１２は、命令の入力を命令フェッチ部１１から受ける。次に、命令デコード部１２は、取得した命令の解読を行い、オペコードで表される命令種別を取得する。そして、命令デコード部１２は、取得した命令種別から取得した命令がＳＩＭＤ命令か四則演算などの他の命令かを判定する。以下では、ＳＩＭＤ命令以外の命令を、「他の命令」という。そして、命令デコード部１２は、命令種別の判定結果とともに、解読した命令を命令処理部１３へ出力する。
【００２７】
命令処理部１３は、命令デコード部１２から入力された命令を実行する。より詳細には、命令処理部１３は、処理実行部１３１及び判定部１３２を有する。
【００２８】
判定部１３２は、命令の入力を命令デコード部１２から受ける。そして、判定部１３２は、他の命令を取得した場合、取得した命令を処理実行部１３１へ出力する。
【００２９】
これに対して、判定部１３２は、ＳＩＭＤ命令２００を取得した場合、ＳＩＭＤ命令２００に含まれるｓｉｍｄ−ｃｆｇに対応するパターン選択値を、整数レジスタ１５１から取得する。具体的には、判定部１３２は、パターン選択値としてｓｃｒ１で指定される４個の浮動小数点レジスタ５００の切替パターンを指定する情報及びｓｃｒ２で指定される４個の浮動小数点レジスタ５００の切替パターンを指定する情報を取得する。
【００３０】
次に、判定部１３２は、ＳＩＭＤ命令２００が有するｓｉｍｄ−ｃｆｇに対応するパターン選択値をスイッチ制御部１４１へ出力する。また、判定部１３２は、ＳＩＭＤ命令２００を処理実行部１３１へ出力する。
【００３１】
処理実行部１３１は、命令の入力を判定部１３２から受ける。取得した命令が他の命令の場合、処理実行部１３１は、取得した他の命令にしたがい演算処理を行う。
【００３２】
これに対して、取得した命令がＳＩＭＤ命令２００の場合、処理実行部１３１は、宛先情報で指定された浮動小数点レジスタ５００からレジスタ切替部１４を介さずにデータを取得する。以下では、宛先情報で指定された浮動小数点レジスタ５００から取得したデータを「宛先データ」という。
【００３３】
さらに、処理実行部１３１は、レジスタ切替部１４の第１スイッチ１４３を介して第１格納元情報で表される浮動小数点レジスタ５００からデータを取得する。この時、処理実行部１３１は、第１スイッチ１４３の４回の切り替えに合わせて、それぞれ接続される４つの浮動小数点レジスタ５００から４つのデータを取得する。以下では、第１スイッチ１４３を介して取得したデータを「第１格納元データ」という。
【００３４】
次に、処理実行部１３１は、レジスタ切替部１４の第２スイッチ１４４を介して第２格納元情報で表される浮動小数点レジスタ５００からデータを取得する。この時、処理実行部１３１は、第２スイッチ１４４の４回の切り替えに合わせて、それぞれ接続される４つの浮動小数点レジスタ５００から４つのデータを取得する。以下では、第２スイッチ１４４を介して取得したデータを「第２格納元データ」という。
【００３５】
その後、処理実行部１３１は、宛先データ、第１格納元データ及び第２格納元データを用いて、命令にしたがってＳＩＭＤ演算を行い畳み込みの演算を実行する。図４は、畳み込み演算の一例を説明するための図である。図４は、８×８の画素を有する入力画像データ２０１に対して３×４の要素を有するフィルタ２０２の内の３×３の要素を用いて畳み込み演算を行い、５×５の出力画像データ２０３を出力する場合を表す。すなわち、処理実行部１３１は、入力画像データ２０１に対して、フィルタ２０２の中の３×３の要素を用いて畳み込み演算を行い、出力画像データ２０３を生成する。本実施例に係る処理実行部１３１による畳み込み演算については後で詳細に説明する。
【００３６】
レジスタ切替部１４は、ＳＩＭＤ命令を実行する場合に、処理実行部１３１と浮動小数点レジスタ５００との経路を切り替える。より詳しくは、レジスタ切替部１４は、スイッチ制御部１４１、スイッチ切替表１４２、第１スイッチ１４３及び第２スイッチ１４４を有する。
【００３７】
スイッチ切替表１４２は、図５に示すように各パターン選択値に対応する格納元レジスタの組が登録される。図５は、実施例１に係るスイッチ切替表の一例を示す図である。ｎは、ベースレジスタの番号である。本実施例では、ＳＩＭＤ数が４であり、計算が一度に４回行えるため、１つのパターン選択値に対して４つの格納元レジスタが順次指定される。
【００３８】
スイッチ制御部１４１は、パターン選択値の入力を判定部１３２から受ける。このパターン選択値が、「切替指示」の一例にあたる。次に、スイッチ制御部１４１は、取得したパターン選択値に対応する格納先レジスタの情報をスイッチ切替表１４２から取得する。
【００３９】
そして、スイッチ制御部１４１は、取得したｓｒｃｘｂ１のパターン選択値に対応する４つの格納先レジスタに処理実行部１３１が順次接続するように、第１スイッチ１４３の経路を順次切り替える。また、スイッチ制御部１４１は、取得したｓｒｃｘｂ２のパターン選択値に対応する４つの格納先レジスタに処理実行部１３１が順次接続するように、第２スイッチ１４４の経路を順次切り替える。このスイッチ制御部１４１が、「切替制御部」の一例にあたる。
【００４０】
第１スイッチ１４３及び第２スイッチ１４４は、それぞれ、処理実行部１３１と浮動小数点レジスタ５００とを結ぶ経路を切り替えるスイッチである。ＳＩＭＤを用いた畳み込み演算を行う本実施例の場合、第１スイッチ１４３は、入力画像データ２０１に含まれる画素値を格納する浮動小数点レジスタ５００に接続する経路を形成する。また、第２スイッチ１４４は、フィルタ２０２に含まれる要素値を格納する浮動小数点レジスタ５００に接続する経路を形成する。この第１スイッチ１４３及び第２スイッチ１４４が、「経路選択部」の一例にあたる。
【００４１】
ここで、図１では、第１スイッチ１４３及び第２スイッチ１４４は、浮動小数点レジスタ部１５２に接続するが、実際には、それぞれ各浮動小数点レジスタ５００に接続する経路を有し、その経路の中から処理実行部１３１に接続する経路を選択するように動作する。
【００４２】
ここで、畳み込み演算における第１スイッチ１４３及び第２スイッチ１４４の切り替え、並びに、処理実行部１３１によるＳＩＭＤを用いた畳み込み演算について説明する。図６は、入力画像データ、フィルタ及び出力画像データのデータを格納するレジスタを表す図である。図６では、入力画像データ２０１、フィルタ２０２及び出力画像データ２０３のそれぞれの要素に対応させて、各要素のデータを格納する浮動小数点レジスタ５００を表す。ここでは、浮動小数点レジスタ５００として、レジスタ番号がｆ０〜ｆ１１５に対応するレジスタが存在するものとする。ただし、レジスタ番号がｆ７６〜ｆ７９の浮動小数点レジスタ５００は、使用していないので、図６には記載していない。以下では、レジスタ番号がｆ０〜ｆ１１５の浮動小数点レジスタ５００をそれぞれ、レジスタｆ０〜ｆ１１５と表す。
【００４３】
図３における各データが、図６における対応する位置に表された符号を有する浮動小数点レジスタ５００に格納される。すなわち、入力画像データ２０１の画素値ｇ（０，０）〜ｇ（７，７）は、レジスタｆ０〜ｆ６３にそれぞれ格納される。また、フィルタ２０２の要素値ｆ（０，０）〜ｆ（３，２）は、レジスタｆ６４〜ｆ７５に格納される。また、出力画像データｔ（０，０）〜ｔ（５，５）は、レジスタｆ８０〜ｆ１１５に格納される。
【００４４】
ここでの畳み込み演算は、フィルタ２０２のうち破線で囲われた３×３の領域に含まれる要素を用いて行われる。以下では、フィルタ２０２における畳み込み演算に用いる３×３の領域を「フィルタ２２１」という。畳み込み演算は、フィルタ２２１を入力画像データ２０１上の３×３の領域に配置し、対応する画素値とフィルタ２２１の要素値とを乗算した値を合計したものが、出力画像データ２０３の１つの画素値となる。
【００４５】
例えば、フィルタ２２１は、入力画像データ２０１上の領域２１１及び２１２に配置される。領域２１１にフィルタ２２１が配置された場合の計算は、レジスタ番号で各浮動小数点レジスタ５００が保持する値を表すと以下のように表される。すなわち、ｆ８０＝ｆ０×ｆ６４＋ｆ１×ｆ６５＋ｆ２×ｆ６６＋ｆ８×ｆ６８＋ｆ９×ｆ６９＋ｆ１０×ｆ７０＋ｆ１６×ｆ７２＋ｆ１７×ｆ７３＋ｆ１８×ｆ７４となる。この計算を入力画像データ２０１上における全ての３×３領域にフィルタ２２１を配置して行うことで、出力画像データ２０３の全ての画素値が算出される。
【００４６】
これらの出力画像データ２０３の算出を４ＳＩＭＤで行う場合の式をまとめると、図７のように表される。図７は、４ＳＩＭＤ命令を使用した場合の畳み込み演算を表す図である。ｆｍａ（fused  Multiply  Add）は、積和演算を表す関数である。ｆｍａ  ａ，ｂ，ｃ＝＞ｄは、オペランドを４つ持ち、ａ×ｂ＋ｃ＝＞ｄを実行する関数である。図７の各式の３つ目のオペランドは、１つ上の式で算出された値を使用する。
【００４７】
グループ２５１に含まれる式が領域２１１から領域２１２の方向にフィルタ２２１を１つずつ４回移動させた位置までの出力画像データ２０３の画素値を算出する式である。また、グループ２５２に含まれる式が、領域２１１と同じ行のグループ２５１で求めた式の残りのフィルタ２２１の配置における出力画像データ２０３の画素値を求める式である。グループ２５２に含まれる式において、値が０である場合、その値を使わないことを表す。すなわち、グループ２５１及び２５２に含まれる式で領域２１１の行における畳み込み演算が実行される。また、グループ２５３に含まれる式は、領域２１１の１つ下がった行における畳み込み演算を行う式である。さらに、グループ２５４に含まれる式は、領域２１１から２つ下がった行以降の１つずつ行を下げた場合の各行の畳み込み演算を行う式である。
【００４８】
図７に示したこれらの演算を実行させるためのＳＩＭＤ命令は、例えば、図８のように表される。図８は、畳み込み演算を実行させるためのＳＩＭＤ命令の一例の図である。図８は、図７におけるグループ２５１の部分の式を表す命令である。３つ目のオペランドは、ＳＩＭＤ命令の整数レジスタに格納されたｓｉｍｄ−ｃｆｇに対応するパターン選択値を表す。また、「％」にレジスタ番号を付加した値は、そのレジスタ番号を有する浮動小数点レジスタ５００のデータを表す。例えば、（＃２，＃＃２）における＃２は、図５示すパターン選択値＃２に対応する格納元レジスタであり、パターン選択値＃１における格納元レジスタを１つずつ右にローテートさせた状態を表し、％ｆ１，％ｆ２，％ｆ３，％ｆ４の順で参照することを表す。
【００４９】
そして、この図８に示す各ＳＩＭＤ命令を実行させるための演算のコードは、図９のような疑似コードで示される。図９は、クロスバスイッチを用いた畳み込み演算の疑似コードを表す図である。コード２６１は、入力画像データ２０１の画素値を浮動小数点レジスタ５００に載せる命令である。また、コード２６２は、フィルタ２０２の要素値を浮動小数点レジスタ５００に載せる命令である。また、コード２６３は、浮動小数点レジスタ５００からデータを取得し演算を行わせる命令である。また、コード２６４は、レジスタをメモリに格納する命令である。
【００５０】
第１スイッチ１４３は、受信したＳＩＭＤ命令のｓｉｍｄ−ｃｆｇを用いて取得されたパターン選択値に対応する４つの格納先レジスタに処理実行部１３１が接続するように順次切り替わる。処理実行部１３１は、第１スイッチ１４３の切替毎にデータを読み出す。例えば、パターン選択値が＃１の場合、処理実行部１３１は、レジスタｆ０，ｆ１，ｆ２，ｆ３の順でデータを取り出す。次に、第２スイッチ１４４は、受信したＳＩＭＤ命令のｓｉｍｄ−ｃｆｇを用いて取得されたパターン選択値に対応する４つの格納先レジスタに処理実行部１３１が接続するように順次切り替わる。処理実行部１３１は、第２スイッチ１４４の切替毎にデータを読み出す。例えば、パターン選択値が＃＃１の場合、処理実行部１３１は、レジスタｆ６４，ｆ６４，ｆ６４，ｆ６４の順でデータを取り出す。そして、処理実行部１３１は、取得したデータを用いて図８の最上部の式で表される計算を行う。処理実行部１３１は、図９に示すコードを実行することで、図８の式を上から順に行っていき、最終的に図７におけるグループ２５１及び２５２に含まれる式を計算して、フィルタ２２１を１つずつスライドさせた場合の１行分に相当する出力画像データ２０３の要素値を取得する。
【００５１】
そして、スイッチ制御部１４１が第１スイッチ１４３及び第２スイッチ１４４の切り替えを繰り返し行い、処理実行部１３１が切り替えに応じて演算を行うことを繰り返していく。これにより、処理実行部１３１は、入力画像データ２０１の全領域に亘る畳み込み演算を行うことができる。
【００５２】
次に、図１０を参照して、本実施例に係るプロセッサによる命令処理の流れについて説明する。図１０は、実施例１に係るプロセッサによる命令処理のフローチャートである。
【００５３】
命令フェッチ部１１は、メモリ２から命令を取得し、オペコードを命令デコード部１２へ発行する（ステップＳ１）。
【００５４】
命令デコード部１２は、命令フェッチ部１１からオペコードを取得する。そして、命令デコード部１２は、オペコードを解読し解読結果を判定部１３２へ出力する。判定部１３２は、命令デコード部１２により解読されたオペコードを取得する。そして、判定部１３２は、命令がＳＩＭＤ命令か他の命令かを判定する（ステップＳ２）。命令が他の命令の場合（ステップＳ２：否定）、判定部１３２は、命令を処理実行部１３１へ出力する。そして、処理実行部１３１は、ステップＳ１０へ進む。
【００５５】
これに対して、命令がＳＩＭＤ命令の場合（ステップＳ２：肯定）、判定部１３２は、命令に格納されたｓｉｍｄ−ｃｆｇに対応するパターン選択値が指定されている場合にはそのパターン選択値を整数レジスタ１５１から読み込む（ステップＳ３）。そして、判定部１３２は、パターン選択値をスイッチ制御部１４１へ出力する。さらに、判定部１３２は、ＳＩＭＤ命令を処理実行部１３１に出力する。
【００５６】
スイッチ制御部１４１は、命令でパターン選択値が指定されているか否かにより切り替えを実行するか否かを判定する（ステップＳ４）。切り替えを実行しない場合（ステップＳ４：否定）、すなわち、宛先情報で指定される浮動小数点レジスタ５００からデータを取得する場合、スイッチ制御部１４１は、スイッチの切り替えを行わない。すなわち、スイッチ制御部１４１は、バイパス経路を選択する（ステップＳ５）。
【００５７】
これに対して、切り替えを実行する場合（ステップＳ４：肯定）、すなわち、第１又は第２格納元情報で示される浮動小数点レジスタ５００からデータを読み出す場合、スイッチ制御部１４１は、スイッチ切替表１４２から切替パターンを取得する。そして、スイッチ制御部１４１は、切替パターンに応じて第１スイッチ１４３及び第２スイッチ１４４の切り替えを行う（ステップＳ６）。これ以降、取得した一つの切り替えパターンに基づいて、スイッチ制御部１４１が１つＳＩＭＤ命令の並列処理の各処理に応じて読み込み元あるいは書き込み先の切り替えを行なうが、この切り替えにより新しい命令やさらには複雑な処理でないローテート処理などでは前処理あるいは後処理の追加も生じることなく自由な処理パターンの変更を実現するという意味でステップＳ６の動作をパターン切替とも呼ぶことにする。
【００５８】
そして、スイッチ制御部１４１は、第１スイッチ１４３及び第２スイッチ１４４の切り替えの完了通知を処理実行部１３１へ発行する（ステップＳ７）。
【００５９】
処理実行部１３１は、命令でパターン選択値が指定されている場合には切り替えの完了通知をスイッチ制御部１４１から取得する。そして、処理実行部１３１は、スイッチ制御部１４１の制御にしたがいデータを浮動小数点レジスタ５００から読み出す（ステップＳ８）。バイパス経路を選択した場合、スイッチ制御部１４１は、スイッチの切り替えを行わないので、バイパス経路を介してそのまま浮動小数点レジスタからの読み出しを行う。
【００６０】
次に、処理実行部１３１は、ＳＩＭＤ命令で指定された並列処理数の演算処理を並列して実行する（ステップＳ９）。
【００６１】
最後に、各演算処理が完了すると、処理実行部１３１は、演算処理結果を浮動小数点レジスタ５００へ書き出す（ステップＳ１０）。具体的には、ステップＳ４において切り替えを実行しない場合には、スイッチ制御部１４１は、スイッチの切り替えを行わないので、バイパス経路を介してそのままレジスタ５００へ演算結果を書き出す。また、ステップＳ４において切り替えを実行した場合には、スイッチ制御部１４１の制御にしたがい演算結果をパターン切替に応じた切り替え先の浮動小数点レジスタ５００へ書き出す。
【００６２】
図１０におけるステップＳ３〜Ｓ７を含むステップＳ１０１の処理は、ＳＩＭＤ命令実行のための準備処理である。また、ステップＳ８〜Ｓ１０を含むステップＳ１０２の処理は、ＳＩＭＤ命令実行の処理である。ここでは、１回のＳＩＭＤ演算の処理の流れを説明したが、実際には、プロセッサ１は、畳み込み演算が終了するまで、図１０のフローのＳＩＭＤ演算を繰り返す。
【００６３】
さらに、図１１を参照して、本実施例に係るプロセッサ１のハードウェア構成について説明する。図１１は、実施例１に係るプロセッサのハードウェア構成図である。
【００６４】
プロセッサ１は、演算器１０１〜１０４、クロスバスイッチ１０５及びレジスタファイル１０６を有する。ここでは、演算器１０１〜１０４の４つの演算器が存在する構成を示したが、演算器の数に特に制限は無い。
【００６５】
クロスバスイッチ１０５は、レジスタファイル１０６に含まれる各浮動小数点レジスタ５０１〜５０４と演算器１０１〜１０４とを接続する経路を選択するためのスイッチである。クロスバスイッチ１０５は、例えば、図１に例示したレジスタ切替部１４の機能を実現する。
【００６６】
レジスタファイル１０６は、図１に例示した浮動小数点レジスタ５００及び整数レジスタ１５１を有する。レジスタファイル１０６は、図１に例示したデータ格納部１５の機能を実現する。
【００６７】
演算器１０１〜１０４は、クロスバスイッチ１０５とそれぞれ接続される。また、演算器１０１〜１０４は、それぞれレジスタファイル１０６に直接接続する経路を有する。
【００６８】
演算器１０１〜１０４は、例えば、ＣＰＵコアである。演算器１０１〜１０４は、それぞれ、図１に例示した命令フェッチ部１１、命令デコード部１２及び命令処理部１３の機能を実現する。すなわち、演算器１０１〜１０４は、それぞれがクロスバスイッチ１０５を介さず直接レジスタファイル１０６から宛先データを読み出すか、または、クロスバスイッチ１０５により選択された浮動小数点レジスタ５００からデータを読み出す。そして、演算器１０１〜１０４は、それぞれがＳＩＭＤ命令を実行する。
【００６９】
図１２は、実施例１に係るクロスバスイッチのハードウェア構造図である。さらに、詳細に図１２を参照して説明する。各演算器はＳＩＭＤ命令で指示された並列処理数の読み出しを同時に行なう。例えば、演算器１０１がＳＩＭＤ命令で指定された４つの処理を行なう場合に、演算器１０１の１つの処理はクロスバスイッチ１０５内の内部スイッチ１０５１を介して各ＳＩＭＤレジスタ５０内にある何れかの浮動小数点レジスタ５００から読み出し、他の処理も内部スイッチ１０５２、１０５３、１０５４を介して同様に各ＳＩＭＤレジスタ５０内にある何れかの浮動小数点レジスタ５００から読み出すことができるような構成において実現をする。
【００７０】
さらに、各ＳＩＭＤレジスタ５０が保持する値を一つずつずらすことをＳＩＭＤ演算で実現する場合には、ＳＩＭＤ命令で指定された４つの処理の各処理毎に演算処理を行なうために、ＳＩＭＤ命令内にある格納元情報から指定されたＳＩＭＤレジスタ５０内にある浮動小数点レジスタ５００を各処理毎にクロスバスイッチ１０５により選択する。例えば、１つめの処理は内部スイッチ１０５１により選択された浮動小数点レジスタ５０１から、他の処理も内部スイッチ１０５２〜１０５４を介して選択された浮動小数点レジスタ５０２〜５０４からデータを読み出す。次の処理では命令内で指定した整数レジスタ１５１内にあるＳＩＭＤ設定情報のローテートパターンに従い１つめの処理は内部スイッチ１０５１により選択された浮動小数点レジスタ５０２を、他の処理も内部スイッチ１０５２〜１０５４を介して選択された浮動小数点レジスタ５０３〜５０４及び隣のＳＩＭＤレジスタ５０の浮動小数点レジスタ５０５からデータを読み出し、演算器１０１はＳＩＭＤ命令を実行する。同様に演算器１０２〜１０４も上述の方法にてＳＩＭＤ命令を実行する。このようなＳＩＭＤ命令を実行するためのクロスバスイッチ１０５のハードウェア構成が図１２に示されている。以上の方法にて、隣のＳＩＭＤレジスタ５０も含めたローテート処理を行なうことを、余分な命令の追加や前処理および後処理を用いずに実現する。
【００７１】
以上に説明したように、本実施例に係るプロセッサは、浮動小数点レジスタと処理実行部とを接続する経路を切り替えるスイッチを有する。そして、本実施例に係るプロセッサは、スイッチを切り替えることでデータを使いまわしながらＳＩＭＤ演算を行う。これにより、浮動小数点レジスタに格納されたデータの入れ替えを行うことなく同じデータを使いまわすことができ、冗長な命令を用いずにＳＩＭＤ演算を迅速に行うことができる。したがって、本実施例に係るプロセッサは、演算処理速度を向上させることができる。
【００７２】
また、データを使い回しても浮動小数点レジスタの内容を変更しないため、容易にデータの使いまわし前の浮動小数点レジスタの内容を用いることができる。また、新たな浮動小数点レジスタを用いずに容易にデータの使いまわし前の浮動小数点レジスタの内容を用いることができ、コストを抑えることができる。
【００７３】
さらに、ローテートを行う場合にも、データの書き込み及び読み出しの対象とする浮動小数点レジスタがＳＩＭＤレジスタ内に閉じておらず、他のＳＩＭＤレジスタのデータを取り扱うことができ、容易にローテートを実現することができる。さらに、アクセス対象とする浮動小数点レジスタの選択肢が多いため、浮動小数点レジスタに格納されたデータの使用パターンの自由度を向上させることができる。
【実施例２】
【００７４】
図１３は、実施例２に係る８ＳＩＭＤのプロセッサのブロック図である。本実施例に係るプロセッサ１では、処理実行部１３１が、浮動小数点レジスタ５００へのデータの書き込み時にもレジスタ切替部１４を介してデータを送信することが実施例１と異なる。以下の説明では、実施例１と同様の各部の機能については説明を省略する。また、以下では、書き込み時にレジスタ切替部１４を用いる計算の例として、行列の転置を行う処理を実行する場合を例に説明する。
【００７５】
図１４は、実施例２に係るＳＩＭＤを用いた行列転置命令のアセンブリ言語記述及び生成される行列転置命令のフォーマットを表す図である。アセンブリ言語表記２６０において指定したオペコードおよび各オペランドに対応して、行列転置命令２７０は、オペコード２７１、宛先情報（ｄｓｔ）２７２、ＳＩＭＤ設定情報（ｓｉｍｄ−ｃｆｇ）の格納元情報２７３及び格納元情報（ｓｒｃ）２７４が格納される。例えば、オペコード２７１は命令の種別情報である。宛先情報２７２は出力先のレジスタ番号である。ＳＩＭＤ設定情報の格納元情報２７３は、図１５に示す整数レジスタのフォーマットを有するＳＩＭＤ設定情報が格納された場所の整数レジスタ番号である。格納元情報２７４は、入力元のレジスタ番号である。図１５は、行列転置を行うＳＩＭＤ命令を処理する場合の整数レジスタのフォーマットの一例の図である。
【００７６】
整数レジスタ１５１には、図１５に示すような、ＳＩＭＤ命令で指定されたｓｉｍｄ−ｃｆｇの値に対応する切替パターンのパターン選択値が予め格納される。整数レジスタ１５１の上位側には、フォーマット１５４で示すように、ｓｒｃで表される、１回のＳＩＭＤ演算における第１スイッチ１４３の４つの切替パターンを指定するためのパターン選択値が格納される。さらに、整数レジスタ１５１の下位側には、フォーマット１５４で示されるように、ｄｓｔで表される、１回のＳＩＭＤ演算における第２スイッチ１４４の４つの切替パターンを指定するためのパターン選択値が格納される。
【００７７】
また、本実施例では、図１６に示すレジスタ番号が用いられる。図１６は、８×８行列を表現する浮動小数点レジスタを表す図である。図１６では、一般的な値をレジスタ番号として用いることができるように、自然数の変数ｎを用いてレジスタ番号を表す。そして、図１６では、左下を原点として、横方向をＸ軸、縦方向をＹ軸として、Ｘ軸方向及びＹ軸方向の値を用いてレジスタ番号が表される。具体的には、右に１列進む毎にＸ軸の値が１つ増える。また、上に１行進む毎にＹ軸の値が１つ増える。そして、ｆ（ｎ＋８＊Ｙ＋Ｘ）としてレジスタ番号が表される。ここで、ＸはＸ軸の値であり、ＹはＹ軸の値である。
【００７８】
そして、スイッチ切替表１４２は、図１７に示す情報が登録される。図１７は、実施例２に係るスイッチ切替表を表す図である。本実施例に係るスイッチ切替表１４２は、パターン選択値に合わせて、８個の切り替えパターンが登録される。
【００７９】
スイッチ制御部１４１は、処理実行部１３１のデータ読み出し時に、第２スイッチ１４４の接続を開放し、第１スイッチ１４３を格納元（ｓｒｃ）の切替パターンで切り替える。そして、スイッチ制御部１４１は、第１スイッチ１４３の接続を開放し、処理実行部１３１のデータの書き込み時に、第２スイッチ１４４を宛先（ｄｓｔ）の切替パターンで切り替える。
【００８０】
処理実行部１３１は、スイッチ制御部１４１により切り替えられた第１スイッチ１４３を介してデータを浮動小数点レジスタ５００から読み出す。その後、処理実行部１３１は、スイッチ制御部１４１に切り替えられた第２スイッチ１４４を介してデータを浮動小数点レジスタ５００に書き込む。
【００８１】
ここで、ＳＩＭＤを用いた行列転置の処理について説明する。図１８は、行列転置を実行するためのＳＩＭＤ命令を表す図である。ｍｖｆｒ命令は、レジスタ転送命令であり、複数のｍｖｆｒ命令を実行することで転送元の配列を転置した配列を転送先に作る。ｍｖｆｒは、３つのオペラントを有する。ｍｖｆｒ  ａ，ｂ，（ｃ，ｄ）は、以下の処理を実行させる。すなわち、処理実行部１３１は、ａを読み出し側のオペラントとして、ｃで表される切替パターンで接続される浮動小数点レジスタ５００からデータを読み出す。次に、処理実行部１３１は、ｂをオペラントとして、ｄで表される切替パターンで接続される浮動小数点レジスタ５００へ読み出したデータを書き込む。例えば、ＳＩＭＤ命令３２０の１行目の場合、処理実行部１３１は、図１６に示すスイッチ切替表１４２が示すパターン選択値＃１で選択された切替パターンを用いてデータを読み出す。その後、処理実行部１３１は、読み出したデータをスイッチ切替表１４２が示すパターン選択値＃１で選択された切替パターンを用いてデータを書き込む。
【００８２】
そして、図１７に記載された命令を実行する場合、スイッチ制御部１４１は、３つ目のオペラントの１番目の値に対応する切替パターンをスイッチ切替表１４２から読み出し、取得した切替パターンにしたがい第１スイッチ１４３を順次切り替える。処理実行部１３１は、第１スイッチ１４３の切り替えに応じて都度データを第１スイッチ１４３を介して浮動小数点レジスタ５００から読み出す。
【００８３】
取得した切替パターンに応じたデータの読み出しが完了後、スイッチ制御部１４１は、３つ目のオペラントの２番目の値に対応する切替パターンをスイッチ切替表１４２から読み出し、取得した切替パターンにしたがい第２スイッチ１４４を順次切り替える。処理実行部１３１は、第２スイッチ１４４の切り替えに応じて都度データを第２スイッチ１４４を介して浮動小数点レジスタ５００へ書き込む。
【００８４】
図１９〜２１を参照して、ＳＩＭＤを用いた行列転置の演算を行う場合のデータの動きについて説明する。図１９は、行列転置の１回目の移動処理を説明するための図である。より詳しくは、図１９は、ｄｓｔが＃１でありｓｒｃが＃１の場合の処理を表す。図２０は、行列転置の２回目の移動処理を説明するための図である。より詳しくは、図２０は、ｄｓｔが＃３でありｓｒｃが＃１０の場合の処理を表す。図２１は、行列転置の３回目の移動処理を説明するための図である。図１９〜２１では、入力画像データ３１０の画素それぞれに画素値ｇ０〜ｇ６３を記載した。ここでは、図１８のＳＩＭＤ命令３２０にしたがって行列転置の演算を行う場合で説明する。
【００８５】
図１９において、入力画像データ３１０は、読み込み元の浮動小数点レジスタ５００に格納される。そして、出力画像データ３１１は、書き込み先の浮動小数点レジスタに格納される。スイッチ制御部１４１は、パターン選択値＃１に対応する切替パターンを取得する。次に、スイッチ制御部１４１は、ｎ＝０を取得した切替パターンに入力する。そして、スイッチ制御部１４１は、取得した切替パターンにしたがって入力画像データ３１０の対角の画素値を取得するように第１スイッチ１４３を切り替える。処理実行部１３１は、第１スイッチ１４３の切り替えに合わせて、図１８のように入力画像データ３１０の対角の画素に対応する浮動小数点レジスタ５００から、画素値ｇ０，ｇ９，ｇ１８，ｇ２７，ｇ３６，ｇ４５，ｇ５４，ｇ６３を順次取得する。
【００８６】
次に、スイッチ制御部１４１は、パターン選択値＃１に対応する切替パターンを取得する。次に、スイッチ制御部１４１は、ｎ＝６４を取得した切替パターンに入力する。そして、スイッチ制御部１４１は、取得した切替パターンにしたがって出力画像データ３１１の対角の画素にあたる浮動小数点レジスタ５００に接続するように第２スイッチ１４４を切り替える。処理実行部１３１は、第２スイッチ１４４の切り替えに合わせて、図１８のように出力画像データ３１１の対角の画素に対応する浮動小数点レジスタ５００である画素値ｇ０，ｇ９，ｇ１８，ｇ２７，ｇ３６，ｇ４５，ｇ５４，ｇ６３を順次格納する。すなわち、画素値ｇ０，ｇ９，ｇ１８，ｇ２７，ｇ３６，ｇ４５，ｇ５４，ｇ６３は、書き込み先の浮動小数点レジスタ５００における、レジスタ番号がｆ６４，ｆ７３，ｆ８２，ｆ９１，ｆ１００，ｆ１０９，ｆ１１８，ｆ１２７の浮動小数点レジスタ５００に格納される。
【００８７】
スイッチ制御部１４１は、パターン選択値＃２に対応する切替パターンを取得する。次に、スイッチ制御部１４１は、ｎ＝０を取得した切替パターンに入力する。そして、スイッチ制御部１４１は、取得した切替パターンにしたがって入力画像データ３１０の対角の各画素値の１行下の画素の画素値を取得するように第１スイッチ１４３を切り替える。ただし、入力画像データ３１０の最下部の行の画素の１行下の画素とは、入力画像データ３１０の最上部の行の画素とする。処理実行部１３１は、第１スイッチ１４３の切り替えにしたがい、図１９のように入力画像データ３１０の対角の各画素の１行下の画素に対応する浮動小数点レジスタ５００から画素値を取得する。すなわち、処理実行部１３１は、画素値ｇ１，ｇ１０，ｇ１９，ｇ２８，ｇ３７，ｇ４６，ｇ５５，ｇ５６を順次取得する。
【００８８】
次に、スイッチ制御部１４１は、パターン選択値＃９に対応する切替パターンを取得する。次に、スイッチ制御部１４１は、ｎ＝６４を取得した切替パターンに入力する。そして、スイッチ制御部１４１は、取得した切替パターンにしたがって出力画像データ３１１の対角の画素の１行上の画素にあたる浮動小数点レジスタ５００に接続するように第２スイッチ１４４を切り替える。ただし、出力画像データ３１１の最上部の行の画素の１行上の画素とは、出力画像データ３１１の最下部の行の画素とする。処理実行部１３１は、第２スイッチ１４４の切り替えに合わせて、図１９のように出力画像データ３１１の対角の画素の１行上の画素に対応する浮動小数点レジスタ５００に、画素値ｇ１，ｇ１０，ｇ１９，ｇ２８，ｇ３７，ｇ４６，ｇ５５，ｇ５６を順次格納する。すなわち、画素値ｇ１，ｇ１０，ｇ１９，ｇ２８，ｇ３７，ｇ４６，ｇ５５，ｇ５６は、書き込み先の浮動小数点レジスタ５００における、レジスタ番号がｆ７２，ｆ８１，ｆ９０，ｆ９９，ｆ１０８，ｆ１１７，ｆ１２６，ｆ７１の浮動小数点レジスタ５００に格納される。
【００８９】
スイッチ制御部１４１は、パターン選択値＃３に対応する切替パターンを取得する。次に、スイッチ制御部１４１は、ｎ＝０を取得した切替パターンに入力する。そして、スイッチ制御部１４１は、取得した切替パターンにしたがって入力画像データ３１０の対角の各画素値の２行下の画素の画素値を取得するように第１スイッチ１４３を切り替える。処理実行部１３１は、第１スイッチ１４３の切り替えにしたがい、図２０のように入力画像データ３１０の対角の各画素の２行下の画素に対応する浮動小数点レジスタ５００から画素値を取得する。すなわち、処理実行部１３１は、画素値ｇ２，ｇ１１，ｇ２０，ｇ２９，ｇ３８，ｇ４７，ｇ４８，ｇ５７を順次取得する。
【００９０】
次に、スイッチ制御部１４１は、パターン選択値＃１０に対応する切替パターンを取得する。次に、スイッチ制御部１４１は、ｎ＝６４を取得した切替パターンに入力する。そして、スイッチ制御部１４１は、取得した切替パターンにしたがって出力画像データ３１１の対角の画素の２行上の画素にあたる浮動小数点レジスタ５００に接続するように第２スイッチ１４４を切り替える。処理実行部１３１は、第２スイッチ１４４の切り替えに合わせて、図２０のように出力画像データ３１１の対角の画素の２行上の画素に対応する浮動小数点レジスタ５００に、画素値ｇ２，ｇ１１，ｇ２０，ｇ２９，ｇ３８，ｇ４７，ｇ４８，ｇ５７を順次格納する。すなわち、画素値ｇ２，ｇ１１，ｇ２０，ｇ２９，ｇ３８，ｇ４７，ｇ４８，ｇ５７は、書き込み先の浮動小数点レジスタ５００における、レジスタ番号がｆ８０，ｆ８９，ｆ９８，ｆ１０７，ｆ１１６，ｆ１２５，ｆ７０，ｆ７９の浮動小数点レジスタ５００に格納される。
【００９１】
このように、スイッチ制御部１４１は、行列の対角の画素から順に１行ずつ下げた画素にあたる浮動小数点レジスタ５００を選択するように第１スイッチ１４３を切り替えることを繰り返す。これに合わせて、処理実行部１３１は、選択された浮動小数点レジスタ５００からデータを読み出すことを繰り返す。また、スイッチ制御部１４１は、行列の対角の画素から順に１行ずつ上げた画素にあたる浮動小数点レジスタ５００を選択するように第２スイッチ１４４を切り替えることを繰り返す。これに合わせて、処理実行部１３１は、選択された浮動小数点レジスタ５００にデータを書き込むことを繰り返す。これにより、処理実行部１３１は、入力画像データ３１０の転置行列を表す出力画像データ３１１を取得する。
【００９２】
次に、図２２を参照して、本実施例に係るプロセッサのハードウェア構成を説明する。図２２は、実施例２に係るプロセッサのハードウェア構成図である。
【００９３】
プロセッサ１は、演算器１０１〜１０４、クロスバスイッチ１０５及びレジスタファイル１０６を有する。ここでは、演算器１０１〜１０４の４つの演算器が存在する構成を示したが、演算器の数に特に制限は無い。
【００９４】
クロスバスイッチ１０５は、レジスタファイル１０６に含まれる各浮動小数点レジスタ５００と演算器１０１〜１０４とを接続する経路を選択するためのスイッチである。クロスバスイッチ１０５は、例えば、図１３に例示したレジスタ切替部１４の機能を実現する。
【００９５】
レジスタファイル１０６は、図１３に例示した浮動小数点レジスタ５００及び整数レジスタ１５１を有する。レジスタファイル１０６は、図１３に例示したデータ格納部１５の機能を実現する。
【００９６】
演算器１０１〜１０４は、例えば、ＣＰＵコアである。演算器１０１〜１０４は、クロスバスイッチ１０５とそれぞれ接続される。演算器１０１〜１０４は、それぞれ、図１３に例示した命令フェッチ部１１、命令デコード部１２及び命令処理部１３の機能を実現する。すなわち、演算器１０１〜１０４は、それぞれがクロスバスイッチ１０５により選択された浮動小数点レジスタ５００からデータを読み出す。そして、演算器１０１〜１０４は、それぞれがＳＩＭＤ命令を実行し、クロスバスイッチ１０５により選択された浮動小数点レジスタ５００へデータを書き込む。
【００９７】
実施例２は行列転置処理などの複雑な処理を行なうため、演算処理するためのデータの読み出す際のみではなく、図１０のフロー図で既に示したように演算結果を書き込む際においても、同様の方法によりクロスバスイッチで指定された浮動小数点レジスタにデータを書き込む動作を行なう。これにより、行列転置処理を行なうため、図１９〜図２１で示した前処理または後処理を行うが、余分な命令追加や既に浮動小数点レジスタ内にデータがあるにも関わらず再読み込みする処理を行わずに行列転置処理が実現できる。
【００９８】
以上に説明したように、本実施例に係るプロセッサは、スイッチにより選択された浮動小数点レジスタからデータを読み出し、演算処理の実行結果をスイッチにより選択された浮動小数点レジスタに書き込む。これにより、浮動小数点レジスタに格納されたデータの入れ替えを行うことなく同じデータを使いまわすことができ、冗長な命令を用いずにＳＩＭＤ演算を迅速に行うことができる。
【００９９】
また、実施例１では、処理実行部１３１が、宛先の浮動小数点レジスタ５００に対して第１スイッチ１４３及び第２スイッチ１４４を介さずにデータの読み書きを行う場合で説明した。ただし、畳み込み演算を行う場合にも実施例２と同様に、処理実行部１３１が、第１スイッチ１４３及び第２スイッチ１４４を介して宛先の浮動小数点レジスタ５００にアクセスする構成にしてもよい。
【符号の説明】
【０１００】
１  プロセッサ
２  メモリ
１１  命令フェッチ部
１２  命令デコード部
１３  命令処理部
１４  レジスタ切替部
１５  データ格納部
５０  ＳＩＭＤレジスタ
１３１  処理実行部
１３２  判定部
１４１  スイッチ制御部
１４２  スイッチ切替表
１４３  第１スイッチ
１４４  第２スイッチ
１５１  整数レジスタ
１５２  浮動小数点レジスタ部
５００  浮動小数点レジスタ
【図１】
2018022339.tif 000003
【図２】
2018022339.tif 000004
【図３】
2018022339.tif 000005
【図４】
2018022339.tif 000006
【図５】
2018022339.tif 000007
【図６】
2018022339.tif 000008
【図７】
2018022339.tif 000009
【図８】
2018022339.tif 000010
【図９】
2018022339.tif 000011
【図１０】
2018022339.tif 000012
【図１１】
2018022339.tif 000013
【図１２】
2018022339.tif 000014
【図１３】
2018022339.tif 000015
【図１４】
2018022339.tif 000016
【図１５】
2018022339.tif 000017
【図１６】
2018022339.tif 000018
【図１７】
2018022339.tif 000019
【図１８】
2018022339.tif 000020
【図１９】
2018022339.tif 000021
【図２０】
2018022339.tif 000022
【図２１】
2018022339.tif 000023
【図２２】
2018022339.tif 000024