JP2014526758A - ストライド機能を有するベクトルロード演算/ストア演算を提供する命令及びロジック - Google Patents

ストライド機能を有するベクトルロード演算/ストア演算を提供する命令及びロジック Download PDF

Info

Publication number
JP2014526758A
JP2014526758A JP2014531781A JP2014531781A JP2014526758A JP 2014526758 A JP2014526758 A JP 2014526758A JP 2014531781 A JP2014531781 A JP 2014531781A JP 2014531781 A JP2014531781 A JP 2014531781A JP 2014526758 A JP2014526758 A JP 2014526758A
Authority
JP
Japan
Prior art keywords
register
data
value
processor
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014531781A
Other languages
English (en)
Other versions
JP5933011B2 (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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of JP2014526758A publication Critical patent/JP2014526758A/ja
Application granted granted Critical
Publication of JP5933011B2 publication Critical patent/JP5933011B2/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
    • 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/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8061Details on data memory access
    • 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/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/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
    • 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/30101Special purpose registers
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • G06F9/38873Iterative single instructions for multiple data lanes [SIMD]
    • 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)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

命令及びロジックが、ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する。幾つかの実施形態では、一組のロードと、第2の演算と、デスティネーションレジスタと、オペランドレジスタと、メモリアドレスと、ストライド長とを指定する命令に応答して、実行ユニットが、マスクレジスタ内の値を読み出す。このマスクレジスタ内のフィールドは、メモリアドレスからメモリ内のデータ要素までのストライド長の倍数に対応する。第1のマスク値は、要素がメモリからロードされていないことを示し、第2の値は、要素をロードする必要がないか、又は既にロードされていることを示す。第1の値を有する各データ要素について、このデータ要素は、メモリから対応するデスティネーションレジスタのロケーション内にロードされ、マスクレジスタ内の対応する値は、第2の値に変更される。次に、第2の演算が、デスティネーションレジスタ及びオペランドレジスタ内の対応するデータを用いて実行され、結果が生成される。命令は、障害後に再開することができる。
【選択図】図1A

Description

本開示は、処理ロジック、マイクロプロセッサ、及びプロセッサ又は他の処理ロジックによって実行されると、論理演算、数学演算、又は他の関数演算を実行する関連付けられた命令セットアーキテクチャの分野に関する。特に、本開示は、ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令及びロジックに関する。
現代のプロセッサは、多くの場合、計算集約的ではあるが、例えば、単一命令複数データ(SIMD)ベクトルレジスタ等の様々なデータ記憶デバイスを用いた効率的な実装を通じて利用することができる高レベルのデータ並列性を与える演算を提供する命令を備えている。
アプリケーション又はソフトウェアコードをベクトル化することは、例えば、幅広の、すなわち大きな幅のベクトルアーキテクチャ等の特定のシステム又は命令セットアーキテクチャ上でそのアプリケーションをコンパイル、インストール、及び/又は実行することを含むことができる。幾つかのアプリケーションでは、例えば、ベクトル幅が増加すると(例えば、3次元(3D)画像レンダリング等の演算の場合)、メモリアクセスが、複雑、非一貫的、又は不連続となる場合がある。ベクトル化プロセスに用いられるメモリは、不連続な又は隣接しないメモリロケーションにストアされる場合がある。複数のアーキテクチャが、命令スループットを最小にするとともに、任意の算術演算を実行する前にレジスタ内にデータを配列するのに必要とされるクロックサイクル数を大幅に増加させる余分な命令を必要とする場合がある。
より幅広のベクトルへのメモリアクセス及びより幅広のベクトルからのデータの配列を改良するためのメカニズムは、他の非ローカル及び/又は不連続なメモリロケーションからのデータに対してローカルな連続したメモリアクセスを生成するための収集演算(gathering operation)及び散乱演算(scattering operation)を実装することを含むことができる。収集演算(gather operations)は、記憶デバイス内の一組の不連続又はランダムなメモリロケーションからデータを集め、これらの異種のデータを結合してパックド構造体にすることができる。散乱演算(scatter operations)は、パックド構造体内の要素を一組の不連続又はランダムなメモリロケーションに分散させることができる。他のメカニズムは、通常のストライドを用いてロード及びストアを行い、記憶デバイス内の一組の不連続なメモリロケーションからデータを集め、それらのデータを結合してパックド構造体にすること、又はパックド構造体内の要素を記憶デバイス内の一組の不連続なメモリロケーションに分散させることを含むことができる。これらのメモリロケーションのうちの幾つかは、キャッシュされない場合があるか、又は物理メモリからページアウトされている場合がある。
これらの演算がページフォールト又は他の或る理由によって割り込みを受けた場合、幾つかのアーキテクチャでは、機械の状態が保存されない場合があり、これによって、演算が割り込みを受けた箇所で再開するのではなく、演算全体を繰り返すことが必要となる。繰り返されるいずれかの演算に関して、複数のメモリアクセスが必要とされる場合があるので、完了するには多くのクロックサイクルが必要とされる場合があり、そのために、後続のいずれの従属算術演算も必然的に待機しなければならない。そのような遅延は、ボトルネックを表し、このボトルネックは、例えば、幅広の、すなわち大きな幅のベクトルアーキテクチャから当該ボトルネックがない場合には予想される性能の利点を制限するおそれがある。
これまで、そのような性能を制限する問題及びボトルネックに対する可能性のある解決策は、十分に探求されてこなかった。
本発明は、添付図面の図に限定ではなく例として示されている。
ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するシステムの1つの実施形態のブロック図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するシステムの別の実施形態のブロック図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するシステムの別の実施形態のブロック図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するプロセッサの1つの実施形態のブロック図である。 1つの実施形態によるパックドデータタイプを示す図である。 1つの実施形態によるパックドデータタイプを示す図である。 1つの実施形態によるパックドデータタイプを示す図である。 1つの実施形態によるストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令エンコーディングを示す図である。 別の実施形態によるストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令エンコーディングを示す図である。 別の実施形態によるストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令エンコーディングを示す図である。 別の実施形態によるストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令エンコーディングを示す図である。 別の実施形態によるストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令エンコーディングを示す図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するプロセッサマイクロアーキテクチャの1つの実施形態の要素を示す図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するプロセッサマイクロアーキテクチャの別の実施形態の要素を示す図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するプロセッサの1つの実施形態のブロック図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するコンピューターシステムの1つの実施形態のブロック図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するコンピューターシステムの別の実施形態のブロック図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するコンピューターシステムの別の実施形態のブロック図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するシステムオンチップの1つの実施形態のブロック図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行するプロセッサの一実施形態のブロック図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供するIPコア開発システムの1つの実施形態のブロック図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供するアーキテクチャエミュレーションシステムの1つの実施形態を示す図である。 ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を変換するシステムの1つの実施形態を示す図である。 ストライド機能を有するベクトルロード演算を提供するプロセスの1つの実施形態の流れ図である。 ストライド機能を有するベクトルロード演算を提供するプロセスの別の実施形態の流れ図である。 ストライド機能を有するベクトルストア演算を提供するプロセスの1つの実施形態の流れ図である。 ストライド機能を有するベクトルストア演算を提供するプロセスの別の実施形態の流れ図である。
以下の説明は、プロセッサ、コンピューターシステム、又は他の処理装置内において又はこれらに関連して、ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令及び処理ロジックを開示する。
幾つかの実施形態では、ロード、第2の演算、デスティネーションレジスタ、オペランドレジスタ、メモリアドレス、及びストライド長の組を指定する命令に応答して、実行ユニットは、マスクレジスタ内の値を読み出す。マスクレジスタ内のフィールドは、メモリ内のデータ要素へのメモリアドレスからのストライド長の倍数に対応する。第1のマスク値は、要素がメモリからロードされていないことを示し、第2の値は、要素をロードする必要がないか又は要素が既にロードされていることを示す。各データ要素が第1の値を有する場合、そのデータ要素は、メモリから対応するデスティネーションレジスタのロケーション内にロードされ、マスクレジスタ内の対応する値は、第2の値に変更される。障害時、又は全てのマスクレジスタフィールドが第2の値を有するとき、デスティネーションレジスタ及びオペランドレジスタ内の対応するデータを用いて第2の演算を実行し、結果を生成することができる。幾つかの代替の実施形態では、例えば、第1の演算に続くストア、デスティネーションレジスタ、オペランドレジスタ、メモリアドレス、及びストライド長の組を指定する命令に応答して、実行ユニットは、マスクレジスタを用いて又は用いることなく第1の演算を実行することができ、マスク値は、結果として得られた要素がメモリにストアされていないかどうか、又はその要素をメモリにストアする必要がないこと若しくはその要素がメモリに既にストアされていることを示すのに用いることができる。
以下の説明では、本発明の実施形態のより完全な理解を提供するために、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、有効化(enablement)メカニズム等の多数の具体的な詳細が述べられる。しかしながら、本発明は、そのような具体的な詳細がなくても実施することができることが当業者によって認識されるであろう。加えて、幾つかのよく知られた構造、回路等は、本発明の実施形態を不必要に分かりにくくしないようにするために詳細には示されていない。
以下の実施形態は、プロセッサに関して説明されるが、他の実施形態は、他のタイプの集積回路及びロジックデバイスに適用可能である。本発明の実施形態の同様の技法及び教示内容は、より高いパイプラインスループット及び改善された性能から利益を受けることができる他のタイプの回路又は半導体デバイスに適用することができる。本発明の実施形態の教示内容は、データ操作を実行する任意のプロセッサ又は機械に適用可能である。しかしながら、本発明は、512ビット、256ビット、128ビット、64ビット、32ビット、又は16ビットのデータ演算を実行するプロセッサ又は機械に限定されるものではなく、データの操作又は管理が実行される任意のプロセッサ及び機械に適用することができる。加えて、以下の説明は例を提供し、添付図面は、例示の目的で様々な例を示している。しかしながら、これらの例は、本発明の実施形態の全ての可能な実施態様を網羅的に列挙したものを提供するものではなく、単に本発明の実施形態の例を提供することを意図したものにすぎないので、限定する意味に解釈されるべきではない。
以下の例は、実行ユニット及びロジック回路に関する命令のハンドリング及び配信を説明しているが、本発明の他の実施形態は、機械によって実行されると、当該機械に、本発明の少なくとも1つの実施形態と一致した機能を実行させる機械可読有形媒体上にストアされたデータ又は命令として達成することができる。1つの実施形態では、本発明の実施形態に関連付けられた機能が、機械実行可能命令に具現化される。これらの命令は、命令を用いてプログラムされた汎用プロセッサ又は専用プロセッサに本発明のステップを実行させるのに用いることができる。本発明の実施形態は、本発明の実施形態による1つ又は複数の演算を実行するようにコンピューター(又は他の電子デバイス)をプログラムするのに用いることができる命令をストアしている機械又はコンピューター可読媒体を含むことができるコンピュータープログラム製品又はソフトウェアとして提供することができる。代替的に、本発明の実施形態のステップは、ステップを実行するための固定機能ロジックを含む特定のハードウェア構成要素によって、又はプログラムされたコンピューター構成要素及び固定機能ハードウェア構成要素の任意の組み合わせによって実行することができる。
本発明の実施形態を実行するようにロジックをプログラムするのに用いられる命令は、DRAM、キャッシュ、フラッシュメモリ、又は他の記憶装置等の、システムのメモリ内にストアすることができる。さらに、命令は、ネットワークを介して又は他のコンピューター可読媒体によって配布することもできる。したがって、機械可読媒体は、機械(例えば、コンピューター)によって可読な形態で情報をストア又は伝送するための任意のメカニズムを含むことができ、これらに限定されないが、フロッピー(登録商標)ディスケット、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM)、及び光磁気ディスク、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、磁気カード若しくは光カード、フラッシュメモリ、又は電気、光、音響、若しくは他の形態の伝播信号(例えば、搬送波、赤外信号、デジタル信号等)を介したインターネットによる情報の伝送に用いられる有形の機械可読記憶装置を含む。したがって、コンピューター可読媒体は、機械(例えば、コンピューター)によって可読な形態で電子的な命令又は情報をストア又は伝送するのに好適な任意のタイプの有形の機械可読媒体を含む。
設計は、創出からシミュレーション、製造に至る様々なステージを通る場合がある。設計を表すデータは、複数の方法で設計を表すことができる。まず、シミュレーションにおいて役立つように、ハードウェアは、ハードウェア記述言語又は別の機能記述言語を用いて表すことができる。加えて、ロジック及び/又はトランジスタゲートを有する回路レベルモデルを設計プロセスの或るステージにおいて作成することができる。さらに、或るステージにおけるほとんどの設計は、ハードウェアモデルにおける様々なデバイスの物理的配置を表すデータのレベルに達している。従来の半導体製造技法が用いられる場合、ハードウェアモデルを表すデータは、集積回路を作製するのに用いられるマスク用の種々のマスク層上の様々な特徴部の有無を指定するデータとすることができる。設計のいずれの表現においても、データは、任意の形態の機械可読媒体にストアすることができる。メモリ、又はディスク等の磁気記憶装置若しくは光記憶装置は、そのような情報を伝送するために変調又は別の方法で生成された光波又は電波を介して伝送される情報をストアする機械可読媒体とすることができる。コード又は設計を示すか又は搬送する電気搬送波が伝送されるとき、この電気信号のコピー、バッファリング、又は再送が実行される範囲において、新たなコピーが作成される。このように、通信プロバイダー又はネットワークプロバイダーは、本発明の実施形態の技法を具現化する、搬送波内にエンコーディングされた情報等のアーティクルを少なくとも一時的に有形の機械可読媒体上にストアすることができる。
現代のプロセッサでは、複数の異なる実行ユニットが、様々なコード及び命令を処理及び実行するのに用いられる。命令には、即座に完了するものもあれば、完了するのに複数のクロックサイクルを要する可能性があるものもあるので、全ての命令が等しく作成されるとは限らない。命令のスループットが高速であるほど、プロセッサの全体的な性能はより良好となる。したがって、多くの命令が可能な限り高速に実行されるようにすることが有利である。しかしながら、或る特定の命令は、複雑さがより大きく、実行時間及びプロセッサリソースの観点でより多くを要する。例えば、浮動小数点命令、ロード/ストア演算、データムーブ等がある。
より多くのコンピューターシステムがインターネット、テキスト、及びマルチメディアアプリケーションにおいて用いられるにつれて、追加のプロセッササポートが徐々に導入されてきた。1つの実施形態では、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み及び例外ハンドリング、並びに外部の入力及び出力(I/O)を含む1つ又は複数のコンピューターアーキテクチャに関連付けることができる。
1つの実施形態では、命令セットアーキテクチャ(ISA)は、1つ又は複数の命令セットを実装するのに用いられるプロセッサロジック及び回路を備える1つ又は複数のマイクロアーキテクチャによって実装することができる。したがって、異なるマイクロアーキテクチャを有するプロセッサは、共通の命令セットの少なくとも一部を共有することができる。例えば、Intel(登録商標)Pentium(登録商標)4プロセッサ、Intel(登録商標)Core(商標)プロセッサ、及びカリフォルニア州サニーベールのAdvanced Micro Devices社からのプロセッサは、x86命令セット(より新しいバージョンとともに追加された幾つかの拡張を有する)のほぼ同一のバージョンを実装するが、異なる内部設計を有する。同様に、ARM Holdings社、MIPS社、又はそれらのライセンシー若しくは採用者等の他のプロセッサ開発会社によって設計されたプロセッサも、共通の命令セットの少なくとも一部を共有することができるが、異なるプロセッサ設計を備える場合がある。例えば、ISAの同じレジスタアーキテクチャは、専用の物理レジスタ、レジスタリネーミングメカニズム(例えば、レジスタエイリアステーブル(RAT)、リオーダーバッファー(ROB)及びリタイアメントレジスタファイルの使用)を用いた1つ又は複数の動的にアロケートされる物理レジスタを含む新しい技法又はよく知られた技法を用いて異なるマイクロアーキテクチャにおいて異なる方法で実装される場合がある。1つの実施形態では、レジスタは、ソフトウェアプログラマーによってアドレス指定可能な場合もあるし、可能でない場合もある1つ若しくは複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、又は他のレジスタセットを含むことができる。
1つの実施形態では、命令は、1つ又は複数の命令フォーマットを含むことができる。1つの実施形態では、命令フォーマットは、特に、実行される演算と、その演算が実行される対象のオペランド(複数の場合もある)とを指定する様々なフィールド(ビット数、ビットのロケーション等)を示すことができる。幾つかの命令フォーマットは、命令テンプレート(又はサブフォーマット)によって更に分割して定義される場合がある。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義される場合があり、及び/又は異なって解釈される所与のフィールドを有するように定義される場合がある。1つの実施形態では、命令は、命令フォーマットを用いて(定義される場合、その命令フォーマットの命令テンプレートのうちの所与の1つに)表され、演算と、その演算が行われる対象のオペランドとを指定又は指示する。
科学アプリケーション、金融アプリケーション、自動ベクトル化汎用アプリケーション、RMS(認識、マイニング、及び合成)アプリケーション、並びにビジュアルアプリケーション及びマルチメディアアプリケーション(例えば、2D/3Dグラフィックス、画像処理、ビデオ圧縮/伸長、音声認識アルゴリズム、及びオーディオ操作)は、多数のデータ項目に対して同じ演算を実行することが必要な場合がある。1つの実施形態では、単一命令複数データ(SIMD)は、プロセッサに、複数のデータ要素に対して演算を実行させるタイプの命令を指す。SIMD技術は、レジスタ内のビットを複数の固定サイズ又は可変サイズのデータ要素に論理的に分割することができるプロセッサにおいて用いることができる。分割されたデータ要素のそれぞれは、別々の値を表す。例えば、1つの実施形態では、64ビットレジスタ内のビットを、4つの別々の16ビットデータ要素を含むソースオペランドとして編成することができる。これらの16ビットデータ要素のそれぞれは、別々の16ビット値を表す。このタイプのデータは、「パックド」データタイプ又は「ベクトル」データタイプと呼ばれる場合があり、このデータタイプのオペランドは、パックドデータオペランド又はベクトルオペランドと呼ばれる。1つの実施形態では、パックドデータ項目又はベクトルは、単一のレジスタ内にストアされる一続きのパックドデータ要素とすることができ、パックドデータオペランド又はベクトルオペランドは、SIMD命令(又は「パックドデータ命令」若しくは「ベクトル命令」)のソースオペランド又はデスティネーションオペランドとすることができる。1つの実施形態では、SIMD命令は、2つのソースベクトルオペランドに対して実行されて、同じ又は異なる数のデータ要素を有するとともに同じ又は異なるデータ要素順序にある同じ又は異なるサイズのデスティネーションベクトルオペランド(結果ベクトルオペランドとも呼ばれる)を生成する単一のベクトル演算を指定する。
x86命令、MMX(商標)命令、ストリーミングSIMD拡張(SSE)命令、SSE2命令、SSE3命令、SSE4.1命令、及びSSE4.2命令を含む命令セットを有するIntel(登録商標)Core(商標)プロセッサと、ベクトル浮動小数点(VFP)命令及び/又はNEON命令を含む命令セットを有するARM Cortex(登録商標)ファミリーのプロセッサ等のARMプロセッサと、中国科学アカデミーのコンピューティング技術協会(ICT)によって開発されたLoongsonファミリーのプロセッサ等のMIPSプロセッサによって用いられるようなSIMD技術は、アプリケーション性能の大幅な改善を可能にした(Core(商標)及びMMX(商標)は、カリフォルニア州サンタクララのIntel Corporation社の登録商標又は商標である)。
1つの実施形態では、デスティネーションレジスタ/データ及びソースレジスタ/データは、対応するデータ又は演算のソース及びデスティネーションを表す一般的な用語である。幾つかの実施形態では、これらのレジスタ/データは、描写するもの以外の名称又は機能を有するレジスタ、メモリ、又は他の記憶エリアによって実施することができる。例えば、1つの実施形態では、「DEST1」は、一時的な記憶レジスタ又は他の記憶エリアとすることができるのに対して、「SRC1」及び「SRC2」は、第1のソース記憶レジスタ及び第2のソース記憶レジスタ又は他の記憶エリアとすることができ、他のものについても同様である。他の実施形態では、SRC記憶エリア及びDEST記憶エリアのうちの2つ以上のものは、同じ記憶エリア(例えば、SIMDレジスタ)内の異なるデータ記憶要素に対応することができる。1つの実施形態では、ソースレジスタのうちの1つは、例えば、第1のソースデータ及び第2のソースデータに対して実行される演算の結果を、デスティネーションレジスタとしての機能を果たす、これらの2つのソースレジスタうちの一方にライトバックすることによって、デスティネーションレジスタとしても機能することができる。
図1Aは、本発明の1つの実施形態による、命令を実行する実行ユニットを備えるプロセッサを用いて形成された一例示のコンピューターシステムのブロック図である。システム100は、本明細書で説明する実施形態におけるように、本発明による、ロジックを備える実行ユニットを用いて、データを処理するためのアルゴリズムを実行するプロセッサ102等の構成要素を備える。システム100は、カリフォルニア州サンタクララのIntel Corporation社から入手可能なPENTIUM(登録商標)IIIマイクロプロセッサ、PENTIUM(登録商標)4マイクロプロセッサ、Xeon(商標)マイクロプロセッサ、Itanium(登録商標)マイクロプロセッサ、XScale(商標)マイクロプロセッサ、及び/又はStrongARM(商標)マイクロプロセッサに基づく処理システムを表すが、他のシステム(他のマイクロプロセッサを有するPC、エンジニアリングワークステーション、セットトップボックス等を含む)も用いることができる。1つの実施形態では、サンプルシステム100は、ワシントン州レドモンドのMicrosoft社から入手可能なWINDOWS(登録商標)オペレーティングシステムの或るバージョンを実行することができるが、他のオペレーティングシステム(例えば、UNIX(登録商標)及びLinux(登録商標))、組み込みソフトウェア、及び/又はグラフィカルユーザーインターフェースも用いることができる。したがって、本発明の実施形態は、ハードウェア回路部及びソフトウェアのどの特定の組み合わせにも限定されるものではない。
実施形態は、コンピューターシステムに限定されるものではない。本発明の代替の実施形態は、ハンドヘルドデバイス及び組み込みアプリケーション等の他のデバイスにおいて用いることができる。ハンドヘルドデバイスの幾つかの例には、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)、及びハンドヘルドPCが含まれる。組み込みアプリケーションは、マイクロコントローラー、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピューター(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、又は少なくとも1つの実施形態による1つ若しくは複数の命令を実行することができる他の任意のシステムを含むことができる。
図1Aは、本発明の1つの実施形態による少なくとも1つの命令を実行するアルゴリズを実行する1つ又は複数の実行ユニット108を備えるプロセッサ102を用いて形成されたコンピューターシステム100のブロック図である。1つの実施形態は、単一プロセッサのデスクトップシステム又はサーバーシステムに関して説明することができるが、代替の実施形態をマルチプロセッサシステムに含めることができる。システム100は、「ハブ」システムアーキテクチャの一例である。コンピューターシステム100は、データ信号を処理するプロセッサ102を備える。プロセッサ102は、複合命令セットコンピューター(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、又は例えばデジタル信号プロセッサ等の他の任意のプロセッサデバイスとすることができる。プロセッサ102は、プロセッサ102とシステム100内の他の構成要素との間でデータ信号を伝送することができるプロセッサバス110に結合される。システム100の要素は、当該技術に精通している者によく知られているそれらの要素の通常の機能を実行する。
1つの実施形態では、プロセッサ102は、レベル1(L1)内部キャッシュメモリ104を備える。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することができる。代替的に、別の実施形態では、キャッシュメモリは、プロセッサ102の外部に存在することができる。他の実施形態は、特定の実施態様及びニーズに応じて内部キャッシュ及び外部キャッシュの双方の組み合わせも備えることができる。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインターレジスタを含む様々なレジスタに異なるタイプのデータをストアすることができる。
整数演算及び浮動小数点演算を実行するロジックを備える実行ユニット108も、プロセッサ102に存在する。プロセッサ102は、或る特定のマクロ命令用のマイクロコード(μコード)をストアするマイクロコードROMも備える。1つの実施形態について、実行ユニット108は、パックド命令セット109をハンドリングするロジックを備える。パックド命令セット109を、それらの命令を実行する関連回路部とともに汎用プロセッサ102の命令セットに含めることによって、多くのマルチメディアアプリケーションによって用いられる演算は、汎用プロセッサ102内のパックドデータを用いて実行することができる。したがって、パックドデータに対して演算を実行するためにプロセッサのデータバスの全幅を用いることによって、多くのマルチメディアアプリケーションを高速化することができるとともに、より効率的に実行することができる。これによって、1つのデータ要素に対して一時に1つ又は複数の演算を実行するためにプロセッサのデータバスにわたってより小さなデータの単位を転送する必要がなくなる。
実行ユニット108の代替の実施形態は、マイクロコントローラー、組み込みプロセッサ、グラフィックスデバイス、DSP、及び他のタイプのロジック回路において用いことができる。システム100はメモリ120を備える。メモリ120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、又は他のメモリデバイスとすることができる。メモリ120は、プロセッサ102が実行することができる命令及び/又はデータ信号によって表されるデータをストアすることができる。
システムロジックチップ116は、プロセッサバス110及びメモリ120に結合されている。図示した実施形態におけるシステムロジックチップ116は、メモリコントローラーハブ(MCH)である。プロセッサ102は、プロセッサバス110を介してMCH116に通信することができる。MCH116は、命令及びデータのストア、並びにグラフィックスコマンド、グラフィックスデータ、及びグラフィックステクスチャのストアのためのメモリ120への高帯域幅メモリパス118を提供する。MCH116は、システム100内のプロセッサ102、メモリ120、及び他の構成要素の間でデータ信号を誘導するとともに、プロセッサバス110、メモリ120、及びシステムI/O122の間でデータ信号をブリッジするためのものである。幾つかの実施形態では、システムロジックチップ116は、グラフィックスコントローラー112に結合するためのグラフィックスポートを提供することができる。MCH116は、メモリインターフェース118を通じてメモリ120に結合されている。グラフィックスカード112は、アクセラレーテッドグラフィックスポート(AGP)相互接続114を通じてMCH116に結合されている。
システム100は、独自のハブインターフェースバス122を用いて、MCH116をI/Oコントローラーハブ(ICH)130に結合する。ICH130は、ローカルI/Oバスを介して幾つかのI/Oデバイスに直接接続を提供する。このローカルI/Oバスは、周辺装置をメモリ120、チップセット、及びプロセッサ102に接続するための高速I/Oバスである。幾つかの例は、オーディオコントローラー、ファームウェアハブ(フラッシュBIOS)128、無線送受信機126、データ記憶装置124、ユーザー入力インターフェース及びキーボードインターフェースを含むレガシーI/Oコントローラー、ユニバーサルシリアルバス(USB)等のシリアル拡張ポート、並びにネットワークコントローラー134である。データ記憶デバイス124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス、又は他のマスストレージデバイスを含むことができる。
システムの別の実施形態では、1つの実施形態による命令は、システムオンチップとともに用いることができる。システムオンチップの1つの実施形態は、プロセッサ及びメモリから構成される。1つのそのようなシステム用のメモリはフラッシュメモリである。フラッシュメモリは、プロセッサ及び他のシステム構成要素と同じダイ上に配置することができる。加えて、メモリコントローラー又はグラフィックスコントローラー等の他のロジックブロックも、システムオンチップ上に配置することができる。
図1Bは、本発明の1つの実施形態の原理を実施するデータ処理システム140を示している。本明細書において説明する実施形態は、本発明の実施形態の範囲から逸脱することなく代替の処理システムとともに用いることができることが当業者によって容易に認識されるであろう。
コンピューターシステム140は、1つの実施形態による少なくとも1つの命令を実行することができる処理コア159を備える。1つの実施形態では、処理コア159は、任意のタイプのアーキテクチャの処理ユニットを表す。この任意のタイプのアーキテクチャには、CISCタイプ、RISCタイプ、又はVLIWタイプのアーキテクチャが含まれるが、これらに限定されるものではない。処理コア159は、1つ又は複数のプロセス技術における製造に好適な場合もあり、機械可読媒体上で十分詳細に表現されることによって上記製造を容易にするのに好適な場合もある。
処理コア159は、実行ユニット142、一組のレジスタファイル(複数の場合もある)145、及びデコーダー144を備える。処理コア159は、本発明の実施形態の理解には必要でない追加の回路部(図示せず)も備える。実行ユニット142は、処理コア159によって受信された命令を実行するのに用いられる。実行ユニット142は、通常のプロセッサ命令を実行することに加えて、パックドデータフォーマットに対して演算を実行するためのパックド命令セット143内の命令を実行することができる。パックド命令セット143は、本発明の実施形態を実行するための命令と、他のパックド命令とを含む。実行ユニット142は、内部バスによってレジスタファイル145に結合されている。レジスタファイル145は、データを含む情報をストアするための処理コア159上の記憶エリアを表す。前述したように、パックドデータをストアするのに用いられる記憶エリアは重要ではないことが理解される。実行ユニット142は、デコーダー144に結合されている。デコーダー144は、処理コア159によって受信された命令を制御信号及び/又はマイクロコードエントリーポイントにデコードするのに用いられる。これらの制御信号及び/又はマイクロコードエントリーポイントに応答して、実行ユニット142は適切な演算を実行する。1つの実施形態では、デコーダーは、命令の演算コードを解釈するのに用いられる。この演算コードは、命令内に示された対応するデータに対してどのような演算を実行すべきかを示す。
処理コア159は、様々な他のシステムデバイスと通信するためのバス141と結合されている。これらの様々な他のシステムデバイスは、例えば、同期式ダイナミックランダムアクセスメモリ(SDRAM)制御部146、スタティックランダムアクセスメモリ(SRAM)制御部147、バーストフラッシュメモリインターフェース148、パーソナルコンピューターメモリカード国際協会(PCMCIA)/コンパクトフラッシュ(登録商標)(CF)カード制御部149、液晶ディスプレイ(LCD)制御部150、ダイレクトメモリアクセス(DMA)コントローラー151、及び代替のバスマスターインターフェース152を含むことができるが、これらに限定されるものではない。1つの実施形態では、データ処理システム140は、I/Oバス153を介して様々なI/Oデバイスと通信するためのI/Oブリッジ154も備えることができる。そのようなI/Oデバイスは、例えば、ユニバーサル非同期受信機/送信機(UART)155、ユニバーサルシリアルバス(USB)156、Bluetooth(登録商標)無線UART157、及びI/O拡張インターフェース158を含むことができるが、これらに限定されるものではない。
データ処理システム140の1つの実施形態は、移動通信、ネットワーク通信及び/又は無線通信と、テキスト文字列比較演算を含むSIMD演算を実行することができる処理コア159とを提供する。処理コア159は、様々なオーディオアルゴリズム、ビデオアルゴリズム、画像化アルゴリズム、及び通信アルゴリズムを用いてプログラムすることができる。これらのアルゴリズムには、ウォルシュアダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)、及びそれらのそれぞれの逆変換等の離散変換と、色空間変換、ビデオエンコード動き推定又はビデオデコード動き補償等の圧縮/伸長技法と、パルス符号変調(PCM)等の変調/復調(MODEM)機能とが含まれる。
図1Cは、ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を実行することができるデータ処理システムの別の代替の実施形態を示している。1つの代替の実施形態によれば、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167、及び入力/出力システム168を備えることができる。入力/出力システム168は、任意選択で無線インターフェース169に結合することができる。SIMDコプロセッサ161は、1つの実施形態による命令を含む演算を実行することができる。処理コア170は、1つ又は複数のプロセス技術における製造に好適な場合があり、機械可読媒体上で十分詳細に表現されることによって、処理コア170を備えるデータ処理システム160の全て又は一部の製造を容易にするのに好適な場合がある。
1つの実施形態について、SIMDコプロセッサ161は、実行ユニット162及び一組のレジスタファイル(複数の場合もある)164を備える。メインプロセッサ166の1つの実施形態は、実行ユニット162による実行のために1つの実施形態による命令を含む命令セット163の命令を認識するデコーダー165を備える。代替の実施形態について、SIMDコプロセッサ161は、命令セット163の命令をデコードするデコーダーの少なくとも一部165Bも備える。処理コア170は、本発明の実施形態の理解に必要でない追加の回路部(図示せず)も備える。
動作中、メインプロセッサ166は、キャッシュメモリ167及び入力/出力システム168とのインタラクションを含む一般的なタイプのデータ処理演算を制御するデータ処理命令のストリームを実行する。このデータ処理命令のストリーム内には、SIMDコプロセッサ命令が組み込まれている。メインプロセッサ166のデコーダー165は、これらのSIMDコプロセッサ命令を、アタッチされたSIMDコプロセッサ161によって実行されるべきタイプであるとして認識する。したがって、メインプロセッサ166は、これらのSIMDコプロセッサ命令(又はSIMDコプロセッサ命令を表す制御信号)をコプロセッサバス171上に発行する。このコプロセッサバスから、これらのSIMDコプロセッサ命令は、任意のアタッチされたSIMDコプロセッサによって受信される。この場合、SIMDコプロセッサ161は、当該SIMDコプロセッサ用の任意の受信されたSIMDコプロセッサ命令を受け取って実行する。
データは、SIMDコプロセッサ命令による処理のために、無線インターフェース169を介して受信することができる。1つの例として、音声通信をデジタル信号の形で受信することができ、このデジタル信号は、SIMDコプロセッサ命令によって処理されて、音声通信を表すデジタルオーディオサンプルを再生成することができる。別の例として、圧縮されたオーディオ及び/又はビデオを、デジタルビットストリームの形で受信することができ、このデジタルビットストリームは、SIMDコプロセッサ命令によって処理されて、デジタルオーディオサンプル及び/又は動画ビデオフレームを再生成することができる。処理コア170の1つの実施形態について、メインプロセッサ166及びSIMDコプロセッサ161は、実行ユニット162と、一組のレジスタファイル(複数の場合もある)164と、1つの実施形態による命令を含む命令セット163の命令を認識するデコーダー165とを備える単一の処理コア170内に統合される。
図2は、本発明の1つの実施形態による命令を実行するロジック回路を備えるプロセッサ200のマイクロアーキテクチャのブロック図である。幾つかの実施形態では、1つの実施形態による命令は、バイト、ワード、ダブルワード、クワッドワード等のサイズと、単精度及び倍精度の整数及び浮動小数点のデータタイプ等のデータタイプとを有するデータ要素に対して演算するように実施することができる。1つの実施形態では、インオーダーフロントエンド201は、実行される命令をフェッチし、それらの命令をプロセッサパイプラインにおいて後に用いられるように準備するプロセッサ200の部分である。このフロントエンド201は、幾つかのユニットを備えることができる。1つの実施形態では、命令プリフェッチャー226がメモリから命令をフェッチし、これらの命令を命令デコーダー228に供給し、次に、この命令デコーダーが、これらの命令をデコード又は解釈する。例えば、1つの実施形態では、デコーダーは、受信された命令を、機械が実行することができる「マイクロ命令」又は「マイクロ演算」(マイクロop又はμopとも呼ばれる)と呼ばれる1つ又は複数の演算にデコードする。他の実施形態では、デコーダーは、命令を演算コード及び対応するデータと、1つの実施形態による演算を実行するマイクロアーキテクチャによって用いられる制御フィールドとにパース(parse)する。1つの実施形態では、トレースキャッシュ230は、デコードされたμopを取り出し、それらを実行のためにμopキュー234内のプログラム順序付きシーケンス又はトレースにアセンブルする。トレースキャッシュ230が複合命令に遭遇すると、マイクロコードROM232は、演算を完了するのに必要とされるμopを提供する。
命令の中には、単一のマイクロopに変換されるものもあれば、全演算を完了するのに数個のマイクロopを必要とするものもある。1つの実施形態では、命令を完了するのに5つ以上のマイクロopが必要とされる場合、デコーダー228は、マイクロコードROM232にアクセスして命令を行う。1つの実施形態について、命令は、命令デコーダー228における処理のために少数のマイクロopにデコードすることができる。別の実施形態では、複数のマイクロopが演算を達成するのに必要とされる場合、命令をマイクロコードROM232内にストアすることができる。トレースキャッシュ230は、エントリーポイントプログラマブルロジックアレイ(PLA)を参照して、1つの実施形態による1つ又は複数の命令を完了するマイクロコードシーケンスをマイクロコードROM232から読み出すための正しいマイクロ命令ポインターを決定する。マイクロコードROM232が、命令用のマイクロopのシーケンス化を終了した後、機械のフロントエンド201は、トレースキャッシュ230からのマイクロopのフェッチを再開する。
アウトオブオーダー実行エンジン203は、命令が実行用に準備される箇所である。アウトオブオーダー実行ロジックは、命令が実行のためにパイプラインを進んでスケジューリングされるとき、命令の流れの円滑化及びリオーダ―を行って性能を最適化する複数のバッファーを有する。アロケーターロジックは、各μopが実行に必要とする機械バッファー及びリソースをアロケートする。レジスタリネーミングロジックは、ロジックレジスタをリネームしてレジスタファイル内のエントリー上に置く。アロケーターは、命令スケジューラの前に、メモリ演算用に1つと非メモリ演算用に1つとの2つのμopキューのうちの一方に各μopのエントリーもアロケートする。上記命令スケジューラは、メモリスケジューラ、高速スケジューラ202、低速/一般浮動小数点スケジューラ204、及び単純浮動小数点スケジューラ206である。μopスケジューラ202、204、206は、μopが実行の準備がいつできるのかを、それらの従属する入力レジスタオペランドソースの準備ができていることと、μopがそれらの演算を完了する必要がある実行リソースが利用可能であることとに基づいて判断する。1つの実施形態の高速スケジューラ202は、メインクロックサイクルの各2分の1においてスケジューリングすることができる一方、他のスケジューラは、メインプロセッサクロックサイクルごとに1回のみスケジューリングすることができる。これらのスケジューラは、μopを実行のためにスケジューリングするディスパッチポートをアービトレートする。
レジスタファイル208、210は、スケジューラ202、204、206と、実行ブロック211内の実行ユニット212、214、216、218、220、222、224との間に位置している。それぞれ整数演算用及び浮動小数点演算用の別々のレジスタファイル208、210が存在する。1つの実施形態の各レジスタファイル208、210は、レジスタファイル内にまだ書き込まれていない完了したばかりの結果を従属する新たなμopにバイパス又は転送することができるバイパスネットワークも備える。整数レジスタファイル208及び浮動小数点レジスタファイル210は、互いとのデータの通信も行うことができる。1つの実施形態について、整数レジスタファイル208は、下位32ビットのデータ用の1つのレジスタファイルと、上位32ビットのデータ用の第2のレジスタファイルとの2つの別々のレジスタファイルに分割される。1つの実施形態の浮動小数点レジスタファイル210は、128ビット幅エントリーを有する。なぜならば、浮動小数点命令は、通常、幅が64ビット〜128ビットのオペランドを有するからである。
実行ブロック211は、命令が実際に実行される実行ユニット212、214、216、218、220、222、224を含む。このセクションは、マイクロ命令が実行に必要とする整数データオペランド値及び浮動小数点データオペランド値をストアするレジスタファイル208、210を備える。1つの実施形態のプロセッサ200は、アドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点ムーブユニット224の複数の実行ユニットから構成される。1つの実施形態について、浮動小数点実行ブロック222、224は、浮動小数点演算、MMX演算、SIMD演算、SSE演算、又は他の演算を実行する。1つの実施形態の浮動小数点ALU222は、除算マイクロop、平方根マイクロop、及び剰余マイクロopを実行する64ビット対64ビットの浮動小数点除算器を備える。本発明の実施形態について、浮動小数点値を伴う命令は、浮動小数点ハードウェアを用いてハンドリングすることができる。1つの実施形態では、ALU演算は、高速ALU実行ユニット216、218に進む。1つの実施形態の高速ALU216、218は、クロックサイクルの2分の1の実効レイテンシーを有する高速演算を実行することができる。1つの実施形態について、ほとんどの複雑な整数演算は、低速ALU220に進む。なぜならば、低速ALU220は、乗算器、シフト、フラグロジック、及び分岐処理等の長いレイテンシータイプの演算用の整数実行ハードウェアを備えるからである。メモリロード/ストア演算は、AGU212、214によって実行される。1つの実施形態について、整数ALU216、218、220は、64ビットデータオペランドに対する整数演算の実行に関して説明される。代替の実施形態では、ALU216、218、220は、16ビット、32ビット、128ビット、256ビット等を含む様々なデータビットをサポートするように実装することができる。同様に、浮動小数点ユニット222、224は、様々な幅のビットを有するオペランドの範囲をサポートするように実装することができる。1つの実施形態について、浮動小数点ユニット222、224は、SIMD命令及びマルチメディア命令とともに128ビット幅のパックドデータオペランドに対して演算を行うことができる。
1つの実施形態では、μopスケジューラ202、204、206は、親ロードが実行を終了する前に従属演算をディスパッチする。μopは、推測でスケジューリングされてプロセッサ200において実行されるので、プロセッサ200は、メモリミスをハンドリングするロジックも備える。データロードがデータキャッシュにおいて失敗した場合、一時的に正しくないデータをスケジューラに残した従属演算がパイプラインにおいてインフライトである可能性がある。リプレイメカニズムが、正しくないデータを用いる命令を追跡して再実行する。従属演算のみをリプレイする必要があり、独立演算は完了することが可能である。プロセッサの1つの実施形態のスケジューラ及びリプレイメカニズムは、ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を捕捉するようにも設計される。
「レジスタ」という用語は、オペランドを識別する命令の一部として用いられるオンボードプロセッサ記憶ロケーションを指すことができる。換言すれば、レジスタは、(プログラマーからの視点から)プロセッサの外部から使用可能なものとすることができる。しかしながら、一実施形態のレジスタは、意味が特定のタイプの回路に限定されるべきではない。逆に、一実施形態のレジスタは、データをストア及び提供することができるとともに、本明細書において説明する機能を実行することができる。本明細書において説明するレジスタは、専用の物理レジスタ、レジスタリネーミングを用いた動的にアロケートされた物理レジスタ、専用の物理レジスタ及び動的にアロケートされた物理レジスタの組み合わせ等の任意の数の異なる技法を用いてプロセッサ内の回路部によって実装することができる。1つの実施形態では、整数レジスタは、32ビット整数データをストアする。1つの実施形態のレジスタファイルは、パックドデータ用の8つのマルチメディアSIMDレジスタも含む。以下の議論のために、レジスタは、カリフォルニア州サンタクララのIntel Corporation社からのMMX技術を用いて可能にされるマイクロプロセッサ内の64ビット幅MMX(商標)レジスタ(場合によっては、「mm」レジスタとも呼ばれる)等の、パックドデータを保持するように設計されたデータレジスタであると理解される。整数及び浮動小数点の双方の形で利用可能なこれらのMMXレジスタは、SIMD命令及びSSE命令に付随するパックドデータ要素を用いて動作することができる。同様に、SSE2、SSE3、SSE4、又はこれ以降の技術(「SSEx」と総称される)に関係した128ビット幅XMMレジスタも、そのようなパックドデータオペランドを保持するのに用いることができる。1つの実施形態では、パックドデータ及び整数データをストアする際に、レジスタは、2つのデータタイプを区別する必要はない。1つの実施形態では、整数及び浮動小数点は、同じレジスタファイル又は異なるレジスタファイルのいずれかに含まれる。さらに、1つの実施形態では、浮動小数点データ及び整数データは、異なるレジスタ又は同じレジスタにストアすることができる。
次の図の例では、複数のデータオペランドが説明される。図3Aは、本発明の1つの実施形態によるマルチメディアレジスタ内の様々なパックドデータタイプ表現を示している。図3Aは、パックドバイト310、パックドワード320、及び128ビット幅オペランド用のパックドダブルワード(dword)330のデータタイプを示している。この例のパックドバイトフォーマット310は、128ビット長であり、16個のパックドバイトデータ要素を含む。バイトは、ここでは、データの8ビットとして定義されている。各バイトデータ要素の情報は、バイト0用のビット7〜ビット0、バイト1用のビット15〜ビット8、バイト2用のビット23〜ビット16、及び最後にバイト15用のビット120〜ビット127にストアされる。したがって、利用可能な全てのビットがレジスタ内で用いられる。この記憶配置は、プロセッサの記憶効率を高める。その上、16個のデータ要素がアクセスされる場合、1つの演算を16個のデータ要素に対して並列に実行することができる。
一般に、データ要素は、同じ長さの他のデータ要素とともに単一のレジスタ又はメモリロケーションにストアされる個々のデータ片である。SSEx技術に関係したパックドデータシーケンスでは、XMMレジスタにストアされるデータ要素の数は、128ビットを個々のデータ要素のビット長によって除算したものである。同様に、MMX及びSSE技術に関係したパックドデータシーケンスでは、MMXレジスタにストアされるデータ要素の数は、64ビットを個々のデータ要素のビット長によって除算したものである。図3Aに示すデータタイプは、128ビット長であるが、本発明の実施形態は、64ビット幅、256ビット幅、512ビット幅、又は他のサイズのオペランドを用いて演算することもできる。この例のパックドワードフォーマット320は、128ビット長であり、8つのパックドワードデータ要素を含む。各パックドワードは、16ビットの情報を含む。図3Aのパックドダブルワードフォーマット330は、128ビット長であり、4つのパックドダブルワードデータ要素を含む。各パックドダブルワードデータ要素は、32ビットの情報を含む。パックドクワッドワードは、128ビット長であり、2つのパックドクワッドワードデータ要素を含む。
図3Bは、代替のレジスタ内データ記憶フォーマットを示している。各パックドデータは、2つ以上の独立データ要素を含むことができる。パックドハーフ341、パックドシングル342、及びパックドダブル343の3つのパックドデータフォーマットが示されている。パックドハーフ341、パックドシングル342、及びパックドダブル343の1つの実施形態は、固定小数点データ要素を含む。代替の実施形態について、パックドハーフ341、パックドシングル342、及びパックドダブル343のうちの1つ又は複数は、浮動小数点データ要素を含むことができる。パックドハーフ341の1つの代替の実施形態は、8つの16ビットデータ要素を含む128ビット長である。パックドシングル342の1つの実施形態は、128ビット長であり、4つの32ビットデータ要素を含む。パックドダブル343の1つの実施形態は、128ビット長であり、2つの64ビットデータ要素を含む。そのようなパックドデータフォーマットは、他のレジスタ長、例えば、96ビット、160ビット、192ビット、224ビット、256ビット、512ビット、又はそれよりも長いビットに更に拡張することができることが認識されるであろう。
図3Cは、本発明の1つの実施形態によるマルチメディアレジスタにおける様々な符号付きパックドデータタイプ及び符号なしパックドデータタイプ表現を示している。符号なしパックドバイト表現344は、SIMDレジスタ内で記憶している符号なしパックドバイトを示している。各バイトデータ要素の情報は、バイト0用のビット7〜ビット0、バイト1用のビット15〜ビット8、バイト2用のビット23〜ビット16等、及び最後にバイト15用のビット120〜ビット127にストアされる。したがって、利用可能な全てのビットがレジスタ内で用いられる。この記憶配置は、プロセッサの記憶効率を高める。その上、16個のデータ要素がアクセスされる場合、1つの演算を16個のデータ要素に対して並列形式で実行することができる。符号付きパックドバイト表現345は、記憶している符号付きパックドバイトを示している。各バイトのデータ要素の第8ビットが符号指示子であることに留意されたい。符号なしパックドワード表現346は、ワード7〜ワード0がSIMDレジスタにどのようにストアされているのかを示している。符号付きパックドワード表現347は、符号なしパックドワードレジスタ内表現346と類似している。各ワードのデータ要素の第16ビットが符号指示子であることに留意されたい。符号なしパックドダブルワード表現348は、ダブルワードデータ要素がどのようにストアされているのかを示している。符号付きパックドダブルワード表現349は、符号なしパックドダブルワードレジスタ内表現348と類似している。必要な符号ビットは、各ダブルワードデータ要素の第32ビットであることに留意されたい。
図3Dは、32ビット以上と、ワールドワイドウェブ(www)のintel.com/products/processor/manuals/においてカリフォルニア州サンタクララのIntel Corporation社から入手可能な「Intel(R) 64 and IA-32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B: Instruction Set Reference A-Z」に記載されているタイプの演算コードフォーマットと一致するレジスタ/メモリオペランドアドレス指定モードとを有する演算エンコーディング(演算コード)フォーマット360の1つの実施形態の図である。1つの実施形態では、命令は、フィールド361及び362のうちの1つ又は複数によってエンコーディングすることができる。最大で2つのソースオペランド識別子364及び365を含む、命令当たり最大で2つのオペランドロケーションを識別することができる。1つの実施形態について、デスティネーションオペランド識別子366は、ソースオペランド識別子364と同じであるのに対して、他の実施形態では、それらは異なる。代替の実施形態について、デスティネーションオペランド識別子366は、ソースオペランド識別子365と同じであるのに対して、他の実施形態では、それらは異なる。1つの実施形態では、ソースオペランド識別子364及び365によって識別されるソースオペランドのうちの一方は、命令の結果によって上書きされるのに対して、他の実施形態では、識別子364は、ソースレジスタ要素に対応し、識別子365は、デスティネーションレジスタ要素に対応する。1つの実施形態について、オペランド識別子364及び365は、32ビット又は64ビットのソースオペランド及びデスティネーションオペランドを識別するのに用いることができる。
図3Eは、40ビット以上を有する別の代替の演算エンコーディング(演算コード)フォーマット370の図である。演算コードフォーマット370は、演算コードフォーマット360と一致し、オプションのプレフィックスバイト378を含む。1つの実施形態による命令は、フィールド378、371、及び372のうちの1つ又は複数によってエンコーディングすることができる。命令当たり最大で2つのオペランドロケーションをソースオペランド識別子374及び375並びにプレフィックスバイト378によって識別することができる。1つの実施形態について、プレフィックスバイト378は、32ビット又は64ビットのソースオペランド及びデスティネーションオペランドを識別するのに用いることができる。1つの実施形態について、デスティネーションオペランド識別子376は、ソースオペランド識別子374と同じであるのに対して、他の実施形態では、それらは異なる。代替の実施形態について、デスティネーションオペランド識別子376は、ソースオペランド識別子375と同じであるのに対して、他の実施形態では、それらは異なる。1つの実施形態では、命令は、オペランド識別子374及び375によって識別されるオペランドのうちの1つ又は複数に対して演算し、オペランド識別子374及び375によって識別される1つ又は複数のオペランドが、命令の結果によって上書きされるのに対して、他の実施形態では、識別子374及び375によって識別されるオペランドは、別のレジスタ内の別のデータ要素に書き込まれる。演算コードフォーマット360及び370によって、MODフィールド363及び373並びにオプションのスケールインデックスベース(scale-index-base)及び変位バイトによって部分的に指定された、レジスタからレジスタ、メモリからレジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタからメモリのアドレス指定が可能になる。
次に図3Fを参照すると、幾つかの代替の実施形態では、64ビット(又は128ビット、若しくは256ビット、若しくは512ビット、若しくはそれよりも多くのビット)の単一命令複数データ(SIMD)算術演算を、コプロセッサデータ処理(CDP)命令を通じて実行することができる。演算エンコーディング(演算コード)フォーマット380は、CDP演算コードフィールド382及び389を有する1つのそのようなCDP命令を示している。このタイプのCDP命令、代替の実施形態の場合CDP演算は、フィールド383、384、387、及び388のうちの1つ又は複数によってエンコーディングすることができる。最大で2つのソースオペランド識別子385及び390並びに1つのデスティネーションオペランド識別子386を含む、命令当たり最大で3つのオペランドロケーションを識別することができる。コプロセッサの1つの実施形態は、8ビット値、16ビット値、32ビット値、及び64ビット値に対して演算することができる。1つの実施形態について、命令は、整数データ要素に対して実行される。幾つかの実施形態では、命令は、条件フィールド381を用いて条件付きで実行することができる。幾つかの実施形態について、ソースデータサイズをフィールド383によってエンコーディングすることができる。幾つかの実施形態では、ゼロ(Z)、負(N)、キャリー(C)、及びオーバーフロー(V)の検出をSIMDフィールド上で行うことができる。幾つかの命令については、飽和のタイプをフィールド384によってエンコーディングすることができる。
次に図3Gを参照すると、ワールドワイドウェブ(www)のintel.com/products/processor/manuals/においてカリフォルニア州サンタクララのIntel Corporation社から入手可能な「Intel(R) Advanced Vector Extensions Programming Reference」に記載されているタイプの演算コードフォーマットと一致する別の実施形態によるストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する別の代替の演算エンコーディング(演算コード)フォーマット397の図が示されている。
オリジナルのx86命令セットは、その存在が最初の「演算コード」バイトから判明している付加バイトに含まれるアドレスシラブル及び即値オペランドの様々なフォーマットを有する1バイト演算コードを提供していた。加えて、演算コードに対する変更子(命令の前に配置しなければならないので、プレフィックスと呼ばれる)として保存される或る特定のバイト値が存在していた。256個の演算コードバイト(これらの特殊なプレフィックス値を含む)のオリジナルのパレットが使い尽くされると、単一のバイトが新たな一組の256個の演算コードへのエスケープとして専用化される。ベクトル命令(例えば、SIMD)が追加されたので、より多くの演算コードの必要性が生じ、「2バイト」演算コードマップも、プレフィックスを用いることによって拡張されても不十分となった。このため、2バイトに、オプションのプレフィックスを識別子として加えたものを用いる新たな命令が付加マップに追加された。
加えて、64ビットモードで追加のレジスタの使用を容易にするために、プレフィックスと演算コード(及び演算コードを決定するのに必要な任意のエスケープバイト)との間に追加のプレフィックス(「REX」と呼ばれる)を用いることができる。1つの実施形態では、REXは、64ビットモードでの追加のレジスタの使用を示す4つの「ペイロード」ビットを有することができる。他の実施形態では、REXは、4ビットよりも少ないビット又は4ビットよりも多くのビットを有することができる。少なくとも1つの命令セットの一般的なフォーマット(一般にフォーマット360及び/又はフォーマット370と一致する)は、一般的に以下によって示される。
[プレフィックス][rex]エスケープ[エスケープ2]演算コード modrm(等)
演算コードフォーマット397は、演算コードフォーマット370と一致し、ほとんどの他の一般に用いられるレガシー命令プレフィックスバイト及びエスケープコードの代わりに用いられるオプションのVEXプレフィックスバイト391(1つの実施形態ではC4hexから開始する)を含む。例えば、以下は、2つのフィールドを用いて命令をエンコーディングする一実施形態を示している。これは、第2のエスケープコードがオリジナルの命令に存在するとき、又はREXフィールド内のエキストラビット(例えば、XBフィールド及びWフィールド)を用いる必要があるときに用いることができる。以下に示す実施形態では、レガシーエスケープが新たなエスケープ値によって表され、レガシープレフィックスが「ペイロード」バイトの一部として十分に圧縮され、レガシープレフィックスが再利用され、今後の拡張用に利用可能であり、第2のエスケープコードが、今後のマップ又は特徴空間が利用可能である「マップ」フィールドに圧縮され、新たな特徴(例えば、増大されたベクトル長及び追加のソースレジスタ指定子)が追加される。
Figure 2014526758
1つの実施形態による命令は、フィールド391及び392のうちの1つ又は複数によってエンコーディングすることができる。フィールド391をソースオペランド識別子374及び375と組み合わせるとともに、オプションのスケールインデックスベース(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395と組み合わせることによって、命令当たり最大で4つのオペランドロケーションを識別することができる。1つの実施形態について、VEXプレフィックスバイト391は、32ビット若しくは64ビットのソースオペランド及びデスティネーションオペランド及び/又は128ビット若しくは256ビットのSIMDレジスタオペランド若しくはメモリオペランドを識別するのに用いることができる。1つの実施形態について、演算コードフォーマット397によって提供される機能は、演算コードフォーマット370と冗長である場合があるのに対して、他の実施形態では、それらは異なる。演算コードフォーマット370及び397によって、MODフィールド373、並びにオプションの(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395によって部分的に指定された、レジスタからレジスタ、メモリからレジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタからメモリのアドレス指定が可能になる。
次に図3Hを参照すると、別の実施形態によるストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する別の代替の演算エンコーディング(演算コード)フォーマット398が示されている。演算コードフォーマット398は、演算コードフォーマット370及び397と一致し、ほとんどの他の一般に用いられるレガシー命令プレフィックスバイト及びエスケープコードの代わりに用いられて追加の機能を提供するオプションのEVEXプレフィックスバイト396(1つの実施形態では62hexから開始する)を含む。1つの実施形態による命令は、フィールド396及び392のうちの1つ又は複数によってエンコーディングすることができる。フィールド396をソースオペランド識別子374及び375と組み合わせるとともに、オプションのスケールインデックスベース(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395と組み合わせることによって、命令当たり最大で4つのオペランドロケーション及びマスクを識別することができる。1つの実施形態について、EVEXプレフィックスバイト396は、32ビット若しくは64ビットのソースオペランド及びデスティネーションオペランド及び/又は128ビット、256ビット、若しくは512ビットのSIMDレジスタオペランド若しくはメモリオペランドを識別するのに用いることができる。1つの実施形態について、演算コードフォーマット398によって提供される機能は、演算コードフォーマット370又は397と冗長である場合があるのに対して、他の実施形態では、それらは異なる。演算コードフォーマット398によって、MODフィールド373、並びにオプションの(SIB)識別子393、オプションの変位識別子394、及びオプションの即値バイト395によって部分的に指定された、レジスタからレジスタ、メモリからレジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタからメモリの、マスクを用いたアドレス指定が可能になる。少なくとも1つの命令セットの一般的なフォーマット(一般にフォーマット360及び/又はフォーマット370と一致する)は、一般的に以下によって示される。
evexl RXBmmmmm WvwLpp evex4 演算コード modrm[sib][disp][imm]
1つの実施形態について、EVEXフォーマット398に従ってエンコーディングされる命令は、例えば、ユーザー構成可能マスクレジスタ、又は追加のオペランド、又は128ビットベクトルレジスタ、256ビットベクトルレジスタ、若しくは512ビットベクトルレジスタ、若しくはより多くのレジスタの中から選択したもの等、追加の新たな特徴とともに、ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供するのに用いることができる追加の「ペイロード」ビットを有することができる。
例えば、暗黙的なマスクとともに、ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供するのにVEXフォーマット397を用いることができる場合、又は追加の演算がタイプ変換等の単項である場合、追加の演算が、追加のオペランドを必要とする加算又は乗算等の2項である場合、EVEXフォーマット398は、明示的なユーザー構成可能マスクとともに、ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供するのに用いることができる。追加の演算が3項である場合、EVEXフォーマット398の幾つかの実施形態は、ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算と、暗黙的な完了マスクとを提供するのに用いることもできる。加えて、VEXフォーマット397が、128ビット又は256ビットのベクトルレジスタ上でストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供するのに用いることができる場合、EVEXフォーマット398は、128ビット、256ビット、512ビット、又はそれよりも大きな(又はそれよりも小さな)ベクトルレジスタ上でストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供するのに用いることができる。したがって、ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令は、追加の演算用の命令と、繰り返されるストライドを用いたデータのロード又はストア等のメモリ演算用の命令との間の従属関係をなくすことができる。
ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する例示の命令を、以下の例によって示す。
Figure 2014526758
図4Aは、本発明の少なくとも1つの実施形態によるインオーダーパイプライン及びレジスタリネーミングステージアウトオブオーダー発行/実行パイプラインを示すブロック図である。図4Bは、本発明の少なくとも1つの実施形態によるプロセッサに含まれるインオーダーアーキテクチャコア及びレジスタリネーミングロジックアウトオブオーダー発行/実行ロジックを示すブロック図である。図4A内の実線のボックスは、インオーダーパイプラインを示す一方、破線のボックスは、レジスタリネーミングアウトオブオーダー発行/実行パイプラインを示す。同様に、図4B内の実線のボックスは、インオーダーアーキテクチャロジックを示す一方、破線のボックスは、レジスタリネーミングロジック及びアウトオブオーダー発行/実行ロジックを示す。
図4Aにおいて、プロセッサパイプライン400は、フェッチステージ402、レングスデコードステージ404、デコードステージ406、アロケーションステージ408、リネーミングステージ410、スケジューリング(ディスパッチ又は発行としても知られている)ステージ412、レジスタ読み出し/メモリ読み出しステージ414、実行ステージ416、ライトバック/メモリ書き込みステージ418、例外ハンドリングステージ422、及びコミットステージ424を備える。
図4Bにおいて、矢印は、2つ以上のユニット間の結合を示し、矢印の方向は、それらのユニット間のデータフローの方向を示す。図4Bは、実行エンジンユニット450に結合されたフロントエンドユニット430を備えるプロセッサコア490を示し、これらのフロントエンドユニット430及び実行エンジンユニット450の双方は、メモリユニット470に結合されている。
コア490は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、又はハイブリッド若しくは代替のコアタイプとすることができる。更に別の選択肢として、コア490は、例えば、ネットワークコア若しくは通信コア、圧縮エンジン、グラフィックスコア等の専用コアとすることができる。
フロントエンドユニット430は、命令キャッシュユニット434に結合された分岐予測ユニット432を備える。この命令キャッシュユニット434は、命令変換ルックアサイドバッファー(TLB)436に結合されている。このTLB436は、命令フェッチユニット438に結合されている。この命令フェッチユニット438は、デコードユニット440に結合されている。デコードユニット、すなわちデコーダーは、命令をデコードし、出力として1つ又は複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は他の制御信号を生成することができる。これらは、オリジナルの命令からデコードされるか、又はオリジナルの命令を別の方法で反映しているか、又はオリジナルの命令から導出される。デコーダーは、様々な異なるメカニズムを用いて実施することができる。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実施、プログラマブルロジックアレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)等が含まれるが、これらに限定されるものではない。命令キャッシュユニット434は、メモリユニット470内のレベル2(L2)キャッシュユニット476に更に結合されている。デコードユニット440は、実行エンジンユニット450内のリネーム/アロケーターユニット452に結合されている。
実行エンジンユニット450は、リタイアメントユニット454に結合されたリネーム/アロケーターユニット452と、一組の1つ又は複数のスケジューラユニット456を備える。スケジューラユニット(複数の場合もある)456は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット(複数の場合もある)456は、物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)458に結合されている。物理レジスタファイル(複数の場合もある)ユニット458のそれぞれは、1つ又は複数の物理レジスタファイルを表し、これらの物理レジスタファイルの異なるものは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点等の1つ又は複数の異なるデータタイプ、ステータス(例えば、実行される次の命令のアドレスである命令ポインター)等をストアする。レジスタリネーミング及びアウトオブオーダー実行を(例えば、リオーダ―バッファー(複数の場合もある)及びリタイアメントレジスタファイル(複数の場合もある)を用いるか、フューチャーファイル(複数の場合もある)、履歴バッファー(複数の場合もある)、及びリタイアメントレジスタファイル(複数の場合もある)を用いるか、レジスタマップ及びレジスタのプールを用いる等して)実施することができる様々な方法を示すために、物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)458は、リタイアメントユニット454によってオーバーラップされている。一般に、アーキテクチャレジスタは、プロセッサの外部又はプログラマーの視点から可視である。レジスタは、任意の既知の特定のタイプの回路に限定されるものではない。様々な異なるタイプのレジスタは、本明細書において説明するようなデータをストア及び提供することができる限り、好適である。好適なレジスタの例には、専用の物理レジスタ、レジスタリネーミングを用いて動的にアロケートされる物理レジスタ、専用の物理レジスタ及び動的にアロケートされる物理レジスタの組み合わせ等が含まれるが、これらに限定されるものではない。リタイアメントユニット454及び物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)458は、実行クラスター(複数の場合もある)460に結合されている。実行クラスター(複数の場合もある)460は、一組の1つ又は複数の実行ユニット462及び一組の1つ又は複数のメモリアクセスユニット464を備える。実行ユニット462は、様々なタイプのデータ(例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して様々な演算(例えば、シフト、加算、減算、乗算)を実行することができる。実施形態の中には、特定の機能又は機能のセットに専用の複数の実行ユニットを備えることができるものもあれば、全ての機能を全て実行する1つのみの実行ユニット又は複数の実行ユニットを備えることができるものもある。スケジューラユニット(複数の場合もある)456、物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)458、及び実行クラスター(複数の場合もある)460は、場合によっては複数のものとして示される。なぜならば、或る特定の実施形態は、或る特定のタイプのデータ/演算用に別々のパイプライン(例えば、スカラー整数パイプライン、スカラー浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はそれぞれがそれ自身のスケジューラユニット、物理レジスタファイル(複数の場合もある)ユニット、及び/又は実行クラスターを有するメモリアクセスパイプライン、並びに別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスターのみがメモリアクセスユニット(複数の場合もある)464を有する或る特定の実施形態が実施される)を作製するからである。別々のパイプラインが用いられる場合、これらのパイプラインのうちの1つ又は複数は、アウトオブオーダー発行/実行とすることができ、残りはインオーダーとすることができることも理解されるべきである。
一組のメモリアクセスユニット464は、メモリユニット470に結合されている。このメモリユニット470は、レベル2(L2)キャッシュユニット476に結合されたデータキャッシュユニット474に結合されたデータTLBユニット472を備える。1つの例示の実施形態では、メモリアクセスユニット464は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを備えることができ、これらのそれぞれは、メモリユニット470内のデータTLBユニット472に結合されている。L2キャッシュユニット476は、1つ又は複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
例として、例示のレジスタリネーミングアウトオブオーダー発行/実行コアアーキテクチャは、次のようにパイプライン400を実施することができる。1)命令フェッチ438が、フェッチステージ402及びレングスデコードステージ404を実行し、2)デコードユニット440がデコードステージ406を実行し、3)リネーム/アロケーターユニット452がアロケーションステージ408及びリネーミングステージ410を実行し、4)スケジューラユニット(複数の場合もある)456がスケジュールステージ412を実行し、5)物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)458及びメモリユニット470がレジスタ読み出し/メモリ読み出しステージ414を実行し、実行クラスター460が実行ステージ416を実行し、6)メモリユニット470及び物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)458がライトバック/メモリ書き込みステージ418を実行し、7)様々なユニットが例外ハンドリングステージ422に関与することができ、8)リタイアメントユニット454及び物理レジスタファイル(複数の場合もある)ユニット(複数の場合もある)458がコミットステージ424を実行する。
コア490は、1つ又は複数の命令セット(例えば、x86命令セット(より新しいバージョンとともに追加された幾つかの拡張を有する)、カリフォルニア州サニーベールのMIPS Technologies社のMIPS命令セット、カリフォルニア州サニーベールのARM Holdings社のARM命令セット(NEON等のオプションの追加拡張を有する)をサポートすることができる。
コアは、マルチスレッディング(並列の2以上の組の演算又はスレッドを実行する)をサポートすることができ、タイムスライスされたマルチスレッディング、同時のマルチスレッディング(単一の物理コアが、当該物理コアが同時にマルチスレッディングしているスレッドのそれぞれについて論理コアを提供する)、又はそれらの組み合わせ(例えば、Intel(登録商標)ハイパースレッディング技術におけるようなタイムスライスされたフェッチ及びデコード並びにその後の同時のマルチスレッディング)を含む様々な方法でそうすることができることが理解されるべきである。
レジスタリネーミングは、アウトオブオーダー実行に関して説明されるが、レジスタリネーミングは、インオーダーアーキテクチャにおいて用いることができることが理解されるべきである。プロセッサの図示した実施形態は、別々の命令キャッシュユニット434/データキャッシュユニット474及び共有されたL2キャッシュユニット476も備えるが、代替の実施形態は、例えば、レベル1(L1)内部キャッシュ、又は複数レベルの内部キャッシュ等の、命令及びデータの双方の単一の内部キャッシュを有することができる。幾つかの実施形態では、システムは、コア及び/又はプロセッサの外部にある内部キャッシュ及び外部キャッシュの組み合わせを備えることができる。代替的に、キャッシュの全てを、コア及び/又はプロセッサの外部にすることができる。
図5は、本発明の実施形態による、統合メモリコントローラー及びグラフィックスを有するシングルコアプロセッサ及びマルチコアプロセッサ500のブロック図である。図5における実線のボックスは、シングルコア502A、システムエージェント510、一組の1つ又は複数のバスコントローラーユニット516を有するプロセッサ500を示している一方、破線のボックスのオプションの追加は、複数のコア502A〜502N、システムエージェントユニット510内の一組の1つ又は複数の統合メモリコントローラーユニット(複数の場合もある)514、及び統合グラフィックスロジック508を有する代替のプロセッサ500を示している。
メモリ階層構造は、一組の統合メモリコントローラーユニット514に結合された、コア内の1つ又は複数のレベルのキャッシュと、一組の1つ若しくは複数の共有キャッシュユニット506、及び外部メモリ(図示せず)とを含む。この一組の共有キャッシュユニット506は、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュ等の1つ又は複数の中間レベルキャッシュ、ラストレベルキャッシュ(LLC)、及び/又はそれらの組み合わせを含むことができる。1つの実施形態では、リングベースの相互接続ユニット512が、統合グラフィックスロジック508、一組の共有キャッシュユニット506、及びシステムエージェントユニット510を相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数のよく知られた技法を用いることができる。
幾つかの実施形態では、コア502A〜502Nのうちの1つ又は複数は、マルチスレッディングすることができる。システムエージェント510は、コア502A〜502Nを協調及び動作させる構成要素を備える。システムエージェントユニット510は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを備えることができる。PCUは、コア502A〜502N及び統合グラフィックスロジック508の電力状態を調整するのに必要とされるロジック及び構成要素とすることもできるし、それらを備えることもできる。ディスプレイユニットは、1つ又は複数の外部に接続されたディスプレイを駆動するためのものである。
コア502A〜502Nは、アーキテクチャ及び/又は命令セットに関して、同種とすることもできるし、異種とすることもできる。例えば、コア502A〜502Nのうちの幾つかはインオーダーとすることができ、他のものはアウトオブオーダーである。別の例として、コア502A〜502Nのうちの2つ以上は、同じ命令セットを実行することができる一方、他のものは、その命令セットのサブセットのみ又は異なる命令セットを実行することができる。
プロセッサは、カリフォルニア州サンタクララのIntel Corporation社から入手可能なCore(商標)i3プロセッサ、i5プロセッサ、i7プロセッサ、2Duoプロセッサ及びQuadプロセッサ、Xeon(商標)プロセッサ、Itanium(商標)プロセッサ、XScale(商標)プロセッサ、又はStrongARM(商標)プロセッサ等の汎用プロセッサとすることができる。代替的に、プロセッサは、ARM Holdings社、MIPS社等の別の会社からのものとすることができる。プロセッサは、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、組み込みプロセッサ等の専用プロセッサとすることができる。プロセッサは、1つ又は複数のチップ上に実装することができる。プロセッサ500は、例えば、BiCMOS、CMOS、又はNMOS等の複数のプロセス技術のうちの任意のものを用いた1つ又は複数の基板のうちの一部とすることができ、及び/又はそれらの1つ又は複数の基板上に実装することができる。
図6〜図8は、プロセッサ500を備えるのに好適な例示のシステムである一方、図9は、コア502のうちの1つ又は複数を備えることができる一例示のシステムオンチップ(SoC)である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバー、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラー、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスの技術分野において知られている他のシステム設計及び構成も好適である。一般的に、本明細書において開示するようなプロセッサ及び/又は他の実行ロジックを組み込むことができる膨大な様々のシステム又は電子デバイスが一般に好適である。
次に図6を参照すると、本発明の1つの実施形態によるシステム600のブロック図が示されている。システム600は、グラフィックスメモリコントローラーハブ(GMCH)620に結合された1つ又は複数のプロセッサ610、615を備えることができる。追加のプロセッサ615の性質がオプションであることは、図6に破線で示されている。
各プロセッサ610、615は、プロセッサ500の或るバージョンとすることができる。しかしながら、統合グラフィックスロジック及び統合メモリ制御ユニットがプロセッサ610、615に存在する可能性が低いことに留意すべきである。図6は、GMCH620が、例えば、ダイナミックランダムアクセスメモリ(DRAM)とすることができるメモリ640に結合することができることを示している。DRAMは、少なくとも1つの実施形態については、不揮発性キャッシュに関連付けることができる。
GMCH620は、チップセット、又はチップセットの一部とすることができる。GMCH620は、プロセッサ(複数の場合もある)610、615と通信することができ、プロセッサ(複数の場合もある)610、615とメモリ640との間のインタラクションを制御することができる。GMCH620は、プロセッサ(複数の場合もある)610、615とシステム600の他の要素との間の高速バスインターフェースとしても機能することができる。少なくとも1つの実施形態について、GMCH620は、フロントサイドバス(FSB)695等のマルチドロップバスを介してプロセッサ(複数の場合もある)610、615と通信する。
さらに、GMCH620は、ディスプレイ645(フラットパネルディスプレイ等)に結合されている。GMCH620は、統合グラフィックスアクセラレーターを備えることができる。GMCH620は、様々な周辺デバイスをシステム600に結合するのに用いることができる入力/出力(I/O)コントローラーハブ(ICH)650に更に結合されている。例えば、図6の実施形態には、外部のグラフィックスデバイス660が示される。この外部のグラフィックスデバイスは、別の周辺デバイス670とともにICH650に結合される別個のグラフィックスデバイスとすることができる。
代替的に、追加の又は異なるプロセッサも、システム600に存在することができる。例えば、追加のプロセッサ(複数の場合もある)615は、プロセッサ610と同じ追加のプロセッサ(複数の場合もある)、プロセッサ610とは異種又は非対称的である追加のプロセッサ(複数の場合もある)、アクセラレーター(例えば、グラフィックスアクセラレーター又はデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、又は他の任意のプロセッサを含むことができる。物理リソース610、615間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱的特性、電力消費特性等を含む、或る範囲の利点というメトリックから、様々な相違が存在する可能性がある。これらの相違は、プロセッサ610、615間の非対称性及び異種性として効果的に表すことができる。少なくとも1つの実施形態について、様々なプロセッサ610、615は、同じダイパッケージに存在することができる。
次に図7を参照すると、本発明の一実施形態による第2のシステム700のブロック図が示されている。図7に示すように、マルチプロセッサシステム700は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続750を介して結合された第1のプロセッサ770及び第2のプロセッサ780を備える。プロセッサ770及び780のそれぞれは、プロセッサ610、615のうちの1つ又は複数としてプロセッサ500の或るバージョンとすることができる。
2つのプロセッサ770、780のみを有するものが示されているが、本発明の範囲はそのように限定されるものではないことが理解されるべきである。他の実施形態では、1つ又は複数の追加のプロセッサが、所与のプロセッサに存在することができる。
統合メモリコントローラーユニット772及び782をそれぞれ備えるプロセッサ770及び780が示されている。プロセッサ770は、そのバスコントローラーユニットの一部として、ポイントツーポイント(P−P)インターフェース776及び778も備える。同様に、第2のプロセッサ780は、P−Pインターフェース786及び788を備える。プロセッサ770、780は、P−Pインターフェース回路778、788を用いたポイントツーポイント(P−P)インターフェース750を介して情報を交換することができる。図7に示すように、IMC772及び782は、プロセッサをそれぞれのメモリ、すなわち、メモリ732及びメモリ734に結合する。これらのメモリは、それぞれのプロセッサにローカルにアタッチされたメインメモリの一部とすることができる。
プロセッサ770、780はそれぞれ、ポイントツーポイントインターフェース回路776、794、786、798を用いて、個々のP−Pインターフェース752、754を介してチップセット790と情報を交換することができる。チップセット790は、高性能グラフィックスインターフェース739を介して高性能グラフィックス回路738と情報を交換することもできる。
プロセッサが低電力モードになる場合に、いずれか又は双方のプロセッサのローカルキャッシュ情報を共有キャッシュにストアすることができるように、いずれかのプロセッサ内に、又は、双方のプロセッサの外部にあるがP−Pインターコネクトを介して両プロセッサに接続されるものとして、共有キャッシュ(図示せず)を備えることができる。
チップセット790は、インターフェース796を介して第1のバス716に結合することができる。1つの実施形態では、第1のバス716は、ペリフェラルコンポーネントインターコネクト(PCI)バス、又はPCIエクスプレスバス若しくは別の第3世代I/O相互接続バス等のバスとすることができるが、本発明の範囲はそのように限定されるものではない。
図7に示すように、第1のバス716を第2のバス720に結合するバスブリッジ718とともに、様々なI/Oデバイス714を第1のバス716に結合することができる。1つの実施形態では、第2のバス720は、ローピンカウント(LPC)バスとすることができる。例えば、キーボード及び/又はマウス722、通信デバイス727、並びに1つの実施形態では命令/コード及びデータ730を含むことができるディスクドライブ又は他のマスストレージデバイス等の記憶ユニット728を含む様々なデバイスを第2のバス720に結合することができる。さらに、オーディオI/O724を第2のバス720に結合することができる。他のアーキテクチャが可能であることに留意されたい。例えば、図7のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のそのようなアーキテクチャを実装することができる。
次に図8を参照すると、本発明の一実施形態による第3のシステム800のブロック図が示されている。図7及び図8における同様の要素は、同様の参照符号を有し、図7の幾つかの態様は、図8の他の態様を分かりにくくすることを回避するために、図8から省かれている。
図8は、プロセッサ870、880がそれぞれ統合メモリI/O制御ロジック(「CL」)872及び882を備えることができることを示している。少なくとも1つの実施形態について、CL872、882は、図5及び図7に関して上述したような統合メモリコントローラーユニットを備えることができる。加えて、CL872、882は、I/O制御ロジックも備えることができる。図8は、CL872、882に結合されているのはメモリ832、834だけでなく、I/Oデバイス814も制御ロジック872、882に結合されていることを示している。レガシーI/Oデバイス815は、チップセット890に結合されている。
次に図9を参照すると、本発明の一実施形態によるSoC900のブロック図が示されている。図5における同様の要素は、同様の参照符号を有する。また、破線のボックスは、更に高度化したSoC上のオプションの特徴部である。図9において、相互接続ユニット(複数の場合もある)902は、一組の1つ又は複数のコア502A〜502N及び共有キャッシュユニット(複数の場合もある)506を備えるアプリケーションプロセッサ910と、システムエージェントユニット510と、バスコントローラーユニット(複数の場合もある)516と、統合メモリコントローラーユニット(複数の場合もある)514と、一組の1つ又は複数のメディアプロセッサ920と、スタティックランダムアクセスメモリ(SRAM)ユニット930と、ダイレクトメモリアクセス(DMA)ユニット932と、1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット940とに結合されている。上記メディアプロセッサは、統合グラフィックスロジック508と、スチルカメラ機能及び/又はビデオカメラ機能を提供するための画像プロセッサ924と、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ926と、ビデオエンコード/デコードアクセラレーションを提供するためのビデオプロセッサ928とを備えることができる。
図10は、1つの実施形態による少なくとも1つの命令を実行することができる中央処理ユニット(CPU)とグラフィックス処理ユニット(GPU)とを含むプロセッサを示している。1つの実施形態では、少なくとも1つの実施形態による演算を実行する命令は、CPUが実行することができる。別の実施形態では、この命令は、GPUが実行することができる。更に別の実施形態では、この命令は、GPU及びCPUによって実行される演算を組み合わせることによって実行することができる。例えば、1つの実施形態では、1つの実施形態による命令を、GPU上で実行するために受信してデコードすることができる。一方、デコードされた命令内の1つ又は複数の演算は、CPUが実行することができ、その結果を、その命令の最終的なリタイアメントのためにGPUに返すことができる。逆に、幾つかの実施形態では、CPUが主プロセッサとして動作することができ、GPUがコプロセッサとして動作することができる。
幾つかの実施形態では、高並列スループットプロセッサから利益を受ける命令は、GPUが実行することができる一方、深くパイプライン化されたアーキテクチャから利益を受けるプロセッサの性能から利益を受ける命令は、CPUが実行することができる。例えば、グラフィックス、科学アプリケーション、金融アプリケーション、及び他の並列作業負荷は、GPUの性能から利益を受けることができ、それに応じて実行することができるのに対して、オペレーティングシステムのカーネル又はアプリケーションコード等のより逐次的なアプリケーションは、CPUにより良く適合することができる。
図10において、プロセッサ1000は、CPU1005、GPU1010、画像プロセッサ1015、ビデオプロセッサ1020、USBコントローラー1025、UARTコントローラー1030、SPI/SDIOコントローラー1035、ディスプレイデバイス1040、高精細マルチメディアインターフェース(HDMI(登録商標))コントローラー1045、MIPIコントローラー1050、フラッシュメモリコントローラー1055、デュアルデータレート(DDR)コントローラー1060、セキュリティエンジン1065、及びIS/IC(統合チップ間サウンド/集積回路間)インターフェース1070を備える。より多くのCPU又はGPU及び他の周辺インターフェースコントローラーを含めて、他のロジック及び回路を図10のプロセッサに含めることができる。
少なくとも1つの実施形態の1つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上にストアされた代表データによって実施することができる。この代表データは、機械によって読み出されると、当該機械に、本明細書において説明した技法を実行するロジックを作製させる。「IPコア」として知られているそのような表現は、有形の機械可読媒体(「テープ」)上にストアすることができ、様々な顧客又は製造設備に供給して、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。例えば、ARM Holdings社によって開発されたCortex(商標)ファミリーのプロセッサ及び中国科学アカデミーのコンピューティング技術協会(ICT)によって開発されたLoongson IPコア等のIPコアは、Texas Instruments社、Qualcomm社、Apple社、又はSamsung社等の様々な顧客又はライセンシーに対して、ライセンス供与又は販売することができ、これらの顧客又はライセンシーが作製するプロセッサに実装することができる。
図11は、1つの実施形態によるIPコアの開発を示すブロック図を示している。記憶装置1130は、シミュレーションソフトウェア1120及び/又はハードウェア若しくはソフトウェアモデル1110を含む。1つの実施形態では、IPコア設計を表すデータは、メモリ1140(例えば、ハードディスク)、有線接続(例えば、インターネット)1150、又は無線接続1160を介して記憶装置1130に提供することができる。シミュレーションツール及びモデルによって生成されたIPコア情報は、その後、製造設備に送信することができ、この製造設備において、サードパーティが、少なくとも1つの実施形態による少なくとも1つの命令を実行するようにIPコアを製造することができる。
幾つかの実施形態では、1つ又は複数の命令は、第1のタイプ又はアーキテクチャ(例えば、x86)に対応することができ、異なるタイプ又はアーキテクチャ(例えば、ARM)のプロセッサ上で変換又はエミュレートすることができる。したがって、1つの実施形態による命令は、ARM、x86、MIPS、GPU、又は他のプロセッサタイプ若しくはアーキテクチャを含む任意のプロセッサ又はプロセッサタイプ上で実行することができる。
図12は、1つの実施形態による、第1のタイプの命令が異なるタイプのプロセッサによってどのようにエミュレートされるのかを示している。図12において、プログラム1205は、1つの実施形態による命令と同じ又は実質的に同じ機能を実行することができる幾つかの命令を含む。しかしながら、プログラム1205の命令は、プロセッサ1215と異なるか又は互換性のないタイプ及び/又はフォーマットである場合があり、このことは、プログラム1205内のタイプの命令がプロセッサ1215によってネイティブに実行することができない場合があることを意味する。しかしながら、エミュレーションロジック1210の援助によって、プログラム1205の命令は、プロセッサ1215がネイティブに実行することができる命令に変換される。1つの実施形態では、エミュレーションロジックは、ハードウェアに具現化される。別の実施形態では、エミュレーションロジックは、プログラム1205内のタイプの命令をプロセッサ1215がネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体に具現化される。他の実施形態では、エミュレーションロジックは、固定機能又はプログラマブルハードウェアと、有形の機械可読媒体上にストアされたプログラムとの組み合わせである。1つの実施形態では、プロセッサがエミュレーションロジックを含むのに対して、他の実施形態では、エミュレーションロジックは、プロセッサの外部に存在し、サードパーティによって提供される。1つの実施形態では、プロセッサは、当該プロセッサ内に含まれるか又は当該プロセッサに関連付けられたマイクロコード又はファームウェアを実行することによって、ソフトウェアを含む有形の機械可読媒体に具現化されたエミュレーションロジックをロードすることができる。
図13は、本発明の実施形態による、ソフトウェア命令変換器を用いて、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換することを対比したブロック図である。図示した実施形態では、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はそれらの様々な組み合わせで実施することができる。図13は、高級言語1302によるプログラムを、x86コンパイラー1304を用いてコンパイルしてx86バイナリコード1306を生成することができることを示している。このx86バイナリコード1306は、少なくとも1つのx86命令セットコアを有するプロセッサ1316がネイティブに実行することができるものである。少なくとも1つのx86命令セットコアを有するプロセッサ1316は、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ結果を達成するために、(1)Intel x86命令セットコアの命令セットの大部分、又は(2)少なくとも1つのx86命令セットコアを有するIntelプロセッサ上で実行されることを目的としたアプリケーション又は他のソフトウェアのオブジェクトコードバージョン、を矛盾なく実行又は別の方法で処理することによって、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表す。x86コンパイラー1304は、追加のリンク処理の有無を問わず、少なくとも1つのx86命令セットコアを有するプロセッサ1316上で実行することができるx86バイナリコード1306(例えば、オブジェクトコード)を生成するように動作可能なコンパイラーを表している。同様に、図13は、高級言語1302によるプログラムを、代替の命令セットコンパイラー1308を用いてコンパイルして代替の命令セットバイナリコード1310を生成することができることを示している。この代替の命令セットバイナリコードは、少なくとも1つのx86命令セットコアを有しないプロセッサ1314(例えば、カリフォルニア州サニーベールのMIPS Technologies社のMIPS命令セットを実行するコアを有するプロセッサ及び/又はカリフォルニア州サニーベールのARM Holdings社のARM命令セットを実行するコアを有するプロセッサ)がネイティブに実行することができるものである。命令変換器1312は、x86バイナリコード1306を、x86命令セットコアを有しないプロセッサ1314がネイティブに実行することができるコードに変換するのに用いられる。この変換されたコードは、代替の命令セットバイナリコード1310と同じである可能性は低い。なぜならば、これを行うことができる命令変換器は、作製が困難であるからである。しかしながら、変換されたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成される。したがって、命令変換器1312は、エミュレーション、シミュレーション、又は他の任意のプロセスを通じて、x86命令セットプロセッサもコアも有しないプロセッサ又は他の電子デバイスがx86バイナリコード1306を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はそれらの組み合わせを表している。
図14は、ストライド機能を有するベクトルロード演算を提供するプロセス1401の1つの実施形態の流れ図を示している。プロセス1401及び本明細書において開示する他のプロセスは、専用のハードウェア、又は汎用機械若しくは専用機械若しくは双方の組み合わせによって実行可能なソフトウェア若しくはファームウェアの演算コードを含むことができる処理ブロックによって実行される。
プロセス1401の処理ブロック1409において、第2の演算が実行されるときに用いられるマスクから、複製がオプションとして作成される。次に、処理は、処理ブロック1410に進み、この処理ブロック1410において、次の値が、マスクレジスタ内の複数のマスクフィールドの各フィールドから読み出される。プロセス1401は、反復的なものとして示されているが、可能な場合には、演算のうちの多くのものを並列に実行することが好ましい場合があることが認識されるであろう。マスクレジスタ内の複数のマスクフィールドのそれぞれは、メモリ内の対応するデータ要素の開始アドレスからのストライド長の倍数に対応することができ、マスクレジスタ内の各フィールドについて、1つの値は、対応する要素がメモリからロードされていないことを示し、第2の値は、対応するデータ要素をロードする必要がないか、又はメモリから既にロードされていることを示す。1つの実施形態では、マスクレジスタは、アーキテクチャ的に可視であるレジスタである。別の実施形態では、マスクレジスタは、例えば、全てのフィールドが、対応する要素がメモリからロードされていないことを初期値として示す暗黙的なものとすることができる。処理ブロック1420において、ストライド長が、メモリにアクセスするためのオフセットに加算される。処理ブロック1430において、マスクレジスタのフィールドが、対応する要素がメモリからロードされていないことを示す第1の値と比較される。このフィールドが第1の値に等しくない場合、処理は、処理ブロック1460に進み、ロード演算が、完了するまで反復される。上記フィールドが第1の値に等しい場合、処理ブロック1440において、対応するデータ要素がメモリからロードされ、複数のデータフィールドを有するベクトルレジスタ内にストアされる。これらの複数のデータフィールドの一部分は、ロードされたデータ要素をストアするためのものである。処理ブロック1440の完了が成功すると、マスクレジスタ内の対応するフィールドが、処理ブロック1450において、対応するデータ要素がメモリから既にロードされていることを示す第2の値に変更される。
1つの代替の実施形態では、処理ブロック1409の複製マスクは、マスクレジスタ内の対応するフィールドが処理ブロック1450において第2の値に変更されるときに、第2の演算によって用いられる第1の値に、複製マスクレジスタ内のフィールドを設定することによって構築することができることが認識されるであろう。このように、部分的に複製されたマスクに基づく第2の演算の完了を可能にするとともに、メモリ障害後に新たなマスクを用いてストライド命令を有するロード演算を再開することを行って、ストライド命令を有するロード演算の実行を依然として必要とする要素のみを追跡することができる。
処理ブロック1460において、ロード演算が終了した(すなわち、マスクレジスタ内の複数のマスクフィールドの各フィールドが第2の値を有するか、又は障害が発生した)か否かの判断が行われる。終了していない場合、処理は、処理ブロック1410における開始を再度反復する。終了した場合、処理は、処理ブロック1470に進み、この処理ブロック1470において、第2の演算が実行される。1つの実施形態では、第2の演算は、オプションの処理ブロック1409からの複製マスクを用いて実行することができる。別の実施形態では、第2の演算は、マスクを用いることなく実行することができる。次に、処理ブロック1480において、ストライド命令を有するSIMDロード演算の結果が、ベクトルレジスタにストアされる。
図15は、ストライド機能を有するベクトルロード演算を提供するプロセス1501の別の実施形態の流れ図を示している。プロセス1501の処理ブロック1505において、ストライド命令を有するロード演算がデコードされる。処理は、処理ブロック1509に進み、この処理ブロック1509において、第2の演算が実行されるときに用いられるマスクから、複製がオプションとして作成される。次に、処理は、処理ブロック1510に進み、この処理ブロック1510において、次の値が、マスクレジスタ内の複数のマスクフィールドの各フィールドから読み出される。ここでも、プロセス1501は、反復的なものとして示されているが、可能な場合には、演算のうちの多くのものを並列に実行することができる。処理ブロック1520において、ストライド長が、メモリにアクセスするためのオフセットに加算される。処理ブロック1530において、マスクレジスタの次のフィールドが、対応する要素がメモリから収集されていないことを示す第1の値と比較される。このフィールドが第1の値と等しくない場合、処理は、処理ブロック1560に進み、ロード演算が、完了するまで反復される。このフィールドが第1の値と等しい場合、処理ブロック1540において、対応するデータ要素がメモリからロードされ、複数のデータフィールドを有するベクトルデスティネーションレジスタ内にストアされる。これらの複数のデータフィールドの一部分は、ロードされたデータ要素をストアするためのものである。処理ブロック1540の完了が成功すると、マスクレジスタ内の対応するフィールドが、処理ブロック1550において、対応するデータ要素がメモリから既に収集されていることを示す第2の値に変更される。
ここでも、代替の実施形態では、処理ブロック1509の複製マスクは、マスクレジスタ内の対応するフィールドが処理ブロック1550において第2の値に変更されるときに、第2の演算によって用いられる第1の値に、複製マスクレジスタ内のフィールドを設定することによって構築することができることが認識されるであろう。このように、部分的に複製されたマスクに基づく第2の演算の完了を可能にするとともに、メモリ障害後に新たなマスクを用いて収集演算命令(gather-op)を再開して、収集演算命令の実行を依然として必要とする要素のみを追跡することができる。
処理ブロック1560において、収集演算が終了した(すなわち、マスクレジスタ内の複数のマスクフィールドの各フィールドが第2の値を有するか、又は障害が発生した)か否かの判断が行われる。終了していない場合、処理は、処理ブロック1510における開始を再度反復する。終了した場合、処理は、処理ブロック1565に進み、この処理ブロック1565において、第2の演算がデスティネーションレジスタからの要素と、第2のオペランドレジスタからの要素とに対して実行される。1つの実施形態では、第2の演算は、オプションの処理ブロック1509からの複製マスクを用いて実行することができる。別の実施形態では、第2の演算は、マスクを用いることなく実行することができる。次に、処理ブロック1580において、SIMD収集演算命令の結果が、ベクトルデスティネーションレジスタにストアされる。
収集演算と第2の演算との間の従属関係は、ハードウェアによって、特に、アウトオブオーダーマイクロアーキテクチャにおいて、効率的にハンドリングすることができ、それによって、更なるコンパイラー最適化及び改善された命令スループットが可能になることが認識されるであろう。
図16は、ストライド機能を有するベクトルストア演算を提供するプロセス1601の1つの実施形態の流れ図を示している。プロセス1601の処理ブロック1610において、第1の演算が、第1のオペランドレジスタからの要素と、第2のオペランドレジスタからの対応する要素とに対して実行され、結果が一時レジスタ内にストアされる。処理ブロック1620において、マスクレジスタの第1の値/第2の値が反転(又はフリップ)されて、複製マスクが作成される。次に、処理は、処理ブロック1630に進み、この処理ブロック1630において、次の値が、マスクレジスタ内の複数のマスクフィールドのうちの或るフィールドから読み出される。プロセス1601は、反復的なものとして示されているが、可能な場合には、演算のうちの多くのものを並列に実行することが好ましい場合があることが認識されるであろう。マスクレジスタ内の複数のマスクフィールドのそれぞれは、メモリ内の対応するデータ要素の開始アドレスからのストライド長の倍数に対応することができ、マスクレジスタ内の各フィールドについて、1つの値は、対応する要素がメモリにストアされていないことを示し、第2の値は、対応するデータ要素をストアする必要がないか、又はメモリに既にストアされていることを示す。1つの実施形態では、マスクレジスタは、アーキテクチャ的に可視であるレジスタである。別の実施形態では、マスクレジスタは、例えば、全てのフィールドが、対応する要素がメモリにストアされていないことを初期値として示す暗黙的なものとすることができる。処理ブロック1640において、ストライド長が、メモリにアクセスするためのオフセットに加算される。処理ブロック1650において、マスクレジスタのフィールドが、一時レジスタの対応する要素がメモリにストアされていないことを示す第1の値と比較される。このフィールドが第1の値に等しくない場合、処理は、処理ブロック1680に進み、ストア演算が、終了するまで反復される。上記フィールドが第1の値に等しい場合、処理ブロック1660において、対応するデータ要素が一時レジスタからメモリにストアされる。処理ブロック1660の完了が成功すると、マスクレジスタ内の対応するフィールドが、処理ブロック1670において、対応するデータ要素がメモリに既にストアされていることを示す第2の値に変更され、複製マスクレジスタ内の対応するフィールドが第1の値に変更される。
処理ブロック1680において、ストア演算が終了した(すなわち、マスクレジスタ内の複数のマスクフィールドの各フィールドが第2の値を有するか、又は障害が発生した)か否かの判断が行われる。終了していない場合、処理は、処理ブロック1630における開始を再度反復する。終了した場合、処理は、処理ブロック1690に進み、この処理ブロック1690において、ストライド命令を有するSIMDロード演算の結果が、複製されたマスクを用いて、一時レジスタからベクトルデスティネーションレジスタ内にストアされる。このように、部分的に複製されたマスクに基づく第1の演算の完了を可能にするとともに、メモリ障害後に新たなマスクを用いてストライド命令を有するストア演算を再開することを行って、ストライド命令を有するストア演算の実行を依然として必要とする要素のみを追跡することができる。
図17は、ストライド機能を有するベクトルストア演算を提供するプロセス1701の別の実施形態の流れ図を示している。プロセス1701の処理ブロック1705において、ストライド命令を有するストア演算がデコードされる。処理は、処理ブロック1730に進み、この処理ブロック1730において、次の値が、マスクレジスタ内の複数のマスクフィールドの或るフィールドから読み出される。プロセス1701は、反復的なものとして示されているが、可能な場合には、演算のうちの多くのものを並列に実行することが好ましい場合があることに想到するであろう。
1つの実施形態では、マスクレジスタは、アーキテクチャ的に可視であるレジスタである。別の実施形態では、マスクレジスタは、例えば、全てのフィールドが、対応する要素がメモリにストアされていないことを初期値として示す暗黙的なものとすることができる。処理ブロック1740において、ストライド長が、メモリにアクセスするためのオフセットに加算される。処理ブロック1750において、マスクレジスタのフィールドが、対応する要素がメモリにストアされていないことを示す第1の値と比較される。このフィールドが第1の値に等しくない場合、処理は、処理ブロック1780に進み、ストア演算が、終了するまで反復される。上記フィールドが第1の値に等しい場合、処理ブロック1710において、第1の演算が、第1のオペランド/デスティネーションレジスタからの対応する要素と、第2のオペランドレジスタからの対応する要素とに対して実行される。処理ブロック1760において、対応する結果のデータ要素がメモリにストアされる。処理ブロック1760の完了が成功すると、マスクレジスタ内の対応するフィールドが、処理ブロック1770において、対応するデータ要素がメモリに既にストアされていることを示す第2の値に変更される。
処理ブロック1780において、散乱演算が終了した(すなわち、マスクレジスタ内の複数のマスクフィールドの各フィールドが第2の値を有するか、又は障害が発生した)か否かの判断が行われる。終了していない場合、処理は、処理ブロック1730における開始を再度反復する。終了した場合、処理は、処理ブロック1790に進み、この処理ブロック1790において、ストライド命令を有するSIMDストア演算の結果が、ベクトルデスティネーションレジスタ内にストアされる。
本発明の実施形態は、ロード演算又はストア演算と別の演算との間の従属関係を、ハードウェアによって、特に、アウトオブオーダーマイクロアーキテクチャにおいて、効率的にハンドリングすることができ、それによって、更なるコンパイラー最適化及び改善された命令スループットが可能になる、ストライド機能を有するベクトルロード演算及び/又はベクトルストア演算を提供する命令を含む。
本明細書において開示したメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実施手法の組み合わせで実施することができる。本発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性メモリ及び不揮発性メモリ及び/又は記憶要素を含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータープログラム又はプログラムコードとして実施することができる。
プログラムコードは、入力命令に適用されて、本明細書において説明した機能を実行し、出力情報を生成することができる。この出力情報は、1つ又は複数の出力デバイスに既知の方法で適用することができる。この用途のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラー、特定用途向け集積回路(ASIC)、又はマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するように高級手続型プログラム言語又はオブジェクト指向型言語で実施することができる。プログラムコードは、所望の場合には、アセンブリ言語又は機械語で実施することもできる。実際に、本明細書において説明したメカニズムは、どの特定のプログラム言語にも範囲が限定されるものではない。いずれにしても、この言語は、コンパイル型言語又は解釈型言語とすることができる。
少なくとも1つの実施形態の1つ又は複数の態様は、機械によって読み出されると、当該機械に、本明細書において説明した技法を実行するロジックを作製させるプロセッサ内の様々なロジックを表す機械可読媒体上にストアされた代表的な命令によって実施することができる。「IPコア」として知られているそのような表現は、有形の機械可読媒体上にストアすることができ、様々な顧客又は製造設備に供給して、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。
そのような機械可読記憶媒体は、機械又はデバイスによって製造又は形成された物品の非一時的な有形の構成を含むことができるが、これに限定されるものではない。これらの物品は、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM)、再書込み可能コンパクトディスク(CD−RW)、及び光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、磁気カード若しくは光カード、又は電子命令をストアするのに好適な他の任意のタイプの媒体等の半導体デバイス等の記憶媒体を含む。
したがって、本発明の実施形態は、命令を含む非一時的な有形の機械可読媒体、又は本明細書において説明した構造、回路、装置、プロセッサ及び/又はシステムの特徴を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的な有形の機械可読媒体も含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
場合によっては、命令変換器を用いて、命令をソース命令セットからターゲット命令セットに変換することができる。例えば、命令変換器は、命令を、コアによって処理される1つ又は複数の他の命令に変換(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる)、モーフィング、エミュレート、又は別の方法で変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組み合わせで実施することができる。命令変換器は、オンプロセッサ、オフプロセッサ、又は一部分がオンプロセッサ及び一部分がオフプロセッサとすることができる。
上記のように、少なくとも1つの実施形態による1つ又は複数の命令を実行するための技法が開示されている。或る特定の例示の実施形態が、説明され、添付図面に示されているが、そのような実施形態は、広範な本発明の単なる例示にすぎず、広範な本発明を制限するものではないこと、及び、本発明は、図示及び説明された特定の構造及び構成に限定されるものではないことが理解されるべきである。なぜならば、この開示を検討すると、他の様々な変更が当業者には思い浮かべることができるからである。このような技術の分野では、成長が速く、更なる進歩が容易に予見されない場合、開示された実施形態は、本開示の原理又は添付の特許請求の範囲の範囲から逸脱することなく技術的進歩を可能にすることによって容易にされるように、構成及び細部が容易に変更可能な場合がある。

Claims (30)

  1. プロセッサであって、
    第1の複数のデータフィールドを含む第1のレジスタであって、該第1のレジスタ内の該第1の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素用の開始アドレスからのストライド長の倍数に対応し、該第1のレジスタ内の該第1の複数のデータフィールドのそれぞれについて、第1の値は、前記対応するデータ要素が前記メモリからまだロードされていないことを示し、第2の値は、前記対応するデータ要素がロードされる必要がないか、又は前記メモリから既にロードされていることを示す、第1のレジスタと、
    前記第1のレジスタと、前記第1の複数のデータフィールドのうちの1つ又は複数に対応する一組のロード演算とを指定するとともに、第2の単一命令複数データ(SIMD)演算を指定する第1の命令をデコードするデコードステージと、
    1つ又は複数の実行ユニットであって、デコードされた前記第1の命令に応答して、
    前記第1のレジスタ内の前記第1の複数のデータフィールドのそれぞれの値を読み出し、
    前記第1の値を有する前記第1のレジスタ内の前記第1の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリからロードし、前記対応するデータ要素を、第2の複数のデータフィールドを有するとともに該第2の複数のデータフィールドの一部分が前記ロードされたデータ要素をストアする第2のレジスタ内にストアし、
    前記第1のレジスタ内の対応する前記データフィールドの前記値を前記第1の値から前記第2の値に変更し、
    前記第2の複数のデータフィールドの前記一部分にストアされた前記データ要素を用いて前記第2のSIMD演算を実行し、対応する結果のデータ要素を生成する、
    1つ又は複数の実行ユニットと、
    を備える、プロセッサ。
  2. 前記第1の値は1である、請求項1に記載のプロセッサ。
  3. 前記第2の値は0である、請求項1または2に記載のプロセッサ。
  4. 前記1つ又は複数の実行ユニットは、前記デコードされた第1の命令に応答して、前記第1のレジスタ内の前記第1の複数のデータフィールドを複製する、請求項1から3の何れか1項に記載のプロセッサ。
  5. 前記1つ又は複数の実行ユニットは、前記デコードされた第1の命令に応答して、前記第1のレジスタ内の前記第1の値を有する前記第1の複数のデータフィールドのそれぞれを、該第1のレジスタ内の当該データフィールドの前記値が前記第1の値から前記第2の値に変更されたときに複製する、請求項4に記載のプロセッサ。
  6. 前記1つ又は複数の実行ユニットは、障害時、又は前記第1のレジスタ内の前記第1の複数のデータフィールドのそれぞれが前記第2の値を有した後に、前記第1のレジスタからの複製された前記第1の複数のデータフィールドを用いて、前記第2のSIMD演算を実行する、請求項5に記載のプロセッサ。
  7. 前記第2のSIMD演算は単項である、請求項1から6の何れか1項に記載のプロセッサ。
  8. 前記第2のSIMD演算は2項である、請求項1から6の何れか1項に記載のプロセッサ。
  9. 前記第2のレジスタ内にストアされる前記データ要素は、32ビットデータ要素である、請求項1から8の何れか1項に記載のプロセッサ。
  10. 前記第2のレジスタ内にストアされる前記データ要素は、64ビットデータ要素である、請求項1から8の何れか1項に記載のプロセッサ。
  11. 前記第2のレジスタは、512ビットベクトルレジスタである、請求項1から10の何れか1項に記載のプロセッサ。
  12. コンピューターに、 第1のレジスタ内の第1の複数のデータフィールドの各データフィールドの値を読み出す手順であって、前記第1のレジスタ内の前記第1の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素の開始アドレスからのストライド長の倍数に対応し、前記第1のレジスタ内の前記第1の複数のデータフィールドのそれぞれについて、第1の値は、前記対応するデータ要素が前記メモリからロードされていないことを示し、第2の値は、前記対応するデータ要素がロードされる必要がないか、又は前記メモリから既にロードされていることを示す手順と、
    前記第1の値を有する前記第1のレジスタ内の前記第1の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリからロードする手順であって、前記対応するデータ要素を、第2の複数のデータフィールドを有するとともに該第2の複数のデータフィールドの一部分がロードされた前記対応するデータ要素をストアする第2のレジスタ内にストアし、前記第1のレジスタ内の対応する前記データフィールドの値を前記第1の値から前記第2の値に変更する手順と、
    次に、前記第2の複数のデータフィールドの前記一部分にストアされた前記データ要素を用いて第2の単一命令複数データ(SIMD)演算を実行する手順であって、対応する結果のデータ要素を生成する手順と、
    を実行させるためのプログラム。
  13. 前記第1のレジスタ内の前記第1の複数のデータフィールドを複製する手順、
    を前記コンピューターに更に行わせる、請求項12に記載のプログラム。
  14. 前記第1のレジスタ内の前記第1の値を有する前記第1の複数のデータフィールドのそれぞれを、該第1のレジスタ内の当該データフィールドの前記値が前記第1の値から前記第2の値に変更されたときに複製する手順、
    を前記コンピューターに更に行わせる、請求項12または13に記載のプログラム。
  15. 障害時、又は前記第1のレジスタ内の前記第1の複数のデータフィールドの各データフィールドが前記第2の値を有した後に、前記第1のレジスタからの複製された前記第1の複数のデータフィールドを用いて、前記第2のSIMD演算を実行する手順、
    を前記コンピューターに更に行わせる、請求項14に記載のプログラム。
  16. 前記第2のSIMD演算は単項である、請求項12から15の何れか1項に記載のプログラム。
  17. 前記第2のSIMD演算は2項である、請求項12から15の何れか1項に記載のプログラム。
  18. 前記第2のレジスタ内にストアされる前記データ要素は、32ビットデータ要素である、請求項12から17の何れか1項に記載のプログラム。
  19. 前記第2のレジスタ内にストアされる前記データ要素は、64ビットデータ要素である、請求項12から17の何れか1項に記載のプログラム。
  20. 前記第2のレジスタは、512ビットベクトルレジスタである、請求項12から19の何れか1項に記載のプログラム。
  21. プロセッサであって、
    一組のロード演算及び第2の単一命令複数データ(SIMD)演算と、デスティネーションレジスタと、オペランドレジスタと、メモリアドレスと、ストライド長とを指定する第1のSIMD命令をデコードするデコードステージと、
    1つ又は複数の実行ユニットであって、デコードされた前記第1のSIMD命令に応答して、
    マスクレジスタ内の第1の複数のデータフィールドの各データフィールドの値を読み出し、前記マスクレジスタ内の前記第1の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素の前記メモリアドレスからの前記ストライド長の倍数に対応し、前記マスクレジスタ内の前記第1の複数のデータフィールドのそれぞれについて、第1の値は、前記対応するデータ要素が前記メモリからロードされていないことを示し、第2の値は、前記対応するデータ要素がロードされる必要がないか、又は前記メモリから既にロードされていることを示し、
    前記第1の値を有する前記マスクレジスタ内の前記第1の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリから前記デスティネーションレジスタ内の対応するデータフィールドにロードし、前記マスクレジスタ内の前記各データフィールドの値を前記第1の値から前記第2の値に変更し、
    前記デスティネーションレジスタにロードされた前記データ要素と、前記オペランドレジスタ内の対応するデータ要素とを用いて前記第2のSIMD演算を実行して、対応する結果のデータ要素を生成する1つ又は複数の実行ユニットと、
    を備える、プロセッサ。
  22. 前記1つ又は複数の実行ユニットは、前記デコードされた第1のSIMD命令に応答して、前記マスクレジスタ内の前記第1の複数のデータフィールドを複製する、請求項21に記載のプロセッサ。
  23. 前記1つ又は複数の実行ユニットは、前記デコードされた第1のSIMD命令に応答して、前記マスクレジスタ内の前記第1の値を有する前記第1の複数のデータフィールドのそれぞれを、該マスクレジスタ内の当該データフィールドの前記値が前記第1の値から前記第2の値に変更されたときに複製する、請求項22に記載のプロセッサ。
  24. 前記1つ又は複数の実行ユニットは、障害時、又は前記マスクレジスタ内の前記第1の複数のデータフィールドの各データフィールドが前記第2の値を有した後に、前記マスクレジスタからの複製された前記第1の複数のデータフィールドを用いて、前記第2のSIMD演算を実行する、請求項23に記載のプロセッサ。
  25. 前記デスティネーションレジスタ内にロードされる前記データ要素は、32ビットデータ要素である、請求項21から24の何れか1項に記載のプロセッサ。
  26. 前記デスティネーションレジスタ内にロードされる前記データ要素は、64ビットデータ要素である、請求項21から24の何れか1項に記載のプロセッサ。
  27. 前記デスティネーションレジスタは、512ビットベクトルレジスタである、請求項21から26の何れか1項に記載のプロセッサ。
  28. 処理システムであって、
    メモリと、
    複数のプロセッサと
    を備え、前記複数のプロセッサのそれぞれは、
    一組のロード演算及び第2の単一命令複数データ(SIMD)演算と、デスティネーションレジスタと、オペランドレジスタと、メモリアドレスと、ストライド長とを指定する第1のSIMD命令をデコードするデコードステージと、
    1つ又は複数の実行ユニットであって、デコードされた前記第1のSIMD命令に応答して、
    マスクレジスタ内の第1の複数のデータフィールドの各データフィールドの値を読み出し、前記マスクレジスタ内の前記第1の複数のデータフィールドのそれぞれは、メモリ内の対応するデータ要素の前記メモリアドレスからの前記ストライド長の倍数に対応し、前記マスクレジスタ内の各データフィールドについて、第1の値は、前記対応するデータ要素が前記メモリからロードされていないことを示し、第2の値は、前記対応するデータ要素をロードする必要がないか、又は前記メモリから既にロードされていることを示し、
    前記第1の値を有する前記マスクレジスタ内の前記第1の複数のデータフィールドの各データフィールドについて、前記対応するデータ要素を前記メモリから前記デスティネーションレジスタ内の対応するデータフィールドにロードし、前記マスクレジスタ内の前記データフィールドの値を前記第1の値から前記第2の値に変更し、
    前記デスティネーションレジスタにロードされた前記データ要素と、前記オペランドレジスタ内の対応するデータ要素とを用いて前記第2のSIMD演算を実行して、対応する結果のデータ要素を生成する
    1つ又は複数の実行ユニットと、
    を備える処理システム。
  29. 前記1つ又は複数の実行ユニットは更に、前記第1のSIMD命令に応答して、
    前記マスクレジスタ内の前記第1の値を有する前記第1の複数のデータフィールドのそれぞれを、該マスクレジスタ内の当該データフィールドの前記値が前記第1の値から前記第2の値に変更されたときに複製する、
    請求項28に記載の処理システム。
  30. 前記1つ又は複数の実行ユニットは更に、前記第1のSIMD命令に応答して、
    障害時、又は前記マスクレジスタ内の前記第1の複数のデータフィールドの各データフィールドが前記第2の値を有した後に、前記マスクレジスタからの複製された前記第1の複数のデータフィールドを用いて、前記第2のSIMD演算を実行する、
    請求項29に記載の処理システム。
JP2014531781A 2011-09-26 2011-09-26 ストライド機能を有するベクトルロード演算/ストア演算を提供する命令及びロジック Expired - Fee Related JP5933011B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2011/053331 WO2013048369A1 (en) 2011-09-26 2011-09-26 Instruction and logic to provide vector load-op/store-op with stride functionality

Publications (2)

Publication Number Publication Date
JP2014526758A true JP2014526758A (ja) 2014-10-06
JP5933011B2 JP5933011B2 (ja) 2016-06-08

Family

ID=47996117

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014531781A Expired - Fee Related JP5933011B2 (ja) 2011-09-26 2011-09-26 ストライド機能を有するベクトルロード演算/ストア演算を提供する命令及びロジック

Country Status (8)

Country Link
US (1) US9804844B2 (ja)
JP (1) JP5933011B2 (ja)
KR (2) KR101877347B1 (ja)
CN (2) CN103827814B (ja)
BR (1) BR112014004600A2 (ja)
DE (1) DE112011105666T5 (ja)
GB (1) GB2508312B (ja)
WO (1) WO2013048369A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020116025A1 (ja) * 2018-12-07 2020-06-11 日本電気株式会社 コンパイル装置、コンパイル方法、及び非一時的なコンピュータ可読媒体
JP2020109604A (ja) * 2018-12-31 2020-07-16 グラフコアー リミテッドGraphcore Limited ロード/ストア命令

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013048369A1 (en) 2011-09-26 2013-04-04 Intel Corporation Instruction and logic to provide vector load-op/store-op with stride functionality
CN103827813B (zh) * 2011-09-26 2016-09-21 英特尔公司 用于提供向量分散操作和聚集操作功能的指令和逻辑
US20170269935A1 (en) * 2011-09-26 2017-09-21 Elmoustapha Ould-Ahmed-Vall Instruction and logic to provide vector loads and stores with strides and masking functionality
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9778932B2 (en) 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
CN103414854B (zh) * 2013-08-13 2017-04-19 三星半导体(中国)研究开发有限公司 具有图像处理功能的片上系统及其运行方法
KR102152735B1 (ko) * 2013-09-27 2020-09-21 삼성전자주식회사 그래픽 처리 장치 및 이의 동작 방법
JP6351722B2 (ja) * 2013-12-23 2018-07-04 インテル・コーポレーション クラスタ化されたワイド実行機械におけるメモリアクセス用の命令およびロジック
US9600442B2 (en) * 2014-07-18 2017-03-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
US9467279B2 (en) * 2014-09-26 2016-10-11 Intel Corporation Instructions and logic to provide SIMD SM4 cryptographic block cipher functionality
US10528345B2 (en) * 2015-03-27 2020-01-07 Intel Corporation Instructions and logic to provide atomic range modification operations
US20170177352A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Store Operations
US10019262B2 (en) * 2015-12-22 2018-07-10 Intel Corporation Vector store/load instructions for array of structures
US9996319B2 (en) * 2015-12-23 2018-06-12 Intel Corporation Floating point (FP) add low instructions functional unit
US10248488B2 (en) * 2015-12-29 2019-04-02 Intel Corporation Fault tolerance and detection by replication of input data and evaluating a packed data execution result
GB2546510B (en) 2016-01-20 2018-09-26 Advanced Risc Mach Ltd Vector atomic memory update instruction
GB2548601B (en) * 2016-03-23 2019-02-13 Advanced Risc Mach Ltd Processing vector instructions
US20180088946A1 (en) * 2016-09-27 2018-03-29 Intel Corporation Apparatuses, methods, and systems for mixing vector operations
US20180173527A1 (en) * 2016-12-15 2018-06-21 Optimum Semiconductor Technologies, Inc. Floating point instruction format with embedded rounding rule
WO2018174931A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and appartus for tile configuration
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
GB2580664B (en) * 2019-01-22 2021-01-13 Graphcore Ltd Double load instruction
US11163575B2 (en) * 2019-04-03 2021-11-02 Microsoft Technology Licensing, Llc Widening memory access to an aligned address for unaligned memory operations
CN110908716B (zh) * 2019-11-14 2022-02-08 中国人民解放军国防科技大学 一种向量聚合装载指令的实现方法
US11573795B1 (en) * 2021-08-02 2023-02-07 Nvidia Corporation Using a vector processor to configure a direct memory access system for feature tracking operations in a system on a chip

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH036663A (ja) * 1989-06-02 1991-01-14 Mitsubishi Electric Corp ベクトルデータ処理方式
JPH0452962A (ja) * 1990-06-20 1992-02-20 Fujitsu Ltd アクセスマスク制御方式
JPH0954769A (ja) * 1995-08-15 1997-02-25 Kofu Nippon Denki Kk ベクトル処理装置
JP2011514598A (ja) * 2008-03-28 2011-05-06 インテル コーポレイション 効率的な同期および並列リダクション演算を可能にするベクトル命令
JP2011134318A (ja) * 2009-12-22 2011-07-07 Intel Corp 複数のデータ・エレメントの収集及び分散

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0731669B2 (ja) * 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
JP2665111B2 (ja) * 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
JP3006663B2 (ja) 1995-01-27 2000-02-07 ブラザー工業株式会社 印面作成装置
US5838984A (en) 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
US6625721B1 (en) * 1999-07-26 2003-09-23 Intel Corporation Registers for 2-D matrix processing
US20040006667A1 (en) 2002-06-21 2004-01-08 Bik Aart J.C. Apparatus and method for implementing adjacent, non-unit stride memory access patterns utilizing SIMD instructions
US6920546B2 (en) * 2002-08-13 2005-07-19 Intel Corporation Fusion of processor micro-operations
US7437521B1 (en) * 2003-08-18 2008-10-14 Cray Inc. Multistream processing memory-and barrier-synchronization method and apparatus
US7275148B2 (en) 2003-09-08 2007-09-25 Freescale Semiconductor, Inc. Data processing system using multiple addressing modes for SIMD operations and method thereof
GB2409064B (en) * 2003-12-09 2006-09-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing in parallel a data processing operation on data elements
TW200739363A (en) * 2006-04-04 2007-10-16 Nat Univ Chung Cheng Flexible load and storage device for multimedia applications
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US9529592B2 (en) * 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US7984273B2 (en) * 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US20100199067A1 (en) 2009-02-02 2010-08-05 International Business Machines Corporation Split Vector Loads and Stores with Stride Separated Words
US20120254591A1 (en) 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
WO2013048369A1 (en) 2011-09-26 2013-04-04 Intel Corporation Instruction and logic to provide vector load-op/store-op with stride functionality

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH036663A (ja) * 1989-06-02 1991-01-14 Mitsubishi Electric Corp ベクトルデータ処理方式
JPH0452962A (ja) * 1990-06-20 1992-02-20 Fujitsu Ltd アクセスマスク制御方式
JPH0954769A (ja) * 1995-08-15 1997-02-25 Kofu Nippon Denki Kk ベクトル処理装置
JP2011514598A (ja) * 2008-03-28 2011-05-06 インテル コーポレイション 効率的な同期および並列リダクション演算を可能にするベクトル命令
JP2011134318A (ja) * 2009-12-22 2011-07-07 Intel Corp 複数のデータ・エレメントの収集及び分散

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020116025A1 (ja) * 2018-12-07 2020-06-11 日本電気株式会社 コンパイル装置、コンパイル方法、及び非一時的なコンピュータ可読媒体
JPWO2020116025A1 (ja) * 2018-12-07 2021-10-07 日本電気株式会社 コンパイル装置、コンパイル方法、及び制御プログラム
JP7115563B2 (ja) 2018-12-07 2022-08-09 日本電気株式会社 コンパイル装置、コンパイル方法、及び制御プログラム
US11829754B2 (en) 2018-12-07 2023-11-28 Nec Corporation Compile device, compile method, and non-transitory computer readable medium for increasing a speed of a program
JP2020109604A (ja) * 2018-12-31 2020-07-16 グラフコアー リミテッドGraphcore Limited ロード/ストア命令

Also Published As

Publication number Publication date
KR101572770B1 (ko) 2015-11-27
US9804844B2 (en) 2017-10-31
DE112011105666T5 (de) 2014-07-10
KR20140057363A (ko) 2014-05-12
GB2508312B (en) 2020-04-22
GB2508312A (en) 2014-05-28
CN103827814B (zh) 2017-04-19
US20140195778A1 (en) 2014-07-10
KR101877347B1 (ko) 2018-07-12
WO2013048369A1 (en) 2013-04-04
CN103827814A (zh) 2014-05-28
CN106951214B (zh) 2019-07-19
BR112014004600A2 (pt) 2017-06-13
JP5933011B2 (ja) 2016-06-08
CN106951214A (zh) 2017-07-14
GB201402148D0 (en) 2014-03-26
KR20150137129A (ko) 2015-12-08
WO2013048369A9 (en) 2013-10-03

Similar Documents

Publication Publication Date Title
JP5933011B2 (ja) ストライド機能を有するベクトルロード演算/ストア演算を提供する命令及びロジック
JP5933725B2 (ja) ベクトル散乱演算機能及びベクトル収集演算機能を提供する命令及びロジック
JP5930558B2 (ja) ストライド機能及びマスク機能を有するベクトルロード及びベクトルストアを提供する命令及びロジック
JP6207095B2 (ja) 条件付きループをベクトル化する命令及び論理
KR101555412B1 (ko) 벡터 압축 및 회전 기능 제공 명령어 및 로직
KR101842058B1 (ko) 푸싱형 버퍼 복사 및 저장 기능성을 제공하기 위한 명령어 및 논리
KR101767025B1 (ko) 벡터 어드레스 충돌 검출 기능을 제공하기 위한 방법, 장치, 명령어들 및 로직
TWI617979B (zh) 提供向量水平比較功能之方法與系統及其處理器與機器可讀取媒體
US20140372727A1 (en) Instruction and logic to provide vector blend and permute functionality
JP2019050039A (ja) ゲノム配列決定および配列比較のためのポピュレーションカウント機能性を提供する方法、装置、命令、およびロジック
JP2018512631A (ja) アトミックな範囲演算を提供する命令及びロジック
TW201732564A (zh) 用於使用monitor及mwait架構之使用者層級執行緒同步的方法及裝置
JP2018504667A (ja) ベクトルパックドタプル相互比較機能を提供する方法、装置、命令、およびロジック
CN108292271B (zh) 用于向量置换的指令和逻辑
CN106293631B (zh) 用于提供向量分散操作和聚集操作功能的指令和逻辑
US20170269935A1 (en) Instruction and logic to provide vector loads and stores with strides and masking functionality
JP6231155B2 (ja) ベクトル散乱演算機能及びベクトル収集演算機能を提供する命令及びロジック
JP6222859B2 (ja) ストライド機能及びマスク機能を有するベクトルロード及びベクトルストアを提供する命令及びロジック
GB2578972A (en) Instruction and logic to provide vector scatter-op and gather-op functionality

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140424

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150415

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150512

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150807

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

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160330

R155 Notification before disposition of declining of application

Free format text: JAPANESE INTERMEDIATE CODE: R155

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160428

R150 Certificate of patent or registration of utility model

Ref document number: 5933011

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees