(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024020270
(43)【公開日】2024-02-14
(54)【発明の名称】特殊目的計算ユニットを用いたハードウェアダブルバッファリング
(51)【国際特許分類】
G06F 12/00 20060101AFI20240206BHJP
G06F 12/02 20060101ALI20240206BHJP
G06F 13/38 20060101ALI20240206BHJP
【FI】
G06F12/00 560B
G06F12/02 570J
G06F13/38 310E
【審査請求】有
【請求項の数】14
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023187546
(22)【出願日】2023-11-01
(62)【分割の表示】P 2022069548の分割
【原出願日】2018-06-18
(31)【優先権主張番号】15/641,824
(32)【優先日】2017-07-05
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】テマム,オリビエ
(72)【発明者】
【氏名】カイタン,ハーシット
(72)【発明者】
【氏名】ナラヤナスワミ,ラビ
(72)【発明者】
【氏名】ウ,ドン・ヒョク
(57)【要約】 (修正有)
【課題】複数のバッファを用いてデータを転送するための装置を含む方法、システムおよび装置を提供する。
【解決手段】複数のメモリと1つ以上の処理ユニットとを含む装置であって、1つ以上の処理ユニットは、第1のデータ格納場所に格納され、第2のデータ格納場所に転送されているデータ要素のシーケンスのバッファメモリアドレスを決定し、シーケンスにおけるデータ要素のうちの1つ以上のデータ要素の各グループについて、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別する。複数の値の各々は、メモリのうちの異なる1つに対応する。処理ユニットはまた、バッファ割り当て要素の値に基づいて1つ以上のデータ要素のグループのバッファメモリアドレスを決定し、データ要素のシーケンスの1つ以上のデータ要素の後続グループのバッファメモリアドレスを決定する前に、バッファ割り当て要素の値を切り替える。
【選択図】
図3
【特許請求の範囲】
【請求項1】
データを転送するための装置であって、
少なくとも第1のメモリおよび第2のメモリを含む複数のメモリと、
1つ以上の処理ユニットとを備え、前記1つ以上の処理ユニットは、
第1のデータ格納場所に格納され、第2のデータ格納場所に転送されている複数のデータ要素を備えるシーケンスのバッファメモリアドレスを決定するように構成され、前記シーケンスの前記バッファメモリアドレスを決定することは、
前記シーケンスにおける前記複数のデータ要素のうちの1つ以上のデータ要素の各グループについて、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別することによってなされ、前記複数の値の各々は、前記複数のメモリのうちの異なる1つに対応し、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの1つ以上のデータ要素の各グループについて、前記バッファ割り当て要素の前記値に基づいて前記1つ以上のデータ要素のグループのバッファメモリアドレスを決定することによってなされ、前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が、前記第1のメモリに対応する第1の値である場合に、前記第1のメモリのベースアドレスと前記1つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することによって、前記1つ以上のデータ要素のグループを前記第1のメモリに割り当てることと、
前記バッファ割り当て要素の前記値が、前記第2のメモリに対応する、前記第1の値とは異なる第2の値である場合に、前記1つ以上のデータ要素のグループを前記第2のメモリに割り当てるために、前記第1のメモリの前記ベースアドレスと、前記第2のメモリの前記メモリアドレスオフセット値と、前記1つ以上のデータ要素のグループの前記メモリオフセット値との組み合わせに基づいて前記1つ以上のデータ要素のグループの前記メモリアドレスを決定することによって、前記データ要素を前記第2のメモリに割り当てることとを含み、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの1つ以上のデータ要素の各グループについて、前記データ要素のシーケンスの1つ以上のデータ要素の後続グループの前記バッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えることによってなされ、
前記1つ以上の処理ユニットは、さらに、
1つ以上のデータ要素の各グループの前記決定されたバッファメモリアドレスを用いて、各データ要素を前記第1または第2のメモリのそれぞれのメモリ場所に転送するように構成される、装置。
【請求項2】
前記第1のメモリおよび前記第2のメモリは、各々が第1のデータ記憶容量を有するバッファであり、
前記第1のデータ格納場所および前記第2のデータ格納場所の各々は、少なくとも、前記第1のデータ記憶容量よりも大きな第2のデータ記憶容量を備える、請求項1に記載の装置。
【請求項3】
前記第1のメモリおよび前記第2のメモリは、各々が第1のデータ記憶容量を有するバッファであり、
前記データ要素のシーケンスは、前記第1のデータ記憶容量を超えるデータ量を備える、請求項1または2に記載の装置。
【請求項4】
前記バッファ割り当て要素の前記値および前記第2のメモリのメモリアドレスオフセット値に基づいて前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、前記データ要素のシーケンスを反復するために用いられる1つ以上のループの反復回数に基づいて前記1つ以上のデータ要素のグループの前記メモリオフセット値を決定することを備える、前述の請求項のいずれか1項に記載の装置。
【請求項5】
前記バッファ割り当て要素の前記値および前記第2のメモリのメモリアドレスオフセット値に基づいて前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が前記第2の値であるたびに、(i)前記第1のメモリの前記ベースアドレスと、(ii)前記第2のメモリの前記メモリアドレスオフセット値と、(iii)前記1つ以上のデータ要素のグループの前記メモリオフセット値との合計を前記1つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することと、
前記バッファ割り当て要素の前記値が前記第1の値であるたびに、(i)前記第1のメモリの前記ベースアドレスと、(ii)前記第2のメモリの前記メモリアドレス値から独立した前記1つ以上のデータ要素のグループの前記オフセット値との合計を前記1つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することとを備える、請求項4に記載の装置。
【請求項6】
前記1つ以上のデータ要素のグループの前記メモリオフセット値は、N次元テンソルの各次元についてのループの反復回数に基づく、請求項4または5に記載の装置。
【請求項7】
前記第2のメモリの前記メモリアドレスオフセット値は、前記第1のメモリのメモリアドレスと前記第2のメモリのアドレスとの間の差に基づく、前述の請求項のいずれか1項に記載の装置。
【請求項8】
データを転送するためのコンピューティングシステムによって実行される方法であって、
第1のデータ格納場所に格納され、第2のデータ格納場所に転送されている複数のデータ要素を備えるシーケンスのバッファメモリアドレスを決定するステップを備え、前記シーケンスの前記バッファメモリアドレスを決定するステップは、
前記シーケンスにおける前記複数のデータ要素のうちの1つ以上のデータ要素の各グループについて、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別するステップによってなされ、前記複数の値の各々は、前記複数のメモリのうちの異なる1つに対応し、
前記シーケンスの前記バッファメモリアドレスを決定するステップは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの1つ以上のデータ要素の各グループについて、前記バッファ割り当て要素の前記値に基づいて前記1つ以上のデータ要素のグループのバッファメモリアドレスを決定するステップによってなされ、前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定するステップは、
前記バッファ割り当て要素の前記値が、複数のメモリの第1のメモリに対応する第1の値である場合に、前記第1のメモリのベースアドレスと前記1つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することによって、前記1つ以上のデータ要素のグループを前記第1のメモリに割り当てるステップと、
前記バッファ割り当て要素の前記値が、前記複数のメモリの第2のメモリに対応する、前記第1の値とは異なる第2の値である場合に、前記1つ以上のデータ要素のグループを前記第2のメモリに割り当てるために、前記第1のメモリの前記ベースアドレスと、前記第2のメモリの前記メモリアドレスオフセット値と、前記1つ以上のデータ要素のグ
ループの前記メモリオフセット値との組み合わせに基づいて前記1つ以上のデータ要素のグループの前記メモリアドレスを決定することによって、前記データ要素を前記第2のメモリに割り当てるステップとを含み、
前記シーケンスの前記バッファメモリアドレスを決定するステップは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの1つ以上のデータ要素の各グループについて、前記データ要素のシーケンスの1つ以上のデータ要素の後続グループの前記バッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えるステップによってなされ、
前記方法は、さらに、
1つ以上のデータ要素の各グループの前記決定されたバッファメモリアドレスを用いて、各データ要素を前記第1または第2のメモリのそれぞれのメモリ場所に転送するステップを備える、方法。
【請求項9】
前記第1のメモリおよび前記第2のメモリは、各々が第1のデータ記憶容量を有するバッファであり、
前記第1のデータ格納場所および前記第2のデータ格納場所の各々は、少なくとも、前記第1のデータ記憶容量よりも大きな第2のデータ記憶容量を備える、請求項8に記載の方法。
【請求項10】
前記第1のメモリおよび前記第2のメモリは、各々が第1のデータ記憶容量を有するバッファであり、
前記データ要素のシーケンスは、前記第1のデータ記憶容量を超えるデータ量を備える、請求項8または9に記載の方法。
【請求項11】
前記バッファ割り当て要素の前記値および前記第2のメモリのメモリアドレスオフセット値に基づいて前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定するステップは、前記データ要素のシーケンスを反復するために用いられる1つ以上のループの反復回数に基づいて前記1つ以上のデータ要素のグループの前記メモリオフセット値を決定することを備える、請求項8から10のいずれか1項に記載の方法。
【請求項12】
前記バッファ割り当て要素の前記値および前記第2のメモリのメモリアドレスオフセット値に基づいて前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定するステップは、
前記バッファ割り当て要素の前記値が前記第2の値であるたびに、(i)前記第1のメモリの前記ベースアドレスと、(ii)前記第2のメモリの前記メモリアドレスオフセット値と、(iii)前記1つ以上のデータ要素のグループの前記メモリオフセット値との合計を前記1つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定するステップと、
前記バッファ割り当て要素の前記値が前記第1の値であるたびに、(i)前記第1のメモリの前記ベースアドレスと、(ii)前記第2のメモリの前記メモリアドレス値から独立した前記1つ以上のデータ要素のグループの前記オフセット値との合計を前記1つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定するステップとを備える、請求項11に記載の方法。
【請求項13】
前記1つ以上のデータ要素のグループの前記メモリオフセット値は、N次元テンソルの各次元についてのループの反復回数に基づく、請求項11または12に記載の方法。
【請求項14】
前記第2のメモリの前記メモリアドレスオフセット値は、前記第1のメモリのメモリアドレスと前記第2のメモリのアドレスとの間の差に基づく、請求項11から13のいずれか1項に記載の方法。
【請求項15】
データを転送するためのシステムであって、
少なくとも第1のメモリおよび第2のメモリを含む複数のメモリと、
1つ以上の数値演算ユニットを含む1つ以上の処理ユニットとを備え、前記1つ以上の処理ユニットは、
第1のデータ格納場所に格納され、第2のデータ格納場所に転送されている複数のデータ要素を備えるシーケンスのバッファメモリアドレスを決定するように構成され、前記シーケンスの前記バッファメモリアドレスを決定することは、
前記シーケンスにおける前記複数のデータ要素のうちの1つ以上のデータ要素の各グループについて、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別することによってなされ、前記複数の値の各々は、前記複数のメモリのうちの異なる1つに対応し、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの1つ以上のデータ要素の各グループについて、前記バッファ割り当て要素の前記値に基づいて前記1つ以上のデータ要素のグループのバッファメモリアドレスを決定することによってなされ、前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が、前記第1のメモリに対応する第1の値である場合に、前記第1のメモリのベースアドレスと前記1つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することによって、前記1つ以上のデータ要素のグループを前記第1のメモリに割り当てることと、
前記バッファ割り当て要素の前記値が、前記第2のメモリに対応する、前記第1の値とは異なる第2の値である場合に、前記1つ以上のデータ要素のグループを前記第2のメモリに割り当てるために、前記第1のメモリの前記ベースアドレスと、前記第2のメモリの前記メモリアドレスオフセット値と、前記1つ以上のデータ要素のグループの前記メモリオフセット値との組み合わせに基づいて前記1つ以上のデータ要素のグループの前記メモリアドレスを決定することによって、前記データ要素を前記第2のメモリに割り当てることとを含み、
前記シーケンスの前記バッファメモリアドレスを決定することは、さらに、
前記シーケンスにおける前記複数のデータ要素のうちの1つ以上のデータ要素の各グループについて、前記データ要素のシーケンスの1つ以上のデータ要素の後続グループの前記バッファメモリアドレスを決定する前に、前記バッファ割り当て要素の前記値を切り替えることによってなされ、
前記1つ以上の処理ユニットは、さらに、
各々の決定されたメモリアドレスを特定するデータを出力するように構成され、
1つ以上のプロセッサは、1つ以上のデータ要素の各グループの前記決定されたバッファメモリアドレスを用いて、各データ要素を前記第1または第2のメモリのそれぞれのメモリ場所に転送するように構成される、システム。
【請求項16】
前記第1のメモリおよび前記第2のメモリは、各々が第1のデータ記憶容量を有するバッファであり、
前記第1のデータ格納場所および前記第2のデータ格納場所の各々は、少なくとも、前記第1のデータ記憶容量よりも大きな第2のデータ記憶容量を備える、請求項15に記載のシステム。
【請求項17】
前記第1のメモリおよび前記第2のメモリは、各々が第1のデータ記憶容量を有するバッファであり、
前記データ要素のシーケンスは、前記第1のデータ記憶容量を超えるデータ量を備える、請求項15または16に記載のシステム。
【請求項18】
前記バッファ割り当て要素の前記値および前記第2のメモリのメモリアドレスオフセット値に基づいて前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、前記データ要素のシーケンスを反復するために用いられる1つ以上のループの反復回数に基づいて前記1つ以上のデータ要素のグループの前記メモリオフセット値を決定することを備える、請求項15から17のいずれか1項に記載のシステム。
【請求項19】
前記バッファ割り当て要素の前記値および前記第2のメモリのメモリアドレスオフセット値に基づいて前記1つ以上のデータ要素のグループの前記バッファメモリアドレスを決定することは、
前記バッファ割り当て要素の前記値が前記第2の値であるたびに、(i)前記第1のメモリの前記ベースアドレスと、(ii)前記第2のメモリの前記メモリアドレスオフセット値と、(iii)前記1つ以上のデータ要素のグループの前記メモリオフセット値との合計を前記1つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することと、
前記バッファ割り当て要素の前記値が前記第1の値であるたびに、(i)前記第1のメモリの前記ベースアドレスと、(ii)前記第2のメモリの前記メモリアドレス値から独立した前記1つ以上のデータ要素のグループの前記オフセット値との合計を前記1つ以上のデータ要素のグループの前記バッファメモリアドレスとして決定することとを備える、請求項18に記載のシステム。
【請求項20】
前記1つ以上のデータ要素のグループの前記メモリオフセット値は、N次元テンソルの各次元についてのループの反復回数に基づく、請求項18または19に記載のシステム。
【請求項21】
前記第2のメモリの前記メモリアドレスオフセット値は、前記第1のメモリのメモリアドレスと前記第2のメモリのアドレスとの間の差に基づく、請求項18から20のいずれか1項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
背景
本明細書は、一般に、ハードウェアダブルバッファを有する特殊目的計算ユニットを用いて機械学習計算を行うことに関する。
【背景技術】
【0002】
ニューラルネットワークは、モデルの1つ以上の層を利用して、受信した入力について出力、たとえば分類を生成する機械学習モデルである。いくつかのニューラルネットワークは、外側層に加えて1つ以上の隠れ層を含む。各隠れ層の出力は、ネットワーク内の次の層、すなわちネットワークの次の隠れ層または出力層、への入力として用いられる。ネットワークの各層は、それぞれのパラメータセットの現在の値に従って、受信した入力から出力を生成する。
【0003】
いくつかのニューラルネットワークは、1つ以上の畳み込みニューラルネットワーク層を含む。各畳み込みニューラルネットワーク層は、関連付けられた一組のカーネルを有する。カーネルは、重み入力のマトリックス構造として表現することができる。各畳み込み層は、カーネルを使用して、層への入力を処理する。層への一組の入力も、マトリックス構造として表現することができる。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
本明細書には、N次元テンソルのデータをダブルバッファリングするための特殊目的計算ユニットの使用に関連する技術が記載されている。
【0005】
一般に、本明細書に記載されている主題の1つの革新的な局面は、データを転送するための装置において具体化することができる。上記装置は、少なくとも第1のメモリおよび第2のメモリを含む複数のメモリを含んでもよい。上記装置は、1つ以上の処理ユニットも含んでもよい。上記1つ以上の処理ユニットは、第1のデータ格納場所に格納され、第2のデータ格納場所に転送されているデータ要素のシーケンスのバッファメモリアドレスを決定するように構成されてもよい。上記シーケンスにおける上記データ要素のうちの1つ以上のデータ要素の各グループについて、上記1つ以上の処理ユニットは、複数の値の間で切り替え可能なバッファ割り当て要素の値を識別してもよく、上記複数の値の各々は、上記メモリのうちの異なる1つに対応する。上記1つ以上の処理ユニットは、上記バッファ割り当て要素の上記値に基づいて上記1つ以上のデータ要素のグループのバッファメモリアドレスを決定してもよい。上記バッファ割り当て要素の上記値が、上記第1のメモリに対応する第1の値である場合に、上記1つ以上の処理ユニットは、上記第1のメモリのベースアドレスと上記1つ以上のデータ要素のグループのメモリオフセット値との組み合わせに基づいて上記1つ以上のデータ要素のグループの上記バッファメモリアドレスを決定することによって、上記1つ以上のデータ要素のグループを上記第1のメモリに割り当ててもよい。上記バッファ割り当て要素の上記値が、上記第2のメモリに対応する、上記第1の値とは異なる第2の値である場合に、上記1つ以上の処理ユニットは、上記1つ以上のデータ要素のグループを上記第2のメモリに割り当てるために、上記第1のメモリの上記ベースアドレスと、上記第2のメモリの上記メモリアドレスオフセット値と、上記1つ以上のデータ要素のグループの上記メモリオフセット値との組み合わせに基づいて上記1つ以上のデータ要素のグループの上記メモリアドレスを決定することによって、上記データ要素を上記第2のメモリに割り当ててもよい。上記1つ以上の処理ユニットは、上
記データ要素のシーケンスの1つ以上のデータ要素の後続グループの上記バッファメモリアドレスを決定する前に、上記バッファ割り当て要素の上記値を切り替えてもよい。上記1つ以上の処理ユニットは、1つ以上のデータ要素の各グループの上記決定されたバッファメモリアドレスを用いて、各データ要素を上記第1または第2のメモリのそれぞれのメモリ場所に転送してもよい。
【0006】
これらのおよび他の実現例の各々は、任意に、以下の特徴のうちの1つ以上を含んでもよい。いくつかの局面において、上記第1のメモリおよび上記第2のメモリは、各々が第1のデータ記憶容量を有するバッファである。上記第1のデータ格納場所および上記第2のデータ格納場所の各々は、少なくとも、上記第1のデータ記憶容量よりも大きな第2のデータ記憶容量を含んでもよい。
【0007】
いくつかの局面において、上記第1のメモリおよび上記第2のメモリは、各々が第1のデータ記憶容量を有するバッファである。上記データ要素のシーケンスは、上記第1のデータ記憶容量を超えるデータ量を含んでもよい。
【0008】
いくつかの局面において、上記バッファ割り当て要素の上記値および上記第2のメモリのメモリアドレスオフセット値に基づいて上記1つ以上のデータ要素のグループの上記バッファメモリアドレスを決定することは、上記データ要素のシーケンスを反復するために用いられる1つ以上のループの反復回数に基づいて上記1つ以上のデータ要素のグループの上記メモリオフセット値を決定することを含んでもよい。
【0009】
いくつかの局面において、上記バッファ割り当て要素の上記値および上記第2のメモリのメモリアドレスオフセット値に基づいて上記1つ以上のデータ要素のグループの上記バッファメモリアドレスを決定することは、上記バッファ割り当て要素の上記値が上記第2の値であるたびに、(i)上記第1のメモリの上記ベースアドレスと、(ii)上記第2のメモリの上記メモリアドレスオフセット値と、(iii)上記1つ以上のデータ要素のグループの上記メモリオフセット値との合計を上記1つ以上のデータ要素のグループの上記バッファメモリアドレスとして決定することを含んでもよい。上記バッファ割り当て要素の上記値が上記第1の値であるたびに、(i)上記第1のメモリの上記ベースアドレスと、(ii)上記第2のメモリの上記メモリアドレス値から独立した上記1つ以上のデータ要素のグループの上記オフセット値との合計に基づいて、上記1つ以上のデータ要素のグループの上記バッファメモリアドレスが決定されてもよい。
【0010】
いくつかの局面において、上記1つ以上のデータ要素のグループの上記メモリオフセット値は、N次元テンソルの各次元についてのループの反復回数に基づく。上記第2のメモリの上記メモリアドレスオフセット値は、上記第1のメモリのメモリアドレスと上記第2のメモリのアドレスとの間の差に基づいてもよい。
【0011】
本明細書に記載されている主題は、以下の利点のうちの1つ以上を実現するように特定の実施形態において実現されてもよい。複数のメモリを用いることにより、単一のバッファの記憶容量を超えるデータをより迅速かつ効率的に転送することが可能になる。たとえば、8メガバイト(MB)のデータが第1のデータ格納場所から第2のデータ格納場所に転送され、バッファの容量が4MBに過ぎない場合、データは2つの4MBバッファの間で分割可能である。ネステッドループを用いて複数のバッファのメモリアドレスを決定することによって、アドレスを決定するための命令の数を減らすことができ、その結果、符号化が高密度になり、使用されるメモリリソースが少なくなり、および/または、必要なメモリリソースが少なくなる。各バッファメモリアドレス決定後に値を切り替えられるバッファ割り当て要素(たとえば、1ビットトグルカウンタ)を用いることにより、バッファ割り当てをより迅速に行うことが可能になり、データを複数のバッファに割り当てるた
めの命令総数を減らすことができる。また、データを第2のバッファに割り当てる前に、第1のバッファが一杯であるか否かを判断するのではなく、バッファ割り当て要素の値を切り替えることにより、処理をより迅速に行うことが可能になり、プロセッサに対する計算需要を少なくすることができる。命令が減少することにより、性能も高くなる。なぜなら、処理ユニットは、より少ない命令を処理してメモリアドレスを判断するからである。特殊目的ハードウェアユニットにおいてダブルバッファ命令を符号化することは、プロセッサがデータをバッファに割り当てるために実行するであろう計算サイクル数を減少させ、そのため、他の計算タスクのためのプロセッサ帯域幅を増加させる。
【0012】
このおよび他の局面の他の実現例は、コンピュータ記憶装置に符号化された方法の動作を実行するように構成された対応するシステム、装置およびコンピュータプログラムを含む。1つ以上のコンピュータのシステムは、動作時にシステムに動作を実行させる、システムにインストールされたソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせによってそのように構成されてもよい。1つ以上のコンピュータプログラムは、データ処理装置によって実行されると装置に動作を実行させる命令を有することによってそのように構成されてもよい。
【0013】
本明細書に記載されている主題の1つ以上の実現例の詳細を、添付の図面および以下の説明に記載する。主題の他の考えられる特徴、局面および利点は、明細書、図面および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0014】
【
図2】バッファを用いて転送されるデータの一例およびバッファ割り当て要素の一例を示す。
【
図3】ダブルバッファリングを用いてデータを転送するためのプロセスの一例を示すフロー図である。
【発明を実施するための形態】
【0015】
さまざまな図における同様の参照番号および名称は、同様の要素を示す。
詳細な説明
一般に、ソフトウェアアルゴリズムがN次元テンソルを処理するとき、ネステッドループが用いられる場合がある。各ループは、N次元テンソルのそれぞれの次元を横断することに関与し得る。多次元テンソルは、マトリックスまたは多次元マトリックスであってもよい。たとえば、二次元テンソルは、マトリックスであり、三次元テンソルは、複数の二次元マトリックスからなる三次元マトリックスである。N次元テンソルの各次元は、1つ以上の要素を含んでもよく、各要素は、それぞれのデータ値を格納してもよい。たとえば、テンソルは、プログラムにおける変数であってもよく、当該変数は、3つの次元を有してもよい。第1の次元は、300個の要素の長さを有してもよく、第2の次元は、1000個の要素の長さを有してもよく、第3の次元は、20個の要素の長さを有してもよい。当然のことながら、各次元において他の個数の要素も可能である。
【0016】
ネステッドループにおいてテンソルを横断することは、要素のメモリアドレス値を計算して、当該要素の対応するデータ値をロードまたは格納することを含み得る。forループは、ネステッドループの一例であり、3つのループインデックス変数(たとえば、i、jおよびk)によって追跡される3つのループが、三次元テンソルを横断するようにネストされ得る。ニューラルネットワークでは、テンソルに関連付けられた1つ以上のドット積計算に要素の値が用いられてもよい。たとえば、当該要素の値は、対応するパラメータまたは重みを乗算されてもよい。テンソルの要素は、ネステッドforループを用いて順番に横断され、要素にアクセスして、要素の値を用いて1つ以上の計算を行ってもよい。
三次元テンソルの例を続けて、変数iによって追跡されるループを横断するために外側forループが用いられてもよく、変数jによって追跡されるループを横断するために中央forループループが用いられてもよく、変数kによって追跡されるループを横断するために内側forループが用いられてもよい。この例では、アクセスされる第1の要素は、(i=0,j=0,k=0)であってもよく、第2の要素は、(i=0,j=0,k=1)であってもよい、などである。
【0017】
後述するように、処理ユニットが要素の値にアクセスして要素の値を用いて1つ以上の計算を行うことができるようにネステッドループを用いて順番に各要素のメモリアドレスを決定するのにテンソル横断ユニットを用いることができる。重みまたはパラメータの値も、ネステッドforループを用いて同様にアクセスされることができる。また、計算に用いられるおよび/または計算の出力のための重みまたはパラメータのアドレスを決定するのにテンソル横断ユニットを用いることができ、計算の出力は、ニューラルネットワークの隠れ層への入力として用いられてもよい。
【0018】
本明細書に記載されている技術により、ループネストを符号化して、ダブルバッファリングを用いてデータを生成および消費することが可能になる。たとえば、テンソル要素に格納されたデータは、ダブルバッファリング技術を用いて1つのデータ格納場所から別のデータ格納場所に転送されてもよい。ニューラルネットワークの例では、1つの隠れ層の出力として判断されるアクティベーションは、別の隠れ層への入力として提供されてもよく、そのため、出力場所、すなわちニューラルネットワーク層の出力が格納されているメモリ場所から、入力場所、すなわちニューラルネットワーク層への入力が格納されているメモリ場所に転送されてもよい。別の例では、計算の出力を表すデータは、一時的なメモリ場所からより永久的なメモリ場所に転送されてもよい。これらの例の各々では、データをより迅速に転送することができ、データはダブルバッファリングを用いてより迅速に後続の処理に備えることができる。
【0019】
ニューラルネットワーク計算が実行される前に当該計算のためのデータを収集するのにバッファリングを用いることができる。たとえば、ニューラルネットワーク層への入力は、計算を実行するプロセッサによる検索のために、特定の場所に格納されてもよい。特定の場所に格納されたデータを用いてニューラルネットワーク計算を実行している間に、次の機械学習計算のためのデータがバッファに移動され得る。前のニューラルネットワーク計算が完了すると、バッファに格納されたデータは、プロセッサによる検索のために、特定の場所に移動され得る。
【0020】
ダブルバッファを用いてデータが生成または消費されているテンソル要素のバッファメモリアドレスを計算するのにループネストにおける1つ以上のループが用いられてもよい。転送されるデータの量が単一のバッファの記憶容量よりも大きい場合には、複数のバッファが用いられてもよい。たとえば、転送されるデータの量が単一のバッファの記憶容量の2倍である場合、データは2つのバッファの間で分割されてもよい。この例では、データの第1の部分は、第1のバッファに転送されてもよく、データの第2の部分は、第2のデータ格納場所に転送される前に第2のバッファに転送されてもよい。このように、第2のデータ格納場所に転送される前に全てのデータをバッファリングすることができる。
【0021】
一例として、三次元テンソルの要素は、ニューラルネットワークによって分類される画像の特徴を表してもよい。第1の次元(Z)は、画像の幅を表してもよく、第2の次元(Y)は、画像の高さを表してもよく、第3の次元(X)は、画像内の画素のRGB値を表してもよい。画像を分類するために、各RGB値は、畳み込み層のフィルタ値を乗算されて、アクティベーションマップを生成してもよい。
【0022】
テンソルの各RGB値にアクセスするためのメモリアドレスを決定するのにネステッドループを用いることができる。ネステッドループは、テンソルの各次元のためのループを含み得る。たとえば、Z次元(画像の幅)を横断するために外側ループ(z)が用いられてもよく、Y次元(画像の高さ)を横断するために中央ループ(y)が用いられてもよく、X次元(各画素の3つのRGB値)を横断するために内側ループ(x)が用いられてもよい。内側ループの各反復において、外側ループzおよび中央ループyの値によって表される画像の特定の画素の3つのRGB値のうちの1つについてメモリアドレスが決定される。たとえば、Z=0およびY=0によって表される画像の画素のR値のメモリアドレスは、z=0およびy=0(たとえば、z=0;y=0;x=0)である場合に内側ループxの第1の反復中に決定されてもよい。同様に、Z=5およびY=2によって表される画像の画素のG値のメモリアドレスは、z=5およびy=2(たとえば、z=5;y=2;x=2)である場合に内側ループxの第3の反復中に決定されてもよい。画像の各画素の3つのRGB値がバッファの容量を超える場合には、画像の各画素の3つのRGB値を表すデータは、2つ以上のバッファの間で分割可能である。
【0023】
ネステッドループを用いて複数のバッファのバッファメモリアドレスを決定するために、バッファ割り当て要素の値は、バッファメモリアドレスを決定するために用いられるループの各反復後(または前)に切り替えられることができる。たとえば、2つのバッファが用いられ、データが2つのバッファの間で分割されている場合には、バッファ割り当て値は、2つの値の間で切り替えられてもよい。バッファ割り当て要素の第1の値(たとえば、0)は、データ要素(または、データ要素のグループ)を第1のバッファに割り当てるために用いられてもよく、バッファ割り当て要素の第2の値(たとえば、1)は、データ要素(または、データ要素のグループ)を第2のバッファに割り当てるために用いられてもよい。バッファ割り当て要素の値がループの反復にとっての第1の値である場合、ループのこの反復に対応するデータ要素が第1のバッファのバッファメモリアドレスに割り当てられてもよい。同様に、バッファ割り当て要素の値がループの反復にとっての第2の値である場合、ループのこの反復に対応するデータ要素が第2のバッファのバッファメモリアドレスに割り当てられてもよい。3つ以上のバッファが用いられる場合には、バッファ割り当て要素は、3つ以上の値、たとえば各バッファにつき1つの値、を有してもよい。
【0024】
図1は、計算システム100の一例のブロック図である。一般に、コンピューティングシステム100は、入力104を処理して、出力116を生成する。コンピューティングシステム100は、線形代数計算、ニューラルネットワーク計算および他の計算を行うように構成されてもよい。入力104は、コンピューティングシステム100によって処理可能な任意の好適なデータであってもよい。コンピューティングシステム100は、処理ユニット102と、1つ以上の記憶媒体104と、テンソル横断ユニット106とを含む。
【0025】
処理ユニット114は、1つ以上のプロセッサおよび/または1つ以上の有限状態マシン(finite-state machine:FSM)を含み得る。処理ユニット114のプロセッサは、テンソルの特定の要素にアクセスするための命令を実行することができる。プロセッサがこのような命令を処理すると、テンソル横断ユニット106は、処理ユニットが記憶媒体104にアクセスして特定の要素の値を表すデータを読み取ることができるように、テンソルの特定の要素のメモリアドレスを決定する。
【0026】
FSMを含む処理ユニットでは、FSMは、テンソル要素のメモリアドレスをテンソル横断ユニット106から照会することができる。いくつかの実現例では、FSM108は、テンソルの特定の要素のアドレス値をテンソル横断ユニット106に継続的に照会する。次いで、FSMは、プロセッサが記憶媒体104にアクセスして特定の要素の値を表す
データを読み取ることができるように、受信したアドレス値を処理ユニット102のプロセッサに提供することができる。
【0027】
たとえば、プログラムは、ネステッドループを含んでもよく、処理ユニット102は、ネステッドループに関連付けられた現在のインデックス変数値に従って、ネステッドループ内の二次元アレイ変数の要素にアクセスするための命令を実行してもよい。ネステッドループに関連付けられた現在のインデックス変数値に基づいて、テンソル横断ユニット106は、二次元アレイ変数の第1の要素のメモリアドレスからのオフセットを表すアドレスオフセット値を決定してもよい。次いで、処理ユニット102は、アドレスオフセット値を用いて、記憶媒体104から二次元アレイ変数の特定の要素にアクセスしてもよい。
【0028】
記憶媒体104は、コンピューティングシステム100内の情報を格納する。いくつかの実現例では、記憶媒体104は、1つまたは複数の揮発性メモリユニットである。いくつかの他の実現例では、記憶媒体104は、1つまたは複数の不揮発性メモリユニットである。また、記憶媒体104は、フロッピー(登録商標)ディスク装置、ハードディスク装置、光ディスク装置もしくはテープ装置、フラッシュメモリもしくは他の同様のソリッドステートメモリ装置、または各種の装置(ストレージエリアネットワークもしくは他の構成における装置を含む)などの別の形態のコンピュータ読取可能媒体であってもよい。命令は、処理ユニット102によって実行されると、処理ユニット102に1つ以上のタスクを実行させる。
【0029】
一般に、テンソル横断ユニット106は、1つ以上のテンソルに関連付けられた状態を判断する。いくつかの実現例では、当該状態は、ループ境界値、現在のループインデックス変数値、メモリアドレス値を決定するための部分アドレスオフセット値、および/または、ブランチループ境界を処理するためのプログラムカウンタ値を含んでもよい。テンソル横断ユニット106は、特定用途向け集積回路として実現されてもよい。
【0030】
テンソル横断ユニット106は、テンソルインデックスをメモリアドレスに翻訳することができる。たとえば、テンソル横断ユニット106は、一組のN次元テンソルインデックスを一次元アドレス空間に翻訳してもよい。テンソル横断ユニット106は、テンソル要素のメモリアドレスを要素の次元インデックスの組み合わせ(たとえば、線形組み合わせ)にすることによってこのような翻訳を実行することができる。
【0031】
テンソル横断ユニット106は、1つ以上のテンソル状態要素122と、数値演算ユニット124とを含み得る。テンソル状態要素122の各々は、記憶要素、たとえばレジスタまたは任意の好適な記憶回路であってもよい。テンソル状態要素122は、後述のバッファ割り当て要素を含み得る。数値演算ユニット124は、1つ以上の算術論理演算ユニット(arithmetic logic unit:ALU)および/または1つ以上のハードウェア加算器
を含み得る。数値演算ユニット124は、たとえばテンソル状態要素に格納された値に基づいてテンソル要素のメモリアドレスまたはメモリアドレスオフセット値を計算するのに用いられることができる。テンソル横断ユニットを用いてメモリアドレスを決定するための技術の一例については、2016年10月27日に出願された「ニューラルネットワーク計算タイル」と題される米国特許出願番号第15/335,769号および2016年2月3日に出願された「多次元テンソルにおけるデータへのアクセス」と題される米国特許出願番号第15/014,265号に記載されており、これらの特許出願の内容全体は引用によって本明細書に援用される。
【0032】
また、テンソル横断ユニット106は、データを1つのデータ格納場所から別のデータ格納場所に転送するための一時的なメモリ場所、たとえばバッファ、のメモリアドレスを決定するように構成され得る。たとえば、記憶媒体104は、格納場所A112および格
納場所B114を含む複数のデータ格納場所を含み得る。各格納場所は、共通のメモリユニットまたは異なるメモリユニットの種々のメモリアドレスであってもよい。記憶媒体104は、バッファA116およびバッファB118を含む複数の一時メモリも含み得る。処理ユニット102は、データを第2のデータ格納場所(たとえば、格納場所B114)に転送する前に、データを第1のデータ格納場所(たとえば、格納場所A112)から1つ以上のバッファ(たとえば、バッファA116および/またはバッファB118)に転送することができる。
【0033】
テンソル横断ユニット106は、バッファ(たとえば、ダブルバッファ)を用いてデータが生成または消費されているテンソル要素のバッファメモリアドレスを決定することができる。たとえば、2016年2月3日に出願された「多次元テンソルにおけるデータへのアクセス」と題される米国特許出願番号第15/014,265号に記載されている技術と同様に、テンソル横断ユニット106は、テンソルのベースバッファメモリアドレスおよびテンソル要素のテンソルインデックスに基づく各テンソル要素のアドレスオフセットを用いてテンソルインデックスをバッファメモリアドレスに翻訳することができる。
【0034】
たとえば、米国特許出願番号第15/014,265号に記載されているように、テンソル状態要素122は、テンソルインデックス要素のグループ、テンソル境界要素のグループ、および次元乗数要素のグループを含み得る。要素の各グループは、M個の行とN個の列とを有する2Dアレイとして配置され得る。グループの各行は、テンソルのテンソルインデックス情報を表し得る。グループの各列は、テンソルに関連付けられたネステッドループインデックス変数値についての情報(たとえば、テンソルインデックス値、テンソル境界値または次元乗数値)を表し得る。たとえば、テンソルインデックス要素の2Dアレイにおける1つの列は、変数iについてのテンソルインデックス情報を表してもよく、1つの列は、変数iについてのテンソルインデックス情報を表してもよく、1つの列は、変数kについてのテンソルインデックス情報を表してもよい。
【0035】
各テンソルインデックス要素は、ネステッドループにおけるループのネステッドループ変数を追跡することができる。たとえば、1つのテンソルインデックス要素は、ネステッドループインデックス変数iを追跡するように割り当てられてもよく、1つのテンソルインデックス要素は、ネステッドループインデックス変数jを追跡するように割り当てられてもよく、1つのテンソルインデックス要素は、ネステッドループインデックス変数kを追跡するように割り当てられてもよい。各テンソル境界要素は、テンソルインデックス要素における対応する要素を有する。各テンソル境界要素は、テンソルに関連付けられたネステッドループインデックス変数値についてのテンソル境界情報を表してもよい。たとえば、1つのテンソル境界要素は、ネステッドループインデックス変数iについてのテンソル境界情報を表してもよく、1つのテンソル境界要素は、ネステッドループインデックス変数jについてのテンソル境界情報を表してもよく、1つのテンソル境界要素は、ネステッドループインデックス変数kについてのテンソル境界情報を表してもよい。
【0036】
各次元乗数要素は、テンソルインデックス要素における対応する要素に乗算される乗数を表し得る。要素のメモリアドレスを決定するために、テンソル横断ユニット106は、ネステッドループインデックス変数のテンソルインデックス要素に格納された値にネステッドループインデックス変数の乗数を乗算することによって、各ネステッドループインデックス変数のメモリアドレスオフセットを決定することができる。次いで、テンソル横断ユニット106は、全ての乗算結果を合計して、アクセスされる要素に対応するメモリアドレスを決定することができる。
【0037】
テンソル横断ユニット106は、ネステッドループの内側ループの各反復後にテンソルインデックス要素を更新することができる。内側ループの各反復について、テンソル横断
ユニット106は、たとえば内側ループのテンソルインデックス要素をインクリメントすることによって、ループのテンソルインデックス要素を更新することができる。内側ループの更新されたテンソルインデックス要素が、内側ループのテンソル境界要素に格納された値に等しい場合には、テンソルインデックス要素がリセットされ得て、ネステッドにおける内側ループの次の外側ループのテンソルインデックス要素が更新され得る。次いで、テンソル横断ユニット120は、上記のように、テンソルインデックス要素にそれらの対応する乗数を乗算して結果を合計することによって、内側ループのこの反復に対応する次の要素のメモリアドレスを決定することができる。
【0038】
データを転送するために2つ以上のバッファが用いられる場合、テンソル横断ユニット106は、バッファ割り当て要素も用いて、各テンソル要素またはテンソル要素のグループをバッファのうちの1つに割り当てることができる。いくつかの実現例では、テンソル横断ユニット106は、バッファ割り当て要素の値が1つの値である場合にさらなるオフセットをバッファメモリアドレスに追加することによって1つ以上のテンソル要素のグループをバッファのうちの1つに割り当て、バッファ割り当て要素が異なる値である場合にさらなるオフセット値をバッファメモリアドレスに追加しないことによって1つ以上のテンソル要素のグループを異なるバッファに割り当てることができる。
【0039】
たとえば、ベースメモリアドレスは、第1のバッファの第1のメモリアドレスに対応してもよい。第2のバッファの第1のメモリアドレスは、ベースメモリアドレスから特定数のアドレスだけオフセットされてもよい。この例では、テンソル要素を第1のバッファのメモリアドレスに割り当てるために、テンソル横断ユニット106は、ベースメモリアドレスをテンソル要素のメモリオフセット値と組み合わせてもよい(たとえば、加算してもよい)。テンソル要素のメモリオフセット値は、2016年2月3日に出願された「多次元テンソルにおけるデータへのアクセス」と題される米国特許出願番号第15/014,265号に記載されているように、テンソルを横断するために用いられるネステッドループのテンソルインデックスに基づいて決定されてもよい。
【0040】
テンソル要素を第2のバッファのメモリアドレスに割り当てるために、テンソル横断ユニット106は、ベースメモリアドレスをテンソル要素のメモリオフセット値および第2のバッファのメモリアドレスオフセット値(たとえば、第2のバッファの第1のメモリアドレスを第1のバッファの第1のメモリアドレスからオフセットさせる特定数のアドレス)と組み合わせてもよい(たとえば、加算してもよい)。
【0041】
テンソル横断ユニット106は、バッファ割り当て要素の値を用いて、テンソル要素を第2のバッファにいつ割り当てるかを判断するため、第2のバッファのメモリアドレスオフセット値をベースメモリアドレスおよびテンソル要素のメモリオフセット値と組み合わせることによってテンソル要素のバッファメモリアドレスを決定することができる。たとえば、バッファ割り当て要素の値が第1の値である場合、テンソル横断ユニット106は、メモリアドレスオフセット値をベースメモリアドレスおよびテンソル要素のメモリオフセット値と組み合わせないことによってテンソル要素を第1のバッファに割り当ててもよい。バッファ割り当て要素の値が、第1の値とは異なる第2の値である場合、テンソル横断ユニット106は、メモリアドレスオフセット値をベースメモリアドレスおよびテンソル要素のメモリオフセット値と組み合わせることによってテンソル要素を第2のバッファに割り当ててもよい。
【0042】
いくつかの実現例では、テンソル横断ユニット106は、たとえばネステッドループを用いて、あるシーケンスにおける一連のテンソル要素のバッファメモリアドレスを決定してもよい。この例では、処理ユニット102は、特定のループの各反復、たとえば最内ループの各反復について、1つ以上のテンソル要素のグループのバッファメモリアドレスを
テンソル横断ユニット106から要求することができる。テンソル横断ユニット106は、ループインデックスに基づいて、ループの反復に対応するテンソル要素のグループのメモリオフセット値を決定することができる。また、テンソル横断ユニット106は、上記のように、バッファ割り当て要素の値に基づいて、テンソル要素のグループを第1のバッファに割り当てるか第2のバッファ(または、3つ以上の場合にはさらなるバッファ)に割り当てるかを判断することができる。テンソル横断ユニット106は、ベースメモリアドレス、テンソル要素のグループのメモリオフセット値、およびバッファ割り当て要素の値によっては第2のバッファのメモリオフセット値に基づいて、テンソル要素のグループのバッファメモリアドレスを決定することができる。
【0043】
当該シーケンスにおけるテンソル要素のグループのバッファメモリアドレスを決定した後、テンソル横断ユニットは、バッファ割り当て要素の値を切り替えることができる。たとえば、2つのバッファがある場合には、テンソル横断ユニット106は、各バッファメモリアドレス決定後に2つの値の間で値を切り替えてもよい。この例では、テンソル横断ユニット106は、バッファ割り当て要素の値が0であるときにはテンソル要素のグループを第1のバッファに割り当て、バッファ割り当て要素の値が1であるときにはテンソル要素のグループを第2のバッファに割り当てることができる。第1バッファメモリアドレス決定のために、バッファ割り当て要素は、0という値を有してもよい。この例では、テンソル横断ユニット106は、シーケンスにおけるテンソル要素の第1のグループを第1のバッファに割り当てることができる。次いで、テンソル横断ユニット106は、バッファ割り当て要素の値を1に切り替えることができる。したがって、テンソル横断ユニット106は、シーケンスにおけるテンソル要素の第2のグループを第2のバッファに割り当てることができる。テンソル横断ユニット106は、テンソル要素の他の全てのグループが第1のバッファに割り当てられるように、各バッファメモリアドレス決定後に値を切り替え続けることができる。
【0044】
いくつかの実現例では、各バッファメモリアドレス決定のためにテンソル要素のグループ(たとえば、テンソルのサブテンソル)がバッファに割り当てられるように、きめの粗いトグリング(toggling)が用いられる。いくつかの実現例では、各メモリアドレス決定において各々の個々のテンソル要素がバッファに割り当てられるように、きめ細かいトグリングが用いられる。
【0045】
テンソル横断ユニットが2つの1キロバイト(kB)バッファを有し、これらのバッファを用いて4kBのデータが転送される例を考えてみたい。ループネストの一例は、2つのバッファの間を行ったり来たりする外側ループを含み得て、内側ループは、このバッファに含まれるデータの各部分を識別するのに用いられ得る。たとえば、ネステッドループは、以下を含み得る。
【0046】
【0047】
この例では、内側ループ「j」は、バッファに含まれる1kBのデータを識別するのに用いられ、外側ループ「i」は、2つのバッファを切り替えるのに用いられる。たとえば、「i」が奇数値を有する場合、1kBのデータ要素のグループが第1のバッファに割り当てられてもよい。「i」が偶数値を有する場合、1kBのデータが第2のバッファに割り当てられてもよい。したがって、この例では、ループネストは、「i」の値に基づいて2つのバッファの間を行ったり来たりする。
【0048】
3つ以上のバッファがある場合には、テンソル横断ユニット106は、3つ以上の異なる値、たとえば各バッファについて固有の値、の間でバッファ割り当て要素を切り替えてもよい。たとえば、3つのバッファがある場合には、テンソル横断ユニット106は、バッファ割り当て要素が第1の値を有するときにテンソル要素のグループを第1のバッファに割り当てることができ、テンソル横断ユニット106は、バッファ割り当て要素が第2の値を有するときにテンソル要素のグループを第2のバッファに割り当てることができ、テンソル横断ユニット106は、バッファ割り当て要素が第3の値を有するときにテンソル要素のグループを第3のバッファに割り当てることができる。
【0049】
別の例では、各々が1MBの記憶容量を有する2つのバッファがあってもよく、これらのバッファを通じて3MBのデータを転送する必要があってもよい。この例では、第1の1MBが2つのバッファのうちの第1のバッファに割り当てられることができ、第2の1MBが2つのバッファのうちの第2のバッファに割り当てられることができる。次いで、たとえばプロセッサによって第1の1MBが消費された後、第3の1MBを第1のバッファに移動させることができる。
【0050】
いくつかの実現例では、テンソル横断ユニット106は、各バッファメモリアドレス決定後にバッファ割り当て要素の値を切り替えるのではなく、交互のバッファ割り当て値のシーケンスを取得することができる。たとえば、交互のバッファ割り当て値のシーケンスは、0および1が交互になったシーケンスであってもよい。各メモリアドレス決定後に、テンソル横断ユニット106は、シーケンスにおける次の値に移動して、次の値に基づいてテンソル要素のグループを適切なバッファに割り当てることができる。
【0051】
図2は、バッファを用いて転送されるデータの一例およびバッファ割り当て要素の一例を示す。この例では、データ要素、たとえばテンソル要素、の8個のグループのシーケンスが、2つのバッファを用いて第1のデータ格納場所205から第2のデータ格納場所215に転送されている。バッファ割り当て値のシーケンス210は、データ要素の各グループを2つのバッファのうちの1つに割り当てるのに用いられる。たとえば、データ要素のグループが、そのシーケンス内で、0という値を有するバッファ割り当て要素と同じ位置にある場合、データ要素のグループは第1のバッファに割り当てられる。データ要素のグループが、そのシーケンス内で、1という値を有するバッファ割り当て要素と同じ位置にある場合、データ要素のグループは、第1のバッファとは異なる第2のバッファに割り当てられる。
【0052】
したがって、この例では、第1、第3、第5および第7のバッファ割り当て値が0であるので、データ要素グループ「0」、「2」、「4」および「6」が第1のバッファに割り当てられる。同様に、第2、第4、第6および第8のバッファ割り当て値が1であるので、データ要素グループ「1」、「3」、「5」および「7」が第2のバッファに割り当てられる。したがって、各々がデータ要素の4個のグループを格納するための記憶容量を有する2つのバッファを用いて、データ要素の8個のグループをバッファリングすることができる。
【0053】
図3は、ダブルバッファリングを用いてデータを転送するためのプロセス300の一例を示すフロー図である。プロセス300は、1つ以上のコンピュータのシステム、たとえば
図1のコンピューティングシステム110、によって実行されてもよい。
【0054】
当該システムは、第1のバッファおよび第2のバッファを用いたダブルバッファリングのために指定されたデータ要素のシーケンスを識別する(302)。データ要素のシーケンスは、ダブルバッファリングのために指定されたテンソル要素のシーケンスであっても
よい。テンソル要素は、N次元テンソルの一部であってもよい。たとえば、テンソルは、ネステッドループを用いて横断されてもよく、各ループは、N次元テンソルのそれぞれの次元を横断することに関与する。
【0055】
データ要素のシーケンスは、ダブルバッファリングのために指定された特定の次元のテンソル要素を全て含んでもよい。たとえば、ネステッドループを含むプログラムは、特定の次元に対応するループをダブルバッファリングされるループとして指定するコードを含んでもよい。特定の三次元テンソルの例では、テンソルは、インデックスx、yおよびzを有する3つのループを用いて横断されてもよい。この例では、テンソルのZ次元は、インデックスzを有する外側ループを用いて横断されてもよく、テンソルのY次元は、インデックスyを有する中央ループを用いて横断されてもよく、テンソルのX次元は、インデックスxを有する内側ループを用いて横断されてもよい。内側ループは、ニューラルネットワーク計算のためのデータを迅速にバッファリングするようにダブルバッファリングのために指定されてもよい。
【0056】
当該システムは、シーケンスにおけるデータ要素の各グループのバッファメモリアドレスを決定する(304)。各グループは、1つ以上のデータ要素を含み得る。たとえば、きめ細かいトグリングが用いられる場合、各グループは、1つのデータ要素を含み得る。きめの粗いトグリングが用いられる場合、各グループは、複数のデータ要素、たとえば最大で特定量のメモリまたは特定数のデータ要素まで、を含み得る。
【0057】
いくつかの実現例では、当該システムは、バッファメモリアドレスを一度に一つずつ決定する。前の例を続けて、当該システムは、内側ループの各反復についてバッファメモリアドレスを決定してもよい。なぜなら、内側ループの各反復は、ダブルバッファリングのために指定された特定のテンソル要素に対応するからである。当該システムは、構成動作306~314を用いてデータ要素のシーケンスのバッファメモリアドレスを決定してもよい。
【0058】
当該システムは、データ要素のシーケンスにおけるデータ要素のグループのバッファ割り当て要素の値を識別する(306)。いくつかの実現例では、上記のように、当該システムは、各バッファメモリアドレス決定後に、たとえばダブルバッファリングのために指定されたループの各反復後に、バッファ割り当て要素の値を切り替えることができる。この例では、当該システムは、バッファ割り当て要素の現在の値をこのデータ要素のバッファ割り当て要素の値として識別することができる。バッファ割り当て要素の値は、データ要素のグループを適切なバッファに割り当てるのに用いられる。
【0059】
当該システムは、バッファ割り当て要素の値および第2のバッファのメモリアドレスオフセット値に基づいて、データ要素のグループのバッファメモリアドレスオフセット値を決定する(308)。上記のように、バッファのベースメモリアドレスは、第1のバッファの第1のメモリアドレスに対応してもよい。第2のバッファの第1のメモリアドレスは、ベースメモリアドレスから特定数のアドレスだけオフセットされてもよい。第2のバッファのメモリアドレスオフセット値は、特定数のアドレスと等しくてもよい。
【0060】
データ要素のグループのバッファメモリアドレスオフセット値を決定するために、当該システムは、バッファ割り当て要素の値が第1の値であるか第2の値(または、3つ以上のバッファがある場合にはより多くの値)であるかを判断する。バッファ割り当て要素が第1の値である場合、当該システムは、データ要素のグループのバッファメモリアドレス値を決定する際に第2のバッファのメモリアドレスオフセット値を用いないことによってデータ要素のグループを第1のバッファに割り当てることができる。その代わりに、当該システムは、上記のように、ネステッドループのループインデックスに基づいて決定され
るデータ要素のメモリオフセット値を用いることができる。
【0061】
バッファ割り当て要素が第2の値である場合、当該システムは、データ要素のグループのメモリオフセット値を第2のバッファのメモリアドレスオフセット値と組み合わせることによってデータ要素のグループを第2のバッファに割り当てることができる。たとえば、当該システムは、データ要素のグループのメモリオフセット値と第2のバッファのメモリアドレスオフセット値との合計をデータ要素のグループのバッファメモリアドレスオフセット値として決定してもよい。
【0062】
いくつかの実現例では、当該システムは、1という値を有するバッファ割り当て要素の値の論理積をとってその結果に第2のバッファのメモリアドレスオフセット値を乗算し、この結果をデータ要素のグループのメモリオフセット値に加算することによって、データ要素のグループのバッファメモリアドレスオフセット値を計算することができる。この例では、バッファ割り当て要素が0という値を有する場合、データ要素のグループのバッファメモリアドレスオフセット値は、データ要素のグループのメモリオフセット値に等しい。バッファ割り当て要素が1という値を有する場合、データ要素のグループのバッファメモリアドレスオフセット値は、第2のバッファのメモリアドレスオフセット値+データ要素のグループのメモリオフセット値に等しい値を有する。いくつかの実現例では、どのバッファを用いるかを判断するのに1ビットトグルカウンタを用いることができる。
【0063】
当該システムは、バッファのベースアドレスおよびバッファメモリアドレスオフセット値に基づいてデータ要素のグループのバッファメモリアドレスを決定する(310)。たとえば、当該システムは、バッファのベースアドレス(たとえば、第1のバッファの第1のメモリアドレス)をバッファメモリアドレスオフセット値に加算することによってデータ要素のグループのバッファメモリアドレスを決定してもよい。
【0064】
当該システムは、シーケンスにおける各データ要素についてバッファメモリアドレスが決定されたか否かを判断する(312)。決定されていない場合、当該システムは、次のデータ要素のバッファ割り当て要素の値を切り替える。このようにして、次のデータ要素が現在のデータ要素とは異なるバッファに割り当てられる。
【0065】
シーケンスにおける各データ要素についてバッファメモリアドレスが決定された場合、当該システムは、決定されたバッファメモリアドレスに基づいて、データ要素に格納されたデータをバッファに転送する(314)。次いで、データは、たとえばニューラルネットワーク計算で使用されるように、バッファから第2のデータ格納場所に転送されてもよい。
【0066】
本明細書に記載されている主題および機能動作の実施形態は、デジタル電子回路で実現されてもよく、有形に具体化されたコンピュータソフトウェアもしくはファームウェアで実現されてもよく、本明細書に開示されている構造およびそれらの構造的等価物を含むコンピュータハードウェアで実現されてもよく、またはそれらのうちの1つ以上の組み合わせで実現されてもよい。本明細書に記載されている主題の実施形態は、1つ以上のコンピュータプログラム、すなわちデータ処理装置による実行またはデータ処理装置の動作の制御のために有形の非一時的なプログラムキャリアに符号化されたコンピュータプログラム命令の1つ以上のモジュール、として実現されてもよい。代替的にまたは加えて、プログラム命令は、好適な受信機装置に送信されてデータ処理装置によって実行されるように情報を符号化するように生成された人工的に生成された伝搬信号、たとえば機械によって生成された電気信号、光信号または電磁信号に符号化されてもよい。コンピュータ記憶媒体は、機械読取可能な記憶装置、機械読取可能な記憶基板、ランダムもしくはシリアルアクセスメモリ装置、またはそれらのうちの1つ以上の組み合わせであってもよい。
【0067】
本明細書に記載されているプロセスおよび論理フローは、1つ以上のプログラム可能なコンピュータが、入力データを操作して出力を生成することによって機能を実行するように1つ以上のコンピュータプログラムを実行することによって、実行されてもよい。また、プロセスおよび論理フローは、特殊目的論理回路、たとえばFPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)またはGPGPU(汎用グラフィックスプロセシングユニット)、によって実行されてもよく、装置は、特殊目的論理回路、たとえばFPGA、ASICまたはGPGPUとして実現されてもよい。
【0068】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用マイクロプロセッサもしくは特殊目的マイクロプロセッサもしくはそれら両方、またはその他の種類の中央処理装置を含み、それらに基づくものであってもよい。一般に、中央処理装置は、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信する。コンピュータの必須の要素は、命令を実施または実行するための中央処理装置、ならびに、命令およびデータを格納するための1つ以上のメモリ装置である。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置(たとえば磁気ディスク、光磁気ディスクもしくは光ディスク)も含み、または、1つ以上の大容量記憶装置からデータを受信するように、もしくは1つ以上の大容量記憶装置にデータを送信するように、もしくは1つ以上の大容量記憶装置に対してデータを送受信するように動作可能に結合される。しかし、コンピュータは、このような装置を有していなくてもよい。さらに、コンピュータは、別の装置、たとえばほんの数例を挙げると、携帯電話、パーソナルデジタルアシスタント(PDA)、携帯オーディオまたはビデオプレーヤ、ゲーム機、グローバルポジショニングシステム(GPS)受信機、または携帯型記憶装置(たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブ)に組み込まれてもよい。
【0069】
コンピュータプログラム命令およびデータの格納に適したコンピュータ読取可能な媒体は、全ての形態の不揮発性メモリ、媒体およびメモリ装置を含み、これらの不揮発性メモリ、媒体およびメモリ装置は、一例として、半導体メモリ装置(たとえば、EPROM、EEPROMおよびフラッシュメモリ装置)、磁気ディスク(たとえば、内部ハードディスクまたはリムーバブルディスク)、光磁気ディスク、ならびにCD ROMおよびDVD-ROMディスクを含む。プロセッサおよびメモリは、特殊目的論理回路によって補完されてもよく、または特殊目的論理回路に組み入れられてもよい。
【0070】
本明細書は、多くの具体的な実現例の詳細を含んでいるが、これらは発明またはクレームされ得るものの範囲を限定するものとして解釈されるべきではなく、特定の発明の特定の実施形態に特有であり得る特徴の説明として解釈されるべきである。別々の実施形態の文脈で本明細書に記載されている特定の特徴は、単一の実施形態において組み合わせて実現されてもよい。逆に、単一の実施形態の文脈で記載されているさまざまな特徴は、複数の実施形態において別々に、または任意の好適な部分的組み合わせで実現されてもよい。さらに、特徴は、特定の組み合わせで作用するものとして上記され、そのように最初から記載され得るが、記載されている組み合わせからの1つ以上の特徴は、場合によっては当該組み合わせから削除されてもよく、記載されている組み合わせは、部分的組み合わせまたは部分的組み合わせの変形例に向けられてもよい。
【0071】
同様に、動作は特定の順序で図面に記載されているが、これは、このような動作が、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序で実行されなければならないものとして理解されるべきではなく、または望ましい結果を達成するために全ての示されている動作を実行しなければならないものとして理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利である場合もある。さらに、上記の実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離
は、全ての実施形態においてこのような分離が必要であるものとして理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に一体化されてもよく、または複数のソフトウェア製品にパッケージングされてもよい、ということが理解されるべきである。
【0072】
主題の特定の実施形態について説明してきた。他の実施形態も以下の特許請求の範囲の範囲内である。たとえば、請求項に記載されている動作は、異なる順序で実行されても依然として望ましい結果を達成することができる。一例として、添付の図面に示されているプロセスは、望ましい結果を達成するために、示されている特定の順序またはシーケンシャルな順序を必ずしも必要としない。特定の実現例では、マルチタスクおよび並列処理が有利である場合もある。
【手続補正書】
【提出日】2023-11-20
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
システムであって、
複数のメモリと、
第1のデータストレージおよび第2のデータストレージと、
処理回路とを備え、前記処理回路は、
前記第1のデータストレージに格納され、前記第2のデータストレージに転送されているN次元テンソルのデータのバッファメモリアドレスを決定するように配置され、Nは、2以上の整数であり、前記決定することは、
ループネストの内側ループを用いて前記N次元テンソルの複数のデータ要素を選択することを含み、前記選択することは、前記内側ループのループ境界に達するまで前記N次元テンソルのデータの一部を前記複数のデータ要素として識別することを含み、前記決定することはさらに、
前記N次元テンソルの前記複数のデータ要素について、
バッファ割り当て要素の現在の値を識別することを含み、前記バッファ割り当て要素の各値は、前記複数のメモリのそれぞれのメモリに対応し、前記バッファ割り当て要素の前記値は、データ要素についてバッファメモリアドレスが決定されるたびに更新され、前記決定することはさらに、
前記N次元テンソルの前記複数のデータ要素について、
前記バッファ割り当て要素の前記現在の値に基づいて、前記バッファ割り当て要素の前記現在の値に対応するメモリアドレスオフセット値を選択することと、
(i)前記複数のメモリのベースアドレスと、(ii)前記バッファ割り当て要素の前記現在の値に対応する前記メモリアドレスオフセット値と、(iii)前記データ要素のメモリオフセット値との組み合わせに少なくとも基づいて、前記複数のデータ要素の各データ要素の前記バッファメモリアドレスを決定することと、
前記決定されたバッファメモリアドレスを出力することと、
前記内側ループの前記ループ境界に達するたびに、前記ループネストの外側ループを用いて前記バッファ割り当て要素の前記値を更新することとを含む、システム。
【請求項2】
前記決定されたバッファメモリアドレスを出力することは、前記決定されたバッファメモリアドレスを処理ユニットに出力することを含み、前記処理ユニットは、前記決定されたバッファメモリアドレスを用いて前記バッファ割り当て要素の前記現在の値に対応する前記それぞれのメモリに前記複数のデータ要素を転送し、前記処理ユニットは、プロセッサまたは有限状態マシンのうちの少なくとも1つを含む、請求項1に記載のシステム。
【請求項3】
前記内側ループの前記ループ境界は、各々のそれぞれのメモリの最大データサイズに対応する、請求項1または2に記載のシステム。
【請求項4】
前記バッファ割り当て要素の前記値は、前記外側ループの現在のインデックス値に基づく、請求項1~3のいずれか一項に記載のシステム。
【請求項5】
各データ要素の前記メモリオフセット値は、前記N次元テンソルを横断するために用いられるさらなるループネストにおける複数のループの現在のインデックス値に基づく、請求項1~4のいずれか一項に記載のシステム。
【請求項6】
データを転送するためにコンピューティングシステムによって実行される方法であって、
ループネストの内側ループを用いてN次元テンソルの複数のデータ要素を選択するステップを含み、前記選択するステップは、前記内側ループのループ境界に達するまで前記N次元テンソルのデータの一部を前記複数のデータ要素として識別するステップを含み、前記方法はさらに、
前記N次元テンソルの前記複数のデータ要素について、
バッファ割り当て要素の現在の値を識別するステップを含み、前記バッファ割り当て要素の各値は、複数のメモリのそれぞれのメモリに対応し、前記バッファ割り当て要素の前記値は、データ要素についてバッファメモリアドレスが決定されるたびに更新され、前記方法はさらに、
前記N次元テンソルの前記複数のデータ要素について、
前記バッファ割り当て要素の前記現在の値に基づいて、前記バッファ割り当て要素の前記現在の値に対応するメモリアドレスオフセット値を選択するステップと、
(i)前記複数のメモリのベースアドレスと、(ii)前記バッファ割り当て要素の前記現在の値に対応する前記メモリアドレスオフセット値と、(iii)前記データ要素のメモリオフセット値との組み合わせに少なくとも基づいて、前記複数のデータ要素の各データ要素のバッファメモリアドレスを決定するステップと、
前記決定されたバッファメモリアドレスを出力するステップと、
前記内側ループの前記ループ境界に達するたびに、前記ループネストの外側ループを用いて前記バッファ割り当て要素の前記値を更新するステップとを含む、方法。
【請求項7】
前記決定されたバッファメモリアドレスを出力するステップは、前記決定されたバッファメモリアドレスを処理ユニットに出力するステップを含み、前記処理ユニットは、前記決定されたバッファメモリアドレスを用いて前記バッファ割り当て要素の前記現在の値に対応する前記それぞれのメモリに前記複数のデータ要素を転送し、前記処理ユニットは、プロセッサまたは有限状態マシンのうちの少なくとも1つを含む、請求項6に記載の方法。
【請求項8】
前記内側ループの前記ループ境界は、各々のそれぞれのメモリの最大データサイズに対応する、請求項6または7に記載の方法。
【請求項9】
前記バッファ割り当て要素の前記値は、前記外側ループの現在のインデックス値に基づく、請求項6~8のいずれか一項に記載の方法。
【請求項10】
各データ要素の前記メモリオフセット値は、前記N次元テンソルを横断するために用いられるさらなるループネストにおける複数のループの現在のインデックス値に基づく、請求項6~9のいずれか一項に記載の方法。
【請求項11】
装置であって、
複数のメモリと、
処理回路とを備え、前記処理回路は、
第1のデータ格納場所に格納され、第2のデータ格納場所に転送されているN次元テンソルのデータのバッファメモリアドレスを決定するように配置され、Nは、2以上の整数であり、前記決定することは、
ループネストの内側ループを用いて前記N次元テンソルの複数のデータ要素を選択することを含み、前記選択することは、前記内側ループのループ境界に達するまで前記N次元テンソルのデータの一部を前記複数のデータ要素として識別することを含み、前記決定することはさらに、
前記N次元テンソルの前記複数のデータ要素について、
バッファ割り当て要素の現在の値を識別することを含み、前記バッファ割り当て要素の各値は、前記複数のメモリのそれぞれのメモリに対応し、前記バッファ割り当て要素の前記値は、データ要素についてバッファメモリアドレスが決定されるたびに更新され、前記決定することはさらに、
前記N次元テンソルの前記複数のデータ要素について、
前記バッファ割り当て要素の前記現在の値に基づいて、前記バッファ割り当て要素の前記現在の値に対応するメモリアドレスオフセット値を選択することと、
(i)前記複数のメモリのベースアドレスと、(ii)前記バッファ割り当て要素の前記現在の値に対応する前記メモリアドレスオフセット値と、(iii)前記データ要素のメモリオフセット値との組み合わせに少なくとも基づいて、前記複数のデータ要素の各データ要素の前記バッファメモリアドレスを決定することと、
前記決定されたバッファメモリアドレスを出力することと、
前記内側ループの前記ループ境界に達するたびに、前記ループネストの外側ループを用いて前記バッファ割り当て要素の前記値を更新することとを含む、装置。
【請求項12】
前記決定されたバッファメモリアドレスを出力することは、前記決定されたバッファメモリアドレスを処理ユニットに出力することを含み、前記処理ユニットは、前記決定されたバッファメモリアドレスを用いて前記バッファ割り当て要素の前記現在の値に対応する前記それぞれのメモリに前記複数のデータ要素を転送し、前記処理ユニットは、プロセッサまたは有限状態マシンのうちの少なくとも1つを含む、請求項11に記載の装置。
【請求項13】
前記内側ループの前記ループ境界は、各々のそれぞれのメモリの最大データサイズに対応する、請求項11または12に記載の装置。
【請求項14】
前記バッファ割り当て要素の前記値は、前記外側ループの現在のインデックス値に基づく、請求項11~13のいずれか一項に記載の装置。
【外国語明細書】