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

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

▶ グーグル インコーポレイテッドの特許一覧

特表2024-539763ストリーミング転送および順序付けモデル
<>
  • 特表-ストリーミング転送および順序付けモデル 図1
  • 特表-ストリーミング転送および順序付けモデル 図2
  • 特表-ストリーミング転送および順序付けモデル 図3A
  • 特表-ストリーミング転送および順序付けモデル 図3B
  • 特表-ストリーミング転送および順序付けモデル 図4
  • 特表-ストリーミング転送および順序付けモデル 図5
  • 特表-ストリーミング転送および順序付けモデル 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-30
(54)【発明の名称】ストリーミング転送および順序付けモデル
(51)【国際特許分類】
   G06F 17/16 20060101AFI20241023BHJP
   G06F 9/52 20060101ALI20241023BHJP
【FI】
G06F17/16 P
G06F9/52 150A
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024529413
(86)(22)【出願日】2022-06-16
(85)【翻訳文提出日】2024-05-16
(86)【国際出願番号】 US2022033710
(87)【国際公開番号】W WO2023183015
(87)【国際公開日】2023-09-28
(31)【優先権主張番号】17/722,782
(32)【優先日】2022-04-18
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】63/322,285
(32)【優先日】2022-03-22
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ナガラジャン,ラフル
(72)【発明者】
【氏名】ジェイコブ,アーピス・チャッコ
(72)【発明者】
【氏名】スブラマニアン,スビナイ
(72)【発明者】
【氏名】ハリハラン,ヘマ
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056AA04
5B056BB38
5B056BB71
5B056CC01
(57)【要約】
一般に、本明細書において、「ストリーム転送」として参照される、オフコアメモリとコアローカルメモリとの間の非同期的データ移動のためのハードウェア/ソフトウェアインターフェース、およびストリーム順序付けモデルが開示される。ストリーム転送は、ソフトウェアが、特にスパース作業負荷に見られるものなどの、共通のデータ移動パターンをより効率的に表現することを可能にする。ストリームに属する直接ストリーム命令は、順番に処理される。間接ストリーム命令については、オフセットリスト内のオフセット要素が、順番に処理される。ストリームの単調な増分的進行を示すために、syncフラグが更新される。
【特許請求の範囲】
【請求項1】
方法であって、
1つまたは複数のプロセッサが、オフコアメモリとコアローカルメモリとの間で転送されているデータの進行を識別することと、
1つまたは複数のプロセッサが、コアローカルメモリがデータのソースであるときに前記コアローカルメモリからの読み出しを識別することと
を含み、
読み出しは、前記ソースに順番に発行され、前記ソースによって順不同でサービスされ、
前記方法は、
前記1つまたは複数のプロセッサが、前記コアローカルメモリが前記データの宛先であるときに前記コアローカルメモリへの書き込みを識別することをさらに含み、
書き込みは、前記宛先に順番に発行され、前記宛先によって順不同でコミットされ、
前記方法は、
前記1つまたは複数のプロセッサが、
前記オフコアメモリが前記データの前記ソースであるときは前記オフコアメモリからの読み出しのために、および
前記オフコアメモリが前記データの前記宛先であるときは前記オフコアメモリへの書き込みのために、
間接的スキャタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスすることをさらに含む、方法。
【請求項2】
前記転送されているデータの進行を識別することは、コアローカル同期フラグを使用することをさらに含む、請求項1に記載の方法。
【請求項3】
前記1つまたは複数のプロセッサが、スカラーフェンス命令に基づいてバリアするためのメモリアクセスを選択することをさらに含む、請求項1または請求項2に記載の方法。
【請求項4】
間接的スキャタ/ギャザーメモリアクセスに基づいて前記オフコアメモリにアクセスすることは、レジスタファイルから、または、前記コアローカルメモリから間接アドレスをソーシングすることをさらに含む、先行する請求項のいずれか1項に記載の方法。
【請求項5】
前記1つまたは複数のプロセッサが、前記コアローカルメモリ内で循環バッファリングすることをさらに含む、先行する請求項のいずれか1項に記載の方法。
【請求項6】
前記1つまたは複数のプロセッサが、前記データ転送の単調な増分的進行を示すためにコアローカル同期フラグを更新することをさらに含む、先行する請求項のいずれか1項に記載の方法。
【請求項7】
前記1つまたは複数のプロセッサが、前記コアローカルメモリからのすべての前記読み出しが発行されたときに、前記データ転送を終了することをさらに含む、先行する請求項のいずれか1項に記載の方法。
【請求項8】
前記1つまたは複数のプロセッサが、前記コアローカルメモリへのすべての書き込みがコミットされたときに、前記データ転送を終了することをさらに含む、先行する請求項のいずれか1項に記載の方法。
【請求項9】
システムであって、
1つまたは複数のプロセッサと、
前記1つまたは複数のプロセッサに結合されており、前記1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、オフコアメモリとコアローカルメモリとの間でデータを転送するための動作を実施させる命令を格納している1つまたは複数の記憶デバイスと
を備え、前記動作は、
前記オフコアメモリと前記コアローカルメモリとの間で転送されているデータの進行を識別することと、
コアローカルメモリが前記データのソースであるときに前記コアローカルメモリからの読み出しを識別することと
を含み、
読み出しは、前記ソースに順番に発行され、前記ソースによって順不同でサービスされ、
前記コアローカルメモリが前記データの宛先であるときに前記コアローカルメモリへの書き込みを識別することを含み、
書き込みは、前記宛先に順番に発行され、前記宛先によって順不同でコミットされ、
前記オフコアメモリが前記データの前記ソースであるときは前記オフコアメモリからの読み出しのために、および、前記オフコアメモリが前記データの前記宛先であるときは前記オフコアメモリへの書き込みのために、間接的スキャタ/ギャザーメモリアクセスに基づいて前記オフコアメモリにアクセスすることを含む、システム。
【請求項10】
前記転送されているデータの進行を識別することは、コアローカル同期フラグを使用することをさらに含む、請求項9に記載のシステム。
【請求項11】
前記動作は、スカラーフェンス命令に基づいてバリアするためのメモリアクセスを選択することをさらに含む、請求項9または請求項10に記載のシステム。
【請求項12】
間接的スキャタ/ギャザーメモリアクセスに基づいて前記オフコアメモリにアクセスすることは、レジスタファイルから、または、前記コアローカルメモリから間接アドレスをソーシングすることをさらに含む、先行する請求項9~請求項11のいずれか1項に記載のシステム。
【請求項13】
前記動作は、前記コアローカルメモリ内で循環バッファリングすることをさらに含む、先行する請求項9~請求項12のいずれか1項に記載のシステム。
【請求項14】
前記動作は、前記データ転送の単調な増分的進行を示すためにコアローカル同期フラグを更新することをさらに含む、先行する請求項9~請求項13のいずれか1項に記載のシステム。
【請求項15】
前記動作は、前記コアローカルメモリからのすべての前記読み出しが発行されたときに、前記データ転送を終了することをさらに含む、先行する請求項9~請求項14のいずれか1項に記載のシステム。
【請求項16】
前記動作は、前記コアローカルメモリへのすべての書き込みがコミットされたときに、前記データ転送を終了することをさらに含む、先行する請求項9~請求項15のいずれか1項に記載のシステム。
【請求項17】
1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、オフコアメモリとコアローカルメモリとの間でデータを転送するための動作を実施させる命令を格納するための非一時的コンピュータ可読記憶媒体であって、前記動作は、
前記オフコアメモリと前記コアローカルメモリとの間で転送されているデータの進行を識別することと、
コアローカルメモリが前記データのソースであるときに前記コアローカルメモリからの読み出しを識別することと
を含み、
読み出しは、前記ソースに順番に発行され、前記ソースによって順不同でサービスされ、
前記コアローカルメモリが前記データの宛先であるときに前記コアローカルメモリへの書き込みを識別することを含み、
書き込みは、前記宛先に順番に発行され、前記宛先によって順不同でコミットされ、
前記オフコアメモリが前記データの前記ソースであるときは前記オフコアメモリからの読み出しのために、および、前記オフコアメモリが前記データの前記宛先であるときは前記オフコアメモリへの書き込みのために、間接的スキャタ/ギャザーメモリアクセスに基づいて前記オフコアメモリにアクセスすることを含む、非一時的コンピュータ可読記憶媒体。
【請求項18】
間接的スキャタ/ギャザーメモリアクセスに基づいて前記オフコアメモリにアクセスすることは、レジスタファイルから、または、前記コアローカルメモリから間接アドレスをソーシングすることをさらに含む、請求項17に記載の非一時的コンピュータ可読媒体。
【請求項19】
前記動作は、前記コアローカルメモリ内で循環バッファリングすることをさらに含む、請求項17または請求項18に記載の非一時的コンピュータ可読媒体。
【請求項20】
前記動作は、前記データ転送の単調な増分的進行を示すために前記同期フラグを更新することをさらに含む、先行する請求項17~請求項19のいずれか1項に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【背景技術】
【0001】
関連出願の相互参照
本出願は、2022年3月22日に出願された米国仮特許出願第63/322,285号の出願日の利益を主張する、2022年4月18日に出願された米国特許出願第17/722,782号の継続出願であり、それらの開示は、参照により本明細書に組み込まれる。
【0002】
背景
ディープニューラルネットワーク(DNN)は、典型的には、多大なメモリアクセスを生成し、これらのアクセスの大きさは、コンパイル時に決定することができる。スパース加速器アーキテクチャは、他のスパース計算を加速させるためのクリーンな構造的基礎を提供しながら、埋め込み層計算を加速させることを目標とする。スパース作業負荷は、典型的には、スキャタ/ギャザータイプのメモリアクセス、特に、大きいパラメータ空間からの小さいスキャタ/ギャザーメモリアクセスを呈する埋め込みを使用する。さらに、メモリアクセスパターンおよびアクセスサイズは、実行時に入力スパース性パターンによって決定することができる。
【0003】
しかしながら、これらの特性によって、ランダムメモリアクセスおよびメモリ帯域幅の非功利的な利用が、効率的なプリフェッチングを不可能にする可能性がある。各計算のためにデータを再使用することが制限されていることによって、プロセッサが、単純にデータがフェッチされるのを待つときに機能することが不可能になる場合がある。オフチップメモリにアクセスするための長い待ち時間、制御フロー、およびデータフローの不規則性が、この効果をさらに悪化させる。ランダムメモリアクセスの動的な性質はまた、ダブルバッファリングのような効率的なソフトウェア技法にも役立たない。
【発明の概要】
【0004】
簡潔な概要
一般に、本明細書において、「ストリーム転送」として参照される、オフコアメモリとコアローカルメモリとの間の非同期的データ移動のためのハードウェア/ソフトウェアインターフェース、およびストリーム順序付けモデルが開示される。ストリーム転送は、ソフトウェアが、特にスパース作業負荷に見られるものなどの、共通のデータ移動パターンをより効率的に表現することを可能にする。ストリームに属するストリーム命令は、順番に処理される。間接ストリーム命令については、オフセットリスト内のオフセット要素が、順番に処理される。ストリームの単調な増分的進行を示すために、syncフラグが更新される。
【0005】
本開示の一態様は、方法であって、1つまたは複数のプロセッサが、オフコアメモリとコアローカルメモリとの間で転送されているデータの進行を識別することと、1つまたは複数のプロセッサが、コアローカルメモリがデータのソースであるときにコアローカルメモリからの読み出しを識別することとを含み、読み出しは、ソースに順番に発行され、ソースによって順不同でサービスされ、本方法は、1つまたは複数のプロセッサが、コアローカルメモリがデータの宛先であるときにコアローカルメモリへの書き込みを識別することをさらに含み、書き込みは、宛先に順番に発行され、宛先によって順不同でコミットされ、本方法は、1つまたは複数のプロセッサが、オフコアメモリがデータのソースであるときはオフコアメモリからの読み出しのために、および、オフコアメモリがデータの宛先であるときはオフコアメモリへの書き込みのために、間接的スキャタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスすることをさらに含む、方法を提供する。
【0006】
一例において、転送されているデータの進行を識別することは、コアローカル同期フラグを使用することをさらに含む。別の例において、本方法は、1つまたは複数のプロセッサが、スカラーフェンス命令に基づいてバリアするためのメモリアクセスを選択することをさらに含む。さらに別の例において、間接的スキャタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスすることは、レジスタファイルから、または、コアローカルメモリから間接アドレスをソーシングすることをさらに含む。さらに別の例において、本方法は、1つまたは複数のプロセッサが、コアローカルメモリ内で循環バッファリングすることをさらに含む。
【0007】
さらに別の例において、本方法は、1つまたは複数のプロセッサが、データ転送の単調な増分的進行を示すためにコアローカル同期フラグを更新することをさらに含む。さらに別の例において、本方法は、1つまたは複数のプロセッサが、コアローカルメモリからのすべての読み出しが発行されたときに、データ転送を終了することをさらに含む。さらに別の例において、本方法は、1つまたは複数のプロセッサが、コアローカルメモリへのすべての書き込みがコミットされたときに、データ転送を終了することをさらに含む。
【0008】
本開示の別の態様は、システムであって、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合されており、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、オフコアメモリとコアローカルメモリとの間でデータを転送するための動作を実施させる命令を格納している1つまたは複数の記憶デバイスとを含む、システムを提供する。動作は、オフコアメモリとコアローカルメモリとの間で転送されているデータの進行を識別することと、コアローカルメモリがデータのソースであるときにコアローカルメモリからの読み出しを識別することとを含み、読み出しは、ソースに順番に発行され、ソースによって順不同でサービスされ、動作は、コアローカルメモリがデータの宛先であるときにコアローカルメモリへの書き込みを識別することをさらに含み、書き込みは、宛先に順番に発行され、宛先によって順不同でコミットされ、動作は、オフコアメモリがデータのソースであるときはオフコアメモリからの読み出しのために、および、オフコアメモリがデータの宛先であるときはオフコアメモリへの書き込みのために、間接的スキャタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスすることをさらに含む。
【0009】
一例において、転送されているデータの進行を識別することは、コアローカル同期フラグを使用することをさらに含む。別の例において、動作は、スカラーフェンス命令に基づいてバリアするためのメモリアクセスを選択することをさらに含む。さらに別の例において、間接的スキャタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスすることは、レジスタファイルから、または、コアローカルメモリから間接アドレスをソーシングすることをさらに含む。さらに別の例において、動作は、コアローカルメモリ内で循環バッファリングすることをさらに含む。
【0010】
さらに別の例において、動作は、データ転送の単調な増分的進行を示すためにコアローカル同期フラグを更新することをさらに含む。さらに別の例において、動作は、コアローカルメモリからのすべての読み出しが発行されたときに、データ転送を終了することをさらに含む。さらに別の例において、動作は、コアローカルメモリへのすべての書き込みがコミットされたときに、データ転送を終了することをさらに含む。
【0011】
本開示のさらに別の態様は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、オフコアメモリとコアローカルメモリとの間でデータを転送するための動作を実施させる命令を格納するための非一時的コンピュータ可読記憶媒体を提供する。動作は、オフコアメモリとコアローカルメモリとの間で転送されているデータの進行を識別することと、コアローカルメモリがデータのソースであるときにコアローカルメモリからの読み出しを識別することとを含み、読み出しは、ソースに順番に発行され、ソースによって順不同でサービスされ、動作は、コアローカルメモリがデータの宛先であるときにコアローカルメモリへの書き込みを識別することをさらに含み、書き込みは、宛先に順番に発行され、宛先によって順不同でコミットされ、動作は、オフコアメモリがデータのソースであるときはオフコアメモリからの読み出しのために、および、オフコアメモリがデータの宛先であるときはオフコアメモリへの書き込みのために、間接的スキャタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスすることをさらに含む。
【0012】
一例において、間接的スキャタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスすることは、レジスタファイルから、または、コアローカルメモリから間接アドレスをソーシングすることをさらに含む。別の例において、動作は、コアローカルメモリ内で循環バッファリングすることをさらに含む。さらに別の例において、動作は、データ転送の単調な増分的進行を示すために同期フラグを更新することをさらに含む。
【0013】
本開示のさらに別の態様は、「ストリーム転送」として参照される、オフコアメモリとコアローカルメモリとの間の非同期的データ移動のためのハードウェア/ソフトウェアインターフェース、およびストリーム順序付けモデルを提供する。ストリーム転送は、ソフトウェアが、特にスパース作業負荷に見られるものなどの、共通のデータ移動パターンをより効率的に表現することを可能にすることができる。ストリームに属する直接ストリーム命令は、順番に処理され得る。間接ストリーム命令については、オフセットリスト内のオフセット要素が、順番に処理され得る。ストリームの単調な増分的進行を示すために、syncフラグが更新され得る。
本開示による方法は、特に、コンピュータが実行する方法であってもよい。
【図面の簡単な説明】
【0014】
図1】本開示の態様によるストリーム転送を実行するためのハードウェア回路のブロック図である。
図2】本開示の態様によるハードウェア回路を実装するための例示的な環境のブロック図である。
図3A】本開示の態様によるストリーム転送を実行するためのハードウェア回路の例示的なタイルのブロック図である。
図3B】本開示の態様によるストリーム転送を実行するためのハードウェア回路の別の例示的なタイルのブロック図である。
図4】本開示の態様による、ストリーム記述子を、構成するオフタイルストリーム要求またはタイルローカルストリーム要求にアンロールするための例示的なプロセスのフロー図である。
図5】本開示の態様による、ストリーム転送を順序付けするための例示的なプロセスのフロー図である。
図6】本開示の態様による、ストリーム順序付けの例示的な図である。
【発明を実施するための形態】
【0015】
詳細な説明
一般に、本明細書において、「ストリーム転送」として参照される、オフコアメモリとコアローカルメモリとの間の非同期的データ移動のためのハードウェア/ソフトウェアインターフェースが開示される。ストリーム転送は、ソフトウェアが、特にスパース作業負荷に見られるものなどの、共通のデータ移動パターンをより効率的に表現することを可能にするストリーム記述子を含むことができる。ストリーム記述子は、ストリーム転送を実行するのに必要な情報を表す内部データ構造である。情報は、例として、ソースアドレス、宛先アドレス、ストリームオペレーションコード、線形または循環バッファなどの制御情報を含んでもよい。「ストリーム」として参照されるデータ移動は、ストリーム転送の実行に必要な情報を符号化するストリーム命令によって開始することができる。各ストリームは、ストリーム命令と関連付けられるデータ同期フラグ(syncフラグ)によって示される、関連付けられるストリーム識別情報(ID)を有することができる。同じストリームIDを有するコアによって発行されるストリーム命令は、単一のストリームを形成することができる。
【0016】
ストリーム転送はデータをコアローカルメモリへと、または、コアローカルメモリから移動させることのみができる。さらに、コアローカルsyncフラグのみが、ストリームの進行を追跡するために使用され得る。syncフラグは、ストリーム転送の部分的進行を追跡する。それらは、コアローカルメモリがソースであるときはコアローカルメモリからの読み出しを、または、コアローカルメモリが宛先であるときはコアローカルメモリへの書き込みを追跡する。オフコアメモリに対する読み出しおよび書き込みの進行は追跡されなくてもよいが、オフコアメモリへの目立った書き込みがコミットされることを保障するために、スカラーフェンス命令を使用して、いずれのメモリアクセスをバリアすべきかの選択を可能にすることができる。
【0017】
ストリーム転送は、間接的スキャタ/ギャザーメモリアクセスを含むことができ、ソースまたは宛先に対するアドレスが、最初に読み出される別のメモリロケーションに格納される。一例として、間接アドレスが、マスキングサポートとともにレジスタファイルからソーシングされるか、または、メモリからソーシングされる。間接的スキャタ/ギャザーメモリアクセスは、例として行アドレスまたはワードアドレスなどの、異なるアドレス指定モードをさらに含んでもよい。ストリーム転送は、直接的にメモリワードに対するScatterAdd/GatherAddモードのためのサポートを含んでもよい。メモリワードは、アトミックに更新することができる。例として、f32、i32、bf16、およびi16データ型をサポートすることができる。
【0018】
ストリーム転送はソースまたは宛先バッファにおける循環バッファのためのサポートを含むことができ、これは、バッファサイズがコンパイル中に知られないため、ソフトウェアのバッファ割り当て問題を単純化する。
【0019】
さらに、概して、ストリーム順序付けモデルが、本明細書において開示される。これらの転送の同期基本命令は、実際のデータ転送が順不同である一方で、データ転送が順番に処置されることを可能にする。同じストリームIDを有するコアによって発行される個別のストリーム命令が、単一のストリームを形成する。ハードウェアは、単一のストリーム内での転送のための順序付け保証を提供し、これは、複数のストリーム命令にまたがる可能性がある。
【0020】
ストリームに属するストリーム命令は、順番に処理される。間接ストリーム命令については、オフセットリスト順序付けされる。例えば、オフセットリスト内のオフセット要素が、順番に処理される。書き込みは、宛先メモリに順番に発行され、宛先メモリによって順不同でコミットされ得る。読み出しは、ソースメモリに順番に発行され、ソースメモリによって順不同でサービスされ得る。
【0021】
ストリームの単調な増分的進行を示すために、syncフラグが更新される。コアローカルメモリがソースである場合、syncフラグはコアローカルメモリからの読み出しを追跡する。syncフラグ値がNである場合、これは、最初のN個のデータチャンクがコアローカルメモリ内に上書きされ得ることを示す。コアローカルメモリが宛先である場合、syncフラグはコアローカルメモリへの書き込みを追跡する。syncフラグ値がNである場合、これは、コアローカルメモリ内の最初のN個のデータチャンクに対する後続の読み出しが、要求されているデータを返すことを示す。
【0022】
最後のストリーム記述子に先行し、これを含む要求に関するデータがメモリに完全にコミットされたとき、ストリームは終了することができる。一例として、コアローカルメモリがソースである場合、すべての読み出しが完了したときに、ストリームは終了することができる。コアローカルメモリが宛先である場合、すべての書き込みがコミットしたときに、ストリームは終了することができる。
【0023】
本開示の態様は、ソフトウェアが、特にスパース作業負荷に見られるものなどの、共通のデータ移動パターンをより効率的に表現することを可能にする。本開示の態様はまた、計算コア、および、インオーダーコアのソフトウェアプログラミングモデルを維持しながら長いメモリアクセス待ち時間を隠すための複雑度の低いソリューションを提供することもできる。
【0024】
図1は、本開示の態様によるストリーム転送を実行するためのハードウェア回路101のブロック図である。ハードウェア回路101は、コプロセッサ103と、コプロセッサ104と、高帯域幅メモリ107と、オンチップ相互接続108とを含むことができる。コプロセッサ103は、1つまたは複数のタイル102A~Fを含むことができ、各タイルが、クロスレーン処理ユニット(XPU)101A~Fを含むそれぞれのベクトル処理ユニット(VPU)を実装する。コプロセッサ103は、タイル102A~Fにわたって入力および出力データを協調させるように構成されているタイルシーケンサ106を含むことができる。
【0025】
コプロセッサ103は、XPU102A~Fを使用して、または、より一般的にはVPUを使用して、データ依存動作を実施するように構成されている。XPU102A~Fは各々、一連のデータ処理レーンに接続されており、各レーンが、XPU102A~Fを通じてデータをストリーミングする。ストリーミングされているデータは、メインメモリ、キャッシュ、またはソリッドステートもしくはハードディスク記憶装置などの持続性記憶装置を含む、様々な異なるメモリデバイスのいずれかとすることができる、オンチップメモリ105から取り出すことができる。ストリーミングされているデータは、コプロセッサ104、コプロセッサ103と104のうちの一方もしくは両方にサービスする高帯域幅メモリ107、ならびに/または、オンチップ相互接続108を通じてハードウェア回路101に接続されている別のデータソースから取り出すこともできる。
【0026】
コプロセッサ104は、行列同士の乗算、行列とベクトルとの乗算などのような、特定の動作を加速させるように構成することができる。いくつかの例において、コプロセッサ104は、ハードウェア回路101の残りのデバイスとは異なるデバイス上にあり、オンチップ相互接続108を通じてハードウェア回路にデータを通信する。オンチップ相互接続108は、データバス、または、例えば、PCIeなどの様々な通信規格のいずれかによる任意の形態の相互接続とすることができる。
【0027】
ハードウェア回路101への例示的な入力は、ハードウェア回路101を使用して実行される機械学習モデルの入力データおよび/またはモデルパラメータを表すテンソルである。テンソルは、次元の異なる様々な他の一般的なデータ構造型を一般化するデータ構造である。テンソルは、整数、浮動小数点値、ブール値などのような、1つまたは複数の異なるデータ型とすることができる、0個以上の要素を含むことができる。各データ型内で、データ型は、例えば、8ビット、16ビット、または32ビット整数または浮動小数点値などの、特定のレベルの精度に従ってパラメータ化することができる。テンソルの次元は、その「ランク」として参照される。ランク0のテンソルは、単一の要素であり、これはスカラーとも呼ばれる。ランク1のテンソルは、ベクトルとも呼ばれる。ランク2のテンソルは、行列とも呼ばれる。ベクトルおよび行列はまた、異なるランクを有するものとして参照することもできる。例えば、ランク2のベクトルは、行列と等価である。非ゼロのランクのテンソルは、1ランク下のテンソルの集合として説明することができる。例えば、ランク1のベクトルは、スカラー値の集合であり、ランク2の行列は、ランク1のベクトルの集合である。
【0028】
ハードウェア回路101は、少なくとも部分的に、ニューラルネットワークを訓練するための処理パイプラインを実行することができる。パイプラインは、入力訓練例のためのエンベディングを生成することを含むことができる。エンベディングは、より少ないデータを使用して入力訓練例の特徴を表すことができ、より効率的な処理を可能にする。異なる入力訓練例の特徴テンソルは、異なる度合いのスパース性を有することになり、これは、対応するエンベディングを生成するために必要とされる計算作業の量に影響を及ぼす。ハードウェア回路は、訓練入力例を表す特徴値のテンソルを受信し、特徴テンソルよりも低いランクを有するテンソルとしてエンベディングを生成するように構成することができる。
【0029】
エンベディングを生成するために、コプロセッサ103は、XPU102A~F上で、または、より一般的にはVPU上で、効率的なスパースデータ計算のための様々なデータ依存動作を実施するように構成されている。これらの動作は、スパースベクトルのソートまたは加算、入力ベクトルの内容を要約する動作、および、スパース行列を1つのスパース行列ストレージフォーマットから別のフォーマットに変換する動作を含む。
【0030】
データ依存動作の実施を加速させるための物理的な所定の回路の代わりに、XPU102A~Fを含むVPUは、様々な異なるデータ依存動作を実施するように構成、例えばプログラムすることができる。コプロセッサ103は、相補的なコプロセッサ104が高度に効率的で並列化可能な動作を実施することを依然として可能にしながら、スパースデータの処理の一般化されたサポートを可能にする。
【0031】
ハードウェア回路101は、例えば、テンソルプロセッシングユニット(TPU)などの、中央処理装置(CPU)、グラフィックスプロセッシングユニット(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、または、特定用途向け集積回路(ASIC)などの、様々な異なるタイプの処理ユニットのいずれかとすることができる。ハードウェア回路101は、それ自体が1つまたは複数のデバイスのシステムの一部であってもよい、コンピューティングデバイス上に実装することができる。
【0032】
図2は、ハードウェア回路101を実装するための例示的な環境200のブロック図である。ハードウェア回路101は、サーバコンピューティングデバイス215などの1つまたは複数のロケーションにある1つまたは複数のプロセッサを有するデバイス上に実装することができる。ユーザコンピューティングデバイス212およびサーバコンピューティングデバイス215は、ネットワーク260を介して1つまたは複数の記憶デバイス230に通信可能に結合することができる。記憶デバイス230は、揮発性および不揮発性メモリの組合せとすることができ、コンピューティングデバイス212、215と同じまたは異なる物理ロケーションにあることができる。例えば、記憶デバイス230は、ハードドライブ、ソリッドステートドライブ、テープドライブ、光学記憶装置、メモリカード、ROM、RAM、DVD、CD-ROM、書き込み可能メモリ、および読み出し専用メモリなどの、情報を格納することが可能な任意のタイプの非一時的コンピュータ可読媒体を含むことができる。
【0033】
サーバコンピューティングデバイス215は、1つまたは複数のプロセッサ213およびシステムメモリ214を含むことができる。メモリ214は、プロセッサ213によって実行することができる命令221を含む、プロセッサ213によってアクセス可能な情報を格納することができる。メモリ214はまた、プロセッサ213によって取り出し、操作、または格納することができるデータ223も含むことができる。メモリ214は、揮発性および不揮発性メモリなどの、プロセッサ213にとってアクセス可能なタイプの非一時的コンピュータ可読媒体とすることができる。プロセッサ213は、テンソルプロセッシングユニット(TPU)などの、1つまたは複数の中央処理装置(CPU)、グラフィックスプロセッシングユニット(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、および/または特定用途向け集積回路(ASIC)を含むことができる。プロセッサ213は、図1を参照して本明細書に記載されているような、ハードウェア回路の一部として実装されるコプロセッサを含むことができる。
【0034】
命令221は、プロセッサ213によって実行されると、1つまたは複数のプロセッサに、命令によって定義される措置を実施させる1つまたは複数の命令を含むことができる。命令221は、プロセッサ213による直接処理のためのオブジェクトコードフォーマットで、またはオンデマンドで解釈されるか、または事前にコンパイルされる独立ソースコードモジュールの解釈可能なスクリプトもしくはコレクションを含む他のフォーマットで格納することができる。命令221は、ストリーム転送を本開示の態様と一貫するように構成するための命令を含むことができる。サーバコンピューティングデバイス215および/またはユーザコンピューティングデバイス212は、命令を、回路のVPUを構成するための制御信号として生成し、ハードウェア回路101に送信するためのコンパイラまたは他のプログラムを実行することができる。
【0035】
データ223は、命令221に従ってプロセッサ213によって取り出し、記憶、または修正することができる。データ223は、複数の異なるフィールドおよびレコードを有するテーブルとして、または、JSON、YAML、proto、もしくはXML文書として、コンピュータレジスタ、関係データベースに、または無関係データベースに格納することができる。データ223はまた、限定されないが、バイナリ値、ASCII、またはUnicodeなどの、コンピュータ可読フォーマットでフォーマットされ得る。さらに、データ223は、数字、記述テキスト、独自コード、ポインタ、他のネットワークロケーションを含む他のメモリに格納されたデータへの参照、または関連データを計算するために関数によって使用される情報など、関連情報を識別するのに十分な情報を含むことができる。
【0036】
ユーザコンピューティングデバイス212もまた、サーバコンピューティングデバイス215と同様に、1つまたは複数のプロセッサ216、メモリ217、命令218、およびデータ219を有して構成することができる。ユーザコンピューティングデバイス212はまた、ユーザ出力226およびユーザ入力224も含むことができる。ユーザ入力224は、キーボード、マウス、機械式アクチュエータ、ソフトアクチュエータ、タッチスクリーン、マイクロフォン、およびセンサなどの、ユーザから入力を受信するための任意の適切なメカニズムまたは技法を含むことができる。
【0037】
サーバコンピューティングデバイス215は、ユーザコンピューティングデバイス212にデータを伝送するように構成することができ、ユーザコンピューティングデバイス212は、ユーザ出力226の一部として実装されているディスプレイ上に、受信データの少なくとも一部分を表示するように構成することができる。ユーザ出力226はまた、ユーザコンピューティングデバイス212とサーバコンピューティングデバイス215との間のインターフェースを表示するために使用することもできる。ユーザ出力226は、代替的にまたは付加的に、1つまたは複数のスピーカ、トランスデューサまたは他の音響出力、非視覚的および非聴覚的情報をユーザコンピューティングデバイス212のプラットフォームユーザに提供する力覚インターフェースまたは他の触覚フィードバックを含むことができる。
【0038】
図2は、プロセッサ213、216およびメモリ214、217をコンピューティングデバイス215、212内にあるものとして示しているが、プロセッサ213、216およびメモリ214、217を含む、本明細書に記載されている構成要素は、同じコンピューティングデバイス内にない、異なる物理ロケーションにおいて動作することができる複数のプロセッサおよびメモリを含むことができる。例えば、命令221、218およびデータ223、219のいくつかは、リムーバブルSDカードに、および読み出し専用コンピュータチップ内の他のものに格納することができる。命令およびデータの一部またはすべては、プロセッサ213、216から物理的に離れているが、依然としてプロセッサによってアクセス可能なロケーションに格納することができる。同様に、プロセッサ213、216は、同時および/または順次動作を実施することができるプロセッサの集合を含むことができる。コンピューティングデバイス215、212は各々、コンピューティングデバイス215、212によって作動される動作およびプログラムの時間測定に使用することもできるタイミング情報を提供する1つまたは複数の内部クロックを含むことができる。
【0039】
サーバコンピューティングデバイス215は、ユーザコンピューティングデバイス212からデータを処理するための要求を受信するように構成することができる。例えば、環境200は、プラットフォームサービスを見せる様々なユーザインターフェースおよび/またはAPIを通じて様々なサービスをユーザに提供するように構成されているコンピューティングプラットフォームの一部とすることができる。1つまたは複数のサービスは、指定のタスクおよび訓練データに従ってニューラルネットワークまたは他の機械学習モデルを生成するための機械学習フレームワークまたはツールセットとすることができる。ユーザコンピューティングデバイス212は、ハードウェア回路101のVPUが実施するように構成されるものとする、構成されている動作の作業負荷またはタイプを指定するデータを受信および送信することができる。ユーザコンピューティングデバイス212は、命令をハードウェア回路101に直接的に送信するか、または、サーバコンピューティングデバイス215に、命令を、本明細書に記載されているように制御信号として生成し、ハードウェア回路101に送信させることができる。
【0040】
デバイス212、215は、ネットワーク260を介して直接的および間接的に通信することが可能であり得る。デバイス215、212は、情報を送信および受信するための開始接続を承認することができるリスニングソケットをセットアップすることができる。ネットワーク260は、それ自体が、インターネット、ワールドワイドウェブ、イントラネット、仮想私設ネットワーク、広域ネットワーク、ローカルネットワーク、および、1つまたは複数の企業独自の通信プロトコルを使用する私設ネットワークを含む様々な構成およびプロトコルを含むことができる。ネットワーク260は、様々な短および長距離接続をサポートすることができる。短および長距離接続は、一般的にBluetooth(登録商標)規格と関連付けられる2.402GHz~2.480GHz、一般的にWi-Fi(登録商標)通信プロトコル、または、ワイヤレスブロードバンド通信のためのLTE(登録商標)などの様々な通信規格と関連付けられる2.4GHzおよび5GHzなどの、種々の帯域幅にわたって行われてもよい。ネットワーク260は、加えて、または代替的に、様々なタイプのイーサネット(登録商標)接続を介した接続を含む、デバイス212、215間の有線接続もサポートすることができる。
【0041】
単一のサーバコンピューティングデバイス215およびユーザコンピューティングデバイス212が図2には示されているが、本開示の態様は、順次または並列処理のためのパラダイムにあるもの、または、複数のデバイスから成る分散ネットワークを介するものを含む、様々な異なる構成および量のコンピューティングデバイスに従って実行することができることが理解される。いくつかの実施態様において、本開示の態様は、単一のデバイス、およびその任意の組合せ上で実施することができる。
【0042】
図3Aは、ストリーム転送を実行するための例示的なタイル102のブロック図である。XPU101が、クロスレーンコントローラ310に結合されている。クロスレーンコントローラ310は、XPU101に対するクロスレーン命令を可能にするために別個の制御スレッドを提供する。本明細書に記載されているように、XPUは、例えば、1つまたは複数の制御信号を通じて第1の命令を受信することができ、第1の命令は、1つまたは複数の第2の命令および第3の命令に変換することができ、それぞれ、第1の命令によって指定される、構成されている動作を実施するために、XPU101の処理セルおよびクロスバーに提供することができる。XPU101への命令は、制御信号を介して搬送することができ、XPU101の処理セルおよびクロスバーは、対応する基本動作を実施するために解釈するように構成されている。例示的な命令は、命令セットアーキテクチャ(ISA)のオペコードとすることができる。
【0043】
タイル102は、図1を参照して記載されているようなオンチップ相互接続108およびオンチップメモリ105からデータを受信することができる。XPUはまた、命令インターフェース324から、例えば、タイルシーケンサ106から、スカラーコア312またはスカラーコア320を通じて命令を受信することもできる。タイル102のスキャタ/ギャザーコントローラ322は、入来データを受信し、メモリスケジューラ314を通じていずれのデータがメモリ306内に渡されるかを制御することができる。メモリスケジューラ314は、データがメモリ306からどのようにアクセスされ、取り出さされるかを調整する。メモリ306は、タイル102に対してプライベートであり、他のタイルなどの、タイル102に接続されている他の構成要素にとってアクセス可能でない。アービタ304は、例えば、クロック周期ごとに、ベクトル処理ユニット(VPU)302A~Hのいずれがメモリ306にアクセスするかを管理するように構成されている。タイル102は、スカラーコア320を通じてスキャタ/ギャザーコントローラ322に送信される、タイル102によって実施されるタスクのタスクキュー308を維持することができる。タイル102はまた、タイル102をそれぞれ、ハードウェア回路の他のタイルおよびメモリ306と同期させるためのタイル同期フラグ318および/またはメモリフラグ316のレジスタも維持することができる。
【0044】
VPU302A~Hは、XPU101とVPU302A~Hとの間の実線によって示されているデータ処理レーンを通じてXPU101に接続されている。XPU101とVPU302A~Hとの間の破線は、制御信号を表し、制御信号は、受信制御信号に対応する、構成されている動作を実施するようにXPU101を構成するために、XPU101内の制御セルによって受信することができる。ベクトル処理ユニットは、入力ベクトルに対する効率的な動作のために構成されている。一度にタイル102によって処理されるベクトルの長さは、タイルによって実装されるVPUの数(または幅)に依存し得る。例えば、8つのVPU302A~Hの幅は8である。VPU302A~Hは、同じデータ処理レーンに沿ってデータを処理することができる。VPU302A~Hは、メモリ306からの入来ベクトルの要素に対してスカラー演算を実施するように構成することができる。VPU302A~Hは、XPU101からデータを受信することができ、XPU101は、本明細書に記載されているように、各VPU302A~Hによって実施されるようにレーンに沿ってのみデータを処理するのではなく、複数のデータ処理レーンにわたってデータを処理することができる。
【0045】
図3Bは、ストリーム転送のためにXPU101を実装する別の例示的なタイル102のブロック図である。タイル102は、図1を参照して記載されているようなオンチップ相互接続108およびオンチップメモリ105からデータを受信することができる。XPUはまた、命令インターフェース324から、例えば、タイルシーケンサ106から命令を受信することもできる。タイル102のスキャタ/ギャザーコントローラ322は、入来データを受信し、いずれのデータがメモリ306内に渡されるかを制御することができる。
【0046】
この例示的なタイル102は、アクセス/実行分離アーキテクチャに基づき、プログラム(および関連付けられる命令シーケンス)を2つのストリームに分離することができる。第1のストリームは、オペランドをフェッチし、結果を格納するアクセスストリームとすることができる。第2のストリームは、オペランドを消費し、計算を実施し、結果を生成する実行ストリームとすることができる。これらのストリームは、タイルアクセスコア(TAC)332およびタイル実行コア(TEC)330の2つの別個のコア上で作動する。
【0047】
タイルアクセスコア332は、スカラーコアコンプレックス320に基づき、メモリ306からの実行のためにオペランドをプリフェッチする役割を担うことができる。タイル実行コア330は、スカラー複合コア312に基づき、XPU101およびVPU302を含み、プリフェッチされたオペランドに対して計算動作を実施して結果を生成する役割を担うことができる。VPU302は、ロードストアユニット328を通じてメモリ306に接続されている。TAC332およびTEC330は、独立した命令ストリームを有し、ともにプロデューサコンシューマ対を形成する。タイル102は、TAC332およびTEC330に送信される、タイル102によって実施されるタスクのタスクキュー308を維持することができる。
【0048】
TAC332およびTEC330は、スカラーメモリ334、命令バッファ326、およびタイルsyncフラグ318を通じて互いと通信する。スカラーメモリ334は、TAC332およびTEC330によって、データを交換するために使用することができ、先入れ先出し順序においてTAC332とTEC330との間でデータを渡すためのソフトウェア管理循環バッファとして使用することができる。タイルsyncフラグ318は、TAC332とTEC330との間の計数セマフォとして使用することができる。例えば、循環先入れ先出し順序が2つのコアの間で使用されているとき、プロデューサコアは、プッシュが終わるたびにsyncフラグ318をバイト数だけインクリメントし、カウントが先入れ先出し順序の最大サイズに達すると停止する。同様に、コンシューマは、ポップが終わるたびにsyncフラグ318をデクリメントし、バッファにデータがなくなると停止する。プリフェッチされるデータの量は動的とすることができ、ストリームの終わりを示すために完了ビットが使用される。
【0049】
ストリーム転送は、タイル102およびタイルシーケンサ106が、メモリ306またはスカラーメモリ334などのタイルローカルメモリと、メモリ105または高帯域幅メモリ107などのオフタイルメモリとの間でデータを移動させることを可能にする。データ移動は、ストリーム命令によって開始することができ、ストリームとして参照することができる。各ストリームは、ストリーム命令と関連付けられるsyncフラグ318によって示される、関連付けられるストリームIDを有する。同じストリームIDを有する個別のストリーム命令が、単一のストリームを形成する。
【0050】
ストリーム転送は、タイルローカルメモリへと、またはタイルローカルメモリからデータを移動させることができ、タイルローカルsyncフラグ318は、ストリームの進行を追跡するために使用される。syncフラグ318は、転送されているストリームの部分的進行を追跡する。例えば、syncフラグ318は、メモリがソースであるときはタイルローカルメモリからの読み出しを追跡し、または、syncフラグ318は、メモリが宛先であるときはタイルローカルメモリへの書き込みを追跡する。オフタイルメモリに対する読み出しおよび書き込みの進行は追跡されなくてもよい。オフタイルメモリへのすべての目立った書き込みがコミットされることを保障するために、スカラーフェンス命令を使用して、いずれのメモリアクセスをバリアすべきかの選択を可能にすることができる。スキャタギャザーエンジン322は、各特定のメモリの発行されているストリーム転送のステータスを追跡し、このステータスをスカラーコア320に通信する。特定のメモリに対するバリアのためにスカラーフェンスが発行されるとき、それは、ステータスが、そのメモリを標的とするすべての目立ったストリーム転送(読み出しまたは書き込み)が完全にコミットされるのを示すのを待つ。その条件が満たされると、フェンス待ちは、スカラーコア320上で解放される。
【0051】
ストリーム転送は、オフタイルメモリにアクセスするためのストライデッドストリームおよびタイルローカルメモリまたはレジスタファイルからオフタイルメモリにアクセするための間接ストリームを用いて効率的なスキャタ-ギャザー動作をサポートすることができる。ストライデッドストリームであるか、または、間接ストリームであるかは、ソフトウェアアクセスパターンに基づくことができる。ソフトウェアがテンソル内のN個ごとの要素にアクセスすることを所望する場合、ストライデッドストリームが好ましいが、間接ストリームも依然として機能することができる。しかしながら、ソフトウェアがテンソル内の要素のランダムなセットにアクセスすることを所望する場合、間接ストリームが使用されるべきである。
【0052】
ストリーム転送はまた、タイルローカルメモリに対する循環バッファセマンティクスもサポートすることができる。
【0053】
ストリーム転送は、データ移動の粒度およびアラインメントがソース-宛先対に依存する、以下のデータ移動をサポートする。データは、メモリ306からオンチップメモリ105へと、および、オンチップメモリ105からメモリ306へと転送することができる。データは、さらに、メモリ306から高帯域幅オフチップメモリ107へと、および、オフチップメモリ107からメモリ306へと転送することができる。データはまた、スカラーメモリ334からオンチップメモリ105へと、および、オンチップメモリ105からスカラーメモリ334へと転送することもできる。一例として、最小粒度のソースアラインメント、および宛先アラインメントは、4バイトとすることができる。別の例として、オフチップメモリ107への4バイトアクセスをサポートするために、32バイトアクセスを使用することができる。さらに別の例として、32バイトアラインメントおよび128バイトの最小長さが、オフチップメモリ107へのまたはオフチップメモリ107からのストリーム上の性能を保証することができる。
【0054】
ストリーム記述子は、スキャタ-ギャザーコントローラ322がストリーム転送を実行するためすべての情報を表す内部データ構造である。ストリーム命令は、ストリーム記述子のフィールドを完全に符号化することができる。以下は、ストリーム記述子の例示的なフィールドである。
【0055】
ストリーム動作コードについて、ギャザーストリームは、オフタイルメモリを読み出し、タイルローカルメモリにデータを格納するか、または、タイルローカルメモリにデータを付加する。スキャタストリームは、タイルローカルメモリから読み出し、オフタイルメモリにデータを格納するか、または、オフタイルメモリにデータを付加する。オフタイルメモリおよびタイルローカルメモリは、それぞれオフタイルメモリタイプおよびタイルローカルメモリタイプのフィールドによって決定される。
【0056】
ストリーム命令の加算バリアントは、浮動小数点と符号付き整数の両方の加算演算をサポートする。ギャザー符号付き整数加算およびギャザー浮動小数点加算バリアントは、タイルローカルメモリについてサポートすることができる。スキャタ符号付き整数加算およびスキャタ浮動小数点加算バリアントは、オフタイルメモリおよびタイルローカルメモリについてサポートすることができる。不正な組合せが検出された場合、プログラムエラーがもたらされ得る。
【0057】
タイルローカルストリームタイプは、タイルローカルメモリにアクセスするために使用されるアドレスパターンを示す。例えば、線形ストリームは、タイルローカル開始オフセットにおいて開始する複数の連続するワードを容易にする。複数の連続するワードは、4バイト長を有することができる。別の例として、循環バッファストリームは、ソフトウェアが、タイルローカルメモリにおいて論理循環バッファを構築することを可能にする。この例示的なアクセスパターンにおいて、循環バッファメタデータのベース、サイズ、およびオフセットフィールドは、複数のワードのアドレスを生成するために使用される。複数のワードは、4バイト長を有することができる。粒度の有効長が循環バッファメタデータ内のサイズフィールドよりも大きい場合、プログラムエラーがもたらされ得る。
【0058】
オフタイルストリームタイプは、オフタイルメモリにアクセスするために使用されるアドレスパターンを示す。線形ストリームは、オフタイル開始オフセットにおいて開始する複数の連続するロケーションへのアクセスを容易にする。実際のワードサイズは、オフタイルメモリタイプに依存する。ストライデッドストリームは、ストライデッドアクセスパターンの、オフタイルメモリタイプに格納される多次元配列への変換を容易にする。ストリーム転送は、単一レベルのストライドをサポートすることができる。間接ストリームは、テーブルへのランダムなスキャタ-ギャザーアクセスパターンを可能にする。ここで、間接オフセットリストが使用され、リスト内の各エントリが、同じ長さのデータにアクセスする。
【0059】
間接オフセットリストのソースは、タイルローカルメモリまたはレジスタファイルとすることができる。ソースがタイルローカルメモリである場合、間接オフセットフィールドは、オフセットの数が格納されているタイルローカルメモリへの開始オフセットを有する。ソースがレジスタファイルである場合、間接オフセットフィールドは、レジスタファイルを有し、有効オフセットを包含するレーンの数が示される。これらのオフセットは、ストリーム動作コードによって示されるようにスキャタまたはギャザー動作を実施するために使用される。
【0060】
コアタイプは、タイル実行コア330またはタイルアクセスコア332などの、ストリーム記述子を生成したコアタイプを示す。syncフラグコアタイプは、ストリームの進行を追跡するsyncフラグ318のコアタイプを示す。符号化は、タイルアクセスコアによって開始されるストリームがタイル実行コアによって追跡されることを可能にするとともに、タイル実行コアによって開始されるストリームがタイルアクセスコアによって追跡されることを可能にするために、コアタイプと同じとすることができる。
【0061】
syncフラグIDは、目標syncフラグメモリ内のオフセットを示す。syncフラグIDはまた、ストリームIDとして使用することもでき、下記にさらに説明する順序付け保証を有することができる。設定完了ビットは、現在の記述子がストリーム内で最後であることを示す。完了ビットは、現在の記述子およびストリーム内の先行する記述子のすべてのデータがタイルローカルメモリに完全にコミットされた後に設定される。
【0062】
syncフラグカウントタイプは、ワードの数であるかまたは記述子の数であるかのいずれかの、syncフラグ318が追跡しているカウントのタイプを示す。両方の事例において、syncフラグ318は、ストリームの単調な増分的進行を追跡するが、粒度は異なる。
【0063】
タイルローカルメモリタイプは、スカラーメモリ334、または、メモリ306のローカルバンクを含むことができる、ストリーム転送に関与するタイルローカルメモリのタイプを示す。
【0064】
タイルローカル開始オフセットフィールドは、タイルローカルストリームタイプが線形である場合に使用される。これは、この転送によってアクセスされるタイルローカルメモリ内の、4バイトワードなどの、アラインされた開始オフセットワードを示す。実際のアクセスタイプは、ストリーム動作コードに依存する。
【0065】
タイルローカルストライドは、ストライドサイズおよび各ストライドにおいてアクセスされるバイト数を符号化し、これは、タイルローカルメモリタイプによって選択されるタイルローカルメモリにアクセスするために使用される。一例として4バイトとすることができる長さは、各ストライドにおいてアクセスされるバイト数の倍数である必要はない。ストライデッドアクセスの最後の要求は、ストライドあたりの長さよりも短いものであり得る、転送の残りのワードにアクセスすることになる。ストライド計算は、線形と循環の両方のバッファストリームタイプについて同じとすることができる。
【0066】
循環バッファメタデータフィールドは、タイルローカルストリームタイプが循環バッファである場合に使用される。循環バッファのサイズは、オフタイルメモリタイプの粒度の倍数とすることができ、オフセットはアラインすることができる。循環バッファが一周した場合、要求は複数の要求に分解され、結果もたらされる要求がオフタイルメモリタイプの粒度の倍数でない場合、エラーがもたらされ得る。エラーはまた、ストリーム転送の総長が循環バッファのサイズよりも大きい場合にも、もたらされ得る。
【0067】
オフタイルメモリタイプは、転送に関与するオフタイルメモリのタイプを示す。これは、オンチップメモリ105および高帯域幅メモリ107を含む。4バイト粒度および4バイトアラインメントにおけるアクセスを可能にする高帯域幅メモリビューを使用することもできる。シーケンサ106がストリーム転送の開始者である場合、このフィールドは、高帯域幅メモリ107を符号化されていなくてもよい。
【0068】
タイルIDフィールドは、メモリスライスのタイルIDを選択するために使用される。
オフタイル開始オフセットは、関連付けられるオフタイルメモリタイプによって示されるオフタイムメモリ105内の開始オフセットワードを含む。オフセットの単位は、オフタイルメモリタイプのオフセットアラインメント列内に示される値に等しいものであり得る。例えば、高帯域幅メモリ107について、1のオフセット値はバイトアクセス32に変換される。オフタイルストリームタイプが間接である場合、このフィールドは、メモリにアクセスする前に間接オフセットから読み出されるオフセットに付加されるベースアドレスとして作用することができる。
【0069】
オフタイルストリームタイプが間接である場合、間接オフセットを使用することができる。ソースがタイルローカルメモリである場合、間接オフセットは、間接オフセットリストを格納するタイルローカルメモリ内のワード開始オフセットを提供する。ソースがレジスタファイルである場合、間接オフセットは、間接オフセットリストをソーシングするファイルレジスタインデックスを提供する。レジスタファイルは、ストリーム命令が発行されるときに読み出すことができる。
【0070】
オフタイルストリームタイプが間接である場合、間接リストサイズを使用することができる。ソースがタイルローカルメモリである場合、オフセットリスト内の要素の数が、タイルローカルメモリに格納される。ソースがレジスタファイルである場合、有効オフセットを包含するレーンの数が格納される。転送の完了は、ストリーム内の残りの記述子によって順番を保ってされる。
【0071】
オフタイルストリームタイプが間接であり、オフセットリストに格納されているオフセットのタイプを示す場合、間接リストタイプが使用される。これは、ワードオフセットおよび行オフセットを含むことができる。
【0072】
オフタイルストリームタイプが間接であり、タイルローカルメモリに格納されているオフセットリスト内の2つのアドレスワード間の距離を示す場合、間接リストストライドが使用される。これは、符号付き整数とすることができる。
【0073】
オフタイルストリームタイプが間接である場合、間接フィルタフィールドが使用され、このフィールドが設定される場合、間接フィルタ値に一致する間接メモリアドレスがフィルタリング除外される。間接フィルタ値は、フィルタリング除外される必要がある間接アクセスリスト内の要素の値を示す。この値は、間接リストタイプによって示されるタイプである。フィルタリングは、間接フィルタフィールドが間接ストリーム向けに設定され、および/または、間接オフセットリスト内の要素の値がこのフィールドに一致する場合に、有効化することができる。フィルタリングされた要素に対応するオフタイルおよびタイルローカルアクセスは取り下げられるが、タイルローカルバッファは依然としてフィルタリングされたアクセスのサイズだけ前進される。
【0074】
例として4バイトまたは512バイトの倍数の長さなどの長さは、ストリームによってアクセスされるワードの総数を示す。オフタイルストリームタイプが線形またはストライデッドである場合、このフィールドは、ストリームによってアクセスされるワードの総数を示す。オフタイルストリームタイプが間接である場合、このフィールドは、間接オフセットリスト内の各アドレスからアクセスされるワードの数を示す。このフィールドの実際の値がオフタイルメモリタイプの粒度の倍数でない場合、プログラムエラーがもたらされ得る。生成されるアドレスがオフタイルメモリ105の境界を超える場合も、プログラムエラーがもたらされ得る。
【0075】
ストライドサイズフィールドは、オフタイルメモリタイプの粒度の単位のストライドサイズを示す。これは、符号付き整数とすることができる。
【0076】
例として4バイトまたは512バイトの倍数のストライドあたりの長さなどの、ストライドあたりの長さは、各ストライドにおいてアクセスされるワードの数を示す。これは、符号付きフィールドであるが、負でない値を包含するべきである。長さは、このフィールドの倍数である必要はない。このフィールドは、このストリーム記述子によって選択されるオフタイルメモリタイプの粒度の倍数であるべきである。ストライデッドアクセスの最後の要求は、ストライドあたりの長さよりも短いものであり得る、転送の残りのワードにアクセスすることになる。ストライドあたりの長さが0であるか、負であるか、または、オフタイルメモリアクセス粒度の倍数でない場合、プログラムエラーがもたらされ得る。生成されるアドレスがオフタイルメモリ105の境界を超える場合も、プログラムエラーがもたらされ得る。
【0077】
トレースフィールドは、ストリーム転送がトレースされるべきであるか否かを示す。トレースすることは、デバッグの一部としてストリーム転送中にとられる措置に関する情報をログ記録することを含むことができる。
【0078】
図4は、ストリーム記述子を、構成するオフタイルストリーム要求またはタイルローカルストリーム要求にアンロールするための例示的なプロセス400のフロー図である。例示的なプロセス400は、1つまたは複数のロケーションにある1つまたは複数のプロセッサのシステム上で実施することができる。例えば、上述したようなハードウェア回路101が、プロセス400を実施することができる。
【0079】
ブロック410に示すように、プロセスは、4バイトのサイズを受信することなど、オフタイルメモリのサイズを受信することを含む。さらに、プロセスは、オフタイルメモリタイプを標的とするストリーム要求の最大チャンクサイズを受信することを含む。ブロック420に示すように、プロセスは、間接リストタイプに基づいて、ファイルレジスタまたはタイルローカルメモリから読み出される間接オフセットを、オフタイルメモリへの、4バイトオフセットなどのオフセットに変換することをさらに含む。
【0080】
ブロック430に示すように、プロセスはまた、ストライデッドおよび/または間接要求を生成することも含む。ストライデッド要求について、プロセスは、ストライデッドストリーム記述子を、オフタイルメモリ内の連続したアドレスに各々がアクセスする要求のセットに部分的にアンロールすることを含むことができる。間接タイルローカルメモリ要求について、プロセスは、間接ストリーム記述子を得ることと、記述子によって選択されるオフタイルメモリタイプへのオフセットのリストを生成することとを含むことができる。間接ファイルレジスタメモリ要求について、プロセスは、間接ストリーム命令の発行時に読み出されるファイルレジスタからオフセットのリストを生成することを含むことができる。
【0081】
ブロック440に示すように、プロセスは、アンロールされたオフタイルメモリ要求のリストを生成することを含み、各アンロールされた要求は、オフタイルメモリ内の連続したアドレスのセットにアクセスする。これらの要求は、タイルローカルメモリ要求とオフタイルメモリ要求の両方を生成するために使用される。タイルローカルストライド、タイルローカルストリームタイプ、およびアラインメントは、要求をアンロールしている間に考慮される。プロセスは、部分的にアンロールされた要求のリストを生成することをさらに含み、各部分的にアンロールされた要求は、オフタイルメモリ内の連続したアドレスのセットにアクセスする。これらの要求は、オフタイルメモリタイプによって選択されるメモリの粒度にアラインされている要求のセットを生成するために、さらにアンロールされる。
【0082】
ブロック450に示すように、プロセスは、ストリーム記述子を、オフタイルメモリ要求およびタイルローカルメモリ要求のセットにアンロールすることを含む。
【0083】
図5は、ストリーム転送を順序付けするための例示的なプロセス500のフロー図である。例示的なプロセス500は、1つまたは複数のロケーションにある1つまたは複数のプロセッサのシステム上で実施することができる。例えば、上述したようなハードウェア回路101が、プロセス500を実施することができる。同じストリームIDを有するコアによって発行される個別のストリーム命令が、単一のストリームを形成するが、順序付けは複数の異なるストリームにわたっては保証され得ない。スキャタギャザーコントローラ322は、これらの要求を並列に処理することができる複数のスレッドを含む。順序付けは、単一のストリーム内での転送について保証することができ、これは、複数のストリーム命令にまたがる可能性がある。
【0084】
ブロック510に示すように、ストリームに属するストリーム命令は、順番に処理される。それらに対応する要求は、スキャタギャザーコントローラ322によって順番に発行される。
【0085】
ブロック520に示すように、間接ストリーム命令の場合、オフセットリストが順序付けされる。オフセットリスト内のオフセット要素が、順番に処理される。書き込みは、宛先メモリに順番に発行されるが、書き込みは、宛先メモリによって順不同でコミットされ得る。読み出しは、ソースメモリに順番に発行されるが、読み出しは、ソースメモリによって順不同でサービスされ得る。
【0086】
ブロック530に示すように、スキャタ/ギャザーコントローラ322は、ストリームの単調な増分的進行を示すようにsyncフラグ318を更新する。タイルローカルメモリがソースである場合、syncフラグ318はタイルローカルメモリからの読み出しを追跡する。syncフラグ値は、タイルローカルメモリ内に上書きすることができるデータの最初のチャンクを示す。タイルローカルメモリが宛先である場合、syncフラグ318はタイルローカルメモリへの書き込みを追跡する。ここで、syncフラグ値は、タイルローカルメモリ内の最初のデータチャンクに対する後続の読み出しが、要求されているデータに戻ることを示す。
【0087】
ブロック540に示すように、syncフラグ318内の完了ビットを、ストリームの終わりに更新することができる。これは、ストリーム記述子内の設定完了ビットによって示される。最後のストリーム記述子に先行し、これを含む要求に関するすべてのデータがメモリに完全にコミットされた後に、完了ビットを設定することができる。タイルローカルメモリがソースである場合はすべての読み出しが完了しており、タイルローカルメモリが宛先である場合にはすべての書き込みが完了している。
【0088】
図6は、ストリーム順序付けの例示的な図である。単一のストリームを形成するために、ストリーム記述子AおよびBを考慮する。ストリーム記述子Bは、設定完了ビットを有する。ストリームの部分的進行が、syncフラグによって追跡される。読み出しまたは書き込みのいずれかであるA0がメモリにコミットされるとき、syncフラグは1の値に更新される。A2およびB1がA0の前にコミットされる場合であっても、syncフラグ値は3には更新されない。A1がメモリにコミットされるとき、ストリーム内の5つの連続したデータチャンクA0、A1、A2、B0、B1がコミットされ、これは5のsyncフラグ値によって示される。ストリーム記述子Aはストリーム内で最後でないため、この時点では完了ビットは設定されない。B2がコミットされるとき、syncフラグ値は6に設定される。ストリームのすべてのデータチャンクがコミットされ、ストリーム記述子Bがストリームの終わりであるため、ここで、完了ビットを設定することができる。
【0089】
本開示の態様は、デジタル回路、コンピュータ可読記憶媒体内で、1つまたは複数のコンピュータプログラム、または、上記のうちの1つまたは複数の組合せとして実行することができる。コンピュータ可読記憶媒体は、例えば、クラウドコンピューティングプラットフォームによって実行可能であり、有形記憶デバイス上に格納される1つまたは複数の命令として、非一時的であり得る。
【0090】
本明細書において、「~ように構成されている」という語句は、コンピュータシステム、ハードウェアおよびハードウェア回路、または、コンピュータプログラム、エンジン、もしくはモジュールの一部に関連する複数の異なる文脈において使用されている。システムが、1つまたは複数の動作を実施するように構成されていると記載されているとき、これは、システムが、動作時に、システムに1つまたは複数の動作を実施させる適切なソフトウェア、ファームウェア、および/またはハードウェアを、システム上にインストールされていることを意味する。何らかのハードウェアが、1つまたは複数の動作を実施するように構成されていると記載されているとき、これは、ハードウェアが、動作時に、入力を受信し、入力に従って、1つまたは複数の動作に対応する出力を生成する1つまたは複数の回路を含むことを意味する。コンピュータプログラム、エンジン、またはモジュールが、1つまたは複数の動作を実施するように構成されていると記載されているとき、これは、コンピュータプログラムが、1つまたは複数のコンピュータによって実行されると、1つまたは複数のコンピュータに、1つまたは複数の動作を実施させる1つまたは複数のプログラム命令を含むことを意味する。
【0091】
図面に示し、特許請求の範囲に記載されている動作は、特定の順序において示されているが、動作は、示されているものとは異なる順序で実施することができ、一部の動作は、省略することができ、2回以上実施することができ、および/または、他の動作と並列に実施することができることが理解される。さらに、異なる動作を実施するように構成されている異なるシステム構成要素の分離は、構成要素が分離されることを必要とするものとして理解されるべきではない。記載されている構成要素、モジュール、プログラム、およびエンジンは、単一のシステムまたは複数のシステムの一部としてともに統合することができる。
【0092】
別途陳述されていない限り、上記の代替例は、相互に排他的ではなく、固有の利点を達成するために様々な組合せにおいて実行されてもよい。これらのおよび他の変形形態および上述した特徴の組合せは、特許請求の範囲によって規定される主題から逸脱することなく利用することができるため、実施形態の上記の説明は、特許請求の範囲によって規定される主題の限定としてではなく、例示として受け取られるべきである。加えて、本明細書に記載されている例および「~など(such as)」、「含む(including)」などとして言い表されている節の提供は、特許請求の範囲の主題を特定の例に限定するものとして解釈されるべきではなく、むしろ、それらの例は、多くの可能な実施形態のうちのたった1つを例示するように意図されている。さらに、異なる図面中の同じ参照符号は、同じまたは同様の要素を識別することができる。
図1
図2
図3A
図3B
図4
図5
図6
【手続補正書】
【提出日】2024-05-23
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
方法であって、
1つまたは複数のプロセッサが、オフコアメモリとコアローカルメモリとの間で転送されているデータの進行を識別することと、
1つまたは複数のプロセッサが、コアローカルメモリがデータのソースであるときに前記コアローカルメモリからの読み出しを識別することと
を含み、
読み出しは、前記ソースに順番に発行され、前記ソースによって順不同でサービスされ、
前記方法は、
前記1つまたは複数のプロセッサが、前記コアローカルメモリが前記データの宛先であるときに前記コアローカルメモリへの書き込みを識別することをさらに含み、
書き込みは、前記宛先に順番に発行され、前記宛先によって順不同でコミットされ、
前記方法は、
前記1つまたは複数のプロセッサが、
前記オフコアメモリが前記データの前記ソースであるときは前記オフコアメモリからの読み出しのために、および
前記オフコアメモリが前記データの前記宛先であるときは前記オフコアメモリへの書き込みのために、
間接的スキャタ/ギャザーメモリアクセスに基づいてオフコアメモリにアクセスすることをさらに含む、方法。
【請求項2】
前記転送されているデータの進行を識別することは、コアローカル同期フラグを使用することをさらに含む、請求項1に記載の方法。
【請求項3】
前記1つまたは複数のプロセッサが、スカラーフェンス命令に基づいてバリアするためのメモリアクセスを選択することをさらに含む、請求項1または請求項2に記載の方法。
【請求項4】
間接的スキャタ/ギャザーメモリアクセスに基づいて前記オフコアメモリにアクセスすることは、レジスタファイルから、または、前記コアローカルメモリから間接アドレスをソーシングすることをさらに含む、請求項1または請求項2に記載の方法。
【請求項5】
前記1つまたは複数のプロセッサが、前記コアローカルメモリ内で循環バッファリングすることをさらに含む、請求項1または請求項2に記載の方法。
【請求項6】
前記1つまたは複数のプロセッサが、前記データ転送の単調な増分的進行を示すためにコアローカル同期フラグを更新することをさらに含む、請求項1または請求項2に記載の方法。
【請求項7】
前記1つまたは複数のプロセッサが、前記コアローカルメモリからのすべての前記読み出しが発行されたときに、前記データ転送を終了することをさらに含む、請求項1または請求項2に記載の方法。
【請求項8】
前記1つまたは複数のプロセッサが、前記コアローカルメモリへのすべての書き込みがコミットされたときに、前記データ転送を終了することをさらに含む、請求項1または請求項2に記載の方法。
【請求項9】
システムであって、
1つまたは複数のプロセッサと、
前記1つまたは複数のプロセッサに結合されており、前記1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、オフコアメモリとコアローカルメモリとの間でデータを転送するための動作を実施させる命令を格納している1つまたは複数の記憶デバイスと
を備え、前記動作は、
前記オフコアメモリと前記コアローカルメモリとの間で転送されているデータの進行を識別することと、
コアローカルメモリが前記データのソースであるときに前記コアローカルメモリからの読み出しを識別することと
を含み、
読み出しは、前記ソースに順番に発行され、前記ソースによって順不同でサービスされ、
前記コアローカルメモリが前記データの宛先であるときに前記コアローカルメモリへの書き込みを識別することを含み、
書き込みは、前記宛先に順番に発行され、前記宛先によって順不同でコミットされ、
前記オフコアメモリが前記データの前記ソースであるときは前記オフコアメモリからの読み出しのために、および、前記オフコアメモリが前記データの前記宛先であるときは前記オフコアメモリへの書き込みのために、間接的スキャタ/ギャザーメモリアクセスに基づいて前記オフコアメモリにアクセスすることを含む、システム。
【請求項10】
前記転送されているデータの進行を識別することは、コアローカル同期フラグを使用することをさらに含む、請求項9に記載のシステム。
【請求項11】
前記動作は、スカラーフェンス命令に基づいてバリアするためのメモリアクセスを選択することをさらに含む、請求項9または請求項10に記載のシステム。
【請求項12】
間接的スキャタ/ギャザーメモリアクセスに基づいて前記オフコアメモリにアクセスすることは、レジスタファイルから、または、前記コアローカルメモリから間接アドレスをソーシングすることをさらに含む、請求項9または請求項10に記載のシステム。
【請求項13】
前記動作は、前記コアローカルメモリ内で循環バッファリングすることをさらに含む、請求項9または請求項10に記載のシステム。
【請求項14】
前記動作は、前記データ転送の単調な増分的進行を示すためにコアローカル同期フラグを更新することをさらに含む、請求項9または請求項10に記載のシステム。
【請求項15】
前記動作は、前記コアローカルメモリからのすべての前記読み出しが発行されたときに、前記データ転送を終了することをさらに含む、請求項9または請求項10に記載のシステム。
【請求項16】
前記動作は、前記コアローカルメモリへのすべての書き込みがコミットされたときに、前記データ転送を終了することをさらに含む、請求項9または請求項10に記載のシステム。
【請求項17】
1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、オフコアメモリとコアローカルメモリとの間でデータを転送するための動作を実施させる命令を含むプログラムであって、前記動作は、
前記オフコアメモリと前記コアローカルメモリとの間で転送されているデータの進行を識別することと、
コアローカルメモリが前記データのソースであるときに前記コアローカルメモリからの読み出しを識別することと
を含み、
読み出しは、前記ソースに順番に発行され、前記ソースによって順不同でサービスされ、
前記コアローカルメモリが前記データの宛先であるときに前記コアローカルメモリへの書き込みを識別することを含み、
書き込みは、前記宛先に順番に発行され、前記宛先によって順不同でコミットされ、
前記オフコアメモリが前記データの前記ソースであるときは前記オフコアメモリからの読み出しのために、および、前記オフコアメモリが前記データの前記宛先であるときは前記オフコアメモリへの書き込みのために、間接的スキャタ/ギャザーメモリアクセスに基づいて前記オフコアメモリにアクセスすることを含む、プログラム
【請求項18】
間接的スキャタ/ギャザーメモリアクセスに基づいて前記オフコアメモリにアクセスすることは、レジスタファイルから、または、前記コアローカルメモリから間接アドレスをソーシングすることをさらに含む、請求項17に記載のプログラム
【請求項19】
前記動作は、前記コアローカルメモリ内で循環バッファリングすることをさらに含む、請求項17または請求項18に記載のプログラム
【請求項20】
前記動作は、前記データ転送の単調な増分的進行を示すためにコアローカル同期フラグを更新することをさらに含む、請求項17または請求項18に記載のプログラム
【国際調査報告】