JP2024505440A - トリガ条件に依存する命令実行のための回路及び方法 - Google Patents
トリガ条件に依存する命令実行のための回路及び方法 Download PDFInfo
- Publication number
- JP2024505440A JP2024505440A JP2023543144A JP2023543144A JP2024505440A JP 2024505440 A JP2024505440 A JP 2024505440A JP 2023543144 A JP2023543144 A JP 2023543144A JP 2023543144 A JP2023543144 A JP 2023543144A JP 2024505440 A JP2024505440 A JP 2024505440A
- Authority
- JP
- Japan
- Prior art keywords
- execution
- program instructions
- instruction
- circuit
- program
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims description 41
- 230000001419 dependent effect Effects 0.000 title claims description 6
- 238000012545 processing Methods 0.000 claims abstract description 60
- 230000004044 response Effects 0.000 claims abstract description 28
- 239000000872 buffer Substances 0.000 claims description 11
- 238000004891 communication Methods 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 7
- 238000010586 diagram Methods 0.000 abstract description 3
- 230000001960 triggered effect Effects 0.000 description 17
- 238000012546 transfer Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000004088 simulation Methods 0.000 description 5
- 230000007704 transition Effects 0.000 description 5
- 230000009471 action Effects 0.000 description 3
- 238000007792 addition Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 241000473391 Archosargus rhomboidalis Species 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 101100240595 Mus musculus Nipal4 gene Proteins 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000000135 prohibitive effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000004513 sizing Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17356—Indirect interconnection networks
- G06F15/17368—Indirect interconnection networks non hierarchical topologies
- G06F15/17381—Two dimensional, e.g. mesh, torus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/7825—Globally asynchronous, locally synchronous, e.g. network on chip
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/82—Architectures of general purpose stored program computers data or demand driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30094—Condition code generation, e.g. Carry, Zero flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
- G06F9/3891—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Advance Control (AREA)
Abstract
回路は、それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理回路を備え、処理回路は、並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶部と、プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の所与のグループのプログラム命令を提供するように命令記憶部を制御するトリガ回路と、を備える。【選択図】図6
Description
本開示は回路及び方法に関する。
いわゆる「空間アーキテクチャ」は、主に時間ではなく「空間」において、アプリケーションの実行の時間を要する部分を形成することができる固有の計算を展開(unroll)又は展開(unfold)することによってアプリケーションを加速することができる。
計算は、同時実行動作(concurrent operation)が可能な多数のハードウェアユニットを使用することによって「空間」内で展開される。チップ上に広がったばらばらのアプリケーションによって提供される同時実行(concurrency)の機会(opportunity)を利用することに加えて、空間アーキテクチャは、分散したオンチップメモリも利用し、それによって、各処理要素は、それに近接する1つ以上のメモリブロックに関連付けられる。結果として、空間アーキテクチャは、多くの従来のアーキテクチャに影響を及ぼし、性能を潜在的に妨げる、いわゆるフォンノイマンボトルネック(von-Neumann bottleneck)を緩和することができる。
本開示は、そのような構成における潜在的な改善に関する。
例示的な構成では、回路であって、
それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理回路を備え、処理回路は、
並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶部と、
プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の所与のグループのうちのプログラム命令を提供するように、命令記憶部を制御するトリガ回路と、
を備える、回路が提供される。
それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理回路を備え、処理回路は、
並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶部と、
プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の所与のグループのうちのプログラム命令を提供するように、命令記憶部を制御するトリガ回路と、
を備える、回路が提供される。
別の例示的な構成では、処理アレイであって、そのような回路のアレイと、アレイの回路間でデータを通信するデータ通信回路と、を備える、処理アレイが提供される。
別の例示的な構成では、方法であって、
それぞれのトリガ条件が現在のトリガ状態に一致することに依存して、かつ、プログラム命令の実行に応答して次のトリガ状態を設定するように、プログラム命令を実行することと、
命令記憶部によって、並列に実行するために2つ以上のプログラム命令のグループを提供することと、
プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の所与のグループのうちのプログラム命令を提供するように、命令記憶部を制御することと、
を含む、方法が提供される。
それぞれのトリガ条件が現在のトリガ状態に一致することに依存して、かつ、プログラム命令の実行に応答して次のトリガ状態を設定するように、プログラム命令を実行することと、
命令記憶部によって、並列に実行するために2つ以上のプログラム命令のグループを提供することと、
プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の所与のグループのうちのプログラム命令を提供するように、命令記憶部を制御することと、
を含む、方法が提供される。
別の例示的な構成では、コンピュータ実装方法であって、
それぞれのトリガ条件に依存して、実行するためにプログラム命令を生成することであって、プログラム命令の実行が次のトリガ条件を設定する、生成することと、
プログラム命令をプログラム命令のグループへと分割することであって、少なくともいくつかのグループは、所与のグループ内の1つのプログラム命令が所与のグループ内の別のプログラム命令の結果に依存しない、2つ以上のプログラム命令を含んでいる、分割することと、
各グループについて入力トリガ条件及び出力トリガ状態を生成することであって、入力トリガ条件は、満たされた場合、そのグループのプログラム命令の実行を可能にする条件であり、出力トリガ条件は、そのグループ内のプログラム命令のすべての実行の完了に応答して生成するための条件である、生成することと、を含む、
コンピュータ実装方法が提供される。
それぞれのトリガ条件に依存して、実行するためにプログラム命令を生成することであって、プログラム命令の実行が次のトリガ条件を設定する、生成することと、
プログラム命令をプログラム命令のグループへと分割することであって、少なくともいくつかのグループは、所与のグループ内の1つのプログラム命令が所与のグループ内の別のプログラム命令の結果に依存しない、2つ以上のプログラム命令を含んでいる、分割することと、
各グループについて入力トリガ条件及び出力トリガ状態を生成することであって、入力トリガ条件は、満たされた場合、そのグループのプログラム命令の実行を可能にする条件であり、出力トリガ条件は、そのグループ内のプログラム命令のすべての実行の完了に応答して生成するための条件である、生成することと、を含む、
コンピュータ実装方法が提供される。
別の例示的な構成では、コンピュータによって実行されると、コンピュータに上記で定義された方法を実行させるコンピュータプログラムコードを含むコンパイラが提供される。
本技術の更なるそれぞれの態様及び特徴が、添付の特許請求の範囲によって定義される。
添付図面に示されるそれらの実施形態を参照して、あくまで一例として本技術を更に説明する。
例示的な処理アレイ
図面を参照すると、空間アーキテクチャの例示的なインスタンスが図1に概略的に示されている。
図面を参照すると、空間アーキテクチャの例示的なインスタンスが図1に概略的に示されている。
この例示的な構成では、データ処理要素110の2次元アレイ100は、インタフェースタイル(Interface Tile、IT)と呼ばれるデータ転送ユニット130を介してキャッシュ階層又はメインメモリなどのメモリ配列120に接続されている。
空間アーキテクチャのこの例には、2種類のデータ処理要素、すなわち、データ処理動作及び算術計算の大部分を実行する、いわゆる計算タイル(Compute Tile、CT)112と、ローカルに接続されたメモリへのデータアクセス並びにより遠隔にあるメモリ領域及び他の処理要素への/からのデータ転送を主に担当する、いわゆるメモリタイル(Memory Tile、MT)114とがある。
例示的な実施形態では、各メモリタイル(MT)に接続された又は関連付けられたスクラッチパッドとも呼ばれるローカルメモリブロック(図1には示されていないが、図3を参照して後述する)が提供され、各MTは、1つのそれぞれの計算タイル(CT)への直接接続を有する。
各MT-CTクラスタは、データ処理要素110を表し、そのような要素は、スイッチ140(いくつかの例ではルータとも呼ばれる)を介して、アレイ100の回路110間でデータを通信するデータ通信回路の一例を表すネットワークオンチップ150に接続され、ネットワークオンチップは、この例では、MT間及び各MTとインタフェースタイル(IT)130との間でデータを転送するために使用される。しかしながら、いくつかのMT間で共有される単一のスクラッチパッドを有する、又は2つ以上のスクラッチパッドへの直接アクセスを有するMTを有するなど、他の構成も可能である。CTとMTとの間の1対1の対応もアーキテクチャにおいて必須ではなく、1つのMTが2つ以上のCTに接続される場合もあり得、逆もまた同様である。言い換えれば、処理要素は各々、入力チャネルと出力チャネルとのセットを介して、スイッチ及びこれらのスイッチ間のデータリンクを備えるネットワークオンチップに接続され、図1に示すような2次元のトーラスレイアウトを形成する。
図1には示されていないが、以下で図2及び図3を参照して説明される、「チャネル」と呼ばれる先入れ先出し(First-in-first-out、FIFO)バッファは、CT及びMTにデータを配信し、それらから処理済みデータを搬送するために使用される。
CT及びMTのアーキテクチャは、ベクトル処理及びより高度なデータ転送動作をサポートするように拡張された、いわゆるトリガされた命令アーキテクチャ(Triggered Instruction Architecture)(以下で引用されている参考文献1を参照)に基づく。
トリガされた動作
いくつかの例では、各命令は、1つ以上の「トリガ条件」のセットを有し、又はそれに関連付けられ、それらのトリガ条件が有効であるときのみ、すなわち、トリガ条件が別のプログラム命令の実行によって生成されたトリガ状態に一致するときのみ、実行ユニットに発行又は送信される。実際には、プログラム命令の実行は、現在のトリガ状態に一致するそれぞれのトリガ条件に依存するだけでなく、それ自体が次のトリガ状態を設定することもできる。
いくつかの例では、各命令は、1つ以上の「トリガ条件」のセットを有し、又はそれに関連付けられ、それらのトリガ条件が有効であるときのみ、すなわち、トリガ条件が別のプログラム命令の実行によって生成されたトリガ状態に一致するときのみ、実行ユニットに発行又は送信される。実際には、プログラム命令の実行は、現在のトリガ状態に一致するそれぞれのトリガ条件に依存するだけでなく、それ自体が次のトリガ状態を設定することもできる。
トリガ条件は、特定の回路110に固有であり、実行結果、チャネル占有率、又は処理要素の何らかの他の規定された状態に依存することができる。完了すると、各命令は、トリガに影響を及ぼす1つ以上の述語レジスタを設定することができ、したがって、その後、他の命令の実行の準備ができているかどうかを判定するために使用することができる。特に、このタイプ又はアーキテクチャは、典型的には、明示的なプログラムカウンタ及び専用の分岐命令を有さない。その主要な利点は、処理要素のフロントエンド回路のその後の単純化、及び複雑な分岐予測メカニズムに頼ることなく、制御フローハザードに起因するパイプラインバブルを回避することである。
トリガされた命令-例示的なフォーマット
一般に、トリガされた命令は以下のフォーマットを有する。
一般に、トリガされた命令は以下のフォーマットを有する。
宛先オペランド及びソースオペランドは、ベクトルレジスタ、スカラレジスタ、述語、又はチャネルであり得る。言い換えれば、実行された命令は、スカラ命令、ベクトル命令であり得る(その場合、回路110、又はそれらのうちの少なくともいくつかは、ベクトル処理命令を実行するように構成されたベクトル処理回路を備えてもよく、各ベクトル処理命令は、それぞれの処理動作を2つ以上のデータ要素のそれぞれのベクトルに適用する)。
したがって、例として、以下の命令が使用され得る。
述語は、例えば、実行回路210にある述語ストア又はレジスタ212内に維持されてもよく、トリガ回路250によって読み出し可能であり、また、キューに入れられたプログラム命令に関連付けられたトリガ条件を定義する情報をキュー240から受信する(これらのトリガ条件は、今度は、コンパイル動作によってキューをポピュレートするために生成されたものでもよい)。したがって、上記で与えられた例では、条件「p==1001のとき(when p==1001)」の検出は以下のように実行される。
・キュー240は、トリガ条件「p==1001」を(他のキューに入れられた命令に適用可能なトリガ条件と共に)トリガ回路250に提供する。
・トリガ回路250は、述語記憶部212と通信している。
・トリガ回路250は、述語記憶部212によって記憶された述語が1001に等しいときを検出する。
・これに応答して、トリガ回路は、キュー240に制御信号を発行し、復号及び実行のために、関連付けられた命令「add z2,ich2,ich3;set p=1010」を発行するようにキューにプロンプトする。
・キュー240は、トリガ条件「p==1001」を(他のキューに入れられた命令に適用可能なトリガ条件と共に)トリガ回路250に提供する。
・トリガ回路250は、述語記憶部212と通信している。
・トリガ回路250は、述語記憶部212によって記憶された述語が1001に等しいときを検出する。
・これに応答して、トリガ回路は、キュー240に制御信号を発行し、復号及び実行のために、関連付けられた命令「add z2,ich2,ich3;set p=1010」を発行するようにキューにプロンプトする。
この命令の実行の完了に応答して、実行回路210は、述語記憶部212によって保持された述語を新たな値1010に設定する。上記に概説されたプロセスは、再び、トリガ回路が、この新しい述語値と別のキューに入れられた命令に関連付けられたトリガ条件(キュー240によって通信される)との間の一致を検出することに従う。プロセスは、トリガ状態が、プログラムコードのコンパイル時に確立されるような次のトリガ条件に一致することの連鎖に従う。
述語記憶部212は、トリガ回路250に提供されてもよく、あるいは、実行回路210によって書き込み可能であり、かつトリガ回路250によって読み出し可能である別個の回路アイテムとして提供されてもよいことに留意されたい。
空間アーキテクチャ内の任意の所与のロケーションにおいて実行することができる計算量には、多くの制約がある。そのような制約は、あるロケーションにデータを配信することができる又はそこからデータを除去することができる速度、並びに電力的制約又は熱的制約であり得る。結果として、いくつかの例示的な実施形態は、例えば、利用可能なネットワーク又はデータ転送の帯域幅に依存して、所与のロケーションにおいて実行される処理量を適応させるように作用し得る。
本開示の例示的な実施形態は、潜在的により高い並列処理(parallelism)の機会を提供し得る、かつ、計算とネットワーク又はメモリの帯域幅との比率の均衡化を潜在的により容易にし得る、追加の構成オプションを提供することができる。
例示的な計算タイル
図2は、上述したように、スケーラ命令及び/又はベクトル命令に作用し得る計算タイル112の一般的な例を提供する。
図2は、上述したように、スケーラ命令及び/又はベクトル命令に作用し得る計算タイル112の一般的な例を提供する。
上記で論じたように、1つ以上のFIFO要素200は、入力チャネルとして作用し、実行回路210に入力を提供し、1つ以上のFIFO要素220は、出力チャネルとして作用する。実行は、1つ以上のプロセッサレジスタ230に関して実行回路210によって実行される。
命令キューは、実行するためにプログラム命令を提供する命令記憶部の一例を提供する。プログラム命令は、プログラム命令(例えば、以前に実行されたプログラム命令)の実行によるトリガ状態の生成と、キュー240によって保持された命令に関連付けられたトリガ条件とに応答するトリガ回路250に応答して提供され、実行するためにプログラム命令を提供するようにキュー240を制御する。キュー240によって発行されたプログラム命令は、実行回路210にパスされる前に復号回路260によって復号される。
例示的なメモリタイル
図3におけるMT114の一般的な概略図は、以下の例外を除いて、図2のCTの概略図と実質的に同じである。
(a)「記憶」ブロック又は回路300は、実行回路に接続されている。
(b)通信回路150へのインタフェースを備える「アレイインタフェース」ブロック又は回路310は、実行回路に接続されている。
図3におけるMT114の一般的な概略図は、以下の例外を除いて、図2のCTの概略図と実質的に同じである。
(a)「記憶」ブロック又は回路300は、実行回路に接続されている。
(b)通信回路150へのインタフェースを備える「アレイインタフェース」ブロック又は回路310は、実行回路に接続されている。
そうでない場合、メモリタイル114の動作は、上記で論じた計算タイルの動作に対応する。MTは、CTのようにトリガされた命令を使用し、実行経路は、(いくつかの例では)MTが必ずしもバルクデータ処理を実行する必要がないので、CTに対してMTではより単純である場合があるが、MTは、アドレス計算、データ置換、及びアレイインタフェース310を介したローカルな記憶部300とアレイの残りとの間のデータ転送を実行するのに十分な機能性を依然として保持することに留意されたい。
回路110のCT112とMT114との間のデータ項目の通信は、データ項目を送信するタイルの出力チャネル(単数又は複数)及びデータ項目を受信するタイルの入力チャネル(単数又は複数)を介する。
データフローグラフ
以下に論じられる技法では、アプリケーション内の計算を空間に展開するためには、まず、アプリケーション内の動作を表すデータフローグラフ(dataflow graph、DFG)を決定することが有用であり得る。
以下に論じられる技法では、アプリケーション内の計算を空間に展開するためには、まず、アプリケーション内の動作を表すデータフローグラフ(dataflow graph、DFG)を決定することが有用であり得る。
そのようなDFGの例を図4に概略的に示す。入力チャネル(ichn)は、DFGの上部に沿って表され、出力チャネル(och0)は、DFGの下部に表され、乗算(×)、加算(+)、減算(-)及び最大/最小関数(max/min)などの計算動作は、様々な動作を概略的にリンクさせるラインに沿って表されている入力オペランド及び動作の出力宛先を用いて表される。
次いで、このデータフローグラフを分割し、利用可能なハードウェアユニットにわたって分散させることができる。しかしながら、現実的なDFGは、利用可能な空間リソースよりも大きくなる傾向があり、したがって、最終的には、DFGをハードウェアにマッピングできるようにするために何らかの形のタイムスライスが行われる。しかしながら、空間設計の本発明の例のうちのいくつかでは、そのようなタイムスライスの範囲は、従来のアーキテクチャに対して制限され得る。
空間アーキテクチャ内では、従来のアーキテクチャに対して観察される総スピードアップは、命令レベルの並列処理(instruction-level parallelism、ILP)とデータレベルの並列処理(data-level parallelism、DLP)とタスクレベルの並列処理(task-level parallelism、TLP)との混合から導出される。タスクレベルの並列処理又は(データストリームを介して接続される)タスクのパイプラインの構築は、ILP及び/又はDLPを含むオーケストレーションのレベルに直交すると見なされ得る。したがって、例えば、タスクAを処理要素の1つのセットに配置し、タスクBを別のセットに配置することができ(かつ2つのセット間が接続され、したがって、Aによって生成されたデータをBが消費することができる)、処理要素の2つのセットが同時に動作することができる一方で、各セットは個々に、DFGのそれらの部分に存在するILP及び/又はDLPを完全に利用しようとする。
ベクトル化(機能ユニットがデータ要素のグループに対して同時に動作することを可能にする)及びタイル化(データセットを空間ファブリックにわたって広がる固定チャンクへと分割する)は、典型的には、DLPの抽出を可能にする。しかしながら、システムが上述のようにDLP及びTLPを抽出するための改善された機会を有する場合であっても、トリガされたアーキテクチャにおいて現在十分に対処されていない並列処理の潜在的なソースである、ILPの不足が存在する可能性がある。本発明の実施形態は、各処理要素の計算強度と利用可能なメモリ又はネットワークの帯域幅との間のトレードオフ又は均衡化を潜在的により良好にすることができるやり方で、並列に動作のグループに作用するように処理要素に効率的に命令する方法を提案する。本発明の実施形態のうちのいずれかでは、処理回路は、2つ以上のベクトル処理命令を並列に実行するように構成されたベクトル処理回路を備えてもよく、各ベクトル処理命令は、それぞれの処理動作を2つ以上のデータ要素のそれぞれのベクトルに適用する。
提案された技法の概要
次に、本開示によって提案されるアーキテクチャ拡張が、それによって追加の並列実行を潜在的に抽出することができる例について説明する。
次に、本開示によって提案されるアーキテクチャ拡張が、それによって追加の並列実行を潜在的に抽出することができる例について説明する。
この例は、複数のそれぞれの処理要素上で実行する複数のより小さい部分へと分割されたアプリケーションに関する。アプリケーション又はカーネルの1つの部分が、図4に示すデータフローグラフを有すると仮定する。トリガされた処理要素においてこれをどのように実装できるかについての例が与えられる。
ベクトル化及びタイル化は、この観点においてすでに実行されていると仮定され、図4に示される動作は、(適切な場合には)入力チャネルから供給されるベクトルデータを処理することができ、かつベクトルデータを他の処理要素又はメモリに戻すことができることに留意されたい。
図4のDFGを観察すると、多数の動作を並列に実行することができることに留意することが可能である。すなわち、DFGの同じ「レベル」(描かれているような垂直位置)にあるノードは、相互依存性を有さず、データハザードを発生させずに同時に実行させられるようにすることができる。
本開示によって提案される技法がない場合、このデータフローの以前に提案された一実装形態は、以下の通りであり得る。
ここで、「mul」は乗算動作を表し、「sub」は減算動作を表し、「ne」は「等しくない(not equal)」場合の、この場合は即値0に対するテストを表す。
ライン1~7上の命令によって表される動作は、図4のDFG内のノード(1~7とラベル付けされている)に対応する。更に、ライン3及びライン4上では、指定されたチャネルのそれぞれの先頭にあるデータ項目を除去するチャネルデキュー動作(「deq」)が行われる。これは、いったんそれぞれのデータに関連するすべてが利用されると生じ得る。
レジスタr1は、ライン8上で更新される(即値1だけデクリメントされる)特殊な反復カウント値を保持し、ライン9上の比較命令は、DFGを実装する状態遷移のシーケンスを再開するライン1上の命令をトリガすることと、すべての関連する値が処理されたことをおそらく示す何らかの他の状態にすることと、から選択するために使用される。
「z」は、比較の結果に依存して実行時にこの特定のビットが設定されることを示すために、ライン9で使用される。すなわち、位置3におけるビットは、r1!=0の場合には1に設定されるが、r1==0の場合には、位置3におけるビットは0に設定される。したがって、最終的な述語結果は、比較(ne)が成功した場合には1000となり、チェックが失敗した場合には0000となる。
本開示によって提案される構成は、プログラマ又はコンパイラが、並列に処理することができる1つ以上の命令の「グループ」又は「バンドル」(2つの用語は、本明細書の目的では等価であると見なされる)を指定する構成を利用することができる。そのような構成では、コンパイル又は他の動作は、それぞれのトリガ条件に依存して、実行するためにプログラム命令を生成することであって、プログラム命令の実行が次のトリガ条件を設定する、生成することと、プログラム命令をプログラム命令のグループへと分割すること又はバンドル化することであって、少なくともいくつかのグループは、所与のグループ内の1つのプログラム命令が所与のグループ内の別のプログラム命令の結果に依存しない、2つ以上のプログラム命令を含んでいる、分割すること又はバンドル化することと、各グループについて入力トリガ条件及び出力トリガ状態を生成することと、に関与することができ、入力トリガ条件は、満たされた場合、そのグループのプログラム命令の実行を可能にする条件であり、出力トリガ条件は、そのグループ内のプログラム命令のすべての実行の完了に応答して生成するための条件である。
すなわち、命令のバンドルを指定するために以下のフォーマットが定義され得る。
言い換えれば、トリガ条件が単一のそれぞれの命令の開始に関連し、かつその単一の命令がその実行に応答してトリガ状態を生成するのではなく、提案された構成では、トリガ回路は、命令のバンドルの実行によるトリガ状態の生成、と所与のバンドルに関連付けられたトリガ条件とに応答して、実行するために命令のそのバンドルを提供するようにキュー240を制御する。言い換えれば、述語の生成はバンドルベースで実行され、トリガ条件に対する述語のテストもまた、トリガ条件が個々の命令ではなくバンドルに関連付けられるようにバンドルごとに実行される。
バンドルが1つの命令だけを含むことが可能であるが、多くの場合、バンドルは、2つ以上の命令を含んでもよく、いずれにしても、本発明の構成は、バンドルベースのトリガ条件テスト及びトリガ状態生成を可能にすることに留意されたい。
したがって、この方式を上記のコードに適用すると(かつ、使用中の回路が、最大で、例えば4つの命令を並列に実行することができると仮定すると)、以下のプログラムコードが生成され得る。このコードでは、ソフトウェアのパイプライン化が採用され、この場合、動作を時間的に整列させるために使用されるプロローグセクション(ライン1~10)が存在することに留意されたい。同様のバンドル化された命令プログラムはまた、以前のコードを展開し、展開された本体内の動作をグループ化することによって生成され得るが、そのような展開は、コード「bloat」(タスクの特定のセットを実行するプログラム命令の全体量における望ましくない程度の成長を説明するために使用される用語)をもたらす傾向があり、命令空間がクリティカルリソースではないシナリオにおいてより良好に使用される。
このコードを図4のDFGと比較すると、動作の以下のバンドルが定義される。
・ 図4に、1、2、3及び4として示される動作。これらは、リストのライン1~6に示されるバンドルによって定義される。このバンドルは、p==0010のときに実行し、その実行に応答してp=1010を設定する。
・ 図4に、5、6として示される動作。これらは、リストのライン7~10に示されるバンドルによって定義される。このバンドルは、p==1010のときに実行し、その実行に応答してp=1000を設定する。
・ 図4に、1、2、3及び4として示される動作。これらは、リストのライン1~6に示されるバンドルによって定義される。このバンドルは、p==0010のときに実行し、その実行に応答してp=1010を設定する。
・ 図4に、5、6として示される動作。これらは、リストのライン7~10に示されるバンドルによって定義される。このバンドルは、p==1010のときに実行し、その実行に応答してp=1000を設定する。
上述したように、これら2つのバンドルは、メインループの前にいわゆるプロローグを形成する。ライン1~6及びライン7~10上のバンドルの実行は、z5及びz6の予備値、すなわちz5’及びz6’を提供することになる。続いて、ライン12~17及びライン18~23上のバンドルを実行することにより、z5及びz6の新しい値、すなわち、z5’ ’及びz6’ ’が生成される一方で、古い値z5’及びz6’が消費される(ライン21上の動作を参照)。次いで、このプロセスが繰り返される(ライン24からライン12にループして戻る)。すなわち、ライン21上の動作が常に、以前に生成されたz5及びz6の値を消費する一方で、バンドル(ライン18~23)は、将来の反復のためにz5及びz6の新しい値を生成する。プロローグは、シーケンスの開始時にz5及びz6の値の第1の対を得るために必要とされる。
したがって、メインループは以下のバンドルを含む。
・ 図4に1、2、3及び4として示される動作。これらは、リストのライン12~17に示されるバンドルによって定義される。このバンドルは、p==1000のときに実行し、その実行に応答してp=1100を設定する。
・ 図4に5、6として示される動作。これらは、リストのライン7~10に示されるバンドルによって定義される。このバンドルは、p==1100のときに実行し、その実行に応答してp=1101を設定する。
・ p==1101のときに実行し、p=z000を設定するライン23の単一命令バンドルとして表される、上記で論じたループ継続動作。
・ 図4に1、2、3及び4として示される動作。これらは、リストのライン12~17に示されるバンドルによって定義される。このバンドルは、p==1000のときに実行し、その実行に応答してp=1100を設定する。
・ 図4に5、6として示される動作。これらは、リストのライン7~10に示されるバンドルによって定義される。このバンドルは、p==1100のときに実行し、その実行に応答してp=1101を設定する。
・ p==1101のときに実行し、p=z000を設定するライン23の単一命令バンドルとして表される、上記で論じたループ継続動作。
次いで、ループは、r1!=0の場合、ライン12に、すなわちp==1000に分岐して戻る。一方で、r1==0である場合、チェックは失敗し、コードは、図4に示されるDFG以外の更なる動作を処理する入力述語0000(このリストには示されていない)を有する命令/バンドルをトリガする。
上記で実証したバンドル化されたトリガ手法の副作用は、プログラムによってトラバースされなければならないアクティブ述語ビット数又は状態空間の低減を助けることができ、潜在的なハードウェア改善につながることである。複数の命令は、単一のトリガ条件を利用することができ、それにより、命令選択論理のスケーラビリティを潜在的に改善する。
更に、命令バンドルは、従来のプロセッサにおいて一般的であり、かつ、それらが導入する追加の複雑性に起因して非効率性を潜在的にもたらす、従来の名前変更動作又は依存性チェック又はリアルタイムオペランド可用性追跡ユニットなしに、同時実行を可能にする。
すべてのチャネルデキュー(又は実際にはエンキュー)動作は、バンドル内のすべての命令の完了後まで延期されることに留意されたい。したがって、ライン4、5、15及び16上で指定されたデキュー動作は、対応するバンドルの全体の完了後まで実行されないことになる。言い換えれば、コードのコンパイルは、グループを実行するための入力データを提供する1つ以上の入力チャネルについて、グループのプログラム命令の実行後に1つ以上の入力チャネルから入力データをデキューする1つ以上の動作を生成することを含むことができる。
以下で説明する例示的な回路は、命令が真に同時に実行し、したがって、中間レジスタの変数へのいかなる書き込みもバンドルの終わりまで見られないことを保証することができることになる。したがって、例えば、ライン19上のベクトルレジスタz5及びライン20上のベクトルレジスタz6への書き込みは、バンドルの終了後まで行われず、したがって、ライン21上での「sub」動作には見られないことになる。バンドル内の同じ宛先ベクトルレジスタ又はチャネルへの複数の書き込みは、非決定論的な挙動を引き起こす可能性があり、理想的にはコンパイラによって検出されるべきである。そうでない場合、いくつかの実施形態は例外を生成する場合があり、一方、いくつかの他の実施形態は、そのような障害が発生したことを示すことができる(かつ、デバッグ目的で使用することができる)システムレジスタを提供する可能性がある。
バンドル内のすべての命令は、同じトリガ条件を共有し、したがって、マシンの現在の状態に依存して、命令は、すべて進行する、又はいずれも進行しない。したがって、例えば、入力チャネル3(ich3)上にデータが存在しない場合、ライン14上の「add」及びライン16上の「sub」は、当然、実行することができないが、それらはライン13上の「mul」動作及びライン15上の別の「mul」動作とバンドル化されているので、これらの動作は、それらが動作するデータが実際には利用可能である場合であっても同様にストールされる。複数のチャネルのリーダのこの間接的な同期がいくつかの利点を有する一方で、ストールの確率が増加することに起因して、大きなバンドルに対してコストが高くなる場合がある。結果として、コンパイラのいくつかの実施形態は、ストールの頻度を制限しながらバンドル化の利点のいくつかを獲得するために、コードにおいて指定されたサイズからバンドルサイズを人工的に低減するように動作可能であり得る。いくつかの例では、バンドルは、命令を実行するために使用される回路によって提供される並列処理の程度に制限されてもよく、例えば、以下に与えられる例のうちのいくつかでは最大4つの命令でバンドル化する。
バンドル化された命令を実行することが可能なトリガされたマイクロアーキテクチャ内に存在する複数の実行パイプライン又は実行経路は、同時に動作することができるが、そのようなパイプラインは、対称でない場合がある。その結果、いくつかの実施形態では、各バンドル内の命令の混合が基礎となるハードウェアによってサポートされていることを検証するために、コンパイラ又は何らかの他の同様のツールを動作させる場合がある。ある実行「スロット」又は実行経路が制限された数の命令のみを受け入れる場合、利用可能なハードウェアに一致するように命令をバンドル内で並べ替える(再配置する)必要がある場合もある。更に、ある同時期の動作の組み合わせがサポートされていない場合、バンドルはコンパイラによって分解される必要がある場合があり、あるいは、トリガされた命令ハードウェアが、実行時にバンドル内の動作をタイムスライスすることができる場合がある順序付けユニットを呼び出してもよい。実際には、これは、バンドル内の命令の数が最大サポート実行(並列処理)幅よりも大きい場合にも当てはまり得る。また、バンドル幅が実行幅と一致する場合であっても、いくつかの実施形態では、レジスタのアクセス制約に起因して、バンドル内の命令すべてが同時に進行することができない場合があり、したがって、何らかの形態の順序付けが不可避である場合がある。
(述語レジスタに書き込む)比較のような状態遷移命令は、バンドル内で許可されるが、同じ述語レジスタへの複数の書き込みは、非決定論的挙動を引き起こし得る。加えて、バンドル全体を対象とする述語セットは、関連するビット位置に高インピーダンスインジケータ(ライン24上に示されるものなど)を有し、バンドル内の比較のうちの1つ以上の結果によってそのビットを設定することが可能になる。
言い換えれば、バンドル内に1つの比較しかない場合、以下の例のようなものが使用され得る。
1 * set p = z101 : when p == 1111
2 sub z1, z2, z3
3 mul z7, z6, z8
4 ne p3, r1, #0
5 sub z0, z1, z6
6 *
1 * set p = z101 : when p == 1111
2 sub z1, z2, z3
3 mul z7, z6, z8
4 ne p3, r1, #0
5 sub z0, z1, z6
6 *
ここで、通常は単一の命令に関連付けられるビット3における遷移はこの時点では、バンドル全体に関連付けられており、述語ビット「3」はバンドルの完了時にのみ更新される。
バンドル内により多くの比較動作が存在する場合、更新が競合していないこと、あるいは言い換えると、更新が好ましくは異なる述語ビットに適用されることが保証されなければならない。例えば、
1 * set p = z10z : when p == 1111
2 sub z1, z2, z3
3 ne p0, r2, #0
4 ne p3, r1, #0
5 sub z0, z1, z6
6 *
1 * set p = z10z : when p == 1111
2 sub z1, z2, z3
3 ne p0, r2, #0
4 ne p3, r1, #0
5 sub z0, z1, z6
6 *
考慮する価値のある1つの側面は、バンドル粒度がプログラム全体にわたって一定でなくてもよく、いくつかのプログラムでは非常に不規則に変わる場合さえあるという事実である。上記で提示したバンドル化されたトリガ命令を有するプログラムを調べると、プログラムがサイズ1、2、及び4のバンドルを有するので、この不規則性のいくつかのインスタンスを観察することができる。したがって、命令メモリ内のバンドルをプログラム内に見えているようにレイアウトするハードウェア実装形態は、あるメモリ領域の非効率性又は不十分な利用に悩まされる可能性がある。これに関して、各場合における、(第1のシェーディング500によって表される)異なるサイズのバンドルと、第2のシェーディング510によって表される対応する十分に利用されていない又は浪費されたメモリ領域との概略的な例を提供する図5を参照する。
各トリガされた命令がマルチウェイ状態遷移動作を包含すると仮定すると、それらは必ずしも命令メモリ内に順次配置される必要はないが、自由に再配置することができる。結果として、例示的な実施形態は、バンドル化された命令を潜在的により効率的に記憶することを可能にするために、図6に示される命令メモリの編成を提案する。図6は、命令バンドリングをサポートする空間トリガされたアーキテクチャにおける処理要素の1つの例示的な実施形態を示す。
図6の構成(及び実際には図7又は図8の構成)は、上記で論じたような計算タイル及び/又はメモリタイルの態様(記憶部及びアレイインタフェース以外)、換言すると、図1のアレイの1つのノードにおける回路を表すことができる。コンパイル動作は、プログラム命令のグループを、そのようなプロセッサ若しくは回路のアレイの個々のプロセッサにルーティングすることに関与し得る。
すなわち、図6では、同様のサイズのバンドルは、それぞれの異なる幅の命令キュー(又はより一般的には、命令記憶部)内に一緒にグループ化され、異なるバンドルサイズが、別個のメモリモジュール内に配置され、したがって、図5によって表される実装形態よりも高い記録密度(packing density)を集合的に有することができる。
トリガ回路615からの信号である命令出力トリガ610は、次にトリガされるバンドルのサイズを示す「ウェイ」番号又は他の指示を組み込むように(図2を参照して説明したものに関して)拡張され、それにより、関連するバンドルの取り出しが単純化される。また、「ウェイ」番号は、命令記憶部600の関連するキューによって提供されるプログラム命令が復号及び実行のためにルーティングされるようにマルチプレクサ620にも提供される。
命令記憶部600内のキューの実際のサイズ決めは、プロファイルされたプログラム内のバンドルサイズの混合に依存し得る。ルーティング回路625は、キューに入れるために命令記憶部600の適切なキュー内に命令をルーティングするために、例えば、コンパイラによって提供された信号又はデータの制御下で動作し、それにより、プログラム命令のグループを複数の命令キューから選択された命令キューにルーティングし、この命令キューは、実行するためにプログラム命令のグループを選択的に並列に提供するように構成されている。命令記憶部600のキューのバンドル化及び提供の本発明の構成は、特定のバンドルが1つの命令を含み得る可能性を提供するが、マルチ命令バンドルの可能性もまた明示的に提供することに留意されたい。1つのバンドルが2つ以上の命令を含む場合、命令記憶部は、並列に実行するために2つ以上の命令(2つ、3つ、又は4つの命令など)を提供するように構成される。コンパイラの制御下では、1つ又は2つの命令のバンドルが、その処理段階において他のバンドルを記憶する必要があることに依存して、ルーティング回路625によって4命令キューにルーティングされ得ることに留意されたい。
バンドルの全体を保持するためにキューが提供されることは要件ではないが、例示的な構成では、以下に論じるように、バンドルを、回路によって提供された最大幅のキューよりも大きくならないようにコンパイルすることができる。
キューは、1つ以上のバンドルの深さを含むことができるが、例示的な実施形態では、キューは、少なくとも2つのバンドルの深さを含み、それによって、実行するためにキューによってバンドルが提供されたとき、別のバンドルがすでにキューに入れられており、キューの新しい先頭になる準備ができている。
以前に復号された命令に対応するビットパターンをフロントエンド内の記憶領域に記憶することがより効率的である実施形態では、図6に示される複数の命令復号ユニット630(次いで、ハードウェアユニットを複数回復号する命令を複製する代わりに、並列にアクセスされ得る)が存在しない場合があることに留意されたい。加えて、いくつかの実施形態では、両方の手法が存在する場合があり、(コンパイルフェーズ中に又はバンドル化された命令の先行するインスタンスを復号する際に事前に取得された)以前に復号されたバンドル含んでいる場合がある特別な記憶領域を使用して、復号段階をスキップすることによって、いくつかのインスタンスにおけるフロントエンドの電力要件又はパイプライン深さを低減することができる。
トリガ回路615は、(場合によっては、結果バス及びチャネル占有情報からのデータを使用して、かつ/又は、上述のように述語ストア(図示せず)にアクセスして)処理要素の現在の状態を評価して、どのバンドルのトリガ条件が満たされたかを判定し、命令メモリからトリガされたバンドルを選択し、選択されたバンドルのルーティングのためにマルチプレクサ620を制御するために使用される。
レジスタファイル635及び入力チャネル640によって保持され、概略マルチプレクサ650によって実行回路645にルーティングされる値に関して実行が行われる。実行結果は結果バス655上に提示され、そこから出力チャネル660にルーティングされ、レジスタファイル635及び/又はトリガ回路615に戻すことができる。
したがって、図6は、命令記憶部600が、実行するためにプログラム命令のグループを提供するように各々が構成された少なくとも2つの命令キューを備える例を提供し、命令キューは、並列に実行するために最大n個のプログラム命令のグループを提供するように構成された第1の命令キューと、実行するために最大m個のプログラム命令のグループを並列に提供するように構成された第2の命令キューとを備え、mはnに等しくない。例えば、m及びnは、図6の例では、値1、2及び4のうちの任意の各値であると見なされ得る。
この例では、トリガ回路615は、プログラム命令の実行によるトリガ状態の生成と、命令記憶部600の少なくとも2つの命令キューのうちの所与の命令キューに関連付けられたトリガ条件とに応答して、実行するためにキューに入れられたプログラム命令を提供するように所与の命令キューを制御する610。
この構成はまた、プログラム命令のグループを命令キューのうちの選択された1つにルーティングするように構成されたルーティング回路625と、命令記憶部600の命令キューのいずれかによって並列に提供されたプログラム命令の最大数(この例では4つ)以上である多数(この例では同じく4つ)のプログラム命令を並列に実行する複数(図6の例では4つ)の実行経路630、645とを示す。他の実施形態では、例えば、この数は、各キューからのバンドルを並列に実行することができるように、7であり得る。
したがって、図6(及び、実際には図7又は図8)は、それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理回路630、645を備える回路の一例を提供し、処理回路は、並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶部600と、プログラム命令のグループの実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するために(例えば、プログラム命令の所与のグループの)プログラム命令を提供するように命令記憶部を制御するトリガ回路615と、を備える。
レジスタファイルの考慮事項
図6は、共通の又はモノリシックなレジスタファイル635を提供する。したがって、この構成は、復号段階630及び実行回路645によって図6に表される複数の実行経路を提供するが、図6の構成は、実行経路のうちのいずれかによるプログラム命令の実行に共通のプロセッサレジスタのセット、すなわち、プログラム命令のグループ内のプログラム命令の実行に共通のプロセッサレジスタのセットを提供し、プロセッサレジスタのセットは、プログラム命令の実行中にアクセス可能である。
図6は、共通の又はモノリシックなレジスタファイル635を提供する。したがって、この構成は、復号段階630及び実行回路645によって図6に表される複数の実行経路を提供するが、図6の構成は、実行経路のうちのいずれかによるプログラム命令の実行に共通のプロセッサレジスタのセット、すなわち、プログラム命令のグループ内のプログラム命令の実行に共通のプロセッサレジスタのセットを提供し、プロセッサレジスタのセットは、プログラム命令の実行中にアクセス可能である。
しかしながら、レジスタファイル635が多数の読み出しポート及び書き込みポートを、例えば、一実施形態では12個の読み出しポート及び4個の書き込みポートを有し得るので、現実的な設計では、この構成により課題が生じる。この潜在的に法外なコストは、各実行スロットが理想的には最大で3つのソースオペランドに同時にアクセス可能であるべきであり、かつ、機能ユニットを出て転送経路及びレジスタ書き込み回路を供給するバックエンドにおけるデータ経路の帯域幅が、ストールの導入を回避するのに十分に高さである必要があるので生じる。いくつかの潜在的な解決策が存在する。
いくつかの例示的な実施形態では、3つのソースオペランドを必要とする乗算及び累算「mla(multiply-and-accumulate)」などの動作は、少数のパイプライン(実行経路)に制限することがあり、他のパイプラインは、1つ又は2つのソースオペランドのためのレジスタファイルアクセスのみをサポートする場合がある。この方式は、全体的なポート数を低減することができるが、柔軟性及び性能を潜在的に損なう可能性がある。したがって、この例では、実行経路のうちの少なくとも1つは、最大で第1の数のオペランドを有するプログラム命令を実行するように構成されており、実行経路のうちの少なくとも別の実行経路は、最大で第2の数のオペランドを有するプログラム命令を実行するように構成されており、第1の数と第2の数とは異なる。例えば、オペランドの第1の数及び第2の数は2及び3であってもよい。
分割レジスタファイル
次に、分割レジスタファイルを使用する別の実施形態について、図7を参照して説明する。ここで、図6の構成と共通の特徴には同じ参照番号が与えられ、再度詳細には説明しない。
次に、分割レジスタファイルを使用する別の実施形態について、図7を参照して説明する。ここで、図6の構成と共通の特徴には同じ参照番号が与えられ、再度詳細には説明しない。
図7の構成は、実行経路の各々について1つのセットである、少なくとも2セットのプロセッサレジスタ(「レジスタバンク」700として図7に示され、n=0、1、2、又は3である)であって、所与の実行経路に対するプロセッサレジスタのセットは、その実行経路によるプログラム命令の実行中にアクセス可能である、少なくとも2セットのプロセッサレジスタと、プロセッサレジスタのセット間でデータを通信する通信回路710と、を提供する。
この実施形態では、コンパイルフェーズ中に、同じスロット又は実行経路を共有するすべての命令がそれらの間でレジスタファイル(バンクn)の共通部分を有するが、バンク間通信回路710を使用してバンク間で情報を転送するために明示的な「レジスタ移動」が必要とされるように、レジスタアロケータを制限することができる。この方式では、先に示したコードのライン12~23を以下のように書き換えることができる。
バンク間データ移動動作の回数を低減するために、バンドルのうちの1つの中の命令が「並べ替えられている」ことがわかる。ここで使用されるレジスタ表記では、サフィックス「_0」、「_1」、「_2」及び「_3」は、レジスタを含んでいるそれぞれのレジスタバンクを識別する。命令のバンドル化をサポートするために必要な明示的な移動動作は、ライン19に示されている。
図7では、レジスタファイルのようにはバンキングされていない4つの入力チャネル640がある。これは、入力チャネルの数は、典型的には、メインレジスタファイルに対してはるかに少なく、「読み出し専用」であるので、これは許容可能なトレードオフである場合がある。加えて、4つの出力チャネルに送信されたデータは決してリードバックされないので、いくつかの実施形態ではバンキングを回避することができる。しかしながら、他の例では、入力チャネルはまた、レジスタファイルと同じ方法でバンキングされ得る。
戻り経路720は、バンク間通信回路710を使用する追加の動作を必要とせずに、特定の実行経路による実行の結果が、その実行経路に関連付けられたレジスタバンクにライトバックされることを可能にすることに留意されたい。
図8に示される、分割レジスタファイルを使用する別の実施形態では、レジスタアクセス方式の更なる例は、複数のスロット又は実行経路による並列アクセスを同時に可能にしながら、レジスタファイルに必要とされる読み出しポートの数を低減するバンドル化されたトリガされた命令セットアーキテクチャを提供する。
ここでも、図6又は図7と共通の特徴は同じ番号を使用し、更に詳細には説明しない。
しかし、図7の方式とは異なり、図8では、スロット又は実行経路間のコヒーレンシを維持するために明示的な移動動作は必要とされない。この方式では、各スロットは、スロットレジスタバッファ(Slot Register Buffer、SRB0...3)800と呼ばれる小さなローカルレジスタファイルを有し、このレジスタファイルは、(すべての経路に共通な)メインレジスタファイル810から取り出されたオペランド又はその実行経路により実行された以前のデータ処理動作によって書き込まれたオペランドのコピーを保持する(所与の実行経路によって生成されたデータのための戻りルート820があることに留意されたい)。
このような構造に流入する又はそこから流出する情報を管理するための多くの可能な技法があり、1つの手法を以下に示す。メインレジスタファイル810に対して各SRB800を小さく保ち、各々が有する読み出しポートの数を制限することによって、合理的なパワーエンベロープ内にとどまりながら、バンドルの同時実行の機会を処理することが可能である。
レジスタバッファ管理ユニット(Register Buffer Management Unit、RBMU)830は、メインレジスタファイル810と各SRB800との間でのデータの移動を担当する。スロットは、そのそれぞれのSRB800からレジスタ値を読み出そうと試みるときはいつでも、レジスタインデックス変換テーブル(Register Index Translation Table、RITT)840と呼ばれるそれぞれの小さなローカル構造を診察し、有効なエントリが見つかった場合、RITT840に記憶された対応するインデックスを使用して、SRB800から実際の値を取り出す。RITT840は、いくつかの実施形態ではラッチを使用して実装される場合もある。RITT構造が間接的であることは、SRB800がコンパクトかつフルアソシアティブであり得ると同時に、潜在的なクリティカル経路に多数の高価なコンパレータを導入し得ないことを保証するために採用される。有効なエントリが見つからない場合、別の(すなわち、別の経路のための)SRB800に直接アクセスすることによって、有効なエントリが取得される可能性がある。他のSRBが有効なエントリを有さない場合、レジスタ読み出し値がメインレジスタファイル810から取得される。新たに取り出された値は、要求側スロットのSRB800に配置される。また、有効ビットが真に設定された状態で、エントリが対応するRITT840内に作成される。予想することができるように、バンドル化された命令を含むプログラムの開始時に、多くの読み出し値は、メインレジスタファイル810から直接供給されなければならない。これらのアクセスは、メインレジスタファイル810にアクセスするために利用可能な読み出しポートの数が限られていることに起因して、最初に遅延を被る可能性がある。しかしながら、プログラムが更に進行し、あるバンドル化されたトリガ命令にわたって反復し始めると、メインレジスタファイルによるアクセスよりも多くのアクセスがSRB800によりサービスされる可能性があり、それにより並列実行が潜在的に改善される。
RBMU830は、固有のレジスタに対する任意の更新を、そのレジスタのコピーを有するすべてのSRB800にブロードキャストする。1つの機能ユニットのみがバンドル内の各宛先レジスタに書き込むことを許可されるので、このブロードキャスト方式は有効である。「修正された」ビットは、SRB800内の関連するエントリが、後で排除される場合にはメインレジスタファイルに書き込まれることを保証するために、対応するロケーションに設定される。そのような排除は、新しい値をSRBに加算し、プロセスを効率的にしようとしているときの容量の問題に起因して生じ、使用の追跡は、アクセスカウンタを使用して実行される場合がある。使用頻度の低いエントリは排除することができる。書き込まれているレジスタに一致するエントリがいずれのSRBにもこの時点で存在しない場合、値はメインレジスタファイルに書き込まれる。
マルチレベルレジスタの記憶構造に関する前述の説明は、これらの構造が推論の失敗又は例外に遭遇したときに導入する追加の遅延を理由に、従来のプロセッサでは受け入れられにくい。アーキテクチャレジスタ状態は、すべてのSRBを潜在的にドレインすることによってのみ見えるようにすることができ、これは、高価で時間を要する動作であり得る。しかしながら、バンドル化されたトリガ命令アーキテクチャの主な目的が柔軟なマルチドメイン空間加速であるので、提案された構造は、本使用事例において受け入れられるだけでなく、有利であると見なされる。現在の使用事例では、豊富な推論、正確な例外、及び高速例外エントリ機能など、従来のプロセッサに適用可能な目的を反映する一般的な目的に対する要件はほとんどない。
図8において、入力チャネルバッファ管理ユニット(Input Channel Buffer Management Unit、ICBMU)850と呼ばれるハードウェア構造は、RBMUと同様に作用し、チャネルからの着信データをスロットチャネルバッファ(Slot Channel Buffer、SCB0...3)860と呼ばれる小さな記憶領域に転送することができる。しかしながら、入力チャネルの数がメインレジスタファイルに対してはるかに少ないので、フルアソシアティブであるSRBとは異なり、各SCBを直接マッピングすることができる。加えて、最大3つのチャネルを同時に読み出す命令は稀であるので、各SCBに必要なポートはSRBに対して少なくてもよい可能性がある。更に、入力チャネルは「読み出し専用」であり、したがって、ICBMUはRBMUほど多くのコヒーレント機能を有する必要はない。その主要な目的は、「デキュー」イベント及び「チャネル読み出し」イベントをリッスンすることであり、デキュー動作がバンドルの終わりで発生するときはいつでも、対応するチャネルの先頭における新しいデータが、そのチャネルから最近読み出しをしたすべてのスロットに伝搬される。SCBは直接マッピングされた構造であるので、排除は必要ない。
バックエンドにおいて遷移中のデータと出力チャネルにおけるデータとの間の同期を必要とする重大なイベントがないので、実行ユニットから出力チャネルに向かう情報は、任意の特別な管理ユニットを横断する必要がない。加えて、チャネルごとに1つのライタ(writer)のみがバンドル内で許可されることと、トリガされた処理要素の機能ユニットによって決してデータがこれらのチャネルからリードバックされないこととの2つの前提は、バンドル化をサポートするのに必要な出力経路の構築を更に単純化することができる。
したがって、図8は、実行経路のいずれかによるプログラム命令の実行に共通のプロセッサレジスタ810のセットと、プロセッサレジスタのうちの1つ以上によって保持されたデータのコピーを記憶する、各実行経路のためのバッファ回路800と、プロセッサレジスタのセットとバッファ回路との間のデータのコピーを制御する制御回路830、840と、を示している。上述したように、いくつかの例では、任意の実行経路による実行の結果は、その実行経路に関連付けられたバッファ回路800に直接ライトバックされ得る。
処理アレイ
図1の構成は、本発明の例示的な実施形態のいずれかによる回路を使用して実装されるとき、そのような回路のアレイと、アレイの回路間でデータを通信するデータ通信回路140、150とを備える処理アレイの例を提供する。
図1の構成は、本発明の例示的な実施形態のいずれかによる回路を使用して実装されるとき、そのような回路のアレイと、アレイの回路間でデータを通信するデータ通信回路140、150とを備える処理アレイの例を提供する。
コンパイラ例
次に、コンパイラの実施形態を示す例示的な構成について、図9及び図10を参照して説明する。ここで、図9は、例えば、以下に図12を参照して説明される方法に従って、上記のようなバンドル化されたプログラムコードを生成するコンパイラ動作を実行するために使用することができるデータ処理装置900を概略的に示す。コンパイラ動作を実行するために任意の前述の回路が使用され得るが、少なくともいくつかの例では、装置900などの汎用データ処理装置が使用され得ることに留意されたい。
次に、コンパイラの実施形態を示す例示的な構成について、図9及び図10を参照して説明する。ここで、図9は、例えば、以下に図12を参照して説明される方法に従って、上記のようなバンドル化されたプログラムコードを生成するコンパイラ動作を実行するために使用することができるデータ処理装置900を概略的に示す。コンパイラ動作を実行するために任意の前述の回路が使用され得るが、少なくともいくつかの例では、装置900などの汎用データ処理装置が使用され得ることに留意されたい。
装置900は、1つ以上の処理要素又は中央処理装置(CPU)910と、ランダムアクセスメモリ920、フラッシュメモリ、光ディスク又は磁気ディスク、読み取り専用メモリなどの不揮発性記憶部930(本明細書で説明するコンパイラ動作を実行するコンピュータソフトウェアを提供又は記憶することができるマシン可読式の非一時的記憶媒体の一例を形成する)と、ディスプレイ、キーボード、ポインティング制御などのうちの1つ以上などのグラフィカルユーザインタフェース940と、ネットワークインタフェースなどの1つ以上の他のインタフェース950とを備え、すべてがバス構造960によって相互接続されている。動作中、コンパイラ又は他の機能を実行するプログラム命令は、不揮発性記憶部930から読み出され、ランダムアクセスメモリ920と協働してCPU 910によって実行される。
図10は、ソースコード1000がコンパイル動作1010によって、例えば、図12を参照して説明されるプロセスを使用してコンパイルされ、実行可能なプログラム命令1020を生成するコンパイル動作を概略的に示す。
方法の概要
上記で論じた技法の概要として、図11は、(例えば、上述の回路によって実装することができる)方法を示す概略フローチャートであり、この方法は、
(ステップ1100において)それぞれのトリガ条件が現在のトリガ状態に一致することに依存して、かつ、プログラム命令の実行に応答して次のトリガ状態を設定するように、プログラム命令を実行することと、
(ステップ1110において)命令記憶部によって、並列に実行するためにプログラム命令の2つ以上のグループを提供することと、
(ステップ1120において)プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の所与のグループのうちのプログラム命令を提供するように、命令記憶部を制御することと、
を含む。
上記で論じた技法の概要として、図11は、(例えば、上述の回路によって実装することができる)方法を示す概略フローチャートであり、この方法は、
(ステップ1100において)それぞれのトリガ条件が現在のトリガ状態に一致することに依存して、かつ、プログラム命令の実行に応答して次のトリガ状態を設定するように、プログラム命令を実行することと、
(ステップ1110において)命令記憶部によって、並列に実行するためにプログラム命令の2つ以上のグループを提供することと、
(ステップ1120において)プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の所与のグループのうちのプログラム命令を提供するように、命令記憶部を制御することと、
を含む。
上記で論じた技法の更なる要約として、図12は、コンピュータ実装方法を示す概略フローチャートであり、この方法は、
(ステップ1200において)それぞれのトリガ条件に依存して、実行するためにプログラム命令を生成することであって、プログラム命令の実行が次のトリガ条件を設定する、生成することと、
(ステップ1210において)プログラム命令をプログラム命令のグループへと分割することであって、少なくともいくつかのグループは、所与のグループ内の1つのプログラム命令が所与のグループ内の別のプログラム命令の結果に依存しない、2つ以上のプログラム命令を含んでいる、分割することと、
(ステップ1220において)各グループについて入力トリガ条件及び出力トリガ状態を生成することと、
を含み、入力トリガ条件は、満たされた場合、そのグループのプログラム命令の実行を可能にする条件であり、出力トリガ条件は、そのグループ内のプログラム命令のすべての実行の完了に応答して生成するための条件である。
(ステップ1200において)それぞれのトリガ条件に依存して、実行するためにプログラム命令を生成することであって、プログラム命令の実行が次のトリガ条件を設定する、生成することと、
(ステップ1210において)プログラム命令をプログラム命令のグループへと分割することであって、少なくともいくつかのグループは、所与のグループ内の1つのプログラム命令が所与のグループ内の別のプログラム命令の結果に依存しない、2つ以上のプログラム命令を含んでいる、分割することと、
(ステップ1220において)各グループについて入力トリガ条件及び出力トリガ状態を生成することと、
を含み、入力トリガ条件は、満たされた場合、そのグループのプログラム命令の実行を可能にする条件であり、出力トリガ条件は、そのグループ内のプログラム命令のすべての実行の完了に応答して生成するための条件である。
例示的な構成では、ステップ1200、1210、1220の各々は、コンピュータソフトウェア(不揮発性記憶部930によって記憶され得る)の制御下で動作する図9の装置などのコンピュータによって実装されてもよい。
シミュレーションの実施形態
図13は、使用され得るシミュレータ実装形態を例示する。上記の実施形態は、当該技法をサポートする固有の処理ハードウェアを動作させる装置及び方法の点において本発明を実装しているが、コンピュータプログラムの使用によって実装される本明細書に記載の実施形態による命令実行環境を提供することも可能である。このようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限り、シミュレータとしばしば称される。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的に、シミュレータ実装形態は、シミュレータプログラム1310をサポートするホストプロセッサ1330上で、任意選択でホストオペレーティングシステム1320を実行して、実行し得る。いくつかの構成では、ハードウェアと提供されている命令実行環境との間に複数のレイヤのシミュレーションがあってもよく、かつ/又は、同じホストプロセッサ上に提供されている複数の異なる命令実行環境があってもよい。歴史的に、強力なプロセッサが、合理的な速度で実行されるシミュレータ実装形態を提供するのに必要とされてきたが、このようなアプローチは、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるようなときなどの、ある状況下では正当化され得る。例えば、シミュレータ実装形態は、ホストプロセッサハードウェアによってサポートされていない追加の機能性を有する命令実行環境を提供し得るか、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供し得る。シミュレーションの概要は、以下に引用されている参考文献[2]に示されている。
図13は、使用され得るシミュレータ実装形態を例示する。上記の実施形態は、当該技法をサポートする固有の処理ハードウェアを動作させる装置及び方法の点において本発明を実装しているが、コンピュータプログラムの使用によって実装される本明細書に記載の実施形態による命令実行環境を提供することも可能である。このようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限り、シミュレータとしばしば称される。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的に、シミュレータ実装形態は、シミュレータプログラム1310をサポートするホストプロセッサ1330上で、任意選択でホストオペレーティングシステム1320を実行して、実行し得る。いくつかの構成では、ハードウェアと提供されている命令実行環境との間に複数のレイヤのシミュレーションがあってもよく、かつ/又は、同じホストプロセッサ上に提供されている複数の異なる命令実行環境があってもよい。歴史的に、強力なプロセッサが、合理的な速度で実行されるシミュレータ実装形態を提供するのに必要とされてきたが、このようなアプローチは、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるようなときなどの、ある状況下では正当化され得る。例えば、シミュレータ実装形態は、ホストプロセッサハードウェアによってサポートされていない追加の機能性を有する命令実行環境を提供し得るか、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供し得る。シミュレーションの概要は、以下に引用されている参考文献[2]に示されている。
これまで、特定のハードウェア構成物又は特性を参照して実施形態を説明してきたが、シミュレーションされた実施形態では、適切なソフトウェア構成物又は特性によって同等の機能性を提供することができる。例えば、特定の回路は、シミュレーションされた実施形態で、コンピュータプログラムロジックとして実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実施形態で、ソフトウェアのデータ構造として実装されてもよい。前述の実施形態で参照されているハードウェア要素のうちの1つ以上がホストハードウェア(例えば、ホストプロセッサ1330)上に存在する構成では、いくつかのシミュレーションされた実施形態は、好適な場合、ホストハードウェアを利用してもよい。
シミュレータプログラム1310は、(非一時的媒体であり得る)コンピュータ可読ストレージ媒体に記憶されてもよく、(アプリケーション、オペレーティングシステム、及びハイパーバイザを含み得る)ターゲットコード1300に、シミュレータプログラム1310によってモデル化されたハードウェアアーキテクチャのインタフェースと同じであるプログラムインタフェース(命令実行環境)を提供することができる。したがって、それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理プログラム論理を提供する命令を含む、ターゲットコード1300のプログラム命令、並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶プログラム論理を備える処理プログラム論理、並びに、プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、上述の、実行するためにプログラム命令を提供するように命令記憶プログラム論理を制御するトリガプログラム論理は、シミュレータプログラム1310を使用して命令実行環境内から実行されてもよく、それにより、上記で論じた装置のハードウェア機能を実際には有していないホストコンピュータ1330は、これらの機能を模倣することができる。
したがって、例示的な実施形態は、それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理プログラム論理を備える命令実行環境を提供するホストデータ処理装置を制御するための命令を含む、仮想マシンコンピュータプログラム、並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶プログラム論理と、プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令を提供するように命令記憶プログラム論理を制御するトリガプログラム論理と、を備える処理回路、を提供することができる。
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」(configuration)とは、ハードウェア又はソフトウェアの構成(arrangement)又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有し得るか、又はプロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされ得る。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
本技術の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本技術はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義される技術の範囲及び精神から逸脱することなく、当業者によって様々な変更、追加、及び修正を行うことができることを理解されたい。例えば、従属請求項の特徴の様々な組み合わせは、本技術の範囲から逸脱することなく、独立請求項の特徴によって作製され得る。
参考文献:
[1]A.Parashar et al.,“Efficient Spatial Processing Element Control via Triggered Instructions,”in IEEE Micro,vol.34,no.3,pp.120-137,May-June 2014,doi:10.1109/MM.2014.14.
[2]R.Bedichek,“Some Efficient Architecture Simulation Techniques”,in Winter 1990 USENIX Conference,Pages 53-63.
[1]A.Parashar et al.,“Efficient Spatial Processing Element Control via Triggered Instructions,”in IEEE Micro,vol.34,no.3,pp.120-137,May-June 2014,doi:10.1109/MM.2014.14.
[2]R.Bedichek,“Some Efficient Architecture Simulation Techniques”,in Winter 1990 USENIX Conference,Pages 53-63.
Claims (18)
- 回路であって、
それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理回路を備え、
前記処理回路は、
並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶部と、
プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の前記所与のグループのうちのプログラム命令を提供するように、前記命令記憶部を制御するトリガ回路と、
を備える、回路。 - 前記命令記憶部が、実行するためにプログラム命令のグループを提供するように各々が構成された少なくとも2つの命令キューを備え、前記命令キューが、並列に実行するために最大n個のプログラム命令のグループを提供するように構成された第1の命令キューと、実行するために最大m個のプログラム命令のグループを並列に提供するように構成された第2の命令キューとを備え、mはnに等しくない、請求項1に記載の回路。
- 前記トリガ回路が、プログラム命令の実行によるトリガ状態の生成と、前記少なくとも2つの命令キューのうちの所与の命令キューに関連付けられたトリガ条件とに応答して、実行するためにキューに入れられたプログラム命令を提供するように前記所与の命令キューを制御する、請求項2に記載の回路。
- プログラム命令のグループを前記命令キューのうちの選択された1つにルーティングするように構成されたルーティング回路を備える、請求項2又は3に記載の回路。
- 前記命令キューのいずれかによって並列に提供されたプログラム命令の最大数以上である数のプログラム命令を並列に実行するために複数の実行経路を備える、請求項2から4のいずれか一項に記載の回路。
- プログラム命令のグループ内のプログラム命令の実行に共通のプロセッサレジスタのセットを備え、前記プロセッサレジスタのセットは、前記プログラム命令の実行中にアクセス可能である、請求項5に記載の回路。
- 前記実行経路の各々に対して1つのセットである、プロセッサレジスタの少なくとも2つのセットであって、所与の実行経路に対するプロセッサレジスタの前記セットは、その実行経路によるプログラム命令の実行中にアクセス可能である、プロセッサレジスタの少なくとも2つのセットと、
プロセッサレジスタの前記セット間でデータを通信する通信回路と、
を備える、請求項5に記載の回路。 - 前記実行経路のいずれかによるプログラム命令の実行に共通のプロセッサレジスタのセットと、
前記プロセッサレジスタのうちの1つ以上によって保持されたデータのコピーを記憶する、各実行経路のためのバッファ回路と、
プロセッサレジスタの前記セットと前記バッファ回路との間のデータのコピーを制御する制御回路と、
を備える、請求項5に記載の回路。 - 前記実行経路のうちの少なくとも1つは、最大で第1の数のオペランドを有するプログラム命令を実行するように構成されており、前記実行経路のうちの少なくとも別の実行経路は、最大で第2の数のオペランドを有するプログラム命令を実行するように構成されており、前記第1の数と前記第2の数とは異なる、請求項5から8のいずれか一項に記載の回路。
- 前記処理回路が、2つ以上のベクトル処理命令を並列に実行するように構成されたベクトル処理回路を備え、各ベクトル処理命令は、それぞれの処理動作を2つ以上のデータ要素のそれぞれのベクトルに適用する、請求項1から9のいずれか一項に記載の回路。
- 処理アレイであって、
請求項1から10のいずれか一項に記載の回路のアレイと、
前記アレイの回路間でデータを通信するデータ通信回路と、
を備える、処理アレイ。 - 方法であって、
それぞれのトリガ条件が現在のトリガ状態に一致することに依存して、かつ、プログラム命令の実行に応答して次のトリガ状態を設定するように、プログラム命令を実行することと、
命令記憶部によって、並列に実行するために2つ以上のプログラム命令のグループを提供することと、
プログラム命令の前記実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の前記所与のグループのうちのプログラム命令を提供するように、前記命令記憶部を制御することと、
を含む、方法。 - コンピュータ実装方法であって、
それぞれのトリガ条件に依存して、実行するためにプログラム命令を生成することであって、プログラム命令の実行が次のトリガ条件を設定する、生成することと、
前記プログラム命令をプログラム命令のグループへと分割することであって、少なくともいくつかのグループは、所与のグループ内の1つのプログラム命令が前記所与のグループ内の別のプログラム命令の結果に依存しない、2つ以上のプログラム命令を含んでいる、分割することと、
各グループについて入力トリガ条件及び出力トリガ状態を生成することであって、
前記入力トリガ条件は、満たされた場合、そのグループの前記プログラム命令の実行を可能にする条件であり、前記出力トリガ条件は、そのグループ内の前記プログラム命令のすべての実行の完了に応答して生成するための条件である、生成することと、を含む
コンピュータ実装方法。 - グループを実行するための入力データを提供する1つ以上の入力チャネルについて、前記グループの前記プログラム命令の実行後に前記1つ以上の入力チャネルから前記入力データをデキューする1つ以上の動作を生成することを含む、請求項13に記載の方法。
- プログラム命令のグループをプロセッサのアレイの個々のプロセッサにルーティングすることを含む、請求項13又は14に記載の方法。
- プログラム命令のグループを複数の命令キューから選択された命令キューにルーティングすることを含み、前記命令キューは、実行するために前記プログラム命令のグループを並列に提供するように構成される、請求項13又は14に記載の方法。
- コンピュータによって実行されると、前記コンピュータに請求項13から16のいずれか一項に記載の方法を実行させるコンピュータプログラムコードを含む、コンパイラ。
- 請求項17に記載のコンパイラを記憶する、非一時的マシン可読記憶媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2101152.3 | 2021-01-28 | ||
GB2101152.3A GB2603151B (en) | 2021-01-28 | 2021-01-28 | Circuitry and method |
PCT/GB2022/050149 WO2022162344A1 (en) | 2021-01-28 | 2022-01-19 | Circuitry and method for instruction execution in dependence upon trigger conditions |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2024505440A true JP2024505440A (ja) | 2024-02-06 |
Family
ID=74865259
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2023543144A Pending JP2024505440A (ja) | 2021-01-28 | 2022-01-19 | トリガ条件に依存する命令実行のための回路及び方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20240220269A1 (ja) |
JP (1) | JP2024505440A (ja) |
KR (1) | KR20230132580A (ja) |
CN (1) | CN116802605A (ja) |
GB (1) | GB2603151B (ja) |
WO (1) | WO2022162344A1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2625512A (en) * | 2022-12-12 | 2024-06-26 | Advanced Risc Mach Ltd | Triggered-producer and triggered-consumer instructions |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140201506A1 (en) * | 2011-12-30 | 2014-07-17 | Angshuman Parashar | Method for determining instruction order using triggers |
US9507594B2 (en) * | 2013-07-02 | 2016-11-29 | Intel Corporation | Method and system of compiling program code into predicated instructions for execution on a processor without a program counter |
-
2021
- 2021-01-28 GB GB2101152.3A patent/GB2603151B/en active Active
-
2022
- 2022-01-19 KR KR1020237028613A patent/KR20230132580A/ko unknown
- 2022-01-19 CN CN202280012249.7A patent/CN116802605A/zh active Pending
- 2022-01-19 WO PCT/GB2022/050149 patent/WO2022162344A1/en active Application Filing
- 2022-01-19 JP JP2023543144A patent/JP2024505440A/ja active Pending
- 2022-01-19 US US18/261,966 patent/US20240220269A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20240220269A1 (en) | 2024-07-04 |
KR20230132580A (ko) | 2023-09-15 |
WO2022162344A1 (en) | 2022-08-04 |
CN116802605A (zh) | 2023-09-22 |
GB2603151B (en) | 2023-05-24 |
GB202101152D0 (en) | 2021-03-17 |
GB2603151A (en) | 2022-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2710467B1 (en) | Automatic kernel migration for heterogeneous cores | |
US10430190B2 (en) | Systems and methods for selectively controlling multithreaded execution of executable code segments | |
US8615646B2 (en) | Unanimous branch instructions in a parallel thread processor | |
CN108376097B (zh) | 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段 | |
CN108108188B (zh) | 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段 | |
US11816560B2 (en) | Performance estimation-based resource allocation for reconfigurable architectures | |
US8997071B2 (en) | Optimized division of work among processors in a heterogeneous processing system | |
US20120331278A1 (en) | Branch removal by data shuffling | |
US8615770B1 (en) | System and method for dynamically spawning thread blocks within multi-threaded processing systems | |
US11782760B2 (en) | Time-multiplexed use of reconfigurable hardware | |
US20050257200A1 (en) | Generating code for a configurable microprocessor | |
JP2024505440A (ja) | トリガ条件に依存する命令実行のための回路及び方法 | |
US7761691B2 (en) | Method for allocating registers using simulated annealing controlled instruction scheduling | |
Owaida et al. | Massively parallel programming models used as hardware description languages: The OpenCL case | |
Bhagyanath et al. | Buffer allocation for exposed datapath architectures | |
Leback et al. | Tesla vs. xeon phi vs. radeon a compiler writer’s perspective | |
Arafat et al. | Work stealing for GPU‐accelerated parallel programs in a global address space framework | |
Forsell et al. | Supporting concurrent memory access in TCF processor architectures | |
US11675572B2 (en) | Sharing data structures | |
US20240095090A1 (en) | Cloud-based framework for analysis using accelerators | |
US20240069770A1 (en) | Multiple contexts for a memory unit in a reconfigurable data processor | |
US20240037061A1 (en) | Sorting the Nodes of an Operation Unit Graph for Implementation in a Reconfigurable Processor | |
US20240020264A1 (en) | Estimating a Scaled Cost of Implementing an Operation Unit Graph on a Reconfigurable Processor | |
CN113348446A (zh) | 用于处理tcf感知处理器的存储器访问的方法和装置 | |
Sourouri | Scalable Heterogeneous Supercomputing: Programming Methodologies and Automated Code Generation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20230828 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20230830 |