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

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

Info

Publication number
JP2017228213A
JP2017228213A JP2016125576A JP2016125576A JP2017228213A JP 2017228213 A JP2017228213 A JP 2017228213A JP 2016125576 A JP2016125576 A JP 2016125576A JP 2016125576 A JP2016125576 A JP 2016125576A JP 2017228213 A JP2017228213 A JP 2017228213A
Authority
JP
Japan
Prior art keywords
instruction
repeat
instructions
register
operand
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
JP2016125576A
Other languages
English (en)
Inventor
雅人 中川
Masahito Nakagawa
雅人 中川
拓巳 丸山
Takumi Maruyama
拓巳 丸山
周史 山村
Shuji Yamamura
周史 山村
昌宏 藏本
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 JP2016125576A priority Critical patent/JP2017228213A/ja
Priority to US15/606,097 priority patent/US20170371655A1/en
Publication of JP2017228213A publication Critical patent/JP2017228213A/ja
Pending legal-status Critical Current

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/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching

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)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】演算命令を繰り返し実行させる場合に演算に寄与しない無駄な命令サイクルを削減し、演算の実行効率を向上させることができる演算処理装置を提供する。【解決手段】複数の命令を記憶する記憶部と、デコード対象の命令を計数値により特定する計数部と、記憶部から計数値に基づいて読み出された命令をデコードするデコード部と、デコードした命令が繰り返し命令である場合、繰り返し命令の後続の命令のうち、指定される命令数分の繰り返し対象命令を指定される繰り返し回数だけ繰り返すように計数部の計数値を更新させるとともに、2回目以降に繰り返し実行する繰り返し対象命令の被演算対象である更新オペランドを生成し、2回目以降の繰り返し対象命令を実行する場合、2回目以降の繰り返し対象命令のオペランドを生成した更新オペランドにそれぞれ更新して出力する制御部とを有する。【選択図】図2

Description

