JP2018022339A - 演算処理装置及び演算処理装置の制御方法 - Google Patents

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

Info

Publication number
JP2018022339A
JP2018022339A JP2016153060A JP2016153060A JP2018022339A JP 2018022339 A JP2018022339 A JP 2018022339A JP 2016153060 A JP2016153060 A JP 2016153060A JP 2016153060 A JP2016153060 A JP 2016153060A JP 2018022339 A JP2018022339 A JP 2018022339A
Authority
JP
Japan
Prior art keywords
unit
switch
instruction
register
data
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.)
Pending
Application number
JP2016153060A
Other languages
English (en)
Inventor
真 駒形
Makoto Komagata
真 駒形
拓巳 丸山
Takumi Maruyama
拓巳 丸山
周史 山村
Shuji Yamamura
周史 山村
中川雅人
Masahito Nakagawa
雅人 中川
昌宏 藏本
Masahiro Kuramoto
昌宏 藏本
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 JP2016153060A priority Critical patent/JP2018022339A/ja
Priority to US15/618,444 priority patent/US10248384B2/en
Publication of JP2018022339A publication Critical patent/JP2018022339A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Nonlinear Science (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)

Abstract

【課題】演算処理速度を向上させる演算処理装置及び演算処理装置の制御方法を提供する。
【解決手段】複数の浮動小数点レジスタ500は、データを格納する。処理実行部131は、浮動小数点レジスタ500に格納されたデータを用いて演算処理を行う。第1スイッチ143及び第2スイッチ144は、処理実行部131と浮動小数点レジスタ500とを結ぶ経路を選択する。スイッチ制御部141は、処理実行部131からの切替指示を基に、選択経路を切り替えるように第1スイッチ143及び第2スイッチ144を制御する。
【選択図】図1

Description

