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

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

Info

Publication number
JP2018005369A
JP2018005369A JP2016128447A JP2016128447A JP2018005369A JP 2018005369 A JP2018005369 A JP 2018005369A JP 2016128447 A JP2016128447 A JP 2016128447A JP 2016128447 A JP2016128447 A JP 2016128447A JP 2018005369 A JP2018005369 A JP 2018005369A
Authority
JP
Japan
Prior art keywords
instruction
arithmetic processing
operands
unit
address
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.)
Granted
Application number
JP2016128447A
Other languages
English (en)
Other versions
JP6712052B2 (ja
Inventor
周史 山村
Shuji Yamamura
周史 山村
拓巳 丸山
Takumi Maruyama
拓巳 丸山
雅人 中川
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 JP2016128447A priority Critical patent/JP6712052B2/ja
Priority to EP17172714.2A priority patent/EP3264261B1/en
Priority to US15/606,050 priority patent/US10754652B2/en
Publication of JP2018005369A publication Critical patent/JP2018005369A/ja
Application granted granted Critical
Publication of JP6712052B2 publication Critical patent/JP6712052B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】演算レイテンシの変化に対応でき、オペランドの組を複数含むデータに対して同様の演算処理を並列に複数回実行する処理を1つの命令で実行することができる演算処理装置を提供する。【解決手段】デコード部がデコードした命令が、演算処理対象であるオペランドを複数含むオペランドの組について、複数のオペランドの組に対する演算処理を並列に複数回実行する命令である場合、各オペランドの組に含まれる複数のオペランドに対する所定のアドレス変位に基づき、各回の演算処理の各オペランドの組に対応するアドレスの組をそれぞれ生成するアドレス生成部と、生成した各オペランドの組に対応するアドレスの組を、各演算部に対応してそれぞれ保持する複数の命令キューと、複数の命令キューがそれぞれ出力するアドレスの組に基づいてそれぞれ取得したオペランドの組に対する演算処理を並列に行う複数の演算部とを有する。【選択図】図3

Description

本発明は、演算処理装置及び演算処理装置の制御方法に関する。
1つの命令で複数のデータに対して演算処理を行う命令にSIMD(Single Instruction Multiple Data)命令がある。図16を参照してSIMD命令について説明する。SIMD命令を実行する演算処理装置は、命令を格納するバッファ1601、演算処理を行う複数の演算部(Processing Unit:PU)1602−1〜1602−4、及びデータを格納するデータバッファ1603を有する。命令バッファ1601から1つのSIMD命令を取り出して実行する際、演算部1602−1〜1602−4は、データバッファ1603に格納された複数のデータD1〜D4に対して、命令が示す演算処理を同時に適用する。SIMD命令は、行列計算のような複数のデータに対して同様の演算処理を並列に実行する場合に使用される。
図17に示す4行×4列の行列Aと4行×4列の行列Bとを乗算して4行×4列の行列Cを計算する正方行列積を例に説明する。行列の各要素の数値は「行番号」「列番号」を表しており、例えば“a12”は行列Aの1行目2列目のデータ要素を示す。4行×4列の行列Cのi行目j列目の要素cijは、以下の積和演算を行うことで求められる。
cij=ai1×b1j+ai2×b2j+ai3×b3j+ai4×b4j
例えば、行列Cの1行目1列目の要素c11は、
c11=a11×b11+a12×b21+a13×b31+a14×b41…(1)
の積和演算を行うことで求められる。
ここで、演算処理装置が有する演算部の各々が“C=A×B+C”の積和演算処理を実行可能であるとする。この演算処理は、一般的にFMA(Floating point Multiply Add、Fused Multiply Add等)と呼ばれ、近年のプロセッサにはFMA命令が実装されている。一般にFMA命令は、演算対象であるソースオペランドとしてA、B、Cの3オペランド、演算結果であるディスティネーションオペランドとしてCの1オペランドの計4つのオペランドが与えられる。
行列Cの1行目1列目の要素c11は、前述した式(1)で求められるので、以下の4つのFMA命令で計算できる。なお、以下の記載において、FMA命令に与えるオペランドは、順にソースオペランドA、ソースオペランドB、ソースオペランドC、ディスティネーションオペランドCであるとする。1番目のFMA命令は、積和演算結果の初期値として0を与えている。
FMA a11,b11,0,c11
FMA a12,b21,c11,c11
FMA a13,b31,c11,c11
FMA a14,b41,c11,c11
行列Cの各要素は、各要素の演算処理に依存関係がないので、それぞれ並列して計算することができる。そこで、SIMD命令を実行する演算処理装置が4つの演算部を有するものとし、SIMD命令としてFMA演算を行うと、行列Cの4つの要素を同時に計算することができる。例えば、図18に示すように演算部(PU#1)1801で行列Cの要素c11に係る演算を実行し、演算部(PU#2)1802で行列Cの要素c12に係る演算を実行し、演算部(PU#3)1803で行列Cの要素c13に係る演算を実行し、演算部(PU#4)1804で行列Cの要素c14に係る演算を実行することで、4つの演算部(PU)で行列Cの要素c11、c12、c13、c14を同時に計算することが可能である。したがって、4つのSIMD命令で行列Cの1行分の要素の計算が完了し、これを4回繰り返す、すなわち16個のSIMD命令で行列Cの全16要素の計算が完了する。
高周波数設計のハードウェアを用いたFMA命令の実行は、周波数の逆数であるサイクルタイムがより短くなるため、1サイクルで完了することが難しい。例えば、FMA命令の演算レイテンシが4サイクルである場合、図19(A)に示すように各SIMD FMA命令間に3サイクル分の時間差を設けて4サイクル毎に命令を実行する必要があり、3サイクルの間、パイプラインバブルが発生することとなる。これを回避する方法としてソフトウェアパイプラインと呼ばれる方法がある。ソフトウェアパイプラインは、データの依存関係がある命令間の空きサイクルに、データに依存関係のない別の命令を挿入することで、演算器の稼働率を向上させる。例えば、図19(B)に示すように、行列のある要素を計算している空きサイクルに行列の別の要素を計算する命令列を挿入する。
図21及び図22は、それぞれ図19(A)及び図19(B)に示したようにして命令を実行した場合のタイミングチャートを示している。ソフトウェアパイプラインを行わない場合、図20に示すように第1ステージから第4ステージの4サイクルでFMA命令を実行する。最初の命令が実行投入されてから、データの依存関係がある次の命令の投入は4サイクル待たされるため、実行中のステージ以外の残り3ステージはアイドル状態となる。一方、ソフトウェアパイプラインを行った場合、図21に示すように1サイクルずつずらして命令を投入し実行することで、各命令が同時に異なるステージを実行でき、高い効率で演算器を動作させることができる。
特開2015−55971号公報 特開2008−3708号公報
しかしながら、前述した並列に演算処理を行うSIMD命令を用いても行列計算のような複数のデータに対して同様の演算処理を複数回実行する場合に命令数が非常に多くなる。例えば、前述した4行×4列の正方行列積の演算では16命令ですむが、正方行列のサイズNが大きくなるにしたがって、O(N2)のオーダーで命令数が増加する。また、ディープラーニング(Deep Learning)で多用される畳み込み(Convolution)演算では、画像サイズがN×N、カーネルサイズがM×Mである場合、O(N22)のオーダーで命令数が増加する。
畳み込み演算とは、小さなサイズの矩形のフィルタを使い、そのフィルタの持つ特徴的な構造を元の画像から抽出する処理である。図22に示すように対象画像2201に対して小さな矩形領域2202の特徴を抽出して、次のレイヤーの画像2203の画素を作成する。このときの矩形領域がカーネルと呼ばれ、次のレイヤーの画像の1要素を計算する際に必要となる画像データ領域であり、この領域に対して特徴量を定義する値を積和演算して画素値を生成する。畳み込み演算では、O(N22)のオーダーで命令数が増加するため、カーネルのサイズが大きくなると命令数が爆発的に増大し、命令を格納するためのバッファ等の物量が多く要求されるとともに、毎サイクルの命令のデコードや発行が必要となるために電力も多く消費することとなる。
また、前述したソフトウェアパイプラインを適用する場合、後継機種を開発して演算レイテンシが短縮されたり、あるいは省電力制御により動的に演算レイテンシが延びたりすると、再コンパイルして命令列を最適な並びにしなければならない。多くのアプリケーションで共用されるライブラリ等では再コンパイルが困難なケースもある。前述した例において演算レイテンシが2サイクルになった場合のタイミングチャートを図23に示す。図23に示すように、データに依存関係のない命令が2命令セットで次々に発行するようにして、2サイクルにわたり2つの命令を発行すれば全ステージ(2ステージ)を効率よく動作させることができるが、これには再コンパイルが必要となる。
1つの側面では、本発明の目的は、演算レイテンシの変化に対応でき、複数のデータに対して同様の演算処理を行い並列に複数回実行する処理を1つの命令で実行することができる演算処理装置を提供することにある。
演算処理装置の一態様は、命令をデコードするデコード部と、デコード部がデコードした命令が、演算処理の対象であるオペランドを複数含むオペランドの組について、複数のオペランドの組に対する演算処理を並列に複数回実行する命令である場合、各オペランドの組に含まれる複数のオペランドに対する所定のアドレス変位に基づき、各回の演算処理の各オペランドの組に対応するアドレスの組をそれぞれ生成するアドレス生成部と、アドレス生成部が生成した各オペランドの組に対応するアドレスの組を、各演算部に対応してそれぞれ保持する複数のアドレス保持部と、複数のアドレス保持部がそれぞれ出力するアドレスの組に基づいてそれぞれ取得したオペランドの組に対する演算処理を並列に行う複数の演算部とを有する。
発明の一態様においては、演算レイテンシが変わっても命令列を変更せずに、複数のデータに対して同様の演算処理を並列に複数回実行する処理を1つの命令で実行することができる。
本発明の実施形態における演算処理装置の構成例を示す図である。 本実施形態における演算処理装置の命令制御パイプラインを示す図である。 本実施形態におけるSIMVユニットの構成例を示す図である。 本実施形態におけるベクトル命令キューに格納されるオペコードとオペランドのアドレスの組の例を示す図である。 本実施形態におけるベクトル命令キューでの格納情報の例を示す図である。 本実施形態における演算部の構成例を示す図である。 本実施形態における行列積のSIMV命令による実行例を示すタイミングチャートである。 演算レイテンシが2サイクルに短縮された場合の制御を説明する図である。 動的に演算レイテンシが変化した場合の制御を説明する図である。 畳み込み演算を説明する図である。 本実施形態における畳み込み演算のSIMV命令による実行を説明する図である。 本実施形態における畳み込み演算に係るSIMV制御情報の例を示す図である。 本実施形態における畳み込み演算に係るアドレス生成擬似コードの例を示す図である。 本実施形態におけるSIMVアドレス生成部の他の構成例を示す図である。 本実施形態における演算部の構成例を示す図である。 SIMD命令について説明する図である。 4行×4列の正方行列積の例を示す図である。 SIMD命令での行列Cの4要素に係る演算の実行を説明する図である。 SIMD命令の実行イメージを示す図である。 ソフトウェアパイプラインを行わない場合の命令の実行例を示すタイミングチャートである。 ソフトウェアパイプラインを行った場合の命令の実行例を示すタイミングチャートである。 畳み込み演算を説明する図である。 ソフトウェアパイプラインを行った場合の命令の実行例を示すタイミングチャートである。
以下、本発明の実施形態を図面に基づいて説明する。
以下に説明する本発明の一実施形態における演算処理装置は、1つの命令で、演算処理の対象であるオペランドを複数含むオペランドの組について、複数のオペランドの組に対する演算処理を並列に複数回実行するSIMV(Single Instruction Multiple Vector)命令が実行可能である。SIMV命令は、SIMD命令での演算処理に係るオペランドのアドレスが規則性を持つことに着目し、オペランドのアドレスを制御情報として与えることで、1つの命令で行列積演算等の複数のデータに対して同様の演算処理を並列に複数回実行し完了する。
図1は、SIMV命令を実行可能な本実施形態における演算処理装置の構成例を示す図である。本実施形態におけるSIMV命令を実行可能な演算処理装置は、命令を格納するバッファ101、演算処理を行う複数の演算部(Processing Unit:PU)102−1〜102−4、及びデータを格納するデータバッファ103を有する。
命令バッファ101から1つのSIMV命令を取り出して実行する際、演算部102−1〜102−4は、データバッファ103に格納された複数のデータに対して、命令が示す同様の演算処理を同時に適用する。同時に演算処理を適用する演算対象データを「ベクトル」と呼び、連続するサイクルで連続するベクトル103−1〜103−4に対して同様の演算処理を適用する。なお、図1においては、4つの演算部102−1〜102−4を有する例を示しているが、演算処理装置が有する演算部の数は、複数であればよく任意である。
図2は、本実施形態における演算処理装置の命令制御パイプラインを示す図である。命令制御パイプラインは、命令フェッチステージ、デコードステージ、レジスタリードステージ、及び実行ステージの4つのステージを有する。命令フェッチステージでは、命令バッファ201からプログラムカウンタ202の値に基づいて命令をフェッチする。デコードステージでは、命令バッファ201からフェッチした命令をデコード部204がデコードする。
レジスタリードステージでは、一般レジスタ208や状態コードレジスタ211からレジスタの値を読み出す。実行ステージでは、各処理ユニットが命令に応じた演算等の処理を実行する。処理ユニットとして例えば、SIMV命令に係る処理を行うSIMVユニット207、整数実行ユニット210、分岐ユニット213、及びロードストアユニット215を有する。また、ステージングラッチ203、205、206、209、212、214が各ステージ間に配される。
図3は、SIMV命令に係る処理を行うSIMVユニット207の構成例を示す図である。SIMVユニット207はSIMVアドレス生成部301、ベクトル命令キュー303−1〜303−4、セレクタ305、複数の演算部306、及び選択カウンタ307Aを有する。
SIMVユニット207は、デコード部204からのSIMV命令に係る情報をSIMVアドレス生成部301で受信する。SIMVアドレス生成部301は、SIMV制御情報レジスタ302を有し、受信した情報に基づいてSIMV命令に係る演算処理を実行するためのオペランドのアドレスを生成する。SIMV制御情報レジスタ302には、ロード命令によってメモリ上に予め構成されたSIMV制御情報をロードすることで値を設定する。
SIMVアドレス生成部301は、SIMV制御情報レジスタ302に格納されているSIMV制御情報に基づいて各ベクトルのレジスタファイルにおけるデータ位置を示すアドレスをそれぞれ生成し、ベクトル命令キュー303−1〜303−4に投入する。ベクトル命令キュー303−1〜303−4の各エントリに格納される情報の例を図4に示す。ベクトル命令キュー303−1〜303−4に格納される情報としては、例えばFMA演算であれば、FMA演算に必要なソースオペランド1,2,3及びディスティネーションオペランドのレジスタファイルにおける各アドレスであるアドレス401〜404と、演算種(FMA演算)を指示する命令を識別するオペコード405がある。
ここで、SIMVユニット207は、演算部306の演算レイテンシと同じ数のベクトル命令キューを有する。図3に示す例では、FMA演算を4サイクルで実行できるものとし、4つのベクトル命令キュー303−1〜303−4を有している。4つのベクトル命令キュー303−1〜303−4にそれぞれ保持しているオペコードとオペランドのアドレスの組からセレクタ305によりラウンドロビンでオペコードとオペランドのアドレスの組を選択し、PU制御情報PUCTLとして演算部306に対して送信する。
セレクタ305において、どのベクトル命令キュー303−1〜303−4からのオペコードとオペランドのアドレスの組を選択するかは、選択カウンタ307Aのカウント値CNTによって決定する。選択カウンタ307Aは、カウント値CNTを00→01→10→11→00→・・・と順にカウントする。例えば、セレクタ305は、カウント値CNTが00の場合、ベクトル命令キュー303−1からのオペコードとオペランドのアドレスの組を選択して出力し、カウント値CNTが01の場合、ベクトル命令キュー303−2からのオペコードとオペランドのアドレスの組を選択して出力する。また、セレクタ305は、カウント値CNTが10の場合、ベクトル命令キュー303−3からのオペコードとオペランドのアドレスの組を選択して出力し、カウント値CNTが11の場合、ベクトル命令キュー303−4からのオペコードとオペランドのアドレスの組を選択して出力する。
図5に各ベクトル命令キュー303−1〜303−4に、図17に示した4行×4列の正方行列積をSIMV命令によって実行する場合のFMA演算のオペコードとその演算対象であるオペランドを複数含むオペランドの組が並列に複数格納されている様子を示す。図5において、オペランドの表記はわかりやすくするために前述した図と同じ表記としているが、実際には、オペコードとそのオペコードに対応する各オペランドのレジスタファイルにおけるアドレスの組が格納されている。すなわち、ベクトル命令キュー303−1〜303−4全体としてみれば、オペコードとそのオペコードに対応する各オペランドのアドレスの組が並列に複数組格納されている。ベクトル命令キュー303−1〜303−4には、各ベクトルの演算順(依存関係順)にキューイングされている。例えば、図5に示した例では、情報501、502、503、504、505、506、507、508、509、510、511、512、513、514、515、516の順で演算部306にPU制御情報PUCTLとして送信される。
図6は、演算部306の構成例を示す図である。図6に示す例では、FMA演算器602をそれぞれ有する4つの演算部306−1〜306−4を有しており、同時に4つの積和演算を実行可能となっている。各FMA演算器602に対応するようにして、浮動小数点値を64個格納できるレジスタファイル601が設けられている。受信したアドレス情報ADIに従って3つのソースオペランドを含むソースオペランドの4つの組がレジスタファイル601から演算部306−1〜306−4のFMA演算器602に対してそれぞれ出力され、演算部306−1〜306−4のFMA演算器602での演算結果がレジスタファイル601に書き込まれる。また、演算部306−1〜306−4に対しては積和演算を指示するオペコードOPCODEが入力される。
図7は、4行×4列の行列Aと4行×4列の行列Bとを乗算して4行×4列の行列Cを計算する正方行列積のSIMV命令による実行例を示すタイミングチャートである。1つのSIMV命令で行列積演算におけるオペランドの複数の組に対して積和演算を並列に複数回実行し、ソフトウェアパイプラインでの実行と同様の動作をハードウェアで実現している。
また、後継機種において演算レイテンシが2サイクルに短縮された場合の制御を、図8を参照して説明する。ハードウェア構成は同様であり、SIMV命令にも変更はない。SIMVアドレス生成部301から各ベクトル命令キューにアドレスをキューイングする点も同様である。演算レイテンシが2サイクルに短縮された場合、選択カウンタ307Bが、カウント値CNTを00→10→01→11→00→・・・と順にカウントする。このように選択カウンタの値の更新を演算レイテンシが4サイクルの場合とは異なる順序で進めることでベクトル命令キュー303−1→ベクトル命令キュー303−3→ベクトル命令キュー303−2→ベクトル命令キュー303−4→ベクトル命令キュー303−1→・・・の順でPU制御情報PUCTLを取り出すようにする。このようにすることで、演算レイテンシが2サイクルに変わってもソフトウェアパイプラインを用いた場合と同様に演算器を効率よく動作させることが可能となる。
また、省電力機能を有する演算処理装置である場合、消費電力を削減するために動作周波数を低くすることがあり、動作周波数を低くするのに伴って演算レイテンシのサイクル数が短くなる。そのような省電力機能に対応したSIMVユニットについて図9を参照して説明する。この例では、消費電力を削減するために動作周波数を半分にできるものとする。この場合、演算処理の演算レイテンシは4サイクルから2サイクルに短縮される。
通常時は、前述した例と同様に演算レイテンシが4サイクルで動作するので、4つのベクトル命令キュー303−1〜303−4を動作させる。また、選択カウンタは、カウント値CNTを00→01→10→11→00→・・・と順にカウントする。一方、消費電力を低減するために、動作周波数を低下させ、演算レイテンシが2サイクルとなる場合、2つのベクトル命令キュー303−1、303−2のみを用いるようにし、選択カウンタは00→01→00→01→00→・・・順にカウントするように制御を変更する。このようにすることで、消費電力を削減するために動作周波数を低くし、動的に演算レイテンシが変化した場合でも、SIMV命令を用いた命令列をなんら変更することなく、効率よく演算器を動作させることができる。
次に、本実施形態におけるSIMV命令を用いてディープラーニングにおける畳み込み(Convolution)演算を実行する例について説明する。図10は、畳み込み演算を説明する図である。畳み込み演算は、ボトム(Bottom)データ(図10における行列B)とウェイト(Weight)データ(図10における行列W)との積和演算を行い、トップ(Top)データ(図10における行列T)を生成する処理である。図10(A)〜図10(D)で太枠で示した3×3の枠がカーネルである。カーネルと同じサイズのウェイトデータを用いてボトムデータの積和演算を行い、トップデータの1要素を計算する。例えば、トップデータの要素t11は、以下の積和演算により求められる。
t11=b11×w11+b12×w12+b13×w13+b21×w21+・・・+b33×w33
図10に示すようにトップデータの各要素の演算は、ボトムデータ上で1要素ずつカーネルをずらして同様の演算を行うことで生成する。図10(A)〜図10(D)にはt11,t12,t13,t14の4つの要素を計算している例を示している。トップデータの各要素の演算は、要素間でデータの依存関係がないため並列に演算することができ、本実施形態におけるSIMV命令により実行することができる。例えば、4つの演算部を有する演算処理装置でトップデータの要素t11〜t44を求める場合、SIMD命令を用いるとその命令数は3×3×4=36命令となるが、SIMV命令を用いることで1命令で処理を完了できる。
SIMV命令の1つとして、“conv16 %fsrc1, %fsrc2, %fsrc3, %fdst”で示されるconv16命令を設ける。このconv16命令は、1つの命令でトップデータの16要素を計算する命令である。ニーモニックは「conv16」で、3つのソースオペランドと1つのディスティネーションオペランドとをとる。これらのオペランドはレジスタファイルのアドレスである。
conv16命令の実行時、レジスタファイル601上には、図10に示したボトムデータ、ウェイトデータがこの順で連続のアドレスに配置されているものとする。最初のソースオペランド1にはボトムデータが配置されている領域の先頭アドレス、ソースオペランド2にはウェイトデータが配置されている領域の先頭アドレスを与える。ソースオペランド3及びディスティネーションオペランドには、トップデータを格納する領域の先頭アドレスを与える。
畳み込み演算では、トップデータの1要素を計算するとき、ボトムデータとウェイトデータのアドレスについて規則的な動きをする。図10に示した例では、カーネル内の走査をする際、3回の連続アドレスと次の行への移動を3回繰り返す。このアドレスパターンは、カーネルサイズと次の行への移動量で決まる。SIMV制御情報レジスタ302には、図12に示すSIMV制御情報を設定する。このSIMV制御情報にカーネルサイズ1205と次の行への移動量(row step)1206〜1208を保持している。SIMVアドレス生成部301は、SIMV制御情報レジスタ302に格納されているSIMV制御情報を参照してレジスタファイルへアクセスするアドレスを計算する。
本実施形態では4つの演算部306を有しているので、まず図10に示すようにトップデータの4要素を同時に計算する。次に、FMA演算のレイテンシを隠ぺいするために、トップデータの次の行の4要素を計算する。図11に示すように4つのベクトルを並列に1命令で計算する。各ベクトルを計算するとき、必要となるボトムデータの位置が異なる。各ベクトルの計算に必要となるボトムデータが配置されている領域の先頭アドレスに対する差分値である所定のアドレス変位(一定となる)(vector step)をSIMV制御情報として保持しておく。なお、SIMV制御情報は、ソフトウェアがconv16命令を実行する前に予めメモリからロードしてSIMV制御情報レジスタ302に設定する。
図13に、SIMVアドレス生成部301での畳み込み演算に係るアドレス生成のためのアドレス生成擬似コードの例を示す。図13に示すコード中、vはベクトルのループ、fはFMA演算のループである。疑似的には、このコードのsrc[123]_regの行の計算をすれば、オペランドに係るレジスタファイルのアドレスを計算できる。ベクトル命令キューに設定すべきアドレスパターンはSIMV制御情報の設定時に決定しているので、命令に与えられたオペランド値(下線部)のみを加算するだけでオペランドに係るレジスタファイルのアドレスを生成可能である。
SIMVアドレス生成部301におけるアドレス生成を、以下のようにして行うことも可能である。図14(A)に示すようにアドレス生成部301に、ベースアドレスを格納するレジスタ1401とオフセットアドレステーブル1402及びそれらを加算する加算器1403を設ける。例えば、畳み込み演算の場合では、前述したようにある基点に対して決まったアドレスパターンを取る。そのアドレスパターンを図14(B)に一例を示すようにオフセットアドレステーブルに保持する。conv16命令が実行された際にオペランドアドレスをベースアドレスのレジスタ1401に設定し、そのアドレスに対してオフセットアドレステーブル1402から取り出した値を加算器1403で加算しベクトル命令キューにキューイングする。オフセットアドレステーブルの値は、実行前に予めソフトウェアのロード命令によって値を設定しておけばよい。このようにすることで、前述したようなアドレス計算を行わずにオペランドのアドレスを生成することができる。
次に、本実施形態におけるSIMV命令を用いてディープラーニングにおけるマックスプーリング(Max Pooling)演算を実行する例について説明する。マックスプーリング演算とは、畳み込み演算と同様に、ある大きさのカーネルについてその内部の要素の中で最も値の大きいものを選択し、次のレイヤーの画像の要素とする処理である。マックスプーリング演算では、計算は行わず、値の比較演算を行う。SIMV命令の1つとして、“maxpool16 %fsrc1, %fsrc2, %fdst”で示されるmaxpool16命令を設ける。前述したconv16命令と同様にベースアドレスをオペランドとして与え、カーネル内部のアドレスをベクトル命令キューにキューイングすることで処理する。
図15は、マックスプーリング演算を行う本実施形態における演算部の構成例を示す図である。比較器(CMP)1502をそれぞれ有する4つの演算部306−1〜306−4を有しており、同時に4つの比較演算を実行可能となっている。受信したアドレス情報ADIに従って2つのソースオペランドがレジスタファイル1501から演算部306−1〜306−4の比較器1502に対して出力され、演算部306−1〜306−4の比較器1502での処理結果がレジスタファイル1501に書き込まれる。また、演算部306−1〜306−4に対しては比較演算を指示するオペコードOPCODEが入力される。比較器1502は、2つのソースオペランドsrc1、src2を比較し、例えばsrc1がsrc2より大きければsrc1を比較結果としてレジスタファイル1501に書き込み、それ以外はsrc2を比較結果としてレジスタファイル1501に書き込む。
以上説明したように本実施形態によれば、SIMV命令を用いることで、行列計算やディープラーニングにおける畳み込み演算処理等の複数のデータに対して同様の演算処理を並列に複数回行うような場合に、1つの命令で処理を完了することが可能となる。これにより、命令数が大幅に削減でき、命令実行に必要な命令キャッシュなどのハードウェア資源の削減することができる。また、演算レイテンシが変わってもソフトウェアからみた処理は同様であるので、演算レイテンシを命令レベルで隠蔽することができ、演算処理のレイテンシが変わっても再コンパイル等を行う必要がなく、ライブラリ等の命令を直接使用するプログラムの互換性を確保することが容易になる。
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
101、201 命令バッファ
102 演算部(PU)
103 データバッファ
204 デコード部
207 SIMVユニット
301 SIMVアドレス生成部
302 SIMV制御情報レジスタ
303 ベクトル命令キュー
305 セレクタ
306 演算部
307 選択カウンタ
601 レジスタファイル
602 FMA演算器
1501 レジスタファイル
1502 比較器

Claims (6)

  1. 命令をデコードするデコード部と、
    前記デコード部がデコードした命令が、演算処理の対象であるオペランドを複数含むオペランドの組について、複数のオペランドの組に対する演算処理を並列に複数回実行する命令である場合、各オペランドの組に含まれる複数のオペランドに対する所定のアドレス変位に基づき、各回の演算処理の各オペランドの組に対応するアドレスの組をそれぞれ生成するアドレス生成部と、
    前記アドレス生成部が生成した各オペランドの組に対応するアドレスの組を、各演算部に対応してそれぞれ保持する複数のアドレス保持部と、
    前記複数のアドレス保持部がそれぞれ出力するアドレスの組に基づいてそれぞれ取得したオペランドの組に対する演算処理を並列に行う複数の演算部とを有する演算処理装置。
  2. 前記複数の命令保持部のうち、前記複数の演算部にアドレスの組を出力する命令保持部をラウンドロビンで選択する請求項1記載の演算処理装置。
  3. 前記複数の命令保持部のうち、第1の命令保持部に保持された第1のアドレスの組に対応する第1の演算処理と、第2の命令保持部に保持された第2のアドレスの組に対応する第2の演算処理との間にオペランドの依存関係が無い場合、前記第1の命令保持部からの前記第1のアドレスの組と前記第2の命令保持部からの前記第2のアドレスの組とを、前記複数の演算部に対し、サイクル毎に交互に出力する請求項1又は2記載の演算処理装置。
  4. 前記演算処理は、積和演算処理である請求項1〜3の何れか1項に記載の演算処理装置。
  5. 前記演算処理は、オペランドの値を比較する比較演算である請求項1〜3の何れか1項に記載の演算処理装置。
  6. 演算処理装置の制御方法において、
    前記演算処理装置が有するデコード部が、命令をデコードし、
    前記デコード部がデコードした命令が、演算処理の対象であるオペランドを複数含むオペランドの組について、複数のオペランドの組に対する演算処理を並列に複数回実行する命令である場合、前記演算処理装置が有するアドレス生成部が、各オペランドの組に含まれる複数のオペランドに対する所定のアドレス変位に基づき、各回の演算処理の各オペランドの組に対応するアドレスの組をそれぞれ生成し、
    前記演算処理装置が有する複数のアドレス保持部が、前記アドレス生成部が生成した各オペランドの組に対応するアドレスの組を、各演算部に対応してそれぞれ保持し、
    前記演算処理装置が有する複数の演算部が、前記複数のアドレス保持部がそれぞれ出力するアドレスの組に基づいてそれぞれ取得したオペランドの組に対する演算処理を並列に行う演算処理装置の制御方法。
JP2016128447A 2016-06-29 2016-06-29 演算処理装置及び演算処理装置の制御方法 Active JP6712052B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2016128447A JP6712052B2 (ja) 2016-06-29 2016-06-29 演算処理装置及び演算処理装置の制御方法
EP17172714.2A EP3264261B1 (en) 2016-06-29 2017-05-24 Processor and control method of processor
US15/606,050 US10754652B2 (en) 2016-06-29 2017-05-26 Processor and control method of processor for address generating and address displacement

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016128447A JP6712052B2 (ja) 2016-06-29 2016-06-29 演算処理装置及び演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2018005369A true JP2018005369A (ja) 2018-01-11
JP6712052B2 JP6712052B2 (ja) 2020-06-17

Family

ID=58772746

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016128447A Active JP6712052B2 (ja) 2016-06-29 2016-06-29 演算処理装置及び演算処理装置の制御方法

Country Status (3)

Country Link
US (1) US10754652B2 (ja)
EP (1) EP3264261B1 (ja)
JP (1) JP6712052B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210099991A (ko) * 2020-02-05 2021-08-13 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. 딥 러닝 처리 장치, 방법, 기기 및 저장 매체
JP7387017B2 (ja) 2020-07-01 2023-11-27 テンセント・テクノロジー・(シェンジェン)・カンパニー・リミテッド アドレス生成方法及びユニット、深層学習処理器、チップ、電子機器並びにコンピュータプログラム

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110858127B (zh) * 2018-08-22 2023-09-12 慧荣科技股份有限公司 数据存储装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0721018A (ja) * 1993-07-05 1995-01-24 Sanyo Electric Co Ltd マイクロプログラム制御方式の中央処理装置
JP2001184336A (ja) * 1999-12-17 2001-07-06 Samsung Electronics Co Ltd マトリックス演算装置及びマトリックス演算機能を有するデジタル信号処理装置
JP2005301918A (ja) * 2004-04-15 2005-10-27 Sony Computer Entertainment Inc 描画処理装置および描画処理方法、ならびに情報処理装置および情報処理方法
WO2009072605A1 (ja) * 2007-12-06 2009-06-11 Nec Corporation アレイプロセッサ向けアドレス生成装置と方法並びにアレイプロセッサ
US20110153707A1 (en) * 2009-12-23 2011-06-23 Boris Ginzburg Multiplying and adding matrices
JP2013196654A (ja) * 2012-03-22 2013-09-30 Fujitsu Ltd 演算処理装置

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3199205B2 (ja) * 1993-11-19 2001-08-13 株式会社日立製作所 並列演算装置
US6085302A (en) * 1996-04-17 2000-07-04 Advanced Micro Devices, Inc. Microprocessor having address generation units for efficient generation of memory operation addresses
DE60144022D1 (de) * 2000-11-06 2011-03-24 Broadcom Corp Umkonfigurierbares verarbeitungssystem und -verfahren
US6915411B2 (en) * 2002-07-18 2005-07-05 International Business Machines Corporation SIMD processor with concurrent operation of vector pointer datapath and vector computation datapath
US7093204B2 (en) * 2003-04-04 2006-08-15 Synplicity, Inc. Method and apparatus for automated synthesis of multi-channel circuits
US7366885B1 (en) * 2004-06-02 2008-04-29 Advanced Micro Devices, Inc. Method for optimizing loop control of microcoded instructions
US7330964B2 (en) * 2005-11-14 2008-02-12 Texas Instruments Incorporated Microprocessor with independent SIMD loop buffer
CN101341473B (zh) * 2005-12-20 2010-11-17 Nxp股份有限公司 具有共享存储体的多处理器电路
JP4934356B2 (ja) * 2006-06-20 2012-05-16 株式会社日立製作所 映像処理エンジンおよびそれを含む映像処理システム
WO2008006400A1 (en) * 2006-07-11 2008-01-17 Freescale Semiconductor, Inc. Microprocessor and method for register addressing therein
JP5034916B2 (ja) * 2007-12-10 2012-09-26 富士通セミコンダクター株式会社 性能評価モデル生成方法、システム性能評価方法、及び性能評価モデル生成装置
US9755994B2 (en) * 2012-05-21 2017-09-05 Nvidia Corporation Mechanism for tracking age of common resource requests within a resource management subsystem
US9619229B2 (en) * 2012-12-27 2017-04-11 Intel Corporation Collapsing of multiple nested loops, methods and instructions
JP6102645B2 (ja) 2013-09-11 2017-03-29 富士通株式会社 積和演算回路及び積和演算システム

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0721018A (ja) * 1993-07-05 1995-01-24 Sanyo Electric Co Ltd マイクロプログラム制御方式の中央処理装置
JP2001184336A (ja) * 1999-12-17 2001-07-06 Samsung Electronics Co Ltd マトリックス演算装置及びマトリックス演算機能を有するデジタル信号処理装置
JP2005301918A (ja) * 2004-04-15 2005-10-27 Sony Computer Entertainment Inc 描画処理装置および描画処理方法、ならびに情報処理装置および情報処理方法
WO2009072605A1 (ja) * 2007-12-06 2009-06-11 Nec Corporation アレイプロセッサ向けアドレス生成装置と方法並びにアレイプロセッサ
US20110153707A1 (en) * 2009-12-23 2011-06-23 Boris Ginzburg Multiplying and adding matrices
JP2013196654A (ja) * 2012-03-22 2013-09-30 Fujitsu Ltd 演算処理装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210099991A (ko) * 2020-02-05 2021-08-13 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. 딥 러닝 처리 장치, 방법, 기기 및 저장 매체
JP2021140733A (ja) * 2020-02-05 2021-09-16 ベイジン バイドゥ ネットコム サイエンス アンド テクノロジー カンパニー リミテッド 深層学習処理装置、方法、デバイス及び記憶媒体
JP7181264B2 (ja) 2020-02-05 2022-11-30 ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド 深層学習処理装置、方法、デバイス及び記憶媒体
KR102642849B1 (ko) 2020-02-05 2024-03-04 베이징 바이두 넷컴 사이언스 앤 테크놀로지 코., 엘티디. 딥 러닝 처리 장치, 방법, 기기 및 저장 매체
JP7387017B2 (ja) 2020-07-01 2023-11-27 テンセント・テクノロジー・(シェンジェン)・カンパニー・リミテッド アドレス生成方法及びユニット、深層学習処理器、チップ、電子機器並びにコンピュータプログラム

Also Published As

Publication number Publication date
JP6712052B2 (ja) 2020-06-17
EP3264261A3 (en) 2018-05-23
US20180004515A1 (en) 2018-01-04
EP3264261B1 (en) 2020-12-30
EP3264261A2 (en) 2018-01-03
US10754652B2 (en) 2020-08-25

Similar Documents

Publication Publication Date Title
EP3451162B1 (en) Device and method for use in executing matrix multiplication operations
US9355061B2 (en) Data processing apparatus and method for performing scan operations
US11175920B2 (en) Efficient work execution in a parallel computing system
CN109661647B (zh) 数据处理装置和方法
CN111381880B (zh) 一种处理器、介质和处理器的操作方法
US8307196B2 (en) Data processing system having bit exact instructions and methods therefor
CN111381939B (zh) 多线程处理器中的寄存器文件
CN108885550B (zh) 复数乘法指令
JP2007317179A (ja) 帯域幅要件が軽減された行列乗算
CN107315717B (zh) 一种用于执行向量四则运算的装置和方法
US9547493B2 (en) Self-timed user-extension instructions for a processing device
JP6933263B2 (ja) データ処理装置、ループ制御装置、データ処理方法、ループ制御方法およびプログラム
US9354893B2 (en) Device for offloading instructions and data from primary to secondary data path
JP6712052B2 (ja) 演算処理装置及び演算処理装置の制御方法
US11755320B2 (en) Compute array of a processor with mixed-precision numerical linear algebra support
CN114746840A (zh) 用于乘法和累加操作的处理器单元
US8055883B2 (en) Pipe scheduling for pipelines based on destination register number
JP4444305B2 (ja) 半導体装置
GB2523805A (en) Data processing apparatus and method for performing vector scan operation
JP2023502574A (ja) 演算論理回路レジスタの順序付け
JP2000181705A (ja) 命令制御装置
JP2010140398A (ja) データ処理装置及びデータ処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190311

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191127

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200107

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200303

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200428

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200511

R150 Certificate of patent or registration of utility model

Ref document number: 6712052

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150