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

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

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-10-06
(45)【発行日】2025-10-15
(54)【発明の名称】ニューラル・ネットワーク処理
(51)【国際特許分類】
   G06N 3/063 20230101AFI20251007BHJP
   G06F 15/80 20060101ALI20251007BHJP
   G06F 15/173 20060101ALI20251007BHJP
【FI】
G06N3/063
G06F15/80
G06F15/173 660B
【請求項の数】 22
(21)【出願番号】P 2023519006
(86)(22)【出願日】2021-08-11
(65)【公表番号】
(43)【公表日】2023-11-02
(86)【国際出願番号】 EP2021072329
(87)【国際公開番号】W WO2022083912
(87)【国際公開日】2022-04-28
【審査請求日】2024-01-23
(31)【優先権主張番号】17/076,287
(32)【優先日】2020-10-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】キャシディ、アンドリュー、ステファン
(72)【発明者】
【氏名】アップスワミー、ラシナクマール
(72)【発明者】
【氏名】アーサー、ジョン、バーノン
(72)【発明者】
【氏名】澤田 潤
(72)【発明者】
【氏名】モダ、ダルメンドラ
(72)【発明者】
【氏名】デボール、マイケル、ヴィンセント
(72)【発明者】
【氏名】ダッタ、パラブ
(72)【発明者】
【氏名】ナヤク、タパン、クマール
【審査官】今城 朋彬
(56)【参考文献】
【文献】特開2019-095861(JP,A)
【文献】米国特許出願公開第2018/0189645(US,A1)
【文献】米国特許出願公開第2020/0117988(US,A1)
【文献】Faizal Arya Samman et al,Runtime Contention and Bandwidth-Aware Adaptive Routing Selection Strategies for Networks-on-Chip,IEEE Transactions on Parallel and Distributed Systems,IEEE [online],2012年06月26日,pp.1-11,Retrieved from <https://ieeexplore.ieee.org/document/6226386>,[retrieved on 2024.11.26]
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00ー99/00
G06F 18/00-18/40
G06F 15/80
G06F 15/173
(57)【特許請求の範囲】
【請求項1】
ニューラル推論チップであって、該ニューラル推論チップが、
複数のネットワーク・ノードであって、前記複数のネットワーク・ノードが、少なくとも1つの行および少なくとも1つの列を有する2つ以上の次元のグリッドに編成されている、複数のネットワーク・ノードと、
ネットワーク・オン・チップであって、前記ネットワーク・オン・チップが前記複数のネットワーク・ノードを相互接続し、前記ネットワーク・オン・チップのネットワークが少なくとも一対の有向経路を含み、各前記行および各前記列が対の有向経路を有し、各対の前記経路が相対する方向および共通終端を有する、ネットワーク・オン・チップと
を備え、
前記ネットワークが、前記複数のネットワーク・ノードのいずれかにおいてデータを受信するように構成され、
前記ネットワークが、前記対の有向経路のうちのソース・ノードから前記対の有向経路の前記共通終端までの第1の経路に沿って、および前記対の有向経路のうちの前記対の有向経路の前記共通終端から1つまたは複数の宛先ノードまでの第2の経路に沿って、データを伝播するように構成される、ニューラル推論チップ。
【請求項2】
前記ネットワークが、ネットワーク・アドレスに従って、前記対の有向経路のうちの第2の経路上で前記1つまたは複数の宛先ノードにデータを配信するように構成される、請求項1に記載のニューラル推論チップ。
【請求項3】
前記共通終端が、前記グリッドの終端に配置されている、請求項1に記載のニューラル推論チップ。
【請求項4】
前記複数のネットワーク・ノードの各ネットワーク・ノードが、行ネットワークと前記ネットワーク・ノードの列とを相互接続するルータを備える、請求項に記載のニューラル推論チップ。
【請求項5】
前記2つ以上の次元が、各次元について、データがその対の有向経路のそれぞれに沿って伝播し、その後に後続の次元が続くように順序付けられる、請求項に記載のニューラル推論チップ。
【請求項6】
前記複数のネットワーク・ノードの各ネットワーク・ノードが、各次元の前記対の有向経路を前記後続の次元の前記対の有向経路と相互接続するルータを備え、前記ルータが、前記対の有向経路のうちの前記第2の経路から前記後続の次元の前記対の有向経路のうちの前記第1の経路までデータを配信するように適合される、請求項5に記載のニューラル推論チップ。
【請求項7】
前記複数のネットワーク・ノードの各対の有向経路の前記共通終端にルータをさらに備え、前記ルータが、前記対の有向経路のうちの第1の経路に沿ってデータを受信し、前記対の有向経路のうちの第2の経路に沿ってデータを送信するように構成される、請求項1ないし6のいずれか1項に記載のニューラル推論チップ。
【請求項8】
各対の前記共通終端が、実行時に構成可能である、請求項1ないし7のいずれか1項に記載のニューラル推論チップ。
【請求項9】
前記ネットワークが複数のサブ区分に区分化され、各サブ区分が前記ネットワーク・ノードのサブセット上で独立したネットワークとして動作する、請求項8に記載のニューラル推論チップ。
【請求項10】
前記ネットワークが、クロック・サイクルごとにノードごとに1つのデータ・パケットを受信し、クロック・サイクルごとに各有向経路に沿って隣接ノードにデータを伝播するように構成される、請求項1ないし9のいずれか1項に記載のニューラル推論チップ。
【請求項11】
前記ネットワークが、停止またはストールすることなく、クロック・サイクルごとに隣接ネットワーク・ノード間でデータを伝播するように構成される、請求項10に記載のニューラル推論チップ。
【請求項12】
前記ネットワークが、ブロードキャストによって前記第2の経路上のすべてのノードにデータを配信するように構成される、請求項1に記載のニューラル推論チップ。
【請求項13】
前記ネットワークが、マルチキャストによって前記第2の経路上のノードのサブセットにデータを配信するように構成される、請求項1に記載のニューラル推論チップ。
【請求項14】
前記ネットワークが、ユニキャストによって前記第2の経路上の単一のノードにデータを配信するように構成される、請求項1に記載のニューラル推論チップ。
【請求項15】
前記ネットワーク・ノード以外のソースおよび宛先からデータを送受信するように適合された外部インターフェースをさらに備える、請求項1に記載のニューラル推論チップ。
【請求項16】
前記ネットワーク・ノードのルータまたは前記共通終端のルータが、前記外部インターフェースに向けてデータをルーティングするように構成される、請求項15に記載のニューラル推論チップ。
【請求項17】
ニューラル推論チップに備えられた複数のネットワーク・ノードにおいてデータを受信することであって、前記複数のネットワーク・ノードが、少なくとも1つの行および少なくとも1つの列を有する2つ以上の次元のグリッドにおいて編成されており、前記複数のネットワーク・ノードが前記ニューラル推論チップに備えられたネットワーク・オン・チップによって相互接続され、前記ネットワーク・オン・チップのネットワークが少なくとも一対の有向経路を含み、各前記行および各前記列が対の有向経路を有し、各対の前記経路が相対する方向および共通終端を有する、前記データを受信することと、
前記対の有向経路のうちのソース・ノードから前記対の有向経路の前記共通終端までの第1の経路に沿って、および前記対の有向経路のうちの前記対の有向経路の前記共通終端から1つまたは複数の宛先ノードまでの第2の経路に沿って、データを伝播することと
を含む、方法。
【請求項18】
前記ネットワーク・オン・チップを介して複数の隣接するデータを伝播することをさらに含み、複数のソース・ノードが、所与のサイクルで前記ネットワークにデータを投入する、請求項17に記載の方法。
【請求項19】
前記ネットワーク・オン・チップを介して複数の隣接するデータを伝播することをさらに含み、複数のソース・ノードが、データが前記ネットワーク上でインターリーブされるように前記データを前記ネットワークに投入する、請求項17に記載の方法。
【請求項20】
前記ネットワーク・オン・チップを介して複数の隣接するデータを伝播することをさらに含み、複数のソース・ノードが、データが後で第2の次元のネットワーク上でインターリーブされるように前記データを第1の次元の異なるネットワークに投入する、請求項17に記載の方法。
【請求項21】
1つまたは複数のソース・ノードから前記ネットワークへのデータの投入が、所定のスケジュールに従って進行する、請求項17に記載の方法。
【請求項22】
前記所定のスケジュールが、前記1つまたは複数のネットワーク上でデータ衝突が発生しないことを保証する、請求項21に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、ニューラル・ネットワーク処理に関する。
【発明の概要】
【0002】
本発明の一態様によれば、ニューラル推論チップは、複数のネットワーク・ノードと、複数のネットワーク・ノードを相互接続するネットワーク・オン・チップとを備える。ネットワークは、少なくとも一対の有向経路(directional path)を含む。各対の経路は、相対する方向および共通終端を有する。ネットワークは、複数のノードのいずれかにおいてデータを受け入れるように構成される。ネットワークは、対の有向経路のうちのソース・ノードから対の有向経路の共通終端までの第1の経路に沿って、および対の有向経路のうちの対の有向経路の共通終端から1つまたは複数の宛先ノードまでの第2の経路に沿って、データを伝播するように構成される。
【0003】
他の態様によれば、ネットワーク・オン・チップを動作させるための方法およびコンピュータ・プログラム製品が提供される。データは複数のネットワーク・ノードにおいて受け入れられる。複数のネットワーク・ノードは、ネットワーク・オン・チップによって相互接続される。ネットワークは、少なくとも一対の有向経路を含む。各対の経路は、相対する方向および共通終端を有する。データは、対の有向経路のうちのソース・ノードから対の有向経路の共通終端までの第1の経路に沿って、および対の有向経路のうちの対の有向経路の共通終端から1つまたは複数の宛先ノードまでの第2の経路に沿って、伝播される。
【図面の簡単な説明】
【0004】
図1】本開示の実施形態による、ニューラル・コアを示す図である。
図2】本開示の実施形態による、例示的な推論処理ユニット(IPU)を示す図である。
図3】本開示の実施形態による、マルチ・コア推論処理ユニット(IPU)を示す図である。
図4】本開示の実施形態による、ニューラル・コアおよび関連するネットワークを示す図である。
図5】本開示の実施形態による、1次元ブロードキャスト・ネットワーク・オン・チップ(NOC)の概略図である。
図6】本開示の実施形態による、1次元ブロードキャスト・ネットワーク・オン・チップ(NOC)の例示的なベースラインの概略図である。
図7】本開示の実施形態による、1次元ブロードキャスト・ネットワーク・オン・チップ(NOC)の例示的なベースラインの概略図である。
図8】本開示の実施形態による、J方式を採用する1次元ブロードキャスト・ネットワーク・オン・チップ(NOC)の例示的なベースラインの概略図である。
図9】本開示の実施形態による、J方式を採用する1次元ブロードキャスト・ネットワーク・オン・チップ(NOC)の例示的なベースラインの概略図である。
図10】本開示の実施形態による、J方式を採用する1次元ブロードキャスト・ネットワーク・オン・チップ(NOC)の例示的なベースラインの概略図である。
図11】本開示の実施形態による、2次元ブロードキャスト・ネットワーク・オン・チップ(NOC)の概略図である。
図12】本開示の実施形態による、J方式を採用する2次元ブロードキャスト・ネットワーク・オン・チップ(NOC)の概略図である。
図13】本開示の実施形態による、モデル・ネットワーク・オン・チップ(NOC)のJ方式の概要の概略図である。
図14】本開示の実施形態による、モデル・ネットワーク・オン・チップ(NOC)のパケット・フォーマットの概略図である。
図15】本開示の実施形態による、モデル・ネットワーク・オン・チップ(NOC)のアドレス指定構成の概略図である。
図16】本開示の実施形態による、モデル・ネットワーク・オン・チップ(NOC)の1次元ルータの概略図である。
図17】本開示の実施形態による、モデル・ネットワーク・オン・チップ(NOC)の2次元ルータの概略図である。
図18A】本開示の実施形態による、モデル・ネットワーク・オン・チップ(NOC)のルータ経路のリストの概略図である。
図18B】本開示の実施形態による、モデル・ネットワーク・オン・チップ(NOC)のルータ経路のリストの概略図である。
図19】本開示の実施形態による、モデル・ネットワーク・オン・チップ(NOC)の外部インターフェースの概略図である。
図20】本開示の実施形態による、モデル・ネットワーク・オン・チップ(NOC)のアレイ論理区分化の概略図である。
図21A】本開示の実施形態による、モデル・ネットワーク・オン・チップ(NOC)のアレイ論理区分化の概略図である。
図21B】本開示の実施形態による、モデル・ネットワーク・オン・チップ(NOC)のアレイ論理区分化の概略図である。
図22】本開示の実施形態による、ニューラル活性化を計算するための方法を示す図である。
図23】本開示の一実施形態による、コンピューティング・ノードを示す図である。
【発明を実施するための形態】
【0005】
人工ニューロンは、出力が入力の線形結合の非線形関数である数学関数である。2つのニューロンは、一方の出力が他方への入力である場合、接続される。重みは、一方のニューロンの出力と他方のニューロンの入力との間の接続の強度を符号化するスカラ値である。
【0006】
ニューロンは、入力の加重和に非線形活性化関数を適用することによって、活性化と呼ばれる出力を計算する。加重和は、各入力を対応する重みと乗算して、その積を累算することによって計算される中間結果である。部分和は、入力のサブセットの加重和である。すべての入力の加重和は、1つまたは複数の部分和を累積することによって段階的に計算され得る。
【0007】
ニューラル・ネットワークは、1つまたは複数のニューロンの集合体である。ニューラル・ネットワークは、しばしば、層と呼ばれるニューロンのグループに分割される。層は、すべて同じ層から入力を受信し、すべて同じ層に出力を送信し、通常、類似した関数を実行する、1つまたは複数のニューロンの集合体である。入力層は、ニューラル・ネットワークの外部のソースから入力を受信する層である。出力層は、出力をニューラル・ネットワークの外部のターゲットに送信する層である。他のすべての層は、中間処理層である。多層ニューラル・ネットワークは、2つ以上の層を有するニューラル・ネットワークである。ディープ・ニューラル・ネットワークは、多くの層を有する多層ニューラル・ネットワークである。
【0008】
テンソルは、数値の多次元アレイである。テンソル・ブロックは、テンソル内の要素の連続したサブアレイである。
【0009】
各ニューラル・ネットワーク層は、パラメータ・テンソルV、重みテンソルW、入力データ・テンソルX、出力データ・テンソルY、および中間データ・テンソルZと関連付けられている。パラメータ・テンソルは、層内でニューロン活性化関数σを制御するすべてのパラメータを含む。重みテンソルは、入力を層に接続する重みのすべてを含む。入力データ・テンソルは、層が入力として消費するデータのすべてを含む。出力データ・テンソルは、層が出力として計算するデータのすべてを含む。中間データ・テンソルは、部分和などの、層が中間計算として作成する任意のデータを含む。
【0010】
層に対するデータ・テンソル(入力、出力、および中間)は3次元である場合があり、最初の2つの次元は、空間的な位置を符号化するものと解釈され、3つ目の次元は、異なる特徴を符号化するものと解釈され得る。例えば、データ・テンソルがカラー画像を表す場合、最初の2つの次元は画像内の垂直座標および水平座標を符号化し、3つ目の次元は、各位置における色を符号化する。入力データ・テンソルXのどの要素も、別個の重みによってすべてのニューロンに接続され得、したがって、重みテンソルWは、概して、入力データ・テンソルの3つの次元(入力行a、入力列b、入力特徴c)を出力データ・テンソルの3つの次元(出力行i、出力列j、出力特徴k)と連結した、6つの次元を有する。中間データ・テンソルZは、出力データ・テンソルYと同じ形状を有する。パラメータ・テンソルVは、3つの出力データ・テンソルの次元を、活性化関数σのパラメータにインデックスを付ける追加の次元oと連結する。いくつかの実施形態において、活性化関数σは、追加のパラメータを必要とせず、その場合、追加の次元は不要である。しかしながら、いくつかの実施形態において、活性化関数σは、次元oに現れる少なくとも1つの追加パラメータを必要とする。
【0011】
層の出力データ・テンソルYの要素は、ニューロン活性化関数σが活性化関数パラメータV[i,j,k,:]のベクトルによって構成される式1のように計算され得、加重和Z[i,j,k]は、式2のように計算され得る。
Y[i,j,k]=σ(V[i,j,k,:];Z[i,j,k])
式1
【数1】

式2
【0012】
表記の簡略化のため、式2における加重和は、出力と呼ばれる場合があり、これは、異なる活性化関数が使用される場合に一般性を失うことなく同じステートメントが適用されるという理解の下に、線形活性化関数Y[i,j,k]=σ(Z[i,j,k])=Z[i,j,k]を使用することに相当する。
【0013】
様々な実施形態において、上記の出力データ・テンソルの計算は、より小さい問題に分解される。次いで、各問題は、1つまたは複数のニューラル・コア上で、または従来のマルチコア・システムの1つまたは複数のコア上で、並列で解かれてもよい。
【0014】
上記から、ニューラル・ネットワークが並列構造であることは明らかであろう。所与の層のニューロンは、1つまたは複数の層からの要素xを有する入力X、または他の入力を受信する。各ニューロンは、入力と要素Wを有する重みWとに基づいて、その状態y∈Yを計算する。様々な実施形態において、入力の加重和は、バイアスbによって調整され、次いで、結果は、非線形性F(・)に渡される。例えば、単一のニューロン活性化は、y=F(b+Σx)と表現されてもよい。
【0015】
所与の層内のすべてのニューロンが、同じ層から入力を受信し、それらの出力を独立して計算するので、ニューロン活性化は、並列で計算され得る。全体のニューラル・ネットワークのこの態様により、分散されたコアにおいて計算を並列で実行することは、全体の計算を加速させる。さらに、各コア内で、ベクトル演算は、並列で計算され得る。再帰型の入力を用いる場合でも、例えば、層がそれ自体を投影し返す場合でも、すべてのニューロンは、依然として同時に更新される。事実上、再帰型の接続は、層への後続の入力と位置合せするように遅延される。
【0016】
ここで図1を参照すると、本開示の実施形態によるニューラル・コアが示されている。ニューラル・コア100は、出力テンソルの1つのブロックを計算するタイル化可能な計算ユニットである。ニューラル・コア100は、M個の入力およびN個の出力を有する。様々な実施形態において、M=Nである。出力テンソル・ブロックを計算するために、ニューラル・コアは、M×1入力テンソル・ブロック101をM×N重みテンソル・ブロック102と乗算し、その積を累算して加重和とし、加重和は、1×N中間テンソル・ブロック103に格納される。O×Nパラメータ・テンソル・ブロックは、1×N出力テンソル・ブロック105を作成するために中間テンソル・ブロック103に適用されるN個のニューロン活性化関数のそれぞれを指定する、O個のパラメータを含む。
【0017】
複数のニューラル・コアが、ニューラル・コア・アレイ状にタイル化されてもよい。いくつかの実施形態において、アレイは2次元である。
【0018】
ニューラル・ネットワーク・モデルは、ニューロン間の接続のグラフと、すべてのニューロンの重みおよび活性化関数パラメータとを含む、ニューラル・ネットワークによって実行される計算全体をまとめて指定する定数のセットである。訓練は、所望の機能を実行するようにニューラル・ネットワーク・モデルを修正するプロセスである。推論は、ニューラル・ネットワーク・モデルを修正せずに、入力にニューラル・ネットワークを適用して出力を作成するプロセスである。
【0019】
推論処理ユニットは、ニューラル・ネットワーク推論を実行するプロセッサのカテゴリである。ニューラル推論チップは、推論処理ユニットの特定の物理インスタンスである。
【0020】
図2を参照すると、本開示の実施形態による例示的な推論処理ユニット(IPU)が示されている。IPU200は、ニューラル・ネットワーク・モデルのためのメモリ201を含む。上記のように、ニューラル・ネットワーク・モデルは、計算されるニューラル・ネットワークのためのシナプス重みを含んでもよい。IPU200は、一過性であり得る活性化メモリ202を含む。活性化メモリ202は、入力領域と出力領域とに分割されてもよく、処理のためにニューロン活性化を記憶する。IPU200は、モデル・メモリ201からニューラル・ネットワーク・モデルがロードされるニューラル計算ユニット203を含む。各計算ステップの前に、活性化メモリ202から入力活性化が提供される。ニューラル計算ユニット203からの出力は、同じまたは別のニューラル計算ユニット上での処理のために活性化メモリ202に書き戻される。
【0021】
様々な実施形態において、IPU200にマイクロエンジン204が含まれる。そのような実施形態では、IPUにおけるすべての動作は、マイクロエンジンによって指示される。以下に記載のように、様々な実施形態において、中央マイクロエンジンまたは分散マイクロエンジンあるいはその両方が提供されてもよい。グローバル・マイクロエンジンはチップ・マイクロエンジンと呼ばれることがあり、ローカル・マイクロエンジンはコア・マイクロエンジンまたはローカル・コントローラと呼ばれることがある。様々な実施形態において、マイクロエンジンは、1つもしくは複数のマイクロエンジン、マイクロコントローラ、ステート・マシン、CPU、または他のコントローラを備える。
【0022】
図3を参照すると、本開示の実施形態によるマルチ・コア推論処理ユニット(IPU)が示されている。IPU300は、ニューラル・ネットワーク・モデルと命令とのためのメモリ301を含む。いくつかの実施形態において、メモリ301は、重み部分311と命令部分312とに分割される。上記のように、ニューラル・ネットワーク・モデルは、計算されるニューラル・ネットワークのためのシナプス重みを含んでもよい。IPU300は、一過性であり得る活性化メモリ302を含む。活性化メモリ302は、入力領域と出力領域とに分割されてもよく、処理のためにニューロン活性化を記憶する。
【0023】
IPU300は、ニューラル・コア303のアレイ306を含む。各コア303は、計算ユニット333を含み、計算ユニット333は、モデル・メモリ301からニューラル・ネットワーク・モデルがロードされ、ベクトル計算を実行するよう動作する。各コアは、ローカル活性化メモリ332も含む。各計算ステップの前に、ローカル活性化メモリ332から入力活性化が提供される。計算ユニット333からの出力は、同じまたは別の計算ユニット上での処理のために活性化メモリ332に書き戻される。
【0024】
IPU300は、1つまたは複数のネットワーク・オン・チップ(NoC)305を含む。いくつかの実施形態において、部分和NoC351は、コア303を相互接続し、コア303の間で部分和を転送する。いくつかの実施形態において、別個のパラメータ分散NoC352は、重みおよび命令をコア303に分散するために、コア303をメモリ301に接続する。NoC351およびNoC352の様々な構成が本開示による使用に好適であることが理解されよう。例えば、ブロードキャスト・ネットワーク、行ブロードキャスト・ネットワーク、ツリー・ネットワーク、およびスイッチド・ネットワークが使用されてもよい。
【0025】
様々な実施形態において、IPU300には、グローバル・マイクロエンジン304が含まれる。様々な実施形態において、各コア303上には、ローカル・コア・コントローラ334が含まれる。そのような実施形態において、グローバル・マイクロエンジン(チップ・マイクロエンジン)およびローカル・コア・コントローラ(コア・マイクロエンジン)は、協働して動作を指示する。具体的には、361において、グローバル・マイクロエンジン304によって、モデル・メモリ301の命令部分312から各コア303上のコア・コントローラ334に計算命令がロードされる。362において、グローバル・マイクロエンジン304によって、モデル・メモリ301の重み部分311から各コア303上のニューラル計算ユニット333にパラメータ(例えば、ニューラル・ネットワーク/シナプス重み)がロードされる。363において、ローカル・コア・コントローラ334によって、ローカル活性化メモリ332から各コア303上のニューラル計算ユニット333にニューラル・ネットワーク活性化データがロードされる。上述のように、活性化は、モデルによって定義された特定のニューラル・ネットワークのニューロンに提供され、同じまたは別のニューラル計算ユニットから、またはシステムの外部から生じてもよい。364において、ニューラル計算ユニット333は、ローカル・コア・コントローラ334によって指示された出力ニューロン活性化を生成するために計算を実行する。具体的には、計算は、入力シナプス重みを入力活性化に適用することを含む。そのような計算を実行するために、イン・シリコ・デンドライトおよびベクトル乗算ユニットを含む様々な方法が利用可能であることが理解されよう。365において、ローカル・コア・コントローラ334によって指示されるように、計算からの結果がローカル活性化メモリ332に記憶される。上述のように、これらの段階は、各コアでのニューラル計算ユニットの効率的な使用を実現するためにパイプライン処理されてもよい。入力および出力が所与のニューラル・ネットワークの要件に従ってローカル活性化メモリ332からグローバル活性化メモリ302に転送され得ることも理解されよう。
【0026】
したがって、本開示は、推論処理ユニット(IPU)における動作の実行時制御を提供する。いくつかの実施形態において、マイクロエンジンは、一元化される(単一のマイクロエンジン)。いくつかの実施形態において、IPU計算は、分散される(コアのアレイによって実行される)。いくつかの実施形態において、動作の実行時制御は階層的であり、中央マイクロエンジンと分散マイクロエンジンとの両方が関与する。
【0027】
1つまたは複数のマイクロエンジンは、IPU内のすべての動作の実行を指示する。各マイクロエンジン命令は、いくつかのサブ動作(例えば、アドレス生成、ロード、計算、記憶など)に対応する。コア・マイクロコードは、コア・マイクロエンジン(例えば、334)上で実行される。ローカル計算の場合、コア・マイクロコードは、完全な単一テンソル演算を実行するための命令を含む。例えば、重みテンソルとデータ・テンソルとの間の畳み込みである。分散された計算の場合、コア・マイクロコードは、データ・テンソルのローカルに記憶されたサブセット(および部分和)に対する単一テンソル演算を実行するための命令を含む。チップ・マイクロコードは、チップ・マイクロエンジン(例えば、304)上で実行される。マイクロコードは、ニューラル・ネットワークにおけるすべてのテンソル演算を実行するための命令を含む。
【0028】
ここで図4を参照すると、本開示の実施形態による例示的なニューラル・コアおよび関連するネットワークが示されている。図1を参照して説明したように具現化され得るコア401は、ネットワーク402から404によって追加のコアと相互接続される。本実施形態において、ネットワーク402は重みまたは命令あるいはその両方の分散に関与し、ネットワーク403は部分和の分散に関与し、ネットワーク404は活性化の分散に関与する。しかしながら、本開示の様々な実施形態が、これらのネットワークを結合するかまたはそれらを複数の追加のネットワークにさらに分離させてもよいことが理解されよう。
【0029】
入力活性化(X)は、活性化ネットワーク404を介して、オフ・コアから活性化メモリ405まで、コア401に分散される。層命令は、重み/命令ネットワーク402を介して、オフ・コアから命令メモリ406まで、コア401に分散される。層重み(W)またはパラメータあるいはその両方は、重み/命令ネットワーク402を介して、オフ・コアから重みメモリ407またはパラメータ・メモリ408あるいはその両方まで、コア401に分散される。
【0030】
ベクトル行列乗算(VMM)ユニット409によって、重みメモリ407から重み行列(W)が読み出される。ベクトル行列乗算(VMM)ユニット409によって、活性化メモリ405から活性化ベクトル(V)が読み出される。次いで、ベクトル行列乗算(VMM)ユニット409は、ベクトル行列乗算Z=XWを計算し、その結果をベクトル-ベクトル・ユニット410に提供する。ベクトル-ベクトル・ユニット410は、部分和メモリ411から追加の部分和を読み出し、部分和ネットワーク403を介してオフ・コアから追加の部分和を受信する。ベクトル-ベクトル・ユニット410によって、これらのソース部分和からベクトル-ベクトル演算が計算される。例えば、様々な部分和が順に合計されてもよい。得られたターゲット部分和は、部分和メモリ411に書き込まれるか、部分和ネットワーク403を介してオフ・コアに送信されるか、またはベクトル-ベクトル・ユニット410によるさらなる処理のためにフィードバックされるか、あるいはその組合せである。
【0031】
所与の層の入力に対するすべての計算が完了した後、ベクトル-ベクトル・ユニット410から得られた部分和の結果は、出力活性化の計算のために活性化ユニット412に提供される。活性化ベクトル(Y)は、活性化メモリ405に書き込まれる。層活性化(活性化メモリに書き込まれた結果を含む)は、活性化ネットワーク404を介して、活性化メモリ405からコア全体に再分散される。これら層活性化は、受信されると、各受信側コアのローカル活性化メモリに書き込まれる。所与のフレームに対する処理が完了すると、出力活性化は、活性化メモリ405から読み出され、ネットワーク404を介してオフ・コアに送信される。
【0032】
したがって、動作に際して、コア制御マイクロエンジン(例えば、413)は、コアのデータ移動および計算を調整する。マイクロエンジンは、活性化メモリ・アドレス読出し動作を発行して、入力活性化ブロックをベクトル行列乗算ユニットにロードする。マイクロエンジンは、重みメモリ・アドレス読出し動作を発行して、重みブロックをベクトル行列乗算ユニットにロードする。マイクロエンジンは、ベクトル行列乗算ユニットに計算動作を発行し、ベクトル行列乗算ユニットに部分和ブロックを計算させる。
【0033】
マイクロエンジンは、部分和ソースから部分和データを読み出すこと、部分和算術ユニットを使用して計算すること、または部分和データを部分和ターゲットに書き込むことのうちの1つまたは複数を行うために、部分和読出し/書込みメモリ・アドレス動作、ベクトル計算動作、または部分和通信動作のうちの1つまたは複数を発行する。部分和データを部分和ターゲットに書き込むことは、部分和ネットワーク・インターフェースを介してコアの外部と通信すること、または部分和データを活性化算術ユニットに送信することを含んでもよい。
【0034】
マイクロエンジンは、活性化関数算術ユニットが出力活性化ブロックを計算するように、活性化関数計算動作を発行する。マイクロエンジンは、活性化メモリ・アドレス書込みを発行し、活性化メモリ・インターフェースを介して出力活性化ブロックが活性化メモリに書き込まれる。
【0035】
したがって、所与のコアに対して様々なソース、ターゲット、アドレス・タイプ、計算タイプ、および制御構成要素が定義される。
【0036】
ベクトル-ベクトル・ユニット410のソースは、ベクトル行列乗算(VMM)ユニット409、パラメータ・メモリ408からの定数、部分和メモリ411、前のサイクルからの部分和結果(TGT部分和)、および部分和ネットワーク403を含む。
【0037】
ベクトル-ベクトル・ユニット410のターゲットは、部分和メモリ411、後続のサイクルの部分和結果(SRC部分和)、活性化ユニット412、および部分和ネットワーク403を含む。
【0038】
したがって、所与の命令は、活性化メモリ405からの読出しもしくは書込み、重みメモリ407からの読出し、または部分和メモリ411からの読出しもしくは書込みを行ってもよい。コアによって実行される計算動作は、VMMユニット409によるベクトル行列乗算、ベクトル-ベクトル・ユニット410によるベクトル(部分和)演算、および活性化ユニット412による活性化関数を含む。
【0039】
制御動作は、プログラム・カウンタ、およびループ・カウンタまたはシーケンス・カウンタあるいはその両方を更新することを含む。
【0040】
したがって、メモリ動作は、重みメモリ内のアドレスから重みを読み出し、パラメータ・メモリ内のアドレスからパラメータを読み出し、活性化メモリ内のアドレスから活性化を読み出し、部分和メモリ内のアドレスに対して部分和を読み取る/書き込むために発行される。計算動作は、ベクトル行列乗算、ベクトル-ベクトル演算、および活性化関数を実行するために発行される。通信動作は、ベクトル-ベクトル・オペランドを選択し、部分和ネットワーク上でメッセージをルーティングし、部分和ターゲットを選択するために発行される。層出力にわたるループおよび層入力にわたるループは、マイクロエンジン内のプログラム・カウンタ、ループ・カウンタ、およびシーケンス・カウンタを指定する制御動作によって制御される。
【0041】
本開示の実施形態によれば、グローバル・メモリ・アレイからのデータ分散が提供され得る。グローバル・メモリ・アレイは複数の要素を含み、各要素はメモリ要素とバッファとを備える。重みおよび命令は、ネットワークを介してグローバル・アレイからコアのアレイに提供される。コアの例示的な構成は、図3に関して上述されている。図3におけるメモリ303は、グローバル・メモリ・アレイに関連して説明されたように実装されてもよい。
【0042】
上記のように、ニューラル推論のための多くのコア・アーキテクチャは、計算能力に大きな利点を提供する。しかしながら、ニューラル・ネットワークの重みおよびパラメータが時間どおりに計算コアに提供されない場合、コアは有用な計算を実行することができない。その結果、ニューラル・チップの性能は、ニューラル・ネットワークの重みおよびパラメータをチップ上の計算コアに配信する能力によって制限される場合がある。オン・チップ・メモリは、ダイナミック・ランダム・アクセス・メモリ(DRAM)または高帯域幅メモリ(HBM)などの典型的なオフ・チップ・メモリと比較して、メモリ帯域幅を大幅に改善する。さらに、オン・チップ・メモリは、オフ・チップ・メモリよりもエネルギー効率が高く、電力効率の高いニューラル推論システムにつながる。様々な実施形態において、オン・チップ・メモリは、スタティック・ランダム・アクセス・メモリ(SRAM)または他の組込みメモリを含んでもよい。しかしながら、処理速度に見合った速度でニューラル・ネットワークの重みをコアに配信することは依然として課題である。
【0043】
畳み込みニューラル・ネットワーク(CNN)を用いることにより、特定の効率を実現することができる。CNNでは、同じ重み行列(畳み込みフィルタと呼ばれることもある)が繰り返し使用される。使用されるオン・チップ・メモリの量を最小限に抑えるには、所与の重み行列を重複なしで1つの場所に格納することが好ましい。大規模なニューラル・ネットワークを格納するために、オン・チップ・メモリのいくつかの実施形態は、多くのメモリ要素の集合体から構成される。多くのコアがメモリ重みのターゲットであり得ることも理解されよう。これは、多対多(多数のメモリ要素対多数のコア)の通信の問題を引き起こす。重みのブロードキャストは、ネットワーク・オン・チップ(NoC)の輻輳を引き起こす可能性があり、多くの競合およびパイプラインのストールが発生し、ブロードキャスト帯域幅の低下につながる場合がある。
【0044】
上記で概説したように、ニューラル推論チップの様々な実施形態において、ニューラル・ネットワーク推論を加速させるために、ニューラル推論コアのグリッドが提供される。様々な実施形態において、命令の事前スケジューリングが提供される。ニューラル・ネットワーク評価は、規則的な計算パターンを含み、したがって、高い性能を実現するために、ストールなしで命令を事前にスケジュールすることができる。しかしながら、すべてのニューラル・ネットワークの重みが事前にスケジュールされた通りにジャスト・イン・タイムでコアに配信されることが好ましい。重み配信ネットワークが輻輳し、重み配信がストールしている場合、ニューラル・ネットワーク評価の事前スケジューリングは失敗する。
【0045】
本開示は、メモリ要素のグリッドから計算コアのグリッドに重みパラメータを配信するために、ストールなしの重み配信ネットワーク・オン・チップを提供する。最初に、1次元方式を以下に示し、次いで、2次元グリッド方式に拡張する。これらの手法は、ストライピングなどの異なる様々な重み分散をサポートするようにさらに拡張される(コアの異なる行が、異なる重みを得る)。
【0046】
命令をメモリ要素に配信してメモリ要素からコンピューティング・コアにデータを配信する時間が変動する場合でも、本明細書に記載の手法は、競合することなく機能する。これらの手法は、任意の列に任意の順序でアクセスできる命令フローに対処する。新しい方式は、すべての列が同時に開始するという制約を解消する。
【0047】
本開示の一態様によれば、ネットワーク・オン・チップ(NoC)アプリケーションのために、競合およびストールのないブロードキャストが提供される。いくつかの実施形態において、データがNoC上でバックプレッシャされず、データが連続して提供され(NoC上に空のスロットはない)、データが衝突なしのままであるようなネットワーク上のゼロ・ストール・サイクルで、ブロードキャスト・データが複数のソースからネットワーク・オン・チップ(NoC)を介して提供される。
【0048】
したがって、本開示は、以下を含む多くの利点を提供する。
- 分散メモリ・ストレージを可能にする複数のソースを組み込む。
- 正確で決定論的なスケジュールされた動作。
- フル・スループットが必要である(空サイクルなし、データ損失なし)。
- ルータ設計の簡素化 - 非常に広いデータ経路用の最小限の設計。
- プログラムの簡素化(例えば、すべてのノードで同じプログラム)。
【0049】
ここで図5を参照すると、本開示の実施形態による、ネットワーク・オン・チップの例示的な1次元ブロードキャストが示されている。図示のように、異なる時間t=0および時間t=1において、第1のソース501(「ソース1」)がバス上の複数の宛先にブロードキャストする。次いで、時間t=2および時間t=3において、第1のソースのブロードキャストと重複(競合)することなく、またネットワークに空のサイクルを導入することなく、第2のソース510(「ソース2」)がブロードキャストされる。図示された例示的な実施形態では、2つのブロードキャスト・ソースおよび(垂直のボックスまたはセルによって示された)8つの宛先が存在する。しかしながら、データのソースおよび宛先が必要に応じて拡大/縮小され得ることが当業者によって理解されよう。例示的な実施形態において、第1のソース501は中間点(または第4の宛先)に導入され、第2のソース510は異なる場所(例えば、第1のソース501より1つ下の宛先)に導入される。矢印520によって示されているように、データは最終的にすべての場所に到達することになる。
【0050】
ここで図6を参照すると、1次元ブロードキャスト・ネットワーク・オン・チップの例示的なベースラインが示されている。この例では、第1のソース(「ソース1」)は、4つの連続するデータ・ワード(0:3)を送信する。時間の増分が進むごとに、データ・ワードは垂直に反対方向に伝播する。データが伝播するにつれて、すべての宛先が、すべてのデータ・ワード(0:3)を順番に受信する。時間t=4において、ソース1がデータを導入した最初の宛先セルは、データの伝播により消去または空にされる。このデータの消去は、時間t=8に示されるように、各データ(0:3)が8つの垂直な宛先すべてを超えて伝播するまで継続する。
【0051】
図7は、1次元ブロードキャスト・ネットワーク・オン・チップの別の例示的なベースラインが示されており、1クロック・サイクルのレイテンシに起因して、空のセルと競合との両方が提示されている。ここでは、t=0列およびt=1列に示されるように、一旦、第1のソース(「ソース1」)が、2つの連続するデータ・ワード(0:1)を第4のセル701に送信する。次いで、t=2列およびt=3列に示されるように、第2のソース(「ソース2」)が、2つの連続するデータ・ワード(2:3)を隣接するセル720に送信する。前述のように、データは垂直に反対方向に伝播する。その結果、(図示のように、列t=2から列t=5まで)複数のセルが空になり、効率および性能が低下する。さらに、(図示のように、列t=2から列t=5まで、またはデータが宛先を伝播するまで)複数のセルが、ソース1とソース2との両方からのデータが同時に存在することによってもたらされた競合を有しており、効率および性能がさらに低下する。本開示は、そのような空のおよび競合するデータ・フローを回避するための新規な手法を提供する。
【0052】
図8は、空のまたは競合するデータ・ブロードキャストの発生を回避するためにJ方式データ・フローを組み込むことができる、本開示による例示的な実施形態を示す。図示のように、ソース1が4つの連続するデータ・ワード(0:3)を送信すると、データは垂直に一方向に伝播する。この例示的な実施形態では、折れた矢印のデータ・フローによって示されているように、データは、最上部セルに到達するまで北(N)(または上向き)に流れ、最上部セルにおいて、データは、反対方向(S)(または下向き)の配信のためにループバックされる。データが下向きの軌跡上にある間(すなわち、時間t=3から始まる)、データは宛先アドレスに配信される。
【0053】
図9は、空のまたは競合するデータ・ブロードキャストの発生を回避するためにJ方式データ・フローを組み込むことができる、本開示による別の例示的な実施形態を示す。ここでは、時間t=0および時間t=1において、ソース1が2つの連続するデータ・ワード(0:1)を送信すると、次いで、時間t=2および時間t=3において、第2の隣接するソース2が2つの連続するデータ・ワード(2:3)を送信する。データ・ワードは、垂直に一方向(N)に伝播し、反対方向(S)の配信のためにループバックされ、ソース1のデータのループバック(すなわち、伝播方向の反転)は時間t=3から始まり、ソース2のデータのループバック(すなわち、伝播方向の反転)は時間t=5から始まる。図示のように、ソース1の入力とソース2の入力との間に競合も空のデータ・セル/アドレスも存在せず、これは伝播経路全体にわたって引き続き当てはまる。
【0054】
図10は、空のまたは競合するデータ・ブロードキャストの発生を回避するためにJ方式データ・フローを組み込むことができる、本開示による別の例示的な実施形態を示す。ここでは、時間t=0および時間t=1において、ソース1が2つの連続するデータ・ワード(0:1)を送信すると、次いで、時間t=3および時間t=4において、第2の隣接するソース2が2つの連続するデータ・ワード(2:3)を送信する。ここでは時間t=2においてソース2が送信しないことに留意されたい。したがって、空のセルの発生を回避するために、ソース2は、(時間t=3において)より高い位置(すなわち、上から2番目のセル)でその初期データを送信する。データ・ワードは、送信されると、再び垂直に一方向(N)に伝播し、前述のように反対方向(S)の配信のためにループバックされる。
【0055】
本開示の一態様によれば、図8図10に示す例のそれぞれについて、時間t=8でのデータ伝播は同じである。したがって、8つの宛先への配信パターンは、図示されている3つのJ方式の例すべてにわたって同じである。
【0056】
図11は、2次元ブロードキャスト・ネットワーク・オン・チップにおいてJ方式データ・フローを組み込むことができる、本開示による例示的な実施形態を示す。時間t=1において破線によって示されているように、コア(0:3)が送信を開始すると、データは、上向きに、またはN方向に移動し始める。時間t=2において、このデータは、コールアウト1101に示すように、上限に達した後、本明細書に開示されたJ方式に従って方向を転換および反転する。したがって、時間t=3において、コア(0:3)の送信は最初の2つの行に存在し、コア1およびコア2からのデータは1番目の行に共存し、コア0およびコア3からのデータは2番目の行に共存する。
【0057】
時間t=4において、第2のソースはコア(4:7)からデータを送信し始め、データは、実線によって示されているように、同様のJ方式で伝播する。時間t=5において、第2のコアからのデータ送信は、NからSに方向を転換および反転し始める。したがって、時間t=6において、第1のコア(0:3)からのデータは、完全に方向を変えてすべてS方向に伝播し、最初の送信0が出力に配信され、一方、第2のコア(4:7)からのデータは、図示のように、最初の2行の中に位置しており、コア5およびコア6からのデータは1番目の行に共存し、コア4およびコア7からのデータは2番目の行に共存する。
【0058】
時間t=7において、第3のソースが、コア(8:11)からデータを送信し始め、データは、一点鎖線で示されているように、同様のJ方式で伝播する。この時点で、第1のコア(0:3)からのデータの半分は出力に配信されており、コア2およびコア3からのデータのみが依然としてS方向に伝播している状態である。第2のソース(すなわち、コア4:7)からのデータ送信は、ほぼ完全に方向が反転しており、コア7からのデータは上限にあり、次のクロック・サイクルでS方向に転換しようとしている。第3のソース(すなわち、コア8:11)からのデータはいずれも、まだ方向を転換させていない。
【0059】
本開示の一態様によれば、第1の(垂直)次元について上述したJ方式データ伝播フローは、第2の(水平)次元においても採用され得る。この水平次元はコールアウト1102に示されており、データは、破線矢印によって示されているように、最初にW(または左)方向に伝播し、W/左境界に到達するとE(または右)方向に反転する。
【0060】
図11に示す下部のコアを参照すると、時間t=3において、コア(0:3)からのデータの第1の送信が最初の行に示されており、0データはすでにE方向に反転されており、同じコア(0:3)からのデータの第2の送信は、2番目の行で送信を開始することができ、データはいずれも方向を反転させていない。これは、時間t=4に示すように、コア(0:3)からのデータが通過するときに各行にマルチキャストされ続けることができる。次に、時間t=5に示すように、同じWからEへのJ方式の伝播に従うコア(4:7)の第2のソースからのデータは、同時に送信を開始することができる。この例示的な2次元の実施形態では、データが垂直次元から到着するとデータが水平次元に供給されるように、データは最初に(NからSへ)垂直次元に伝播され、次いで(WからEへ)水平次元に伝播される。時間t=6および時間t=7に示すように、複数のソースの同時ブロードキャストでは、この2次元ブロードキャストの空のまたは競合するデータ・フローは依然として発生しない。
【0061】
図12は、本開示による、例示的な2次元J方式のタイミング図を示す。図示のように、列内のコアはデータを同時に送信し、各列は、そのデータを、(北の行0の列0における)コア3の送信が(北の行0の列1における)コア4のデータと重複するが、異なるバス上に提示されるように、順序をずらして送信する。ここでは、点線1201は、タイミングの1サイクル・オフセットを示す。本開示の一態様によれば、2つの列からのソースを使用することによって、データの2つの異なるストリームを並行して配信することができる。例えば、列1からのソース1は、偶数行に配信することができ、列2からソース2は、(競合なしに)奇数行に配信することができる。この特徴は、データのNストリームの場合に真となるように、一般化され得る。この手法の利点は、一意のデータを分散する有効な帯域幅を増加させることである。
【0062】
本開示の一態様によれば、モデル・ネットワーク・オン・チップ(MNoC)の構造定義は、J方式の概要、ルーティング規則(運用)、フィールド(信号)定義によるパケット・フォーマット、直接アドレス指定および分散フラグによるアドレス指定、ルータ構造、ルータ経路(ルータ経路のリスト)、読出し/書込みトランザクション、外部インターフェース、レイテンシ/スキュー解析を含むことができる。図5図12に示すプロトコルのテキスト表現は、次のように表すことができる。
「J」方式プロトコル疑似コード:
- コア・アレイの端まで北へ行く
- 南へループする
- コア・アレイの端まで南へ移動する
- 南への移動中、行ごとに、Y分散フラグ(または直接アドレス指定モードの行アドレス)が一致する場合、行に配信する
- コア・アレイの端まで西へ行く
- 東へループする
- コア・アレイの端まで東へ移動する
- 東への移動間、列ごとに、X分散フラグ(または直接アドレス指定モードの列アドレス)が一致する場合、コアに配信する
【0063】
図13は、本開示による、例示的なモデル・ネットワーク・オン・チップJ方式の概要を示す。いくつかの実施形態において、Y-X次元ルーティングは、データが最初にY次元で伝播し、次いでX次元で伝播するように順序付けられる。したがって、データ・パケットは2つの「J」形状のルートを順番にたどる。
I.第1のルート:(実線のJ方式の矢印で示されているように)北の次に南へ 1301
II.第2のルート:(破線のJ方式の矢印で示されているように)西の次に東へ 1302
「J」ルートの経路は、データを、アレイの終端まで移動するように伝播し、次いで、データはループバックされる。ルートの第2の区間(ループバックの後)では、データは、アレイの全長を(マルチキャスト・アドレス指定モードで)移動する。データは、ルートの第2の区間で(データがループバックされた後に)配信される。また、次の2つのアドレス指定・モードを含めることができる。
I.一致するすべての宛先にデータを配信するマルチキャスト・アドレス指定
II.コアの行列インデックスに基づいて、一致する1つの宛先にデータを配信する直接アドレス指定
【0064】
本開示の一態様によれば、モデル・ネットワーク・オン・チップは、ルーティング規則を含むことができる。例えば、Y次元またはX次元内でパケットが常に一方の方向を他方の方向より先に移動するような規則を実施することができる。
- Y次元:北の次に南へ
- X次元:西の次に東へ
さらに、アレイの北(または西)端でパケットが北から南(西から東)へループされるような規則を実施することができる。さらに、アレイの南(または東)端でパケットが破棄されるような規則を実施することができる。また、パケット投入に関する次のような規則を実施することができる。
- アレイ内では、パケットは常に北方向に投入される
- アレイの外側からアレイにデータを投入するための特別な境界ケース
- さらに、パケット配信に関して、アドレスが一致した場合の以下のような規則を実施することができる。
- 東に向かうパケットがコアに配信される
- 南に向かうパケットが西方向に配信される
- 分散フラグ(マルチキャスト)モード:パケットは、配信され、同じ方向に伝播し続ける
- 直接アドレス指定モード:パケットは、配信され、同じ方向に伝播し続けることはない
【0065】
図14は、本開示による例示的なパケット・フォーマットを示す。図示されている例は、16×16コア・アレイ内のパケットの場合である。いくつかの実施形態において、「ext_in_」および「ext_out_transaction」は、相互排他的であり、両方が同時に「1」であってはならない。また、この構成のいくつかの例示的なトランザクション定義は次の通りである。
~ADDR_VALID&~DATA_VALID=トランザクションなし(アイドル)
~ADDR_VALID&DATA_VALID=無効な状態(エラー)
ADDR_VALID&~DATA_VALID=読出しトランザクション
ADDR_VALID&DATA_VALID=書込みトランザクション
【0066】
図15は、本開示による例示的なモデル・ネットワーク・オン・チップ・アドレス指定を示す。1501には直接アドレス指定(北/南方向)が示されている。1502には直接アドレス指定(東/西方向)が示されており、CORE_ROW_IDおよびCORE_COL_IDは、コア・アレイ内のコアの位置によって決定される。また、パケットは、パケット内の4ビットのDISTR_ROW_IDまたはDISTR_COL_IDと一致する固有のコアに配信される。1503には直接フラグ(マルチキャスト)アドレス指定が示されており、DISTR_FLAGSは、ブール一致方程式に従ってDEST_FLAGSと比較される。また、DEST_FLAGSは、コア制御レジスタにおいてコアごとに設定される。さらに、パケットは、パケット内のDISTR_FLAGSとコア内に設定されたDEST_FLAGSとを比較するブール一致方程式に従って一致するすべてのコアに配信される。NoCアドレス指定において採用されるいくつかの例示的なブール一致方程式は、以下を含むことができる。
- ANY match=OR_REDUCE(DISTR_FLAGS&DEST_FLAGS)
- ALL match=~OR_REDUCE(DISTR_FLAGS&~DEST_FLAGS)
- =AND_REDUCE(~DISTR_FLAGS|DEST_FLAGS)//代替のDeMorgan同等の仕様
- NOT ANY match=~OR_REDUCE(DISTR_FLAGS&DEST_FLAGS)
- NOT ALL match=OR_REDUCE(DISTR_FLAGS&~DEST_FLAGS)
- ここで、「~」は反転であり、「&」はビット単位のAND演算であり、「|」はビット単位のOR演算である
【0067】
図16は、本開示によるモデル・ネットワーク・オン・チップのための例示的な1次元ルータを示す。この例示的なモデルでは、前のサイクルからの古いデータが保持されないように、レジスタ値はサイクルごとに更新される。タイミングは、各レジスタが1クロック・サイクルの遅延を起こし、各終点も1つのレジスタを含むというようなものである。ここでは、データ伝播は、(「RX_North」、「RX_South」および「TX_North」、「TX_South」の矢印によって示されているように)垂直次元での伝播である。「RX_South」データは、第1の動的マージ(dynamic merge)1601および対応するレジスタ1611の中へ上向きに供給され、「TX_North」として出力され得、「RX_North」データは、第2の動的マージ1602および対応するレジスタ1612またはY終点1622あるいはその両方の中へ下向きに供給され、「TX_South」として出力され得る。
【0068】
図17は、本開示によるモデル・ネットワーク・オン・チップのための例示的な2次元ルータを示す。この例示的なモデルでは、前のサイクルからの古いデータが保持されないように、レジスタ値はサイクルごとに更新される。タイミングは、各レジスタが1クロック・サイクルの遅延を起こし、各終点も1つのレジスタを含むというようなものである。ここでは、データ伝播は、(「RX_North」、「RX_South」および「TX_North」、「TX_South」の矢印によって示されているように)垂直次元、ならびに(「RX_West」、「RX_East」および「TX_West」、「TX_East」の矢印によって示されているように)水平次元での伝播である。「Rx_South」データは、第1の動的マージ1701および対応するレジスタ1711の中へ北(または上向き)に供給され、「TX_North」として出力され得、「RX_North」データは、第2の動的マージ1702および対応するレジスタ1712またはY終点1722あるいはその両方の中へ南(または下向き)に供給され、レジスタ1712を通過すると、出力は「TX_South」となり得る。垂直次元から水平次元への配信が行われるのは、Y終点1722においてである。また、「RX_East」は、第3の動的マージ1703を介して西(または左)に供給され、「TX_West」として出力され得る。「RX_West」は、第4の動的マージ1704を介して東(または右)に供給され、「TX_East」またはX終点1723あるいはその両方として出力され得る。
【0069】
本開示の別の態様によれば、ルータの動作を管理するために動的分割を含めることができる。限定ではなく説明を目的として、例示的な動的分割を次のように実装することができる。
【表1】

