JP4230504B2 - データプロセッサ - Google Patents

データプロセッサ Download PDF

Info

Publication number
JP4230504B2
JP4230504B2 JP2006323537A JP2006323537A JP4230504B2 JP 4230504 B2 JP4230504 B2 JP 4230504B2 JP 2006323537 A JP2006323537 A JP 2006323537A JP 2006323537 A JP2006323537 A JP 2006323537A JP 4230504 B2 JP4230504 B2 JP 4230504B2
Authority
JP
Japan
Prior art keywords
instruction
register
data
data processing
processing circuit
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
JP2006323537A
Other languages
English (en)
Other versions
JP2008139964A (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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2006323537A priority Critical patent/JP4230504B2/ja
Priority to US11/707,150 priority patent/US7610471B2/en
Publication of JP2008139964A publication Critical patent/JP2008139964A/ja
Application granted granted Critical
Publication of JP4230504B2 publication Critical patent/JP4230504B2/ja
Priority to US12/585,376 priority patent/US7962728B2/en
Expired - Fee Related 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • 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/30181Instruction operation extension or modification
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering
    • 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/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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
    • 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/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Description

本発明は、データプロセッサに関し、複数命令フロー間の効率的な情報交換を可能にする技術に関する。
近年、単一のプロセッサコアの性能向上が限界に来ており,性能向上の継続には複数プロセッサコアを1つのチップに集積するマルチコア化が重要な選択肢となっている。しかしながら、一般的なマルチコアチップにおいては、複数プロセッサコア間でのデータ受渡しに時間がかかるため、このことがオーバーヘッドとなってN(Nは自然数)個のコアを搭載してもN倍の性能は実現できない。したがって、一般的なマルチコアチップではコア当りの性能が低下し面積効率が低下する。
一方、マルチコア化が進むと従来のように1つのプロセッサコアが何でも処理する必要はないため、様々なプロセッサコアを搭載して各コアが得意な処理を行うことによって効率を上げることが可能となる。そして、従来型汎用プロセッサコアとの互換性を維持してソフトウェア等の継続性を保つレガシーコアと、互換性を捨てて得意な処理に特化することによって効率を上げたエンジンコアとを搭載するヘテロジーニャスマルチコアチップであれば、マルチコア化しながら面積効率も向上させることが可能となる。
また、単一のプロセッサコアの性能向上が限界に来ている一つの要因は、単一のプログラムフローを高速に処理しようとしている点にある。本来のアルゴリズムに並列性があっても単一フローで記述すると並列性を明示的に示せないため、そこからハードウェアで極限まで並列性を抽出しようとすると、大量のハードウェアを必要とし効率が低下してしまう。そして、実装限界まで面積や電力を投入しても、投入に見合った性能向上は得られないという状況になっている。
例えば、現在ハイエンドプロセッサの方式として一般的なアウトオブオーダ方式では、実行すべき命令アドレスを単一のプログラムカウンタで管理する単一の命令フローを大容量のバッファに保持してデータ依存関係をチェックし入力データが揃った命令から実行し、実行後に再び本来の命令フローの順序に従ってプロセッサ状態を更新する。この際に、レジスタオペランドの逆依存や出力依存による命令発行制限をなくすために大容量レジスタファイルを用意して、レジスタリネーミングを行う。先行して実行した結果は後続命令が本来より早く使用することが可能となり性能向上に寄与するものの、途中でプログラムの実行を停止させたようなときに外部から認識できるプロセッサ状態の更新までアウトオブオーダにしてしまうことはできない。プログラムを一旦止めて後で再開するというプロセッサの基本的な処理ができなくなってしまうためである。したがって、先行して実行した結果は大容量のリオーダバッファに蓄えられ本来の順序でレジスタファイル等に書き戻される。このように単一命令フローのアウトオブオーダ実行は、大容量バッファと複雑な制御を必要とする効率の低い方式である。例えば、文献1では、25ページの図2のように整数発行キュー(Integer issue queue)を20エントリ、浮動小数点発行キュー(Floating-point issue queue)を15エントリ、整数レジスタファイル(Integer register file)を80本2セット、浮動小数点レジスタファイル(Floating-point register file)を72本用意し、大規模なアウトオブオーダ発行を可能にしている。
R. E. Kessler, ‘THE ALPHA 21264 MICROPROCESSOR,' IEEE Micro, vol.19, no.2, pp.24-36, MARCHAPRIL 1999.
前述のように、大規模なアウトオブオーダ実行は単一フローの性能を向上させる反面、レジスタリネーミング、命令実行順序の入替え、リオーダリングといった単一フローを基本とするために必要となる様々な処理の効率を低下させる。一方。マルチコアチップは複数フローを扱える半面、複数命令フロー間の効率的なデータ受渡しが困難であるために、大規模なプログラムを分割して実行した場合に効率が低下する。
単一命令フローを基本とする従来アーキテクチャはデータ依存関係をプログラムの命令実行順序で定義する。そして、命令実行順序を厳密に守れば全てのデータ依存関係は保証される。しかしながら、このためにはパイプライン処理、スーパースカラ処理、及びアウトオブオーダ実行を禁止する必要があり性能が著しく低下する。そこで、データ依存関係だけを守って命令実行順序を変える為のルールが確立されている。以下の3ルールである。
(1)ある命令実行前にその命令が参照するデータが全て揃っていること、即ちその命令が読出すレジスタやメモリへの先行命令による書込みが全て完了していること(フロー依存)
(2)ある命令が更新することによって破壊されてしまうデータへの参照が全て完了していること、即ちその命令が書込むレジスタやメモリへの先行命令による読出しが全て完了していること(逆依存)
(3)ある命令が更新したデータを先行する命令が上書きしないこと、即ちレジスタやメモリの更新順序が保たれること(出力依存)
そして、上記3つの依存関係を守るためには、ある命令の実行前に先行する全ての命令をデコードする必要がある。この結果、アウトオブオーダ方式のプロセッサでは前述のように大容量のバッファを用意して命令デコードを先行させ、上記3つの依存関係の解析を大幅に早めて、先行実行可能な命令を抽出している。
また、複数プロセッサ間でデータを受渡す場合もデータ依存関係をプログラムの命令実行順序で定義している。即ち、複数プロセッサが実行するプログラムに同期ポイントを設け、あるプロセッサは他のプロセッサが同期ポイントまでの実行を完了していることを確認することにより、同期ポイント以降の命令を実行してもデータ依存関係が保たれることを間接的に確認する。この場合、他のプロセッサが実際にはいつ依存関係のあるデータの参照や更新を行っているかの観測は困難であるため、アウトオブオーダ的な実行は困難であり、頻繁に同期ポイントを設定するとそこで一旦処理が逐次化され、同期に要する時間と相俟って性能が低下する。
以上のように、単一命令フローであっても複数命令フローであってもデータ依存関係のある処理を効率的に実行することは困難である。
本発明の目的は、複数命令フロー間の効率的なデータ受渡しを可能とし、大規模なプログラムを複数命令フローに分割して実行することにより、単一フローを基本とするために発生する様々な効率低下を排除して、高効率かつ高性能なデータプロセッサを提供することにある。
本発明の別の目的は、複数命令フロー間の効率的なデータ受渡しを可能とし、各命令フローを単純化、単機能化した高効率なデータプロセッサを提供することにある。
本発明の更に別の目的は、複数命令フロー間の効率的なデータ受渡しを可能とし、プログラム構造定義とデータ処理を別命令フローとして効率的な命令供給が可能なデータプロセッサを提供することにある。
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
〔1〕本発明に係るデータプロセッサは、他命令フローの参照レジスタへの書込み指示を有する命令、及び参照レジスタ無効化指示を有する命令を実行する。
上記より、他命令フローへの効率的なデータ転送が可能となる。他命令フローの参照レジスタへの書込み指示を有する命令を実行する際は、書込みレジスタが無効であることを確認し、無効でなければ無効になるのを待ち、無効であれば書き込みを行う。一方、参照レジスタ無効化指示を有する命令を実行した場合は参照の終わったレジスタを無効化する。更に、参照レジスタが無効な場合は有効になるまで参照命令の実行が抑止される。この結果、参照終了まではレジスタが有効であるために他フローからの書込みが抑止され、逆依存関係のチェックが正しく行われる。また、他フローからの書込みが行われるまではレジスタが無効であるため参照命令の実行が抑止され、依存関係のチェックが正しく行われる。
〔2〕本発明に係るデータプロセッサは、複数の単純な命令フローを実行するプロセッサの総体として通常の機能を有するプロセッサを構成する。単純な命令フローとは、ロード命令のみ、演算命令のみ、或いはストア命令のみの命令フローなどである。以下単純な命令フローを実行するプロセッサをナノプロセッサと呼ぶことにする。即ち、ロード命令のみを実行するプロセッサはロードナノプロセッサ、演算命令のみを実行するプロセッサは演算ナノプロセッサ、そしてストア命令のみを実行するプロセッサはストアナノプロセッサである。
上記より、各ナノプロセッサが単純化され効率が向上する。
〔3〕本発明に係るデータプロセッサは、ナノプロセッサとして命令フェッチナノプロセッサを有する。そして、演算ナノプロセッサ等のデータ処理ナノプロセッサの命令キューを命令フェッチナノプロセッサが扱うレジスタとみなし、命令フェッチナノプロセッサが命令キューのエントリへの書込み指示を有する命令を実行し、データ処理ナノプロセッサが命令キューのエントリ参照後に無効化指示を出すことにより、命令の受け渡しを可能にする。
上記より、プログラム構造定義を別命令フローとし、データ処理中に先行的にプログラム構造に従った命令供給を行うとこにより、複雑な分岐処理ハードウェアを用いない効率的な命令供給が可能となる。
本願において開示される発明のうち代表的なものについて簡単に説明すれば下記のとおりである。
すなわち、複数命令フロー間の効率的なデータ受渡しを可能とし、大規模なプログラムを複数命令フローに分割して実行することにより、単一フローを基本とするために発生する様々な効率低下を排除して、高効率かつ高性能なプロセッサを提供できる。
また、各命令フローを単純化、単機能化した高効率なプロセッサを提供できる。更に、プログラム構造定義とデータ処理を別命令フローとして効率的な命令供給が可能なプロセッサを提供できる。
1.代表的な実施の形態(representative forms of embodiments of the inventions)
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
〔1〕本発明の代表的な実施の形態に係るデータプロセッサは、夫々が異なる命令フローを実行する複数のデータ処理回路を有する。夫々のデータ処理回路は命令フローで参照される複数のレジスタと、前記複数のレジスタが保有するデータに対する有効性をレジスタ毎に示すフラグビットとを有する。前記データ処理回路は、他のデータ処理回路の前記レジスタにデータを書込む操作を指示する第1命令を実行するとき、当該第1命令で前記書込む操作が指示されているレジスタが無効であるか否かを確認し、無効でなければ無効になるのを待ち、無効であれば書き込みを行い、また、前記レジスタに対する参照に併せて当該参照されるレジスタのデータを対応するフラグビットを用いて無効化する指示を与える第2命令を実行するとき、当該第2命令でデータ無効化の指示がなされているレジスタが既に無効な場合は有効になるまで参照の実行を抑止し、当該第2命令を実行したとき参照の終わったレジスタを無効化する制御を行う。
上記より、複数のデータ処理回路が夫々別々に命令フローを実行するとき、一方のン命令フローから他方の命令フローへの依存関係のあるオペランドに対し、参照終了まではそのオペランドを保有するレジスタが有効であるため他の命令フローからの書込みが抑止され、逆依存関係のチェックが正しく行われる。また、参照されて無効化されたレジスタは他の命令フローからの書込みが行われるまでは無効であるため参照命令の実行が抑止され、依存関係のチェックが正しく行われる。
具体的な一つの形態として、前記命令セットに含まれるロード命令及びアドレス生成命令を実行するデータ処理回路は前記命令セットに含まれるストア命令及びアドレス生成命令を実行するデータ処理回路とは分離されている。夫々別々に命令フローを実行するデータ処理回路の構成は単純化され、データ処理効率の向上に寄与する。
別の具体的な形態として、前記命令セットに含まれるメモリアクセス命令及びアドレス生成命令を実行するデータ処理回路は其の他の演算命令を実行するデータ処理回路から分離されている。夫々別々に命令フローを実行するデータ処理回路の構成は単純化され、データ処理効率の向上に寄与する。
別の具体的な形態として、命令フェッチを実行するデータ処理回路と演算を実行するデータ処理回路とを別々に有する。前記演算を実行するデータ処理回路の命令キューは前記命令フェッチを実行するデータ処理回路が扱うレジスタとみなされ、命令フェッチを実行するデータ処理装置は前記第1命令として命令キューのエントリへの書込み指示を有する命令を実行し、演算を実行するデータ処理装置は前記第2命令として命令キューのエントリ参照後に対応するフラグビットを用いてエントリの無効化を指示する命令を実行して、命令フェッチを実行するデータ処理回路から演算を実行するデータ処理回路への命令の受け渡しを行なう。
別の具体的な形態として、前記第1命令はディスティネーションレジスタフィールドに対応して書込み先のデータ処理回路を特定する第1パラメータの指定フィールドを有する。オペコードの種別を増大させずに第1命令を実現できる。例えば第1命令は、レジスタ間接アドレシングモードで指定するメモリからレジスタにデータを転送するロード命令である。
別の具体的な形態として、前記第2命令は参照後に無効にするか否かを指示する第2パラメータの指定フィールドをレジスタフィールドに対応して有する。オペコードの種別を増大させずに第2命令を実現できる。例えば前記第2パラメータの指定フィールドを有するレジスタフィールドはリードレジスタを指定するフィールドである。前記第2パラメータの指定フィールドを有するレジスタフィールドにはライトレジスタを指定するフィールドおよびリード・モディファイレジスタを指定するフィールドが除外される。当該命令のオペレーションにおいて更新されることが前提のレジスタフィールドに対して無駄なパレメータ指定フィールドが付随されない。
〔2〕別の観点による実施の形態に係るデータプロセッサは、夫々が異なる命令フローを実行する複数のデータ処理回路を有する。夫々のデータ処理回路は命令フローで参照される複数のレジスタと、前記複数のレジスタが保有するデータの有効性をレジスタ毎に示すフラグビットとを有する。一のデータ処理回路が他のデータ処理回路の前記レジスタにデータを書込む操作を指示する第1命令と、データ処理回路の前記レジスタに対する参照に併せて当該参照されるレジスタのフラグビットに対するデータ無効化の指示を与える第2命令とを、前記複数のデータ処理回路の命令セットに含む。
例えば、前記データ処理回路は、前記第1命令を実行するとき、当該第1命令で前記書込む操作が指示されているレジスタが無効であるか否かを確認し、無効でなければ無効になるのを待ち、無効であれば書き込みを行い、また、前記第2命令を実行するとき当該第2命令でデータ無効化の指示がなされているレジスタが既に無効な場合は有効になるまで参照命令の実行を抑止し、当該第2命令を実行したとき参照の終わったレジスタを無効化する制御を行う。これにより、他命令フローへの効率的なデータ転送が可能となる。
2.実施の形態の説明
次に、実施の形態について更に詳述する。
《単一命令フローによるプログラム実行》
本発明に係る各実施形態を詳細に説明する前に、まず、各実施形態の比較例となる単一命令フローによるプログラムの実行について説明する。図1には、単一命令フローによるプログラムの実行動作例を説明するための第1のプログラムが例示される。第1のプログラムは、C言語で記述されているように、N個の要素を持つ2つの配列a[i]とb[i]を加算し、配列c[i]に格納するプログラムである。この第1のプログラムを、アセンブラで記述した場合について説明する。このアセンブラプログラムでは、ポストインクリメントタイプのロード及びストア命令を有するアーキテクチャを想定している。
まず、初期設定として4つの即値転送命令「mov #_a,r0」、「mov #_b,r1」、「mov #_c,r2」及び「mov #N,r3」によって、3つの配列の先頭アドレス_a、_b、_c、及び配列の要素数Nを、それぞれレジスタr0、r1、r2、及びr3に格納する。次に、ループ部では、ポストインクリメントロード命令「mov @r0+,r4」及び「mov @r1+,r5」によって、r0及びr1の指す配列a及びbのアドレスから配列要素をr4及びr5にロードすると同時に、r0及びr1をインクリメントして次の配列要素を指すようにする。次に、加算命令「add r4,r5」によって、r4及びr5にロードされた配列要素を加算し、r5に格納する。そして、ポストインクリメントストア命令「mov r5,@r2+」によって、配列cの要素アドレスに配列要素の加算結果であるr5の値をストアする。その後、デクリメント・テスト命令「dt r3」によって、r3に格納された要素数Nをデクリメントし、その結果がゼロかどうかをテストし、ゼロであれば条件分岐用のフラグ(T)をセットし、ゼロでなければフラグ(T)をクリアする。最後に、条件分岐命令「bf _L00」によって、フラグ(T)をチェックし、クリアされていれば、残り要素数Nがまだゼロではないので、ラベル_L00の指すループの先頭に分岐する。
図2には、第1のプログラムをアウトオブオーダ方式のデータプロセッサで実行した場合のループ部の動作が例示される。1ループ目から5ループ目の途中まで動作を記述している。ここで、ロードレイテンシは3を想定しており、ロード命令とロードデータ使用命令の距離が3以上であれば、ロードデータ使用命令の実行が可能である。また、分岐予測ヒット時の分岐命令の実行サイクル、即ち、分岐命令とターゲット命令の距離も3としている。アウトオブオーダ方式では通常の命令は発行までに長いサイクルを要するが、分岐命令はできるだけ上流のパイプラインステージで実行して命令フェッチが滞らないようになっている。更に、命令フェッチは8命令ずつ行い十分な数の命令をバッファできるものとする。図2では1ループの命令数が6であるため6命令目の後の2命令もフェッチされるがループを抜けるまでは実行されずにキャンセルされるため空欄にしている。
この結果、図2では、1ループ目は命令発行スロットに空きがあるものの、2ループ目では、1ループ目の加算命令「add r4,r5」及びポストインクリメントストア命令「mov r5,@r2+」、並びに、3ループ目のポストインクリメントロード命令「mov @r0+,r4」及び「mov @r1+,r5」とのアウトオブオーダ方式の実行順序交換により、メモリパイプでは毎サイクル命令を実行している。3ループ目以降も同様に実行間隔が詰められ高速実行される。このとき、命令バッファの3番目の加算命令より14番目の分岐命令を先に実行しており、実行間隔を詰めるには多数の命令の実行可否判定を毎サイクル行って適切な命令を選択する必要がある。また、条件分岐命令「bf _L00」は本来デクリメント・テスト命令「dt r3」の結果であるフラグは確定してから実行すべきであるが、分岐予測によって先行的に実行できるものとしている。更に、2回目のポストインクリメントロード命令「mov @r0+,r4」及び「mov @r1+,r5」を1回目の加算命令「add r4,r5」に先行して実行するために、r4及びr5には1回目とは別の物理レジスタを割り当てている。
図3には、ロードレイテンシを図2で仮定した3から10に伸ばした場合のループ部の動作が例示される。大規模データを扱う場合高速な小容量メモリには収まらないため、長いレイテンシを仮定することは現実的であるといえる。一方、プログラムには十分なローカリティがあって、命令フェッチが高速な小容量メモリに殆どヒットすることを期待しても良い。このため、分岐命令の実行サイクルは図2の場合と同じ3サイクルとする。さて、1ループ目の6命令は灰色に色付けされている。そして、図のように1サイクル目に3命令、2サイクル目に1命令、12サイクル目に1命令、13サイクル目に1命令実行される。この間、アウトオブオーダ実行によって後続命令が先行実行され、13サイクル目には5ループ目の分岐命令「bf _L00」が実行される。即ち、1ループ目と5ループ目の命令が同時に実行されており、命令バッファには5ループ分40命令を保持する必要がある。図2のロードレイテンシが3の場合には2ループ分の16命令内の実行順序入替えであったものが大幅に増加している。このように、アウトオブオーダ方式はレイテンシ増に対して性能を維持しようとすると大規模なハードウェアが更に大規模化する。
《実施形態1》
図4には、本発明の実施形態1に係るデータプロセッサのパイプライン構成が概略的に例示される。2つの命令フローを扱うために同一構成の中央演算処理装置であるナノプロセッサCPU1及びCPU2を備えている。夫々のナノプロセッサCPU1及びCPU2は別々の命令フローを実行し、双方のナノプロセッサによる機能の総体として一つの中央演算処理機能若しくはデータプロセッサ機能が実現される。
各ナノプロセッサCPU1,CPU2の基本構造は一般的なインオーダ発行型スカラプロセッサである。パイプラインは2段の命令フェッチステージI1及びI2、デコードステージD、実行ステージE、及び2段のメモリアクセスステージM1及びM2から成る。2つのナノプロセッサCP1,CPU2は同一構成であるため代表として一方のナノプロセッサCPU1の構成について説明する。まず、I1及びI2で命令メモリI−MEMから命令INSTをフェッチし命令キューIQにラッチする。通常の命令フェッチはアドレスをインクリメントしながらの連続アドレスフェッチであるが、分岐命令等でアドレスが不連続に変化する場合は分岐処理部BRからの命令アドレスIA1を使用して命令フェッチを行う。実行すべき命令アドレスを保有するプログラムカウンタは図4において命令デコーダIDの回路ブロックに含まれている。そして、Dステージで命令デコーダID及び分岐処理部BRによって命令デコード及び分岐処理を行うと共に、命令デコード情報に基づいてレジスタリード部RRでレジスタファイルRFからのレジスタリードを行う。レジスタファイルRFは命令実行に用いられる汎用レジスタ等のレジスタを複数個有する。更に、必要に応じてフォワーディング部FWDで演算部ALUの演算結果ALU1又はデータメモリD−MEMからのロードデータLDのフォワーディングを行う。その後、EステージのALUで演算、アドレス計算等を行い、必要に応じてM1及びM2ステージでデータロード又はデータストアを行う。そして、演算結果ALU1又はロードデータLDをレジスタファイルRFにラッチする。尚、本データプロセッサにおいて例えば2つのナノプロセッサCPU1、CPU2はプログラムカウンタを別々の持ち、命令メモリI−MEM及びデータメモリD−MEMをシェアしている。
図5には、本発明の実施形態1に係るデータプロセッサ向けにアセンブルしたプログラムが例示される。図1の単一命令フローを2分割し、第1の命令フローは配列a及びbからデータを読出し、第2の命令フローは読出した値を加算して配列cにストアしている。図1の単一命令フローと比較すると、ループ構造を規定する命令である即値転送命令「mov #N,r3」、デクリメント・テスト命令「dt r3」、及び条件分岐命令「bf _L10」「bf _L20」を双方に記述し、他の命令は分配している。ナノプロセッサCPU1,CPU2には、レジスタファイルRF内のレジスタが保有するデータ(レジスタオペランド)の有効/無効を示すフラグビットとしてレジスタバリッドビットrvが設けられている。ナノプロセッサCPU1,CPU2相互間でのレジスタオペランドの参照や更新に際して、ナノプロセッサCPU1,CPU2は命令デコードにおいてレジスタバリッドビットrvを参照し、対応するレジスタバリッドビットrvが有効を意味するときレジスタオペランドを参照し(無効なときは有効になるまで待つ)、対応するレジスタバリッドビットrvが無効を意味するときレジスタオペランドの更新を行う(有効なときは無効になるになるまで待つ)。
ナノプロセッサCPU1,CPU2の命令セットには相互間でのデータの参照や更新のための制御用いられるキープパラメータk、ナノプロセッサ番号パラメータnpを有する命令が含まれる。例えば各レジスタオペランドはデフォルトでは、参照されたら(レジスタから読出されたら)無効化され(k=0のとき)、書込みは同一命令フローのレジスタに行うものとされる(np=自ナノプロセッサ番号指定)。読出しても有効なまま保持する場合はk=1を付ける。また、他の命令フローのレジスタに書込む場合はnpに指定する他のナノプロセッサ番号を付ける。図5の例では同一の値を2度使用することがないためk=1の付いた命令はない。尚、デクリメント・テスト命令「dt r3」のr3と加算命令「add r4,r5」のr5はモディファイレジスタであるため新たな値が書込まれて有効となり、無効化指示をする意味がない。即ち、無効化指示は読出しオペランドにおいてのみ意味がある。他の命令フローのレジスタに書込む場合の例は第1の命令フローの2つのロード命令「mov @r0+,r4/2」及び「mov @r1+,r5/2」である。/2が第2の命令フローのレジスタに書込むことを示している。
図6には、本発明を適用したデータプロセッサ向けの命令コードフォーマットが例示される。命令語は16ビット長及び32ビット長が混在している。図6に示される命令フォーマットは他命令フローの参照レジスタへの書込み指示を有する命令、及び参照レジスタ無効化指示を有する命令をエンコードできるように定義されている点に特徴がある。図中、eは命令コードの拡張部extの有無を表し、e=1であれば拡張部extを持つ。opはオペコード(オペレーションコード)、imは命令コードに埋め込まれた即値であり、op/imはオペコードと即値に適宜割り振ることを表す。ra、rb、rcは読出しレジスタ番号フィールド、ma、mbはモディファイレジスタ番号フィールド、waは書込みレジスタ番号フィールドである。kは読出しレジスタの無効化を指示するキープフィールドであり、1であれば有効なまま保持、0であれば無効化する。npはナノプロセッサ番号フィールドであり、ma又はwaの書込みナノプロセッサを指定するフィールドである。尚、図6においてma,mb,waの各フィールドがディスティネーションを指定するフィールドとされ、ra,rb,ma,mbの各フィールドがソースを指定するフィールドとされ、rcのフィールドは3オペランド命令フォーマットにおける第2ソースフィールドとされる。以下において参照するプログラム及びプログラム動作を説明するための図面においてキープフィールドk及びナノプロセッサ番号フィールドnpの値はデフォルト以外を図示し、デフォルト値の図示は省略する。
図7には、本発明の実施形態1に係るデータプロセッサによる図5に示したプログラムの動作が例示される。各命令の右側にはプログラムで使用しているレジスタの有効無効状態を意味するレジスタバリッドビットrvの値が示される。値が1であれば、前から有効であったか、新たに有効になったかを示している。値が0であれば、前から無効であったか、新たに無効になったかを示している。図7では新たに有効又は無効になった場合は太枠で囲んで強調している。尚、レジスタの最後の読出しと新たな書込みが同サイクルで行われる場合、サイクル単位では無効状態にならない。1サイクルレイテンシのモディファイレジスタや、最後の読出しと同サイクルに他の命令フローからの書込みが行なわれた場合にはこうした動作になる。そして、命令実行可能であるためには命令実行前に読出すレジスタが有効である必要がある。
第1の命令フローでは、最初の3命令で2つの配列へのポインタとループ回数をセットアップする。この結果、r0、r1、及びr3が逐次有効となる。次にループ内の4命令を実行した後で分岐によるパイプラインストールが2サイクル発生しループの先頭に戻る。ループ内では、まず2つのロード命令「mov @r0+,r4/2」及び「mov @r1+,r5/2」が実行される。r0及びr1は有効なので命令はストールなく実行される。r0及びr1はポストインクリメントによって次の配列要素を指すようにモディファイされ、再び有効となる。ロードレイテンシは3としているので命令実行から3サイクル目にロード先のレジスタである第2命令フローのr4及びr5が有効となる。次に、デクリメント・テスト命令「dt r3」を実行する。r3は有効なので命令はストールなく実行され、r3はデクリメント後に再び有効となる。テスト結果のフラグであるTビットも有効となる。ループ回数が残っていてr3が0にならなければTビットは0となる。ループの最後では条件分岐命令「bf _L10」が実行され、Tビットは0なので分岐が成立し、ループの先頭に戻る。以下、ループ回数がデクリメントされて0になるまでループ内の処理を繰り返す。
一方、第2の命令フローでは最初の2命令で配列へのポインタとループ回数をセットアップし、ループ先頭の加算命令「add r4,r5」が使用するr4及びr5が有効になるのを待つ。第1の命令フローでは4,5サイクル目にr4及びr5へのロードを開始し、3サイクルかかるので6,7サイクル目にr4及びr5が有効になる。この結果、8サイクル目に加算命令「add r4,r5」が実行可能となる。そして、r4が最後の読出しによって無効となり、r5が加算結果の書込みによって、再び有効となる。続いてストア命令「mov r5,@r2+」によって演算結果のストアを行う。r2及びr5が有効なためストールなく実行される。そして、r5が最後の読出しによって無効となり、r2が再び有効となる。最後に第1の命令フローと同様に、デクリメント・テスト命令「dt r3」及び条件分岐命令「bf _L20」を実行し、2サイクルストール後にループの先頭に戻る。
このように、第2の命令フローは第1の命令フローの詳細な実行状態を把握しなくても、第1の命令フローによるレジスタ書込みによってレジスタが有効になったことを知るだけで、適切なタイミングで依存関係のある命令を実行することができる。
図2のように、3命令同時発行可能で、大規模な発行命令キューを持つアウトオブオーダプロセッサは1ループ当り3サイクルで実行可能であった。これに対して図7では1ループ当り6サイクルかかっており、ハードウェア量を考えると性能の割には効率的であるといえるが、分岐性能を改善すれば1ループ当り3サイクルで実行することも可能である。例えば、DSPにおいて一般的な小ループ構造定義命令を用いれば、ループの先頭、末尾、ループ回数を指定して、ループ内の命令を命令キューに保持し続け、指定ループ回数実行した後に、ループ構造を抜けて後続命令に進むことが可能となる。この場合、図5のプログラムは図8のようになる。3本のレジスタ、start、end、及びloopにループ開始アドレス、ループ終了アドレス、及びループ回数を書込むことによってループ構造が定義され、ループ回数レジスタloopの値をデクリメントして0になったらループ構造を抜けて後続命令に進む。
図9には、図8のプログラムの動作が示される。分岐命令が不要となった結果、ロードストアリソースネックで性能が決まり、ループ4回目以降の定常状態では1ループ当り3サイクルで実行している。この結果、2つの単純なインオーダ型スカラプロセッサで、大規模なアウトオブオーダ型スーパースカラプロセッサと同等性能を達成している。
図9では図7に比べて命令発行間隔が縮まっているため逆依存のルールを無視しているように見える。図2の説明で言及したように従来のアウトオブオーダ型プロセッサでは物理レジスタの割当てを変えることにより逆依存を解消している。しかし、本発明では他の命令フローを実行しているCPUのレジスタに書込む場合はレジスタが無効になるのを待つため、書込み命令発行が早過ぎても逆依存の問題は発生しない。図9では、第1の命令フローの5サイクル目のr4へのロードは、第2の命令フローの7サイクル目の加算によるr4の最後の読出しによるr4の無効化を待って、r4への書込みを行う。同様に、第1の命令フローの6サイクル目のr5へのロードは、第2の命令フローの8サイクル目のストアによるr5の最後の読出しによるr5の無効化を待って、r5への書込みを行う。
「実行を開始した命令が、書込みレジスタが無効でないために無効になるのを待つ」という動作は従来のデータプロセッサにはなかった動作である。しかし、類似の動作はある。例えば、キャッシュストア時にキャッシュミスした場合、ストアデータを保持しておいて、パイプラインストールするかストアバッファに書込んでおいて後続命令の処理を進めながら待つかしてキャッシュエントリのリプレースを待って、ストアデータの書き込みを行う。本発明の場合も、パイプラインストール又は書込みデータバッファを実装すれば、書込みレジスタが無効になることを待つことができる。しかも、ストアバッファのように後続のロードとのアドレスの一致比較や一致した場合のストアデータのロードデータへのフォワーディングといった処理が不要であるため、小規模なハードウェアで実現可能である。
図10には、ロードレイテンシ10の場合の図8のプログラムの動作が示される。ロードレイテンシが伸びた分、第2の命令フローの実行が遅延しているが、第1の命令フローはそれに影響されることなく先行実行されるので、ロードレイテンシは隠蔽され、1ループ当り3サイクルのスループットは維持される。先行実行されるロード命令が増える分、前述の書込みデータバッファのエントリ数を増やす必要があるけれども、前述のようにエントリ数の割には小規模なハードウェアで実現可能である。
図11には、レジスタ有効性判定論理1の例が示される。判定論理1はレジスタ毎に用意する。図6のように様々な命令フォーマットが定義されると、命令によってレジスタオペランドの数が異なる。レジスタオペランドが読出し用、書込み用、モディファイ用のいずれであるかも異なる。そこで、図のように命令コードからレジスタフィールドa、b、及びcが読出しレジスタであることを示す信号read_a_valid、read_b_valid、及びread_c_validと、レジスタフィールドa及びbが自分のレジスタへの1サイクルレイテンシの書込みであることを示す信号write_a_valid及びwrite_b_validを生成し、レジスタ毎の判定論理1に出力する。また、命令コードのレジスタフィールドa(ra,ma,wa),b(rb,mb),c(rc)をデコードしてデコード結果a_is[x]、b_is[x]、c_is[x]を各判定論理1に分配する。xはレジスタ番号を表す。図6のフォーマットではレジスタフィールドは3ビットなのでレジスタファイルは0〜7の8本とする。したがって、xは0〜7である。このとき、併せて前記キープフィールドkのデコードも行い、レジスタの読出しが最後であることを示す信号read_a_last、read_b_last、及びread_c_lastを生成し、レジスタ毎の判定論理1に出力する。
レイテンシが1でない場合はレジスタが有効になるのに時間がかかるため一旦書込み番号をバッファして後で有効信号と共に供給する。レイテンシが1サイクルでない場合は3サイクルであるとすると、2サイクルバッファしてから供給する。図11ではバッファした番号がラッチdelayにあるものとし、これをデコードしてデコード結果d_is[x]を各判定論理1に送る。同時に書込み有効信号write_d_validを全判定論理1に送る。また、他のナノプロセッサからの書込みもあるので、他のナノプロセッサからの書込みレジスタ番号extもデコードし、デコード結果e_is[x]を各判定論理1に送る。同時に他のナノプロセッサからの書込みの有効信号write_e_validを全判定論理1に送る。
各レジスタ用の判定論理1ではまず、読出しありRead[x]、書込みありwrite[x]及び最後の読出しread_last[x]を生成し、これらの信号からストール指示stall[x]、書込み待ち指示write_wait[x]、及び次サイクル有効valid_next[x]を生成して出力する。ストール指示stall[x]は、対応レジスタにリードが指定されているが当該レジスタが無効(〜reg_varid[x])のとき活性化される。書込み待ち指示write_wait[x]は、対応レジスタにライトが指定されていて当該レジスタが有効(reg_varid[x])であって最後の読出しでない(〜read_last[x])のとき活性化される。次サイクル有効valid_next[x]は、対応レジスタにライトが指定されているか、又は当該レジスタが有効(reg_varid[x])であって最後の読出しでない(〜read_last[x])とき、活性化される。図11においてreg_valid[x]はレジスタ毎のレジスタバリッドビットrvを意味する。2はナノプロセッサCP1の8個のレジスタに夫々対応されるレジスタバリッドビットrvを備えたバリッドビットフラグレジスタである。
この後、各レジスタ用の判定論理1から出力されたストール指示stall[x]を全てORしてナノプロセッサのストール指示stall_nanoprocessorを生成する。同様に、各レジスタ用の判定論理1から出力された書込み待ち指示write_wait[x]を全てORしてナノプロセッサの書込み待ち指示write_waitを生成する。更に、各レジスタ用の判定論理1から出力されたvalid_next[x]をラッチしてレジスタ有効信号reg_valid[x]とする。即ち、k=0が指示されているレジスタに対する読出しの場合はvarid_nextに対応するレジスタのレジスタバリッドビットrvが無効化され、k=1が指示されているレジスタに対する読出した場合はvarid_nextに対応するレジスタのレジスタバリッドビットrvは有効のままにされ、書き込みの場合も対応するレジスタのレジスタバリッドビットrvは有効にされる。
以上のような論理によって各レジスタの有効性が適切に管理され、各ナノプロセッサの命令実行可否判定のストールやナノプロセッサ間のデータ交換の同期が可能となる。
図12には、レジスタ有効性判定論理1の動作フローが示される。有効性判定論理に従って、レジスタリード可能(Read OK)か、ストールが必要(stall)か、書込み可能(Write OK)か、待たせる(Write Wait)か、レジスタが有効(Valid)になるか、無効(Invalid)になるかを判定する。判定にはレジスタが有効か(reg_valid?)、読出しがあるか(Read?)、最後の読出しか(read_last?)及び書込みがあるか(Write?)を使用する。
まず、レジスタが有効かつ読出しがあればレジスタリード可能(Read OK)であるため、左から4ケースの#1〜#4ではレジスタリード可能(Read OK)となっている。逆に、レジスタが無効かつ読出しがあればストールが必要(stall)であるため、#7及び#8ではストールが必要(stall)となっている。ストールが必要かどうかという観点からは#7及び#8以外は不要である。また、レジスタ書込みがある奇数番目のケースでは、最後の読出しの終わった#1と元々無効であった#7及び#9では書込み可能(Write OK)であり、レジスタが有効で最後の読出しではなかった#3と読出しがなくレジスタが有効なままの#5では書込みが待たされる。更に、最後の読出しがあって書込みのない#2とレジスタが無効のまま書き込みのない#8と#10ではレジスタが無効(Invalid)になり、他の場合では、#1、#7、及び#9では新たな書込みによってレジスタが有効(Valid)になり、#3〜#6では有効な値が保持されたままであるために引き続き有効(Valid)になっている。
《実施形態2》
図13には、本発明の実施形態2に係るデータプロセッサが例示される。実施形態2においては、各ナノプロセッサが単機能化されており、命令フェッチナノプロセッサ(IF Nanoprocessor)IFN、演算ナノプロセッサ(EX Nanoprocessor)EXN、ロードナノプロセッサ(LD Nanoprocessor)LDN、ストアナノプロセッサ(ST Nanoprocessor)STN、命令メモリ(I−MEM)、及びデータメモリ(D−MEM)からなる。
各ナノプロセッサのパイプラインは通常のプロセッサのパイプラインを簡素化したものになっている。また、基本構成は類似しており、デコードステージD、実行ステージE、及び2段のメモリアクセスステージM1及びM2から成る。
まず、命令フェッチナノプロセッサIFNについて説明する。命令キューIQの命令をDステージで命令デコーダIDによって命令デコードすると共に、命令デコード情報に基づいてレジスタリード部RRでレジスタファイルRFからのレジスタリードを行う。更に、必要に応じてフォワーディング部FWDで命令アドレス生成部IAG出力IAのフォワーディングを行う。その後、Eステージの命令アドレス計生成部IAGで命令アドレスIAの生成を行い、M1及びM2ステージで命令フェッチを行う。そして、フェッチした命令INSTを4つのナノプロセッサの内のいずれかの命令キューIQにラッチする。どの命令キューIQにラッチするかは命令フェッチナノプロセッサが実行する命令で指定する。命令の種類については後述する。
次に、演算ナノプロセッサEXNについて説明する。命令キューIQの命令をDステージで命令デコーダIDによって命令デコードすると共に、命令デコード情報に基づいてレジスタリード部RRでレジスタファイルRFからのレジスタリードを行う。更に、必要に応じてフォワーディング部FWDで演算部EX出力EXO又はデータメモリD−MEMからのロードデータLDのフォワーディングを行う。その後、Eステージの演算部EXで演算を行い、出力EXOをレジスタファイルRFに格納する。格納するレジスタファイルは演算ナノプロセッサEXNが実行する命令で指定する。他のナノプロセッサのレジスタに書込むことによって複雑なアドレス計算を行ってロードナノプロセッサLDN又はストアナノプロセッサSTNに渡したり、演算結果をストアするためにストアナノプロセッサSTNに渡したりすることが可能となる。
次に、ロードナノプロセッサLDNについて説明する。命令キューIQの命令をDステージで命令デコーダIDによって命令デコードすると共に、命令デコード情報に基づいてレジスタリード部RRでレジスタファイルRFからのレジスタリードを行う。更に、必要に応じてフォワーディング部FWDでロードアドレス生成部LAG出力LA又はデータメモリD−MEMからのロードデータLDのフォワーディングを行う。その後、Eステージのロードアドレス生成部LAGでロードアドレスLAを生成し、M1及びM2ステージでデータメモリD―MEMからのロードを行い、ロードデータLDをレジスタファイルRFに格納する。格納するレジスタファイルRFはロードナノプロセッサLDNが実行する命令で指定する。通常は演算ナノプロセッサEXNに渡して演算するが、メモリ間データ転送であればストアナノプロセッサSTNに渡し、データリンクをたどるような場合はロードナノプロセッサLDNのレジスタファイルRFに格納する。また、アドレスレジスタを更新する場合はロードアドレス生成部LAGの出力LAをレジスタファイルRFに格納する。
次に、ストアナノプロセッサSTNについて説明する。命令キューIQの命令をDステージで命令デコーダIDによって命令デコードすると共に、命令デコード情報に基づいてレジスタリード部RRでレジスタファイルRFからのレジスタリードを行う。更に、必要に応じてフォワーディング部FWDでストアアドレス生成部SAG出力SA又はデータメモリD−MEMからのロードデータのフォワーディングを行う。その後、Eステージのストアアドレス生成部SAでストアアドレスSAを生成し、M1及びM2ステージでデータメモリD―MEMにストアデータSDをストアする。また、アドレスレジスタを更新する場合はストアアドレス生成部SAGの出力SAをレジスタファイルRFに格納する。
図14には、本発明の実施形態2に係るデータプロセッサ向けにアセンブルした第2のプログラムが例示される。図1のプログラムはデータを2度以上使用することがなく本発明の特徴である読出しデータの保持と無効化のうち保持する例が現れない。そこで図1の第1のプログラムとは別の第2のプログラムを使用する。(1)はC言語で表したプログラムである。第2のプログラムは2つの配列a及びbの各要素の和と差をとり、それぞれ別の配列c及びdに格納する。(2)は図13に例示した実施形態2に係るプロセッサ用のアセンブラコードである。4つのナノプロセッサ用に4つのフローに分割されている。
命令フェッチフローでは、残りの3つのデータ処理フロー用コードの各命令キューIQへのロードを行う。まず、命令キューロード・ループ設定命令「iqlp/ld _LD0,4,3,4,N」はラベル_LD0から4命令をロードナノプロセッサLDNの命令キューIQにロードし、3命令目から4命令目をN回ループさせるように設定する命令である。オペランドが多いので32ビット命令とし、ラベルアドレスをプログラムカウンタからの8ビットオフセットで示し、ロード命令数、ループ開始命令、及びループ終了命令を3ビットずつ、ループ回数を6ビットで表現したとすると23ビットをオペランドに使用する。更にビット数を増やしたい場合は、命令を命令キューロードとループ設定用に分割すればよい。図14の例では1命令にパックすることが可能である。図6の命令フォーマットでは1番目のレジスタオペランドのないフォーマットを使用すればよい。先頭ビットのeを1にすれば32ビット命令となる。同様に、「iqlp/ex _EX0,2,1,2,N」はラベル_EX0から2命令を演算ナノプロセッサEXNの命令キューIQにロードし、1命令目から2命令目をN回ループさせるように設定する。また、「iqlp/st _ST0,4,3,4,N」はラベル_ST0から4命令をストアナノプロセッサSTNの命令キューIQにロードし、3命令目から4命令目をN回ループさせるように設定する。
ロードフローではループ前に配列a及びbの先頭アドレスをr0及びr1に設定し、ループ内で「mov @r0+,r0/ex」及び「mov @r1+,r1/ex」によって配列a及びbの要素をアドレスの小さい方から逐次ロードしていく。アドレス用のr0及びr1はロードナノプロセッサLDNのレジスタであり、ロード後にインクリメントされる。r0/ex及びr1/exは演算ナノプロセッサEXNのレジスタである。ロードデータを演算するために、ロード命令のデスティネーションを演算ナノプロセッサEXNのレジスタにしている。これらのロード命令は図6の命令フォーマットでは8番目を使用する。アドレス用のr0及びr1はmbフィールドに割当て、デスティネーションのr0/ex及びr1/exにはwaフィールドを使用し、npフィールドでexナノプロセッサのレジスタであることを指定する。
演算フローではロードされた2つの値を加算命令「add r0/k,r1/k,r0/st」及び減算命令「sub r0,r1,r1/st」によって加減算する。このとき、ロードデータr0及びr1を2度ずつ参照するので1回目の加算による参照では/kを付けて値を保持している。2回目の減算による参照後はレジスタを無効化する。r0/st及びr1/stはストアナノプロセッサSTNのレジスタである。演算結果はストアするためにストアナノプロセッサSTNに送る。これらの加減算命令は図6の命令フォーマットでは9番目を使用する。本フォーマットにより読出しオペランドに適宜/kを付けて値を保持することが可能となる。加算命令のr0/st及び減算命令のr1/stはwaフィールドに割当て、npフィールドでストアナノプロセッサSTNを指定する。
ストアフローではループ前に配列c及びdの先頭アドレスをr2及びr3に設定し、ループ内で演算ナノプロセッサEXNから送られてきたデータを「mov r0,@r2+」及び「mov r1,@r3+」によって配列c及びdの要素へ逐次ストアしていく。これらのストア命令には図6の命令フォーマットでは6番目を使用する。ストアデータにrbフィールドを、ポストインクリメントするアドレスにmaフィールドを割当てる。
図15には、実施形態2のデータプロセッサによる図13のプログラムの動作が示される。まず、命令フェッチフローの3命令を実行し、図13のロード、演算、及びストアナノプロセッサLDN,EXN,STNの命令キューIQにロード、演算、及びストアフローを実行するための命令をセットアップする。より詳細には、命令キューロード・ループ設定命令「iqlp/ld _LD0,4,3,4,N」が命令フェッチナノプロセッサIFNの命令キューIQに書込まれると、命令デコーダIDで命令がデコードされ、_LD0で示されるロードフローの先頭アドレスの生成用制御情報がセットアップされる。そして命令アドレス生成部IAGによって命令アドレスIAが生成され、命令メモリI−MEMをアクセスして、ロードフローの4命令をフェッチし、ロードナノプロセッサLDNの命令キューIQに書込む。更に、ループ構造指定に従って、3,4命令目をN回繰り返すように制御を設定する。この結果、命令フェッチナノプロセッサIFNの命令キューIQへの書込みから、ロードナノプロセッサLDNの命令キューIQへの書込みまでは、命令フェッチナノプロセッサIFNのD、E、M1、及びM2の4ステージを通過するので4サイクルかかり、図15の5サイクル目からロードナノプロセッサLDNの実行を開始する。同様に、演算及びストアフローの命令をセットアップすると、6および7サイクル目から実行可能となる。
ロードフローでは、最初の2命令でロード元の2つの配列a及びbへのポインタをセットアップする。この結果、r0及びr1が逐次有効となる。その後はループ動作に入り2つのロード命令「mov @r0+,r0/ex」及び「mov @r1+,r1/ex」を交互に実行していく。11サイクル目に空きがあるのは、このサイクルで演算フローの加算命令「add r0/k,r1/k,r0/st」がr0の値を保持したために9サイクル目のロード命令「mov @r0+,r0/ex」がr0/exの書込みを待たされるため、最小限の書込みデータバッファで実現するために後続命令をストールさせているためである。10サイクル目の「mov @r1+,r1/ex」は既に発行しているためストールが間に合わず書込みデータバッファで書込みを待たせる。13サイクル目以降はストアフローもメモリアクセスをして競合が起こるため、ロードが先行し過ぎることはなくなり、ロードデータの書込みが待たされることはなくなる。即ち、13サイクル目以降のストールはストアフローとのメモリアクセス競合によるものである。
演算フローでは前述のように6サイクル目から実行可能となっており、先頭の加算命令「add r0/k,r1/k,r0/st」がr0及びr1が有効になるのを待っている。そして10サイクル目で有効となるので11サイクル目に実行を開始する。そして、11サイクル目ではr0及びr1の値を保持し、12サイクル目で減算命令「sub r0,r1,r1/st」を実行するとr0及びr1が無効化される。そして、書込みを待たされていたロードデータが12及び13サイクル目に書込まれて再びr0及びr1が有効になる。また、加減算命令のデスティネーションはストアナノプロセッサSTNのr0及びr1なので、フォワーディングパスを使わずにストアナノプロセッサSTNのレジスタファイルRFに書込む。このため、ストアナノプロセッサSTNには加減算命令のレイテンシが2サイクルに見える。その後も、ループ制御によって加減算命令を繰り返し、ロードフローからの書込みによってr0及びr1が有効になる度に加減算命令を実行する。
ストアフローでは前述のように7サイクル目から実行可能となるので、最初の2命令でストア先の配列c及びdの先頭アドレスへのポインタをセットアップする。この結果、r2及びr3が逐次有効となる。その後はループ動作に入り2つのストア命令「mov r0,@r2+」及び「mov r1,@r3+」を交互に実行していく。まず、12サイクル目に演算フローからの書込みによってストアデータのr0が有効になるので13サイクル目に「mov r0,@r2+」を実行する。そして、r0の値をr2の指すアドレスにストアし、r0を無効化して、r2をインクリメントする。同様に、13サイクル目にストアデータのr1が有効になるので14サイクル目に「mov r1,@r3+」を実行する。以下同様に、r0及びr1が有効になる度にストア命令を実行し、r0及びr1の無効化とr2及びr3の更新を行っていく。
以上のように、4つのナノプロセッサIFN,EXN,LDN,STNが協調してプログラムを効率的に実行することができる。また、図10で実施形態1の場合について示したように本発明の方式はレイテンシの増加に対して効率的に対応することができる。本実施形態2の場合においてもレイテンシ増に応じて図15の演算及びストアフローの開始が遅れるだけで対応可能である。この時、前述の9、10サイクル目のロードのように発行済みでストールが効かず書込みを待たされる命令数がレイテンシに比例して増加するため、そのための書込みバッファエントリ数は適宜増やす必要がある。
《実施形態3》
図16には、本発明の実施形態3に係るデータプロセッサが例示される。実施形態3においては、実施形態2の各ナノプロセッサのうち、ロードナノプロセッサLDNとストアナノプロセッサSTNを統合して、ロードストアナノプロセッサ(LS Nanoprocessor)LSNとしている。演算に先行して実行され演算用のソースオペランドをメモリから供給するロードと演算後に演算結果をメモリに格納するストアでは、本来、最適な実行タイミングが異なるため実施形態2のように分割してタイミングをずらせるようにすると性能向上に寄与する。しかしながら、メモリアクセス間の依存関係解析を容易にするにはメモリアクセスを逐次実行することが望ましい。そして特にアドレスの処理が逐次的であることが重要である。そこで、実施形態3ではロードストアナノプロセッサLSNがメモリアクセスを逐次実行し、ストア処理では、ストアバッファを用いてストアデータを遅く受取れるようにして、メモリアクセス間の依存関係解析を容易にしながら、ストア処理を実質的に遅らせられるようにしている。
各ナノプロセッサのうち、命令フェッチ及び演算ナノプロセッサIFN,EXNは実施形態2と同様である。違いは、命令フェッチナノプロセッサIFNの命令供給先が4から3になり、演算ナノプロセッサEXNがデータを渡す相手がロード及びストアナノプロセッサLDN,STNの2つからロードストアナノプロセッサLSNのみとなった点である。ロードストアナノプロセッサLSNは構造的には実施形態2のストアナノプロセッサSTNと同様である。違いは、D−MEMに対してストアだけでなくロードのリクエストも行う点である。また、D−MEM内にはストアバッファを用意し、ストアデータの遅れによるパイプラインの乱れを隠蔽する。
図17には、本発明の実施形態3に係るプロセッサ向けにアセンブルした第2のプログラムが例示される。命令フェッチフローでは、ロードストア及び実行のデータ処理フロー用コードの各命令キューIQへのロードを行う。まず、命令キューロード・ループ設定命令「iqlp/ls _LS0,8,5,8,N」はラベル_LS0から8命令をロードストアナノプロセッサLSNの命令キューIQにロードし、5命令目から8命令目をN回ループさせるように設定する命令である。同様に、「iqlp/ex _EX0,2,1,2,N」はラベル_EX0から2命令を演算ナノプロセッサEXNの命令キューIQにロードし、1命令目から2命令目をN回ループさせるように設定する。
ロードストアフローではループ前に配列aからdの先頭アドレスをr0からr3に設定し、ループ内で「mov @r0+,r0/ex」及び「mov @r1+,r1/ex」によって配列a及びbの要素をアドレスの小さい方から逐次ロードしていき、「mov r4,@r2+」及び「mov r5,@r3+」によって加減算結果を配列c及びdの要素へ逐次ストアしていく。一方、演算フローは図14と同様であるが、デスティネーションがストアナノプロセッサSTNからロードストアナノプロセッサLSNに変わったために、npフィールドがstからlsに変わっている。
図18には、実施形態3のプロセッサによる図17のプログラムの動作が示される。まず、命令フェッチフローの2命令を実行し、図16のロードストア及び演算ナノプロセッサLSN,EXNの命令キューIQにロードストア及び演算フローを実行するための命令をセットアップする。詳細な動作は図15の場合と同様である。そして、5サイクル目からロードストアフローを、6サイクル目から演算フローを実行できる。
ロードストアフローでは、最初の4命令で4つの配列aからdへのポインタをセットアップする。この結果、r0からr3が逐次有効となる。その後はループ動作に入り2つのロード命令「mov @r0+,r0/ex」及び「mov @r1+,r1/ex」並びに2つのストア命令「mov r4,@r2+」及び「mov r5,@r3+」の4命令を繰返し実行していく。一方、演算フローの動作は図15と同様である。ロードストアフローでのロード開始が図15より2サイクル遅いため、演算フローも2サイクル遅れの動作となっている。
本動作例ではロードレイテンシを3サイクルとしているため、例えば10サイクル目に開始したロード命令のロードデータは12サイクル目の終わりに有効となり、13サイクル目から使用可能となる。ロードストアフローの11サイクル目のストア命令「mov r4,@r2+」は演算フローの13サイクル目の加算命令「add r0/k,r1/k,r4/ls」の演算結果を使用する。しかし、演算結果は待たずに先行して処理を開始し、ストアバッファによって演算結果の遅れを吸収する。同様に、12サイクル目のストア命令「mov r5,@r3+」は14サイクル目の減算命令「sub r0,r1,r4/ls」の演算結果を使用するが、演算結果は待たずに先行して処理を開始する。この結果、ロードストアフローはストールせずに毎サイクル命令を実行し、メモリポートが1ポートの場合の最大スループットを維持できる。
図19には、ストアバッファによるデータ依存ストールの回避動作の詳細が示される。図18の11から16サイクルの動作を示している。ロードストアフローの11サイクル目のストア命令「mov r4,@r2+」は、Dステージで命令デコードID及びレジスタリードRRを行い、Eステージでデータアドレス生成DAGを行い、M1ステージでアドレスライトバックWB及びストアバッファアドレス書込みSBAを行い、ストアデータの到着を待つ。尚、D−MEMがキャッシュの場合はタグアレイを引いてヒットミス判定をしておく。更に、アドレス変換やメモリ保護チェックを行なう場合もM1ステージで行う。ストアデータは演算フローの13サイクル目の加算命令「add r0/k,r1/k,r4/ls」が生成するので、この加算命令のレジスタ書込みステージWBで有効となり、このタイミングでストアバッファデータ書込みSBDを行う。その後、直ちにD−MEMに書込めるタイミングでは、14サイクル目のロード「mov @r1+,r1/ex」がM1ステージでD−MEMのデータアレイにアクセスしているため、1サイクル待って15サイクル目のストア命令「mov r4,@r2+」のM1ステージで行う。このストア命令は11サイクル目のと同様にアドレスライトバックWB及びストアバッファアドレス書込みSBA等を行っているが、データ書込のためのデータアレイアクセスはしないため、ストアバッファからのデータアレイにアクセスが可能となる。このように、ストアバッファは後続命令がM1ステージでデータアレイにアクセスしない場合にメモリへの書込みを行う。以上のようにストアバッファによってデータ依存ストールの回避が可能となる。
《実施形態4》
前述の実施形態1はナノプロセッサを2つ必要とし、実施形態2及び3では複数命令フローを必要とする。命令フロー分割が最も効果的なのはレイテンシの長いロード命令を先行実行する場合であるため、この場合に限定して処理フローを分割すれば既存プロセッサに近い構成を採っても処理能力を高めることが出来る。
図20には、本発明の実施形態4に係るデータプロセッサが例示される。本実施形態では中央演算処理装置(単にCPUとも記す)は既存プロセッサと同様な構成であるため内部構造の詳細説明は省略する。CPUはデータ転送ユニットDTU、命令メモリI−MEM、データメモリD−MEM、及び拡張メモリE−MEMと接続されている。命令メモリI−MEMには命令アドレスIAを出力して命令INSTを受取る。データメモリD−MEMにはデータアドレスDAを出力してロードデータLDを受取るか、データアドレスDA及びストアデータSDを出力してストアを行わせるかする。データ転送ユニットDTUにはデータアドレスや転送タイプ等をDTINFとして送り、データ転送ユニットDTUがデータアドレスEDAを出力して、CPUがそれと同期してロードデータELDを受取るか、ストアデータESDを出力する。また、ロードデータをレジスタやフォワーディングハード等で受取れない場合に備えてロードデータオーバランバッファLDOBを備えている。
図21には、実施形態4に係るデータプロセッサ向けにアセンブルした第1のプログラムが例示される。最初の5命令はデータ転送ユニットDTUに対する配列aからの連続ロード要求である。最初の命令でデータ転送ユニットDTUの転送チャネルch1の制御レジスタアドレスをr0に格納する。次の命令で配列aへのポインタをr1に格納する。そして、次の命令でr0の指す転送チャネルch1のアドレスレジスタにr1に格納された配列aへのポインタを書込む。この時r0の値は保持する。次の命令では転送チャネルch1の制御情報ch1cntlをr1に書込む。そして、次の命令でr0の指す転送チャネルch1の制御レジスタにr1に格納された制御情報ch1cntlを書込む。次の5命令は、同様にデータ転送ユニットDTUの転送チャネルch2に配列bからの連続ロード要求を出している。その後、r2に配列cへのポインタを格納し、繰返し回数Nをr3に格納して初期化処理を完了する。
ループ部では、転送チャネルch1及びch2からの配列a及びbの値をそれぞれr4及びr5で受け、これらを加算命令で加算し、ループ変数r3をデクリメントしてゼロかどうかをチェックしてフラグに反映し、加算結果r5をr2の指す配列cに格納し、分岐命令でフラグをチェックしてr3がゼロになっていればループを抜け、そうでなければループ先頭に戻る。
図22には、ロードレイテンシが10の場合の実施形態4のデータプロセッサによる図21のプログラムの動作が示される。実施形態4のCPUは2命令同時発行のスーパスカラプロセッサとする。まず、初期化部の12命令を2命令ずつ実行し、データ転送ユニットDTUに配列a及びbからの連続ロードを開始させる。更に、r2に配列cへのポインタを格納し、繰返し回数Nをr3に格納して初期化処理を完了する。
データ転送ユニットDTUでは3及び5サイクル目にそれぞれch1及びch2のセットアップが完了してロードを開始する。そして、レイテンシ10を仮定しているため、ch1及びch2の最初のデータはそれぞれ12及び14サイクル目の終りに到着する。この結果、ループ部は15サイクル目から開始される。そして、15サイクル目で加算命令を実行するとr4が無効となるためch1からの次のデータがr4に書込まれる。更に、16サイクル目でストア命令を実行するとr5が無効となるためch2からの次のデータがr5に書込まれる。この間、ループ制御のためのデクリメント及びテスト命令dt及び分岐命令bfも実行される。その後はこれら4命令を繰返し実行する。この結果、10サイクルという長いレイテンシであっても少ないレジスタ本数で滞りなく処理を進めることが出来る。そして、更に実施形態1のようなループ構造定義命令を用いればループ本体は2命令となり1ループを1サイクルで実行することも可能である。但し、この場合メモリアクセスネックとなる恐れがあるため、データ転送ユニットDTUが4データずつロードしたり、ストア処理を4データずつコンバインしたりするか、メモリを多バンク又は多ポートにする必要がある。
図23には、ロードデータオーバランバッファLDOBの例が示される。ロードデータELDと共に書込み情報WINFを受取り、レジスタが有効で書込めなかったり、レジスタ書込みポートが空いていなかったりした場合には、これらをWINF0〜n及びLD0〜nのいずれかに書込む。そして、書込み可能となったらバッファから読出してレジスタに書込む。10サイクルレイテンシでもロードデータを滞りなく供給するには10サイクル分のロードデータオーバランバッファLDOBが必要となる。データが消費されるのは早くて10サイクル後であるから、データが毎サイクル消費されることを期待して10サイクル連続でデータロードした後で全くデータが消費されない場合、11回目のロードを発行しなければロードデータはロードデータオーバランバッファLDOBに収まる。その後は1つ消費したら1つロードすればロードデータは十分供給され、ロードデータネックでストールすることはない。
《実施形態5》
前述の実施形態1から4では命令体系を刷新し、各命令においてレジスタを無効化できるようにしている。本実施形態5では、既存命令体系を温存したまま本発明の基本であるレジスタの無効化を可能とする。そして、実施形態4と同一構成で命令体系を差し替える。具体的には通常プロセッサの命令体系にレジスタ無効化命令を追加する。図24には、実施形態5に係るデータプロセッサ向けにアセンブルした第1のプログラムが例示される。初期化部は図21とほぼ同様であるが、図8のプログラムと同様にループ構造定義命令を使用してループ内の命令数を減らしている。ループ部ではレジスタ使用後にレジスタを無効化してデータ転送ユニットDTUが次のデータを供給できるようにしている。具体的には、まず加算命令「add r4,r5」で2つの配列のデータを加算した後、レジスタ無効化命令「regi r4」でr4を無効化し、r4に新しいロードデータを書込めるようにする。更に、加算結果をストア命令「mov r5,@r2+」でストアした後、レジスタ無効化命令「regi r5」でr5を無効化し、r5に新しいロードデータを書込めるようにする。
図25には、ロードレイテンシが10の場合の実施形態5のデータプロセッサによる図24のプログラムの動作が示される。CPUは実施形態4と同様に2命令同時発行のスーパスカラプロセッサとする。まず、初期化部の14命令を2命令ずつ実行し、データ転送ユニットDTUに配列a及びbからの連続ロードを開始させる。更に、r2に配列cへのポインタを格納し、ループ構造を定義して初期化処理を完了する。ループ部の開始は実施形態4と同様に15サイクル目である。15サイクル目では加算命令「add r4,r5」とレジスタ無効化命令「regi r4」を、16サイクル目ではストア命令「mov r5,@r2+」とレジスタ無効化命令「regi r5」を実行し、以下この2サイクルの動作を繰返す。実施形態4と比較するとレジスタ無効化命令分だけ命令数が増加しているものの、CPU本体でロードを行わないためロード命令の実行が不要となっており、ロード命令の代わりにレジスタ無効化命令を実行していると考えると、一般のプロセッサと実行命令数は同じである。そして、一般のプロセッサにおける、多数のレジスタによるループアンローリングや大規模ハードウェアによるアウトオブオーダ実行より効率的にロードレイテンシの隠蔽が可能となる。
《実施形態6》
これまでに例示した第1及び第2のプログラムはループ構造はあるものの条件分岐によって処理が変わるということがなかった。そして、フローが変わったので、ロードしたレジスタを使わなくなるとか、無効化したレジスタを再度使用するといった要求はなかった。本実施形態6では、実施形態5で導入したレジスタ無効化命令及び新たに導入するレジスタ有効化命令により、フロー変化に伴うレジスタ使用状態の変化に対応できるようにする。
図26には、文字列比較プログラムのC言語プログラムと実施形態3及び5用のアセンブラプログラムが例示される。高速化された文字列比較プログラムでは複数の文字を同時に比較する方式が一般的であるが、この方式は前処理後処理を複雑化させるものであり、処理の幅を広げることによる高速化は本発明とは独立に適用可能であるため、図26では一文字ずつ処理するプログラムとしている。
まず、C言語プログラムを説明する。文字列比較プログラムは何文字目で不一致となったか或いは何文字の文字列が一致したかで動作が変化する。ここでは、配列aおよびbにはそれぞれ文字列“card”及び“car”が入っているものとし、4文字目で不一致となるのもとする。また、文字列の最大文字数はNとする。プログラム本体ではN回ループしてi文字目で不一致であるか文字列が終わったらループを抜けて文字コードの差を生成する。尚、変数cはレジスタ変数とする。文字列の終りは不一致比較でループを抜けなかった場合、即ち文字が一致した場合に一方の文字のみチェックしている。一致しているのでもう一方をチェックする必要はない。
次に、実施形態3用アセンブラプログラムについて説明する。命令フェッチフローでは、ロードストア及び実行のデータ処理フロー用コードの各命令キューIQへのロードを行う。まず、命令キューロード・ループ設定命令「iqlp/ls _LS0,4,3,4,N」はラベル_LS0から4命令をロードストアナノプロセッサLSNの命令キューIQにロードし、3命令目から4命令目をN回ループさせるように設定する命令である。同様に、「iqlp/ex _EX0,6,2,3,N」はラベル_EX0から6命令を演算ナノプロセッサEXNの命令キューIQにロードし、2命令目から3命令目をN回ループさせるように設定する。更に分岐設定命令「bf/ex _EX1,_EX3」及び「bt/ex _EX2,_EX3」によって、ラベル_EX1の命令実行後にフラグがFALSEだった場合とラベル_EX2の命令実行後にフラグがTRUEだった場合にラベル_EX3に分岐するように設定する。
ロードストアフローではループ前に配列a及びbの先頭アドレスをr0及びr1に設定し、ループ内で「mov.b @r0+,r0/ex」及び「mov.b @r1+,r1/ex」によって配列a及びbの要素をアドレスの小さい方から逐次ロードしていく。
演算フローではループ前に文字列の終りを示す値“0”をr2に設定する。そして、ループ内では比較命令「cmp/eq r0/k,r1」によってロードされた2つの値を比較してフラグを更新する。この時もう一度使用するr0は保持する。そして、前述の分岐設定によってフラグがFALSEだった場合はラベル_EX3に分岐する。更に、比較命令「cmp/eq r0,r2/k」によってロードされた値の一方と文字列の終りを示す値“0”を比較してフラグを更新する。この時、もう一度使用するr2は保持する。そして、前述の分岐設定によってフラグがTRUEだった場合はラベル_EX3に分岐する。ループを抜けると不一致した文字のコード差を計算するため、r0及びr1を有効にする。ここでは2つのレジスタを有効にするレジスタ有効化命令「regv r0,r1」を使用している。その後、減算命令「sub r0,r1」で不一致した文字のコード差を計算する。最後に、不要となりながら無効化していないr2をレジスタ無効化命令「regi r2」で無効化する。
次に、実施形態5用アセンブラプログラムについて説明する。初期化部は第1のプログラム用の図24と同様である。ループ部では比較命令「cmp/eq r4,r5」によってロードされた2つの値を比較してフラグを更新する。そして、分岐命令「bf _L03」によってフラグがFALSEだった場合はラベル_L03に分岐する。TRUEの場合は次のレジスタ無効化命令「regi r5」でr5を無効化し、r5に新しいロードデータを書込めるようにする。次に、比較命令「cmp/eq r4,r2」によってロードされた値の一方と文字列の終りを示す値“0”を比較してフラグを更新する。そして、分岐命令「bt _L03」によってフラグがTRUEだった場合はラベル_EX2に分岐する。FALSEの場合は次のレジスタ無効化命令「regi r4」でr4を無効化し、r4に新しいロードデータを書込めるようにする。そして、ループ構造によってこれらの6命令を繰り返す。ループを2回目の比較結果で抜けた場合は、既にr5が無効化されているためラベル_L02から実行してレジスタ有効化命令「regv r5」で有効化する。そして、最後に減算命令「sub r4,r5」で不一致した文字のコード差を計算する。
図27には、実施形態3のデータプロセッサによる図26(2)のプログラムの動作が示される。まず、命令フェッチフローの2命令を実行し、ロードストア及び演算ナノプロセッサLSN,EXNの命令キューIQにロードストア及び演算フローを実行するための命令をセットアップする。更に、次の2命令によって条件分岐を設定する。そして、5サイクル目からロードストアフローが、6サイクル目から演算フローが実行可能となる。
ロードストアフローでは、最初の2命令で2つの配列a及びbへのポインタをセットアップする。この結果、r0及びr1が逐次有効となる。その後はループ動作に入り2つのロード命令「mov @r0+,r0/ex」及び「mov @r1+,r1/ex」を交互に実行していく。
一方、演算フローでは、6サイクル目に文字列の終りを示す値“0”をr2に書込み、ロードデータが有効になるのを待つ。本動作例ではロードレイテンシを3サイクルとしているため、7、8サイクル目に開始したロード命令のロードデータは10、11サイクル目から使用可能となる。先頭の比較命令「cmp/eq r0,r1/k」はこれらのロードデータを使用するため11サイクル目に実行を開始する。以降の比較命令はロードデータが揃っていてストールすることはない。その後、文字列は4文字目で不一致となるため、17サイクル目の「cmp/eq r0,r1/k」でフラグがFALSEとなり、演算フローの18,19サイクル目のループ側の実行をキャンセルして、20サイクル目からループを抜けた後の命令を実行する。この時、ロードストアフローは先行してロードを進めており、15サイクル目以降のロード命令をキャンセルする。キャンセルの詳細については後述する。そして、演算フローでは20サイクル目に一旦無効化したr0及びr1をレジスタ有効化命令「regv r0,r1」で有効化する。その後、減算命令「sub r0,r1」で不一致した文字のコード差を計算し、最後にレジスタ無効化命令「regi r2」でr2を無効化する。
図28には、図27の動作フローにおける演算ナノプロセッサEXNによるロードキャンセルの動作が例示される。17サイクル目の「cmp/eq r0,r1/k」の実行(E)ステージで比較結果が確定し、この結果で15サイクル目のロード命令「mov @r0+,r0/ex」のライトバック(WB)ステージをキャンセルする。他にも多くの処理をキャンセルする必要があるがタイミングが緩くなるので、キャンセル信号をファンアウトさせることは可能である。また、タイミングが厳しい場合はパイプライン段数を伸ばしてWBステージを遅らせればよい。
図29には、実施形態5のデータプロセッサによる図26(3)のプログラムの動作が示される。まず、初期化部の14命令を2命令ずつ実行し、データ転送ユニットDTUに配列a及びbからの連続ロードを開始させる。更に、r2に配列cへのポインタを格納し、ループ構造を定義して初期化処理を完了する。データ転送ユニットDTUを経由する場合セットアップのオーバヘッドがあるためそれを2サイクルとして5サイクルでロードデータの先頭が到着するものとする。この時、ループ部の開始は10サイクル目となる。分岐処理はNot Taken予測でストールなく進むものとし、Takenの場合はフラグを生成する比較命令から2サイクルストールするものとする。この時、10サイクル目では比較命令「cmp/eq r4,r5」と条件分岐命令「bf _L03」を、11サイクル目でレジスタ無効化命令「regi r4」と比較命令「cmp/eq r5,r2」を、12サイクル目で条件分岐命令「bt _L02」とレジスタ無効化命令「regi r5」を実行する。そして、2つのレジスタ無効化命令によるレジスタ無効化によって新たなロードデータが書込まれ処理が進んでいく。無効化命令はレイテンシ1のロード命令のように見える。レイテンシ0に見せることも可能であるがロードデータのレジスタの無効化命令と使用命令のデコードが同時となるため制御系のクリティカルパスが厳しくなる可能性が高い。その後、文字列は4文字目で不一致となるため、19サイクル目の比較命令で不一致が検出されて条件分岐命令でラベル_L03の減算命令に分岐する。この時、ループ側の4命令がキャンセルされる。特にレジスタ無効化命令もキャンセルされるため減算命令実行前のレジスタ有効化は不要である。例えば、配列aの文字列も配列bと同じ“car”であった場合は、4文字目が一致してかつ文字列の終りを示す値“0”であるため、20サイクル目の比較命令がTRUEとなり、21サイクル目の条件分岐命令でラベル_L02に分岐する。この場合は、r5の無効化はキャンセルされるものの、r4は無効化済みであるため、レジスタ有効化命令「regv r4」で有効化してから、減算命令を実行する。このように、レジスタ無効化及び有効化命令を追加するだけで、独立して動作するデータ転送ユニットDTUとの木目細かな同期が可能となり、ロードレイテンシの隠蔽が容易となる。また、レジスタ無効化前に分岐することにより、レジスタの有効化を不要に出来るため、レジスタ有効化命令は必ずしも必要ないが、性能やプログラミングの容易さには貢献するといえる。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
例えば、動作例は図1、図14、図26に例示されたC言語記述のプログラムに限定されず、本発明はその他の任意のプログラムの実行に広く適用することができる。
第1のプログラムを例示する説明図である。 第1のプログラムをアウトオブオーダ方式のデータプロセッサで実行した場合のループ部の動作を例示する説明図である。 ロードレイテンシ10の場合のループ部の動作を例示する説明図である。 第1の実施形態のデータプロセッサのパイプライン構成を例示する説明図である。 第1の実施形態のデータプロセッサ向けに第1のプログラムをアセンブルした場合を例示する説明図である。 本発明を適用したデータプロセッサ向けの命令コードフォーマットを例示する説明図である。 実施形態1のデータプロセッサによる図5プログラムの動作を例示する説明図である。 ループ構造定義命令を使用して第1のプログラムを書換えた場合を例示する説明図である。 実施形態1のデータプロセッサによる図8のプログラムの動作を例示する説明図である。 ロードレイテンシ10の場合の図8のプログラムの動作を例示する説明図である。 レジスタ有効性判定論理を示す説明図である。 レジスタ有効性判定論理の動作フローを示す説明図である。 第2の実施形態のデータプロセッサのパイプライン構成を例示する説明図である。 第2のプログラムを例示する説明図である。 実施形態2のデータプロセッサによる第2のプログラムの動作を例示する説明図である。 実施形態3のデータプロセッサのパイプライン構成を例示する説明図である。 実施形態3向けに第2のプログラムをアセンブルした例である。 実施形態3のデータプロセッサによる第2のプログラムの動作を例示する説明図である。 ストアバッファによるデータ依存ストールの回避を例示する説明図である。 実施形態4のデータプロセッサのブロック構成を例示する説明図である。 実施形態4向けに第1のプログラムをアセンブルした例である。 実施形態4のデータプロセッサによるロードレイテンシ10の場合の図21のプログラムの動作を例示する説明図である。 ロードオーバーランバッファの構成を例示する説明図である。 実施形態5向けに第1のプログラムをアセンブルした例である。 実施形態5のデータプロセッサによるロードレイテンシ10の場合の図24のプログラムの動作を例示する説明図である。 文字列比較プログラムを例示する説明図である。 実施形態3のデータプロセッサによる文字列比較プログラムの動作を例示する説明図である。 演算ナノプロセッサによるロードキャンセルを例示する説明図である。 実施形態5のデータプロセッサによる文字列比較プログラムの動作を例示する説明図である。
符号の説明
CPU1、CPU2 ナノプロセッサ
k キープフィールド
np ナノプロセッサ番号フィールド
ra、rb、rc 読出しレジスタ番号フィールド
ma,mb モディファイレジスタ番号フィールド
wa 書込みレジスタ番号フィールド
IFN 命令フェッチナノプロセッサ
EXN演算ナノプロセッサ
LDN ロードナノプロセッサ
STN ストアナノプロセッサ
LSN ロードストアナノプロセッサ
1 有効性判定論理
2 バリッドビットフラグレジスタ

Claims (10)

  1. 夫々が異なる命令フローを実行する複数のデータ処理回路を有し、
    夫々のデータ処理回路は命令フローで参照される複数のレジスタと、前記複数のレジスタが保有するデータに対する有効性をレジスタ毎に示すフラグビットとを有し、
    前記データ処理回路は、他のデータ処理回路の前記レジスタにデータを書込む操作を指示する第1命令を実行するとき、当該第1命令で前記書込む操作が指示されているレジスタが無効であるか否かを確認し、無効でなければ無効になるのを待ち、無効であれば書き込みを行い、また、前記レジスタに対する参照に併せて当該参照されるレジスタのデータを対応するフラグビットを用いて無効化する指示を与える第2命令を実行するとき、当該第2命令でデータ無効化の指示がなされているレジスタが無効な場合は有効になるまで参照の実行を抑止し、当該第2命令を実行したとき参照の終わったレジスタを無効化する制御を行う、データプロセッサ。
  2. 前記命令セットに含まれるロード命令及びアドレス生成命令を実行するデータ処理回路は前記命令セットに含まれるストア命令及びアドレス生成命令を実行するデータ処理回路とは分離されている請求項1記載のデータプロセッサ。
  3. 前記命令セットに含まれるメモリアクセス命令及びアドレス生成命令を実行するデータ処理回路は其の他の演算命令を実行するデータ処理回路から分離されている請求項1記載のデータプロセッサ。
  4. 命令フェッチを実行するデータ処理回路と演算を実行するデータ処理回路とを別々に有し、前記演算を実行するデータ処理回路の命令キューは前記命令フェッチを実行するデータ処理回路が扱うレジスタとみなされ、命令フェッチを実行するデータ処理装置は前記第1命令として命令キューのエントリへの書込み指示を有する命令を実行し、演算を実行するデータ処理装置は前記第2命令として命令キューのエントリ参照後に対応するフラグビットを用いてエントリの無効化を指示する命令を実行して、命令フェッチを実行するデータ処理回路から演算を実行するデータ処理回路への命令の受け渡しを行なう請求項1記載のデータプロセッサ。
  5. 前記第1命令はディスティネーションレジスタフィールドに対応して書込み先のデータ処理回路を特定する第1パラメータの指定フィールドを有する請求項1記載のデータプロセッサ。
  6. 前記第1命令はレジスタ間接アドレシングモードで指定するメモリからレジスタにデータを転送するロード命令である、請求項5記載のデータプロセッサ。
  7. 前記第2命令は参照後に無効にするか否かを指示する第2パラメータの指定フィールドをレジスタフィールドに対応して有する請求項1記載のデータプロセッサ。
  8. 前記第2パラメータの指定フィールドを有するレジスタフィールドはリードレジスタを指定するフィールドである、請求項7記載のデータプロセッサ。
  9. 前記第2パラメータの指定フィールドを有するレジスタフィールドにはライトレジスタを指定するフィールドおよびリード・モディファイレジスタを指定するフィールドが除外される請求項8記載のデータプロセッサ。
  10. 夫々が異なる命令フローを実行する複数のデータ処理回路を有し、
    夫々のデータ処理回路は命令フローで参照される複数のレジスタと、前記複数のレジスタが保有するデータの有効性をレジスタ毎に示すフラグビットとを有し、
    一のデータ処理回路が他のデータ処理回路の前記レジスタにデータを書込む操作を指示する第1命令と、データ処理回路の前記レジスタに対する参照に併せて当該参照されるレジスタのフラグビットに対するデータ無効化の指示を与える第2命令とを、前記複数のデータ処理回路の命令セットに含
    前記データ処理回路は、前記第1命令を実行するとき、当該第1命令で前記書込む操作が指示されているレジスタが無効であるか否かを確認し、無効でなければ無効になるのを待ち、無効であれば書き込みを行い、前記第2命令を実行したとき参照の終わったレジスタを無効化する制御を行う、データプロセッサ。
JP2006323537A 2006-11-30 2006-11-30 データプロセッサ Expired - Fee Related JP4230504B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2006323537A JP4230504B2 (ja) 2006-11-30 2006-11-30 データプロセッサ
US11/707,150 US7610471B2 (en) 2006-11-30 2007-02-16 Data processor
US12/585,376 US7962728B2 (en) 2006-11-30 2009-09-14 Data processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006323537A JP4230504B2 (ja) 2006-11-30 2006-11-30 データプロセッサ

Publications (2)

Publication Number Publication Date
JP2008139964A JP2008139964A (ja) 2008-06-19
JP4230504B2 true JP4230504B2 (ja) 2009-02-25

Family

ID=39477241

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006323537A Expired - Fee Related JP4230504B2 (ja) 2006-11-30 2006-11-30 データプロセッサ

Country Status (2)

Country Link
US (2) US7610471B2 (ja)
JP (1) JP4230504B2 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013080289A1 (ja) * 2011-11-28 2013-06-06 富士通株式会社 信号処理装置及び信号処理方法
US9424041B2 (en) * 2013-03-15 2016-08-23 Samsung Electronics Co., Ltd. Efficient way to cancel speculative ‘source ready’ in scheduler for direct and nested dependent instructions
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US9690590B2 (en) * 2014-10-15 2017-06-27 Cavium, Inc. Flexible instruction execution in a processor pipeline
US9747109B2 (en) * 2014-10-15 2017-08-29 Cavium, Inc. Flexible instruction execution in a processor pipeline
US9817576B2 (en) * 2015-05-27 2017-11-14 Pure Storage, Inc. Parallel update to NVRAM
US10235219B2 (en) * 2015-07-27 2019-03-19 Sony Interactive Entertainment America Llc Backward compatibility by algorithm matching, disabling features, or throttling performance
US11403099B2 (en) 2015-07-27 2022-08-02 Sony Interactive Entertainment LLC Backward compatibility by restriction of hardware resources
US20170052782A1 (en) * 2015-08-21 2017-02-23 Apple Inc. Delayed zero-overhead loop instruction
US10915333B2 (en) 2016-03-30 2021-02-09 Sony Interactive Entertainment Inc. Deriving application-specific operating parameters for backwards compatiblity
CN112631657B (zh) * 2019-09-24 2024-06-11 阿里巴巴集团控股有限公司 用于字符串处理的字节比较方法以及指令处理装置
CN112181492A (zh) * 2020-09-23 2021-01-05 北京奕斯伟计算技术有限公司 一种指令处理方法、指令处理装置和芯片

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2779032B2 (ja) * 1990-01-23 1998-07-23 株式会社日立製作所 情報処理装置
JP3322754B2 (ja) 1994-05-17 2002-09-09 富士通株式会社 並列計算機
US5603005A (en) * 1994-12-27 1997-02-11 Unisys Corporation Cache coherency scheme for XBAR storage structure with delayed invalidates until associated write request is executed
US6862635B1 (en) * 1998-11-13 2005-03-01 Cray Inc. Synchronization techniques in a multithreaded environment
US6199156B1 (en) * 1998-12-16 2001-03-06 Bull Hn Information Systems Inc. System for explicitly referencing a register for its current content when performing processor context switch
US6519694B2 (en) * 1999-02-04 2003-02-11 Sun Microsystems, Inc. System for handling load errors having symbolic entity generator to generate symbolic entity and ALU to propagate the symbolic entity
US6983358B2 (en) * 2001-10-23 2006-01-03 Ip-First, Llc Method and apparatus for maintaining status coherency between queue-separated functional units
US6847558B1 (en) * 2003-03-28 2005-01-25 Xilinx, Inc. Integrated circuit and method of reading data from a memory device
US7873785B2 (en) * 2003-08-19 2011-01-18 Oracle America, Inc. Multi-core multi-thread processor
US7111126B2 (en) * 2003-09-24 2006-09-19 Arm Limited Apparatus and method for loading data values
US7257762B2 (en) * 2004-10-07 2007-08-14 Lsi Corporation Memory interface with write buffer and encoder
DE102004058288A1 (de) * 2004-12-02 2006-06-08 Robert Bosch Gmbh Vorrichtung und Verfahren zur Behebung von Fehlern bei einem Prozessor mit zwei Ausführungseinheiten

Also Published As

Publication number Publication date
US7962728B2 (en) 2011-06-14
US20080133888A1 (en) 2008-06-05
JP2008139964A (ja) 2008-06-19
US7610471B2 (en) 2009-10-27
US20100005279A1 (en) 2010-01-07

Similar Documents

Publication Publication Date Title
JP4230504B2 (ja) データプロセッサ
JP3499252B2 (ja) コンパイル装置及びデータ処理装置
JP2550213B2 (ja) 並列処理装置および並列処理方法
US5911057A (en) Superscalar microprocessor having combined register and memory renaming circuits, systems, and methods
US6978460B2 (en) Processor having priority changing function according to threads
US20170083341A1 (en) Segmented instruction block
JP5209933B2 (ja) データ処理装置
EP3660668A1 (en) Block-based architecture with parallel execution of successive blocks
US20030005266A1 (en) Multithreaded processor capable of implicit multithreaded execution of a single-thread program
US9811340B2 (en) Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor
JP2004171573A (ja) 新規な分割命令トランズアクションモデルを使用して構築したコプロセッサ拡張アーキテクチャ
US20060242394A1 (en) Processor and processor instruction buffer operating method
JP3146707B2 (ja) 並列演算機能を有する計算機
US20210326136A1 (en) Entering protected pipeline mode with clearing
US7730288B2 (en) Method and apparatus for multiple load instruction execution
JP3752493B2 (ja) レジスタ・リネーミング機能を有するプロセッサ
JP2021507374A (ja) 命令を実行するためのシステム及び方法
US6119220A (en) Method of and apparatus for supplying multiple instruction strings whose addresses are discontinued by branch instructions
JPH1165840A (ja) 演算処理装置およびその方法
JP2828219B2 (ja) オブジェクト・コード互換性を与える方法、オブジェクト・コード互換性並びにスカラ・プロセッサ及びスーパスカラ・プロセッサとの互換性を与える方法、ツリー命令を実行するための方法、データ処理システム
JP2005108086A (ja) データ処理装置
WO2009026221A2 (en) Stall-free pipelined cache for statically scheduled and dispatched execution
JP2636821B2 (ja) 並列処理装置
Matsuo et al. TURBULENCE: Complexity-effective Out-of-order Execution on GPU with Distance-based ISA
Scott et al. Assembly-Level Optimizations for the M• CORE TM M3 Processor Core

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080324

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080902

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081104

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20081203

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

Free format text: PAYMENT UNTIL: 20111212

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20111212

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20121212

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20131212

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees