(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024116166
(43)【公開日】2024-08-27
(54)【発明の名称】共有スクラッチパッドメモリを用いたベクトル縮小
(51)【国際特許分類】
G06F 17/16 20060101AFI20240820BHJP
【FI】
G06F17/16 M
【審査請求】有
【請求項の数】8
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024083843
(22)【出願日】2024-05-23
(62)【分割の表示】P 2022513296の分割
【原出願日】2020-11-30
(31)【優先権主張番号】62/981,957
(32)【優先日】2020-02-26
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/007,569
(32)【優先日】2020-08-31
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ノリー,トーマス
(72)【発明者】
【氏名】ラジャマニ,グルシャンカー
(72)【発明者】
【氏名】フェルプス,アンドリュー・エバレット
(72)【発明者】
【氏名】ヘッドルンド,マシュー・リーバー
(72)【発明者】
【氏名】ジョピー,ノーマン・ポール
(57)【要約】 (修正有)
【課題】ハードウェア回路の共有スクラッチパッドメモリを用いてベクトル縮小を実行するための、コンピュータ読取可能媒体を含む方法、システムおよび装置を提供する。
【解決手段】システム100において、ハードウェア回路101は、共有メモリ104と通信するプロセッサコア105-1、105-2を有し、プロセッサコア毎に、プロセッサコアで実行される計算に基づいて、値のベクトルの夫々を生成する。共有メモリは、共有メモリのダイレクトメモリアクセス(DMA)データパスを用いて、プロセッサコアの夫々のリソースから値のベクトルの夫々を受信し、共有メモリ近傍に結合された演算器ユニットを用いて、値のベクトルの夫々に対して累積演算を実行する。演算器ユニットは、演算器ユニットで符号化した算術演算に基づいて値を累積する。値のベクトルの夫々を用いて累積演算を実行したことに基づいて、結果ベクトルが生成される。
【選択図】
図1
【特許請求の範囲】
【請求項1】
共有メモリと、前記共有メモリと通信する複数のプロセッサコアとを有するハードウェア回路を用いて実行される方法であって、前記方法は、
第1のプロセッサコアで実行される計算に基づいて、値の第1のベクトルを生成することと、
前記共有メモリが、前記共有メモリのダイレクトメモリアクセス(DMA)データパスを用いて、前記第1のプロセッサコアから前記値の第1のベクトルを受信することと、
前記共有メモリにおいて、前記値の第1のベクトルと前記共有メモリに格納されているベクトルとの間の累積演算を実行することとを備え、
前記累積演算は演算器ユニットを用いて実行され、前記演算器ユニットは、
i)前記共有メモリに結合され、
ii)複数のベクトルの値を累積するように構成され、前記方法はさらに、
前記累積演算に基づいて結果ベクトルを生成することを備える、方法。
【請求項2】
前記共有メモリに格納されている前記ベクトルは、第2のプロセッサコアから受信したものであり、前記方法は、
前記第1のプロセッサコアが、前記共有メモリのメモリ場所に前記値の第1のベクトルのそれぞれの値を累積するメモリへの累積動作を実行することと、
前記第2のプロセッサコアが、前記共有メモリの前記メモリ場所に値の第2のベクトルのそれぞれの値を累積するメモリへの累積動作を実行することとを備え、前記値の第2のベクトルは、前記共有メモリに格納されている前記ベクトルに対応する、請求項1に記載の方法。
【請求項3】
前記累積演算に基づいて前記結果ベクトルを生成することは、
前記第1のプロセッサコアで実行される計算から得られる積を事前に累積するステップを前記第1のプロセッサコアが実行することなく、前記結果ベクトルを生成することと、
前記第2のプロセッサコアで実行される計算から得られる積を事前に累積するステップを前記第2のプロセッサコアが実行することなく、前記結果ベクトルを生成することとを含む、請求項2に記載の方法。
【請求項4】
前記結果ベクトルを生成することは、
前記値の第1のベクトルに対して前記累積演算を実行した結果として、累積値のベクトルを生成することと、
前記累積値のベクトル内の各値に活性化関数を適用することと、
前記累積値のベクトル内の各値に前記活性化関数を適用した結果として、前記結果ベクトルを生成することとを含む、請求項1に記載の方法。
【請求項5】
前記第1のプロセッサコアのそれぞれのリソースは、第1の行列計算ユニットであり、前記方法はさらに、
前記第1のプロセッサコアの前記第1の行列計算ユニットを用いて実行される行列乗算に基づいて、前記値の第1のベクトルに対応する累積値の第1のベクトルを生成することを備える、請求項2に記載の方法。
【請求項6】
前記第2のプロセッサコアのそれぞれのリソースは、第2の行列計算ユニットであり、前記方法はさらに、
前記第2のプロセッサコアの前記第2の行列計算ユニットを用いて実行される行列乗算に基づいて、前記値の第2のベクトルに対応する累積値の第2のベクトルを生成することを備える、請求項5に記載の方法。
【請求項7】
前記ハードウェア回路は、複数のニューラルネットワーク層を含むニューラルネットワークを実行するように構成されたハードウェアアクセラレータであり、
前記方法は、前記結果ベクトルに基づいて前記ニューラルネットワークの層の出力を生成することを備える、請求項1に記載の方法。
【請求項8】
前記第1のプロセッサコアで実行される計算に基づいて、前記値の第1のベクトルを生成することと、
前記第2のプロセッサコアで実行される計算に基づいて、前記値の第2のベクトルを生成することとをさらに備え、
前記第1のプロセッサコアで実行される前記計算および前記第2のプロセッサコアで実行される前記計算は、可換性によって制御される数学的演算の一部である、請求項2に記載の方法。
【請求項9】
前記数学的演算は、
浮動小数点乗算演算、
浮動小数点加算演算、
整数加算演算、または
最小-最大演算である、請求項8に記載の方法。
【請求項10】
前記数学的演算は、浮動小数点加算演算および整数加算演算を含む、請求項8に記載の方法。
【請求項11】
前記第1のプロセッサコアおよび第2のプロセッサコアは同一のプロセッサコアである、請求項2に記載の方法。
【請求項12】
前記共有メモリは、前記ハードウェア回路の2つ以上のプロセッサコアの間で共有されるメモリバンクおよびレジスタを含む共有グローバルメモリ空間として機能するように構成される、請求項1に記載の方法。
【請求項13】
システムであって、
処理装置と、
共有メモリと、前記共有メモリと通信する複数のプロセッサコアとを有するハードウェア回路と、
動作を実行させるように前記処理装置によって実行可能な命令を格納するための非一時的な機械読取可能記憶装置とを備え、前記動作は、
第1のプロセッサコアで実行される計算に基づいて、値の第1のベクトルを生成することと、
前記共有メモリが、前記共有メモリのダイレクトメモリアクセス(DMA)データパスを用いて、前記第1のプロセッサコアから前記値の第1のベクトルを受信することと、
前記共有メモリにおいて、前記値の第1のベクトルと前記共有メモリに格納されているベクトルとの間の累積演算を実行することとを含み、
前記累積演算は演算器ユニットを用いて実行され、前記演算器ユニットは、
i)前記共有メモリに結合され、
ii)複数のベクトルを累積するように構成され、前記動作はさらに、
前記値の第1のベクトルを用いて前記累積演算を実行したことに基づいて結果ベクトルを生成することを含む、システム。
【請求項14】
前記共有メモリに格納されている前記ベクトルは、第2のプロセッサコアから受信したものであり、前記動作は、
前記第1のプロセッサコアが、前記共有メモリのメモリ場所に前記値の第1のベクトル
のそれぞれの値を累積するメモリへの累積動作を実行することと、
前記第2のプロセッサコアが、前記共有メモリの前記メモリ場所に値の第2のベクトルのそれぞれの値を累積するメモリへの累積動作を実行することとを含み、前記値の第2のベクトルは、前記共有メモリに格納されている前記ベクトルに対応する、請求項13に記載のシステム。
【請求項15】
前記累積演算を実行したことに基づいて前記結果ベクトルを生成することは、
前記第1のプロセッサコアで実行される計算から得られる積を事前に累積するステップを前記第1のプロセッサコアが実行することなく、前記結果ベクトルを生成することと、
前記第2のプロセッサコアで実行される計算から得られる積を事前に累積するステップを前記第2のプロセッサコアが実行することなく、前記結果ベクトルを生成することとを含む、請求項14に記載のシステム。
【請求項16】
前記結果ベクトルを生成することは、
前記値の第1のベクトルに対して前記累積演算を実行した結果として、累積値のベクトルを生成することと、
前記累積値のベクトル内の各値に活性化関数を適用することと、
前記累積値のベクトル内の各値に前記活性化関数を適用した結果として、前記結果ベクトルを生成することとを含む、請求項13に記載のシステム。
【請求項17】
前記第1のプロセッサコアのそれぞれのリソースは、第1の行列計算ユニットであり、前記動作はさらに、
前記第1のプロセッサコアの前記第1の行列計算ユニットを用いて実行される行列乗算に基づいて、前記値の第1のベクトルに対応する累積値の第1のベクトルを生成することを含む、請求項14に記載のシステム。
【請求項18】
前記第2のプロセッサコアのそれぞれのリソースは、第2の行列計算ユニットであり、前記動作はさらに、
前記第2のプロセッサコアの前記第2の行列計算ユニットを用いて実行される行列乗算に基づいて、前記値の第2のベクトルに対応する累積値の第2のベクトルを生成することを含む、請求項17に記載のシステム。
【請求項19】
前記ハードウェア回路は、複数のニューラルネットワーク層を含むニューラルネットワークを実行するように構成されたハードウェアアクセラレータであり、
前記動作は、前記結果ベクトルに基づいて前記ニューラルネットワークの層の出力を生成することを含む、請求項13に記載のシステム。
【請求項20】
前記第1のプロセッサコアで実行される計算に基づいて、前記値の第1のベクトルを生成することと、
前記第2のプロセッサコアで実行される計算に基づいて、前記値の第2のベクトルを生成することとをさらに含み、
前記第1のプロセッサコアで実行される前記計算および前記第2のプロセッサコアで実行される前記計算は、可換性によって制御される数学的演算の一部である、請求項14に記載のシステム。
【請求項21】
前記数学的演算は、
浮動小数点乗算演算、
浮動小数点加算演算、
整数加算演算、または
最小-最大演算である、請求項20に記載のシステム。
【請求項22】
前記数学的演算は、浮動小数点加算演算および整数加算演算を含む、請求項20に記載のシステム。
【請求項23】
前記第1のプロセッサコアおよび第2のプロセッサコアは同一のプロセッサコアである、請求項14に記載のシステム。
【請求項24】
前記共有メモリは、前記ハードウェア回路の2つ以上のプロセッサコアの間で共有されるメモリバンクおよびレジスタを含む共有グローバルメモリ空間として機能するように構成される、請求項13に記載のシステム。
【請求項25】
動作を実行させるように処理装置によって実行可能な命令を格納するための非一時的な機械読取可能記憶装置であって、前記動作は、
ハードウェア回路の第1のプロセッサコアで実行される計算に基づいて、値の第1のベクトルを生成することと、
前記ハードウェア回路の共有メモリが、前記共有メモリのダイレクトメモリアクセス(DMA)データパスを用いて、前記第1のプロセッサコアから前記値の第1のベクトルを受信することと、
前記共有メモリにおいて、前記値の第1のベクトルと前記共有メモリに格納されているベクトルとの間の累積演算を実行することと含み、
前記累積演算は演算器ユニットを用いて実行され、前記演算器ユニットは、
i)前記共有メモリに結合され、
ii)複数のベクトルを累積するように構成され、前記動作はさらに、
前記累積演算に基づいて結果ベクトルを生成することを含む、非一時的な機械読取可能記憶装置。
【発明の詳細な説明】
【技術分野】
【0001】
背景
本明細書は、概して、ニューラルネットワーク計算を実行するために用いられるハードウェア回路の回路構成に関する。
【背景技術】
【0002】
ニューラルネットワークは、ノードの1つ以上の層を利用して、受信した入力について出力(たとえば分類)を生成する機械学習モデルである。ニューラルネットワークの中には、出力層に加えて1つ以上の隠れ層を含んでいるものもある。各隠れ層の出力は、ネットワーク内の1つ以上の他の層(たとえばネットワークの他の隠れ層または出力層)への入力として用いられる。ネットワークの層のうちのいくつかは、パラメータのそれぞれのセットの現在値に従って、受信した入力から出力を生成する。いくつかのニューラルネットワークは、画像処理用に構成された畳み込みニューラルネットワーク(CNN)または音声および言語処理用に構成された回帰型ニューラルネットワーク(RNN)であり得る。異なるタイプのニューラルネットワークアーキテクチャを用いて、分類またはパターン認識、データモデリングを含む予測、および情報クラスタリングに関連する各種タスクを実行することができる。
【0003】
CNNのニューラルネットワーク層は、パラメータまたは重みに対応し得る、カーネルの関連付けられたセットを有し得る。カーネルの関連付けられたセットを用いて、ニューラルネットワーク層を通して入力(たとえば入力のバッチ)を処理して、ニューラルネットワーク推論を計算するための層の対応する出力を生成する。入力のバッチおよびカーネルのセットは、入力および重みのテンソル(すなわち多次元配列)として表すことができる。ニューラルネットワークを実行するハードウェア回路は、アドレス値によって識別される場所を有するメモリを含む。メモリ場所はテンソルの要素に対応し得て、テンソル要素は回路の制御論理を用いてトラバースまたはアクセスされ得る。たとえば、制御論理は、要素のメモリアドレス値を決定または計算して、この要素の対応するデータ値をロードまたは格納することができる。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
本文書には、大規模共有スクラッチパッドメモリにおいてデータ蓄積およびベクトル縮小を実行するための技術が記載されている。特に、これらの技術を用いて、計算システムのそれぞれのプロセッサコアで行われる計算の結果として生成される値または出力を縮小することを含むベクトル縮小を実行するために必要な演算の全体量を縮小する。たとえば、システムは、複数のプロセッサコアを有し得るハードウェア回路と、スタティックランダムアクセスメモリ(SRAM)のメモリリソースを組込むアーキテクチャとを含む。SRAMのメモリリソースは、回路の複数のそれぞれのプロセッサコアの間で共有されるように割り当てられる。
【0005】
計算システムで行われる複数セットの計算は、値のベクトルのそれぞれを生成するように1つ以上のハードウェア回路のそれぞれのコアに分散させることができる。共有メモリは、共有メモリのダイレクトメモリアクセス(DMA)データパスを用いて、プロセッサコアのそれぞれのリソースから値のベクトルのそれぞれを受信する。共有メモリは、共有メモリに結合された演算器ユニットを用いて、値のベクトルのそれぞれに対して累積演算(accumulation operation)を実行する。演算器ユニットは、演算器ユニットで符号化さ
れた算術演算に基づいて値を累積するように構成される。累積演算に基づいて結果ベクトルが生成される。
【0006】
本明細書に記載されている主題の一局面は、共有メモリと、上記共有メモリと通信する複数のプロセッサコアとを有するハードウェア回路を用いて実行される方法で具体化することができる。上記方法は、第1のプロセッサコアで実行される計算に基づいて、値の第1のベクトルを生成することと、上記共有メモリが、上記共有メモリのダイレクトメモリアクセス(DMA)データパスを用いて、上記第1のプロセッサコアから上記値の第1のベクトルを受信することと、上記共有メモリにおいて、上記値の第1のベクトルと上記共有メモリに格納されているベクトルとの間の累積演算を実行することとを含む。上記累積演算は演算器ユニットを用いて実行され、上記演算器ユニットは、i)上記共有メモリに結合され、ii)複数のベクトルを累積するように構成される。上記方法は、上記累積演算に基づいて結果ベクトルを生成することを含む。
【0007】
これらおよび他の実現例の各々は、任意に以下の特徴のうちの1つ以上を含み得る。たとえば、いくつかの実現例において、上記共有メモリに格納されている上記ベクトルは、第2のプロセッサコアから受信したものであり、上記方法は、上記第1のプロセッサコアが、上記共有メモリのメモリ場所に上記値の第1のベクトルのそれぞれの値を累積するメモリへの累積動作(accumulate-to-memory operation)を実行することと、上記第2のプロセッサコアが、上記共有メモリの上記メモリ場所に値の第2のベクトルのそれぞれの値を累積するメモリへの累積動作を実行することとを含み、上記値の第2のベクトルは、上記共有メモリに格納されている上記ベクトルに対応する。場合によっては、上記第2のプロセッサは、上記値の第2のベクトルの値が初期値として書かれるようにフラグ(たとえば初期ベクトル/値フラグ)を設定するのに対して、上記第1のプロセッサコアは、上記値の第1のベクトルの値が上記値の第2のベクトルの値とともに累積されるように異なるフラグ(たとえば累積フラグ)を設定する。
【0008】
いくつかの実現例において、上記累積演算に基づいて上記結果ベクトルを生成することは、上記第1のプロセッサコアで実行される計算から得られる積を事前に累積するステップを上記第1のプロセッサコアが実行することなく、上記結果ベクトルを生成することと、上記第2のプロセッサコアで実行される計算から得られる積を事前に累積するステップを上記第2のプロセッサコアが実行することなく、上記結果ベクトルを生成することとを含む。
【0009】
いくつかの実現例において、上記結果ベクトルを生成することは、上記値の第1のベクトルに対して上記累積演算を実行した結果として、累積値のベクトルを生成することと、上記累積値のベクトル内の各値に活性化関数を適用することと、上記累積値のベクトル内の各値に上記活性化関数を適用した結果として、上記結果ベクトルを生成することとを含む。累積は、上記第1のベクトルの値に対して行われてもよく、または、累積は、上記第1のベクトルの値と上記共有メモリに格納されている上記ベクトルの値とのペアワイズ累積を含み得る。
【0010】
いくつかの実現例において、上記第1のプロセッサコアのそれぞれのリソースは、第1の行列計算ユニットであり、上記方法はさらに、上記第1のプロセッサコアの上記第1の行列計算ユニットを用いて実行される行列乗算に基づいて、上記値の第1のベクトルに対応する累積値の第1のベクトルを生成することを含む。
【0011】
いくつかの実現例において、上記第2のプロセッサコアのそれぞれのリソースは、第2の行列計算ユニットであり、上記方法はさらに、上記第2のプロセッサコアの上記第2の行列計算ユニットを用いて実行される行列乗算に基づいて、上記値の第2のベクトルに対
応する累積値の第2のベクトルを生成することを含む。上記ハードウェア回路は、複数のニューラルネットワーク層を有するニューラルネットワークを実行するように構成されたハードウェアアクセラレータであってもよく、上記方法は、上記結果ベクトルに基づいて上記ニューラルネットワークの層の出力を生成することを含む。
【0012】
上記方法はさらに、上記第1のプロセッサコアで実行される計算に基づいて、上記値の第1のベクトルを生成することと、上記第2のプロセッサコアで実行される計算に基づいて、上記値の第2のベクトルを生成することとを含み得る。上記第1のプロセッサコアで実行される上記計算および上記第2のプロセッサコアで実行される上記計算は、可換性によって制御される数学的演算の一部であってもよい。いくつかの実現例において、上記数学的演算は、浮動小数点乗算演算、浮動小数点加算演算、整数加算演算、または最小-最大演算である。いくつかの実現例において、上記数学的演算は、浮動小数点加算演算および整数加算演算を含む。上記第1のプロセッサコアおよび第2のプロセッサコアは同一のプロセッサコアであってもよい。
【0013】
いくつかの実現例において、上記共有メモリは、上記ハードウェア回路の2つ以上のプロセッサコアの間で共有されるメモリバンクおよびレジスタを含む共有グローバルメモリ空間として機能するように構成される。
【0014】
このおよび他の局面の他の実現例は、コンピュータ記憶装置上に符号化された、方法のアクションを実行するように構成された対応するシステム、装置、およびコンピュータプログラムを含む。1つ以上のコンピュータのシステムは、動作時にシステムにアクションを実行させる、システムにインストールされたソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせによってそのように構成され得る。1つ以上のコンピュータプログラムは、データ処理装置によって実行されると装置にアクションを実行させる命令を有することによってそのように構成され得る。
【0015】
本明細書に記載されている主題は、以下の利点のうちの1つ以上を実現するように特定の実施形態において実現することができる。
【0016】
本文書に記載されている技術は、単に共有メモリ場所への入来ベクトルデータを上書きするのではなく、このデータをアトミックに縮小するDMAモードをサポートする大規模共有スクラッチパッドメモリの能力を利用する。言い換えれば、複数のプロセッサコアまたはプロセッサは、同一の共有メモリ場所を更新する縮小演算を同時に実行することができるので、得られる縮小値は、縮小演算が同一のメモリ場所に関連付けられた値を含む場合でも演算が連続して起こったかのように計算される。そうではなく、各プロセッサが単に共有メモリ場所に上書きすれば、別のプロセッサによって書込まれた以前の値が意図せず失われる(たとえば更新喪失問題に対応する)可能性がある。システムは、制御ループに基づいて、データの「アトミックな」縮小を検出し、共有メモリ場所における値の上書きをどちらかの方法で許可することにより、メモリ場所に縮小演算の最終結果を保持(または格納)させることができる。場合によっては、本明細書に記載されているさまざまな技術は、システム全体にわたって存在する他のメモリタイプ(オンチップおよびオフチップメモリを含む)に拡張可能である。
【0017】
演算器ユニットは、共有メモリの近傍に結合されて、ベクトル値を共有メモリセル/場所に累積するための各種算術演算をサポートする。算術演算は、任意の縮小演算子(浮動小数点アトミック加算、整数加算、最大、最小、最大プーリング、およびさらには乗算など)に基づき得る。共有メモリに隣接して結合された演算器ユニットは、共有リソースのソフトウェア管理アドレッシングおよび可換数学的演算を単一のメモリシステムに統合するという利点を提供する。
【0018】
これらの技術は、アトミック性を確保するように未処理の動作を追跡するために、かつ、古いベクトル値に対してベクトル値が累積されないように書込みトラフィックを必要に応じて停止するまたは並べ替えるために、共有メモリの制御ユニットで実行される読出・修正・書込制御ループを含む。また、読出・修正・書込制御ループは、第1のプロセッサコアに格納されたベクトルデータを読出すこと、読出したベクトル値に対して、第1のコアから離れている計算ユニットで算術演算を実行すること、およびその後に第1のプロセッサコアへの格納/書戻しを行うことが必要な、非効率な代替アプローチに対する性能およびエネルギーの向上を提供する。システムが大規模ベクトルメモリを有する場合、これらの非効率な代替アプローチでは、チップ全体にわたるかなりの距離をデータ移動させることが必要な場合がある。このようなアプローチでは、プロセッサコアにおける計算サイクルと、コアへのおよびコアからの配線の帯域幅とが不必要に消費されてしまう。また、これらの非効率によって、より深い計算スケジュールが生成され、レジスタ帯域幅が不必要に消費されてしまう。
【0019】
これらの技術は、プロセッサコアで生成されて共有メモリのDMAパスとともに用いられる累積フラグに一部基づく、メモリへの累積特徴を含む。この特徴は、2つ以上のプロセッサコアが、共有メモリシステム内の共有メモリ場所にベクトルを直接累積することを可能にする。この特徴は、複数のコアからのDMAが、コアの間の動作をアービトレートするための外部同期化またはソフトウェアロックを必要とせずに、同一のメモリセクタおよびアドレスを同時にターゲットにすることを可能にすることによって、マルチノードシステムにおいて特に有用であり得る。たとえば、これは、共有メモリセルを複数のチップ全体にわたる全縮小バッファとして、またはプロセッサコアの分散システムとして構成するのに役立ち得る。
【0020】
いくつかの実現例は、ハードウェア回路の共有スクラッチパッドメモリを用いてベクトル縮小を実行するための、コンピュータ読取可能媒体を含む方法、システム、および装置に関し、ハードウェア回路は、この共有メモリと通信するプロセッサコアを有する。プロセッサコアごとに、プロセッサコアで実行される計算に基づいて、値のベクトルのそれぞれが生成される。共有メモリは、共有メモリのダイレクトメモリアクセス(DMA)データパスを用いて、プロセッサコアのそれぞれのリソースから値のベクトルのそれぞれを受信する。共有メモリは、共有メモリに結合された演算器ユニットを用いて、値のベクトルのそれぞれに対して累積演算を実行する。演算器ユニットは、演算器ユニットで符号化された算術演算に基づいて値を累積するように構成される。累積演算に基づいて結果ベクトルが生成される。
【0021】
本明細書に記載されている主題の1つ以上の実現例の詳細は、添付の図面および以下の説明に記載されている。主題の他の潜在的な特徴、局面、および利点は、説明、図面、および請求項から明らかになるであろう。
【図面の簡単な説明】
【0022】
【
図1】例示的な共有メモリを含むハードウェア回路を有する計算システムのブロック図である。
【
図2】ハードウェア回路の共有メモリと通信するプロセッサコアの一例を示すブロック図である。
【
図3】ハードウェア回路の行列計算ユニットと通信するベクトルプロセッサの一例を示すブロック図である。
【
図4】例示的な累積パイプラインを示すブロック図である。
【
図5】入力テンソル、重みテンソル、および出力テンソルの例を示す図である。
【
図6】
図1の共有メモリを用いてベクトル縮小を実行するための例示的なプロセスを示すフロー図である。
【発明を実施するための形態】
【0023】
詳細な説明
さまざまな図面における同様の参照番号および名称は、同様の要素を示す。
【0024】
縮小演算は、人工ニューラルネットワークを含む演算のための計算集約的なワークロードなどの線形代数を利用する計算時によく使用される。たとえば、縮小演算は、ニューラルネットワークの訓練時に分散システムの異なる処理ノード全体にわたって計算される勾配値を平均するために必要な場合がある。縮小演算は、全縮小演算の場合などは分散して行うことができ、または所与の計算(行列乗算タイル合計演算など)の場合はローカルに行うことができる。
【0025】
性能および電力に関する懸念は、計算システムにおいてこれらの演算を効率的に構築して実行するための重要な要因であり得る。典型的に、縮小演算では、システム(たとえば分散システム)のメモリ階層を通してデータをプロセッサ(またはプロセッサコア)の算術論理ユニット(ALU)に引き出し、引き出したデータに対して計算/縮小を実行した後、メモリシステムを通して結果を書戻すことが必要である。しかしながら、システムにおいてこれらのさまざまなステップを実行すると、性能および電力の双方のコストが高くなる。加えて、複数のプロセッサコアから見えるメモリにおいて、コアをまたいで縮小演算を実行することは、典型的に、重複しないメモリ領域における同期化および/またはリソースの予約が必要であり、これによって、多大な性能および容量オーバーヘッド、ならびにプログラミングの複雑さが増大し得る。
【0026】
前述の文脈に基づいて、本明細書には、大規模共有スクラッチパッドメモリ内の1つ以上のメモリアドレス場所に値のベクトルを累積することによってベクトル縮小を実行するためのデータ処理技術が記載されている。ベクトル縮小および累積は、ハードウェア管理キャッシュメモリシステムに典型的に用いられるアドレッシングスキームに基づくのではなく、計算の結果を書込む(格納する)ために用いられるメモリ場所のソフトウェア管理アドレッシングに基づいて、共有スクラッチパッドメモリで実行される。共有メモリは、プロセッサコアの分散システム全体で共有されるメモリセルなどのリソースを含む。記載されている技術は、値のベクトルを処理する際に、(たとえばベクトル縮小のための)累積縮小ステップを実行するためのメモリへの累積機能を含む。たとえば、累積縮小ステップを、ニューラルネットワークの層を通して処理される入力の異なるセットに対して実行される行列乗算全体にわたって実行して、層の出力を生成することができる。
【0027】
共有スクラッチパッドメモリを含むデータ処理技術は、従前の設計と比較して改良されたハードウェア回路のアーキテクチャを用いて実行される。ハードウェア回路は、専用プロセッサ(ニューラルネットワークプロセッサ、特定用途向け集積回路(ASIC)、またはハードウェアアクセラレータなど)であり得る。ハードウェア回路は、複数のニューラルネットワーク層を含むニューラルネットワークを実行するように構成される。本文書に記載されている改良されたアーキテクチャおよびデータ処理技術は、ハードウェアアクセラレータを表す回路が、速度および帯域幅の増加を実現して計算をさらに加速させることを可能にする。
【0028】
計算は、特定のタイプの数学的演算(浮動小数点乗算、浮動小数点加算、または整数加算演算など)であり得る。また、計算は、推論を計算するためにまたはモデルを訓練するために実行される例示的なニューラルネットワークモデルの演算の中に含まれてもよい。いくつかの例において、計算は、CNNもしくはRNNの層を通して入力を処理してニューラルネットワーク推論に対応する出力を生成するために用いられるか、または、CNN
もしくはRNNのパラメータに関する勾配を計算して訓練時にニューラルネットワークのパラメータを更新するために用いられる。
【0029】
数学的演算は可換性によって制御され、アトミック縮小(たとえばアトミック浮動小数点縮小)を含み得る。アトミック縮小は、累積を必要とする値のベクトルを提供するコアの間でアクティビティを同期させる必要なしに、ベクトルが共有メモリのメモリ場所(またはそこに格納されたベクトル)に直接累積される、累積またはベクトル縮小ステップとして処理される。言い換えれば、ハードウェア回路の2つ以上のコアは、最終結果ベクトルが累積の正しい数学的結果を提供するように、任意の順序で共有メモリセルの中央アドレス場所に値を累積し得る。一例では、累積は、第1のコアによって提供される第1のベクトルの値と第2のコアによって提供される第2のベクトルの値とのペアワイズ累積に関係する。
【0030】
図1は、例示的なハードウェア回路101を含む計算システム100のブロック図である。上述のように、ハードウェア回路101は、ハードウェアアクセラレータまたは他の何らかの専用プロセッサを表し得る。場合によっては、システム100は、人工ディープニューラルネットワーク(DNN)(RNNまたはCNNなど)に関連付けられたテンソルまたはニューラルネットワーク計算を加速させるための例示的な計算システムである。たとえば、システム100は、例示的なハードウェアアクセラレータ上でCNNを実行し、ハードウェアアクセラレータにデータ値を渡して、推論を計算するための出力を生成するように構成される。いくつかの実現例において、システム100はシステムオンチップである。たとえば、システムオンチップは、ハードウェア回路101と、システム100に含まれるものとして本文書に記載されている他のコンポーネントおよびデバイスの一部(または全部)とを含み得る。
【0031】
ハードウェア回路101は、ニューラルネットワークモデルの実行および/または性能を加速させるように構成されたハードウェアアクセラレータであってもよい。たとえば、ニューラルネットワークモデルの実行は、例示的な汎用機(中央処理装置(CPU)など)上のモデルの実行と比較して加速されてもよい。同様に、ニューラルネットワークモデルの性能および実行は、本明細書に記載されている改良されたハードウェア特徴および技術を有していない別のハードウェアアクセラレータ(グラフィックス処理装置(GPU)など)上のモデルの実行と比較して加速されてもよい。
【0032】
回路101を含むシステム100は、システムメモリ102および共有メモリ104を含む。システムメモリ102は、ハードウェア回路101のプロセッサコア105-1、105-2とデータ通信をやり取りする高帯域幅メモリ(「HBM102」)または入出力(I/O)デバイスを表し得る。データ通信は、一般的に、特定のプロセッサコア105-1、105-2に位置するベクトルメモリ106、108にデータ値を書込むこと、または特定のプロセッサコアのベクトルメモリ106、108からデータを読出すことを含み得る。たとえば、HBM102は、プロセッサコア105-1とデータ通信をやり取りして、コアに入力を渡し、コアの1つ以上の計算リソースが生成した出力を受信することができる。
【0033】
データ値は、ベクトル要素またはベクトル値の配列を表し得る。たとえば、第1のベクトル配列は、ニューラルネットワーク層を通して処理すべき入力のバッチを表し得るのに対して、第2のベクトル配列は、その層の重みのセットを表し得る。関連して、第3のベクトル配列は、プロセッサコア105-1で生成された出力に対応する累積値のベクトルを表し得るのに対して、第4のベクトル配列は、プロセッサコア105-2で生成された出力を表す活性化値のベクトルを表し得る。
【0034】
HBM102は、システム100のダイナミックランダムアクセスメモリ(DRAM)資産であり得る。いくつかの実現例において、HBM102は、回路101に対して外部またはオフチップメモリであり、システム100のオンチップベクトルメモリバンク(後述)とデータ通信をやり取りするように構成される。たとえば、HBM102は、回路101を表す集積回路ダイの外部にある物理的な場所に配置され得る。したがって、HBM102は、集積回路ダイの内部に位置する計算リソースから離れているかまたはこの計算リソースに対して非ローカルであり得る。これに代えて、HBM102またはそのリソースの一部は、HBM102が回路の計算リソースに対してローカルであるかまたはこの計算リソースと同一場所に配置されるように、回路101を表す集積回路ダイの内部に配置されてもよい。
【0035】
システム100は、1つ以上のプロセッサコア105-1、105-2を含み得る。いくつかの実現例において、システム100は複数のプロセッサコア105-nを含み、nは1以上の整数である。
図1、ならびに後述する
図2および
図3の例では、システム100は2つのプロセッサコアを含むものと示されているが、本明細書に記載されているハードウェア回路101を含むシステム100は、それよりも多いまたは少ないプロセッサコアを有してもよい。一般的に、プロセッサコア105-nは、システム100(またはハードウェア回路101)の別個の自立型処理/計算ユニットである。
【0036】
各プロセッサコア105は、多層ニューラルネットワークの1つ以上の層が必要とする計算(たとえばニューラルネットワーク計算)を独立して実行するように構成される。計算は、機械学習ワークロードのデータを処理するために、またはワークロードの特定のタスクを実行するために必要であり得る。1つ以上のニューラルネットワーク層を通して入力を処理するためにプロセッサコアで実行される計算は、データ値の第1のセット(たとえば入力または活性化)とデータ値の第2のセット(たとえば重み)との乗算を含み得る。たとえば、計算は、1つ以上のサイクルにおいて入力または活性化値と重み値とを乗算することと、多数のサイクルにわたって積の累算を実行することとを含み得る。
【0037】
データ値の第1および第2のセット内の異なる値は、ハードウェア回路101のプロセッサコア内のメモリ構成体の特定のメモリ場所に格納される。いくつかの実現例において、データ値の第1のセット内の個々の値は、入力テンソルのそれぞれの要素に対応し得るのに対して、データ値の第2のセット内の個々の値は、重み(またはパラメータ)テンソルのそれぞれの要素に対応し得る。一例として、一連の層におけるニューラルネットワーク層は、入力(画像画素データの入力など)のセット、またはこの一連の層における別のニューラルネットワーク層によって生成される活性化値のセットを処理することができる。
【0038】
入力のセットまたは活性化値のセットは、1次元(1D)またはそれぞれの次元に沿って複数の要素を有する多次元テンソル(たとえば2Dまたは3D)として表すことができる。データ値を格納するメモリ場所の各々は1次元または多次元テンソルの対応する要素にマッピングされ得て、テンソル要素は回路の制御論理を用いてトラバースまたはアクセスされ得る。たとえば、制御論理は、要素にマッピングされるメモリアドレス値を決定または計算して、この要素の対応するデータ値をロードまたは格納することができる。
【0039】
ハードウェア回路101は、異なるメモリ構成体を含む専用のメモリ階層を有する。これらのメモリ構成体の各々は、他の構成体と比較してさまざまな帯域幅およびレイテンシ特性を有し、ハードウェア回路101内の物理的配置もさまざまであり得る。例示的なメモリ構成体は、共有メモリ104と、ベクトルメモリ106、108と、ベクトルレジスタ110、112とを含む。一般的に、メモリ構成体は、ニューラルネットワーク層で処理すべきデータ値(入力、活性化に関連するベクトル値、またはゲイン値など)と、ニュ
ーラルネットワーク層を通して入力または活性化を処理したことに応じてこの層によって生成された出力活性化とを格納するように動作可能である。出力活性化の生成および格納、ならびにこれらの動作を実行するために用いられるさまざまなメモリ構成体については、
図2および
図3を参照して以下でより詳細に説明する。
【0040】
図2は、ハードウェア回路のさまざまなコンポーネントの間のデータ通信を容易にするために共有メモリ104のリソースまたはセクションがハードウェア回路101でどのように配置されるかの例を示すブロック
図200である。上述のように、共有メモリ104は、システム100のハードウェアアーキテクチャおよびデータ処理技術を改良するための基礎を提供する。共有メモリ104は、いくつかの他のニューラルネットワークプロセッサチップのオンチップメモリと比較して、さらに大きなオンチップSRAMである。いくつかの実現例において、共有メモリ104は、HBM102と、対応するプロセッサコア105-1、105-2のそれぞれのベクトルメモリ106、108との間に(たとえば論理的または物理的に)あると説明することができる。たとえば、共有メモリ104を利用してHBM102とベクトルメモリ106、108との間でデータを移動させる動作は、このデータが共有メモリ104の共有リソースをトラバースすることを含むであろう。
【0041】
共有メモリ104は、チップまたは回路101の上の共有中央空間を表し得る。たとえば、共有メモリ104は共有グローバルメモリ空間として機能するように構成され、この共有グローバルメモリ空間は、システム100に存在し得るおよび/またはハードウェア回路101に含まれ得る複数のプロセッサコアのうちの1つ以上のプロセッサコア105-1、105-2の間で共有されるメモリバンクおよびレジスタに対応するメモリリソースを含む。以下でより詳細に説明するように、共有メモリ104は、(たとえば例示的なベクトルと同様の)ソフトウェア制御スクラッチパッドとして機能するように構成される。いくつかの実現例において、共有メモリ104のリソースの一部(または全部)は、ハードウェア管理キャッシュではなくソフトウェア制御スクラッチパッド(ステージングリソース)として機能するように構成される。
【0042】
システム100は、共有メモリ104によって与えられるデータ転送機能を利用するために、少なくとも2つのプログラミングインターフェイスをユーザに公開するように構成される。第1のインターフェイスはプログラマブルDMAデータ転送機能および動作を公開するのに対して、第2の異なるインターフェイスはプログラマブルロード/格納データ転送機能および動作を公開する。これらのインターフェイス機能の各々は、以下でより詳細に説明する共有メモリ104の論理属性を表し得る。
【0043】
上述のように、システム100のメモリ構成体はさまざまな帯域幅およびレイテンシ特性を有する。たとえば、共有メモリ104は、HBM102のDRAMアクセスよりも高い帯域幅および低いレイテンシを有し得るが、ベクトルメモリ106、108へのアクセスよりも低い帯域幅および高いレイテンシを有し得る。いくつかの例において、共有メモリ104は、HBM102のDRAM資産よりも低いデータ容量を有するが、プロセッサコアのそれぞれのベクトルメモリよりも高いデータ容量を有する。一般的に、これらのさまざまな帯域幅およびレイテンシ特性は、標準的なメモリ階層トレードオフを表す。
【0044】
また、システム100のメモリ構成体、特に共有メモリ104も、ハードウェア回路101内の物理的配置がさまざまであり得る。共有メモリ104は、プロセッサコア105-1、105-2の特定の計算リソースの配置に関して物理的および論理的に配置され得るメモリバンクおよびレジスタなどのリソースを含む。この文脈において、共有メモリ104は一般的に、その物理的構造およびその論理的構造を参照して特徴付けることができる。共有メモリ104の物理的構造を最初に説明し、次にその論理的構造を記載する。
【0045】
その物理的構造に関して、共有メモリ104のリソースは、ハードウェア回路101に対応する専用またはニューラルネットプロセッサチップ上に物理的に分散されてもよい。たとえば、共有メモリ104を形成するリソースの異なるサブセット、部分、またはセクションは、異なるタイプのデータ転送動作および処理技術をシステム100で実行できるように、回路101のさまざまな場所に物理的に分散されてもよい。いくつかの実現例において、共有メモリ104のリソースの1つのセクションは、回路101のプロセッサコアの内部に存在することができるのに対して、リソースの別のセクションは、回路101のプロセッサコアの外部に存在することができる。
図2の例では、共有メモリ104のセクションは、HBM102のメモリ場所と共有メモリ104のメモリ場所との間で大きなデータブロックを移動させるDMA動作を可能にするように、プロセッサコア105-1、105-2の各々の外部にある。
【0046】
再びHBM102を簡単に参照して、このタイプのシステムメモリは、それぞれのプロセッサコアのベクトルメモリに高帯域幅データを提供するためにおよび/またはこのベクトルメモリと高帯域幅データをやり取りするために、システム100によって用いられる外部メモリ構造であり得る。いくつかの実現例において、HBM102は、回路101のプロセッサコア内のベクトルメモリのメモリアドレス場所からデータを取得するための、またはこのメモリアドレス場所にデータを提供するための、さまざまなダイレクトメモリアクセス(DMA)動作のために構成される。より具体的には、HBM102がベクトルメモリ106、108とデータをやり取りすることを含むDMA動作は、例示的な制御スキームおよび共有メモリ104のメモリリソースによって可能になる。
【0047】
図2、および
図3(後述)の例では、共有メモリ104は共有メモリ制御ユニット201(「制御ユニット201」)を含む。制御ユニット201は、メモリアクセス動作(HBM102、共有メモリ104、ベクトルメモリ106、108、およびベクトルレジスタ110、112の各々を含む)を制御するための制御信号114を生成するように構成される。
【0048】
制御ユニット201は、システム100の異なるメモリ(たとえば、HBM102、共有メモリ104、ベクトルメモリ106、108、およびベクトルレジスタ110、112)に分散される制御スキームを実行する。いくつかの実現例において、この制御スキームは、制御ユニット201と各メモリのそれぞれの制御ユニットとの間の通信に基づいて、異なるメモリに分散される。たとえば、制御スキームは、これらの異なるメモリのそれぞれの制御ユニットによってローカルに処理される、制御ユニット201によって提供される制御信号に基づいて、メモリに分散させることができる。データパスの共有を用いて、HBM102とプロセッサコア105-1、105-2のそれぞれのベクトルメモリとの間でデータを移動させることができる。これが行われると、システム100は、所与のメモリまたはデータパスについての任意の(およびすべての)必要な制御ユニットを起動させて、適切なタッチポイントで行われる必要があるデータハンドオフを管理する。
【0049】
制御ユニット201は、ソフトウェア命令を実行し、共有メモリ104のメモリリソースの第1の部分をDMAメモリユニットとして機能させる制御信号を生成するように構成される。リソースの第1の部分は、プロセッサコア105-1を基準とする共有コアデータパス204と、プロセッサコア105-2を基準とする共有コアデータパス224とによって表すことができる。この代表的なDMAメモリユニットは、制御ユニット201によって生成される制御信号に基づいて、HBM102と第1のプロセッサコア105-1および第2のプロセッサコア105-2の各々との間でデータを移動させるように動作可能である。
【0050】
たとえば、制御信号は、a)データパス202、共有コアデータパス204、またはデータパス206を用いて、共有メモリ104のメモリ場所とベクトルメモリ106との間で、かつ、b)データパス222、共有コアデータパス224、またはデータパス226を用いて、共有メモリ104のメモリ場所とベクトルメモリ108との間で、データ(たとえばベクトル)のブロックを移動させるDMA動作を実行するように生成され得る。いくつかの実現例において、共有メモリ104はあるいは共有CMEM104と呼ばれることがある。
【0051】
本文書において、CMEMは、一般的に、データバッファおよびオンチップSRAMストレージとして有用な構成を提供する物理的に連続したメモリ(CMEM)のブロックに対応する。以下でより詳細に説明するように、システム100では、CMEMリソースのブロックは、ハードウェア回路101において物理的に分散され、ハードウェアアクセラレータまたは他のタイプの専用プロセッサとして構成され得るプロセッサコアのコンポーネントの間で共有されるように配置される。共有コアデータパス204および224の各々は、システム内のこれらの点を横切るベクトルデータの移動のために共有データパス上で起こり得る静的コンテンションを示し得る例示的なノードである。
【0052】
図2の例に示されるように、
図1に示されるハードウェア回路101およびシステム100は、複数のロード・格納データパス202、206と、複数のCMEMロードデータパス208、214、228、234と、複数のCMEM格納データパス215、235とを含むように構成される。また、ハードウェア回路101およびシステム100は、複数の共有ステージングブロック210、230(後述)を含む。
図2の例では、データパス202、222の各々は、DMA動作を実行したことに応じてデータ(たとえばベクトルもしくはスカラー値)をルーティングするためのデータパスとして、CMEMロード/格納動作を実行したことに応じてデータをルーティングするためのデータパスとして、またはその双方として、構成され得る。共有メモリ104によってサポートされるDMA動作およびデータパス202、206、222、および226を用いて、特定のメモリオフセットおよびストライドパラメータを参照して異なるメモリ構造の間でデータを移動させることができる。
【0053】
たとえば、システム100は、共有メモリ104を用いてDMA動作を実行するように構成され、このDMA動作は、1メガバイトのデータを1組のメモリ場所から別の1組のメモリ場所にオフセット0x04で移動させるまたはコピーすることを含む。共有メモリ104およびシステム100は、DMA動作を実行する際にさまざまなストライド機能をサポートするように動作可能である。たとえば、1メガバイトのデータを移動させるためのDMA動作は、ベースメモリ場所のアドレスベースまたはアドレス値に対して200キロバイトごとにアドレス間隔を挿入するストライド動作を含み得る。
【0054】
いくつかの実現例において、ストライド動作を用いて、所望の読出シーケンスに基づいてアドレス間隔を挿入し、この所望の読出シーケンスは、1メガバイトのデータを宛先場所に移動させた後にこのデータを読出すために後で実行される。たとえば、1メガバイトのデータブロックは、ニューラルネットワークの異なる層において、または特定のニューラルネットワーク層のフィルタもしくは重みの異なるセット全体にわたって、データがどのように読出されてまたは取出されて処理されるかに対応するストライド動作に基づいて格納されてもよい。
【0055】
また、共有メモリ104の制御ユニット201は、さまざまなロード・格納動作を実行させるように構成される。たとえば、制御ユニット201は、a)(コア105-1でのロード動作の場合は)データパス202、共有コアデータパス204、またはデータパス208を用いて共有メモリ104のメモリ場所と共有ステージングブロック210のメモ
リ場所との間で、かつ、b)(コア105-2でのロード動作の場合は)データパス222、共有コアデータパス224、またはデータパス228を用いて共有メモリ104のメモリ場所と共有ステージングブロック230のメモリ場所との間で、さまざまな量のデータ(たとえばベクトルまたはベクトル値)を移動させるロード・格納動作を実行するための制御信号を生成する。
【0056】
同様に、制御信号は、a)(コア105-1での格納動作の場合は)データパス202、共有コアデータパス204、またはデータパス215を用いて共有メモリ104のメモリ場所とベクトルレジスタ110との間で、かつ、b)(コア105-2での格納動作の場合は)データパス222、共有コアデータパス224、またはデータパス235を用いて共有メモリ104のメモリ場所とベクトルレジスタ112との間で、さまざまな量のデータ(たとえばベクトルまたはベクトル値)を移動させるロード・格納動作を実行するために生成され得る。
【0057】
次に共有メモリ104の論理的構造を参照して、上述のように、システム100は、共有メモリ104によって与えられるデータ転送機能を利用するために、少なくとも2つのプログラミングインターフェイスをユーザに公開するように構成される。少なくとも1つのインターフェイスはプログラマブルDMA機能を公開し、別のインターフェイスはプログラマブルCMEMロード/格納機能を公開し、各々が共有メモリ104の論理属性を表し得る。ロード/格納目的のために、共有メモリ104は、ベクトルメモリ106、108に対する並列メモリとして論理的に公開される。このように、各ロード・格納データパスは、メモリシステムを通して(それぞれのプロセッサコア105-1、105-2のベクトルレジスタ、または回路101の複数のコアを通してなど)データブロックまたは特定のデータを移動させるための追加(または並列)データパスを提供するように動作可能である。たとえば、ロード・格納動作は、DMA動作と同時に共有メモリ104のメモリリソースに対して実行されてもよい。
【0058】
より具体的には、DMA動作を実行して、DMAデータパス206を用いて共有メモリ104のメモリ場所とベクトルメモリ106との間で値のベクトルを移動させ、DMA動作と同時にロード・格納動作を実行して、共有メモリ104のメモリ場所と共有ステージングブロック210との間で値の異なるベクトルを移動させてもよい。同様の同時動作が、プロセッサコア105-1のリソースに対応するプロセッサコア105-2のリソースを用いてプロセッサコア105-2(または他のコア)で行われてもよい。
【0059】
共有メモリ104のCMEMリソースを用いて実行されるロード/格納動作は、DMA動作と比較して、共有メモリ104の高性能機能、または共有メモリ104を用いる高性能方法を表し得る。いくつかの実現例において、制御ユニット201は、ソフトウェア命令を実行し、共有メモリ104のメモリリソースの第2の部分を、ロード/格納動作を実行するために用いられるソフトウェア制御ステージングリソースとして機能させる制御信号を生成するように構成される。
【0060】
リソースの第2の部分は、プロセッサコア105-1を基準とする共有ステージングブロック210と、プロセッサコア105-2を基準とする共有ステージングブロック230とによって表すことができる。したがって、共有ステージングブロック210、230の各々は、共有メモリ104のメモリリソースのサブセットから形成されるソフトウェア制御ステージングリソース(またはスクラッチパッド)を表し得る。いくつかの例において、システム100のソフトウェア制御ステージングリソースは、HBM102から第1のプロセッサコア105-1または第2のプロセッサコア105-2のそれぞれのベクトルレジスタ110または112へのベクトルデータ値の流れを管理するように構成される。
【0061】
共有メモリ104およびそのリソースは、たとえばメモリ構成体(HBM102またはベクトルメモリ106、108など)の間でデータを移動させるためのDMAメモリとしてだけではなく、各プロセッサコア105-1、105-2上のそれぞれのベクトルレジスタ110、112内にデータを直接移動させるためのロード/格納メモリとしても一意に構成可能であるという性質を有する。共有メモリ104のこれらの構成可能な局面によって、そのリソースおよびアドレッシングを、コア上で実行されるソフトウェアによって細かい粒度でスケジューリングすることができる。たとえば、共有メモリ104はソフトウェア管理型(ハードウェア管理型ではない)SRAMリソースとすることができ、このSRAMリソースにおいて、プロセッサコアのコンパイラは、そのメモリ(共有メモリ104のメモリアドレス場所に存在する場合もあればそうでない場合もあるタイプのデータを含む)のアドレッシングを特別に管理する。
【0062】
いくつかの実現例において、共有メモリ104のソフトウェア制御ステージングリソースは、データを共有CMEM203またはHBM102に格納するようにルーティングするためのCMEM格納データパス215または235を含むプロセッサコアのロード・格納データパスのロード部分に沿った先入れ先出し(first-in-first-out:FIFO)メモリ構造(たとえば共有ステージングブロック210または230)として構成される。FIFOメモリ構造は、しきい値数のプロセッササイクルにわたってデータ値のセットを一時的に格納した後に、第1のプロセッサコア105-1または第2のプロセッサコア105-2のそれぞれのベクトルレジスタ110、112にこの値のセットをルーティングするように構成される。FIFOメモリ構造を用いて、特定のロードレイテンシを有するCMEMロード動作によって生じ得るレジスタ圧力およびスケジューリングの複雑さを緩和する。
【0063】
いくつかの実現例において、クロックサイクルのしきい値数は、50サイクル全体にわたって所与のレジスタを予約することに関連付けられるレジスタ圧力およびスケジューリングの複雑さを引き起こす可能性がある例示的な高レイテンシ(たとえば50サイクル)CMEMロード動作に基づいて決定される。レジスタ圧力に関する懸念を和らげるまたは軽減するために、共有メモリ104のリソースを用いて、CMEM結果FIFO(「CRF」)がハードウェア回路100で物理的にインスタンス化される。
図2の例では、第1のCRFはプロセッサコア105-1のステージングブロック210によって表されているが、第2のCRFはステージングブロック230によって表されている。CRFの各々は、例示的なCMEMロード動作を、i)CMEM→CRFフェーズ(CMEMアドレス情報が提供される)、およびii)CRF→レジスタフェーズ(ベクトルレジスタターゲットが提供される)、の少なくとも2つのフェーズに分割することができる。
【0064】
たとえば、共有ステージングブロック210、230の各々は、データ値(たとえばスカラー値またはベクトル値)を受信し、しきい値数のプロセッササイクルにわたってデータ値を一時的に格納するように構成される。プロセッサコア105-1では、データ値は、ステージングブロック210を共有メモリ104の他のメモリ場所に接続するロードデータパス208(および共有コアデータパス204)に沿って、共有ステージングブロック210にルーティングされる。プロセッサコア105-2では、データ値は、ステージングブロック230を共有メモリ104の他のメモリ場所に接続するロードデータパス228(および共有コアデータパス224)に沿って、共有ステージングブロック230にルーティングされる。
【0065】
共有ステージングブロック210は、しきい値数のプロセッササイクルにわたってデータ値を一時的に格納したことに応じて、プロセッサコア105-1のベクトルレジスタ110にデータ値を提供するように構成される。同様に、共有ステージングブロック230
は、しきい値数のプロセッササイクルにわたってデータ値を一時的に格納したことに応じて、プロセッサコア105-2のベクトルレジスタ112にデータ値を提供するように構成される。
【0066】
システム100は、同一のサイクルで複数のCMEMロード命令を発行するように構成される。たとえば、システム100は、データパス208(または214)および共有ステージングブロック210を用いて実行されるCMEMロード命令を発行し、同一のサイクルで、データパス212を用いて実行されるロードをベクトルメモリ106に発行することができる。いくつかの例において、ソフトウェア制御の観点から、リソース210とベクトルレジスタ110との間のデータパス214をトラバースするCmemロード動作、およびベクトルメモリ106とベクトルレジスタ110との間のデータパス212をトラバースするVmemロード動作の各々は、同一のサイクルで発行および実行することができる。いくつかの実現例において、ベクトルレジスタ110、112は、従前の設計と比較して、ベクトルレジスタ110、112が同時ロード動作を受信することを可能にする追加ポートを含むように適合される。
【0067】
たとえば、ベクトルレジスタ112は、プロセッサコア105-2で実行される同時ロード動作中にレジスタがベクトルメモリ108および共有ステージングブロック230からそれぞれのベクトルペイロードを受信することを可能にする追加ポートを含むように構成される。いくつかの例において、ベクトルレジスタ110、112の各々にロードされるペイロードの単一のデータは、単一のロード動作中にベクトルレジスタ110またはベクトルレジスタ112に移動させられ得る、最大で128個のデータ項目に基づく128個の別個のロードを含む。
【0068】
共有メモリ104のCMEMロード/格納機能は、ベクトルメモリマクロを通ってデータをルーティングする必要がないので、従前の設計と比較してより高いピーク性能を提供することができる。たとえば、(データパス215、235に沿った)ロードおよび格納は、ベクトルレジスタ110、112における利用可能な追加レジスタポートなどにより、ベクトルメモリロードおよび格納と並行して実行することができる。
【0069】
いくつかの実現例において、システム100は、ベクトルメモリ106、108を通ってデータパスをトラバースする際に存在し得る帯域幅制限の一部(または全部)をバイパスする並列インターフェイスを共有ステージングブロック210、230の各々に提供する例示的なロード・格納インターフェイスを含む。この例示的なロード・格納インターフェイスは、例示的なワークロードから追加性能を引き出すことを可能にする、より高いメモリ帯域幅を効果的に提供することができる。たとえば、システム100は、共有メモリ104のリソース(たとえばソフトウェア制御ステージングリソース)を用いてさまざまなロード/格納動作を実行するように構成され、ロード/格納動作は、データをプロセッサコアにおけるベクトルメモリの中を移動させることをバイパスするように実行され得る。
【0070】
たとえば、ハードウェア回路101のコンポーネントは、共有メモリ104と通信して、共有メモリ104のメモリバンクまたはレジスタファイルの単一のアドレス場所からデータを読出すことができる。いくつかの例において、メモリ内の単一のアドレスに格納されたデータが読出され、その単一のデータは、プロセッサコアの内部に位置するレジスタファイルまたはステージングブロックに移動させられ得る。たとえば、単一のデータは、共有CMEM104のアドレス場所から読出され、共有コアデータパス224の中を移動させられ、さらなる処理のためにプロセッサコア105-2内の共有ステージングブロック230のアドレス場所に移動させられ得る。この動作は、データをベクトルメモリ108を介してメモリシステムの中を移動させることをバイパスすることにより、コア105
-2におけるプロセッサクロックサイクルとベクトルメモリ108に接続するデータパスにおける帯域幅とを節約するように実行され得る。
【0071】
図3は、ハードウェア回路101の行列計算ユニットと通信するベクトルプロセッサの例を示すブロック
図300である。より具体的には、いくつかの実現例において、ハードウェア回路101のテンソルプロセッサコア302-1は、ベクトル処理ユニット304(「ベクトルプロセッサ304」)と、ベクトルプロセッサ304に結合される行列計算ユニット308とを含む。同様に、ハードウェア回路101の別のテンソルプロセッサコア302-2は、ベクトルプロセッサ306と、ベクトルプロセッサ306に結合される行列計算ユニット310とを含む。したがって、行列計算ユニット308、310はプロセッサコア302-1、302-2のそれぞれのリソースである。
【0072】
一般的に、ハードウェア回路101は、ニューラルネットワーク層の出力を生成するための計算を実行するように構成される。回路101に含まれる行列計算ユニット308および310の各々は、ニューラルネットワーク層の出力を生成するために用いられる累積値を生成するための計算のサブセットを実行するように構成される。いくつかの実現例において、上述のソフトウェア制御ステージングリソース(たとえばステージングブロック210、230)は、
図1に示されるHBM102から行列計算ユニット308、310の各々へのデータ(ベクトルオペランドなど)の流れを管理するように構成される。場合によっては、オペランドはHBM102によって提供される入力および重みである。オペランドは、ベクトルプロセッサ304または306の算術論理ユニット(ALU)を用いて実行されるデータ演算に基づくベクトル配列として構造化されてもよい。
【0073】
図3の例では、制御ユニット201は、共有メモリ104、ベクトルメモリ106、108、およびベクトルレジスタ110、112のメモリ場所から複数の入力のバッチおよび重みのセットを取出す(または読出す)動作を管理するための制御信号を生成する。取出された入力および重みをニューラルネットワーク層を通して処理して、行列計算ユニット308、310で実行される計算に基づいて累積値を生成することができる。累積値をベクトルプロセッサ304、306で処理して、ニューラルネットワーク層の出力に対応する活性化値を生成することができる。
【0074】
制御ユニット201によって生成された制御信号を用いて、ベクトルプロセッサ304、306によって生成された出力または出力活性化の複数のセットを、1つ以上の他のニューラルネットワーク層で処理するためにHBM102またはハードウェア回路101の他のメモリ場所に格納する(または書込む)。より具体的には、システム100は、大規模共有スクラッチパッドメモリ(共有メモリ104など)内の1つ以上のメモリアドレス場所に値のベクトルを累積することを含むベクトル縮小を実行するためのデータ処理技術を実行するように構成される。上述のように、ベクトル縮小および累積は、共有メモリ104のメモリセル内の場所のソフトウェア管理アドレッシングに基づいて、共有スクラッチパッドメモリ104で実行することができる。共有メモリ104のメモリセル内のアドレス場所を用いて、システム100の異なるコンポーネントで行われる計算の結果を書込む(格納する)ことができる。
【0075】
システム100は、共有メモリ104に結合される(または結合され得る)演算器/累算器ユニット320(「演算器320」)を含む。演算器320は、1つ以上の算術演算に基づいて値を累積するように構成される。算術演算は、ソフトウェアで、ファームウェアで、ハードウェアで、または各々の組み合わせで、演算器320においてプログラム化または符号化することができる。演算器320は、共有メモリ104のメモリセルの近くに結合されて、共有メモリ104の共有メモリセルにルーティング中のベクトル値に対して累積演算を実行する、計算論理の密集部分を表し得る。
【0076】
いくつかの実現例において、演算器320は、異なるタイプの数値フォーマットを有する値に対して異なるタイプの数学的演算を実行するように各々が構成された異なるタイプの加算器(たとえば正規化加算器)および乗算器を実行するためのハードウェア回路を含む計算ユニットである。たとえば、演算器320は、数学的演算(浮動小数点乗算、浮動小数点加算、整数加算演算、および最小-最大演算など)を実行するように構成される。いくつかの他の実現例において、演算器320は、共有メモリ104のハードウェア特徴としてシステム100に含まれる。また、演算器320の1つ以上の算術演算または関数も、ソフトウェアおよびハードウェアで実現されてもよい。
【0077】
演算器320は、特定の算術演算を選択するための、または特定の算術演算を実行するように構成された演算器320における回路を選択するための論理325を含み得る。いくつかの実現例において、演算器320は、値のベクトル内の値の1つ以上の数値フォーマット(たとえば2の補数整数および浮動小数点)に基づいて、共有メモリ104および/またはハードウェア回路101でインスタンス化される。たとえば、数値フォーマットは、ベクトルの数または数値を表すために用いられるデータフォーマットに対応する。いくつかの実現例において、演算器320は、正規化ユニットのための回路、プーリングユニットのための回路、またはその双方のための回路を含む。
【0078】
上述のように、記載されている技術は、値のベクトルを処理する際に(たとえばベクトル縮小のための)累積縮小ステップを実行するためのメモリへの累積機能を含む。
図3の例では、プロセッサコア302-1、302-2の各々は、それぞれの累積フラグ330、335を生成して、共有メモリ104の制御ユニット201に、値の例示的なベクトルに対してメモリへの累積機能を実行させることができる。値のベクトルは、たとえばデータパス206またはデータパス226を使用してベクトルを共有メモリ104に移動させるDMA動作を用いて、共有メモリ104に移動させることができる。
【0079】
図4は、例示的な累積パイプライン400(「パイプライン400」)を示すブロック図である。パイプライン400は、共有メモリ104の共有メモリセル445に値のベクトルを累積する例示的な動作のための例示的なデータ処理ステップを示す。
【0080】
個々の入力および重み値などのベクトルオペランドは、プロセッサコアの例示的な行列ユニットの乗算セルを用いて乗算されてからコアのベクトルメモリに格納されるテンソル値として表され得る(402)。いくつかの実現例において、ベクトルオペランドの入力は、入力行列または入力テンソルのパーティションに対応する。たとえば、入力テンソルは2つのセクションに分割されてもよく、各セクションの異なるそれぞれの次元からの入力値が、重み値と乗算されて出力値を生成するように特定のプロセッサコアに送信されてもよい。入力テンソルについては、重みテンソルおよび出力テンソルとともに、
図5を参照して以下でより詳細に説明する。
【0081】
最終結果ベクトル450は、入力行列/テンソルの入力の各々を用いてニューラルネットワークの層について計算される出力を表す出力値の最終セットに基づき得る。そのため、入力テンソルのデータ/入力値が異なるプロセッサコアで処理されるように分割され得る場合でも、正しい正確な最終結果ベクトル450を生成することは、実際には、それぞれのコアによって生成される出力値の少なくとも2つの異なるセットの正しい正確な累積に依存する。たとえば、正しい最終結果ベクトル450を生成するためには、それぞれのコアによって生成される出力値の異なるセットを合計または累積する必要がある。
【0082】
図4の例では、それぞれのプロセッサコアはコア_0(たとえばプロセッサコア302-1)およびコア_1(たとえばプロセッサコア302-2)として示されている。各プ
ロセッサコアのそれぞれの行列ユニット(たとえば行列308または310)によって実行される行列乗算に応じて、複数の出力値が生成されてもよい。いくつかの実現例において、この出力値は、行列乗算を実行するプロセッサコアのベクトルメモリに格納された後に、累積演算のために共有メモリ104に送られる。最終結果ベクトル450は、双方のプロセッサコアが、これらのプロセッサコアに割り当てられた計算のそれぞれの半分を集約することに基づいて、得ることができる。いくつかの実現例において、最終結果ベクトルを得るための集約は「事前累積演算」に対応する。
【0083】
ベクトル値を累積する従前のアプローチでは、1つのコアがその結果を別のコアに移動させることが必要であった。これらのアプローチでは、結果値の異なるセットをシステムの異なるコアの間で移動させるために、追加のプロセッササイクル、メモリリソース、計算帯域幅、および特定のソフトウェア制御が必要であった。本明細書の累積縮小技術は、これらの集約が、共有メモリ104でネイティブに実行可能な累積機能に基づいて共有メモリシステムで行われることを可能にする。
【0084】
プロセッサコアの各々は、それぞれの累積フラグ330、335を生成して、共有メモリ104の制御ユニット201に、値の例示的なベクトルに対してメモリへの累積機能を実行させることができる(404)。各プロセッサコア105で生成された値のベクトルは、上述のようにDMA動作を用いて共有メモリ104に移動させることができる。共有スクラッチパッドメモリ104の共有メモリセルまたはアドレス場所に値のベクトルを累積するための技術は、システム100のプログラマブルDMAデータ転送機能を介して実行することができる。たとえば、共有メモリ104のメモリセル内にデータを移動させるように動作可能な任意のDMA動作は、本文書に記載されている累積技術を用いることができる。このように、
図2および
図3の例におけるコア0およびコア1の各々は、双方が、共有メモリ104の特定の共有メモリセルの同一のアドレス場所にベクトル値を累積することができる。一例では、累積は、コア0によって提供される第1のベクトルの値とコア1によって提供される第2のベクトルの対応する値とのペアワイズ累積に関係する。
【0085】
いくつかの実現例において、システム100は、共有メモリのDMAモードを用いるのではなく、共有メモリ104のロード/格納使用モードにおいて大規模なベクトル「格納累積」を提供するように構成される。たとえば、複数のプロセッサコアの間の共有ロード/格納メモリ層を用いて、プロセッサコアの間の一部(または全部)の同期の必要性を切離す「格納累積」機能を実行することができる。いくつかの実現例において、格納累積機能を実行するために用いられる複数のプロセッサコアの間の共有ロード/格納メモリ層は、少なくとも
図2を参照して上述したデータパス212、232を含む。
【0086】
共有メモリ104および制御ユニット201は、演算器320を用いて、値のベクトルのそれぞれに対して累積演算を実行する(406)。たとえば、制御ユニット201は、ニューラルネットワークの層を通して処理される入力の異なるセットに対して実行される行列乗算全体にわたって累積縮小ステップを実行して、層の出力を生成する。いくつかの実現例において、値のベクトルは、上述の行列乗算の結果として生成される累積値のベクトルのそれぞれであり得る。
【0087】
制御ユニット201は、特定のベクトル要素における累積を有効または無効にするように1つ以上のベクトル要素をマスクし、異なるベクトルの累積を管理するための制御を実行し、未処理の累積演算を追跡するように構成される(408)。
【0088】
マスク要素に関して、システム100は、16B(16ビット)幅のベクトルユニット(たとえばベクトルプロセッサ)を各々が含むマシン(計算サーバまたは関連のハードウェア回路など)を含み得る。ベクトルユニットは、16ビット幅のデータ要素に対して動
作するように構成され得るが、ハードウェア回路(またはサーバ)のリソースによって生成される値のベクトルはわずか9B幅のベクトルであってもよい。いくつかの実現例において、システム100は、1つ以上の9要素幅のベクトルに対して動作し、これらのベクトルの各々は、各々が16ビットである9個のデータ値を含む。この例では、制御ユニット201は、共有メモリ104の共有メモリ場所に累積すべき値のベクトルのデータ構造を識別することができる。制御ユニット201は、このデータ構造に基づいて、共有場所に累積すべき値が、ベクトルユニットの16B幅のベクトル構成に対して9B幅のベクトルであると判断することができる。
【0089】
制御ユニット201は、累積または縮小を行う際に、演算器320にベクトル内のたとえば最初の9フィールドのみに算術演算を適用させるマスク関数430を実行することができる。たとえば、プロセッサコア302-1から共有メモリ104への、共有メモリセル445内にベクトルを累積する要求が、プロセッサコア302-1のベクトル処理ユニット304の構成に基づいて16B幅のベクトルとして提示されてもよい。制御ユニット201は、累積中の値が、16B幅のベクトルの後半によって表されているか、または16B幅のベクトルの最初の9フィールドで表される9B幅のベクトルによって表されているかを判断するように構成される。したがって、システム100は、ベクトル内のどの特定の要素が共有メモリセル445内に累積されるかを識別および選択するように、または他の方法で制御するように動作可能である。
【0090】
累積制御に関して、制御ユニット201は、読出・修正・書込制御435(「制御435」)を実行して、共有メモリシステムにおける値の異なるベクトルの累積を制御および管理するように構成される。制御435は、第1のコアでデータを読出すこと、読出した値に対して、第1のコアから離れている計算ユニットで計算を実行すること、およびその後に第1のコアへの格納/書戻しを行うことが必要な、非効率な代替アプローチに対する性能およびエネルギーの向上を提供する。
【0091】
未処理の動作の追跡に関して、制御ユニット201は動作トラッカー440を実行して、値の異なるベクトルを共有メモリシステムに累積するための未処理の要求および現在の(または待機中の)動作を追跡するように構成される。たとえば、制御ユニット201は動作トラッカー440を用いて、共有メモリのメモリ場所(共有メモリセル445など)に値のベクトルを書込むことを要求する各書込み動作を追跡する。いくつかの実現例において、制御ユニット201は、プロセッサコアからの書込み要求に付随する累積フラグ330、335に基づいて動作を追跡する。累積フラグ330、335は、値のベクトルが、共有メモリ104の特定のメモリ場所で初期値として書込まれるべきであること、または既存の値とともに累積されるべきであることを示す。
【0092】
制御ユニット201は、演算器320に制御信号を送信して、特定のメモリアドレス場所に格納されている現在の値とその共有メモリ場所に書込み中の値のベクトルとの間の累積演算を演算器320に実行させる。いくつかの実現例において、値のベクトルを共有メモリセル445に書込むプロセッサコアからの要求は、処理するのに少なくとも2クロックサイクルが必要である。この書込み要求の処理には少なくとも2クロックサイクルが必要であり得るので、制御ユニット201が共有メモリ場所で値を読出そうとしているときに別のベクトルが同一の共有メモリ場所に書込まれると、読出/書込ハザードが発生し得る。この場合、値の読出を実行する前に書込み動作が完全に処理されなかったので、読出中の値は最新の値ではない。
【0093】
制御ユニット201は、動作トラッカー440を用いて、最後のいくつかのクロックサイクルにおいてどの要求が共有メモリ104に送信されたかを判断し、特定のメモリ場所に格納されている値が古いか新しいかを判断する。制御ユニット201は、最後の書込み
要求のタイムスタンプに基づいて、または最後の書込み要求を処理するのに必要な時間(たとえば2クロックサイクル以上)に基づいて、値が古いか新しいかを判断することができる。たとえば、タイムスタンプは、最後の要求が共有メモリ104で開始または処理されてから3クロックサイクル以上が経過したことを示すことができる。値が新しいと判断された場合は、制御ユニット201は値を読出す。値が古いと判断された場合は、制御ユニット201は、値が読出のためにまたは累積のために再び新しいことを示すのに必要な数のクロックサイクルが経過するまで、値の読出を停止する。
【0094】
システム100は、共有メモリ場所445に格納されている以前の累積を失うことなく、値(たとえばベクトル)を受信してそれを共有メモリ場所の既存の値に累積するように構成される(410)。たとえば、システム100は、メモリ場所(共有メモリセル445など)に以前に格納されたベクトル累積を上書き可能な競合状態を緩和するための外部ソフトウェアロックを必要とせずに累積演算を実行するように構成される。システム100は、ローカルな事前累積演算をそれぞれのプロセッサコアで実行することを必要とせずに、かつ、プロセッサコアの間の事前同期を必要とせずに、累積演算を実行する。たとえば、ローカルな事前累積演算を実行して、所与のプロセッサコアでローカルに計算される部分和のそれぞれのセットを累積してもよい。
【0095】
共有メモリ104は、本技術のベクトル縮小特徴のアトミック局面を表すこの機能をネイティブにサポートするように構成される。たとえば、システム100の複数のコア(たとえば10個のコア)はすべて、値の異なるベクトルを生成していてもよく、各コアは、共有メモリ場所にそれぞれのベクトルを累積する要求を提出することができる。いくつかの実現例において、この要求は、累積フラグ330、335および対応するコアID(たとえばコア0、コア1、コアNなど)と、メモリ場所に累積すべき値とを含む。いくつかの実現例において、大規模な行列乗算ジョブは、システム100の少なくとも2つのプロセッサコアの間で分割されてもよく、この累積/ベクトル縮小技術を用いて、行列乗算から生成される部分和またはドット積の累算を簡素化する。
【0096】
いくつかの実現例において、値のベクトルを共有メモリセルに累積するためのこれらの技術は、ニューラルネットワークモデルの訓練時に用いられる。たとえば、これらの技術を用いて、プロセッサコアの分散システム全体にわたって訓練ステップの一部として計算される勾配を減少させる勾配累積のための全縮小演算を実行することができる。特に、開示されている累積縮小技術に基づいて、ニューラルネットワークモデルを訓練するためのこの勾配累積は、メモリシステムまたは共有メモリ104の機能としてシステム100でネイティブに実行することができる。
【0097】
図5は、入力テンソル504と、重みテンソル506の変形と、出力テンソル508とを含むテンソルまたは多次元行列500の例を示す。
図5では、テンソル500の各々は、ニューラルネットワークの所与の層で実行される計算のためのデータ値に対応する要素を含む。この計算は、1つ以上のクロックサイクルで入力/活性化テンソル504とパラメータ/重みテンソル506とを乗算して出力または出力値を生成することを含み得る。出力のセット内の各出力値は、出力テンソル508のそれぞれの要素に対応する。活性化テンソル504と重みテンソル506とを乗算することは、テンソル504の要素からの活性化とテンソル506の要素からの重みとを乗算して部分和(複数可)を生成することを含む。
【0098】
いくつかの実現例において、システム100のプロセッサコアは、i)ある多次元テンソルにおける離散要素、ii)ある多次元テンソルの同一のまたは異なる次元に沿った複数の離散要素を含む値のベクトル、またはiii)各々の組み合わせ、に対応するベクトルに対して動作する。ある多次元テンソルにおける離散要素または複数の離散要素の各々
は、テンソルの次元に応じて、X、Y座標(2D)を用いてまたはX、Y、Z座標(3D)を用いて表すことができる。
【0099】
システム100は、バッチ入力を対応する重み値と乗算することにより生成された積に対応する複数の部分和を計算することができる。上述のように、システム100は、多数のクロックサイクルにわたって積(たとえば部分和)の累算を実行することができる。たとえば、積の累算は、本文書に記載されている技術に基づいて共有メモリ104において実行することができる。いくつかの実現例において、入力・重み乗算は、各重み要素を入力ボリュームの離散入力(入力テンソル504の行またはスライスなど)の離散入力と乗算した積和として書くことができる。この行またはスライスは、所与の次元(入力テンソル504の第1の次元510、または入力テンソル504の第2の異なる次元515など)を表し得る。
【0100】
いくつかの実現例において、例示的な1組の計算を用いて畳み込みニューラルネットワーク層の出力を計算することができる。CNN層についての計算は、3D入力テンソル504と少なくとも1つの3Dフィルタ(重みテンソル506)との間の2D空間畳み込みを実行することを含み得る。たとえば、1つの3Dフィルタ506を3D入力テンソル504に対して畳み込むと、2D空間平面520または525が生成され得る。計算は、入力ボリュームの特定の次元についてドット積の和を計算することを含み得る。
【0101】
たとえば、空間平面520は、次元510に沿った入力から計算される積和の出力値を含み得るのに対して、空間平面525は、次元515に沿った入力から計算される積和の出力値を含み得る。空間平面520および525の各々において出力値の積和を生成するための計算は、本文書に記載されている累積縮小ステップを用いて共有メモリ104において(たとえば共有メモリセル445で)実行することができる。
【0102】
図6は、ハードウェア回路の共有スクラッチパッドメモリを用いてベクトル縮小を実行するための例示的なプロセス600を示すフロー図であり、ハードウェア回路は、この共有メモリと通信するプロセッサコアを有する。いくつかの実現例において、プロセス600は、
図1の共有メモリを用いてニューラルネットワーク計算を加速させるために用いられる技術の一部である。
【0103】
プロセス600は、上記のシステム100を用いて実現または実行することができる。プロセス600の説明は、システム100の上記の計算リソースを参照することができる。プロセス600のステップまたはアクションは、本文書に記載されているデバイスおよびリソースの1つ以上のプロセッサによって実行可能なプログラムされたファームウェアまたはソフトウェア命令によって可能にされ得る。いくつかの実現例において、プロセス600のステップは、ニューラルネットワークを実行するように構成されたハードウェア回路を用いてニューラルネットワーク層の出力を生成するための計算を実行する方法に対応する。
【0104】
ここでプロセス600を参照して、システム100において値のベクトルを生成する(602)。たとえば、システム100の1つ以上のハードウェア回路に含まれるプロセッサコアごとに、プロセッサコアで実行される計算に基づいて、値のベクトルのそれぞれを生成する。
【0105】
システム100の共有メモリは、値のベクトルのそれぞれを受信する(604)。たとえば、共有メモリ104は、共有メモリ104のダイレクトメモリアクセス(DMA)データパスを用いて、プロセッサコアのそれぞれのリソースから値のベクトルを受信する。いくつかの実現例において、ベクトルまたは値のベクトルが、単一のプロセッサコア(ま
たは複数のプロセッサコアの各々)によって生成された後、値のベクトルを用いて計算を実行するシステム100の共有メモリに提供される。たとえば、共有メモリは、第1のプロセッサコアからベクトルを取得し、取得したベクトルと1つ以上の他のベクトルとを用いて縮小演算を実行することができる。1つ以上の他のベクトルは、第1のプロセッサコア以外のプロセッサコアから受信または取得されてもよい。
【0106】
いくつかの他の実現例において、システム100は、累積演算とともに直接格納動作を実行するように構成される。たとえば、システム100は、共有メモリ104の共有メモリ場所に値の1つ以上のベクトルを直接格納するために用いられる累積フラグ330、335を生成することができる。ベクトルは、単一のプロセッサコアからであってもよく、または複数の異なるプロセッサコアからであってもよい。たとえば、プロセッサコア105-1または302-2は、累積フラグを表す制御信号を生成し、その制御信号を共有メモリ104の制御ユニット201に渡すことができる。システム100は、値のベクトルをベクトルメモリ106、108に格納してから、値のベクトルをベクトルメモリから共有メモリ104に移動させるDMA動作を実行するように構成され得る。
【0107】
システム100は、値のベクトルのそれぞれに対して累積演算を実行する(606)。より具体的には、共有メモリ104は、値のベクトルのそれぞれが共有メモリ場所に書込まれると累積演算を実行する。たとえば、システム100は、共有メモリ104に、共有メモリ104に結合された演算器320を用いて値のベクトルのそれぞれに対して累積演算を実行させる。システム100は、同一のベクトルの異なる要素(または値)、および異なるベクトルの要素に対応する値を累積するように動作可能である。演算器320は、演算器ユニットで符号化された算術演算に基づいて値を累積するように構成される。いくつかの実現例において、算術演算は、可換性によって制御される数学的演算である。算術演算はアトミック縮小(たとえばアトミック浮動小数点縮小)を含み得る。
【0108】
たとえば、アトミック縮小は、値のベクトルが共有メモリのメモリ場所(共有セルなど)に直接累積される累積またはベクトル縮小ステップとして処理される。一例では、システム100は、累積演算の一部として、複数の異なるコアから生成された複数のベクトルを累積する。別の例では、システム100は、共有メモリ104に(メモリの共有セルなどに)すでに格納されている値(たとえばベクトル)を、コアによって生成された値と累積する。別の例では、システム100は、複数の異なるコアから生成された複数のベクトルを、共有メモリ104にすでに格納されている1つ以上の値と累積する。コアで生成されたベクトルと共有メモリにすでに格納されている値とを含む前述の例は、縮小演算にも適用可能であり、演算器320を用いて実行され得る他のタイプの算術演算にも適用可能である。
【0109】
いくつかの他の実現例において、プロセッサコア302-1、302-2の各々は、累積が必要なベクトルを提供し、値は、プロセッサコア302-1、302-2の間でアクティビティを同期させることなくメモリ場所に直接累積される。同様に、値は、プロセッサコア302-1、302-2のいずれかが、これらのプロセッサコアのいずれかで実行された計算から生じ得る積(たとえば部分和)を事前に累積するステップを実行しなくても、メモリ場所に直接累積することができる。言い換えれば、システム100の2つ以上のコアは、部分和を含む値のベクトルを、メモリ104の共有メモリセルのアドレス場所(たとえば中央アドレス場所)に任意の順序で累積することができる。システム100は、いくつかの実現例において、コアでローカルに行う必要がある事前累積演算がないように、かつ、いくつかの他の実現例において、部分和の一部または特定のタイプの部分和が所与のコアで累積され得るように、構成可能である。
【0110】
システム100は、累積演算に基づいて結果ベクトル(たとえば最終結果ベクトル)を
生成する(608)。たとえば、システム100は、値の1つ以上のベクトルと共有メモリに格納されているベクトルとを用いて累積演算を実行したことに基づいて、最終結果ベクトルを生成する。いくつかの実現例において、システム100は結果ベクトルを生成し、この結果ベクトルの個々の要素は、第1のベクトルの各要素と共有メモリに格納されているベクトルの対応する各要素とに累積演算をペアワイズで適用したことによって生じる。結果ベクトルは、最終結果を生成するために累積されるそれぞれのベクトルがどのような順序で共有メモリセルに到着した場合でも、累積の正しい数学的結果を提供する。
【0111】
いくつかの実現例において、この所望の結果を達成するために、制御ユニット201および少なくとも演算器320の制御論理325を用いて実行される制御435(たとえば読出・修正・書込制御ループ)に基づいて、1つ以上のDMA動作が検出され、優先順位を付けられ、順序付けられてもよい。たとえば、制御ユニット201は、ベクトルを提供する対応するコアを含む入来ベクトル/ベクトル値のセットを検出し、演算器320を用いて、制御435によって指定される所与の優先順位スキームに基づいて個々の累積演算をシリアライズすることができる。優先順位スキームを用いて、書込みトラフィックを必要に応じて停止または再順序付けすることにより、古いベクトル値に対してベクトル値が累積されないようにすることができる。
【0112】
結果ベクトルは、ニューラルネットワーク層の出力のセットを表す最終結果ベクトルであり得る。たとえば、ニューラルネットワーク層は畳み込みニューラルネットワーク層であり得て、出力は、入力テンソル504の特定の入力ボリューム全体にわたって各カーネル(たとえばテンソル506のパラメータ/重み)を畳み込んだことに応じて生成される活性化値のセットであり得る。
【0113】
システム100は、値のベクトルのそれぞれに対して累積演算を実行した結果として、累積値のベクトルを生成することができる。いくつかの実現例において、値のベクトルのそれぞれは、ドット積に対応する部分和である。たとえば、畳み込みニューラルネットワーク層を再び参照して、上述の入力ボリュームの入力は、i)入力テンソル504の所与の次元(たとえば次元510)に沿った各入力値と、ii)畳み込み層のパラメータのセットとを用いて、ドット積演算を実行することによって処理される。重みテンソル506の少なくとも1つのカーネルと入力ボリュームの所与の次元に沿った入力の一部とを畳み込んだことに応じて、ドット積または部分和の対応するセットを共有メモリ104のメモリ場所に累積して累積値のセットを生成することができる。
【0114】
システム100は、累積値のベクトル内の各値に活性化関数を適用することができる。たとえば、ニューラルネットワークの層は、ニューラルネットワークにおいて非線形性を提供する非線形関数を表す活性化関数(ReLU、シグモイド、またはtanhなど)を有する場合もある(または有さない場合もある)。システム100は、累積値のベクトル内の各値に活性化関数を適用したことに応じて、結果ベクトルを生成する。いくつかの実現例において、ハードウェア回路101は、複数のニューラルネットワーク層を含むニューラルネットワークを実行するように構成されたハードウェアアクセラレータであり、システム100は、結果ベクトルに基づいてニューラルネットワークの層の出力を生成する。たとえば、ニューラルネットワーク層で層入力を処理することは、この層が活性化関数を適用して、ニューラルネットワーク層の出力である活性化値のセットを生成することを含み得る。第1のニューラルネットワーク層によって生成された活性化は、ニューラルネットワークの第2の層または後続層を通して処理することができる。
【0115】
本明細書に記載されている主題の実施形態および機能的動作は、デジタル電子回路において、有形的に実現されたコンピュータソフトウェアもしくはファームウェアにおいて、本明細書に開示されている構造およびその構造的均等物を含むコンピュータハードウェア
において、または、これらのうちの1つ以上を組み合わせたものにおいて、実現することができる。本明細書に記載されている主題の実施形態は、1つ以上のコンピュータプログラムとして、すなわち、データ処理装置によって実行されるまたはデータ処理装置の動作を制御するための有形の非一時的なプログラムキャリア上で符号化されたコンピュータプログラム命令の1つ以上のモジュールとして、実現することができる。
【0116】
これに代えてまたはこれに加えて、プログラム命令は、データ処理装置による実行のために適切な受信装置に送信される情報を符号化するために生成された、人為的に生成された伝搬信号(たとえばマシンによって生成された電気、光、または電磁信号)上で符号化することができる。コンピュータ記憶媒体は、機械読取可能記憶媒体、機械読取可能記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、または、これらのうちの1つ以上を組み合わせたものであってもよい。
【0117】
「計算システム」という用語は、データを処理するためのすべての種類の装置、デバイスおよびマシンを包含し、一例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む。装置は、特別目的論理回路(たとえば、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路))を含み得る。また、装置は、ハードウェアに加えて、対象のコンピュータプログラムのための実行環境を作成するコード(たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つ以上の組み合わせを構成するコード)も含み得る。
【0118】
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、もしくはコードと称されてもよく、またはそのようなものとして説明されてもよい)は、任意の形式のプログラミング言語(コンパイル型もしくはインタプリタ型言語、または宣言型もしくは手続き型言語を含む)で書くことができ、任意の形式で(スタンドアロンのプログラムとして、または、計算環境での使用に適したモジュール、コンポーネント、サブルーチンもしくは他のユニットとして、など)デプロイすることができる。
【0119】
コンピュータプログラムは、ファイルシステムにおけるファイルに対応し得るが、必ずしもそうでなくてもよい。プログラムは、他のプログラムもしくはデータを保持するファイルの一部(たとえば、マークアップ言語文書に格納された1つ以上のスクリプト)に格納されてもよく、対象のプログラムに専用の単一のファイルに格納されてもよく、または複数の連携したファイル(たとえば、1つ以上のモジュール、サブプログラム、もしくはコードの一部を格納するファイル)に格納されてもよい。コンピュータプログラムは、1つのコンピュータで実行されるようにデプロイされてもよく、または、一箇所に位置しているかもしくは複数箇所に分散されて通信ネットワークによって相互接続されている複数のコンピュータで実行されるようにデプロイされてもよい。
【0120】
本明細書に記載されているプロセスおよび論理フローは、入力データに対して動作して出力を生成することによって機能を実行するように1つ以上のコンピュータプログラムを実行する1つ以上のプログラマブルコンピュータによって実行することができる。これらのプロセスおよび論理フローも、特別目的論理回路(たとえば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPGPU(汎用グラフィックス処理装置))によって実行することができ、装置も、特別目的論理回路として実現することができる。
【0121】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用もしくは専用マイクロプロセッサまたはそれら両方、またはその他の種類の中央処理装置を含み、そ
れらに基づき得る。一般的に、中央処理装置は、読み取り専用メモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信する。コンピュータのいくつかの要素は、命令を実施または実行するための中央処理装置と、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般的に、コンピュータは、データを格納するための1つ以上のマスストレージデバイス(たとえば、磁気ディスク、光磁気ディスク、もしくは光ディスク)も含み、または、これらの1つ以上のマスストレージデバイスとの間でデータを受信したり、送信したり、送受信したりするように作動的に結合されている。しかし、コンピュータは、このようなデバイスを有していなくてもよい。さらに、コンピュータは、別のデバイス(たとえば、いくつか例を挙げると、携帯電話、パーソナルデジタルアシスタント(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲーム機、グローバルポジショニングシステム(GPS)受信機、または携帯型ストレージデバイス(たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブ))に組み込むことができる。
【0122】
コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能媒体は、すべての形態の不揮発性メモリ、媒体およびメモリデバイス(一例として、半導体メモリデバイス(たとえば、EPROM、EEPROM、およびフラッシュメモリデバイス)、磁気ディスク(たとえば、内部ハードディスクまたはリムーバブルディスク)、光磁気ディスク、ならびにCD ROMおよびDVD-ROMディスクを含む)を含む。プロセッサおよびメモリは、特別目的論理回路によって補完されることができ、または特別目的論理回路に組み入れられることができる。
【0123】
ユーザとのやり取りを提供するために、本明細書に記載されている主題の実施形態は、ユーザに対して情報を表示するためのディスプレイデバイス(たとえば、LCD(液晶ディスプレイ)モニタ)と、ユーザがコンピュータに入力を提供することができるキーボードおよびポインティングデバイス(たとえば、マウスまたはトラックボール)とを有するコンピュータ上で実現することができる。その他の種類のデバイスを用いてユーザとのやり取りが行われるようにしてもよい。たとえば、ユーザに提供されるフィードバックは、任意の形式の感覚フィードバック(たとえば、視覚フィードバック、聴覚フィードバックまたは触覚フィードバック)であり得て、ユーザからの入力は、任意の形式(音響入力、音声入力または触覚入力を含む)で受信することができる。加えて、コンピュータは、ユーザとのやり取りを、ユーザが使用するデバイスとの間で文書を送受信することによって(たとえば、ユーザのクライアントデバイス上のウェブブラウザから要求を受信したことに応答してウェブブラウザにウェブページを送信することによって)実現してもよい。
【0124】
本明細書に記載されている主題の実施形態は、たとえばデータサーバとしてバックエンドコンポーネントを含む計算システムで実現されてもよく、または、ミドルウェアコンポーネント(たとえば、アプリケーションサーバ)を含む計算システムで実現されてもよく、または、フロントエンドコンポーネント(たとえば、ユーザが本明細書に記載されている主題の実現例とやり取りすることができるグラフィカルユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータ)を含む計算システムで実現されてもよく、または、1つ以上のこのようなバックエンドコンポーネント、ミドルウェアコンポーネントもしくはフロントエンドコンポーネントの任意の組み合わせを含む計算システムで実現されてもよい。システムのこれらのコンポーネントは、デジタルデータ通信の任意の形式または媒体(たとえば、通信ネットワーク)によって相互接続されることができる。通信ネットワークの例としては、ローカルエリアネットワーク(「LAN」)およびワイドエリアネットワーク(「WAN」)(たとえば、インターネット)が挙げられる。
【0125】
計算システムはクライアントとサーバとを含み得る。クライアントとサーバは、通常は互いに離れており、通信ネットワークを通してやり取りするのが一般的である。クライア
ントとサーバとの関係は、それぞれのコンピュータ上で実行されクライアントとサーバとの関係を有するコンピュータプログラムによって発生する。
【0126】
本明細書には実装の具体的詳細事項が多く含まれているが、これらは、どの発明の範囲またはクレームし得るものの範囲の限定としても解釈されてはならないものであって、むしろ、特定の発明の特定の実施形態に固有であり得る特徴の説明として解釈されるべきものである。本明細書において、別々の実施形態という観点で記載されている特定の特徴は、1つの実施形態において組み合わせて実現することも可能である。逆に、1つの実施形態という観点から記載されている各種特徴を、複数の実施形態において別々に、または任意の適切な下位の組み合わせとして実現することも可能である。さらに、特徴は、特定の組み合わせで機能するものとして記載され最初にそういうものとしてクレームされている場合があるが、クレームされている組み合わせに含まれる1つ以上の特徴は、場合によってはこの組み合わせから省略することができ、クレームされている組み合わせは下位の組み合わせまたは下位の組み合わせの変形に関するものである場合がある。
【0127】
同様に、動作は図面において特定の順序で示されているが、これは、このような動作が、示されている特定の順序もしくは連続した順序で実行されることを要する、または、示されているすべての動作が所望の結果を得るために実行されることを要する、と理解されてはならない。特定の状況ではマルチタスキングおよび並列処理が有利な場合がある。さらに、上記実施形態における各種システムモジュールおよびコンポーネントの分離は、すべての実施形態においてこのような分離を要するものと理解されてはならない。記載されているプログラムコンポーネントおよびシステムは一般的に、1つのソフトウェアプロダクトに統合できる、または、パッケージングして複数のソフトウェアプロダクトにできることが、理解されるはずである。
【0128】
主題の特定の実施形態について説明してきた。他の実施形態は、以下の請求項の範囲内である。たとえば、請求項に記載されている動作は、異なる順序で実行されても所望の結果を達成することができる。一例として、添付の図面に示されているプロセスは、所望の結果を達成するために、示されている特定の順序または連続した順序を必ずしも必要としない。特定の実現例では、マルチタスキングおよび並列処理が有利な場合がある。
【手続補正書】
【提出日】2024-06-20
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
複数のコアと、前記複数のコアの各々と通信する共有メモリとを含むハードウェア機械学習アクセラレータのための集積回路を用いて実行される方法であって、前記方法は、
前記複数のコアの各々が、値のそれぞれのベクトルを生成することと、
前記複数のコアにわたって、前記共有メモリ内の共有メモリセルに、前記それぞれのベクトルの各々と前記共有メモリの演算器ユニットとを用いて、同期させずに複数のアトミックベクトル縮小を実行することと、
前記複数のアトミックベクトル縮小に基づいて結果ベクトルを生成することとを含む、方法。
【請求項2】
前記複数のアトミックベクトル縮小を実行することは、
前記共有メモリセルに格納された第1のベクトルを、前記複数のコアのうちの1つまたは複数のコアによって生成されたそれぞれの第2のベクトルとともに累積することを含む、請求項1に記載の方法。
【請求項3】
前記複数のコアの各々は、それぞれのベクトル処理ユニットを含み、
値のそれぞれのベクトルを生成することは、
前記ベクトル処理ユニットの各々が、値のそれぞれのベクトルを生成することを含む、請求項1または2に記載の方法。
【請求項4】
前記演算器ユニットおよび前記共有メモリの各々は、前記複数のコアの各々の中の前記それぞれのベクトル処理ユニットの外部にある、請求項3に記載の方法。
【請求項5】
ハードウェア機械学習アクセラレータのための集積回路であって、前記集積回路は、
複数のコアと、
前記複数のコアの各々と通信する共有メモリと、
動作を実行させるようにプロセッサによって実行可能な命令を格納するための非一時的な機械読取可能記憶装置とを含み、前記動作は、
前記複数のコアの各々が、値のそれぞれのベクトルを生成することと、
前記複数のコアにわたって、前記共有メモリ内の共有メモリセルに、前記それぞれのベクトルの各々と前記共有メモリの演算器ユニットとを用いて、同期させずに複数のアトミックベクトル縮小を実行することと、
前記複数のアトミックベクトル縮小に基づいて結果ベクトルを生成することとを含む、集積回路。
【請求項6】
前記複数のアトミックベクトル縮小を実行することは、
前記共有メモリセルに格納された第1のベクトルを、前記複数のコアのうちの1つまたは複数のコアによって生成されたそれぞれの第2のベクトルとともに累積することを含む、請求項5に記載の集積回路。
【請求項7】
前記複数のコアの各々は、それぞれのベクトル処理ユニットを含み、
値のそれぞれのベクトルを生成することは、
前記ベクトル処理ユニットの各々が、値のそれぞれのベクトルを生成することを含む、請求項5または6に記載の集積回路。
【請求項8】
前記演算器ユニットおよび前記共有メモリの各々は、前記複数のコアの各々の中の前記それぞれのベクトル処理ユニットの外部にある、請求項7に記載の集積回路。
【外国語明細書】