本発明は、演算処理装置及び演算処理装置の制御方法に関する。
演算処理装置としてのプロセッサにおいて、複数の演算命令を繰り返し実行させる繰り返し演算処理は、例えば図14(A)に示すように実装されている。すなわち、(1)演算データの参照先オフセットであるデータ参照先の初期設定P1401、(2)演算命令P1402、(3)データ参照先の更新P1403、(4)繰り返しカウンタの減算命令P1404、(5)繰り返し分岐命令P1405の5つのフェーズで実装されている。
例えば、図14(A)に示したフローで演算を行うように演算器を実装した場合、実際に繰り返される4つのフェーズP1402〜P1405のうち、実質的に演算を行うフェーズは(2)演算命令P1402のみである。各フェーズの処理に1サイクル以上を要するため、1回の演算命令あたり最低でも4サイクルを必要とし、演算の実行効率が25%以下となり演算器を効果的に使用できない。
例えば、多数の浮動小数点レジスタを有するプロセッサにおいて、図14(B)に示すように個々に独立した浮動小数点レジスタに対し、レジスタ番号を1ずつ進めて乗算を繰り返し行い、64回の乗算を行う処理を考える。図14(C)にコーディング例を示すように、演算に使用する浮動小数点レジスタ番号を汎用レジスタに格納して、演算命令から間接参照させて演算を行い、演算命令を行う毎に汎用レジスタに格納する値を更新することで、個々の64回の乗算が行える。
図14(C)において、命令mulが(2)演算命令P1402に対応し、3つの命令addが(3)データ参照先の更新P1403に対応し、命令subが(4)繰り返しカウンタの減算命令P1404に対応し、命令brnzaが(5)繰り返し分岐命令P1405に対応する。この場合、ループ処理で繰り返される命令数は6命令であり、各命令の処理が1サイクルで実行できたとしても、6サイクルに1回しか演算命令を実行することができない。
繰り返し演算処理を実行させる場合の演算の実行効率を改善するため、対象の命令を繰り返し実行させる繰り返し命令(リピート命令)を持つプロセッサが提案されている(例えば、特許文献1〜3参照)。
特開平5−120005号公報 特開2000−187583号公報 特開2001−175472号公報
繰り返し命令(リピート命令)を持つプロセッサとして、例えば命令デコード部の出力を記憶する記憶部を有し、命令デコード部が繰り返し命令であることを解読した場合、それより前の所定数の命令を記憶部から指定回数だけ繰り返し出力するプロセッサが提案されている。このプロセッサでは、繰り返し命令以降は、記憶部に保持した命令列を隙間なく指定回数だけ繰り返し出力するため、図15(A)に示すように繰り返しカウンタの減算命令及び繰り返し分岐命令は削減される。繰り返し演算処理は、(1)データ参照先の初期設定P1501、(2)演算命令P1502、(3)データ参照先の更新P1503の3つのフェーズで実装される。
例えば、図14(B)に示した処理を行う場合、図15(B)にコーディング例を示すように命令sub及び命令brnzaが削減される。ループ処理で繰り返される命令数は4命令であり、各命令の処理が1サイクルで実行できたとしても、4サイクルに1回しか演算命令を実行することができない。このように繰り返し命令(リピート命令)を適用した場合でも演算に寄与しない無駄な命令サイクルが存在して演算の実行効率を改善できないことがある。1つの側面では、本発明の目的は、演算命令を繰り返し実行させる場合に演算に寄与しない無駄な命令サイクルを削減し、演算の実行効率を向上させることができる演算処理装置を提供することにある。
演算処理装置の一態様は、複数の命令を記憶する記憶部と、デコード対象の命令を計数値により特定する計数部と、記憶部から計数値に基づいて読み出された命令をデコードするデコード部と、命令に係る制御を行う制御部とを有する。制御部は、デコード部がデコードした命令が繰り返し命令である場合、繰り返し命令の後続の命令のうち、指定される命令数分の繰り返し対象命令を指定される繰り返し回数だけ繰り返すように計数部の計数値を更新させるとともに、2回目以降に繰り返し実行する繰り返し対象命令の被演算対象である更新オペランドを生成し、2回目以降の繰り返し対象命令を実行する場合、2回目以降の繰り返し対象命令のオペランドを生成した更新オペランドにそれぞれ更新して出力する。
発明の一態様においては、演算命令を繰り返し実行させる場合に演算に寄与しないデータ参照先の更新や分岐に係る処理を行う命令サイクルを削減し、演算の実行効率を向上させることができる。
第1の実施形態における演算処理装置の構成例を示す図である。 第1の実施形態における命令制御部の構成例を示す図である。 第1の実施形態におけるリピート命令の処理を示す図である。 第1の実施形態におけるリピート命令の実装例を示す図である。 第1の実施形態におけるオペランド更新バッファを説明する図である。 第1の実施形態におけるリピート命令の処理例を示す図である。 図6に示したリピート命令でのオペランド更新バッファの使用例を示す図である。 第1の実施形態におけるプログラムカウンタ制御部の構成例を示す図である。 図6に示したリピート命令の処理例を示すタイムチャートである。 第2の実施形態におけるプログラムカウンタ制御部の構成例を示す図である。 第2の実施形態における制御レジスタセットの選択論理を示す図である。 第2の実施形態におけるリピート命令の処理例を示す図である。 図12に示したリピート命令の処理例を示すタイムチャートである。 従来の繰り返し演算処理の例を示す図である。 従来の繰り返し演算処理の他の例を示す図である。
以下、本発明の実施形態を図面に基づいて説明する。
(第1の実施形態)
本発明の第1の実施形態について説明する。
図1は、第1の実施形態における演算処理装置としてのプロセッサの構成例を示す図である。本実施形態におけるプロセッサ100は、命令フェッチステージ、命令デコードステージ、レジスタリードステージ、及び命令処理ステージのパイプライン構成を有するプロセッサである。
命令フェッチステージでは、プログラムカウンタ(PC)101の値に基づいて、命令列が格納されている命令領域102から命令を読み出す。本実施形態におけるプロセッサが実行可能な命令には、後続の所定数の命令を指定回数だけ繰り返し実行させる繰り返し命令(リピート命令)を含む。命令デコードステージでは、命令フェッチステージにおいて読み出した命令をデコード部103がデコードする。
デコードした結果、命令が整数演算命令である場合、レジスタリードステージでは、汎用レジスタ104や即値データレジスタ108からデータを読み出し、命令処理ステージでは、読み出したデータ等を用いて整数演算処理部105が命令によって指示された演算処理を行う。デコードした結果、命令が浮動小数点演算命令である場合、レジスタリードステージでは、浮動小数点レジスタ106や即値データレジスタ108からデータを読み出し、命令処理ステージでは、読み出したデータ等を用いて浮動小数点演算処理部107が命令によって指示された演算処理を行う。
また、デコードした結果、命令がロード命令又はストア命令である場合、レジスタリードステージでは、汎用レジスタ104や即値データレジスタ108からデータを読み出し、命令処理ステージでは、読み出したデータ等に基づいてアドレスを生成してロード処理部109又はストア処理部110がメモリ120に対するロード処理又はストア処理を行う。ロード処理によりメモリ120から読み出されたデータは、例えば汎用レジスタ104や浮動小数点レジスタ106に格納される。また、命令デコード部230によりデコードした結果、命令が分岐命令である場合、レジスタリードステージでは、汎用レジスタ104や即値データレジスタ108からデータを読み出し、命令処理ステージでは、読み出したデータ等に基づいて分岐処理部111が分岐処理を行い、処理結果に応じてプログラムカウンタ101の値を適宜更新する。
図2は、本実施形態におけるプロセッサにおいて、実行する命令に係る制御を行う命令制御部の構成例を示す図である。本実施形態における命令制御部は、プログラムカウンタ制御部210、命令デコード部230、及びリピート制御部240を有する。
プログラムカウンタ制御部210は、プログラムカウンタ211に係る制御を行う。プログラムカウンタ制御部210は、通常はサイクル毎に命令バイト数の値だけ増加させるようにプログラムカウンタ211の値を制御し、分岐命令である場合には処理結果に応じてプログラムカウンタ211の値を制御する。
プログラムカウンタ制御部210は、命令デコード部230によりデコードした結果、リピート命令である場合、命令デコード部230からの信号SGN、SGRに基づいて、次の命令である後続命令から指定個数Nの繰り返し対象命令を指定回数Rだけ繰り返すようにプログラムカウンタ211の値を更新する制御を行う。また、プログラムカウンタ制御部210は、リピート命令である場合、リピート制御部240に対して、実行する繰り返し対象命令のオペランドのオペランド更新バッファ241における格納場所を示すアドレス情報を信号SADにより通知するとともに、実行した繰り返し回数を信号RCNTにより通知する。
命令デコード部230は、プログラムカウンタ211の値に基づいて命令領域220から読み出された命令をデコードする。命令デコード部230は、デコードした結果、命令がリピート命令以外の命令231である場合、命令のオペコード(OpCode)、オペランド(Operand)、及びオペランドのステップ数(step)をリピート制御部240に供給する。
また、命令デコード部230は、命令デコード部230によりデコードした結果、命令がリピート命令232である場合、プログラムカウンタ制御部210に対して、命令がリピート命令であることを信号SGRPTにより通知するとともに、リピート命令により指定される繰り返す命令数N及び繰り返し回数Rを信号SGN、SGRによりそれぞれ通知する。なお、信号SGN、SGRは、リピート命令により指定可能な命令数N及び繰り返し回数Rに応じたビット幅を有する。
リピート制御部240は、オペランド更新バッファ241、加算器242、及びセレクタ243を有する。オペランド更新バッファ241は、複数のエントリを有し、リピート命令によって繰り返し実行される繰り返し対象命令のオペランドを格納する。オペランド更新バッファ241は、プログラムカウンタ制御部210からの信号SADが指定するエントリに格納されている値を、実行する繰り返し対象命令のオペランドとして出力する。また、オペランド更新バッファ241は、実行する繰り返し対象命令のオペランドとその繰り返し対象命令のオペランドのステップ数(step)とを加算器242で加算した値を後続命令の更新オペランドとして、プログラムカウンタ制御部210からの信号SADが指定するエントリに格納する。
セレクタ243は、プログラムカウンタ制御部210からの信号RCNTに基づいて、命令デコード部230から供給されるオペランド又はオペランド更新バッファ241から供給されるオペランドを選択する。具体的には、セレクタ243は、リピート命令によって繰り返し対象命令を繰り返し実行されている期間であって、かつ信号RCNTにより繰り返し回数が2回目以上であることが示された場合、オペランド更新バッファ241からの更新オペランドを選択し、それ以外は命令デコード部230からのオペランドを選択する。そして、リピート制御部240は、セレクタ243により選択されたオペランドと命令デコード部230から供給されるオペコードと結合した命令244を命令処理部へ出力する。
このようにオペランド更新バッファ241を設け、リピート命令によって繰り返される繰り返し対象命令の更新オペランドをすべて保持するとともに、繰り返し対象命令を実行する度に繰り返し対象命令に指定されたステップ数を加算器242により加算することで繰り返し対象命令のオペランドを更新オペランドに更新する。そして、リピート命令による2回目以降の繰り返し対象命令の繰り返しでは、繰り返し対象命令のオペランドをオペランド更新バッファ241が格納する更新オペランドに置き換えて命令を出力する。これにより、リピート命令を用いた繰り返し演算処理において、データ参照先の更新を行うための命令が不要となり、演算に寄与しない無駄な命令サイクルを削減することができる。
例えば、本実施形態におけるプロセッサにおいて、図14(B)に示した処理を行う場合、図3(A)にコーディング例を示すようにリピート命令rep及び演算命令mulで実現でき、図3(B)に示すように繰り返し演算処理は、(1)リピート命令P301、(2)演算命令P302の2つのフェーズで実装できる。このとき、ループ処理で繰り返される命令は演算命令だけになり、毎サイクル連続で演算器に演算指示を出すことが可能になる。このように本実施形態におけるプロセッサによれば、繰り返し演算処理を実行させる場合、演算に寄与しないデータ参照先の更新や分岐に係る処理を行う命令サイクルを削減でき、繰り返し演算処理全体での演算の実行効率を向上させることができる。
なお、図3(A)に示す命令<rep 1, 64>は、後続の1つの命令を64回繰り返し実行することを示す。また、命令<mul %f0, %f64, %f128, 1, 1, 1>は、オペランドが%f0、%f64、%f164、それぞれのオペランドのステップ数が1である演算命令であり、浮動小数点レジスタ%f0、%f64に格納されている値を乗算した結果を浮動小数点レジスタ%f128に格納し、オペランド%f0、%f64、%f128を+1ずつ増加させて同様の演算を行うことを示す。
図4は、リピート命令repの実装例を示す図である。図4(A)には、リピート命令repによる繰り返し回数を汎用レジスタgsrc2から取得する例を示しており、命令データには、リピート命令repのオペコードopcode、繰り返す命令数length、レジスタアドレスsrc2を含む。このリピート命令repでは、後続の命令うち、命令数lengthで指定した命令数分の繰り返し対象命令を、汎用レジスタgsrc2から取得した値の回数だけ繰り返す。
また、図4(B)には、リピート命令repによる繰り返し回数を命令中に指定する例を示しており、命令データには、リピート命令repのオペコードopcode、繰り返す命令数length、繰り返し回数countを含む。このリピート命令repでは、後続の命令のうち、命令数lengthで指定した命令数分の繰り返し対象命令を、繰り返し回数countで指定した回数だけ繰り返す。
なお、前述したものに限らず、例えば繰り返す命令数を汎用レジスタから取得するようにしてもよい。また、リピート命令repにおいて、繰り返す命令数及び繰り返し回数の少なくとも一方の値が0である場合、そのリピート命令repはNop(no operation)処理となり、次の命令から処理が継続される。
図5は、第1の実施形態におけるオペランド更新バッファ241を説明する図である。最大で2つのソース(src1、src2)と1つのディスティネーション(dst)との3つのオペランドの演算命令をプロセッサがサポートする場合、オペランド更新バッファ241は、図5に示すように各エントリにソースsrc1が格納されるフィールド501、ソースsrc2が格納されるフィールド502、ディスティネーションdstが格納されるフィールド503を有する。
また、オペランド更新バッファ241のエントリは、リピート命令によって繰り返される繰り返し対象命令の各々に対して割り当てられる。例えば図6に示すように命令0〜命令7の8個の命令をリピート命令repによって繰り返す場合、繰り返される命令0〜命令7のオペランドは、図7に示すようにオペランド更新バッファ241に格納される。すなわち、命令0のオペランドがエントリ700に格納され、命令1のオペランドがエントリ701に格納される。他の命令2〜命令7のオペランドも同様に、繰り返される繰り返し対象命令の実行順序に従って、それぞれエントリ702〜707に格納される。
なお、本例においては、オペランド更新バッファ241が128個のエントリを有する例を示しているが、これは一例であり、プロセッサの仕様等に応じて適切な数のエントリを設ければよい。また、オペランド更新バッファ241が128個のエントリを有する場合、プログラムカウンタ制御部210からの信号SADのビット幅は少なくとも7ビットである。すなわち、信号SADは、オペランド更新バッファ241が有するエントリを一意に指定できるビット幅を有していればよい。
次に、第1の実施形態におけるプログラムカウンタ制御部210について説明する。図8は、プログラムカウンタ制御部210の構成例を示す図である。プログラムカウンタ制御部210は、PCレジスタ801、スタートPCレジスタ802、繰り返し指定命令数レジスタ803、繰り返し実行命令数レジスタ804、繰り返し回数レジスタ805、セレクタ806、810、比較回路807、808、論理積演算回路(AND回路)809、及び論理和演算回路(OR回路)811を有する。
PCレジスタ801は、プログラムカウンタ値を保持する。スタートPCレジスタ802は、リピート命令によって繰り返す繰り返し対象命令の先頭の命令(リピート命令の次の命令)のプログラムカウンタ値を保持する。繰り返し指定命令数レジスタ803は、リピート命令によって指定された繰り返す命令数を保持する。リピート命令によって繰り返す命令数Nは、命令デコード部230から信号SGNにより通知される。
繰り返し実行命令数レジスタ804は、リピート命令によって繰り返し対象命令を繰り返しているとき、実行している繰り返し対象命令が繰り返す繰り返し対象命令の内の実行順序で何番目の命令であるかを保持する。なお、繰り返し対象命令のうち、実行順序で一番先の命令は0番目とし、以降、1番目、2番目、…とする。繰り返し回数レジスタ805は、リピート命令によって繰り返し対象命令を繰り返しているとき、繰り返した回数を保持する。なお、繰り返し回数レジスタ805は、リピート命令によって指定された繰り返し回数から実際に繰り返した回数を減算した値を保持する。繰り返し実行命令数レジスタ804及び繰り返し回数レジスタ805の値は、それぞれ信号SAD、RCNTとしてリピート制御部240に供給される。
セレクタ806は、命令デコード部230からの信号SGRPTに応じて、命令デコード部230から信号SGRにより通知される繰り返し回数R又は繰り返し回数レジスタ805の値から1減算した値の一方を出力する。セレクタ810は、AND回路809の出力信号pcselに応じて、スタートPCレジスタ802の値又はPCレジスタ801の値に命令バイト数を加算した値の一方を出力する。
比較回路807は、繰り返し指定命令数レジスタ803の値と繰り返し実行命令数レジスタ804の値に1加算した値とを比較し、一致する場合、出力信号cmp1を“1”にし、一致しない場合、出力信号cmpを“0”にする。比較回路808は、繰り返し回数レジスタ805の値から1減算した値に係る比較動作を行い、繰り返し回数レジスタ805の値から1減算した値が0の場合、出力信号cmp2を“1”にし、0より大きい場合、出力信号cmp2を“0”にする。
AND回路809は、比較回路807の出力信号cmp1、比較回路808の出力信号cmp2、及び命令デコード部230からの信号SGRPTが入力され、演算結果を出力する。AND回路809は、出力信号cmp1が“1”であり、かつ出力信号cmp2及び信号SGRPTが“0”である場合、出力信号pcselを“1”にし、それ以外の場合、出力信号pcselを“0”にする。すなわち、AND回路809は、繰り返し指定命令数レジスタ803の値と繰り返し実行命令数レジスタ804の値に1加算した値とが一致し、かつ繰り返し回数レジスタ805の値から1減算した値が0でなく、かつ命令デコード部230によりデコードされた命令がリピート命令でないとき、出力信号pcselを“1”にする。
OR回路811は、命令デコード部230からの信号SGRPT及び比較回路807の出力信号cmp1が入力され、演算結果を出力する。OR回路811は、信号SGRPT及び出力信号cmp1の一方が“1”である場合、出力信号updateを“1”にし、信号SGRPT及び出力信号cmp1がともに“0”である場合、出力信号updateを“0”にする。すなわち、OR回路811は、命令デコード部230によりデコードされた命令がリピート命令である場合、又は繰り返し指定命令数レジスタ803の値と繰り返し実行命令数レジスタ804の値に1加算した値とが一致した場合、出力信号updateを“1”にする。
命令デコード部230でリピート命令がデコードされたとき、命令がリピート命令であることを示すように信号SGRPTが“0”から“1”に変化する。プログラムカウンタ制御部210は、信号SGRPTが“0”から“1”に変化することで、リピート命令によって繰り返す繰り返し対象命令の先頭の命令(リピート命令の次の命令)のプログラムカウンタ値をスタートPCレジスタ802に保持し、リピート命令によって繰り返す命令数Nを繰り返し指定命令数レジスタ803に保持する。また、信号SGRPTが“1”になることでOR回路811の出力信号updateが“1”になり、リピート命令による繰り返し回数Rを繰り返し回数レジスタ805に保持し、繰り返し実行命令数レジスタ804の値が0にリセットされる。
次のサイクルで信号SGRPTが“0”に変化すると、OR回路811の出力信号updateも“0”になる。そして、サイクル毎にPCレジスタ801の値に命令バイト数を加算してプログラムカウンタ値を順次更新し処理を行う。また、このとき、繰り返し実行命令数レジスタ804の値がサイクル毎に1ずつ加算され、繰り返し指定命令数レジスタ803の値に達すると、比較回路807の出力信号cmp1が“1”になる。
比較回路807の出力信号cmp1が“1”になったとき、リピート命令による繰り返し回数に達していなければ、AND回路809の出力信号pcselが“1”になることで、PCレジスタ801の値がスタートPCレジスタ802の値に更新される。また、比較回路807の出力信号cmp1が“1”になることでOR回路811の出力信号updateが“1”になり、繰り返し回数レジスタ805の値が1減算した値に更新され、繰り返し実行命令数レジスタ804の値が0にリセットされる。
次のサイクルで比較回路807の出力信号cmp1が“0”になると、OR回路811の出力信号updateが“0”になる。そして、サイクル毎にPCレジスタ801の値に命令バイト数を加算してプログラムカウンタ値を順次更新し処理を行い、繰り返し実行命令数レジスタ804の値が繰り返し指定命令数レジスタ803の値に達する度に、スタートPCレジスタ802の値でのPCレジスタ801の値の更新、繰り返し回数レジスタ805の値の1減算、及び繰り返し実行命令数レジスタ804の値の0リセットを行う。
前述した動作を繰り返し、比較回路807の出力信号cmp1が“1”になったときに、リピート命令による繰り返し回数に達し比較回路808の出力信号cmp2が“0であると、AND回路809の出力信号pcselは“0”のままである。したがって、PCレジスタ801の値がスタートPCレジスタ802の値で更新されることはなく、次の命令列の処理に移行する。なお、PCレジスタ801の値は、通常はサイクル毎に命令バイト数を加算するように更新され、PCレジスタ801の値に応じた命令の処理が実行される。
図9に、第1の実施形態におけるプロセッサにおいて、図6に示したリピート命令の処理、すなわちリピート命令に続く繰り返し対象命令である命令0〜命令7の8個の演算命令を64回繰り返し行う場合のタイムチャートを示す。クロックにおける0サイクル目でリピート命令repがデコードされて、1サイクル目〜8サイクル目において命令0〜命令7が順に実行され1回目のループ処理loop<1>が実行される。また、1サイクル目〜8サイクル目における1回目のループ処理loop<1>が実行されることで、オペランド更新バッファ241のエントリ0〜エントリ7には、命令0〜命令7の初期のオペランドに対して(ステップ数×1)を加算した値(更新オペランド)が格納される。
1サイクル目〜8サイクル目において1回目のループ処理loop<1>が実行された後、繰り返し回数レジスタ(count)の値が1減算されて63になり、PCレジスタ(PC)の値がスタートPCレジスタ(start PC)の値で更新される。そして、9サイクル目〜16サイクル目において命令0〜命令7が順に実行されて2回目のループ処理loop<2>が実行される。このとき、オペランド更新バッファ241のエントリ0〜エントリ7に格納されている値(更新オペランド)が命令0〜命令7のオペランドとして用いられて処理が実行される。また、9サイクル目〜16サイクル目における2回目のループ処理loop<2>が実行されることで、オペランド更新バッファ241のエントリ0〜エントリ7には、命令0〜命令7の初期のオペランドに対して(ステップ数×2)を加算した値が格納される。
以降、同様に処理を行い、63回目のループ処理が実行された後、繰り返し回数レジスタ(count)の値が1減算されて1になり、PCレジスタ(PC)の値がスタートPCレジスタ(start PC)の値で更新される。そして、505サイクル目〜512サイクル目において命令0〜命令7が順に実行されて64回目のループ処理loop<64>が実行される。このとき、オペランド更新バッファ241のエントリ0〜エントリ7に格納されている値、すなわち命令0〜命令7の初期のオペランドに対して(ステップ数×63)を加算した値が命令0〜命令7のオペランドとして用いられて処理が実行される。そして、505サイクル目〜512サイクル目における64回目のループ処理loop<64>が終了すると、次の命令列の処理に移行する。
(第2の実施形態)
次に、本発明の第2の実施形態について説明する。以下に説明する第2の実施形態は、リピート命令によるループ処理の内に他のリピート命令によるループ処理が入る、リピート命令による多重のループ処理を可能とするものである。以下では、第2の実施形態において、前述した第1の実施形態と異なる点についてのみ説明する。
図10は、第2の実施形態におけるプログラムカウンタ制御部210の構成例を示す図である。図10において、図8に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。プログラムカウンタ制御部210は、PCレジスタ801、スタートPCレジスタ802、繰り返し指定命令数レジスタ803、繰り返し実行命令数レジスタ804、繰り返し回数レジスタ805、セレクタ806、810、比較回路807、808、AND回路809、OR回路811、及び選択処理部1001を有する。
また、第2の実施形態におけるプログラムカウンタ制御部210は、スタートPCレジスタ802、繰り返し指定命令数レジスタ803、繰り返し実行命令数レジスタ804、及び繰り返し回数レジスタ805を1組とした制御レジスタセットを複数有しており、図10に示す例では8個の制御レジスタセットREG0〜REG7を有している。なお、図10に示す例は一例であり、許容するリピート命令によるループ処理の多重数に応じた数の制御レジスタセットを有していればよい。
また、PCレジスタ801、セレクタ806、810、比較回路807、808、AND回路809、及びOR回路811は、制御レジスタセットREG0〜REG7のそれぞれに対応して設ける必要はなく、選択処理部1001の出力信号regselにより選択されている制御レジスタセットREG0〜REG7について第1の実施形態と同様に制御を行えばよい。また、8個の制御レジスタセットREG0〜REG7を設けた場合、リピート制御部240のオペランド更新バッファ241のエントリ数も8倍に拡張し、それに合わせて信号SADのビット幅も拡張する。
ここで、本実施形態では、制御レジスタセットREG0〜REG7は、制御レジスタセットREG0、REG1、REG2、…の順に使用されるものとする。例えば、第1のリピート命令では制御レジスタセットREG0を使用し、第1のリピート命令内の第2のリピート命令では制御レジスタセットREG1を使用し、さらに第2のリピート命令内の第3のリピート命令では制御レジスタセットREG2を使用する。
選択処理部1001は、制御レジスタセットREG0〜REG7が有する繰り返し回数レジスタ805の値を評価し、図11に示す制御レジスタセットの選択論理に従って、制御レジスタセットREG0〜REG7の内から制御対象の制御レジスタセットを選択する。また、選択処理部1001は、選択した制御対象の制御レジスタセットの番号を繰り返し実行命令数レジスタ804の値と合わせて信号SADとしてリピート制御部240に出力する。
選択処理部1001は、例えば命令デコード部230からの信号SGRPTが“1”である、すなわちデコードされた命令がリピート命令である場合、繰り返し回数レジスタ805の値が0である(未使用である)制御レジスタセットREG0〜REG7の内から制御レジスタセットREG0、REG1、REG2、…、REG7の順で1つの制御レジスタセットを出力信号regselにより選択する。また、選択処理部1001は、命令デコード部230からの信号SGRPTが“0”である場合、繰り返し回数レジスタ805の値が0より大きい制御レジスタセットREG0〜REG7の内から制御レジスタセットREG7、REG6、REG5、…、REG0の順で1つの制御レジスタセットを出力信号regselにより選択する。したがって、命令デコード部230からの信号SGRPTが“0”である場合、例えば制御レジスタセットREG3が選択されている状態で繰り返し回数レジスタ805の値が0になると、次に制御レジスタセットREG2が選択されて制御が行われる。
このように制御することで、第2の実施形態におけるプロセッサは、複数の制御レジスタセットを設け、それらを切り替えて制御することで、リピート命令による多重のループ処理を実行することが可能となる。また、それぞれのリピート命令による動作は第1の実施形態と同様であるので、繰り返し演算処理を実行させる場合、演算に寄与しないデータ参照先の更新や分岐に係る処理を行う命令サイクルを削減でき、繰り返し演算処理全体での演算の実行効率を向上させることができる。
図13に、第2の実施形態におけるプロセッサにおいて、図12に示すリピート命令の処理を行う場合のタイムチャートを示す。図12に示す処理は、リピート命令<rep 7,3>によって命令0〜命令3、リピート命令<rep 2,4>、及び命令6〜命令7を繰り返し対象命令として3回繰り返し実行する際に、命令3と命令6との間にリピート命令<rep 2,4>によって命令4及び命令5を繰り返し対象命令として4回繰り返し実行する。すなわち、命令0〜命令3を実行し、命令4及び命令5を4回繰り返し実行し、命令6及び命令7を実行する一連の処理を3回繰り返し実行する。
クロックにおける0サイクル目でリピート命令<rep 7,3>がデコードされて、制御レジスタセットREG0を使用し、1サイクル目からリピート命令<rep 7,3>に係る1回目の第1のループ処理loop1<1>が実行される。また、1サイクル目からの1回目の第1のループ処理loop1<1>が実行されることで、オペランド更新バッファ241のエントリ0〜エントリ6には、命令0〜命令3、命令6〜命令7の初期のオペランドに対して(ステップ数×1)を加算した値(更新オペランド)が格納される。
この1回目の第1のループ処理loop1<1>において、命令3を実行した後の5サイクル目でリピート命令<rep 2,4>がデコードされて、制御対象の制御レジスタセットをREG0からREG1に切り替え、6サイクル目からリピート命令<rep 2,4>に係る1回目の第2のループ処理loop2<1>が実行される。また、6サイクル目からの1回目の第2のループ処理loop2<1>が実行されることで、オペランド更新バッファ241のエントリ128、129には、命令4、5の初期のオペランドに対して(ステップ数×1)を加算した値(更新オペランド)が格納される。
続いて、8サイクル目からリピート命令<rep 2,4>に係る2回目の第2のループ処理loop2<2>が実行され、オペランド更新バッファ241のエントリ128、129には、命令4、5の初期のオペランドに対して(ステップ数×2)を加算した値が格納される。同様にして、10サイクル目からリピート命令<rep 2,4>に係る3回目の第2のループ処理loop2<3>が実行され、12サイクル目からリピート命令<rep 2,4>に係る4回目の第2のループ処理loop2<4>が実行される。
12サイクル目からのリピート命令<rep 2,4>に係る4回目の第2のループ処理loop2<4>が終了した14サイクル目で制御対象の制御レジスタセットをREG1からREG0に切り替え、1回目の第1のループ処理loop1<1>に係る命令6及び命令7を実行する。
1回目の第1のループ処理loop1<1>が実行された後、第1のループ処理に係る制御レジスタセットREG0の繰り返し回数レジスタ(count)の値が1減算されて2になる。その後、16サイクル目において同様の処理を行い、2回目の第1のループ処理loop1<2>及びそれぞれの第1のループ処理における4回の第2のループ処理が実行される。このとき、オペランド更新バッファ241のエントリ0〜エントリ7、エントリ128、129には、次に繰り返し対象命令が実行される場合の更新オペランドが格納される。そして、45番目のサイクルにてリピート命令による命令7の処理が終了すると、次の命令列の処理に移行する。
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
210 プログラムカウンタ制御部
211 プログラムカウンタレジスタ
220 命令領域
230 命令デコード部
240 リピート制御部
241 オペランド更新バッファ
242 加算器
243 セレクタ

Claims (5)

  1. 複数の命令を記憶する記憶部と、
    デコード対象の命令を計数値により特定する計数部と、
    前記記憶部から前記計数値に基づいて読み出された命令をデコードするデコード部と、
    前記デコード部がデコードした命令が繰り返し命令である場合、前記繰り返し命令の後続の命令のうち、指定される命令数分の繰り返し対象命令を指定される繰り返し回数だけ繰り返すように前記計数部の計数値を更新させるとともに、2回目以降に繰り返し実行する繰り返し対象命令の被演算対象である更新オペランドを生成し、2回目以降の繰り返し対象命令を実行する場合、前記2回目以降の繰り返し対象命令のオペランドを生成した更新オペランドにそれぞれ更新して出力する制御部とを有する演算処理装置。
  2. 前記制御部は、
    複数のエントリを有するとともに前記複数のエントリのうち各繰り返し対象命令に割り当てたエントリの各々に繰り返し対象命令のオペランドを保持し、繰り返し対象命令をそれぞれ実行する度に前記複数のエントリの各々に格納した各オペランドが更新オペランドに更新される保持部を有し、
    各繰り返し対象命令を実行する場合、前記2回目以降の繰り返し対象命令の各オペランドを前記保持部に格納された更新オペランドに更新して出力する請求項1記載の演算処理装置。
  3. 各繰り返し対象命令において指定されるステップ数に基づいて、前記複数のエントリの各々に格納した各オペランドを更新する請求項2記載の演算処理装置。
  4. 前記制御部は、
    前記繰り返し命令の後続の命令の計数部の計数値を保持するレジスタを有し、
    前記繰り返し命令の後、前記命令数分の繰り返し対象命令を実行する毎に、実行する繰り返し命令の計数値を前記レジスタに保持した計数値に更新する請求項1〜3の何れか1項に記載の演算処理装置。
  5. 複数の命令を記憶する記憶部を有する演算処理装置の制御方法において、
    前記演算処理装置が有する計数部が、デコード対象の命令を計数値により特定し、
    前記演算処理装置が有するデコード部が、前記記憶部から前記計数値に基づいて読み出された命令をデコードし、
    前記デコード部がデコードした命令が繰り返し命令である場合、前記演算処理装置が有する制御部が、前記繰り返し命令の後続の命令のうち、指定される命令数分の繰り返し対象命令を指定される繰り返し回数だけ繰り返すように前記計数部の計数値を更新させるとともに、2回目以降に繰り返し実行する繰り返し対象命令の被演算対象である更新オペランドを生成し、2回目以降の繰り返し対象命令を実行する場合、前記2回目以降の繰り返し対象命令のオペランドを生成した更新オペランドにそれぞれ更新して出力する演算処理装置の制御方法。
