IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧

特表2024-505440トリガ条件に依存する命令実行のための回路及び方法
<>
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図1
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図2
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図3
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図4
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図5
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図6
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図7
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図8
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図9
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図10
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図11
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図12
  • 特表-トリガ条件に依存する命令実行のための回路及び方法 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-02-06
(54)【発明の名称】トリガ条件に依存する命令実行のための回路及び方法
(51)【国際特許分類】
   G06F 9/38 20180101AFI20240130BHJP
【FI】
G06F9/38 330J
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023543144
(86)(22)【出願日】2022-01-19
(85)【翻訳文提出日】2023-08-17
(86)【国際出願番号】 GB2022050149
(87)【国際公開番号】W WO2022162344
(87)【国際公開日】2022-08-04
(31)【優先権主張番号】2101152.3
(32)【優先日】2021-01-28
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】エヨール、ムブー
(72)【発明者】
【氏名】ガブリエッリ、ジャコモ
(72)【発明者】
【氏名】ヴェヌ、バラジ
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013AA01
5B013AA14
5B013BB16
5B013DD04
(57)【要約】
回路は、それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理回路を備え、処理回路は、並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶部と、プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の所与のグループのプログラム命令を提供するように命令記憶部を制御するトリガ回路と、を備える。
【選択図】図6
【特許請求の範囲】
【請求項1】
回路であって、
それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理回路を備え、
前記処理回路は、
並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶部と、
プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の前記所与のグループのうちのプログラム命令を提供するように、前記命令記憶部を制御するトリガ回路と、
を備える、回路。
【請求項2】
前記命令記憶部が、実行するためにプログラム命令のグループを提供するように各々が構成された少なくとも2つの命令キューを備え、前記命令キューが、並列に実行するために最大n個のプログラム命令のグループを提供するように構成された第1の命令キューと、実行するために最大m個のプログラム命令のグループを並列に提供するように構成された第2の命令キューとを備え、mはnに等しくない、請求項1に記載の回路。
【請求項3】
前記トリガ回路が、プログラム命令の実行によるトリガ状態の生成と、前記少なくとも2つの命令キューのうちの所与の命令キューに関連付けられたトリガ条件とに応答して、実行するためにキューに入れられたプログラム命令を提供するように前記所与の命令キューを制御する、請求項2に記載の回路。
【請求項4】
プログラム命令のグループを前記命令キューのうちの選択された1つにルーティングするように構成されたルーティング回路を備える、請求項2又は3に記載の回路。
【請求項5】
前記命令キューのいずれかによって並列に提供されたプログラム命令の最大数以上である数のプログラム命令を並列に実行するために複数の実行経路を備える、請求項2から4のいずれか一項に記載の回路。
【請求項6】
プログラム命令のグループ内のプログラム命令の実行に共通のプロセッサレジスタのセットを備え、前記プロセッサレジスタのセットは、前記プログラム命令の実行中にアクセス可能である、請求項5に記載の回路。
【請求項7】
前記実行経路の各々に対して1つのセットである、プロセッサレジスタの少なくとも2つのセットであって、所与の実行経路に対するプロセッサレジスタの前記セットは、その実行経路によるプログラム命令の実行中にアクセス可能である、プロセッサレジスタの少なくとも2つのセットと、
プロセッサレジスタの前記セット間でデータを通信する通信回路と、
を備える、請求項5に記載の回路。
【請求項8】
前記実行経路のいずれかによるプログラム命令の実行に共通のプロセッサレジスタのセットと、
前記プロセッサレジスタのうちの1つ以上によって保持されたデータのコピーを記憶する、各実行経路のためのバッファ回路と、
プロセッサレジスタの前記セットと前記バッファ回路との間のデータのコピーを制御する制御回路と、
を備える、請求項5に記載の回路。
【請求項9】
前記実行経路のうちの少なくとも1つは、最大で第1の数のオペランドを有するプログラム命令を実行するように構成されており、前記実行経路のうちの少なくとも別の実行経路は、最大で第2の数のオペランドを有するプログラム命令を実行するように構成されており、前記第1の数と前記第2の数とは異なる、請求項5から8のいずれか一項に記載の回路。
【請求項10】
前記処理回路が、2つ以上のベクトル処理命令を並列に実行するように構成されたベクトル処理回路を備え、各ベクトル処理命令は、それぞれの処理動作を2つ以上のデータ要素のそれぞれのベクトルに適用する、請求項1から9のいずれか一項に記載の回路。
【請求項11】
処理アレイであって、
請求項1から10のいずれか一項に記載の回路のアレイと、
前記アレイの回路間でデータを通信するデータ通信回路と、
を備える、処理アレイ。
【請求項12】
方法であって、
それぞれのトリガ条件が現在のトリガ状態に一致することに依存して、かつ、プログラム命令の実行に応答して次のトリガ状態を設定するように、プログラム命令を実行することと、
命令記憶部によって、並列に実行するために2つ以上のプログラム命令のグループを提供することと、
プログラム命令の前記実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の前記所与のグループのうちのプログラム命令を提供するように、前記命令記憶部を制御することと、
を含む、方法。
【請求項13】
コンピュータ実装方法であって、
それぞれのトリガ条件に依存して、実行するためにプログラム命令を生成することであって、プログラム命令の実行が次のトリガ条件を設定する、生成することと、
前記プログラム命令をプログラム命令のグループへと分割することであって、少なくともいくつかのグループは、所与のグループ内の1つのプログラム命令が前記所与のグループ内の別のプログラム命令の結果に依存しない、2つ以上のプログラム命令を含んでいる、分割することと、
各グループについて入力トリガ条件及び出力トリガ状態を生成することであって、
前記入力トリガ条件は、満たされた場合、そのグループの前記プログラム命令の実行を可能にする条件であり、前記出力トリガ条件は、そのグループ内の前記プログラム命令のすべての実行の完了に応答して生成するための条件である、生成することと、を含む
コンピュータ実装方法。
【請求項14】
グループを実行するための入力データを提供する1つ以上の入力チャネルについて、前記グループの前記プログラム命令の実行後に前記1つ以上の入力チャネルから前記入力データをデキューする1つ以上の動作を生成することを含む、請求項13に記載の方法。
【請求項15】
プログラム命令のグループをプロセッサのアレイの個々のプロセッサにルーティングすることを含む、請求項13又は14に記載の方法。
【請求項16】
プログラム命令のグループを複数の命令キューから選択された命令キューにルーティングすることを含み、前記命令キューは、実行するために前記プログラム命令のグループを並列に提供するように構成される、請求項13又は14に記載の方法。
【請求項17】
コンピュータによって実行されると、前記コンピュータに請求項13から16のいずれか一項に記載の方法を実行させるコンピュータプログラムコードを含む、コンパイラ。
【請求項18】
請求項17に記載のコンパイラを記憶する、非一時的マシン可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は回路及び方法に関する。
【0002】
いわゆる「空間アーキテクチャ」は、主に時間ではなく「空間」において、アプリケーションの実行の時間を要する部分を形成することができる固有の計算を展開(unroll)又は展開(unfold)することによってアプリケーションを加速することができる。
【0003】
計算は、同時実行動作(concurrent operation)が可能な多数のハードウェアユニットを使用することによって「空間」内で展開される。チップ上に広がったばらばらのアプリケーションによって提供される同時実行(concurrency)の機会(opportunity)を利用することに加えて、空間アーキテクチャは、分散したオンチップメモリも利用し、それによって、各処理要素は、それに近接する1つ以上のメモリブロックに関連付けられる。結果として、空間アーキテクチャは、多くの従来のアーキテクチャに影響を及ぼし、性能を潜在的に妨げる、いわゆるフォンノイマンボトルネック(von-Neumann bottleneck)を緩和することができる。
【0004】
本開示は、そのような構成における潜在的な改善に関する。
【発明の概要】
【0005】
例示的な構成では、回路であって、
それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理回路を備え、処理回路は、
並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶部と、
プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の所与のグループのうちのプログラム命令を提供するように、命令記憶部を制御するトリガ回路と、
を備える、回路が提供される。
【0006】
別の例示的な構成では、処理アレイであって、そのような回路のアレイと、アレイの回路間でデータを通信するデータ通信回路と、を備える、処理アレイが提供される。
【0007】
別の例示的な構成では、方法であって、
それぞれのトリガ条件が現在のトリガ状態に一致することに依存して、かつ、プログラム命令の実行に応答して次のトリガ状態を設定するように、プログラム命令を実行することと、
命令記憶部によって、並列に実行するために2つ以上のプログラム命令のグループを提供することと、
プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の所与のグループのうちのプログラム命令を提供するように、命令記憶部を制御することと、
を含む、方法が提供される。
【0008】
別の例示的な構成では、コンピュータ実装方法であって、
それぞれのトリガ条件に依存して、実行するためにプログラム命令を生成することであって、プログラム命令の実行が次のトリガ条件を設定する、生成することと、
プログラム命令をプログラム命令のグループへと分割することであって、少なくともいくつかのグループは、所与のグループ内の1つのプログラム命令が所与のグループ内の別のプログラム命令の結果に依存しない、2つ以上のプログラム命令を含んでいる、分割することと、
各グループについて入力トリガ条件及び出力トリガ状態を生成することであって、入力トリガ条件は、満たされた場合、そのグループのプログラム命令の実行を可能にする条件であり、出力トリガ条件は、そのグループ内のプログラム命令のすべての実行の完了に応答して生成するための条件である、生成することと、を含む、
コンピュータ実装方法が提供される。
【0009】
別の例示的な構成では、コンピュータによって実行されると、コンピュータに上記で定義された方法を実行させるコンピュータプログラムコードを含むコンパイラが提供される。
【0010】
本技術の更なるそれぞれの態様及び特徴が、添付の特許請求の範囲によって定義される。
【図面の簡単な説明】
【0011】
添付図面に示されるそれらの実施形態を参照して、あくまで一例として本技術を更に説明する。
【0012】
図1】処理回路の例示的なアレイを概略的に示す。
図2】計算タイルを概略的に示す。
図3】メモリタイルを概略的に示す。
図4】データフローグラフを概略的に示す。
図5】メモリ占有率の一例を概略的に表す。
図6】それぞれの回路を概略的に示す。
図7】それぞれの回路を概略的に示す。
図8】それぞれの回路を概略的に示す。
図9】例示的なデータ処理装置を概略的に示す。
図10】コンパイラの動作を概略的に表す。
図11】それぞれの方法を示す概略フローチャートである。
図12】それぞれの方法を示す概略フローチャートである。
図13】シミュレーションの実施形態を概略的に示す。
【発明を実施するための形態】
【0013】
例示的な処理アレイ
図面を参照すると、空間アーキテクチャの例示的なインスタンスが図1に概略的に示されている。
【0014】
この例示的な構成では、データ処理要素110の2次元アレイ100は、インタフェースタイル(Interface Tile、IT)と呼ばれるデータ転送ユニット130を介してキャッシュ階層又はメインメモリなどのメモリ配列120に接続されている。
【0015】
空間アーキテクチャのこの例には、2種類のデータ処理要素、すなわち、データ処理動作及び算術計算の大部分を実行する、いわゆる計算タイル(Compute Tile、CT)112と、ローカルに接続されたメモリへのデータアクセス並びにより遠隔にあるメモリ領域及び他の処理要素への/からのデータ転送を主に担当する、いわゆるメモリタイル(Memory Tile、MT)114とがある。
【0016】
例示的な実施形態では、各メモリタイル(MT)に接続された又は関連付けられたスクラッチパッドとも呼ばれるローカルメモリブロック(図1には示されていないが、図3を参照して後述する)が提供され、各MTは、1つのそれぞれの計算タイル(CT)への直接接続を有する。
【0017】
各MT-CTクラスタは、データ処理要素110を表し、そのような要素は、スイッチ140(いくつかの例ではルータとも呼ばれる)を介して、アレイ100の回路110間でデータを通信するデータ通信回路の一例を表すネットワークオンチップ150に接続され、ネットワークオンチップは、この例では、MT間及び各MTとインタフェースタイル(IT)130との間でデータを転送するために使用される。しかしながら、いくつかのMT間で共有される単一のスクラッチパッドを有する、又は2つ以上のスクラッチパッドへの直接アクセスを有するMTを有するなど、他の構成も可能である。CTとMTとの間の1対1の対応もアーキテクチャにおいて必須ではなく、1つのMTが2つ以上のCTに接続される場合もあり得、逆もまた同様である。言い換えれば、処理要素は各々、入力チャネルと出力チャネルとのセットを介して、スイッチ及びこれらのスイッチ間のデータリンクを備えるネットワークオンチップに接続され、図1に示すような2次元のトーラスレイアウトを形成する。
【0018】
図1には示されていないが、以下で図2及び図3を参照して説明される、「チャネル」と呼ばれる先入れ先出し(First-in-first-out、FIFO)バッファは、CT及びMTにデータを配信し、それらから処理済みデータを搬送するために使用される。
【0019】
CT及びMTのアーキテクチャは、ベクトル処理及びより高度なデータ転送動作をサポートするように拡張された、いわゆるトリガされた命令アーキテクチャ(Triggered Instruction Architecture)(以下で引用されている参考文献1を参照)に基づく。
【0020】
トリガされた動作
いくつかの例では、各命令は、1つ以上の「トリガ条件」のセットを有し、又はそれに関連付けられ、それらのトリガ条件が有効であるときのみ、すなわち、トリガ条件が別のプログラム命令の実行によって生成されたトリガ状態に一致するときのみ、実行ユニットに発行又は送信される。実際には、プログラム命令の実行は、現在のトリガ状態に一致するそれぞれのトリガ条件に依存するだけでなく、それ自体が次のトリガ状態を設定することもできる。
【0021】
トリガ条件は、特定の回路110に固有であり、実行結果、チャネル占有率、又は処理要素の何らかの他の規定された状態に依存することができる。完了すると、各命令は、トリガに影響を及ぼす1つ以上の述語レジスタを設定することができ、したがって、その後、他の命令の実行の準備ができているかどうかを判定するために使用することができる。特に、このタイプ又はアーキテクチャは、典型的には、明示的なプログラムカウンタ及び専用の分岐命令を有さない。その主要な利点は、処理要素のフロントエンド回路のその後の単純化、及び複雑な分岐予測メカニズムに頼ることなく、制御フローハザードに起因するパイプラインバブルを回避することである。
【0022】
トリガされた命令-例示的なフォーマット
一般に、トリガされた命令は以下のフォーマットを有する。
【0023】
【数1】
【0024】
宛先オペランド及びソースオペランドは、ベクトルレジスタ、スカラレジスタ、述語、又はチャネルであり得る。言い換えれば、実行された命令は、スカラ命令、ベクトル命令であり得る(その場合、回路110、又はそれらのうちの少なくともいくつかは、ベクトル処理命令を実行するように構成されたベクトル処理回路を備えてもよく、各ベクトル処理命令は、それぞれの処理動作を2つ以上のデータ要素のそれぞれのベクトルに適用する)。
【0025】
したがって、例として、以下の命令が使用され得る。
【0026】
【数2】
これは、入力チャネルich2及びich3の先頭にそれぞれ常駐する2つのソースオペランドの加算(add)を実行し、その結果をベクトルレジスタ「z2」に書き込む。この命令は、述語の状態が「1001」であるときにトリガされ、完了すると、述語を集合的に「1010」に設定し、トリガ条件がこの状態に一致する別の命令の実行の準備を完了させる。
【0027】
述語は、例えば、実行回路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」を発行するようにキューにプロンプトする。
【0028】
この命令の実行の完了に応答して、実行回路210は、述語記憶部212によって保持された述語を新たな値1010に設定する。上記に概説されたプロセスは、再び、トリガ回路が、この新しい述語値と別のキューに入れられた命令に関連付けられたトリガ条件(キュー240によって通信される)との間の一致を検出することに従う。プロセスは、トリガ状態が、プログラムコードのコンパイル時に確立されるような次のトリガ条件に一致することの連鎖に従う。
【0029】
述語記憶部212は、トリガ回路250に提供されてもよく、あるいは、実行回路210によって書き込み可能であり、かつトリガ回路250によって読み出し可能である別個の回路アイテムとして提供されてもよいことに留意されたい。
【0030】
空間アーキテクチャ内の任意の所与のロケーションにおいて実行することができる計算量には、多くの制約がある。そのような制約は、あるロケーションにデータを配信することができる又はそこからデータを除去することができる速度、並びに電力的制約又は熱的制約であり得る。結果として、いくつかの例示的な実施形態は、例えば、利用可能なネットワーク又はデータ転送の帯域幅に依存して、所与のロケーションにおいて実行される処理量を適応させるように作用し得る。
【0031】
本開示の例示的な実施形態は、潜在的により高い並列処理(parallelism)の機会を提供し得る、かつ、計算とネットワーク又はメモリの帯域幅との比率の均衡化を潜在的により容易にし得る、追加の構成オプションを提供することができる。
【0032】
例示的な計算タイル
図2は、上述したように、スケーラ命令及び/又はベクトル命令に作用し得る計算タイル112の一般的な例を提供する。
【0033】
上記で論じたように、1つ以上のFIFO要素200は、入力チャネルとして作用し、実行回路210に入力を提供し、1つ以上のFIFO要素220は、出力チャネルとして作用する。実行は、1つ以上のプロセッサレジスタ230に関して実行回路210によって実行される。
【0034】
命令キューは、実行するためにプログラム命令を提供する命令記憶部の一例を提供する。プログラム命令は、プログラム命令(例えば、以前に実行されたプログラム命令)の実行によるトリガ状態の生成と、キュー240によって保持された命令に関連付けられたトリガ条件とに応答するトリガ回路250に応答して提供され、実行するためにプログラム命令を提供するようにキュー240を制御する。キュー240によって発行されたプログラム命令は、実行回路210にパスされる前に復号回路260によって復号される。
【0035】
例示的なメモリタイル
図3におけるMT114の一般的な概略図は、以下の例外を除いて、図2のCTの概略図と実質的に同じである。
(a)「記憶」ブロック又は回路300は、実行回路に接続されている。
(b)通信回路150へのインタフェースを備える「アレイインタフェース」ブロック又は回路310は、実行回路に接続されている。
【0036】
そうでない場合、メモリタイル114の動作は、上記で論じた計算タイルの動作に対応する。MTは、CTのようにトリガされた命令を使用し、実行経路は、(いくつかの例では)MTが必ずしもバルクデータ処理を実行する必要がないので、CTに対してMTではより単純である場合があるが、MTは、アドレス計算、データ置換、及びアレイインタフェース310を介したローカルな記憶部300とアレイの残りとの間のデータ転送を実行するのに十分な機能性を依然として保持することに留意されたい。
【0037】
回路110のCT112とMT114との間のデータ項目の通信は、データ項目を送信するタイルの出力チャネル(単数又は複数)及びデータ項目を受信するタイルの入力チャネル(単数又は複数)を介する。
【0038】
データフローグラフ
以下に論じられる技法では、アプリケーション内の計算を空間に展開するためには、まず、アプリケーション内の動作を表すデータフローグラフ(dataflow graph、DFG)を決定することが有用であり得る。
【0039】
そのようなDFGの例を図4に概略的に示す。入力チャネル(ichn)は、DFGの上部に沿って表され、出力チャネル(och0)は、DFGの下部に表され、乗算(×)、加算(+)、減算(-)及び最大/最小関数(max/min)などの計算動作は、様々な動作を概略的にリンクさせるラインに沿って表されている入力オペランド及び動作の出力宛先を用いて表される。
【0040】
次いで、このデータフローグラフを分割し、利用可能なハードウェアユニットにわたって分散させることができる。しかしながら、現実的なDFGは、利用可能な空間リソースよりも大きくなる傾向があり、したがって、最終的には、DFGをハードウェアにマッピングできるようにするために何らかの形のタイムスライスが行われる。しかしながら、空間設計の本発明の例のうちのいくつかでは、そのようなタイムスライスの範囲は、従来のアーキテクチャに対して制限され得る。
【0041】
空間アーキテクチャ内では、従来のアーキテクチャに対して観察される総スピードアップは、命令レベルの並列処理(instruction-level parallelism、ILP)とデータレベルの並列処理(data-level parallelism、DLP)とタスクレベルの並列処理(task-level parallelism、TLP)との混合から導出される。タスクレベルの並列処理又は(データストリームを介して接続される)タスクのパイプラインの構築は、ILP及び/又はDLPを含むオーケストレーションのレベルに直交すると見なされ得る。したがって、例えば、タスクAを処理要素の1つのセットに配置し、タスクBを別のセットに配置することができ(かつ2つのセット間が接続され、したがって、Aによって生成されたデータをBが消費することができる)、処理要素の2つのセットが同時に動作することができる一方で、各セットは個々に、DFGのそれらの部分に存在するILP及び/又はDLPを完全に利用しようとする。
【0042】
ベクトル化(機能ユニットがデータ要素のグループに対して同時に動作することを可能にする)及びタイル化(データセットを空間ファブリックにわたって広がる固定チャンクへと分割する)は、典型的には、DLPの抽出を可能にする。しかしながら、システムが上述のようにDLP及びTLPを抽出するための改善された機会を有する場合であっても、トリガされたアーキテクチャにおいて現在十分に対処されていない並列処理の潜在的なソースである、ILPの不足が存在する可能性がある。本発明の実施形態は、各処理要素の計算強度と利用可能なメモリ又はネットワークの帯域幅との間のトレードオフ又は均衡化を潜在的により良好にすることができるやり方で、並列に動作のグループに作用するように処理要素に効率的に命令する方法を提案する。本発明の実施形態のうちのいずれかでは、処理回路は、2つ以上のベクトル処理命令を並列に実行するように構成されたベクトル処理回路を備えてもよく、各ベクトル処理命令は、それぞれの処理動作を2つ以上のデータ要素のそれぞれのベクトルに適用する。
【0043】
提案された技法の概要
次に、本開示によって提案されるアーキテクチャ拡張が、それによって追加の並列実行を潜在的に抽出することができる例について説明する。
【0044】
この例は、複数のそれぞれの処理要素上で実行する複数のより小さい部分へと分割されたアプリケーションに関する。アプリケーション又はカーネルの1つの部分が、図4に示すデータフローグラフを有すると仮定する。トリガされた処理要素においてこれをどのように実装できるかについての例が与えられる。
【0045】
ベクトル化及びタイル化は、この観点においてすでに実行されていると仮定され、図4に示される動作は、(適切な場合には)入力チャネルから供給されるベクトルデータを処理することができ、かつベクトルデータを他の処理要素又はメモリに戻すことができることに留意されたい。
【0046】
図4のDFGを観察すると、多数の動作を並列に実行することができることに留意することが可能である。すなわち、DFGの同じ「レベル」(描かれているような垂直位置)にあるノードは、相互依存性を有さず、データハザードを発生させずに同時に実行させられるようにすることができる。
【0047】
本開示によって提案される技法がない場合、このデータフローの以前に提案された一実装形態は、以下の通りであり得る。
【0048】
【数3】
【0049】
ここで、「mul」は乗算動作を表し、「sub」は減算動作を表し、「ne」は「等しくない(not equal)」場合の、この場合は即値0に対するテストを表す。
【0050】
ライン1~7上の命令によって表される動作は、図4のDFG内のノード(1~7とラベル付けされている)に対応する。更に、ライン3及びライン4上では、指定されたチャネルのそれぞれの先頭にあるデータ項目を除去するチャネルデキュー動作(「deq」)が行われる。これは、いったんそれぞれのデータに関連するすべてが利用されると生じ得る。
【0051】
レジスタr1は、ライン8上で更新される(即値1だけデクリメントされる)特殊な反復カウント値を保持し、ライン9上の比較命令は、DFGを実装する状態遷移のシーケンスを再開するライン1上の命令をトリガすることと、すべての関連する値が処理されたことをおそらく示す何らかの他の状態にすることと、から選択するために使用される。
【0052】
「z」は、比較の結果に依存して実行時にこの特定のビットが設定されることを示すために、ライン9で使用される。すなわち、位置3におけるビットは、r1!=0の場合には1に設定されるが、r1==0の場合には、位置3におけるビットは0に設定される。したがって、最終的な述語結果は、比較(ne)が成功した場合には1000となり、チェックが失敗した場合には0000となる。
【0053】
本開示によって提案される構成は、プログラマ又はコンパイラが、並列に処理することができる1つ以上の命令の「グループ」又は「バンドル」(2つの用語は、本明細書の目的では等価であると見なされる)を指定する構成を利用することができる。そのような構成では、コンパイル又は他の動作は、それぞれのトリガ条件に依存して、実行するためにプログラム命令を生成することであって、プログラム命令の実行が次のトリガ条件を設定する、生成することと、プログラム命令をプログラム命令のグループへと分割すること又はバンドル化することであって、少なくともいくつかのグループは、所与のグループ内の1つのプログラム命令が所与のグループ内の別のプログラム命令の結果に依存しない、2つ以上のプログラム命令を含んでいる、分割すること又はバンドル化することと、各グループについて入力トリガ条件及び出力トリガ状態を生成することと、に関与することができ、入力トリガ条件は、満たされた場合、そのグループのプログラム命令の実行を可能にする条件であり、出力トリガ条件は、そのグループ内のプログラム命令のすべての実行の完了に応答して生成するための条件である。
【0054】
すなわち、命令のバンドルを指定するために以下のフォーマットが定義され得る。
【0055】
【数4】
【0056】
言い換えれば、トリガ条件が単一のそれぞれの命令の開始に関連し、かつその単一の命令がその実行に応答してトリガ状態を生成するのではなく、提案された構成では、トリガ回路は、命令のバンドルの実行によるトリガ状態の生成、と所与のバンドルに関連付けられたトリガ条件とに応答して、実行するために命令のそのバンドルを提供するようにキュー240を制御する。言い換えれば、述語の生成はバンドルベースで実行され、トリガ条件に対する述語のテストもまた、トリガ条件が個々の命令ではなくバンドルに関連付けられるようにバンドルごとに実行される。
【0057】
バンドルが1つの命令だけを含むことが可能であるが、多くの場合、バンドルは、2つ以上の命令を含んでもよく、いずれにしても、本発明の構成は、バンドルベースのトリガ条件テスト及びトリガ状態生成を可能にすることに留意されたい。
【0058】
したがって、この方式を上記のコードに適用すると(かつ、使用中の回路が、最大で、例えば4つの命令を並列に実行することができると仮定すると)、以下のプログラムコードが生成され得る。このコードでは、ソフトウェアのパイプライン化が採用され、この場合、動作を時間的に整列させるために使用されるプロローグセクション(ライン1~10)が存在することに留意されたい。同様のバンドル化された命令プログラムはまた、以前のコードを展開し、展開された本体内の動作をグループ化することによって生成され得るが、そのような展開は、コード「bloat」(タスクの特定のセットを実行するプログラム命令の全体量における望ましくない程度の成長を説明するために使用される用語)をもたらす傾向があり、命令空間がクリティカルリソースではないシナリオにおいてより良好に使用される。
【0059】
【数5】
【0060】
このコードを図4のDFGと比較すると、動作の以下のバンドルが定義される。
図4に、1、2、3及び4として示される動作。これらは、リストのライン1~6に示されるバンドルによって定義される。このバンドルは、p==0010のときに実行し、その実行に応答してp=1010を設定する。
図4に、5、6として示される動作。これらは、リストのライン7~10に示されるバンドルによって定義される。このバンドルは、p==1010のときに実行し、その実行に応答してp=1000を設定する。
【0061】
上述したように、これら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の対を得るために必要とされる。
【0062】
したがって、メインループは以下のバンドルを含む。
図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の単一命令バンドルとして表される、上記で論じたループ継続動作。
【0063】
次いで、ループは、r1!=0の場合、ライン12に、すなわちp==1000に分岐して戻る。一方で、r1==0である場合、チェックは失敗し、コードは、図4に示されるDFG以外の更なる動作を処理する入力述語0000(このリストには示されていない)を有する命令/バンドルをトリガする。
【0064】
上記で実証したバンドル化されたトリガ手法の副作用は、プログラムによってトラバースされなければならないアクティブ述語ビット数又は状態空間の低減を助けることができ、潜在的なハードウェア改善につながることである。複数の命令は、単一のトリガ条件を利用することができ、それにより、命令選択論理のスケーラビリティを潜在的に改善する。
【0065】
更に、命令バンドルは、従来のプロセッサにおいて一般的であり、かつ、それらが導入する追加の複雑性に起因して非効率性を潜在的にもたらす、従来の名前変更動作又は依存性チェック又はリアルタイムオペランド可用性追跡ユニットなしに、同時実行を可能にする。
【0066】
すべてのチャネルデキュー(又は実際にはエンキュー)動作は、バンドル内のすべての命令の完了後まで延期されることに留意されたい。したがって、ライン4、5、15及び16上で指定されたデキュー動作は、対応するバンドルの全体の完了後まで実行されないことになる。言い換えれば、コードのコンパイルは、グループを実行するための入力データを提供する1つ以上の入力チャネルについて、グループのプログラム命令の実行後に1つ以上の入力チャネルから入力データをデキューする1つ以上の動作を生成することを含むことができる。
【0067】
以下で説明する例示的な回路は、命令が真に同時に実行し、したがって、中間レジスタの変数へのいかなる書き込みもバンドルの終わりまで見られないことを保証することができることになる。したがって、例えば、ライン19上のベクトルレジスタz5及びライン20上のベクトルレジスタz6への書き込みは、バンドルの終了後まで行われず、したがって、ライン21上での「sub」動作には見られないことになる。バンドル内の同じ宛先ベクトルレジスタ又はチャネルへの複数の書き込みは、非決定論的な挙動を引き起こす可能性があり、理想的にはコンパイラによって検出されるべきである。そうでない場合、いくつかの実施形態は例外を生成する場合があり、一方、いくつかの他の実施形態は、そのような障害が発生したことを示すことができる(かつ、デバッグ目的で使用することができる)システムレジスタを提供する可能性がある。
【0068】
バンドル内のすべての命令は、同じトリガ条件を共有し、したがって、マシンの現在の状態に依存して、命令は、すべて進行する、又はいずれも進行しない。したがって、例えば、入力チャネル3(ich3)上にデータが存在しない場合、ライン14上の「add」及びライン16上の「sub」は、当然、実行することができないが、それらはライン13上の「mul」動作及びライン15上の別の「mul」動作とバンドル化されているので、これらの動作は、それらが動作するデータが実際には利用可能である場合であっても同様にストールされる。複数のチャネルのリーダのこの間接的な同期がいくつかの利点を有する一方で、ストールの確率が増加することに起因して、大きなバンドルに対してコストが高くなる場合がある。結果として、コンパイラのいくつかの実施形態は、ストールの頻度を制限しながらバンドル化の利点のいくつかを獲得するために、コードにおいて指定されたサイズからバンドルサイズを人工的に低減するように動作可能であり得る。いくつかの例では、バンドルは、命令を実行するために使用される回路によって提供される並列処理の程度に制限されてもよく、例えば、以下に与えられる例のうちのいくつかでは最大4つの命令でバンドル化する。
【0069】
バンドル化された命令を実行することが可能なトリガされたマイクロアーキテクチャ内に存在する複数の実行パイプライン又は実行経路は、同時に動作することができるが、そのようなパイプラインは、対称でない場合がある。その結果、いくつかの実施形態では、各バンドル内の命令の混合が基礎となるハードウェアによってサポートされていることを検証するために、コンパイラ又は何らかの他の同様のツールを動作させる場合がある。ある実行「スロット」又は実行経路が制限された数の命令のみを受け入れる場合、利用可能なハードウェアに一致するように命令をバンドル内で並べ替える(再配置する)必要がある場合もある。更に、ある同時期の動作の組み合わせがサポートされていない場合、バンドルはコンパイラによって分解される必要がある場合があり、あるいは、トリガされた命令ハードウェアが、実行時にバンドル内の動作をタイムスライスすることができる場合がある順序付けユニットを呼び出してもよい。実際には、これは、バンドル内の命令の数が最大サポート実行(並列処理)幅よりも大きい場合にも当てはまり得る。また、バンドル幅が実行幅と一致する場合であっても、いくつかの実施形態では、レジスタのアクセス制約に起因して、バンドル内の命令すべてが同時に進行することができない場合があり、したがって、何らかの形態の順序付けが不可避である場合がある。
【0070】
(述語レジスタに書き込む)比較のような状態遷移命令は、バンドル内で許可されるが、同じ述語レジスタへの複数の書き込みは、非決定論的挙動を引き起こし得る。加えて、バンドル全体を対象とする述語セットは、関連するビット位置に高インピーダンスインジケータ(ライン24上に示されるものなど)を有し、バンドル内の比較のうちの1つ以上の結果によってそのビットを設定することが可能になる。
【0071】
言い換えれば、バンドル内に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 *
【0072】
ここで、通常は単一の命令に関連付けられるビット3における遷移はこの時点では、バンドル全体に関連付けられており、述語ビット「3」はバンドルの完了時にのみ更新される。
【0073】
バンドル内により多くの比較動作が存在する場合、更新が競合していないこと、あるいは言い換えると、更新が好ましくは異なる述語ビットに適用されることが保証されなければならない。例えば、
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 *
【0074】
考慮する価値のある1つの側面は、バンドル粒度がプログラム全体にわたって一定でなくてもよく、いくつかのプログラムでは非常に不規則に変わる場合さえあるという事実である。上記で提示したバンドル化されたトリガ命令を有するプログラムを調べると、プログラムがサイズ1、2、及び4のバンドルを有するので、この不規則性のいくつかのインスタンスを観察することができる。したがって、命令メモリ内のバンドルをプログラム内に見えているようにレイアウトするハードウェア実装形態は、あるメモリ領域の非効率性又は不十分な利用に悩まされる可能性がある。これに関して、各場合における、(第1のシェーディング500によって表される)異なるサイズのバンドルと、第2のシェーディング510によって表される対応する十分に利用されていない又は浪費されたメモリ領域との概略的な例を提供する図5を参照する。
【0075】
各トリガされた命令がマルチウェイ状態遷移動作を包含すると仮定すると、それらは必ずしも命令メモリ内に順次配置される必要はないが、自由に再配置することができる。結果として、例示的な実施形態は、バンドル化された命令を潜在的により効率的に記憶することを可能にするために、図6に示される命令メモリの編成を提案する。図6は、命令バンドリングをサポートする空間トリガされたアーキテクチャにおける処理要素の1つの例示的な実施形態を示す。
【0076】
図6の構成(及び実際には図7又は図8の構成)は、上記で論じたような計算タイル及び/又はメモリタイルの態様(記憶部及びアレイインタフェース以外)、換言すると、図1のアレイの1つのノードにおける回路を表すことができる。コンパイル動作は、プログラム命令のグループを、そのようなプロセッサ若しくは回路のアレイの個々のプロセッサにルーティングすることに関与し得る。
【0077】
すなわち、図6では、同様のサイズのバンドルは、それぞれの異なる幅の命令キュー(又はより一般的には、命令記憶部)内に一緒にグループ化され、異なるバンドルサイズが、別個のメモリモジュール内に配置され、したがって、図5によって表される実装形態よりも高い記録密度(packing density)を集合的に有することができる。
【0078】
トリガ回路615からの信号である命令出力トリガ610は、次にトリガされるバンドルのサイズを示す「ウェイ」番号又は他の指示を組み込むように(図2を参照して説明したものに関して)拡張され、それにより、関連するバンドルの取り出しが単純化される。また、「ウェイ」番号は、命令記憶部600の関連するキューによって提供されるプログラム命令が復号及び実行のためにルーティングされるようにマルチプレクサ620にも提供される。
【0079】
命令記憶部600内のキューの実際のサイズ決めは、プロファイルされたプログラム内のバンドルサイズの混合に依存し得る。ルーティング回路625は、キューに入れるために命令記憶部600の適切なキュー内に命令をルーティングするために、例えば、コンパイラによって提供された信号又はデータの制御下で動作し、それにより、プログラム命令のグループを複数の命令キューから選択された命令キューにルーティングし、この命令キューは、実行するためにプログラム命令のグループを選択的に並列に提供するように構成されている。命令記憶部600のキューのバンドル化及び提供の本発明の構成は、特定のバンドルが1つの命令を含み得る可能性を提供するが、マルチ命令バンドルの可能性もまた明示的に提供することに留意されたい。1つのバンドルが2つ以上の命令を含む場合、命令記憶部は、並列に実行するために2つ以上の命令(2つ、3つ、又は4つの命令など)を提供するように構成される。コンパイラの制御下では、1つ又は2つの命令のバンドルが、その処理段階において他のバンドルを記憶する必要があることに依存して、ルーティング回路625によって4命令キューにルーティングされ得ることに留意されたい。
【0080】
バンドルの全体を保持するためにキューが提供されることは要件ではないが、例示的な構成では、以下に論じるように、バンドルを、回路によって提供された最大幅のキューよりも大きくならないようにコンパイルすることができる。
【0081】
キューは、1つ以上のバンドルの深さを含むことができるが、例示的な実施形態では、キューは、少なくとも2つのバンドルの深さを含み、それによって、実行するためにキューによってバンドルが提供されたとき、別のバンドルがすでにキューに入れられており、キューの新しい先頭になる準備ができている。
【0082】
以前に復号された命令に対応するビットパターンをフロントエンド内の記憶領域に記憶することがより効率的である実施形態では、図6に示される複数の命令復号ユニット630(次いで、ハードウェアユニットを複数回復号する命令を複製する代わりに、並列にアクセスされ得る)が存在しない場合があることに留意されたい。加えて、いくつかの実施形態では、両方の手法が存在する場合があり、(コンパイルフェーズ中に又はバンドル化された命令の先行するインスタンスを復号する際に事前に取得された)以前に復号されたバンドル含んでいる場合がある特別な記憶領域を使用して、復号段階をスキップすることによって、いくつかのインスタンスにおけるフロントエンドの電力要件又はパイプライン深さを低減することができる。
【0083】
トリガ回路615は、(場合によっては、結果バス及びチャネル占有情報からのデータを使用して、かつ/又は、上述のように述語ストア(図示せず)にアクセスして)処理要素の現在の状態を評価して、どのバンドルのトリガ条件が満たされたかを判定し、命令メモリからトリガされたバンドルを選択し、選択されたバンドルのルーティングのためにマルチプレクサ620を制御するために使用される。
【0084】
レジスタファイル635及び入力チャネル640によって保持され、概略マルチプレクサ650によって実行回路645にルーティングされる値に関して実行が行われる。実行結果は結果バス655上に提示され、そこから出力チャネル660にルーティングされ、レジスタファイル635及び/又はトリガ回路615に戻すことができる。
【0085】
したがって、図6は、命令記憶部600が、実行するためにプログラム命令のグループを提供するように各々が構成された少なくとも2つの命令キューを備える例を提供し、命令キューは、並列に実行するために最大n個のプログラム命令のグループを提供するように構成された第1の命令キューと、実行するために最大m個のプログラム命令のグループを並列に提供するように構成された第2の命令キューとを備え、mはnに等しくない。例えば、m及びnは、図6の例では、値1、2及び4のうちの任意の各値であると見なされ得る。
【0086】
この例では、トリガ回路615は、プログラム命令の実行によるトリガ状態の生成と、命令記憶部600の少なくとも2つの命令キューのうちの所与の命令キューに関連付けられたトリガ条件とに応答して、実行するためにキューに入れられたプログラム命令を提供するように所与の命令キューを制御する610。
【0087】
この構成はまた、プログラム命令のグループを命令キューのうちの選択された1つにルーティングするように構成されたルーティング回路625と、命令記憶部600の命令キューのいずれかによって並列に提供されたプログラム命令の最大数(この例では4つ)以上である多数(この例では同じく4つ)のプログラム命令を並列に実行する複数(図6の例では4つ)の実行経路630、645とを示す。他の実施形態では、例えば、この数は、各キューからのバンドルを並列に実行することができるように、7であり得る。
【0088】
したがって、図6(及び、実際には図7又は図8)は、それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理回路630、645を備える回路の一例を提供し、処理回路は、並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶部600と、プログラム命令のグループの実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するために(例えば、プログラム命令の所与のグループの)プログラム命令を提供するように命令記憶部を制御するトリガ回路615と、を備える。
【0089】
レジスタファイルの考慮事項
図6は、共通の又はモノリシックなレジスタファイル635を提供する。したがって、この構成は、復号段階630及び実行回路645によって図6に表される複数の実行経路を提供するが、図6の構成は、実行経路のうちのいずれかによるプログラム命令の実行に共通のプロセッサレジスタのセット、すなわち、プログラム命令のグループ内のプログラム命令の実行に共通のプロセッサレジスタのセットを提供し、プロセッサレジスタのセットは、プログラム命令の実行中にアクセス可能である。
【0090】
しかしながら、レジスタファイル635が多数の読み出しポート及び書き込みポートを、例えば、一実施形態では12個の読み出しポート及び4個の書き込みポートを有し得るので、現実的な設計では、この構成により課題が生じる。この潜在的に法外なコストは、各実行スロットが理想的には最大で3つのソースオペランドに同時にアクセス可能であるべきであり、かつ、機能ユニットを出て転送経路及びレジスタ書き込み回路を供給するバックエンドにおけるデータ経路の帯域幅が、ストールの導入を回避するのに十分に高さである必要があるので生じる。いくつかの潜在的な解決策が存在する。
【0091】
いくつかの例示的な実施形態では、3つのソースオペランドを必要とする乗算及び累算「mla(multiply-and-accumulate)」などの動作は、少数のパイプライン(実行経路)に制限することがあり、他のパイプラインは、1つ又は2つのソースオペランドのためのレジスタファイルアクセスのみをサポートする場合がある。この方式は、全体的なポート数を低減することができるが、柔軟性及び性能を潜在的に損なう可能性がある。したがって、この例では、実行経路のうちの少なくとも1つは、最大で第1の数のオペランドを有するプログラム命令を実行するように構成されており、実行経路のうちの少なくとも別の実行経路は、最大で第2の数のオペランドを有するプログラム命令を実行するように構成されており、第1の数と第2の数とは異なる。例えば、オペランドの第1の数及び第2の数は2及び3であってもよい。
【0092】
分割レジスタファイル
次に、分割レジスタファイルを使用する別の実施形態について、図7を参照して説明する。ここで、図6の構成と共通の特徴には同じ参照番号が与えられ、再度詳細には説明しない。
【0093】
図7の構成は、実行経路の各々について1つのセットである、少なくとも2セットのプロセッサレジスタ(「レジスタバンク」700として図7に示され、n=0、1、2、又は3である)であって、所与の実行経路に対するプロセッサレジスタのセットは、その実行経路によるプログラム命令の実行中にアクセス可能である、少なくとも2セットのプロセッサレジスタと、プロセッサレジスタのセット間でデータを通信する通信回路710と、を提供する。
【0094】
この実施形態では、コンパイルフェーズ中に、同じスロット又は実行経路を共有するすべての命令がそれらの間でレジスタファイル(バンクn)の共通部分を有するが、バンク間通信回路710を使用してバンク間で情報を転送するために明示的な「レジスタ移動」が必要とされるように、レジスタアロケータを制限することができる。この方式では、先に示したコードのライン12~23を以下のように書き換えることができる。
【0095】
【数6】
【0096】
バンク間データ移動動作の回数を低減するために、バンドルのうちの1つの中の命令が「並べ替えられている」ことがわかる。ここで使用されるレジスタ表記では、サフィックス「_0」、「_1」、「_2」及び「_3」は、レジスタを含んでいるそれぞれのレジスタバンクを識別する。命令のバンドル化をサポートするために必要な明示的な移動動作は、ライン19に示されている。
【0097】
図7では、レジスタファイルのようにはバンキングされていない4つの入力チャネル640がある。これは、入力チャネルの数は、典型的には、メインレジスタファイルに対してはるかに少なく、「読み出し専用」であるので、これは許容可能なトレードオフである場合がある。加えて、4つの出力チャネルに送信されたデータは決してリードバックされないので、いくつかの実施形態ではバンキングを回避することができる。しかしながら、他の例では、入力チャネルはまた、レジスタファイルと同じ方法でバンキングされ得る。
【0098】
戻り経路720は、バンク間通信回路710を使用する追加の動作を必要とせずに、特定の実行経路による実行の結果が、その実行経路に関連付けられたレジスタバンクにライトバックされることを可能にすることに留意されたい。
【0099】
図8に示される、分割レジスタファイルを使用する別の実施形態では、レジスタアクセス方式の更なる例は、複数のスロット又は実行経路による並列アクセスを同時に可能にしながら、レジスタファイルに必要とされる読み出しポートの数を低減するバンドル化されたトリガされた命令セットアーキテクチャを提供する。
【0100】
ここでも、図6又は図7と共通の特徴は同じ番号を使用し、更に詳細には説明しない。
【0101】
しかし、図7の方式とは異なり、図8では、スロット又は実行経路間のコヒーレンシを維持するために明示的な移動動作は必要とされない。この方式では、各スロットは、スロットレジスタバッファ(Slot Register Buffer、SRB0...3)800と呼ばれる小さなローカルレジスタファイルを有し、このレジスタファイルは、(すべての経路に共通な)メインレジスタファイル810から取り出されたオペランド又はその実行経路により実行された以前のデータ処理動作によって書き込まれたオペランドのコピーを保持する(所与の実行経路によって生成されたデータのための戻りルート820があることに留意されたい)。
【0102】
このような構造に流入する又はそこから流出する情報を管理するための多くの可能な技法があり、1つの手法を以下に示す。メインレジスタファイル810に対して各SRB800を小さく保ち、各々が有する読み出しポートの数を制限することによって、合理的なパワーエンベロープ内にとどまりながら、バンドルの同時実行の機会を処理することが可能である。
【0103】
レジスタバッファ管理ユニット(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によりサービスされる可能性があり、それにより並列実行が潜在的に改善される。
【0104】
RBMU830は、固有のレジスタに対する任意の更新を、そのレジスタのコピーを有するすべてのSRB800にブロードキャストする。1つの機能ユニットのみがバンドル内の各宛先レジスタに書き込むことを許可されるので、このブロードキャスト方式は有効である。「修正された」ビットは、SRB800内の関連するエントリが、後で排除される場合にはメインレジスタファイルに書き込まれることを保証するために、対応するロケーションに設定される。そのような排除は、新しい値をSRBに加算し、プロセスを効率的にしようとしているときの容量の問題に起因して生じ、使用の追跡は、アクセスカウンタを使用して実行される場合がある。使用頻度の低いエントリは排除することができる。書き込まれているレジスタに一致するエントリがいずれのSRBにもこの時点で存在しない場合、値はメインレジスタファイルに書き込まれる。
【0105】
マルチレベルレジスタの記憶構造に関する前述の説明は、これらの構造が推論の失敗又は例外に遭遇したときに導入する追加の遅延を理由に、従来のプロセッサでは受け入れられにくい。アーキテクチャレジスタ状態は、すべてのSRBを潜在的にドレインすることによってのみ見えるようにすることができ、これは、高価で時間を要する動作であり得る。しかしながら、バンドル化されたトリガ命令アーキテクチャの主な目的が柔軟なマルチドメイン空間加速であるので、提案された構造は、本使用事例において受け入れられるだけでなく、有利であると見なされる。現在の使用事例では、豊富な推論、正確な例外、及び高速例外エントリ機能など、従来のプロセッサに適用可能な目的を反映する一般的な目的に対する要件はほとんどない。
【0106】
図8において、入力チャネルバッファ管理ユニット(Input Channel Buffer Management Unit、ICBMU)850と呼ばれるハードウェア構造は、RBMUと同様に作用し、チャネルからの着信データをスロットチャネルバッファ(Slot Channel Buffer、SCB0...3)860と呼ばれる小さな記憶領域に転送することができる。しかしながら、入力チャネルの数がメインレジスタファイルに対してはるかに少ないので、フルアソシアティブであるSRBとは異なり、各SCBを直接マッピングすることができる。加えて、最大3つのチャネルを同時に読み出す命令は稀であるので、各SCBに必要なポートはSRBに対して少なくてもよい可能性がある。更に、入力チャネルは「読み出し専用」であり、したがって、ICBMUはRBMUほど多くのコヒーレント機能を有する必要はない。その主要な目的は、「デキュー」イベント及び「チャネル読み出し」イベントをリッスンすることであり、デキュー動作がバンドルの終わりで発生するときはいつでも、対応するチャネルの先頭における新しいデータが、そのチャネルから最近読み出しをしたすべてのスロットに伝搬される。SCBは直接マッピングされた構造であるので、排除は必要ない。
【0107】
バックエンドにおいて遷移中のデータと出力チャネルにおけるデータとの間の同期を必要とする重大なイベントがないので、実行ユニットから出力チャネルに向かう情報は、任意の特別な管理ユニットを横断する必要がない。加えて、チャネルごとに1つのライタ(writer)のみがバンドル内で許可されることと、トリガされた処理要素の機能ユニットによって決してデータがこれらのチャネルからリードバックされないこととの2つの前提は、バンドル化をサポートするのに必要な出力経路の構築を更に単純化することができる。
【0108】
したがって、図8は、実行経路のいずれかによるプログラム命令の実行に共通のプロセッサレジスタ810のセットと、プロセッサレジスタのうちの1つ以上によって保持されたデータのコピーを記憶する、各実行経路のためのバッファ回路800と、プロセッサレジスタのセットとバッファ回路との間のデータのコピーを制御する制御回路830、840と、を示している。上述したように、いくつかの例では、任意の実行経路による実行の結果は、その実行経路に関連付けられたバッファ回路800に直接ライトバックされ得る。
【0109】
処理アレイ
図1の構成は、本発明の例示的な実施形態のいずれかによる回路を使用して実装されるとき、そのような回路のアレイと、アレイの回路間でデータを通信するデータ通信回路140、150とを備える処理アレイの例を提供する。
【0110】
コンパイラ例
次に、コンパイラの実施形態を示す例示的な構成について、図9及び図10を参照して説明する。ここで、図9は、例えば、以下に図12を参照して説明される方法に従って、上記のようなバンドル化されたプログラムコードを生成するコンパイラ動作を実行するために使用することができるデータ処理装置900を概略的に示す。コンパイラ動作を実行するために任意の前述の回路が使用され得るが、少なくともいくつかの例では、装置900などの汎用データ処理装置が使用され得ることに留意されたい。
【0111】
装置900は、1つ以上の処理要素又は中央処理装置(CPU)910と、ランダムアクセスメモリ920、フラッシュメモリ、光ディスク又は磁気ディスク、読み取り専用メモリなどの不揮発性記憶部930(本明細書で説明するコンパイラ動作を実行するコンピュータソフトウェアを提供又は記憶することができるマシン可読式の非一時的記憶媒体の一例を形成する)と、ディスプレイ、キーボード、ポインティング制御などのうちの1つ以上などのグラフィカルユーザインタフェース940と、ネットワークインタフェースなどの1つ以上の他のインタフェース950とを備え、すべてがバス構造960によって相互接続されている。動作中、コンパイラ又は他の機能を実行するプログラム命令は、不揮発性記憶部930から読み出され、ランダムアクセスメモリ920と協働してCPU 910によって実行される。
【0112】
図10は、ソースコード1000がコンパイル動作1010によって、例えば、図12を参照して説明されるプロセスを使用してコンパイルされ、実行可能なプログラム命令1020を生成するコンパイル動作を概略的に示す。
【0113】
方法の概要
上記で論じた技法の概要として、図11は、(例えば、上述の回路によって実装することができる)方法を示す概略フローチャートであり、この方法は、
(ステップ1100において)それぞれのトリガ条件が現在のトリガ状態に一致することに依存して、かつ、プログラム命令の実行に応答して次のトリガ状態を設定するように、プログラム命令を実行することと、
(ステップ1110において)命令記憶部によって、並列に実行するためにプログラム命令の2つ以上のグループを提供することと、
(ステップ1120において)プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令の所与のグループのうちのプログラム命令を提供するように、命令記憶部を制御することと、
を含む。
【0114】
上記で論じた技法の更なる要約として、図12は、コンピュータ実装方法を示す概略フローチャートであり、この方法は、
(ステップ1200において)それぞれのトリガ条件に依存して、実行するためにプログラム命令を生成することであって、プログラム命令の実行が次のトリガ条件を設定する、生成することと、
(ステップ1210において)プログラム命令をプログラム命令のグループへと分割することであって、少なくともいくつかのグループは、所与のグループ内の1つのプログラム命令が所与のグループ内の別のプログラム命令の結果に依存しない、2つ以上のプログラム命令を含んでいる、分割することと、
(ステップ1220において)各グループについて入力トリガ条件及び出力トリガ状態を生成することと、
を含み、入力トリガ条件は、満たされた場合、そのグループのプログラム命令の実行を可能にする条件であり、出力トリガ条件は、そのグループ内のプログラム命令のすべての実行の完了に応答して生成するための条件である。
【0115】
例示的な構成では、ステップ1200、1210、1220の各々は、コンピュータソフトウェア(不揮発性記憶部930によって記憶され得る)の制御下で動作する図9の装置などのコンピュータによって実装されてもよい。
【0116】
シミュレーションの実施形態
図13は、使用され得るシミュレータ実装形態を例示する。上記の実施形態は、当該技法をサポートする固有の処理ハードウェアを動作させる装置及び方法の点において本発明を実装しているが、コンピュータプログラムの使用によって実装される本明細書に記載の実施形態による命令実行環境を提供することも可能である。このようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限り、シミュレータとしばしば称される。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的に、シミュレータ実装形態は、シミュレータプログラム1310をサポートするホストプロセッサ1330上で、任意選択でホストオペレーティングシステム1320を実行して、実行し得る。いくつかの構成では、ハードウェアと提供されている命令実行環境との間に複数のレイヤのシミュレーションがあってもよく、かつ/又は、同じホストプロセッサ上に提供されている複数の異なる命令実行環境があってもよい。歴史的に、強力なプロセッサが、合理的な速度で実行されるシミュレータ実装形態を提供するのに必要とされてきたが、このようなアプローチは、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるようなときなどの、ある状況下では正当化され得る。例えば、シミュレータ実装形態は、ホストプロセッサハードウェアによってサポートされていない追加の機能性を有する命令実行環境を提供し得るか、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供し得る。シミュレーションの概要は、以下に引用されている参考文献[2]に示されている。
【0117】
これまで、特定のハードウェア構成物又は特性を参照して実施形態を説明してきたが、シミュレーションされた実施形態では、適切なソフトウェア構成物又は特性によって同等の機能性を提供することができる。例えば、特定の回路は、シミュレーションされた実施形態で、コンピュータプログラムロジックとして実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実施形態で、ソフトウェアのデータ構造として実装されてもよい。前述の実施形態で参照されているハードウェア要素のうちの1つ以上がホストハードウェア(例えば、ホストプロセッサ1330)上に存在する構成では、いくつかのシミュレーションされた実施形態は、好適な場合、ホストハードウェアを利用してもよい。
【0118】
シミュレータプログラム1310は、(非一時的媒体であり得る)コンピュータ可読ストレージ媒体に記憶されてもよく、(アプリケーション、オペレーティングシステム、及びハイパーバイザを含み得る)ターゲットコード1300に、シミュレータプログラム1310によってモデル化されたハードウェアアーキテクチャのインタフェースと同じであるプログラムインタフェース(命令実行環境)を提供することができる。したがって、それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理プログラム論理を提供する命令を含む、ターゲットコード1300のプログラム命令、並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶プログラム論理を備える処理プログラム論理、並びに、プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、上述の、実行するためにプログラム命令を提供するように命令記憶プログラム論理を制御するトリガプログラム論理は、シミュレータプログラム1310を使用して命令実行環境内から実行されてもよく、それにより、上記で論じた装置のハードウェア機能を実際には有していないホストコンピュータ1330は、これらの機能を模倣することができる。
【0119】
したがって、例示的な実施形態は、それぞれのトリガ条件が現在のトリガ状態に一致することに依存してプログラム命令を実行し、プログラム命令の実行に応答して次のトリガ状態を設定する、ように構成された処理プログラム論理を備える命令実行環境を提供するホストデータ処理装置を制御するための命令を含む、仮想マシンコンピュータプログラム、並列に実行するために2つ以上のプログラム命令のグループを選択的に提供するように構成された命令記憶プログラム論理と、プログラム命令の実行によるトリガ状態の生成と、プログラム命令の所与のグループに関連付けられたトリガ条件とに応答して、実行するためにプログラム命令を提供するように命令記憶プログラム論理を制御するトリガプログラム論理と、を備える処理回路、を提供することができる。
【0120】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」(configuration)とは、ハードウェア又はソフトウェアの構成(arrangement)又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有し得るか、又はプロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされ得る。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
【0121】
本技術の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されてきたが、本技術はそれらの正確な実施形態に限定されず、添付の特許請求の範囲によって定義される技術の範囲及び精神から逸脱することなく、当業者によって様々な変更、追加、及び修正を行うことができることを理解されたい。例えば、従属請求項の特徴の様々な組み合わせは、本技術の範囲から逸脱することなく、独立請求項の特徴によって作製され得る。
【0122】
参考文献:
[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
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
【国際調査報告】