本発明は、演算処理装置及び演算処理装置の制御方法に関する。
近年、人工知能は、機械学習を行い識別や予測といった処理を高精度で行うことが可能になっている。さらに、機械学習では、多重構造を有するニューラルネットワークを使用した学習方法である深層学習(ディープラーニング)という技術が注目されている。深層学習を用いた学習は、多くの行列計算が用いられる。
演算処理装置に用いられるGPU(Graphic Processing Unit)は、元々は画像処理用のプロセッサであるが、複数の積和演算器を有し、行列計算を得意としているため、信号学習用の処理を行うプロセッサとしても用いられることが多い。そして、深層学習を行う処理においても、GPUが用いられることが一般的である。
深層学習の中で主に画像認識で用いられる畳み込みニューラルネットワークという処理がある。畳み込みニューラルネットワークでは、畳み込みと呼ばれる演算が多用される。以下では、「畳み込み演算」という。例えば、画像認識を行う場合、入力画像上の領域に予め決められたパラメータを各要素として有する重み枠を元画像に配置する。そして、重み枠が配置された入力画像の各要素と、重み枠の各要素とを乗算したものを合計することで、入力画像における重み枠が配置された領域の特徴量を算出する。この元画像への重み枠の配置を予め決められた重み枠の移動幅を用いて入力画像全体に行い、算出した特徴量をまとめたものが、畳み込み演算の結果として出力される出力画像となる。重み枠は、「フィルタ」と呼ばれる場合がある。
例えば、入力画像として、8×8の要素を有する、すなわち8×8ビットのグレースケールの画像を考える。以下では、8×8の入力画像という。また、4×4の要素を有するフィルタを用いる場合で、且つフィルタを入力画像における1列又は1行ずつずらす場合を説明する。以下では、4×4のフィルタという。この場合、入力画像の行方向の一方の端に配置されたフィルタを8−3回ずらすと他方の端に到達する。すなわち、出力画像は行方向に5つの要素を有する。同様に、入力画像の列方向の一方の端に配置されたフィルタを8−3回ずらすと他方の端に到達する。すなわち、出力画像は列方向にも5つの要素を有する。したがって、出力画像は、5×5の画像となる。そして、出力画像の各要素は、フィルタを入力画像に配置した状態の、フィルタの各要素とその各要素に対応する位置の入力画像の各要素を乗算した合計値となる。
このように、乗算した値を合計する演算を行う場合、演算処理装置は、fma(Fused Multiply Add)と呼ばれる命令を用いることが多い。fmaとは、(A×B)+Cの形で表される浮動小数点の積和演算を行う命令である。
さらに、このような畳み込み演算を行う場合に、1つの命令を同時に複数のデータに適用して複数の演算を並列処理させて同時に複数の出力を得るSIMD(Single Instruction Multiple Data)という方式が用いられる場合がある。例えば、4個のデータを並列に処理するSIMDを用いた演算の場合で説明する。以下では、n個のデータを並列に処理するSIMDを、nSIMDという。すなわち、この場合の演算処理は、4SIMDの演算処理といえる。また、以下では、SIMDを用いた演算を、SIMD演算という。
上述した8×8の入力画像及び4×4のフィルタを用いた畳み込み演算の場合、演算装置は、フィルタを1列ずつ4回ずらした各配置状態のフィルタの1つの要素と対応する入力画像の要素とを乗算した結果である4つの値を一度で計算できる。すなわち、4SIMDの演算を行う場合、演算処理装置は、4つの異なる配置のフィルタの状態と対応する出力画像の要素を並行して算出することができる。
このようなSIMDを用いた演算処理を行う場合、演算処理装置は、メモリに格納された入力画像のデータのうち、1度の演算に用いるデータを、SIMD演算で用いるレジスタに格納してから1回の演算を行う。この処理を繰り返すことで、演算処理装置は、畳み込み演算を行うことができる。例えば、4SIMDの演算処理の場合、1回のSIMD演算に用いられるレジスタは4つである。このように、1回のSIMD演算を行う際に用いる数のレジスタをまとめて、1つのSIMDレジスタという。演算処理装置は、SIMDレジスタへのデータの格納を行う場合、SIMDのロード命令を用いて1度にSIMDレジスタの全てのレジスタにデータを格納する。
ここで、畳み込み演算では、出力画像の1つの要素を求める場合に、フィルタの各要素とそれに対応する入力画像の各要素とを用いる。さらに、SIMDを用いた畳み込み演算では、並行する畳み込み演算の中で、1つの畳み込み演算に用いた値が、他の畳み込み演算に用いられる。そのため、SIMDを用いた畳み込み演算を行う場合、SIMDレジスタの各レジスタに格納された値を並行する畳み込み演算で使い回すことが好ましい。ただし、フィルタは入力画面を所定列ずつずれていき、また所定行ずつずれていく。そのため、SIMDレジスタの各レジスタに格納された値を、他の畳み込み演算に回すとともに、使用が終了した値が捨てられ、新たな値がレジスタに格納される。以下では、このように、使用が終了した値を削除し、他の値を他の畳み込み演算に回し、新たな値をレジスタに格納する処理を「ローテート」という。
ここで、SIMD命令には、例えば、シャッフル命令及びブロードキャスト命令がある。シャッフル命令は、レジスタに格納されたデータを入れ替える命令である。また、ブロードキャスト命令は、1つのレジスタに格納されたデータを他の複数のレジスタに複製して配置する命令である。従来は、SIMD命令としてシャッフル命令を用いてローテートを実現していた。
例えば、畳み込み演算に関する技術としては、1ライン毎に乗算器を設け、各ラインの重みを格納するシフトレジスタを設け、値をシフトさせて順次乗算を行い、乗算結果を加算する従来技術がある。また、隣接するライン同士が乗算器を共有するように、各ラインに対応させて乗算器を設け、畳み込み演算を行う従来技術がある。また、メモリについてラインデータを格納する領域と重みデータを格納する領域とに分け、メモリ領域を循環させて演算を行う従来技術がある。また、乗算器の出力を他の乗算器に渡して演算を行う従来技術がある。また、SIMDレジスタをバンク構成にし、各演算器に供給するデータを任意のレジスタの任意の位置のデータとすることで、レジスタ内データの再配置を不要にする従来技術がある。さらに、SIMDレジスタへのデータをロードする際にバッファレジスタにコピーを作成しておき、各演算器に供給するデータを任意のレジスタの任意の位置のデータとすることで、レジスタ内データの再配置を不要にする従来技術がある。
特開2010−134697号公報 特開2015−210709号公報 特開2008−310700号公報 特開2012−205298号公報 特開2005−309499号公報 特開2011−2908号公報
しかしながら、SIMD命令は、同じSIMDレジスタ内のレジスタにアクセスする。すなわち、SIMD命令では、あるSIMDレジスタ内のレジスタのデータを他のSIMDレジスタのレジスタに移動することは困難である。そのため、例えば、ローテートを行う場合、シャッフル命令の他に、あるSIMDレジスタからデータを読み出し、他のSIMDレジスタに移動する命令が加わる。このように、SIMD命令を用いて、ローテートを実現するには、他の命令をさらに用いることになり、処理が冗長になってしまい演算処理速度が低下するおそれがある。
また、1ライン毎に設けた各ラインの重みを格納するシフトレジスタを用いて順次乗算する従来技術や、隣接するライン同士が乗算器を共有するように乗算器を設けられた従来技術では、SIMD命令について考慮していない。さらに、ラインデータを格納する領域と重みデータを格納する領域とにメモリを分けて演算を行う従来技術や、乗算器の出力を他の乗算器に渡して演算を行う従来技術においても、SIMD命令については考慮されていない。そのため、これらの従来技術を用いても、演算処理速度を向上させることは困難である。
開示の技術は、上記に鑑みてなされたものであって、演算処理速度を向上させる演算処理装置及び演算処理装置の制御方法を提供することを目的とする。
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様において、複数の格納部は、データを格納する。処理実行部は、前記格納部に格納されたデータを用いて演算処理を行う。経路選択部は、前記処理実行部と前記格納部とを結ぶ経路を選択する。切替制御部は、前記処理実行部からの切替指示を基に、選択経路を切り替えるように前記経路選択部を制御する。
本願の開示する演算処理装置及び演算処理装置の制御方法の一つの態様によれば、演算処理速度を向上させることができるという効果を奏する。
図1は、実施例1に係る4SIMDのプロセッサのブロック図である。 図2は、畳み込み演算を行うSIMD命令を処理する場合の整数レジスタのフォーマットの一例の図である。 図3は、畳み込みを実行するSIMD命令のアセンブリ言語記述及び生成されるSIMD命令のフォーマットの一例を表す図である。 図4は、畳み込み演算の一例を説明するための図である。 図5は、実施例1に係るスイッチ切替表の一例を示す図である。 図6は、入力画像データ、フィルタ及び出力画像データのデータを格納するレジスタを表す図である。 図7は、4SIMD命令を使用した場合の畳み込み演算を表す図である。 図8は、畳み込み演算を実行させるためのSIMD命令の一例の図である。 図9は、クロスバスイッチを用いた畳み込み演算の疑似コードを表す図である。 図10は、実施例1に係るプロセッサによる命令処理のフローチャートである。 図11は、実施例1に係るプロセッサのハードウェア構成図である。 図12は、実施例1に係るクロスバスイッチのハードウェア構造図である。 図13は、実施例2に係る8SIMDのプロセッサのブロック図である。 図14は、実施例2に係るSIMDを用いた行列転置命令のアセンブリ言語記述及び生成される行列転置命令のフォーマットを表す図である。 図15は、行列転置を行うSIMD命令を処理する場合の整数レジスタのフォーマットの一例の図である。 図16は、8×8行列を表現する浮動小数点レジスタを表す図である。 図17は、実施例2に係るスイッチ切替表を表す図である。 図18は、行列転置を実行するためのSIMD命令を表す図である。 図19は、行列転置の1回目の移動処理を説明するための図である。 図20は、行列転置の2回目の移動処理を説明するための図である。 図21は、行列転置の3回目の移動処理を説明するための図である。 図22は、実施例2に係るプロセッサのハードウェア構成図である。
以下に、本願の開示する演算処理装置及び演算処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する演算処理装置及び演算処理装置の制御方法が限定されるものではない。
図1は、実施例1に係る4SIMDのプロセッサのブロック図である。図1に示すように、演算処理装置であるプロセッサ1は、命令フェッチ部11、命令デコード部12、命令処理部13、レジスタ切替部14及びデータ格納部15を有する。
データ格納部15は、命令実行時の演算処理に用いるデータを格納する。データ格納部15は、整数レジスタ151及び浮動小数点レジスタ部152を有する。この浮動小数点レジスタ500が、「格納部」の一例にあたる。
SIMD演算を行う場合、整数レジスタ151には、図2に示すような、SIMD命令で指定されるsimd−cfg(configuration)の値に対応するパターン選択値が予め格納されるか、処理前に設定される。整数レジスタの数は特に制限は無い。パターン選択値は、切替パターンを選択するための情報である。図2は、畳み込み演算を行うSIMD命令を処理する場合の整数レジスタのフォーマットの一例の図である。整数レジスタ151の上位側には、フォーマット153で示すように、srcxb(Source Cross Bar)1で表される、1回のSIMD演算における後述する第1スイッチ143の4つの切替パターンを指定するためのパターン選択値が格納される。さらに、整数レジスタ151の下位側には、フォーマット153で示されるように、srcxb2で表される、1回のSIMD演算における後述する第2スイッチ144の4つの切替パターンを指定するためのパターン選択値が格納される。
浮動小数点レジスタ部152は、複数の浮動小数点レジスタ500を有する。浮動小数点レジスタ500は、SIMD演算が実行される場合、予め決められたSIMD数の浮動小数点レジスタ500をまとめてSIMDレジスタ50が形成される。ここでは、SIMD数が4の場合で説明する。すなわち、4つの浮動小数点レジスタ500がまとめられた1つのSIMDレジスタ50が形成される。ここで、図1では、一例として、2つのSIMDレジスタ50とそれらに含まれる浮動小数点レジスタ500を記載したが、浮動小数点レジスタ500及びSIMDレジスタ50の数は特に制限は無い。
命令フェッチ部11は、命令をメモリ2から取得する。命令フェッチ部11が取得した命令には、例えば図3に示すように命令種別を表すオペコードが付加される。図3は、畳み込みを実行するSIMD命令のアセンブリ言語記述及び生成されるSIMD命令のフォーマットの一例を表す図である。アセンブリ言語表記190において指定したオペコードおよび各オペランドに対応して、SIMD命令200には、オペコード21、宛先情報(dst:destination)22、SIMD設定情報(simd−cfg)の格納元情報23、第1格納元情報(src(source)1)24及び第2格納元情報(src2)25が格納される。例えば、オペコード21とは命令の種別情報である。宛先情報22とは出力先のレジスタ番号である。SIMD設定情報の格納元情報23とは、図2に示す整数レジスタのフォーマットを有するSIMD設定情報が格納された場所の整数レジスタ番号である。第1格納元情報24及び第2格納元情報25とは入力元1及び2のレジスタ番号である。命令フェッチ部11は、取得した命令を命令デコード部12へ出力する。
命令デコード部12は、命令の入力を命令フェッチ部11から受ける。次に、命令デコード部12は、取得した命令の解読を行い、オペコードで表される命令種別を取得する。そして、命令デコード部12は、取得した命令種別から取得した命令がSIMD命令か四則演算などの他の命令かを判定する。以下では、SIMD命令以外の命令を、「他の命令」という。そして、命令デコード部12は、命令種別の判定結果とともに、解読した命令を命令処理部13へ出力する。
命令処理部13は、命令デコード部12から入力された命令を実行する。より詳細には、命令処理部13は、処理実行部131及び判定部132を有する。
判定部132は、命令の入力を命令デコード部12から受ける。そして、判定部132は、他の命令を取得した場合、取得した命令を処理実行部131へ出力する。
これに対して、判定部132は、SIMD命令200を取得した場合、SIMD命令200に含まれるsimd−cfgに対応するパターン選択値を、整数レジスタ151から取得する。具体的には、判定部132は、パターン選択値としてscr1で指定される4個の浮動小数点レジスタ500の切替パターンを指定する情報及びscr2で指定される4個の浮動小数点レジスタ500の切替パターンを指定する情報を取得する。
次に、判定部132は、SIMD命令200が有するsimd−cfgに対応するパターン選択値をスイッチ制御部141へ出力する。また、判定部132は、SIMD命令200を処理実行部131へ出力する。
処理実行部131は、命令の入力を判定部132から受ける。取得した命令が他の命令の場合、処理実行部131は、取得した他の命令にしたがい演算処理を行う。
これに対して、取得した命令がSIMD命令200の場合、処理実行部131は、宛先情報で指定された浮動小数点レジスタ500からレジスタ切替部14を介さずにデータを取得する。以下では、宛先情報で指定された浮動小数点レジスタ500から取得したデータを「宛先データ」という。
さらに、処理実行部131は、レジスタ切替部14の第1スイッチ143を介して第1格納元情報で表される浮動小数点レジスタ500からデータを取得する。この時、処理実行部131は、第1スイッチ143の4回の切り替えに合わせて、それぞれ接続される4つの浮動小数点レジスタ500から4つのデータを取得する。以下では、第1スイッチ143を介して取得したデータを「第1格納元データ」という。
次に、処理実行部131は、レジスタ切替部14の第2スイッチ144を介して第2格納元情報で表される浮動小数点レジスタ500からデータを取得する。この時、処理実行部131は、第2スイッチ144の4回の切り替えに合わせて、それぞれ接続される4つの浮動小数点レジスタ500から4つのデータを取得する。以下では、第2スイッチ144を介して取得したデータを「第2格納元データ」という。
その後、処理実行部131は、宛先データ、第1格納元データ及び第2格納元データを用いて、命令にしたがってSIMD演算を行い畳み込みの演算を実行する。図4は、畳み込み演算の一例を説明するための図である。図4は、8×8の画素を有する入力画像データ201に対して3×4の要素を有するフィルタ202の内の3×3の要素を用いて畳み込み演算を行い、5×5の出力画像データ203を出力する場合を表す。すなわち、処理実行部131は、入力画像データ201に対して、フィルタ202の中の3×3の要素を用いて畳み込み演算を行い、出力画像データ203を生成する。本実施例に係る処理実行部131による畳み込み演算については後で詳細に説明する。
レジスタ切替部14は、SIMD命令を実行する場合に、処理実行部131と浮動小数点レジスタ500との経路を切り替える。より詳しくは、レジスタ切替部14は、スイッチ制御部141、スイッチ切替表142、第1スイッチ143及び第2スイッチ144を有する。
スイッチ切替表142は、図5に示すように各パターン選択値に対応する格納元レジスタの組が登録される。図5は、実施例1に係るスイッチ切替表の一例を示す図である。nは、ベースレジスタの番号である。本実施例では、SIMD数が4であり、計算が一度に4回行えるため、1つのパターン選択値に対して4つの格納元レジスタが順次指定される。
スイッチ制御部141は、パターン選択値の入力を判定部132から受ける。このパターン選択値が、「切替指示」の一例にあたる。次に、スイッチ制御部141は、取得したパターン選択値に対応する格納先レジスタの情報をスイッチ切替表142から取得する。
そして、スイッチ制御部141は、取得したsrcxb1のパターン選択値に対応する4つの格納先レジスタに処理実行部131が順次接続するように、第1スイッチ143の経路を順次切り替える。また、スイッチ制御部141は、取得したsrcxb2のパターン選択値に対応する4つの格納先レジスタに処理実行部131が順次接続するように、第2スイッチ144の経路を順次切り替える。このスイッチ制御部141が、「切替制御部」の一例にあたる。
第1スイッチ143及び第2スイッチ144は、それぞれ、処理実行部131と浮動小数点レジスタ500とを結ぶ経路を切り替えるスイッチである。SIMDを用いた畳み込み演算を行う本実施例の場合、第1スイッチ143は、入力画像データ201に含まれる画素値を格納する浮動小数点レジスタ500に接続する経路を形成する。また、第2スイッチ144は、フィルタ202に含まれる要素値を格納する浮動小数点レジスタ500に接続する経路を形成する。この第1スイッチ143及び第2スイッチ144が、「経路選択部」の一例にあたる。
ここで、図1では、第1スイッチ143及び第2スイッチ144は、浮動小数点レジスタ部152に接続するが、実際には、それぞれ各浮動小数点レジスタ500に接続する経路を有し、その経路の中から処理実行部131に接続する経路を選択するように動作する。
ここで、畳み込み演算における第1スイッチ143及び第2スイッチ144の切り替え、並びに、処理実行部131によるSIMDを用いた畳み込み演算について説明する。図6は、入力画像データ、フィルタ及び出力画像データのデータを格納するレジスタを表す図である。図6では、入力画像データ201、フィルタ202及び出力画像データ203のそれぞれの要素に対応させて、各要素のデータを格納する浮動小数点レジスタ500を表す。ここでは、浮動小数点レジスタ500として、レジスタ番号がf0〜f115に対応するレジスタが存在するものとする。ただし、レジスタ番号がf76〜f79の浮動小数点レジスタ500は、使用していないので、図6には記載していない。以下では、レジスタ番号がf0〜f115の浮動小数点レジスタ500をそれぞれ、レジスタf0〜f115と表す。
図3における各データが、図6における対応する位置に表された符号を有する浮動小数点レジスタ500に格納される。すなわち、入力画像データ201の画素値g(0,0)〜g(7,7)は、レジスタf0〜f63にそれぞれ格納される。また、フィルタ202の要素値f(0,0)〜f(3,2)は、レジスタf64〜f75に格納される。また、出力画像データt(0,0)〜t(5,5)は、レジスタf80〜f115に格納される。
ここでの畳み込み演算は、フィルタ202のうち破線で囲われた3×3の領域に含まれる要素を用いて行われる。以下では、フィルタ202における畳み込み演算に用いる3×3の領域を「フィルタ221」という。畳み込み演算は、フィルタ221を入力画像データ201上の3×3の領域に配置し、対応する画素値とフィルタ221の要素値とを乗算した値を合計したものが、出力画像データ203の1つの画素値となる。
例えば、フィルタ221は、入力画像データ201上の領域211及び212に配置される。領域211にフィルタ221が配置された場合の計算は、レジスタ番号で各浮動小数点レジスタ500が保持する値を表すと以下のように表される。すなわち、f80=f0×f64+f1×f65+f2×f66+f8×f68+f9×f69+f10×f70+f16×f72+f17×f73+f18×f74となる。この計算を入力画像データ201上における全ての3×3領域にフィルタ221を配置して行うことで、出力画像データ203の全ての画素値が算出される。
これらの出力画像データ203の算出を4SIMDで行う場合の式をまとめると、図7のように表される。図7は、4SIMD命令を使用した場合の畳み込み演算を表す図である。fma(fused Multiply Add)は、積和演算を表す関数である。fma a,b,c=>dは、オペランドを4つ持ち、a×b+c=>dを実行する関数である。図7の各式の3つ目のオペランドは、1つ上の式で算出された値を使用する。
グループ251に含まれる式が領域211から領域212の方向にフィルタ221を1つずつ4回移動させた位置までの出力画像データ203の画素値を算出する式である。また、グループ252に含まれる式が、領域211と同じ行のグループ251で求めた式の残りのフィルタ221の配置における出力画像データ203の画素値を求める式である。グループ252に含まれる式において、値が0である場合、その値を使わないことを表す。すなわち、グループ251及び252に含まれる式で領域211の行における畳み込み演算が実行される。また、グループ253に含まれる式は、領域211の1つ下がった行における畳み込み演算を行う式である。さらに、グループ254に含まれる式は、領域211から2つ下がった行以降の1つずつ行を下げた場合の各行の畳み込み演算を行う式である。
図7に示したこれらの演算を実行させるためのSIMD命令は、例えば、図8のように表される。図8は、畳み込み演算を実行させるためのSIMD命令の一例の図である。図8は、図7におけるグループ251の部分の式を表す命令である。3つ目のオペランドは、SIMD命令の整数レジスタに格納されたsimd−cfgに対応するパターン選択値を表す。また、「%」にレジスタ番号を付加した値は、そのレジスタ番号を有する浮動小数点レジスタ500のデータを表す。例えば、(#2,##2)における#2は、図5示すパターン選択値#2に対応する格納元レジスタであり、パターン選択値#1における格納元レジスタを1つずつ右にローテートさせた状態を表し、%f1,%f2,%f3,%f4の順で参照することを表す。
そして、この図8に示す各SIMD命令を実行させるための演算のコードは、図9のような疑似コードで示される。図9は、クロスバスイッチを用いた畳み込み演算の疑似コードを表す図である。コード261は、入力画像データ201の画素値を浮動小数点レジスタ500に載せる命令である。また、コード262は、フィルタ202の要素値を浮動小数点レジスタ500に載せる命令である。また、コード263は、浮動小数点レジスタ500からデータを取得し演算を行わせる命令である。また、コード264は、レジスタをメモリに格納する命令である。
第1スイッチ143は、受信したSIMD命令のsimd−cfgを用いて取得されたパターン選択値に対応する4つの格納先レジスタに処理実行部131が接続するように順次切り替わる。処理実行部131は、第1スイッチ143の切替毎にデータを読み出す。例えば、パターン選択値が#1の場合、処理実行部131は、レジスタf0,f1,f2,f3の順でデータを取り出す。次に、第2スイッチ144は、受信したSIMD命令のsimd−cfgを用いて取得されたパターン選択値に対応する4つの格納先レジスタに処理実行部131が接続するように順次切り替わる。処理実行部131は、第2スイッチ144の切替毎にデータを読み出す。例えば、パターン選択値が##1の場合、処理実行部131は、レジスタf64,f64,f64,f64の順でデータを取り出す。そして、処理実行部131は、取得したデータを用いて図8の最上部の式で表される計算を行う。処理実行部131は、図9に示すコードを実行することで、図8の式を上から順に行っていき、最終的に図7におけるグループ251及び252に含まれる式を計算して、フィルタ221を1つずつスライドさせた場合の1行分に相当する出力画像データ203の要素値を取得する。
そして、スイッチ制御部141が第1スイッチ143及び第2スイッチ144の切り替えを繰り返し行い、処理実行部131が切り替えに応じて演算を行うことを繰り返していく。これにより、処理実行部131は、入力画像データ201の全領域に亘る畳み込み演算を行うことができる。
次に、図10を参照して、本実施例に係るプロセッサによる命令処理の流れについて説明する。図10は、実施例1に係るプロセッサによる命令処理のフローチャートである。
命令フェッチ部11は、メモリ2から命令を取得し、オペコードを命令デコード部12へ発行する(ステップS1)。
命令デコード部12は、命令フェッチ部11からオペコードを取得する。そして、命令デコード部12は、オペコードを解読し解読結果を判定部132へ出力する。判定部132は、命令デコード部12により解読されたオペコードを取得する。そして、判定部132は、命令がSIMD命令か他の命令かを判定する(ステップS2)。命令が他の命令の場合(ステップS2:否定)、判定部132は、命令を処理実行部131へ出力する。そして、処理実行部131は、ステップS10へ進む。
これに対して、命令がSIMD命令の場合(ステップS2:肯定)、判定部132は、命令に格納されたsimd−cfgに対応するパターン選択値が指定されている場合にはそのパターン選択値を整数レジスタ151から読み込む(ステップS3)。そして、判定部132は、パターン選択値をスイッチ制御部141へ出力する。さらに、判定部132は、SIMD命令を処理実行部131に出力する。
スイッチ制御部141は、命令でパターン選択値が指定されているか否かにより切り替えを実行するか否かを判定する(ステップS4)。切り替えを実行しない場合(ステップS4:否定)、すなわち、宛先情報で指定される浮動小数点レジスタ500からデータを取得する場合、スイッチ制御部141は、スイッチの切り替えを行わない。すなわち、スイッチ制御部141は、バイパス経路を選択する(ステップS5)。
これに対して、切り替えを実行する場合(ステップS4:肯定)、すなわち、第1又は第2格納元情報で示される浮動小数点レジスタ500からデータを読み出す場合、スイッチ制御部141は、スイッチ切替表142から切替パターンを取得する。そして、スイッチ制御部141は、切替パターンに応じて第1スイッチ143及び第2スイッチ144の切り替えを行う(ステップS6)。これ以降、取得した一つの切り替えパターンに基づいて、スイッチ制御部141が1つSIMD命令の並列処理の各処理に応じて読み込み元あるいは書き込み先の切り替えを行なうが、この切り替えにより新しい命令やさらには複雑な処理でないローテート処理などでは前処理あるいは後処理の追加も生じることなく自由な処理パターンの変更を実現するという意味でステップS6の動作をパターン切替とも呼ぶことにする。
そして、スイッチ制御部141は、第1スイッチ143及び第2スイッチ144の切り替えの完了通知を処理実行部131へ発行する(ステップS7)。
処理実行部131は、命令でパターン選択値が指定されている場合には切り替えの完了通知をスイッチ制御部141から取得する。そして、処理実行部131は、スイッチ制御部141の制御にしたがいデータを浮動小数点レジスタ500から読み出す(ステップS8)。バイパス経路を選択した場合、スイッチ制御部141は、スイッチの切り替えを行わないので、バイパス経路を介してそのまま浮動小数点レジスタからの読み出しを行う。
次に、処理実行部131は、SIMD命令で指定された並列処理数の演算処理を並列して実行する(ステップS9)。
最後に、各演算処理が完了すると、処理実行部131は、演算処理結果を浮動小数点レジスタ500へ書き出す(ステップS10)。具体的には、ステップS4において切り替えを実行しない場合には、スイッチ制御部141は、スイッチの切り替えを行わないので、バイパス経路を介してそのままレジスタ500へ演算結果を書き出す。また、ステップS4において切り替えを実行した場合には、スイッチ制御部141の制御にしたがい演算結果をパターン切替に応じた切り替え先の浮動小数点レジスタ500へ書き出す。
図10におけるステップS3〜S7を含むステップS101の処理は、SIMD命令実行のための準備処理である。また、ステップS8〜S10を含むステップS102の処理は、SIMD命令実行の処理である。ここでは、1回のSIMD演算の処理の流れを説明したが、実際には、プロセッサ1は、畳み込み演算が終了するまで、図10のフローのSIMD演算を繰り返す。
さらに、図11を参照して、本実施例に係るプロセッサ1のハードウェア構成について説明する。図11は、実施例1に係るプロセッサのハードウェア構成図である。
プロセッサ1は、演算器101〜104、クロスバスイッチ105及びレジスタファイル106を有する。ここでは、演算器101〜104の4つの演算器が存在する構成を示したが、演算器の数に特に制限は無い。
クロスバスイッチ105は、レジスタファイル106に含まれる各浮動小数点レジスタ501〜504と演算器101〜104とを接続する経路を選択するためのスイッチである。クロスバスイッチ105は、例えば、図1に例示したレジスタ切替部14の機能を実現する。
レジスタファイル106は、図1に例示した浮動小数点レジスタ500及び整数レジスタ151を有する。レジスタファイル106は、図1に例示したデータ格納部15の機能を実現する。
演算器101〜104は、クロスバスイッチ105とそれぞれ接続される。また、演算器101〜104は、それぞれレジスタファイル106に直接接続する経路を有する。
演算器101〜104は、例えば、CPUコアである。演算器101〜104は、それぞれ、図1に例示した命令フェッチ部11、命令デコード部12及び命令処理部13の機能を実現する。すなわち、演算器101〜104は、それぞれがクロスバスイッチ105を介さず直接レジスタファイル106から宛先データを読み出すか、または、クロスバスイッチ105により選択された浮動小数点レジスタ500からデータを読み出す。そして、演算器101〜104は、それぞれがSIMD命令を実行する。
図12は、実施例1に係るクロスバスイッチのハードウェア構造図である。さらに、詳細に図12を参照して説明する。各演算器はSIMD命令で指示された並列処理数の読み出しを同時に行なう。例えば、演算器101がSIMD命令で指定された4つの処理を行なう場合に、演算器101の1つの処理はクロスバスイッチ105内の内部スイッチ1051を介して各SIMDレジスタ50内にある何れかの浮動小数点レジスタ500から読み出し、他の処理も内部スイッチ1052、1053、1054を介して同様に各SIMDレジスタ50内にある何れかの浮動小数点レジスタ500から読み出すことができるような構成において実現をする。
さらに、各SIMDレジスタ50が保持する値を一つずつずらすことをSIMD演算で実現する場合には、SIMD命令で指定された4つの処理の各処理毎に演算処理を行なうために、SIMD命令内にある格納元情報から指定されたSIMDレジスタ50内にある浮動小数点レジスタ500を各処理毎にクロスバスイッチ105により選択する。例えば、1つめの処理は内部スイッチ1051により選択された浮動小数点レジスタ501から、他の処理も内部スイッチ1052〜1054を介して選択された浮動小数点レジスタ502〜504からデータを読み出す。次の処理では命令内で指定した整数レジスタ151内にあるSIMD設定情報のローテートパターンに従い1つめの処理は内部スイッチ1051により選択された浮動小数点レジスタ502を、他の処理も内部スイッチ1052〜1054を介して選択された浮動小数点レジスタ503〜504及び隣のSIMDレジスタ50の浮動小数点レジスタ505からデータを読み出し、演算器101はSIMD命令を実行する。同様に演算器102〜104も上述の方法にてSIMD命令を実行する。このようなSIMD命令を実行するためのクロスバスイッチ105のハードウェア構成が図12に示されている。以上の方法にて、隣のSIMDレジスタ50も含めたローテート処理を行なうことを、余分な命令の追加や前処理および後処理を用いずに実現する。
以上に説明したように、本実施例に係るプロセッサは、浮動小数点レジスタと処理実行部とを接続する経路を切り替えるスイッチを有する。そして、本実施例に係るプロセッサは、スイッチを切り替えることでデータを使いまわしながらSIMD演算を行う。これにより、浮動小数点レジスタに格納されたデータの入れ替えを行うことなく同じデータを使いまわすことができ、冗長な命令を用いずにSIMD演算を迅速に行うことができる。したがって、本実施例に係るプロセッサは、演算処理速度を向上させることができる。
また、データを使い回しても浮動小数点レジスタの内容を変更しないため、容易にデータの使いまわし前の浮動小数点レジスタの内容を用いることができる。また、新たな浮動小数点レジスタを用いずに容易にデータの使いまわし前の浮動小数点レジスタの内容を用いることができ、コストを抑えることができる。
さらに、ローテートを行う場合にも、データの書き込み及び読み出しの対象とする浮動小数点レジスタがSIMDレジスタ内に閉じておらず、他のSIMDレジスタのデータを取り扱うことができ、容易にローテートを実現することができる。さらに、アクセス対象とする浮動小数点レジスタの選択肢が多いため、浮動小数点レジスタに格納されたデータの使用パターンの自由度を向上させることができる。
図13は、実施例2に係る8SIMDのプロセッサのブロック図である。本実施例に係るプロセッサ1では、処理実行部131が、浮動小数点レジスタ500へのデータの書き込み時にもレジスタ切替部14を介してデータを送信することが実施例1と異なる。以下の説明では、実施例1と同様の各部の機能については説明を省略する。また、以下では、書き込み時にレジスタ切替部14を用いる計算の例として、行列の転置を行う処理を実行する場合を例に説明する。
図14は、実施例2に係るSIMDを用いた行列転置命令のアセンブリ言語記述及び生成される行列転置命令のフォーマットを表す図である。アセンブリ言語表記260において指定したオペコードおよび各オペランドに対応して、行列転置命令270は、オペコード271、宛先情報(dst)272、SIMD設定情報(simd−cfg)の格納元情報273及び格納元情報(src)274が格納される。例えば、オペコード271は命令の種別情報である。宛先情報272は出力先のレジスタ番号である。SIMD設定情報の格納元情報273は、図15に示す整数レジスタのフォーマットを有するSIMD設定情報が格納された場所の整数レジスタ番号である。格納元情報274は、入力元のレジスタ番号である。図15は、行列転置を行うSIMD命令を処理する場合の整数レジスタのフォーマットの一例の図である。
整数レジスタ151には、図15に示すような、SIMD命令で指定されたsimd−cfgの値に対応する切替パターンのパターン選択値が予め格納される。整数レジスタ151の上位側には、フォーマット154で示すように、srcで表される、1回のSIMD演算における第1スイッチ143の4つの切替パターンを指定するためのパターン選択値が格納される。さらに、整数レジスタ151の下位側には、フォーマット154で示されるように、dstで表される、1回のSIMD演算における第2スイッチ144の4つの切替パターンを指定するためのパターン選択値が格納される。
また、本実施例では、図16に示すレジスタ番号が用いられる。図16は、8×8行列を表現する浮動小数点レジスタを表す図である。図16では、一般的な値をレジスタ番号として用いることができるように、自然数の変数nを用いてレジスタ番号を表す。そして、図16では、左下を原点として、横方向をX軸、縦方向をY軸として、X軸方向及びY軸方向の値を用いてレジスタ番号が表される。具体的には、右に1列進む毎にX軸の値が1つ増える。また、上に1行進む毎にY軸の値が1つ増える。そして、f(n+8*Y+X)としてレジスタ番号が表される。ここで、XはX軸の値であり、YはY軸の値である。
そして、スイッチ切替表142は、図17に示す情報が登録される。図17は、実施例2に係るスイッチ切替表を表す図である。本実施例に係るスイッチ切替表142は、パターン選択値に合わせて、8個の切り替えパターンが登録される。
スイッチ制御部141は、処理実行部131のデータ読み出し時に、第2スイッチ144の接続を開放し、第1スイッチ143を格納元(src)の切替パターンで切り替える。そして、スイッチ制御部141は、第1スイッチ143の接続を開放し、処理実行部131のデータの書き込み時に、第2スイッチ144を宛先(dst)の切替パターンで切り替える。
処理実行部131は、スイッチ制御部141により切り替えられた第1スイッチ143を介してデータを浮動小数点レジスタ500から読み出す。その後、処理実行部131は、スイッチ制御部141に切り替えられた第2スイッチ144を介してデータを浮動小数点レジスタ500に書き込む。
ここで、SIMDを用いた行列転置の処理について説明する。図18は、行列転置を実行するためのSIMD命令を表す図である。mvfr命令は、レジスタ転送命令であり、複数のmvfr命令を実行することで転送元の配列を転置した配列を転送先に作る。mvfrは、3つのオペラントを有する。mvfr a,b,(c,d)は、以下の処理を実行させる。すなわち、処理実行部131は、aを読み出し側のオペラントとして、cで表される切替パターンで接続される浮動小数点レジスタ500からデータを読み出す。次に、処理実行部131は、bをオペラントとして、dで表される切替パターンで接続される浮動小数点レジスタ500へ読み出したデータを書き込む。例えば、SIMD命令320の1行目の場合、処理実行部131は、図16に示すスイッチ切替表142が示すパターン選択値#1で選択された切替パターンを用いてデータを読み出す。その後、処理実行部131は、読み出したデータをスイッチ切替表142が示すパターン選択値#1で選択された切替パターンを用いてデータを書き込む。
そして、図17に記載された命令を実行する場合、スイッチ制御部141は、3つ目のオペラントの1番目の値に対応する切替パターンをスイッチ切替表142から読み出し、取得した切替パターンにしたがい第1スイッチ143を順次切り替える。処理実行部131は、第1スイッチ143の切り替えに応じて都度データを第1スイッチ143を介して浮動小数点レジスタ500から読み出す。
取得した切替パターンに応じたデータの読み出しが完了後、スイッチ制御部141は、3つ目のオペラントの2番目の値に対応する切替パターンをスイッチ切替表142から読み出し、取得した切替パターンにしたがい第2スイッチ144を順次切り替える。処理実行部131は、第2スイッチ144の切り替えに応じて都度データを第2スイッチ144を介して浮動小数点レジスタ500へ書き込む。
図19〜21を参照して、SIMDを用いた行列転置の演算を行う場合のデータの動きについて説明する。図19は、行列転置の1回目の移動処理を説明するための図である。より詳しくは、図19は、dstが#1でありsrcが#1の場合の処理を表す。図20は、行列転置の2回目の移動処理を説明するための図である。より詳しくは、図20は、dstが#3でありsrcが#10の場合の処理を表す。図21は、行列転置の3回目の移動処理を説明するための図である。図19〜21では、入力画像データ310の画素それぞれに画素値g0〜g63を記載した。ここでは、図18のSIMD命令320にしたがって行列転置の演算を行う場合で説明する。
図19において、入力画像データ310は、読み込み元の浮動小数点レジスタ500に格納される。そして、出力画像データ311は、書き込み先の浮動小数点レジスタに格納される。スイッチ制御部141は、パターン選択値#1に対応する切替パターンを取得する。次に、スイッチ制御部141は、n=0を取得した切替パターンに入力する。そして、スイッチ制御部141は、取得した切替パターンにしたがって入力画像データ310の対角の画素値を取得するように第1スイッチ143を切り替える。処理実行部131は、第1スイッチ143の切り替えに合わせて、図18のように入力画像データ310の対角の画素に対応する浮動小数点レジスタ500から、画素値g0,g9,g18,g27,g36,g45,g54,g63を順次取得する。
次に、スイッチ制御部141は、パターン選択値#1に対応する切替パターンを取得する。次に、スイッチ制御部141は、n=64を取得した切替パターンに入力する。そして、スイッチ制御部141は、取得した切替パターンにしたがって出力画像データ311の対角の画素にあたる浮動小数点レジスタ500に接続するように第2スイッチ144を切り替える。処理実行部131は、第2スイッチ144の切り替えに合わせて、図18のように出力画像データ311の対角の画素に対応する浮動小数点レジスタ500である画素値g0,g9,g18,g27,g36,g45,g54,g63を順次格納する。すなわち、画素値g0,g9,g18,g27,g36,g45,g54,g63は、書き込み先の浮動小数点レジスタ500における、レジスタ番号がf64,f73,f82,f91,f100,f109,f118,f127の浮動小数点レジスタ500に格納される。
スイッチ制御部141は、パターン選択値#2に対応する切替パターンを取得する。次に、スイッチ制御部141は、n=0を取得した切替パターンに入力する。そして、スイッチ制御部141は、取得した切替パターンにしたがって入力画像データ310の対角の各画素値の1行下の画素の画素値を取得するように第1スイッチ143を切り替える。ただし、入力画像データ310の最下部の行の画素の1行下の画素とは、入力画像データ310の最上部の行の画素とする。処理実行部131は、第1スイッチ143の切り替えにしたがい、図19のように入力画像データ310の対角の各画素の1行下の画素に対応する浮動小数点レジスタ500から画素値を取得する。すなわち、処理実行部131は、画素値g1,g10,g19,g28,g37,g46,g55,g56を順次取得する。
次に、スイッチ制御部141は、パターン選択値#9に対応する切替パターンを取得する。次に、スイッチ制御部141は、n=64を取得した切替パターンに入力する。そして、スイッチ制御部141は、取得した切替パターンにしたがって出力画像データ311の対角の画素の1行上の画素にあたる浮動小数点レジスタ500に接続するように第2スイッチ144を切り替える。ただし、出力画像データ311の最上部の行の画素の1行上の画素とは、出力画像データ311の最下部の行の画素とする。処理実行部131は、第2スイッチ144の切り替えに合わせて、図19のように出力画像データ311の対角の画素の1行上の画素に対応する浮動小数点レジスタ500に、画素値g1,g10,g19,g28,g37,g46,g55,g56を順次格納する。すなわち、画素値g1,g10,g19,g28,g37,g46,g55,g56は、書き込み先の浮動小数点レジスタ500における、レジスタ番号がf72,f81,f90,f99,f108,f117,f126,f71の浮動小数点レジスタ500に格納される。
スイッチ制御部141は、パターン選択値#3に対応する切替パターンを取得する。次に、スイッチ制御部141は、n=0を取得した切替パターンに入力する。そして、スイッチ制御部141は、取得した切替パターンにしたがって入力画像データ310の対角の各画素値の2行下の画素の画素値を取得するように第1スイッチ143を切り替える。処理実行部131は、第1スイッチ143の切り替えにしたがい、図20のように入力画像データ310の対角の各画素の2行下の画素に対応する浮動小数点レジスタ500から画素値を取得する。すなわち、処理実行部131は、画素値g2,g11,g20,g29,g38,g47,g48,g57を順次取得する。
次に、スイッチ制御部141は、パターン選択値#10に対応する切替パターンを取得する。次に、スイッチ制御部141は、n=64を取得した切替パターンに入力する。そして、スイッチ制御部141は、取得した切替パターンにしたがって出力画像データ311の対角の画素の2行上の画素にあたる浮動小数点レジスタ500に接続するように第2スイッチ144を切り替える。処理実行部131は、第2スイッチ144の切り替えに合わせて、図20のように出力画像データ311の対角の画素の2行上の画素に対応する浮動小数点レジスタ500に、画素値g2,g11,g20,g29,g38,g47,g48,g57を順次格納する。すなわち、画素値g2,g11,g20,g29,g38,g47,g48,g57は、書き込み先の浮動小数点レジスタ500における、レジスタ番号がf80,f89,f98,f107,f116,f125,f70,f79の浮動小数点レジスタ500に格納される。
このように、スイッチ制御部141は、行列の対角の画素から順に1行ずつ下げた画素にあたる浮動小数点レジスタ500を選択するように第1スイッチ143を切り替えることを繰り返す。これに合わせて、処理実行部131は、選択された浮動小数点レジスタ500からデータを読み出すことを繰り返す。また、スイッチ制御部141は、行列の対角の画素から順に1行ずつ上げた画素にあたる浮動小数点レジスタ500を選択するように第2スイッチ144を切り替えることを繰り返す。これに合わせて、処理実行部131は、選択された浮動小数点レジスタ500にデータを書き込むことを繰り返す。これにより、処理実行部131は、入力画像データ310の転置行列を表す出力画像データ311を取得する。
次に、図22を参照して、本実施例に係るプロセッサのハードウェア構成を説明する。図22は、実施例2に係るプロセッサのハードウェア構成図である。
プロセッサ1は、演算器101〜104、クロスバスイッチ105及びレジスタファイル106を有する。ここでは、演算器101〜104の4つの演算器が存在する構成を示したが、演算器の数に特に制限は無い。
クロスバスイッチ105は、レジスタファイル106に含まれる各浮動小数点レジスタ500と演算器101〜104とを接続する経路を選択するためのスイッチである。クロスバスイッチ105は、例えば、図13に例示したレジスタ切替部14の機能を実現する。
レジスタファイル106は、図13に例示した浮動小数点レジスタ500及び整数レジスタ151を有する。レジスタファイル106は、図13に例示したデータ格納部15の機能を実現する。
演算器101〜104は、例えば、CPUコアである。演算器101〜104は、クロスバスイッチ105とそれぞれ接続される。演算器101〜104は、それぞれ、図13に例示した命令フェッチ部11、命令デコード部12及び命令処理部13の機能を実現する。すなわち、演算器101〜104は、それぞれがクロスバスイッチ105により選択された浮動小数点レジスタ500からデータを読み出す。そして、演算器101〜104は、それぞれがSIMD命令を実行し、クロスバスイッチ105により選択された浮動小数点レジスタ500へデータを書き込む。
実施例2は行列転置処理などの複雑な処理を行なうため、演算処理するためのデータの読み出す際のみではなく、図10のフロー図で既に示したように演算結果を書き込む際においても、同様の方法によりクロスバスイッチで指定された浮動小数点レジスタにデータを書き込む動作を行なう。これにより、行列転置処理を行なうため、図19〜図21で示した前処理または後処理を行うが、余分な命令追加や既に浮動小数点レジスタ内にデータがあるにも関わらず再読み込みする処理を行わずに行列転置処理が実現できる。
以上に説明したように、本実施例に係るプロセッサは、スイッチにより選択された浮動小数点レジスタからデータを読み出し、演算処理の実行結果をスイッチにより選択された浮動小数点レジスタに書き込む。これにより、浮動小数点レジスタに格納されたデータの入れ替えを行うことなく同じデータを使いまわすことができ、冗長な命令を用いずにSIMD演算を迅速に行うことができる。
また、実施例1では、処理実行部131が、宛先の浮動小数点レジスタ500に対して第1スイッチ143及び第2スイッチ144を介さずにデータの読み書きを行う場合で説明した。ただし、畳み込み演算を行う場合にも実施例2と同様に、処理実行部131が、第1スイッチ143及び第2スイッチ144を介して宛先の浮動小数点レジスタ500にアクセスする構成にしてもよい。
1 プロセッサ
2 メモリ
11 命令フェッチ部
12 命令デコード部
13 命令処理部
14 レジスタ切替部
15 データ格納部
50 SIMDレジスタ
131 処理実行部
132 判定部
141 スイッチ制御部
142 スイッチ切替表
143 第1スイッチ
144 第2スイッチ
151 整数レジスタ
152 浮動小数点レジスタ部
500 浮動小数点レジスタ

Claims (5)

  1. データを格納する複数の格納部と、
    前記格納部に格納されたデータを用いて演算処理を行う処理実行部と、
    前記処理実行部と前記格納部とを結ぶ経路を選択する経路選択部と、
    前記処理実行部からの切替指示を基に、選択経路を切り替えるように前記経路選択部を制御する切替制御部と
    を備えたことを特徴とする演算処理装置。
  2. 前記処理実行部は、前記経路選択部の切替パターンを選択するための情報を含む切替指示を前記切替制御部に通知し、
    前記切替制御部は、前記切替パターンを予め複数有し、前記切替指示にしたがい前記切替パターンを選択し、選択した切替パターンにしたがい前記経路選択部を制御する
    ことを特徴とする請求項1に記載の演算処理装置。
  3. 前記処理実行部は、1つの命令で所定数の演算を並行して実行させる命令を取得し、各前記命令に応じて前記切替指示を通知し、前記格納部から前記データを読み出し前記所定数の前記演算のそれぞれを行い、
    前記切替制御部は、前記処理実行部が実行する前記所定数の前記演算のそれぞれに応じて前記経路選択部の前記選択経路を切り替える
    ことを特徴とする請求項1又は2に記載の演算処理装置。
  4. 前記切替制御部は、前記処理実行部による前記データの読み出し時及び前記データの書き込み時に、前記選択経路を切り替えるように前記経路選択部を制御し、
    前記処理実行部は、前記切替制御部によって前記選択経路が切り替えられた前記経路選択部を介して前記格納部に対して前記データの読み出し及び書き込みを行う
    ことを特徴とする請求項1〜3のいずれか一つに記載の演算処理装置。
  5. 複数のレジスタ、演算器及び前記演算器と前記レジスタとを結ぶ経路の選択を行うスイッチを有する演算処理装置の制御方法であって、
    前記レジスタにデータを格納し、
    前記演算器から送信された切替指示に応じて前記スイッチを切り替え、
    前記演算器に、切り替えられた前記スイッチにより選択された前記経路を介して前記レジスタに格納されたデータを読み出させて演算を行わせる
    ことを特徴とする演算処理装置の制御方法。
JP2016153060A 2016-08-03 2016-08-03 演算処理装置及び演算処理装置の制御方法 Pending JP2018022339A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016153060A JP2018022339A (ja) 2016-08-03 2016-08-03 演算処理装置及び演算処理装置の制御方法
US15/618,444 US10248384B2 (en) 2016-08-03 2017-06-09 Arithmetic processing device and control method for arithmetic processing device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016153060A JP2018022339A (ja) 2016-08-03 2016-08-03 演算処理装置及び演算処理装置の制御方法

Publications (1)

Publication Number Publication Date
JP2018022339A true JP2018022339A (ja) 2018-02-08

Family

ID=61069289

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016153060A Pending JP2018022339A (ja) 2016-08-03 2016-08-03 演算処理装置及び演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US10248384B2 (ja)
JP (1) JP2018022339A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019136311A (ja) * 2018-02-09 2019-08-22 株式会社大一商会 遊技機
WO2019220692A1 (ja) * 2018-05-15 2019-11-21 三菱電機株式会社 演算装置
JP2020058939A (ja) * 2020-01-27 2020-04-16 株式会社大一商会 遊技機
WO2021020848A3 (ko) * 2019-07-31 2021-03-25 한양대학교 산학협력단 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6972547B2 (ja) * 2016-12-27 2021-11-24 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP6958027B2 (ja) * 2017-07-03 2021-11-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US11182668B2 (en) * 2017-11-06 2021-11-23 Imagination Technologies Limited Neural network architecture using convolution engine filter weight buffers
CN110825312B (zh) * 2018-08-10 2023-06-23 昆仑芯(北京)科技有限公司 数据处理装置、人工智能芯片及电子设备

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3581282B2 (ja) * 1999-09-17 2004-10-27 松下電器産業株式会社 基地局装置およびアンテナ制御方法
JP3985797B2 (ja) 2004-04-16 2007-10-03 ソニー株式会社 プロセッサ
JP5184824B2 (ja) 2007-06-15 2013-04-17 キヤノン株式会社 演算処理装置及び方法
JP5376920B2 (ja) 2008-12-04 2013-12-25 キヤノン株式会社 コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
JP5633122B2 (ja) 2009-06-16 2014-12-03 富士通セミコンダクター株式会社 プロセッサ及び情報処理システム
JP5742366B2 (ja) 2011-03-28 2015-07-01 ヤマハ株式会社 デジタル信号処理装置およびプログラム
US9442723B2 (en) * 2012-12-28 2016-09-13 Intel Corporation Method and apparatus for integral image computation instructions
JP6314628B2 (ja) 2014-04-28 2018-04-25 株式会社デンソー 演算処理装置
US10324730B2 (en) * 2016-03-24 2019-06-18 Mediatek, Inc. Memory shuffle engine for efficient work execution in a parallel computing system

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019136311A (ja) * 2018-02-09 2019-08-22 株式会社大一商会 遊技機
WO2019220692A1 (ja) * 2018-05-15 2019-11-21 三菱電機株式会社 演算装置
JPWO2019220692A1 (ja) * 2018-05-15 2021-04-30 三菱電機株式会社 演算装置
JP7046171B2 (ja) 2018-05-15 2022-04-01 三菱電機株式会社 演算装置
WO2021020848A3 (ko) * 2019-07-31 2021-03-25 한양대학교 산학협력단 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법
JP2020058939A (ja) * 2020-01-27 2020-04-16 株式会社大一商会 遊技機

Also Published As

Publication number Publication date
US20180039480A1 (en) 2018-02-08
US10248384B2 (en) 2019-04-02

Similar Documents

Publication Publication Date Title
JP2018022339A (ja) 演算処理装置及び演算処理装置の制御方法
US10642613B2 (en) Arithmetic processing device for deep learning and control method of the arithmetic processing device for deep learning
KR102232722B1 (ko) 프로그램 가능한 2차원 이미지 프로세서상의 컨볼루션 신경망
KR101973733B1 (ko) 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처
JP6958027B2 (ja) 演算処理装置及び演算処理装置の制御方法
US10642622B2 (en) Arithmetic processing device and control method of the arithmetic processing device
US20050257026A1 (en) Bit serial processing element for a SIMD array processor
EP3093757B1 (en) Multi-dimensional sliding window operation for a vector processor
TWI780116B (zh) 用於資料處理設備、方法、電腦可讀式儲存媒體及虛擬機器的向量逐元素操作
US20220206796A1 (en) Multi-functional execution lane for image processor
JP3985797B2 (ja) プロセッサ
JP6532334B2 (ja) 並列演算装置、画像処理装置及び並列演算方法
KR102591988B1 (ko) 데이터 처리장치에서의 벡터 인터리빙
KR20190091489A (ko) 복제 요소 명령어
JP7343473B2 (ja) レジスタベースの複素数処理
EP1936492A1 (en) SIMD processor with reduction unit
JP2018088098A (ja) 情報処理装置、情報処理方法、およびプログラム
JP7140201B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP2009059187A (ja) マイクロプロセッサおよびデータ処理方法
JPS61251971A (ja) 画像処理装置
JP2012155569A (ja) ディジタル信号処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190513

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200218

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200219

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20200915