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

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

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

特許7413549並列ロードストアを有する共有スクラッチパッドメモリ
<>
  • 特許-並列ロードストアを有する共有スクラッチパッドメモリ 図1
  • 特許-並列ロードストアを有する共有スクラッチパッドメモリ 図2
  • 特許-並列ロードストアを有する共有スクラッチパッドメモリ 図3
  • 特許-並列ロードストアを有する共有スクラッチパッドメモリ 図4
  • 特許-並列ロードストアを有する共有スクラッチパッドメモリ 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-04
(45)【発行日】2024-01-15
(54)【発明の名称】並列ロードストアを有する共有スクラッチパッドメモリ
(51)【国際特許分類】
   G06N 3/06 20060101AFI20240105BHJP
   G06N 3/0464 20230101ALI20240105BHJP
   G06N 3/044 20230101ALI20240105BHJP
   G06N 3/04 20230101ALI20240105BHJP
【FI】
G06N3/06
G06N3/0464
G06N3/044
G06N3/04
【請求項の数】 24
(21)【出願番号】P 2022545416
(86)(22)【出願日】2021-01-26
(65)【公表番号】
(43)【公表日】2023-03-24
(86)【国際出願番号】 US2021015097
(87)【国際公開番号】W WO2021154732
(87)【国際公開日】2021-08-05
【審査請求日】2022-09-27
(31)【優先権主張番号】62/966,518
(32)【優先日】2020-01-27
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】15/931,970
(32)【優先日】2020-05-14
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ノリー,トーマス
(72)【発明者】
【氏名】フェルプス,アンドリュー・エバレット
(72)【発明者】
【氏名】ジョピー,ノーマン・ポール
(72)【発明者】
【氏名】ヘッドルンド,マシュー・リーバー
【審査官】武田 広太郎
(56)【参考文献】
【文献】米国特許出願公開第2018/0315158(US,A1)
【文献】米国特許出願公開第2018/0322387(US,A1)
【文献】米国特許出願公開第2018/0260220(US,A1)
【文献】特表2020-532780(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/06
G06N 3/0464
G06N 3/044
G06N 3/04
(57)【特許請求の範囲】
【請求項1】
複数のニューラルネットワーク層を含むニューラルネットワークを実装するように構成された回路であって、
前記回路は、
前記ニューラルネットワークの層の出力を生成するための計算を実行するためのデータを提供するように構成された第1のメモリと、
前記第1のメモリによって提供された前記データから得られた第1のベクトル値を記憶するように構成された第1のベクトルメモリを含む第1のプロセッサコアと、
前記第1のメモリによって提供された前記データから得られた第2のベクトル値を記憶するように構成された第2のベクトルメモリを含む第2のプロセッサコアと、
前記第1のメモリと前記第1のプロセッサコアまたは前記第2のプロセッサコアの少なくとも1つとの間に配置された共有メモリとを含み、
前記共有メモリは、
前記共有メモリと前記第1のベクトルメモリまたは前記第2のベクトルメモリとの間にデータ通信をルーティングするように構成されたDMA(ダイレクトメモリアクセス)データ経路と、
前記共有メモリと前記第1のプロセッサコアまたは前記第2のプロセッサコアの各ベクトルレジスタとの間にデータ通信をルーティングするように構成されたロードストアデータ経路とを含む、回路。
【請求項2】
前記回路は、複数のプロセッサコアを含み、
前記第1のプロセッサコアおよび前記第2のプロセッサコアは、前記複数のプロセッサコアに含まれ、
前記共有メモリは、前記回路の周囲に物理的に分散され、前記回路の前記複数のプロセッサコアの各々とデータ通信を交換するための複数のメモリリソースを含む、請求項1に記載の回路。
【請求項3】
前記共有メモリは、共有メモリ制御ユニットを含み、
前記共有メモリ制御ユニットは、前記複数のメモリリソースの第1のメモリリソース部分を、前記第1のメモリと前記第1のプロセッサコアおよび前記第2のプロセッサコアの各々との間のデータを移動するように動作可能なDMA(ダイレクトメモリアクセス)メ
モリユニットとして機能させるソフトウェア命令を実行するように構成されている、請求項2に記載の回路。
【請求項4】
前記複数のメモリリソースは、前記ロードストアデータ経路に沿ってルーティングされるデータ値を受信し、閾値数のプロセッササイクルの間に前記データ値を一時的に記憶するように構成された第2のメモリリソース部分を含む、請求項3に記載の回路。
【請求項5】
前記第2のメモリリソース部分は、前記閾値数のプロセッササイクルの間に前記データ値を一時的に記憶することに応答して、前記データ値を前記第1のプロセッサコアまたは前記第2のプロセッサコアの前記各ベクトルレジスタに提供するように構成されている、請求項4に記載の回路。
【請求項6】
前記共有メモリは、前記共有メモリの一部のメモリリソースから形成されたソフトウェア制御ステージングリソースを含み、
前記ソフトウェア制御ステージングリソースは、前記第1のメモリから前記第1のプロセッサコアまたは前記第2のプロセッサコアの前記各ベクトルレジスタへのデータ値フローを管理するために使用される、請求項1に記載の回路。
【請求項7】
前記回路は、行列計算ユニットを含み、
前記行列計算ユニットは、前記ニューラルネットワークの前記層の前記出力を生成するために使用される前記計算の一部を実行することによって累積値を生成するように構成されている、請求項6に記載の回路。
【請求項8】
前記ソフトウェア制御ステージングリソースは、前記第1のメモリから前記行列計算ユニットへのベクトル配列に対応するデータフローを管理するために使用され、
前記ベクトル配列は、前記第1のメモリによって提供された前記データから得られる、請求項7に記載の回路。
【請求項9】
前記回路は、前記第1のメモリと通信するベクトル処理ユニットを含み、
前記ベクトル処理ユニットは、前記回路によって生成された累積値からベクトルアクティブ化値を生成するように構成され、
前記ベクトルアクティブ化値は、前記ニューラルネットワークの前記層の前記出力に対応する、請求項1に記載の回路。
【請求項10】
前記ソフトウェア制御ステージングリソースは、前記ロードストアデータ経路のロードセクションに沿ったFIFO(ファーストインファーストアウト)メモリ構造であり、
前記FIFOメモリ構造は、ベクトル値を前記第1のプロセッサコアまたは前記第2のプロセッサコアの前記各ベクトルレジスタにルーティングする前に、閾値数のプロセッササイクルの間に前記ベクトル値を一時的に記憶するように構成されている、請求項6に記載の回路。
【請求項11】
前記回路は、複数のプロセッサコアを含み、
前記共有メモリは、前記複数のプロセッサコアのうちの1つ以上のプロセッサコア間で共有されるメモリバンクに対応するメモリリソースを含む共有グローバルメモリ空間として機能するように構成されている、請求項1に記載の回路。
【請求項12】
前記複数のニューラルネットワーク層の第1の層の前記出力を生成するための計算を実行するための前記データは、
前記ニューラルネットワークの前記第1の層を介して処理される入力と、
前記ニューラルネットワークの前記第1の層の各重みセットと、
前記第1の層の前記各重みセットを用いて、前記第1の層を介して、1つ以上の前記入力を処理することによって、前記第1の層の前記出力を生成するための命令とを含む、請求項1に記載の回路。
【請求項13】
複数のニューラルネットワーク層を含むニューラルネットワークを実装するように構成された回路を用いて、前記ニューラルネットワークの層の出力を生成するための計算を実行するための方法であって、
第1のメモリから、ニューラルネットワーク層の出力を生成するために使用されるデータを提供することと、
前記回路の第1のプロセッサコアの第1のベクトルメモリを用いて、ベクトル値を前記回路の第1のプロセッサコアに記憶することとを含み、前記第1のベクトルメモリは、前記第1のメモリによって提供された前記データから得られた第1のベクトル値を記憶するように構成され、
前記回路の共有メモリのDMA(ダイレクトメモリアクセス)データ経路を用いて、少なくとも前記第1のベクトル値を含むデータ通信を前記共有メモリと前記第1のベクトルメモリとの間にルーティングすることと、
前記共有メモリのロードストアデータ経路を用いて、第2のベクトル値を含むデータ通信を前記共有メモリと前記第1のプロセッサコアの各ベクトルレジスタとの間にルーティングすることと、
前記共有メモリの前記ロードストアデータ経路および前記DMAデータ経路に沿って各々並列にルーティングされた前記第1のベクトル値および前記第2のベクトル値を用いて、前記ニューラルネットワーク層の前記出力に対応する累積値を生成することとを含む、方法。
【請求項14】
前記回路の第2のプロセッサコアの第2のベクトルメモリを用いて、ベクトル値を前記第2のプロセッサコアに記憶することを含み、
前記第2のベクトルメモリは、前記第1のメモリによって提供された前記データから得られた第3のベクトル値を記憶するように構成されている、請求項13に記載の方法。
【請求項15】
前記共有メモリの前記DMAデータ経路を用いて、前記第3のベクトル値を含むデータ通信を前記共有メモリと前記第2のベクトルメモリとの間にルーティングすることと、
前記共有メモリの前記ロードストアデータ経路を用いて、第4のベクトル値を含むデータ通信を前記共有メモリと前記第2のプロセッサコアの各ベクトルレジスタとの間にルーティングすることとを含む、請求項14に記載の方法。
【請求項16】
前記回路は、複数のプロセッサコアを含み、
前記共有メモリは、前記回路の周囲に物理的に分散された複数のメモリリソースを含み、
前記方法は、前記共有メモリの前記複数のメモリリソースを用いて、前記第1のメモリと前記複数のプロセッサコアの各々との間にデータ通信を交換することを含む、請求項15に記載の方法。
【請求項17】
前記共有メモリは、共有メモリ制御ユニットを含み、
前記方法は、
前記共有メモリ制御ユニットによって実行される命令に基づいて、前記複数のメモリリソースの第1のリソース部分をDMA(ダイレクトメモリアクセス)メモリユニットとして機能させることと、
前記第1のリソース部分の代表的なDMA(ダイレクトメモリアクセス)機能を用いて、前記第1のメモリと前記第1のプロセッサコアおよび前記第2のプロセッサコアの各々との間にデータを移動することとを含む、請求項16に記載の方法。
【請求項18】
前記複数のメモリリソースの第2のリソース部分を用いて、前記ロードストアデータ経路に沿ってルーティングされた前記第2のベクトル値および前記第4のベクトル値を受信することと、
前記第2のリソース部分を用いて、閾値数のプロセッササイクルの間に前記第2のベクトル値を一時的に記憶することと、
前記第2のリソース部分を用いて、閾値数のプロセッササイクルの間に前記第4のベクトル値を一時的に記憶することとを含む、請求項17に記載の方法。
【請求項19】
前記閾値数のプロセッササイクルの間に前記第2のベクトル値を一時的に記憶することに応答して、前記第2のリソース部分を用いて、前記第2のベクトル値を前記第1のプロセッサコアの前記各ベクトルレジスタに提供することと、
前記閾値数のプロセッササイクルの間に前記第4のベクトル値を一時的に記憶することに応答して、前記第2のリソース部分を用いて、前記第4のベクトル値を前記第2のプロセッサコアの前記各ベクトルレジスタに提供することとを含む、請求項18に記載の方法。
【請求項20】
前記共有メモリは、前記共有メモリの一部のメモリリソースから形成されたソフトウェア制御ステージングリソースを含み、
前記方法は、前記ソフトウェア制御ステージングリソースを用いて、前記第1のメモリから前記第1のプロセッサコアの前記各ベクトルレジスタへのデータフローおよび前記第1のメモリから前記回路の第2のプロセッサコアの前記各ベクトルレジスタへのデータフローを管理することを含む、請求項13に記載の方法。
【請求項21】
前記回路は、行列計算ユニットを含み、
前記方法は、前記ニューラルネットワーク層の前記出力を生成するために使用される前記計算の一部を実行することに応答して、前記行列計算ユニットを用いて累積値を生成することを含む、請求項20に記載の方法。
【請求項22】
前記ソフトウェア制御ステージングリソースを用いて、前記第1のメモリから前記行列計算ユニットへのデータフローを管理することを含み、
前記データフローは、前記第1のメモリによって提供された前記データから得られたベクトル配列を含む、請求項21に記載の方法。
【請求項23】
前記回路は、前記第1のメモリと前記行列計算ユニットとの間のベクトル処理ユニットを含み、
前記方法は、前記ベクトル処理ユニットを用いて、前記行列計算ユニットによって生成された前記累積値からベクトルアクティブ化値を生成することを含み、
前記ベクトルアクティブ化値は、前記ニューラルネットワーク層の前記出力に対応する、請求項21に記載の方法。
【請求項24】
請求項13~23のいずれか1項に記載の方法を、コンピューティングデバイスのプロセッサに実行させる、プログラム。
【発明の詳細な説明】
【背景技術】
【0001】
関連出願の参照
本願は、米国仮出願第62/966518号(2020年1月27日出願)の利益を主張する米国特許出願第15/931970号(2020年5月14日出願)の利益を主張し、その内容は、参照により本明細書に組み込まれる。
【0002】
背景
本明細書は、一般的に、ニューラルネットワーク計算を実行するために使用されるハードウェア回路の回路構成に関する。
【0003】
ニューラルネットワークとは、1つ以上の層のノードを用いて、受信した入力に対する出力、例えば分類を生成するための機械学習モデルである。いくつかのニューラルネットワークは、出力層に加えて、1つ以上の隠れ層を含む。各隠れ層の出力は、ネットワーク内の1つ以上の他の層、例えば、ネットワークの他の隠れ層または出力層への入力として使用される。ネットワークのいくつかの層は、各パラメータセットの現在値に従って、受信した入力から出力を生成する。いくつかのニューラルネットワークは、画像処理を行うために構成された畳み込みニューラルネットワーク(CNN)、または音声および言語処理を行うために構成されたリカレントニューラルネットワーク(RNN)である。
【0004】
CNNのニューラルネットワーク層は、パラメータまたは重みに対応し得る関連するカーネルセットを有することができる。関連するカーネルセットを用いて、ニューラルネットワーク層を介して入力(例えば、入力バッチ)を処理することによって、ニューラルネットワーク推論を計算するための層に対応する出力を生成する。入力バッチおよびカーネルセットは、それぞれ、入力および重みのテンソルとして表すことができる。テンソルは、多次元アレイに対応することができる。ニューラルネットワークを実装するためのハードウェア回路は、アドレス値によって特定された位置を有するメモリを含む。メモリ位置は、テンソル要素に対応してもよい。テンソル要素は、回路の制御ロジックを用いてトラバースまたはアクセスされてもよい。例えば、制御ロジックは、要素に対応するデータ値をロードまたは記憶する要素のメモリアドレス値を決定または計算することができる。
【発明の概要】
【0005】
概要
本明細書は、改良されたアーキテクチャを有するハードウェア回路を記載する。この回路は、回路の複数のプロセッサコア間で共有するために割り当てられたスタティックランダムアクセスメモリ(SRAM)のリソースを含む。より具体的には、この回路は、一般的に、高帯域幅メモリ(HBM)と専用プロセッサの少なくとも2つのプロセッサコアとの間に配置され得る共有メモリを含む。この共有メモリは、プロセッサコアの特定の計算リソースに対して物理的におよびロジック的に配置されたリソース、例えばメモリバンクおよびレジスタを含む。共有メモリのリソースを物理的におよびロジック的に配置することによって、HBMとハードウェア回路の各プロセッサコアとの間、単一のプロセッサコアの別個のリソースの間、または2つの別個のプロセッサコアの各リソースの間のデータ通信の速度およびスループットを増加することができる。
【0006】
本明細書に記載された主題の一態様は、複数のニューラルネットワーク層を含むニューラルネットワークを実装するように構成された回路として具体化されてもよい。この回路は、ニューラルネットワークの層の出力を生成するための計算を実行するためのデータを提供するように構成された第1のメモリと、第1のメモリによって提供されたデータから得られた第1のベクトル値を記憶するように構成された第1のベクトルメモリを含む第1のプロセッサコアと、第1のメモリによって提供されたデータから得られた第2のベクトル値を記憶するように構成された第2のベクトルメモリを含む第2のプロセッサコアと、第1のメモリと第1のプロセッサコアまたは第2のプロセッサコアの少なくとも1つとの間に配置された共有メモリとを含む。共有メモリは、共有メモリと第1のベクトルメモリまたは第2のベクトルメモリとの間にデータ通信をルーティングするように構成されたダイレクトメモリアクセス(DMA)データ経路と、共有メモリと第1のプロセッサコアまたは第2のプロセッサコアの各ベクトルレジスタとの間にデータ通信をルーティングするように構成されたロードストアデータ経路とを含む。
【0007】
これらおよび他の実装形態の各々は、必要に応じて、以下の特徴のうちの1つ以上を含むことができる。例えば、いくつかの実装形態において、回路は、複数のプロセッサコアを含み、第1のプロセッサコアおよび第2のプロセッサコアは、複数のプロセッサコアに含まれ、共有メモリは、回路の周囲に物理的に分散され、回路の複数のプロセッサコアの各々とデータ通信を交換するための複数のメモリリソースを含む。
【0008】
いくつかの実装形態において、共有メモリは、共有メモリ制御ユニットを含み、共有メモリ制御ユニットは、複数のメモリリソースの第1の部分を、第1のメモリと第1のプロセッサコアおよび第2のプロセッサコアの各々との間のデータを移動するように動作可能なDMAメモリユニットとして機能させるソフトウェア命令を実行するように構成されている。複数のメモリリソースは、ロードストアデータ経路に沿ってルーティングされるデータ値を受信し、閾値数のプロセッササイクルの間にデータ値を一時的に記憶するように構成された第2のリソース部分を含む。
【0009】
第2のリソース部分は、閾値数のプロセッササイクルの間にデータ値を一時的に記憶することに応答して、データ値を第1のプロセッサコアまたは第2のプロセッサコアの各ベクトルレジスタに提供するように構成されてもよい。いくつかの実装形態において、共有メモリは、共有メモリの一部のメモリリソースから形成されたソフトウェア制御ステージングリソースを含み、ソフトウェア制御ステージングリソースは、第1のメモリから第1のプロセッサコアまたは第2のプロセッサコアの各ベクトルレジスタへのデータ値フローを管理するために使用される。
【0010】
いくつかの実装形態において、回路は、行列計算ユニットを含み、行列計算ユニットは、ニューラルネットワークの層の出力を生成するために使用される計算の一部を実行することによって累積値を生成するように構成されている。ソフトウェア制御ステージングリソースは、ソフトウェア制御ステージングリソースは、第1のメモリから行列計算ユニットへのベクトル配列に対応するデータフローを管理するために使用されてもよく、ベクトル配列は、第1のメモリによって提供されたデータ値から得られる。いくつかの実装形態において、回路は、第1のメモリと通信するベクトル処理ユニットを含み、ベクトル処理ユニットは、回路によって生成された累積値からベクトルアクティブ化値を生成するように構成され、ベクトルアクティブ化値は、ニューラルネットワークの層の出力に対応する。
【0011】
ソフトウェア制御ステージングリソースは、ロードストアデータ経路のロードセクションに沿った先入れ先出し(FIFO)メモリ構造であってもよく、FIFOメモリ構造は、ベクトル値を第1のプロセッサコアまたは第2のプロセッサコアの各ベクトルレジスタにルーティングする前に、閾値数のプロセッササイクルの間にベクトル値を一時的に記憶するように構成されている。いくつかの実装形態において、共有メモリは、複数のプロセッサコアのうちの1つ以上のプロセッサコア間で共有されるメモリバンクに対応するメモリリソースを含む共有グローバルメモリ空間として機能するように構成されている。
【0012】
いくつかの実装形態において、第1の層の出力を生成するための計算を実行するためのデータは、ニューラルネットワークの第1の層を介して処理される入力と、ニューラルネットワークの第1の層の各重みセットと、第1の層の各重みセットを用いて、第1の層を介して、1つ以上の入力を処理することによって、第1の層の出力を生成するための命令とを含む。
【0013】
本明細書に記載された主題の一態様は、複数のニューラルネットワーク層を含むニューラルネットワークを実装するように構成された回路を用いて、ニューラルネットワークの層の出力を生成するための計算を実行するための方法として具体化されてもよい。この方法は、ニューラルネットワーク層の出力を生成するために使用されるデータを第1のメモリから提供することと、回路の第1のプロセッサコアの第1のベクトルメモリを用いて、ベクトル値を第1のプロセッサコアに記憶することとを含み、第1のベクトルメモリは、第1のメモリによって提供されたデータから得られた第1のベクトル値を記憶するように構成されている。
【0014】
この方法は、回路の共有メモリのダイレクトメモリアクセス(DMA)データ経路を用いて、少なくとも第1のベクトル値を含むデータ通信を共有メモリと第1のベクトルメモリとの間にルーティングすることと、共有メモリのロードストアデータ経路を用いて、第2のベクトル値を含むデータ通信を共有メモリと第1のプロセッサコアの各ベクトルレジスタとの間にルーティングすることと、共有メモリのロードストアデータ経路およびDMAデータ経路に沿って各々並列にルーティングされた第1のベクトル値および第2のベクトル値を用いて、ニューラルネットワーク層の出力に対応する累積値を生成することとを含む。
【0015】
この態様および他の態様の他の実装形態は、対応するシステム、装置、および方法の動作を実行するように構成され、コンピュータ記憶装置上にエンコードされたコンピュータプログラムを含む。1つ以上のコンピュータのシステムは、システム上にインストールされ、動作時にシステムに動作を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせによって構成されてもよい。1つ以上のコンピュータプログラムは、データ処理装置によって実行されると、データ処理装置に動作を実行させる命令を含むように構成されてもよい。
【0016】
本明細書に記載された主題は、以下の利点のうちの1つ以上を実現するように特定の実施形態において実装されてもよい。
【0017】
共有メモリは、従来方法に比べて、ハードウェア回路におけるニューラルネットワーク計算の加速および同時実行を改善するために、ハードウェア回路の2つ以上のプロセッサコアの間で効率的に共有され得るメモリ構造を提供する。この共有メモリは、直接メモリアクセスおよびロード/ストア動作用のデータを共有メモリからプロセッサコアに移動するための配線の一部(または全て)が共有されるように、特定のリソースが実質的にプロセッサコアの外部に位置するように構成されてもよい。このことは、様々なデータを転送するための専用配線を必要とする他の方法に比べて、帯域幅の利用率および効率を改善することができる。
【0018】
この共有メモリは、ロードストアデータ経路を含み、ロードストアデータ経路は、ベクトル配列をオンチップベクトルレジスタのメモリ位置にロード/書き込むために、ベクトルメモリマクロを介してデータをルーティングする必要がないため、より高いピーク性能を提供する。ベクトルレジスタに一体化され得る追加の利用可能なレジスタポートによって、改善された共有メモリのアーキテクチャおよびリソースを用いて、ベクトルレジスタに対するロードおよびストアをベクトルメモリのロードおよびストアと並列に実行することができる。
【0019】
回路アーキテクチャおよび技法を用いて、ニューラルネットワークプロセッサの共有SRAMリソースを単一の回路パッケージに一体化し、効率的に構造化することができる。共有SRAMリソースの一体化および効率的な構造化は、追加のデータ値を取得するためのオフチップ通信のペナルティを被ることなく、推論を計算することを可能にする。
【0020】
本明細書に記載された主題の1つ以上の実装形態の詳細は、添付の図面および以下の説明において説明される。主題の他の可能な特徴、態様および利点は、説明、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0021】
図1】例示的な共有メモリを含むハードウェア回路を備えるコンピューティングシステムを示すブロック図である。
図2】ハードウェア回路の例示的な共有メモリと通信する例示的なプロセッサコアを示すブロック図である。
図3】ハードウェア回路の例示的な行列計算ユニットと通信する例示的なベクトルプロセッサを示すブロック図である。
図4】共有メモリをハードウェア回路の1つ以上のベクトルプロセッサに結合するための例示的な有線接続を示す図である。
図5図1の共有メモリを用いてニューラルネットワーク計算を加速するための例示的なプロセスを示すフロー図である。
【発明を実施するための形態】
【0022】
詳細な説明
様々な図面において、同様の参照番号および名称は、同様の要素を示す。
【0023】
本明細書は、従来の設計に比べて改善されたハードウェア回路のアーキテクチャを用いて実装されるハードウェア回路およびデータ処理技術を説明する。ハードウェア回路は、専用プロセッサ、例えば、ニューラルネットワークプロセッサ、特定用途向け集積回路(ASIC)、またはハードウェアアクセラレータであってもよい。ハードウェア回路は、複数のニューラルネットワーク層を含むニューラルネットワークを実装するように構成されている。本明細書に記載の改善されたアーキテクチャおよびデータ処理技術によって、ハードウェアアクセラレータを表す回路は、CNN、RNN、または他の種類のニューラルネットワーク層を介して入力を処理することによってニューラルネットワーク推論に対応する出力を生成するための計算を含む、例示的なニューラルネットワークモデルの計算を加速する時に、速度および帯域幅を増加することができる。
【0024】
回路は、一般的に、第1のメモリと、第1のプロセッサコアと、第2のプロセッサコアと、共有メモリとを含む。第1のメモリは、ニューラルネットワーク層の出力を生成するための計算を実行するためのデータを提供する。第1のプロセッサコアおよび第2のプロセッサコアの各々は、第1のメモリによって提供されたデータから得られた入力および重みを用いて、ニューラルネットワーク計算を実行するように構成されたテンソルプロセッサコアであってもよい。例えば、第1のプロセッサコアおよび第2のプロセッサコアは、第1のメモリによって提供された入力テンソルおよび重み/パラメータテンソルから各々得られた入力ベクトルおよび重みベクトルを用いて、ニューラルネットワーク計算を実行することができる。
【0025】
第1のコアおよび第2のコアの各々は、ベクトルメモリに渡されたベクトル値を記憶するように構成されたベクトルメモリを含む。ベクトル値は、第1のメモリによって提供されたデータから得られ、共有メモリを介してベクトルメモリに渡される。共有メモリは、一般的に、第1のメモリと少なくとも1つのプロセッサコアとの間に配置される。共有メモリは、i)データを共有メモリと第1のコアおよび第2のコアの各々のベクトルメモリとの間にルーティングするように構成されたダイレクトメモリアクセス(DMA)データ経路と、ii)データを共有メモリと第1のコアおよび第2のコアの各々のベクトルレジスタとの間にルーティングするように構成されたロードストアデータ経路とを含む。DMAデータ経路とロードストアデータ経路との組み合わせは、ニューラルネットワーク計算を実行するための回路の計算アレイにベクトル値を提供するために同時に使用され得る並列データ経路を提供することによって、従来の設計に比べて帯域幅を増加することができる。
【0026】
図1は、例示的なハードウェア回路101を含むコンピューティングシステム100を示すブロック図である。上述したように、ハードウェア回路101は、ハードウェアアクセラレータまたは他の専用プロセッサを表すことができる。場合によっては、システム100は、RNNまたはCNNなどの人工深層ニューラルネットワーク(DNN)に関連するテンソル計算またはニューラルネットワーク計算を加速するための例示的なコンピューティングシステムである。例えば、システム100は、例示的なハードウェアアクセラレータ上でCNNを実装し、データ値をハードウェアアクセラレータに渡すことによって、推論を計算するための出力を生成するように構成されている。
【0027】
いくつかの実装形態において、システム100は、システムオンチップである。例えば、このシステムオンチップは、ハードウェア回路101と、システム100に含まれるものとして本明細書に記載された他のコンポーネントおよび装置の一部(または全て)とを含んでもよい。
【0028】
ハードウェア回路101は、ニューラルネットワークモデルの実行および/または性能を加速するように構成されたハードウェアアクセラレータであってもよい。例えば、ニューラルネットワークモデルの実行は、中央処理装置(CPU)などの例示的な汎用マシン上のモデルの実行に比べて加速されてもよい。同様に、ニューラルネットワークモデルの性能および実行は、本明細書に記載の改善されたハードウェア特徴および技法を有しないグラフィックス処理ユニット(GPU)などの別のハードウェアアクセラレータ上に実装されたモデルに比べて加速されてもよい。
【0029】
回路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つ以上のコンピューティングリソースによって生成された出力を受信することができる。いくつかの実装形態において、システムメモリ102は、HBM、DRAM、DIMMS、または非DRAM技術を含む、異なる種類のメモリシステムおよびメモリ技術を表す。
【0030】
データ値は、ベクトル要素またはベクトル値の配列を表すことができる。例えば、第1のベクトル配列は、ニューラルネットワーク層を介して処理される入力バッチを表すことができ、第2のベクトル配列は、当該ニューラルネットワーク層の重みセットを表すことができる。同様に、第3のベクトル配列は、プロセッサコア105-1によって生成された出力に対応するベクトル累積値を表すことができ、第4のベクトル配列は、プロセッサコア105-2によって生成された出力を表すベクトルアクティブ化値を表すことができる。
【0031】
HBM102は、システム100のダイナミックランダムアクセスメモリ(DRAM)アセットであってもよい。いくつかの実装形態において、HBM102は、回路101に対して外部メモリまたはオフチップメモリであり、システム100の(以下で説明される)オンチップベクトルメモリバンクとデータ通信を交換するように構成されている。例えば、HBM102は、回路101を表す集積回路ダイの外部の物理位置に配置されてもよい。したがって、HBM102は、集積回路ダイ内に配置されたコンピューティングリソースに対して遠隔または非局所的であってもよい。代替的には、HBM102またはそのリソースの一部は、回路101を表す集積回路ダイ内に配置されてもよい。これによって、HBM102は、回路のコンピューティングリソースと同一場所に、または共同に設置される。
【0032】
システム100は、1つ以上のプロセッサコア105-1、105-2を含むことができる。いくつかの実装形態において、システム100は、複数のプロセッサコア105-n(nは、1以上の整数である)を含む。図1の例および以下で説明する図2および3の例において、システム100は、2つのプロセッサコアを含むものとして示されている。しかしながら、本明細書に記載のハードウェア回路101を含むシステム100は、より多くのまたはより少ないプロセッサコアを含んでもよい。いくつかの例において、共有メモリ104、そのメモリリソースおよび異なるデータ経路に関連する技術は、単一のプロセッサコアの構成要素およびリソースによって共有されてもよい。一般的に、プロセッサコア105-nは、システム100(またはハードウェア回路101)の個別な自己完結型処理/計算ユニットである。
【0033】
各プロセッサコア105は、多層ニューラルネットワークの1つ以上の層に必要とされる計算(例えば、ニューラルネットワーク計算)を独立して実行するように構成されている。これらの計算は、機械学習ワークロード用のデータを処理するためにまたはワークロードの特定のタスクを実行するために必要とされてもよい。1つ以上のニューラルネットワーク層を介して入力を処理するためにプロセッサコア上で実行された計算は、第1セットのデータ値(例えば、入力またはアクティブ化値)と第2セットのデータ値(例えば、重み)との乗算を含んでもよい。例えば、計算は、1つ以上のサイクルにて入力またはアクティブ化値に重み値を乗算すること、および多くのサイクルにわたって積の累積を実行することを含むことができる。各コア105は、一般的に、これらの計算を実行するために使用される行列計算ユニット、および必要に応じてベクトル処理ユニットを含むことができる。これらのユニットは、図3を参照して以下でより詳細に説明される。
【0034】
第1セットのデータ値および第2セットのデータ値中の異なる値は、ハードウェア回路101のプロセッサコア内のメモリ構造の特定のメモリ位置に記憶される。いくつかの実装形態において、第1セットのデータ値の各々の値は、入力テンソルの各々の要素に対応してもよく、第2セットのデータ値の各々の値は、重み(またはパラメータ)テンソルの各々の要素に対応してもよい。一例として、一連の層のうちのニューラルネットワーク層は、入力セット、例えば、一連の層のうちの別のニューラルネットワーク層によって生成された画像ピクセルデータまたはアクティブ化値の入力を処理することができる。
【0035】
入力セットまたはアクティブ化値セットは、1次元(1D)テンソルまたは各々の次元に沿った複数の要素を有する多次元(例えば、2Dまたは3D)テンソルとして表すことができる。データ値を記憶する各メモリ位置は、1次元テンソルまたは多次元テンソルの対応する要素にマッピングされてもよく、テンソル要素は、回路の制御ロジックを用いてトラバースまたはアクセスされてもよい。例えば、制御ロジックは、要素に対応するデータ値をロードまたは記憶するために、当該要素にマッピングされたメモリアドレス値を決定または計算することができる。
【0036】
ハードウェア回路101は、異なるメモリ構造を含む特殊なメモリ階層を有する。これらのメモリ構造の各々は、他の構造に対して、様々な帯域幅および遅延特性を有してもよく、ハードウェア回路101内の物理配置も変動してもよい。例示的なメモリ構造は、共有メモリ104、ベクトルメモリ106、108、およびベクトルレジスタ110、112を含む。一般的に、メモリ構造は、ニューラルネットワーク層において処理される入力値、アクティブ化値または利得値に関連するベクトル値などのデータ値、および層を介して入力値またはアクティブ化値を処理することに応答してニューラルネットワーク層によって生成された出力アクティブ化値を記憶するように動作可能である。出力アクティブ化値の生成および記憶、並びにこれらの動作を実行するために使用される様々なメモリ構造は、図2および図3を参照して以下でより詳細に説明される。
【0037】
図2は、ハードウェア回路の様々なコンポーネント間のデータ通信を容易にするために、ハードウェア回路101に配置された共有メモリ104の例示的なリソースまたはセクションを示すブロック図200である。上述したように、共有メモリ104は、システム100の改善されたハードウェアアーキテクチャおよびデータ処理技術の基礎を提供する。共有メモリ104は、例示的なニューラルネットワークプロセッサチップのオンチップSRAMリソースを表すことができる。いくつかの実装形態において、共有メモリ104は、(例えば、一般的にまたは実質的に)HBM102とプロセッサコア105-1のベクトルメモリ106およびプロセッサコア105-2のベクトルメモリ108との間に配置される。
【0038】
共有メモリ104は、チップまたは回路101上の共有中央スペースを表すことができる。例えば、共有メモリ104は、システム100に存在し得るおよび/またはハードウェア回路101に含まれ得る複数のプロセッサコアの中で、1つ以上のプロセッサコア105-1、105-2の間で共有されるメモリバンクおよびレジスタに対応するメモリリソースを含む共有グローバルメモリスペースとして機能するように構成されている。以下でより詳細に説明するように、共有メモリ104は、ソフトウェア制御スクラッチパッドメモリ(scratchpad memory)として機能するように構成されている。いくつかの実装形態において、共有メモリ104のリソースの一部(または全て)は、ハードウェア管理キャッシュではなく、ソフトウェア制御スクラッチパッド(ステージングリソース)として機能するように構成されている。他の実装形態において、共有メモリ104の一部のメモリリソースは、ハードウェア管理キャッシュとして機能または動作するように構成されると共に、共有メモリ104のいくつかのメモリリソース(例えば、残りのリソース)は、ソフトウェア制御スクラッチパッドとして機能するように構成されている。例えば、システム100は、ハードウェア管理キャッシュとして動作することできる一部のリソースを割り当てると共に、残りの共有メモリ104をソフトウェアスクラッチパッドとして使用することができる。
【0039】
システム100は、共有メモリ104によって提供されたデータ転送機能を活用するために、少なくとも2つのプログラミングインターフェイスをユーザに公開するように構成されている。第1のインターフェイスは、プログラマブルDMAデータ転送機能および動作を公開し、異なる第2のインターフェイスは、プログラマブルロード/ストアデータ転送機能および動作を公開する。これらのインターフェイス機能の各々は、以下でより詳細に説明される共有メモリ104のロジック属性を表す。
【0040】
上述したように、システム100のメモリ構造は、様々な帯域幅および遅延特性を有する。例えば、共有メモリ104は、HBM102のDRAMへのアクセスよりも高い帯域幅および低い遅延を有してもよく、ベクトルメモリ106、108へのアクセスよりも低い帯域幅および高い遅延を有してもよい。いくつかの例において、共有メモリ104は、HBM102のDRAMアセットよりも低いデータ容量を有するが、プロセッサコアの各ベクトルメモリよりも高いデータ容量を有する。一般的に、これらの様々な帯域幅および遅延特性は、標準的なメモリ階層トレードオフを表す。
【0041】
また、システム100のメモリ構造、特に共有メモリ104は、ハードウェア回路101内の物理配置も変動してもよい。共有メモリ104は、プロセッサコア105-1、105-2の特定の計算リソースの配置に対して物理的におよびロジック的に配置され得るリソース、例えばメモリバンクおよびレジスタを含む。この文脈において、共有メモリ104は、一般的に、その物理構造およびロジック構造に準拠して特徴付けられてもよい。まず、共有メモリ104の物理構造を説明し、そのロジック構造を以下で説明する。
【0042】
共有メモリ104のリソースは、その物理構造に関して、ハードウェア回路101上に物理的に分散されてもよい。例えば、システム100において異なる種類のデータ転送動作および処理技術を実行できるように、共有メモリ104を形成するリソースの異なるサブセット、異なる部分、または異なるセクションは、回路101の様々な位置に物理的に分散されてもよい。いくつかの実装形態において、共有メモリ104の1つのリソースセクションは、回路101のプロセッサコアの内部に配置されてもよく、別のリソースセクションは、回路101のプロセッサコアの外部に配置されてもよい。図2の例において、HBM102のメモリ位置と共有メモリ104のメモリ位置との間に大きなデータブロックを移動するDMA動作を可能にするように、共有メモリ104のセクションは、各プロセッサコア105-1、105-2の外部に配置される。
【0043】
再びHBM102を簡単に参照して、この種類のシステムメモリは、システム100によって使用され、高帯域幅データを各プロセッサコアのベクトルメモリに提供するためおよび/または各プロセッサコアのベクトルメモリと交換するための外部メモリ構造であってもよい。いくつかの実装形態において、HBM102は、様々なダイレクトメモリアクセス(DMA)動作のために、回路101のプロセッサコア内のベクトルメモリのメモリアドレス位置からデータを取得するまたはデータを当該メモリアドレス位置に提供するように構成されている。より具体的には、HBM102がベクトルメモリ106、108とデータを交換することを含むDMA動作は、共有メモリ104の例示的な制御方式およびメモリリソースによって可能になる。
【0044】
図2および(後述する)図3の例において、共有メモリ104は、共有メモリ制御ユニット201(制御ユニット201)を含む。制御ユニット201は、HBM102、共有メモリ104、ベクトルメモリ106、108、およびベクトルレジスタ110、112の各々に関与するメモリアクセス動作を制御するための制御信号114を生成するように構成されている。
【0045】
制御ユニット201は、システム100の異なるメモリ(例えば、HBM102、共有メモリ104、ベクトルメモリ106、108、およびベクトルレジスタ110、112)にわたって分散される制御方式を実施する。いくつかの実装形態において、この制御方式は、制御ユニット201と各メモリの制御ユニットとの間の通信に基づいて、異なるメモリにわたって分散される。例えば、制御方式は、これらの異なるメモリの各々の制御ユニットによってローカルに処理され、制御ユニット201によって提供された制御信号に基づいて、これらの異なるメモリにわたって分散されてもよい。
【0046】
データ経路を共有することによって、HBM102とプロセッサコア105-1、105-2の各ベクトルメモリとの間にデータを移動することができる。これによって、システム100は、所定のメモリまたはデータ経路に必要な任意の(および全ての)制御ユニットを起動させて、適切なタッチポイントで発生する必要があるデータハンドオフを管理する。制御ユニット201は、ソフトウェア命令を実行し、共有メモリ104のメモリリソースの第1の部分をDMAメモリユニットとして機能させるための制御信号を生成するように構成されている。
【0047】
第1のリソース部分は、プロセッサコア105-1に準拠する共有コアデータ経路204によって表されてもよく、プロセッサコア105-2に準拠する共有コアデータ経路224によって表されてもよい。この代表的なDMAメモリユニットは、制御ユニット201によって生成された制御信号に基づいて、HBM102と第1のプロセッサコア105-1および第2のプロセッサコア105-2との間にデータを移動することができる。
【0048】
例えば、制御信号は、a)データ経路202、共有コアデータ経路204またはデータ経路206を使用する共有メモリ104およびベクトルメモリ106のメモリ位置と、b)データ経路222、共有コアデータ経路224またはデータ経路226を使用する共有メモリ104およびベクトルメモリ108のメモリ位置との間に、データブロック(例えば、ベクトル)を移動するDMA動作を実行するように生成されてもよい。いくつかの実装形態において、共有メモリ104は、代替的に、共有CMEM104と呼ばれてもよい。
【0049】
本明細書で使用されるように、CMEMは、一般的に、有用な構成、例えばデータバッファおよびオンチップSRAM記憶を提供する物理的に連続的なメモリ(CMEM)ブロックに対応する。以下でより詳細に説明するように、システム100において、CMEMリソースブロックは、ハードウェア回路101において物理的に分散され、ハードウェアアクセラレータまたは他の種類の専用プロセッサとして構成され得るプロセッサコアのコンポーネント間で共有されるように構成されている。共有コアデータ経路204および224の各々は、例示的ノードである。これらのノードは、システムのこれらのノードにわたってベクトルデータを移動するための共有データ経路上で発生し得る静的競合を示すことができる。
【0050】
図2の例で示すように、ハードウェア回路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を用いて、特定のメモリオフセットおよびストライドパラメータに準拠して、異なるメモリ構造間でデータを移動することができる。
【0051】
例えば、システム100は、共有メモリ104を用いて、0x04のオフセットで1MBのデータを一セットのメモリ位置から別のセットのメモリ位置に移動することを含むDMA動作を実行するように構成されている。共有メモリ104およびシステム100は、DMA動作を実行する時に、様々なストライド機能をサポートするように動作可能である。例えば、1MBのデータを移動するためのDMA動作は、アドレスベースに対して200KB毎にアドレス間隔を挿入するストライド動作を含むことができる。
【0052】
いくつかの実装形態において、ストライド動作を用いて、データを宛先位置に移動した後、1MBのデータを読み取るために実行される所望の読み取り順序に基づいて、アドレス間隔を挿入する。例えば、1MBのデータブロックは、ニューラルネットワークの異なる層で処理されるデータを読み取るまたは取り出す方法または特定のニューラルネットワーク層の異なるセットのフィルタもしくは重みにわたって処理されるデータを読み取るまたは取り出す方法に対応するストライド動作に基づいて、記憶されてもよい。
【0053】
また、共有メモリ104の制御ユニット201は、様々なロードストア動作を実行させるように構成されている。例えば、制御ユニット201は、a)(コア105-1においてロード動作を実行するために)データ経路202、共有コアデータ経路204またはデータ経路208を使用する共有メモリ104のメモリ位置および共有ステージングブロック210のメモリ位置と、b)(コア105-2においてロード動作を実行するために)データ経路222、共有コアデータ経路224またはデータ経路228を使用する共有メモリ104のメモリ位置および共有ステージングブロック230のメモリ位置との間に、様々な量のデータ(例えば、ベクトルまたはベクトル値)を移動するためのロードストア動作を実行するための制御信号を生成する。
【0054】
同様に、制御信号は、a)(コア105-1において記憶動作を実行するために)データ経路202、共有コアデータ経路204、またはデータ経路215を使用する共有メモリ104およびベクトルレジスタ110のメモリ位置と、b)(コア105-2において記憶動作を実行するために)データ経路222、共有コアデータ経路224、またはデータ経路235を使用する共有メモリ104およびベクトルレジスタ112のメモリ位置との間に、様々な量のデータ(例えば、ベクトルまたはベクトル値)を移動するためのロードストア動作を実行するように生成されてもよい。
【0055】
共有メモリ104のロジック構造を参照して、上述したように、システム100は、共有メモリ104によって提供されるデータ転送機能を活用するために、少なくとも2つのプログラミングインターフェイスをユーザに公開するように構成されている。少なくとも1つのインターフェイスは、共有メモリ104のロジック属性を表すことができるプログラマブルDMA機能を公開し、別のインターフェイスは、共有メモリ104のロジック属性を表すことができるプログラマブルCMEMロード/ストア機能を公開する。ロード/ストアのために、共有メモリ104は、ベクトルメモリ106、108に対して並列メモリとしてロジック的に公開される。このようにして、各ロード-ストアデータ経路は、メモリシステムを介して、例えば各プロセッサコア105-1、105-2または回路101の複数のコアのベクトルレジスタを介して、データブロックまたは特定のデータ断片を移動するための追加の(または並列の)データ経路を提供するように動作可能である。例えば、ロード-ストア動作は、DMA動作と同時に、共有メモリ104のメモリリソースに対して実行されてもよい。
【0056】
より具体的には、DMAデータ経路206を用いて共有メモリ104のメモリ位置とベクトルメモリ106のメモリ位置との間にベクトル値を移動するためにDMA動作を実行することができ、DMA動作と同時に、共有メモリ104のメモリ位置と共有ステージングブロック210のメモリ位置との間に異なるベクトル値を移動するためのロードストア動作を実行することができる。同様に、プロセッサコア105-1のリソースに対応するプロセッサコア105-2のリソースを用いて、プロセッサコア105-2(または他のコア)において同時動作を実行することができる。
【0057】
共有メモリ104のCMEMリソースを用いて実行されるロード/ストア動作は、DMA動作と比較して、共有メモリ104の高性能機能、または共有メモリ104を使用する高性能方法を表すことができる。いくつかの実装形態において、制御ユニット201は、ソフトウェア命令を実行し、共有メモリ104の第2のメモリリソース部分を、ロード/ストア動作を実行するために使用されるソフトウェア制御ステージングリソースとして機能させる制御信号を生成するように構成されている。
【0058】
第2のリソース部分は、プロセッサコア105-1に準拠する共有ステージングブロック210によって表され、プロセッサコア105-2に準拠する共有ステージングブロック230によって表されてもよい。したがって、共有ステージングブロック210、230の各々は、共有メモリ104の一部のメモリリソースから形成されたソフトウェア制御ステージングリソース(またはスクラッチパッド)を表すことができる。いくつかの例において、システム100のソフトウェア制御ステージングリソースは、HBM102から第1のプロセッサコア105-1のベクトルレジスタ110または第2のプロセッサコア105-2のベクトルレジスタ112へのベクトルデータ値のフローを管理するように構成されている。
【0059】
共有メモリ104およびそのリソースは、例えば、HBM102またはベクトルメモリ106、108などのメモリ構造の間にデータを移動するためのDMAメモリとして一意的に構成可能であるという特性を有すると共に、プロセッサコア105-1上のベクトルレジスタ110またはプロセッサコア105-2上のベクトルレジスタ112にデータを直接に移動するためのロード/ストアメモリとしても一意的に構成可能であるという特性を有する。共有メモリ104のこれらの構成可能な特性によって、コア上で動作するソフトウェアが、細かい粒度で共有メモリ104のリソースおよびアドレス指定をスケジュールすることができる。例えば、共有メモリ104は、(ハードウェア管理ではなく)ソフトウェア管理SRAMリソースであってもよい。このソフトウェア管理SRAMリソースにおいて、プロセッサコアのコンパイラは、共有メモリ104のメモリアドレス位置に存在し得るデータの種類を含み、そのメモリのアドレス指定を具体的に管理する。
【0060】
いくつかの実装形態において、共有メモリ104のソフトウェア制御ステージングリソースは、データを共有CMEM203またはHBM102に記憶するためにルーティングするためのCMEMストアデータ経路215または235を含むプロセッサコアのロードストアデータ経路のロードセクションに沿った先入れ先出し(FIFO)メモリ構造(例えば、共有ステージングブロック210または230)として構成されている。FIFOメモリ構造は、第1のプロセッサコア105-1のベクトルレジスタ110または第2のプロセッサコア105-2のベクトルレジスタ112に閾値数のプロセッササイクルのデータ値セットをルーティングする前に、このデータ値セットを一時的に記憶するように構成されている。FIFOメモリ構造は、特定のロード遅延を有するCMEMロード動作から生じ得るレジスタ圧力およびスケジューリング複雑さを軽減するために使用される。
【0061】
いくつかの実装形態において、クロックサイクルの閾値数は、例示的な高遅延(例えば、50サイクル)CMEMロード動作に基づいて決定される。この例示的なCMEMロード動作では、50サイクル全体にわたって所定のレジスタを予約することに関連するレジスタ圧力およびスケジューリング複雑さを引き起こす可能性が高い。レジスタ圧力を弱めるまたは軽減するために、CMEM結果FIFO(CRF)は、共有メモリ104のリソースを用いて、ハードウェア回路100において物理的にインスタンス化される。図2の例において、第1のCRFは、プロセッサコア105-1のステージングブロック210によって表され、第2のCRFはステージングブロック230によって表される。各CRFは、例示的なCMEM負荷動作を、少なくとも2つの段階、すなわち、i)CMEMアドレス情報を提供するCMEM-CRF段階と、ii)ベクトルレジスタターゲットを提供するCRF-レジスタ段階とに分割することができる。
【0062】
例えば、共有ステージングブロック210、230の各々は、データ値(例えば、スカラー値またはベクトル値)を受信し、閾値数のプロセッササイクルの間にデータ値を一時的に記憶するように構成されている。プロセッサコア105-1において、データ値は、ステージングブロック210を共有メモリ104の他のメモリ位置に接続するためのロードデータ経路208(および共有コアデータ経路204)に沿って、共有ステージングブロック210にルーティングされる。プロセッサコア105-2において、データ値は、ステージングブロック230を共有メモリ104の他のメモリ位置に接続するためのロードデータ経路228(および共有コアデータ経路224)に沿って、共有ステージングブロック230にルーティングされる。
【0063】
共有ステージングブロック210は、閾値数のプロセッササイクルの間にデータ値を一時的に記憶することに応答して、データ値をプロセッサコア105-1のベクトルレジスタ110に提供するように構成されている。同様に、共有ステージングブロック230は、閾値数のプロセッササイクルの間にデータ値を一時的に記憶することに応答して、データ値をプロセッサコア105-2のベクトルレジスタ112に提供するように構成されている。
【0064】
システム100は、同じサイクルにおいて、複数のCMEMロード命令を発行するように構成されている。例えば、システム100は、データ経路208(または214)および共有ステージングブロック210を用いて実行されるCMEMロード命令を発行し、同じサイクルにおいてデータ経路212を用いて実行されるロードをベクトルメモリ106に発行することができる。いくつかの例において、ソフトウェア制御の観点から、リソース210とベクトルレジスタ110との間のデータ経路214を横断するCmemロード動作と、ベクトルメモリ106とベクトルレジスタ110との間のデータ経路212を横断するVmemロード動作とは、それぞれ同じサイクルで発行および実行することができる。いくつかの実装形態において、以前の設計と比較して、ベクトルレジスタ110、112は、ベクトルレジスタ110、112が同時ロード動作を受信することを可能にする追加のポートを含むように構成されている。
【0065】
例えば、ベクトルレジスタ112は、プロセッサコア105-2において実行される同時ロード動作中に、レジスタがベクトルメモリ108および共有ステージングブロック230の各々からのベクトルペイロードを受信することを可能にする追加のポートを含むように構成されている。いくつかの例において、ベクトルレジスタ110、112の各々にロードされるペイロードの単一のデータは、単一のロード動作中にベクトルレジスタ110またはベクトルレジスタ112に移動され得る最大128個のデータ項目に基づいて128個の離散ロードを含む。
【0066】
共有メモリ104のCMEMロード/ストア機能は、ベクトルメモリマクロを介してデータをルーティングする必要がないため、従来の設計と比較してより高いピーク性能を提供することができる。例えば、部分的にはベクトルレジスタ110、112の追加の利用可能なレジスタポートによって、(データ経路215、235に沿った)ロードおよびストアは、ベクトルメモリロードおよびストアと並列に実行されてもよい。
【0067】
いくつかの実装形態において、システム100は、ベクトルメモリ106、108を介してデータ経路を横断する時に存在し得る帯域幅制限の一部(または全て)をバイパスする並列インターフェイスを、共有ステージングブロック210、230の各々に提供する例示的ロードストアインターフェイスを含む。この例示的なロードストアインターフェイスは、例示的なワークロードから追加の性能を抽出することを可能にするより高いメモリ帯域幅を効果的に提供することができる。例えば、システム100は、共有メモリ104のリソース(例えば、ソフトウェア制御ステージングリソース)を用いて様々なロード/ストア動作を実行するように構成され、ロード/ストア動作は、プロセッサコアのベクトルメモリを介してデータを移動することをバイパスするために実行されてもよい。
【0068】
例えば、ハードウェア回路101のコンポーネントは、共有メモリ104と通信することによって、共有メモリ104のメモリバンクまたはレジスタファイルの単一のアドレス位置からデータを読み取ることができる。いくつかの例において、メモリの単一のアドレスに記憶されたデータは、読み取られ、その単一のデータは、プロセッサコアの内部に位置するレジスタファイルまたはステージングブロックに移動されてもよい。例えば、単一のデータは、さらなる処理のために、共有CMEM104のアドレス位置から読み出され、共有コアデータ経路224を介して、プロセッサコア105-2の共有ステージングブロック230のアドレス位置に移動されてもよい。この動作は、ベクトルメモリ108を介して、メモリシステムを経由してデータを移動することを回避するために実行され、コア105-2のプロセッサクロックサイクルおよびベクトルメモリ108に接続するデータ経路の帯域幅を節約することができる。
【0069】
図3は、ハードウェア回路101の例示的な行列計算ユニットと通信する例示的なベクトルプロセッサを示すブロック図である。より具体的には、いくつかの実装形態において、ハードウェア回路101の例示的なテンソルプロセッサコア302-1は、ベクトル処理ユニット304(ベクトルプロセッサ304)と、ベクトルプロセッサ304に結合される行列計算ユニット308とを含む。同様に、ハードウェア回路101の別のテンソルプロセッサコア302-2は、ベクトルプロセッサ306と、ベクトルプロセッサ306に結合される行列計算ユニット308とを含む。
【0070】
一般的に、ハードウェア回路101は、計算を実行することによって、ニューラルネットワーク層の出力を生成するように構成されている。回路101に含まれる行列計算ユニット308および310の各々は、計算の一部を実行することによって、ニューラルネットワーク層の出力を生成するために使用される累積値を生成するように構成されている。いくつかの実装形態において、上記で説明したソフトウェア制御ステージングリソース(例えば、ステージングブロック210、230)は、HBM102から行列計算ユニット308、310の各々へのベクトルオペランドに対応するデータのフローを管理するように構成されている。場合によっては、オペランドは、HBM102によって提供される入力および重みである。オペランドは、ベクトルプロセッサ304または306の演算論理ユニット(ALU)を用いて実行されるデータ演算に基づいて、ベクトル配列として構造化されてもよい。
【0071】
図3の例において、制御ユニット201は、共有メモリ104、ベクトルメモリ106、108、およびベクトルレジスタ110、112のメモリ位置から、複数バッチの入力および重みのセットを取り出す(または読み出す)ための動作を管理するための制御信号を生成する。ニューラルネットワーク層を介して、行列計算ユニット308、310において実行された計算に基づいて、取り出された入力および重みを処理することによって累積値を計算することができる。ベクトルプロセッサ304、306において累積値を処理することによって、ニューラルネットワーク層の出力に対応するアクティブ化値を生成することができる。制御ユニット201によって生成された制御信号を用いて、ベクトルプロセッサ304、306によって生成された複数セットの出力または出力アクティブ化値を、HBM102または1つ以上の他のニューラルネットワーク層で処理するためにハードウェア回路101の他のメモリ位置に記憶する(または書き込む)。
【0072】
図4は、共有メモリ104を、ハードウェア回路101のプロセッサコア302-1の1つ以上のベクトルプロセッサ304およびプロセッサコア302-2の1つ以上のベクトルプロセッサ306に結合する例示的な有線接続400を示す。有線接続400は、所定のハードウェア回路において利用可能である有線接続またはデータバス接続の総数に対応する特定の物理制限を課す物理構造を表すことができる。例えば、共有メモリ104のCMEMリソース402の第1のブロック(バンク_0)は、有線接続404を介して、VPUリソース406の対応するブロックに結合されてもよい。VPUリソース406は、例示的なベクトル処理ユニット、例えばプロセッサコア302-1内のベクトルプロセッサ304のベクトルレジスタまたはベクトルメモリなどのメモリリソースである。同様に、共有メモリ104のCMEMリソース412の第2のブロック(バンク_1)は、有線接続414を介して、VPUリソース416の対応するブロックに結合されてもよい。VPUリソース416は、例示的なベクトル処理ユニット、例えばプロセッサコア302-2内のベクトルプロセッサ306のベクトルレジスタまたはベクトルメモリなどのメモリリソースである。場合によっては、CMEMリソースの所定のブロックを2つの別個のコア上のVPUブロックに接続する時に、CMEMリソースおよびVPUブロックを分離する必要があるという制約が存在する。特に、CMEMリソースを別個のコアに接続するように構成されている時に、この制約は、ハードウェア回路の物理的空間にわたってCMEMおよびVPUブロックを分離する必要がある。
【0073】
いくつかの実装形態において、共有メモリ104は、所定のサイズを有し、共有メモリ104のリソースブロックおよびプロセッサリソースは、チップまたは回路101の特定の物理領域に配置されなければならない。プロセッサコア内でまたはプロセッサコア間でデータを移動することを含む例示的な動作は、データが閾値数のプロセッササイクル内でハードウェア回路101のいくつかの物理距離を横断できることを必要とする。共有メモリ104の一部のリソースがコア105-1、105-2の外側に位置し、配線の配置が高価であり得るため、DMA動作およびロード/ストア動作のデータを共有メモリ104のリソースからプロセッサコア105に移動するための配線(例えば、有線接続404、414)は、共有される。また、これらの配線は、HBM102とベクトルメモリ106、108との間のDMA動作にも使用されてもよい。有線接続を共有することは、帯域幅の利用および効率を改善する。
【0074】
いくつかの実装形態において、特定のワークロードに適するように配線を節約するために、データを共有CMEM203からプロセッサコアのリソースにルーティングするデータ経路は、データをプロセッサコアのリソースから共有CMEM203にルーティングするデータ経路の幅の2倍であってもよい。したがって、本明細書に記載された技法は、有線接続の量の特定の物理的な制約および制限に対して共有メモリ104のロジック的な利点を達成する際の複雑さと、回路101にハードウェアコンポーネントを物理的に配置するためのオプションとを両立させる例示的なハードウェアレイアウトオプションを提供する。
【0075】
図5は、図1の共有メモリを用いてニューラルネットワーク計算を加速するための例示的なプロセス500を示すフロー図である。プロセス500は、上述したシステム100を用いて実施または実行されてもよい。プロセス500の説明は、上述したシステム100のコンピューティングリソースを参照してもよい。プロセス500のステップまたは動作は、本明細書に記載された装置の1つ以上のプロセッサおよびリソースによって実行可能なプログラムされたファームウェアまたはソフトウェア命令によって可能にされてもよい。いくつかの実装形態において、プロセス500のステップは、ニューラルネットワークを実装するように構成されたハードウェア回路を用いてニューラルネットワーク層の出力を生成するための計算を実行するための方法に対応する。
【0076】
プロセス500を参照して、データをシステム100のメモリからシステムのハードウェア回路に提供する(502)。例えば、システム100は、データをHBM102からハードウェア回路101に提供する。いくつかの実装形態において、データは、ニューラルネットワーク層の出力を生成するために使用される特定のデータ値および命令を含む。HBM102は、ハードウェア回路101のテンソルプロセッサコアとデータ通信を交換するシステムメモリまたは入力/出力(I/O)装置を表すことができる。例えば、HBM102は、テンソルプロセッサコアとデータ通信を交換することによって、入力をテンソルコアに渡し、テンソルコアによって生成された出力を受信することができる。
【0077】
システム100は、第1のプロセッサコアのベクトルメモリを用いて、ベクトル値を回路の第1のプロセッサコアに記憶する(504)。例えば、システム100は、テンソルプロセッサコア105-1に配置されたベクトルメモリ106のメモリアドレス位置を用いて、ニューラルネットワーク層において処理される入力のバッチに対応する入力ベクトルを記憶することができる。ベクトルメモリ106は、プロセッサコア105-1がHBM102によって提供された入力データから第1のベクトル値を特定するまたは算出することに応答して、第1のベクトル値を記憶するように構成されている。いくつかの実装形態において、ベクトルメモリ106は、第1のメモリによって提供されたデータがベクトルメモリ106に記憶されるように割り当てられたベクトル値のサブセットを含むと第1のプロセッサコア105が決定したことに応答して、第1のベクトル値を記憶する。
【0078】
第1のベクトル値は、多次元入力テンソルのデータ値を表す様々な要素のうち、一組の要素から直接に使用されてもよく、または一組の要素から算出されてもよい。上述したように、多次元入力テンソルは、HBM102からの入力データとして提供されてもよい。いくつかの実装形態において、第1のベクトル値は、HBM102によって提供されたデータから取得、抽出、または算出される、ニューラルネットワーク層の重みセットを表す。第1のベクトル値は、ベクトルメモリ106を含むベクトル処理ユニット304に値をルーティングしたことに応答して、ベクトルメモリ106のメモリ位置に記憶されてもよい。ベクトル処理ユニット304およびベクトルメモリ106の各々は、プロセッサコア105-1の一部として含まれてもよい。
【0079】
システムメモリによって提供されたデータを回路の共有メモリと回路のベクトルメモリとの間にルーティングする(506)。例えば、第1のベクトル値を含むデータ通信は、共有メモリ104の少なくともDMAデータ経路206を用いて、共有メモリ104とプロセッサコア105-1のベクトルメモリ106との間にルーティングされる。より具体的には、まず、第1のベクトル値を含むデータ通信は、HBM102によって提供され、次いで共有メモリ104の第1のリソース部分を用いて、共有メモリ104とベクトルメモリ106との間にルーティングされる。いくつかの例において、第1のベクトル値は、ベクトルメモリ106と共有メモリ104の特定のセクション(またはサブセクション)との間にルーティングされる。
【0080】
共有メモリ104の第1のリソース部分は、データをベクトルメモリ106のメモリ位置にロードするためのDMA動作を実行するように動作可能なDMAメモリユニットとして機能するように構成されている。DMA動作は、ベクトル値の配列を取得するために、第1のリソース部分の個々のメモリアドレス位置に対して実行されてもよい。ベクトル値の配列は、共有メモリ104のDMAデータ経路206を用いて、ベクトルメモリ106にルーティングされる。
【0081】
システムメモリによって提供されたデータを回路の共有メモリと回路の各ベクトルレジスタとの間にルーティングする(508)。例えば、第2のベクトル値を含むデータ通信は、共有メモリ104の少なくともロードストアデータ経路208、214を用いて、共有メモリ104とプロセッサコア105-1のベクトルレジスタ110との間にルーティングされる。より具体的には、まず、第2のベクトル値を含むデータ通信は、HBM102によって提供され、次いで共有メモリ104の第2のリソース部分を用いて共有メモリ104とベクトルレジスタ110との間にルーティングされる。いくつかの例において、第2のベクトル値は、ベクトルレジスタ112と共有メモリ104の特定のセクション(またはサブセクション)との間にルーティングされる。
【0082】
いくつかの実装形態において、共有メモリ104の第2のリソース部分は、共有メモリ104の一部のメモリリソースから形成されるソフトウェア制御ステージングリソースとして構成されている。このソフトウェア制御ステージングリソースは、i)ロードストアデータ経路208に沿ってルーティングされたデータ値(例えば、第2のベクトル値)を受信し、ii)閾値数のプロセッササイクルの間に第2のベクトル値を一時的に記憶し、およびiii)閾値数のプロセッササイクルの間にベクトル値を一時的に記憶することに応答して、第2のベクトル値を少なくともプロセッサコア105-1の各ベクトルレジスタ110に提供するように構成されている。閾値数は、ソフトウェア定義の閾値であってもよい。例えば、閾値数は、命令がプロセッサの例示的な命令ストリームにスケジュールされる時に、ソフトウェアによって具体的に定義されてもよい。
【0083】
共有メモリ104は、第2のベクトル値に対応するベクトル値の配列を、第2のリソース部分に含まれるステージングリソースのメモリ位置にロードするように動作可能である。第2のリソース部分の個々のメモリアドレス位置に対して読み出し動作を実行することによって、第2のベクトル値に対応するベクトル値の配列を取得することができる。これらのベクトル配列は、例えば共有メモリ104のロードストアデータ経路214を用いて、ベクトルレジスタ110にルーティングされる。代替的に、これらのベクトル配列は、共有メモリ104のロードストアデータ経路234を用いて、ベクトルレジスタ112にルーティングされてもよい。
【0084】
システム100は、ベクトル値のセットを用いて、ニューラルネットワーク層の出力に対応する累積値を生成する(510)。例えば、ハードウェア回路101は、プロセッサコア105-1のベクトル処理ユニット304に結合される行列計算ユニット308を含む。システム100は、行列計算ユニット308に各々ルーティングされた第1のベクトル値および第2のベクトル値を用いて、行列計算ユニット308に複数の累積値を生成させる。いくつかの実装形態において、第1のベクトル値および第2のベクトル値は、回路の異なるデータ経路に沿って行列計算ユニット308に同時にルーティングされる。例えば、ロードストアデータ経路214およびDMAデータ経路206を用いて、第1のベクトル値のセットおよび第2のベクトル値のセットを行列計算ユニット308に各々並列にルーティングすることができる。
【0085】
本開示に記載された主題および機能的な動作の実施形態は、本開示に開示された構造およびそれらの構造的均等物を含むデジタル電子回路、有形化されたコンピュータソフトウェアまたはファームウェア、コンピュータハードウェア、もしくはそれらの1つ以上の組み合わせにおいて実現することができる。本開示に記載された主題の実施形態は、1つ以上のコンピュータプログラム、すなわち、有形化された非一時的なプログラム担体上にエンコードされ、データ処理装置によって実行されるまたはデータ処理装置の動作を制御するためのコンピュータプログラム命令の1つ以上のモジュールとして実装することができる。
【0086】
コンピュータ記憶媒体は、機械可読記憶装置、機械可読記憶基板、ランダムまたはシリアルアクセスメモリ装置、またはそれらの1つ以上の組み合わせであってもよい。代替的にまたは追加的には、プログラム命令は、人為的に生成された伝播信号、例えば、データ処理装置による実行のため、情報を適切な受信機に送信するために符号化することによって生成された機械生成電気信号上にエンコードされてもよい。
【0087】
「コンピューティングシステム」という用語は、データを処理するための全ての種類の機器、装置およびマシン、例えば、プログラム可能なプロセッサ、コンピュータ、または複数のプロセッサまたはコンピュータを含む。また、この装置は、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)などの専用ロジック回路であってもよく、またはそれらをさらに含んでもよい。この装置は、ハードウェアに加えて、コンピュータプログラムの実行環境を生成するコード、例えばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの1つ以上の組み合わせを構成するコードを含むことができる。
【0088】
プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードとして呼ばれ得るまたは記述され得るコンピュータプログラムは、コンパイル言語またはインタープリタ言語、宣言型言語または手続き型言語を含む任意のプログラミング言語で記述することができ、スタンドアロンプログラムとしてまたはコンピューティング環境内の使用に適したモジュール、コンポーネント、サブルーチン、オブジェクトまたはその他のユニットとしての任意の形で使用することができる。
【0089】
コンピュータプログラムは、ファイルシステム内のファイルに対応することができるが、必ずしも対応する必要がない。プログラムは、他のプログラムまたはデータ(例えば、マークアップ言語文書に記憶された1つ以上のスクリプト)を保持するファイルの一部、関与しているプログラムに専用の単一ファイル、または複数の同格ファイル(例えば、1つ以上のモジュール、サブプログラムまたはコードの一部を記憶するファイル)に記憶されてもよい。コンピュータプログラムは、1つのコンピュータ上で、または1つのサイトに配置されまたは複数のサイトにわたって分散され、通信ネットワークによって相互接続されている複数のコンピュータ上で動作しているように実装することができる。
【0090】
本明細書に記載されたプロセスおよびロジックフローは、入力データを処理し、出力を生成することによって機能を実行するように、1つ以上のコンピュータプログラムを実行する1つ以上のプログラム可能なコンピュータによって実行されてもよい。また、プロセスおよびロジックフローは、専用ロジック回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPGPU(汎用グラフィックス処理ユニット)によって実行されてもよく、装置は、専用ロジック回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPGPU(汎用グラフィックス処理ユニット)によって実装されてもよい。
【0091】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用マイクロプロセッサまたは専用マイクロプロセッサもしくはその両方、または任意の他の種類の中央処理装置に基づいたものであってもよい。一般的に、中央処理装置は、読み出し専用メモリまたはランダムアクセスメモリもしくはその両方から、命令およびデータを受信する。コンピュータのいくつかの要素は、命令を実行または実行するための中央処理装置と、命令およびデータを記憶するための1つ以上のメモリ装置である。一般的に、コンピュータはまた、データを記憶するための1つ以上の大容量記憶装置、例えば磁気ディスク、磁気光ディスクまたは光ディスクを含むおよび/またはこれらの大容量記憶装置とデータを送受信するように動作可能に結合される。しかしながら、コンピュータは、これらの装置を有する必要がない。さらに、コンピュータは、別の装置、例えば携帯電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、または携帯型記憶装置(例えば、ユニバーサルシリアルバス(USB)フラッシュドライブ)を含むことができる。
【0092】
コンピュータプログラム命令およびデータの記憶に適したコンピュータ可読媒体は、例えば、EPROM、EEPROMおよびフラッシュメモリ装置などの半導体メモリ装置、内蔵ハードディスクまたはリムーバブルディスクなどの磁気ディスク、光磁気ディスク、CD-ROMおよびDVD-ROMディスクを含む全ての種類の不揮発性メモリ、媒体およびメモリ装置を含む。プロセッサおよびメモリは、専用ロジック回路によって補完されてもよく、または専用ロジック回路に組み込まれてもよい。
【0093】
ユーザとの対話を提供するために、本明細書で説明される主題の実施形態は、ユーザに情報を表示するためのディスプレイ装置、例えばLCD(液晶ディスプレイ)モニタ、ユーザがコンピュータに入力を提供することができるキーボードおよびポインティング装置、例えばマウスまたはトラックボールを含むコンピュータ上で実装されてもよい。他の種類の装置を用いて、ユーザとの対話を提供することもできる。例えば、ユーザに提供されるフィードバックは、任意種類の感覚フィードバック、例えば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックであってもよく、ユーザからの入力は、音響入力、音声入力または触覚入力を含む任意の形で受信することができる。また、コンピュータは、ユーザによって使用される装置との間でドキュメントを送受信することによって、例えば、ウェブブラウザから受信した要求に応答して、ユーザクライアント装置上のウェブブラウザにウェブページを送信することによって、ユーザと対話することができる。
【0094】
本明細書で説明される主題の実施形態は、例えば、データサーバとしてバックエンドコンポーネントを含む、または例えば、アプリケーションサーバ等のミドルウェアコンポーネントを含む、または例えば、フロントエンドコンポーネントを含む、コンピューティングシステムにおいて実装されることができる。グラフィカルユーザインターフェイスを有するクライアントコンピュータ、またはユーザが本明細書に記載される主題の実装と対話することができるウェブブラウザ、または1つ以上のそのようなバックエンド、ミドルウェア、もしくはフロントエンドコンポーネントの任意の組み合わせ。システムのコンポーネントは、デジタルデータ通信の任意の形態または媒体、例えば、通信ネットワークによって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク(LAN)および広域ネットワーク(WAN)、例えばインターネットを含む。
【0095】
コンピューティングシステムは、クライアントおよびサーバを含むことができる。クライアントとサーバとは、一般的に互いに遠隔であり、典型的には通信ネットワークを介して情報交換を行う。クライアントとサーバとの関係は、各々のコンピュータ上で動作しており、互いにクライアント-サーバ関係を有するコンピュータプログラムに依存する。
【0096】
本明細書は、多くの具体的な実施詳細を含むが、これらの詳細は、発明の範囲または請求可能な範囲を限定するものではなく、むしろ特定の発明の特定の実施形態に特有の特徴の説明として考えるべきである。本開示の個別の実施形態に記載された特定の特徴は、単一の実施形態において組み合わせとして実施することもできる。逆に、単一の実施形態に記載されたさまざまな特徴は、複数の実施形態において、別々にまたは任意の適切なサブ組み合わせで実施することもできる。さらに、上記で特徴を特定の組み合わせで作用するものとして説明したが、このような説明にも拘らず、1つ以上の特徴は、説明した組み合わせから削除されてもよく、説明した組み合わせは、部分組み合わせに変形されてもよい。
同様に、動作が特定の順序で図面に示されているが、望ましい結果を達成するために、図示された順序または順番に従ってこれらの動作を実行する必要があるまたは図示された全ての動作を実行する必要があると理解すべきではない。特定の状況において、マルチ作業および並列処理は、有利である可能性がある。例えば、並列処理を用いて、複数の言語検出メソッドを同時に実行することができる。さらに、上述の実施形態におけるさまざまなシステム要素の分離は、全ての実施形態においてそのような分離が必要であると理解すべきではなく、記載されたプログラム要素およびシステムは、一般的に、単一のソフトウェア製品に一体化されるまたは複数のソフトウェア製品にパッケージ化されることができると理解すべきである。
したがって、主題の特定の実施形態を説明した。他の実施形態は、添付の特許請求の範囲内にある。場合によって、請求項に列挙された動作は、異なる順序で実行され、依然として望ましい結果を達成することができる。さらに、望ましい結果を達成するために、添付の図面に示されるプロセスは、必ずしも示された特定の順序または順番に従う必要がない。特定の実現例において、マルチ作業および並列処理が有利である可能性がある。
図1
図2
図3
図4
図5