JP6463633B2 - ベクトルアクセス命令に応答してデータにアクセスするためのベクトルデータアクセスユニット及びデータ処理装置 - Google Patents

ベクトルアクセス命令に応答してデータにアクセスするためのベクトルデータアクセスユニット及びデータ処理装置 Download PDF

Info

Publication number
JP6463633B2
JP6463633B2 JP2014532473A JP2014532473A JP6463633B2 JP 6463633 B2 JP6463633 B2 JP 6463633B2 JP 2014532473 A JP2014532473 A JP 2014532473A JP 2014532473 A JP2014532473 A JP 2014532473A JP 6463633 B2 JP6463633 B2 JP 6463633B2
Authority
JP
Japan
Prior art keywords
data access
instruction
vector
vector data
access request
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
JP2014532473A
Other languages
English (en)
Other versions
JP2014532221A (ja
Inventor
デイビッド リード、アラステア
デイビッド リード、アラステア
Original Assignee
エイアールエム リミテッド
エイアールエム リミテッド
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 エイアールエム リミテッド, エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2014532221A publication Critical patent/JP2014532221A/ja
Application granted granted Critical
Publication of JP6463633B2 publication Critical patent/JP6463633B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/35Indirect addressing
    • 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は、データ処理の分野に関し、さらに詳細には、複数のデータ格納器位置をアクセスするためのベクトル命令に関する。
データ処理装置の性能を改善するための1つの既知の技術はベクトル演算の実行をサポートする回路を提供することである。ベクトル演算は少なくとも1つのベクトルオペランドに対して実行され、ここで各ベクトルオペランドは複数のオペランド要素を含む。ベクトル演算の実行はベクトルオペランド(単数または複数)内の様々なオペランド要素にわたって反復的に演算を適用することを含む。
ベクトル演算の実行をサポートする通常のデータ処理システムでは、ベクトルレジスタバンクがベクトルオペランドを格納するために提供されるであろう。したがって、例えば、ベクトルレジスタバンク内の各ベクトルレジスタは複数のオペランド要素を含むベクトルオペランドを格納し得る。
高性能の実装では、必要とされるベクトル演算を、ベクトルオペランド内の様々なオペランド要素に対して並行的に実行できるベクトル処理回路(しばしばSIMD(Single Instruction Multiple Data)処理回路と呼称される)を提供することが周知である。代替的な実施形態において、スカラー処理回路もベクトル演算の実行に用いることはできるが、この場合では、ベクトル演算は、各反復が異なるベクトルオペランドのオペランド要素に対して実行される状態で、スカラー処理回路を通して演算を反復的に実行することにより実装される。いくつかのベクトル要素が一緒に処理され得る中間的実装が存在することに注意すべきである。
ベクトルデータアクセス命令はそれぞれ複数のデータアクセスを命令する。一般に、処理装置はベクトルアクセス命令により指定されるデータアクセスの全部を、単一サイクル内で互いに並行して、必ずしも実行できるとはかぎらない。アクセスは一般に数サイクルを必要とする。複数のベクトルデータアクセス命令が実行される場合、アクセス速度は、異なるベクトルデータアクセス命令からのデータアクセスが互いに対してインターリービングされるならば、増加され得る。これは、関連するアドレスに対する演算を合併する機会(この機会は係るインターリービングにより導入されるものである)と、使い的な並列性を見出す可能性と、に起因するものである。
いくつかの場合では、実行されるアクセスは互いに対して完全に独立的であり、それらのアクセスの間のインターリービングが可能となり、その結果、アクセスの速度が増加され得る。他の場合では、アクセスが互いに対して独立的ではなく、したがって命令ストリームの順序で実行するよう制約され得る。
図1は、先行技術に係る、アドレスa0〜a7にアクセするためのベクトルアクセス命令と、それに引き続きアドレスb0〜b7にアクセスするためのベクトルアクセス命令と、を示す。インターリービングが許可されず2つのデータアクセス要求が1クロックサイクル内で発行され得るシステムにおいてこれらの命令が処理される場合では、データアクセス要求b7は命令が受け取られて7クロックサイクル後に発行されるであろう。
スカラー演算もサポートするデータ処理装置内でのベクトル演算の実行をサポートするための改善された技術を提供することが望まれるであろう。
第1の態様から観ると、本発明は、デコードされたベクトルデータアクセス命令に応答して、データ格納器内に格納されたデータにアクセスするためのベクトルデータアクセスユニットを提供する。前記ベクトルデータアクセス命令のそれぞれは複数の要素を特定し、前記要素のそれぞれは実行されるデータアクセスを示し、前記複数の要素は、前記対応するデータアクセスが、前記要素により示されるデータアクセス要求を前記データ格納器に発行するためのデータアクセス順序付け回路を備える、前記少なくとも2つのベクトルデータアクセス命令のそれぞれについて、前記複数の要素内の前記要素の位置から、前記複数の要素により示される前記複数のデータアクセスのうちのいずれが前記ベクトルデータアクセス命令に対して実行される次のデータアクセスであるかを判定し、前記データアクセスは前記命令された順序で実行されることと、前記ベクトルデータアクセス命令のそれぞれについて、前記次のデータアクセスを示す要素を判定することと、前記ベクトルデータアクセス命令のうちの後の方の前記複数の要素内の前記次のデータアクセスを示す前記要素の数値位置と、前の方のベクトルアクセスデータ命令の前記複数の要素内の前記次のデータアクセスを示す前記要素の数値位置と、の間の差異が所定値よりも小さいという制約の支配下で、前記少なくとも2つのベクトルデータ命令が受け取られた順序と、それぞれの複数の要素内で互いに対する前記次のデータアクセスを示す前記要素の前記位置と、に応じて、前記データ格納器に発行される次のデータアクセスとして前記次のデータアクセスのうちの1つを選択することと、を行うための、前記ベクトルデータアクセスユニット内で実行されるという前記ベクトルデータアクセス命令内で1つの順序に並ぶ。前記データアクセス順序付け回路は、少なくとも2つのデコードされたデータアクセス命令を受け取ることに応答して構成され、前記少なくとも2つのデコードされたベクトルデータアクセス命令のうちの前の方は前記少なくとも2つのデコードされたベクトル命令の後の方の前に受け取られ、前記少なくとも2つのデコードされたベクトルデータアクセス命令のうちの1つは書き込み命令であり、前記少なくとも2つのデコードされたベクトルデータアクセス命令からのデータアクセスが限定的な程度までインターリービングされることができることを示す。
本発明は、実行される複数のデータアクセスを特定するベクトル命令が、実行するにあたり数サイクルを必要とし得ることを、および異なるベクトル命令内のアクセスのインターリービングが実行できるならば有利であることを、認識する。例えば、一般に、格納の前にロードを実行することは有利である。なぜなら、プロセッサは、多くの場合、後続の動作が実行可能となる前に、ロードの実行を必要とするためである。したがって、ロードのレイテンシを低減することは、多くの場合、格納のレイテンシを低減することよりも、性能に対して大きい影響を及ぼすであろう。
一方、命令をインターリービングする前に、インターリービングの実行が安全であるかどうかを知る必要がある。これは、一般に、同一のアドレスが順序変更されるアクセス要求のいずれによってもアクセスされないことをチェックするために、実行されるアクセスのアドレス比較を必要とする。アドレスは一般にかなり長く、したがって、これらのアドレス比較は実行するにあたりコストが大きくなってしまう。さらに、ベクトル演算に対するアドレス比較の個数は大きくなる。なぜなら、単一のベクトルメモリ演算は、8つの異なるアドレスを用い得るためである。したがって、4つのベクトルメモリアクセスをバッファリング/順序変更する能力を有するベクトルロード/格納ユニットは32のアドレスをバッファリング/順序変更することが必要となるであろう。本発明は、通常は安全確保のために必要となる多数のアドレス比較を実行することなく、ベクトルメモリアクセスの顕著な順序変更が可能であり得ることを認識する。特に、本発明は、正しくベクトル化されたループではデータアクセスにはRAW(書き込み後の読み出し)およびWAW(書き込み後の書き込み)の危険因子が存在せず、したがって、データアクセスの安全なインターリービングを可能とするために実行する必要があるのはアドレス比較の1部分のみであることを認識する。
したがって、本発明は、前記ベクトルデータアクセス命令のうちの後の方の前記複数の要素内の次の前記データアクセスを示す前記要素の数値位置と、前の方のベクトルアクセスデータ命令の前記複数の要素内の前記次のデータアクセスを示す前記要素の数値位置と、の間の差異が所定値よりも小さいならば、換言すると、後の方のベクトルデータアクセス命令からのアクセスの進行が前の方のベクトルデータアクセス命令の進行により制約されるならば、インターリービングを可能にする。知る必要があるのはこれら2つの数値位置の相対値であることが注意されるべきであり、これは減算により、または任意の他の比較手段により、判定されこることができる。
いくつかの実施形態において、前記制約は、前記前の方のベクトルデータアクセス命令からの要素により示されるデータアクセス要求が、前記後の方のベクトルデータアクセス命令における前記複数の要素の対応する位置に配置された要素により示されるデータアクセス要求の後に発行されないこと、をさらに含む。
この制約は、後の方のベクトルデータアクセス命令が、現在のところ実際上、前の方のベクトルデータアクセス命令を部分的に追い越すことができること、であってもよい。これは、1つの命令により命令された、いくつかの要素アクセスが、後続の命令により命令された要素アクセスの前に、または係る要素アクセスと並列して、実行され得ることを意味する。
いくつかの実施形態において、前記データアクセス順序付け回路は、前記制約が満足される場合、前記前の方のベクトルデータアクセス命令からの前記次のデータアクセス要求に優先して、前記後の方のベクトルデータアクセス命令からの前記発行される次のデータアクセス要求を、前記発行される次のデータアクセス要求として選択するよう構成される。
その制約が満足される場合、順序付け回路は、前の方の命令からのデータアクセス要求に優先して、後の方の命令からのデータアクセス要求を選択し得る。これは、危険因子を生じさせることなく、インターリービングを増加させる。
いくつかの実施形態において、前記データアクセス順序付け回路は、同一のクロックサイクルにおいて互いに並列して少なくとも2つのデータアクセス要求を発行するよう構成される。前記データアクセス順序付け回路は、並列して発行するために、前記次のアクセスと少なくとも1つのさらなるデータアクセスを選択するよう構成され、前記少なくとも1つのさらなるデータアクセス要求は、
前記ベクトルデータアクセス命令において前記次のアクセスを示す前記要素に後続する要素により示される少なくとも1つのデータアクセスと、
前記次のアクセスを示す前記要素を含まない前記ベクトルデータアクセス命令の1つからの前記次のアクセスのうちの少なくとも1つと、
のうちの少なくとも1つであり、
前記少なくとも1つのさらなるデータアクセスは、前記次のデータが選択されるのと同一の制約に応じて選択される。
データアクセス要求が並列して選択されることができる場合、同一の制約が、発行される2つのデータアクセス要求を選択するために用いられることができる。
いくつかの実施形態において、アクセスされる前記データ格納器は、複数のバンクメモリのうちの1つのバンクを含む。
データ格納器は複数のバンクメモリのうちの1つのバンクであり得る。係る場合において、メモリ内のバンクは、それぞれがそれぞれの制約を有する個々の独立的な格納ユニットとして取り扱われることができる。そのことが成り立つ場合、メモリアクセスは並列して進行することができ、その結果、アクセスを異なるバンクへと分割および再組み合わせすることのオーバーヘッドは確かに生じるが、処理能力の向上が可能となる。したがって、いくつかの実施形態において、複数のバンクメモリを単一のデータ格納器として取り扱うことは有利であり得るが、一方で他の実施形態においては、各バンクが独立的に取り扱われる。
上述のように、いくつかの実施形態において、前記データ格納器は複数バンクのメモリを含み、各バンクは他のバンクから独立的であり、前記データアクセス順序付け回路は、前記少なくとも1つのさらなるデータアクセスを選択するとき、異なるバンクに対するものである同一のクロックサイクルにおいて選択されるアクセスの間のアクセスに前記制約を課さないよう構成される。
バンクを独立的に取り扱う場合は、制約は同一のバンクへのアクセスに対しては依然として課されるが、異なるバンクの間のアクセスに対する制約は課されない。
いくつかの実施形態において、ベクトルデータアクセスユニットは、それぞれが前記少なくとも2つのベクトルデータアクセス命令のうちのそれぞれの1つを受け取るよう構成された、互いに対して並列に配列された少なくとも2つのベクトルデータアクセスモジュールを備える。なお、前記データアクセス順序付け回路は、
前記それぞれのベクトルデータアクセス命令の前記次のデータアクセスを示す前記要素の前記位置の表示を格納するための前記ベクトルでたあるモジュールのそれぞれにおけるカウンタと、
前記カウンタの値を比較するための比較回路と、
前記次のデータアクセス要求を発行するための前記ベクトルデータアクセスモジュールのそれぞれに関連付けられた発行回路と、
を備える。
なお、前記データアクセス回路は、前記次のデータアクセス要求が発行されると前記制約が満足されないことを示す前記比較回路に応答して、前記モジュールによる前記次のデータアクセス要求の発行を妨げる信号を、前記ベクトルデータアクセスモジュールのうちの一方の前記発行回路に送信するよう構成される。
並列して配列されたベクトルデータアクセスモジュールが存在する場合には、それぞれのベクトルデータアクセスモジュールは、ベクトル内の次のデータアクセスの要素の位置を示すカウンタと、これらのカウンタを比較するための比較回路と、を有し得る。発行される次のデータアクセス要求は、比較の結果に応じて発行される。これにより、要求される制約が満足されることが保証される。
いくつかの実施形態において、ベクトルデータアクセスユニットは、それぞれが前記少なくとも2つのベクトルデータアクセス命令のうちのそれぞれの1つを受け取るよう構成された、互いに対して並列に配列された少なくとも2つのベクトルデータアクセスモジュールを備える。なお、前記データ格納器は複数のキャッシュライン備えるキャッシュを備え、前記キャッシュラインのそれぞれは複数のデータ項目を格納し、前記データアクセス順序付け回路は、
同一のクロックサイクルにおいて実行される前記ベクトルデータアクセスモジュールからのデータアクセス要求が同一のキャッシュラインに対するものであり、それらが同一のデータアクセスとして実行されるようそれらが前記データアクセスを組み合わせることを判定することに応答するものであるかどうかを判定するための検出回路を備える。
キャッシュをアクセスするときに同一のキャッシュラインが異なるベクトルデータアクセスモジュールからのアクセス要求によりアクセスされるかどうかを判定する検出回路を有することは有利となるであろう。アクセスを有る程度までインターリービングする能力は、プログラムストリーム内で互いに近接して生じ、且つ組み合わされる同一のキャッシュラインに対するものである、いくつかのアクセス要求を許可し得る。キャッシュにアクセスすることは電力の面でコストが大きく、同一のキャッシュラインが2つのデータアクセス要求によりアクセスされるとき、これらのアクセスが組み合わされて単一のアクセスが形成されるならば、有利となるであろう。いくつかのアクセスパターンにおいては、キャッシュラインが後続のアクセス要求によりアクセスされ、それにより、アクセス要求をインターリービングする能力が、同一のキャッシュラインに対するアクセスを検出する検出回路と組み合わされて、いくつかの事例において、効率における顕著な改善を提供する可能性がある。
いくつかの実施形態において、前記少なくとも2つのベクトルデータアクセス命令は、ベクトルロード命令およびベクトル格納命令のうちの少なくとも2つを含み、前記ベクトルデータアクセスユニットは、
それぞれが複数のベクトルオペランドを含む、複数のベクトルを格納するためのベクトルレジスタ格納器であって、前記ベクトルのうちの少なくとも2つは、前記少なくとも2つのベクトルデータアクセス命令のそれぞれの1つにより示される前記複数のデータアクセスのデータ格納器位置を示す複数のアドレスを含む、ベクトルレジスタ格納器をさらに備える。
本発明の第2の態様は、処理される命令をフェッチするためのフェッチ回路と、前記命令をデコードするためのデコード回路と、前記デコードされた命令に応答して演算を実行するよう構成された処理回路と、ベクトルデータアクセス命令に応答して処理される前記データにアクセスするための本発明の第1の態様に係る前記ベクトルデータアクセスユニットと、を備えるデータを処理するためのデータ処理装置を提供する。
いくつかの実施形態において、限定的インターリービングが可能であり前記前の方のベクトルデータアクセス命令からのデータアクセスおよび後の方のベクトルデータアクセス命令からのデータアクセスがある程度までインターリービングされることができるという前記指示が、前記ベクトルデータアクセスユニットに提供されることを指示する命令に応答するよう、前記デコード回路は構成される。
限定的インターリービングがどこで可能であるかを示す命令に応答するよう構成されたデコード回路を有することは有利であろう。係る命令を有するならば、ベクトルデータアクセスユニットは、要素位置を比較するべきかどうかを、および制約が満足されるかどうかを、知ることができる。インターリービングが許可されない場合、係る比較は不必要であり、まったく利点がない。インターリービングが適切である命令ストリームの部分も存在し得、インターリービングが不適切である命令ストリームの部分も存在し得る。したがって、この命令は特に有利となることができる。
いくつかの実施形態において、限定的インターリービングが可能であることを示す前記命令は、ベクトルロード命令、ベクトル格納命令、限定的インターリービングスタート命令、限定的インターリービングフラグを設定するための命令、およびベクトル制御レジスタを設定するための命令のうちの少なくとも1つを含む。
限定的インターリービングを指示する命令は、これを示す特定的な命令であってもよく、またはそれは、ベクトルロード命令またはベクトル格納命令などの命令であってもよい。ベクトルロードおよびベクトル格納は、常にインターリービングされることができ、したがって、これらのうちの1つを検出することは、インターリービングが可能であり得ることを十分に示し得る。代替的に、いくつかの実施形態において、これを示す設定されるフラグが存在し、したがって、このフラグを設定するための、またはベクトル制御レジスタを設定するための命令は、インターリービングが現在可能であることを示す命令であり得る。
いくつかの実施形態において、限定的インターリービングが可能であることを示す前記命令は、前記限定的インターリービングスタート命令を含み、前記限定的インターリービングスタート命令はインターリービングの程度を示す前記所定値を含む。
限定的インターリービングが可能であることを示す命令が限定的インターリービングスタート命令である場合、この命令はインターリービングの程度を示す所定値を含み得る。命令ストリームのある区域は特定量のインターリービングを可能にする一方で、他の区域は異なる量を可能にし得るため、これは有用であり得る。命令内に所定値を有することは、異なる量のインターリービングがコードの異なる区域に対して実行されることを許可する。
いくつかの実施形態において、限定的インターリービングが、ベクトルデータアクセス命令からのデータアクセスが限定的程度までインターリービングされることができないという指示を、前記ベクトルデータアクセスユニットに提供ために許可されない指示する命令に応答するよう、前記デコード回路は構成される。
限定的インターリービングがもはや許可されないこと、および要素位置の比較がもはや適切ではないことを示す命令も存在し得る。
この命令は限定的インターリービングストップ命令であってもよく、またはそれはバックワード分岐命令であってもよい。
バックワード分岐命令は、インターリービングが不適切である場合にコードの1部分が入力されることを示す。したがって、このことが認識されると、さらなるインターリービングストップ命令を有する必要はない。
いくつかの実施形態において、データ処理装置はフラグデータ格納器をさらに備える。フラグデータ格納器は、前記前の方のベクトルデータアクセス命令および後の方のベクトルデータアクセス命令からのデータアクセスが限定的な程度までインターリービングされることができることを示すフラグ値を格納するためのものである。前記ベクトルデータアクセスユニットは前記フラグ値を検出するための検出器を備える。
上述のように、データアクセスがインターリービングされることができることを示すフラグ値を有することは適切であり得る。
係る場合、例外はこのフラグ値をクリアし得る。なぜなら、例外はコードの異なる部分が取られることを示すためである。コードのこの異なる部分においてデータアクセスをインターリービングすることはもはや不適切である場合もある。したがって、例外を取るとフラグをクリアすることは、演算が安全性を保持することを可能にするであろう。
本発明の第3の態様は、コンピュータプログラムをコンパイルする方法であって、
前記コンピュータプログラムを分析し、前記コンピュータプログラム内のループを特定し、前記ループ内のスカラー命令をベクトル命令に変換することであって、前記ベクトル命令はベクトルデータアクセス命令を含み、前記ベクトルデータアクセス命令のそれぞれは複数の要素を特定し、前記要素のそれぞれは実行されるデータアクセスを示すことと、
第1ベクトルデータアクセス命令および第2ベクトルデータアクセス命令からのデータアクセスの限定的インターリービングがデータエラーを生じさせない場合に、前記プログラム内における前記第1ベクトルデータアクセス命令および前記第2データベクトル命令を特定することと、
前記第1ベクトルデータアクセス命令の前に、前記第1ベクトルデータアクセス命令および前記第2ベクトルデータアクセス命令からのデータアクセスが限定的な程度までインターリービングされることができるという指示をベクトルデータアクセスユニットに提供する限定的インターリービングスタート命令を前記コンピュータプログラムに挿入することであって、
前記限定的な程度は、前記第2ベクトルデータアクセス命令の前記複数の要素内の前記要素の数値位置から前記第1データアクセス命令の次のデータアクセスを示す前記要素の数値位置から減算した値が所定値より小さい場合には、前記第2ベクトルデータアクセス命令からの要素により示される次のデータアクセスが発行され、係る減算した値が前記所定値よりも小さくない場合には、前記第1第1ベクトルデータアクセス命令からのデータアクセスが発行されることであることと、
前記コンピュータプログラムを、データ処理システム上での実行に好適なコードに変換することと、
を含む方法を提供する。
インターリービングが可能であるという指示はコンパイル段階でコードに挿入され得る。この段階で、コードは分析され、インターリービングが適切であることか判定され得る。係る場合において、コンパイラは、限定的インターリービングが実行できることをプロセッサに示すためにコードに挿入されることができる限定的インターリービングスタート命令を生成し得る。
いくつかの実施形態において、前記限定的インターリービングスタート命令は前記所定値を含む。
安全であるインターリービングの量はコードに依存し、したがって、コンパイラが、可能であるインターリービングの程度の指示を限定的インターリービングスタート命令に挿入することは適切であり得る。
いくつかの実施形態において、前記コンパイルの方法は、前記特定されたベクトルデータアクセス命令の後に限定的インターリービングストップ命令を挿入するステップをさらに含む。
コードをコンパイルするときのインターリービングスタート命令に関しては、インターリービングが適切である場所を判定し、必要に応じてストップ命令を挿入してもよい。
インターリービングされることができる第1ベクトルデータアクセス命令および第2ベクトルデータアクセス命令が1つのループ内にある場合、インターリービングスタート命令およびインターリービングストップ命令は、いくつかの場所に配置され得る。例えば、インターリービングスタート命令はループの前に、またはループ内に生成され得、インターリービングストップ命令はループ内またはループ外に生成され得る。
バックワード分岐がコンピュータプログラム内で特定される他の実施形態において、インターリービングをストップするべきであることを示すために、これらは処理システムにより理解され得る。その場合においてのみ、インターリービングスタート命令はコードに挿入され、バックワード分岐が前記インターリービング領域の終点において配置されるならばインターリービングストップ命令は挿入されない。
本発明の第4の態様によれば、コンピュータプログラムをコンパイルするためのコンパイラが提供される。このコンパイラは、前記コンピュータプログラムを分析し、前記コンピュータプログラム内のループを特定し、前記ループ内のスカラー命令をベクトル命令に変換するための分析回路を備える。なお前記ベクトル命令はベクトルデータアクセス命令を備え、前記ベクトルデータアクセス命令のそれぞれは複数の要素を特定し、前記要素のそれぞれは実行されるデータアクセスを示す。分析回路は、前記第1ベクトルデータアクセス命令からのおよび第2ベクトルデータアクセス命令からのデータアクセスの限定的インターリービングがデータエラーを生じさせない場合、前記プログラム内における第1ベクトルデータアクセス命令および第2データベクトル命令を特定する。このコンパイラは、限定的インターリービングスタート命令を生成し、前記第1ベクトルデータアクセス命令の前に前記限定的インターリービングスタート命令を前記コンピュータプログラムに挿入するための命令生成回路であって、前記限定的インターリービングスタート命令は、前記第1ベクトルデータアクセス命令および前記第2ベクトルデータアクセス命令からのデータアクセスが限定的な程度までインターリービングされることができるという指示をベクトルデータアクセスユニットに提供する、命令生成回路をさらに備える。なお、前記限定的な程度は、前記第2ベクトルデータアクセス命令の前記複数の要素内の前記要素の数値位置から前記第1データアクセス命令の次のデータアクセスを示す前記要素の数値位置を減算した値が所定値より小さい場合には、前記第2ベクトルデータアクセス命令からの要素により示される次のデータアクセスが発行され、係る減算した値が前記所定値よりも小さくない場合には、前記第1第1ベクトルデータアクセス命令からのデータアクセスが発行されることである。このコンパイラは、前記コンピュータプログラムを、データ処理システム上での実行に好適なコードに変換するための変換回路をさらに備える。
本発明の第5の態様によれば、少なくとも2つのベクトルデータアクセス命令と、前記ベクトルデータアクセス命令により特定されるデータアクセスが何らかの程度までインターリービングされることができるという指示と、に応答して、データ格納器にデータアクセス要求を発行する方法であって、前記ベクトルデータアクセス命令のそれぞれは、実行される複数の順次てきなデータアクセスをリストする方法が提供される。なお、この方法は、前記少なくとも2つのベクトルデータアクセス命令のそれぞれについて、前記複数の順次てきなデータアクセスのうちのいずれが実行される次のデータアクセスであるかを判定するステップと、前記実行される次のデータアクセスのそれぞれについて、前記他の次のデータアクセスに対する、前記ベクトルデータアクセス命令における前記複数の順次てきなデータアクセスの前記リスト内の前記次のデータアクセスの相対的位置を判定するステップと、前記前の方のベクトルデータアクセス命令および後の方のベクトルデータアクセス命令のうちの前の方からのデータアクセスが、前記前の方のベクトルデータアクセス命令および後の方のベクトルデータアクセス命令のうちの後の方の順次てきなアクセスの前記リストにおける対応する位置におけるアクセスの後で発行されないよう、前記相対的位置に応じて前記少なくとも2つのベクトルデータアクセス命令のいずれかから前記発行される次のデータアクセスのうちの1つを前記データ格納器に対する次のアクセスとして選択するステップと、を含む。
本発明の第6の態様によれば、限定的インターリービングスタート命令と後続の第1ベクトルデータアクセス命令および第2ベクトルデータアクセス命令とを含むコンピュータプログラムを非一時的な形態に格納するコンピュータプログラム製品であって、前記限定的インターリービングスタート命令は、データプロセッサにより実行されると、前記第1および第2後続のベクトルデータアクセス命令により特定されるデータアクセスの限定的インターリービング命令をスタートするよう前記前記データプロセッサを制御し、その結果、前記第1および第2ベクトルデータアクセス命令に応答して実行されるアクセスは限定的な程度までインターリービングされることができコンピュータプログラム製品が提供される。なお、前記限定的な程度は、前記第2ベクトルデータアクセス命令の前記複数の要素内の前記要素の数値位置から前記第1データアクセス命令の次のデータアクセスを示す前記要素の数値位置を減算した値が所定値より小さい場合には、前記第2ベクトルデータアクセス命令からの要素により示される次のデータアクセスが発行され、前記減算した値が前記所定値よりも小さくない場合には、前記第1第1ベクトルデータアクセス命令からのデータアクセスが発行されることである。
本発明の第7の態様によれば、本発明の第1の態様に係るデータ処理装置に対応するプログラム命令のための仮想機械実行環境を提供するようコンピュータを制御するコンピュータプログラムを非一時的な形態に格納するコンピュータプログラム製品が提供される。
本発明の、上述した、および他の、目的、特徴、および利点は、添付の図面と合わせて読まれるべき、例示的な実施形態に関する以下の詳細な説明から明らかになることであろう。
インターリービングが許可されないデュアルイシュー・プロセッサにおける2つのベクトル命令のデータアクセスに対するタイミングを示す図である。 本発明の1つの実施形態に係るデータ処理装置の1部分を示す図である。 本発明の1つの実施形態に係るベクトルロード格納ユニットを示す図である。 複数のメモリバンクに格納されたデータにアクセスするための、本発明の1つの実施形態に係る多重ベクトルロード/格納ユニットを示す図である。 本発明の1つの実施形態に係る、複数のメモリバンクにアクセスするための多重ベクトルロード格納ユニットを示す図である。 本発明の1つの実施形態に係るプログラムをコンパイルする方法におけるステップを示す図である。 本発明の1つの実施形態に係るコンパイラを示す図である。 本発明の1つの実施形態に係るいくつかのキャッシュアクセスの合体を可能にする多重ベクトル格納ユニットを示す図である。 合体が行われる図7の多重ベクトルロード格納ユニットからのデータアクセスを示す図である。 合体が命令間でおよび命令内で起こるデータアクセスを示す図である。 安全に、または非安全にインターリービングされた図1に示すベクトルアクセス命令を示す図である。 安全に、または非安全にインターリービングされた図1に示すベクトルアクセス命令を示す図である。 安全に、または非安全にインターリービングされた図1に示すベクトルアクセス命令を示す図である。 図1に示すベクトルアクセス命令の合体されたアクセスパターンを示す図である。 さらに合体されたアクセスパターンを示す図である。 バンクされたアクセスパターンを示す図である。 さらにバンクされたアクセスパターンを示す図である。 非安全なバンクされたアクセスパターンを示す図である。 安全なインターリービングされたバンクされたアクセスパターンを示す図である。 本発明の1つの実施形態に係る仮想機械実装を示す図である。
図2は本発明の1つの実施形態に係るデータ処理装置5の1部分を示す。図2はベクトル処理部分のみを示し、ベクトル命令およびスカラー命令の両方がデコードおよび実行が可能となるよう、スカラー処理回路、スカラーロード/格納ユニット、およびスカラーレジスタバンクも存在し得る。
この装置において、処理される命令を保持する命令キュー30と、これらの命令をデコードするデコード回路40と、デコード回路40によりデコードされたベクトル命令を処理するためのベクトル処理回路50と、が存在する。この実施形態には、ベクトル処理回路のための制御値を格納するベクトル制御レジスタ60も存在する。これらの制御値は、ベクトル命令が特定のベクトルオペランドにのみ適用されることを可能にするために用いられるマスクの形であってもよく、またはベクトル処理を制御するための他の制御値であり得る。
この実施形態では、ベクトルデータアクセス命令を受け取り、これらのアクセス命令に応答してメモリシステムへのアクセスを実行するためのベクトルロード格納ユニット10も存在する。ベクトル命令の処理において用いられるベクトルを格納するためのベクトルレジスタバンク70も存在する。
したがって、例えばベクトルデータアクセス命令がデコードされる場合、これは、アクセスされる複数のアドレスを参照し、これらはベクトルレジスタバンク70内のベクトルに格納され得る。同様に、複数のアドレスに対応する複数のデータ要素もベクトルレジスタバンク70内のベクトルに格納されるであろう。
この実施形態には、アクセスがある程度まで互いに対してインターリービングされ得るベクトルデータアクセス命令の検出に応答してベクトル処理回路により設定されるフラグ80も存在する。したがって、処理が行われる間、係る命令が検出された場合はフラグが設定され、係る命令がベクトルロード格納ユニット10により実行され、インターリービングを許可しないその他の命令が処理される場合は、フラグはクリアされる。このように、ベクトルロード格納ユニットは、異なるベクトルアクセス命令からの個々のアクセスが限られた程度までインターリービングされ得るか、またはまったくインターリービングされ得ないかどうかを認識する。
このフラグは、設定された場合にはアクセスされるアドレスが特定の規則に従うためいくらかのインターリービングが起こり得ることを示すチェック済みアドレスモードフラグと呼称され得る。
インターリービングに関する制約は複数の方法で表され得るが、1つの方法は、第1要素アクセスが第1ベクトルの要素番号「j」に関連付けられ、第2要素アクセスが第2ベクトルの要素番号「j」に関連付けられたかどうかを考慮することである。インターリービングに関する最も簡単な制約の1つは、jがkより小さい(j<k)場合は第1要素アクセスが常に第2要素アクセスの前に行われなければならならず、jがkより大きいかまたは等しい場合はその順序が逆転し得る(すなわち第2要素アクセスが第1要素アクセスの前に行われ得る)ことである。この文書において、われわれはこの制約を、インターリービングが「j<k」制約を満足しなければならないと言うことにより、簡潔に説明する。
例外処理に対するサポートを簡略化するために、チェック済みアドレスモードフラグは、例外が取られた場合には、クリアされ得る。(このことは、チェック済みアドレスモードフラグが再びセットされるまで、最適化を無効化する。その結果、例外にわたってチェック済みアドレスモードフラグを保存することと、性能との間にトレードオフが存在する)。
フラグは、命令ストリーム内のスタート命令およびストップ命令により、セットされ得る。なお、これらの命令は、フラグをセットすることにより、インターリービングが現時点で起こり得ることを示す。それらは、別個の命令であってもよく、または他の命令と組み合わされてもよい。例えば、バックワード分岐がストップ命令として扱われ、それによりフラグがクリアされ得る。
さらに、1つのループ反復の始点は以前のループ反復の終点でもあるので、ループにおいてスタート命令およびストップ命令を単一の命令に組み合わせることは有用であり得る。このことは、異なるループ反復からの要素アクセスが、依存性チェックを実行する事なく安全に順序変更できないことを示す、ループ反復間のバリアのように挙動する。
スタート命令は正当な順序変更の異なるパターンを示し得る。例えば、上述の「j<k」を要求する代わりに、それは、「j<k」であるならば要素アクセスは順序変更され得ることを、さらに一般的には、何らかの定数「d」に対して、要素アクセスは「j<k+d」であるならば順序変更され得ることを、示し得る。(このパターンは、ループが「...=A[i+d];A[i]=...」などのコードを含む場合に起こる)その場合は、この定数「d」のための格納器が必要となり、これは図3における格納器85として示される。
スタート命令およびストップ命令を用いる代わりに、「部分的バリア」が用いられ得る。従来のバリアは要素アクセスの順序変更を妨げる一方で、「部分的バリア」は「j<k」の場合に要素の順序変更を妨げる。
スタート命令およびストップ命令を用いる代わりに、われわれは現行の「バリアモード」を設定する命令を有し得る。バリアモードは、「フル」、「部分的」、または「無」のうちの1つであり得る。現行バリアモードは、メモリアクセスの前に暗黙的なバリア、部分的バリア、または無バリアのいずれかを挿入することにより、全部の後続メモリアクセスに影響を及ぼす。現行バリアモードを「部分的」に設定することはスタート命令のように挙動し、現行バリアモードを「フル」に設定することはストップ命令のように挙動する。
図3は図2のベクトルロード格納ユニット10をより詳細に示す。このベクトルロード格納ユニット内に、2つの保留中のベクトルデータアクセス命令から受け取られたインデックス値12および14を比較するための比較回路57が存在する。なお、これらのインデックス値はそれぞれの命令内での特定のデータアクセス要求の要素位置を示す。比較の結果に基づいて次に発行するデータアクセス要求を選択する選択回路58も存在する。
ベクトルロード格納ユニット10はフラグ値格納器80も備える。このフラグ値格納器80は、プロセッサにより設定されたフラグ値を格納し、設定されると、2つのベクトルデータアクセス命令により指定された個々のデータアクセスが特定の程度までインターリービングされ得ることをLSU10に対して示す。個々のデータアクセスがインターリービングされ得る程度は、所定値格納器85に格納された値により決定され得る。この値はデコーダにより設定され、インターリービングの程度の表示を提供する。
この事例において、フラグ80はインターリービングが許可されるよう設定され、格納器85の所定値はゼロである。このことは、2つのベクトルデータアクセス命令からのデータアクセスがインターリービングされ得る程度が、2つのデータアクセス命令からのアクセスが第1データアクセス命令からの対応するアクセスを追い越してはならない程度であることを示す。換言するとインデックス1(その命令内における第1ベクトルデータアクセス命令からの現在保留中のデータアクセスの位置を示す)はインデックス2(その命令内における第2ベクトルデータアクセス命令からの現在保留中のデータアクセスの位置を示す)よりも大きくなければならない。この制約が満足されるならば、第2命令からのデータアクセスがメモリに対して発行され、この制約が満足されないならば第1命令からのデータアクセスはメモリに対して発行されない。
したがって、アクセスは進行し、それぞれの命令からのアクセスが実行されるとインデックスカウンタ12および14はインクリメントされる。したがって、最初インデックス1およびインデックス2が0であるならば、これら2つの値が等しくしたがってインデックス1がインデックス2よりも大きくなければならないという要件が満足されないことを比較回路57が判定するであろう。したがって選択回路58は命令1からのデータアクセスを選択し、命令1に対するアドレス0がデータアクセスとして発行され、インデックス1がインクリメントされる。次に、2つのインデックス値の比較は、インデックス1がインデックス2よりも大きいことを見出し、したがって、命令2からのアクセスインデックスが命令1からのアクセスインデックスよりも小さくなければならないという制約が満足され、理論上は選択され得るが、命令2からのアクセスが優先的に選択される。したがって命令2からのアドレス0が次のデータ要素にアクセスするために用いられる。このロード格納ユニットが単一のサイクル内で2つの命令をアクセスできるならばこれら2つの命令が最初のサイクル内で選択され一緒に実行されるであろう点に注意すべきである。ベクトルロード格納ユニットはこのようにして実行されるアクセスを選択し続ける。このようにして2つの命令が同時に処理され、命令2のレイテンシが低減される。
上述のように、値を格納するための所定値格納器85が存在する。前述の実施形態では、選択判断基準は単に、第2命令からのアクセスが第1命令を追い越してはならないということであり、この値はしたがってゼロに設定される。しかし、いくつかの場合では異なる要件が存在し得る。異なる要件が存在する場合、所定値85は異なる所定値を格納し、選択判断基準は、インデックス2とインデックス1との間の差異がこの格納された所定値よりも小さくなければならない、となり得る。この判断基準が満足されるならば、いずれのアクセスも選択され得るが、後の命令からのデータアクセスが優先的に選択される。
図5は、複数のメモリバンクに格納されたデータをアクセスするための本発明の1つの実施形態に係る多重ベクトルロード/格納ユニットを示す。この点について、ギャザースキャッタベクトルメモリアクセス命令を有するプログラムは高いアドレス帯域幅を有する(すなわちより多くのアドレスが単位サイクルあたりでメモリシステムに提供される)ことができ、したがって、サイクル毎に多重アクセスを実行できるメモリシステムからの利点を有することができる。これは、メモリシステムをいくつかの独立的にアクセス可能なバンクに分割し、ベクトルメモリアクセスが一般に複数のバンクをアクセスし、それによりアクセスが互いに対して並行的に実行されることが可能となるようアドレスマップを配列することにより、しばしば実装される。このバンク化は、メモリシステムのいくつかの異なる部分(すなわち、TLB、L1キャッシュ、L2キャッシュ、DRAMコントローラ、その他)に適用され得る。
図5において、ベクトルロード格納ユニット10は、2つの構成要素15と構成要素17と(第1ベクトルデータアクセス命令に応答してデータにアクセスする第1構成要素15と、第2ベクトルデータアクセス命令に応答してデータにアクセスする第2構成要素17と)を備える。
これらの構成要素15および17の両方がレジスタ格納器25および27を有する。レジスタ格納器25は保留中のベクトルデータアクセス命令のアドレス要素を格納するためのものであり、レジスタ格納器27はこれらのアクセス命令に対応するデータを格納するためのものである。したがって、保留中の命令が書き込み命令である場合、書き込み命令により格納されるデータはレジスタ内に保持されるであろう。一方、保留中の命令が読み出し命令である場合、読み出されるデータを格納する空間がレジスタ内に存在する。
バンク比較器35および37も各構成要素内に存在する。これらのバンク比較器35および37は、アクセスされるデータ要素のアドレスを分析し、そのアドレスから、メモリバンク100、102、104、および107のうちのどのメモリバンクがアクセスされるかを判定する。
したがって第1ベクトルデータ命令はベクトルロード格納ユニット構成要素15において受け取られ、レジスタ25に格納される。第2ベクトルデータアクセス命令はベクトルロード格納ユニット構成要素17において受け取られ、レジスタ27に格納される。これの事例において、それらの両方が書き込み命令である。
インデックスカウンタ45および47は、それぞれ最初は0に設定され、これらのベクトルアクセス要求に対応するレジスタ25および27における第1アドレス要素がアクセスされ、アドレスがどのバンク内にあるかが判定される。比較ユニット57は2つのインデックスを比較し、その結果をバンクアクセス制御ユニット90に送る。インデックス47により指定されたアドレス要素にアクセスすることに加えて、ベクトルロード格納ユニット15内の次のアドレス要素もアクセスされ、それがどのバンクにあるかが判定される。これらの情報の全部がバンクアクセス制御ユニット90に提供され、バンクアクセス制御ユニット90は、どのアクセスがメモリシステムに伝達されるべきかを判定する。
図4は図5のバンクアクセス制御ユニット90をより詳細に示す。上述のように、信号は2つのロード格納ユニット構成要素15および17からこのユニットにおいて受け取られる。この事例において、バンクアクセス制御ユニット90により考慮される3つの保留中のアクセス要求が存在する。これらの信号のそれぞれは、アドレスと、各信号に関連付けられたデータと、それが読み出しであるか書き込みであるかの表示と、を含む。3つの信号は、第1ベクトルロード格納ユニット15から受け取られた第1ベクトルデータアクセス命令からの、要素に対する2つのデータアクセス要求aおよびaj+1と、第2ベクトルロード格納ユニット構成要素17から受け取られた第2ベクトルデータアクセス命令からのデータアクセス要求bと、を含む。
これらのアドレスが見出されるバンクを示す追加情報もまた送られる。各バンクに対して、この追加情報は比較回路109によりバンクIDと比較され、どのアクセスがどのバンクに対して保留中であるかが判定される。特定のバンクに対して1つのみのアクセスが保留中である場合、そのアクセスはそのバンクに伝達され、進行することが許可される。
一方、2つ以上のアクセスが1つのバンクに対して保留中である場合、アクセス優先順位付け回路95は、どのアクセスが最初に実行されるかを判定する。アクセス優先順位付け回路95はロード/格納ユニット10内の比較回路57からの信号に応答してこれを判定する。この比較回路はkがjより小さいかどうかを判定する。kがjより小さいと、bは選択されることができ、選択される。kがjより小さくないと、第2データアクセス命令からのアクセスが事実上、第1ベクトルデータアクセス命令からのアクセスに追いつき、第2データアクセス命令からのアクセスは、第1ベクトルデータアクセス命令が再び優位を獲得する間、しばらくの間抑制される必要がある。この場合アクセスaが優先される。aがbと同一のバンクに対するものではなくしかしaj+1が当該のバンクに対するものである場合、優先順位付け回路95は、kがj+1よりも小さいかどうかに基づいてどのアクセスを選択するかを判定するであろう。kがj+1よりも小さい場合、kが選択され得る。一方、j+1がkよりも小さい場合、アクセスaj+1が優先権を有するであろう。
このように、特定のサイクルの間、バンクは互いに対して独立的にアクセスされることができ、一般的に強制される制約は、異なるバンクに対するアクセスの間で強制されないが、同一のバンクに対するアクセスには強制される。これは明らかに、より多くのアクセスが実行されることを可能にするが、追加的な比較および制御の回路のオーバーヘッドを有する。
要約すると、バンク内のアクセスを安全にインターリービングするメモリシステムの簡単な具体化は
1ブロックのコードの始点および終点を示す、1対の新規命令と、
「チェック済みアドレスモード」で実行中であるかどうかを示すフラグを有し、
スタート命令に遭遇するとフラグを設定し、終了命令に遭遇するとフラグをクリアし、
それぞれが、
どの要素が次にアクセスされるかを示す要素インデックスjまたはkと、
VMUが、読み出し、書き込み、またはアイドルを実行中であるかどうかを示すフラグと、
アドレスと、アクセスが書き込みである場合には各保留中の要素アクセスの値と、からなる2つまでの保留中の要素アクセスのバッファと、
保留中の要素アクセスの個数のカウントと、
各保留中の要素アクセスに対するバンク識別ロジックと、
を備える、2つのベクトルメモリユニット(VMU)を有し、
2つのVMUにおける要素インデックスを比較する比較器を有し、
それぞれが、
VMUのいずれかからの保留中の要素アクセスのいずれかを選択するマルチプレクサと、
j<kの場合には:
ajがこのバンクに対するものであるならば、ajを選択し、
それ以外の場合には、このバンクに対するアクセスは実行せず、
j>=kの場合には:
ajおよびbkの両方がこのバンクに対するものであるならば、bkを選択し、
ajがこのバンクに対するものでありbkが異なるバンクに対するものであるならば、ajを選択し、
bkがこのバンクに対するものでありajが異なるバンクに対するものであるならば、bjを選択し、
ajおよびbkが異なるバンクに対するものであるならば:
a(j+1)がこのバンクに対するものであるときにはa(j+1)を選択し、
それ以外の場合には、このバンクに対するアクセスは実行しないよう、
保留中の要素アクセス[aj,a(j+1)]および[bk,b(k+1)]を選択する制御ロジックと、
を備える、4つのバンクを有し、
各VMUから選択されたアクセスの個数にしたがってjおよびkの値を更新するロジックを有する、
ロード格納ユニットと、
からなる。
この具体化は、同一のバンクに対するアクセスが単一アクセスに合体され得るよう、後に説明する合体実装と組み合わせることを含む様々な方法で改善されることができる。
図6Aはベクトル化されたコードをコンパイルするための方法におけるステップを例示説明するフローチャートを示す。この実施形態では、コンパイラは、スカラー命令を含むコンピュータプログラムにおけるループを認識し、これらをベクトル命令に変換する。コンパイラは、ループをベクトル化するタスクが分析を実行し、それによりどのメモリ依存が存在するかを判定することを含むことを認識する。したがって、コンパイラが正常にループをベクトル化すると、コンパイラは、ベクトル化されたループ内のメモリアクセスが競合しないことをすでに知る。したがって、データアクセスのインターリービングが起こり得ることをコンパイラは認識し、コードを処理する処理システムにこれを示すために、コンパイラはループ本体の始点においてスタート命令を生成し、ループ本体の終点において終了命令を生成する。
この基本的方式は様々な方法で向上されることができる。
いくつかの状況において、コンパイラは、異なるパターンの正当な順序変更を示す変更されたスタート命令を挿入し得る。例えば、1ブロックのコードの内部で実行される全部のアクセスが別個のアドレスに対するものであることをコンパイラが判定した場合、コンパイラは、「j<=k」の制約を満足する順序変更が正確であることを、または任意の順序変更が正確であることを示すスタート命令を発することができる。
米国特許公開第2008/0288754号では「CheckHazard」命令が開示されている。「CheckHazard」命令は2つのベクトルをテストし、それにより、一方のベクトルの位置jにおけるアドレスが他方のベクトルのいくつかの位置k(j<k)の任意のアドレスと重複するかどうかを判定する。この命令は、ループがベクトル化されることを妨げるであろう任意の重複を動的にテスト(および対処)するために用いられることができる。この命令は、インターリービングが可能であるかどうかをチェックするためのテストを実際に実行するため、本発明の実施形態に関して特に良好に作用する。j<=kなどの位置をチェックするCheckhazardX命令も存在する。したがって、この命令はコードをテストするために用いられてきたが、アクセスがインターリービングされることができることの表示は、フラグを設定することにより、または限定的インターリービングスタート命令の使用により、データ処理システムに提供されることができる。
コンパイラは、いくつかの場合ではソフトウェアで形成され得るが、ハードウェアで構成されてもよい。図6Bはハードウェアコンパイラを概略的に示す。ハードウェアコンパイラ内では、命令ストリームが分析回路に入力され、分析回路内では命令ストリームが分析され、ループが特定され、ベクトルコードが形成される。係るベクトルのインターリービングも特定されるコードの位置と、スタート命令およびストップ命令とが、コードに挿入され、次にこのコードは、処理回路により実行されることができるコードへと変換回路により変換される。
図7は、同一のキャッシュにアクセスする2つのベクトルロード格納ユニットが、それらのアクセスが合体されることを可能にする追加的な制御回路を有することができる方法の1例を示す。この点に関して、図7は、各ロード格納ユニットからのアクセスのインデックスを比較し、それによりいずれのインターリービング規則も破られてないことをチェックするよう作用する関連する制御回路と、保留中のデータアクセスのアドレスをチェックする合体回59路と、を有する2つのベクトルロード格納ユニット15および17を概略的に示す。なお、保留中のデータアクセスのアドレスが同一ラインに対するものであり、それらを合体することがインターリービング規則を破らない場合は、それらは単一のアクセスに合体される。
アクセスを同一のキャッシュラインに合体することは、性能の改善およびエネルギー削減の両方のために有利である。ベクトルアクセスにおいて、合体は通常は局所性を利用するために単一のベクトルアクセス内で行われるが、2つのベクトルアクセスにおける対応する要素位置の間に顕著な局所性が存在することは一般的である。例えば、これら2つの命令文、すなわち
A[i][j].x=p;
A[i][j].y=q;
を含むループのベクトル化は、2つのベクトル格納命令を含むループを生成するであろう。当該のループの所与の反復において、第1ベクトル格納命令はアドレス:[1000,2000,3000,4000,...]に書き込み、その一方で、第2ベクトル格納命令はアドレス[1004, 2004, 3004, 4004,...]に書き込む。この場合、各ベクトルアクセス内に局所性は存在しないが、かなりの局所性がベクトルアドレスの間に存在し、理想的には、アクセスは[1000,1004,2000,2004,3000,3004,4000,4004,...]の順序で行われるであろう。
これは、図8Aに示すようにアクセスが単一のアクセスに合体されることを可能にする。図8Aは、単一のアクセスに合体されたアクセスa0およびb0を有する合体されたアクセスパターンを示す。
実際、空間局所性がベクトルアクセス内に、ならびにベクトルアクセス間に、見出され得る。例えば、第1ベクトルアクセスはアドレス[1000,1008,1016,1024,...]における要素にアクセスし得る一方で、第2ベクトルアクセスはアドレス[1004,1012,1020,1028,...]における要素にアクセスし得る。この場合、ベクトルアクセス内の要素アクセスを合体し、ベクトルアクセス間のアクセスを合体することが望ましい。係る場合が図8Bに示され、図8Bでは、第1ベクトル演算からの要素アクセスの対が第2ベクトル演算からの要素アクセスの対とともに合体される。これは、合体のない場合の16サイクルまたは合体がベクトル間またはベクトル内でのみ起こる場合の8サイクルと比較して、4サイクルで実行する。
コードがベクトル化されインターリービングが性能を改善する方法のいくつかの簡単な例が、以下で提供される。
順次てきなコード(ベクトル化以前)
for(i=0; i<N; ++i) {
a[i]++;
b[i] = a[i];
限定的なインターリービングを有することができるベクトル化されたコード
for(i=0; i<N; i+=8) {
start;
v1=vload(&a[i]);
v2=vadd(v1,1);
vstore(&a[i],v2);//このベクトル格納と、このベクトルロードが、
v3=vload(&a[i]); //対象となるものである
vstore(&b[i],v3);
stop;
これは、第1のvstoreと第2のvloadとの間で競合が起こり得るために、限定的なインターリービングを可能にする。
限定的なインターリービングを用いないと(すなわちベクトルロード/格納が制約なしに順序の変更が可能である)、高速であるが不正確となるであろう。書き込み(vstoreからの)および読み出し(vloadからの)の1つの可能な順序変更は、a[0]への書き込みの前にa[0]からの読み出しを不正確に実行するであろう。
インターリービングをまったく用いないと、[0]..a[7]のへの書き込みの全部が[0]..a[7]からの読み出しをスタートする前に実行されなければならないため、正確であるが、不必要に低速となるであろう。
限定的なインターリービングを用いると(すなわちj<kの場合にのみ要素kへのロードが要素jからの格納の前に起こることができる)、ベクトル化されたコードはより高速に実行され、正確である。
わずかな変更をコードに加えることにより、要求される比較の正確な詳細はわずかに変化する(例はわずかにより現実的になる)。
for(i=0; i<N; ++i) {
a[i]++;
b[i]=a[i+2]; // a[i]をa[i+2]に変更
この変化に関して、強制される条件は「j<k+2」である。
または、より一般的に:
for(i=0;i<N;++i) {
a[i]++;
b[i]=a[i+d]; // a[i]をa[i+d]に変更した
この変化に関して、強制される条件は「j<k+d」である。
このことを生じさせるために、VMU内の比較ハードウェアが「j<k+d」をテストすることを知るよう、われわれはdの値を「限定的インターリービングスタート」命令にエンコードできる。
最後に、本発明の実施形態の顕著な特長は、アドレス比較器がインターリービングをサポートするために必要ではなく、限定的インターリービングにより直接的にサポートされる順序変更を越えて追加的順序変更が可能となるよう、アドレス比較器を追加することが可能である点に注意すべきである。それは、ループの1つの反復と、次の反復、ループの前/後のコード、または次のベクトル化されたループとの間で、アクセスの少量のインターリービングを可能にする為である。比較器はなすべき作業が少ないため、より少数の比較器を用いて、および/またはより頻繁に比較器をクロックゲートすることにより、良好な性能が達成されることができる。
本発明の実施形態の様々な特徴の要約が以下で図9A〜図15を参照して説明される。
図9Aは第1の安全にインターリービングされたアクセスパターンを示す。なおこの図面では、時間は左から右に進行し、第1ベクトルアクセスからの要素アクセスa0〜a7は、第2ベクトルアクセスからの要素アクセスb0〜b7から別個のライン上にある。j<kである場合、アクセスajはアクセスbkの前に起こることに注意すべきである。
図9Bは他の安全にインターリービングされたアクセスパターンを示す。なおこの図面では、時間は左から右に進行し、第1ベクトルアクセスからの要素アクセスa0〜a7は、第2ベクトルアクセスからの要素アクセスb0〜b7から別個のライン上にある。j<kである場合、アクセスajはアクセスbkの前に起こることに注意すべきである。
図9Cは非安全なアクセスパターンを示す。なおこの図面では、時間は左から右に進行し、第1ベクトルアクセスからの要素アクセスa0〜a7は、第2ベクトルアクセスからの要素アクセスb0〜b7から別個のライン上にある。アクセスb1はアクセスa1の前に起こる。これは、a1およびb1が同一アドレスにアクセスする場合、不正確な結果を与え得る。(b2およびa2も不正確に順序変更される。)
アクセスを同一キャッシュラインに合体すること、およびアクセスをバンクされたメモリに合体することに関する2つの実施形態が以下で説明される。
上述のように、例外処理に対するサポートを簡略化するために、チェック済みアドレスモードフラグは、例外が取られた場合には、クリアされ得る。(このことは、他のスタート命令が遭遇されるまで、最適化を無効化する。その結果、例外にわたってチェック済みアドレスモードフラグを保存することと、性能との間にトレードオフが存在する。)
− スタート命令およびストップ命令は他の命令と組み合わされてもよい。例えば、バックワード分岐がストップ命令として扱われることができる。
- 1つのループ反復の始点は以前のループ反復の終点でもあるので、ループにおいてスタート命令およびストップ命令を単一の命令に組み合わせることは有用である。このことは、異なるループ反復からの要素アクセスが、依存性チェックを実行する事なく安全に順序変更できないことを示す、ループ反復間のバリアのように挙動する。
− スタート命令は正当な順序変更の異なるパターンを示し得る。例えば、上述の「j<k」を要求する代わりに、それは、「j<k」であるならば要素アクセスは順序変更され得ることを、さらに一般的には、何らかの定数「d」に対して、要素アクセスは「j<k+d」であるならば順序変更され得ることを、示し得る。(このパターンはループが「...=A[i+d];A[i]=...」などのコードを含む場合に起こる。)
- スタート命令およびストップ命令を用いる代わりに、われわれは「部分的バリア」を用いることができる。従来のバリアは要素アクセスの順序変更を妨げる一方で、「部分的バリア」は「j<k」の場合に要素の順序変更を妨げる。
− スタート命令およびストップ命令を用いる代わりに、われわれは現行の「バリアモード」を設定する命令を有し得る。バリアモードは、「フル」、「部分的」、または「無」のうちの1つであり得る。現行バリアモードは、メモリアクセスの前に暗黙的なバリア、部分的バリア、または無バリアのいずれかを挿入することにより、全部の後続メモリアクセスに影響を及ぼす。現行バリアモードを「部分的」に設定することはスタート命令のように挙動し、現行バリアモードを「無」に設定することはストップ命令のように挙動する。
2つのアドレスのベクトルをテストし、それにより、一方のベクトルの位置jにおけるアドレスが他方のベクトルのいくつかの位置k(j<k)の任意のアドレスと重複するかどうかを判定する、「CheckHazard」命令。この命令は、ループがベクトル化されることを妨げるであろう任意の重複を動的にテスト(および対処)するために用いられることができる。この命令は、正にわれわれが注目する場合についてテストするため、本発明の実施形態に関して特に良好に作用する。(j<=kなどの位置をチェックするCheckhazardX命令も存在する。)
スタート命令/終了命令をベクトル化されたコードに発する能力を有するコンパイラも説明される。これは、
− ループをベクトル化するコンパイラ、
を要求し、
− このコンパイラは、スタート命令をループ本体の始点において挿入し、終了命令をループ本体の終点において挿入する。(ループをベクトル化するタスクは、分析を実行し、それにより、どのメモリ依存が存在するかを判定することを伴う。したがって、コンパイラが正常にループをベクトル化すると、コンパイラは、ベクトル化されたループ内のメモリアクセスが競合しないことをすでに知る。
この基本的方式は様々な方法で向上されることができる。
− いくつかの状況において、コンパイラは、代替的に、スタート命令をループの前に、終了命令をループの後に挿入できる。例えば、コンパイラは、ループにより実行される全部のアクセスが別個のアドレスに対するものであることをコンパイラが判定した場合、このことを行う。
− いくつかの状況において、コンパイラは、異なるパターンの正当な順序変更を示す変更されたスタート命令を挿入し得る。例えば、1ブロックのコードの内部で実行される全部のアクセスが別個のアドレスに対するものであることをコンパイラが判定した場合、コンパイラは、「j<=k」が正確であることを、または任意の順序変更が正確であることを示すスタート命令を発することができる。
キャッシュアクセスの合体
アクセスを同一のキャッシュラインに合体することは、性能の改善およびエネルギー削減の両方のために有用である。ベクトルアクセスにおいて、合体は通常はベクトル内の局所性を利用するために単一のベクトルアクセス内で行われるが、2つのベクトルアクセスにおける対応する要素位置の間に顕著な局所性が存在することは一般的である。例えば、これら2つの命令文、すなわち
A[i][j].x=p;
A[i][j].y=q;
を含むループのベクトル化は、2つのベクトル格納命令を含むループを生成するであろう。当該のループの所与の反復において、第1ベクトル格納命令はアドレス:[1000,2000,3000,4000,...]に書き込み、その一方で、第2ベクトル格納命令はアドレス[1004,2004,3004,4004,...]に書き込む。この場合、各ベクトルアクセス内に局所性は存在しないが、かなりの局所性がベクトルアドレスの間に存在し、理想的には、アクセスは[1000,1004,2000,2004,3000,3004,4000,4004,...]の順序で行われるであろう。
これは、以下の図10に示すようにアクセスが単一のアクセスに合体されることを可能にする。
以下は、係る合体の実行を可能にする本発明の実施形態の具体化を説明する。
− 1ブロックのコードの始点および終点を示す、1対の新規命令
・ 「チェック済みアドレスモード」で実行中であるかどうかを示すフラグを有し、
・ スタート命令に遭遇するとフラグを設定し、終了命令に遭遇するとフラグをクリアし、
・ それぞれが、
どの要素が次に格納されるか示す要素インデックスjまたはkと、
VMUが、読み出し、書き込み、またはアイドルを実行中であるかどうかを示すフラグと、
(VMUがアイドル状態でない場合に)VMUにおいて保留中のアクセスが存在するかどうかを示すフラグと、
(保留中のアクセスが存在する場合に)次の保留中のアクセスのアドレスと、
(次の保留中のアクセスが書き込みである場合に)次の保留中のアクセスの値と、
を備える、2つのベクトルメモリユニット(VMU)を有し、
・ 2つのVMUにおける要素インデックスを比較する比較器を有し、
・ VMUの次の保留中のアクセスのアドレスが同一のキャッシュラインに対するものであるかどうかを比較するための比較器を有し、
・ チェック済みアドレスモードフラグがクリアであるとき、第1VMUがアイドルであるか、または両方のアクセスが読み出しである場合、アクセスは第1VMUから取られ、
チェック済みアドレスモードフラグが設定されているとき、j<=kであり且つ次の保留中のアクセスが同一のキャッシュラインに対するものである場合、第1VMUおよび第2VMUは単一のキャッシュアクセスに組み合わされ、
チェック済みアドレスモードフラグが設定され、次の保留中のアクセスが異なるキャッシュラインに対するものであり、j<kであるとき、第2VMUからのアクセスが選択され、
それ以外の場合は、第2VMUからのアクセスが選択されるよう、
一方のVMUからまたは他方のVMUからの次の要素を選択するためのマルチプレクサを有する、
− ロード格納ユニット
これは、合体され得る要素アクセスを検出するために単一のアドレス比較器を使用すること、および2つのベクトル演算のそれぞれから1つの要素アクセスを同時格納することのみを要求すること、が理解されるであろう。本発明の実施形態を利用することがなければ、同一程度の順序変更は、第1ベクトル演算からの全部の要素アクセスを同時格納することを必要とし、7つのアドレス比較器を必要とする(8のベクトル長さに対して)であろう。
実際、空間局所性がベクトルアクセス内に、ならびにベクトルアクセス間に、見出されることができる。例えば、第1ベクトルアクセスはアドレス[1000,1008,1016,1024,...]における要素にアクセスし得る一方で、第2ベクトルアクセスはアドレス[1004,1012,1020,1028,...]における要素にアクセスし得る。この場合、ベクトルアクセス内の要素アクセスを合体し、ベクトルアクセス間でアクセスを合体することが望ましい。図11は係る場合を示す。なお係る場合においては、第1ベクトル演算からの要素アクセスの対が第2ベクトル演算からの要素アクセスの対とともに合体される。これは、合体のない場合の16サイクルと比較して、または合体がベクトル演算間でのみもしくはベクトル演算内でのみ起こる場合の8サイクルと比較して、4サイクルで実行する。
図11は、合体されたアクセスパターンを示す。なおこの図面では、時間は左から右に進行し、第1ベクトルアクセスからの要素アクセスa0〜a7は、第2ベクトルアクセスからの要素アクセスb0〜b7から別個のライン上にある。第1ベクトル演算からの連続した要素アクセスが、相互と、および第2ベクトル演算からの連続した要素アクセスと、合体され、同時に起こることに注意すべきである。
上記の具体化は、
− 複数のアクセスのアドレス(および、書き込みに対してはデータ)をバッファリングするよう、および
各VMU内で近接する要素アクセスのアドレスを比較し、それにより、合体の候補となる各VMU内の連続的な要素アクセスのシーケンスが特定されるよう、
両方のVMUを拡張することにより、この挙動をサポートするよう強化されることができる。これは、要素アクセスが連続的にVMUに加えられる場合、VMU毎に1つの追加的な比較を必要とする。
− 次の要素アクセスのアドレスが同一のキャッシュラインに対するものであり、第1VMUがそのキャッシュラインに対するm個の連続したアクセスを有し、第2VMUがそのキャッシュラインに対するn個の連続したアクセスを有する場合、第1VMUからのm個の要素と第2VMUからの「min(j+m,k+n)−k」個の要素が単一のキャッシュアクセスに合体されることができる。
バンクされたメモリアクセス
ギャザースキャッタベクトルメモリアクセス命令を有するプログラムは高いアドレス帯域幅を有する(すなわちより多くのアドレスが単位サイクルあたりでメモリシステムに提供される)ことができ、したがって、サイクル毎に多重アクセスを実行できるメモリシステムからの利点を有することができる。これは、メモリシステムをいくつかの独立的にアクセス可能なバンクに分割し、ベクトルメモリアクセスが一般に複数のバンクをアクセスし、それによりアクセスが互いに対して並行的に実行されることが可能となるようアドレスマップを配列することにより、しばしば実装される。このバンク化は、メモリシステムのいくつかの異なる部分(すなわち、TLB、L1キャッシュ、L2キャッシュ、DRAMコントローラ、その他)に適用され得る。例えば、キャッシュは4つの独立的にアクセス可能なバンクB0、B1、B2、およびB3と、4つのバンクのうちのどのバンクがそのアドレスを格納するために用いられる要素のアドレスのビット6および7と、に分割され得る。要素アクセスa0〜a7からなるベクトルアクセスは、各要素アクセスのアドレスのビット6および7を調査し、各要素アクセスを4つのバンクのうちの1つに誘導することにより、実行されることができる。図12はアクセスパターンを示す。なお、サイクル毎に最大で2要素アクセスの要素アクセスを順番に発行するベクトルメモリユニットを仮定して、このアクセスパターンは、アドレス[60,76,92,108,124,140,156,172](バンク[B0,B1,B1,B1,B1,B2,B2,B2,B2,B3]にマッピングする)に対するベクトルアクセスの結果として生成されるものである。完全なベクトル演算は、たとえどのバンクも4つ以上の要素アクセスを実行しないとしても、6サイクルを必要とする。
図13はアクセスパターンを示す。なおこのアクセスパターンは、チェック済みアドレスモードでないとき、第1ベクトル演算が、アドレス[192,132,196,136,200,140,204,144](バンク[B3,B2,B3,B2,B3,B2,B3,B2]にマッピングする)に対する第2ベクトル演算に続くときに生成されるものである。アクセスパターンがチェック済みアドレスモードでない(すなわち本発明の実施形態が用いられていない)ため、第2ベクトル演算からのどの要素アクセスも、第1ベクトル演算からの全部の要素アクセスが終了するまで、実行されない。2つのベクトル演算は、完了するために10サイクルを必要とする。
図14は、第2ベクトル演算が第1ベクトル演算と並行して進行することを許可することが安全ではないことを示す。この図面では、アクセスa5およびアクセスb5が両方ともアドレス140に対するものであり、不正確にアクセスb5がアクセスa5の前に実行されていることに注意すべきである。(このシーケンスが正当であった場合、7サイクルを必要としたことであろう。)
図15は、正確に実行する同一のアクセスパターンを示す。アクセスb5が第3サイクルで利用可能であったとしても、そのアクセスは、アクセスが各バンク内で安全にインターリービングされることを確保するために、アクセスa5が実行されるまで拒否される。アクセスb4がa4の前に実行されないことにも注意すべきである。なぜなら、b4およびa4は、両方がアクセス可能となるまで、同一のバンクにアクセスするかどうかの判定が不可能であるためである。同様に、アクセスb6はアクセスa6の前に実行されない。本発明の実施形態を利用することにより、このアクセスパターンは8サイクルで完了する。すなわち2サイクルが節約されたことになる。
最後に、アドレス比較器がインターリービングをサポートするために必要ではないが、本発明の実施形態により直接的にサポートされる順序変更を越えて追加的な順序変更が可能となるよう、アドレス比較器を追加することが可能ことを述べることは価値がある。それは、ループの1つの反復と、次の反復、ループの前/後のコード、または次のベクトル化されたループとの間で、アクセスの少量のインターリービングを可能にする。比較器はなすべき作業が少ないため、われわれは、より少数の比較器を用いて良好な性能を達成でき、および/またはより頻繁に比較器をクロックゲートすることができる。
図16は、用いられ得る仮想機械の実装を示す。これまでに説明してきた実施形態は、関連する技術をサポートする特定の処理ハードウェアを操作するための装置および方法の形で、本発明を具体化するが、ハードウェア装置のいわゆる仮想機械の実装を提供することも可能である。これらの仮想機械の実装は、仮想機械プログラム510をサポートするホストオペレーティングシステム520を通常は実行するホストプロセッサ530上で実行される。通常、より大きい強力なプロセッサが、妥当なスピードで実行される仮想機械の実装を提供するために必要となる。しかし、係るアプローチは、互換性のために、または再利用の理由のために他のプロセッサに対してネイティブであるコードを実行することが望まれる場合等の特定の状況において正当化される。仮想機械プログラム510は、アプリケーションプログラム(またはオペレーティングシステム)500を実行することにより、実際のハードウェア装置によりプログラムを実行することにより提供されるのと同一の結果を提供する能力を有する。したがって、実行されるデータアクセスの順序変更は、仮想機械プログラム510を用いて、アプリケーションプログラム500内から実行され得る。
本発明の例示的な実施形態が添付の図面を参照して本明細書において詳細に説明されてきたが、本発明がこれらの実施形態に精密に限定されるものではなく、様々な変化例および変更例が、添付の請求項により定義される本発明の精神および範囲から逸脱することなく、当業者により実施可能であることが理解されるであろう。

Claims (25)

  1. 命令された順序を有するデコードされたベクトルデータアクセス命令に応答して、データ格納器内に格納されたデータにアクセスするためのベクトルデータアクセスユニットであって、
    前記ベクトルデータアクセス命令のそれぞれは複数の要素を特定し、前記要素のそれぞれは実行されるデータアクセス要求を示し、前記複数の要素のそれぞれは、対応する前記データアクセス要求が前記ベクトルデータアクセスユニットにおいて実行されるよう命令される前記ベクトルデータアクセス命令内での1つの順序のうちの1つの数値位置を有し、
    前記ベクトルデータアクセスユニットは、前記要素により示されたデータアクセス要求を前記データ格納器に対して発行するためのデータアクセス順序付け回路を備え、
    前記データアクセス順序付け回路は、少なくとも2つのデコードされたベクトルデータアクセス命令の受け取り及び前記少なくとも2つのデコードされたベクトルデータアクセス命令からのデータアクセス要求が限定的な程度までインターリービングされることができるとの示唆に応答するように構成されており、前記命令された順序が前の方の前記ベクトルデータアクセス命令は前記命令された順序が後の方の前記ベクトルデータアクセス命令よりも前に受け取られたものであり、また、前記少なくとも2つのデコードされたベクトルデータアクセス命令のうちの少なくとも1つは書き込み命令である、ものであり、前記インターリービングは、前記命令された順序が前の方の前記ベクトルデータアクセス命令からのデータアクセス要求を実行する前に、前記命令された順序が後の方の前記ベクトルデータアクセス命令からのデータアクセス要求を実行することを含む、ものであり、
    前記データアクセス順序付け回路は、
    前記少なくとも2つのベクトルデータアクセス命令のそれぞれ対して、前記複数の要素内の前記要素の数値位置から、前記複数の要素により示される前記複数のデータアクセス要求のうちのいずれが前記ベクトルデータアクセス命令に関して実行される次のデータアクセス要求であるかを判定することと、
    記命令された順序が後の前記ベクトルデータアクセス命令に関して実行される前記次のデータアクセス要求を示す前記要素の数値位置と、前記命令された順序が前の方の前記ベクトルデータアクセス命に関して実行される前記次のデータアクセス要求を示す前記要素の数値位置と、の間の差異が所定値よりも小さいという制約ので、前記少なくとも2つのベクトルデータアクセス命令の前記命令された順序と、前記少なくとも2つのベクトルデータアクセス命令のそれぞれに関して実行される前記次のデータアクセス要求を示す前記要素の数値位置と、に応じて、前記データ格納器に対して発行されるべき次のデータアクセス要求として、前記少なくとも2つのベクトルデータアクセス命令のそれぞれに関して実行される前記次のデータアクセス要求のうちの1つを選択することと、
    を行前記ベクトルデータアクセスユニット。
  2. 前記制約は、前記命令された順序が前の方のベクトルデータアクセス命令からの要素により示されるデータアクセス要求が、前記命令された順序が後の方のベクトルデータアクセス命令における前記複数の要素のうち同じ数値位置に配置された要素により示されるデータアクセス要求の後に発行されないこと、をさらに含む、請求項1に記載のベクトルデータアクセスユニット。
  3. 前記データアクセス順序付け回路は、前記制約が満足される場合、前記命令された順序が前の方のベクトルデータアクセス命令からの前記次のデータアクセス要求に優先して、前記命令された順序が後の方のベクトルデータアクセス命令からの前記次のデータアクセス要求を、前記発行される次のデータアクセス要求として選択するよう構成される、請求項1および請求項2のいずれか1つに記載のベクトルデータアクセスユニット。
  4. 前記データアクセス順序付け回路は、同一のクロックサイクルにおいて互いに並列して少なくとも2つのデータアクセス要求を発行するよう構成され、
    前記データアクセス順序付け回路は、前記発行される次のデータアクセス要求と、並列して発行するための少なくとも1つのさらなるデータアクセス要求と、を選択するよう構成され、前記少なくとも1つのさらなるデータアクセス要求は、
    前記ベクトルデータアクセス命令において前記次のデータアクセス要求を示す前記要素に後続する要素により示される少なくとも1つのデータアクセス要求と、
    前記次のデータアクセス要求を示す前記要素を含まない前記ベクトルデータアクセス命令のうちの1つにおける前記次のデータアクセス要求のうちの少なくとも1つと、
    のうちの少なくとも1つであり、
    前記少なくとも1つのさらなるデータアクセス要求は、前記発行される次のデータアクセス要求が選択されるのと同一の制約に応じて選択される、
    請求項1から請求項3のいずれか1つに記載のベクトルデータアクセスユニット。
  5. アクセスされる前記データ格納器は複数のバンクメモリのうちの1つのバンクを含む、請求項1から請求項4のいずれか1つに記載のベクトルデータアクセスユニット。
  6. 前記データ格納器は複数バンクのメモリを含み、各バンクは他のバンクから独立的であり、前記データアクセス順序付け回路は、前記少なくとも1つのさらなるデータアクセス要求を選択するとき、同一のクロックサイクルにおいて選択される異なるバンクに対するデータアクセス要求におけるデータアクセス要求に前記制約を課さないよう構成される、請求項4に記載のベクトルデータアクセスユニット。
  7. それぞれが前記少なくとも2つのベクトルデータアクセス命令のうちのそれぞれ1つを受け取るよう構成された、互いに対して並列に配列された少なくとも2つのベクトルデータアクセスモジュールを備える、請求項1から請求項6のいずれか1つに記載のベクトルデータアクセスユニットであって、
    前記データアクセス順序付け回路は、
    それぞれの前記ベクトルデータアクセス命令における前記次のデータアクセス要求を示す前記要素の前記数値位置の指示を格納するための前記ベクトルデータアクセスモジュールのそれぞれにおけるカウンタと、
    前記カウンタの値を比較するための比較回路と、
    前記次のデータアクセス要求を発行するための前記ベクトルデータアクセスモジュールのそれぞれに関連付けられた発行回路と、
    備え、
    前記データアクセス順序付け回路は、前記次のデータアクセス要求が発行されたならば前記制約が満足されなくなることを示す前記比較回路に応答して、前記ベクトルデータアクセスモジュールによる前記次のデータアクセス要求の発行を妨げる信号を、前記ベクトルデータアクセスモジュールのうちの少なくとも1つの前記発行回路に送信するよう構成される、ベクトルデータアクセスユニット。
  8. それぞれが前記少なくとも2つのベクトルデータアクセス命令のうちのそれぞれ1つを受け取るよう構成された、互いに対して並列に配列された少なくとも2つのベクトルデータアクセスモジュールを備え、前記データ格納器は複数のキャッシュラインを備えるキャッシュを備え、前記キャッシュラインのそれぞれは複数のデータ項目を格納し、前記データアクセス順序付け回路は、
    同一のクロックサイクルにおいて実行される前記ベクトルデータアクセスモジュールからのデータアクセス要求が同一のキャッシュラインに対するものであるかどうかを判定そうであるとの判定に応じて、同一のデータアクセス要求として実行されるよう当該データアクセス要求を組み合わせる検出回路、
    を備える、請求項1から請求項6のいずれか1つに記載のベクトルデータアクセスユニット。
  9. 前記少なくとも2つのベクトルデータアクセス命令は、ベクトルロード命令およびベクトル格納命令を含み、前記ベクトルデータアクセスユニットは、
    それぞれが複数のベクトルオペランドを含む複数のベクトルを格納するためのベクトルレジスタ格納器であって、前記ベクトルのうちの少なくとも2つは、前記少なくとも2つのベクトルデータアクセス命令のそれぞれ1つにより示される前記複数のデータアクセス要求のデータ格納器位置を示す複数のアドレスを含む、ベクトルレジスタ格納器、
    をさらに備える、請求項1から請求項8のいずれか1つに記載のベクトルデータアクセスユニット。
  10. データを処理するためのデータ処理装置であって、
    処理される命令をフェッチするためのフェッチ回路と、
    前記命令をデコードするためのデコード回路と、
    前記デコードされた命令に応答して演算を実行するよう構成された処理回路と、
    ベクトルデータアクセス命令に応答して処理される前記データにアクセスするための、請求項1から請求項9のいずれか1つに記載の前記ベクトルデータアクセスユニットと、
    を備える、データ処理装置。
  11. 請求項10に記載のデータ処理装置であって、
    限定的な程度までインターリービングが許可されることを示す命令に応答して、前記命令された順序が前の方のベクトルデータアクセス命令からのおよび命令された順序が後の方のベクトルデータアクセス命令からのデータアクセス要求が限定的な程度までインターリービングされることができるという示唆を前記ベクトルデータアクセスユニットに提供するように、前記デコード回路は構成される、
    データ処理装置。
  12. 限定的インターリービングが許可されることを示す前記命令は、ベクトルロード命令、ベクトル格納命令、限定的インターリービングスタート命令、限定的インターリービングフラグを設定するための命令、およびベクトル制御レジスタを設定するための命令のうちの少なくとも1つを含む、請求項10または請求項11に記載のデータ処理装置。
  13. 限定的インターリービングが許可されることを示す前記命令は、前記限定的インターリービングスタート命令を含み、前記限定的インターリービングスタート命令はインターリービングの程度を示す前記所定値を含む、請求項12に記載のデータ処理装置。
  14. 限定的インターリービングがもはや許可されないことを示す命令に応答してベクトルデータアクセス命令からのデータアクセス要求が限定的な程度までインターリービングされることができないという示唆を前記ベクトルデータアクセスユニットに提供するように、前記デコード回路は構成される、請求項11に記載のデータ処理装置。
  15. 限定的インターリービングがもはや許可されないことを示す前記命令は限定的インターリービングストップ命令およびバックワード分岐命令のうちの少なくとも1つを含む、請求項14に記載のデータ処理装置。
  16. 前記命令された順序が前の方のベクトルデータアクセス命令からのおよび前記命令された順序が後の方のベクトルデータアクセス命令からのデータアクセス要求が限定的な程度までインターリービングされることができることを示すフラグ値を格納するためのフラグデータ格納器をさらに備え、前記ベクトルデータアクセスユニットは前記フラグ値を検出するための検出器を備える、請求項10から請求項15のいずれか1つに記載のデータ処理装置。
  17. 前記データ処理装置は、例の捕捉に応答して前記フラグ値をクリアするように構成される、請求項16に記載のデータ処理装置。
  18. コンピュータプログラムをコンパイルする方法であって、
    コンパイラが、前記コンピュータプログラムを分析し、前記コンピュータプログラム内のループを特定し、前記ループ内のスカラー命令をベクトル命令に変換するステップであって、前記ベクトル命令はベクトルデータアクセス命令を含み、前記ベクトルデータアクセス命令は命令される順序を有し、前記ベクトルデータアクセス命令のそれぞれは複数の要素を特定し、前記要素のそれぞれは実行されるデータアクセス要求を示すものであるステップと、
    前記コンパイラが、前記命令される順序が前の方の第1ベクトルデータアクセス命令および前記命令される順序が後の方の第2ベクトルデータアクセス命令からのデータアクセス要求の限定的インターリービングがデータエラーを生じさせない場合に、前記コンピュータプログラム内における前記第1ベクトルデータアクセス命令および前記第2ベクトルデータアクセス命令を特定するステップと、
    前記コンパイラが、前記第1ベクトルデータアクセス命令の前に、前記第1ベクトルデータアクセス命令および前記第2ベクトルデータアクセス命令からのデータアクセス要求が限定的な程度までインターリービングされることができるという示唆をベクトルデータアクセスユニットに提供する限定的インターリービングスタート命令を前記コンピュータプログラムに挿入するステップであって、
    前記限定的な程度までインターリービングされることは、前記第ベクトルデータアクセス命令において次のデータアクセス要求を示す前記要素の数値位置から前記第ベクトルデータアクセス命令において次のデータアクセス要求を示す前記要素の数値位置を減算した値が所定値より小さい場合には、前記第ベクトルデータアクセス命令からの要素により示される次のデータアクセス要求が前記第2ベクトルデータアクセス命令からのデータアクセス要求より先に発行され、係る減算した値が前記所定値よりも小さくない場合には、前記第ベクトルデータアクセス命令からのデータアクセス要求が前記第1ベクトルデータアクセス命令からのデータアクセス要求より先に発行されることであるステップと、
    前記コンパイラが、前記コンピュータプログラムを、データ処理システム上での実行に用いられるコードに変換するステップと、
    を含む方法。
  19. 請求項18に記載のコンピュータプログラムをコンパイルする方法であって、前記コンパイラが、前記コンピュータプログラム内のループを特定することと、前記コンパイラが、前記ループ内のスカラー命令をベクトル命令に変換することと、の最初の分析ステップを含む、方法。
  20. 前記限定的インターリービングスタート命令は前記所定値を含む、請求項18または請求項19に記載のコンピュータプログラムをコンパイルする方法。
  21. 前記特定されたベクトルデータアクセス命令の後に限定的インターリービングストップ命令を挿入するステップをさらに含む、請求項18から請求項2のいずれか1つに記載のコンピュータプログラムをコンパイルする方法。
  22. 前記命令を分析し、前記コンピュータプログラム内のバックワード分岐を特定し、前記バックワード分岐が前記インターリービングの領域の終点において配置される場合には、前記限定的インターリービングスタート命令のみを挿入し、前記限定的インターリービングストップ命令は挿入しないステップをさらに含む、請求項21に記載のコンピュータプログラムをコンパイルする方法。
  23. コンピュータプログラムをコンパイルするためのコンパイラであって、前記コンピュータプログラムを分析し、前記コンピュータプログラム内のループを特定し、前記ループ内のスカラー命令をベクトル命令に変換するための分析回路であって、前記ベクトル命令はベクトルデータアクセス命令を含み、前記ベクトルデータアクセス命令は命令される順序を有し、前記ベクトルデータアクセス命令のそれぞれは複数の要素を特定し、前記要素のそれぞれは実行されるデータアクセス要求を示し、前記命令される順序が前の方の第1ベクトルデータアクセス命令からのおよび前記命令される順序が後の方の第2ベクトルデータアクセス命令からの前記データアクセス要求の限定的インターリービングがデータエラーを生じさせない場合には、前記第1ベクトルデータアクセス命令および前記第2ベクトルデータアクセス命令を前記コンピュータプログラム内で特定するための分析回路と、
    前記第1ベクトルデータアクセス命令および前記第2ベクトルデータアクセス命令からのデータアクセス要求が限定的な程度までインターリービングされることができるという示唆をベクトルデータアクセスユニットに提供する限定的インターリービングスタート命令を生成し、前記第1ベクトルデータアクセス命令の前に前記限定的インターリービングスタート命令を前記コンピュータプログラムに挿入するための命令生成回路であって
    前記限定的な程度までインターリービングされることは、前記第ベクトルデータアクセス命令において次のデータアクセス要求を示す前記要素の数値位置から前記第ベクトルデータアクセス命令において次のデータアクセス要求を示す前記要素の数値位置を減算した値が所定値より小さい場合には、前記第ベクトルデータアクセス命令からの要素により示される次のデータアクセス要求が前記第2ベクトルデータアクセス命令からのデータアクセス要求より先に発行され、係る減算した値が前記所定値よりも小さくない場合には、前記第ベクトルデータアクセス命令からのデータアクセス要求が前記第1ベクトルデータアクセス命令からの要素により示される次のデータアクセス要求より先に発行されることである、命令生成回路と、
    前記コンピュータプログラムを、データ処理システム上での実行に用いられるコードに変換するための変換回路と、
    を含む、コンパイラ。
  24. 命令された順序を有する少なくとも2つのベクトルデータアクセス命令と、前記ベクトルデータアクセス命令により特定されるデータアクセス要求が何らかの程度までインターリービングされることができるという指示と、に応答して、データ格納器にデータアクセス要求を発行する方法であって、前記ベクトルデータアクセス命令のそれぞれは、実行される複数の順次的なデータアクセス要求をリストするものであり
    前記少なくとも2つのベクトルデータアクセス命令のそれぞれについて、前記複数の順次的なデータアクセス要求のうちのいずれが実行される次のデータアクセス要求であるかを判定するステップと、
    前記実行される次のデータアクセス要求のそれぞれについて、前記ベクトルデータアクセス命令における前記複数の順次的なデータアクセス要求の前記リストにおける前記次のデータアクセス要求の数値位置を判定するステップと、
    前記命令された順序が前の方のベクトルデータアクセス命令からの前記データアクセス要求が、前記命令された順序が後の方のベクトルデータアクセス命令の順次的なデータアクセス要求の前記リストにおける同じ数値位置におけるデータアクセス要求の後で発行されないよう、前記数値位置に応じて前記少なくとも2つのベクトルデータアクセス命令のいずれかから前記次のデータアクセス要求のうちの1つを前記データ格納器に対して発行される次のデータアクセス要求として選択するステップと、
    を含む、方法。
  25. 限定的インターリービングスタート命令と後続の命令される順序を有する第1ベクトルデータアクセス命令および第2ベクトルデータアクセス命令とを含むコンピュータプログラムであって、前記ベクトルデータアクセス命令のそれぞれは複数の要素を特定し、前記要素のそれぞれは実行されるデータアクセス要求を示し、前記限定的インターリービングスタート命令は、データプロセッサにより実行されると、前記命令される順序が前の方である記第ベクトルデータアクセス命令および前記命令される順序が後の方である第2ベクトルデータアクセス命令により特定されるデータアクセス要求の限定的インターリービング命令をスタートするよう前記データプロセッサを制御し、その結果、前記第1および第2ベクトルデータアクセス命令に応答して実行される前記データアクセス要求は限定的な程度までインターリービングされることができ、
    前記限定的な程度までインターリービングされることは、前記第ベクトルデータアクセス命令の複数の要素内の前記要素の数値位置から前記第ベクトルデータアクセス命令の次のデータアクセス要求を示す前記要素の数値位置を減算した値が所定値より小さい場合には、前記第ベクトルデータアクセス命令からの要素により示される次のデータアクセス要求が前記第2ベクトルデータアクセス命令からのデータアクセス要求より先に発行され、前記減算した値が前記所定値よりも小さくない場合には、前記第ベクトルデータアクセス命令からのデータアクセス要求が前記第1ベクトルデータアクセス命令からの要素により示される次のデータアクセス要求より先に発行されることである、
    コンピュータプログラム。
JP2014532473A 2011-09-28 2012-09-26 ベクトルアクセス命令に応答してデータにアクセスするためのベクトルデータアクセスユニット及びデータ処理装置 Active JP6463633B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/200,656 2011-09-28
US13/200,656 US9021233B2 (en) 2011-09-28 2011-09-28 Interleaving data accesses issued in response to vector access instructions
PCT/GB2012/052383 WO2013045919A1 (en) 2011-09-28 2012-09-26 Interleaving data accesses issued in response to vector access instructions

Publications (2)

Publication Number Publication Date
JP2014532221A JP2014532221A (ja) 2014-12-04
JP6463633B2 true JP6463633B2 (ja) 2019-02-06

Family

ID=47023028

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014532473A Active JP6463633B2 (ja) 2011-09-28 2012-09-26 ベクトルアクセス命令に応答してデータにアクセスするためのベクトルデータアクセスユニット及びデータ処理装置

Country Status (6)

Country Link
US (2) US9021233B2 (ja)
JP (1) JP6463633B2 (ja)
KR (1) KR102048213B1 (ja)
CN (1) CN103930883B (ja)
GB (1) GB2508751B (ja)
WO (1) WO2013045919A1 (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9436469B2 (en) * 2011-12-15 2016-09-06 Intel Corporation Methods to optimize a program loop via vector instructions using a shuffle table and a mask store table
US8983979B2 (en) * 2012-01-13 2015-03-17 Hewlett-Packard Development Company, L.P. Controlling access to stored information
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US9600442B2 (en) 2014-07-18 2017-03-21 Intel Corporation No-locality hint vector memory access processors, methods, systems, and instructions
US10275247B2 (en) * 2015-03-28 2019-04-30 Intel Corporation Apparatuses and methods to accelerate vector multiplication of vector elements having matching indices
US10198264B2 (en) * 2015-12-15 2019-02-05 Intel Corporation Sorting data and merging sorted data in an instruction set architecture
US10248419B2 (en) * 2016-03-09 2019-04-02 International Business Machines Corporation In-memory/register vector radix sort
GB2549737B (en) * 2016-04-26 2019-05-08 Advanced Risc Mach Ltd An apparatus and method for managing address collisions when performing vector operations
GB2554096B (en) * 2016-09-20 2019-03-20 Advanced Risc Mach Ltd Handling of inter-element address hazards for vector instructions
DE102017207876A1 (de) * 2017-05-10 2018-11-15 Robert Bosch Gmbh Parallelisierte Verarbeitung
GB2564853B (en) * 2017-07-20 2021-09-08 Advanced Risc Mach Ltd Vector interleaving in a data processing apparatus
GB2573119A (en) * 2018-04-24 2019-10-30 Advanced Risc Mach Ltd Maintaining state of speculation
GB2587426B (en) * 2019-09-30 2022-04-06 Advanced Risc Mach Ltd Atomic range compare and modify operations
US20240086162A1 (en) * 2022-09-09 2024-03-14 Microsoft Technology Licensing, Llc Interleaved machine instruction placement in memory

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6052471B2 (ja) * 1980-05-14 1985-11-19 富士通株式会社 ベクトル演算処理システム
JPS58134365A (ja) * 1982-02-03 1983-08-10 Hitachi Ltd ベクトル処理装置
US4789925A (en) 1985-07-31 1988-12-06 Unisys Corporation Vector data logical usage conflict detection
JPS62115571A (ja) * 1985-11-15 1987-05-27 Fujitsu Ltd ベクトルアクセス制御方式
JPH06103495B2 (ja) * 1987-02-12 1994-12-14 日本電気株式会社 情報処理装置
JPS6462764A (en) * 1987-09-03 1989-03-09 Agency Ind Science Techn Vector computer
US5043867A (en) * 1988-03-18 1991-08-27 Digital Equipment Corporation Exception reporting mechanism for a vector processor
DE68928113T2 (de) 1988-04-01 1997-10-09 Nec Corp Reihenfolgesteuersystem zur Behandlung von Befehlen
JP2870254B2 (ja) * 1991-10-02 1999-03-17 日本電気株式会社 仮想計算機の入出力割り込み処理方式
JPH06230964A (ja) * 1993-02-01 1994-08-19 Hitachi Ltd キャッシュメモリを備えた計算機
JPH06274525A (ja) * 1993-03-19 1994-09-30 Hitachi Ltd ベクトルデータプリフェッチ制御装置
JPH07141327A (ja) 1993-04-13 1995-06-02 Nec Corp ベクトル処理装置
JPH0728786A (ja) * 1993-07-15 1995-01-31 Hitachi Ltd ベクトルプロセッサ
US6208207B1 (en) 1999-05-05 2001-03-27 Simon Fraser University Adaptive linearizer for RF power amplifiers
JP3733842B2 (ja) 2000-07-12 2006-01-11 日本電気株式会社 ベクトルスキャタ命令制御回路及びベクトル型情報処理装置
JP3789320B2 (ja) * 2001-06-12 2006-06-21 エヌイーシーコンピュータテクノ株式会社 ベクトル処理装置及び該装置を用いた追い越し制御方法
US7734676B2 (en) * 2001-06-27 2010-06-08 International Business Machines Corporation Method for controlling the number of servers in a hierarchical resource environment
CN1672128A (zh) * 2002-07-26 2005-09-21 皇家飞利浦电子股份有限公司 用于并行访问多个矢量元素的方法和设备
JP3988144B2 (ja) 2004-02-23 2007-10-10 日本電気株式会社 ベクトル処理装置、及び、追い越し制御回路
GB2447427B (en) * 2007-03-12 2011-05-11 Advanced Risc Mach Ltd Address calculation within data processing systems
US8060728B2 (en) 2007-05-14 2011-11-15 Apple Inc. Generating stop indicators during vector processing
US8078847B2 (en) * 2007-05-14 2011-12-13 Apple Inc. Detecting memory-hazard conflicts during vector processing
US8131979B2 (en) * 2008-08-15 2012-03-06 Apple Inc. Check-hazard instructions for processing vectors
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US8972698B2 (en) 2010-12-22 2015-03-03 Intel Corporation Vector conflict instructions
CN102156637A (zh) * 2011-05-04 2011-08-17 中国人民解放军国防科学技术大学 向量交叉多线程处理方法及向量交叉多线程微处理器

Also Published As

Publication number Publication date
US20150261512A1 (en) 2015-09-17
GB2508751A (en) 2014-06-11
CN103930883B (zh) 2017-02-15
KR20140071425A (ko) 2014-06-11
US20130080737A1 (en) 2013-03-28
JP2014532221A (ja) 2014-12-04
GB2508751B (en) 2020-09-02
US9021233B2 (en) 2015-04-28
US9483243B2 (en) 2016-11-01
GB201403770D0 (en) 2014-04-16
CN103930883A (zh) 2014-07-16
WO2013045919A1 (en) 2013-04-04
KR102048213B1 (ko) 2019-11-25

Similar Documents

Publication Publication Date Title
JP6463633B2 (ja) ベクトルアクセス命令に応答してデータにアクセスするためのベクトルデータアクセスユニット及びデータ処理装置
US8402255B2 (en) Memory-hazard detection and avoidance instructions for vector processing
Ainsworth et al. Software prefetching for indirect memory accesses
JP6236443B2 (ja) ベクトル処理中のデータ要素処理のための順序制御
US9292291B2 (en) Instruction merging optimization
US9811340B2 (en) Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor
JP4841861B2 (ja) 演算処理装置及びデータ転送処理の実行方法
US9483438B2 (en) Apparatus and method for controlling the number of vector elements written to a data store while performing speculative vector write operations
JP2011514598A (ja) 効率的な同期および並列リダクション演算を可能にするベクトル命令
US9280349B2 (en) Decode time instruction optimization for load reserve and store conditional sequences
TWI733798B (zh) 在執行向量操作時管理位址衝突的設備及方法
KR100316710B1 (ko) 병렬 프로세서를 위한 무순서 명령어 발행 방법 및 장치
US6704861B1 (en) Mechanism for executing computer instructions in parallel
JP5630281B2 (ja) ベクトル命令制御回路及びリストベクトルの追い越し制御方法
KR100837400B1 (ko) 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치
US20090031118A1 (en) Apparatus and method for controlling order of instruction
US20160085557A1 (en) Processor and processing method of vector instruction
US20170109160A1 (en) Instruction for performing an overload check
KR20130108878A (ko) 루프의 프롤로그 또는 에필로그의 비유효 연산을 처리하는 장치 및 방법
JPH02206836A (ja) データ処理装置
MXPA98002291A (en) Apparatus for detection based on region of interference between reordered memory operations in a process
JP2006202265A (ja) マイクロコンピュータ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150903

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160928

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161101

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20170201

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20170403

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170501

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20171101

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180301

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20180309

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20180525

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181102

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190104

R150 Certificate of patent or registration of utility model

Ref document number: 6463633

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