詳細な説明
概説
本開示の局面は、データ依存演算、不規則演算、および/またはメモリバウンド演算を加速させることができるアクセラレータを提供する。スパース入力に対するデータ依存演算を加速するように構成されたアクセラレータは、本明細書ではスパースアクセラレータと称され得る。スパースアクセラレータは、埋込みニューラルネットワークまたはグラフニューラルネットワーク(graph neural network:GNN)等の、意味論的なスパース性を呈するニューラルネットワーク層を効率的かつ高性能に実行するように構成することができる。グラフニューラルネットワークは、グラフとして表わすことができるデータを処理するためのニューラルネットワークに対応し得る。
スパースアクセラレータはタイル型プロセッサとして編成することができる。スパースアクセラレータは、タスクをタイルにディスパッチするために用いられるタイルシーケンサを含み得る。スパースアクセラレータの各タイルは、クロスレーン処理ユニット(cross-lane processing unit:XPU)で拡張されたベクトルコアと、共有ソフトウェア制御型スクラッチパッドメモリのスライスとを有する。タイルおよびシーケンサは共に、高帯域幅メインメモリに接続可能である。
スパースアクセラレータの編成および構造は、本明細書に記載の別々の特徴の様々な組合せにより、データ依存演算、不規則演算、および/またはメモリバウンド演算を改善させる。アクセラレータのタイルは、データ依存演算、不規則演算、および/またはメモリバウンド演算が行なわれている状態で有効な計算をより効率的に利用するために、以下の特徴のうちの1つ以上を含み得る。各タイル内のクロスレーン処理ユニット(XPU)は、共通の不規則な制御フローシーケンスおよび/またはベクトル内依存演算を加速させる。各XPUは、共通のベクトル内依存演算のためのカスタムの高速データ経路を提供することを可能にする。
本明細書に記載のアクセラレータ上で実装可能な他の特徴は、協調的プリフェッチおよびストリーム命令および順序付けを含み得る。協調的プリフェッチは、タイル間の命令フェッチ帯域幅要件を減らすことで、性能およびエネルギー効率の改善を可能にする。本明細書に記載のストリーム命令は、高帯域幅でのデータ依存型スキャッタ・ギャザーを可能にする。アクセラレータの各ベクトル処理ユニットは、高帯域幅で、メモリ階層の任意のレベルへのデータ依存アドレスを生成してもよい。
タイルローカルのスキャッタおよびギャザーは、データに不規則性がある状態で中断なしに計算することを可能にし得る。各アクセラレータタイルは、間接的なベクトルロード、ストア、およびストア追加のための利用可能な命令とともに、命令セットアーキテクチャ(instruction set architecture:ISA)によって公開される、そのローカルメモリへの高性能なスキャッタおよびギャザーを本質的にサポートすることができる。
実装されたXPUのソフトウェア制御型タイルグループ化は、制御オーバーヘッドのフレキシブルな償却を提供することができる。ソフトウェアは、論理的に構成可能なベクトル幅、例えば、論理SIMD幅を呈するように、タイルをフレキシブルにグループ化することができる。これは、同じグループ内のタイル間での冗長な命令フェッチを排除したり、タイル間での結合メモリアクセスを可能にしたりする等の、制御オーバーヘッドを償却するのに役立ち得る。これにより、結果として、より良好な帯域幅効率をもたらすことができ、例えば、高帯域幅メモリ(high-bandwidth memory:HBM)は、アクセス粒度が異なる場合には異なる帯域幅効率を有し得る。データ依存演算(「入力依存演算」とも称される)は、その演算を実行するための計算作業の量が事前に知られておらず、データの性質に依存する演算である。データ依存演算は、データ依存アドレスストリームとして表わすことができ、データ依存アドレスストリームは、シーケンス内のアドレスの長さおよび特定値が実行時に知られているようなアドレスのシーケンスに対応する。計算作業は、例えば、データ依存演算を実行するために必要な演算または処理サイクルの数で測定することができる。例示的なデータ依存演算は、ベクトルソートのための演算と、ベクトル内の重複値をカウントするための演算と、様々な長さのベクトルの形状またはサイズを処理するための演算とを含む。データ依存演算は、少なくとも、異なる入力に対して同じタイプの演算を実行するためのランダムメモリアクセスパターンに違いが有るため、不規則である。結果として、データ依存演算は、その形状または程度またはスパース性等の入力データの性質に基づいて計算作業が変化しない他のタイプの演算とは対照的に、性能を最適化することが困難である。
データ依存演算は、スパースデータに対して実行される演算を含む。データ構造のスパース性は、空の要素に対する空でない要素の比の尺度である。データ構造によっては、空の要素はゼロであってもよく、要素についての値がないことを示す予約語であってもよく、または、入力としてデータ構造で実行される演算にほんのわずかしか寄与しないと考えられるほど小さい値を有してもよい。空でない要素よりも空の要素が多い場合、データ構造はスパースである。いくつかのデータ構造は他のデータ構造よりも多かれ少なかれスパースであり得る。
例示的なデータ依存演算は、入力トレーニング例のための埋込みを生成することを含む。埋込みは、ベクトルであり得るか、または、当該埋込みよりも高い次元を有する入力からマッピングされた何らかの他のデータ構造であり得る。埋込み生成は、パイプラインに従って処理されるワークロードの一部として実行することができる。
スパースアクセラレータの各タイルのXPUはまた、ベクトルスキャッタもしくはギャザー演算、セグメント和等の他のデータ依存演算を実行してもよく、および/または、テンソル等のスパースデータ構造を仕切ってもよい。本明細書に記載のXPUは、SIMD並列処理パラダイムに従って構築されたベクトル処理ユニット等の、プロセッサの他の構成要素または接続された構成要素に対する補完的処理ユニットであり得る。1つ以上のXPUは、それ自体がトレーニングニューラルネットワーク等の特定のワークロードの性能を加速するための他の構成要素を含み得る、より大型のプロセッサのそれぞれのプロセッサコアにおいて接続され得る。
さらに、XPUは、特定のタイプのデータ依存演算を実行することに限定されず、従って、あるプロセッサは、複数の異なるパイプラインのための他のタイプの処理ユニットを補完するためにXPUを含むように設計され得る。XPUをワークロードごとに構成することができるので、特殊な回路がスパースデータの計算用の相補的ユニットとしてプロセッサ上に物理的に製作されている他のアプローチと比較して、XPUの物理的フットプリントが低減される。XPUの機能はまた、命令セットを用いることにより、またはホストプロセッサの既存の命令セットへと拡張することにより拡張することができ、パイプラインデータ受信の変化に応じて様々なデータ依存演算の適応性をさらに改善させることができる。命令は、XPUの個々の処理セルおよびクロスバーを構成するために命令を翻訳する役割を果たすXPUの構成要素に対する信号として提供することができる。XPUは、XPUを実装するハードウェア回路のための対応するコンパイラによってコンパイルされたプログラムを用いて構成され得る。
本開示の局面は少なくとも以下の技術的利点を提供する。本明細書に記載のアクセラレータは、オペランドが概して実行時まで知られていないデータ依存演算を実行することを必要とする大規模な機械学習モデルのスケーラブルな分散型トレーニングを提供する。
アクセラレータは、単独で、および他のプロセッサと組合わせて、タスク、データ、パイプライン、およびモデル並列性等の種々の形態の並列性を達成するために、アクセラレータ内のXPUを実装するタイルのフレキシブルな演算構成を可能にする。タスクレベルの並列化では、各タイルは、独立した計算(タスク)を並列に実行してもよい。メモリレベル並列化のために、タイルは、利用可能なメモリ帯域幅を吸収するために、高帯域幅に対して並列にメモリ要求を発行してもよい。これにより、スパースアクセラレータが別々のタスクにおいて様々な量の作業を扱うことが可能となる。
本明細書に記載のアクセラレータは、別のアクセラレータと並んだ専用コプロセッサであり得るか、または、データ依存演算を加速するように構成されていない汎用プロセッサであり得る。本明細書に記載のアクセラレータは、スパース計算または他のデータ依存計算を加速して、データ依存演算を実行するためのデータを取出すためにホストメモリに依拠するアプローチを上回る性能利得を、例えば処理速度を高める際に実現し得る。
本明細書に記載のアクセラレータは、高密度の規則的な計算を実行するように構成されたコプロセッサに対するアーキテクチャの同類として機能することができる。別個のプロセッサに通信可能に結合される本明細書に記載のプログラム可能なスパースアクセラレータを実装することにより、コンパイル時に予測不可能な複雑さで演算を加速するためのフレキシブルな手段を提供することができる。本明細書に記載のアクセラレータは、複雑なデータ移動、再編成、および要約化を伴うメモリバウンド演算をターゲットとすることができる。このタイプの演算は、スキャッタ・ギャザー演算、フィルタリング、ソート、一意化等を含み得る。アクセラレータは、コンパイラスタックに従って、例えば、送信元コードをアクセラレータおよびそのコプロセッサによって実行可能な命令に変換するように構成されたコンパイラに従って、ターゲット設定可能である。
本明細書に記載のアクセラレータは、埋込み生成を加速させることができる。埋込み生成は、概して、演算強度が低い不規則なメモリアクセスを伴うものとして特徴付けることができる。これは、少なくとも、埋込み生成のための入力ベクトルのスパースで不規則な性質を前提として、埋込みマップおよび可変幅ベクトル計算を表わすテーブルのオンチップテーブルルックアップを実行する必要があることに起因する。埋込みは、離散オブジェクトから、例えば、ベクトルまたは値の他のデータ構造から、実数値等の数値のベクトルへのマッピングである。埋込みは、それらの次元および複雑性が、概して、それらの対応する事前埋込みオブジェクトよりも低い。例えば、英語の1つ以上のワードの埋込みは実数値のベクトルであり得る。埋込みは、事前埋込み入力の潜在的に顕著な特徴を表現および識別するために用いることができ、例えば、異なるワードの埋込み間の距離を測定することによってこれらの埋込みを比較して、2つの事前埋込み入力間の類似性を定量化することができる。
本明細書に記載する協調的プリフェッチは、タイル間の命令フェッチ帯域幅要件を減らすことで、性能およびエネルギー効率の改善を可能にする。アクセラレータのタイル化されたアーキテクチャは、シングルプログラムのマルチプルデータモデルで動作するタイルの構成可能サブセットを付加的に提供する一方で、マルチプルプログラムのマルチプルデータプログラミングモデルを公開する。
本明細書に記載のストリーム命令は、高帯域幅でデータ依存型スキャッタ・ギャザーを可能にする。アクセラレータの各ベクトル処理ユニットは、高帯域幅で、メモリ階層の任意のレベルへのデータ依存アドレスを生成し得る。本明細書に記載するストリーム命令は、ソフトウェアにおけるデータ依存アクセスパターン表現を可能にする、構造的に、例えばISAにより、可視である構築物を提供する。これらのアクセスパターンは、複数のアドレス指定モード、構成可能な転送サイズ、およびアトミック演算を含む間接メモリアクセスを含む。ストリーム命令は、ソフトウェアがメモリアクセスのための「開始」アドレス、「サイズ」および「シーケンスパターン」を指定することを可能にする。これはすべて、本開示の局面に従って、アクセラレータの各タイルが、データにアクセスしてスキャッタ・ギャザー・エンジンを用いて要求に対応するための別個のコアを実装している間に行なわれる。
データは、プロセッサの様々な構成要素および他のオフチップ構成要素を通り、かつ、アドレスストリーム内のアドレスに対応するデータ値であるデータストリームを通って流れ得る。データストリームは、当該ストリームを特徴付けるメタデータを提供するストリーム記述子を有してもよい。メタデータの一部として、データストリームはストリーム識別子を有し得る。当該ストリーム識別子は、ストリームがプロセッサのうちのどの実行スレッド上で現在処理されているかを識別するために用いることができる。複数のストリーム、例えば、8個、16個、または32個のストリームがアクティブであり、同時にプロセッサを通って流れる可能性もある。
本明細書に記載の循環バッファ命令は、可変サイズの動的データストリームを可能にし得る。循環バッファ命令は、コンパイル時にバッファを明確に割当てることなく、ソフトウェアが静的に未知のサイズデータストリームをフェッチし、それに対して演算を行なうことを可能にする、構造的に(例えばISAにより)可視である構築物である。従って、循環バッファ命令は、メモリの静的サイズの領域上での動的サイズのデータストリームの転送およびアクセスを可能にする。スキャッタ・ギャザー・エンジンは、様々なデータストリームの実行時バッファサイズを追跡し、フロー制御を管理する。循環バッファ命令は、基礎をなすメモリも標準的なロードおよびストアを介してアクセス可能であるので、ソフトウェアを非FIFOアクセスパターンから除外することなく、高速の一般的事例のために構造的先入れ先出し(FIFO)抽象化を提供する。別の例では、複数のタイルの各々におけるベクトルコアは、タイルローカルスクラッチパッドメモリの同じ領域への順不同なアクセスを除外することなく、順序通りの循環型先入れ先出し(FIFO)アクセスとしてタイルローカルスクラッチパッドメモリの実行時構成およびアクセス領域を提供するように構成される。
ストリーム命令および循環バッファ命令は、必要な場合に必要に応じてソフトウェアがメモリに「ランダム」アクセスすることを妨げることなく、一般的な場合のFIFO抽象化を可能にする。ソフトウェアは、バッファをFIFOフェッチすることができるが、必要な場合に必要に応じて、フェッチされたバッファ/ウィンドウ内で再利用することで複数回データにアクセスすることができる。これは、データを再利用するために複数のポップを必要として当該複数のポップをキューに押込むソフトウェアにおけるアプローチとは対照的である。このような制御により、ソフトウェアがプリフェッチを発行する場合に、粒状にフロー制御をフェッチして実行するスキャッタ・ギャザー・エンジンとの間でバランスをとる。ソフトウェアは、ストリームを大体いつくらいに発行するかに関してより高次のビット権利を取得し、本明細書に記載するストリーム順序付けおよび命令を実装するスキャッタ・ギャザー・エンジンは、待ち時間、バッファ占有等の粒度の細かい変化に対応する。
マイクロアーキテクチャ、例えば、本明細書に記載するスキャッタ・ギャザー・エンジンは高性能で不規則なメモリアクセスを可能にする。スキャッタ・ギャザー・エンジンはタイルごとに実装され、ソフトウェアにより定義されたアドレスストリーム、例えばストリーム命令および循環バッファ命令の発行、フェッチ、追跡、および順序付けを管理する。エンジンは、タイル毎に、例えば、機内で、256個の要求等のいくつかの読出しメモリ要求を維持することができる。スキャッタ・ギャザー・エンジンは、アドレス要求をレート制御するためにバッファ占有を追跡および更新する。ソフトウェアは、個々のアドレス要求を処理する際の待ち時間の変化を明確に管理する必要なしに、バッファの占有を構造的に精査することができる。
ストリーム命令と循環バッファ命令とスキャッタ・ギャザー・エンジンとの組合わせは、分離されたアクセス実行を可能にするとともに、不規則なメモリアクセスストリームを含む長いメモリアクセス待ち時間を効果的に高めることができる。これは、ソフトウェアに、データ依存メモリを生成するフレキシブル性をもたらすとともに、「粗い」粒度でそれらをスケジューリングするという選択肢を提供し、この場合、スキャッタ・ギャザー・エンジンは、フロー制御するとともに要求に対応するように構成されている。
本開示の局面は、計算タイルのセット間にわたって動的な小ベクトルタスクの複数のスレッドを実行するように構成されたアクセラレータを提供する。動的タスクは、データ依存制御およびメモリアクセスを伴うタスクを含む。小ベクトルタスクは、比較的小さいベクトル(例えば8つの要素ベクトル)に対して実行されるタスクを含み得る。これらのタイルは、シーケンサと称される単一のタスク管理コアによって管理される。アクセラレータの計算と帯域幅との比は、オフプロセッサの高帯域幅メモリに記憶された大規模データセットの不規則でスパースなアクセスおよび計算に合わせて調整される。
アクセラレータは、各々がそれぞれのアクセスコアおよび実行コアを含む複数のタイルを含み得る。アクセスコアは、データ移動を計算から切離すために用いられるスカラーユニットであり得る。実行コアは、対応するアクセスコアによってフェッチされたデータを処理するように構成された、複数のSIMDレーンでベクトルユニットに取付けられた別のスカラーユニットであり得る。各タイルはまた、クロスレーン低減、シャッフル、ソート、プレフィックス和等を実行するためのそれぞれのXPUを含み得る。アクセラレータは、タイル間にわたるタスク管理のための、かつ他のコアと通信するためのスカラーユニットであり得るシーケンサも含み得る。アクセラレータはまた、スクラッチパッドメモリ、例えば、8メガバイトの共有メモリを含み得るが、様々な例では、共有メモリのサイズは異なっていてもよい。本明細書に記載するように、アクセラレータは、ストリーミングメモリアクセスインターフェイスを実装して、トランザクションをオフタイルメモリに対して未処理に維持することができる。アクセラレータはまた、タイルを共有スクラッチパッドメモリに、ならびに互いに接続するための高帯域幅クロスバーを含み得る。
例示的なシステム
図1Aは、本開示の局面に従った、データ依存演算を加速するためのハードウェア回路101のブロック図である。ハードウェア回路101は、スパースアクセラレータ103、コプロセッサ104、高帯域幅メモリ107、およびオンチップ相互接続108を含み得る。スパースアクセラレータ103は、1つ以上のタイル102A~102Fを含み得る。各タイルは、それぞれのベクトル処理ユニット(vector processing unit:VPU)を実装し、それぞれのクロスレーン処理ユニット(cross-lane processing unit:XPU)101A~101Fを含む。スパースアクセラレータ103は、タイル102A~120F間にわたって入力データおよび出力データを協調させるように構成されたタイルシーケンサ106を含み得る。
タイル102A~120Fは、例えば多次元リングまたはトーラスとして、多種多様なトポロジーに従って相互接続することができる。相互接続は、例えば、図1Bを参照してより詳細に説明するクロスバーを含み得る。プロセッサ用のクロスバーまたは相互接続は、例えばタイル102A~120F、オンチップメモリ、およびオフチップメモリとの間で、クロックサイクルごとにデータを受信および送出することができる。
タイルシーケンサ106は、スパースアクセラレータ103の構成要素であり、タイル102A~120Fに対して演算を実行するための命令を調整しながら受信および分配するように構成されている。この調整は、例えば、異なるタイプのデータまたは命令並列性を活用するために、スパースアクセラレータ103上の処理構成要素の分散関係を利用することによって、少なくとも部分的に管理することができる。タイルシーケンサ106について、図4を参照してより詳細に説明する。
スパースアクセラレータ103は、タイル102A~120Fを用いてデータ依存演算を実行するように構成される。図3Aを参照してより詳細に図示および説明するように、各タイルは、ベクトル処理ユニット(VPU)およびクロスレーン処理ユニット(XPU)を通じてデータをストリーミングするためのいくつかのデータ処理レーンを実装することができる。タイルは、メインメモリ、キャッシュ、または、永続ストレージ、例えばソリッドステートストレージもしくはハードディスクストレージ等を含む多種多様なメモリデバイスのいずれかであり得るオンチップメモリ105からストリーミングされたデータを取出すことができる。ストリーミングされたデータはまた、コプロセッサ104から、コプロセッサ103および104の一方もしくは両方にサービス提供する高帯域幅メモリ107から、ならびに/または、オンチップ相互接続108を介してハードウェア回路101に接続された別のデータ送信元から取出すことができる。
オンチップメモリ105は、各タイル102A~120F間にわたって物理的に分散されたスクラッチパッドメモリであり得る。スクラッチパッドメモリは、ハードウェアキャッシュとは対照的に、プログラムで管理することができ、例えば、ソフトウェア命令に従ってデータを記憶することができる。オンチップメモリ105は、ダイレクトメモリアクセスおよび/またはストリームインターフェイス等の多種多様なインターフェイスを介してグローバルにアドレス指定可能であり得る。
コプロセッサ104は、CPU、高密度コア等の任意のコアであり得る。例えば、コプロセッサ104は、行列間乗算、行列・ベクトル間乗算等の特定の演算の加速のために構成され得る。演算の例は密な行列間計算を含み得る。この場合、乗算された行列内の要素の大部分(例えば、いくつかの例では、50パーセントを超える部分)は非ゼロ値を有する。計算の複雑さは、乗算された行列の次元の関数として近似させることができる。いくつかの例では、コプロセッサ104は、ハードウェア回路101の残りとは異なるデバイス上にあり、オンチップ相互接続108を介してハードウェア回路にデータを通信する。オンチップ相互接続108は、様々な通信規格いずれか、例えばPCIe、に従ったデータバスまたは任意の形態の相互接続であり得る。オンチップ相互接続はまた、コアメモリネットワークを実装することもできる。コアメモリネットワークは、コプロセッサ104とスパースアクセラレータ103とを接続するオンチップネットワークであり得る。
スパースアクセラレータ103の例示的な特徴は、スパース演算(例えば、概して非ゼロ値要素よりも多くのゼロ値要素が存在するオペランドまたは入力に関する演算)の計算を改善することに向けられている。このタイプの特徴は、本明細書でより詳細に説明するように、プログラマブルXPU101A~101Fを用いてスパース演算を実行すること、協調的なメモリプリフェッチ、および/または、命令ストリームもしくは命令順序付けの組合せを含み得る。
スパース計算の文脈において例が提供されているが、いくつかの例では、スパースアクセラレータ103が、ベクトル/行列乗算等の線形代数演算、アクティブ化関数出力の計算、層出力のプーリング、層出力の正規化等を含む、機械学習モデル処理の加速に一般的に関連付けられている他のタイプの演算を加速するために使用され得ることを理解されたい。共通のハードウェア回路101の一部として実装されるコプロセッサ104およびスパースアクセラレータ103は、これら2つに限定されないが、これら2つのいずれかに適した様々なタスクの分配を容易にすることができる。非スパース演算の加速は、密計算、例えば、非スパース入力に対する計算を含み得る。高密度計算の例は、配列の線形アクセスまたはストライド済みアクセスを含み得る。他の例として、密行列乗算、完全結合層、およびディープニューラルネットワークの畳み込み層が含まれる。
ハードウェア回路101への入力の例として、テンソルとして構築されたデータがあり得る。例えば、テンソルは、ハードウェア回路101を用いて実行されるべき機械学習モデルの入力データおよび/またはモデルパラメータ値を表わし得る。テンソルは、異なる次元の様々な他の共通データ構造タイプを一般化するデータ構造である。テンソルは、整数、浮動小数点値、ブール値等の1つ以上の様々なデータタイプであり得るゼロ以上の要素を含み得る。各データタイプ内で、データタイプは、特定のレベルの精度、例えば8ビット、16ビット、または32ビットの整数値または浮動小数点値に従ってパラメータ化することができる。テンソルの次元は、その「ランク」と称される。ランクゼロのテンソルは、スカラーとも称される単一の要素である。ランク1のテンソルはベクトルとも称される。ランク2のテンソルは行列とも称される。ベクトルおよび行列は、異なるランクを有するものと称することもできる。例えば、ランク2のベクトルは行列に相当する。非ゼロランクのテンソルは、1ランク下位のテンソルの集合として記述することができる。例えば、ベクトルまたはランク1はスカラー値の集合であり、ランク2の行列はランク1のベクトルの集合である。
ハードウェア回路101は、ニューラルネットワークをトレーニングするための処理パイプラインを少なくとも部分的に実装し得る。パイプラインは、入力トレーニング例のための埋込みを生成することを含み得る。様々な入力トレーニング例に関する特徴テンソルは、対応する埋込みを生成するために必要な計算作業の量に影響を及ぼす、様々な度合いのスパース性を有するだろう。スパースアクセラレータ103は、トレーニング入力例を表わす特徴値のテンソルを受信し、特徴テンソルよりもランクの低いテンソルとして埋込みを生成するように構成され得る。
埋込みを生成するために、スパースアクセラレータ103は、XPU101A~101F等またはより一般的にはVPU上での効率的なスパースデータ計算のために多様なデータ依存演算を実装するように構成される。これらの演算は、スパースベクトルをソートするかまたは合計することと、入力ベクトルの内容を要約するための演算と、あるスパース行列記憶フォーマットから別のスパース行列記憶フォーマットにスパース行列を変換するための演算とを含む。
データ依存演算の実行を加速するための物理的な所定の回路の代わりに、XPU101A~101Fを含むVPUは、多種多様なデータ依存演算を実行するように構成、例えばプログラム、することができる。スパースアクセラレータ103は、相補的なコプロセッサ104が他のタイプの演算を実行することを可能にしつつスパースデータを処理する汎用サポートを可能にする。
ハードウェア回路101は、例えば、中央処理ユニット(central processing unit:CPU)、グラフィック処理ユニット(graphics processing unit:GPU)、フィールドプログラマブルゲートアレイ(field-programmable gate array:FPGA)、または、特定用途向け集積回路(application-specific integrated circuit:ASIC)、例えばテンソル処理ユニット(tensor processing unit:TPU)等の、多種多様なタイプの処理ユニットのいずれかであり得る。ハードウェア回路101は、それ自体が1つ以上のデバイスのシステムの一部であり得るコンピューティングデバイス上に実装され得る。
図1Bは、本開示の局面に従った、ハードウェア回路の一部として実装される例示的なデータ経路のブロック図である。スクラッチパッドメモリ162Bおよびタスク命令メモリ160Bはオンチップメモリ105の一部を形成することができる。
様々なデータ経路150B、152B、154Bおよび156Bが示されている。これらのデータ経路は、スクラッチパッドメモリ162Bのダイレクトメモリアクセス(direct memory access:DMA)のために、タイルシーケンサ106とタイル102A~120Fとの間の回路相互接続を含むDMA経路150Bを物理的に共有してもよく、または共有しなくてもよい。命令データ経路152Bは、タイル102A~120Fと、タスク命令メモリ160Bと、スクラッチパッドメモリ162Bと、メモリトランスポートインターフェイス163Bとの間の回路相互接続を含む。スクラッチパッド(spmem)データ経路154Bは、タスク命令メモリ160Bからタイル102A~120Fへのデータのための潜在的な経路を示す。タイルシーケンサ106とタイル102A~120Fとの間の制御データ経路は、タイルシーケンサ106によって生成される制御信号のための例示的な経路を示す。制御信号は、タイル102A~120Fによって受信されると、制御信号によって指定される1つ以上の機能に従って、データの読出し、データの書込みおよび/またはデータの処理等の、1つ以上のプリミティブ演算または複合演算をタイルに実行させることができる。
タスク命令メモリ160Bはタイル102A~120Fによって共有される。タスク命令メモリ160Bは、タイルアクセスコアおよびタイル実行コアによって実行可能なプログラムを保持する。いくつかの例では、タスク命令メモリ160Bは、幅468ビットおよび深さ16000ワードであり、例えば、誤り訂正コードを含む2000ワードのバンクとして編成され得る。複数のバンクは、ブロックサイクルごとにタスク命令メモリ160Bからの複数回の読出しまたはタスク命令メモリ160Bへの複数回の書込みを行なうことを可能にする。タスク命令メモリ160BのためのDMA記述子は、64バイトの倍数の長さフィールドを含み得る。命令バンドルは、高帯域幅メモリに記憶されると、最上位ビットから512ビット境界までゼロパディングされ得る。スパースアクセラレータ103は、タスク命令メモリ160Bに書込む前に、パディングされたビットをドロップしてもよい。各DMA記述子は1つのタスク命令メモリバンドルを転送することができる。
タイルシーケンサ106は、主にタスクをタイルにディスパッチする役割および/またはDMA転送を開始する役割を果たすスカラーコアであり得る。例えば、タイルシーケンサは、命令をバンドルとして受取ることができる。バンドル内の命令は、タイル102A~120F間にわたって並列に実行することができ、同時にアーキテクチャ状態を更新することができる。バンドルが実行されると、バンドルは、バンドル内の命令が実行される前にスカラーまたはベクトルの発行を受ける。スカラーまたはベクトルの発行は、各スカラー命令ごとに保持・スカラー・発行の条件、または各ベクトル命令ごとに保持・ベクトル・発行の条件で文書化された様々な条件に起因して、1つ以上のサイクルにわたって保持され得る。スパースアクセラレータ103のためのISAは、バンドルを無条件に保持することができる、いくつかのグローバルなスカラー・保持・発行条件またはグローバルなベクトル・保持・発行条件を定義し得る。スカラー発行またはベクトル発行中に、いくつかのアクションが実行されてもよい。バンドルの述部が評価されて更新される。用いられるべきレジスタの値を記録することができる。命令内の分岐を実行することができ、レジスタが更新される。
タスク命令メモリのバンクは、以下のインターフェイスのうちの1つ以上を実装することができる。各バンクは、プリフェッチ要求およびプリフェッチ応答ブロードキャストバスを含み得る。プリフェッチ要求および応答バスアーキテクチャは、SPMD(single program, multiple data:シングルプログラム、マルチプルデータ)演算モードに合わせて調整される。読出し応答は、プリフェッチ応答ブロードキャストバス上のすべてのタイルにブロードキャストされてもよい。バンドルブロードキャストは、可能であれば、ハードウェアが別のタイルから生じる要求を複製し、全体的な帯域幅需要を減らすことを可能にする。
図2は、ハードウェア回路101を実装するための例示的な環境200のブロック図である。ハードウェア回路101は、サーバコンピューティングデバイス215内等の、1つ以上の位置に1つ以上のプロセッサを有するデバイス上に実装され得る。ユーザコンピューティングデバイス212およびサーバコンピューティングデバイス215は、ネットワーク260を介して1つ以上のストレージデバイス230に通信可能に結合され得る。ストレージデバイス230は、揮発性メモリと不揮発性メモリとの組合わせであり得るとともに、コンピューティングデバイス212、215と同じ物理的位置または異なる物理的位置にあり得る。例えば、ストレージデバイス230は、ハードドライブ、ソリッドステートドライブ、テープドライブ、光学ストレージ、メモリカード、ROM、RAM、DVD、CD-ROM、書込み可能メモリ、および読出し専用メモリ等の、情報を記憶可能な任意のタイプの非一時的コンピュータ可読媒体を含み得る。
サーバコンピューティングデバイス215は1つ以上のプロセッサ213およびメモリ214を含み得る。メモリ214は、プロセッサ213によって実行可能な命令221を含む、プロセッサ213によってアクセス可能な情報を記憶することができる。メモリ214はまた、プロセッサ213によって取出され得るか操作され得るかまたは記憶され得るデータ223を含み得る。メモリ214は、揮発性メモリおよび不揮発性メモリ等のプロセッサ213によってアクセス可能な情報を記憶することが可能なタイプの非一時的コンピュータ可読媒体であり得る。プロセッサ213は、1つ以上の中央処理ユニット(CPU)、グラフィック処理ユニット(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、および/または特定用途向け集積回路(ASIC)、例えばテンソル処理ユニット(TPU)等を含み得る。プロセッサ213は、図1A~図1Bを参照して本明細書に記載するように、ハードウェア回路の一部として実装されるコプロセッサおよびスパースアクセラレータを含み得る。
命令221は1つ以上の命令を含み得る。当該命令は、プロセッサ213によって実行されると、当該命令によって定義される動作を1つ以上のプロセッサに実行させる。命令221は、プロセッサ213による直接処理のためのオブジェクトコードフォーマットで記憶され得るか、または、オンデマンドで解釈されるかもしくは事前にコンパイルされる解釈可能なスクリプトもしくは独立した送信元コードモジュールの集合を含む他のフォーマットで記憶され得る。命令221は、本開示の局面に従ってストリーム転送を構成するための命令を含み得る。サーバコンピューティングデバイス215および/またはユーザコンピューティングデバイス212は、命令を生成してハードウェア回路101に送信するためのコンパイラまたは他のプログラムを、当該回路のタイルを構成するための制御信号として実装することができる。
データ223は、命令221に従ってプロセッサ213によって取出、記憶または修正することが可能である。データ223は、コンピュータレジスタ内に、複数の様々なフィールドおよびレコードを有するテーブルとして、またはJSON、YAML、プロト(proto)、もしくはXML文書として、リレーショナルデータベースまたは非リレーショナルデータベース内に記憶させることができる。データ223はまた、限定はしないが、バイナリ値、ASCIIまたはUnicode等のコンピュータ可読フォーマットでフォーマットされ得る。さらに、データ223は、関連情報、例えば、他のネットワーク位置を含む他のメモリに記憶されたデータに関する番号、記述テキスト、プロプライエタリコード、ポインタ、基準、または、関連データを計算するための関数によって用いられる情報等、を識別するのに充分な情報を含み得る。
ユーザコンピューティングデバイス212はまた、サーバコンピューティングデバイス215と同様に、1つ以上のプロセッサ216、メモリ217、命令218、およびデータ219とともに構成され得る。ユーザコンピューティングデバイス212はまた、ユーザ出力226およびユーザ入力224を含み得る。ユーザ入力224は、キーボード、マウス、機械的アクチュエータ、ソフトアクチュエータ、タッチスクリーン、マイクロフォン、およびセンサ等の、ユーザから入力を受取るための任意の適切な機構または技術を含み得る。
サーバコンピューティングデバイス215は、ユーザコンピューティングデバイス212にデータを送信するように構成され得るとともに、ユーザコンピューティングデバイス212は、ユーザ出力226の一部として実装されるディスプレイ上に受信データの少なくとも一部を表示するように構成され得る。ユーザ出力226はまた、ユーザコンピューティングデバイス212とサーバコンピューティングデバイス215との間のインターフェイスを表示するために使用され得る。ユーザ出力226は、代替的または付加的には、ユーザコンピューティングデバイス212のプラットフォームユーザに非視覚的情報および非可聴情報を提供する1つ以上のスピーカ、トランスデューサまたは他のオーディオ出力、触覚インターフェイスまたは他の触覚フィードバックを含み得る。
図2は、プロセッサ213、216およびメモリ214、217をコンピューティングデバイス215、212内にあるものとして示しているが、プロセッサ213、216およびメモリ214、217を含む本明細書に記載の構成要素は、同じコンピューティングデバイス内ではなく異なる物理的位置で動作可能な複数のプロセッサおよびメモリを含み得る。例えば、命令221、218およびデータ223、219のうちのいくつかは、読出し専用コンピュータチップ内の取外し可能なSDカード等に記憶することができる。命令およびデータのいくつかまたは全ては、プロセッサ213、216から物理的に離れているものの当該プロセッサ213、216がアクセス可能な位置に記憶することができる。同様に、プロセッサ213、216は、同時演算および/または逐次演算を実行することができるプロセッサの集合を含み得る。コンピューティングデバイス215、212は各々、コンピューティングデバイス215、212によって実行される演算およびプログラムのための時間測定のために使用可能なタイミング情報を提供する1つ以上の内部クロックを含み得る。
サーバコンピューティングデバイス215は、ユーザコンピューティングデバイス212からのデータを処理するための要求を受取るように構成され得る。例えば、環境200は、プラットフォームサービスを公開する様々なユーザインターフェイスおよび/またはAPIを通じて、様々なサービスをユーザに提供するように構成されたコンピューティングプラットフォームの一部であり得る。1つ以上のサービスは、指定されたタスクおよびトレーニングデータに従ってニューラルネットワークまたは他の機械学習モデルを生成するための機械学習フレームワークまたはツールのセットであり得る。ユーザコンピューティングデバイス212は、スパースアクセラレータ103のXPUが実施するように構成されるべきワークロードまたは複合演算のタイプを指定するデータを受信および送信し得る。ユーザコンピューティングデバイス212は、命令をハードウェア回路101に直接送信することができるか、または、本明細書に記載するように、サーバコンピューティングデバイス215に命令を生成させて制御信号としてハードウェア回路101に送信させることができる。
デバイス212、215は、ネットワーク260を介した直接的および間接的な通信が可能であり得る。デバイス215、212は、情報を送信および受信するための開始接続を受入れ得るリスニングソケットを設定することができる。ネットワーク260自体は、インターネット、ワールドワイドウェブ、イントラネット、仮想プライベートネットワーク、ワイドエリアネットワーク、ローカルネットワーク、および1つ以上の会社に固有の通信プロトコルを用いるプライベートネットワークを含む、種々の構成およびプロトコルを含み得る。ネットワーク260は、様々な短距離接続および長距離接続をサポートすることができる。短距離接続および長距離接続は、一般にBluetooth(登録商標)規格に関連付けられる2.402GHz~2.480GHz、一般にWi-Fi(登録商標)通信プロトコルに関連付けられる2.4GHzおよび5GHz等の様々な帯域幅にわたって、または、無線ブロードバンド通信用のLTE(登録商標)規格等の様々な通信規格を用いて、行なわれてもよい。ネットワーク260は、付加的または代替的には、様々なタイプのイーサネット(登録商標)接続を介することを含め、デバイス212、215間の有線接続をサポートすることもできる。
単一のサーバコンピューティングデバイス215およびユーザコンピューティングデバイス212が図2に示されているが、本開示の局面が、逐次処理もしくは並列処理のためのパラダイムにおいて、または複数のデバイスの分散ネットワークを介して、コンピューティングデバイスの多種多様な構成および量に従って実装され得ることを理解されたい。いくつかの実装例では、本開示の局面は、単一のデバイス、およびそれらの任意の組合せで実行され得る。
図3Aは例示的なタイル102のブロック図である。XPU101はクロスレーンコントローラ310に結合される。クロスレーンコントローラ310は、XPU101上のクロスレーン命令を可能にする制御の別個のスレッドを提供する。本明細書に記載するように、XPU101は、例えば、1つ以上の制御信号を通じて、第1の命令を受信することができ、当該第1の命令は、当該第1の命令が指定する複合演算を実行するために、1つ以上の第2の命令および第3の命令に変換され、それぞれ、XPU101の処理セルおよびクロスバーに提供され得る。XPU101に対する命令は、制御信号を通じて搬送することができ、XPU101の処理セルおよびクロスバーは、対応するプリミティブ演算を実行するよう解釈するように構成される。例示的な命令として、命令セットアーキテクチャ(instruction set architecture:ISA)のオペコードがあり得る。
タイル102は、図1Aを参照して説明したように、オンチップ相互接続108から、さらにはオンチップメモリ105からデータを受取ることができる。XPUはまた、命令インターフェイス324から、例えば、タイルシーケンサ106から、スカラーコア312またはスカラーコア320を通じて命令を受信することができる。タイル102のスキャッタ・ギャザー・エンジン322は、着信データを受信し、メモリスケジューラ314を介してどのデータがメモリ306に渡されるかを制御することができる。いくつかの例では、スキャッタ・ギャザー・エンジンの代わりに、スキャッタ・ギャザー・エンジン322は読出し・書込みエンジン322と称されることもある。
メモリスケジューラ314は、データがどのようにアクセスされてメモリ306から取出されるかを調整することができる。メモリ306はタイル102に専用のものであり、他のタイル等のタイル102に接続された他の構成要素からはアクセスできない。アービター304は、例えばクロックサイクルごとに、ベクトル処理ユニット(VPU)302A~302Hのうちどれがメモリ306にアクセスするかを管理するように構成される。タイル102は、タイル102によって実行されるべきタスクのタスクキュー308を維持することができ、当該タスクはスカラーコア320を介してスキャッタ・ギャザー・エンジン322に送られる。タイル102はまた、タイル102をハードウェア回路およびメモリ306の他のタイルとそれぞれ同期させるためのタイル同期フラグ318および/またはメモリフラグ316のレジスタを維持することもできる。
VPU302A~302Hは、XPU101とVPU302A~302Hとの間の実線によって示されるデータ処理レーンを介してXPU101に接続される。XPU101とVPUS302A~302Hとの間の破線は、受信された制御信号に対応する複合演算を実行するようにXPU101を構成するためにXPU101内の制御セルによって受信可能な制御信号を表わす。ベクトル処理ユニットは、入力ベクトルに対する効率的演算のために構成される。タイル102によって一度に処理されるベクトルの長さは、タイルによって実装されるVPUの数または幅に依存し得る。例えば、8つのVPU302A~302Hは、8の幅である。VPU302A~302Hは、同じデータ処理レーンに沿ってデータを処理することができる。VPU302A~302Hは、メモリ306からの受信ベクトルの要素に対してスカラー演算を実行するように構成され得る。VPU302A~302Hは、XPU101からデータを受取ることができ、XPU101は、本明細書に記載するように、各VPU302A~302Hによって実行されるレーンだけに沿ってではなく、データ処理レーンにわたってデータを処理することができる。
図3Bは、ストリーム転送のためのXPU101を実装する別の例示的なタイル392のブロック図である。タイル392は、図1を参照して説明したように、オンチップ相互接続108から、ならびにオンチップメモリ105からデータを受取ることができる。XPU101は、命令インターフェイス324から、例えばタイルシーケンサ106から命令を受信することもできる。タイル392のスキャッタ・ギャザー・エンジン322は、着信データを受取り、どのデータがメモリ306に渡されるかを制御することができる。
この例示的なタイル392は、切離されたアクセス/実行アーキテクチャに基づくものであり、プログラム(および関連する命令シーケンス)は2つのストリームに分離することができる。第1のストリームは、オペランドをフェッチして結果を記憶するためのアクセスストリームであり得る。第2のストリームは、オペランドを消費し、計算を実行し、結果を生成する実行ストリームであり得る。これらのストリームは、切離されたアクセス/実行アーキテクチャの一部を形成するタイルアクセスコア(TAC)332およびタイル実行コア(TEC)330という2つの別々のコア上で実行される。TAC332は、データ移動をデータ計算から切離すために用いられるスカラーユニットであって、例えば、メモリからのデータのフェッチと、フェッチされたメモリの処理とを切離す。TEC330は、ベクトルを処理するために用いられる複数のSIMDレーン(例えば8つのSIMDレーン)でVPUに取付けられたスカラーユニットである。
タイルアクセスコア332は、スカラーコアコンプレックス320に基づくものであり、実行すべきオペランドをメモリ306から、またはタイル392外の高帯域幅メモリから、プリフェッチする役割を果たし得る。タイル実行コア330はスカラー複合コア312に基づくものであり、XPU101およびVPU302を含み、結果を生成するためにプリフェッチされたオペランドに対して計算演算を実行する役割を果たし得る。VPU302は、ロードストアユニット328を介してメモリ306に接続される。ロードストアユニット328は、タイル303を通過するデータに対してギャザー演算およびスキャッタ演算を実行するように構成される。ギャザー・スキャッタ演算は、粒状に、例えば、4バイト粒度で実行することができる。ロードストアユニット328は、バンク競合を管理するためのロードキューおよびストアキューを実装することができる。LSU328は、スクラッチパッドメモリのサブセットへのロード/ストアアクセスを提供することができる。
TAC332およびTEC330は、独立した命令ストリームを有し、共にプロデューサ・コンシューマの対を形成する。タイル102は、タイル102によって実行されるべきタスクのタスクキュー308を維持することができ、当該タスクはTAC332およびTEC330に送信される。
タスクキュー308は、プッシュ命令およびポッピング命令のための1つ以上のキューを含み得る。例えば、タスクキュー308は、TAC332からTEC330に値をプッシュするための第1のキュー(例えば、先入れ先出し(FIFO)キュー)を有し得る。TEC330は、エンキューされた値をポップして処理することができる。別の例として、タスクキュー308は、TAC332およびTEC330を逆方向に接続するための追加のキューを含み得る。
TAC332およびTEC330は、メモリ306等のタイルローカルスクラッチパッドメモリ(scratchpad memory:SpMEM)を介して互いに通信する。TAC332およびTEC330はまた、スカラーメモリ334、命令バッファ326、およびタイル同期フラグ318を通じて通信することができる。メモリ306は、データを交換するためにTAC332およびTEC330によって使用され得るとともに、TAC332とTEC330との間でデータを先入れ先出しの順序で渡すためにソフトウェア管理型循環バッファとして使用され得る。タイル同期フラグ318は、TAC332とTEC330との間の計数セマフォとして用いることができる。例えば、2つのコア間で循環型の先入れ先出し順序が使用されている場合、プロデューサコアは、各プッシュの後にバイト数の分だけ同期フラグ318をインクリメントし、カウントが先入れ先出し順序のうちの最大サイズに達すると停止する。同様に、コンシューマは、各ポップの後に同期フラグ318をデクリメントし、バッファにデータがない場合には停止する。プリフェッチされるデータの量は動的であり得るので、ストリームの終了を示すためにdoneビットが用いられる。
タイル同期フラグ318は、いくつかの例では、32個の同期フラグレジスタのセットを含み得る。各レジスタは、32ビットのデータに加えて、「done」ビットおよび「enable_public_access」ビットを記憶することができる。タイル同期フラグ318レジスタは、モノリシックのフロップアレイとして実装されてもよく、全ての送信元からの同時アクセスを可能にする。書込み間にアドレス競合がある場合、送信元間のアクセスの優先度を指定することができる。例えば、スカラー雑命令は絶対優先度を有してもよい。いくつかの例では、スカラー雑命令のうちの1つだけが発行され得る。リード・モディファイ・ライト(read-modify-write)演算はパイプライン化され、従って、任意の同期フラグに対するバック・ツー・バック・リード・モディファイ・ライト演算がサポートされ得る。
DMA更新、ストリーム更新、およびリモート書込みは、ラウンドロビン調停を用いて単一(外部)のインターフェイス上に組合わされてもよい。例えば、タイルから外部送信元への外部インターフェイスは、同期フラグへの別個のアクセス経路、例えば、図1Bを参照して図示および説明されるようなデータ経路を有してもよい。
タスク命令メモリ160Bの各バンクは、バンクに記憶されたタイル要求データ間でサイクル毎に調停を行なうことができる。これらのバンクは、分散型調停スキームを用いて、バンクへのアクセスを得るスパースアクセラレータ103内のTAC332およびTEC330から勝者を選択することができる。調停は、要求帯域幅が要求タイル間で等しく分割されることを確実にすることができる。要求は、例えばタイルごとにそれぞれのTACによってデータをプリフェッチすることであり得る。例えば、勝利したプリフェッチ要求には、アクセスされたバンクのうちのいずれかへのアクセスについて最も高い優先度が与えられる。
制御ステータスレジスタを介したスパースアクセラレータ103からのアクセスの優先度が次に高くなり得る。これは、プリフェッチ読出し要求によってのみ遅延される。制御ステータスレジスタ(control status register:CSR)は、スパースアクセラレータ103によって実行される機械命令の追加の情報結果を記憶するためのプロセッサの一部として実装することができる。スパースアクセラレータ103は、CSRアクセスの完了が妨げられているかどうかを判断するための間接CSRタイムアウトステータスビットを維持することができる。バンクアクセスおよびCSRアクセスの後、DMAの読出しまたは書込みを最後に優先順位付けすることができる。DMA演算、例えば、読出しまたは書込みは、ビジーなバンクにアクセスする場合、遅延させることができる。いくつかの例では、スパースアクセラレータ103上でアクセス演算がどのように調停および解決されるかの優先度は異なり得る。
データの実行からデータのアクセスを切離すことには、少なくとも以下の利点がある。TAC332はアドレス計算を実行し、必要なデータをプリフェッチすることができるので、長い(例えば600サイクルの)メモリ待ち時間はより効果的に許容される。上述したアーキテクチャはまた、制御待ち時間に関して高い許容差を有する。動的依存性により、ループ条件を解決することが困難になり、これにより、有効なソフトウェア展開が妨げられる可能性がある。TAC332は、条件がTEC330の外部で判断され得る場合、これらの依存性を解決するために前もって実行することができ、制御待ち時間を隠すための方法を提供する。
図4は、本開示の局面に従ったタイルシーケンサ400のブロック図である。シーケンサメモリ410(sequencer memory:Simem)は、VLIW命令バンドルの幅を有するとともに約8000バンドルの深さを有し得るが、シーケンサメモリ410のバンドルの幅および数は実装例ごとに異なり得る。シーケンサメモリ410は、直接メモリアクセスを通じて、または間接アクセスを通じて読出しまたは書込みされてもよい。これは、シーケンサ400が現在実行しているか否かに係わらず行なうことができる。シーケンサメモリDMAメモリ記述子は、32バイトの倍数の長さフィールドを有し得る。各バンドルは、高帯域幅メモリに記憶されると、最上位ビットから256ビット境界までゼロパディングすることができる。パディングされたビットは、RAZ/WI(read-as-zero and write-ignored:ゼロとしての読出しおよび書込み無視)を有する。各メモリ記述子は1つの命令バンドルを転送することができる。
シーケンサメモリ410は、バンク間に連続したアドレスを有する2つのバンクとして編成され得る。各バンクは、クロックサイクルごとに1回の読出しまたは1回の書込みを行なうことができる。インターリービングにより、連続的な命令シーケンスが各バンクの帯域幅のうち半分だけを消費することが可能となる。異常に小さいサイズのループは、所与のバンクの帯域幅の4分の3を消費することしかできず、このため、アクセスを順方向に進めるのに充分な帯域幅が依然として残っている。
シーケンサメモリ410内の各シーケンサメモリバンクは以下のインターフェイスに追従し得る。シーケンサメモリ410は、命令データ経路(例えば、図1Bを参照して図示および説明した命令データ経路)から読出し要求を受取ることができる。シーケンサメモリ410のバンクはまた、DMAの書込みおよび読出しだけでなく、間接レジスタインターフェイスを介して制御ステータスレジスタアクセスも受取ることができる。命令データ経路からの読出しは、シーケンサメモリ410内の各バンクへのアクセスについて最も高い優先度を有し得る。DMA読出し、書込み、およびCSRアクセスの優先度は等しくなり得るとともに、命令フェッチを行なうビジーでないバンクに対して最長時間未使用(least recently used:LRU)調停を受け得る。
シーケンサ400は、その命令をシーケンサメモリ410からフェッチすることができる。シーケンサ400はプログラムの制御スレッドを実行する。これは、(タスクおよびストリーム記述子用の)記述子ディスパッチユニット413および(DMA記述子用の)DMAユニット414によってそれぞれディスパッチされる記述子を生成することを伴う。タスク記述子はタイルFIFO416に提供され、タイルFIFO416は次いでそれぞれのタイルによって実行される。DMA記述子は、ハードウェア回路101の他の構成要素および他のオフチップ構成要素に渡すことができる。シーケンサは、システム内の他のコアと通信し、アクセラレータのタイル間にわたってタスクを調整する。
シーケンサ400の現在の状態は、対応するステータスレジスタを読出すことによって判断され得る。命令バンドルのフェッチおよび実行に関連する他のレジスタは、プログラムカウンタおよび分岐状態である。タイルシーケンサ400は、ハードウェアによって調節して絞ることができるDMA記述子を発行することができる。ハードウェアは、同期フラグ418間で記憶された同期フラグを有する、シーケンサによって発行された所定数のDMAを未処理のままにしておくことができる。調節して絞ることは、必要に応じて可能または不可能にすることができる。
同期フラグは2つ以上のタイプで表示させることができる。同期フラグ418は、タイルシーケンサ400に表示させることができる。他の同期フラグは、各タイルのTACおよびTECに記憶することができる。同期フラグのすべては、合計で、DMA演算、アトミックリモートセット/追加命令、およびアトミックタイルセット/追加命令にアクセス可能な単一のアドレス空間に配置することができる。タイル内の同期フラグとシーケンサ400内の同期フラグとの間に実装可能ないくつかのインターフェイスがある。DMA演算は、実行中に同期フラグに値をアトミックに追加し得るとともに、完了時に「Done」ビットを設定し得る。ストリーム演算は、実行中に同期フラグに値をアトミックに追加し得るとともに、完了時に「Done」ビットを設定し得る。リモート書込み命令は、同期フラグに値をアトミックに設定または追加することができるシングルワード制御書込みを生成する。これらは、リモート同期フラグを更新するために用いられるアトミックリモートセット/追加命令からのものであり得る。これらは、スパースアクセラレータ内の同期フラグを更新するために用いられるアトミックタイルセット/追加命令からのものとすることもできる。実装可能な別のインターフェイスは書込みインターフェイスであり、この場合、設定された同期フラグおよび同期フラグ追加命令により、任意には「Done」ビットを変更することを含め、同期フラグへのアトミック更新が行なわれる。実装可能な別のインターフェイスは読出しインターフェイスである。
同期フラグ418は、いくつかのバンクとしてメモリ内に編成され得る。各エントリは、いくつかのビットのデータ、例えば、32ビットのデータに加えて、「Done」ビットおよび「enable_public_access」ビットを含み得る。バンクは、例えばDMA、ストリーム、およびリモート書込み更新よりもスカラー雑命令を優先させるために、読出しポートおよび書込みポートに対して別々にサイクルごとの調停を実施することができる。TACおよびTEC内の同期フラグレジスタはまた、いくつかのビット、「Done」ビット、および「enable_public_access」ビットを記憶してもよい。
TACまたはTEX内の同期フラグは、全ての送信元からの同時アクセスを可能にするモノリシックのフロップアレイとして実装することができる。シーケンサ同期フラグと同様に、タイル同期フラグは、書込み間の競合を回避するために優先度スキームに従って管理され得る。
図5は、本開示の局面に従った、スパースアクセラレータの複数のタイル間にわたってメモリを有する例示的なスクラッチパッドメモリ500のブロック図である。各タイルは、タイルスクラッチパッドメモリまたはTileSpmemと称されるスクラッチパッドメモリ502の各部分を含み得る。タイルスクラッチパッドメモリ502は、1つ以上の回路として実装されるロード/ストアインターフェイスを介してタイルによってアクセスされてもよい。タイルスクラッチパッドメモリ502はまた、ストリーム命令転送を用いてタイルの内外にデータを移動させるために、それぞれのタイルに対してローカルなバッファとして用いることもできる。
図5に示すように、各タイルスクラッチパッドメモリ502は、いくつかのバンク、例えば、それぞれバンク0~31としてラベル付けされた32のバンクを含み得る。各バンクは、一定量のデータ、例えば16キロバイトを保持することができる。各バンクは、いくつかのワード、例えば、4バイトのワードおよび7ビットのエラー訂正コードを保持することができる。いくつかの例では、バンクは4096ワードを保持することができる。スクラッチパッドメモリ500は、各々が異なるサイズの異なるバンクを保持することができる異なる数のタイルスクラッチパッドメモリ502で実装され得ることを理解されたい。各バンクはまた、サイズが異なる様々な数のワードを記憶するように、様々な例において実装可能であることも理解される。
タイルスクラッチパッドメモリ内のワードおよびバンクは、17ビット命令およびストリームアドレスを通じてアクセスすることができるが、アドレスの正確なサイズおよびフォーマットは実装例ごとに異なり得る。各バンクは以下のインターフェイスのうちの1つ以上を実装することができる。タイルスクラッチパッドメモリ502は、受信した命令に応答してバンクごとのロードキュー(図示せず)にアクセス要求をエンキューして、受信したアドレスまたはアドレス範囲によって指定されるバンクおよびワード内のデータをロードまたは記憶して追加する。データを記憶するために、タイルスクラッチパッドメモリ502は、受信ストアまたはストア追加命令からバンクごとのロードキューにアクセス要求をエンキューする。各バンクはまた、1つ以上の外部送信元から、例えばデータを読出す/書込むためのDMAまたはストリーム要求等から、読出しアクセスを受取ることができる。タイルスクラッチパッドメモリ502への例示的な命令は、ベクトルロード命令およびベクトルストア命令を含む。これらおよび他の命令は、ハードウェア回路101のためのISAにおいて指定することができ、命令の受信に応答してハードウェア回路101に特定の所定演算を行わせる命令を定義し得る。ベクトルロード命令はバンクロードキューに発行され得る。同様に、ベクトルストア命令がバンクストアキューに発行されてもよい。ベクトルストア追加命令は、ハードウェア回路101に、タイルスクラッチパッドメモリ502の1つ以上のバンク内のアドレスのターゲット範囲においてリード・モディファイ・ライト演算を実行させる命令のタイプを指し得る。
タイルスクラッチパッドメモリのバンク上のロードおよびストアの優先順位付けを処理するために、バンクごとのストアキューの先頭にあるストアアクセスは、そのそれぞれのバンク(図5には示さず)の書込みポートにアクセスするための最高優先度を有し得る。バンクごとのロードキューの先頭にあるロードアクセスは、バンクの読出しポートにアクセスするために最高優先度を有し得る。ロードがキューに入れられたストアと同じアドレスに対するものであり、ストアがロードの前に発行された命令バンドルからのものであった場合、バンクは、代わりにデータをロードするために、ストアキューからデータを読出してもよい。
バンクをホストするタイルの外部にある送信元からのアクセスは、アクセスがバンクに提示される前にマルチレベル調停を受ける可能性がある。例えば、異なる送信元からの書込みまたは追加は、最初に、ターゲットバンクのバンクごとの書込みキューにエンキューされているもののうち、バンクごとの最長時間未使用(LRU)調停を受ける可能性がある。書込みキューは一例として4エントリの深さであり得る。同様に、様々な送信元からの読出しアクセス要求もLRU調停を受ける可能性がある。次いで、勝利した読出し要求は、バンクを読出すためのストリーム追加アクセスおよびロードアクセスから生じる読出し要求との第2レベルの調停を受ける可能性がある。ストリーム追加アクセスはリード・モディファイ・ライト演算を実行し、このリード・モディファイ・ライト演算もまたバンクごとの書込みキューにエンキューされる。バンクのための書込みキューの先頭がストリーム追加アクセスである場合、その読出し要求は、勝利した外部読出し要求とのラウンドロビン調停を受けることができる。勝利した読出し要求は、ロードアクセスの背後で、バンクの読出しポートに対して2番目に高い優先度を有する。バンクごとの書込みキューの先頭にある書込み要求は、ストアアクセスの背後で、バンクの書込みポートに対して2番目に高い優先度を有し得る。バンク競合がない場合、バンクはサイクル当たり少なくとも1つのストリーム追加演算のスループットを維持することができる。
タイルスクラッチパッドメモリ502の各バンクは、(図5には示されない)バンクからの読出しおよびバンクへの書込みのためのポートを含む。これらのポートは、枯渇を検出するための警告を生成することができる。読出し要求および書込み要求の外部送信元は、ロード、ストア、またはストア追加によって継続的にアクセスされるバンクにアクセスする場合に不足する可能性がある。枯渇の確率は、タイルスクラッチパッドメモリ502内のバンクの総数の最大アクセスを指定することによって軽減することができ、例えば、所与のクロックサイクルで32バンクのうち最大8バンクのみのアクセスを可能にする。
枯渇のために生成される警告は予め定められた閾値に基づき得る。例えば、予め定められた閾値は、外部送信元が読出し要求または書込み要求のためにバンクにアクセスしない期間に相当する連続クロックサイクルの数であり得る。
読出しポート枯渇がタイルスクラッチパッドメモリ502内のバンクによって検出される場合、1つ以上のアクションがスキャッタ/ギャザーエンジンによって実行され得る。ホールドの発行は、バンドルがロード命令、ストア命令またはストア追加命令を有する場合に実行することができる。バンクごとのロードキューおよびストアキューは正常にドレインされ得る。ホールドの発行は、所定の最大数の読出し要求がスキャッタ・ギャザー・エンジンによって対応されるまで、またはスキャッタ・ギャザー・エンジン読出しキューが空になるまで、継続し得る。
タイルスクラッチパッドメモリ502内のバンクによって書込みポートの枯渇が検出された場合、以下のシーケンスが実行される。命令バンドルがストア命令またはストア追加命令を有する場合にホールドを発行する。バンクごとのストアキューは各々、正常にドレインされる。ホールドされた発行要求の最大閾値がスキャッタ・ギャザー・エンジンによって対応されるまで発行を引続きホールドすることができる。閾値およびサイクルカウントは実装例ごとに異なり得る。
同期フラグメモリ412は、いくつかの例では、4つのバンク(図示せず)として編成され得る。各エントリは32ビットのデータを有し得る。同期フラグメモリ412内の各バンクは、以下の送信元の間で読出しポートおよび書込みポートに対して別々にサイクルごとの調停を実行することができる。スカラー雑命令は絶対優先度を有する。いくつかの例では、スカラー雑命令のうちの1つだけがいずれかの所与のサイクルにおいて発行され得る。リード・モディファイ・ライト演算がパイプライン化されてもよく、このため、任意の位置へのバック・ツー・バック・リード・モディファイ・ライト演算がサポートされ得る。スカラー雑命令の後、DMA更新、ストリーム更新、およびリモート書込みは、ラウンドロビン調停を介して単一(外部)のインターフェイス上に組合わされてもよく、次に高い優先度を有し得る。ホストからハードウェア回路101への制御ステータスレジスタを介したアクセスの優先度が最も低い。
バンクへのアクセス要求は複数の送信元からのものであり得る。コアメモリネットワーク読出しは、DMAまたはストリーム要求によって発信され得るコアメモリネットワーク上で発送される読出しアクセスである。アクセス要求は、DMAまたはストリーム要求によって生じるコアメモリネットワークからの書込みアクセスのためのコアメモリネットワーク書込みであり得る。アクセス要求は、ストリームアドレス、例えばローカルタイルから読出された間接アドレスからのものであり得る。アクセス要求は、内部ストリームの読出しまたは書込みからのものであり得る。
図6は、本開示の局面に従った、タイルシーケンサのスカラーコアコンプレックス600の例示的なブロック図である。スカラーコアコンプレックスは32ビットのスカラーVLIWコアであり得る。スカラー実行パイプライン601は、フェッチ、復号および実行等のスカラー命令および雑命令を実行するように構成された1つ以上の回路であり得る。スカラーコアコンプレックス600は、プリフェッチされる命令バンドルを実行する。実行中、次のPCレジスタによってアドレス指定されるように、ブロックごとに1つのバンドルがフェッチされる。各バンドルは、2つのスカラー命令と、同時に復号および実行される1つの雑命令とを含み得る。
スカラー実行パイプライン601は、レジスタ604およびALU606を含む32ビット計算ユニットを含み得る。計算ユニットは、記述子を構築するために用いられるアドレス計算、ループ制御、およびスカラーオペランドを提供する。コンプレックス600は、ロード/ストアインターフェイスを介してアクセス可能なメモリ608を有する。メモリ608は、プログラムの実行中に中間スカラー値を記憶するためにコンプレックス601によって用いられる。コアタイプは、例えば、それがタイルシーケンサの一部であるか、またはタイルのTACもしくはTECであるかに応じて、メモリ608の深さを決定する。
コンプレックス600は、記述子609を構築し、記述子スクラッチパッドレジスタ610を用いることができる。命令が記述子スクラッチパッドレジスタ610を用いる場合、発行時に、コンプレックス600は、命令内の指定された記述子スクラッチレジスタアドレスから始まるN×32ビットワードをフェッチする。Nの値は特定の記述子タイプに依存する。次いで、記述子は、記述子発行FIFO612にエンキューされる。
クロスレーン処理ユニット(XPU)
以下の説明および添付の図を参照してXPUの例示的な実装例について説明する。有効な加速はプロビジョニングされた計算、利用可能なオンチップメインメモリ帯域幅(HBM)、およびチップ間通信帯域幅を利用することに依拠するので、分散型埋込みトレーニングは加速させるのが困難である。これらの計算は動的で不規則であるので、これらの計算を利用することは困難である。加えて、性能ボトルネックはモデルごとに大きく異なり、問題空間は、新しいアルゴリズム、オプティマイザ、モデルアーキテクチャ等とともに急速に発展してきている。新しいアルゴリズムを表現し、様々な性能ボトルネックに合わせて最適化する際のフレキシブル性は不可欠である。
埋込みは、機械学習タスク、例えば自然言語処理タスク、または埋込みを使用することで利益を得る可能性がある他のタスク、を実行するための機械学習モデル、例えばニューラルネットワークに供給され得る。埋込み層は、入力から埋込みを生成するようにトレーニングされたニューラルネットワークの層である。生成後、埋込は、次いで、例えば、埋込層を実装するニューラルネットワークのうちより後の層によって下流で処理可能である。埋込み層を備えたモデルは、例えば、計算密度が低く、メモリ帯域幅に対するストレスが大きく、かつメモリフットプリントが大きいので、特有の計算上の課題を提起する。さらに、これらのタイプのモデルを加速するために、モデルごとに性能ボトルネックに幅広い違いがあり得る。
埋込み関数またはマップは、例えば、ルックアップテーブルとして、またはスパースベクトル・密行列乗算として実装可能である。例えば、埋込み関数は、入力ベクトルによって乗算されると、入力ベクトルのための対応する埋込を生成する行列として実装され得る。例えば、入力ベクトルは、機械学習モデルへの入力センテンス内の様々な自然言語ワードの有無を表わすビットベクトルであってもよい。ビットベクトルは、入力センテンスを形成することができる潜在的な自然語の大量の語彙についての要素を含み得るので、このビットベクトルは、一般には、例えば、ゼロ値を有するベクトル内の50パーセント以上の要素よりも少ないスパースベクトルであるだろう。入力ベクトルに埋込み関数行列を乗算することで得られる出力ベクトルは入力センテンスを表わす埋込みである。
埋込み関数は、非常に大きなテーブル、例えば、数百ギガバイトのサイズであり得る。結果として、埋込み関数は、単一のアクセラレータまたはプロセッサのメインメモリに適合させることができず、従って、埋込み生成は、各々が1つ以上のアクセラレータを備えた複数のノード間にわたって分散される。埋込みテーブルは、複数のデバイス間、例えば、データセンタのポッド内の複数のアクセラレータ間で仕切られてもよい。
このような分散により、これらの埋込み機能を実装するこれらの埋込み層の処理が複雑になる。本開示の局面は、入力サンプルの個々またはバッチに対する埋込みの生成を容易にするために、様々な入力値を散乱(スキャッタ)させ、収集(ギャザー)し、一意化し、合計するための様々な演算を加速させることを提供する。大きな埋込みテーブルは、複数のアクセラレータ間で仕切ることができる。説明を容易にするために、以下の説明では、単一のアクセラレータ、例えばハードウェア回路101に焦点を合わせることとする。さらに、本明細書で提供される例は機械翻訳等の自然言語処理タスクのための埋込みを説明するものであるが、本開示の局面は、それぞれの機械学習タスクを実行するための埋込み生成に少なくとも部分的に依拠する任意のタイプの機械学習モデルの加速を提供することができることを理解されたい。他の例は、例えば、マルチメディア推薦、検索結果ランキング、および広告等のドメインで見られるコンテンツ推薦システム等の推薦システムを含む。
埋込み生成に関する例が提供されるが、本明細書に記載の同じプリミティブ演算は、スパース行列乗算等の他のスパース問題に対処するために別の方法で組立て可能であることを理解されたい。このフレキシブル性は様々なスパース問題の加速を可能にする。スパース計算は、機械学習および深層ニューラルネットワークに加えて、科学計算および/またはグラフ分析等の他の問題空間において採用され得る。
本明細書に記載するような1つ以上のアクセラレータに従って処理されるニューラルネットワークの順方向パス上では、入力は1つ以上の入力サンプルのバッチであり得る。入力サンプルは、ニューラルネットワークの1つ以上の埋込み層の演算を実行する1つ以上のアクセラレータによって処理され得る。埋込み層の出力は1つ以上の埋込みのバッチであり、入力バッチ内のサンプルごとに1つずつ存在する。入力サンプルは、共通の長さ、例えば、各入力サンプルに起因する潜在的特徴の数を共有するが、入力サンプルは、いくつかの空またはゼロ値の特徴値を有し得ることに留意されたい。
順方向パスでは、入力バッチは、複数の異なるアクセラレータ間にわたって、例えば、1つ以上のホストデバイス間にわたって仕切られる。
入力バッチは、値のベクトルおよびインデックスのベクトルという2つのベクトルとして表わすことができる。値のベクトルは、バッチの入力サンプル内の識別子ごとの値に対応する。インデックスは、入力バッチを表わすテンソル内の識別子ごとの値の位置を指し得る。入力バッチは、入力バッチの部分が別々のアクセラレータに送られるように仕切られる。アクセラレータは、仕切られた入力バッチを受取ると、入力バッチ間で重複する識別子を除去するために入力を「一意化」することができる。入力を一意化することは、同じ識別子の複数のインスタンスを除去することを意味する。このような除去の1つの理由は、チップ間のネットワーク使用を減らして、同じ識別子に対する冗長なアクセスを回避することにより帯域幅を保存するためである。一意化(Uniquification)により埋込みテーブル上の冗長なルックアップが回避される。一意化の後、一意化された入力バッチは、出力埋込みを生成するために、埋込みテーブルの各部分を備えた複数のデバイスに分散される。生成された埋込は、スキャッタ後、様々なデバイスからギャザーされ、埋込を要求する別のデバイスに戻すことができる。
トレーニング中、グラウンドトルース埋込みと予測埋込みとの間の誤り率を表わす勾配は、それぞれのパーティションを更新するために、埋込みテーブルのパーティションを記憶するデバイスに同様にスキャッタされ得る。
本開示の局面は、プロセッサの複数のデータ処理レーン間にわたってデータ依存演算を実行するためのXPUを対象とする。XPUは、データ依存演算ごとに物理的に製作された演算固有回路を実装するのではなく、当該XPUにおいてスタック型ネットワークとして配置された処理セルおよびクロスバーによって実行される個々の演算を構成する入力信号に応答して様々な演算を実行するように構成され得る。XPUは、複数のSIMDデータ処理レーンの値にわたって演算する。XPUは、SIMD並列処理のために構成された第2のコプロセッサを補完するコプロセッサの一部として実装され得る。XPUを実装するコプロセッサはデータ依存演算を実行するように構成され得る。
本開示の局面は、データを処理パイプライン内の下流のコプロセッサに渡す前にスパースデータを最初に処理するためのXPUを提供して、XPUなしで以前可能であった計算よりも効率的な計算を行なうためのより広いワークロードを可能にする。XPUは多様なデータ依存演算を処理することができるので、処理パイプラインおよび対応するプロセッサは、既存のSIMDアーキテクチャ上で処理するために入力データを事前に定義するという制約なしに設計することができる。XPUがなければ、既存のSIMDアーキテクチャは、特徴のスパース集合から機械学習モデルへの埋込み生成等のデータ依存演算を効率的に加速することができない。
例示的なデータ依存演算は、入力トレーニング例のための埋込みを生成することを含む。埋込みはベクトルであり得るか、または埋込みよりも高い次元を有する入力からマッピングされた他の何らかのデータ構造であり得る。埋込み生成は、パイプラインに従って処理されるワークロードの一部として実行することができる。他の例として、XPUは、ベクトルスキャッタまたはギャザー演算、セグメント和を実行してもよく、および/または、スパース特徴テンソルを仕切ってもよい。本明細書に記載のXPUは、SIMD並列処理パラダイムに従って構築されたベクトル処理ユニット等の、プロセッサの他の構成要素または接続された構成要素に対して補完的な処理ユニットであり得る。1つ以上のXPUは、それ自体がトレーニングニューラルネットワーク等の特定のワークロードの性能を加速させるための他の構成要素を含み得る、より大型のプロセッサのそれぞれのプロセッサコアにおいて接続され得る。
さらに、XPUは、特定のタイプのデータ依存演算を実行することに限定されておらず、従って、プロセッサは、複数の異なるパイプラインのための他のタイプの処理ユニットを補完するためにXPUを含むように設計され得る。XPUは、ワークロードごとに構成することができるので、特殊な回路がスパースデータの計算のための相補的ユニットとしてプロセッサ上に物理的に製作される他のアプローチと比較して、XPUの物理的フットプリントが低減される。XPUの機能はまた、命令セットを用いることにより、またはホストプロセッサを既存の命令セットに拡張することにより拡張することができ、パイプラインデータの受取りが変化するのに応じて様々なデータ依存演算の適応性をさらに改善させることができる。命令は、XPUの個々の処理セルおよびクロスバーを構成するための命令を翻訳する役割を果たすXPUの構成要素に対する信号として提供することができる。XPUは、当該XPUを実装するハードウェア回路のための対応するコンパイラによってコンパイルされたプログラムを用いて構成され得る。
XPUは個々の処理セルのネットワークを含み、各セルは、処理セル間でのクロスバー接続を通じて1つ以上のデータ処理レーンを通過するデータを処理する。各データ処理レーンは、処理中にデータを一時的に記憶するための1つ以上のレジスタを含み得る。各処理セルは、オペランドの複数のセットに対して1つ以上のプリミティブ演算を実行するように構成される。オペランドの第1のセットは、処理セルによって共有されるプロセッサのデータ処理レーンからの入力として提供される。オペランドの第2のセットは、XPUの複数のデータ処理レーン間にわたるデータ送信を調整するように構成されたクロスバーから提供される。
XPUは、複数のパイプラインステージに分割することができ、各ステージは、クロスバーと、1つ以上の処理セルと、各処理セルに対応する制御セルとを含む。ステージの数は、例えば、XPUが現在のワークロードに対して実行するように構成される複合演算に基づいて変化する可能性もある。
XPUは、処理要素およびクロスバーのスタックされたネットワークのパイプラインステージ間にわたって複数のプリミティブ演算を実行することによって複合演算を実行する。複合演算は、出力を生成するためにXPUによって入力に対して実行される演算である。プリミティブ演算は、XPUの個々の処理セルが実行するように構成された演算であり、XPUによって実行されると、XPUに複合演算を実行させる。複合演算を実行するには、他の複合演算を実行するこがを必要となり得る。例えば、ベクトルソートを実行するために、XPUは、プリフィックス加算、すなわち複数のプリミティブ演算で構成される別の演算を実行し得る。例示的なプリミティブ演算は、入力データの比較、算術演算、またはバイパスのための演算を含む。XPUは、XPUのための複数のパイプラインステージのうちの1つに従って配置された複数の個々の処理セルおよびクロスバーの各々を構成することによって複合演算を実行する。
XPUの各ステージで実行されるプリミティブ演算は、プログラムにより定義することができ、ワークロードごとに異なり得る。処理セルが実行するように構成されたプリミティブ演算は、処理セルのためのそれぞれの制御セルが受信する1つ以上の制御信号または命令によって決定される。処理セルによって実行される厳密なプリミティブ演算は、例えば、XPUが現在実行するように構成されている複合演算に依存し得る。他の例では、XPUの様々なレーンまたは様々なステージでの処理セルは、1つ以上の所定のプリミティブ演算を常に実行するように構成され得る。XPUが出力を生成した後、当該出力は、複数のデータ処理レーンに沿って、XPUを実装するプロセッサの別の処理ユニットまたはメモリユニットに渡すことができる。
XPUが実行できる2つの例示的な複合演算は、ベクトルソートおよびベクトル重複カウントである。ベクトルソートは、キーによってソートされる、入力ベクトルの(キー(key),値(value))タプルのインプレースの安定したソートである。ベクトル重複カウントは、入力ベクトルの(キー,値)タプルの値の実行中の重複カウントを返す。XPUは、本明細書に記載するように、処理セルおよびクロスバーの同じ構成に従ってベクトルソートおよび重複カウントの両方を実行するように構成される。同じ構成を用いることにより、XPUは両方の複合演算をより効率的に実行することができる。なぜなら、少なくとも、所与の入力ベクトルのためにベクトルソートとベクトル重複カウントとを実行する間にXPUを再構成する必要がないからである。XPUが実行するように構成された他の複合演算は、並列プレフィックス和、ベクトル分割、ベクトルヒストグラム、ベクトルコンパクト、ベクトル置換、ベクトル縮小、ベクトルシフトインサート、ベクトルギャザー、ベクトルスキャッタ等を含む。ベクトル重複カウントを実行することにより重複値の存在を識別することが可能となり、これは、ベクトル入力を一意化して冗長処理を回避するために用いることができる。
本開示の局面は以下の技術的利点を提供することができる。XPUを実装するハードウェア回路は、埋込みクラスワークロードのためのよりフレキシブルでプログラム可能なハードウェア、および、効率的に並列化できない他のデータ依存演算を提供することができる。XPUは、特定の演算のみを効率的に実行するためにXPUが固定される必要なしに、ワークロードごとに異なるクラスのデータ依存演算のための加速経路を提供する。本明細書に記載するようなプログラム可能ユニットを提供することにより、実装するハードウェア回路は、様々なワークロードの要求にロバストに適応することができ、並列化可能なデータ非依存型のSIMD演算を補完することができるが、これは、そうでなければ、データ依存演算を必要とするワークロードに対して非効率的または非効果的となる可能性がある。
特定用途向け集積回路等のハードウェア回路は、さらにワークロードをスケールに合わせて調整および分散するためにさまざまな量のXPUで設計することができる。本明細書に記載のXPUはまた、同じ構成を用いて複数の演算の効率的な実行を可能にして、処理時間および構成時間をさらに短縮する。例えば、XPUは、XPUの別個の構成および/またはそれらの演算を加速させるための専用回路の別個のインスタンスの代わりに、ベクトルソートおよびベクトル重複カウントの両方を実行するように構成され得る。
図7は例示的なXPU700のブロック図である。XPU700は、処理セル701~709、クロスバー703~711、制御セル750(図7のブロック図においてハッチングされたブロックによって表わされる)を含み、データは、データ処理レーン700A~700Hに沿って下から上へ進み、ステージ1で開始し、ステージ6で終了する。ステージ1は処理セル701およびクロスバー702を含む。ステージ2は処理セル703およびクロスバー704を含む。ステージ3は処理セル705およびクロスバー706を含む。ステージ4は処理セル707およびクロスバー708を含む。ステージ5は処理セル709およびクロスバー711を含む。ステージ6は処理セル711およびクロスバー712を含む。別の例では、XPUはより多くのステージまたはより少ないステージを含み得る。XPUはクロスバー799も含み得る。
説明のために、より前のステージはより後のステージに対して「上流」にあるとみなされ、より後のステージはより前のステージに対して「下流」にあるとみなされる。例えば、ステージ1はステージ5の上流にあり、ステージ4はステージ3の下流にある。
XPUの各ステージにおけるクロスバーは、クロスバーの現在の構成に従って、様々な入力値をそれぞれのレーンから他の様々な処理レーンに置換するように構成された任意のタイプの回路であり得る。クロスバーは、クロスバーと同じステージの各処理セル用の制御セルから1つ以上の制御信号を受取ることができる。クロスバーは、固定パターンに従って同じステージ内の各処理セルからの入力値を置換するように構成される。そのパターンは、XPUが現在実行するように構成されている複合演算に依存するものであり、必ずしもクロスバーにあらゆる処理セル出力を置換させるものではない。言い換えれば、いくつかの処理セル出力は、クロスバーをバイパスし、同じ処理レーンに沿って次のステージに進み得る。
処理セルを構成するために、XPU700の各処理セルは、処理セルが常駐するそれぞれの処理レーンに沿って1つ以上の制御信号を受取るように構成されたそれぞれの制御セル750を有する。処理セルは、図7を参照してより詳細に説明するように、多種多様なプリミティブ演算を実行して、受取った制御信号または命令に従ってそれらの演算を実行するための回路とともに構成される。制御セルは、例えば、その対応する処理セルがどのプリミティブ演算を実行するかを決定するために制御セルによって翻訳可能な1つ以上の信号として、データ処理レーンに沿って命令を受信する。制御セルは、制御信号を処理セルに転送することができるか、または、受信した命令もしくは信号を処理して、指定されたプリミティブ演算の実行を有効化もしくは無効化するために処理セルが受取るように構成される生成済み制御信号を転送することができる。
処理セルはまた、処理セル用のそれぞれの処理レーンから受取った入力データをバイパスするように構成することもできる。受取った入力は、バイパスされると、修正されることなく、処理セルと同じステージにおいて処理セルからクロスバーに渡される。バイパス処理セルによって前のステージのクロスバーから受取られた入力は、ゼロに関連付けられるかまたは無視され得る。バイパス処理セルの実際の挙動は、セルが入っているパイプラインステージ、および/または処理セルが入っている処理レーンに依存し得る。図7は、比較、算術演算、および/またはバイパスプリミティブ演算を実行するように構成された例示的な処理セルを示す。
XPU700は、XPU700を実装するプロセッサが適用および実行するように構成される命令セットアーキテクチャの一部または命令セットアーキテクチャの拡張として定義される命令を受信するように構成され得る。これらの命令は、XPUおよび個々の処理セルがそれぞれ対応する演算として実行するように構成される様々な複合演算および/またはプリミティブ演算を指定することができる。制御セル750は、命令セットまたは拡張の一部として定義された命令を表わすデータを受信するように、および/または、命令を対応する処理セルを構成するための制御信号に変換するように、構成される。例えば、制御セル750は、XPU700を実装するプロセッサまたはハードウェア回路に対応する命令セットのオペコード、すなわち、XPUが実行するように構成された演算のためのコードワード、として信号を受取ることができる。XPU700がベクトルソートまたはベクトル重複カウント等の複合演算を実行するための命令を受信する場合、XPU700は、命令された複合演算をXPUに実行させる所定のそれぞれのプリミティブ演算を実行するように各処理セルを構成することができる。
XPUによって実行される演算はクロックサイクルによって同期され得る。例えば、ステージごとに処理セルによって実行される演算は1つ以上のサイクルで実行することができる。例えば、ステージごとの演算は単一のサイクルで実行することができる。XPUによって実行される様々な複合演算は、実行するのに様々な量のクロックサイクルを要し得る。例えば、ベクトルソートは、6サイクルでXPUによって、4サイクルでベクトルプレフィックス和によって、2サイクルでベクトルコンパクトによって実行することができる。
図7に関してより詳細に説明するように、処理セルは、浮動小数点値と符号付き整数または符号なし整数とを含む様々なタイプのオペランド間の加算等の算術演算を実行するように構成され得る。加算等の算術演算は、走査演算のためにXPUによって実行される複合演算の一部を形成し得る。
例示的な命令は、XPUをリセットし、XPUによって実行されるクロック同期およびプリミティブ演算に関する情報を取出すための命令を含む。他の命令は、各処理レーンから1つ以上の両方のオペランド、マスク値、および/またはセグメントマーカを取出すための命令を含む。これらの命令は、XPUによってサポートされる多種多様な複合演算の各々を指定する制御情報とともに、XPUによって記憶されたデータ構造にアクセスするための命令を含み得る。さらなる例では、これらの命令は、XPUに、データを様々なレジスタ、ラッチ、またはフリップフロップにプッシュさせて上述の内容が有効であるかどうかを判断するための命令を含み得る。プッシュされたデータは、例えば、複合演算の実行の一部として処理されている値、および/またはマスク値を含み得る。
構成されたXPU700は、特定の複合演算を実行するための処理ネットワークを実装すると言われている。例えば、XPU700は、以下のように構成可能な48個のXPUセルを含む。すなわち、18個のセルは算術演算のために構成可能であり、38個のセルは入力値を比較するために構成可能であり(1つのセルは算術演算および比較演算の両方のために構成されてもよく)、10個のセルは入力をバイパスするように構成される。新しい命令に応答して、XPU700は、それ自体を新しい処理ネットワークで再構成して別の複合演算を実行することができる。
XPUは、命令セットまたは拡張において様々な命令として指定され得る多種多様な演算モードで演算するように構成され得る。多様な演算モードは、複製をソートし、カウントし、データを走査して仕切り、および/またはXPUに入力されるデータ内の固有値を識別するための様々な複合演算を含み得る。さらに、これらの命令は、実行すべき比較または算術演算のタイプ、例えば、ソートもしくは走査のための符号なし整数の比較または浮動小数点加算、を指定するオペランドを含み得る。複合演算を実行するための命令に対する他のオペランドは、複合演算の出力をXPU700から送出させるためにどの処理レーンから出力すべきかを指定することを含む。受信された他のオペランドは、例えば、データ処理レーン間にわたってXPU700によって受信されるデータの複数のセグメントの各々をソートするために、入力データのセグメントに対して複合演算を実行するためのセグメントマーカを含み得る。
ベクトルソートおよび/またはベクトル重複カウントを実行する場合、XPU700は、奇数/偶数マージネットワークおよび値シャッフルネットワークを含むように構成される。ネットワーク構成は、XPUの1つ以上のステージを含み、各ステージのそれぞれのセルおよびクロスバーは1つ以上のプリミティブ演算を実行するように構成されている。
XPU700はレジスタファイル760Aおよび760Bを含み得る。レジスタファイル760Aおよび760Bは、異なるステージ間でデータ処理レーン700A~700Hに結合され得るとともに、データを記憶したり取出したりするために使用され得る。例えば、いくつかのデータは、ステージ4における処理セル707の後でレジスタファイル760Bに記憶され得るが、XPU700によって出力されるデータはレジスタファイル760Aに記憶される。
ストリーム命令および順序付け
本開示の局面は、オフコアメモリとコアローカルメモリとの間の非同期データ移動のためのハードウェアまたはソフトウェアのインターフェイスを提供し、メモリ間の移動は「ストリーム転送」と称される。ストリーム転送は、ソフトウェアが、スパースワークロードで見られるような共通のデータ移動パターンを表現することを可能にするストリーム記述子を含み得る。データはストリームまたはデータストリームと称され得る。ストリーム転送は、ストリーム命令によって開始することができる。ストリーム命令は、ストリーム転送の実行に必要な情報を符号化することができる。各ストリームは、ストリーム命令に関連付けられたデータ同期フラグ(「sync flag」(同期フラグ))によって示される関連するストリーム識別子(identifier:ID)を有し得る。同じストリームIDを有するコアによって発行されるストリーム命令は、少なくとも部分的に単一のストリームを形成することができる。
ストリーム記述子は、ストリーム転送の実行に必要な情報を表現できる内部データ構造である。例えば、情報は、送信元アドレス、宛先アドレス、ストリーム演算コード、および線形または循環バッファ等の制御情報を含み得る。
ストリーム転送は、コアローカルメモリへ、またはコアローカルメモリからデータを移動させるだけであってもよい。さらに、コアローカル同期フラグは、ストリームの進行を追跡するために使用されてもよい。同期フラグは、ストリーム転送の部分的進行を追跡することができる。例えば、所定の構成に従ってフラグがクリアされるかまたはセットされるかに応じて、同期フラグは、コアローカルメモリが送信元である場合にはコアローカルメモリからの読出しを追跡し、コアローカルメモリが宛先である場合にはコアローカルメモリへの書込みを追跡する。オフコアメモリへの読出しおよび書込みの進行は追跡されなくてもよいが、オフコアメモリへの未処理の書込みがコミットされることを確実にするために、スカラーフェンス命令を用いて、どのメモリがバリアにアクセスするかの選択を可能にすることができる。
ストリーム転送は、オフコアメモリまたはコアローカルメモリのいずれかにおける間接的なスキャッタ・ギャザー・メモリアクセスを含み得る。アクセスの送信元または宛先へのアドレスは、最初に読出されるアドレスに対して別のメモリ位置に記憶させることができる。一例として、間接アドレスは、マスキングサポートとともにレジスタファイルからソースされるかまたはメモリからソースされる。間接的なスキャッタ・ギャザー・メモリアクセスは、例として、行アドレスまたはワードアドレス等の様々なアドレス指定モードをさらに含み得る。ストリーム転送は、メモリワードに対して直接的なScatterAdd/GatherAddモードのためのサポートを含み得る。メモリワードはアトミックに更新され得る。例として、32ビット浮動小数点、32ビット整数、16ビット浮動小数点、および16ビット整数のデータタイプをサポートすることができる。
ストリーム転送は、送信元または宛先バッファ内の循環バッファに対するサポートを含んでもよく、これにより、ソフトウェアに対するバッファ割当て問題を単純化することができる。なぜなら、ソフトウェアコンパイル中にはバッファサイズが知られてないからである。
さらに、ストリーム順序付けモデルが本明細書に概略的に開示される。これらの転送のための同期プリミティブは、実際のデータ転送が順不同である間、データ転送が順序通りに処理されることを可能にする。同じストリームIDを有するコアによって発行される離散的なストリーム命令は単一ストリームを形成する。ハードウェアは、複数のストリーム命令にわたり得る、単一ストリーム内の転送のための順序付けを保証する。
ストリームに属するストリーム命令は順序通りに処理される。間接ストリーム命令の場合、オフセットリストが順序付けされる。例えば、オフセットリスト内のオフセット要素は順序通りに処理される。書込みは、順序通りに宛先メモリに発行され、宛先メモリによって順不同でコミットすることができる。読出しは、送信元メモリに対して順序通りに発行され、送信元メモリによって順不同で対応され得る。
同期フラグは、ストリームについての単調な段階的進行を示すように更新される。コアローカルメモリが送信元である場合、同期フラグは、コアローカルメモリに対する読出しを追跡する。コアローカルメモリが読出しの送信元である場合のNの同期フラグ値は、データの最初のN個のチャンクがコアローカルメモリ内で上書き可能であることを示し、データのチャンクは、コアローカルメモリ内のデータを測定するためのサイズの所定の単位である。コアローカルメモリが宛先である場合、コアローカルメモリへの書込みは同期フラグによって追跡される。コアローカルメモリが宛先である例における同期フラグ値Nは、コアローカルメモリ内のデータの最初のN個のチャンクへの後続の読出しが要求されたデータを返すであろうことを示す。
ストリームは、最後のストリーム記述子に先行する要求および最後のストリーム記述子を含む要求のためのデータがメモリに完全にコミットされると、終了することができる。一例として、コアローカルメモリが送信元である場合、ストリームは、すべての読出しが完了すると終了することができる。コアローカルメモリが宛先である場合、ストリームは、すべての書込みがコミットされたとき終了することができる。
本開示の局面は、ソフトウェアが、共通のデータ移動パターン、具体的には、スパースワークロードで見られるもの、をより効率的に表現することを可能にする。本開示の局面はまた、順序通りのコアの計算コアおよびソフトウェアプログラミングモデルを維持しつつ長いメモリアクセス待ち時間を隠すために、複雑さに対して効果的な解決策を提供することもできる。
ストリーム転送は、タイル102およびタイルシーケンサ106が、メモリ306またはスカラーメモリ334等のタイルローカルメモリと、メモリ105または高帯域幅メモリ107等のオフタイルメモリとの間でデータを移動させることを可能にする。タイルローカルメモリは、メモリ306、スカラーメモリ334等の、スパースアクセラレータ103に対して物理的にローカルなメモリとしてのコアローカルメモリの例である。TEC330またはTAC332から物理的に離れたメモリはメモリ105および/または高帯域幅メモリ107を含み得るので、オフタイルメモリはオフコアメモリの一例である。各ストリームは、ストリーム命令に関連付けられた同期フラグ318によって示される関連するストリームIDを有する。同じストリームIDを有する離散的なストリーム命令は、共有ストリームIDを有する単一ストリームを形成する。
ストリーム転送により、データをタイルローカルメモリへまたはタイルローカルメモリから移動させることができる。タイルローカル同期フラグ318は、ストリームの進行を追跡するために用いられる。同期フラグ318は、タイル102を介して様々なメモリへおよび様々なメモリから転送されるストリームの部分的進行を追跡する。例えば、同期フラグ318は、タイルローカルメモリが送信元である場合、タイルローカルメモリからの読出し動作(もしくは「読出し」)を追跡するか、または、同期フラグ318は、タイルローカルメモリが宛先である場合、タイルローカルメモリへの書込み動作(もしくは「書込み」)を追跡する。オフタイルメモリへの読出しおよび書込みの進行は追跡されなくてもよい。オフタイルメモリへのすべての未処理の書込みがコミットされることを確実にするために、スカラーフェンス命令を用いることで、どのメモリがバリアにアクセスするかを選択できるようにすることができる。スキャッタ・ギャザー・エンジン322は、特定のメモリごとに発行されたストリーム転送のステータスを追跡し、このステータスをスカラーコア320に伝達する。特定のメモリ上のバリアに対してスカラーフェンスが発行されると、スキャッタ・ギャザー・エンジン322は、そのメモリ(読出しまたは書込み)をターゲットとするすべての未処理のストリーム転送が完全にコミットされていることを示すためにステータスを待機する。その条件が満たされると、フェンスの待機状態はスカラーコア320上で解放される。
ストリーム転送は、オフタイルメモリにアクセスするためのストライドされたストリームと、タイルローカルメモリまたはレジスタファイルからオフタイルメモリにアクセスするための間接ストリームとを用いて効率的なスキャッタ・ギャザー演算をサポートすることができる。ストライドされたストリームであるかまたは間接ストリームであるかは、ソフトウェアアクセスパターンに基づき得る。ソフトウェアがテンソル内のあらゆるN番目の要素にアクセスすることを所望する場合、ストライドされたストリームが好ましいが、間接ストリームは依然として機能することができる。しかしながら、ソフトウェアがテンソル内の要素のランダムなセットにアクセスすることを所望する場合、間接ストリームが用いられるべきである。ストリーム転送は、タイルローカルメモリ上の循環バッファセマンティクスをサポートすることもできる。
ストリーム転送は、以下のデータ移動をサポートし、この場合、データ移動の粒度およびアライメントは、メモリの送信元と宛先との対に依存する。データは、メモリ306からオンチップメモリ105へ転送され得るとともに、オンチップメモリ105からメモリ306へ転送され得る。データはさらに、メモリ306から高帯域幅オフチップメモリ107に転送され得るとともに、オフチップメモリ107からメモリ306に転送され得る。データはまた、スカラーメモリ334からオンチップメモリ105に転送され得るとともに、オンチップメモリ105からスカラーメモリ334に転送され得る。例として、最小粒度、送信元アライメント、および宛先アライメントは4バイトであり得る。別の例として、32バイトのアクセスを用いて、オフチップメモリ107への4バイトのアクセスをサポートすることができる。さらに別の例として、32バイトのアライメントおよび128バイトの最小長は、オフチップメモリ107へのまたはオフチップメモリ107からのストリームに対する性能を確実にすることができる。
プロセッサ内の各タイルは、タイルからスクラッチパッドメモリへのデータの移動、および/または様々なメモリ間のデータの移動を調整するために、それぞれのスキャッタ・ギャザー・エンジン(SGE)を実装することができる。これらの様々なメモリは、スクラッチパッドメモリ、高帯域幅メモリを含むオフタイルメモリ、およびオンタイルメモリを含み得る。SGEは、SGEを実装するタイルのTECおよびTACの一方または両方から発生し得る複数の未処理のストリーム要求をサポートすることができる。データを読出す要求はSGEによる収集(ギャザー)演算として処理することができ、データを書込む要求は分散(スキャッタ)演算として処理することができる。SGEはまた、シーケンサとタイルおよび/またはメモリとの間のデータストリームに対する読出しおよび書込みを処理するためにタイルシーケンサに実装され得る。
図8は、スキャッタ・ギャザー・エンジン1500の例示的な機能図である。SGE1500は、様々な数の実行スレッド、例えば8つのスレッド、をサポートすることができる。スレッドは、着信要求のためのストリーム識別子と、アドレス生成器スレッドおよびストリームタイプ、例えば、高帯域幅メモリおよび/またはスクラッチパッドメモリの利用可能性とに基づいて選択され得る。いくつかの例では、アドレス生成器スレッドにおいて機内でのストリーム識別子を備えたストリーム要求は、その同じスレッドにマッピングされる必要がある。
SGE1500は、同じストリームに属するとともに同じタイルコアから生じる同じ外部インターフェイス(例えば、プロセッサのクロスバーまたは他の相互接続)をターゲットとする複数のストリーム間にわたって、同じタイプの特定の要求(例えば、収集(ギャザー)要求または分散(スキャッタ)要求)のための順序付けを確実に実施することができる。これらの要求は、それらが同じストリーム識別子を有する場合、同じストリームに属するものとして識別され得る。タイル上で管理される同期フラグは、本明細書に記載するように、要求間の順序付けを追跡するために用いることができる。
SGE1500は、スキャッタ/ギャザー要求を受信し、要求を展開し、プロセッサ相互接続上のデータをリモートのSpmemスライスに、またはコアメモリネットワークCMNを高帯域幅メモリに移動させ、同期フラグ更新をコアのうちの1つのタイル同期フラグメモリに送信して、これをトランザクションの進行に応じて更新する。
SGE1500はまた、CMNインターフェイスから受信するDMA要求にサービスを提供して、タイルSpmemスライスへの書込みおよびタイルSpmemスライスからの読出しを実行するとともに、このタイルに対してローカルなSpmemスライスをターゲットとするリモートタイルのSGEが作り出した読出しおよび書込みを処理する。
ストリーム要求は、複数の異なるタイプのうちの1つであり得る。ストリーム要求は、タイルのコアからのスキャッタ/ギャザー要求を含み得る。これら要求は、それ自体がタイルおよび/またはタイルシーケンサ上で実装され得るスキャッタ・ギャザー・エンジンによって処理することができる。ストリーム要求の1つのタイプは線形要求であり、この場合、SGEは、ストリーム要求の長さに基づいて、当該要求を複数のより小さい要求に展開することができる。別のタイプのストリーム要求は、SGEがストライドおよび長さに基づいて要求を複数の要求に展開するストライド済み要求である。別のタイプのストリーム要求は間接要求であり、SGEが同じ長さのアドレスのリストを展開し、それらは別々の要求に展開される。別のタイプのストリーム要求は、SGEがアドレスのリストを受取る間接要求である。
SGE1500は、いくつかのステージ、例えば、記述子ディスパッチステージ1500A、アドレス生成器ステージ1500B、およびデータ転送ステージ1500Cを実装することができる。各ステージについて順に説明する。
SGEは、各タイルコア内の記述子生成器、例えば、TACおよびTECと直接インターフェイスをとることができる。記述子生成器は、コアによって生成されたストリーム記述子をエンキューするように構成される。ストリーム記述子は、記述子生成器に送信可能であり、ここで記述子に関係するメタデータが記述子発行FIFOにエンキューされ、実際の記述子が記述子RAMに書込まれる。FIFOの内容は、記述子が常駐する記述子RAM内のポインタと、メモリタイプと、対応するストリームに添付されたストリーム識別子とを含み得る。有効なストリーム記述子メタデータがTACまたはTEC FIFOの先頭で利用可能である場合、以下のシーケンスが行なわれてもよい。
第1に、SGEは、各コアのメタデータに対してリソースチェックを実行し得る。次に、SGEは、2つのコアがともにリソースチェックによって決定されるような要求済みリソースを有しているものと仮定して、これら2つのコアの間で選択すべき最長時間未使用の調停を実行することができる。コアのうちの1つだけが必要とされるリソースを有する場合、これはサービスを受ける次のコアとなるだろう。メタデータに添付されたストリーム識別子は、アドレス生成器マップへのストリーム識別子においてルックアップされるとともに、関連付けられたカウンタがインクリメントされるか、または、記述子を送信すべき宛先であるアドレス生成器ステージにおいてアドレス生成器スレッドを選択するために、新しいエントリがマップにおいて作成される。次いで、メタデータは、選択されたスレッドに関連付けられた記述子メタデータキューに入れられる。リソースチェックは、記述子メタデータキューに関連付けられた記述子FIFOにおいて実行することができる。最長時間未使用の調停は記述子メタデータキューのうちの1つを選択する。この場合、勝利したエントリがポップされ、そのメタデータが記述子RAM要求FIFOに転送される。要求は、ポップされて記述子RAMに送信され、記述子FIFOに記憶されたデータ応答は、アドレス生成器ステージに転送される。
ストリーム識別子・アドレス生成器マップは、記述子メタデータを送信すべきアドレス生成器ステージ1500B内のアドレス生成器スレッドを算出するとともに、同じストリームに属する後続のストリーム要求間の順序付けを確実に維持するために用いられる。この構造は、アクティブなストリーム識別子、これら識別子がマッピングされるアドレス生成器スレッド、スレッド識別子エントリへのマッピング済みストリーム識別子が有効であることを示すビット、およびストリームFIFOのキューからのパイプライン内のこのストリームに属する記述子の数のカウントを保持することができる。
上記構造は、様々な最大ストリーム識別子、例えば16、を保持するようにサイズ設定することができる。現在アクティブではないストリーム識別子、記述子メタデータキュー内で利用可能な空間、および/またはストリーム識別子・アドレス生成器マップ内で利用可能な空間とともにストリーム記述子が発行されるたびに、SGE1500は1つ以上のアクションを実行することができる。SGEは、次の利用可能なスレッドを選択し、この値をストリーム識別子・アドレス生成器マップに記憶させ、このスレッドに関連するカウンタを1ずつインクリメントする。同じストリームに対する後続の結果はいずれも、ここで同じアドレス生成器スレッドに送信されて、カウンタをインクリメントするだろう。
そのアドレス生成器スレッドの記述子メタデータキューにこの要求のために利用可能な空間がない場合、または、ストリーム識別子(これが新しいストリーム識別子である場合)内の新しいエントリをアドレス生成器マップに割当てるための空間がない場合、または、マップ内のカウンタがほぼ一杯である場合、FIFOは、すべての必要なリソース内の空間が空くまでデキューされないだろう。このチェックは2つのコアFIFO間の調停の前に行なわれる。
アドレス生成器ステージ(Address Generator Stage)におけるアドレス生成器スレッド間で、4はCMNインターフェイスに関連付けられ、他の2はSCデータクロスバーに関連付けられる。CMNインターフェイスアドレス生成器スレッドは、HBMをターゲットとする要求を展開する一方で、SCデータクロスバーインターフェイスアドレス生成器スレッドは、リモートSpmemまたはタイルSpmemNをターゲットとする。ストリームIDとともに記憶すべき次の利用可能なスレッドを決定するために、ストリームインターフェイスメタデータが、どのアドレス生成器スレッドから選択すべきかを決定し、対応する記述子メタデータキューにも空間を有する関連するスレッド間にわたってLRU調停が用いられる。
ストリーム要求がアドレス生成器ステージ内のアドレス生成器スレッドによって展開され、データ転送ステージ内の同期フラグ追跡構造が更新されると、アドレス生成器マップへのストリーム識別子内のカウンタをデクリメントすることができる。データ転送ステージからのこのカウンタへのデクリメント更新は、データ転送パイプラインのうち以下の4つの部分に由来する。すなわち、コアメモリネットワークへのストリームスキャッタ(xl)、コアメモリネットワークへのストリームギャザー(xl)、プロセッサデータクロスバーへのストリームスキャッタ(x2)、および、プロセッサデータクロスバーへのストリームギャザー(x2)である。これは、アドレス生成器スレッドによって記述子に展開されるべき最後の要求によって行なわれる。
アドレス生成器マップへのストリーム識別子内のストリーム識別子に関連付けられたカウンタがゼロになると、このマップエントリは無効化することができ、同じストリームへの任意の後続の要求は、そのインターフェイス(CMN/データクロスバー)のための利用可能なアドレス生成器スレッドのいずれかに再マッピングすることができるが、これは、最終的に、それらの間の順序を維持している同じ同期フラグ追跡構造に到達することとなるからである。
例えば、ストリームIDは、記述子が(データ転送ステージまで)機内にある場合、時間のウィンドウにわたって、最初にthread_iD#2にマッピングされる。マッピングされたエントリは、もはや新しい記述子がしばらくの間同じストリームIDで作成されない(関連するカウンタがゼロになる)場合には無効化されるだろう。マッピングされたエントリが無効化された後、新しい記述子が同じストリームIDで作成される場合、作成される新しいマップは、ストリームIDマッピングthread_id #1を有することができるが、順序付けを維持する役割を果たすデータ転送ステージ内の同期フラグ追跡構造内に空間がすでに割当てられているので、このことは問題にはなる可能性はない。なお、これは、thread_id#1およびthread_id#2が同じストリームインターフェイスタイプ(CMN/データクロスバー)に属しており、同じメモリへの更新を追跡している(散乱(スキャッタ)対収集(ギャザー))と想定していることに留意されたい。
ストリームFIFOからの全ての情報は、そのうちのいくらかが記述子ディスパッチステージ1500Aの初期部分においてのみ用いられるため、記述子メタデータキューにエンキューされる必要はない。記述子ramに対するアドレスのみが、記述子ramに対する読出しを送出するためにステージの後半部分において必要とされる。FIFOで搬送されている他のすべてのメタデータは、記述子を特定のアドレス生成器にマッピングするためにのみ用いられる。この時点の後、このメタデータを廃棄することができる。記述子メタデータキューは、記述子ramへのポインタのみを搬送する。
記述子メタデータキューの出力において、公平性を維持するように記述子RAMへのアクセスを得るために、すべてのアドレス生成器スレッド間にわたってLRU調停が存在する。
アドレス生成器ステージ1500Bを参照すると、記述子FIFOからの記述子は、アドレス生成器ステージ内のストリーム記述子マネージャ論理によってポップされ、次いで、リモートメモリへの要求にさらに展開するためにアドレス展開状態マシンに渡される。アドレス生成器の各サブブロックについて、以下でさらに詳細に説明する。
ストリーム記述子マネージャ論理は、記述子をアドレス展開状態マシンに渡す前に間接ストリームのアドレスリストを展開する状態マシンである。本明細書は状態マシンの形態で論理を説明しているものの、実際の実装例では、状態をこのように明確にラベル付けするものではないことに留意されたい。これはコード構造を単純化するために行なわれた。しかしながら、論理によって実行される実際の機能は変化するものではなく、本明細書に記載のものと同じである。これは各状態において以下のタスクを行なう。
アイドル状態:この状態では、論理は、記述子データFIFOからポップし、記述子のoff_tile_stream_typeフィールドをチェックする。展開アドレスリスト状態では、この状態は、例えば間接ストリームのアドレスリストに展開すべきアドレスが4xよりも多い場合にのみ到達される。
アドレス展開状態マシンは、それに提示される各ストリーム記述子を、(HBMに向けられる)コアメモリネットワークインターフェイスまたは(リモートSpmemに向けられる)データクロスバーインターフェイスへの1つ以上の読出し/書込み要求に展開するために用いられる。
なお、アドレス展開状態マシンは、各ストリーム記述子から展開される最後の要求であるストリームスキャッタまたはギャザーをデータ転送ステージに示さなければならない。この情報は、特定のストリーム記述子に関連するアドレス展開入力FIFO内の最後のエントリを示すことにより、記述子メタデータの一部として、ストリーム記述子マネージャ論理からアドレス展開状態マシンに渡される。この情報は、フェンス命令についての記述子「committed(コミット済み)」および「retired(リタイア済み)」状態を追跡するためにデータ転送ステージによって必要とされる。
データ転送ステージ1500Cでは、SGE1500は、CMNおよびデータクロスバーのインターフェイス要件に合致するように、出力ストリームのスキャッタおよびギャザーのフォーマット設定に対処する。それは、未処理のストリームのスキャッタおよびギャザーのためにSpmemへのDMAアクセスと同期フラグ追跡とを管理する。このパイプラインステージはまた、リモートタイルからの着信する読出しおよび書込みアクセスにも対応する。
SGE1500は、送信元コアIDおよびターゲットリモートメモリに基づいてフェンス命令のステータスを追跡するためのトランザクションカウンタをインクリメントする。フェンスの場合、例えば、コアタイプごとに6つのカウンタ[合計12]-Spmem(リタイア済み書込み、コミット済み書込み、リタイア済み読出し)、HBM(リタイア済み書込み、コミット済み書込み、リタイア済み読出し)が存在し得る。データ転送ステージへの調停に勝利する各トランザクションは、関連付けられたメモリおよびコアタイプのうちリタイア済みカウンタおよびコミット済みカウンタの両方をインクリメントするだろう。
SGE1500は、そこに存在するフェンス記述子カウンタについて、これが、展開されている記述子に関連付けられた最後のトランザクションである場合、デクリメントを記述子ディスパッチステージに送信する。これは、記述子に関連付けられた最初の転送に対しても行なうことができるが、「最後の転送」ステータスはすでに利用可能であるので、デクリメントが最後の転送に基づいて行なわれる場合、追加の情報を追跡する必要はない。これはまた、誤ったステータスがコアコンプレックスに提供されるのを確実に防ぐ。デクリメントは次のインターフェイス転送のための粒度で実行される。
SGE1500は、これが展開されている記述子に関連付けられた最後のトランザクションである場合、アドレス生成器マップへの同期フラグidに関する記述子ディスパッチステージにデクリメントを送信する。
ストリームギャザーに関する記述子コミット済み状態は、記述子リタイア済み状態と同じであるので、ストリームギャザーは、1つのタイプの状態カウンタのみによって追跡される必要がある。ストリームスキャッタの場合、2つのカウンタはフローのうち別々の時点で更新されるだろう。また、同期フラグを更新するパイプラインにおける更新の粒度は、要求がリモートメモリにまで追跡される粒度とは異なる可能性があるので、論理は、データ転送ステージのこれらの2つの別々の部分において状態を維持する必要がある。
データ転送ステージ1500Cは、同期フラグ追跡論理の各インスタンスによってインクリメントされるリモートメモリタイプごとの送信元コアごとにカウンタを維持する。カウンタは、同期フラグメッセージが同期フラグトラッカによってメッセージルータインターフェイスにエンキューされるとインクリメントされる。メッセージルータに送信された同期フラグ更新は、データ転送ステージにおいてこれらのカウンタをデクリメントするために同期フラグ更新が完了すると、リモートメモリおよび送信元コアを、更新が属するとともにSGEに送り返されるトランザクションに関連付けることとなる。
各同期フラグトラッカはまた、(メモリタイプごとの送信元コアごとに)それによって追跡されている実行中のトランザクションがあるかどうかについてステータスを維持する。
特定のインターフェイスへのストリームスキャッタのための同期フラグトラッカにおいて「実行中」であるものが存在している限り、そのメモリタイプに対するすべての記述子はまだ「コミット済み」でも「リタイア済み」でもない。なお、特定のメモリタイプに関するストリームスキャッタ「リタイア済み」カウンタが0であるが、関連付けられた同期フラグトラッカが依然として「実行中」のトランザクションを有する場合、そのメモリに関するフェンスステータスは、すべてが「コミット済み」であるかまたは「リタイア済み」であるわけではないことを依然として示すであろうことに留意されたい。
ストリームギャザーの場合、たとえ「リタイア済み」カウンタがすべてデクリメントされたとしても、同期フラグトラッカ内に「実行中」のトランザクションがある限り、記述子ディスパッチステージに対する現在のステータスは「コミット済み」または「リタイア済み」に設定することはできない。特定のメモリのための同期フラグトラッカが、そこで何も追跡されていないことを報告すると、ステータスを記述子ディスパッチステージへと更新することができる。
データ転送ステージ1500Cにおける記述子追跡論理は、実行中のフェンスステータスを記述子ディスパッチステージ1500Aに設定する。
本明細書に記載するように、SGE1500は、タイルシーケンサの一部として、ならびに各タイルにおいて実装され得る。タイルシーケンサ内のスキャッタ・ギャザー・エンジンは、この段落で詳述するいくつかの相違点を伴うものの、上述したSGEサブシステムのパラメータ化されたバージョンとなるだろう。タイルシーケンサの場合の「ローカル」メモリは常に共有メモリであり、スクラッチパッドメモリと比較して、より低い読出し/書込み帯域幅要件を有する。
ストリーム記述子は、スキャッタ・ギャザー・エンジン322がストリーム転送を実行するための全ての情報を表わすことができるデータ構造である。ストリーム命令は、ストリーム記述子のためのフィールドを完全にエンコードすることができる。以下はストリーム記述子のためのフィールドの例である。
ストリーム演算コードの場合、ギャザーストリームは、オフタイルメモリを読出し、タイルローカルメモリにデータを記憶するか、またはタイルローカルメモリにデータを追加する。スキャッタストリームは、タイルローカルメモリから読出し、オフタイルメモリにデータを記憶し、またはオフタイルメモリにデータを追加する。オフタイルメモリおよびタイルローカルメモリは、それぞれ、オフタイルメモリタイプおよびタイルローカルメモリタイプ等のフィールドによって決定される。
ストリーム命令の追加の変形は、浮動小数点および符号付き整数加算演算の両方をサポートすることができる。符号付き整数加算の収集(ギャザー)および浮動小数点加算の変形例の収集(ギャザー)をタイルローカルメモリのためにサポートすることができる。スキャッタ符号付き整数加算およびスキャッタ浮動小数点加算の変形例をオフタイルメモリおよびタイルローカルメモリのためにサポートすることができる。不正な組合わせが検出された場合、エンジンによってプログラムエラーが提示され得る。
タイルローカルストリームタイプは、タイルローカルメモリにアクセスするために用いられるアドレスパターンを示す。例えば、線形ストリームは、タイルローカル開始オフセットから始まるいくつかの連続ワードを容易にする。連続ワードの数は4バイト長を有し得る。別の例として、循環バッファストリームは、ソフトウェアがタイルローカルメモリ内に論理循環バッファを構築することを可能にする。この例示的なアクセスパターンでは、循環バッファメタデータ内のベースフィールド、サイズフィールドおよびオフセットフィールドが、いくつかのワード用のアドレスを生成するために用いられる。ワードの数は4バイト長を有し得る。粒度の有効長が循環バッファメタデータ内のサイズフィールドよりも大きい場合、プログラムエラーが提示され得る。
オフタイルストリームタイプは、オフタイルメモリへのアクセスに用いられるアドレスパターンを示す。線形ストリームは、オフタイル開始オフセットから始まるいくつかの連続する位置へのアクセスを容易にする。実際のワードサイズはオフタイルメモリタイプに依存する。ストライドされたストリームは、ストライドされたアクセスパターンをオフタイルメモリタイプに記憶された多次元アレイに変換することを容易にする。ストリーム転送は単一レベルのストライドをサポートすることができる。間接ストリームは、テーブルへのランダムなスキャッタ・ギャザーアクセスパターンを可能にする。ここでは間接オフセットリストが使用され、リスト内の各エントリは同じ長さのデータにアクセスする。
間接オフセットリストの送信元はタイルローカルメモリまたはレジスタファイルであり得る。送信元がタイルローカルメモリである場合、間接オフセットフィールドは、いくつかのオフセットが記憶されているタイルローカルメモリへの開始オフセットを有する。送信元がレジスタファイルである場合、間接オフセットフィールドはレジスタファイルを有しており、有効なオフセットを含むいくつかのレーンが示される。これらのオフセットは、ストリーム演算コードによって示されるように、スキャッタ演算またはギャザー演算を実行するために用いられる。
コアタイプは、タイルエグゼキュータコア330またはタイルアクセスコア332等の、ストリーム記述子を生成したタイル102内のコアのタイプを示す。同期フラグコアタイプは、ストリームの進行を追跡する同期フラグ318のコアタイプを示す。符号化は、タイルエグゼキュータコアによって追跡されるタイルアクセスコアによってストリームの開始を可能にするとともにタイルアクセスコアによって追跡されるタイルエグゼキュータコアによってストリームの開始を可能にするコアタイプと同じであり得る。
同期フラグIDはターゲット同期フラグメモリ内のオフセットを示す。同期フラグIDはまた、ストリームIDとして使用することができ、以下でさらに説明するように、順序付けを確実にすることができる。設定済みdoneビット(set done bit)は現在の記述子がストリーム内で最後であることを示す。doneビットは、ストリーム内の現在の記述子および先行する記述子についてのすべてのデータがタイルローカルメモリに完全にコミットされた後に設定される。
同期フラグカウントタイプは、ワードの数であろうと、記述子の数であろうと、同期フラグ318が追跡しているカウントのタイプを示す。いずれの場合も、同期フラグ318は、ストリームについての単調な段階的進行を、異なる粒度で追跡する。
タイルローカルメモリタイプは、ストリーム転送に関与するタイルローカルメモリのタイプを示し、スカラーメモリ334またはメモリ306のローカルバンクを含み得る。
タイルローカル開始オフセットフィールドは、タイルローカルストリームタイプが線形である場合に用いられる。それは、この転送によってアクセスされるタイルローカルメモリ内の4バイトワード等のアラインされた開始オフセットワードを示す。実際のアクセスタイプはストリーム演算コードに依存する。
タイルローカルストライドは、ストライドごとにアクセスされるストライドサイズおよびバイト数を符号化し、これは、タイルローカルメモリタイプによって選択されるタイルローカルメモリにアクセスするために用いられる。一例として4バイトであり得る長さは、ストライドごとにアクセスされるバイト数の倍数である必要はない。ストライドされたアクセスの最後の要求は、ストライド当たりの長さ未満であり得る残りの転送ワードにアクセスするだろう。ストライド計算は、線形および循環型の両方のバッファストリームタイプに場合に同じであり得る。
タイルローカルストリームタイプが循環バッファである場合、循環バッファメタデータフィールドが用いられる。循環バッファのサイズはオフタイルメモリタイプの粒度の倍数であり得るとともに、オフセットはアラインされ得る。循環バッファがラップアラウンドする場合、要求は複数の要求に分割され、結果として生じる要求がオフタイルメモリタイプの粒度の倍数ではない場合、エラーが提示され得る。エラーはまた、ストリーム転送の全長が循環バッファのサイズよりも大きい場合にも提示され得る。
オフタイルメモリタイプは、転送に関与するオフタイルメモリのタイプを示す。これは、オンチップメモリ105および高帯域幅メモリ107を含む。4バイト粒度および4バイトアライメントでのアクセスを可能にする高帯域幅メモリビューも使用可能である。シーケンサ106がストリーム転送のイニシエータである場合、このフィールドは、符号化された高帯域幅メモリ107を有していなくてもよい。
タイルIDフィールドは、メモリスライスのためのタイルIDを選択するために使用することができる。オフタイル開始オフセットは、関連するオフタイルメモリタイプによって示されるオフタイムメモリ105内の開始オフセットワードを含む。オフセットの単位は、オフタイルメモリタイプ内のオフセットアライメント列において示される値に等しくなり得る。例えば、高帯域幅メモリ107の場合、1のオフセット値はバイトアドレス32に変換されるだろう。オフタイルストリームタイプが間接的である場合、このフィールドは、メモリにアクセスする前に間接オフセットリストから読出されたオフセットに追加されるベースアドレスとして機能し得る。
間接的なオフセットは、オフタイルストリームタイプが間接的である場合に使用することができる。送信元がタイルローカルメモリである場合、間接オフセットは、間接オフセットリストを記憶するタイルローカルメモリ内のワード開始オフセットを提供する。送信元がレジスタファイルである場合、間接オフセットは、間接オフセットリストの送信元であるファイルレジスタインデックスを提供する。レジスタファイルは、ストリーム命令の発行時に読出すことができる。
オフタイルストリームタイプが間接的である場合、間接リストサイズを用いることができる。送信元がタイルローカルメモリである場合、オフセットリスト内の要素の数はタイルローカルメモリに記憶される。送信元がレジスタファイルである場合、有効なオフセットを含むレーンの数が記憶される。転送の完了は、ストリーム内の残りの記述子で順序通りに維持される。
オフタイルストリームタイプが間接的であり、オフセットリストに記憶されたオフセットのタイプを示す場合、間接リストタイプを使用することができる。これはワードオフセットおよび行オフセットを含み得る。間接リストストライドは、オフタイルストリームタイプが間接的である場合に使用され、タイルローカルメモリに記憶されたオフセットリスト内の2つのアドレスワード間の距離を示す。これは符号付き整数であり得る。
間接フィルタフィールドは、オフタイルストリームタイプが間接的である場合に使用され、このフィールドが設定される場合、間接フィルタ値に合致する間接メモリアドレスがフィルタ除去される。間接フィルタ値は、フィルタ除去される必要がある間接アクセスリスト内の要素の値を示す。この値は、間接リストタイプによって示されるタイプである。間接フィルタフィールドが間接ストリーム用に設定される場合、および/または、間接オフセットリスト内の要素の値がこのフィールドに合致する場合、フィルタリングを有効にすることができる。フィルタリングされた要素に対応するオフタイルアクセスおよびタイルローカルアクセスはドロップされるが、タイルローカルバッファは依然としてフィルタリングされたアクセスのサイズ分だけ進められるだろう。
例として4バイトまたは512バイトの倍数の長さ等の長さは、ストリームによってアクセスされるワードの総数を示す。オフタイルストリームタイプが線形であるかまたはストライドされている場合、このフィールドはストリームによってアクセスされるワードの総数を示す。オフタイルストリームタイプが間接的である場合、このフィールドは、間接オフセットリスト内の各アドレスからアクセスされるワードの数を示す。このフィールドの実際値がオフタイルメモリタイプの粒度の倍数でない場合も、プログラムエラーが提示され得る。生成されたアドレスがオフタイルメモリ105の境界を超える場合もプログラムエラーが提示され得る。
ストライドサイズフィールドは、ストライドサイズをオフタイルメモリタイプの粒度単位で示す。これは符号付き整数であり得る。例として4バイトまたは512バイトの倍数のストライド当たりの長さ等のストライド当たりの長さは、ストライドごとにクセスされるワードの数を示す。これは符号付きフィールドであるが、負以外の値を含むはずである。長さはこのフィールドの倍数である必要はない。このフィールドは、このストリーム記述子によって選択されるオフタイルメモリタイプの粒度の倍数であるはずである。ストライドされたアクセスの最後の要求は、ストライド当たりの長さ未満であり得る残りの転送ワードにアクセスするだろう。ストライド当たりの長さが0であるか、負であるか、またはオフタイルメモリアクセス粒度の倍数ではない場合、プログラムエラーが提示され得る。生成されたアドレスがオフタイルメモリ105の境界を超える場合も、プログラムエラーが提示され得る。
トレースフィールドは、ストリーム転送をトレースすべきかどうかを示す。トレースは、デバッグの一部として、ストリーム転送中に行われたアクションについてのログイン情報を含み得る。
図9は、ストリーム記述子を構成オフタイルストリーム要求またはタイルローカルストリーム要求に展開するための例示的なプロセス1600のフロー図である。例示的なプロセス1600は、1つ以上の位置における1つ以上のプロセッサのシステム上で実行され得る。例えば、ハードウェア回路101は、上述のように、プロセス1600を実行することができる。
ブロック1610に示すように、プロセスは、サイズを4バイトで受取る等の、オフタイルメモリのサイズを受取るプロセスを含む。さらに、プロセスは、オフタイルメモリタイプをターゲットとするストリーム要求の最大チャンクサイズを受取るプロセスを含む。ブロック1620に示すように、プロセスは、間接リストタイプに基づいて、ファイルレジスタまたはタイルローカルメモリから4バイトオフセット等のオフセットに読出された間接オフセットを、オフタイルメモリに変換するプロセスをさらに含む。
ブロック1630に示すように、プロセスはまた、ストライドされた要求および/または間接要求を生成するプロセスを含む。ストライドされた要求の場合、プロセスは、ストライドされたストリーム記述子を、各々がオフタイルメモリ内の連続するアドレスにアクセスする要求のセットに部分的に展開するプロセスを含み得る。間接タイルローカルメモリ要求の場合、プロセスは、間接ストリーム記述子を取得し、記述子によって選択されるオフタイルメモリタイプへのオフセットのリストを生成するプロセスを含み得る。間接ファイルレジスタメモリ要求の場合、プロセスは、間接ストリーム命令の発行時に読出されるファイルレジスタからオフセットのリストを生成するプロセスを含み得る。
ブロック1640に示すように、プロセスは、展開されたオフタイルメモリ要求のリストを生成するプロセスを含み、この場合、展開された各要求は、オフタイルメモリ内の連続アドレスのセットにアクセスする。これらの要求は、タイルローカルメモリ要求およびオフタイルメモリ要求の両方を生成するために用いられる。タイルローカルストライド、タイルローカルストリームタイプ、およびアライメントは、要求を展開する間、考慮される。プロセスはさらに、部分的に展開された要求のリストを生成するプロセスを含み、この場合、部分的に展開された要求は各々、オフタイルメモリ内の連続アドレスのセットにアクセスする。これらの要求は、オフタイルメモリタイプによって選択されたメモリの粒度にアラインされる要求のセットを生成するためにさらに展開される。
ブロック1650に示すように、プロセスは、ストリーム記述子をオフタイルメモリ要求およびタイルローカルメモリ要求のセットに展開するプロセスを含む。
図10は、ストリーム転送を順序付けるための例示的なプロセス1700のフロー図である。例示的なプロセス1700は、1つ以上の位置における1つ以上のプロセッサのシステム上で実行され得る。例えば、ハードウェア回路101は、上述したように、プロセス1700を実行することができる。同じストリームIDを有するコアによって発行される離散的なストリーム命令は単一のストリームを形成するが、順序付けは、別々のストリーム間では保証されない可能性がある。スキャッタ・ギャザー・エンジン1722は、これらの要求を並列に処理することができる複数のスレッドを含む。順序付けは、複数のストリーム命令にわたり得る、単一ストリーム内の転送のために保証することができる。
ブロック1710に示すように、ストリームに属するストリーム命令は順序通りに処理される。それらに対応する要求はスキャッタ・ギャザー・エンジン322によって順序通りに発行されるだろう。
ブロック1720に示すように、間接ストリーム命令の場合、オフセットリストが順序付けられる。オフセットリスト内のオフセット要素は順序通りに処理される。書込みは順序通りに宛先メモリに発行されるが、書込みは宛先メモリによって順不同にコミットされ得る。読出しは、送信元メモリに順序通りに発行されるが、当該読出しは、送信元メモリによって順不同にサービスされ得る。
ブロック1730に示すように、スキャッタ・ギャザー・エンジン322は、ストリームについての単調な段階的進行を示すように同期フラグ318を更新する。タイルローカルメモリが送信元である場合、同期フラグ318はそこからの読出しを追跡する。同期フラグ値は、タイルローカルメモリに上書きされ得るデータのチャンクのうちの最初のチャンクを示す。タイルローカルメモリが宛先である場合、同期フラグ318はそこへの書込みを追跡する。ここで、同期フラグ値は、タイルローカルメモリ内のデータの最初のチャンクへの後続の読出しが要求されたデータに戻るであろうことを示す。
ブロック1740に示すように、同期フラグ318内のdoneビットは、ストリームの終わりに更新され得る。これは、ストリーム記述子内の設定済みdoneビットによって示される。doneビットは、最後のストリーム記述子に先行する要求および最後のストリーム記述子を含む要求についてのすべてのデータがメモリに完全にコミットされた後に設定することができる。タイルローカルメモリが送信元である場合、全ての読出しは完了しており、タイルローカルメモリが宛先である場合、全ての書込みはコミットされている。
図11はストリーム順序付けの例示的な図である。ストリーム記述子Aおよびストリーム記述子Bが1つのストリームを構成する場合について考察する。ストリーム記述子Bは設定済みdoneビットセットを有する。ストリームの部分的進行は同期フラグによって追跡される。A0が読出しまたは書込みのいずれかでメモリにコミットされると、同期フラグは1の値に更新される。A2およびB1がA0の前にコミットされても、同期フラグ値は3に更新されない。A1がメモリにコミットされると、ストリーム内のデータの5つの連続するチャンクA0、A1、A2、B0、B1がコミットされ、これは5の同期フラグ値によって示される。doneビットは、ストリーム記述子Aがストリームの最後ではないので、この時点では設定されない。B2がコミットされると、同期フラグ値は6に設定される。ここで、doneビットは、ストリームの全てのデータチャンクがコミットされ、ストリーム記述子Bがストリームの終端になると、設定することができる。
協調的プリフェッチ
開示される技術の局面は、スパースアクセラレータのタイルが使用可能な命令プリフェッチパイプラインアーキテクチャを提供し、これは、従来のCPUにおいて展開されるフルキャッシュコヒーレントソリューションで複雑にすることなく良好な性能を提供する。
開示される技術の局面は、コールドキャッシュミスオーバーヘッドを減らすために、プログラミングモデルのSPMDアスペクトの周りにプリフェッチパイプラインを作成することに関連する方法およびシステムを提供する。任意のコアからのプリフェッチ応答は、スパースアクセラレータ内のすべてのコアにブロードキャストされる。これらのプリフェッチ応答はコアのローカルキャッシュにコミットされる。これにより、他の非要求コアが、コアが命令またはデータを処理するのに利用可能になるであろう時間よりも前に命令またはデータのバンドルを得ることが可能となり、プロセスサイクルの欠落が完全に回避される。加えて、調停経路上のプリフェッチ要求フィルタリングが存在する可能性があり、これは、要求間で調停するための論理および/またはハードウェアベースの経路であって、タスク命令メモリをもたらし、これにより、冗長要求フェッチを回避することによりタスク命令メモリ帯域幅がブーストされる。
タスク命令メモリは、タイルアクセスコア(Tile Access Core:TAC)およびタイル実行コア(Tile Execute Core:TEC)によって実行可能なプログラムのセットを保持することができる。各コア内のプログラムカウンタ(program counter:PC)はタスク命令メモリへの物理オフセットである。タスク命令メモリは、ダイレクトメモリアクセスシステムに公開されるソフトウェア管理型メモリである。ソフトウェアは、ダイレクトメモリアクセスを用いて、タスク命令メモリ内のプログラムをポピュレートし、タスクをタイルに発行する間に適切なプログラムカウンタを用いることができる。タイルはシングルプログラムのマルチプルデータモードで動作するので、スパースアクセラレータの実行のいずれの時点でも、統計的にほとんどのタイルが同じプログラムを実行している可能性がある。これらのプログラムはさらに、1つの命令ループまたはコンパクトな命令ループから構成されてもよい。コンパクトな命令ループは、タイルメモリに適合させるのに充分小さいメモリ内の命令のサイズを参照することができる。プログラム自体は、サイズが小さくてもよく、例えば、数百個の命令バンドルであってもよく、プログラムは、ループ内で分岐するかまたは他のループに分岐するように枝分かれ可能な複数の分岐を有し得る。
これらおよび他の潜在的な特徴は、例えば図12および図13を参照して本明細書に記載されるような命令パイプラインによって利用され得る。命令バンドルがスパースアクセラレータによって受信されると、スパースアクセラレータは、受信した命令に関するプリフェッチ応答をスパースアクセラレータ内のタイルのすべてにブロードキャストするように構成されている。プリフェッチ応答は、各コアのローカルキャッシュにコミットされることで、非要求タイルが事前にバンドルを得ることを可能にし、ミスを完全に回避する。加えて、タスク命令メモリにつながる調停経路上でのプリフェッチ要求フィルタリングがいくつかの例で実装され得ることで、冗長な要求フェッチを回避することにより、タスク命令メモリ帯域幅をブーストする。
図12は、開示される技術の局面に従った、例示的なスパースアクセラレータのタイル1901と1902との間の接続についての論理図を示す。明確にするために、図12に関する構成要素、モジュールまたはソフトウェアブロックのすべてに符号が付されているわけではない。概して、以下の説明から明らかになるように、命令をプリフェッチし、命令に関する要求を集約し、命令または参照をフィルタリングして要求処理ユニットに最も近いメモリ位置に保持することにより、命令をより迅速に処理ユニットまたは処理コアに提供することができ、システムの効率を高めることができる。図12に関連する構成要素の追加の局面について、図13に関連付けて以下でさらに説明する。
概略図において、図12は、タスク命令メモリ(TimemバンクまたはTimemバンク)、命令バッファ(「iBuf」)、プリフェッチユニット、および命令ルータの局面を示す。図12には、タイルアクセスコア(TAC)1910およびタイル実行コア(TEC)1920を含むタイル1901が示されている。TAC1910はプリフェッチ1911およびiBuf1912を含み得る。同様に、TECは、プリフェッチユニット1921およびiBuf1922を含み得る。図12には、それぞれプリフェッチ1911およびiBuf1932と、プリフェッチユニット1941およびiBuf342とを含むTAC1930およびTEC1940を含むタイルコア1902も示されている。
図12にはさらに、Timem1951およびTimem1952ならびに命令ルータ1960が示されており、これらはフロアプランブロック1999内に論理的または物理的に含まれ得る。Timem1951およびTimem1952は、Timemからさらに下流にある位置から命令を要求するタイルコアと比べて、各タイルコアによるより迅速なアクセスのための命令をローカルに記憶することができる。また、フロアプランブロック1999およびその中のTimemバンクに対して下流にある命令バンドルをブロードキャストすることができる命令ブロードキャストバスも示されている。命令要求バス1992は、様々な構成要素からの命令についての要求を、それらの命令を要求する前に集約することができる。デシリアライザおよびシリアライザは、様々なバスに沿って命令を送信するために、例えば命令ブロードキャストバス1991から受取るために、または命令要求バス1992に送信される命令をシリアル化するために、命令を非シリアル化またはシリアル化することができる。
コアに対応するプリフェッチユニット1911またはプリフェッチユニット1912等のプリフェッチユニットは、ミスプログラムカウンタ(program counter:PC)(およびオーバーレイ/タスクID)から開始してプリフェッチウィンドウの終わりまで、Timemへの読出し要求を行なうことができる。プリフェッチウィンドウは、レジスタまたは他のメモリ領域を有するソフトウェアによって選択可能な期間である。例えば、プリフェッチウィンドウは、プリフェッチ深度変数で定義され得る。他のタイルからのプリフェッチ読出し要求は、隣接するフロアプランブロック1999によって転送することができる。これらの転送された要求は、隣接するタイルコア内のプリフェッチユニットによって行なわれるプリフェッチ要求で調停され得る。例えば、タイル1901およびタイル1902は互いに隣接していてもよい。いくつかの例では、コアのペアを、単一の命令要求バスまたは単一の命令ブロードキャストバスに割当てることができる。
いくつかのプリフェッチ命令要求バンクがタイル内に存在し得る。いくつかの例では、Timemバンクごとに1つのバスがあり得るが、これらは互いに独立して調停可能である。バスの独立した調停は、独立したバンク間にわたるヘッド・オブ・ライン・ブロッキング(head-of-line blocking)の回避を可能にし得る。
プリフェッチウィンドウから送信される要求は命令ルータ1960において受信することができる。命令ルータ1960は、別の命令ルータまたはターゲットTimemバンクに転送する前に、重複を除去するために、選択された要求をフィルタリングすることができる。フィルタリングは、コアがSPMDモードで動作している場合、命令要求帯域幅を潜在的に増加させることができる。
Timemバンクから読出された命令は、命令ブロードキャストバス上のすべてのタイルにブロードキャストすることができる。例えば、Timemバンクと同数の命令ブロードキャストバスが存在し得る。いくつかの例では、命令は命令バンドルとして送信することができる。命令グループは、バンドルに含まれる命令で構成されている。バンドルは、アラインされた「境界」上で開始する命令のシーケンスであり得る。命令バンドルは、プロセッサまたはコアの一定数のサイクルにわたって対応する命令ブロードキャストバス上でシリアル化され得る。いくつかの例では、システムの「定常状態」動作中等に、命令ブロードキャストバスの総帯域幅はサイクル当たり2つのバンドルであり得る。このような態様では、命令ブロードキャストバス1992は決してバックプレッシャーされない。
ブロードキャストバス上で受信された命令は命令ルータによって非シリアル化することができ、1つの命令がiBufの各々に転送される。定常状態では、システムは、プリフェッチインターフェイスからの最大2つまでの書込みおよび命令フェッチインターフェイスからの1つの読出しを維持することを要求され得る。プリフェッチは、受信命令を処理し、それがibufにコミットされるべきかまたはドロップされるべきかを判断する。
図13は、命令ルータ1960の追加の例示的な局面を示す。図13には、ラウンドロビン(round robin:RR)アービター1910、デイジーチェーン・ラウンドロビンアービター1920、ラウンドロビンアービター1930、フィルタ1940、シリアライザ1950および1951、デマルチプレクサ(demultiplexer:demux)1960、ならびに、デシリアライザ1971および1972が示されている。図13には、簡略化のためにラベル付けされていない他の局面および構成要素も示されている。
命令ルータ1960は、システム内のTimemバンクごとに独立した読出し要求バスを有し得る。ルータ1960は、隣接する命令ルータに転送される前に命令ブロードキャストバスの帯域幅に合致する速度で命令バンドルを調節して絞り得る。以下の説明では、要求が命令ルータ1960に提示される前に非シリアル化およびシリアル化が実行可能であると仮定され得る。
命令ルータ1960は、Timemバンクに対するコアの位置に応じて調停することができる。命令ルータ1960は、命令ルータ1960が調停しているインスタンスに基づいて送信元および宛先を選択するようにパラメータ化され得る。図13に示すデマルチプレクサ1960は、通信しているタイムバンクまたはシリアライザの数に従って設計することができる。
命令ルータ1860は、以下の例示的な送信元間で調停することができる。すなわち、命令ルータ1860の上流または上方にある命令ルータによって転送されるプリフェッチ読出し、命令ルータ1860の下流にある命令ルータによって転送されるプリフェッチ読出し、および、命令ルータ1860に接続されたコアが発信するプリフェッチ読出し、を含む。
demux(select(選択)は設計パラメータである)は、命令ルータに接続されたコアから生じる要求で調停するためにtop_pre_reqまたはbottom_pre_reqを選択する。この調停は、デイジーチェーン型RR調停方式を用いる。デイジーチェーン・ラウンドロビンアービター1920は、命令ブロードキャストバスの帯域幅に合致するように「x」サイクルごとに許可を与えることができる。PCが命令ブロードキャストバス上に見られるPCと合致する場合、調停されるのを待つ要求をドロップすることができる。これは、第1のレベルのフィルタリングとみなすことができる。
デイジーチェーン型調停の勝者は、Timemバンクに対する命令ルータ1860の位置に基づいて様々に処理することができる。例えば、Timemバンクが命令ルータの下方にある場合、デイジーチェーン調停の勝者は、フィルタ1940を通過した後、「最下部」の命令ルータに転送され得る。Timemバンクが命令ルータ1860より上にある場合、デイジーチェーン調停の勝者は、フィルタ1940を通過した後、最上位の命令ルータ1860に転送される。
Timemバンクが命令ルータ1860内にある場合、デイジーチェーン調停の勝者は、最下部の命令ルータによって転送された要求での1つ以上のレベルの調停を受ける。この場合、Timemバンクに達するために調停する2つのデイジーチェーン型ネットワークが存在し得る。命令ルータ1860の位置に応じて、チェーン同士のバランスがとれない可能性もある。チェーンの両側のコアに公平なアクセスが提供されることを確実にするために、修正されたRRアービターを用いることができる。第1レベルの調停と同様に、ブロードキャストバス上のPCに合致するいずれの要求もここでドロップされるだろう。これは第2のレベルのフィルタリングであるとみなすことができる。
上述したもののうちの全体的な勝者は、フィルタ440に渡され、当該フィルタ440は、着信要求を他の未処理の要求のうち1つと比較する。要求が未処理の要求のうちのいずれかと合致する場合、要求はドロップされる。これは第3のレベルのフィルタリングであるとみなすことができる。
さらに、このシステムのプログラム可能性は、各時点におけるフィルタリングが個別のプログラム可能なスイッチまたはソフトウェア制御可能なスイッチで有効/無効にされ得ることで、確実にすることができる。Timemアクセスバスは、システムをすべてのTimemバンクに接続し、それらが命令バンドルをTimemバンクに対して読出しおよび書込みすることを可能にするバスであり得る。Timemアクセスバスは、以下でさらに説明するように、読出し要求バス、読出し応答バス、書込み要求バス、および書込み応答バスといった4つのバスを有し得る。
読出し要求バスは、Timemバンクまで実行可能なデイジーチェーン型バスであり得る。各Timemバンクは、要求がそれをアドレス指定していない場合、隣接するTimemバンクに要求を転送することができる。要求がTimemバンクをアドレス指定している場合、当該要求はTimemバンクによって対応される。
読出し応答バスは、Timemバンクから読出された命令バンドルを送信することができるデイジーチェーン型バスであり得る。各Timemバンクにおいて、隣接するバンクからの着信命令と現在のバンクからの命令バンドルとの間にラウンドロビン調停が存在し得る。命令バンドルは「n」サイクルにわたってシリアル化されるので、バス許可が「n」サイクルにわたって保持される。
書込み要求バスは、Timemバンクまで実行可能なデイジーチェーン型バスであり得る。書込み要求は、例えば、2サイクルにわたってシリアル化することができる。各Timemバンクは、要求がアドレス指定していない場合、隣接するバンクにフリットを転送する。要求がTimemバンクをアドレス指定している場合、要求は、Timemバンクに書込まれる前にバンクによって非シリアル化される。
書込み応答バスは、Timemバンクからの書込み応答を中継するデイジーチェーン型バスであり得る。各Timemバンクにおいて、着信応答と現在のバンクからの応答との間に調停が存在する。単純なラウンドロビン調停を用いて、応答のうちの1つが許可または提供されることを可能にし得る。
読出し要求および書込み要求は、最大2∧qの未処理の読出し要求および書込み要求を符号化するための「q」ビットタグを有し得る。これら未処理の読出し要求および書込み要求は、バンクによる応答で返送され、応答に対応する要求を識別するための命令を提供する全体的なシステムまたは構成要素によって使用され得る。
エンドポイントが要求または応答を受入れることができない場合、バスは「バックプレッシャー」可能であり、バスは、当該バスが含む命令またはデータを転送することができない場合、当該バスを介して送信されるべきバックログが蓄積する。加えて、バスは調停損失によりバックプレッシャーされ得る。これは、Timemアクセスが概して低帯域幅アクセスであるので、システム全体において許容可能であり得る。
タイル命令メモリ(Timem)は図12で説明したタイルコアによって共有することができる。
本開示の局面は、デジタル回路、コンピュータ可読記憶媒体において、1つ以上のコンピュータプログラムとして、または上述の1つ以上の組合せとして実装され得る。コンピュータ可読記憶媒体は、例えば、クラウドコンピューティングプラットフォームによって実行可能であり有形ストレージデバイス上に記憶される1つ以上の命令として、非一時的であり得る。
計算概要
本明細書では、「ように構成される」という語句は、コンピュータシステム、ハードウェア、またはコンピュータプログラム、エンジン、もしくはモジュールの一部に関連する様々な文脈で用いられる。システムが1つ以上の動作を実行するように構成されると表現される場合、これは、システムが、動作中にシステムに1つ以上の動作を実行させる、システム上にインストールされた適切なソフトウェア、ファームウェアおよび/またはハードウェアを有することを意味する。いくつかのハードウェアが1つ以上の動作を実行するように構成されると表現される場合、これは、ハードウェアが、動作時に、入力を受信し、入力に従って1つ以上の動作に対応する出力を生成する1つ以上の回路を含むことを意味する。コンピュータプログラム、エンジン、またはモジュールが1つ以上の動作を実行するように構成されると表現される場合、これは、コンピュータプログラムが、1つ以上のコンピュータによって実行されたときに、1つ以上のコンピュータに1つ以上の動作を実行させる1つ以上のプログラム命令を含むことを意味する。
添付の図面に示されるとともに添付の特許請求の範囲に記載される動作は、特定の順序で示されているが、これらの動作は、図示される順序とは異なる順序で実行され得ること、ならびに、いくつかの動作は、省略され得ること、複数回実行され得ること、および/または他の動作と並行して実行され得ることが理解される。さらに、様々な動作を実行するように構成された様々なシステム構成要素の分離は、構成要素が分離されることを必要とするものとして理解されるべきではない。説明される構成要素、モジュール、プログラムおよびエンジンは、単一のシステムとして一緒に一体化され得るか、または複数のシステムの一部であり得る。
本明細書において実質的に任意の複数形および/または単数形の用語(用語「要素」は、任意のシステム、構成要素、データ等の代用である)、例えば、「1つの/当該要素」、「1つ以上の要素」、「複合要素」、「複数の要素」、「少なくとも1つの要素」等を使用する場合、当業者であれば、記載される文脈および/または用途に合わせて適宜、複数形から単数形に、および/または単数形から複数形に変換し得る。様々な単数形/複数形の置換は、明確に指定されない限り、明瞭にするために、限定することなく本明細書に明確に記載され得る。
本開示の局面は、従来のCPUにおいて展開されるフルキャッシュコヒーレントソリューションで複雑にすることなく良好な性能を提供する命令プリフェッチパイプラインアーキテクチャを用いる方法、システムおよび装置を含む。
開示される技術の局面は、命令メモリ(TiMem)、命令バッファ(iBuf)、プリフェッチユニット、および命令ルータを含む命令プリフェッチパイプラインを構築するために使用され得る構成要素に関する。
本開示の局面は、例えば、以下のような、XPUのタイルの予想される挙動または既知の挙動と併せて存在し得る特定の特性に関連し得る。タイルは、シングルプログラムマルチプルデータ(Single Program Multiple Data:SPMD)モードで動作すると予想され得るか、いずれかの所与の時点で、統計的にほとんどのタイルが同じプログラムを実行していると予想され得るか、プログラムは1つ以上のコンパクトなループから構成され得るか、プログラムのサイズは、例えば数百バンドルのように小さくされ得るか、または、プログラムは、枝分かれし得る複数の分岐を有し得る。開示される技術は、これらの特性または関連する特性を活用することができ、フルキャッシュベースのソリューションよりも複雑度が低い。
開示される技術の局面はハードウェア回路を含む。ハードウェア回路は複数のタイルを含み得る。各タイルは、複数のタイル内の他のタイルと並列に動作するように構成され、複数のタイルの各タイルは、処理コアと、プリフェッチユニットと、命令バッファとを含み、ハードウェア回路はさらに、上流の入力から下流の宛先にそれぞれのデータをストリーミングするように構成された複数のデータ処理レーンと、複数のタスク命令メモリとを含み、複数のタスク命令メモリの各タスク命令メモリは、シーケンスに配置され、命令ルータを介して複数のタイルのうちの1つ以上のタイルに結合される。タスク命令メモリは、下流のシーケンスに配置することができる。各タイルはタイルアクセスコアを含み得るとともに、各タイル内に含まれるプリフェッチユニットはタイルアクセスコア内に含まれ得る。各タイルはタイル実行コアを含み得るとともに、各タイル内に含まれるプリフェッチユニットはタイル実行コア内に含まれ得る。ハードウェア回路は、命令ブロードキャストバスおよび命令要求バスを含み得る。命令ブロードキャストバスは独立したデータレーンを含み得る。独立したデータレーンの数はタスク命令メモリの数に対応し得る。
命令要求バスは、独立したデータレーンを含み得る。独立したデータレーンの数はタスク命令メモリの数に対応する。タスク命令メモリが受信した命令は、命令ブロードキャストバス上でリンクされたすべてのタイルにブロードキャストされ得る。プリフェッチは、プリフェッチウィンドウ中に少なくとも1つのタスク命令メモリに対して要求を行なうように構成され得る。プリフェッチウィンドウは、ソフトウェアによって選択可能または調整可能であり得る。ハードウェア回路は、命令ルータをさらに含み得る。命令ルータは、プリフェッチ読出し要求を含む要求を調停するように構成されたラウンドロビンアービターを含み得る。命令バッファは、タイルアクセスコアまたはタイル実行コアのための命令を記憶することができる。ハードウェア回路は、シングルインストラクション・マルチプルデータプロセッサとして構成することができる。ハードウェア回路は、マルチプルインストラクション・マルチプルデータプロセッサとして構成することができる。ハードウェア回路はタスク命令メモリアクセスバスを含み得る。タスク命令メモリアクセスバスは、読出し要求バス、読出し応答バス、書込み要求バス、および書込み応答バスを含み得る。
開示される技術の局面はTPUを含む。TPUは、ハードウェア回路と、ハードウェア回路に結合された命令ブロードキャストバスとを含み得る。命令ブロードキャストバスは、ハードウェア回路に命令をプッシュするように構成されている。ハードウェア回路は複数のタイルを含み得るとともに、各タイルは、複数のタイル内の他のタイルと並列に動作するように構成することができ、複数のタイルの各タイルは、処理コア、プリフェッチユニット、および命令バッファを含み得る。ハードウェア回路はさらに、それぞれのデータを上流の入力から下流の宛先にストリーミングするように構成された複数のデータ処理レーンと、複数のタスク命令メモリとを含み得る。複数のタスク命令メモリの各タスク命令メモリは、シーケンスに配列され、命令ルータを介して複数のタイルのうちの1つ以上のタイルに結合される。TPUはさらに、ハードウェア回路に結合された命令要求バスを含み得るとともに、命令要求バスは、命令についての要求を受取るように構成され得る。
開示される技術の局面は、SIMD(single instruction multiple data)処理ユニットによって命令をプリフェッチまたは提供するための方法を含む。当該方法は、SIMD処理ユニットの複数のタイルから命令についての要求を受取るステップと、同じ命令についての要求を重複排除するための命令についての要求をフィルタリングして、要求の第1のセットを生成するステップと、要求の第1のセットに応答して命令のセットを生成するステップと、計算ユニットからSIMD処理ユニットのタスク命令メモリに命令のセットを提供するステップと、タスク命令メモリに命令のセットを記憶するステップと、命令ルータを介してプリフェッチユニットによって命令のセットからの命令にアクセスするステップとを含み得る。SIMD処理ユニットは複数のタイルを含み得る。各タイルは、複数のタイル内の他のタイルと並列に動作するように構成され、複数のタイルの各タイルは、処理コアと、プリフェッチユニットと、命令バッファとを含む。受信するステップは第1の処理クロックサイクルで行なわれ得るとともに、提供するステップは第2の処理クロックサイクルで行なわれる。第1の処理クロックサイクルは第2の処理クロックサイクルの前に行なわれ得る。
概して、本明細書では、「ストリーム転送」と称される、オフコアメモリとコアローカルメモリとの間の非同期データ移動のためのハードウェア/ソフトウェアインターフェイスと、ストリーム順序付けモデルとが開示される。ストリーム転送は、ソフトウェアが、共通のデータ移動パターン、具体的には、スパースワークロードで見られるパターン、をより効率的に表現することを可能にする。ストリームに属するストリーム命令は順序通りに処理される。間接ストリーム命令の場合、オフセットリスト内のオフセット要素が順序通りに処理される。同期フラグは、ストリームについての単調な段階的進行を示すように更新される。
本開示の一局面が提供する方法は、オフコアメモリとコアローカルメモリとの間で転送されているデータの進行を1つ以上のプロセッサで識別するステップと、コアローカルメモリがデータの送信元である場合にコアローカルメモリからの読出しを1つ以上のプロセッサで識別するステップとを含み、読出しは、順序通りに送信元に発行されるとともに送信元によって順不同で対応され、当該方法はさらに、コアローカルメモリがデータについての宛先である場合にコアローカルメモリへの書込みを1つ以上のプロセッサで識別するステップを含み、書込みは、宛先に順序通りに発行されるとともに宛先によって順不同にコミットされ、当該方法はさらに、オフコアメモリがデータの送信元である場合にオフコアメモリからの読出しと、オフコアメモリがデータについての宛先である場合にオフコアメモリへの書込みとのために間接的なスキャッタ/ギャザーメモリアクセスに基づいて、1つ以上のプロセッサでオフコアメモリにアクセスするステップを含む。
ある例では、転送されているデータの進行を識別するステップはさらに、コアローカル同期フラグを用いるステップを含む。別の例では、当該方法は、スカラーフェンス命令に基づいてバリアへのメモリアクセスを1つ以上のプロセッサで選択するステップをさらに含む。さらに別の例では、間接的なスキャッタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスするステップはさらに、レジスタファイルまたはコアローカルメモリから間接アドレスの発信元を得るステップを含む。さらに別の例では、当該方法はさらに、コアローカルメモリ内において1つ以上のプロセッサで循環バッファリングするステップを含む。
さらに別の例では、当該方法はさらに、データ転送についての単調な段階的進行を示すためにコアローカル同期フラグを1つ以上のプロセッサで更新するステップを含む。さらに別の例では、当該方法は、コアローカルメモリからのすべての読出しが発行されたときに1つ以上のプロセッサでデータ転送を終了させるステップをさらに含む。さらに別の例では、当該方法はさらに、コアローカルメモリへのすべての書込みがコミットされたときに1つ以上のプロセッサでデータ転送を終了させるステップを含む。
本開示の別の局面は、1つ以上のプロセッサと、当該1つ以上のプロセッサに結合されるとともに命令を記憶する1つ以上のストレージデバイスとを含むシステムを提供する。当該命令は、当該1つ以上のプロセッサによって実行されると、当該1つ以上のプロセッサにオフコアメモリとコアローカルメモリとの間でデータを転送するための動作を実行させる。当該動作は、オフコアメモリとコアローカルメモリとの間で転送されているデータの進行を識別する動作と、コアローカルメモリがデータの送信元である場合にコアローカルメモリからの読出しを識別する動作とを含み、読出しは、順序通りに送信元に発行されるとともに送信元によって順不同で対応され、当該動作はさらに、コアローカルメモリがデータの宛先である場合にコアローカルメモリへの書込みを識別する動作を含み、書込みは、順序通りに宛先に発行されるとともに宛先によって順不同によってコミットされ、当該動作はさらに、オフコアメモリがデータの送信元である場合にオフコアメモリからの読出しと、オフコアメモリがデータについての宛先である場合にオフコアメモリへの書込みとのために間接的なスキャッタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスする動作を含む。
ある例では、転送されているデータの進行を識別する動作はさらに、コアローカル同期フラグを用いる動作を含む。別の例では、当該動作はさらに、スカラーフェンス命令に基づいてバリアへのメモリアクセスを選択する動作を含む。さらに別の例では、間接的なスキャッタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスする動作はさらに、レジスタファイルまたはコアローカルメモリから間接アドレスの発信元を得る動作を含む。さらに別の例では、当該動作はさらに、コアローカルメモリ内において循環バッファリングする動作を含む。
さらに別の例では、当該動作はさらに、データ転送についての単調な段階的進行を示すためにコアローカル同期フラグを更新する動作を含む。さらに別の例では、当該動作はさらに、コアローカルメモリからのすべての読出しが発行されたときにデータ転送を終了させる動作を含む。さらに別の例では、当該動作はさらに、コアローカルメモリへのすべての書込みがコミットされたときにデータ転送を終了させる動作を含む。
本開示のさらに別の局面は、1つ以上のプロセッサによって実行されると、当該1つ以上のプロセッサに、オフコアメモリとコアローカルメモリとの間でデータを転送するための動作を実行させる命令を記憶するための非一時的コンピュータ可読記憶媒体を提供する。当該動作は、オフコアメモリとコアローカルメモリとの間で転送されているデータの進行を識別する動作と、コアローカルメモリがデータの送信元である場合にコアローカルメモリからの読出しを識別する動作とを含み、読出しは、送信元に順序通りに発行されるとともに送信元によって順不同で対応され、当該動作はさらに、コアローカルメモリがデータについての宛先である場合にコアローカルメモリへの書込みを識別する動作を含み、書込みは、宛先に順序通りに発行されるとともに宛先によって順不同でコミットされ、当該動作はさらに、オフコアメモリがデータの送信元である場合にオフコアメモリからの読出しと、オフコアメモリがデータについての宛先である場合にオフコアメモリへの書込みとのために間接的なスキャッタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスする動作を含む。
ある例では、間接的なスキャッタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスする動作はさらに、レジスタファイルまたはコアローカルメモリから間接アドレスの発信元を得る動作を含む。別の例では、当該動作はさらに、コアローカルメモリ内において循環バッファリングする動作を含む。さらに別の例では、当該動作はさらに、データ転送についての単調な段階的進行を示すために同期フラグを更新する動作を含む。
本開示の局面は、プロセッサの複数のデータ処理レーン間にわたってシングルインストラクション・マルチプルデータ(SIMD)データ依存演算を実行するためのクロスレーン処理ユニット(XPU)を対象とする。データ依存演算ごとの演算特有回路を物理的に製作するのではなく、XPUは、個々の動作を実行するための処理セルと、XPUにおいてスタックされたネットワークとして配置されるクロスバーとを構成する入力信号に応答して様々な動作を実行するように構成され得る。各処理セルは、複数のデータ処理レーン間にわたってデータを受信および処理することができる。本開示の局面は、ソートのために受信した入力ベクトル内の重複要素の重複カウントを計算しつつベクトルソートを実行するようにXPUを構成する動作を含み、ソートおよび重複カウントのために別々にXPUを構成する必要性をなくす。XPUは、スパースベクトルまたはスパース行列等のスパースデータ構造の処理を加速させた状態で、密行列等の密データ構造の計算を補完するハードウェア回路の一部として実装され得る。
本開示の局面はハードウェア回路を含む。当該ハードウェア回路は複数のステージを含み、各々のステージはクロスバーと、2つ以上のセルとを含み、当該ハードウェア回路はさらに、複数のステージの複数のセルおよび複数のクロスバーを介して上流の入力から下流の宛先にそれぞれのデータをストリーミングする複数のデータ処理レーンを含み、当該ハードウェア回路は、複数のデータ処理レーンに沿って上流の入力から入力データと、第1の動作を実行するための第1の命令とを受信するように構成され、第1の命令の受信に応答して、ステージごとに、それぞれの第2の命令をステージのそれぞれの処理セルに送信するように構成され、各セルは、それぞれのデータ処理レーンからの入力の受信に応答してそれぞれの第2の動作を実行するように構成され、当該ハードウェア回路はさらに、当該ステージのためのそれぞれのクロスバーにそれぞれの第3の命令を送信するように構成され、当該クロスバーは、ステージの各セルからの出力を複数のデータ処理レーンに沿って次のステージのセルに置換するように構成され、受信した入力データを、複数のデータ処理レーンおよびそれぞれの第2の動作を実行するように構成された複数のセルに沿って処理することによって第1の動作を実行するように構成される。
本開示の局面が含むシステムは、ハードウェア回路を含み、当該ハードウェア回路は、各々がクロスバーおよび2以上のセルを含む複数のステージと、複数のステージの複数のセルおよび複数のクロスバーを介して上流の入力から下流の宛先にそれぞれのデータをストリーミングする複数のデータ処理レーンとを含み、ハードウェア回路は、複数のデータ処理レーンに沿った上流の入力からの入力データと、第1の動作を実行するための第1の命令とを受信するように構成され、第1の命令の受信に応答して、ステージごとに、ステージのそれぞれの処理セルにそれぞれの第2の命令を送信するように構成され、各セルは、それぞれのデータ処理レーンからの入力の受信に応答してそれぞれの第2の動作を実行するように構成され、ハードウェア回路はさらに、ステージのためのそれぞれのクロスバーにそれぞれの第3の命令を送信するように構成され、クロスバーは、ステージの各セルからの出力を複数のデータ処理レーンに沿って次のステージのセルに置換するように構成され、受信した入力データを、複数のデータ処理レーンおよびそれぞれの第2の動作を実行するように構成された複数のセルに沿って処理することによって第1の動作を実行するように構成される。
本開示の局面は、コンピュータによって実装される方法を含む。当該コンピュータによって実装される方法は、各々がクロスバーおよび2つ以上のセルを含む複数のステージと、それぞれのデータを上流の入力から下流の宛先にストリーミングする複数のデータ処理レーンとを含むハードウェア回路によって、複数のステージの複数のセルおよび複数のクロスバーを介して、複数のデータ処理レーンに沿った上流の入力からの入力データと、第1の動作を実行するための第1の命令とを受信するステップと、第1の命令の受信に応答して、ステージごとに、ハードウェア回路によって、それぞれの第2の命令をステージのそれぞれの処理セルに送信するステップとを含み、各セルは、それぞれのデータ処理レーンからの入力の受信に応答してそれぞれの第2の動作を実行するように構成され、当該コンピュータによって実装される方法はさらに、ハードウェア回路によって、それぞれの第3の命令をステージのためのそれぞれのクロスバーに送信するステップを含み、クロスバーは、ステージの各セルからの出力を、複数のデータ処理レーンに沿って次のステージのセルに置換するように構成され、当該コンピュータによって実装される方法はさらに、ハードウェア回路によって、複数のデータ処理レーンおよびそれぞれの第2の動作を実行するように構成された複数のセルに沿って、受信した入力データを処理することにより、第1の動作を実行するステップを含む。
本開示の局面は以下の特徴のうちの1つ以上を含み得る。いくつかの例では、本開示の局面は、以下の特徴のすべてを組合わせて含む。
各セルは、セルを通過するそれぞれのデータ処理レーンからそれぞれの第1の入力オペランドを受信し、セルの上流にあるステージのそれぞれのクロスバーからそれぞれの第2の入力オペランドを受信するように構成される。
複数のデータ処理レーンのデータの下流の宛先はベクトル処理ユニットであり、当該ベクトル処理ユニットは、ハードウェア回路の出力データに対してシングルインストラクション・マルチプルデータベクトル演算を実行するように構成される。
セルの各々は、1つ以上の受信された命令に応答して、複数の所定のプリミティブ演算のうちの1つ以上を実行するように構成される。ハードウェア回路はさらに、複数の制御セルを含み、それぞれの第2の命令をそれぞれの処理セルに送信する際に、ハードウェア回路は、各々の制御セルによって、第1の命令によって指定された第1の動作に基づいて、それぞれの制御信号を生成して、各々の処理セルに送信するように構成される。
各制御セルによってそれぞれの制御信号を生成して送信する際に、ハードウェア回路は、処理セルが入っているステージおよび処理セルを通過するデータ処理レーンのうちの少なくとも1つに基づいて、各処理セルに、それぞれの算術演算、比較、およびバイパス演算のうちの1つを実行させるためのそれぞれの制御信号を生成するように構成される。
複数のセルおよび複数のクロスバーは、複数のステージおよび複数のデータ処理レーンにわたって接続されたセルの処理ネットワークを形成し、接続されたセルの処理ネットワークは、入力データを受信するとともに、当該入力データに対して第1の動作を実行することに従ってそれぞれの出力データを生成するように構成される。
接続されたセルの処理ネットワークは、組合わされたベクトルソートおよび重複するカウント動作を実行するように構成され、組合わされた動作は、処理ネットワークによって、要素の入力ベクトルを受取る動作と、処理ネットワークによって、出力として、ソートされた出力ベクトルと、入力ベクトル内の重複要素のカウントを指定するデータとを生成する動作とを含む。入力データはスパースベクトルデータを含み、ハードウェア回路は、それぞれの第2の命令および第3の命令を送信した後、ベクトル走査、ベクトル加算、ベクトルソート、またはベクトル重複カウントのうちの1つを実行するように構成される。
特に規定されない限り、上述の代替例は相互排他的ではなく、特有の利点を達成するために様々な組合わせで実装され得る。上述の特徴のこれらおよび他の変形例および組合わせは、添付の特許請求の範囲によって定義される主題から逸脱することなく利用することができるので、例についての上述の記載は、添付の特許請求の範囲によって定義される主題を限定するものではなく、例示するものとして解釈されるべきである。加えて、本明細書に記載の例の提示、ならびに「等(such as)」、「含む(including)」等の語句は、特許請求の範囲の主題を特定の例に限定するものとして解釈されるべきではなく、むしろ、上記の例は、多くの実現可能な実装例のうちの1つのみを例示することを意図している。さらに、様々な図面中の同じ参照番号は同じまたは同様の要素を識別し得る。