JP5240270B2 - プロセッサ及びベクトルロード命令の実行方法 - Google Patents

プロセッサ及びベクトルロード命令の実行方法 Download PDF

Info

Publication number
JP5240270B2
JP5240270B2 JP2010229362A JP2010229362A JP5240270B2 JP 5240270 B2 JP5240270 B2 JP 5240270B2 JP 2010229362 A JP2010229362 A JP 2010229362A JP 2010229362 A JP2010229362 A JP 2010229362A JP 5240270 B2 JP5240270 B2 JP 5240270B2
Authority
JP
Japan
Prior art keywords
vector
branch
instruction
unit
load
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.)
Expired - Fee Related
Application number
JP2010229362A
Other languages
English (en)
Other versions
JP2012083937A (ja
Inventor
雅夫 深川
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2010229362A priority Critical patent/JP5240270B2/ja
Priority to US13/240,614 priority patent/US8850167B2/en
Publication of JP2012083937A publication Critical patent/JP2012083937A/ja
Application granted granted Critical
Publication of JP5240270B2 publication Critical patent/JP5240270B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification

Landscapes

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

Description

本発明は、プロセッサ及びベクトルロード命令の実行方法に関し、特に、ベクトルロード命令を投機的に実行するためのプロセッサ及びベクトルロード命令の実行方法に関する。
一般に、ベクトル処理装置は、複数のベクトルレジスタと、ベクトル演算器とを備える。ここで、複数のベクトルレジスタは、主記憶装置からロードしたベクトルデータやベクトル演算中の中間結果などを保持する。また、ベクトル演算器は、ベクトルレジスタに保持されたベクトルデータに対する演算を行う。そして、上述したベクトル処理装置は、複数のベクトルレジスタとベクトル演算器とにより、大量のデータを高速に演算することができるようになっている。
また、一般的に、主記憶装置のアクセス速度は、ベクトル演算の速度に比べて遅い。そのため、上述したベクトル処理装置は、ベクトルデータのベクトルレジスタへのロードを高速化するために、主記憶装置とベクトルレジスタとの間にベクトルデータを一時的に格納するロードバッファを備えている。そして、上述したベクトル処理装置は、ベクトルロード命令の解読時に主記憶装置からロードバッファへのベクトルデータの読み出しを開始させている。
そして、特許文献1には、ロードバッファからベクトルレジスタへの転送を命令発行順でなく、ロードバッファに全要素が揃い、かつ、転送先のベクトルレジスタがビジー状態でないという条件が成立した順に実行することのできるベクトル処理装置に関する技術が開示されている。
特許文献1にかかるベクトル処理装置におけるベクトルロード命令の実行方法は、以下の流れである。まず、ベクトル処理装置は、ベクトルロードデータを一時的に格納するロードバッファの確保を行う。次に、ベクトル処理装置は、メモリアクセスを行う。そして、ベクトル処理装置は、メモリから受信されるベクトルデータの全要素をロードバッファに格納する。続いて、ベクトル処理装置は、ベクトルレジスタにデータの転送を行う。その後、ベクトル処理装置は、後続のベクトル命令を実行する。
また、一般に、パイプライン処理における分岐命令後のスカラ命令については、当該分岐命令における分岐先を予測する分岐予測処理を行うことで、パイプライン処理を効率的に行うことができる。その場合、分岐予測に基づく分岐先のスカラ命令を投機的に実行し、分岐予測に成功した場合には、当該投機的に実行されたスカラ命令を継続して実行することができ、処理の待ち時間を減らすことができる。また、仮に、分岐予測に失敗した場合であっても、新たに正しい分岐先を実行し直すことで正しい結果を得ることができる。
特許第3726092号公報
しかしながら、分岐命令後のベクトルロード命令について、単純に投機的な実行をすると、分岐予測に失敗した場合に、後続のベクトル命令が誤って使用してしまう可能性がある。例えば、投機的にベクトルロード命令を発行した場合、メモリアクセスによって得られたベクトルデータをロードバッファに格納後、例え、分岐予測に失敗した場合であっても、投機的な実行により取得されたベクトルデータがベクトルレジスタに転送されてしまう。
そのため、例えば、特許文献1にかかるベクトル処理装置において、分岐命令より後のベクトルロード命令を実行するには、分岐命令における分岐先の確定を待つ必要があった。つまり、特許文献1では、投機的にベクトルロード命令を実行することができず、メモリアクセスのレイテンシ分だけ性能が低下するという問題点があった。
本発明は、このような問題点を解決するためになされたものであり、ベクトルロード命令を投機的に実行して、メモリアクセスのレイテンシを隠蔽するためのプロセッサ及びベクトルロード命令の実行方法を提供することを目的とする。
本発明の第1の態様にかかるプロセッサは、分岐命令における分岐先の分岐予測に基づき、主記憶装置から読み出されたベクトルロード命令を発行する命令発行部と、前記発行されたベクトルロード命令に基づく複数のベクトルデータを前記主記憶装置から取得するための複数の取得要求の発行を開始するデータ取得部と、前記ベクトルロード命令に基づくベクトル演算に用いられるベクトルデータを保持するベクトルレジスタと、前記分岐命令による分岐先が確定した後に、前記分岐予測の成否を判定する判定部と、前記判定部により、前記分岐予測が成功したと判定された場合、前記複数の取得要求に基づく全てのベクトルデータを取得し終えた後に、前記ベクトルレジスタに対して当該全てのベクトルデータを転送し、前記分岐予測が失敗したと判定された場合、前記データ取得部により発行された取得要求により取得されたベクトルデータを廃棄するベクトルロード管理部と、を備える。
本発明の第2の態様にかかるベクトルロード命令の実行方法は、分岐命令における分岐先の分岐予測に基づき、主記憶装置から読み出されたベクトルロード命令を発行し、前記発行されたベクトルロード命令に基づく複数のベクトルデータを前記主記憶装置から取得するための複数の取得要求の発行を開始し、前記分岐命令による分岐先が確定した後に、前記分岐予測の成否を判定し、前記分岐予測が成功したと判定された場合、前記複数の取得要求に基づく全てのベクトルデータを取得し終えた後に、前記ベクトルロード命令に基づくベクトル演算に用いられるベクトルレジスタに対して当該全てのベクトルデータを転送し、前記分岐予測が失敗したと判定された場合、前記発行された取得要求により取得されたベクトルデータを廃棄する。
本発明により、ベクトルロード命令を投機的に実行して、メモリアクセスのレイテンシを隠蔽するためのプロセッサ及びベクトルロード命令の実行方法を提供することができる。
本発明の実施の形態1にかかるプロセッサの構成を示すブロック図である。 本発明の実施の形態1にかかるベクトルロード命令の実行方法の処理の流れを示すフローチャートである。 本発明の実施の形態2にかかるベクトル処理装置の構成を示すブロック図である。 本発明の実施の形態2にかかる命令制御部の動作を説明するためのフローチャートである。 本発明の実施の形態2にかかるベクトルロード管理部の構成の一例を示すブロック図である。 本発明の実施の形態2にかかるレジスタ設定部の動作を説明するためのフローチャートである。 本発明の実施の形態2にかかるライト部の動作を説明するためのフローチャートである。 本発明の実施の形態2にかかるベクトル処理装置の動作を説明するためのフローチャートである。 本発明の実施の形態3にかかるベクトルロード管理部の構成の一例を示すブロック図である。 本発明の実施の形態3にかかるレジスタ設定部の動作を説明するためのフローチャートである。 本発明の実施の形態3にかかるライト部の動作を説明するためのフローチャートである。
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
<発明の実施の形態1>
図1は、本発明の実施の形態1にかかるプロセッサ10の構成を示すブロック図である。プロセッサ10は、パイプライン処理に基づき、主記憶装置7から各種命令を読み出し、当該命令を実行する。主記憶装置7は、例えば、RAM(Random Access Memory)等の記憶装置である。プロセッサ10は、少なくとも命令発行部11と、データ取得部12と、判定部13と、ベクトルロード管理部14と、ベクトルレジスタ15とを備える。
命令発行部11は、分岐命令における分岐先の分岐予測に基づき、主記憶装置7から読み出されたベクトルロード命令を発行する。データ取得部12は、発行されたベクトルロード命令に基づく複数のベクトルデータを主記憶装置7から取得するための複数の取得要求の発行を開始する。ベクトルレジスタ15は、ベクトルロード命令に基づくベクトル演算に用いられるベクトルデータを保持する。判定部13は、分岐命令による分岐先が確定した後に、分岐予測の成否を判定する。ベクトルロード管理部14は、判定部13により分岐予測が成功したと判定された場合、複数の取得要求に基づく全てのベクトルデータを取得し終えた後に、ベクトルレジスタ15に対して当該全てのベクトルデータを転送する。また、ベクトルロード管理部14は、判定部13により分岐予測が失敗したと判定された場合、データ取得部12により発行された取得要求により取得されたベクトルデータを廃棄する。
図2は、本発明の実施の形態1にかかるベクトルロード命令の実行方法の処理の流れを示すフローチャートである。まず、命令発行部11は、分岐予測に基づくベクトルロード命令を発行する(S11)。すなわち、命令発行部11は、事前に、主記憶装置7から読み出した分岐命令について、分岐先を予測する。そして、命令発行部11は、当該予測した分岐先に基づき、主記憶装置7から命令を読み出す。ここでは、読み出された命令がベクトルロード命令であるものとする。
次に、データ取得部12は、ベクトルデータの取得要求を発行する(S12)。ここでは、ベクトルロード命令に指定された複数のベクトルデータのうち一部を主記憶装置7から取得するための取得要求が発行される。その後、データ取得部12は、当該取得要求のリプライとしてベクトルデータを取得する(S13)。
続いて、データ取得部12は、ベクトルロード命令に指定された全てのベクトルデータが取得済みか否かを判定する(S14)。未取得のベクトルデータが存在する場合、ステップS12へ進む。そして、全てのベクトルデータが取得済みとなった場合、ステップS15へ進む。
ここで、判定部13は、分岐予測の成否を判定する(S15)。尚、判定部13は、上述した分岐命令による分岐先が確定した後であれば、ステップS12乃至S14と並行して判定しても構わない。
ステップS15において、分岐予測が成功したと判定された場合、ベクトルロード管理部14は、取得されたベクトルデータをベクトルレジスタ15へ転送する(S16)。一方、ステップS15において、分岐予測が失敗したと判定された場合、ベクトルロード管理部14は、取得されたベクトルデータを廃棄する(S17)。つまり、この場合、ベクトルロード管理部14は、ベクトルレジスタ15への転送を行わない。
このように、本発明の実施の形態1により、ステップS11において投機的に実行されたベクトルロード命令について、分岐予測が成功した場合には、遅滞なく後続の処理を進めることができる。また、分岐予測が失敗した場合であっても、投機的に実行されたベクトルロード命令により取得されたベクトルデータを廃棄し、後続の処理対象から除外するため、誤ったデータによるベクトル命令を実行させることがない。つまり、処理結果の正確性を保つことができる。そのため、ベクトルロード命令を投機的に実行して、メモリアクセスのレイテンシを隠蔽することができる。
<発明の実施の形態2>
図3は、本発明の実施の形態2にかかるベクトル処理装置の構成を示すブロック図である。本発明の実施の形態2にかかるベクトル処理装置は、プロセッサ1と、主記憶装置7とを含む。
プロセッサ1と主記憶装置7とは、信号線101と、信号線102とによって相互に接続されている。信号線101は、主記憶装置7に記憶された命令をプロセッサ1から読み出すための信号線である。また、信号線102は、主記憶装置7に記憶されたベクトルデータ等をプロセッサ1からの読み出しや、プロセッサ1で生成したベクトルデータ等を主記憶装置7に書き込むための信号線である。尚、信号線102を多重化することで、複数のベクトルロード命令による主記憶装置7からのベクトルデータの読出し等を並列に行う事もできる。
プロセッサ1は、命令制御部2と、メモリアクセス処理部3と、プロセッサネットワーク部4と、ベクトル制御部5と、ベクトル処理部6とを含む。
命令制御部2は、主記憶装置7と信号線101で接続され、メモリアクセス処理部3と信号線103で接続され、ベクトル制御部5と信号線104で接続されている。また、命令制御部2は、命令解読部21と、スカラ処理部22とを備える。命令解読部21は、信号線101を通じて主記憶装置7から読み出した命令を解読する。また、スカラ処理部22は、解読された命令がスカラ命令である場合に、当該スカラ命令にかかる処理を実行する。
命令解読部21は、例えば、内部のレジスタ(不図示)等に、予め分岐レベルを保持しているものとする。分岐レベルとは、読み出された命令が、何個目の分岐命令の後の命令であるかを示すものである。尚、ここでは、分岐レベルの初期値を"0"とする。つまり、分岐レベルが"0"である場合は、当該命令は、分岐命令の外にあることを示す。また、分岐レベルが"1"である場合は、当該命令は、分岐命令の後であることを示す。さらに、分岐レベルが"2"以上である場合は、当該命令は、複数の分岐命令の後であることを示す。
また、命令解読部21は、解読した命令がスカラ命令である場合、当該スカラ命令をスカラ処理部22へ出力する。さらに、命令解読部21は、解読した命令がスカラ命令のうち条件分岐命令である場合、当該条件分岐命令における分岐先を予測する。そして、命令解読部21は、信号線101を通じて主記憶装置7から、当該予測した分岐先を次の命令として読み出す。ここで、命令解読部21は、以降の命令の分岐レベルに、例えば"1"を加算する。また、命令解読部21は、当該条件分岐命令における分岐先が確定し、予測した分岐先が正しかった場合、つまり、分岐予測に成功した場合、には、分岐レベルを"1"減算する。一方、命令解読部21は、分岐予測に失敗した場合、分岐レベルが"1"以上の命令を廃棄する。
そして、命令解読部21は、解読した命令がベクトル命令である場合には、そのベクトル命令を信号線104によりベクトル制御部5に出力する。更に、命令解読部21は、前記ベクトル命令がベクトルロード命令である場合は、信号線103を通じてメモリアクセス処理部3に対して当該ベクトルロード命令を出力する。ここで、ベクトルロード命令には、ロードするベクトルデータの主記憶装置7のアドレスを特定する情報(例えば開始アドレスとベクトルデータの間隔)、ベクトルデータの要素数、ベクトルデータをロードするベクトルレジスタの番号等が含まれている。特に、命令解読部21は、当該ベクトルロード命令に上述した分岐レベルを含めて出力する。
また、スカラ処理部22は、命令解読部21により解読されたスカラ命令が条件分岐命令である場合、当該条件分岐命令を実行し、分岐先を確定し、確定した分岐先が命令解読部21により予測した分岐先と等しいか否かを判定する。予測した分岐先と等しいと判定した場合、スカラ処理部22は、分岐予測結果を成功とする。また、予測した分岐先と等しくないと判定した場合、スカラ処理部22は、分岐予測結果を失敗とする。そして、スカラ処理部22は、信号線103を通じてメモリアクセス処理部3へ当該分岐予測結果を出力する。
ここで、図4のフローチャートを用いて、本発明の実施の形態2にかかる命令制御部2の動作を説明する。まず、命令解読部21は、主記憶装置7から命令を読み出す(S201)。ここでは、読み出した命令がスカラ命令であるものとする。次に、命令解読部21は、読み出した命令が条件分岐命令であるか否かを判定する(S202)。読み出した命令が条件分岐命令であると判定した場合、命令解読部21は、分岐レベルに"1"を加算する(S203)。そして、命令解読部21は、当該条件分岐命令による分岐先について分岐予測を行う(S204)。
その後、スカラ処理部22は、当該条件分岐命令を実行する(S205)。そして、スカラ処理部22は、分岐先を確定する(S206)。ここで、スカラ処理部22は、分岐予測した分岐先と確定した分岐先とが一致するか否かを判定する(S207)。一致すると判定した場合、スカラ処理部22は、分岐予測結果に"成功"を設定する(S208)。そして、スカラ処理部22は、メモリアクセス処理部3に対して分岐予測結果を出力する(S209)。このとき、命令解読部21は、分岐レベルを"1"減算する(S210)。
また、ステップS207において、一致しないと判定した場合、スカラ処理部22は、分岐予測結果に"失敗"を設定する(S211)。そして、スカラ処理部22は、メモリアクセス処理部3に対して分岐予測結果を出力する(S212)。このとき、命令解読部21は、分岐レベルが"1"以上の命令を廃棄する(S213)。
また、ステップS204の後、スカラ処理部22と並行して、命令解読部21は、分岐予測に基づく分岐先から命令を読み出す(S214)。そして、命令解読部21は、読み出した命令がベクトルロード命令であるか否かを判定する(S215)。ベクトルロード命令であると判定した場合、命令解読部21は、ステップS203により算出された分岐レベルを含めて当該ベクトルロード命令をメモリアクセス処理部3へ出力する(S216)。
ステップS202において、読み出した命令が条件分岐命令ではないと判定した場合、又は、ステップS215において、読み出した命令がベクトルロード命令ではないと判定した場合、命令解読部21及びスカラ処理部22は、命令に応じた通常の処理を行う(S217)。
このように、命令解読部21は、条件分岐命令について予測した分岐先がベクトルロード命令であっても、当該ベクトルロード命令を主記憶装置7から読み出す。そのため、ベクトル処理部6は、メモリアクセス処理部3及びベクトル制御部5を経由して当該ベクトルロード命令を受け付け、当該ベクトルロード命令を投機的に実行することとなる。これにより、ベクトル処理部6は、投機的に実行しているベクトルロード命令について、分岐予測結果に応じた処理を行うことができる。
図3に戻って説明する。メモリアクセス処理部3は、命令制御部2と信号線103で接続され、プロセッサネットワーク部4と信号線105で接続され、ベクトル制御部5と信号線106で接続され、ベクトル処理部6と信号線107で接続されている。また、メモリアクセス処理部3は、主記憶装置7へのアクセスを制御する部分である。
すなわち、メモリアクセス処理部3は、信号線103を通じて命令制御部2から送られてくるメモリアクセスにかかる命令を解読する。同時に、メモリアクセス処理部3は、プロセッサネットワーク部4の状態を管理する。そのため、メモリアクセス処理部3は、信号線105を通じてメモリアクセスリクエストを制御する信号をプロセッサネットワーク部4に送る。これにより、メモリアクセス処理部3は、プロセッサネットワーク部4における主記憶装置7との信号線102を介したデータの行き来と、ベクトル処理部6との信号線108を介したデータの行き来とを制御する。
また、メモリアクセス処理部3は、ロードバッファ管理部31を備える。ロードバッファ管理部31は、ベクトルロード命令に関して、ベクトル処理部6内に設けられている複数のロードバッファ64の使用状態の管理を行う。
具体的には、まず、メモリアクセス処理部3は、命令制御部2から信号線103を通じてベクトルロード命令を受信する。次に、ロードバッファ管理部31は、当該ベクトルロード命令用に空き状態の1つのロードバッファを割り当てる。つまり、ロードバッファ管理部31は、当該割り当てたロードバッファを使用中状態として管理する。このとき、メモリアクセス処理部3は、受信したベクトルロード命令に関する情報、特に分岐レベルを、信号線106を通じてベクトル制御部5へ出力する。また、メモリアクセス処理部3は、命令制御部2から分岐予測結果を受信した場合に、信号線106を通じてベクトル制御部5へ当該分岐予測結果を出力する。
そして、メモリアクセス処理部3は、信号線105を通じてプロセッサネットワーク部4に対して、メモリアクセスリクエストを発行する。このとき、メモリアクセス処理部3は、当該発行するメモリアクセスリクエストに、割り当てたロードバッファを一意に識別するバッファ番号を付随する。
同時に、メモリアクセス処理部3は、どのベクトルロード命令に対してどのバッファ番号のロードバッファを割り当てたかを信号線106を通じてベクトル制御部5に通知する。言い換えると、メモリアクセス処理部3は、ベクトルロード命令とロードバッファとの対応関係をベクトル制御部5に通知する。
また、メモリアクセス処理部3は、信号線107を通じてベクトル処理部6からバッファ番号を指定したバッファ解放通知を受ける。このとき、メモリアクセス処理部3は、そのバッファ番号のロードバッファ64を再び空き状態として管理する。
ベクトル制御部5は、命令制御部2と信号線104で接続され、メモリアクセス処理部3と信号線106で接続され、ベクトル処理部6と信号線109及び110で接続されている。そして、ベクトル制御部5は、ベクトル命令の発行制御を行う。
特に、ベクトル制御部5は、信号線106を通じてメモリアクセス処理部3から受け付けたベクトルロード命令に関する情報、特に分岐レベルを、信号線109を通じてベクトル処理部6へ出力する。また、ベクトル制御部5は、メモリアクセス処理部3から受け付けた分岐予測結果を、信号線109を通じてベクトル処理部6へ出力する。
尚、ベクトル制御部5のその他の具体的な構成は、例えば、特許文献1に開示されたものを用いても構わない。
プロセッサネットワーク部4は、主記憶装置7と信号線102で接続され、メモリアクセス処理部3と信号線105で接続され、ベクトル処理部6と信号線108で接続されている。また、プロセッサネットワーク部4は、メモリアクセス処理部3から与えられるメモリアクセスリクエストに応じて、主記憶装置7とベクトル処理部6との間でベクトルデータをやりとりする。このとき、メモリアクセスリクエストの投機又は非投機のいずれかにかかわらず、プロセッサネットワーク部4は、全要素分のメモリアクセスリクエストが主記憶装置7に発行される。
ベクトルロード命令にかかるメモリアクセスリクエストに関し、プロセッサネットワーク部4は、信号線108を通じてベクトル処理部6に対して、主記憶装置7から読み出したベクトルデータを構成する各要素を送出する。このとき、プロセッサネットワーク部4は、各要素に、メモリアクセスリクエストに付随するバッファ番号を付随させる。尚、信号線108を多重化することによって、複数のメモリアクセスリクエストにかかるベクトルデータを並行してベクトル処理部6に供給できるようにもできる。
ベクトル処理部6は、メモリアクセス処理部3と信号線107で接続され、プロセッサネットワーク部4と信号線108で接続され、ベクトル制御部5と信号線109及び110で接続されている。ベクトル処理部6は、ベクトルデータに対してベクトル演算を実行する機能を持つ。また、ベクトル処理部6は、信号線109を通じてベクトル制御部5から受け付けた分岐レベルと、分岐予測結果とに基づいて、当該ベクトルロード命令における投機又は非投機の状態を管理する。
ベクトル処理部6は、少なくとも1つのベクトルパイプライン演算器61を備える。ベクトルパイプライン演算器61は、複数のベクトルレジスタ62と、1つ以上のベクトル演算器63と、複数のロードバッファ64と、ベクトルロード管理部65と、クルスパスイッチ66とを含む。
複数のベクトルレジスタ62のそれぞれは、ベクトルデータを格納する。ベクトル演算器63は、複数のベクトルレジスタ62に格納されたベクトルデータに対してベクトル演算を行う。ロードバッファ64は、主記憶装置7から読み出されたベクトルデータを一時的に格納する。クロスバスイッチ回路66は、ベクトル演算器63及びロードバッファ64から出力されるベクトルデータをベクトルレジスタ62に振り分ける。尚、ベクトル演算されたベクトルデータを主記憶装置7にストアするストアバッファなど、ストアに関連する構成は、本発明と直接関係しないため図示を省略している。
ベクトルロード管理部65は、メモリアクセス処理部3と信号線107で接続され、プロセッサネットワーク部4と信号線108で接続され、ベクトル制御部5と信号線109及び110で接続されている。ロードバッファ64は、信号線108を通じて送られてきたベクトルデータの要素を、それに付随するバッファ番号のロードバッファ64に一時的に格納する。その後、ベクトルロード管理部65は、ロードバッファ64に格納されたベクトルデータをベクトルレジスタ62に転送する。
図5は、本発明の実施の形態2にかかるベクトルロード管理部65の構成の一例を示すブロック図である。ベクトルロード管理部65は、レジスタ群651と、レジスタ設定部652と、ライト部653と、リード部654とを含む。
レジスタ群651は、ロードバッファ64に1対1に対応するレジスタ651−0、・・・、651−nの集合で構成される。各レジスタ651−i(i=0〜n)は、ロードバッファ番号フィールド6511、分岐レベルフィールド6512、キャンセルフラグフィールド6513、ベクトルレジスタ(VAR)番号フィールド6514、ライト要素数フィールド6515、リード要素数フィールド6516及び使用可否フラグフィールド6517を有する。
ロードバッファ番号フィールド6511には、ロードバッファ64のバッファ番号が固定的に設定される。分岐レベルフィールド6512には、ロードバッファ番号を確保したベクトルロード命令に対応した分岐レベルが設定される。キャンセルフラグフィールド6513には、分岐レベルが"0"でなく、かつ、分岐予測の失敗が報告されたときに"1"が設定される。ベクトルレジスタ番号フィールド6514には、ベクトルロード命令でロードするベクトルデータを格納するベクトルレジスタ62の番号が設定される。ライト要素数フィールド6515及びリード要素数フィールド6516には、ベクトルロード命令情報中の要素数が設定される。使用可否フラグフィールド6517には、ロードバッファ64に格納したベクトルデータが使用可能、つまり、ベクトルレジスタ62へ転送可能である場合に"1"が設定される。
レジスタ設定部652は、ベクトル制御部5と信号線109で接続され、メモリアクセス処理部3と信号線107で接続されている。また、レジスタ設定部652は、レジスタ群651の初期設定や分岐レベルの管理を行う。また、レジスタ設定部652は、レジスタ651−iのバッファ解放通知を送る。これに伴い、メモリアクセス処理部3は、解放通知を受けたロードバッファ64の解放を行う。
ここで、レジスタ設定部652におけるレジスタ群651の初期設定処理について説明する。まず、レジスタ設定部652は、信号線109を通じてベクトル制御部5から、ロードバッファ番号、分岐レベル、ベクトルレジスタ番号、要素数を含むベクトルロード命令情報を受け付ける。このとき、レジスタ設定部652は、受け付けたロードバッファ番号をロードバッファ番号フィールド6511に持つレジスタ651−iを特定する。そして、レジスタ設定部652は、特定されたレジスタ651−iの分岐レベルフィールド6512に、受け付けたベクトルロード命令の分岐レベルを設定する。併せて、レジスタ設定部652は、ベクトルレジスタ番号フィールド6514に、受け付けたベクトルロード命令情報中のベクトルレジスタ番号を設定する。さらに、レジスタ設定部652は、ライト要素数フィールド6515及びリード要素数フィールド6516に、受け付けたベクトルロード命令情報中の要素数を設定する。また、レジスタ設定部652は、キャンセルフラグフィールド6513に"0"を設定する。
続いて、図6のフローチャートを用いて、本発明の実施の形態2にかかるレジスタ設定部652におけるレジスタ群651の更新処理を説明する。まず、レジスタ設定部652は、信号線109を通じてベクトル制御部5から、分岐予測結果を受け付ける(S31)。次に、レジスタ設定部652は、受け付けた分岐予測結果が成功であるか失敗であるかを判定する(S32)。そして、分岐予測結果が成功であると判定した場合、レジスタ設定部652は、分岐レベルフィールド6512の値を"1"減算する(S33)。また、ステップS32において、分岐予測結果が失敗であると判定した場合、レジスタ設定部652は、分岐レベルフィールド6512に"0"を設定し、キャンセルフラグフィールド6513に"1"を設定する(S34)。尚、ステップS33及びS34において、レジスタ設定部652は、レジスタ651−0〜651−nの全てのレジスタを対象として値を更新する。
図5に戻って説明する。ライト部653は、プロセッサネットワーク部4と信号線108で接続されている。また、ライト部653は、ベクトルデータのロードバッファ64への書き込みを行う。ここで、図7のフローチャートを用いて、本発明の実施の形態2にかかるライト部653の動作を説明する。
まず、ライト部653は、信号線108を通じてプロセッサネットワーク部4からベクトルデータの要素を受信する(S401)。次に、ライト部653は、受信した要素に付随するロードバッファ番号をロードバッファ番号フィールド6511に持つレジスタ651−iを特定する(S402)。そして、ライト部653は、当該特定したレジスタ651−iのキャンセルフラグフィールド6513が"0"であるか否かを判定する(S403)。ここで判定を行う理由は、ここまでの間に、分岐予測が失敗したことが判明していた場合、レジスタ設定部652によりキャンセルフラグフィールド6513が"1"に設定されている可能性があるためである(図6のステップS34)。
キャンセルフラグフィールド6513が"0"である場合、ライト部653は、受信した要素に付随するロードバッファ番号を持つロードバッファ64を特定する(S404)。そして、ライト部653は、当該特定したロードバッファ64に、当該ベクトルデータの要素を書き込む(S405)。その後、ライト部653は、当該特定したレジスタ651−iのライト要素数フィールド6515の値を、書き込んだ要素数分だけ減算する(S407)。
また、キャンセルフラグフィールド6513が"1"である場合、ライト部653は、当該特定したロードバッファ64に、当該ベクトルデータの要素の書き込みを行わずに、当該ベクトルデータの要素を廃棄する(S406)。その後、ライト部653は、当該特定したレジスタ651−iのライト要素数フィールド6515の値を、受信した要素数分だけ減算する(S407)。
そして、ライト部653は、全要素が取得済みか否か、つまり、全要素の書き込みが終了したか否かを判定する(S408)。未取得の要素が存在する場合、ステップS401へ進む。また、全要素が取得済みである場合、ステップS409へ進む。
尚、当該特定したレジスタ651−iの分岐レベルフィールド6512が"0"であるか否かにかかわらず、ライト部653は、当該特定したロードバッファ64に、その要素を書き込む。そして、ライト部653は、当該特定したレジスタ651−iのライト要素数フィールド6515の値を、書き込んだ要素数分だけ減算することとなる。
続いて、ライト部653は、当該特定したレジスタ651−iのキャンセルフラグフィールド6513が"0"であるか否かを判定する(S409)。ここでも、上述と同様に、分岐予測が失敗したことが判明していた場合、レジスタ設定部652によりキャンセルフラグフィールド6513が"1"に設定されている可能性があるためである。ステップS409において、キャンセルフラグフィールド6513が"0"であると判定された場合、ライト部653は、さらに、当該特定したレジスタ651−iの分岐レベルフィールド6512が"0"であるか否かを判定する(S410)。ここまでの間に、全ての分岐予測が成功したことが判明していた場合、レジスタ設定部652により分岐レベルフィールド6512が"0"まで減算されている可能性があるためである(図6のステップS33)。または、元々、非投機のベクトルロード命令である場合も分岐レベルフィールド6512が"0"である。
ステップS410において、分岐レベルフィールド6512が"0"以外であると判定された場合、ステップS409へ戻る。このとき、所定期間、処理を待機しても構わない。そして、その間に、全ての分岐予測が成功したことが判明した場合には、ステップS411へ進むことができる。
その場合、ライト部653は、当該特定したレジスタ651−iの使用可否フラグフィールド6517を"1"に設定する(S411)。尚、ステップS409において、キャンセルフラグフィールド6513が"1"であると判定された場合、ライト部653は、使用可否フラグフィールド6517の更新を行わない。
図5に戻って説明する。リード部654は、ベクトル制御部5と信号線110で接続されている。また、リード部654は、ロードバッファ64からベクトルレジスタ62へのベクトルデータの転送を行う。
リード部654は、レジスタ設定部652によりライト要素数フィールド6515が全要素数に初期設定されたレジスタ651−iについて、そのレジスタのロードバッファ番号フィールド6511に設定されたバッファ番号を持つロードバッファ64のデータを、そのレジスタのベクトルレジスタ番号フィールド6514に設定された番号のベクトルレジスタ62に転送する条件が満足されたか否かを判定する。
このとき、ベクトルデータの全要素がロードバッファ64に格納済みである(すなわち、使用可否フラグフィールド6517の値が"1"である)場合に、リード部654は、転送可能と判定する。ここで、レジスタ群651に使用可否フラグフィールド6517を用いなくてもよい。その場合、キャンセルフラグフィールド6513が"0"であり、ライト要素数フィールド6515が"0"である場合に、リード部654は、転送可能と判定すればよい。但し、レジスタ群651に使用可否フラグフィールド6517を用いることにより、当該判定処理のコストを軽減し、処理を高速に行うことができる。
リード部654は、あるレジスタ651−iについて転送可能と判定した場合、信号線110を通じてベクトル制御部5に対して、転送開始通知を送出する。このとき、リード部654は、そのレジスタ651−iのロードバッファ番号フィールド6511に設定されたバッファ番号及びベクトルレジスタ番号フィールド6512に設定されたベクトルレジスタ番号を、転送開始通知に含める。
その後、リード部654は、ロードバッファ番号フィールド6511に設定されたバッファ番号を持つロードバッファ64に格納されているデータを順次に読み出す。併せて、リード部654は、ベクトルレジスタ番号フィールド6514に設定された番号のベクトルレジスタ62にクロスバスイッチ回路66を通じて、読み出したデータを書き込む。このとき、リード部654は、ベクトルデータの1要素をロードバッファ64から読み出す毎に、リード要素数フィールド6516の値を1ずつ減算する。
リード要素数フィールド6516の値が"0"になった場合、転送完了となり、リード部654は、信号線110を通じてベクトル制御部5に対して、転送終了通知を送出する。このとき、リード部654は、そのレジスタ651−iのロードバッファ番号フィールド6511に設定されたバッファ番号及びベクトルレジスタ番号フィールド6514に設定されたベクトルレジスタ番号を、転送終了通知に含める。
同時に、リード部654は、信号線107を通じてメモリアクセス処理部3に対して、バッファ解放通知を送出する。このとき、リード部654は、そのレジスタ651−iのロードバッファ番号フィールド6511に設定されたバッファ番号を、バッファ解放通知に含める。そして、リード部654は、そのレジスタ651−iのフィールド6512〜6517を例えば、NULLに初期化する。
ここで、キャンセルフラグフィールド6513が"1"であり、ライト要素数フィールド6515が"0"である場合、投機的に実行されたベクトルロード命令がキャンセルされたことを示す。そのため、リード部654は、信号線110を通じてベクトル制御部5に対して、転送終了通知を送出する。このとき、リード部654は、そのレジスタ651−iのロードバッファ番号フィールド6511に設定されたバッファ番号及びベクトルレジスタ番号フィールド6514に設定されたベクトルレジスタ番号を、転送終了通知に含める。
同時に、リード部654は、信号線107を通じてメモリアクセス処理部3に対して、バッファ解放通知を送出する。このとき、リード部654は、そのレジスタ651−iのロードバッファ番号フィールド6511に設定されたバッファ番号を、バッファ解放通知に含める。そして、リード部654は、そのレジスタ651−iのフィールド6512〜6517を例えばNULLに初期化する。
次に、図8のフローチャートを用いて、図3の本発明の実施の形態2にかかるベクトル処理装置の動作を説明する。まず、プロセッサ1は、主記憶装置7から命令を読出し、命令解読部21によりスカラ命令かベクトル命令かの判定を行う(S501)。命令解読部21によりスカラ命令であると判定した場合、スカラ処理部22は、当該スカラ命令を実行する(S502)。
また、ステップS501において、命令解読部21によりベクトル命令であると判定した場合、メモリアクセス処理部3のロードバッファ管理部31は、ロードバッファの確保を行う(S503)。
そして、メモリアクセス処理部3は、プロセッサネットワーク部4を介して、主記憶装置7にベクトルロード命令を発行する(S504)。ベクトルロード命令の発行と同時に、ロードバッファ管理部31は、ベクトル制御部5を介してベクトル処理部6内のベクトルロード管理部65に、各種情報の登録を行う。例えば、レジスタ設定部652は、分岐レベルを分岐レベルフィールド6512に初期設定する。
この後、スカラ処理部22は、任意のタイミングで、ベクトルロード命令の前の分岐命令における分岐予測結果をベクトル処理部6に対して出力する。そして、ベクトルロード管理部65は、図6に示したように、スカラ処理部22から受け付けた分岐予測結果に応じて、分岐レベルフィールド6512及びキャンセルフラグフィールド6513を更新する。
ここで、ベクトルロード管理部65は、登録された各種情報内の分岐レベルフィールド6512を参照して、発行されたベクトルロード命令の分岐レベルの判定を行う(S505)。分岐レベルが"0"であった場合、ベクトルロード管理部65は、該当ベクトルロードの全要素数分のリプライがあったか否かの判定を行う(S506)。
全要素数のリプライが受信されていない場合、ベクトルロード管理部65は、全要素数分のリプライの受信を待ち、再度、ステップS506を実行する。また、全要素数のリプライが受信されていた場合、ベクトルロード管理部65は、ロードバッファ64からベクトルレジスタ62へクロスバスイッチ66を介してベクトルデータを転送する(S507)。続いて、ベクトルロード管理部65は、使用が完了したロードバッファ番号のロードバッファ解放通知をメモリアクセス処理部3に出力する。そして、ロードバッファ管理部31は、ロードバッファの解放を行う(S508)。
また、ステップS505において、分岐レベルが"0"でなかった場合、ベクトルロード管理部65は、該当ベクトルロードの全要素数分のリプライがあったか否かの判定を行う(S509)。全要素数のリプライが受信されていない場合、ベクトルロード管理部65は、全要素数分のリプライの受信を待ち、再度、ステップS509を実行する。
また、全要素数のリプライが受信されていた場合、ベクトルロード管理部65は、キャンセルフラグが"0"であるか否かを判定する(S510)。つまり、分岐予測が失敗したことにより、キャンセルフラグに"1"が設定されているか否かを判定する。キャンセルフラグが"1"である場合、ベクトルロード管理部65は、キャンセルされたロードバッファ番号のロードバッファ解放通知をメモリアクセス処理部3に出力する。そして、ロードバッファ管理部31は、ロードバッファの解放を行う(S508)。
ステップS510において、キャンセルフラグが"0"である場合、ベクトルロード管理部65は、分岐レベルが"0"であるか否かを判定する(S511)。分岐レベルが"0"でなかった場合、全ての分岐命令における分岐予測結果の受信を待ち、再度、ステップS510を実行する。
ステップS511において、分岐レベルが"0"であった場合、ベクトルロード管理部65は、ロードバッファ64からベクトルレジスタ62へクロスバスイッチ66を介してベクトルデータを転送する(S507)。続いて、ベクトルロード管理部65は、使用が完了したロードバッファ番号のロードバッファ解放通知をメモリアクセス処理部3に出力する。そして、ロードバッファ管理部31は、ロードバッファの解放を行う(S508)。
以上のことから、本発明の実施の形態2における効果を説明する。第1の効果は、投機的にベクトルロード命令を発行する事により、分岐予測が成功した場合にメモリアクセスのレイテンシが隠蔽できるため性能を向上できることである。第2の効果は、分岐予測失敗した場合は、ベクトルレジスタにデータの転送を行わないことにより、投機的に実行したベクトルロード命令が分岐予測失敗した場合であっても、後続の命令を問題なく実行できることである。
また、本発明の実施の形態2は、次のように言い換えることができる。まず、ベクトルロード管理部65は、実施の形態1にかかるベクトルロード管理部14に加えて、複数の取得要求により取得された複数のベクトルデータを保持するロードバッファ64を備える。そして、ベクトルロード管理部65は、取得要求によりベクトルデータが取得される度に、当該取得されたベクトルデータをロードバッファ64へ格納する。その後、分岐予測が成功したと判定された場合、ベクトルロード管理部65は、ロードバッファ64に格納された全てのベクトルデータを、ベクトルレジスタ62へ転送し、その後、ロードバッファ64を解放する。また、分岐予測が失敗したと判定された場合、ベクトルロード管理部65は、ロードバッファ64を解放する。
さらに、本発明の実施の形態2は、発行されたベクトルロード命令以前に複数の分岐命令が存在する場合に対応することができる。ベクトルロード管理部65は、分岐予測の成否の判定結果を記憶するレジスタ群651を備える。また、スカラ処理部22は、複数の分岐命令のそれぞれに対応する分岐先が確定する度に、分岐予測の成否を判定する。そして、ベクトルロード管理部65は、スカラ処理部22により分岐予測の成否が判定される度に、レジスタ群651に記憶された判定結果を更新する。その後、スカラ処理部22により全ての分岐命令における分岐予測の判定が完了し、かつ、全てのベクトルデータを取得し終えた後に、レジスタ群651に記憶された判定結果が全ての分岐予測の成功を示す場合に、リード部654は、全てのベクトルデータを転送する。
さらにまた、上述した判定結果は、分岐先が未確定である分岐命令数を示す分岐情報と、分岐予測が失敗したことを示す予測失敗情報とを含むものということができる。分岐情報とは、例えば、上述した分岐レベルに相当する。また、予測失敗情報とは、例えば、上述したキャンセルフラグに相当する。そして、命令制御部2は、ベクトルロード命令を発行する際に、当該ベクトルロード命令以前の分岐命令数を、メモリアクセス処理部3及びベクトル制御部5を介して、ベクトルロード管理部65へ通知する。そして、レジスタ設定部652は、命令発行部2から通知された分岐命令数を上述した分岐情報としてレジスタ群651へ格納する。また、スカラ処理部22により分岐予測が成功したと判定された場合、レジスタ設定部652は、レジスタ群651に格納された分岐情報を減算する。スカラ処理部22により分岐予測が失敗したと判定された場合、レジスタ設定部652は、レジスタ群651に格納された予測失敗情報を有効と更新する。例えば、キャンセルフラグに"1"が設定されたことが相当する。
また、スカラ処理部22により全ての分岐命令における分岐予測の判定が完了し、かつ、全てのベクトルデータを取得し終えた後に、レジスタ群651に記憶された分岐情報が"0"であり、かつ、予測失敗情報が無効である場合に、リード部654は、全てのベクトルデータを転送する。また、スカラ処理部22により全ての分岐命令における分岐予測の判定が完了し、かつ、全てのベクトルデータを取得し終えた後に、予測失敗情報が有効である場合に、リード部654は、メモリアクセス処理部3により発行された取得要求により取得されたベクトルデータを廃棄する。
<発明の実施の形態3>
続いて、本発明の実施の形態3にかかるベクトル処理装置は、実施の形態2にかかるベクトルロード管理部65に変更を加えたものである。すなわち、本発明の実施の形態3にかかるベクトルロード管理部65aは、分岐予測が失敗したと判定された以後に、メモリアクセス処理部3による未発行のメモリアクセスリクエストの発行を停止するものである。これにより、投機的に実行されたベクトルロード命令について、主記憶装置7からベクトルデータを取得中に分岐予測の失敗となった場合に、以後のベクトルデータの取得を行わず、ライト部653は、ロードバッファ64への書込みも行わない。そのため、実施の形態2に比べてより投機的に実行されたベクトルロード命令の停止を行うことができる。よって、処理の効率化を図ることができる。そこで、以下では、実施の形態2との違いを中心に説明する。また、本発明の実施の形態3のその他の構成は、実施の形態2と同等であるため、同一の符号を付し、詳細な説明を省略する。
図9は、本発明の実施の形態3にかかるベクトルロード管理部65aの構成の一例を示すブロック図である。ベクトルロード管理部65aは、実施の形態2のベクトルロード管理部65と比べて、レジスタ群651、レジスタ設定部652及びライト部653が、レジスタ群651a、レジスタ設定部652a及びライト部653aに置き換わったものである。レジスタ群651aは、ライト要素数フィールド6515及びリード要素数フィールド6516に代えて、要素数フィールド6518及び要素数カウンタフィールド6519を有する。要素数フィールド6518は、ベクトルロード命令の全要素数が設定される。要素数カウンタフィールド6519は、格納済み及び転送済みの要素数をカウントした値が設定される。
レジスタ設定部652aは、ベクトルロード命令情報を受け付けた場合、初期設定処理として、ベクトルロード情報中の要素数を要素数フィールド6518に設定し、要素数カウンタフィールド6519に"0"を設定する。
また、図10のフローチャートを用いて、本発明の実施の形態3にかかるレジスタ設定部652aにおけるレジスタ群651aの更新処理を説明する。尚、図6と同等の処理については、同一の符号を付し、説明を省略する。ここでは、ステップS32において、分岐予測結果が失敗であると判定した場合、レジスタ設定部652aは、メモリアクセス処理部3によりメモリアクセスリクエストの全てが発行済みか否かを判定する(S35)。つまり、レジスタ設定部652aは、メモリアクセス処理部3がベクトルロード命令の全要素を、プロセッサネットワーク部4に信号線105を通じて送出し終わったか否かを判定する。
ステップS35において、全てが発行済みと判定した場合、レジスタ設定部652aは、キャンセルフラグフィールド6513に"1"を設定する(S36)。このとき、分岐レベルフィールド6512が"0"以外のレジスタが更新の対象となる。
また、ステップS35において、未発行のメモリアクセスリクエストが存在すると判定した場合、すなわち、メモリアクセス処理部3が、分岐レベルが0でないベクトルロード命令の送出を行っている場合、レジスタ設定部652aは、要素数フィールド6518の値を、メモリアクセス処理部3が発行済みのメモリアクセスリクエスト数に更新する(S37)。また、レジスタ設定部652aは、メモリアクセス処理部3に対して、未発行のメモリアクセスリクエストの発行を停止させる(S38)。その後、レジスタ設定部652aは、キャンセルフラグフィールド6513に"1"を設定する(S36)。
図9に戻って説明する。ライト部653aは、プロセッサネットワーク部4と信号線108で接続されている。また、ライト部653aは、ベクトルデータのロードバッファ64への書き込みを行う。ここで、図11のフローチャートを用いて、本発明の実施の形態3にかかるライト部653aの動作を説明する。尚、図7と同等の処理については、同一の符号を付し、説明を省略する。
ここでは、ステップS405の後、ライト部653aは、特定したレジスタ651−iの要素数カウンタフィールド6519の値を、書き込んだ要素数分だけ加算する(S407a)。そして、ライト部653aは、要素数フィールド6518の値と、要素数カウンタフィールド6519の値とが一致するか否かを判定する(S408a)。一致しない場合、ステップS401へ進む。また、一致する場合、ステップS409へ進む。
ここで、主記憶装置7からベクトルデータを取得中に分岐予測の失敗となった場合には、図10のステップS37において、要素数フィールド6518の値が、発行済みのメモリアクセスリクエスト数に更新される。つまり、初期設定値より小さい値となる。一方、図11のステップS407aにおいて、要素数カウンタフィールド6519の値は、"0"から書込み要素数分が加算されていく、つまり、要素数カウンタフィールド6519の値については、発行済みのメモリアクセスリクエスト数のうち取得済みのベクトルデータの要素数に更新される。また、図10のステップS38において、分岐予測の失敗となった以後、メモリアクセス処理部3から未発行のメモリアクセスリクエストの発行が停止される。そのため、ライト部653aは、発行済みのメモリアクセスリクエストのリプライのみを受け付け、ロードバッファ64へベクトルデータを書き込むことになるが、投機的に実行されているベクトルロード命令に指定された全てのベクトルデータをロードバッファ64に格納する必要はなくなる。よって、ライト部653aが受信したベクトルデータをロードバッファ64へ格納する処理の回数を軽減することができる。また、このとき、図10のステップS36において、キャンセルフラグフィールド6513が"1"に設定されている。
そのため、主記憶装置7からベクトルデータを取得中に分岐予測の失敗となった場合には、ライト部653aは、使用可否フラグフィールド6517の設定は行わない。また、全ての分岐予測に成功した場合には、投機的に実行されているベクトルロード命令に指定された全てのベクトルデータをロードバッファ64に格納するまで、ステップS401乃至S408aが繰り返し実行される。その結果、初期設定の要素数フィールド6518の値と、要素数カウンタフィールド6519の値とが一致することとなる。よって、図7と同様に、ステップS411により、ライト部653aは、使用可否フラグフィールド6517を"1"に設定する。そして、以後、リード部654は、ロードバッファ64に格納されたベクトルデータをベクトルレジスタ62へ転送することで、正しい値によりベクトル演算を行わせることができる。
このように、本発明の実施の形態3では、分岐予測の失敗により投機的に実行されたベクトルロード命令がキャンセルされた場合に、ロードバッファの解放が早くなるケースが起こり得る。その場合、後続のベクトルロード命令の発行を早く行うことで、更なる性能向上を行う事ができる。また、余分なメモリアクセスリクエストを発行しないことによる消費電力低減という新たな効果を奏する。
<その他の発明の実施の形態>
本発明によるベクトルロード命令の投機実行方法は、分岐予測結果を待たずにベクトルロード命令を投機的に実行する事により、分岐予測が成功した際のロード命令によるメモリアクセスのレイテンシを隠蔽する事で性能を向上させることができる。また、分岐予測が失敗した場合に、投機的に実行したベクトルロード命令によるロードデータをベクトルレジスタに格納せずに廃棄する事により、誤ったデータによりベクトル命令の実行を防止することができる。
すなわち、ロードバッファの確保を行う際に、分岐レベルをベクトルロード管理部に通知する。そして、ベクトルロード管理部は、分岐レベルとキャンセルフラグを同時に管理する機能を備える。その後、分岐命令による分岐先が確定したときに、分岐予測の成否が判明する。分岐予測が成功した場合、ベクトルロード管理部は、管理している分岐レベルに対して、分岐レベルのデクリメントを行う。その結果、分岐レベルが"0"になった命令について、ベクトルロード管理部は、非投機の命令として処理する。また、分岐予測が失敗した場合、ベクトルロード管理部は、投機的な実行により確保したロードバッファに対応するキャンセルフラグを有効にする。これにより、以後、投機のベクトルロードのデータがメモリから転送されたとしても、ロードバッファからベクトルレジスタにデータを転送せずに廃棄する。そして、全要素分のデータの廃棄が完了した後、ロードバッファの解放を行う。これにより、後続のベクトル命令が誤ってデータを使用する事がなくなる。そのため、投機的にベクトルロードを実行できるようになる。よって、メモリアクセスのレイテンシを隠蔽する事ができる。
または、本発明にかかるプロセッサを次のように言うこともできる。当該プロセッサは、ロードバッファを確保し、投機的にベクトルロード命令を発行し、ロードデータをロードバッファに格納する。そして、全ロードデータのリプライが主記憶装置から返却され、当該発行されたベクトルロード命令が非投機であることが確定した場合、当該プロセッサは、レジスタにロードデータを転送し、ロードバッファを解放する。また、分岐予測が失敗した場合には、当該プロセッサは、レジスタにロードデータの転送を行わずに、ロードバッファを解放する。
さらに、当該プロセッサが有するベクトルロード管理部は、分岐レベル及びキャンセルフラグにより、投機的に実行されるベクトルロード命令を管理する。
また、当該プロセッサは、ロードバッファを確保し、ベクトルロード命令を投機的に発行している最中に、分岐予測が失敗した場合、投機的に発行しているベクトルロード命令の発行を中断する。そして、当該プロセッサは、発行したリクエスト数を管理する事によって、ロードバッファの解放を早めることができる。
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
1 プロセッサ
2 命令制御部
21 命令解読部
22 スカラ処理部
3 メモリアクセス処理部
31 ロードバッファ管理部
4 プロセッサネットワーク部
5 ベクトル制御部
6 ベクトル処理部
61 ベクトルパイプライン演算器
62 ベクトルレジスタ
63 ベクトル演算器
64 ロードバッファ
65 ベクトルロード管理部
65a ベクトルロード管理部
651 レジスタ群
651−0 レジスタ
651−1 レジスタ
651−n レジスタ
651a レジスタ群
651a−0 レジスタ
651a−1 レジスタ
651a−n レジスタ
6511 ロードバッファ番号フィールド
6512 分岐レベルフィールド
6513 キャンセルフラグフィールド
6514 ベクトルレジスタ番号フィールド
6515 ライト要素数フィールド
6516 リード要素数フィールド
6517 使用可否フラグフィールド
6518 要素数フィールド
6519 要素数カウンタフィールド
652 レジスタ設定部
652a レジスタ設定部
653 ライト部
653a ライト部
654 リード部
66 クルスパスイッチ
7 主記憶装置
101 信号線
102 信号線
103 信号線
104 信号線
105 信号線
106 信号線
107 信号線
108 信号線
109 信号線
110 信号線
10 プロセッサ
11 命令発行部
12 データ取得部
13 判定部
14 ベクトルロード管理部
15 ベクトルレジスタ

Claims (6)

  1. 分岐命令における分岐先の分岐予測に基づき、主記憶装置から読み出されたベクトルロード命令を発行する命令発行部と、
    前記発行されたベクトルロード命令に基づく複数のベクトルデータを前記主記憶装置から取得するための複数の取得要求の発行を開始するデータ取得部と、
    前記ベクトルロード命令に基づくベクトル演算に用いられるベクトルデータを保持するベクトルレジスタと、
    前記分岐命令による分岐先が確定した後に、前記分岐予測の成否を判定する判定部と、
    前記判定部により、前記分岐予測が成功したと判定された場合、前記複数の取得要求に基づく全てのベクトルデータを取得し終えた後に、前記ベクトルレジスタに対して当該全てのベクトルデータを転送し、前記分岐予測が失敗したと判定された場合、前記データ取得部により発行された取得要求により取得されたベクトルデータを廃棄するベクトルロード管理部と、
    を備え、
    前記発行されたベクトルロード命令以前に複数の分岐命令が存在し、
    前記ベクトルロード管理部は、前記分岐予測の成否の判定結果を記憶するための記憶部を備え、
    前記判定結果は、分岐先が未確定である分岐命令数を示す分岐情報と、前記分岐予測が失敗したことを示す予測失敗情報とからなり、
    前記命令発行部は、前記ベクトルロード命令を発行する際に、当該ベクトルロード命令以前の分岐命令数を前記ベクトルロード管理部へ通知し、
    前記判定部は、前記複数の分岐命令のそれぞれに対応する分岐先が確定する度に、前記分岐予測の成否を判定し、
    前記ベクトルロード管理部は、
    前記命令発行部から通知された分岐命令数を前記分岐情報として前記記憶部へ格納し、
    前記判定部により前記分岐予測の成否が判定される度に、前記記憶部に記憶された判定結果を更新し、
    前記判定部により前記分岐予測が成功したと判定された場合、前記記憶部に格納された分岐情報を減算し、
    前記判定部により前記分岐予測が失敗したと判定された場合、前記記憶部に格納された予測失敗情報を有効と更新し、
    前記判定部により全ての分岐命令における前記分岐予測の判定が完了し、かつ、前記全てのベクトルデータを取得し終えた後に、前記記憶部に記憶された前記分岐情報が0であり、かつ、前記予測失敗情報が無効である場合に、前記全てのベクトルデータを転送し、
    前記予測失敗情報が有効である場合に、前記データ取得部により発行された取得要求により取得されたベクトルデータを廃棄する
    プロセッサ。
  2. 前記ベクトルロード管理部は、
    前記複数の取得要求により取得された複数のベクトルデータを保持するロードバッファをさらに備え、
    前記取得要求によりベクトルデータが取得される度に、当該取得されたベクトルデータを前記ロードバッファへ格納し、
    前記判定部により前記分岐予測が成功したと判定された場合、前記ロードバッファに格納された全てのベクトルデータを、前記ベクトルレジスタへ転送し、その後、当該ロードバッファを解放し、
    前記判定部により前記分岐予測が失敗したと判定された場合、前記ロードバッファを解放する
    ことを特徴とする請求項1に記載のプロセッサ。
  3. 前記ベクトルロード管理部は、
    前記判定部により前記分岐予測が失敗したと判定された以後に、前記データ取得部による未発行の取得要求の発行を停止する
    ことを特徴とする請求項2に記載のプロセッサ。
  4. プロセッサが、
    分岐命令における分岐先の分岐予測に基づき、主記憶装置から読み出されたベクトルロード命令を発行し、
    前記発行されたベクトルロード命令に基づく複数のベクトルデータを前記主記憶装置から取得するための複数の取得要求の発行を開始し、
    前記分岐命令による分岐先が確定した後に、前記分岐予測の成否を判定し、
    前記分岐予測が成功したと判定された場合、前記複数の取得要求に基づく全てのベクトルデータを取得し終えた後に、前記ベクトルロード命令に基づくベクトル演算に用いられるベクトルレジスタに対して当該全てのベクトルデータを転送し、
    前記分岐予測が失敗したと判定された場合、前記発行された取得要求により取得されたベクトルデータを廃棄するベクトルロード命令の実行方法であって、
    前記発行されたベクトルロード命令以前に複数の分岐命令が存在し、
    前記プロセッサは、前記分岐予測の成否の判定結果を記憶するための記憶部を備え、
    前記判定結果は、分岐先が未確定である分岐命令数を示す分岐情報と、前記分岐予測が失敗したことを示す予測失敗情報とからなり、
    前記プロセッサが、
    前記ベクトルロード命令を発行する際に、当該ベクトルロード命令以前の分岐命令数を通知し、
    前記通知された分岐命令数を前記分岐情報として前記記憶部へ格納し、
    前記複数の分岐命令のそれぞれに対応する分岐先が確定する度に、前記分岐予測の成否を判定し、
    前記分岐予測の成否が判定される度に、前記憶部に記憶された判定結果を更新し、
    前記分岐予測が成功したと判定された場合、前記記憶部に格納された分岐情報を減算し、
    前記分岐予測が失敗したと判定された場合、前記記憶部に格納された予測失敗情報を有効と更新し、
    全ての分岐命令における前記分岐予測の判定が完了し、かつ、前記全てのベクトルデータを取得し終えた後に、前記記憶部に記憶された前記分岐情報が0であり、かつ、前記予測失敗情報が無効である場合に、前記全てのベクトルデータを転送し、
    前記予測失敗情報が有効である場合に、前記取得要求により取得されたベクトルデータを廃棄する
    ベクトルロード命令の実行方法。
  5. 前記プロセッサが、
    前記取得要求によりベクトルデータが取得される度に、前記複数の取得要求により取得された複数のベクトルデータを保持するロードバッファへ、当該取得されたベクトルデータを格納し、
    前記分岐予測が成功したと判定された場合、前記ロードバッファに格納された全てのベクトルデータを、前記ベクトルレジスタへ転送し、その後、当該ロードバッファを解放し、
    前記分岐予測が失敗したと判定された場合、前記ロードバッファを解放する
    ことを特徴とする請求項4に記載のベクトルロード命令の実行方法。
  6. 前記プロセッサが、
    前記分岐予測が失敗したと判定された以後に、未発行の前記取得要求の発行を停止する
    ことを特徴とする請求項5に記載のベクトルロード命令の実行方法。
JP2010229362A 2010-10-12 2010-10-12 プロセッサ及びベクトルロード命令の実行方法 Expired - Fee Related JP5240270B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010229362A JP5240270B2 (ja) 2010-10-12 2010-10-12 プロセッサ及びベクトルロード命令の実行方法
US13/240,614 US8850167B2 (en) 2010-10-12 2011-09-22 Loading/discarding acquired data for vector load instruction upon determination of prediction success of multiple preceding branch instructions

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010229362A JP5240270B2 (ja) 2010-10-12 2010-10-12 プロセッサ及びベクトルロード命令の実行方法

Publications (2)

Publication Number Publication Date
JP2012083937A JP2012083937A (ja) 2012-04-26
JP5240270B2 true JP5240270B2 (ja) 2013-07-17

Family

ID=45926040

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010229362A Expired - Fee Related JP5240270B2 (ja) 2010-10-12 2010-10-12 プロセッサ及びベクトルロード命令の実行方法

Country Status (2)

Country Link
US (1) US8850167B2 (ja)
JP (1) JP5240270B2 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013095608A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for vectorization with speculation support
JP5648645B2 (ja) * 2012-03-02 2015-01-07 日本電気株式会社 ベクトル処理装置、ベクトルロード命令実行方法、及びベクトルロード命令実行プログラム
US11768689B2 (en) 2013-08-08 2023-09-26 Movidius Limited Apparatus, systems, and methods for low power computational imaging
US10001993B2 (en) 2013-08-08 2018-06-19 Linear Algebra Technologies Limited Variable-length instruction buffer management
WO2016016726A2 (en) * 2014-07-30 2016-02-04 Linear Algebra Technologies Limited Vector processor
CN105335130B (zh) 2015-09-28 2018-06-26 深圳市中兴微电子技术有限公司 一种处理器及其处理任务的方法
US20170177351A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Even and Odd Vector Get Operations
JP6849949B2 (ja) * 2017-03-21 2021-03-31 日本電気株式会社 メモリアクセス装置、命令制御方法、プログラム、情報処理装置
US10620961B2 (en) * 2018-03-30 2020-04-14 Intel Corporation Apparatus and method for speculative conditional move operation
GB2573119A (en) 2018-04-24 2019-10-30 Advanced Risc Mach Ltd Maintaining state of speculation

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6119203A (en) * 1998-08-03 2000-09-12 Motorola, Inc. Mechanism for sharing data cache resources between data prefetch operations and normal load/store operations in a data processing system
US6813701B1 (en) * 1999-08-17 2004-11-02 Nec Electronics America, Inc. Method and apparatus for transferring vector data between memory and a register file
JP3726092B2 (ja) * 2003-07-04 2005-12-14 エヌイーシーコンピュータテクノ株式会社 ベクトル処理装置およびベクトルロード方法
US7334110B1 (en) * 2003-08-18 2008-02-19 Cray Inc. Decoupled scalar/vector computer architecture system and method
JP4687729B2 (ja) * 2008-03-04 2011-05-25 日本電気株式会社 キャッシュメモリ及びベクトル処理装置並びにベクトルデータ整列方法
JP4789269B2 (ja) * 2008-04-10 2011-10-12 エヌイーシーコンピュータテクノ株式会社 ベクトル処理装置及びベクトル処理方法
JP4868255B2 (ja) * 2008-09-24 2012-02-01 日本電気株式会社 プロセッサ、プロセッサの制御方法及び情報処理装置

Also Published As

Publication number Publication date
US8850167B2 (en) 2014-09-30
US20120089824A1 (en) 2012-04-12
JP2012083937A (ja) 2012-04-26

Similar Documents

Publication Publication Date Title
JP5240270B2 (ja) プロセッサ及びベクトルロード命令の実行方法
EP1224557B1 (en) Store to load forwarding using a dependency link file
JP5548037B2 (ja) 命令発行制御装置及び方法
KR20190049743A (ko) 메모리 위반 예측
US10572179B2 (en) Speculatively performing memory move requests with respect to a barrier
US20050198480A1 (en) Apparatus and method of controlling instruction fetch
JP2007536626A (ja) ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法
WO1995016954A1 (fr) Circuit de traitement d'instructions dans un systeme informatique
US20030182536A1 (en) Instruction issuing device and instruction issuing method
US10606600B2 (en) Fetched data in an ultra-short piped load store unit
JP2003029986A (ja) プロセッサ間レジスタ継承方法及びその装置
JPWO2008155834A1 (ja) 処理装置
US20180052605A1 (en) Memory access in a data processing system utilizing copy and paste instructions
US8793435B1 (en) Load miss result buffer with shared data lines
US8806135B1 (en) Load store unit with load miss result buffer
US7725659B2 (en) Alignment of cache fetch return data relative to a thread
WO2013101031A1 (en) Hiding instruction cache miss latency by running tag lookups ahead of the instruction accesses
US10996954B2 (en) Calculation processing apparatus and method for controlling calculation processing apparatus
JP2012128656A (ja) ベクトル演算処理装置、ベクトル演算処理方法およびベクトル演算処理プログラム
JP5440083B2 (ja) シミュレーション装置、方法およびプログラム
JP5093237B2 (ja) 命令処理装置
JP3726092B2 (ja) ベクトル処理装置およびベクトルロード方法
US20040128476A1 (en) Scheme to simplify instruction buffer logic supporting multiple strands
US11550589B2 (en) Inhibiting load instruction execution based on reserving a resource of a load and store queue but failing to reserve a resource of a store data queue
JP5648645B2 (ja) ベクトル処理装置、ベクトルロード命令実行方法、及びベクトルロード命令実行プログラム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120918

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121119

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121211

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130207

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: 20130305

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130318

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160412

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5240270

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees