JP5795787B2 - 条件付きループをベクトル化する命令及び論理 - Google Patents

条件付きループをベクトル化する命令及び論理 Download PDF

Info

Publication number
JP5795787B2
JP5795787B2 JP2013254939A JP2013254939A JP5795787B2 JP 5795787 B2 JP5795787 B2 JP 5795787B2 JP 2013254939 A JP2013254939 A JP 2013254939A JP 2013254939 A JP2013254939 A JP 2013254939A JP 5795787 B2 JP5795787 B2 JP 5795787B2
Authority
JP
Japan
Prior art keywords
vector
destination
source
processor
data
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.)
Active
Application number
JP2013254939A
Other languages
English (en)
Other versions
JP2014130580A (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 JP2014130580A publication Critical patent/JP2014130580A/ja
Application granted granted Critical
Publication of JP5795787B2 publication Critical patent/JP5795787B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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
    • 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/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/8076Details on data register access
    • G06F15/8084Special arrangements thereof, e.g. mask or switch
    • 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
    • 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/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address 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
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating

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)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本開示は、プロセッサその他の処理論理に実行されると、論理的、数学的、その他の関数演算を実行する処理論理、マイクロプロセッサ、及び、関連する命令セットアーキテクチャ分野に関する。特に、本開示は、条件付きループのためのSIMDベクトル化機能を提供する命令及び論理に関する。
現代のプロセッサは、計算集約型ではあるが、様々なデータ記憶デバイス(たとえば、単一命令複数データ(SIMD)ベクトルレジスタ)を利用した効率的な実装によって実現可能な、ハイレベルなデータの並列処理を提供する演算を提供する命令を含んでいる場合が多い。SIMDを実行する際には、1つの命令が複数のデータエレメントに同時に実行される。これは、通常、レジスタおよび算術論理演算ユニット(ALU)といった様々なリソースの幅を拡張して、これらリソースがそれぞれ複数のデータエレメントを保持または複数のデータエレメントに演算を行うことができるようにすることで実装される。
ベクトルのSIMD処理をサポートするために、中央処理装置(CPU)は並列ハードウェアを提供する。ベクトルは、複数の連続したデータエレメントを保持するデータ構造である。サイズがLのベクトルレジスタは、サイズがMのN個のベクトルエレメントを含むことができる(N=L/M)。たとえば64バイトのベクトルレジスタは、(a)各エレメントが1バイトを占有しているデータアイテムを保持する、64個のベクトルエレメント、(b)それぞれが2バイト(または1つの「ワード」)を占有するデータアイテムを保持する、32個のベクトルエレメント、(c)それぞれが4バイト(または1つの「ダブルワード」)を占有するデータアイテムを保持する、16個のベクトルエレメント、または、(d)それぞれが8バイト(または1つの「クワッドワード」)を占有するデータアイテムを保持する8個のベクトルエレメントに切り分けることができる。
複数のアプリケーションが、大量のデータレベルの並列処理を有しているので、SIMDをサポートすると有利だろう。SIMDを効率的に維持するために、一部のアーキテクチャは、SIMD算術演算だけでなく、SIMDメモリ読み書き、さらには、SIMDシャッフルおよび置換を可能としている。しかし、アプリケーションのなかには、一群の離れた位置に演算を行うためにかなり時間がかかるものがある。さらに、連続した、および/または、条件付き演算を実行する場合があり、この場合のアプリケーションは、SIMD演算を行っても利点が少ない。
たとえば、PARSEC(Princeton Application Repository for Shared-Memory Computers)は、マルチスレッドプログラムからなるベンチマークスイートである。このスイートは、現れる作業負荷に焦点を当てて、チップマルチプロセッサの次世代共有メモリプログラムを代表するよう設計されている。PARSECプログラムの1つである、ストリームクラスタ(streamcluster)は、所定の数のメジアンを見つけて、各点をその直近の中央に割り当てることができるようにすることで、オンラインクラスタリング問題を解決している。プログラムの殆どの時間は、新たな中央を開くことで得られる利得を評価することに当てられる。並列利得計算を、pgainという関数に実装しており、これは以下のループを有する。
Figure 0005795787
上述したループの例は、メモリアレイに実行される条件付き演算を示しており、ここでベクトル化は難しいので、SIMD演算を可能とするプロセッサアーキテクチャを利用しても得られる利点は少ないと思われる。
今日まで、これらパフォーマンスを制限する問題及びボトルネックを解決する可能性のある解決法は見つけられていない。
本発明は、添付図面によって制限ではなく、例示として図示される。
条件付きループのためのSIMDベクトル化機能を提供する命令を実行するシステムの一実施形態のブロック図である。 条件付きループのためのSIMDベクトル化機能を提供する命令を実行するシステムの別の一実施形態のブロック図である。 条件付きループのためのSIMDベクトル化機能を提供する命令を実行するシステムの別の一実施形態のブロック図である。 条件付きループのためのSIMDベクトル化機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。 一実施形態におけるパッキングされたデータタイプを示す。 一実施形態におけるパッキングされたデータタイプを示す。 一実施形態におけるパッキングされたデータタイプを示す。 一実施形態における条件付きループのためのSIMDベクトル化機能を提供する命令エンコードを示す。 別の一実施形態における条件付きループのためのSIMDベクトル化機能を提供する命令エンコードを示す。 別の一実施形態における条件付きループのためのSIMDベクトル化機能を提供する命令エンコードを示す。 別の一実施形態における条件付きループのためのSIMDベクトル化機能を提供する命令エンコードを示す。 別の一実施形態における条件付きループのためのSIMDベクトル化機能を提供する命令エンコードを示す。 条件付きループのためのSIMDベクトル化機能を提供する命令を実行するプロセッサマイクロアーキテクチャの一実施形態のエレメントを示す。 条件付きループのためのSIMDベクトル化機能を提供する命令を実行するプロセッサマイクロアーキテクチャの一実施形態のエレメントを示す。 条件付きループのためのSIMDベクトル化機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。 条件付きループのためのSIMDベクトル化機能を提供する命令を実行するコンピュータシステムの一実施形態のブロック図である。 条件付きループのためのSIMDベクトル化機能を提供する命令を実行するコンピュータシステムの別の一実施形態のブロック図である。 条件付きループのためのSIMDベクトル化機能を提供する命令を実行するコンピュータシステムの別の一実施形態のブロック図である。 条件付きループのためのSIMDベクトル化機能を提供する命令を実行するシステムオンチップの一実施形態のブロック図である。 条件付きループのためのSIMDベクトル化機能を提供する命令を実行するプロセッサの一実施形態のブロック図である。 条件付きループのためのSIMDベクトル化機能を提供するIPコア開発システムの一実施形態のブロック図である。 条件付きループのためのSIMDベクトル化機能を提供するアーキテクチャエミュレーションシステムの一実施形態を示す。 条件付きループのためのSIMDベクトル化機能を提供する命令を変換するシステムの一実施形態を示す。 条件付きループのためのSIMDベクトル化機能を提供するために、命令を利用するプロセスの一実施形態のフロー図である。 条件付きループのためのSIMDベクトル化機能を提供する命令を利用するプロセスの別の一実施形態のフロー図である。 条件付きループのためのSIMDベクトル化機能を提供するために、ベクトル拡張命令を実行するプロセスの一実施形態のフロー図である。 条件付きループのためのSIMDベクトル化機能を提供するために、ベクトル拡張命令を実行するプロセスの一実施形態のフロー図である。 条件付きループのためのSIMDベクトル化機能を提供するプロセスの一実施形態のフロー図を示す。 条件付きループのためのSIMDベクトル化機能を提供するベクトル拡張命令を実行する装置の一実施形態を示す。 条件付きループのためのSIMDベクトル化機能を提供するベクトル拡張命令を実行する装置の別の一実施形態を示す。
以下の記載では、条件付きループのためのSIMDベクトル化機能をプロセッサ、コンピュータシステム、その他の処理装置内で、またはこれらに関連して提供する命令及び処理論理を開示する。
本明細書で、ベクトルプロセッサの条件付きループのベクトル化を提供する命令および論理を開示する。SIMDベクトル拡張命令は、複数のn個の連続したベクトルエレメントを保持するために、ソースベクトルを特定するソースパラメータ、条件付きマスクレジスタを特定するマスクパラメータ、および、デスティネーションベクトルを特定するためのデスティネーションパラメータを有する。複数のn個の連続したベクトルエレメントのそれぞれは、mバイトの同じ可変パーティションサイズを有する。プロセッサ命令に呼応して、データを特定されたデスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、ソースベクトルの連続したベクトルエレメントのデータを、特定されたデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーし、nは、実行されるプロセッサ命令に応じて変化する。一部の実施形態は、条件決定のカウントを格納する。別の実施形態では、たとえば対象アドレス、テーブルオフセット、または処理命令のインジケータ等の他のデータを格納してよい。
一部の実施形態は、カウントベクトルのエレメントをn個のカウント値(たとえば連続したカウント値)に設定してよい。メモリアレイの一部(たとえばis_center[i:i+n‐1])にアクセスして、決定ベクトルを取得する。SIMDベクトル比較オペレーションを次に利用して、決定ベクトルに従ってベクトル条件付きマスクを生成してよく、ベクトル条件付きマスクをマスクレジスタに格納してよい。SIMDベクトル拡張命令を実行すると、プロセッサ命令の受信に呼応して、ソースベクトルのデータを、デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、ソースベクトルの連続したベクトルエレメントのデータを、デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする。nは、受信されるプロセッサ命令に応じて変化する(たとえば、mバイトの可変パーティションサイズは、アレイcenter_table[]の整数のサイズであってよい)。次に、デスティネーションベクトルのデータが、SIMDマスキングされているベクトル書き込みオペレーションによってメモリに格納されてよい。したがって条件付きループのベクトル化は、本明細書で開示される命令および論理を利用して以下のように達成することができる。
関数pgainからベクトル化されたループを実行する擬似コードの一例を以下に示す。
Figure 0005795787
ベクトル拡張命令の一実施形態は、メモリのデスティネーションベクトルを特定してよく、(たとえばcenter_table[i:i+n-1])、これにより、別のマスキングされたベクトル書き込み(たとえばマスクストア)オペレーションが必要なくなる点を理解されたい。さらに、条件付きループのベクトル化を、以下で詳述するように、本明細書で開示する命令および論理を利用して達成することができ、これによりパフォーマンスおよび命令のスループットが向上して、電力利用量およびエネルギー消費量が低減することを理解されたい。これらの技術は、大量の連続生成されるデータをリアルタイムに組織化する必要があるオンラインクラスタリング等のアプリケーションで利用することができる。他の例としては、ネットワーク侵入検知、パターン認識、およびデータマイニング等が含まれてよい。
以下の記載では、処理論理、処理タイプ、マイクロアーキテクチャ条件、イベント、イネーブルメカニズム等の数多くの具体的な詳細を述べて、本発明の実施形態の完全な理解を提供する。しかし、当業者であれば本発明を、これら具体的な詳細なしに実行可能であることを理解する。加えて、公知の構造、回路等は詳細に示すのを避けて、本発明の実施形態を不当にあいまいにしないようにしている場合もあることも理解されたい。
以下の記載は、プロセッサに関して記載されるが、他の実施形態は任意の他の種類の集積回路及び論理デバイスに利用可能である。本発明の実施形態の同様の技術及び教示は、パイプラインスループットを向上させ性能を高めることで利益を享受しうる他のタイプの回路または半導体デバイスにも応用可能である。本発明の実施形態の教示は、データ操作を実行するいずれのプロセッサまたは機械にも応用可能である。しかし本発明は、512ビット、256ビット、128ビット、64ビット、32ビット、または16ビットのデータオペレーションを実行するプロセッサまたは機械に限定されず、データの操作及び管理を実行するいずれのプロセッサ及び機械に対しても応用することができる。加えて、以下の記載は例示を提供しており、添付図面は図示の目的から様々な例を提示する。しかし、これらの例は、単に本発明の実施形態の例を提供する意図をもつのであって、本発明の実施形態について可能性のあるすべての実施形態の網羅的なリストを提供する意図はないので、限定的にとらえられるべきではない。
以下の例は、実行ユニット及び論理回路のコンテキストから、命令処理及び配信について記載しているが、本発明の他の実施形態は、機械により実行されると、機械に本発明の少なくとも1つの実施形態に従った機能を実行させることができる、機械可読有形媒体に格納されているデータおよび/または命令によって実行されてもよい。一実施形態では、本発明の実施形態に関する機能は、機械実行可能な命令によって実現される。命令は、命令をプログラミングされた汎用または専用プロセッサに、本発明の各ステップを実行させる。本発明の実施形態は、コンピュータ(またはその他の電子デバイス)を、本発明の実施形態の1以上のオペレーションを実行させるようにプログラミングするために利用されてよい命令が格納された機械またはコンピュータ可読媒体を含んでよいコンピュータプログラムプロダクトまたはソフトウェアとして提供されてよい。または、本発明の実施形態の各ステップが、各ステージを実行するための固定関数(fixed-function)論理を含む具体的なハードウェアコンポーネントにより実行されてもよいし、プログラミングされたコンピュータコンポーネントと固定関数ハードウェアコンポーネントの任意の組み合わせにより実行されてもよい。
本発明の実施形態を実施するための論理をプログラミングするために利用される命令は、システムのメモリ(たとえばDRAM、キャッシュ、フラッシュメモリ、その他のストレージ)に格納されてもよい。さらに命令は、他のコンピュータ可読媒体によってまたはネットワーク経由で配信されてよい。したがって、機械可読媒体は、機械(たとえばコンピュータ)が可読な形態の命令を格納または送信する任意のメカニズムを含んでよく、フロッピー(登録商標)ディスク、光ディスク、CD、CD−ROM,光磁気ディスク、ROM、RAM、EPROM、EEPROM、磁気カードまたは光カード、フラッシュメモリ、または有形の、機械可読記憶媒体(電気、光、音響その他の形態の伝播信号(たとえば搬送波、赤外線信号、デジタル信号等)によってインターネット経由で情報を送信するために利用される)に限定はされない。したがって、コンピュータ可読媒体は、機械が可読な形態で電子命令または情報を格納または送信するのに適した任意のタイプの有形の機械可読媒体を含む。
設計は、作成、シミュレーション、製造といった様々なステージを経ることができる。設計を表すデータは、複数の方法で設計を表すことができる。まず、シミュレーションに適しているが、ハードウェアを、ハードウェア記述言語あるいは別の機能記述言語を利用して表すことができる。加えて、論理及び/またはトランジスタゲートを持つ回路レベルのモデルを設計プロセスのあるステージで生成することができる。さらに、殆どの設計は、あるステージで、ハードウェアモデルの様々なデバイスの物理的配置を表すレベルのデータに到達する。従来の半導体製造技術を利用するケースでは、ハードウェアモデルを表すデータは、集積回路を製造するために利用されるマスクのための様々なマスクレイヤの様々な特徴の存在または不在を示すデータであってよい。設計のいずれの表現においても、データは、機械可読媒体の任意の形態で格納されてもよい。ディスク等のメモリまたは磁気もしくは光ストレージは、情報の送信のために変調された、または生成された光波または電気波で送信される情報を格納するための機械可読媒体であってよい。コードまたは設計を搬送するまたは示す電気搬送波が送信される場合、電気信号のコピー、バッファリング、または再送信に関しては、新たなコピーを作成する。したがって通信プロバイダまたはネットワークプロバイダは、少なくとも一時的に、本発明の実施形態の技術を利用して、搬送波に符号化された情報等の物品を有形の機械可読媒体に格納してよい。
現代のプロセッサでは、複数の異なる実行ユニットを利用して、様々なコード及び命令が処理、実行される。これら命令の全てが、同じように生成されているわけではない、というのも、これらのうち早く完了するものもあるが、完了させるために多数のクロックサイクルを必要とするものもあるからである。命令のスループットが速いほど、プロセッサの性能全体もよくなる。したがって、なるべく命令を高速で実行させるとよい。しかし、命令の中には、複雑性が高く、多くの実行時間及びプロセッサリソースが必要となるものもある。たとえば浮動小数点命令、ロード/格納演算、データの移動等がこれに相当する。
より多くのコンピュータシステムがインターネット、テキスト及びマルチメディアアプリケーションで利用されるようになるにつれ、さらなるプロセッサのサポートが導入されてきた。一実施形態では、命令セットは、1以上のコンピュータアーキテクチャ(たとえば、データタイプ、命令、レジスタアーキテクチャ、アドレスモード、メモリアーキテクチャ、割り込み及び例外の処理、外部入出力(I/O))と関連付けられてよい。
一実施形態では、命令セットアーキテクチャ(ISA)は、1以上の命令セットを実装するために利用されるプロセッサ論理及び回路を含む1以上のマイクロアーキテクチャにより実装されてよい。したがい、異なるマイクロアーキテクチャをもつプロセッサは、共通の命令セットの少なくとも一部を共有してよい。たとえばIntel(登録商標)Pentium(登録商標)4プロセッサ、Intel(登録商標)Core(登録商標)プロセッサ、及び、カリフォルニア州のSynnyvaleのAdvanced Micro Devices社製のプロセッサなどが、x86命令セットに略等しいバージョンを実装している(新しいバージョンでは拡張部も加えられている)が、内部設計は異なっている。同様に、他の開発業者(たとえばARM Holdings ,LTD.,MIPS)または彼らのライセンシーまたは採用会社(adopter)が、共通の命令セットの少なくとも一部ではあるが、プロセッサの設計は異ならせて、共有している、という事例がある。たとえばISAの同じレジスタアーキテクチャを、新たな、または公知の技術を利用して(たとえば、専用物理レジスタ、レジスタリネームメカニズム(たとえばRegister Alias Table(RAT)、Reorder Buffer(ROB)、及び退避レジスタファイル)を利用する1以上の動的割り当てされた物理レジスタ)異なるマイクロアーキテクチャで異なる方法で実装することができる。一実施形態では、レジスタは1以上のレジスタ、レジスタアーキテクチャ、レジスタファイル、その他、ソフトウェアプログラムによりアクセス可能であってもなくてもよい他のレジスタセットを含んでよい。
一実施形態では、命令は、1以上の命令フォーマットを含んでよい。一実施形態では、命令フォーマットは、特に実行するオペレーション及びオペレーションを実行するオペランドを指定する様々なフィールド(ビット数、ビット位置等)を示すことができる。命令フォーマットの一部は、さらに、命令テンプレート(またはサブフォーマット)により破壊定義(broken defined)されてもよい。たとえば、ある命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されていてもよいし、及び/または、異なる割り込みを行われたフィールドを有するように定義されていてもよい。一実施形態では、命令は、命令フォーマットを利用して(さらに、定義されている場合には命令フォーマットの命令テンプレートの一定のフォーマットで)表され、オペレーション及びオペレーションが行われるオペランドを示したり、指定したりする。
科学的な、金融関係の、自動ベクトル化汎用RMS(認識、マイニング、及び合成:recognition, mining, and synthesis)及び視覚的及びマルチメディアアプリケーション(たとえば2D/3Dグラフィック、画像処理、ビデオ圧縮/伸張、音声認識アルゴリズム及び音声操作)において、多数のデータアイテムに対して同じオペレーションが行われる必要があるだろう。一実施形態では、単一命令複数データ(SIMD)が、プロセッサに複数のデータエレメントにオペレーションを行わせるタイプの命令のことを指す。SIMD技術は、レジスタのビットを複数の固定サイズまたは可変サイズのデータエレメントに分割することができるプロセッサで利用することができる(各データエレメントは、別の値を表している)。たとえば一実施形態では、64ビットレジスタのビットは、4つの別個の16ビットのデータエレメント(これらそれぞれは、別々の16ビットの値を表している)を含むソースオペランドとして組織化されていてよい。このタイプのデータは、「パッキングされた」データタイプまたは「ベクトル」データタイプと称されてよく、このタイプのデータのオペランドは、パッキングされたデータオペランドまたはベクトルオペランドと称される。一実施形態では、パッキングされたデータアイテムまたはベクトルは、1つのレジスタに格納されている一連のパッキングされたデータエレメントであり、パッキングされたデータオペランドまたはベクトルオペランドは、SIMD命令のソースまたはデスティネーションオペランド(または、「パッキングされたデータ命令」または「ベクトル命令」)であってよい。一実施形態では、SIMD命令は、2つのソースベクトルオペランドに対して実行すべき1つのベクトルオペレーションを指定して、同じまたは異なるサイズであり、同じまたは異なる数のデータエレメントであり、同じまたは異なるデータエレメントの順序を持つ、デスティネーションベクトルオペランドを生成する(結果ベクトルオペランドと称される場合もある)。
x86、MMX(登録商標)、ストリーミングSIMD拡張(SSE)、SSE2、SSE3、SSE4.1、及びSSE4.2命令を含む命令セットをもつIntel(登録商標)Core(登録商標)プロセッサ、ベクトル浮動小数点(VFP)及び/またはNEON命令を含む命令セットをもつARM Cortex(登録商標)プロセッサファミリー等のARMプロセッサ、及び、中国科学アカデミーのICT(Institute of Computing Technology)が開発したLoongsonプロセッサファミリー等のMIPSプロセッサ等によって利用されているものに代表されるSIMD技術は、アプリケーション性能を顕著に向上させた(Core(登録商標)及びMMX(登録商標)は、カリフォルニア州サンタクララのIntel Corporation社の登録商標または商標である)。
一実施形態では、デスティネーション及びソースレジスタ/データは、対応するデータまたはオペレーションのソース及びデスティネーションを表す一般名称である。一部の実施形態では、これらは、レジスタ、メモリ、記述されるものと異なる命令または機能をもっているその他の格納領域で実装されてもよい。たとえば一実施形態では、「DEST1」は、一時的な格納レジスタその他の格納領域であってよく、一方で、「SRC1」「SRC2」は、第1及び第2のソース格納レジスタ、その他の格納領域であってもよい、等である。他の実施形態では、SRC及びDEST格納領域の2以上が、同じ格納領域(たとえばSIMDレジスタ)内の異なるデータ格納エレメントに対応していてよい。一実施形態では、ソースレジスタの1つが、たとえばあるデスティネーションレジスタにサービス提供している2つのソースレジスタのいずれかへの第1及び第2のソースデータに対してオペレーションを実行した結果を書き戻すことで、デスティネーションレジスタとして動作してもよい。
図1Aは、本発明の一実施形態における、命令を実行するための実行ユニットを含むプロセッサで構成されるコンピュータシステムの一例のブロック図である。システム100は、この実施形態で記載されている実施形態等の本発明におけるデータを処理するアルゴリズムを実行するための論理を含む実行ユニットを利用するコンポーネント(たとえばプロセッサ102)を含む。システム100は、カリフォルニア州のサンタクララのIntel Corporationから入手可能なPENTIUM(登録商標)III,PENTIUM(登録商標)4、Xeon(登録商標)、Itanium(登録商標)、XScale(登録商標)、及び/またはStrong ARM(登録商標)マイクロプロセッサに基づくプロセッサシステムを表しているが、他のシステム(他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を含む)を利用することもできる。一実施形態では、サンプルのシステム100は、ワシントン州のRedmondのMicrosoft Corporationから入手可能なWindows(登録商標)オペレーティングシステムのあるバージョンを実行してよいが、他のオペレーティングシステム(UNIX(登録商標)及びLinux(登録商標))、エンベデッドソフトウェア、及び/または、グラフィックユーザインタフェースを利用してもよい。したがって本発明の実施形態は、ハードウェア回路及びソフトウェアの特定の組み合わせに限定はされない。
実施形態はコンピュータシステムに限定はされない。本発明の別の実施形態は、ハンドヘルドデバイス及びエンベデッドアプリケーション等の他のデバイスで利用することができる。ハンドヘルドデバイスの一部の例には、携帯電話器、インターネットプロトコルデバイス、デジタルカメラ、情報携帯端末(PDA)、及びハンドヘルドPCが含まれる。エンベデッドアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、または少なくとも1つの実施形態の1以上の命令を実行することができる1以上の他のシステムを含んでよい。
図1Aは、本発明の一実施形態における少なくとも1つの命令を実行するアルゴリズムを実行する1以上の実行ユニット108を含むプロセッサ102で構成されたコンピュータシステム100のブロック図である。一実施形態は、シングルプロセッサデスクトップまたはサーバシステムのコンテキストで記載されてよいが、別の実施形態は、マルチプロセッサシステムに含めることもできる。システム100は、「ハブ」システムアーキテクチャの一例である。コンピュータシステム100は、データ信号を処理するプロセッサ102を含む。プロセッサ102は、CISC(複合命令セットコンピュータ:complex instruction set computer)マイクロプロセッサ、RISC(低減命令セット計算:reduced instruction set computing)マイクロプロセッサ、VLIW(超長命令語:Very Long Instruction Word)マイクロプロセッサ、命令セットの組み合わせを実装するプロセッサ、または任意の他のプロセッサデバイス(たとえばデジタル信号プロセッサなど)を含む。プロセッサ102は、プロセッサ102とシステム100の他のコンポーネントとの間でデータ信号を伝達することができるプロセッサバス110に連結されている。システム100の各エレメントは、当業者であればよくわかっている銘々の従来の機能を果たす。
一実施形態では、プロセッサ102は、レベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャによって、プロセッサ102は、1つの内部キャッシュまたは複数レベルの内部キャッシュを有してよい。または、別の実施形態では、キャッシュメモリがプロセッサ102の外部に存在していてもよい。他の実施形態としてさらに、特定の実装及び需要に応じて、内部キャッシュ及び外部キャッシュ両方の組み合わせを含んでもよい。レジスタファイル106は、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタを含む様々なレジスタに様々なタイプのデータを格納することができる。
整数及び浮動小数点演算を実行する論理を含む実行ユニット108も、プロセッサ102に存在している。プロセッサ102はさらに、一定のマクロ命令のためのマイクロコードを格納するマイクロコード(μコード)ROMを含んでいる。一実施形態では、実行ユニット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は、データ信号をプロセッサ102、メモリ120、及びシステム100の他のコンポーネントの間に方向づけ、データ信号をプロセッサバス110、メモリ120、及びシステムI/O122の間でブリッジする。一部の実施形態では、システム論理チップ116は、グラフィックコントローラ112に連結するためのグラフィックポートを提供することができる。MCH116は、メモリインタフェース118を介してメモリ120に連結されている。グラフィックカード112は、アクセラレーテッドグラフィックポート(AGP)インターコネクト114経由でMCH116に連結されている。
システム100は、MCH116をI/Oコントローラハブ(ICH)130に連結するために、所有権をもつハブインタフェースバス122を利用する。ICH130は、ローカルI/Oバスを介して一部のI/Oデバイスに直接接続を提供する。ローカルI/Oバスは、周辺機器をメモリ120、チップセット、及びプロセッサ102に接続するための高速I/Oバスである。いくつかの例に、オーディオコントローラ、ファームウェアハブ(フラッシュBIOS)128、無線トランシーバ126、データストレージ124、ユーザ入力及びキーボードインタフェースを含むレガシーI/Oコントローラ、ユニバーサルシリアルバス(USB)等のシリアル拡張ポート、及びネットワークコントローラ134が含まれる。データ格納デバイス124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス、その他の大容量記憶デバイスを含んでよい。
システムの他の実施形態としては、一実施形態の命令をシステムオンチップ(a system on a chip)で利用することができる。システムオンチップの一実施形態は、プロセッサとメモリとを含む。あるシステムのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサ及びその他のシステムコンポーネントと同じダイに位置させることができる。加えて、メモリコントローラまたはグラフィックコントローラ等の他の論理ブロックもシステムオンチップに配置してよい。
図1Bは、本発明の一実施形態の原理を実装するデータ処理システム140を示す。当業者であれば、ここに記載される実施形態を、本発明の実施形態の範囲を逸脱せずに別の処理システムで利用することも可能であることを理解するだろう。
コンピュータシステム140は、一実施形態における少なくとも1つの命令を実行することのできる処理コア159を含む。一実施形態では、処理コア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は、適切なオペレーションを実行する。一実施形態では、デコーダは、命令のオペコードを解釈するために利用され、これは、どのオペレーションを、命令内に示されている対応するデータに行うべきかを示す。
処理コア159は、様々な他のシステムデバイスと通信するためにバス141に連結されており、様々な他のシステムデバイスには、これらに限定はされないが、シンクロノス・ダイナミックランダムアクセスメモリ(SDRAM)制御146、SRAM制御147、バーストフラッシュメモリインタフェース148、PCMCIA(personal computer memory card international association)/コンパクトフラッシュ(登録商標)(CF)カード制御149、液晶ディスプレイ(LCD)制御150、直接メモリアクセス(DMA)コントローラ151、及び、別のバスマスターインタフェース152が含まれてよい。一実施形態では、データ処理システム140は、さらに、様々なI/OデバイスとI/Oバス153経由で通信するためのI/Oブリッジ154を含んでよい。これらI/Oデバイスには、これらに限定はされないが、UART(汎用非同期送受信回路:universal asynchronous receiver/transmitter)155、USB156、Bluetooth(登録商標)無線UART157及びI/O拡張インタフェース158を含んでよい。
データ処理システム140の一実施形態は、モバイル、ネットワーク及び/または無線型の通信を提供し、プロセッサコア159は、テキストストリング比較演算を含むSIMD演算を実行することができる。処理コア159は、様々なオーディオ、ビデオ、撮像及び通信アルゴリズム(Walsh―Hadamard変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)を含む離散変換、及びこれらそれぞれの逆変換、色空間変換、ビデオエンコードにおける動き推定(video encode motion estimation)またはビデオデコードにおける動き補償(video decode motion compensation)等の圧縮/伸張技術、及びパルス符号変調(PCM)等の変調/復調(MODEM)機能を含む)でプログラミングされてよい。
図1Cは、条件付きループのためのSIMDベクトル化機能を提供する命令を実行することのできるデータ処理システムの別の一実施形態を示す。1つの別の実施形態では、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167、及び入出力システム168を含んでよい。入出力システム168は、無線インタフェース169に連結されていてもよい。SIMDコプロセッサ161は、一実施形態における命令を含むオペレーションを実行することができる。処理コア170は、1以上の処理技術での製造に適したものであってよく、十分な詳細を機械可読媒体に提示することで、プロセッサコア170を含むデータ処理システム160の全てまたは一部を製造するために適したものであってよい。
一実施形態では、SIMDコプロセッサ161は、実行ユニット162とレジスタファイルセット164とを含む。メインプロセッサ166の一実施形態は、実行ユニット162が実行する一実施形態における命令を含む命令セット163の命令を認識するデコーダ165を含む。別の実施形態では、SIMDコプロセッサ161は、さらに、命令セット163の命令をデコードするデコーダ165Bの少なくとも一部を含んでいる。処理コア170は、さらに、本発明の実施形態の理解には不要なさらなる回路(不図示)を含んでいる。
動作において、メインプロセッサ166は、キャッシュメモリ167及び入出力システム168との交信を含む一般的なタイプのデータ処理オペレーションを制御するデータ処理命令ストリームを実行する。データ処理命令ストリームには、SIMDコプロセッサ命令が埋め込まれている。メインプロセッサ166のデコーダ165は、これらSIMDコプロセッサ命令を、取り付けられているSIMDコプロセッサ161が実行すべきタイプであると認識する。したがい、メインプロセッサ166は、これらSIMDコプロセッサ命令(または、SIMDコプロセッサ命令を表す制御信号)をコプロセッサバス171に発行して、ここから、任意の取り付けられているSIMDコプロセッサによって受信される。このケースでは、SIMDコプロセッサ161は、自身を宛先として受信されたSIMDコプロセッサ命令を受け付けて実行する。
データは、SIMDコプロセッサ命令による処理を受けるために無線インタフェース169経由で受信される。一例では、音声通信が、デジタル信号の形態で受信されてよく、これは、SIMDコプロセッサ命令による処理を受けて、音声通信を表すデジタルオーディオサンプルを再生する(regenerate)。別の例としては、圧縮されたオーディオ及び/またはビデオがデジタルビットストリームの形態で受信されてよく、これは、SIMDコプロセッサ命令の処理を受けることで、デジタルオーディオサンプル及び/または動きビデオフレームを再生することができる。処理コア170の一実施形態では、メインプロセッサ166及びSIMDコプロセッサ161が、実行ユニット162、レジスタファイルセット164、及びデコーダ165を含む1つの処理コア170に統合されて、一実施形態における命令を含む命令セット163の命令を認識する。
図2は、本発明の一実施形態における命令を実行する論理回路を含むプロセッサ200のマイクロアーキテクチャのブロック図である。一部の実施形態では、一実施形態における命令が、バイト、ワード、ダブルワード、クワッドワード等のサイズを有するデータエレンメントで動作するよう実装可能である。一実施形態では、インオーダフロントエンド201が、実行される命令をフェッチして、これらが後で、プロセッサパイプラインで利用されるように準備するプロセッサ200の一部である。フロントエンド201は、いくつかのユニットを含んでよい。一実施形態では、命令プリフェッチャ226が、メモリから命令をフェッチして、命令デコーダ228に供給して、デコーダ228が、これらをデコードして解釈する。たとえば一実施形態では、デコーダは、受信した命令を、機械が実行可能な「マイクロ命令」または「マイクロオペレーション」と称される1以上のオペレーションにデコードする。他の実施形態では、デコーダは、命令を、マイクロアーキテクチャが利用するオペコード及び対応するデータ及び制御フィールドにパースして、一実施形態のオペレーションを実行する。一実施形態では、トレースキャッシュ230が、デコードされたμopをとり、μopキュー234に、プログラムが順序付けたシーケンスまたはトレースにアセンブルして、実行に備えさせる。トレースキャッシュ230が複合命令に遭遇すると、マイクロコードROM232は、オペレーションを完了させるために必要なμopを提供する。
一部の命令は1つのマイクロオペレーション(micro-op)に変換され、他の命令は、オペレーション全体を完了させるためにマイクロオペレーションをいくつか必要とする。一実施形態では、4を超える数のマイクロオペレーションが1つの命令を完了させるために必要な場合には、デコーダ228は、マイクロコードROM232にアクセスして、命令を行う。一実施形態では、命令は、命令デコーダ228で処理されるための少数のマイクロオペレーションにデコードすることができる。別の実施形態では、あるオペレーションを達成するために複数のマイクロオペレーションが必要となる場合には、マイクロコードROM232内に命令を格納する必要がある。トレースキャッシュ230は、マイクロコードROM232から、一実施形態における1以上の命令を完了させるためにマイクロコードシーケンスを読み出すための正確なマイクロ命令ポインタを決定するエントリポイントのプログラマブル論理アレイ(PLA)のことである。マイクロコードROM232が、1つの命令のマイクロオペレーションの順序づけ(sequencing)を完了すると、機械のフロントエンド201は、トレースキャッシュ230からマイクロオペレーションのフェッチを再開する。
アウトオブオーダ実行エンジン203は、命令が実行のために準備されるところである。アウトオブオーダ実行論理は、パイプラインを流れ、実行のためにスケジューリングされる間に、性能を最適化するために命令フローを平滑化してリオーダするための複数のバッファを有している。アロケータ論理は、各μopが実行するために必要とする機械バッファとリソースとを割り当てる。レジスタリネーム論理は、論理レジスタを、レジスタファイルのエントリにリネームする。アロケータはさらに、命令スケジューラ、メモリスケジューラ、高速スケジューラ202、遅い/一般的な浮動小数点スケジューラ204、及び単純な浮動小数点スケジューラ206の前にある、2つのμopキュー(1つがメモリオペレーション用、1つが非メモリオペレーション用)の1つに各μopのエントリを割り当てる。μopスケジューラ202、204、206は、μopが実行準備完了するときを、依存している入力レジスタオペランドソースの準備ができているか、及びμopが自身のオペレーションを完了させるために必要とする実行リソースが利用可能か、に基づいて判断する。一実施形態の高速スケジューラ202は、主要なクロックサイクルの各半分でスケジューリングすることができ、他のスケジューラは、主要なプロセッサクロックサイクル1つについて一度だけスケジューリングすることができる。スケジューラは、実行のためにμopをスケジュールするために、ディスパッチポートの問題を解決する。
実行ブロック211で、レジスタファイル208、210は、スケジューラ202、204、206、及び、実行ユニット212、214、216、218、220、222、224の間にある。整数演算及び浮動小数点演算それぞれについて別個のレジスタファイル208、210が存在している。一実施形態の各レジスタファイル208、210は、新たな依存μopへのレジスタファイルに書き込みがまだ行われていない、今完了したばかりの結果をバイパスしたり、転送したりするバイパスネットワークも含む。整数レジスタファイル208及び浮動小数点レジスタファイル210はさらに、互いにデータを通信することができる。一実施形態では、整数レジスタファイル208は、2つのレジスタファイルに分割され、1つのレジスタファイルがデータの下位32ビット用であり、第2のレジスタファイルが、データの上位32ビット用である。一実施形態の浮動小数点レジスタファイル210は、浮動小数点命令が通常64から128ビット幅であるために、128ビット幅のエントリを有している。
実行ブロック211は、命令が実際に実行される実行ユニット212、214、216、218、220、222、224を含む。このセクションは、マイクロ命令が実行する必要のある整数及び浮動小数点データオペランド値を格納するレジスタファイル208、210を含む。一実施形態のプロセッサ200は、複数の実行ユニットを含む(つまり、アドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点移動ユニット224)。一実施形態では、浮動小数点実行ブロック222、224が、浮動小数点MMX、SIMD、及びSSE、またはその他のオペレーションを実行する。一実施形態の浮動小数点ALU222は、除算、平方根、及び剰余のマイクロオペレーション(remainder micro-ops)を実行するための64ビット×64ビットの浮動小数点の除算器(divider)を含む。本発明の実施形態では、浮動小数点の値に関する命令は、浮動小数点ハードウェアで処理されてよい。一実施形態では、ALU演算は、高速ALU実行ユニット216、218に進む。一実施形態の高速ALU216、218は、1クロックサイクルの半分の有効レイテンシーで高速演算を実施することができる。一実施形態では、最も複雑な整数演算は低速ALU220で処理されるが、これは低速ALU220が、乗算器、シフト、フラグ論理、及び分岐処理といったレイテンシーの長いタイプの演算のための整数実行ハードウェアを含んでいるからである。メモリロード/ストア演算は、AGU212、214が実行する。一実施形態では、整数ALU216、218、220は、64ビットのデータオペランドに整数演算を実行するコンテキストで説明される。別の実施形態では、ALU216、218、220は、16、32、128、256等を含む様々なデータビットをサポートするように実装されてよい。同様に、浮動小数点ユニット222、224は、様々な幅のビットを有するオペランドの範囲をサポートするよう実装されてよい。一実施形態では、浮動小数点ユニット222、224は、SIMD及びマルチメディア命令との関連で、128ビット幅のパッキングされたデータオペランドに作用してよい。
一実施形態では、μopスケジューラ202、204、206は、親のロードが実行完了する前に、依存する演算をディスパッチする。μopはプロセッサ200で投機的にスケジューリングされ実行されるので、プロセッサ200は、メモリミスを処理する論理を含む。データロードがデータキャッシュでミスすると、一時的に不正確なデータでスケジューラを出た、依存しているオペレーションがパイプライン内にあることになる。リプレイメカニズムは、不正確なデータを利用する命令を追跡して実行する。依存しているオペレーションのみがリプレイされ、独立しているオペレーションは完了させられる。プロセッサの一実施形態のスケジューラ及びリプレイメカニズムは、さらに、条件付きループのためのSIMDベクトル化機能を提供する命令をキャッチするように設計されている。
「レジスタ」という用語は、オペランドを指定する命令の一部として利用されるオンボードのプロセッサ格納位置のことを指してよい。言い換えると、レジスタは、プロセッサの外部から(プログラマの観点から)利用可能なもののことであってよい。しかし一実施形態のレジスタの意味は、特定のタイプの回路に限定されるべきではない。一実施形態のレジスタは、データを格納、提供して、ここに記載する機能を実行することができる。ここに記載するレジスタは、任意の数の異なる技術(たとえば、専用物理レジスタ、レジスタリネームを利用して動的に割り当てられた物理レジスタ、専用及び動的に割り当てられた物理レジスタの組み合わせ)を利用してプロセッサ内の回路によって実装することができる。一実施形態では、整数レジスタは、32ビットの整数データを格納する。一実施形態のレジスタファイルは、8つのマルチメディアSIMDレジスタをパッキングされたデータ用に含んでいる。後述する説明においては、レジスタは、カリフォルニア州サンタクララのIntel Corporation社製の、MMX技術でイネーブルされたマイクロプロセッサの64ビット幅のMMX(登録商標)レジスタ(一部の例では「mm」レジスタと称されることもある)等のパッキングされたデータを保持するよう設計されているデータレジスタとして理解される。これらMMXレジスタは、整数及び浮動小数点形態両方で利用可能であり、SIMD及びSSE命令を伴うパッキングされたデータエレメントを利用して動作することができる。同様に、SSE2、SSE3、SSE4、またはこれを超える(一般的に「SSEx」と称される)技術に関する128ビット幅のXMMレジスタも、これらパッキングされたデータオペランドを保持するために利用することができる。一実施形態では、パッキングされたデータ及び整数データを格納するときに、レジスタは、2つのデータのタイプを区別する必要がない。一実施形態では、整数及び浮動小数点が、同じレジスタファイルまたは別のレジスタファイルに含まれる。さらに一実施形態では、浮動小数点及び整数データが、異なるレジスタに格納されても同じレジスタに格納されてもよい。
以下の図面の例では、複数のデータオペランドを説明する。図3Aは、本発明の一実施形態におけるマルチメディアレジスタの様々なパッキングされているデータタイプの表現を示す。図3Aは、128ビット幅のオペランドについて、パッキングされたバイト310、パッキングされたワード320、及びパッキングされたダブルワード(dword)330のデータタイプを示す。この例のパッキングされたバイトフォーマット310は、128ビット長であり、16個のパッキングされたバイトデータエレメントを含む。1バイトは、ここでは8ビットのデータと定義される。各バイトデータエレメントの情報を、バイト0についてビット7からビット0に格納して、バイト1についてビット15からビット8に格納して、バイト2についてビット23からビット16に格納して、終に、バイト15についてビット120からビット127に格納する。したがい、全ての利用可能なビットがレジスタで利用される。この格納配置は、プロセッサの格納効率を向上させる。また、16個のデータエレメントにアクセスする場合、1つのオペレーションを16個のデータエレメントに並列実行することができる。
一般的には、データエレメントは、同じ長さの他のデータエレメントとともに、1つのレジスタまたはメモリ位置に格納された個々のデータである。SSEx技術に関するパッキングされたデータシーケンスでは、XMMレジスタに格納されているデータエレメント数は、128ビットを、個々のデータエレメントのビット長で除算して得られる。同様に、MMX及びSSE技術に関するパッキングされたデータシーケンスでは、MMXレジスタに格納されているデータエレメント数は、64ビットを、個々のデータエレメントのビット長で除算して得られる。図3Aに示すデータタイプは128ビット長であるが、本発明の実施形態は、64ビット幅でも、128ビット幅でも、512ビット幅でも、その他のサイズのオペランドであっても動作可能である。この例のパッキングされたワードフォーマット320は、128ビット長であり、8つのパッキングされたワードデータエレメントを含んでいる。各パッキングされたワードは、16ビットの情報を含んでいる。図3Aのパッキングされたダブルワードフォーマット330は、128ビット長であり、4つのパッキングされたダブルワードのデータエレメントを含んでいる。各パッキングされたダブルワードは、32ビットの情報を含んでいる。パッキングされたクワッドワードは128ビット長であり、2つのパッキングされたクワッドワードデータエレメントを含んでいる。
図3Bは、別のレジスタ内の(in-register)データ格納フォーマットを示している。各パッキングされたデータは、1を超える数の独立したデータエレメントを含むことができる。3つのパッキングされたデータフォーマットが図示されている(つまりパッキングされたハーフ341、パッキングされたシングル342、及びパッキングされたダブル343)。パッキングされたハーフ341、パッキングされたシングル342、及びパッキングされたダブル343の一実施形態は、固定小数点(fixed-point)のデータエレメントを含んでいる。別の実施形態では、パッキングされたハーフ341、パッキングされたシングル342、及びパッキングされたダブル343の1以上が、浮動小数点のデータエレメントを含んでいてよい。パッキングされたハーフ341の別の実施形態は、128ビット長であり、8つの16ビットのデータエレメントを含む。パッキングされたシングル342の一実施形態は、128ビット長であり、4つの32ビットのデータエレメントを含む。パッキングされたダブル343の一実施形態は、128ビット長であり、2つの64ビットのデータエレメントを含む。パッキングされたデータフォーマットは、さらに、他のレジスタ長に拡張することもできる点を理解されたい(たとえば、96ビット、160ビット、192ビット、224ビット、256ビット、512ビットまたはそれ以上)。
図3Cは、本発明の一実施形態のマルチメディアレジスタの様々な符号付き及び符号なしのパッキングされたデータタイプの表現を示す。符号なしのパッキングされたバイト表現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以上のフィールド361及び362でエンコードされてよい。1つの命令について2までのオペランド位置を指定することができる(最大で2つのソースオペランド識別子364及び365を含む)。一実施形態では、デスティネーションオペランド識別子366が、ソースオペランド識別子364と等しく、他の実施形態ではこれらが異なっている。別の実施形態では、デスティネーションオペランド識別子366が、ソースオペランド識別子365と等しく、他の実施形態ではこれらが異なっている。一実施形態では、ソースオペランド識別子364及び365が指定するソースオペランドの1つが、命令の結果、上書きされ、他の実施形態では、識別子364が、ソースレジスタエレメントに対応しており、識別子365が、デスティネーションレジスタエレメントに対応している。一実施形態では、オペランド識別子364及び365が、32ビットまたは64ビットのソース及びデスティネーションオペランドを特定するために利用されてよい。
図3Eは、40以上のビットを有する別のオペレーションエンコード(オペコード)フォーマットを示す。オペコードフォーマット370は、オペコードフォーマット360に対応しており、随意でプレフィックスバイト378を含んでいる。一実施形態の命令は、フィールド378、371、及び372の1以上によってエンコードされてよい。一実施形態では、ソースオペランド識別子374、375、及び、プレフィックスバイト378により、1つの命令につき最大2つまでのオペランド位置が特定されてよい。一実施形態では、プレフィックスバイト378が、32ビットまたは64ビットのソース及びデスティネーションオペランドを特定するために利用されてよい。一実施形態では、デスティネーションオペランド識別子376が、ソースオペランド識別子374と同じであり、他の実施形態では、これらが異なっている。別の実施形態では、デスティネーションオペランド識別子376が、ソースオペランド識別子375と同じであり、他の実施形態では、これらが異なっている。一実施形態では、命令は、オペランド識別子374及び375が特定するオペランドの1以上に作用して、オペランド識別子374及び375が特定する1以上のオペランドが、命令の結果、上書きされて、他の実施形態では、識別子374及び375が特定するオペランドが、別のレジスタの別のデータエレメントに書きこまれる。オペコードフォーマット360及び370は、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定を、一部にMODフィールド363及び373によって指定して、随意でスケール−インデックス−ベース及び変位バイト(scale-index-base and displacement bytes)で指定する。
図3Fを見ると、一部の他の実施形態では、64ビット(または128ビット、または256ビット、または、512ビット以上)のSIMD算術演算をコプロセッサデータ処理(CDP)命令により実行されてよい。オペレーションエンコード(オペコード)フォーマット380は、CDPオペコードフィールド382及び389を有する1つのCDP命令を示している。別の実施形態において、このタイプのCDP命令では、オペレーションが1以上のフィールド383、384、387、及び388でエンコードされてよい。1つの命令について3つまでのオペランド位置を特定することができる(2つまでのソースオペランド識別子385及び390及び1つのデスティネーションオペランド識別子386を含む)。コプロセッサの一実施形態は、8、16、32、及び64ビットの値に動作することができる。一実施形態では、命令を整数データエレメントに実行する。一部の実施形態では、命令が、条件フィールド381を利用して、条件付きで実行されてよい。一部の実施形態では、ソースデータサイズを、フィールド383によってエンコードしてよい。一部の実施形態では、SIMDフィールドに、ゼロ(Z)、負(N)、繰り上げ(C)、及び、オーバフロー(V)の検出を行ってよい。一部の命令について、この種類の飽和をフィールド384によってエンコードしてよい。
次に図3Gを参照すると、図3Gは、ワールドワイドウェブwwwのintel.com/products/processor/manuals/から入手可能な、カリフォルニア州サンタクララのIntel Corporation社から利用可能な、"Intel(R) Advanced Vector Extensions Programming Reference"に記載されているタイプのオペコードフォーマットに対応する、別の実施形態の条件付きループのためのSIMDベクトル化機能を提供する別のオペレーションエンコード(オペコード)フォーマット397を示している。
元のx86命令セットは、存在が第1の「オペコード」バイトから分かっている、さらなるバイトに含まれているアドレスシラブル及び即値オペランドの様々なフォーマットをもつ1バイトのオペコードのために提供されたものである。加えて、オペコードに対する修飾子としてリザーブされていた一定のバイト値が存在している(命令の前に配置される必要があったことから、プレフィックスと称される)。256オペコードバイトの元のパレット(これら特別なプレフィックス値を含む)が枯渇すると、1バイトが新たなセットの256オペコードへのエスケープ(escape)として専用となった。ベクトル命令(たとえばSIMD)が追加されると、より多くのオペコードに対する要求ができて、プレフィックスを利用して拡張しても、「2つのバイト」のオペコードマップも不十分となった。この目的のために、2バイトに、随意でプレフィックスを識別子として追加した追加マップに、新たな命令を追加した。
加えて、64ビットモードのさらなるレジスタを促進するために、プレフィックスとオペコードとの間に(及び、オペコードを決定するために必要な任意のエスケープバイトとの間に)さらなるプレフィックスを利用することができる(「REX」と称する)。一実施形態では、REXは4つの「ペイロード」ビットを有し、64ビットモードのさらなるレジスタの利用を示す。他の実施形態では、4ビットより少ないまたは多い数であってよい。少なくとも1つの命令セットの一般的なフォーマット(これはフォーマット360及び/またはフォーマット370に概して対応している)が、以下のように大まかに示されている。 [prefixes] [rex] escape [escape2] opcode modrm (etc.)
オペコードフォーマット397は、オペコードフォーマット370に対応しており、随意でVEXプレフィックスバイト391を含み(これは一実施形態ではC4hexから始まる)、他の殆どの共通利用されているレガシー命令プレフィックスバイト及びエスケープコードを置き換える。たとえば以下の例では、1つの命令をエンコードするために2つのフィールドを利用する一実施形態が示されており、第2のエスケープコードが元の命令に存在している場合、または、REXフィールドの剰余ビット(たとえばXB及びWフィールド)を利用する必要がある場合に利用可能である。後述する実施形態では、レガシーエスケープは、新たなエスケープ値で表され、レガシープレフィックスは、「ペイロード」バイトの一部として完全に圧縮され、レガシープレフィックスは、将来拡張する必要が出たときには取戻し(reclaimed)、利用することができ、第2のエスケープコードは「マップ」フィールドで圧縮され、将来のマッピングまたはフィーチャのスペースが利用可能となった場合、新たなフィーチャを追加する(たとえば、ベクトル長を増加して、さらなるソースレジスタ指定子を利用する)。
Figure 0005795787
一実施形態の一命令は、1以上のフィールド391及び392でエンコードされてよい。1つの命令について4つまでのオペランド位置を、ソースオペランド識別子374及び375の組み合わせ、及び、随意でスケール−インデックス−ベース(SIB:scale-index-base)識別子393、随意の変位識別子394、及び随意の即値バイト395の組み合わせで、フィールド391によって特定してよい。一実施形態では、VEXプレフィックスバイト391を利用して、32ビットまたは64ビットのソース及びデスティネーションオペランド及び/または128ビットまたは256ビットのSIMDレジスタまたはメモリオペランドを特定することができる。一実施形態では、オペコードフォーマット397が提供する機能が、オペコードフォーマット370と重複しており、他の実施形態では、これらが異なっている。オペコードフォーマット370及び397は、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定が、一部にMODフィールド373及び随意で(SIB)識別子393、随意で変位識別子394、及び随意で即値バイト395により指定される。
次に、図3Hを参照すると、別の実施形態の条件付きループのためのSIMDベクトル化機能を提供するための、別のオペレーションエンコード(オペコード)フォーマット398を示す。オペコードフォーマット398は、オペコードフォーマット370及び397に対応し、随意でEVEXプリフィックスバイト396を含み(一実施形態では62hexから始まる)、殆どの他の共通に利用されているレガシー命令プレフィックスバイト及びエスケープコードを置き換え、さらなる機能を提供する。一実施形態の命令は、1以上のフィールド396及び392によりエンコードされてよい。命令1つについて4までのオペランド位置とマスクとを、フィールド396で、ソースオペランド識別子374及び375の組み合わせ並びに随意でスケール−インデックス−ベース(SIB:scale-index-base)識別子393の組み合わせ、随意の変位識別子394及び随意の即値バイト395で、特定してよい。一実施形態では、EVEXプリフィックスバイト396を利用して、32ビットまたは64ビットのソース及びデスティネーションオペランド、及び/または、128ビット、256ビット、または512ビットのSIMDレジスタまたはメモリオペランドを特定してよい。一実施形態では、オペコードフォーマット398が提供する機能は、オペコードフォーマット370または397と重複しており、他の実施形態ではこれらが異なっている。オペコードフォーマット398は、マスクで、レジスタからレジスタへ、メモリからレジスタへ、メモリによってレジスタへ、レジスタによってレジスタへ、即値によってレジスタへ、レジスタからメモリへのアドレス指定が、一部にMODフィールド373及び随意で(SIB)識別子393、随意で変位識別子394、及び随意で即値バイト395により指定される。少なくとも1つの命令セット(一般的にはフォーマット360及び/または370に対応している)の汎用フォーマットは、以下で概略する。
<evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]>
一実施形態では、EVEXフォーマット398によりエンコードされた命令は、追加の「ペイロード」ビットを有してよいが、この追加の「ペイロード」は、条件付きループのためのSIMDベクトル化機能に、たとえばユーザ設定可能なマスクレジスタ、追加のオペランド、または、128ビット、256ビット、または512ビットのベクトルレジスタまたはこれ以上のレジスタを選択肢、などの追加の新たな特徴を提供するために利用することができる。
たとえば、VEXフォーマット397が、条件付きループのためのSIMDベクトル化機能に黙示的なマスクを提供するために利用されてよい場合、EVEXフォーマット398は、条件付きループのためのSIMDベクトル化機能に、明示的なユーザ設定可能マスクを与えるために利用されてよい。加えて、VEXフォーマット397が、ベクトル圧縮およびローテート機能を128ビットまたは256ビットのベクトルレジスタに提供するために利用されてよい場合、EVEXフォーマット398は、条件付きループのためのSIMDベクトル化機能を128ビット、256ビット、512ビットまたはこれより大きな(または小さな)ベクトルレジスタに提供するために利用されてよい。
条件付きループのためのSIMDベクトル機能を提供するための命令の例を、以下に例示する。
Figure 0005795787
条件付きループのベクトル化は、上述した命令に示したように、SIMDベクトル拡張命令を利用することで達成することができ、これにより、パフォーマンスおよび命令のスループットを向上させることができ、電力使用量およびエネルギー消費量を低減させることができる。これら技術は、大量の連続生成されるデータをリアルタイムに組織化する必要があるオンラインクラスタリング等のアプリケーションで利用することができる。他の例としては、ネットワーク侵入検知、パターン認識、およびデータマイニング等の、一部をさもなくば簡単にはベクトル化できないものが含まれる。
図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を含み、これは命令変換ルックアサイドバッファ(TLB)436に連結されており、これがまた命令フェッチユニット438に連結されており、これがまたデコードユニット440に連結されている。デコードユニットまたはデコーダは、命令をデコードして、1以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、またはその他の制御信号を生成してよい(これらは、元の命令からデコードされたり、元の命令を反映していたり、元の命令から導出されていたりする)。デコーダは、様々な異なるメカニズムを利用して実装されてよい。適切なメカニズムの例には、これらに限定はされないが、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)等が含まれる。命令キャッシュユニット434は、さらに、メモリユニット470のレベル2(L2)キャッシュユニット476に連結されている。デコードユニット440は、実行エンジンユニット450のリネーム/アロケータユニット452に連結されている。
実行エンジンユニット450は、1以上のスケジューラユニット456及び退避ユニット454に連結されているリネーム/アロケータユニット452を含む。スケジューラユニット456は、任意の数の異なるスケジューラを表しており、これには、予約ステーション、中央命令ウィンドウ等が含まれる。スケジューラユニット456は、物理レジスタファイルユニット458に連結されている。物理レジスタファイルユニット458はそれぞれ、1以上の物理レジスタファイルを表しており、これらはそれぞれが、1以上の異なるデータタイプ(たとえばスカラー整数、スカラー浮動小数点、パッキングされた整数、パッキングされた浮動小数点、ベクトル整数、ベクトル浮動小数点等)、ステータス(たとえば、次に実行する命令のアドレスである命令ポインタ)などを格納する。退避ユニット454が物理レジスタファイルユニット458に重複しており、レジスタリネーム及びアウトオブオーダ実行を実装することができる様々な方法(たとえば、リオーダバッファ及び退避レジスタファイルを利用して、将来のファイル、履歴バッファ、及び退避レジスタファイルを利用して、レジスタマップ及びレジスタのプールを利用して、など)を示している。概して、アーキテクチャレジスタは、プロセッサの外から、またはプログラマから見ることができる。レジスタは、具体的な回路のタイプに限定されない。ここで記載するデータを格納及び提供可能であれば、様々な異なるタイプのレジスタが利用可能である。適切なレジスタの例には、これらに限定はされないが、専用物理レジスタ、レジスタリネームを利用する、動的に割り当てられた物理レジスタ、専用物理レジスタと動的に割り当てられた物理レジスタとの組み合わせなどが含まれる。退避ユニット454及び物理レジスタファイルユニット458は、実行クラスタ460に連結されている。実行クラスタ460は、1以上の実行ユニット462及び1以上のメモリアクセスユニット464を含む。実行ユニット462は、様々な演算(たとえばシフト、追加、減算、乗算等)を、様々なタイプのデータ(たとえばスカラー浮動小数点、パッキングされた整数、パッキングされた浮動小数点、ベクトル整数、ベクトル浮動小数点等)に行うことができる。一部の実施形態は、具体的な関数または関数群に専用の複数の実行ユニットを含んでいるが、他の実施形態は、1つの実行ユニットだけを含んだり、全てが全ての関数を実行するまたは複数の実行ユニットを含んだりしてもよい。スケジューラ456、物理レジスタファイルユニット458、及び実行クラスタ460は、一定の実施形態では一定のタイプのデータ/オペレーションについて別々のパイプラインを生成するために(たとえばスカラー整数パイプライン、スカラー浮動小数点/パッキングされた整数/パッキングされた浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/または、それぞれが銘々のスケジューラユニット、物理レジスタファイルユニット、及び/実行クラスタを有するメモリアクセスパイプライン、並びに、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット464を有する一定の実施形態を実装する)、複数形で示されている。別個のパイプラインを利用する場合には、これらのパイプラインの1以上がアウトオブオーダ発行/実行であり、残りがインオーダであってよい。
メモリアクセスユニット464群は、メモリユニット470に連結されており、これが、レベル2(L2)キャッシュユニット476に連結されているデータキャッシュユニット474に連結されているデータTLBユニット472を含む。一実施形態では、メモリアクセスユニット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が、書き戻し/メモリ書き込みステージ418を実行し、7)様々なユニットが例外処理ステージ422に関与し、8)退避ユニット454及び物理レジスタファイルユニット458が、コミットステージ424を実行する。
コア490は、1以上の命令セット(たとえばx86命令セット(新たなバージョンを追加された一部の拡張部を含む))、カリフォルニア州SynnyvaleのMIPS Technologies社のMIPS命令セット、カリフォルニア州SynnyvaleのARM Holdings社のARM命令セット(随意でNEON等の追加の拡張部を含む)をサポートしていてよい。
コアはマルチスレッド(2以上の並列のオペレーションまたはスレッドのセット)をサポートしていてよく、タイムスライスマルチスレッド、同時マルチスレッド(1つの物理コアが、物理コアが同時にマルチスレッド処理している各スレッドに論理コアを提供する)、またはこれらの組み合わせを含んでよい(たとえば、Intel(登録商標)Hyperthreading技術のような、タイムスライスフェッチ及びデコード、並びにこの後に同時マルチスレッド)様々な方法で行われてよい。
レジスタリネームは、アウトオブオーダ実行のコンテキストで説明されるが、レジスタリネームは、インオーダアーキテクチャで利用することもできる点を理解されたい。図示したプロセッサの実施形態はさらに、別の命令及びデータキャッシュユニット434/474及び共有L2キャッシュユニット476を含むが、別の実施形態では、命令及びデータ両方について1つの内部キャッシュが含まれてよい(たとえばレベル1(L1)内部キャッシュまたはマルチレベルの内部キャッシュ)。一部の実施形態では、システムは、内部キャッシュと、コア及び/またはプロセッサの外部の外部キャッシュとの組み合わせを含んでよい。または、キャッシュ全てがコア及び/またはプロセッサの外部にあってもよい。
図5は、本発明の実施形態の、統合されたメモリコントローラ及びグラフィックスをもつシングルコアプロセッサ及びマルチコアプロセッサ500を示す。図5の実線のボックスは、シングルコア502A、システムエージェント510、1以上のバスコントローラユニット516を持つプロセッサ500を示しており、随意に追加されている破線のボックスは、複数のコア502A−N、システムエージェントユニット510に統合された1以上のメモリコントローラユニット514、及び統合されたグラフィックス論理508を持つ別のプロセッサ500を示す。
メモリ階層は、コア内の1以上のレベルのキャッシュ、1以上の共有キャッシュユニット506、統合されたメモリコントローラユニット514に連結されている外部メモリ(不図示)を含む。共有キャッシュユニット群506は、1以上の中間レベルキャッシュ(たとえばレベル2(L2)、レベル3(L3)、レベル4(L4))、またはその他のレベルのキャッシュ、最終レベルのキャッシュ(LLC)、及び/またはこれらの組み合わせを含んでよい。一実施形態では、リングベースのインターコネクトユニット512が、統合されたグラフィックス論理508、共有キャッシュユニット群506、及びシステムエージェントユニット510を相互接続するが、別の実施形態では、これらユニットを相互接続するために任意の数の公知の技術を利用してもよい。
一部の実施形態では、コア502A−Nの1以上はマルチスレッド処理を行うことができる。システムエージェント510は、コア502A−Nを調整して動作させるコンポーネントを含む。システムエージェントユニット510は、たとえば電力制御ユニット(PCU)及び表示ユニットを含んでよい。PCUは、コア502A−N及び統合されたグラフィック論理508の電力状態を調整するために必要な論理及びコンポーネントであってよい、またはこれらを含んでよい。表示ユニットは、1以上の外部接続されたディスプレイを駆動するためのものである。
コア502A−Nは、アーキテクチャ及び/または命令セットの観点から同質または異質であってよい。たとえばコア502A−Nの一部が、インオーダであり、他がアウトオブオーダであってよい。別の例として、コア502A−Nの2以上が、同じ命令セットを実行可能であってよく、他が、その命令セットのサブセットまたは異なる命令セットを実行可能であってよい。
プロセッサは、汎用プロセッサ(たとえばコア(登録商標)i3、i5、i7、2Duo、Quad、Xeon(登録商標)、Itanium(登録商標)、XScale(登録商標)、またはStrongARM(登録商標)プロセッサ等)であってよく、これらはカリフォルニア州のサンタクララのIntel Corporation社から利用可能であってよい。またはプロセッサは、ARM Holdings,Ltd、MIPS社等の別の会社から入手可能であってもよい。プロセッサは、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ等の専用プロセッサであってよい。プロセッサは、1以上のチップ上に実装されてよい。プロセッサ500は、複数の処理技術(たとえばBiCMOS、CMOS,またはNMOS)のいずれかを利用する、1以上の基板上の一部であっても、及び/または、1以上の基板上に実装されていてもよい。
図6から図8は、プロセッサ500を含むのに適したシステム例であり、図9は、コア502の1以上を含んでよいチップ(SoC)の上のシステムの例である。当技術分野で知られている、ラップトップ、デスクトップ、ハンドヘルドPC、情報携帯端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、可搬型メディアプレーヤ、ハンドヘルドデバイス、及びその他の様々な電子デバイスで知られている他のシステム設計及び構成もまた適している。一般的には、ここで開示したプロセッサ及び/または他の実行論理を含むことのできる莫大な数の様々なシステム及び電子デバイスが適している。
図6を参照すると、本発明の一実施形態におけるシステム600のブロック図が示されている。システム600は、1以上のプロセッサ610、615を含み、これらが、グラフィックスメモリコントローラハブ(GMCH)620に連結されている。さらなるプロセッサ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は、さらに、入出力(I/O)コントローラハブ(ICH)650に連結されており、これは、システム600に様々な周辺デバイスを連結するために利用されてよい。図6の実施形態には、外部グラフィックスデバイス660が例示されており、これは、ICH650に、別の周辺デバイス670とともに連結されている別個のグラフィックスデバイスであってよい。
または、追加のまたは別のプロセッサが、システム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以上のさらなるプロセッサが1つのプロセッサ内に存在していてもよい。
プロセッサ770、780は、それぞれ統合されたメモリコントローラユニット772、782をそれぞれ含むものとして示されている。プロセッサ770は、さらに、バスコントローラユニットのポイントツーポイント(P−P)インタフェース776、778を含み、同様に、第2のプロセッサ780も、P−Pインタフェース786、788を含む。プロセッサ770、780は、ポイントツーポイント(P−P)インタフェース750を介してP−Pインタフェース回路778、788を利用して情報を交換する。図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のバス716が、周辺コンポーネントインターコネクト(PCI)バス、または、PCI Expressバスまたは別の第三世代I/Oインターコネクトバス等のバスであってよいが、本発明の範囲はこれに限定はされない。
図7に示すように、様々なI/Oデバイス714が、第1のバス716を第2のバス720に連結するバスブリッジ718とともに、第1のバス716に連結されていてよい。一実施形態では、第2のバス720が、低ピンカウント(LPC)バスであってよい。一実施形態では、様々なデバイス(たとえば、キーボード及び/またはマウス722、通信デバイス727及び格納ユニット728(たとえば命令/コード及びデータ730を含みうるディスクドライブまたは他の大容量記憶デバイス))が第2のバス720に連結されていてよい。さらに、オーディオI/O724が第2のバス720に連結されていてよい。他のアーキテクチャも可能である。たとえば、図7のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他の同様のアーキテクチャを実装してよい。
図8を参照すると、本発明の一実施形態の第3のシステム800のブロック図が示されている。図7及び図8のエレメントと同様のエレメントには、同様の参照番号が付されており、図8の他の側面を曖昧にしないために、図7の一定の側面を図8からは省いている。
図8は、プロセッサ870、880が、それぞれ統合されたメモリ及びI/O制御論理(「CL」)872、882を含んでよいことを示している。少なくとも1つの実施形態では、CL872、882は、図5及び図7を参照して上述したような統合されたメモリコントローラユニットを含んでよい。加えて、CL872、882は、さらにI/O制御論理を含んでよい。図8は、メモリ832、834がCL872、882に連結されていることを示しているばかりでなく、I/Oデバイス814も制御論理872、882に連結されていることも示している。レガシーI/Oデバイス815がチップセット890に連結されている。
図9を参照すると、本発明の一実施形態のSoC900のブロック図が示されている。図5と同様のエレメントは、同様の参照番号を付されている。さらに、破線のボックスはより高度なSoCの随意の特徴を示す。図9では、インターコネクトユニット902が、1以上のコア502A−N及び共有キャッシュユニット506を含むアプリケーションプロセッサ910、システムエージェントユニット510、バスコントローラユニット516、統合されたメモリコントローラユニット514、統合されたグラフィックス論理508を含んでよい1以上のメディアプロセッサ920、静止画及び/または動画カメラ機能を提供する画像プロセッサ924、ハードウェアオーディオアクセラレーションを提供するオーディオプロセッサ926、ビデオエンコード/デコードアクセラレーションを提供するビデオプロセッサ928、SRAMユニット930、DMA(直接メモリアクセス)ユニット932、及び、1以上の外部ディスプレイを連結させる表示ユニット940に連結されている。
図10は、中央処理装置(CPU)及びグラフィックス処理ユニット(GPU)を含むプロセッサを示しており、このプロセッサは、一実施形態による少なくとも1つの命令を実行してよい。一実施形態では、少なくとも1つの実施形態による演算を実行する命令がCPUにより実行されてよい。別の実施形態では、命令はGPUにより実行されてよい。また別の実施形態では、命令は、GPUとCPUとによる演算の組み合わせによって実行されてもよい。一実施形態では、一実施形態の命令がGPUで受信され、実行のためにデコードされてよい。しかし、デコードされた命令内の1以上の演算がCPUにより実行されて、結果がGPUに戻されて、命令の最終的な退避が行われてもよい。逆に一部の実施形態では、CPUが一次プロセッサとして機能して、GPUがコプロセッサとして機能してもよい。
一部の実施形態では、高度な並列性及びスループットをもつプロセッサで実行されるほうが利点がある命令がGPUにより実行され、深いパイプラインのアーキテクチャとすることで利点があるプロセッサの性能から利点が得られる命令が、CPUにより実行される。たとえばグラフィックス、科学的な用途、金融の用途、その他の並列ワークロードは、GPUの性能からの利点のほうが大きいので、GPUで実行されてよく、オペレーティングシステムのカーネルまたはアプリケーションコード等のより連続したアプリケーションは、CPUでの実行に適している。
図10では、プロセッサ1000は、CPU1005、GPU1010、画像プロセッサ1015、ビデオプロセッサ1020、USBコントローラ1025、UARTコントローラ1030、SPI/SDIOコントローラ1035、表示デバイス1040、高精細マルチメディアインタフェース(HDMI(登録商標))コントローラ1045、MIPIコントローラ1050、フラッシュメモリコントローラ1055、DDR(dual data rate)コントローラ1060、セキュリティエンジン1065、IS/IC(Integrated Interchip Sound/Inter-Integrated Circuit)インタフェース1070を含む。他の論理及び回路(より多くのCPUまたはGPU及び他の周辺インタフェースコントローラ)が図10のプロセッサに含まれてもよい。
少なくとも1つの実施形態の1以上の側面が、プロセッサ内の様々な論理を表す機械可読媒体に格納されている代表データにより実装されてもよく、これは機械により読み出されると、機械に、ここで記載する技術を実行する論理を製造させることができる。これらの表現は、「IPコア」として知られており、有形の機械可読媒体(「テープ」)に格納され、様々な顧客または製造施設に送られ、実際に論理またはプロセッサを作成する製造機械に搭載されてよい。たとえばIPコア(一例は、ARM Holdings,Ltdが開発したCortex(登録商標)ファミリーのプロセッサ、及び、中国科学アカデミーのICT(Institute of Computing Technology)が開発したLoongson IPコア)が、Texas Instruments, Qualcomm,Apple、またはSamsung等の様々な顧客またはライセンシーにライセンス供与または販売され、これら顧客またはライセンシーにより製造されるプロセッサに実装されてよい。
図11は、一実施形態のIPコアの開発を示すブロック図である。格納媒体1130は、シミュレーションソフトウェア1120及び/またはハードウェアまたはソフトウェアモデル1110を含む。一実施形態では、IPコア設計を表すデータは、メモリ1140(たとえばハードディスク)、有線接続(たとえばインターネット)1150、または無線接続1160を介して、格納媒体1130に提供されてよい。シミュレーションツール及びモデルが生成するIPコア情報は、製造施設に送られてよく、そこで、第三者が少なくとも1つの実施形態の少なくとも1つの命令を実行するように製造されてよい。
一部の実施形態では、1以上の命令が、第1のタイプまたはアーキテクチャ(たとえばx86)に対応していてよく、異なるタイプまたはアーキテクチャ(たとえばARM)のプロセッサで変換、エミュレーションされてよい。したがって、一実施形態の命令は、ARM、x86、MIPS、GPU、その他のプロセッサのタイプまたはアーキテクチャを含む任意のプロセッサまたはプロセッサのタイプで実行することができる。
図12は、第1のタイプの命令が、一実施形態の異なるタイプのプロセッサによりエミュレーションされる様子を示す。図12では、プログラム1205が、一実施形態の命令と同じまたは実質的に同じ機能を実行することができるいくつかの命令を含んでいる。しかしプログラム1205の命令は、プロセッサ1215と異なる、またはプロセッサ1215に互換性を有さないタイプ及び/またはフォーマットであってよく、これは、プログラム1205の命令のタイプが、プロセッサ1215によりネーティブに実行できない可能性があることを示している。しかしエミュレーション論理1210の助けを受けて、プログラム1205の命令を、プロセッサ1215がネーティブに実行可能な命令に変換することができる。一実施形態では、エミュレーション論理は、ハードウェアに実装されていてよい。別の実施形態では、エミュレーション論理は、プログラム1205の命令のタイプを、プロセッサ1215がネーティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体に実装されてよい。他の実施形態では、エミュレーション論理は、有形の機械可読媒体に格納されている固定関数(fixed function)またはプログラム可能ハードウェアの組み合わせである。一実施形態では、プロセッサがエミュレーション論理を含み、他の実施形態では、エミュレーション論理は、プロセッサの外部に存在しており、第三者が提供するものであってもよい。一実施形態では、プロセッサは、プロセッサに含まれる、または、プロセッサに関連付けられているマイクロコードまたはファームウェアを実行することで、ソフトウェアを含む有形の機械可読媒体に実装されているエミュレーション論理を搭載可能である。
図13は、本発明の実施形態において、ソフトウェア命令変換器を利用して、ソース命令セットのバイナリ命令を、対象命令セットのバイナリ命令に変換する例を示すブロック図である。この実施形態では、命令変換器は、ソフトウェア命令変換器だが、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。図13は、ハイレベル言語1302のプログラムが、x86コンピあら1304によりコンパイルされて、少なくともx86命令セットコア1316をもつプロセッサでネーティブに実行することができるx86バイナリコード1306を生成する。少なくとも1つのx86命令セットコア1316を持つプロセッサは、(1)Intel x86命令セットコアの命令セットの実質的な部分、または(2)少なくともx86命令セットコアをもつIntelプロセッサで実行することを目的としたアプリケーションまたはその他のソフトウェアのオブジェクトコードバージョンを互換的に実行または処理することで、少なくとも1つのx86命令セットコアをもつIntelプロセッサと実質的に同じ機能を果たし、少なくともx86命令セットコアをもつIntelプロセッサと実質的に同じ結果を達成する任意のプロセッサのことを表している。x86コンパイラ1304は、さらなるリンク処理を行っても行わなくても、少なくとも1つのx86命令セットコア1316をもつプロセッサで実行可能なx86バイナリコード1306(たとえばオブジェクトコード)を生成することができるコンパイラのことを表す。同様に、図13は、ハイレベル言語1302のプログラムが、別の命令セットコンパイラ1308を利用してコンパイルされて、少なくとも1つのx86命令セットコア1314がないプロセッサ(たとえば、カリフォルニア州SunnyvaleのMIPS TechnologiesのMIPS命令セットを実行する、及び/または、カリフォルニア州SunnyvaleのARM HoldingsのARM命令セットを実行するMIPS命令セットを実行するコアをもつプロセッサ)によりネーティブに実行することができる別の命令セットバイナリコード1310を生成してよい。命令変換器1312は、x86バイナリコード1306を、x86命令セットコア1314のないプロセッサによりネーティブに実行可能なコードに変換するために利用される。この変換されたコードは、これが可能な命令変換器は作成が難しいので、別の命令セットバイナリコード1310と同じである可能性が少ないが、変換されたコードは、汎用的なオペレーションを遂行し、別の命令セットの命令から構成されるだろう。したがい、命令変換器1312は、エミュレーション、シミュレーション、またはその他のプロセスによって、x86命令セットプロセッサまたはコアのないプロセッサまたはその他の電子デバイスにx86バイナリコード1306を実行させるソフトウェア、ファームウェア、ハードウェア、またはこれらの命令を表す。
図14Aは、条件付きループのためのSIMDベクトル化機能を提供する命令を利用する一実施形態のプロセス1401のフロー図である。ここで開示するプロセス1401およびその他のプロセスは、または汎用マシンまたは専用マシンまたはこれら両方の組み合わせが実行可能な専用ハードウェアまたはソフトウェアまたはファームウェアオペレーションコードを含んでよいブロックを処理することで実行される。
プロセス1401の処理ブロック1410では、カウントベクトルのエレメントをn個のカウント値(たとえば0,1,2,…,n−1)に設定する。処理ブロック1415では、値がIs_Center[i:i+n‐1]アレイからロードされ、決定ベクトルCntrTbl(たとえばti、ti+1、ti+2、…、ti+n‐1)を得ることができる。処理ブロック1420では、ベクトルパッキングされた等しくないものを比較する命令(vector packed compare not-equal)(VPCMPNEQ)命令を利用して決定ベクトルの値をゼロと比較して、決定ベクトルに従ってベクトルマスクを生成して、ベクトルマスクをマスクレジスタに格納する。処理ブロック1425では、カウントベクトルをソースベクトルとして指定するために、ソースパラメータをもつSIMDベクトル拡張命令(VEXPAND)の実行に呼応して、マスクレジスタを特定するマスクパラメータ、および、デスティネーションベクトルCntrTblを特定するためのデスティネーションパラメータが、実行されたSIMDベクトル拡張命令に呼応して、それぞれがmバイトの同じ可変パーティションサイズであるn個の連続したベクトルエレメントを保持するために、カウントベクトルからのデータをCntrTblデスティネーションベクトルのマスキングされたベクトルエレメントにコピーすることなく、カウントベクトルの連続したベクトルエレメントからのデータを、CntrTblデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする。そして処理ブロック1430で、CntrTblデスティネーションベクトルのエレメントを、メモリアレイCenter_Table[i:i+n‐1]に、ベクトル化された条件付きループのこの繰り返しの結果として、格納する。処理ブロック1435で、nをループインデックスiに追加して、処理ブロック1440で、処理が完了しているか否かを判断する。完了していれば、処理が処理ブロック1490で終了する。終了していなければ、処理は処理ブロック1445に進み、マスキングされていないエレメントに格納するカウント数NumCountsを、ポピュレート(population)カウント命令(POPCNT)によってベクトルマスクから計算する。そして処理ブロック1450で、カウント数をベクトルVNumCountsにブロードキャストして、処理ブロック1455で、ベクトルパッキング追加命令(VPADD)を利用して、カウントベクトルのエレメントそれぞれに追加する。そして処理は、処理ブロック1415から繰り返される。
図14Bは、条件付きループのためのSIMDベクトル化機能を提供する命令を利用する別の一実施形態のプロセス1402のフロー図である。プロセス1402の処理ブロック1410では、カウントベクトルのエレメントをn個のカウント値(たとえば0,1,2,…,n−1)に設定する。処理ブロック1415では、値がIs_Center[i:i+n‐1]アレイからロードされ、決定ベクトルCntrTbl(たとえばti、ti+1、ti+2、…、ti+n‐1)が得られる。処理ブロック1420では、ベクトルパッキングされた等しくないものを比較する命令(VPCMPNEQ)命令を利用して決定ベクトルの値をゼロと比較して、決定ベクトルに従ってベクトルマスクを生成して、ベクトルマスクをマスクレジスタに格納する。処理ブロック1426では、カウントベクトルをソースベクトルとして指定するために、ソースパラメータをもつSIMDベクトル拡張命令(VEXPAND)の実行に呼応して、マスクレジスタを特定するマスクパラメータ、および、メモリアレイのデスティネーションベクトルの部分Center_Table[i:i+n‐1]を特定するためのデスティネーションパラメータが、実行されたSIMDベクトル拡張命令に呼応してn個の連続したベクトルエレメントを保持するために、カウントベクトルからのデータをCenter_Tableデスティネーションベクトルのマスキングされたベクトルエレメントにコピーすることなく、Center_Tableデスティネーションベクトルのマスキングされていないベクトルエレメントに、カウンタベクトルの連続したベクトルエレメントからのデータが、ベクトル化された条件付きループのこの繰り返しの結果として、コピーされる。処理ブロック1435で、nをループインデックスiに追加して、処理ブロック1440で、処理が完了しているか否かを判断する。完了していれば、処理が処理ブロック1490で終了する。終了していなければ、処理は処理ブロック1445に進み、マスキングされていないエレメントに格納するカウント数NumCountsを、ポピュレート(population)カウント命令(POPCNT)によってベクトルマスクから計算する。そして処理ブロック1450で、カウント数をベクトルVNumCountsにブロードキャストして、処理ブロック1455で、ベクトルパッキング追加命令(VPADD)を利用して、カウントベクトルのエレメントそれぞれに追加する。そして処理は、処理ブロック1415から繰り返される。メモリのデスティネーションベクトルを特定するベクトル拡張命令の実施形態では、別個のマスキングされているベクトル書き込み演算の必要性がなく、条件付きループのベクトル化が、示されている命令および論理の利用によって達成され、パフォーマンスおよび命令のスループットが向上して、エネルギー消費量が低減する。これら技術は、大量の連続生成されるデータをリアルタイムに組織化する必要があるオンラインクラスタリング等のアプリケーションで利用することができる(他の例としては、ネットワーク侵入検知、パターン認識、およびデータマイニング等)。
図15Aは、条件付きループのためのSIMDベクトル化機能を提供するために、ベクトル拡張命令を実行するプロセスの一実施形態のフロー図である。プロセス1502の処理ブロック1510で、SIMDベクトル拡張命令を受信する。SIMDベクトル拡張命令の実施形態は、ソースベクトルを特定するソース引数と、デスティネーションベクトルを特定するマスク引数とデスティネーション引数と、複数のn個の連続したベクトルエレメントおよびn個の関連する条件付きマスクエレメントをそれぞれ保持するマスクレジスタとを含んでよく、nは、SIMDベクトル拡張命令に応じて変化させる。処理ブロック1520で、次のマスクフィールドをマスクレジスタから読み出して、次の条件付きマスクエレメントを処理ブロック1530でチェックして、これが第1の値(たとえば1またはゼロではない値)であるかを判断する。判断結果が肯定的であれば、処理は処理ブロック1540に進み、ソースベクトルの次の連続するベクトルエレメントからのデータを、現在のマスクフィールドに対応するデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする。他方で、次の条件付きマスクエレメントが第1の値ではない(たとえばゼロであるような)場合には、処理は処理ブロック1550に進み、デスティネーションベクトルの次のベクトルエレメント(マスキングされている)には行わない。そして処理は処理ブロック1560に進み、処理が終了したかを判断し、終了した場合には、処理が処理ブロック1590で終了する。終了していない場合には、処理は処理ブロック1520から繰り返される。
図15Bは、条件付きループのためのSIMDベクトル化機能を提供するために、ベクトル拡張命令を実行するプロセス1502の一実施形態のフロー図である。プロセス1502の処理ブロック1510で、SIMDベクトル拡張命令を受信する。SIMDベクトル拡張命令の実施形態は、ソースベクトルを特定するソース引数と、デスティネーションベクトルを特定するマスク引数とデスティネーション引数と、複数のn個の連続したベクトルエレメントおよびn個の関連する条件付きマスクエレメントをそれぞれ保持するマスクレジスタとを含んでよく、ここでも、nは、SIMDベクトル拡張命令に応じて変化させる。処理ブロック1520で、次のマスクフィールドをマスクレジスタから読み出して、次の条件付きマスクエレメントを処理ブロック1530でチェックして、これが第1の値(たとえば1またはゼロではない値)であるかを判断する。判断結果が肯定的であれば、処理は処理ブロック1540に進み、ソースベクトルの次の連続するベクトルエレメントからのデータを、現在のマスクフィールドに対応するデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする。他方で、次の条件付きマスクエレメントが第1の値ではない(たとえばゼロであるような)場合には、処理は処理ブロック1555に進み、所定の値(たとえばゼロ)を、現在のマスクフィールドに対応するデスティネーションベクトルのマスキングされているベクトルエレメントに書き込む。そして処理は処理ブロック1560に進み、処理が終了したかを判断し、終了した場合には、処理が処理ブロック1590で終了する。終了していない場合には、処理は処理ブロック1520から繰り返される。
図16は、条件付きループのためのSIMDベクトル化機能を提供するプロセスの一実施形態のフロー図を示す。プロセス1601の処理ブロック1610で、カウントのベクトルのエレメントをn個のカウント値(たとえば0、1、2、…、n‐1)に初期化する。処理ブロック1620で、決定ベクトルをカウントテーブルについて、たとえばアレイIs_Center[i:i+n‐1]から得る。処理ブロック1630で、決定ベクトルを予期値のベクトルに比較して、ベクトルマスクを生成してベクトルマスクをマスクレジスタに格納する。処理ブロック1640では、SIMDベクトル拡張命令に呼応して(たとえば、ソースベクトルとしてカウントのベクトルを特定するためのソースパラメータと、マスクレジスタを特定するためのマスクパラメータと、デスティネーションベクトル部分を特定するためのデスティネーションパラメータとを有する)、カウントベクトル内の連続したベクトルエレメントのデータを拡張して、ベクトルマスクに従ってカウントテーブルデスティネーションベクトル部分のマスキングされていないベクトルエレメントに、カウントテーブルデスティネーションベクトルのマスキングされているベクトルエレメントにカウントベクトルからデータをコピーすることなく、コピーする。処理ブロック1650では、処理が完了しているか否かを判断する。完了していれば、処理が処理ブロック1690で終了する。終了していなければ、処理は処理ブロック1660に進み、肯定的な決定数をカウントして、処理ブロック1670で、カウントのベクトルの各エレメントに追加する。処理は次に、処理ブロック1620から繰り返される。
条件付きループのベクトル化は、命令(たとえばSIMDベクトル拡張命令)とここで開示する論理との利用によって達成され、パフォーマンスおよび命令のスループットが向上して、エネルギー消費量が低減することがわかるだろう。これら技術は、大量の連続生成されるデータをリアルタイムに組織化する必要があるオンラインクラスタリング等のアプリケーションで利用することができる。他の例としては、ネットワーク侵入検知、パターン認識、およびデータマイニング等が挙げられる。
図17は、条件付きループのためのSIMDベクトル化機能を提供するベクトル拡張命令を実行する装置1701の一実施形態を示す。装置1701の実施形態はさらに、SIMDベクトル拡張機能を提供する命令を実行するパイプライン400の一部であっても(たとえば実行ステージ416)、またはコア490の一部であっても(たとえば実行ユニット(1または複数)462)よい。装置1701の実施形態は、デコードステージ(たとえばデコード406)またはデコーダ(デコードユニット440)に連結されて、SIMDベクトル拡張のための命令をデコードしてよく、こうすることで、条件付きループを効率的にベクトル化できる。デコードされた命令を受けると、1以上の実行ユニット(たとえば実行装置1701)の実施形態は、ソースベクトル1710のデータをデスティネーションベクトル1760のn個のベクトルエレメントのマスキングされているベクトルエレメントにコピーすることなく、ソースベクトル1710のn個の連続したベクトルエレメントの一部のデータをデスティネーションベクトル1760のマスキングされていないベクトルエレメントにコピーして、ここでnは、実行中のSIMDベクトル拡張命令に呼応して変化させる。
たとえば装置1701の実施形態は、可変の複数のn個の可変サイズのデータフィールドを含み、可変の複数のn個の可変サイズのデータエレメントの値を格納するベクトルレジスタ(たとえば物理レジスタファイルユニット458)に連結されてよい。SIMDベクトル拡張機能を提供する命令の実施形態は、メモリベクトルオペランドおよび/またはベクトルレジスタ(たとえば1760および/または1710)の各データフィールドについてSIMDベクトル拡張を実行するためのベクトル拡張演算およびデータフィールドサイズを特定して、ソースベクトル1710のデータをデスティネーションベクトル1760のマスキングされているベクトルエレメントにコピーすることなく、ソースベクトル1710のn個の連続したベクトルエレメントの一部のデータを宛先ベクトル1760のマスキングされたベクトルエレメントにコピーする。
たとえば、SIMDベクトル拡張機能を提供するための命令を実行するための装置1701の一実施形態が、ベクトルマスク1720の各データフィールドの値を読み出して、ソースベクトル1710の第1のサイズ(たとえば32ビットまたは64ビット)の連続したベクトルエレメントの最下位部分のデータをソースベクトル1710にコピーして、拡張マルチプレクサ論理(たとえばマスキングされていない拡張回路1703のマルチプレクサ論理1730−1750)を利用して拡張して、メモリベクトルオペランドまたはベクトルレジスタの一部の、デスティネーションベクトル1760のマスキングされていないベクトルエレメントに格納する。一実施形態では、デスティネーションベクトル1760のマスキングされているベクトルエレメントを、上書きしないものとして(たとえば、マスキングされている拡張回路1770のマルチプレクサ論理1770−1775によって制御論理1779により)選択したり、または、ゼロの値1778で上書きするものとして選択したりすることができる。ここで、SIMDベクトル拡張命令の一部の実施形態は、メモリのデスティネーションベクトルを特定して、別個のマスキングされているベクトル書き込み(たとえばマスクストア)オペレーションをなくすこともできる。
図18は、条件付きループのためのSIMDベクトル化機能を提供するベクトル拡張命令を実行する装置の別の一実施形態を示す。装置1801は、実行エンジンユニット1850とメモリユニット1870とを含む。実行エンジンユニット1850は、1以上のスケジューラユニット1856のセットに連結されたリネーム/アロケータユニット1852を含む。スケジューラユニット1856は、任意の数のスケジューラを表しており、これには、リザベーションステーション、中央命令ウィンドウ等が含まれる。スケジューラユニット1856は、ベクトル物理レジスタ1884、マスク物理レジスタ1882、および、整数物理レジスタ1886を含む物理レジスタファイル(1または複数)に連結されている。物理レジスタファイルのそれぞれは、1以上の物理レジスタファイル(異なる物理レジスタファイルが、スカラー整数、スカラー浮動小数点、パッキングされた整数(packed integer)、パッキングされた浮動小数点(packed floating point)、ベクトル整数、ベクトル浮動小数点等を含む)、ステータス(たとえば、実行される次の命令のアドレスである命令ポインタ)等を格納する。
装置1801の実行エンジンユニット1850は、SIMDベクトル拡張命令からのインデックスセット1830とマスク物理レジスタ1882の対応するマスクエレメントのセット1820とを格納するためのインデックスアレイ1888を含む。一実施形態では、ワイドベクトル格納チャネル(たとえば128ビット、または256ビット、または512ビットまたはこれ以上)および64ビットの整数スタックチャネルが、インデックス1830およびマスク1820エレメントのインデックスアレイ1888(たとえば1以上のマイクロオペレーションを利用して)への転送を促すために、再利用されてよい(repurposed)。実行エンジンユニット1850の一部の実施形態はさらに、格納データバッファ1899を含み、あるベクトル拡張オペレーションのためのSIMDベクトルレジスタ1810からのデータエレメント全てが、中間デスティネーションデータ1860に拡張され(装置1701に示すように)、一度に格納データバッファ1899の複数の個々のエレメント拡張位置に書き込まれてよい(一度のマイクロオペレーションを利用して)。格納データバッファ1899のこれら複数の個々の格納位置に格納されるデータエレメントは、次に、外部メモリにアクセスすることなく、より新しいロードオペレーションに転送されてよい。有限ステートマシン1892が、インデックスアレイ1888には動作可能に連結されており、インデックスセット1830および対応するマスク1820エレメントを利用してベクトル拡張オペレーションが促される。
有限ステートマシン1892に呼応して、アドレス生成論理1894は、整数物理レジスタ1886が提供した少なくとも1つのベースアドレス1840と、第1の値を持つ少なくとも各対応するマスク1820についてのインデックスアレイ1888のインデックスセット1830のインデックス1850とから有効なアドレス1806を生成する。ストレージが格納データバッファ1899に割り当てられて、メモリアクセスユニット1864が対応するメモリ位置に格納するために生成された有効なアドレス1806に対応するデータ1860エレメントを保持する。生成される有効なアドレス1806に対応しているデータ1860エレメントが、バッファ格納データバッファ1899にコピーされる。メモリアクセスユニット1864は、アドレス生成論理1894に動作可能に連結されており、メモリユニット1870を介して、第1の値をもつ対応するマスク1807エレメントについてメモリ位置にアクセスするが、このメモリ位置は、有限ステートマシン1892に呼応して、データエレメント1809を格納するためにアドレス生成論理1894が生成する有効なアドレス1806に対応している。一実施形態では、格納データバッファ1899に格納されているデータ1860エレメントは、これらの有効なアドレス1806が、より新しいロード命令の有効なアドレスに対応している場合、連続した命令順序におけるより新しいロード命令を満足させるようにアクセスされる。有限ステートマシン1892は、次に、拡張したデータエレメント1809のメモリへの格納に成功すると、対応するマスク1802エレメントを、第1の値から第2の値に変更してよい。一部の実施形態では、ベクトル拡張オペレーションの完了は、マイクロオペレーションを実行することで成功することとしてよい。一部の実施形態では、有限ステートマシン1892の拡張されたデータ1860エレメントの対応する格納(たとえば失敗することなく)が完了すると、これらのマイクロオペレーションが再試行されてよい。
一部の実施形態では、格納データバッファ1899に格納されているデータ1860エレメントが、最終的に、早い場合には(as early as)、生成された有効なアドレス1806に対応する格納データバッファ1899にストレージが割り当てられると、連続した命令順序で、より新たなロード命令を満たすために利用されてよい点を理解されたい。さらに、インデックスセット1830と、これに対応する、マスク物理レジスタ1882のマスク1820エレメントセットとをインデックスアレイ1888に送るよう数個のマイクロオペレーションのみをスケジュールして、ベクトル拡張オペレーションに呼応して、および/または、ベクトル拡張オペレーションをサポートするように、他の命令の実行と並列に、または同時に、データ1860を格納するように、これら数個のマイクロオペレーションを拡張することで、特にベクトル化された条件付きループについて命令スループットを向上させることができるので、パフォーマンスが上がり、電力使用量およびエネルギー消費量が低減する。これら技術は、大量の連続生成されるデータをリアルタイムに組織化する必要があるオンラインクラスタリング等のアプリケーションで利用することができる。このようなアプリケーションには、ほかにも、ネットワーク侵入検知、パターン認識、およびデータマイニング、その他の類似した種類のリアルタイム・オンラインクラスタリングアプリケーションなどがあるだろう。
ここで説明するメカニズムは、ハードウェア、ソフトウェア、ファームウェア、またはこれらの実装例の組み合わせで実装することができる。本発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性及び不揮発性メモリ及び/または記憶エレメントを含む)、少なくとも1つの入力デバイス、及び、少なとも1つの出力デバイスを含むプログラム可能なシステムで実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
プログラムコードを入力命令に適用して、ここで記載する機能を実行して、出力情報を生成してよい。出力情報は、公知の方法で1以上の出力デバイスに適用してよい。本願においては、処理システムが、プロセッサ(たとえばデジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ)有する任意のシステムを含む。
プログラムコードは、高レベルプロシージャまたはオブジェクト指向プログラミング言語に実装されて、処理システムと通信してよい。プログラムコードはさらに、望ましい場合にはアセンブリまたは機械言語で実装されてよい。実際、ここに記載するメカニズムは、特定のプログラミング言語に限定はされない。いずれにしても、言語はコンパイルされた言語、またはインタープリタ型言語であってよい。
少なくとも1つの実施形態の1以上の側面が、プロセッサ内の様々な論理を表す機械可読媒体に格納されている代表命令により実装されてもよく、これは機械により読み出されると、機械に、ここで記載する技術を実行する論理を製造させることができる。これらの表現は、「IPコア」として知られており、有形の機械可読媒体(「テープ」)に格納され、様々な顧客または製造施設に送られ、実際に論理またはプロセッサを作成する製造機械に搭載されてよい。
機械可読格納媒体は、限定ではないが、機械またはデバイスにより製造または構成される、非一時的、有形の構成の物品を含んでよい(これには、ハードディス等の記憶媒体、任意の他のタイプのディスクが含まれ、これらには、フロッピー(登録商標)ディスク、光学ディスク、CD−ROM、CD−RW,及び光磁気ディスク、半導体デバイス(たとえばROM、DRAM、SRAM等のRAM、EPROM、フラッシュメモリ、EEPROM、磁気カードまたは光カード)、または任意の他のタイプの、電子命令を格納するのに適した媒体が含まれる。
したがい、本発明の実施形態は、命令を含んだり、ここで記載する構造、回路、装置、プロセッサ、及び/またはシステムの特徴部を定義する設計データ(たとえばハードウェア記述言語(HDL))を含んだりする非一時的、有形の機械可読媒体も含む。一部の実施形態は、プログラムプロダクトとも称される。
場合によって、命令変換器は、命令を、ソース命令セットから対象命令セットに変換する。たとえば、命令変換器は、たとえば静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を利用する変換、変形(morph)、エミュレートすることもできるし、または、コアが処理する1以上の他の命令に命令を変換することもできる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装されてよい。命令変換器は、プロセッサにあっても、プロセッサ外にあっても、一部がプロセッサにあって一部がプロセッサ外にあってもよい。
少なくとも1つの実施形態による1以上の命令を実行する技術を開示してきた。一部の実施形態は、添付図面に示されているが、これら実施形態は広義の発明の例示であり、広義の発明を限定するものではない。また、本開示を読んだ当業者には様々な他の変形例が自明であることから、本発明は、示され説明される具体的な構成及び構造に限定はされない。成長が速く、将来の進歩を簡単に予測できない技術分野においては、開示する実施形態は、本開示の原理または添付請求項の範囲から逸脱せずに、構造及び詳細について容易に修正することができる。ここで、本発明の実施形態の例を項目として示す。
[項目1]
条件付きループをベクトル化するコンピュータ実装される方法であって、
n個のカウント値にカウントベクトルのエレメントを設定する段階と、
決定ベクトルを取得する段階と、
決定ベクトルに従ってベクトルマスクを生成する段階と、
マスクレジスタにベクトルマスクを格納する段階と、
複数のn個の連続したベクトルエレメントを保持するために、ソースベクトルとしてカウントベクトルを特定するためのソースパラメータと、マスクレジスタを特定するためのマスクパラメータと、デスティネーションベクトルを特定するためのデスティネーションパラメータとをもつプロセッサ命令を受信する段階と、
プロセッサ命令の受信に呼応して、ソースベクトルのデータを、特定されたデスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、ソースベクトルの連続したベクトルエレメントのデータを、特定されたデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする段階と
を備え、
複数のn個の連続したベクトルエレメントのそれぞれは、mバイトの同じ可変パーティションサイズを有し、
nは、受信されるプロセッサ命令に応じて変化する、方法。
[項目2]
ソースパラメータは、カウントベクトルをソースベクトルレジスタとして特定する、項目1に記載の方法。
[項目3]
デスティネーションパラメータは、デスティネーションベクトルレジスタを特定する、項目2に記載の方法。
[項目4]
データは、デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされ、デスティネーションベクトルのマスキングされているベクトルエレメントはいずれもゼロの値に設定される、項目3に記載の方法。
[項目5]
データは、デスティネーションベクトルのいずれのマスキングされたベクトルエレメントも修正することなく、デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、項目2に記載の方法。
[項目6]
デスティネーションパラメータは、メモリ内に配置されているデスティネーションベクトル部分を特定する、項目5に記載の方法。
[項目7]
ソースパラメータは、メモリ内に配置されているソースベクトル部分としてカウントベクトルを特定する、項目1に記載の方法。
[項目8]
プロセッサに、
n個のカウント値にカウントベクトルのエレメントを設定する手順と、
決定ベクトルを取得する手順と、
決定ベクトルに従ってベクトルマスクを生成する手順と、
マスクレジスタにベクトルマスクを格納する手順と、
複数のn個の連続したベクトルエレメントを保持するために、ソースベクトルとしてカウントベクトルを特定するためのソースパラメータと、マスクレジスタを特定するためのマスクパラメータと、デスティネーションベクトルを特定するためのデスティネーションパラメータとをもつ単一命令複数データ拡張命令(SIMD拡張命令)の実行に呼応して、
ソースベクトルのデータを、特定されたデスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、ソースベクトルの連続したベクトルエレメントのデータを、特定されたデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする手順と
を実行させ、
複数のn個の連続したベクトルエレメントのそれぞれは、mバイトの同じ可変パーティションサイズを有し、
nは、実行されるSIMD拡張命令に応じて変化する、プログラム。
[項目9]
ソースパラメータは、カウントベクトルをソースベクトルレジスタとして特定する、項目8に記載のプログラム。
[項目10]
デスティネーションパラメータは、デスティネーションベクトルレジスタを特定する、項目9に記載のプログラム。
[項目11]
データは、デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされ、デスティネーションベクトルのマスキングされているベクトルエレメントはいずれもゼロの値に設定される、項目10に記載のプログラム。
[項目12]
データは、デスティネーションベクトルのいずれのマスキングされたベクトルエレメントも修正することなく、デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、項目9に記載のプログラム。
[項目13]
デスティネーションパラメータは、メモリ内に配置されているデスティネーションベクトル部分を特定する、項目12に記載のプログラム。
[項目14]
ソースパラメータは、メモリ内に配置されているソースベクトル部分としてカウントベクトルを特定する、項目8に記載のプログラム。
[項目15]
実行されるSIMD拡張命令が、32ビットの整数を拡張する場合、nは、4、8、および16からなる群から選択された値である、項目8から14のいずれか一項に記載のプログラム。
[項目16]
実行されるSIMD拡張命令が、64ビットの整数を拡張する場合、nは、2、4、および8からなる群から選択された値である、項目8から14のいずれか一項に記載のプログラム。
[項目17]
第1の複数のn個のデータフィールドを有するソースベクトルであって、ソースベクトルの第1の複数のn個のデータフィールドのそれぞれは、mバイトの同じ可変のパーティションサイズをもつエレメントを格納する、ソースベクトルと、
第1の複数のn個のデータフィールドに対応している第2の複数のデータフィールドを有するデスティネーションベクトルであって、デスティネーションベクトルの第2の複数のデータフィールドのそれぞれは、ベクトル条件付きマスクのマスク値に対応している、デスティネーションベクトルと、
ベクトル拡張オペレーションとデータパーティションサイズとを特定するプロセッサ命令をデコードするデコードステージと、
1以上の実行ユニットと
を備えるプロセッサであって、
1以上の実行ユニットは、デコードされたプロセッサ命令に呼応して、
ソースベクトルのデータを、デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、ソースベクトルの連続したベクトルエレメントのデータを、デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーし、nは、受信されるプロセッサ命令に応じて変化する、プロセッサ。
[項目18]
ソースベクトルはベクトルレジスタである、項目17に記載のプロセッサ。
[項目19]
デスティネーションベクトルは別のベクトルレジスタである、項目18に記載のプロセッサ。
[項目20]
デコードされたプロセッサ命令に呼応して、デスティネーションベクトルのマスキングされているベクトルエレメントがゼロの値に設定される、項目19に記載のプロセッサ。
[項目21]
データは、デスティネーションベクトルのいずれのマスキングされたベクトルエレメントも修正することなく、デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、項目18に記載のプロセッサ。
[項目22]
デスティネーションベクトルは、メモリ内に配置されているベクトル部分である、項目21に記載のプロセッサ。
[項目23]
ソースベクトルは、メモリ内に配置されているベクトル部分である、項目21に記載のプロセッサ。
[項目24]
プロセッサ命令が、ベクトル拡張オペレーションと4バイトのダブルワードのデータパーティションサイズとを特定している場合、nは、4、8、および16からなる群から選択された値である、項目17から23のいずれか一項に記載のプロセッサ。
[項目25]
プロセッサ命令が、ベクトル拡張オペレーションと8バイトのクワッドワードのデータパーティションサイズとを特定している場合、nは、2、4、および8からなる群から選択された値である、項目17から23のいずれか一項に記載のプロセッサ。
[項目26]
メモリと、
第1のプロセッサコアと第2のプロセッサコアとを有する複数のプロセッサと
を備える処理システムであって、
複数のプロセッサのそれぞれは、
第1の複数のn個のデータフィールドを有するソースベクトルと、
第1の複数のデータフィールドに対応する第2の複数のデータフィールドを有するデスティネーションベクトルと、
ベクトル拡張オペレーションとデータパーティションサイズとを特定するプロセッサ命令をデコードするデコードステージと、
1以上の実行ユニットと
を備え、
ソースベクトルの第1の複数のn個のデータフィールドのそれぞれは、mバイトの同じ可変パーティションサイズを有するエレメントを格納し、
デスティネーションベクトルの第2の複数のデータフィールドのそれぞれは、ベクトル条件付きマスクのマスク値に対応しており、
1以上の実行ユニットは、デコードされたプロセッサ命令に呼応して、
ソースベクトルのデータを、デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、ソースベクトルの連続したベクトルエレメントのデータを、デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーし、
nは、受信されるプロセッサ命令に応じて変化する、処理システム。
[項目27]
ソースベクトルは、メモリ内に配置されているベクトル部分である、項目26に記載の処理システム。
[項目28]
プロセッサ命令が、ベクトル拡張オペレーションと4バイトのダブルワードのデータパーティションサイズとを特定している場合、nは、4、8、および16からなる群から選択された値である、項目26または27に記載の処理システム。
[項目29]
プロセッサ命令が、ベクトル拡張オペレーションと8バイトのクワッドワードのデータパーティションサイズとを特定している場合、nは、2、4、および8からなる群から選択された値である、項目26または27に記載の処理システム。
[項目30]
複数のn個の連続するベクトルエレメントとn個の関連する条件付きマスクエレメントとをそれぞれ保持する対象ベクトルとマスクレジスタとを特定する対象引数とマスク引数、および、ソースベクトルを特定するソース引数を有するSIMD拡張命令を備え、
実行可能なSIMD拡張命令は、プロセッサに、ソースベクトルの連続するベクトルエレメントのデータを、対象ベクトルのマスキングされていないベクトルエレメントにコピーして、対象ベクトルのマスキングされているベクトルエレメントを予め定められた値に設定する手順を実行させ、
nは、実行されるSIMD拡張命令に応じて変化する、プログラム。
[項目31]
予め定められた値はゼロである、項目30に記載のプログラム。
[項目32]
ソース引数は、ソースベクトルレジスタを特定する、項目30または31に記載のプログラム。
[項目33]
ソース引数は、メモリ内のソースベクトル位置を特定する、項目30または31に記載のプログラム。
[項目34]
実行されるSIMD拡張命令が32ビットの整数を拡張する場合、nは、4、8、および16からなる群から選択された値である、項目30から33のいずれか一項に記載のプログラム。
[項目35]
実行されるSIMD拡張命令が64ビットの整数を拡張する場合、nは、2、4、および8からなる群から選択された値である、項目30から33のいずれか一項に記載のプログラム。
[項目36]
複数のn個の連続するベクトルエレメントとn個の関連する条件付きマスクエレメントとをそれぞれ保持する対象ベクトルとマスクレジスタとを特定する対象引数とマスク引数、および、ソースベクトルを特定するソース引数を有するSIMD拡張命令を備え、
実行可能なSIMD拡張命令は、プロセッサに、ソースベクトルの連続するベクトルエレメントのデータを、対象ベクトルのマスキングされていないベクトルエレメントにコピーする手順を実行させ、
nは、実行されるSIMD拡張命令に応じて変化する、プログラム。
[項目37]
ソース引数は、ソースベクトルレジスタを特定する、項目36に記載のプログラム。
[項目38]
対象引数は、対象ベクトルレジスタを特定する、項目37に記載のプログラム。
[項目39]
実行可能なSIMD拡張命令は、プロセッサに、さらに、対象ベクトルのマスキングされているベクトルエレメントをゼロの値に設定する手順を実行させる、項目38に記載のプログラム。
[項目40]
データは、対象ベクトルのいずれのマスキングされたベクトルエレメントも修正することなく、対象ベクトルのマスキングされていないベクトルエレメントにコピーされる、項目37から39のいずれか一項に記載のプログラム。
[項目41]
対象引数は、メモリ内の対象ベクトル位置を特定する、項目40に記載のプログラム。
[項目42]
ソース引数は、メモリ内のソースベクトル位置を特定する、項目36に記載のプログラム。
[項目43]
複数のn個の連続したベクトルエレメントを保持するために、ソースベクトルを特定するためのソースパラメータと、条件マスクレジスタを特定するためのマスクパラメータと、デスティネーションベクトルを特定するためのデスティネーションパラメータとをもつプロセッサ命令を受信する段階と、
プロセッサ命令の受信に呼応して、データを、特定されたデスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、ソースベクトルの連続したベクトルエレメントのデータを、特定されたデスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする段階と
を備え、
複数のn個の連続したベクトルエレメントのそれぞれは、mバイトの同じ可変パーティションサイズを有し、
nは、受信されるプロセッサ命令に応じて変化する、コンピュータ実装される方法。
[項目44]
ソースパラメータは、ソースベクトルレジスタを特定する、項目43に記載の方法。
[項目45]
デスティネーションパラメータは、デスティネーションベクトルレジスタを特定する、項目44に記載の方法。
[項目46]
データは、デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされ、デスティネーションベクトルのマスキングされているベクトルエレメントはいずれもゼロの値に設定される、項目45に記載の方法。
[項目47]
データは、デスティネーションベクトルのいずれのマスキングされたベクトルエレメントも修正することなく、デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、項目44から46のいずれか一項に記載の方法。
[項目48]
デスティネーションパラメータは、メモリ内に配置されているデスティネーションベクトル部分を特定する、項目47に記載の方法。
[項目49]
ソースパラメータは、メモリ内に配置されているソースベクトル部分を特定する、項目43に記載の方法。

Claims (49)

  1. 条件付きループをベクトル化するコンピュータ実装される方法であって、
    n個のエレメントを有するカウントベクトルを設定する段階であって、前記カウントベクトル内の互いに異なる各エレメントはそれぞれ、互いに値の異なるn個のカウント値のいずれかに設定されるものであり、前記互いに値の異なるn個のカウント値は、前記カウントベクトル内において、値の大小順に設定されるものである、前記カウントベクトルを設定する段階と、
    決定ベクトルを取得する段階と、
    前記決定ベクトルに従ってベクトルマスクを生成する段階と、
    マスクレジスタに前記ベクトルマスクを格納する段階と、
    ソースベクトルとして前記カウントベクトルを特定するためのソースパラメータと、前記マスクレジスタを特定するためのマスクパラメータと、デスティネーションベクトルを特定するためのデスティネーションパラメータとをもつプロセッサ命令を受信する段階であって、前記ソースパラメータと前記マスクパラメータと前記デスティネーションパラメータにより特定されるベクトルはいずれも、n個の連続したベクトルエレメントを保持するものであり、前記デスティネーションパラメータにより特定される前記デスティネーションベクトルは、前記n個の連続したベクトルエレメントからなる組の1つの組または複数の組からなる配列のうちの、1つの組の前記n個の連続したベクトルエレメントに関係するものであることが許容されるものである、前記プロセッサ命令を受信する段階と、
    前記プロセッサ命令の受信に呼応して、前記ソースベクトルのデータを、特定された前記デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、前記ソースベクトルの連続したベクトルエレメントのデータを、特定された前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする段階と
    を備え、
    前記ソースパラメータと前記デスティネーションパラメータにより特定されるベクトルのそれぞれに含まれる、前記n個の連続したベクトルエレメントのそれぞれは、mバイトの同じ可変パーティションサイズを有し、
    nは、受信される前記プロセッサ命令に応じて変化する、方法。
  2. 前記ソースパラメータは、前記カウントベクトルをソースベクトルレジスタとして特定する、請求項1に記載の方法。
  3. 前記デスティネーションパラメータは、デスティネーションベクトルレジスタを特定する、請求項2に記載の方法。
  4. 前記データは、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされ、前記デスティネーションベクトルのマスキングされているベクトルエレメントはいずれもゼロの値に設定される、請求項3に記載の方法。
  5. 前記データは、前記デスティネーションベクトルのいずれのマスキングされているベクトルエレメントも修正することなく、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、請求項2に記載の方法。
  6. 前記デスティネーションパラメータは、メモリ内に配置されているデスティネーションベクトル部分を特定する、請求項5に記載の方法。
  7. 前記ソースパラメータは、メモリ内に配置されているソースベクトル部分として前記カウントベクトルを特定する、請求項1に記載の方法。
  8. プロセッサに、
    n個のエレメントを有するカウントベクトルを設定する手順であって、前記カウントベクトル内の互いに異なる各エレメントはそれぞれ、互いに値の異なるn個のカウント値のいずれかに設定されるものであり、互いに値の異なるn個のカウント値は、前記カウントベクトル内において、値の大小順に設定されるものである、前記カウントベクトルを設定する手順と、
    決定ベクトルを取得する手順と、
    前記決定ベクトルに従ってベクトルマスクを生成する手順と、
    マスクレジスタに前記ベクトルマスクを格納する手順と、
    ソースベクトルとして前記カウントベクトルを特定するためのソースパラメータと、前記マスクレジスタを特定するためのマスクパラメータと、デスティネーションベクトルを特定するためのデスティネーションパラメータとをもつベクトル拡張命令であって、前記ソースパラメータと前記マスクパラメータと前記デスティネーションパラメータにより特定されるベクトルはいずれも、n個の連続したベクトルエレメントを保持するものであり、前記デスティネーションパラメータにより特定される前記デスティネーションベクトルは、前記n個の連続したベクトルエレメントからなる組の1つの組または複数の組からなる配列のうちの、1つの組の前記n個の連続したベクトルエレメントに関係するものであることが許容されるものである、前記ベクトル拡張命令の実行に呼応して、
    前記ソースベクトルのデータを、特定された前記デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、前記ソースベクトルの連続したベクトルエレメントのデータを、特定された前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする手順と
    を実行させ、
    前記ソースパラメータと前記デスティネーションパラメータにより特定されるベクトルのそれぞれに含まれる、前記n個の連続したベクトルエレメントのそれぞれは、mバイトの同じ可変パーティションサイズを有し、
    nは、実行される前記ベクトル拡張命令に応じて変化する、プログラム。
  9. 前記ソースパラメータは、前記カウントベクトルをソースベクトルレジスタとして特定する、請求項8に記載のプログラム。
  10. 前記デスティネーションパラメータは、デスティネーションベクトルレジスタを特定する、請求項9に記載のプログラム。
  11. 前記データは、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされ、前記デスティネーションベクトルのマスキングされているベクトルエレメントはいずれもゼロの値に設定される、請求項10に記載のプログラム。
  12. 前記データは、前記デスティネーションベクトルのいずれのマスキングされているベクトルエレメントも修正することなく、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、請求項9に記載のプログラム。
  13. 前記デスティネーションパラメータは、メモリ内に配置されているデスティネーションベクトル部分を特定する、請求項12に記載のプログラム。
  14. 前記ソースパラメータは、メモリ内に配置されているソースベクトル部分として前記カウントベクトルを特定する、請求項8に記載のプログラム。
  15. 記ベクトル拡張命令が、各ベクトルエレメントのサイズが32ビットであるベクトルを拡張するためのものである場合、nは、4、8、および16からなる群から選択された値である、請求項8から14のいずれか一項に記載のプログラム。
  16. 記ベクトル拡張命令が、各ベクトルエレメントのサイズが64ビットであるベクトルを拡張するためのものである場合、nは、2、4、および8からなる群から選択された値である、請求項8から14のいずれか一項に記載のプログラム。
  17. ソースベクトルとしてカウントベクトルを特定するためのソースパラメータとデスティネーションベクトルを特定するためのデスティネーションパラメータとマスクレジスタを特定するためのマスクパラメータとを有し、ベクトル拡張オペレーションとデータパーティションサイズとを特定するプロセッサ命令をデコードするデコードステージであって、前記ソースベクトルと前記デスティネーションベクトルと前記プロセッサ命令のためのベクトル条件付きマスクのベクトルとはいずれも、n個のデータフィールドを保持するものであり、前記ソースベクトルと前記デスティネーションベクトルのそれぞれに含まれる、前記n個のデータフィールドのそれぞれは、mバイトの同じ可変パーティションサイズを有するエレメントを格納し、前記デスティネーションベクトルに含まれる前記n個のデータフィールドのそれぞれは、前記ベクトル条件付きマスクのベクトルに含まれる前記n個のデータフィールドに格納されているn個のマスク値のうちの、それぞれに対応するひとつに対応している、デコードステージと、
    1以上の実行ユニットと
    を備えるプロセッサであって、
    前記プロセッサは、
    前記n個のデータフィールドを有する前記カウントベクトルを設定する段階であって、前記カウントベクトル内の互いに異なる各データフィールドはそれぞれ、互いに値の異なるn個のカウント値のいずれかに設定されるものであり、前記互いに値の異なるn個のカウント値は、前記カウントベクトル内において、値の大小順に設定されるものである、前記カウントベクトルを設定する段階と、
    決定ベクトルを取得する段階と、
    前記決定ベクトルに従って前記ベクトル条件付きマスクを生成する段階と、
    前記マスクレジスタに前記ベクトル条件付きマスクを格納する段階とを実行するものであり
    前記1以上の実行ユニットは、デコードされた前記プロセッサ命令に呼応して、
    前記ソースベクトルのデータを、前記デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、前記ソースベクトルの連続したベクトルエレメントのデータを、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーするものであり、
    nは、受信される前記プロセッサ命令に応じて変化する、
    プロセッサ。
  18. 前記ソースベクトルはベクトルレジスタである、請求項17に記載のプロセッサ。
  19. 前記デスティネーションベクトルは別のベクトルレジスタである、請求項18に記載のプロセッサ。
  20. デコードされた前記プロセッサ命令に呼応して、前記デスティネーションベクトルのマスキングされているベクトルエレメントがゼロの値に設定される、請求項19に記載のプロセッサ。
  21. 前記データは、前記デスティネーションベクトルのいずれのマスキングされているベクトルエレメントも修正することなく、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、請求項18に記載のプロセッサ。
  22. 前記デスティネーションベクトルは、メモリ内に配置されているベクトル部分である、請求項21に記載のプロセッサ。
  23. 前記ソースベクトルは、メモリ内に配置されているベクトル部分である、請求項17に記載のプロセッサ。
  24. 前記プロセッサ命令が、ベクトル拡張オペレーションと4バイトのダブルワードのデータパーティションサイズとを特定している場合、nは、4、8、および16からなる群から選択された値である、請求項17から23のいずれか一項に記載のプロセッサ。
  25. 前記プロセッサ命令が、ベクトル拡張オペレーションと8バイトのクワッドワードのデータパーティションサイズとを特定している場合、nは、2、4、および8からなる群から選択された値である、請求項17から23のいずれか一項に記載のプロセッサ。
  26. メモリと、
    第1のプロセッサコアと第2のプロセッサコアとを有する複数のプロセッサと
    を備える処理システムであって、
    前記複数のプロセッサのそれぞれは、
    ソースベクトルとしてカウントベクトルを特定するためのソースパラメータとデスティネーションベクトルを特定するためのデスティネーションパラメータとマスクレジスタを特定するためのマスクパラメータとを有し、ベクトル拡張オペレーションとデータパーティションサイズとを特定するプロセッサ命令をデコードするデコードステージであって、前記ソースベクトルと前記デスティネーションベクトルと前記プロセッサ命令のためのベクトル条件付きマスクのベクトルはいずれも、n個のデータフィールドを保持するものであり、前記ソースベクトルと前記デスティネーションベクトルのそれぞれに含まれる、前記n個のデータフィールドのそれぞれは、mバイトの同じ可変パーティションサイズを有するエレメントを格納し、前記デスティネーションベクトルに含まれる前記n個のデータフィールドのそれぞれは、前記ベクトル条件付きマスクのベクトルに含まれるn個のデータフィールドに格納されているn個のマスク値のうちの、それぞれに対応するひとつに対応している、前記デコードステージと、
    1以上の実行ユニットと
    を備え、
    前記プロセッサは、
    前記n個のデータフィールドを有する前記カウントベクトルを設定する段階であって、前記カウントベクトル内の互いに異なる各データフィールドはそれぞれ、互いに値の異なるn個のカウント値のいずれかに設定されるものであり、前記互いに値の異なるn個のカウント値は、前記カウントベクトル内において、値の大小順に設定されるものである、前記カウントベクトルを設定する段階と、
    決定ベクトルを取得する段階と、
    前記決定ベクトルに従ってベクトル条件付きマスクを生成する段階と、
    前記マスクレジスタに前記ベクトル条件付きマスクを格納する段階とを実行するものであり、
    前記1以上の実行ユニットは、デコードされた前記プロセッサ命令に呼応して、
    前記ソースベクトルのデータを、前記デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、前記ソースベクトルの連続したベクトルエレメントのデータを、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーするものであり、
    nは、受信される前記プロセッサ命令に応じて変化する、処理システム。
  27. 前記ソースベクトルは、前記メモリ内に配置されているベクトル部分である、請求項26に記載の処理システム。
  28. 前記プロセッサ命令が、ベクトル拡張オペレーションと4バイトのダブルワードのデータパーティションサイズとを特定している場合、nは、4、8、および16からなる群から選択された値である、請求項26または27に記載の処理システム。
  29. 前記プロセッサ命令が、ベクトル拡張オペレーションと8バイトのクワッドワードのデータパーティションサイズとを特定している場合、nは、2、4、および8からなる群から選択された値である、請求項26または27に記載の処理システム。
  30. プログラムであって、
    n個のベクトルエレメントを保持するターゲットベクトルを特定するターゲット引数と、n個の関連する条件付きマスクエレメントを保持するマスクレジスタを特定するマスク引数と、n個のベクトルエレメントを保持するソースベクトルとしてカウントベクトルを特定するソース引数とを有するベクトル拡張命令を備え、
    前記プログラムは、プロセッサに、
    前記n個のベクトルエレメントを有するカウントベクトルを設定する手順であって、前記カウントベクトル内の互いに異なる各ベクトルエレメントはそれぞれ、互いに値の異なるn個のカウント値のいずれかに設定されるものであり、前記互いに値の異なるn個のカウント値は、前記カウントベクトル内において、値の大小順に設定されるものである、前記カウントベクトルを設定する手順と、
    決定ベクトルを取得する手順と、
    前記決定ベクトルに従って条件付きマスクエレメントを生成する手順と、
    前記マスクレジスタに前記条件付きマスクエレメントを格納する手順と、を実行させるためのものであり
    前記ベクトル拡張命令は、前記プロセッサに、
    前記ソースベクトルの連続するベクトルエレメントのデータを、前記ターゲットベクトルのマスキングされていないベクトルエレメントにコピーして、前記ターゲットベクトルのマスキングされているベクトルエレメントを予め定められた値に設定する手順を実行させるためのものであり
    nは、実行される前記ベクトル拡張命令に応じて変化する、プログラム。
  31. 前記予め定められた値はゼロである、請求項30に記載のプログラム。
  32. 前記ソース引数は、ソースベクトルレジスタを特定する、請求項30または31に記載のプログラム。
  33. 前記ソース引数は、メモリ内のソースベクトル位置を特定する、請求項30または31に記載のプログラム。
  34. 記ベクトル拡張命令が各ベクトルエレメントのサイズが32ビットであるベクトルを拡張するためのものである場合、nは、4、8、および16からなる群から選択された値である、請求項30から33のいずれか一項に記載のプログラム。
  35. 記ベクトル拡張命令が各ベクトルエレメントのサイズが64ビットであるベクトルを拡張するためのものである場合、nは、2、4、および8からなる群から選択された値である、請求項30から33のいずれか一項に記載のプログラム。
  36. プログラムであって、
    n個のベクトルエレメントを保持するターゲットベクトルを特定するターゲット引数と、n個の関連する条件付きマスクエレメントを保持するマスクレジスタを特定するマスク引数と、n個のベクトルエレメントを保持するソースベクトルとしてカウントベクトルを特定するソース引数とを有するベクトル拡張命令を備え、
    前記プログラムは、プロセッサに、
    前記n個のベクトルエレメントを有する前記カウントベクトルを設定する手順であって、前記カウントベクトル内の互いに異なる各ベクトルエレメントはそれぞれ、互いに値の異なるn個のカウント値のいずれかに設定されるものであり、前記互いに値の異なるn個のカウント値は、前記カウントベクトル内において、値の大小順に設定されるものである、前記カウントベクトルを設定する手順と、
    決定ベクトルを取得する手順と、
    前記決定ベクトルに従って前記条件付きマスクエレメントを生成する手順と、
    前記マスクレジスタに前記条件付きマスクエレメントを格納する手順と、を実行させるためのものであり
    前記ベクトル拡張命令は、前記プロセッサに、
    前記ソースベクトルの連続するベクトルエレメントのデータを、前記ターゲットベクトルのマスキングされていないベクトルエレメントにコピーする手順を実行させるためのものであり
    nは、実行される前記ベクトル拡張命令に応じて変化する、プログラム。
  37. 前記ソース引数は、ソースベクトルレジスタを特定する、請求項36に記載のプログラム。
  38. 前記ターゲット引数は、ターゲットベクトルレジスタを特定する、請求項37に記載のプログラム。
  39. 実行可能な前記ベクトル拡張命令は、プロセッサに、さらに、前記ターゲットベクトルのマスキングされているベクトルエレメントをゼロの値に設定する手順を実行させる、請求項38に記載のプログラム。
  40. 前記データは、前記ターゲットベクトルのいずれのマスキングされているベクトルエレメントも修正することなく、前記ターゲットベクトルのマスキングされていないベクトルエレメントにコピーされる、請求項37又は38に記載のプログラム。
  41. 前記ターゲット引数は、メモリ内のターゲットベクトル位置を特定する、請求項36又は37に記載のプログラム。
  42. 前記ソース引数は、メモリ内のソースベクトル位置を特定する、請求項36に記載のプログラム。
  43. 個の連続したベクトルエレメントを有するカウントベクトルを設定する段階であって、前記カウントベクトル内の互いに異なる各ベクトルエレメントはそれぞれ、互いに値の異なるn個のカウント値のいずれかに設定されるものであり、互いに値の異なるn個のカウント値は、前記カウントベクトル内において、値の大小順に設定されるものである、前記カウントベクトルを設定する段階と、
    決定ベクトルを取得する段階と、
    前記決定ベクトルに従ってベクトルマスクを生成する段階と、
    件マスクレジスタに前記ベクトルマスクを格納する段階と、
    ソースベクトルとしてカウントベクトルを特定するためのソースパラメータと、前記条件マスクレジスタを特定するためのマスクパラメータと、デスティネーションベクトルを特定するためのデスティネーションパラメータとをもつプロセッサ命令を受信する段階であって、前記ソースパラメータと前記マスクパラメータと前記デスティネーションパラメータとにより特定されるベクトルはいずれも、前記n個の連続したベクトルエレメントを保持するものである、前記プロセッサ命令を受信する段階と、
    前記プロセッサ命令の受信に呼応して、データを、特定された前記デスティネーションベクトルのマスキングされているベクトルエレメントにコピーすることなく、前記ソースベクトルの連続したベクトルエレメントのデータを、特定された前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーする段階と
    を備え、
    前記ソースパラメータと前記デスティネーションパラメータにより特定されるベクトルのそれぞれに含まれる、前記n個の連続したベクトルエレメントのそれぞれは、mバイトの同じ可変パーティションサイズを有し、
    nは、受信される前記プロセッサ命令に応じて変化する、コンピュータ実装される方法。
  44. 前記ソースパラメータは、ソースベクトルレジスタを特定する、請求項43に記載の方法。
  45. 前記デスティネーションパラメータは、デスティネーションベクトルレジスタを特定する、請求項44に記載の方法。
  46. 前記データは、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされ、前記デスティネーションベクトルのマスキングされているベクトルエレメントはいずれもゼロの値に設定される、請求項45に記載の方法。
  47. 前記データは、前記デスティネーションベクトルのいずれのマスキングされているベクトルエレメントも修正することなく、前記デスティネーションベクトルのマスキングされていないベクトルエレメントにコピーされる、請求項44又は45に記載の方法。
  48. 前記デスティネーションパラメータは、メモリ内に配置されているデスティネーションベクトル部分を特定する、請求項43又は44に記載の方法。
  49. 前記ソースパラメータは、メモリ内に配置されているソースベクトル部分を特定する、請求項43に記載の方法。
JP2013254939A 2012-12-31 2013-12-10 条件付きループをベクトル化する命令及び論理 Active JP5795787B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/731,809 2012-12-31
US13/731,809 US9501276B2 (en) 2012-12-31 2012-12-31 Instructions and logic to vectorize conditional loops

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2015160209A Division JP6207095B2 (ja) 2012-12-31 2015-08-14 条件付きループをベクトル化する命令及び論理

Publications (2)

Publication Number Publication Date
JP2014130580A JP2014130580A (ja) 2014-07-10
JP5795787B2 true JP5795787B2 (ja) 2015-10-14

Family

ID=50114803

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2013254939A Active JP5795787B2 (ja) 2012-12-31 2013-12-10 条件付きループをベクトル化する命令及び論理
JP2015160209A Active JP6207095B2 (ja) 2012-12-31 2015-08-14 条件付きループをベクトル化する命令及び論理

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2015160209A Active JP6207095B2 (ja) 2012-12-31 2015-08-14 条件付きループをベクトル化する命令及び論理

Country Status (7)

Country Link
US (2) US9501276B2 (ja)
JP (2) JP5795787B2 (ja)
KR (3) KR101592074B1 (ja)
CN (2) CN103970509B (ja)
BR (1) BR102013032654A2 (ja)
DE (1) DE102013021221A1 (ja)
GB (1) GB2511198B (ja)

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014137327A1 (en) * 2013-03-05 2014-09-12 Intel Corporation Analyzing potential benefits of vectorization
GB2519108A (en) 2013-10-09 2015-04-15 Advanced Risc Mach Ltd A data processing apparatus and method for controlling performance of speculative vector operations
GB2519107B (en) * 2013-10-09 2020-05-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing speculative vector access operations
KR101826707B1 (ko) * 2014-03-27 2018-02-07 인텔 코포레이션 마스킹된 결과 요소들로의 전파를 이용하여 연속 소스 요소들을 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
EP3123300A1 (en) * 2014-03-28 2017-02-01 Intel Corporation Processors, methods, systems, and instructions to store source elements to corresponding unmasked result elements with propagation to masked result elements
US10013253B2 (en) * 2014-12-23 2018-07-03 Intel Corporation Method and apparatus for performing a vector bit reversal
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
JP6492943B2 (ja) 2015-05-07 2019-04-03 富士通株式会社 計算機、コンパイル方法、コンパイルプログラム、およびパイプライン処理プログラム
US9875213B2 (en) * 2015-06-26 2018-01-23 Intel Corporation Methods, apparatus, instructions and logic to provide vector packed histogram functionality
US10509726B2 (en) 2015-12-20 2019-12-17 Intel Corporation Instructions and logic for load-indices-and-prefetch-scatters operations
US20170177359A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Scatter Operations
US20170177348A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instruction and Logic for Compression and Rotation
US20170177363A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Instructions and Logic for Load-Indices-and-Gather Operations
TWI724066B (zh) * 2015-12-24 2021-04-11 美商英特爾股份有限公司 分散縮減指令
CN108475192B (zh) 2015-12-24 2023-06-02 英特尔公司 分散减少指令
CN105677298B (zh) * 2015-12-30 2018-03-27 李朝波 一种将计算机指令中立即数扩展的方法和装置
JP2017126307A (ja) * 2016-01-12 2017-07-20 正仁 櫨田 コンピューターのcpuの汎用化法
US11204764B2 (en) 2016-03-31 2021-12-21 Intel Corporation Processors, methods, systems, and instructions to Partition a source packed data into lanes
JP6666554B2 (ja) * 2016-05-23 2020-03-18 富士通株式会社 情報処理装置、変換プログラム、及び変換方法
US10466967B2 (en) * 2016-07-29 2019-11-05 Qualcomm Incorporated System and method for piecewise linear approximation
GB2553783B (en) * 2016-09-13 2020-11-04 Advanced Risc Mach Ltd Vector multiply-add instruction
KR102659495B1 (ko) * 2016-12-02 2024-04-22 삼성전자주식회사 벡터 프로세서 및 그 제어 방법
US10789069B2 (en) 2017-03-03 2020-09-29 International Business Machines Corporation Dynamically selecting version of instruction to be executed
US10613862B2 (en) 2017-03-03 2020-04-07 International Business Machines Corporation String sequence operations with arbitrary terminators
US10324716B2 (en) 2017-03-03 2019-06-18 International Business Machines Corporation Selecting processing based on expected value of selected character
US10564965B2 (en) 2017-03-03 2020-02-18 International Business Machines Corporation Compare string processing via inline decode-based micro-operations expansion
US10255068B2 (en) 2017-03-03 2019-04-09 International Business Machines Corporation Dynamically selecting a memory boundary to be used in performing operations
US10620956B2 (en) 2017-03-03 2020-04-14 International Business Machines Corporation Search string processing via inline decode-based micro-operations expansion
US10564967B2 (en) 2017-03-03 2020-02-18 International Business Machines Corporation Move string processing via inline decode-based micro-operations expansion
US10817293B2 (en) * 2017-04-28 2020-10-27 Tenstorrent Inc. Processing core with metadata actuated conditional graph execution
CN109213527A (zh) * 2017-06-30 2019-01-15 超威半导体公司 具有重叠执行的流处理器
US11157287B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system with variable latency memory access
US11409692B2 (en) 2017-07-24 2022-08-09 Tesla, Inc. Vector computational unit
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
US10671349B2 (en) 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
US11157441B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
CN111160541B (zh) * 2017-12-14 2023-05-19 中科寒武纪科技股份有限公司 集成电路芯片装置及相关产品
JP6974722B2 (ja) * 2018-01-24 2021-12-01 富士通株式会社 コンパイラプログラム、コンパイル方法及びコンパイルする情報処理装置
US11561791B2 (en) 2018-02-01 2023-01-24 Tesla, Inc. Vector computational unit receiving data elements in parallel from a last row of a computational array
CN108845828B (zh) * 2018-05-29 2021-01-08 深圳市国微电子有限公司 一种协处理器、矩阵运算加速方法及系统
US11347653B2 (en) * 2018-08-31 2022-05-31 Nyriad, Inc. Persistent storage device management
EP3853717A4 (en) 2018-09-18 2022-06-15 Optimum Semiconductor Technologies, Inc. SYSTEM AND METHOD FOR IMPLEMENTING HIDDEN VECTOR INSTRUCTIONS
CN111767204B (zh) * 2019-04-02 2024-05-28 杭州海康威视数字技术股份有限公司 溢出风险检测方法、装置及设备
CN111813447B (zh) * 2019-04-12 2022-11-08 杭州中天微系统有限公司 一种数据拼接指令的处理方法和处理装置
CN112083954A (zh) * 2019-06-13 2020-12-15 华夏芯(北京)通用处理器技术有限公司 一种gpu中显式独立掩码寄存器的掩码操作方法
CN111314075B (zh) 2020-02-27 2021-07-16 华为技术有限公司 一种基于运算装置的汉明重量计算方法
CN112230995B (zh) * 2020-10-13 2024-04-09 广东省新一代通信与网络创新研究院 一种指令的生成方法、装置以及电子设备
CN112596770B (zh) * 2020-12-24 2023-08-18 潍柴动力股份有限公司 一种数据处理方法、装置、电子设备和存储介质
JP2023029120A (ja) 2021-08-20 2023-03-03 富士通株式会社 命令変換プログラム、命令変換方法、および命令変換装置
CN115951936B (zh) * 2023-01-17 2023-05-26 上海燧原科技有限公司 向量化编译程序的芯片适配方法、装置、设备及介质

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57209570A (en) 1981-06-19 1982-12-22 Fujitsu Ltd Vector processing device
JPS58214963A (ja) 1982-06-09 1983-12-14 Hitachi Ltd ベクトル処理装置
JPS6015771A (ja) 1983-07-08 1985-01-26 Hitachi Ltd ベクトルプロセッサ
JPS62276668A (ja) 1985-07-31 1987-12-01 Nec Corp ベクトルマスク演算制御ユニツト
JPH0731669B2 (ja) 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
JP2607689B2 (ja) 1989-07-10 1997-05-07 株式会社日立製作所 ベクトル処理装置
US5206822A (en) 1991-11-15 1993-04-27 Regents Of The University Of California Method and apparatus for optimized processing of sparse matrices
JP2665111B2 (ja) * 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
JPH06230960A (ja) 1993-01-29 1994-08-19 Mitsubishi Electric Corp データ処理回路
US5680338A (en) 1995-01-04 1997-10-21 International Business Machines Corporation Method and system for vector processing utilizing selected vector elements
US5887183A (en) 1995-01-04 1999-03-23 International Business Machines Corporation Method and system in a data processing system for loading and storing vectors in a plurality of modes
US5812147A (en) 1996-09-20 1998-09-22 Silicon Graphics, Inc. Instruction methods for performing data formatting while moving data between memory and a vector register file
US5832288A (en) 1996-10-18 1998-11-03 Samsung Electronics Co., Ltd. Element-select mechanism for a vector processor
US7272703B2 (en) 1997-08-01 2007-09-18 Micron Technology, Inc. Program controlled embedded-DRAM-DSP architecture and methods
US5933650A (en) 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US7133040B1 (en) 1998-03-31 2006-11-07 Intel Corporation System and method for performing an insert-extract instruction
US6308250B1 (en) 1998-06-23 2001-10-23 Silicon Graphics, Inc. Method and apparatus for processing a set of data values with plural processing units mask bits generated by other processing units
US7932911B2 (en) * 1998-08-24 2011-04-26 Microunity Systems Engineering, Inc. Processor for executing switch and translate instructions requiring wide operands
US6269435B1 (en) 1998-09-14 2001-07-31 The Board Of Trustees Of The Leland Stanford Junior University System and method for implementing conditional vector operations in which an input vector containing multiple operands to be used in conditional operations is divided into two or more output vectors based on a condition vector
US7100026B2 (en) 2001-05-30 2006-08-29 The Massachusetts Institute Of Technology System and method for performing efficient conditional vector operations for data parallel architectures involving both input and conditional vector values
US7529907B2 (en) 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
EP1197875B1 (en) * 1998-12-16 2006-03-22 Matsushita Electric Industrial Co., Ltd. Conditional vector operation method and device thereof
US6591361B1 (en) 1999-12-28 2003-07-08 International Business Machines Corporation Method and apparatus for converting data into different ordinal types
CA2406679A1 (en) 2000-01-18 2001-07-26 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
US7093102B1 (en) 2000-03-29 2006-08-15 Intel Corporation Code sequence for vector gather and scatter
US6701424B1 (en) 2000-04-07 2004-03-02 Nintendo Co., Ltd. Method and apparatus for efficient loading and storing of vectors
US6857061B1 (en) 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US6807622B1 (en) 2000-08-09 2004-10-19 Advanced Micro Devices, Inc. Processor which overrides default operand size for implicit stack pointer references and near branches
US6788303B2 (en) * 2001-02-27 2004-09-07 3Dlabs Inc., Ltd Vector instruction set
US6697064B1 (en) 2001-06-08 2004-02-24 Nvidia Corporation System, method and computer program product for matrix tracking during vertex processing in a graphics pipeline
US6922716B2 (en) 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US7539714B2 (en) * 2003-06-30 2009-05-26 Intel Corporation Method, apparatus, and instruction for performing a sign operation that multiplies
US20060101256A1 (en) 2004-10-20 2006-05-11 Dwyer Michael K Looping instructions for a single instruction, multiple data execution engine
US7404065B2 (en) 2005-12-21 2008-07-22 Intel Corporation Flow optimization and prediction for VSSE memory operations
US7600104B2 (en) 2006-08-15 2009-10-06 Peter Neumann Method and system for parallel vector data processing of vector data having a number of data elements including a defined first bit-length
US8191056B2 (en) 2006-10-13 2012-05-29 International Business Machines Corporation Sparse vectorization without hardware gather/scatter
US7743231B2 (en) 2007-02-27 2010-06-22 International Business Machines Corporation Fast sparse list walker
US20090172348A1 (en) * 2007-12-26 2009-07-02 Robert Cavin Methods, apparatus, and instructions for processing vector data
US8667250B2 (en) 2007-12-26 2014-03-04 Intel Corporation Methods, apparatus, and instructions for converting vector data
US8458684B2 (en) * 2009-08-19 2013-06-04 International Business Machines Corporation Insertion of operation-and-indicate instructions for optimized SIMD code
US20120254592A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
JP5382467B2 (ja) 2011-04-20 2014-01-08 アイシン・エィ・ダブリュ株式会社 車両用駆動装置
CN103813923A (zh) 2011-09-20 2014-05-21 丰田自动车株式会社 车辆用驱动装置
US20140095847A1 (en) * 2012-09-28 2014-04-03 Doron Orenstein Instruction and highly efficient micro-architecture to enable instant context switch for user-level threading
US9563425B2 (en) * 2012-11-28 2017-02-07 Intel Corporation Instruction and logic to provide pushing buffer copy and store functionality

Also Published As

Publication number Publication date
JP6207095B2 (ja) 2017-10-04
US9696993B2 (en) 2017-07-04
KR101592074B1 (ko) 2016-02-05
KR20160017019A (ko) 2016-02-15
US20140189321A1 (en) 2014-07-03
CN107992330A (zh) 2018-05-04
KR101790428B1 (ko) 2017-10-25
CN103970509A (zh) 2014-08-06
JP2014130580A (ja) 2014-07-10
KR20150081238A (ko) 2015-07-13
KR20140088025A (ko) 2014-07-09
US20170052785A1 (en) 2017-02-23
CN107992330B (zh) 2022-02-22
GB201323062D0 (en) 2014-02-12
DE102013021221A1 (de) 2014-07-03
GB2511198A (en) 2014-08-27
US9501276B2 (en) 2016-11-22
BR102013032654A2 (pt) 2016-06-28
JP2016015152A (ja) 2016-01-28
GB2511198B (en) 2016-06-01
CN103970509B (zh) 2018-01-05

Similar Documents

Publication Publication Date Title
JP6207095B2 (ja) 条件付きループをベクトル化する命令及び論理
US10459877B2 (en) Instruction and logic to provide vector compress and rotate functionality
KR101767025B1 (ko) 벡터 어드레스 충돌 검출 기능을 제공하기 위한 방법, 장치, 명령어들 및 로직
CN107092465B (zh) 用于提供向量混合和置换功能的指令和逻辑
KR102512315B1 (ko) 원자적 범위 연산들을 제공하기 위한 명령어들 및 로직
JP5930558B2 (ja) ストライド機能及びマスク機能を有するベクトルロード及びベクトルストアを提供する命令及びロジック
WO2014084919A1 (en) Instruction and logic to provide pushing buffer copy and store functionality
JP2016527650A (ja) ベクトルポピュレーションカウント機能性を提供する方法、装置、命令、およびロジック
JP2014526757A (ja) ベクトル散乱演算機能及びベクトル収集演算機能を提供する命令及びロジック
JP2014526758A (ja) ストライド機能を有するベクトルロード演算/ストア演算を提供する命令及びロジック
JP2016529617A (ja) ゲノム配列決定および配列比較のためのポピュレーションカウント機能性を提供する方法、装置、命令、およびロジック
WO2017105717A1 (en) Instructions and logic for get-multiple-vector-elements operations
CN108292271B (zh) 用于向量置换的指令和逻辑
WO2017105716A1 (en) Instructions and logic for even and odd vector get operations
TW201732555A (zh) 用於向量位元欄壓縮及擴展的指令及邏輯
JP6222859B2 (ja) ストライド機能及びマスク機能を有するベクトルロード及びベクトルストアを提供する命令及びロジック
JP6231155B2 (ja) ベクトル散乱演算機能及びベクトル収集演算機能を提供する命令及びロジック
US20170177354A1 (en) Instructions and Logic for Vector-Based Bit Manipulation

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141208

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141224

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150319

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150331

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150602

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

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20150715

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150814

R150 Certificate of patent or registration of utility model

Ref document number: 5795787

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

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