図17に示すY終点1722およびX終点1723は、アドレス一致論理を実装することができる。いくつかの実施形態において、直接アドレス指定モードのみにおいて、パケットの直接アドレスがコア行/列IDと一致する場合、パケットは配信され、その元の方向に伝播し続けることはない。動的マージ1701~1704は、いずれかの入力から有効なデータ・パケットを送信する。データ・パケットは、衝突(2つの同時に有効なパケットが動的マージに入力されること)を回避するようにスケジュールされなければならない。衝突が発生した場合、ERRORフラグがアサートされ、データ・パケットのうちの1つが、次のように破棄される。
北の動的マージ1:北行き(RX_South)がローカルよりも優先される(すなわち、ローカルのデータは削除される)。
南の動的マージ2:南行き(RX_North)がloopbackNよりも優先される(すなわち、loopbackNのデータは破棄される)。
西の動的マージ3:西行き(RX_East)が南よりも優先される(すなわち、南のデータは破棄される)。
東の動的マージ4:東行き(RX_West)がloopbackWよりも優先される(すなわち、loopbackWのデータは破棄される)。
【0070】
図18は、本開示によるモデル・ネットワーク・オン・チップのためのルータ経路の例示的なリストを示しており、「サイクル」=モデル・ネットワーク・オン・チップルータ内のサイクルである。ルータ経路のこの例示的なリストは、図17に示す例示的な実施形態に関連する。外部インターフェースからコア・アレイへの書込みまたは読出し要求が送られると、外部制御インターフェースは、コア(0,0)の南行き経路(RX_North)にデータ・パケットを投入する。これは「ext_in_transaction」ビット=1を設定することによって実装することができる。データ・パケットは通常のJ方式に従い、南に向かう。これは、YアドレスおよびXアドレスを宛先に到達するように通常どおりに設定することによって実装することができる。コア・アレイから外部インターフェースへの書込みまたは読出し要求が送られると(例えば、返された読み取りデータ)、コアは、ローカル・コアI/Fを使用して北行き経路にデータを投入する。これは、「ext_out_transaction」ビット=1を設定することによって実装することができる。データは、コア・アレイの端まで北へ伝播し、南へループバックし、行0に配信される。これは、Yアドレス=直接アドレス・モード、行0を設定することによって実装することができる。また、Xアドレスを任意の所望の値に設定することによって、データは、コア・アレイの端まで西へ伝播することができる。データは、外部制御インターフェースに配信され得、ここで「ext_out_transaction」ビットは、コア(0,0)においてデータを東へループバックするのではなく、データをコア・アレイから送信する。また、いくつかのシナリオでは、バースト読出しなどにおいて、コア0,0からの「ext_out_transactions」が「ext_in_transactions」と衝突する可能性がある。したがって、コア0,0ルータ内のWバイパスは、他のすべてのコアからの「ext_out_transactions」を「ext_in_transactions」と重複させ、衝突を回避する。
【0071】
図19は、本開示によるモデル・ネットワーク・オン・チップのための例示的な外部インターフェースを示す。図示されたこの例示的な実施形態では、コア(0,0)構成は、分割N1930と、分割Wa,b1931とがループバックするよう設定されるように、設定され得る。外部インターフェースから移動するデータについて:
- 「ext_in_transaction」==「1」を設定する。
- 動的マージ2 1902は、外部データ・パケットを通過させるか、またはデータ・パケットを北行き経路からループバックする。
- 分割Wa,bは、ext_in_transactionsを西行き経路へループバックする。
外部インターフェースに移動するデータについて:
- 「ext_out_transaction」==「1」である場合、データ・パケットは、TX_Westから外部インターフェースに行き、分割Wa,bによってループバックされない。
この例示的な実施形態は、データがコアの西側から配信されるものとして示しているが、必要に応じて代替構成が構築され得る。
【0072】
図20は、本開示によるモデル・ネットワーク・オン・チップの例示的なアレイ論理区分化を示す。区分は、線P1および線P2によって示されており、線P1および線P2は、データが任意の所与のサブアレイ内で(コア全体の端ではなく)そのサブアレイの端まで伝播し、その後J方式フロー・パターンでループバックするように、コアのアレイの中央で交差する。この例示的な実施形態では、アレイ論理区分化は、2050において識別されるリンク無効化と区分境界でのループバック信号との両方を使用することによって達成される。ルーティング・プロトコルに関しては、各論理サブアレイは、独立した完全なアレイであるかのように動作すべきである。このように、各サブアレイJ方式は独立しており、したがって、これらは異なるパターンを有してもよい。リンク無効化定義は、各指向性インターフェース{N,S,E,W}が、アレイを区分化するために使用される無効化信号を有するように実装され得る。また、データ・トランザクションと外部トランザクションとの両方のリンク無効化およびループバック設定に基づく例示的なリンク動作が図21に列挙されている。「ゼロ」の場合、すべての信号(addr_valid、addr、data_valid、dataなど)はゼロに設定されるが、「ext_in_transactions」は引き続き左上に投入され、アレイ内の任意のコアに到達することができる。図20に示す論理サブアレイ2025は、4つのコアを含む正方形として示されているが、必要に応じて、代替のサイズ/形状のサブアレイ(例えば、長方形)が実装され得る。
【0073】
図22を参照すると、ニューラル活性化を計算するための方法が示されている。2201において、複数のネットワーク・ノードにおいてデータが受け入れられる。複数のネットワーク・ノードは、ネットワーク・オン・チップによって相互接続される。ネットワークは、少なくとも一対の有向経路を含む。各対の経路は、相対する方向および共通終端を有する。2202において、データは、対の有向経路のうちのソース・ノードから対の有向経路の共通終端までの第1の経路に沿って、および対の有向経路のうちの対の有向経路の共通終端から1つまたは複数の宛先ノードまでの第2の経路に沿って、伝播される。
【0074】
本開示の様々な実施形態は、命令バッファと、水平バッファと、垂直バッファと、レイオーバ・バッファとの組合せを使用して、1次元または2次元のメモリ・アレイにおいて命令およびデータ分散を提供する。本開示が、追加のバッファを追加することによってより高次元のアレイに適用可能であることが理解されよう。これらの実施形態において、命令発行からデータ・アレイからのデータ出力までの時間は、各フェーズにかかる時間が異なる場合でも一定である。列は、ランダムな順序でアクセスされてもよい。1次元よりも高い次元を用いる場合、同じ列にアクセスする2つの命令は、垂直分散時間によって区切られるべきである。1次元の場合、垂直分散時間はゼロであり、したがって、制約はない。
【0075】
様々な実施形態において、メモリ・アレイ、命令バッファ、および水平データ・バッファを含むシステムが提供される。命令分散とメモリ分散とのサイクル数の合計は、すべての命令について一定である。
【0076】
様々な実施形態において、2次元メモリ・アレイが提供される。水平バッファは、メモリ・アレイの各行に提供される。垂直バッファは、メモリ・アレイの各列に提供される。命令分散と、垂直バッファに沿ったデータ分散と、水平バッファに沿ったデータ分散とのサイクル数の合計は一定である。
【0077】
様々な実施形態において、2次元メモリ・アレイが提供される。レイオーバ・バッファは、メモリ・アレイ内の各位置に提供される。命令分散と、垂直バッファに沿ったデータ分散と、水平バッファに沿ったデータ分散と、レイオーバ・バッファのデータ転送とのサイクル数の合計は一定である。
【0078】
ここで図23を参照すると、コンピューティング・ノードの一例の概略図が示されている。コンピューティング・ノード10は、好適なクラウド・コンピューティング・ノードの一例に過ぎず、本明細書に記載の実施形態の使用または機能性の範囲に関していかなる限定も示唆することを意図していない。それでもなお、コンピューティング・ノード10は、本明細書で上述した機能性のいずれかを実装されること、または実行すること、あるいはその両方が可能である。
【0079】
コンピューティング・ノード10には、多数の他の汎用もしくは専用のコンピューティング・システム環境またはコンピューティング・システム構成で動作可能なコンピュータ・システム/サーバ12が存在する。コンピュータ・システム/サーバ12での使用に好適であり得るよく知られているコンピューティング・システム、コンピューティング環境、またはコンピューティング構成、あるいはその組合せの例には、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルド・デバイスまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能な家電製品、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムまたはデバイスのいずれかを含む分散クラウド・コンピューティング環境などが含まれるが、これらに限定されない。
【0080】
コンピュータ・システム/サーバ12は、コンピュータ・システムによって実行されるプログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的な文脈で説明される場合がある。一般に、プログラム・モジュールは、特定のタスクを実行する、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、構成要素、ロジック、データ構造体などを含んでもよい。コンピュータ・システム/サーバ12は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散クラウド・コンピューティング環境において実施されてもよい。分散クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルとリモートとの両方のコンピュータ・システム記憶媒体内に配置されてもよい。
【0081】
図23に示すように、コンピューティング・ノード10内のコンピュータ・システム/サーバ12は、汎用コンピューティング・デバイスの形式で示されている。コンピュータ・システム/サーバ12の構成要素は、1つまたは複数のプロセッサまたは処理ユニット16と、システム・メモリ28と、システム・メモリ28を含む様々なシステム構成要素をプロセッサ16に結合するバス18とを含み得るが、これらに限定されない。
【0082】
バス18は、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレイティッド・グラフィックス・ポート、および様々なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含む、いくつかのタイプのバス構造体のいずれかの1つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャには、業界標準アーキテクチャ(ISA)バス、マイクロ・チャネル・アーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ・エレクトロニクス・スタンダード・アソシエーション(VESA)ローカル・バス、ペリフェラル・コンポーネント・インターコネクト(PCI)バス、ペリフェラル・コンポーネント・インターコネクト・エクスプレス(PCIe)、およびアドバンスト・マイクロコントローラ・バス・アーキテクチャ(AMBA)が含まれる。
【0083】
様々な実施形態において、1つまたは複数の推論処理ユニット(図示せず)がバス18に結合される。そのような実施形態において、IPUは、バス18を介してメモリ28からデータを受信するか、またはメモリ28にデータを書き込んでもよい。同様に、IPUは、本明細書に記載のように、バス18を介して他の構成要素と対話してもよい。
【0084】
コンピュータ・システム/サーバ12は、典型的には、様々なコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム/サーバ12によってアクセス可能な任意の利用可能な媒体とすることができ、揮発性媒体と不揮発性媒体との両方、取り外し可能な媒体と取り外し不可能な媒体との両方を含む。
【0085】
システム・メモリ28は、ランダム・アクセス・メモリ(RAM)30またはキャッシュ・メモリ32あるいはその両方などの揮発性メモリの形式のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム/サーバ12は、他の取り外し可能/取り外し不可能な揮発性/不揮発性コンピュータ・システム記憶媒体をさらに含んでもよい。単なる例として、取り外し不可能な不揮発性磁気媒体(図示せず、典型的には「ハード・ドライブ」と呼ばれる)との間で読み書きするために、ストレージ・システム34を設けることができる。図示されていないが、取り外し可能な不揮発性磁気ディスク(例えば、「フロッピ・ディスク」)との間で読み書きするための磁気ディスク・ドライブ、およびCD-ROM、DVD-ROM、または他の光学媒体などの取り外し可能な不揮発性光学ディスクとの間で読み書きするための光ディスク・ドライブを設けることができる。そのような場合、それぞれを1つまたは複数のデータ媒体インターフェースによってバス18に接続することができる。以下でさらに図示および説明するように、メモリ28は、本開示の実施形態の機能を実行するように構成されたプログラム・モジュールのセット(例えば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含んでもよい。
【0086】
プログラム・モジュール42のセット(少なくとも1つ)を有するプログラム/ユーティリティ40、ならびに、限定ではなく例としてオペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データは、メモリ28に記憶されてもよい。オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データ、またはそれらの何らかの組合せのそれぞれは、ネットワーキング環境の実装を含んでもよい。プログラム・モジュール42は、一般に、本明細書に記載の実施形態の機能または方法論あるいはその両方を実行する。
【0087】
また、コンピュータ・システム/サーバ12は、キーボード、ポインティング・デバイス、ディスプレイ24などの1つもしくは複数の外部デバイス14、ユーザがコンピュータ・システム/サーバ12と対話できるようにする1つもしくは複数のデバイス、またはコンピュータ・システム/サーバ12が1つもしくは複数の他のコンピューティング・デバイスと通信できるようにする任意のデバイス(例えば、ネットワークカード、モデムなど)、あるいはその組合せと通信してもよい。そのような通信は、入出力(I/O)インターフェース22を介して行うことができる。さらに、コンピュータ・システム/サーバ12は、ネットワーク・アダプタ20を介して、ローカル・エリア・ネットワーク(LAN)、一般的なワイド・エリア・ネットワーク(WAN)、またはパブリック・ネットワーク(例えば、インターネット)あるいはその組合せなどの1つまたは複数のネットワークと通信することができる。図示のように、ネットワーク・アダプタ20は、バス18を介してコンピュータ・システム/サーバ12の他の構成要素と通信する。図示されていないが、他のハードウェア構成要素またはソフトウェア構成要素あるいはその両方をコンピュータ・システム/サーバ12と共に使用できることが理解されるべきである。例として、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが含まれるが、これらに限定されない。
【0088】
本開示は、システム、方法、またはコンピュータ・プログラム製品あるいはその組合せとして具現化されてもよい。コンピュータ・プログラム製品は、プロセッサに本開示の態様を実施させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体(または複数のコンピュータ可読記憶媒体)を含んでもよい。
【0089】
コンピュータ可読記憶媒体は、命令実行デバイスが使用するための命令を保持および記憶することができる有形デバイスとすることができる。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または上記の任意の好適な組合せとすることができるが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストには以下のもの、すなわち、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読出し専用メモリ(ROM)、消去可能プログラマブル読出し専用メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読出し専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピ・ディスク、パンチカードまたは命令が記録された溝内の隆起構造体などの機械的に符号化されたデバイス、および上記の任意の好適な組合せが含まれる。本明細書で使用されるコンピュータ可読記憶媒体は、電波もしくは他の自由に伝播する電磁波、導波路もしくは他の伝送媒体を介して伝播する電磁波(例えば、光ファイバ・ケーブルを通る光パルス)、または電線を介して送信される電気信号などの、一過性の信号自体であると解釈されるべきではない。
【0090】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、または、ネットワーク、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、またはワイヤレス・ネットワークあるいはその組合せを介して外部コンピュータまたは外部記憶デバイスにダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはその組合せを含んでもよい。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体における記憶のために転送する。
【0091】
本開示の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、インストラクション・セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語および「C」プログラミング言語もしくは同様のプログラム言語などの従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードもしくはオブジェクト・コードのいずれかとすることができる。コンピュータ可読プログラム命令は、スタンドアロン・ソフトウェア・パッケージとして全体がユーザのコンピュータ上で、一部がユーザのコンピュータ上で、一部がユーザのコンピュータ上かつ一部がリモート・コンピュータ上で、または全体がリモート・コンピュータ上もしくはサーバ上で実行されてもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して接続されてもよい。いくつかの実施形態では、本開示の態様を実行するために、例えば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路が、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることによって、コンピュータ可読プログラム命令を実行してもよい。
【0092】
本明細書では、本開示の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照しながら、本開示の態様を説明している。流れ図またはブロック図あるいはその両方の各ブロック、および流れ図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実施され得ることが理解されよう。
【0093】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサを介して実行される命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/作用を実施するための手段を作り出すように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、マシンを作り出すものであってもよい。また、これらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/作用の態様を実施する命令を含む製造品を含むように、コンピュータ可読媒体に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイスあるいはその組合せに対して特定の方式で機能するように指示できるものであってもよい。
【0094】
また、コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブル装置、または他のデバイスで実行される命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/作用を実施するように、コンピュータ実施プロセスを作り出すべくコンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにロードされて、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【0095】
図中の流れ図およびブロック図は、本開示の様々な実施形態によるシステム、方法およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能性、ならびに動作を示す。これに関して、流れ図またはブロック図における各ブロックは、指定された論理機能を実装するための1つまたは複数の実行可能命令を含む、命令のモジュール、セグメント、または一部を表すことがある。いくつかの代替の実装形態では、ブロックに記載された機能は、図に記載された順序とは異なる順序で行われてもよい。例えば、連続して示されている2つのブロックは、実際には、関与する機能性に応じて、実質的に同時に実行されてもよく、またはそれらのブロックは、場合によっては逆の順序で実行されてもよい。ブロック図または流れ図あるいはその両方の各ブロック、およびブロック図または流れ図あるいはその両方におけるブロックの組合せは、指定された機能または作用を実行するか、あるいは専用ハードウェアとコンピュータ命令との組合せを遂行する専用ハードウェア・ベースのシステムによって実装され得ることにも留意されたい。
【0096】
本開示の様々な実施形態の説明を例示の目的で提示してきたが、この説明は、網羅的であることも、開示された実施形態に限定されることも意図していない。当業者には、説明した実施形態の範囲から逸脱することなく多くの修正形態および変形形態が明らかであろう。本明細書で使用される用語は、実施形態の原理、実際の適用例、もしくは市場で見られる技術を超える技術的な改良を最もよく説明するように、または本明細書で開示された実施形態を当業者が理解することが可能になるように選択されたものである。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18A
図18B
図19
図20
図21A
図21B
図22
図23