(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-04
(45)【発行日】2023-10-13
(54)【発明の名称】ハードウェア・アクセラレータとインターフェースするための方法
(51)【国際特許分類】
G06F 9/38 20180101AFI20231005BHJP
G06N 3/06 20060101ALI20231005BHJP
G06F 9/48 20060101ALI20231005BHJP
【FI】
G06F9/38 370C
G06N3/06
G06F9/48 300Z
(21)【出願番号】P 2022500757
(86)(22)【出願日】2020-06-30
(86)【国際出願番号】 EP2020068377
(87)【国際公開番号】W WO2021008868
(87)【国際公開日】2021-01-21
【審査請求日】2022-11-21
(32)【優先日】2019-07-15
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】ピヴェトー、クリストフ
(72)【発明者】
【氏名】イオアンノウ、ニコラス
(72)【発明者】
【氏名】クラウチェック、イゴール
(72)【発明者】
【氏名】レ ガロ-ブルドー、マニュエル
(72)【発明者】
【氏名】セバスティアン、アブ
(72)【発明者】
【氏名】エレフセリウー、エヴァンゲロス、スタブロス
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2017-138867(JP,A)
【文献】米国特許出願公開第2017/0228634(US,A1)
【文献】特開2012-256150(JP,A)
【文献】特開2019-003546(JP,A)
【文献】米国特許出願公開第2020/0110991(US,A1)
【文献】米国特許出願公開第2019/0114529(US,A1)
【文献】特表2020-537785(JP,A)
【文献】特開2018-173672(JP,A)
【文献】米国特許出願公開第2009/0217275(US,A1)
【文献】米国特許出願公開第2015/0006341(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06N 3/06
G06F 9/48
(57)【特許請求の範囲】
【請求項1】
少なくとも1つの演算のセットから構成される計算タスクを実行するためのコンピュータ実施方法であって、
パイプライン方式に従って、前記演算のセットのうちのパイプライン可能な演算のサブセットを決定することと、
ハードウェア・アクセラレータによる、決定された前記演算のサブセットの実行を可能にするための単一ルーチンを作成することであって、前記ルーチンが、前記計算タスクの入力データを示す値および構成パラメータの値を引数として有し、前記ルーチンの呼び出しが、前記構成パラメータの前記値に従って前記ハードウェア・アクセラレータ上における前記演算のサブセットのスケジューリングをもたらす、前記作成することと、
前記計算タスクの入力データを受信すると、前記ルーチンを呼び出すことであって、それによって、前記ハードウェア・アクセラレータに前記スケジューリングに従って前記計算タスクを実行させる、前記呼び出すことと、
を含む、方法。
【請求項2】
前記計算タスクが、深層ニューラル・ネットワークを訓練すること、訓練済みニューラル・ネットワークを用いて推論を実行すること、行列ベクトル積、および行列行列積のうちのいずれか1つを含む、請求項1に記載の方法。
【請求項3】
前記少なくとも1つの演算のセットが、順伝播のための第1の演算のセット、逆伝播のための第2の演算のセット、ならびに前記訓練の順伝播および逆伝播の両方のための第3の演算のセットを含み、
前記方法が、前記第1の演算のセット、前記第2の演算のセット、および前記第3の演算のセットのそれぞれについて、それぞれの複合演算を生成することをさらに含み、前記ルーチンを呼び出すことが、生成された前記複合演算の少なくとも一部の各複合演算について単一アプリケーション・プログラミング・インターフェース(API)・コールを実行することを含む、請求項2に記載の方法。
【請求項4】
前記構成パラメータが、前記深層ニューラル・ネットワークの前記構造を記述したパラメータ、および前記深層ニューラル・ネットワークの前記訓練を構成するために必要なパラメータを含む、請求項2に記載の方法。
【請求項5】
アプリケーション・プログラミング・インターフェース(API)を前記ハードウェア・アクセラレータに提供することと、前記APIを用いて前記ルーチンを作成することであって、前記ルーチンの前記呼び出しが、単一のAPIコールである、前記作成することと、をさらに含む、請求項1に記載の方法。
【請求項6】
前記計算タスクを記述した計算グラフを提供することであって、前記計算タスクが、深層ニューラル・ネットワークを伴う、前記提供することと、前記計算グラフのノードを用いて前記少なくとも1つの演算のセットを識別するために前記計算グラフをパースすることによって、前記少なくとも1つの演算のセットを決定することと、前記少なくとも1つの演算のセットの各セットがユーザ・グラフのノードによって表されるように前記ユーザ・グラフを生成することであって、前記ルーチンを呼び出すことが、それぞれの演算のセットを表す前記ユーザ・グラフの各ノードを識別することを含む、前記生成することと、それぞれの識別されたノードについて、前記識別されたノードによって表される前記演算のセットについて単一のAPIコールを実行することと、をさらに含む、請求項1に記載の方法。
【請求項7】
前記計算タスクの結果を示す出力を前記ハードウェア・アクセラレータから受信することをさらに含む、請求項1に記載の方法。
【請求項8】
前記パイプライン方式が、並列に実行され得る互いに独立した演算を前記演算のサブセットのそれぞれが含むように提供される、請求項1に記載の方法。
【請求項9】
前記ハードウェア・アクセラレータが、メモリスタ・クロスバー・アレイを用いて前記パイプライン方式に従って動作し、前記パイプライン可能な演算のサブセットが、前記サブセットの演算の各サブセットが前記メモリスタ・クロスバー・アレイの異なるクロスバー・アレイ上で並列に実行され得るように決定される、請求項1に記載の方法。
【請求項10】
前記ハードウェア・アクセラレータが、メモリスタ・クロスバー・アレイを用いて前記パイプライン方式に従って動作し、前記計算タスクが、深層ニューラル・ネットワークを訓練することを含み、前記深層ニューラル・ネットワークの各層が、前記ハードウェア・アクセラレータの2つのクロスバー・アレイに関連付けられ、前記2つのクロスバー・アレイが、同一の値を含み、前記ハードウェア・アクセラレータに前記計算タスクを実行させることが、前記深層ニューラル・ネットワークの各層について、前記2つのクロスバー・アレイのうちの1つのクロスバー・アレイを順伝播のために使用し、もう1つのクロスバー・アレイを逆伝播のためにのみ使用することを含む、請求項1に記載の方法。
【請求項11】
コンピュータに、請求項1ないし10のいずれか1項に記載の方法を実行させるためのプログラム。
【請求項12】
具現化されたコンピュータ可読プログラム・コードを有するコンピュータ可読記憶媒体を含む、コンピュータ・プログラム製品であって、
前記プログラム・コードは、コンピュータに、請求項1ないし10のいずれか1項に記載の方法を実行させるためのプログラム命令を含む、コンピュータ・プログラム製品。
【請求項13】
コンピュータ・システムであって、
パイプライン方式に従って、計算タスクの少なくとも1つの演算のセットのうちのパイプライン可能な演算のサブセットを決定し、
ハードウェア・アクセラレータによる、決定された前記演算のサブセットの実行を可能にするための単一ルーチンを作成し、前記ルーチンが、前記計算タスクの入力データを示す値および構成パラメータの値を引数として有し、前記ルーチンの呼び出しが、前記構成パラメータの前記値に従って前記ハードウェア・アクセラレータ上における前記演算のサブセットのスケジューリングをもたらし、
前記計算タスクの入力データを受信すると、前記ルーチンを呼び出し、前記ルーチンを呼び出すことによって、前記ハードウェア・アクセラレータに前記スケジューリングに従って前記計算タスクを実行させるように構成される、コンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、デジタル・コンピュータ・システムの分野に関し、より詳細には、演算のセットから構成される計算タスクを実行するためのものに関する。
【背景技術】
【0002】
ハードウェア・アクセラレーションは、汎用CPU上で動作するソフトウェアにおいて可能であるよりも効率的に、いくつかの機能を実行するために特別に作られたコンピュータ・ハードウェアの使用を可能にする。例えば、演算は、汎用コンピュータ・プロセッサ上よりも高速に演算を計算するように設計されたアプリケーション固有のハードウェアにおいて、計算され得る。しかしながら、多数のそれらの演算の計算を改善する必要がある。
【発明の概要】
【0003】
様々な実施形態は、独立請求項の主題によって記述される、演算のセットから構成される計算タスクを実行するための方法、コンピュータ・システム、およびコンピュータ・プログラム製品を提供する。有利な実施形態が、従属請求項において記述されている。本発明の実施形態は、それらが相互排他的ではない場合に、互いに自由に組み合わせられ得る。
【0004】
一態様において、本発明の実施形態は、少なくとも1つの演算のセットから構成される計算タスクを実行するためのコンピュータ実施方法に関する。方法は、パイプライン方式(pipelining scheme)に従って、演算のセットのうちのパイプライン可能な演算のサブセットを決定することと、ハードウェア・アクセラレータによる、決定された演算のサブセットの実行を可能にするための単一ルーチンを作成することであって、ルーチンが、計算タスクの入力データを示す値および構成パラメータの値を引数として有し、ルーチンの呼び出しが、構成パラメータの値に従ってハードウェア・アクセラレータ上における演算のサブセットのスケジューリングをもたらす、作成することと、計算タスクの入力データを受信すると、ルーチンを呼び出すことであって、ルーチンを呼び出すことによって、ハードウェア・アクセラレータにスケジューリングに従って計算タスクを実行させる、呼び出すことと、を含む。
【0005】
別の態様において、本発明の実施形態は、パイプライン方式に従って、計算タスクの少なくとも1つの演算のセットのうちのパイプライン可能な演算のサブセットを決定し、ハードウェア・アクセラレータによる、決定された演算のサブセットの実行を可能にするための単一ルーチンを作成し、ルーチンが、計算タスクの入力データを示す値および構成パラメータの値を引数として有し、ルーチンの呼び出しが、構成パラメータの値に従ってハードウェア・アクセラレータ上における演算のサブセットのスケジューリングをもたらし、計算タスクの入力データを受信すると、ルーチンを呼び出し、ルーチンを呼び出すことによって、ハードウェア・アクセラレータにスケジューリングに従って計算タスクを実行させるように構成される、コンピュータ・システムに関する。
【0006】
別の態様において、本発明の実施形態は、具現化されるコンピュータ可読プログラム・コードを有するコンピュータ可読記憶媒体を含む、コンピュータ・プログラム製品に関する。コンピュータ可読プログラム・コードは、パイプライン方式に従って、計算タスクの少なくとも1つの演算のセットのうちのパイプライン可能な演算のサブセットを決定し、ハードウェア・アクセラレータによる、決定された演算のセットの実行を可能にするための単一ルーチンを作成し、ルーチンが、計算タスクの入力データを示す値および構成パラメータの値を引数として有し、ルーチンの呼び出しが、構成パラメータの値に従ってハードウェア・アクセラレータ上における演算のサブセットのスケジューリングをもたらし、計算タスクの入力データを受信すると、ルーチンを呼び出し、ルーチンを呼び出すことによって、ハードウェア・アクセラレータにスケジューリングに従って計算タスクを実行させるように、構成される。
【0007】
以下では、本発明の実施形態が、単なる例として、図面を参照してさらに詳細に説明される。
【図面の簡単な説明】
【0008】
【
図1】ハードウェア・アクセラレータの例としての構造を示す図である。
【
図2A】本主題の例による、ハードウェア・アクセラレータを用いて、演算のセットから構成される計算タスクを実行するための方法のフローチャートである。
【
図2B】行列行列積(matrix-matrix multiplication)のためのパイプライン方式を示す図である。
【
図3A】深層ニューラル・ネットワーク(deep neural network)を訓練するための例としてのハードウェア・アクセラレータを示す図である。
【
図3C】深層ニューラル・ネットワークを訓練するタスクのためのフロー図である。
【
図4】深層ニューラル・ネットワークを訓練するフローを示す図である。
【
図5】深層ニューラル・ネットワークの訓練を実行するためのクロスバー・アレイの例としての構造を示す図である。
【発明を実施するための形態】
【0009】
本発明の様々な実施形態の説明は、例示の目的で提示されているが、網羅的であること、または開示される実施形態に限定することを意図するものではない。多くの変更および変形が、説明される実施形態の範囲および思想から逸脱することなく当業者には明らかであろう。本明細書で使用される専門用語は、実施形態の原理、実際の用途、もしくは市場で見出される技術に対する技術的改善を最もよく説明するため、または本明細書で開示される実施形態を他の当業者が理解可能にするために、選択された。
【0010】
本主題は、ハードウェア・アクセラレータのユニットを可能な限り並列に使用することにより、ハードウェア・アクセラレータによって実行される計算を高速化し得る。演算の直列実行とは対照的に、本主題は、実行予定のタスクのほんの一部についての情報だけでなく、全タスクに関する情報もハードウェア・アクセラレータに与えるため、パイプラインを利用し得る。
【0011】
計算タスクが、深層ニューラル・ネットワーク(DNN)の訓練である場合、本主題は、ネットワークのほんの一部についての情報だけでなくパイプラインに必要な全ネットワークの情報も、ハードウェア・アクセラレータに与える。本主題は、個々のネットワーク演算(例えば、行列積、畳み込み、活性化など)のためのコマンドをハードウェア・アクセラレータに1つずつ送信するのではなく、それらを1つまたは複数の複合演算(composite operation)にグループ化することを可能にし得る。ハードウェア・アクセラレータは、そのとき、これらの複合演算を取得し、事前定義および最適化されたパイプラインに従ってそれらを実行し得る。例えば、計算メモリの非ノイマン型の性質に起因して、異なるクロスバー・アレイ上に位置する計算リソースが、パイプラインの形式で再使用され得る。複合演算およびパイプラインによって得られる高速化は、特に、線形代数アプリケーションに有利である場合がある。
【0012】
本主題は、ハードウェア・アクセラレータとインターフェースするためのソフトウェア・インターフェースを提供し得る。ソフトウェア・インターフェースは、ハードウェア・アクセラレータのハードウェア機能へのアクセスを可能にする機能を含み得る。単一ルーチンは、ソフトウェア・インターフェースのこれらの機能のうちの機能であってもよい。呼び出し側プログラムが単一ルーチンを呼び出すとき、計算タスクを実行するために、コマンドがハードウェア・アクセラレータに対して発行され得る。ハードウェア・アクセラレータへのコマンドが、ハードウェア・アクセラレータによってサポートされる基本演算のシーケンスを表す複合演算として渡され得る。複合演算は、例えば、訓練の順伝播または逆伝播あるいはその両方であってもよい。ハードウェア・アクセラレータが、データをソフトウェア・インターフェースに返送すると、ソフトウェア・インターフェースは、元の呼び出し側プログラムにデータを提供し得る。パイプライン方式(または実行パイプライン)は、複合演算の少なくとも一部に対して定義されてもよく、例えば、複合演算毎に、パイプライン方式が定義されてもよい。これによって、ハードウェア・アクセラレータの計算ケイパビリティの最適使用が可能となり得る。
【0013】
一実施形態によれば、計算タスクは、深層ニューラル・ネットワーク(DNN)を訓練すること、行列ベクトル積(matrix vector multiplication)、および行列行列積(matrix matrix multiplication)のうちのいずれか1つを含む。
【0014】
本実施形態は、大きな密行列との行列ベクトル積に対して特に有利であり得る。例えば、物理的制限に起因して、ハードウェア・アクセラレータのクロスバー・アレイは、処理される行列の一定のサイズに到達するだけであることがある。そのために、大きな行列の乗算が、分割される場合がある。本実施形態は、ユーザが完全な行列ベクトル積を複合演算として渡すことを可能にし得る。行列は、適当なスライスに分解されてもよく、ハードウェア・アクセラレータの異なるクロスバー・アレイにわたって分配されてもよい。そのとき、個々の行列ベクトル積が、並列に実行されてもよい。例えば、単一クロスバーに適合しない行列が、
【数1】
によって示され得る。行列Mは、ベクトル
【数2】
によって乗算されることとなる。本実施形態は、以下の命令を用いてその乗算を実行することを可能にし得る。
ルーチンの単一APIコールを行う
計算メモリ・ソフトウェア・スタックによって、MをA、B、C、およびDに分割する
A*x、B*y、C*x、およびD*yを並列に計算する
計算メモリ・ソフトウェア・スタックによって計算結果を合計する
【0015】
これは、以下の命令を有する別の乗算技術とは対照的である。
例えば、ユーザによって、MをA、B、C、およびDに分割する
4つのAPIコールを実行して、A*x、B*y、C*x、およびD*yを別々に計算する
ユーザによって、それに従い行列を合計する
【0016】
一実施形態によれば、少なくとも1つの演算のセットは、順伝播のための第1の演算のセット、または逆伝播のための第2の演算のセット、または訓練の順伝播および逆伝播の両方のための第3の演算のセット、あるいはそれらの組み合わせを含む。方法は、第1の演算のセット、第2の演算のセット、および第3の演算のセットのそれぞれについて、それぞれの複合演算を生成すること含みを、ここで、ルーチンを呼び出すことが、生成された複合演算の少なくとも一部の各複合演算について単一アプリケーション・プログラミング・インターフェース(API)・コールを実行することを含む。単一APIコールが、複合演算が生成される演算全体をトリガし、かつ実行するのに十分であり得るように、複合演算が生成され、または定義され得る。複合演算は、単一入力を受信し、かつ計算タスク実行の結果(または演算のセットの結果)を出力として提供するように構成されるべく、生成され得る。これによって、単一ルーチンが、計算タスクの入力データを示す値および構成パラメータの値を引数として有することが可能となり得る。ルーチンの単一呼び出しによって、所望の結果を示す出力が取得され得る。
【0017】
一実施形態によれば、構成パラメータは、深層ニューラル・ネットワークの構造を記述したパラメータ、および深層ニューラル・ネットワークの訓練を構成するために必要なパラメータを含む。
【0018】
一実施形態によれば、方法は、アプリケーション・プログラミング・インターフェース(API)をハードウェア・アクセラレータに提供することと、APIを用いてルーチンを作成することと、をさらに含む。ハードウェア・アクセラレータは、例えば、人工知能ベースのハードウェア・アクセラレータであってもよい。
【0019】
一実施形態によれば、方法は、計算タスクを記述した計算グラフを提供することであって、当該計算タスクが、深層ニューラル・ネットワークを伴い、計算グラフのノードを用いて少なくとも1つの演算のセットを識別するために計算グラフをパースすることによって、少なくとも1つの演算のセットを決定することと、少なくとも1つの演算のセットの各セットがユーザ・グラフのノードによって表されるようにユーザ・グラフを生成することであって、ここで、ルーチンを呼び出すことが、それぞれの演算のセットを表すユーザ・グラフの各ノードを識別することを含み、それぞれの識別されたノードについて、識別されたノードによって表される演算のセットについて単一のAPIコールを実行することと、をさらに含む。
【0020】
いくつかのアプリケーションについて、演算のプログラム/シーケンスは、計算グラフ(データフロー・グラフ)として表され、ノードは、計算のユニットを表す。本実施形態は、そのような計算グラフを、(例えば、複合演算を用いる新たな表現を生成することによって)計算メモリ・ハードウェアの完全使用を行うフローに変換することを可能にし得る。そのために、グラフ・パーサは、グラフ内のパイプライン可能な演算を複合演算にグループ化するために用いられ得る。グラフ・パーサは、計算グラフを入力として受信し、複合演算に統合される適当な演算シーケンスで変換されたグラフを出力し得る。そのようなグラフ・パーサを用いると、既に確立された深層学習フレームワークにおいて書かれたプログラムが、計算メモリ深層学習アクセラレータとともに直接使用され得る。
【0021】
一実施形態によれば、方法は、計算タスクの結果を示す出力をハードウェア・アクセラレータから受信することをさらに含む。
【0022】
一実施形態によれば、パイプライン方式は、並列に実行され得る互いに独立した演算を演算のサブセットのそれぞれが含むように提供される。
【0023】
一実施形態によれば、ハードウェア・アクセラレータは、メモリスタ・クロスバー・アレイ(memristor crossbar array)を用いてパイプライン方式に従って動作する。パイプライン可能な演算のサブセットは、サブセットの演算の各サブセットが、メモリスタ・クロスバー・アレイの異なるクロスバー・アレイ上で並列に実行され得るように決定される。アナログ・メモリ・クロスバー・アレイは、O(1)の計算複雑度を有するコストのかからないベクトル行列計算エンジンを提供し、ニューラル・ネットワークおよび線形代数アプリケーションのための著しい加速を約束する。
【0024】
一実施形態によれば、ハードウェア・アクセラレータが、メモリスタ・クロスバー・アレイを用いてパイプライン方式に従って動作し、計算タスクが、深層ニューラル・ネットワークを訓練することを含み、深層ニューラル・ネットワークの各層が、ハードウェア・アクセラレータの2つのクロスバー・アレイに関連付けられ、2つのクロスバー・アレイが、同一の値を含み、ハードウェア・アクセラレータに計算タスクを実行させることが、深層ニューラル・ネットワークの各層について、2つのクロスバー・アレイのうちの1つのクロスバー・アレイを順伝播のために使用し、もう1つのクロスバー・アレイを逆伝播のためにのみ使用することを含む。
【0025】
図1は、ハードウェア・アクセラレータの例としての構造を示す。ハードウェア・アクセラレータ100は、例えば、アナログベースまたはデジタルベースのアクセラレータ、あるいはその両方であってもよい。
【0026】
ハードウェア・アクセラレータ100は、ニューラル・ネットワークを訓練すること、訓練済みニューラル・ネットワークを用いて推論を実行すること、画像処理、整数を合計することなどの、計算タスクを実行するように構成され得る。
【0027】
タスクの大半と同様に、計算タスクは、演算のセットに分解され得る。例えば、数を合計する場合、タスクは、最適な方法で整数の合計を取得することを可能にする、プレフィックス合計演算に分解され得る。機械学習の場合、計算タスクの大半が、1つまたは複数のベクトル行列積および活性化関数の組み合わせである。例えば、深層ニューラル・ネットワークは、ベクトル行列積を伴い、ベクトル行列積では、ニューロン励起ベクトルxiが、重みの行列wijと乗算されて、次の層のための新たなニューロン励起ベクトルyjを生成する。これは、計算タスクを積和演算(multiply-accumulate operation)(Σwijxi)に分解して、非線形スカッシュ関数が後に続く。
【0028】
したがって、計算タスクに応じて、ハードウェア・アクセラレータ100の異なるアーキテクチャが、タスクの演算を実施するように設計され得る。言い換えると、所与の計算タスクを有する当業者は、計算タスクの少なくとも一部を可能にするハードウェア・アクセラレータのアーキテクチャを提供し得る。以下では、ハードウェア・アクセラレータ100は、人工知能アプリケーションを参照して説明されるが、これに限定されない。
【0029】
ハードウェア・アクセラレータ100は、集積回路101を含む。集積回路101は、アナログ信号またはデジタル信号あるいはその両方に対する演算を実行するように構成される。集積回路101は、複数の物理的実施機能ユニット103A~Nを含む。機能ユニット103A~Nは、命令サイクルの従来の命令フェッチおよび復号ステップが計算タスクを実行するのに必要とされないように、提供される。例えば、機能ユニット103A~Nは、メモリスタ・アレイ、アレイの周辺のADC、中間項およびデジタル化アレイ出力をバッファするため、例えば、DNNの前向き推論に関与する積和演算を可能にするための、組み込みDRAM(eDRAM)を含むチップの階層を形成し得る。
【0030】
ハードウェア・アクセラレータ100の機能は、ハードウェア・アクセラレータ100のために選ばれた機能ユニット103A~Nに依存する。例えば、ハードウェア・アクセラレータ100がそれに従って計算タスクを実行し得るアルゴリズムを定義するために、メモリスタ・クロスバー・アレイのサイズ、クロスバーの数、ADCの数などのパラメータが用いられてもよい。例えば、アルゴリズムは、計算タスクのステップの数を減少させるために並列計算およびパイプライン方式を利用してもよく、それによって、計算の逐次実行を行う別のアルゴリズムと比較して、時間複雑性を低下させ得る。
【0031】
したがって、ハードウェア・アクセラレータ100を動作させるために用いられるアルゴリズムに応じて、機能ユニット103A~Nは、アルゴリズムに従って互いの間でデータを受信および提供するように構成され得る。そのために、ハードウェア・アクセラレータ100は、イベントを時間内に制御し、順番に配列するコンポーネント105を含み得る。コンポーネント105は、1つまたは複数の有限状態機械(finite state machine)を含み得る。有限状態機械は、ハードウェア・アクセラレータ100に制御ベクトルをロードすることによって駆動されてもよく、例えば、機能ユニット103A~Nのマッピングおよびパイプライン方式は、オフラインで決定されてもよく、有限状態機械を駆動する制御レジスタにロードされてもよい。
【0032】
図2Aは、本主題の例による、ハードウェア・アクセラレータ、例えば100を用いて、演算のセットから構成される計算タスクを実行するための方法のフローチャートである。
【0033】
単純化のために、
図2Aの方法は、行列行列積である計算タスクを参照して説明されているが、これに限定されない。行列行列積の場合、乗算は、行列ベクトル積のシーケンスに分解されてもよく、演算のセットは、行列ベクトル積である。
【0034】
ハードウェア・アクセラレータ100を最適に使用するため、または最大限に使用するために、パイプライン方式が用いられ得る。パイプライン方式は、ステージに分割されるパイプラインを定義し得る。各ステージは、計算タスクの一部を並列に完結し、ステージは、パイプラインを形成するように次々に関係付けられている。パイプライン方式は、機能ユニットの構造および機能、ならびに計算タスクに基づいて決定され得る。例えば、パイプライン方式の決定は、並列に計算され得るメモリスタ・クロスバー演算の数などの、ハードウェア・アクセラレータのハードウェア・ケイパビリティについての知識を考慮してもよい。
【0035】
行列行列積の例に従って、計算タスクは、実行される行列積M
1×M
2...×M
5のチェーンであってもよい。例えば、行列のうちの各行列が、4×4行列であってもよい。最適な方法で行列積のこのチェーンを実行するために、以下の方法またはフローが用いられ得る。行列M
1×M
2...×M
4の各行列が、それぞれのクロスバー・アレイに記憶され得る。最後の行列M
5が、列ベクトルに分解され得る。ベクトルが、
図2Bに示されるように、クロスバー・アレイに供給され得る。このフローに基づいて、パイプライン方式は、
図2Bの表220に示されるように、乗算M
1×M
2...×M
5を最適に実行するために定義され得る。5つのステージ(または時間ステップ)222.1~5が定義され、各ステージにおいて、1つまたは複数の行列ベクトル積が実行され得る。
図2Bに示されるように、第1のステージ222.1において、最初の第1の行列ベクトル積x
2
1=M
nx
11つだけが、行列M
nを記憶するクロスバー・アレイを用いて実行され得る。例えば、クロスバー・アレイには、ベクトルx
1の4つの成分が供給される。この第1のステージ222.1は、x
2
1を出力(乗算の結果)として第2のステージ222.2に提供し得る。第2のステージ222.2において、そのクロスバー・アレイが第1のステージ完結後に空になるため、行列M
nを記憶するクロスバー・アレイによって第2の行列ベクトル積x
2
2=M
nx
2が実行され得る。第2の乗算と並列に、第3の乗算、即ちx
3
1=M
n-1x
2
1が実行され得る。第3の乗算は、第1の乗算の結果を必要とするため、第3の乗算は、第1の乗算の実行が行われた後で、第2のステージ222.2においてのみ実行される。最後の2つのステージ222.4~5では、全てのクロスバー・アレイが、それぞれの乗算を並列に実行しており、ハードウェア・アクセラレータの完全使用を可能にする。
【0036】
したがって、パイプライン方式に基づいて、パイプライン可能な演算のサブセットは、ステップ201においてパイプライン方式に従って演算のセットから決定され得る。パイプライン可能な演算のサブセットは、例えばパイプラインの所与のステージにおいて、例えば、並列に実行され得る演算を含み得る。決定された演算のサブセットは、ハードウェア・アクセラレータ100の完全使用または最適使用を可能にし得る。
図2Bの例に従って、第1の演算のサブセットは、演算x
2
1=M
nx
1を含み、第2の演算のサブセットは、2つの演算x
2
2=M
nx
2およびx
3
1=M
n-1x
2
1を含み、第3の演算のサブセットは、3つの演算x
2
3=M
nx
3、x
3
2=M
n-1x
2
2、およびx
4
1=M
n-2x
3
1を含む、などであってもよい。
【0037】
例えば、
図2Bに示されるように、実行される演算のパイプラインを定義していると、本方法は、全計算タスクの実行を可能にするために単一ルーチンのみを必要とし得るため、有利であり得る。単一ルーチンは、ステップ203において、ルーチンの引数が、例えばルーチンからのさらなる入力を必要とすることなく、パイプラインの実行を可能にするハードウェア・アクセラレータ・データを示し得るように、作成され得る。例えば、引数は、計算タスクの入力データを示す値および構成パラメータの値を含んでもよい。一実施例では、APIは、ハードウェア・アクセラレータ100とインターフェースするように提供されてもよく、単一ルーチンは、APIの関数であってもよい。この場合、単一ルーチンの呼び出しは、APIコールと呼ばれ得る。別の実施例では、単一ルーチンは、APIの関数を用いて定義されてもよい。
【0038】
ルーチンの呼び出しは、構成パラメータの値に従ってハードウェア・アクセラレータ100上の演算のサブセットのスケジューリングをもたらす。例えば、構成パラメータの値は、ハードウェア・アクセラレータ100に制御ベクトルとしてロードされて、サイクル/ステージ毎の後で正確に入力および出力を操作する有限状態機械を駆動し得る。
【0039】
例えば、ルーチンの呼び出しは、以下のように行われ得る。1)全ての5つの行列を参照する単一APIコールを行う。2)ソフトウェア・スタックがクロスバー・アレイ上にM1、M2、M3、およびM4をマッピングする。3)Xの行ベクトルがパイプライン様式でクロスバーを通して渡される。これは、個々の行列行列積を計算するために少なくとも5つのAPIコールを行う方法とは対照的である。
【0040】
ステップ201および203は、例えば、計算のためにハードウェア・アクセラレータ100を使用する前に、オフラインで実行されてもよい。
【0041】
計算タスクの入力データを受信すると、ルーチンは、ハードウェア・アクセラレータ100がステップ207においてスケジューリングに従って計算タスクを実行し得るように、ステップ205において呼び出され得る。計算タスクの結果は、ハードウェア・アクセラレータ100から受信され得る。上記実施例に従って、ハードウェア・アクセラレータは、行列M1~M4の成分をそれぞれ記憶する4つのクロスバー・アレイを含み得る。この場合のルーチンの引数は、入力データとして、かつ行列M1、M2、M3、およびM4を示す構成パラメータとして、行列M5のベクトルx1~x4を含み得る。例えば、以下の4つの呼び出し、mm1=行列積(M4,M5)、mm2=行列積(M3,mm1)、mm3=行列積(M2,mm2)、および出力=行列積(M1,mm3)を実行するのではなく、単一の呼び出し(例えば、APIコール)が、出力=複合(config,M5)のように、実行されてもよい。ここで、構成パラメータは、config=行列行列積チェーン(M1,M2,M3,M4)と定義され得る。
【0042】
図3Aは、入力層301、1つの隠れ層303、および出力層305を有するDNNを訓練するための、例としてのハードウェア・アクセラレータ300を示す。この場合、演算のセットは、訓練の順伝播のための演算、または逆伝播のための演算、あるいはその両方を含み得る。
【0043】
3つの層は、784、250、10のニューロモーフィック・ニューロン装置(neuromorphic neuron apparatus)をそれぞれ有する。出力層は、0~9の10個の可能な数字を表す10のニューロモーフィック・ニューロン装置を有し、入力層は、入力MNIST画像の画素の数を表す784のニューロモーフィック・ニューロン装置を有する。ニューロン装置のそれぞれが、ニューロン装置の現在の状態(例えば、x
iによって定義される)に基づいて出力値を生成するために活性化関数を使用するように構成され得る。ハードウェア・アクセラレータ300は、重み成分W
JIおよびW
KJのそれぞれと活性化ベクトルxとの乗算を計算するために、2つのクロスバー・アレイまたはメモリスタ・クロスバー・アレイ(図示せず)をさらに含み得る。例えば、成分W
JIを有する行列Wと入力層の活性化ベクトルxとの行列ベクトル積は、第1のメモリスタ・クロスバー・アレイの対応するメモリスタ成分のコンダクタンスで各行列成分を表すことによって、第1のメモリスタ・クロスバー・アレイを通して実現され得る。行列Wとベクトルxとの乗算は、ベクトル値xを表す電圧を第1のメモリスタ・クロスバー・アレイに入力することによって実行されてもよく、結果となる電流は、Wおよびxの積を示している。クロスバー・アレイの抵抗性メモリ素子(またはデバイス)は、例えば、相変化メモリ(PCM)、金属酸化物抵抗性RAM、導電ブリッジRAM、および磁気RAMのうちの1つであってもよい。
図3Aのこの実施例では、機能ユニットは、少なくとも2つのクロスバー・アレイおよびニューロモーフィック・ニューロン装置を含み得る。
【0044】
3層DNNの訓練である計算タスクを知っており、かつハードウェア・アクセラレータ300の機能ユニットが動作する方法にアクセスできると、パイプライン方式は、所与の数のステージ(
図3Cを参照)で定義され得る。各ステージにおいて、1つまたは複数の演算が、ハードウェア・アクセラレータ300の機能ユニットによって並列に実行され得る。
【0045】
図3Bのコード310で示されるように、層の演算(例えば、行列積、畳み込み、活性化、プール化など)毎に1つのAPIコールを有するのではなく、
図3Bのコード312で示されるように、単一のAPIコール313が使用されてもよい。APIコール313の入力は、MNIST画像およびコード312によって示されるようにDNNを記述した構成パラメータ314であってもよい。コード312を実行することによって、複数の演算が、共にチェーン化され、実行され得る。
【0046】
図3Cは、
図3AのDNN訓練のための実行方式またはアルゴリズムを示す第1の
図330と、本主題の実施例による
図3AのDNN訓練のための実行方式を示す第2の
図350と、本主題の別の実施例による
図3AのDNN訓練の実行方式を示す第3の
図360と、を示す。
【0047】
DNN訓練は、例えば、複数の画像のセットを入力することを必要としてもよく、画像のセット毎に、順伝播が、シナプス重みを変更することなく実行されてもよく、それによって、逆伝播されるべきDNNの予測誤差が、(1つの画像だけではなく)画像のセットについて取得される誤差を結合することによって推定され得る。
【0048】
第1の
図330は、計算タスクのフローを示す計算グラフである。例えば、重み331と第1の入力セットの入力ベクトル332とが、行列積関数(matmul function)333の第1のAPIコールに応答して乗算され得る。第1のAPIコールの結果は、シグモイド関数(Sigmoid function)334の第2のAPIコールを実行するために用いられる。第2のAPIコールの結果は、重み336と第2のAPIコールの結果であるベクトルとの乗算を伴う、行列積関数335の第3のAPIコールを実行するために用いられる。第3のAPIコールの結果は、シグモイド関数337の第4のAPIコールを実行するために用いられる。第4のAPIコールの結果であるベクトルおよび入力332のラベル338は、損失関数339を計算するために用いられ得る。第4のAPIコールの結果であるベクトルとラベル338との間の差は、DNNによって実行される予測誤差δを計算するために用いられ得る。計算された予測誤差δは、逆伝播され得る。さらに、重み331および336は、
図340によって示されるように全ての重みのデルタΔWを用いて、逆伝播の後更新され得る。計算タスクが実行されるまで、それらのAPIコールは、追加入力332毎に繰り返され得る。例えば、計算タスクは、順伝播のために100個の入力画像を必要とし得る。第2の入力セットは、第1の入力セットの最後のAPIコールを完了した後、第1の図に入る。したがって、第1のセット(または第2の入力セット)を処理する間、第1の
図300のフローに従って実行される計算タスクは、重み336および331が入力セット毎に変化しないという事実、例えば、重み336および331を記憶するクロスバーのそれぞれが並列計算に使用されないという事実から恩恵を受けない場合がある。
【0049】
並列計算を利用するために、第2の
図350によって記載されるフローが用いられてもよい。第2の
図350は、本主題の実施例による、計算タスクのフローを示す計算グラフである。第2の
図350のフローを可能にするために、2つのパイプライン方式が定義されてもよく、1つは訓練の順伝播のため、もう1つは訓練の逆伝播のためである。この場合、入力セット332は、順伝播を実行するために単一ルーチンによって呼び出され得る複合演算353への入力として、重み331および336の両方を組み合わせて提供される。複合演算353は、パイプライン方式に従って入力を処理し得る。例えば、入力セットが2つの画像を含む場合、第1のステージの間、第1の画像のみが第1のクロスバー・アレイによって処理され、パイプラインの第2のステージ/サイクルの間、第1の画像が、重み336を記憶する第2のクロスバー・アレイによって処理され、かつ第2の画像が、重み331を記憶する第1のクロスバー・アレイを用いて並列に処理される。損失関数339は、推定予測誤差に対して上述の通り使用される。予測誤差は、行列ベクトル積を用いて逆伝播され得る。これは、別の複合演算355によって示される。複合演算355は、順伝播で説明されたのと類似の方法で、パイプライン方式に従って予測誤差の逆伝播のために入力を処理し得る。重み331および336は、
図380によって示されるように全ての重みのデルタΔWを用いて更新され得る。
【0050】
したがって、DNN訓練の間、第2の
図350によって、異なる複合演算において順伝播および逆伝播を実行することが可能となる。この順伝播および逆伝播の間の分離は、第2の
図350の設計が(逆伝播の実行を必要とすることなく)推論のみに使用され得るため、有利であり得る。加えて、第2の
図350のフローは、バッチ全体についての情報を必要とする技術(例えば、バッチ正規化)を用いて簡単に動作してもよく、その情報は、順伝播プロセスと逆伝播プロセスとの間のステージにおいて発生する。これは、
図4に示され、
図4において、バッチ正規化は、順伝播および逆伝播に使用されるパイプライン方式とは別々に、または独立して、やはり維持され得る。これにより、それが2つのパイプライン方式でカバーされないため、損失関数をより自由に選択することが可能となり得る。簡潔には、
図4は、2つの方式を示している。第1は、畳み込み402、正規化線形ユニット(rectified linear unit)404、畳み込み406、正規化線形ユニット408、バッチ正規化410、畳み込み412、正規化線形ユニット414、畳み込み416、および正規化線形ユニット418の演算を有し、第2は、複合演算420、バッチ正規化422、および複合演算424を有する。
【0051】
図3Cに戻って、並列計算をさらに利用するために、第3の図によって記載されるフローが用いられ得る。第3の
図360は、本主題の実施例による、計算タスクのフローを示す計算グラフである。第3の
図360のフローを可能にするために、1つのパイプライン方式が、順伝播および逆伝播の両方、ならびに損失関数計算のために定義される。この場合、入力セット332は、可能な限り多くの演算を並列化しようとするパイプライン方式に従って、順伝播および逆伝播を実行するための単一ルーチンによって呼び出され得る複合演算363への入力として、重み331および336の両方を組み合わせて提供される。並列化されるそれらの演算は、クロスバーを用いた行列ベクトル積、ならびにニューロンおよび損失関数計算を用いた活性化関数を伴う。例えば、第2のクロスバー・アレイは、エラー信号を逆伝播するために用いられ、第1のクロスバー・アレイは、順伝播の行列ベクトル積を計算するために用いられ得る。この実施例において順伝播および逆伝播計算の活性化および誤差信号を保持するために、追加メモリが必要とされ得る。
【0052】
したがって、DNN訓練の間、第3の
図360によって、同一の複合演算において順伝播および逆伝播を実行することが可能となる。これは、それにはメモリ消費をあまり必要としない場合があるため、有利であり得る。例えば、ΔWが計算されるとすぐに、事前記憶された層活性化は、破棄されてもよく、メモリは、バッチ内の別のサンプルのために再使用されてもよい。別の利点は、第3の図の実行フローはオーバヘッドをあまり必要としない場合があるということであり得る。例えば、複合演算の始まりおよび終わりにおいて、アレイの全てが使用されないオーバヘッド期間が常に存在し得る。複合演算の数を減少させることによって、このオーバヘッドが減少され得る。
【0053】
第3の
図360のフローの別の利点は、フローが
図5に示されるアレイ複製技術と結合され得るということであり得る。例えば、
図5に示されるように、1つのクロスバー・アレイが順方向パスのためだけに使用され、もう1つのクロスバー・アレイが逆方向パスのためだけに使用されるように、DNNの2つのクロスバー・アレイが、複製され得る(即ち、同一の重みを含む複数のクロスバー・アレイ)。
図5の層1(項目502)および層2(項目504)は、DNNの入力層301および隠れ層303をそれぞれ指している。アレイのアレイ1およびアレイ2は、入力層と隠れ層との間で生じる行列ベクトル積、および隠れ層と出力層との間で生じる行列ベクトル積をそれぞれ実行する、クロスバー・アレイである。これにより、複数の演算が同一層上で同時に実行されることが可能となり得る。具体的には、
図5は、層1のアレイ2(項目510)を通り、次いで順伝播518により層2のアレイ2(項目512)を通り、次いで層2のアレイ2から層2のアレイ1へ(項目508)、次いで層2のアレイ1から(項目508)逆伝播516により層1のアレイ1(項目506)を通って、入力されるデータ514を示す。
【0054】
本発明の実施形態の態様は、本発明の実施形態による、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本明細書において説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組み合わせは、コンピュータ可読プログラム命令によって実施され得ると理解されたい。
【0055】
本発明の実施形態は、システム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組み合わせであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の実施形態の態様を実行させるためのコンピュータ可読プログラム命令をその上に有する、コンピュータ可読記憶媒体(または複数の媒体)を含み得る。
【0056】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持および記憶し得る有形デバイスであってもよい。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または前述したものの任意の適当な組み合わせであってもよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、パンチカードまたは命令をその上に記録させる溝内の隆起構造などの機械的に符号化されたデバイス、および前述したものの任意の適当な組み合わせを含む。本明細書で用いられるコンピュータ可読記憶媒体は、本来、電波もしくは他の自由伝播する電磁波、導波管もしくは他の送信媒体を通って伝播する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、または電線を通って送信される電気信号などの、一過性信号であると解釈されるべきではない。
【0057】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはそれらの組み合わせを介して外部コンピュータまたは外部記憶デバイスに、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組み合わせを含み得る。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体の記憶用にコンピュータ可読プログラム命令を転送する。
【0058】
本発明の実施形態の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはSmalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つもしくは複数のプログラミング言語の任意の組み合わせで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、ユーザのコンピュータ上で部分的に、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータ上で部分的にかつリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に、実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)、もしくはワイド・エリア・ネットワーク(WAN)を含む任意の種類のネットワークを通してユーザのコンピュータに接続されてもよく、または、接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを通して)外部コンピュータに対して行われてもよい。いくつかの実施形態では、例えば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、本発明の実施形態の態様を実行するために、コンピュータ可読プログラム命令の状態情報を用いて電子回路を個別化することによって、コンピュータ可読プログラム命令を実行し得る。
【0059】
本発明の実施形態の態様は、本発明の実施形態による、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本明細書において説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組み合わせが、コンピュータ可読プログラム命令によって実施され得ると理解されたい。
【0060】
コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施する手段を作成するように、これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。また、コンピュータ可読記憶媒体に記憶される命令を有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作の態様を実施する命令を含む製品を含むように、これらのコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの組み合わせに特定の方式で機能するように指示し得るものであってもよい。
【0061】
また、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施するように、コンピュータ可読プログラム命令は、コンピュータ実施プロセスを生み出すために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【0062】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の考えられる実施態様のアーキテクチャ、機能性、および動作を示している。この点に関して、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの代替実施態様において、ブロック内に記載された機能は、図面中に記載された順序以外で発生してもよい。例えば、連続して示される2つのブロックが、実際には、実質的に同時に実行されてもよく、または、ブロックが、関係する機能性次第で逆の順序で実行されることがあってもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせが、指定された機能もしくは動作を実行し、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用ハードウェアベース・システムによって実施され得ることにも留意されたい。