(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024105255
(43)【公開日】2024-08-06
(54)【発明の名称】マルチレベルマルチストライドを有するダイレクトメモリアクセスアーキテクチャ
(51)【国際特許分類】
G06F 13/28 20060101AFI20240730BHJP
G06F 13/36 20060101ALI20240730BHJP
G06F 17/16 20060101ALI20240730BHJP
G06F 13/16 20060101ALI20240730BHJP
【FI】
G06F13/28 310M
G06F13/36 530B
G06F17/16 B
G06F13/16 510G
【審査請求】有
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024063119
(22)【出願日】2024-04-10
(62)【分割の表示】P 2022522723の分割
【原出願日】2020-11-30
(31)【優先権主張番号】62/977,062
(32)【優先日】2020-02-14
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/838,796
(32)【優先日】2020-04-02
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ゴッチョ,マーク・ウィリアム
(72)【発明者】
【氏名】アシュクラフト,マシュー・ウィリアム
(72)【発明者】
【氏名】ノリー,トーマス
(72)【発明者】
【氏名】ボーウェン,オリバー・エドワード
(57)【要約】 (修正有)
【課題】マルチレベルマルチストライドを実行することと、複数のメモリアドレスを並列して決定することが可能なDMA(ダイレクトメモリアクセス)アーキテクチャを提供する。
【解決手段】環境100は、1つ以上のハードウェアDMAスレッド120を備える。各DMAスレッドは、並列メモリアドレス計算周期毎に多次元テンソルのためにM個のメモリアドレスを並列して生成し、メモリアドレス毎にメモリ操作を行うようメモリシステムに求める要求を生成する要求生成部を含む。要求生成部は、M個のメモリアドレス部を含み、各メモリアドレス部は、テンソル次元毎に次元のステップインデックス値を生成し、ステップインデックス値に基づいて次元のストライドオフセット値を生成するステップ追跡部を含み、テンソル要素のメモリアドレスを生成し、メモリ操作を行うよう求める要求を送るメモリアドレス計算要素を含む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
DMA(ダイレクトメモリアクセス)システムであって、
1つ以上のハードウェアDMAスレッドを備え、各DMAスレッドは、
並列メモリアドレス計算周期のたびに(1)多次元テンソルのためにM個のメモリアドレスを並列して生成し、メモリアドレスごとに(2)前記多次元テンソルに関するメモリ操作を行うようメモリシステムに求める要求を生成するように構成された要求生成部を含み、前記要求生成部は、M個のメモリアドレス部を含み、各メモリアドレス部は、
前記多次元テンソルの次元ごとに(1)前記次元のステップインデックス値を生成し、前記ステップインデックス値に基づいて(2)前記次元のストライドオフセット値を生成するように構成されるステップ追跡部と、
メモリアドレス計算要素とを含み、前記メモリアドレス計算要素は、
並列メモリアドレス計算周期のたびに、前記ストライドオフセット値に基づいて、前記多次元テンソルのテンソル要素のメモリアドレスを生成し、
前記メモリアドレスを用いて前記メモリ操作を行うよう求める前記要求を、前記メモリシステムに送るように構成され、
前記Mは、1以上である、DMAシステム。
【請求項2】
前記要求生成部は、1つのクロック周期の間に前記メモリアドレスを並列して生成するように構成され、各並列メモリ計算は、1つのクロック周期の間に行われる、請求項1に記載のDMAシステム。
【請求項3】
クロック周期のたびに、各メモリアドレス部の前記メモリアドレス計算要素は、他のメモリアドレス部の前記メモリアドレス計算要素と同じまたは異なるテンソル要素のメモリアドレスを生成する、請求項2に記載のDMAシステム。
【請求項4】
前記要求生成部は、前記多次元テンソルの記述子を受け取るように構成され、前記記述子は、次元ごとに、前記次元のストライド値のステップ数を規定する、請求項1~3のいずれか1項に記載のDMAシステム。
【請求項5】
前記要求生成部は、M個のレーンを含み、前記M個のレーンは、各々、ステップ追跡部と、メモリアドレス計算要素とを含み、各レーンの前記ステップ追跡部および前記メモリアドレス計算要素は、対応するメモリアドレスを他のレーンと並列して計算する、請求項1~4のいずれか1項に記載のDMAシステム。
【請求項6】
ステップ追跡部は、ループネストに基づいて前記多次元テンソルの前記メモリアドレスを生成するように構成され、前記ループネストは、前記多次元テンソルの次元ごとに、前記多次元テンソルの次元を横断するためのループを含み、
各次元のストライド値当たりのステップ数は、前記次元のループのループ範囲を表し、各次元の前記ステップインデックス値は、前記次元のループのループインデックスを表す、請求項5に記載のDMAシステム。
【請求項7】
各ステップ追跡部は、クロック周期のたびに前記次元の各々の前記ステップインデックス値を更新するように構成される、請求項6に記載のDMAシステム。
【請求項8】
ステップ追跡部ごとのステップインデックス値の組合せは、他のステップ追跡部のステップインデックス値の組合せとは異なる、請求項6に記載のDMAシステム。
【請求項9】
各ステップ追跡部は、複数のステップインクリメント部を含むステップインクリメントチェーンを含み、前記複数のステップインクリメント部は、各々、次元の次元メモリアド
レスオフセット値を決定するように構成され、
前記ループネストの最も内側のループに対応する前記ステップインクリメントチェーンの第1ステップインクリメント部は、予告量を受け取るように構成され、
クロック周期のたびに前記次元のうち1つ以上の次元のステップインデックス値を更新することは、前記第1ステップインクリメント部が前記予告量に基づいて前記1つ以上の次元の前記ステップインデックス値を更新することを含む、請求項8に記載のDMAシステム。
【請求項10】
前記最も内側のループが入れ子になっているループに対応する前記ステップインクリメントチェーンの1つ以上の第2ステップインクリメント部は、前記ステップインクリメントチェーンにある前のステップ追跡部からラップ量を受け取るように構成され、
クロック周期のたびに前記次元のうち1つ以上の次元のステップインデックス値を更新することは、前記第2ステップインクリメント部が前記ラップ量に基づいて前記1つ以上の次元の前記ステップインデックス値を更新することを含む、請求項9に記載のDMAシステム。
【請求項11】
応答並替え部と同期部とを含む進行状況追跡部を、さらに備える、請求項1~10のいずれか1項に記載のDMAシステム。
【請求項12】
前記応答並替え部は、前記テンソル要素のメモリ操作が行われたかどうかのステータスをテンソルごとに保持するように構成される、請求項11に記載のDMAシステム。
【請求項13】
前記同期部は、複数の一部の最新情報をプロセッサコアに提供するように構成され、前記複数の一部の最新情報は、各々、前記多次元テンソルの前記テンソル要素に対して行われたメモリ操作の全体的なステータスを明記する、請求項11に記載のDMAシステム。
【請求項14】
各要求は、一意の識別子を含み、
前記応答並替え部は、
前記メモリシステムから応答を任意の順番に受け取るように構成され、各応答は、前記応答が提供される前記要求の一意の識別子を含み、前記応答並替え部は、さらに、
少なくともしきい値数の連続した一意の識別子を前記応答で受け取った場合、一連の一意の識別子を、前記要求生成部が再利用できるよう、解放するように構成される、請求項11に記載のDMAシステム。
【請求項15】
システムであって、
1つ以上のプロセッサコアと、
メモリシステムと、
1つ以上のDMAスレッドを含むDMAエンジンとを備え、各DMAスレッドは、
並列メモリアドレス計算周期のたびに(1)多次元テンソルのためにM個のメモリアドレスを並列して生成し、メモリアドレスごとに(2)前記多次元テンソルに関するメモリ操作を行うようメモリシステムに求める要求を生成するように構成された要求生成部を含み、前記要求生成部は、M個のメモリアドレス部を含み、前記Mは、1以上であり、各メモリアドレス部は、
前記多次元テンソルの次元ごとに(1)前記次元のステップインデックス値を生成し、前記ステップインデックス値に基づいて(2)前記次元のストライドオフセット値を生成するように構成されるステップ追跡部と、
メモリアドレス計算要素とを含み、前記メモリアドレス計算要素は、
並列メモリアドレス計算周期のたびに、前記ストライドオフセット値に基づいて、前記多次元テンソルのテンソル要素のメモリアドレスを生成し、
前記メモリアドレスを用いて前記メモリ操作を行うよう求める前記要求を、前記
メモリシステムに送るように構成され、前記システムは、さらに、
応答並替え部と、同期更新部とを含む進行状況追跡部を備え、前記同期更新部は、前記DMAエンジンが管理するメモリ操作についての同期に関する一部の最新情報を前記1つ以上のプロセッサコアに提供するように構成される、システム。
【請求項16】
前記要求生成部は、1つのクロック周期の間に前記メモリアドレスを並列して生成するように構成され、各並列メモリ計算は、1つのクロック周期の間に行われる、請求項15に記載のシステム。
【請求項17】
クロック周期のたびに、各メモリアドレス部の前記メモリアドレス計算要素は、他のメモリアドレス部の前記メモリアドレス計算要素と同じまたは異なるテンソル要素のメモリアドレスを生成する、請求項16に記載のシステム。
【請求項18】
前記要求生成部は、前記多次元テンソルの記述子を受け取るように構成され、前記記述子は、次元ごとに、前記次元のストライド値のステップ数を規定する、請求項15~17のいずれか1項に記載のシステム。
【請求項19】
前記要求生成部は、M個のレーンを含み、前記M個のレーンは、各々、ステップ追跡部と、メモリアドレス計算要素とを含み、各レーンの前記ステップ追跡部および前記メモリアドレス計算要素は、対応するメモリアドレスを他のレーンと並列して計算する、請求項15~18のいずれか1項に記載のシステム。
【請求項20】
DMAシステムによって実行される方法であって、
要求生成部が、並列メモリアドレス計算周期のたびに(1)多次元テンソルのためにM個のメモリアドレスを並列して生成し、メモリアドレスごとに(2)前記多次元テンソルに関するメモリ操作を行うようメモリシステムに求める要求を生成するステップを含み、前記要求生成部は、M個のメモリアドレス部を含み、前記Mは、1以上であり、各メモリアドレス部は、ステップ追跡部と、メモリアドレス計算部とを含み、前記方法は、さらに、
前記ステップ追跡部が、前記多次元テンソルの次元ごとに(1)前記次元のステップインデックス値を生成し、前記ステップインデックス値に基づいて(2)前記次元のストライドオフセット値を生成するステップと、
各メモリアドレス部の前記メモリアドレス計算要素が、並列メモリアドレス計算周期のたびに、前記ストライドオフセット値に基づいて、前記多次元テンソルのテンソル要素のメモリアドレスを生成するステップと、
前記メモリアドレスを用いて前記メモリ操作を行うよう求める前記要求を、前記メモリシステムに送るステップとを含む、方法。
【発明の詳細な説明】
【背景技術】
【0001】
背景
DMA(ダイレクトメモリアクセス)とは、デバイスやサブシステムが、処理装置とは独立してメモリにアクセスすることを可能にする機能である。これにより、処理装置は、データ転送に関わることから解放され、処理装置は、その他の操作を実行できるよう、利用可能になる。DMAを利用して、大容量のメモリ転送操作およびスキャッター/ギャザー操作など、処理装置が抱えるコストの高いメモリ操作の負担を軽減させることができる。
【発明の概要】
【課題を解決するための手段】
【0002】
概要
本明細書は、たとえば1つのクロック周期の間に、マルチレベルマルチストライドを行うことと、複数のメモリアドレスを並列して決定することとが可能なDMAアーキテクチャに関する技術について説明する。
【0003】
概して、本明細書において説明する主題の1つの革新的な態様は、1つ以上のハードウェアDMAスレッドを備えるDMA(ダイレクトメモリアクセス)システムに含めることができる。各DMAスレッドは、並列メモリアドレス計算周期のたびに(1)多次元テンソルのためにM個のメモリアドレスを並列して生成し、メモリアドレスごとに(2)多次元テンソルに関するメモリ操作を行うようメモリシステムに求める要求を生成するように構成された要求生成部を含み、要求生成部は、M個のメモリアドレス部を含む。各メモリアドレス部は、多次元テンソルの次元ごとに(1)次元のステップインデックス値を生成し、ステップインデックス値に基づいて(2)次元のストライドオフセット値を生成するように構成されるステップ追跡部と、メモリアドレス計算要素とを含み、メモリアドレス計算要素は、並列メモリアドレス計算周期のたびに、ストライドオフセット値に基づいて、多次元テンソルのテンソル要素のメモリアドレスを生成し、メモリアドレスを用いてメモリ操作を行うよう求める要求を、メモリシステムに送るように構成され、Mは、1以上である。この態様のその他の実施態様は、対応する装置および方法を含む。
【0004】
これらのおよびその他の実施態様は、各々、任意で下記の特徴のうち1つ以上を含み得る。いくつかの態様では、要求生成部は、1つのクロック周期の間にメモリアドレスを並列して生成するように構成され、各並列メモリ計算は、1つのクロック周期の間に行われる。クロック周期のたびに、各メモリアドレス部のメモリアドレス計算要素は、他のメモリアドレス部のメモリアドレス計算要素と同じまたは異なるテンソル要素のメモリアドレスを生成する。
【0005】
いくつかの態様では、要求生成部は、多次元テンソルの記述子を受け取るように構成され、記述子は、次元ごとに、次元のストライド値のステップ数を規定する。要求生成部は、M個のレーンを含み得、M個のレーンは、各々、ステップ追跡部と、メモリアドレス計算要素とを含む。各レーンのステップ追跡部およびメモリアドレス計算要素は、対応するメモリアドレスを他のレーンと並列して計算する。ステップ追跡部は、ループネストに基づいて多次元テンソルのメモリアドレスを生成するように構成され得、ループネストは、多次元テンソルの次元ごとに、多次元テンソルの次元を横断するためのループを含む。各次元のストライド値当たりのステップ数は、次元のループのループ範囲を表し、各次元のステップインデックス値は、次元のループのループインデックスを表す。
【0006】
いくつかの態様では、各ステップ追跡部は、クロック周期のたびに次元の各々のステップインデックス値を更新するように構成される。ステップ追跡部ごとのステップインデックス値の組合せは、他のステップ追跡部のステップインデックス値の組合せとは異なり得る。各ステップ追跡部は、複数のステップインクリメント部を含むステップインクリメントチェーンを含み得、複数のステップインクリメント部は、各々、次元の次元メモリアドレスオフセット値を決定するように構成される。ループネストの最も内側のループに対応するステップインクリメントチェーンの第1ステップインクリメント部は、予告量を受け取るように構成され得る。クロック周期のたびに次元のうち1つ以上の次元のステップインデックス値を更新することは、第1ステップインクリメント部が予告量に基づいて1つ以上の次元のステップインデックス値を更新することを含み得る。
【0007】
いくつかの態様では、最も内側のループが入れ子になっているループに対応するステップインクリメントチェーンの1つ以上の第2ステップインクリメント部は、ステップインクリメントチェーンにある前のステップ追跡部からラップ量を受け取るように構成される。クロック周期のたびに次元のうち1つ以上の次元のステップインデックス値を更新することは、第2ステップインクリメント部がラップ量に基づいて1つ以上の次元のステップインデックス値を更新することを含み得る。
【0008】
いくつかの態様は、応答並替え部と同期部とを含む進行状況追跡部を備え得る。応答並替え部は、テンソル要素のメモリ操作が行われたかどうかのステータスをテンソルごとに保持するように構成され得る。同期部は、複数の一部の最新情報をプロセッサコアに提供するように構成され得、複数の一部の最新情報は、各々、多次元テンソルのテンソル要素に対して行われたメモリ操作の全体的なステータスを明記する。
【0009】
いくつかの態様では、各要求は、一意の識別子を含む。応答並替え部は、メモリシステムから応答を任意の順番に受け取るように構成され得る。各応答は、応答が提供される要求の一意の識別子を含み得る。応答並替え部は、少なくともしきい値数の連続した一意の識別子を応答で受け取った場合、一連の一意の識別子を、要求生成部が再利用できるよう、解放するように構成され得る。
【0010】
概して、本明細書において説明する主題の別の革新的な態様は、1つ以上のプロセッサコアと、メモリシステムと、1つ以上のDMAスレッドを含むDMAエンジンとを備えるシステムに含めることができる。各DMAスレッドは、並列メモリアドレス計算周期のたびに(1)多次元テンソルのためにM個のメモリアドレスを並列して生成し、メモリアドレスごとに(2)多次元テンソルに関するメモリ操作を行うようメモリシステムに求める要求を生成するように構成された要求生成部を含み得、要求生成部は、M個のメモリアドレス部を含み、Mは、1以上である。各メモリアドレス部は、多次元テンソルの次元ごとに(1)次元のステップインデックス値を生成し、ステップインデックス値に基づいて(2)次元のストライドオフセット値を生成するように構成されるステップ追跡部と、メモリアドレス計算要素とを含み得、メモリアドレス計算要素は、並列メモリアドレス計算周期のたびに、ストライドオフセット値に基づいて、多次元テンソルのテンソル要素のメモリアドレスを生成し、メモリアドレスを用いてメモリ操作を行うよう求める要求を、メモリシステムに送るように構成される。各DMAスレッドは、応答並替え部と、同期更新部とを含む進行状況追跡部を備え得、同期更新部は、DMAエンジンが管理するメモリ操作についての同期に関する一部の最新情報を1つ以上のプロセッサコアに提供するように構成される。この態様のその他の実施態様は、対応する装置および方法を含む。
【0011】
これらのおよびその他の実施態様は、各々、任意で下記の特徴のうち1つ以上を含み得る。いくつかの態様では、要求生成部は、1つのクロック周期の間にメモリアドレスを並
列して生成するように構成され、各並列メモリ計算は、1つのクロック周期の間に行われる。
【0012】
クロック周期のたびに、各メモリアドレス部のメモリアドレス計算要素は、他のメモリアドレス部のメモリアドレス計算要素と同じまたは異なるテンソル要素のメモリアドレスを生成し得る。要求生成部は、多次元テンソルの記述子を受け取るように構成され得、記述子は、次元ごとに、次元のストライド値のステップ数を規定する。要求生成部は、M個のレーンを含み得、M個のレーンは、各々、ステップ追跡部と、メモリアドレス計算要素とを含み、各レーンのステップ追跡部およびメモリアドレス計算要素は、対応するメモリアドレスを他のレーンと並列して計算する。
【0013】
概して、本明細書において説明する主題の別の革新的な態様は、DMAシステムによって実行される方法に含めることができる。この方法は、要求生成部が、並列メモリアドレス計算周期のたびに(1)多次元テンソルのためにM個のメモリアドレスを並列して生成し、メモリアドレスごとに(2)多次元テンソルに関するメモリ操作を行うようメモリシステムに求める要求を生成するステップを含み、要求生成部は、M個のメモリアドレス部を含み、Mは、1以上であり、各メモリアドレス部は、ステップ追跡部と、メモリアドレス計算部とを含み、方法は、さらに、ステップ追跡部が、多次元テンソルの次元ごとに(1)次元のステップインデックス値を生成し、ステップインデックス値に基づいて(2)次元のストライドオフセット値を生成するステップと、各メモリアドレス部のメモリアドレス計算要素が、並列メモリアドレス計算周期のたびに、ストライドオフセット値に基づいて、多次元テンソルのテンソル要素のメモリアドレスを生成するステップと、メモリアドレスを用いてメモリ操作を行うよう求める要求を、メモリシステムに送るステップとを含む。
【発明の効果】
【0014】
本明細書において説明する主題は、以下の利点のうち1つ以上を実現するように特定の実施の形態で実現され得る。本明細書において説明するDMAアーキテクチャにより、たとえばクロック周期当たり、多次元テンソルのメモリアドレスを並列して複数(M個)生成することが可能になる。これにより、メモリアドレスをより高速に生成でき、メモリ処理能力が向上する。DMAアーキテクチャは、複数のレーンを含み得、各レーンは、ステップ追跡部を含み、ステップ追跡部は、マルチストライド技術を実行して、多次元テンソルのループネストに基づいて複数のテンソル要素の複数のメモリアドレスを並列して計算する。DMAアーキテクチャの要求生成部が用いるこの技術により、複数のステップ追跡部が、テンソルの複数の次元にそれぞれ異なるステップインデックス値を用いて、並列して動作し、互いに独立して、クロック周期の間にそれぞれ異なるテンソル要素のアドレスを並列して生成することが可能になる。各ステップ追跡部は、次のテンソル要素のメモリアドレスを決定することに備えて、クロック周期のたびにそのステップインデックス値を更新し得る。
【0015】
また、DMAアーキテクチャは、同期に関する一部の最新情報をプロセッサコアに提供する進行状況追跡部を備え得、プロセッサコアは、メモリの決定したメモリアドレスに格納されたデータを消費する。これにより、DMAのメモリトランザクションのすべてが完了する前にプロセッサコアがデータの消費を開始することが可能になり、メモリ転送によってプロセッサコアにかかっていた待ち時間が減り、処理装置の計算の全体的な効率が向上する。進行状況追跡部は、応答並替え部を含み得、応答並替え部は、メモリから一度に複数の応答を任意の順番で受け取ることができ、メモリは、生成された要求に対して、順不同で対処および応答できる。応答並替え部のサイズが限られているので、少なくともしきい値数の要求に対する応答が受け付けられた場合、応答並替え部は、要求の識別子を解放できる。これにより、要求生成部は、最大数の要求のすべてに対する応答を待たずに、
解放された識別子を利用してメモリ要求の発行を継続することが可能なり、メモリ転送の速度および効率が向上する。
【0016】
上述した主題様々な特徴および利点について、図面を参照にしながら以下に説明する。その他の特徴および利点は、本明細書で説明する主題、および添付の特許請求の範囲から明らかである。
【図面の簡単な説明】
【0017】
【
図1】DMAスレッドがメモリ操作を生成してその進行状況を追跡する例示的な環境の図である。
【
図2B】メモリアドレスを決定するための例示的な擬似コードを示す図である。
【
図4】例示的なステップインクリメントチェーンの図である。
【
図7】メモリ操作を求める要求を生成するための例示的な処理を示すフロー図である。
【
図8】メモリ操作の進行状況を追跡するための例示的な処理を示すフロー図である。
【発明を実施するための形態】
【0018】
様々な図面における同じ参照番号および名称は、同じ要素を示す。
詳細な説明
概して、本明細書は、たとえば1つのクロック周期の間に、マルチレベルマルチストライドを行うことと、複数のメモリアドレスを並列して決定することとが可能なDMAアーキテクチャについて説明する。チップは、チップのプロセッサコア(複数可)からのメモリ転送操作の負荷を軽減させる1つ以上のDMAエンジンを含み得る。各DMAエンジンは、1つ以上のDMAスレッドを含み得る。各DMAスレッドは、コア(複数可)に代わってDMAトランザクションの実行を管理するハードウェアユニットである。クロック周期は、DMAエンジンまたはコアによる1つの操作の実行に必要な時間であり得る。
【0019】
図1~
図6に示し、以下で説明する例示的なDMAアーキテクチャは、クロック周期当たり、最大で4つのテンソル次元ならびに最大で4つの読出し元メモリアドレスおよび最大で4つの宛先メモリアドレスをサポートできる設計を提供する。しかしながら、DMAアーキテクチャは、厳密にぴったりと周期当たり4つの次元または4つのアドレスに当てはまらない。周期当たりその他の数の次元およびその他の数のアドレスにも、同様のアーキテクチャが使用できる。これに加えて、周期当たりのアドレスの数は、アドレスが決定されるテンソルの次元の数とは異なり得る。たとえば、DMAスレッドは、周期当たり5つのアドレスを生成するために5つのレーンを含み得るが、ハードウェアは、最大で4つの次元、最大で10個の次元、または別の最大数の次元を有するテンソルのアドレスを計算するように構成される。すなわち、アーキテクチャは、パラメータ化可能であり、設計のための面積/周波数の目標によって設定の選択が異なる。
【0020】
図1は、DMAスレッド120がメモリ操作を生成してその進行状況を追跡する例示的な環境100の図である。DMAスレッド120は、プロセッサコアに代わって要求されるトランザクションの一部としてメモリ操作を生成して、その進行状況を追跡し得る。DMAスレッド120は、ハードウェアユニットである。このハードウェアユニットは、DMAスレッド120と、1つ以上の他のDMAスレッド(必須ではない)とを備えるDMAエンジンの一部であり得る。DMAスレッド120は、スキャッター/ギャザー操作お
よびその他のメモリ転送操作など、コア110を含む1つ以上のプロセッサコアのDMAトランザクションを管理し得る。たとえば、DMAスレッド120は、コア110とDMAスレッド120とを備えるチップ上のメモリシステムの、異なるメモリ間での多次元テンソルの転送を指揮し得る。DMAスレッド120は、メモリシステムに要求(コマンド)を送ることによりデータの移動を指揮し、トランザクションを要求したコアに進行状況を同期できるよう、これらの要求の完了を追跡する。メモリシステムは、読出/書込の要求/コマンドがメモリシステムに入ると、要求の順番に関係なく独立して各要求を満たす。DMAスレッド120は、要求/応答の順番、およびコアとの同期に対処する。DMAスレッド120にこれらのメモリ操作の負荷を肩代わりさせることで、たとえば、機械学習計算を行ったり、テンソルの形を変更したりするなどのその他のタスクのために、コア110上の計算周期が解放される。
【0021】
コア110は、DMAスレッド120に記述子112を送ることによってDMAトランザクションを要求し得る。各DMAトランザクションは、1つ以上のメモリ転送操作を含み得る。記述子112は、DMAトランザクションについての情報を含む。たとえば、記述子112は、データが読み出されるメモリシステム150の読出し元メモリ152(たとえば、読出し元メモリ152のメモリアドレス(複数可))を明記する情報、データが書き込まれる書出し先メモリ154(たとえば、書出し先メモリ154のメモリアドレス(複数可))を明記する情報、テンソル要素が読出し元メモリ152に格納されるソーステンソルのサイズおよび形(たとえば、次元)を明記する情報、ならびにテンソル要素が書出し先メモリ154に格納される宛先テンソルのサイズおよび形を明記する情報を含み得る。テンソル要素とは、テンソルにおける特定のインデックス化された位置に対応するテンソルが含むデータである。
【0022】
ソーステンソルのサイズおよび形は、宛先テンソルのサイズおよび形と同じであってもよく、異なってもよい。たとえば、テンソルの形がコア110によって変更されている場合、サイズおよび形は、異なってもよい。記述子112は、テンソルの各次元のストライド当たりのステップ数の値を用いて、テンソルのサイズおよび形を規定し得る。forループでは、ステップサイズとは、ループのイテレーションごとのインクリメントの大きさであり、ストライド当たりのステップ数とは、ループがリセットされる前のステップの数、たとえばループのループ範囲である。
【0023】
たとえば、1つのテンソルの1つの次元のストライド当たりのステップ数は、その次元全体のテンソル要素の数に等しくてもよい。特に、8×6×4×2の4次元テンソルでは、1つ目の次元のストライド当たりのステップ数が8であり、2つ目の次元のストライド当たりのステップ数が6であり、3つ目の次元のストライド当たりのステップ数が4であり、4つ目の次元のストライド当たりのステップ数が2であり得る。詳細については後述するが、ストライド当たりのステップ数を用いて、テンソルの各次元を横断(traverse)し、テンソル要素のメモリアドレスを計算できる。
【0024】
また、記述子112は、各次元のストライド次元オフセット値を含み得る。後述するが、これらのストライド次元オフセット値(次元オフセット値とも称する)を使用して、テンソル要素のメモリアドレスを決定する。次元オフセットとは、ストライドの距離である。テンソル次元に沿った処理の各ステップにおいて、DMAスレッド120は、ストライド次元オフセット値だけメモリアドレスを「飛び越す(hop)」。記述子112は、ソーステンソルについて、ソーステンソルの各次元のストライド次元オフセット値を含み得る。また、記述子112は、宛先テンソルについて、宛先テンソルの各次元のストライド次元オフセット値を含み得る。
【0025】
DMAスレッド120は、記述子112を格納する記述子キュー122を備える。たと
えば、DMAスレッド120は、受け取って記述子キュー122に格納した記述子112に基づいて、複数のDMAスレッドを逐次実行し得る。いくつかの実施態様では、記述子キュー122は、FIFO(First-In,First-Out)キューであり、DMAトランザクションの記述子112が受け取られる順番にDMAスレッド120がDMAトランザクションを実行できる。DMAトランザクションの実行は、完全にパイプライン化されており、順不同な操作を行うように実装され得るが、処理装置には、プログラム順に実行しているように見える。
【0026】
また、DMAスレッド120は、記述子スプリッター124を含む。記述子スプリッター124は、ソースサブスレッド130が利用する情報および宛先サブスレッド140が利用する情報を記述子112から取り出して、各サブスレッド130および140に適切な情報を提供し得る。
【0027】
一般に、ソースサブスレッド130は、読出し元メモリ152からデータを読み出すための読出要求を生成してメモリシステム150に送り、読出動作の進行状況を追跡して、読出動作の進行状況にコア110を同期させる。同様に、宛先スレッド140は、書出し先メモリ154にデータを書き込むための書込要求を生成してメモリシステム150に送り、書込動作の進行状況を追跡して、書込動作の進行状況にコア110を同期させる。メモリシステム150は、コア110またはコア110を備えるチップの主メモリ、たとえば、コア110またはチップのRAM(ランダムアクセスメモリ)であり得る。メモリシステムは、読出し元メモリ読出要求ごとに読み出されるデータが書出し先メモリへの書込要求と対になるよう、実際のメモリの配線を実装する。データがDMAスレッドを通過することはない(要求アドレスは送り出され、応答は受け取られるが、これらの応答および要求は、メモリデータを保持しない)。
【0028】
ソースサブスレッド130は、記述子112に基づいて読出要求を生成する要求生成部132を含む。詳細については後述するが、要求生成部132は、たとえばクロック周期当たり複数のメモリアドレスを並列して生成し、メモリアドレスごとに読出要求を生成し得る。たとえば、要求生成部132は、コア110の1つのクロック周期の間に、多次元テンソルを横断しながら複数のテンソル要素の各々のメモリアドレスを生成し得る。各読出要求は、要求識別子(「要求ID」)と、データが読み出されるメモリアドレスと、メモリオペコードとを含み得る。後述するが、応答は順不同に受け取られ得るので、要求IDは、要求を応答と対応付けるために使われるシーケンス番号またはタグであり得る。メモリオペコードは、メモリ操作、たとえば、要求が読出操作であるのか、書込操作であるのか、memset操作であるのか、または要求のメモリアドレスをターゲットにした別の操作であるのかを示す。
【0029】
また、ソースサブスレッド130は、読出要求が明記する読出動作の進行状況を追跡する進行状況追跡部134を含む。たとえば、メモリシステム150は、読出動作が完了したことを知らせる読出応答を進行状況追跡部134に送り得る。各読出応答は、応答が送られた読出要求の要求IDを含み得る。こうすることで、進行状況追跡部134は、要求IDを使用して、DMAトランザクションの進行状況を追跡できる。
【0030】
宛先サブスレッド140は、記述子112に基づいて書込要求を生成する要求生成部142を含む。詳細については後述するが、要求生成部142は、たとえばクロック周期当たり複数のメモリアドレスを並列して生成し、メモリアドレスごとに書込要求を生成し得る。たとえば、要求生成部142は、コア110の1つのクロック周期の間に、多次元テンソルを横断しながら複数のテンソル要素の各々のメモリアドレスを生成し得る。各書込要求は、要求IDを含み得、データが書き込まれるメモリアドレスを明記し得る。
【0031】
また、宛先サブスレッド140は、書込要求が明記する書込動作の進行状況を追跡する進行状況追跡部134を含む。たとえば、メモリシステム150は、書込動作が完了したことを知らせる書込応答を進行状況追跡部144に送り得る。各書込応答は、応答が送られた書込要求の要求IDを含み得る。こうすることで、進行状況追跡部144は、要求IDを使用して、DMAトランザクションの進行状況を追跡できる。
【0032】
進行状況追跡部134および144は、それぞれ同期メッセージ115および116をコア110に送り、記述子112に対応するDMAトランザクションの進行状況についての最新情報をコア110に提供し得る。同期メッセージ115および116は、完了度合い(たとえば、完了したメモリ操作の割合もしくは数)および/または応答が受け取られた要求IDを明記し得る。
【0033】
後述するが、進行状況追跡部134および144は、DMAトランザクションの進行状況についての一部のまたは不完全な最新情報を提供する同期メッセージ115および116を送り得る。たとえば、各進行状況追跡部134および144は、DMAトランザクションに対する指定された数、たとえば、しきい値数の応答が受け取られるたびに同期メッセージ115および116を送るように構成され得る。特定の例では、各進行状況追跡部134および144は、連続した一続きの少なくともしきい値数の要求IDに対する応答が受け取られるたびに同期メッセージ115および116を送るように構成され得る。メモリ操作が行われる順番(よって、テンソル要素が移動されている順番)をコア110は知り得るので、コア110は、すべての一連のDMAトランザクションが完了するのを待たずに、これらの一部の最新情報に基づいて、転送済みのデータの処理を開始し得る。
【0034】
読出操作と書込動作に別個のサブスレッドを用いることで、処理能力を向上させることが可能になる。たとえば、各サブスレッド130および140が、クロック周期当たり特定の数の要求、たとえば、クロック周期当たり4つの要求を並列して生成できる場合、2つのサブスレッド130および140によって生成される要求の数は、当該特定の数の2倍、たとえば、8個の要求になる。
【0035】
場合によっては、複数のDMAスレッドを使用してDMAトランザクションが行われ得る。たとえば、メモリのバンド幅が、1つのDMAスレッドが生成し得る要求よりも多くの要求をクロック周期当たりに対処するのに十分である場合、複数のDMAスレッドを使用して要求が生成され得る。多次元テンソルのデータを転送するために複数のDMAスレッドが使用される場合、各DMAスレッドは、多次元テンソルの一部、たとえば、テンソルの1つのスライスの記述子を受け取り得る。この記述子は、フルテンソルの記述子と同様に、テンソルのスライスのサイズおよび形と、メモリアドレスとを明記し得る。
【0036】
図2Aは、例示的な要求生成部200の図である。要求生成部200は、
図1の要求生成部132および142の各々を実装するために用いられ得る。この例では、要求生成部200は、最大で4つのテンソル次元があり、クロック周期当たり最大で4つのメモリアドレスが生成され得る実装向けに構成される。
【0037】
一般に、要求再生成部200は、多次元テンソルまたはその他の多次元データ構造(本明細書では、説明が煩雑になるのを防ぐために、テンソルと称す)におけるテンソル要素のメモリアドレスを決定し得る。要求生成部200は、テンソルのデータがメモリから読み出されるおよび/またはメモリに書き込めるよう、メモリアドレスを決定し得る。要求生成部200は、テンソル内でのテンソル要素の位置を定める当該テンソル要素のステップインデックス値に基づいて、テンソル要素のメモリアドレスを計算し得る。例示的な要求生成部200は、5段階設計を用いて、隣接する段階の間にパイプラインレジスタ220、230、240、260、および270を配置させた状態に実装される。
【0038】
メモリアドレスを決定するために、要求生成部200は、各次元の各ステップインデックス値を1つずつ進むことにより、各次元を横断し得る。たとえば、1つの次元が10個の要素を含む場合、要求生成部200は、ステップインデックス値を1から10の順番に1つずつ進み得る。概念的に、これは、テンソルの次元ごとに1つのループを含んだループネストを使用して行われ得る。このような例では、そのループに含まれる要素の数にループ範囲が等しくなるまでループのイテレーションごとに当該ループのステップインデックス値をインクリメントすることによって、テンソルの1つ次元がループを用いて横断され得る。ループ範囲に達すると、次の外側のループがインクリメントされ、現在のループは、次元が含む最初の要素に対応する最初のステップインデックス値にリセットされる。最も内側のループは、ループネストに含まれる4つのループのステップインデックス値に対応するテンソル内の位置にあるテンソル要素のメモリアドレスを決定するためのメモリアドレス計算を含み得る。4つのループを使用してメモリアドレスを決定するための例示的な擬似コード280を
図2Bに示す。
【0039】
図2Bを参照すると、擬似コード280は、1つのテンソルの4つの次元を横断するために使われる4つのループ281~284を含む。図示した擬似コード280には、トランザクションの半分が記述されている(ソース側が読み込むか、宛先側が書き出すかのいずれか)。完全なトランザクションにするために、同じまたは同様の擬似コードが別個に2回インスタンス化され得る。擬似コード280では、各次元のループ範囲(steps_per_stride)は、転送のソース側と宛先側とで同じであるが、ストライドオフセット値(stride_dimension_offset_value_i)は異なり得る。すなわち、擬似コードにおけるsteps_per_stride_0はソース側と宛先側とで同じであるが、ソース側の擬似コードにおけるstride_dimension_offset_value_0は、宛先擬似コードにおけるstride_dimension_offset_value_0とは異なり得る。
【0040】
最も外側のループ281は、複数ある次元のうち1つに対応し、ステップインデックス値i0と、ループ範囲steps_per_stride_0とを含む。ループ範囲steps_per_stride_0は、最も外側のループに対応する次元281に含まれる要素の数に等しくてもよい。同様に、ループ282は、複数ある次元のうち1つに対応し、ステップインデックス値i1と、ループ範囲steps_per_stride_1(ループ282に対応する次元に含まれる要素の数に等しくてもよい)とを含み、ループ283は、複数ある次元のうち1つに対応し、ステップインデックス値i2と、ループ範囲steps_per_stride_2(ループ283に対応する次元に含まれる要素の数に等しくてもよい)とを含む。
【0041】
最も内側のループ284もまた、複数ある次元のうち1つに対応し、ステップインデックス値i
3と、ループ範囲steps_per_stride_3(最も内側のループ284に対応する次元に含まれる要素の数に等しくてもよい)とを含む。最も内側のループのイテレーションごとに、関数285を使用して、テンソルの各次元の次元メモリアドレスオフセット値が計算され、これらの次元メモリアドレスオフセット値を用いて、関数286を使用して、ステップインデックス値i
0~i
3に対応するテンソル要素のメモリアドレスが決定される。最も外側のループ281に対応する次元の次元メモリアドレスオフセット値(destination_memory_address_offset_0)は、ループのステップインデックス値i
0と次元のストライド次元オフセット値(stride_dimension_offset_value_0)との積に等しい。その他の次元ごとの次元メモリアドレスオフセット値も、
図2Bに示すように、同様に決定される。上述したように、次元のストライド次元オフセット値は、記述子に含まれ得る。
【0042】
その後、テンソル要素のメモリアドレスは、ベースメモリアドレス、およびテンソルの各次元の次元メモリアドレスオフセット値に基づいて計算され得る。たとえば、テンソル要素のメモリアドレスは、
図2Bに示すように、ベースメモリアドレスと、それぞれの次元の次元メモリアドレスオフセット値との和に基づき得る、たとえば、ベースメモリアドレスと、それぞれの次元の次元メモリアドレスオフセット値との和に等しい。
【0043】
図2Aに戻ると、要求生成部200は、実際にループを繰り返さずに、類似したメモリアドレス計算を並列して行い得る。この例では、要求生成部200は、たとえば1つのクロック周期内で4つのメモリアドレスを並列して計算するための4つのレーン201~204を含む。その他の例では、たとえば3つのメモリアドレスには3つのレーン、5つのメモリアドレスには5つのレーンなど、2つ以上のレーンを使用して2つ以上のメモリアドレスが並列して計算され得る。すなわち、要求生成部200は、M個のメモリアドレスを並列して計算するためにM個のレーンを含み得る。ここで、Mは、1以上である。要求生成部200は、並列メモリアドレス計算周期の間に、M個のメモリアドレスを計算し得る。並列メモリアドレス計算周期の長さは、1つのクロック周期以下の長さである。
【0044】
レーンの数は、テンソルの次元の数と同じであってもよく、異なってもよい。たとえば、要求生成部200を用いて、記述子112に含まれる情報に基づいて、次元の数が異なるテンソルのメモリアドレスを計算し得る。たとえば、4つのレーンを有する要求生成部200は、最大で4つのレーンのすべてを使用して、3次元テンソルのメモリアドレスを周期当たり最大で4つ計算し得る。また、同じ要求生成部200は、最大で4つのレーンすべてを使用して、1次元テンソル、2次元テンソル、または4次元テンソルのアドレスを周期当たり最大で4つ計算し得る。
【0045】
各レーン201~204は、互いに異なるテンソル要素のメモリアドレスを計算しなければならず、各レーンが互いに独立して動作するので、マルチレベルマルチストライド(この例では、4レベルマルチストライド)に基づいてこのような計算を並列して行うことは、難しいであろう。各レーン201~204が並列して、たとえば同時にメモリアドレスを計算するので、一方のレーンが、他方のレーンが完了するのを待ってから、1つ以上のループを繰り返して次のテンソル要素のメモリアドレスを決定することはできない。その代わりに、各レーンが、別のレーンを待たずに、次のテンソル要素(たとえば、次のテンソル要素のステップインデックス値)を決定し、そのテンソル要素のメモリアドレスを決定できるようになければならない。
【0046】
要求生成部200は、それぞれのレーン201~204に(よって、それぞれの並列メモリアドレス計算のために)メモリアドレス部242~248を含む。各メモリアドレス部242~248は、それぞれステップ追跡部222~228と、それぞれメモリアドレス計算要素252~258とを含む。一般に、ステップ追跡部222~228は、テンソルのテンソル要素を1つずつ進んで、テンソル要素の次元メモリアドレスオフセット値を決定するように構成される。メモリアドレス計算要素252~258は、ステップ追跡部222~228から受け取る次元メモリアドレスオフセット値を用いて、テンソル要素のメモリアドレスを決定するように構成される。
【0047】
要求生成部200は、ステップ追跡部222~228のために値を事前に計算する計算要素210を備える。たとえば、計算要素210は、メモリアドレスが決定される次のテンソル要素の次のステップインデックス値を決定するためにステップ追跡部222~228が使用できる様々なステップ比較値を事前に計算し得る。後述するが、現在のステップインデックス値とステップ比較値との比較は、次のステップインデックス値を決定するためのその他の条件とともに使用され得る。計算要素210は、テンソルの各次元のステップ比較値を事前に計算し得る。要求生成部200がメモリアドレスを生成して要求を送っ
ている現在の記述子112のテンソルの次元の数によっては、これらのステップ比較値は、たとえば、次元のストライド当たりのステップ数から1を減算した値、次元のストライド当たりのステップ数から2を減算した値、次元のストライド当たりのステップ数から3を減算した値などであり得る。計算要素210は、必須ではなく、事前に計算された値も必須ではない。値を事前に計算することは、次のクロック周期上でのクリティカルパスタイミングを改善するのに役立ち得る。
【0048】
計算要素210は、ステップ比較値を事前に計算してレジスタ220(またはその他の適切なデータ記憶素子)に格納する一連のハードウェア加算器を備え得る。計算要素210は、記述子で受け取ったストライド当たりのステップ数の値に基づいて、比較オフセット値を計算し得る。この記述子は、次元のうち1つ以上の次元のストライド当たりのステップ数の値を含み得る。この例では、記述子は、次元1~3(sps_1~sps_3)のストライド当たりのステップ数の値を含み売るが、次元0(たとえば、最も外側のループに対応する次元)のストライド当たりのステップ数の値は含まない。たとえば、ストライド当たりのステップ変数が32ビットの符号付き整数で表される場合、次元0のストライド当たりのステップ数の値は、最大整数値、たとえば、符号付き32ビットの整数で格納できる最大整数値である、と暗に示され得る。別の例では、ストライド当たりのステップ数の値は、記述子に含まれ得るが、
図2Aには示していない。
【0049】
ストライド当たりのステップ数の値がテンソルのサイズおよび形に基づいて異なり得るので、計算要素210は、記述子ごとにステップ比較値を事前に計算し、レジスタ220に格納し得る。また、記述子は、レジスタ220に格納され得る。
【0050】
また、要求生成部200は、FSM(有限ステートマシン)232を備える。FSM232は、記述子112からの情報に基づいてステップ追跡部222~228を初期化および制御し得る。たとえば、FSM232は、レジスタ230から記述子情報を取得して、記述子情報に基づいて、記述子が規定するDMAトランザクションを求めて送る要求の数を決定し得る。この数は、テンソルに含まれるテンソル要素の数であり得る。FSM232は、送る残りの要求の数を追跡し、この残りの要求の数に基づく予告量(advance amount)を各ステップ追跡部222~224に送り得る。予告量は、メモリアドレス計算要素252~258が行うメモリアドレス計算の次の周期の間に計算されるメモリアドレスの数を定める。
【0051】
たとえば、4つのレーン201~204のすべてを使用してDMAトランザクションを実行する過程で、予告量は、4に等しくてもよい。しかしながら、このDMAトランザクションについて計算されるメモリアドレスの数が4つ未満である場合、最後の周期の予告量は、4よりも小さい値になる。たとえば、メモリアドレスの数が18である場合、FSM232は、最初の4つの周期については4という予告量を各ステップ追跡部222~228に提供し、その後、最後の周期については2という予告量を提供する。
【0052】
また、FSM232は、ステップ追跡部232をストールし得る。たとえば、後述するが、進行状況追跡部134および144は、1度に特定の数の要求の進行状況を追跡すればよい。要求生成部200は、割り当てられた要求IDを使い切ると、要求生成部200は、要求生成部200自体、たとえば、ステップ追跡部232をストールし得る。要求IDが解放されて再割り当てされ得る場合、たとえば、後述するが、少なくともしきい値数の連続した要求IDに対する応答が受け取られると、進行状況追跡部134および144は、要求IDクレジットを返し得る。
【0053】
また、要求生成部132および142は、外部接続バックプレッシャー(external interconnect backpressure)により、ストールし得る(すなわち、メモリシステムは、新し
い要求をまだ受け付けられない)。いくつかの実施態様では、各DMAスレッド120は、ソフトウェアによって構成可能なハードウェアFSMを用いて、独立して速度が絞られ得る。ソフトウェアは、構成可能なサンプリング期間にわたる目標要求生成バンド幅をDMAスレッド120ごとに設定し得、DMAスレッド120は、割り当てられたバンド幅に達すると自動的にそのパイプラインをストールする。よって、DMAスレッド120は、(1)メモリシステムネットワークバックプレッシャー、(2)要求バンド幅が絞られる、(3)要求ID割り当てを使い果たす(進行状況追跡部がクレジットを返すのを待つ)という3つの異なる状況でストールし得る。
【0054】
各ステップ追跡部222~228は、FSM232から受け取った予告量と、テンソルの各次元の現在のステップインデックス値と、各次元のストライド当たりのステップ数の値とを用いて、各次元の次のステップインデックス値を決定する。また、各ステップ追跡部222~228は、各次元の次元メモリアドレスオフセット値を、当該次元の次のステップインデックス値と、当該次元のストライド次元オフセット値とに基づいて決定する。各ステップ追跡部222~228は、決定した次元メモリアドレスオフセット値を、それぞれの対応するメモリアドレス計算要素252~258にレジスタ240を介して出力する。後述するが、メモリアドレス計算要素252~258は、受け取った次元メモリアドレスオフセット値に基づいてテンソル要素のメモリアドレスを決定する。
【0055】
ステップ追跡部222~228は、互いに異なるテンソル要素の次元メモリアドレスオフセット値を決定する。たとえば、全部で16個のテンソル要素を含む2×2×2×2のテンソル(またはその他の形のテンソル)について考える。4つのレーン201~204が周期ごとに4つの要求を生成するので、各ステップ追跡部222~228は、16個のテンソル要素のうち、全部で4つのテンソル要素の次元メモリアドレスオフセット値を決定する。たとえば、ステップ追跡部222が最初のテンソル要素、5番目のテンソル要素、8番目のテンソル要素、および13番目のテンソル要素の次元メモリアドレスオフセット値を決定し得、ステップ追跡部224が2番目のテンソル要素、6番目のテンソル要素、10番目のテンソル要素、および14番目のテンソル要素の次元メモリアドレスオフセット値を決定するなどである。
【0056】
ステップ追跡部222~228は、それぞれの次元メモリアドレスオフセット値を、互いに独立して、並列して決定し得る。すなわち、いくつかの実施態様では、ステップ追跡部222~228は、その他のステップ追跡部222~228とはデータを通信しない。その代わりに、詳細については後述するが、各ステップ追跡部222~228は、ステップ追跡部222~228の初期化およびFSM232から受け取った予告量に基づいて、次のテンソル要素(たとえば、次のテンソル要素のステップインデックス値)を決定するように構成され得る。このように、いずれのステップ追跡部222~228も他のステップ追跡部222~228を待たなくてよく、この並列計算は、すべてのステップ追跡部222~228によって1つのクロック周期で完了され得る。ステップ追跡部の例示的なアーキテクチャ、および次元メモリアドレスオフセット値を決定するための技術について、
図3、
図4、および
図7に示し、以下に説明する。
【0057】
メモリアドレス計算要素252~258は、第1加算要素262A~268Aと、第2加算要素262B~268Bとをそれぞれ含む。第1加算要素262A~268Aは、並列メモリアドレス計算周期ごとにそれぞれのステップ追跡部222~228から受け取った次元メモリアドレスオフセット値の和を求め得る。たとえば、加算要素262Aは、ステップ追跡部222が生成した特定のテンソル要素についての4つの次元メモリアドレスオフセット値の合計を求め得る。第1加算要素262A~268Aは、ハードウェア加算器として実現され得る。
【0058】
第2加算要素262B~268B(これらもハードウェア加算器としても実現され得る)は、それぞれの対応する第1加算要素262A~268Aが計算した次元メモリアドレスオフセット値の和と、基底アドレスとに基づいて、テンソル要素のメモリアドレスを決定し得る。たとえば、加算要素262Bは、ステップ追跡部222が生成した特定のテンソル要素についての4つの次元メモリアドレスオフセット値の和に基底アドレスを加算することによって、当該特定のテンソル要素のメモリアドレスを決定し得る。
【0059】
第2加算要素262B~268Bは、それぞれのメモリアドレスをレジスタ270に出力し得る。要求送信部290は、各メモリアドレスを求める要求を生成して、メモリシステム、たとえば、
図1のメモリシステム150に送り得る。要求は、要求IDと、メモリアドレスとを含み得る。要求IDは、要求に順番に割り当てられ得る。たとえば、DMAスレッドが一度に500個の未処理の要求を有するように構成された場合、要求IDは、0または1から始まり、それぞれ最大で499または500までになる。0~499が用いられた場合、最初の要求の要求IDは0であり得、2番目の要求の要求IDは1であり得るなどである。要求送信部299は、各要求の要求IDを決定するカウンタを備え得る。
【0060】
4つのレーン201~204は、各々、1つのクロック周期の間に、テンソル要素のメモリアドレスを並列して生成し得る。FSM232は、レーン201~204のステップ追跡部222~228を制御して、テンソルに含まれる各テンソル要素のメモリアドレスが計算されるまで、テンソルの各テンソル要素を反復処理する。記述子を求める要求を発行し終わると、FSM232は、次の記述子に取り掛かり得る。しかしながら、FSM232は、すべての要求に対する応答が受け取られるのを待つ必要はない。少なくともしきい値数の連続した(たとえば、応答が受け取られた)要求IDが利用可能であれば、進行状況追跡部132または134は、要求生成部200がこれらの利用可能な要求IDを用いて次の記述子を求める要求を発行できるよう、要求生成部200に通知を行い得る。これにより、DMAスレッドの処理能力および効率性がさらに向上する。
【0061】
上述したように、DMAサブスレッド132および134の要求生成部132および134は、要求生成部200を用いて実装され得る。この例では、各サブスレッド132および134は、クロック周期当たり4つの要求を送ることが可能になる。
【0062】
図3は、例示的なステップ追跡部300の図である。ステップ追跡部300は、
図2Aのステップ追跡部222~228の各々を実装するために用いられ得る。この例では、ステップ追跡部300は、2つのインクリメントチェーン322および324を備える。インクリメントチェーン322および324は、同じまたは同様の関数を実行して、テンソル要素のステップインデックス値および次元メモリアドレスオフセット値を生成し得る。これにより、ステップインクリメントチェーンのうち一方は、DMAスレッドが処理を開始する現在の記述子の次元メモリアドレスオフセット値を積極的に決定できるようになり、他方のステップインクリメントチェーンは、DMAスレッドが処理する次の記述子のために初期化される。
【0063】
たとえば、ステップインクリメントチェーン324が現在の記述子の次元メモリアドレスオフセット値を積極的に決定し得る。ステップインクリメントチェーン324は、FSMから受け取った予告量、たとえば、
図2のFSM232、および(記述子が規定する)ストライドパラメータを用いて、現在の記述子の次元メモリアドレスオフセット値を決定し得る。
図4を参照して後述するが、ステップインクリメントチェーン324がアクティブである間、FSMは、ステップインクリメントチェーン322を初期化し得る。
【0064】
現在の記述子の最後の周期のメモリアドレスが要求されている間に、FSMは、初期化
されたステップインクリメントチェーン322に切り替えて、ステップインクリメントチェーン322に初期化量を送り得る。ステップインクリメントチェーン324が次元メモリアドレスオフセット値の最後の一式を決定したクロック周期の直後のクロック周期に、ステップインクリメントチェーン322は、次元メモリアドレスオフセット値の最初の一式を生成し得る。2つのステップインクリメントチェーンをこのように利用することで、特に、テンソルが小さい場合にDMAスレッドの処理能力および効率性が大幅に改善し得る。たとえば、このテンソルのメモリアドレスのすべてを決定するために要求生成部が3つのクロック周期しか必要としない場合、1つのクロック周期を用いてテンソル間の1つのステップインクリメントチェーンを再度初期化すると、処理能力(たとえば、単位時間当たりに行われるメモリ操作の数)が25%低下してしまう。
【0065】
ステップインクリメントチェーン322と324とを切り替えるとき、FSMは、マルチプレクサ332~338の一式を制御して、レジスタ342を介してどのステップインクリメントチェーンの出力をメモリアドレス計算部に送るかを選択し得る。たとえば、FSMは、インクリメントチェーン322がアクティブである場合、各マルチプレクサ332~338の上段のレーンを選択し得、インクリメントチェーン324がアクティブである場合、各マルチプレクサ332~338の下段のレーンを選択し得る。
【0066】
図2Bを参照して上述したが、各レーン201~204は、ステップ追跡部300として実装され得るステップ追跡部を含む。この例では、ステップ追跡部300は、レーン0のステップ追跡部であり、レーン0の4つの次元メモリアドレスオフセット値を出力する。
【0067】
また、図示しないが、各ステップ追跡部300は、次元メモリアドレスオフセット値を決定するために用いられる次のステップインデックス値を出力し得る。当該次のステップインデックス値は、後続のステップインデックス値および次元メモリアドレスオフセット値を決定する際に使用するために、ステップ追跡部300に戻される。すなわち、ステップインクリメントチェーン324は、各次元のステップインデックス値を決定し得、各次元の次元メモリアドレスオフセット値を決定し得る。これらの値は、ステップインクリメントチェーン324に現在値として戻されて、次の値を決定する際に使用され得る。
【0068】
また、ステップ追跡部300は、ステップインデックス値用のマルチプレクサを備え得る。これらのマルチプレクサは、マルチプレクサ322~338がステップインクリメントチェーン322および324の両方から次元メモリアドレスオフセット値を受け取るのと同様に、ステップインクリメントチェーン322および324の両方から各次元のステップインデックス値を受け取る。これらのマルチプレクサの出力は、ステップインクリメントチェーン324に提供されて、後続のステップインデックス値を決定する際に使用される。
【0069】
ステップインクリメントチェーン324が現在の記述子の次元メモリアドレスオフセット値を計算する一方、ステップインクリメントチェーン322は、初期化された状態を用いて、次の記述子のメモリアドレスの第1セットの次元メモリアドレスオフセット値を決定し得る。しかしながら、FSMは、マルチプレクサ332~338を制御して、ステップインクリメントチェーン324から受け取った次元メモリアドレスオフセット値を渡し得る。現在の記述子が完了すると、FSMは、マルチプレクサ332~338を制御して、1つ周期についてステップインクリメントチェーン322が計算した次元メモリアドレスオフセット値を渡し得る。次元メモリアドレスオフセット値は、次のテンソルの最初の4つのテンソル要素の値を含む。また、FSMは、ステップインデックス値に関してマルチプレクサを制御して、ステップインクリメント部322からステップインクリメントチェーン324にこの1つの周期のステップインデックス値を渡し得る。その後、ステップ
インクリメントチェーン324は、ステップインデックス値の現在の状態を有することとなり、この記述子に関連する残りの周期の次元メモリアドレスオフセット値を決定し得る。この記述子の最初の周期が完了した後、FSMは、マルチプレクサを制御して、ステップインクリメントチェーン324の出力を再び渡し得る。
【0070】
図4は、例示的なステップインクリメントチェーン400の図である。ステップインクリメントチェーン400は、DMAスレッドが処理するように構成された最大テンソルの次元ごとに、ステップインクリメント部を備え得る。この例では、ステップインクリメントチェーン400は、最大で4つの次元テンソルに対して4つのステップインクリメント部410~440を含む。
図4に示すこの例示的なステップインクリメントチェーンは、キャリーリップル方式の加算回路と同様の形式で組合せ関数として実装される。
【0071】
各ステップインクリメント部410~440は、パラメータのセットを受け取り得る。このステップインクリメント部410~440のパラメータのセットは、ステップインクリメント部410~440に対応する次元のストライド当たりのステップ数と、計算要素210が事前に計算した次元の各ステップ比較値とを含み得る。これらの値は、DMAトランザクションが行われているテンソルの含み得るサイズおよび形に基づいて変わり得るので、ステップインクリメント部410~440は、記述子ごとに初期化され得る。
【0072】
また、各ステップインクリメント部410~440は、その次元のステップインデックス値と、当該次元の次元オフセット値とを受け取り得る。この次元のステップインデックス値は、(ステップインクリメントチェーン322への入力値によっても図示されているように)最初の周期で0に初期化され得る。最初の周期の後、ステップインクリメント部410~440に入力されるステップインデックス値は、ステップインクリメント部410~440によって出力される次のステップインデックス値になる。上述したように、次元の次元オフセット値は、ステップインデックス値によって乗算される値であり、次元メモリアドレスオフセット値を決定する。
図2Bの擬似コード280の4つのループを使用することと比較すると、ステップインクリメント部410は、ループネストの最も内側のループと同様に機能する。しかしながら、ループのイテレーションごとにステップインデックスを1つインクリメントするのではなく、ステップインクリメント部410は、FSMから受け取った予告量に基づいて、そのステップインデックス値をインクリメントする。たとえば、予告量が4であった場合、ステップインクリメント部410は、その次元のステップインデックス値を4つずつインクリメントするであろう。このインクリメント数が次元のストライド当たりのステップ数を超えた場合、ステップインクリメント部は、ステップインデックス値を0に再度初期化して、4回インクリメントされるまでインクリメントを続け得る。これは、2回以上の再度初期化することを含み得る。たとえば、ストライド当たりのステップ数が3で予告量が4である場合、ステップインクリメント部410は、0から3にインクリメントし、0に再度初期化し、4回インクリメントした後に、0から1にインクリメントするであろう。
【0073】
ステップインクリメント部410は、ステートフルなイテレーションを利用するのではなく、最適化された加算器のペアと同様に挙動する組合せ関数を利用し得る。加算器のように、ステップインクリメント部の一部は、2つのオペランド(「ステップ3 インデックス」および「advance_amount」)をとり、和(「ステップ3 次のインデックス」)と、桁上がり(「ラップ量」)とを出す。この関数は、次の次元オフセットを計算する関数がラップ量の出力を出さないこと以外は、次元オフセットに対して同様である。
【0074】
ステップインクリメント部410は、ステップインクリメント部420にラップ量を出力し得る。ラップ量は、受け取った予告量に基づいてステップインクリメント部410の
ステップインデックス値が現在の周期において再度初期化された回数に等しくてもよい。すなわち、ラップ量は、予告量に基づいて4つのループがラップアラウンドされる回数を反映している。
【0075】
ステップインクリメント部410~440がその次元メモリアドレスオフセット値を計算する周期ごとに、たとえば、1つのクロック周期の間に、ステップインクリメント部410は、その次元の次のステップインデックス値と、ステップインクリメント部420のラップ量と、次元メモリアドレスオフセット値(たとえば、次のステップインデックス値と、次元の次元オフセット値との積)とを計算し得る。
【0076】
ステップインクリメント部420がFSMから受け取った予告量を利用した方法と同様の方法で、ステップインクリメント部420は、ステップインクリメント部410から受け取ったラップ量を利用する。すなわち、ラップ量は、ステップインクリメント部420に対応する次元のステップインデックス値がこの周期でインクリメントされる回数を表す。ステップインクリメント部420は、そのステップインデックス値を、ステップインクリメント部410から受け取ったラップ量を用いてインクリメントし、次のステップインデックス値を決定する。また、ステップインクリメント部420は、その次元メモリアドレスオフセット値を、次のステップインデックス値を用いて決定し得る(たとえば、次元の次のステップインデックス値とストライド次元オフセット値との積)。
【0077】
ステップインクリメント部410と同様に、ステップインクリメント部420も、ラップ量を計算してステップインクリメント部430に出力し得る。ラップ量は、ステップインクリメント部410から受け取ったラップ量に基づいてステップインクリメント部420のステップインデックス値が現在の周期で再度初期化された回数と等しくてもよい。すなわち、ラップ量は、受け取ったラップ量に基づいて4つのループがラップアラウンドされる回数を反映している。
【0078】
ステップインクリメント部430は、ステップインクリメント部420から受け取ったラップ量を同様に利用し得る。すなわち、ラップ量は、ステップインクリメント部430に対応する次元のステップインデックス値がこの周期でインクリメントされる回数を表す。ステップインクリメント部430は、そのステップインデックス値を、ステップインクリメント部420から受け取ったラップ量を用いてインクリメントし、次のステップインデックス値を決定し得る。また、ステップインクリメント部430は、その次元メモリアドレスオフセット値を、次のステップインデックス値を用いて決定し得る(たとえば、次元の次のステップインデックス値とストライド次元オフセット値との積)。
【0079】
ステップインクリメント部420と同様に、ステップインクリメント部430もラップ量を計算してステップインクリメント部440に出力し得る。ラップ量は、ステップインクリメント部430のステップインデックス値が、ステップインクリメント部420から受け取ったラップ量に基づいて現在の周期で再度初期化された回数に等しくてもよい。すなわち、ラップ量は、受け取ったラップ量に基づいて4つのループがラップアラウンドされる回数を反映している。
【0080】
ステップインクリメント部440は、ステップインクリメント部430から受け取ったラップ量を同様に利用し得る。すなわち、ラップ量は、ステップインクリメント部440に対応する次元のステップインデックス値がこの周期でインクリメントされる回数を表す。ステップインクリメント部440は、そのステップインデックス値を、ステップインクリメント部430から受け取ったラップ量を用いてインクリメントし、次のステップインデックス値を決定し得る。また、ステップインクリメント部440は、その次元メモリアドレスオフセット値を、次のステップインデックス値を用いて決定し得る(たとえば、次
元の次のステップインデックス値とストライド次元オフセット値との積)。
【0081】
ステップインクリメント部410~440がその次元メモリアドレスオフセット値を計算する周期ごとに、たとえば、1つのクロック周期の間に、ステップインクリメント部410~440は、各々、その次元の次のステップインデックス値と、次のステップインクリメント部(該当する場合は)のラップ量と、次元メモリアドレスオフセット値(たとえば、次元の次のステップインデックス値とストライド次元オフセット値との積)とを計算し得る。
【0082】
いくつかの実施態様では、各インクリメント部410~440は、その次元の次のステップインデックス値および/またはその次元のラップ量を決定する際に、一連の条件を使用し得る。この条件は、インクリメント量(たとえば、インクリメント部410に対する予告量、またはインクリメント部420~440に対するラップ量)を含み得る。また、この条件は、次元のストライド当たりのステップ数、および現在のステップインデックス値とステップ比較値との比較も含み得る。
【0083】
たとえば、ルックアップテーブルが生成され得る。ルックアップテーブルは、たとえば、インクリメント量と、ストライド当たりのステップ数と、どのステップ比較値が現在のステップインデックス値と一致するのかとの特定の組合せごとに、次のステップインデックス値が何になるのか、およびラップ量が何になるのかを明記する。特定の組合せは、要求生成部がメモリアドレスを生成できるテンソルの次元の数に基づいて異なり得る。このように、各ステップインクリメント部410~440は、インクリメント量および現在のステップインデックス値をテーブルと単純に比較して、次のステップインデックス値とラップ量とが何になるかを判断し得る。
【0084】
図5は、例示的な進行状況追跡部500の図である。進行状況追跡部500は、
図2Aの進行状況追跡部134および144の各々を実装するために使われ得る。進行状況追跡部500は、進行状況追跡部のキュー510と、応答並替え部520と、同期部530とを備える。
【0085】
進行状況追跡部のキュー510は、1つの記述子から複数の記述子(または、記述子のうち、応答と同期に対処するために必要な関連箇所)を受け取って格納し得る。後述するが、記述子により、同期部530は、記述子が規定するDMAトランザクションの進行状況を特定することが可能になる。
【0086】
応答並替え部520は、メモリシステム、たとえば、
図1のメモリシステム150から応答を受け取り得る。各応答は、応答に対応する要求の要求IDを明記し得る。すなわち、メモリシステムは、進行状況追跡部500に対応する要求生成部から受け取った完了済みの各要求に対する応答を、進行状況追跡部500に送り得る。
【0087】
応答並替え部520は、任意の順序で応答を受け取って、それらの要求IDに基づいて応答の順序を並び替え得る。メモリシステムは、要求が受け取られた順序とは異なる順序で要求を処理し得る。たとえば、メモリシステムは、バンド幅最適化技術を利用して、一部の要求をその他の要求よりも優先し得る。これに鑑みて、応答並替え部520は、応答を順不同に受け取って、その順序を並び替えて、メモリシステムによって完了されるメモリ操作の進行状況を追跡するように構成され得る。例示的な応答並替え部については
図6に示し、詳細については後述する。
【0088】
同期部530は、応答並替え部から進行状況データを受け取り、コア、たとえば、
図1のコア110に同期メッセージを送り得る。たとえば、同期部530は、応答並替え部5
20から、受け取った順序要求IDの数を明記するデータを受け取り得る。同期部530は、記述子が規定する少なくともしきい値量(またはしきい値割合)のメモリ操作が完了するたびに、同期メッセージを送るように構成され得る。たとえば、同期部530は、現在の記述子に関連して行われるメモリ操作の回数(たとえば、読出操作または書込操作であるかは、サブスレッドによって異なる)を決定し得る。同期更新部530は、メモリ操作の少なくとも10%が完了するたびにコアに同期メッセージを送るように構成され得る。上述したように、記述子が規定するメモリ操作のすべてが完了するまで待たずに、コアは、これらの一部の最新情報を使って、転送されたデータを消費し始め得る。
【0089】
応答並替え部520および/または同期部530は、要求生成部が再利用できる一連の要求IDを要求生成部に通知するように構成され得る。たとえば、少なくともしきい値数の順序要求IDをメモリシステムから応答で受け取るたびに、これらの要求IDは、応答生成部に解放されて再利用され得る。これにより、要求生成部は、進行状況追跡部500が処理できる最大数の要求を要求生成部が送った後、すべての要求が完了する前に、要求の生成を継続することが可能になる。
【0090】
たとえば、進行状況追跡部500が1度に500個のメモリ操作しか追跡できない応答並替えバッファを含み、要求IDが0~499であると想定する。500個のメモリ操作のすべてが要求で使われて、いずれの要求に対しても応答がなかった場合、要求生成部は、進行状況追跡部500から利用可能な要求IDを明記する通知を受け取るまでストールしなければならない。進行状況追跡部500が0~15の要求IDに対する応答を受け取り(しかし、識別子のすべての応答ではない)、しきい値が15未満である場合、進行状況追跡部500は、500個すべてのメモリ操作が完了するまで待たずに、要求生成部が0~15の要求IDを用いた要求の送信を再開できることを明記する通知(たとえば、要求IDクレジットリターンメッセージ)を送り得る。
【0091】
図6は、例示的な応答並替え部600の図である。応答並替え部600を用いて、
図5応答並替え部520が実装され得る。応答並替え部600は、応答ベクトル610と、並替えベクトル630とを含み、これらは各々、ビットベクトルレジスタを用いて実装され得る。応答ベクトル610および並替えベクトル630は、各々、要求生成部が発行できる要求IDごとに1つのビットを含み得る。このビットは、要求IDのステータスを示し得る。たとえば、ビットの値が0である場合、メモリ操作に対する応答は、未だ受け取っていない。ビットの値が1である場合、メモリ操作に対する応答はすでに受け取っている。応答ベクトル610、並替えベクトル630、およびポップベクトル(後述する)は、すべて同じサイズであってもよく、たとえば同じ数のビットを含み得る。
【0092】
応答ベクトル610は、一度に複数の応答、たとえばこの例では最大で4つの応答を一度に受け取るように構成され得る。たとえば、応答ベクトル610は、対応する要求生成部のレーンの数に一致する数の応答を同時に受け取るように構成され得る。その他の例では、応答ベクトル610は、対応する要求生成部のレーンの数とは異なる数、たとえばレーンの数よりも多い数の応答を同時に受け取るように構成され得る。
【0093】
並替えベクトル630に含まれるビットは、要求IDの順番に配置され得る。並替えベクトル630の入力側には論理和ゲート624がある。論理和ゲート624は、並替えベクトル630のビットごとに論理和ゲートを備えるビットベクトル論理和ゲートであり得る。要求IDごとに、要求IDの応答ベクトルのビット、および論理積ゲート622(たとえば、ビットベクトル論理積ゲート)が出力する要求IDのビットは、論理和ゲートへの入力となり得、並替えベクトル630に含まれる要求IDのビットの値が決定される。
【0094】
論理積ゲート622には、要求IDごとに、したがって並替えベクトル630のビット
ごとに1対の入力がある。特定の要求IDの場合、並替えベクトル630に含まれるビットの値、およびポップベクトルロジック640が保持するポップベクトルにある要求IDのポップビットの値が両方とも1である場合、当該要求IDに関する論理積ゲートの出力は、1である。後述するが、メモリアドレスのポップビットを1に設定して、たとえば、要求生成部が使用するために要求IDが解放された場合に、ビットの値をクリアして0にし得る。すなわち、要求IDに対する応答が受け取られていて要求IDがまだ解放されていない場合、要求IDに対応するビットの論理積ゲート622の出力は、1である。要求IDが解放された場合、このビットについての論理積ゲート622の出力は、ポップベクトルからの入力が1になるので、0である。
【0095】
また、応答並替え部600は、先頭ポインタロジック650と、ポップベクトルロジック640と、内部ポップカウントロジック660とを備える。先頭ポインタロジック650は、並替えベクトル630に含まれる、応答が受け取られた最も数字が大きい順序要求IDのビットの後ろの次のビットに、ポインタを維持し得る。順序要求IDは、最初の要求IDから応答がまだ受け取られていない要求IDまでの、応答が受け取られた連続した要求IDである。たとえば、要求IDの値が0~499であり、0~8、11、56、および61~78に対する応答がすでに受け取られている場合、順序要求IDの値は、0~8である。この例では、先頭ポインタは、要求IDの値が9であるビットを指す。値が9および10である要求IDに対する応答が受け取られると、順序要求IDの値は、0~11となり、値が12である要求IDの応答はまだ受け取られていないと想定される。
【0096】
また、先頭ポインタロジック650は、先頭ポインタに1を足したポインタ(たとえば、先頭ポインタが指しているビットの次のビット)、先頭ポインタに2を足したポインタなど、別の先頭ポインタを事前に計算し得る。こうすることで、ポップカウントロジック660は、1つのクロック周期の間に並替えベクトル630において2つ以上のビットをポップし得る。この機能は、必須ではなく、これを使って、特定のクロック周波数のタイミングに合わせることができる。ロジックは、周期当たりの応答が多い大きな並替えベクトルの場合、かなり複雑になる。この事前計算は、目標周波数が比較的高速である場合、または周期当たりの応答が多い(たとえば、レーンが多い)場合に用いられ得る。
【0097】
内部ポップカウントロジック660は、並替えベクトル630に含まれるビットを監視して、先頭ポインタが移動したときに並替えベクトルのいくつのビットがポップ(たとえば、クリア)され得るかを決定し得る。たとえば、内部ポップカウントロジック660は、値が1のビット列をルックアヘッドし得る。1という値は、ビットに対応するメモリ操作に対する応答が受け取られたことを示す。先頭ポインタロジック650が別のビットに移動すると、先頭ポインタロジック630は、先頭ポインタの移動先(たとえば、head_plus_i_next)(たとえば、ビット)を提供し得る。先頭ポインタの新しい位置および監視されているビットに基づいて、内部ポップカウントロジック660は、クロック周期当たりの、ポップし得るビットの数、たとえば、最大ポップ数までを決定し得る。たとえば、先頭ポインタがビット10個分だけ上に移動し得る場合、最大ポップ数は、クロック周期当たりビット4つであり、内部ポップカウントロジック660は、ポップベクトルロジック640に、最初の周期で4つのビットをポップし、2回目の周期で4つのビットをポップし、2回目の周期で2つのビットをポップするよう指示し得る。先頭ポインタは、その周期の間にポップするエントリの数と同じ数だけインクリメントされるので、この例では、周期当たり最大でビット4つ分だけ進み得る。
【0098】
ポップベクトルロジック640は、ポップするビットのポップベクトルを保持し、このポップベクトルを論理積ゲート622に入力として提供し得る。先頭ポインタおよび別の先頭ポインタ、ならびに内部ポップカウントロジック660から受け取ったポップするビットの数に基づいて、ポップベクトルロジック640は、どのビットがポップするかを決
定し得る。たとえば、ポップするビットが4つである場合、ポップベクトルロジック640は、現在の先頭ポインタから先頭ポインタに4を足した位置までのビットをポップし得る。先頭ポインタに4を足した値はすでに計算されているので、ポップベクトルロジック640は、ポップするビットの位置を、クロック周期を消費して決定する必要がない。
【0099】
先頭ポインタロジック650も、ポップカウントロジックから、ポップするビットの数を受け取り得る。先頭ポインタロジック650は、先頭ポインタを更新し、ポップするビットの数に基づいて、別の先頭ポインタを事前に計算し得る。
【0100】
また、応答並替え部600は、順序アイテムレジスタ672と、計算要素670および674とを備える。順序アイテムレジスタ672は、要求生成部にまだ解放されていない、ポップした順序アイテムの数のカウントを保持し得る。そうするために、計算部670は、内部ポップカウントロジック660の出力に基づいて、ポップしたビットの数を集約する。
【0101】
レジスタ672にある順序アイテムの数は、同期部530にも送られる。同期部530は、ポップした順序アイテムの数に基づいて、要求IDを要求生成部に解放するタイミングを決定し得る。たとえば、同期部は、要求生成部が利用できる要求IDの数(たとえば、要求IDクレジットリターン)を明記するデータを送り得る。計算部674は、この数を、レジスタ672に現在ある順序アイテムの数から減算し、その結果(および内部ポップカウントロジック660からの新たにポップしたアイテム)を用いてレジスタを更新し得る。たとえば、レジスタ672が15個の順序アイテムがポップしたと示し、同期部530が10個を要求生成部に解放した場合、計算要素674は、15個の要求IDからこの10個の解放された要求IDを減算し、5つの要求IDの値を格納して更新し得る。こうすることで、レジスタ272は、要求生成部に解放できる要求IDの数の累計を格納する。
【0102】
図7は、メモリ操作を求める要求を生成するための例示的な処理700を説明するフロー図である。処理700は、要求生成部、たとえば、
図1の要求生成部132もしくは142、または
図2の要求生成部200によって実行され得る。
【0103】
要求生成部は、1つ以上の記述子を受け取る(702)。各記述子は、DMAトランザクション、たとえば、一連のメモリ転送操作についての情報を含む。たとえば、記述子は、データが読み出される読出し元メモリを明記する情報と、データが書き込まれる書出し先メモリを明記する情報と、テンソル要素が読出し元メモリに格納されるソーステンソルのサイズおよび形(たとえば、次元)を明記する情報と、テンソル要素が書出し先メモリに格納される宛先テンソルのサイズおよび形を明記する情報と、各次元のストライド次元オフセット値を明記する情報とを含み得る。
【0104】
要求生成部は、ステップ追跡部を初期化する(704)。上述したように、要求生成部は、たとえばクロック周期当たりのメモリアドレスを各々が並列して計算する複数のレーンを備え得る。各レーンは、ステップ追跡部と、メモリアドレス計算部とを含み得る。各ステップ追跡部は、ステップインクリメントチェーンを含み得る。ステップ追跡部を初期化することは、各ステップインクリメント部にステップパラメータを提供することと、ステップインクリメント部ごとにステップインデックス値を初期化することとを含む。
【0105】
要求生成部は、メモリアドレスを生成する(706)。たとえば、要求生成部は、複数のレーンを使用して、たとえば1つのクロック周期の間に複数のメモリアドレスを並列して計算し得る。特に、クロック周期の間、各ステップ追跡部は、(テンソルに含まれる特定のテンソル要素に対応する)テンソルの各次元の次のステップインデックス値を計算し
、各次元の次元メモリアドレスオフセット値を、当該次元のストライド次元オフセット値と、次のステップインデックス値とを用いて計算し得る。そして、レーン上のステップ追跡部が出力した各次元の次元メモリアドレスオフセット値と、基底アドレスとに基づいて、各レーンのメモリアドレス計算部は、メモリアドレスを計算し得る。たとえば、レーンのメモリアドレス(よって、テンソル要素)は、基底アドレスと、次元メモリアドレスオフセット値との和であり得る。
【0106】
要求生成部は、要求を生成してメモリシステムに送る(708)。要求は、読出要求であってもよく、書込要求であってもよい。各要求は、要求IDと、この周期中に計算されたメモリアドレスとを明記し得る。すなわち、要求生成部は、コンピュータメモリアドレスごとに各要求を生成して送り得る。要求生成部は、メモリシステムに要求を送り得、メモリシステムは、要求に含まれているメモリアドレスを用いて読出動作または書込動作を行う。
【0107】
要求生成部は、メモリアドレスを計算するテンソル要素がまだあるかどうかを判断する(710)。たとえば、上述したように、FSMは、記述子に関して生成する残りの要求の数を追跡し得る。テンソル要素がまだある場合、処理700は、ステップ706に戻り、メモリアドレスをさらに生成する。
【0108】
別のテンソル要素がない場合、要求生成部は、DMAトランザクションを行う別の記述子があるかどうかを判断する(714)。たとえば、要求生成部は、記述子キューを確認して、キューの中に別の記述子があるかどうかを判断し得る。別の記述子がない場合、処理は終了する。別の記述子がある場合、処理は、ステップ704に戻る。ステップ704では、次の記述子のためにステップ追跡部が初期化される。上述したように、ステップ追跡部は、前の記述子のDMAトランザクションが完了する前に初期化され得る。
【0109】
図8は、メモリ操作の進行状況を追跡するための例示的な処理800を説明するフロー図である。処理800は、進行状況追跡部、たとえば、
図1の進行状況追跡部134もしくは144、または
図5の進行状況追跡部500によって行われ得る。
【0110】
進行状況追跡部は、1つ以上の応答を受け取る(802)。たとえば、メモリシステムは、メモリ操作が完了したことに応答して追跡した進行状況に対する応答を送り得る。この応答は、完了したメモリ操作の要求IDを明記し得る。
【0111】
進行状況追跡部は、並替えベクトルを更新する(804)。進行状況追跡部は、並替えベクトルを更新して、要求IDに対応するメモリ操作が完了したことを示し得る。たとえば、進行状況追跡部は、要求IDのビットの値を0から1に更新して、要求IDに対応するメモリ操作が完了したことを示し得る。
【0112】
進行状況追跡部は、連続する要素(たとえば、要求IDのビット)の数がしきい値以上であるかどうかを判断する(806)。しきい値以上である場合、進行状況追跡部は、要求IDを解放して、要求生成部が再利用できるようにする(808)。しきい値以上でない場合、処理800は、要求IDを解放することなく、ステップ810に続く。
【0113】
ステップ810では、進行状況追跡部は、受け取った応答の数がしきい値以上であるかどうかを判断する。この数は、メモリ操作が行われているコアに前回の同期メッセージが送られてから受け取った応答の数であり得る。別の例では、進行状況追跡部は、受け取る応答の数のうち、少なくともしきい値割合の応答を受け取ったかどうかを判断し得る。
【0114】
いずれの例においても、しきい値以上になった場合、進行状況追跡部は、コアと同期し
得る(812)。たとえば、進行状況追跡部は、受け取った応答の数または割合を示す同期メッセージをコアに送り得る。別の例では、進行状況追跡部は、前回の同期メッセージがコアに送られてから受け取った応答の数を示す同期メッセージをコアに送り得る。
【0115】
しきい値に達していない場合、処理800は、ステップ814に続く。ステップ814では、進行状況追跡部は、記述子の応答をすべて受け取ったどうかを判断する。記述子のすべての応答を受け取っていない場合、処理800は、ステップ802に戻る。ステップ802では、さらに多くの応答を受け取る。記述子のすべての応答を受け取っている場合、進行状況追跡部は、たとえば、記述子のメモリ操作のすべてが完了したことを示す同期メッセージを送ることによって、コアと同期し得る(816)。
【0116】
本明細書は、多くの具体的な実施態様の詳細を含むが、これらは発明または特許請求の範囲の限定として解釈されるべきではなく、むしろ、特定の発明の特定の実施の形態に特有な特徴の説明であると解釈されるべきである。本明細書おいて別々の実施の形態として説明された特定の特徴も、組み合わせて1つの実施の形態で実現することができる。その逆に、1つの実施の形態として説明された様々な特徴を、別々の複数の実施の形態または任意の適した部分的な組み合わせで実現することもできる。また、特徴は、いくつかの特定の組み合わせで動作するものとして上述され、そのように当初クレームされてもよいが、クレームされた組合せからの1つ以上の特徴は、場合によっては、組み合わせから削除することができ、クレームされた組合せは、部分的な組み合わせまたは部分的な組み合わせの変形例を対象としてもよい。
【0117】
同様に、図面に動作を特定の順番で示しているが、所望の結果を実現するためにこのような動作を図示された特定の順番または順序で実行する必要がある、または、図示した動作のすべてを実行する必要がある、と理解されるべきではない。特定の状況では、多重タスク処理および並列処理が有利である場合がある。また、上述の実施の形態における様々なシステムおよび構成要素を分離することは、このような分離がすべての実施の形態において必要であると理解されるべきではなく、説明したプログラムコンポーネントおよびシステムは、一般に、1つのソフトウェアプロダクトに一体化したり、複数のソフトウェアプロダクトにパッケージ化したりすることができると理解されるべきである。
【0118】
よって、本発明の主題の特定の実施の形態を説明した。その他の実施の形態も、添付の特許請求の範囲に含まれる。場合によっては、請求項に記載された動作は、異なる順序で実行することができ、それでもなお所望の結果を実現することができる。これに加えて、添付の図面に示した処理は、所望の結果を実現するために必ずしも図示した特定の順番または一連の順序である必要はない。いくつかの実施態様において、多重タスク処理および並列処理が有利である場合がある。
【手続補正書】
【提出日】2024-05-07
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
DMA(ダイレクトメモリアクセス)システムであって、
DMAハードウェアユニットを備え、前記DMAハードウェアユニットは、
並列メモリアドレス計算周期のたびに(1)多次元テンソルのためにM個のメモリアドレスを並列して生成し、メモリアドレスごとに(2)前記多次元テンソルに関するメモリ操作を行うようメモリシステムに求める要求を生成するように構成された要求生成部を含み、前記要求生成部は、M個のメモリアドレス部を含み、各メモリアドレス部は、
並列メモリアドレス計算周期のたびに、前記多次元テンソルのテンソル要素のメモリアドレスオフセット値を生成するように構成されたステップ追跡部と、
メモリアドレス計算要素とを含み、前記メモリアドレス計算要素は、
並列メモリアドレス計算周期のたびに、前記メモリアドレスオフセット値に基づいて、前記多次元テンソルの前記テンソル要素のメモリアドレスを生成し、
前記メモリアドレスを用いて前記メモリ操作を行うよう求める前記要求を、前記メモリシステムに送るように構成され、前記DMAハードウェアユニットは、さらに、
進行状況追跡部を備え、前記進行状況追跡部は、
前記テンソル要素のメモリ操作が行われたかどうかのステータスをテンソル要素ごとに保持するように構成された応答並替え部と、
複数の一部の最新情報をプロセッサコアに提供するように構成された同期更新部とを含み、前記複数の一部の最新情報は、各々、前記多次元テンソルの前記テンソル要素に対して行われたメモリ操作の全体的なステータスを明記し、
各ステップ追跡部がメモリアドレスオフセット値を生成する前記テンソル要素は、並列メモリアドレス計算周期のたびにその他の各ステップ追跡部がメモリアドレスオフセット値を生成する前記テンソル要素とは異なり、
前記Mは、2以上である、DMAシステム。
【請求項2】
前記ステップ追跡部は、前記多次元テンソルの次元ごとに(1)前記次元のステップインデックス値を決定し、前記ステップインデックス値に基づいて(2)前記次元のメモリアドレスオフセット値を決定することによって前記多次元テンソルの前記テンソル要素の前記メモリアドレスオフセット値を生成するように構成され、前記多次元テンソルの前記次元の前記ステップインデックス値は、前記多次元テンソル内での前記テンソル要素の位置に対応する、請求項1に記載のDMAシステム。
【請求項3】
各要求は、一意の識別子を含み、
前記応答並替え部は、
前記メモリシステムから応答を任意の順番に受け取るように構成され、各応答は、前記応答が提供される前記要求の前記一意の識別子を含み、前記応答並替え部は、さらに、
一連の一意の識別子を、前記要求生成部が再利用できるよう、解放するように構成される、請求項1または2に記載のDMAシステム。
【請求項4】
前記応答並替え部は、少なくともしきい値数の連続した一意の識別子を前記応答で受け取った場合、前記一連の一意の識別子を解放するように構成される、請求項3に記載のDMAシステム。
【請求項5】
前記要求生成部は、1つのクロック周期の間に前記メモリアドレスを並列して生成するように構成され、各並列メモリ計算は、1つのクロック周期の間に行われる、請求項1~4のいずれか1項に記載のDMAシステム。
【請求項6】
前記要求生成部は、M個のレーンを含み、前記M個のレーンは、各々、ステップ追跡部と、メモリアドレス計算要素とを含み、各レーンの前記ステップ追跡部および前記メモリアドレス計算要素は、対応するメモリアドレスを他のレーンと並列して計算する、請求項1~5のいずれか1項に記載のDMAシステム。
【請求項7】
ステップ追跡部は、ループネストに基づいて前記多次元テンソルの前記メモリアドレスを生成するように構成され、前記ループネストは、前記多次元テンソルの次元ごとに、前記多次元テンソルの次元を横断するためのループを含み、
各次元のストライド値当たりのステップ数は、前記次元の前記ループのループ範囲を表し、各次元の前記ステップインデックス値は、前記次元の前記ループのループインデックスを表す、請求項6に記載のDMAシステム。
【請求項8】
各ステップ追跡部は、クロック周期のたびに前記次元の各々の前記ステップインデックス値を更新するように構成される、請求項7に記載のDMAシステム。
【請求項9】
DMAシステムによって実行される方法であって、
要求生成部が、並列メモリアドレス計算周期のたびに(1)多次元テンソルのためにM個のメモリアドレスを並列して生成し、メモリアドレスごとに(2)前記多次元テンソルに関するメモリ操作を行うようメモリシステムに求める要求を生成するステップを含み、前記要求生成部は、M個のメモリアドレス部を含み、前記Mは、2以上であり、各メモリアドレス部は、ステップ追跡部と、メモリアドレス計算部とを含み、前記方法は、さらに、
各メモリアドレス部の前記ステップ追跡部が、並列メモリアドレス計算周期のたびに、前記多次元テンソルのテンソル要素のメモリアドレスオフセット値を生成するステップと、
各メモリアドレス部の前記メモリアドレス計算要素が、並列メモリアドレス計算周期のたびに、前記多次元テンソルの前記テンソル要素の前記メモリアドレスオフセット値に基づいて、前記多次元テンソルのテンソル要素のメモリアドレスを生成するステップと、
前記メモリアドレスを用いて前記メモリ操作を行うよう求める前記要求を、前記メモリシステムに送るステップと、
応答並替え部が、前記テンソル要素のメモリ操作が行われたかどうかのステータスをテンソル要素ごとに保持するステップと、
同期更新部が、複数の一部の最新情報をプロセッサコアに提供するステップとを含み、前記複数の一部の最新情報は、各々、前記多次元テンソルの前記テンソル要素に対して行われたメモリ操作の全体的なステータスを明記し、
各ステップ追跡部がメモリアドレスオフセット値を生成する前記テンソル要素は、並列メモリアドレス計算周期のたびにその他の各ステップ追跡部がメモリアドレスオフセット値を生成する前記テンソル要素とは異なる、方法。
【請求項10】
前記多次元テンソルの前記テンソル要素の前記メモリアドレスオフセット値を生成するステップは、前記多次元テンソルの次元ごとに(1)前記次元のステップインデックス値を決定し、前記ステップインデックス値に基づいて(2)前記次元のメモリアドレスオフセット値を決定するステップを含み、前記多次元テンソルの前記次元の前記ステップインデックス値は、前記多次元テンソル内での前記テンソル要素の位置に対応する、請求項9に記載の方法。
【請求項11】
各要求は、一意の識別子を含み、
前記応答並替え部は、
前記メモリシステムから応答を任意の順番に受け取るように構成され、各応答は、前記応答が提供される前記要求の前記一意の識別子を含み、前記応答並替え部は、さらに、
一連の一意の識別子を、前記要求生成部が再利用できるよう、解放するように構成される、請求項9または10に記載の方法。
【請求項12】
前記応答並替え部は、少なくともしきい値数の連続した一意の識別子を前記応答で受け取った場合、前記一連の一意の識別子を解放する、請求項11に記載の方法。
【請求項13】
前記要求生成部は、1つのクロック周期の間に前記メモリアドレスを並列して生成し、各並列メモリ計算は、1つのクロック周期の間に行われる、請求項9~12のいずれか1項に記載の方法。
【請求項14】
前記要求生成部は、M個のレーンを含み、前記M個のレーンは、各々、ステップ追跡部と、メモリアドレス計算要素とを含み、各レーンの前記ステップ追跡部および前記メモリアドレス計算要素は、対応するメモリアドレスを他のレーンと並列して計算する、請求項9~13のいずれか1項に記載の方法。
【請求項15】
ステップ追跡部は、ループネストに基づいて前記多次元テンソルの前記メモリアドレスを生成し、前記ループネストは、前記多次元テンソルの次元ごとに、前記多次元テンソルの次元を横断するためのループを含み、
各次元のストライド値当たりのステップ数は、前記次元の前記ループのループ範囲を表し、各次元の前記ステップインデックス値は、前記次元の前記ループのループインデックスを表す、請求項14に記載の方法。
【請求項16】
各ステップ追跡部は、クロック周期のたびに前記次元の各々の前記ステップインデックス値を更新する、請求項15に記載の方法。
【請求項17】
システムであって、
1つ以上のプロセッサコアと、
メモリシステムと、
DMAハードウェアユニットとを備え、前記DMAハードウェアユニットは、
並列メモリアドレス計算周期のたびに(1)多次元テンソルのためにM個のメモリアドレスを並列して生成し、メモリアドレスごとに(2)前記多次元テンソルに関するメモリ操作を行うようメモリシステムに求める要求を生成するように構成された要求生成部を含み、前記要求生成部は、M個のメモリアドレス部を含み、各メモリアドレス部は、
並列メモリアドレス計算周期のたびに、前記多次元テンソルのテンソル要素のメモリアドレスオフセット値を生成するように構成されたステップ追跡部と、
メモリアドレス計算要素とを含み、前記メモリアドレス計算要素は、
並列メモリアドレス計算周期のたびに、前記メモリアドレスオフセット値に基づいて、前記多次元テンソルの前記テンソル要素のメモリアドレスを生成し、
前記メモリアドレスを用いて前記メモリ操作を行うよう求める前記要求を、前記メモリシステムに送るように構成され、前記DMAハードウェアユニットは、さらに、
進行状況追跡部を備え、前記進行状況追跡部は、
前記テンソル要素のメモリ操作が行われたかどうかのステータスをテンソル要素ごとに保持するように構成された応答並替え部と、
複数の一部の最新情報をプロセッサコアに提供するように構成された同期更新部とを含み、前記複数の一部の最新情報は、各々、前記多次元テンソルの前記テンソル要素に対して行われたメモリ操作の全体的なステータスを明記し、
各ステップ追跡部がメモリアドレスオフセット値を生成する前記テンソル要素は、並列メモリアドレス計算周期のたびにその他の各ステップ追跡部がメモリアドレスオフセット値を生成する前記テンソル要素とは異なり、
前記Mは、2以上である、システム。
【請求項18】
前記ステップ追跡部は、前記多次元テンソルの次元ごとに(1)前記次元のステップインデックス値を決定し、前記ステップインデックス値に基づいて(2)前記次元のメモリアドレスオフセット値を決定することによって前記多次元テンソルの前記テンソル要素の前記メモリアドレスオフセット値を生成するように構成され、前記多次元テンソルの前記次元の前記ステップインデックス値は、前記多次元テンソル内での前記テンソル要素の位置に対応する、請求項17に記載のシステム。
【請求項19】
各要求は、一意の識別子を含み、
前記応答並替え部は、
前記メモリシステムから応答を任意の順番に受け取るように構成され、各応答は、前記応答が提供される前記要求の前記一意の識別子を含み、前記応答並替え部は、さらに、
一連の一意の識別子を、前記要求生成部が再利用できるよう、解放するように構成される、請求項18に記載のシステム。
【請求項20】
前記応答並替え部は、少なくともしきい値数の連続した一意の識別子を前記応答で受け取った場合、前記一連の一意の識別子を解放するように構成される、請求項19に記載のシステム。
【外国語明細書】