JP2016125576A 2016-06-24 2016-06-24 演算処理装置及び演算処理装置の制御方法 Pending JP2017228213A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016125576A JP2017228213A (ja) 2016-06-24 2016-06-24 演算処理装置及び演算処理装置の制御方法
US15/606,097 US20170371655A1 (en) 2016-06-24 2017-05-26 Processor and control method of processor

Applications Claiming Priority (1)

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

Publications (1)

Publication Number Publication Date
JP2017228213A true JP2017228213A (ja) 2017-12-28

Family

ID=60676942

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016125576A Pending JP2017228213A (ja) 2016-06-24 2016-06-24 演算処理装置及び演算処理装置の制御方法

Country Status (2)

Country Link
US (1) US20170371655A1 (ja)
JP (1) JP2017228213A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020107306A (ja) * 2018-12-27 2020-07-09 グラフコアー リミテッドGraphcore Limited マルチスレッドプロセッサの命令キャッシュ

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108334633B (zh) * 2018-02-26 2020-09-15 平安普惠企业管理有限公司 数据更新方法、装置、计算机设备和存储介质
US11269633B1 (en) * 2021-06-07 2022-03-08 Nxp B.V. System and method for executing a number of NOP instructions after a repeated instruction

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59119449A (ja) * 1982-12-27 1984-07-10 Nec Corp くり返し命令処理装置
JPH04251332A (ja) * 1990-12-20 1992-09-07 Fuji Electric Co Ltd 演算処理装置
JPH04293124A (ja) * 1991-03-20 1992-10-16 Hitachi Ltd データ処理プロセッサ
JPH09212361A (ja) * 1996-02-07 1997-08-15 Mitsubishi Electric Corp データ処理装置およびデータ処理方法
JPH1097423A (ja) * 1996-09-20 1998-04-14 Hitachi Ltd ループ処理の並列実行制御に適したレジスタ構成を有するプロセッサ
JP2001273277A (ja) * 2000-02-29 2001-10-05 Internatl Business Mach Corp <Ibm> 演算処理システム、演算処理方法およびそのプログラム格納装置
JP2002229779A (ja) * 2001-02-02 2002-08-16 Mitsubishi Electric Corp 情報処理装置
JP2009054032A (ja) * 2007-08-28 2009-03-12 Toshiba Corp 並列プロセッサ
JP2013161453A (ja) * 2012-02-08 2013-08-19 Fujitsu Ltd プロセッサ

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7366885B1 (en) * 2004-06-02 2008-04-29 Advanced Micro Devices, Inc. Method for optimizing loop control of microcoded instructions
EP2041645B1 (en) * 2006-07-11 2016-12-07 Freescale Semiconductor, Inc. Microprocessor and method for register addressing therein
JP5159258B2 (ja) * 2007-11-06 2013-03-06 株式会社東芝 演算処理装置
US20100122066A1 (en) * 2008-11-12 2010-05-13 Freescale Semiconductor, Inc. Instruction method for facilitating efficient coding and instruction fetch of loop construct
US9619229B2 (en) * 2012-12-27 2017-04-11 Intel Corporation Collapsing of multiple nested loops, methods and instructions
US9170811B2 (en) * 2013-01-09 2015-10-27 King Fahd University Of Petroleum And Minerals Structured control instruction fetch unit
US20150227373A1 (en) * 2014-02-07 2015-08-13 King Fahd University Of Petroleum And Minerals Stop bits and predication for enhanced instruction stream control

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59119449A (ja) * 1982-12-27 1984-07-10 Nec Corp くり返し命令処理装置
JPH04251332A (ja) * 1990-12-20 1992-09-07 Fuji Electric Co Ltd 演算処理装置
JPH04293124A (ja) * 1991-03-20 1992-10-16 Hitachi Ltd データ処理プロセッサ
JPH09212361A (ja) * 1996-02-07 1997-08-15 Mitsubishi Electric Corp データ処理装置およびデータ処理方法
JPH1097423A (ja) * 1996-09-20 1998-04-14 Hitachi Ltd ループ処理の並列実行制御に適したレジスタ構成を有するプロセッサ
JP2001273277A (ja) * 2000-02-29 2001-10-05 Internatl Business Mach Corp <Ibm> 演算処理システム、演算処理方法およびそのプログラム格納装置
JP2002229779A (ja) * 2001-02-02 2002-08-16 Mitsubishi Electric Corp 情報処理装置
JP2009054032A (ja) * 2007-08-28 2009-03-12 Toshiba Corp 並列プロセッサ
JP2013161453A (ja) * 2012-02-08 2013-08-19 Fujitsu Ltd プロセッサ

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020107306A (ja) * 2018-12-27 2020-07-09 グラフコアー リミテッドGraphcore Limited マルチスレッドプロセッサの命令キャッシュ
US11567768B2 (en) 2018-12-27 2023-01-31 Graphcore Limited Repeat instruction for loading and/or executing code in a claimable repeat cache a specified number of times

