(57)【要約】【課題】演算レイテンシの変化に対応でき、オペランドの組を複数含むデータに対して同様の演算処理を並列に複数回実行する処理を１つの命令で実行することができる演算処理装置を提供する。【解決手段】デコード部がデコードした命令が、演算処理対象であるオペランドを複数含むオペランドの組について、複数のオペランドの組に対する演算処理を並列に複数回実行する命令である場合、各オペランドの組に含まれる複数のオペランドに対する所定のアドレス変位に基づき、各回の演算処理の各オペランドの組に対応するアドレスの組をそれぞれ生成するアドレス生成部と、生成した各オペランドの組に対応するアドレスの組を、各演算部に対応してそれぞれ保持する複数の命令キューと、複数の命令キューがそれぞれ出力するアドレスの組に基づいてそれぞれ取得したオペランドの組に対する演算処理を並列に行う複数の演算部とを有する。【選択図】図３
2018005369.tif 000002
【特許請求の範囲】
【請求項１】
命令をデコードするデコード部と、
前記デコード部がデコードした命令が、演算処理の対象であるオペランドを複数含むオペランドの組について、複数のオペランドの組に対する演算処理を並列に複数回実行する命令である場合、各オペランドの組に含まれる複数のオペランドに対する所定のアドレス変位に基づき、各回の演算処理の各オペランドの組に対応するアドレスの組をそれぞれ生成するアドレス生成部と、
前記アドレス生成部が生成した各オペランドの組に対応するアドレスの組を、各演算部に対応してそれぞれ保持する複数のアドレス保持部と、
前記複数のアドレス保持部がそれぞれ出力するアドレスの組に基づいてそれぞれ取得したオペランドの組に対する演算処理を並列に行う複数の演算部とを有する演算処理装置。
【請求項２】
前記複数の命令保持部のうち、前記複数の演算部にアドレスの組を出力する命令保持部をラウンドロビンで選択する請求項１記載の演算処理装置。
【請求項３】
前記複数の命令保持部のうち、第１の命令保持部に保持された第１のアドレスの組に対応する第１の演算処理と、第２の命令保持部に保持された第２のアドレスの組に対応する第２の演算処理との間にオペランドの依存関係が無い場合、前記第１の命令保持部からの前記第１のアドレスの組と前記第２の命令保持部からの前記第２のアドレスの組とを、前記複数の演算部に対し、サイクル毎に交互に出力する請求項１又は２記載の演算処理装置。
【請求項４】
前記演算処理は、積和演算処理である請求項１〜３の何れか１項に記載の演算処理装置。
【請求項５】
前記演算処理は、オペランドの値を比較する比較演算である請求項１〜３の何れか１項に記載の演算処理装置。
【請求項６】
演算処理装置の制御方法において、
前記演算処理装置が有するデコード部が、命令をデコードし、
前記デコード部がデコードした命令が、演算処理の対象であるオペランドを複数含むオペランドの組について、複数のオペランドの組に対する演算処理を並列に複数回実行する命令である場合、前記演算処理装置が有するアドレス生成部が、各オペランドの組に含まれる複数のオペランドに対する所定のアドレス変位に基づき、各回の演算処理の各オペランドの組に対応するアドレスの組をそれぞれ生成し、
前記演算処理装置が有する複数のアドレス保持部が、前記アドレス生成部が生成した各オペランドの組に対応するアドレスの組を、各演算部に対応してそれぞれ保持し、
前記演算処理装置が有する複数の演算部が、前記複数のアドレス保持部がそれぞれ出力するアドレスの組に基づいてそれぞれ取得したオペランドの組に対する演算処理を並列に行う演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
１つの命令で複数のデータに対して演算処理を行う命令にＳＩＭＤ（Single Instruction Multiple Data）命令がある。図１６を参照してＳＩＭＤ命令について説明する。ＳＩＭＤ命令を実行する演算処理装置は、命令を格納するバッファ１６０１、演算処理を行う複数の演算部（Processing Unit：ＰＵ）１６０２−１〜１６０２−４、及びデータを格納するデータバッファ１６０３を有する。命令バッファ１６０１から１つのＳＩＭＤ命令を取り出して実行する際、演算部１６０２−１〜１６０２−４は、データバッファ１６０３に格納された複数のデータＤ１〜Ｄ４に対して、命令が示す演算処理を同時に適用する。ＳＩＭＤ命令は、行列計算のような複数のデータに対して同様の演算処理を並列に実行する場合に使用される。
【０００３】
図１７に示す４行×４列の行列Ａと４行×４列の行列Ｂとを乗算して４行×４列の行列Ｃを計算する正方行列積を例に説明する。行列の各要素の数値は「行番号」「列番号」を表しており、例えば“ａ12”は行列Ａの１行目２列目のデータ要素を示す。４行×４列の行列Ｃのｉ行目ｊ列目の要素ｃijは、以下の積和演算を行うことで求められる。
ｃij＝ａi1×ｂ1j＋ａi2×ｂ2j＋ａi3×ｂ3j＋ａi4×ｂ4j
例えば、行列Ｃの１行目１列目の要素ｃ11は、
ｃ11＝ａ11×ｂ11＋ａ12×ｂ21＋ａ13×ｂ31＋ａ14×ｂ41…（１）
の積和演算を行うことで求められる。
【０００４】
ここで、演算処理装置が有する演算部の各々が“Ｃ＝Ａ×Ｂ＋Ｃ”の積和演算処理を実行可能であるとする。この演算処理は、一般的にＦＭＡ（Floating point Multiply Add、Fused Multiply Add等）と呼ばれ、近年のプロセッサにはＦＭＡ命令が実装されている。一般にＦＭＡ命令は、演算対象であるソースオペランドとしてＡ、Ｂ、Ｃの３オペランド、演算結果であるディスティネーションオペランドとしてＣの１オペランドの計４つのオペランドが与えられる。
【０００５】
行列Ｃの１行目１列目の要素ｃ11は、前述した式（１）で求められるので、以下の４つのＦＭＡ命令で計算できる。なお、以下の記載において、ＦＭＡ命令に与えるオペランドは、順にソースオペランドＡ、ソースオペランドＢ、ソースオペランドＣ、ディスティネーションオペランドＣであるとする。１番目のＦＭＡ命令は、積和演算結果の初期値として０を与えている。
ＦＭＡ  ａ11，ｂ11，０，ｃ11
ＦＭＡ  ａ12，ｂ21，ｃ11，ｃ11
ＦＭＡ  ａ13，ｂ31，ｃ11，ｃ11
ＦＭＡ  ａ14，ｂ41，ｃ11，ｃ11
【０００６】
行列Ｃの各要素は、各要素の演算処理に依存関係がないので、それぞれ並列して計算することができる。そこで、ＳＩＭＤ命令を実行する演算処理装置が４つの演算部を有するものとし、ＳＩＭＤ命令としてＦＭＡ演算を行うと、行列Ｃの４つの要素を同時に計算することができる。例えば、図１８に示すように演算部（ＰＵ＃１）１８０１で行列Ｃの要素ｃ11に係る演算を実行し、演算部（ＰＵ＃２）１８０２で行列Ｃの要素ｃ12に係る演算を実行し、演算部（ＰＵ＃３）１８０３で行列Ｃの要素ｃ13に係る演算を実行し、演算部（ＰＵ＃４）１８０４で行列Ｃの要素ｃ14に係る演算を実行することで、４つの演算部（ＰＵ）で行列Ｃの要素ｃ11、ｃ12、ｃ13、ｃ14を同時に計算することが可能である。したがって、４つのＳＩＭＤ命令で行列Ｃの１行分の要素の計算が完了し、これを４回繰り返す、すなわち１６個のＳＩＭＤ命令で行列Ｃの全１６要素の計算が完了する。
【０００７】
高周波数設計のハードウェアを用いたＦＭＡ命令の実行は、周波数の逆数であるサイクルタイムがより短くなるため、１サイクルで完了することが難しい。例えば、ＦＭＡ命令の演算レイテンシが４サイクルである場合、図１９（Ａ）に示すように各ＳＩＭＤ  ＦＭＡ命令間に３サイクル分の時間差を設けて４サイクル毎に命令を実行する必要があり、３サイクルの間、パイプラインバブルが発生することとなる。これを回避する方法としてソフトウェアパイプラインと呼ばれる方法がある。ソフトウェアパイプラインは、データの依存関係がある命令間の空きサイクルに、データに依存関係のない別の命令を挿入することで、演算器の稼働率を向上させる。例えば、図１９（Ｂ）に示すように、行列のある要素を計算している空きサイクルに行列の別の要素を計算する命令列を挿入する。
【０００８】
図２１及び図２２は、それぞれ図１９（Ａ）及び図１９（Ｂ）に示したようにして命令を実行した場合のタイミングチャートを示している。ソフトウェアパイプラインを行わない場合、図２０に示すように第１ステージから第４ステージの４サイクルでＦＭＡ命令を実行する。最初の命令が実行投入されてから、データの依存関係がある次の命令の投入は４サイクル待たされるため、実行中のステージ以外の残り３ステージはアイドル状態となる。一方、ソフトウェアパイプラインを行った場合、図２１に示すように１サイクルずつずらして命令を投入し実行することで、各命令が同時に異なるステージを実行でき、高い効率で演算器を動作させることができる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１５−５５９７１号公報
【特許文献２】特開２００８−３７０８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、前述した並列に演算処理を行うＳＩＭＤ命令を用いても行列計算のような複数のデータに対して同様の演算処理を複数回実行する場合に命令数が非常に多くなる。例えば、前述した４行×４列の正方行列積の演算では１６命令ですむが、正方行列のサイズＮが大きくなるにしたがって、Ｏ（Ｎ2）のオーダーで命令数が増加する。また、ディープラーニング（Deep Learning）で多用される畳み込み（Convolution）演算では、画像サイズがＮ×Ｎ、カーネルサイズがＭ×Ｍである場合、Ｏ（Ｎ2Ｍ2）のオーダーで命令数が増加する。
【００１１】
畳み込み演算とは、小さなサイズの矩形のフィルタを使い、そのフィルタの持つ特徴的な構造を元の画像から抽出する処理である。図２２に示すように対象画像２２０１に対して小さな矩形領域２２０２の特徴を抽出して、次のレイヤーの画像２２０３の画素を作成する。このときの矩形領域がカーネルと呼ばれ、次のレイヤーの画像の１要素を計算する際に必要となる画像データ領域であり、この領域に対して特徴量を定義する値を積和演算して画素値を生成する。畳み込み演算では、Ｏ（Ｎ2Ｍ2）のオーダーで命令数が増加するため、カーネルのサイズが大きくなると命令数が爆発的に増大し、命令を格納するためのバッファ等の物量が多く要求されるとともに、毎サイクルの命令のデコードや発行が必要となるために電力も多く消費することとなる。
【００１２】
また、前述したソフトウェアパイプラインを適用する場合、後継機種を開発して演算レイテンシが短縮されたり、あるいは省電力制御により動的に演算レイテンシが延びたりすると、再コンパイルして命令列を最適な並びにしなければならない。多くのアプリケーションで共用されるライブラリ等では再コンパイルが困難なケースもある。前述した例において演算レイテンシが２サイクルになった場合のタイミングチャートを図２３に示す。図２３に示すように、データに依存関係のない命令が２命令セットで次々に発行するようにして、２サイクルにわたり２つの命令を発行すれば全ステージ（２ステージ）を効率よく動作させることができるが、これには再コンパイルが必要となる。
【００１３】
１つの側面では、本発明の目的は、演算レイテンシの変化に対応でき、複数のデータに対して同様の演算処理を行い並列に複数回実行する処理を１つの命令で実行することができる演算処理装置を提供することにある。
【課題を解決するための手段】
【００１４】
演算処理装置の一態様は、命令をデコードするデコード部と、デコード部がデコードした命令が、演算処理の対象であるオペランドを複数含むオペランドの組について、複数のオペランドの組に対する演算処理を並列に複数回実行する命令である場合、各オペランドの組に含まれる複数のオペランドに対する所定のアドレス変位に基づき、各回の演算処理の各オペランドの組に対応するアドレスの組をそれぞれ生成するアドレス生成部と、アドレス生成部が生成した各オペランドの組に対応するアドレスの組を、各演算部に対応してそれぞれ保持する複数のアドレス保持部と、複数のアドレス保持部がそれぞれ出力するアドレスの組に基づいてそれぞれ取得したオペランドの組に対する演算処理を並列に行う複数の演算部とを有する。
【発明の効果】
【００１５】
発明の一態様においては、演算レイテンシが変わっても命令列を変更せずに、複数のデータに対して同様の演算処理を並列に複数回実行する処理を１つの命令で実行することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態における演算処理装置の構成例を示す図である。
【図２】本実施形態における演算処理装置の命令制御パイプラインを示す図である。
【図３】本実施形態におけるＳＩＭＶユニットの構成例を示す図である。
【図４】本実施形態におけるベクトル命令キューに格納されるオペコードとオペランドのアドレスの組の例を示す図である。
【図５】本実施形態におけるベクトル命令キューでの格納情報の例を示す図である。
【図６】本実施形態における演算部の構成例を示す図である。
【図７】本実施形態における行列積のＳＩＭＶ命令による実行例を示すタイミングチャートである。
【図８】演算レイテンシが２サイクルに短縮された場合の制御を説明する図である。
【図９】動的に演算レイテンシが変化した場合の制御を説明する図である。
【図１０】畳み込み演算を説明する図である。
【図１１】本実施形態における畳み込み演算のＳＩＭＶ命令による実行を説明する図である。
【図１２】本実施形態における畳み込み演算に係るＳＩＭＶ制御情報の例を示す図である。
【図１３】本実施形態における畳み込み演算に係るアドレス生成擬似コードの例を示す図である。
【図１４】本実施形態におけるＳＩＭＶアドレス生成部の他の構成例を示す図である。
【図１５】本実施形態における演算部の構成例を示す図である。
【図１６】ＳＩＭＤ命令について説明する図である。
【図１７】４行×４列の正方行列積の例を示す図である。
【図１８】ＳＩＭＤ命令での行列Ｃの４要素に係る演算の実行を説明する図である。
【図１９】ＳＩＭＤ命令の実行イメージを示す図である。
【図２０】ソフトウェアパイプラインを行わない場合の命令の実行例を示すタイミングチャートである。
【図２１】ソフトウェアパイプラインを行った場合の命令の実行例を示すタイミングチャートである。
【図２２】畳み込み演算を説明する図である。
【図２３】ソフトウェアパイプラインを行った場合の命令の実行例を示すタイミングチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明の実施形態を図面に基づいて説明する。
以下に説明する本発明の一実施形態における演算処理装置は、１つの命令で、演算処理の対象であるオペランドを複数含むオペランドの組について、複数のオペランドの組に対する演算処理を並列に複数回実行するＳＩＭＶ（Single Instruction Multiple Vector）命令が実行可能である。ＳＩＭＶ命令は、ＳＩＭＤ命令での演算処理に係るオペランドのアドレスが規則性を持つことに着目し、オペランドのアドレスを制御情報として与えることで、１つの命令で行列積演算等の複数のデータに対して同様の演算処理を並列に複数回実行し完了する。
【００１８】
図１は、ＳＩＭＶ命令を実行可能な本実施形態における演算処理装置の構成例を示す図である。本実施形態におけるＳＩＭＶ命令を実行可能な演算処理装置は、命令を格納するバッファ１０１、演算処理を行う複数の演算部（Processing Unit：ＰＵ）１０２−１〜１０２−４、及びデータを格納するデータバッファ１０３を有する。
【００１９】
命令バッファ１０１から１つのＳＩＭＶ命令を取り出して実行する際、演算部１０２−１〜１０２−４は、データバッファ１０３に格納された複数のデータに対して、命令が示す同様の演算処理を同時に適用する。同時に演算処理を適用する演算対象データを「ベクトル」と呼び、連続するサイクルで連続するベクトル１０３−１〜１０３−４に対して同様の演算処理を適用する。なお、図１においては、４つの演算部１０２−１〜１０２−４を有する例を示しているが、演算処理装置が有する演算部の数は、複数であればよく任意である。
【００２０】
図２は、本実施形態における演算処理装置の命令制御パイプラインを示す図である。命令制御パイプラインは、命令フェッチステージ、デコードステージ、レジスタリードステージ、及び実行ステージの４つのステージを有する。命令フェッチステージでは、命令バッファ２０１からプログラムカウンタ２０２の値に基づいて命令をフェッチする。デコードステージでは、命令バッファ２０１からフェッチした命令をデコード部２０４がデコードする。
【００２１】
レジスタリードステージでは、一般レジスタ２０８や状態コードレジスタ２１１からレジスタの値を読み出す。実行ステージでは、各処理ユニットが命令に応じた演算等の処理を実行する。処理ユニットとして例えば、ＳＩＭＶ命令に係る処理を行うＳＩＭＶユニット２０７、整数実行ユニット２１０、分岐ユニット２１３、及びロードストアユニット２１５を有する。また、ステージングラッチ２０３、２０５、２０６、２０９、２１２、２１４が各ステージ間に配される。
【００２２】
図３は、ＳＩＭＶ命令に係る処理を行うＳＩＭＶユニット２０７の構成例を示す図である。ＳＩＭＶユニット２０７はＳＩＭＶアドレス生成部３０１、ベクトル命令キュー３０３−１〜３０３−４、セレクタ３０５、複数の演算部３０６、及び選択カウンタ３０７Ａを有する。
【００２３】
ＳＩＭＶユニット２０７は、デコード部２０４からのＳＩＭＶ命令に係る情報をＳＩＭＶアドレス生成部３０１で受信する。ＳＩＭＶアドレス生成部３０１は、ＳＩＭＶ制御情報レジスタ３０２を有し、受信した情報に基づいてＳＩＭＶ命令に係る演算処理を実行するためのオペランドのアドレスを生成する。ＳＩＭＶ制御情報レジスタ３０２には、ロード命令によってメモリ上に予め構成されたＳＩＭＶ制御情報をロードすることで値を設定する。
【００２４】
ＳＩＭＶアドレス生成部３０１は、ＳＩＭＶ制御情報レジスタ３０２に格納されているＳＩＭＶ制御情報に基づいて各ベクトルのレジスタファイルにおけるデータ位置を示すアドレスをそれぞれ生成し、ベクトル命令キュー３０３−１〜３０３−４に投入する。ベクトル命令キュー３０３−１〜３０３−４の各エントリに格納される情報の例を図４に示す。ベクトル命令キュー３０３−１〜３０３−４に格納される情報としては、例えばＦＭＡ演算であれば、ＦＭＡ演算に必要なソースオペランド１，２，３及びディスティネーションオペランドのレジスタファイルにおける各アドレスであるアドレス４０１〜４０４と、演算種（ＦＭＡ演算）を指示する命令を識別するオペコード４０５がある。
【００２５】
ここで、ＳＩＭＶユニット２０７は、演算部３０６の演算レイテンシと同じ数のベクトル命令キューを有する。図３に示す例では、ＦＭＡ演算を４サイクルで実行できるものとし、４つのベクトル命令キュー３０３−１〜３０３−４を有している。４つのベクトル命令キュー３０３−１〜３０３−４にそれぞれ保持しているオペコードとオペランドのアドレスの組からセレクタ３０５によりラウンドロビンでオペコードとオペランドのアドレスの組を選択し、ＰＵ制御情報ＰＵＣＴＬとして演算部３０６に対して送信する。
【００２６】
セレクタ３０５において、どのベクトル命令キュー３０３−１〜３０３−４からのオペコードとオペランドのアドレスの組を選択するかは、選択カウンタ３０７Ａのカウント値ＣＮＴによって決定する。選択カウンタ３０７Ａは、カウント値ＣＮＴを００→０１→１０→１１→００→・・・と順にカウントする。例えば、セレクタ３０５は、カウント値ＣＮＴが００の場合、ベクトル命令キュー３０３−１からのオペコードとオペランドのアドレスの組を選択して出力し、カウント値ＣＮＴが０１の場合、ベクトル命令キュー３０３−２からのオペコードとオペランドのアドレスの組を選択して出力する。また、セレクタ３０５は、カウント値ＣＮＴが１０の場合、ベクトル命令キュー３０３−３からのオペコードとオペランドのアドレスの組を選択して出力し、カウント値ＣＮＴが１１の場合、ベクトル命令キュー３０３−４からのオペコードとオペランドのアドレスの組を選択して出力する。
【００２７】
図５に各ベクトル命令キュー３０３−１〜３０３−４に、図１７に示した４行×４列の正方行列積をＳＩＭＶ命令によって実行する場合のＦＭＡ演算のオペコードとその演算対象であるオペランドを複数含むオペランドの組が並列に複数格納されている様子を示す。図５において、オペランドの表記はわかりやすくするために前述した図と同じ表記としているが、実際には、オペコードとそのオペコードに対応する各オペランドのレジスタファイルにおけるアドレスの組が格納されている。すなわち、ベクトル命令キュー３０３−１〜３０３−４全体としてみれば、オペコードとそのオペコードに対応する各オペランドのアドレスの組が並列に複数組格納されている。ベクトル命令キュー３０３−１〜３０３−４には、各ベクトルの演算順（依存関係順）にキューイングされている。例えば、図５に示した例では、情報５０１、５０２、５０３、５０４、５０５、５０６、５０７、５０８、５０９、５１０、５１１、５１２、５１３、５１４、５１５、５１６の順で演算部３０６にＰＵ制御情報ＰＵＣＴＬとして送信される。
【００２８】
図６は、演算部３０６の構成例を示す図である。図６に示す例では、ＦＭＡ演算器６０２をそれぞれ有する４つの演算部３０６−１〜３０６−４を有しており、同時に４つの積和演算を実行可能となっている。各ＦＭＡ演算器６０２に対応するようにして、浮動小数点値を６４個格納できるレジスタファイル６０１が設けられている。受信したアドレス情報ＡＤＩに従って３つのソースオペランドを含むソースオペランドの４つの組がレジスタファイル６０１から演算部３０６−１〜３０６−４のＦＭＡ演算器６０２に対してそれぞれ出力され、演算部３０６−１〜３０６−４のＦＭＡ演算器６０２での演算結果がレジスタファイル６０１に書き込まれる。また、演算部３０６−１〜３０６−４に対しては積和演算を指示するオペコードＯＰＣＯＤＥが入力される。
【００２９】
図７は、４行×４列の行列Ａと４行×４列の行列Ｂとを乗算して４行×４列の行列Ｃを計算する正方行列積のＳＩＭＶ命令による実行例を示すタイミングチャートである。１つのＳＩＭＶ命令で行列積演算におけるオペランドの複数の組に対して積和演算を並列に複数回実行し、ソフトウェアパイプラインでの実行と同様の動作をハードウェアで実現している。
【００３０】
また、後継機種において演算レイテンシが２サイクルに短縮された場合の制御を、図８を参照して説明する。ハードウェア構成は同様であり、ＳＩＭＶ命令にも変更はない。ＳＩＭＶアドレス生成部３０１から各ベクトル命令キューにアドレスをキューイングする点も同様である。演算レイテンシが２サイクルに短縮された場合、選択カウンタ３０７Ｂが、カウント値ＣＮＴを００→１０→０１→１１→００→・・・と順にカウントする。このように選択カウンタの値の更新を演算レイテンシが４サイクルの場合とは異なる順序で進めることでベクトル命令キュー３０３−１→ベクトル命令キュー３０３−３→ベクトル命令キュー３０３−２→ベクトル命令キュー３０３−４→ベクトル命令キュー３０３−１→・・・の順でＰＵ制御情報ＰＵＣＴＬを取り出すようにする。このようにすることで、演算レイテンシが２サイクルに変わってもソフトウェアパイプラインを用いた場合と同様に演算器を効率よく動作させることが可能となる。
【００３１】
また、省電力機能を有する演算処理装置である場合、消費電力を削減するために動作周波数を低くすることがあり、動作周波数を低くするのに伴って演算レイテンシのサイクル数が短くなる。そのような省電力機能に対応したＳＩＭＶユニットについて図９を参照して説明する。この例では、消費電力を削減するために動作周波数を半分にできるものとする。この場合、演算処理の演算レイテンシは４サイクルから２サイクルに短縮される。
【００３２】
通常時は、前述した例と同様に演算レイテンシが４サイクルで動作するので、４つのベクトル命令キュー３０３−１〜３０３−４を動作させる。また、選択カウンタは、カウント値ＣＮＴを００→０１→１０→１１→００→・・・と順にカウントする。一方、消費電力を低減するために、動作周波数を低下させ、演算レイテンシが２サイクルとなる場合、２つのベクトル命令キュー３０３−１、３０３−２のみを用いるようにし、選択カウンタは００→０１→００→０１→００→・・・順にカウントするように制御を変更する。このようにすることで、消費電力を削減するために動作周波数を低くし、動的に演算レイテンシが変化した場合でも、ＳＩＭＶ命令を用いた命令列をなんら変更することなく、効率よく演算器を動作させることができる。
【００３３】
次に、本実施形態におけるＳＩＭＶ命令を用いてディープラーニングにおける畳み込み（Convolution）演算を実行する例について説明する。図１０は、畳み込み演算を説明する図である。畳み込み演算は、ボトム（Bottom）データ（図１０における行列Ｂ）とウェイト（Weight）データ（図１０における行列Ｗ）との積和演算を行い、トップ（Top）データ（図１０における行列Ｔ）を生成する処理である。図１０（Ａ）〜図１０（Ｄ）で太枠で示した３×３の枠がカーネルである。カーネルと同じサイズのウェイトデータを用いてボトムデータの積和演算を行い、トップデータの１要素を計算する。例えば、トップデータの要素ｔ11は、以下の積和演算により求められる。
ｔ11＝ｂ11×ｗ11＋ｂ12×ｗ12＋ｂ13×ｗ13＋ｂ21×ｗ21＋・・・＋ｂ33×ｗ33
【００３４】
図１０に示すようにトップデータの各要素の演算は、ボトムデータ上で１要素ずつカーネルをずらして同様の演算を行うことで生成する。図１０（Ａ）〜図１０（Ｄ）にはｔ11，ｔ12，ｔ13，ｔ14の４つの要素を計算している例を示している。トップデータの各要素の演算は、要素間でデータの依存関係がないため並列に演算することができ、本実施形態におけるＳＩＭＶ命令により実行することができる。例えば、４つの演算部を有する演算処理装置でトップデータの要素ｔ11〜ｔ44を求める場合、ＳＩＭＤ命令を用いるとその命令数は３×３×４＝３６命令となるが、ＳＩＭＶ命令を用いることで１命令で処理を完了できる。
【００３５】
ＳＩＭＶ命令の１つとして、“conv16 %fsrc1, %fsrc2, %fsrc3, %fdst”で示されるconv16命令を設ける。このconv16命令は、１つの命令でトップデータの１６要素を計算する命令である。ニーモニックは「conv16」で、３つのソースオペランドと１つのディスティネーションオペランドとをとる。これらのオペランドはレジスタファイルのアドレスである。
【００３６】
conv16命令の実行時、レジスタファイル６０１上には、図１０に示したボトムデータ、ウェイトデータがこの順で連続のアドレスに配置されているものとする。最初のソースオペランド１にはボトムデータが配置されている領域の先頭アドレス、ソースオペランド２にはウェイトデータが配置されている領域の先頭アドレスを与える。ソースオペランド３及びディスティネーションオペランドには、トップデータを格納する領域の先頭アドレスを与える。
【００３７】
畳み込み演算では、トップデータの１要素を計算するとき、ボトムデータとウェイトデータのアドレスについて規則的な動きをする。図１０に示した例では、カーネル内の走査をする際、３回の連続アドレスと次の行への移動を３回繰り返す。このアドレスパターンは、カーネルサイズと次の行への移動量で決まる。ＳＩＭＶ制御情報レジスタ３０２には、図１２に示すＳＩＭＶ制御情報を設定する。このＳＩＭＶ制御情報にカーネルサイズ１２０５と次の行への移動量（row step）１２０６〜１２０８を保持している。ＳＩＭＶアドレス生成部３０１は、ＳＩＭＶ制御情報レジスタ３０２に格納されているＳＩＭＶ制御情報を参照してレジスタファイルへアクセスするアドレスを計算する。
【００３８】
本実施形態では４つの演算部３０６を有しているので、まず図１０に示すようにトップデータの４要素を同時に計算する。次に、ＦＭＡ演算のレイテンシを隠ぺいするために、トップデータの次の行の４要素を計算する。図１１に示すように４つのベクトルを並列に１命令で計算する。各ベクトルを計算するとき、必要となるボトムデータの位置が異なる。各ベクトルの計算に必要となるボトムデータが配置されている領域の先頭アドレスに対する差分値である所定のアドレス変位（一定となる）（vector step）をＳＩＭＶ制御情報として保持しておく。なお、ＳＩＭＶ制御情報は、ソフトウェアがconv16命令を実行する前に予めメモリからロードしてＳＩＭＶ制御情報レジスタ３０２に設定する。
【００３９】
図１３に、ＳＩＭＶアドレス生成部３０１での畳み込み演算に係るアドレス生成のためのアドレス生成擬似コードの例を示す。図１３に示すコード中、ｖはベクトルのループ、ｆはＦＭＡ演算のループである。疑似的には、このコードのsrc[123]_regの行の計算をすれば、オペランドに係るレジスタファイルのアドレスを計算できる。ベクトル命令キューに設定すべきアドレスパターンはＳＩＭＶ制御情報の設定時に決定しているので、命令に与えられたオペランド値（下線部）のみを加算するだけでオペランドに係るレジスタファイルのアドレスを生成可能である。
【００４０】
ＳＩＭＶアドレス生成部３０１におけるアドレス生成を、以下のようにして行うことも可能である。図１４（Ａ）に示すようにアドレス生成部３０１に、ベースアドレスを格納するレジスタ１４０１とオフセットアドレステーブル１４０２及びそれらを加算する加算器１４０３を設ける。例えば、畳み込み演算の場合では、前述したようにある基点に対して決まったアドレスパターンを取る。そのアドレスパターンを図１４（Ｂ）に一例を示すようにオフセットアドレステーブルに保持する。conv16命令が実行された際にオペランドアドレスをベースアドレスのレジスタ１４０１に設定し、そのアドレスに対してオフセットアドレステーブル１４０２から取り出した値を加算器１４０３で加算しベクトル命令キューにキューイングする。オフセットアドレステーブルの値は、実行前に予めソフトウェアのロード命令によって値を設定しておけばよい。このようにすることで、前述したようなアドレス計算を行わずにオペランドのアドレスを生成することができる。
【００４１】
次に、本実施形態におけるＳＩＭＶ命令を用いてディープラーニングにおけるマックスプーリング（Max Pooling）演算を実行する例について説明する。マックスプーリング演算とは、畳み込み演算と同様に、ある大きさのカーネルについてその内部の要素の中で最も値の大きいものを選択し、次のレイヤーの画像の要素とする処理である。マックスプーリング演算では、計算は行わず、値の比較演算を行う。ＳＩＭＶ命令の１つとして、“maxpool16 %fsrc1, %fsrc2, %fdst”で示されるmaxpool16命令を設ける。前述したconv16命令と同様にベースアドレスをオペランドとして与え、カーネル内部のアドレスをベクトル命令キューにキューイングすることで処理する。
【００４２】
図１５は、マックスプーリング演算を行う本実施形態における演算部の構成例を示す図である。比較器（ＣＭＰ）１５０２をそれぞれ有する４つの演算部３０６−１〜３０６−４を有しており、同時に４つの比較演算を実行可能となっている。受信したアドレス情報ＡＤＩに従って２つのソースオペランドがレジスタファイル１５０１から演算部３０６−１〜３０６−４の比較器１５０２に対して出力され、演算部３０６−１〜３０６−４の比較器１５０２での処理結果がレジスタファイル１５０１に書き込まれる。また、演算部３０６−１〜３０６−４に対しては比較演算を指示するオペコードＯＰＣＯＤＥが入力される。比較器１５０２は、２つのソースオペランドｓｒｃ１、ｓｒｃ２を比較し、例えばｓｒｃ１がｓｒｃ２より大きければｓｒｃ１を比較結果としてレジスタファイル１５０１に書き込み、それ以外はｓｒｃ２を比較結果としてレジスタファイル１５０１に書き込む。
【００４３】
以上説明したように本実施形態によれば、ＳＩＭＶ命令を用いることで、行列計算やディープラーニングにおける畳み込み演算処理等の複数のデータに対して同様の演算処理を並列に複数回行うような場合に、１つの命令で処理を完了することが可能となる。これにより、命令数が大幅に削減でき、命令実行に必要な命令キャッシュなどのハードウェア資源の削減することができる。また、演算レイテンシが変わってもソフトウェアからみた処理は同様であるので、演算レイテンシを命令レベルで隠蔽することができ、演算処理のレイテンシが変わっても再コンパイル等を行う必要がなく、ライブラリ等の命令を直接使用するプログラムの互換性を確保することが容易になる。
【００４４】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００４５】
１０１、２０１  命令バッファ
１０２  演算部（ＰＵ）
１０３  データバッファ
２０４  デコード部
２０７  ＳＩＭＶユニット
３０１  ＳＩＭＶアドレス生成部
３０２  ＳＩＭＶ制御情報レジスタ
３０３  ベクトル命令キュー
３０５  セレクタ
３０６  演算部
３０７  選択カウンタ
６０１  レジスタファイル
６０２  ＦＭＡ演算器
１５０１  レジスタファイル
１５０２  比較器
【図１】
2018005369.tif 000003
【図２】
2018005369.tif 000004
【図３】
2018005369.tif 000005
【図４】
2018005369.tif 000006
【図５】
2018005369.tif 000007
【図６】
2018005369.tif 000008
【図７】
2018005369.tif 000009
【図８】
2018005369.tif 000010
【図９】
2018005369.tif 000011
【図１０】
2018005369.tif 000012
【図１１】
2018005369.tif 000013
【図１２】
2018005369.tif 000014
【図１３】
2018005369.tif 000015
【図１４】
2018005369.tif 000016
【図１５】
2018005369.tif 000017
【図１６】
2018005369.tif 000018
【図１７】
2018005369.tif 000019
【図１８】
2018005369.tif 000020
【図１９】
2018005369.tif 000021
【図２０】
2018005369.tif 000022
【図２１】
2018005369.tif 000023
【図２２】
2018005369.tif 000024
【図２３】
2018005369.tif 000025