Also Published As

Publication number Publication date
US20170371655A1 (en) 2017-12-28

Similar Documents

Publication Publication Date Title
EP2569694B1 (en) Conditional compare instruction
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
US8271571B2 (en) Microprocessor
KR20000076285A (ko) 기계 판독가능 매체 및 초대형 인스트럭션 워드 프로세서와, 컴퓨터 프로그램의 실행 방법 및 컴파일 방법
JP2002333978A (ja) Vliw型プロセッサ
JP2011090592A (ja) 情報処理装置とその命令デコーダ
JP2009163624A (ja) プロセッサ装置及び条件分岐処理方法
JP6933263B2 (ja) データ処理装置、ループ制御装置、データ処理方法、ループ制御方法およびプログラム
JP2017228213A (ja) 演算処理装置及び演算処理装置の制御方法
US20190391812A1 (en) Conditional execution specification of instructions using conditional extension slots in the same execute packet in a vliw processor
JP5130757B2 (ja) 演算処理装置及び演算処理装置の制御方法
CN101320324A (zh) 处理机装置及复合条件处理方法
JP6712052B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP2020502669A (ja) ベクトル生成命令
GB2523805A (en) Data processing apparatus and method for performing vector scan operation
JP2004062909A (ja) 複数の制御フローパスを有するソフトウェアパイプライン化ループのためのシステムおよび方法
JP2014164659A (ja) プロセッサ
JP3867804B2 (ja) 集積回路装置
JP3619343B2 (ja) データ処理装置と方法
JP2006285721A (ja) 演算処理装置および演算処理方法
JP5786719B2 (ja) ベクトルプロセッサ
WO2011086808A1 (ja) 情報処理装置
JP2004302647A (ja) ベクトルプロセッサおよびレジスタのアドレス指定方法
JP6060853B2 (ja) プロセッサおよびプロセッサの処理方法
JPH0876996A (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: 20200121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200218

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20200818