(57)【要約】  本開示は、統合記憶媒体と、１つ又は複数の処理ユニットとを有する統合メモリ装置に関する。統合メモリ装置は、第１の複数の記憶セルを有する第１の記憶モジュールと、第２の複数の記憶セルを有する第２の記憶モジュールとを含み得、第１及び第２の複数の記憶セルの各々は、データを格納し、一意的なセル識別子によって識別されるように構成される。１つ又は複数の処理ユニットは、統合記憶媒体と通信し、処理ユニットは、第１の複数の記憶セルのうちの１つから第１の入力データを受信し、第２の複数の記憶セルのうちの１つから第２の入力データを受信し、第１及び第２の入力データに基づいて出力データを生成するように構成される。
2021507383.tif 000002
【特許請求の範囲】
【請求項１】
統合記憶媒体と、
前記統合記憶媒体と通信する処理ユニットと
を含む統合メモリ装置であって、
前記統合記憶媒体が、
データを格納するように構成された第１の複数の記憶セルを有する第１の記憶モジュールであって、前記第１の複数の記憶セルが、一意的なセル識別子によって識別される、第１の記憶モジュールと、
データを格納するように構成された第２の複数の記憶セルを有する第２の記憶モジュールであって、前記第２の複数の記憶セルが、一意的なセル識別子によって識別される、第２の記憶モジュールと
を含み、
前記処理ユニットが、
前記第１の複数の記憶セルのうちの１つから第１の入力データを受信し、
前記第２の複数の記憶セルのうちの１つから第２の入力データを受信し、
前記第１及び第２の入力データに基づいて出力データを生成する
ように構成される、統合メモリ装置。
【請求項２】
前記第１及び第２の複数の記憶セルの前記一意的なセル識別子が、第１の複数のビットと、第２の複数のビットとを含むビットアドレスを含む、請求項１に記載の統合メモリ装置。
【請求項３】
前記第１の複数のビットが、前記第１及び第２の記憶モジュールのターゲット記憶モジュールを示し、前記第２の複数のビットが、前記ターゲット記憶モジュール内の前記第１及び第２の複数の記憶セルのターゲット記憶セルを示す、請求項２に記載の統合メモリ装置。
【請求項４】
前記第２の複数のビットが、前記ターゲット記憶セルと関連付けられた特性をさらに示し、前記ターゲット記憶セルの前記特性が、プライベート又は共有のうちの１つである、請求項２又は３に記載の統合メモリ装置。
【請求項５】
前記第１及び第２の記憶モジュールが、対応する処理ユニットと通信するように構成される、請求項１〜４のいずれか一項に記載の統合メモリ装置。
【請求項６】
前記処理ユニットが、プライベート記憶セルから前記第１の入力データを受信し、共有記憶セルから前記第２の入力データを受信するように構成される、請求項１に記載の統合メモリ装置。
【請求項７】
前記統合記憶媒体及び前記処理ユニットが、ソフトウェアコード又はソフトウェアプログラムによって均一にアドレス指定されるように構成される、請求項１〜６のいずれか一項に記載の統合メモリ装置。
【請求項８】
前記統合記憶媒体が、コンパイラから命令を受信するようにさらに構成され、前記命令が、前記データと関連付けられた特性を含み、前記データと関連付けられた前記特性が、プライベート又は共有のうちの１つである、請求項１に記載の統合メモリ装置。
【請求項９】
前記プライベート記憶セルが、プライベートデータを格納するように構成され、前記共有記憶セルが、前記複数の処理ユニットにわたって共有することができる共有データを格納するように構成される、請求項５に記載の統合メモリ装置。
【請求項１０】
データを格納するように構成された第１の複数の記憶セルを有する第１の記憶モジュールであって、前記第１の複数の記憶セルが、一意的なセル識別子によって識別される、第１の記憶モジュールと、
データを格納するように構成された第２の複数の記憶セルを有する第２の記憶モジュールであって、前記第２の複数の記憶セルが、一意的なセル識別子によって識別される、第２の記憶モジュールと
を含む、統合記憶媒体。
【請求項１１】
前記第１及び第２の複数の記憶セルの前記一意的なセル識別子が、第１の複数のビットと、第２の複数のビットとを含むビットアドレスを含む、請求項１０に記載の統合記憶媒体。
【請求項１２】
前記第１の複数のビットが、前記第１及び第２の記憶モジュールのターゲット記憶モジュールを示し、前記第２の複数のビットが、前記ターゲット記憶モジュール内の前記第１及び第２の複数の記憶セルのターゲット記憶セルを示す、請求項１０又は１１に記載の統合記憶媒体。
【請求項１３】
前記第２の複数のビットが、前記ターゲット記憶セルと関連付けられた特性をさらに示し、前記ターゲット記憶セルの前記特性が、プライベート又は共有のうちの１つである、請求項１２に記載の統合記憶媒体。
【請求項１４】
前記第１及び第２の記憶モジュールが、対応する処理ユニットと通信するように構成される、請求項１０に記載の統合記憶媒体。
【請求項１５】
コンパイラから命令を受信するように構成され、前記命令が、前記データと関連付けられた特性を含み、前記データと関連付けられた前記特性が、プライベート又は共有のうちの１つである、請求項１０に記載の統合記憶媒体。
【請求項１６】
前記プライベート記憶セルが、プライベートデータを格納するように構成され、前記共有記憶セルが、前記複数の処理ユニットにわたって共有することができる共有データを格納するように構成される、請求項１３に記載の統合記憶媒体。
【請求項１７】
統合記憶媒体と、１つ又は複数の処理ユニットとを有する統合メモリ装置においてデータを構造化するための方法であって、
前記１つ又は複数の処理ユニットと通信するように、かつデータを格納するように構成された第１の複数の記憶セルを含むように、前記統合記憶媒体の第１の記憶モジュールを構成することであって、前記第１の複数の記憶セルが、一意的なセル識別子によって識別される、構成することと、
前記１つ又は複数の処理ユニットと通信するように、かつデータを格納するように構成された第２の複数の記憶セルを含むように、前記統合記憶媒体の第２の記憶モジュールを構成することであって、前記第２の複数の記憶セルが、一意的なセル識別子によって識別される、構成することと、
前記１つ又は複数の処理ユニットのうちの１つの処理ユニットを、
前記第１の複数の記憶セルのうちの１つから第１の入力データを受信し、
前記第２の複数の記憶セルのうちの１つから第２の入力データを受信し、
前記第１及び第２の入力データに基づいて出力データを生成する
ように構成することと
を含む、方法。
【請求項１８】
コンパイラから命令を受信することをさらに含み、前記命令が、前記出力データと関連付けられた特性を含み、前記出力データと関連付けられた前記特性が、プライベート又は共有のうちの１つである、請求項１７に記載の方法。
【請求項１９】
前記第１及び第２の複数の記憶セルの前記一意的なセル識別子が、第１の複数のビットと、第２の複数のビットとを含むビットアドレスを含む、請求項１７に記載の方法。
【請求項２０】
前記第１の複数のビットが、前記第１及び第２の記憶モジュールのターゲット記憶モジュールを示し、前記第２の複数のビットが、前記ターゲット記憶モジュール内の前記第１及び第２の複数の記憶セルのターゲット記憶セルを示す、請求項１９に記載の方法。
【請求項２１】
前記第２の複数のビットが、前記ターゲット記憶セルと関連付けられた特性をさらに示し、前記ターゲット記憶セルの前記特性が、プライベート又は共有のうちの１つである、請求項２０に記載の方法。
【請求項２２】
前記第１及び第２の記憶モジュールが、対応する処理ユニットと通信するように構成される、請求項１７に記載の方法。
【請求項２３】
第１の記憶モジュールと、第２の記憶モジュールとを有する統合記憶媒体においてデータを構造化するための方法であって、
前記１つ又は複数の処理ユニットと通信するように、かつデータを格納するように構成された第１の複数の記憶セルを含むように、前記統合記憶媒体の第１の記憶モジュールを構成することであって、前記第１の複数の記憶セルが、一意的なセル識別子によって識別される、構成することと、
前記１つ又は複数の処理ユニットと通信するように、かつデータを格納するように構成された第２の複数の記憶セルを含むように、前記統合記憶媒体の第２の記憶モジュールを構成することであって、前記第２の複数の記憶セルが、一意的なセル識別子によって識別される、構成することと
を含む、方法。
【請求項２４】
前記１つ又は複数の処理ユニットが、
前記第１の複数の記憶セルのうちの１つから第１の入力データを受信し、
前記第２の複数の記憶セルのうちの１つから第２の入力データを受信し、
前記第１及び第２の入力データに基づいて出力データを生成する
ように構成される、請求項２３に記載の方法。
【請求項２５】
前記第１及び第２の複数の記憶セルの前記一意的なセル識別子が、第１の複数のビットと、第２の複数のビットとを含むビットアドレスを含む、請求項２３に記載の方法。
【請求項２６】
前記第１の複数のビットが、前記第１及び第２の記憶モジュールのターゲット記憶モジュールを示し、前記第２の複数のビットが、前記ターゲット記憶モジュール内の前記第１及び第２の複数の記憶セルのターゲット記憶セルを示す、請求項２５に記載の方法。
【請求項２７】
前記第２の複数のビットが、前記ターゲット記憶セルと関連付けられた特性をさらに示し、前記ターゲット記憶セルの前記特性が、プライベート又は共有のうちの１つである、請求項２６に記載の方法。
【請求項２８】
前記出力データを格納するという命令をコンパイラから受信することをさらに含み、前記命令が、前記出力データと関連付けられた特性を含む、請求項２４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
[001]  本開示は、２０１７年１２月２２日に出願された米国仮特許出願第６２／６１０，１１９号及び２０１８年５月１８日に出願された米国特許出願第１５／９８４，２５５号への優先権の利益を主張し、同特許出願の全内容は、参照により本明細書に組み込まれる。
【背景技術】
【０００２】
背景
[002]  画像認識、言語／音声認識及び機械翻訳などのニューラルネットワークに基づくディープラーニングアプリケーションの急激な成長と共に、日用品の中央処理装置／グラフィックス処理ユニット（ＣＰＵ／ＧＰＵ）に基づくプラットフォームは、性能、電力効率及び経済拡張性の観点から、もはや、ますます高まる演算需要のサポートに適した演算基板ではない。ニューラルネットワークに基づくディープラーニングアプリケーションを加速させるためのニューラルネットワークプロセッサの開発は、既成のチップメーカー、新興企業及びインターネット大企業を含む多くのビジネス部門にわたってかなりの勢いを増している。単一命令複数データ（ＳＩＭＤ）アーキテクチャは、ディープラーニングのアプリケーションに対する計算を加速させるためにチップに適用することができる。
【０００３】
[003]  ＳＩＭＤアーキテクチャを有するコンピュータでは、並列する複数の処理ユニット、算術論理演算ユニット（ＡＬＵ）又は小型ＣＰＵの各々は、それら自体のデータを用いて同時に演算する（一般に、２つ又は３つの入力オペランド及び１つの出力結果）。これらのデータは、メモリに格納されており、独立して並列にアクセスされる。従って、各処理ユニットは、メモリの専用パーティションと、メモリのパーティションへの専用アクセスポートを有し得る。実際には、多くのアルゴリズムはいくつかの共有データを有し、共有データは、何らかの共有メモリに格納することができ（格納コストを節約するため）、オペランドのうちの１つとしてすべての処理ユニットにブロードキャストすることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
[004]  ＳＩＭＤアーキテクチャにおける並列アクセスを可能にするため、ハードウェアは、一般に、物理的に分離されたプライベートメモリモジュール及び共有メモリモジュールを導入して、対応するデータタイプを保持する。しかし、そのようなメモリ構造は、２つの問題を有する。
【０００５】
[005]  第１に、異なるソフトウェアプログラムが異なるデータサイズを有する一方で、各ハードウェアメモリモジュールのサイズは固定されるため、これらのモジュールは非効率的に利用され、その結果、物理的なメモリ空間が無駄になる。第２に、以前に考慮された「プライベート」データがプログラムの後の段階において「共有」データになる際、専用のメモリコピー動作を実行しなければならない。これにより、処理ユニットの余分な電力消費及び性能低下が生じる。
【課題を解決するための手段】
【０００６】
概要
[006]  この開示の実施形態は、統合メモリ装置を提供する。統合メモリ装置は、統合記憶媒体を含むことができ、統合記憶媒体は、データを格納するように構成された第１の複数の記憶セルを有する第１の記憶モジュールであって、第１の複数の記憶セルが、一意的なセル識別子によって識別される、第１の記憶モジュールと、データを格納するように構成された第２の複数の記憶セルを有する第２の記憶モジュールであって、第２の複数の記憶セルが、一意的なセル識別子によって識別される、第２の記憶モジュールとを含む。また、統合メモリアーキテクチャは、統合記憶媒体と通信する処理ユニットも含み得る。処理ユニットは、第１の複数の記憶セルのうちの１つから第１の入力データを受信し、第２の複数の記憶セルのうちの１つから第２の入力データを受信し、第１及び第２の入力データに基づいて出力データを生成するように構成することができる。
【０００７】
[007]  この開示のいくつかの実施形態は、統合記憶媒体を提供する。統合記憶媒体は、データを格納するように構成された第１の複数の記憶セルを有する第１の記憶モジュールであって、第１の複数の記憶セルが、一意的なセル識別子によって識別される、第１の記憶モジュールと、データを格納するように構成された第２の複数の記憶セルを有する第２の記憶モジュールであって、第２の複数の記憶セルが、一意的なセル識別子によって識別される、第２の記憶モジュールとを含み得る。
【０００８】
[008]  この開示のいくつかの実施形態は、統合記憶媒体と、１つ又は複数の処理ユニットとを有する統合メモリ装置においてデータを構造化するための方法を提供する。方法は、１つ又は複数の処理ユニットと通信するように、かつデータを格納するように構成された第１の複数の記憶セルを含むように、統合記憶媒体の第１の記憶モジュールを構成することを含み得、第１の複数の記憶セルが、一意的なセル識別子によって識別される。また、方法は、１つ又は複数の処理ユニットと通信するように、かつデータを格納するように構成された第２の複数の記憶セルを含むように、統合記憶媒体の第２の記憶モジュールを構成することを含み得、第２の複数の記憶セルが、一意的なセル識別子によって識別される。方法は、第１の複数の記憶セルのうちの１つから第１の入力データを受信し、第２の複数の記憶セルのうちの１つから第２の入力データを受信し、第１及び第２の入力データに基づいて出力データを生成するように、１つ又は複数の処理ユニットのうちの１つの処理ユニットを構成することをさらに含む。
【０００９】
[009]  この開示のいくつかの実施形態は、第１の記憶モジュールと、第２の記憶モジュールとを有する統合記憶媒体においてデータを構造化するための方法を提供する。方法は、１つ又は複数の処理ユニットと通信するように、かつデータを格納するように構成された第１の複数の記憶セルを含むように、統合記憶媒体の第１の記憶モジュールを構成することであって、第１の複数の記憶セルが、一意的なセル識別子によって識別されることと、１つ又は複数の処理ユニットと通信するように、かつデータを格納するように構成された第２の複数の記憶セルを含むように、統合記憶媒体の第２の記憶モジュールを構成することであって、第２の複数の記憶セルが、一意的なセル識別子によって識別されることとを含み得る。
【００１０】
[010]  第１及び第２の複数の記憶セルの一意的なセル識別子は、第１の複数のビットと、第２の複数のビットとを含むビットアドレスを含み得る。第１の複数のビットは、第１及び第２の記憶モジュールのターゲット記憶モジュールを示し得、第２の複数のビットは、ターゲット記憶モジュール内の第１及び第２の複数の記憶セルのターゲット記憶セルを示し得る。第２の複数のビットは、ターゲット記憶セルと関連付けられた特性をさらに示し得、ターゲット記憶セルの特性は、プライベート又は共有のうちの１つである。いくつかの実施形態では、第１及び第２の記憶モジュールは、対応する処理ユニットと通信するように構成される。処理ユニットは、プライベート記憶セルから第１の入力データを受信し、共有記憶セルから第２の入力データを受信するように構成される。統合記憶媒体及び処理ユニットは、ソフトウェアコード又はソフトウェアプログラムによって均一にアドレス指定されるように構成される。統合記憶媒体は、コンパイラから命令を受信するようにさらに構成され、命令は、データと関連付けられた特性を含み、データと関連付けられた特性は、プライベート又は共有のうちの１つである。プライベート記憶セルは、プライベートデータを格納するように構成され、共有記憶セルは、複数の処理ユニットにわたって共有することができる共有データを格納するように構成される。
【図面の簡単な説明】
【００１１】
図面の簡単な説明
【図１】[011]本開示の実施形態と一致する、例示的なニューラルネットワーク処理ユニット（ＮＰＵ）アーキテクチャを示す。
【図２Ａ】[012]本開示の実施形態と一致する、ニューラルネットワークプロセッサの層の例示的な機能を示す。
【図２Ｂ】[013]本開示の実施形態と一致する、例示的なハードウェアニューラルネットワークプロセッサを示す。
【図３】[014]本開示の実施形態と一致する、多層ネットワークにおけるデータ共有を示す。
【図４Ａ】[015]本開示の実施形態と一致する、メモリモジュールの統合構造を含む例示的なハードウェアの概略図を示す。
【図４Ｂ】[016]本開示の実施形態と一致する、統合記憶媒体の例示的な記憶セルを示す。
【図５】[017]本開示の実施形態と一致する、例示的なデータ構造化動作のプロセスフローチャートを示す。
【発明を実施するための形態】
【００１２】
詳細な説明
[018]  ここでは、例示的な実施形態を詳細に参照し、その例は、添付の図面に示される。以下の説明は、添付の図面を参照し、添付の図面では、異なる図面の同じ番号は、別段の表現がない限り、同じ又は同様の要素を表す。例示的な実施形態の以下の説明に記載される実装形態は、本発明と一致するすべての実装形態を表すわけではない。代わりに、それらの実装形態は、添付の特許請求の範囲に記述されるように、本発明に関連する態様と一致する装置及び方法の単なる例である。
【００１３】
[019]  開示される実施形態は、統合メモリアーキテクチャに格納されたデータを構造化するため及びそのターゲットデータにアクセスするためのシステム及び方法を提供する。開示される実施形態は、物理的なプライベート及び共有メモリを統合する方法で構造化することによって、従来のＳＩＭＤアーキテクチャの前述の問題を解決することができる。開示される実施形態は、論理的なプライベート及び共有メモリに対して物理メモリの単一のモジュールを維持するものであり、データ自体を物理メモリのそのオリジナルの場所に保持しながら、アクセス命令を通じて「プライベート」又は「共有」の表示を切り替えることができる。
【００１４】
[020]  図１は、例示的なニューラルネットワーク処理ユニット（ＮＰＵ）アーキテクチャ１００を示す。ＮＰＵアーキテクチャ１００は、オンチップ通信システム１１０、オフチップメモリ１２０、メモリコントローラ１３０、直接メモリアクセス（ＤＭＡ）ユニット１４０、ジョイントテストアクショングループ（ＪＴＡＧ）／テストアクセスエンド（ＴＡＰ）コントローラ１５０、周辺機器相互接続エクスプレス（ＰＣＩｅ）インタフェース１６０、インターチップリンク１７０及び同様のものを含み得る。オンチップ通信システム１１０は、通信データに基づいてアルゴリズム動作を実行できることが理解されている。
【００１５】
[021]  オンチップ通信システム１１０は、グローバルマネージャ１１２及び複数のタイル１１６を含み得る。グローバルマネージャ１１２は、１つ又は複数のタイル１１６と協調するように構成された１つ又は複数のクラスタマネージャ１１４を含み得る。各クラスタマネージャ１１４は、ニューラルネットワーク用のシナプス／ニューロン回路を提供するタイル１１６のアレイと関連付けることができる。例えば、図１のタイルの最上層は、ニューラルネットワークへの入力層を表す回路を提供することができ、タイルの第２の層は、ニューラルネットワークの隠れ層を表す回路を提供することができる。図１に示されるように、グローバルマネージャ１１２は、タイル１１６の２つのアレイと協調するように構成された２つのクラスタマネージャ１１４を含み得る。タイル１１６は、１つ又は複数の乗算器、加算器、乗累算器（例えば、ＳＩＭＤアーキテクチャの乗累算器セット）及び対応するメモリを含み得、グローバルマネージャ１１２の制御の下で通信データにおける演算（例えば、１つ又は複数のアルゴリズム計算）を実行するように構成することができる。
【００１６】
[022]  オフチップメモリ１２０は、読み取り専用メモリ（ＲＯＭ）、消去型プログラム可能読み取り専用メモリ（ＥＰＲＯＭ）又は同様のものを含み得る。オフチップメモリ１２０は、１つ又は複数のプロセッサ内で統合されたオンチップメモリと比べて、低アクセス速度で大量のデータを格納するように構成することができる。
【００１７】
[023]  メモリコントローラ１３０は、１つ又は複数のメモリデバイスの読み取り、書き込み又はリフレッシュを行うことができる。メモリデバイスは、オンチップメモリ及びオフチップメモリ１２０を含み得る。例えば、メモリデバイスは、スタティックランダムアクセスメモリ（ＳＲＡＭ）、電気的消去型プログラム可能読み取り専用メモリ（ＥＥＰＲＯＭ）、消去型プログラム可能読み取り専用メモリ（ＥＰＲＯＭ）、プログラム可能読み取り専用メモリ（ＰＲＯＭ）、読み取り専用メモリ（ＲＯＭ）、磁気メモリ、フラッシュメモリ、又は、磁気若しくは光ディスクなど、任意のタイプの揮発性若しくは不揮発性メモリデバイス又はそれらの組合せとして実装することができる。
【００１８】
[024]  ＤＭＡユニット１４０は、メモリアドレスを生成し、メモリ読み取り又は書き込みサイクルを開始することができる。ＤＭＡユニット１４０は、１つ又は複数のプロセッサによる書き込み及び読み取りが可能ないくつかのハードウェアレジスタを含むことができる。レジスタは、メモリアドレスレジスタ、バイトカウントレジスタ及び１つ又は複数の制御レジスタを含み得る。これらのレジスタは、ソース、送り先、転送方向（入力／出力（Ｉ／Ｏ）デバイスから読み取るか若しくはＩ／Ｏデバイスに書き込む）、転送単位のサイズ及び／又は１バーストで転送されるバイト数のいくつかの組合せを指定することができる。
【００１９】
[025]  ＪＴＡＧ／ＴＡＰコントローラ１５０は、システムアドレス及びデータバスへの直接的な外部アクセスを必要としない低オーバヘッドアクセスのためのシリアル通信インタフェース（例えば、ＪＴＡＧインタフェース）を実装する専用デバッグポートを指定することができる。また、ＪＴＡＧ／ＴＡＰコントローラ１５０は、チップ論理レベル及び様々な部品のデバイス能力を提示するテストレジスタセットにアクセスするためのプロトコルを実装するオンチップテストアクセスインタフェース（例えば、ＴＡＰインタフェース）を指定することもできる。
【００２０】
[026]  周辺インタフェース１６０は、複数のエンドポイントにわたる同時アクセスに対する固有の制限なしで、任意の２つのエンドポイント間の全二重通信をサポートすることができる。
【００２１】
[027]  インターチップリンク１７０は、オンチップ通信システム１１０、オフチップメモリ１２０、メモリコントローラ１３０、ＤＭＡユニット１４０、ＪＴＡＧ／ＴＡＰコントローラ１５０、ＰＣＩｅインタフェース１６０など、ＮＰＵアーキテクチャ１００のすべての内部コンポーネントを互いに接続することができる。
【００２２】
[028]  ＮＰＵアーキテクチャ１００は本開示の実施形態を組み込むが、開示される実施形態は、ディープラーニングなどのいくつかのアプリケーションを加速するためのＳＩＭＤアーキテクチャを有するチップに適用できることが理解される。そのようなチップは、例えば、ディープラーニング用のＧＰＵ、ベクトル処理能力を有するＣＰＵ又はニューラルネットワークアクセラレータであり得る。ＳＩＭＤ又はベクトルアーキテクチャは、一般的に、グラフィックス処理及びディープラーニングなどのデータ並列処理を伴う演算デバイスをサポートするために使用される。ＳＩＭＤアーキテクチャは、複数の処理要素を含み得、処理要素の各々は、複数のデータポイントにおいて同じ動作を同時に実行することができる。
【００２３】
[029]  例えば、プライベートメモリは、複数の並列する処理要素の中の単一の処理要素の各々に対してデータを供給することへの専用のメモリであり得、共有メモリは、すべての並列する処理要素に対してデータを供給することへの専用のメモリを指すことができる。
【００２４】
[030]  図２Ａは、ニューラルネットワークの層２００の例示的な機能を示し、ソフトウェアアルゴリズム２１０及びハードウェア２２０を含む。ハードウェア２２０は、プライベートメモリモジュール２３０、処理ユニットアレイ２４０、共有メモリモジュール２５０、書き込みバッファ２６０、入力オペランド２７０、出力オペランド２８０及び同様のものを含み得る。いくつかの実施形態では、ハードウェア２２０は、タイル（例えば、図１のタイル１１６）内に位置し得る。
【００２５】
[031]  いくつかの実施形態では、処理ユニットアレイ２４０の処理ユニットは、算術論理演算ユニット（ＡＬＵ）、浮動小数点ユニット（ＦＰＵ）、ＣＰＵ、ＧＰＵ又は同様のものであり得る。ＡＬＵは、コンピュータのＣＰＵを含む演算回路の基本的な構築ブロックである。単一のＣＰＵは、１つ又は複数のＡＬＵを含み得る。一般に、ＡＬＵは、整数２進数における算術及びビット単位演算を実行する組合せデジタル電子回路である。処理ユニットアレイ２４０は、複数の処理ユニット２４２、２４４、２４６及び２４８（例えば、図２Ｂに示されるような処理ユニットのアレイ）を含み得る。
【００２６】
[032]  プライベートメモリモジュール２３０は、別個のプライベートメモリブロックに仕切ることができ、その結果、複数の処理ユニット２４２、２４４、２４６及び２４８の各々は、図２Ｂに示されるように、対応するプライベートメモリブロック２３２、２３４、２３６及び２３８を有する。
【００２７】
[033]  入力オペランド２７０は、処理ユニットアレイ２４０によって演算される入力データであり得る。いくつかの実施形態では、図２Ａの入力オペランド２７０は、図２Ｂに示されるように、１つ又は複数のプライベート入力オペランド２７２及び１つ又は複数の共有入力オペランド２７４を含み得る。プライベート入力オペランド２７２は、プライベートメモリモジュール２３０に格納することができ、共有入力オペランド２７４は、共有メモリモジュール２５０に格納することができる。
【００２８】
[034]  ニューラルネットワークのアプリケーションでは、ソフトウェアアルゴリズム２１０は、共有データを有し、共有データは、共有メモリモジュール２５０に格納することができ、共有オペランド２７４として処理ユニットアレイ２４０の複数の処理ユニット２４２、２４４、２４６及び２４８の各々にブロードキャストすることができる。例えば、図２Ａに示されるアルゴリズムは、以下のベクトル演算を演算し、
Ａ＝ｓｉｇｍｏｉｄ（ｂ＋Ｘ＊Ｗ１）  （方程式１）
これは、ディープラーニングアルゴリズムにおいて呼び出される場合が多いニューラルネットワークの層２００における代表的な演算である。方程式１を参照すると、「ｂ」は、一定の値を含み得、「Ｘ」は、共有入力オペランド２７４を含み得、「Ｗ１」は、プライベート入力オペランド２７２を含み得る。
【００２９】
[035]  図２Ａを参照すると、ベクトルサイズは、任意の自然数として設定することができる。ここでは、４のベクトルサイズが例として採用され、ベクトルを演算するための４ウェイＳＩＭＤハードウェアが使用される。処理ユニット２４２、２４４、２４６及び２４８は、以下の演算を並列で演算することができる。
ａ１＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１＊Ｗ１１１＋ｘ２＊Ｗ１２１＋ｘ３＊Ｗ１３１＋ｘ４＊Ｗ１４１）  （方程式２）
ａ２＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１＊Ｗ１１２＋ｘ２＊Ｗ１２２＋ｘ３＊Ｗ１３２＋ｘ４＊Ｗ１４２）  （方程式３）
ａ３＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１＊Ｗ１１３＋ｘ２＊Ｗ１２３＋ｘ３＊Ｗ１３３＋ｘ４＊Ｗ１４３）  （方程式４）
ａ４＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１＊Ｗ１１４＋ｘ２＊Ｗ１２４＋ｘ３＊Ｗ１３４＋ｘ４＊Ｗ１４４）  （方程式５）
【００３０】
[036]  図２Ａの網掛けブロック及び点線は、「ａ１」がどのように計算されるかを示す。この計算から、「Ｗ１」アレイの各列のデータは、処理ユニットアレイ２４０の対応する処理ユニットに対してローカルであり、データは、プライベートメモリモジュール２３０の対応するメモリブロックに相応にプライベート入力オペランド２７２として格納できることが理解されている。例えば、Ｗ１アレイの第１、第２、第３及び第４の列の各々におけるデータは、プライベートメモリモジュール２３０のそれらの対応するメモリブロック２３２、２３４、２３６及び２３８にプライベート入力オペランドとして格納することができる。
【００３１】
[037]  図２Ａを参照すると、Ｗ１アレイは、格納データの行列を含み得、行列の各要素は、Ｗ１ｉｊ又はＷ１＿ｉｊとして表され（後に示されるように）、「ｉ」は行列の行番号を表し、「ｊ」は行列の列番号を表す。例えば、方程式２では、Ｗ１４１は、Ｗ１アレイの行４と列１に位置する要素に格納されたデータを表す。行列の要素をアドレス指定するため、他の一般的に知られている表記も使用することができる。
【００３２】
[038]  同時に、Ｘアレイのデータは、すべての処理ユニット２４２、２４４、２４６及び２４８によって利用され、したがって共有メモリモジュール２５０に共有入力オペランド２７４として格納され、共有メモリモジュール２５０からの読み取りを行うすべてのコンポーネントにブロードキャストされる。方程式２〜５は、ニューラルネットワークプロセッサの層２００において実行される例示的な演算を表し、ａ１、ａ２、ａ３及びａ４を計算するように設計される。
【００３３】
[039]  いくつかの実施形態では、機械学習又はディープラーニングは、ニューラル処理の１つ又は複数の層に対するアルゴリズムを実施することによって遂行された入力データに基づいて最終結果を生成するためにニューラルネットワークプロセッサを訓練することを含む。例えば、図２Ａの層２００は、バイアスｂ、Ｘアレイに格納されたデータ及びＷ１アレイに格納されたデータを使用して演算を実行するように構成されたアルゴリズムを含む第１の層を表す。第２及び第３の層（図示せず）は、バイアスｂ、Ｘアレイに格納されたデータ並びにＷ２及びＷ３アレイに格納されたデータを使用するアルゴリズムを含み得る。各層は、バイアスｂの異なる値及び「Ｗ」アレイに格納された異なるパラメータを含み得る。
【００３４】
[040]  図２Ａを参照すると、例えば、アレイＸは、異なるクラスの個人のスコアを含み得る。アレイＸのｘ１の値は、学生Ａの数学のスコアであり得、ｘ２は、英語のスコアであり得、ｘ３は、歴史のスコアであり得、ｘ４は、科学のスコアであり得る。最終結果は、スコア（入力データ）に基づいて、個人が学校への入学許可を得られるか又は入学を拒否されるかであり得る。図２Ａに示されるように及び方程式２〜５において説明されるように、データｘ１〜ｘ４は、「共有」され、ａ１〜ａ４の計算において共通である。
【００３５】
[041]  図３は、多層ネットワークにおけるデータ共有を示す。本明細書で説明されるデータ共有は、以前のプライベートデータがプログラムの後の段階においてどのようにして共有データになり得るかを指す。いくつかの実施形態では、ニューラルネットワークアーキテクチャ３００は、複数の層（例えば、層３１０及び３２０）を含む。いくつかの実施形態では、層３１０の出力オペランド２８０は、層３２０に対する入力オペランド２７０として使用することができる。いくつかの実施形態では、１つの層の出力オペランド２８０は、１つ又は複数の層によって入力オペランド２７０として利用することができる。
【００３６】
[042]  例えば、層３１０では、ａ１は、プライベートメモリモジュール２３０の処理ユニット２４２によって計算される。ａ１のデータは、層３２０に対するブロードキャスト入力になる。一般に、ニューラルネットワークは、層に構造化することができる。各層は、その入力において１つ又は複数の計算を実行し、出力を生成することができる。層の出力は、さらなる処理のために、次の層に伝えることができる。例えば、前の層の出力は、次の層に対する入力であり得る。それに従って、ローカルで生成された「ａ」は、共有メモリ２５０に戻して格納するか、又は、プライベートメモリ２３０に格納し、後に共有メモリ２５０にコピーしなければならない。
【００３７】
[043]  プライベートメモリ２３０に格納し、後に共有メモリ２５０にコピーすることに対する代替の解決法として、ａ１からの出力オペランド２８０は、メモリにコピーするよりも、共有メモリ２５０に直接戻して格納することができる。それにもかかわらず、この代替の解決法は、依然として、プログラムを減速させる恐れがある。単一の処理ユニット（例えば、処理ユニット２４２）は、１つのサイクルあたりたった１つの乗加算演算（例えば、Ｘｉ＊Ｗ１＿ｉｊ）しか終了できないため、「ａ」の各計算は、複数のサイクルにわたって実行され得る。この理由のため、各サイクルにおいてプライベートメモリ２３０からたった１つのオペランドＷ１＿ｉｊしか読み取られず、従って、共有メモリ２５０からは、たった１つの「Ｘ」しか必要ではない。結果的に、各メモリモジュールの共通の設計は、１つのサイクルあたり単一読み取り／単一書き込みである。最後のサイクルにおいて複数の処理ユニットによってすべての「ａ」が同時に生成される際は、共有メモリ２５０は、それらをすべて書き戻す能力を有さない可能性がある。
【００３８】
[044]  いくつかの実施形態では、これらの出力オペランド２８０を個別に使用するためのさらなる時間を共有メモリ２５０に与えるための書き込みバッファ２６０が導入される。しかし、処理ユニットアレイ２４０の出力速度が書き込みバッファ２６０の幅より速い（例えば、ＡのサイズがＸより大きい）際は、書き込みバッファ２６０はバックプレッシャを伝播し、処理ユニットアレイ２４０を強制的に減速させ、それにより、プログラム全体の実行が減速する。
【００３９】
[045]  図４Ａは、メモリモジュールの統合構造を含む例示的なハードウェアシステム４００の概略図を示す。ハードウェアシステム４００は、統合記憶媒体４０５と、処理ユニット２４２、２４４、２４６及び２４８とを含む。統合記憶媒体４０５は、１つ又は複数の記憶モジュール４１０を含み、１つ又は複数の記憶モジュール４１０の各々は、入力オペランド２７０、出力データ２８０を格納するように構成された記憶セル４３０を含む。複数の記憶モジュール４１０は、統合記憶媒体４０５を形成するために、単一の媒体にマージすることができる。各記憶モジュール４１０は、プライベート記憶モジュール４１２及び共有記憶モジュール４１４を含み得る。
【００４０】
[046]  ハードウェアシステム４００は、複数の処理ユニット２４２、２４４、２４６及び２４８を含み得る。処理ユニットアレイ２４０の複数の処理ユニットの各々は、１つ又は複数の記憶モジュールと通信するように構成される。例えば、処理ユニット２４２は、プライベート記憶モジュール４１２からプライベート入力オペランド２７２を受信することができる。また、処理ユニット２４２は、１つ又は複数の共有記憶モジュール４１４から共有入力オペランド２７４を受信することもできる。いくつかの実施形態では、処理ユニットアレイ２４０は、プライベート記憶モジュール４１２からプライベート入力オペランド２７２を受信し、共有記憶モジュール４１４から共有入力オペランド２７４を受信し、及びプライベート入力オペランド２７２及び共有入力オペランド２７４に基づいて出力オペランド２８０を生成するように構成される。
【００４１】
[047]  図４Ｂに示されるように、記憶セル４３０の各々は、一意識別子４４０によって一意的に識別することができる。一意識別子４４０は、高位ビット４４２及び低位ビット４４４を含むビットアドレスか、高位及び低位バイトを含むバイトアドレスか又はそれらの組合せであり得る。演算においては、高位ビット４４２は、最上位ビット（ＭＳＢ）であり得る。また、ＭＳＢは、上位の数字になればなるほど左側に記載されるという位置表記法により、左端ビットと呼ぶこともできる。他方では、低位ビット４４４は、右端に位置するビットと呼ばれる。例えば、「２＿Ｅ５」というビットアドレスを有する一意識別子４４０では、高位ビット４４２は、左端ビット（すなわち「２」）を指し、低位ビット４４４は、右側のビット（すなわち「Ｅ５」）を指す。
【００４２】
[048]  いくつかの実施形態では、記憶セル４３０は、プライベート記憶セル４３２又は共有記憶セル４３４である。プライベート記憶セル４３２は、プライベート記憶モジュール４１２内に位置し得る。共有記憶セル４３４は、共有記憶モジュール４１４内に位置し得る。一意識別子４４０の高位ビット４４２は、オペランド（２７０、２８０）のターゲット記憶モジュールを示すように構成され、一意識別子４４０の低位ビット４４４は、オペランド（２７０、２８０）のターゲット記憶モジュール内のターゲット記憶セルを示すように構成される。例えば、「２＿Ｅ５」というビットアドレスを有する一意識別子４４０は、記憶モジュール「２」と、記憶モジュール「２」内の記憶セル「Ｅ５」とを指す。言い換えれば、高位ビット４４２は、記憶モジュールが「プライベート」である処理ユニットも示し得、低位ビット４４４は、記憶モジュール内の場所も示し得る。
【００４３】
[049]  プライベート記憶セル４３２及び共有記憶セル４３４は、物理的に区別できない記憶セルであり、そのように事前にラベル付けされないことを理解されたい。記憶セルに対する「プライベート」及び「共有」の属性は、データのアドレス指定を行うようにプログラムされたコンパイラが生成した命令に基づいて決定される。例えば、データは、いかなるセルにも格納することができる。読み取りステップの間、コンパイラが生成した命令がデータを「プライベート」として示す場合は、データは、プライベート入力オペランド２７２として並列で読み取ることができる。或いは、コンパイラが生成した命令がデータを「共有」として示す場合は、データは、共有入力オペランド２７４として読み取ることができる。
【００４４】
[050]  いくつかの実施形態では、一意識別子４４０は、例えば、数字、英数字、１６進数（例えば、図４Ａに示されるもの）、８進数又は同様のものなど、ソフトウェアアドレス指定モードによってアドレス指定可能な他の文字を含む。
【００４５】
[051]  図４Ａに戻ると、処理ユニットアレイ２４０又は複数の処理ユニットの各々は、出力データ２８０を生成することができる。出力データ２８０は、プライベート出力データ２８２又は共有出力データ２８４であり得、ニューラルネットワークプロセッサの多層アルゴリズムの次の層における動作によって決定される。図４Ａに示されるように、出力データ２８０は、統合記憶媒体の記憶モジュール４１０の各々に並列に書き戻されるため、プライベート出力データ２８２と見なすことができる。
【００４６】
[052]  いくつかの実施形態では、ニューラルネットワークプロセッサは、コンパイラ（図示せず）を含む。コンパイラは、実行可能プログラムを作成するために、あるプログラミング言語で記載されたコンピュータコードを別のプログラミング言語に変換するプログラム又はコンピュータソフトウェアである。マシニングアプリケーションでは、コンパイラは、例えば、前処理、字句解析、構文解析、意味解析、入力プログラムから中間表現への変換、コード最適化及びコード生成、又は、それらの組合せなどの様々な動作を実行することができる。
【００４７】
[053]  図５は、本開示の実施形態と一致する、例示的なデータ構造化動作５００のプロセスフローチャートである。例えば、データ構造化動作５００は、オンチップ通信システム（例えば、オンチップ通信システム１１０）によって実行することができる。
【００４８】
[054]  ステップ５０２は、複数の記憶セル（例えば、記憶セル４３０）を含むように統合記憶媒体（例えば、統合記憶媒体４００）の記憶モジュール（例えば、記憶モジュール４１０）を構成することを含む。いくつかの実施形態では、ステップ５０２は、プライベート記憶セル（例えば、プライベート記憶セル４３２）を含むようにプライベート記憶モジュール（例えば、プライベート記憶モジュール４１２）を構成すること、及び／又は、共有記憶セル（例えば、共有記憶セル４３４）を含むように共有記憶モジュール４１４（例えば、共有記憶モジュール４１４）を構成することを含む。記憶セルを含むように記憶モジュールを構成することは、利用可能な全記憶空間、ソフトウェアプログラム又はアルゴリズム、ハードウェア制限、時間制限及び同様のものに基づいて、記憶空間を割り当てることを含み得る。ソフトウェアアプリケーション又はアルゴリズムが多層であり、プライベートデータより多くの共有データを含む複数の演算層を必要とする場合は、記憶モジュールは、より多くの共有記憶セル又はより多くの共有記憶モジュールを含むように構成することができる。
【００４９】
[055]  ステップ５０４は、処理ユニット（例えば、処理ユニットアレイ２４０）又は複数の処理ユニットと通信するように記憶媒体（例えば、図４Ａの統合記憶媒体４００）を構成することを含む。いくつかの実施形態では、処理ユニットは、算術論理演算ユニット（ＡＬＵ）、浮動小数点ユニット（ＦＰＵ）、中央処理装置（ＣＰＵ）又はグラフィックス処理ユニット（ＧＰＵ）である。単一のＣＰＵは、１つ又は複数のＡＬＵを含み得る。一般に、ＡＬＵは、整数２進数における算術及びビット単位演算を実行する組合せデジタル電子回路である。処理ユニットは、複数の処理ユニット（例えば、並列演算するように構成された処理ユニットのアレイ）を含み得る。
【００５０】
[056]  処理ユニットと通信することは、処理ユニットによって生成されたデータを受信すること、又は、格納データを処理ユニットに提供することを含み得る。記憶媒体は、演算予定のデータのソース又はデータ記憶のターゲットであり得る。いくつかの実施形態では、ハードウェアシステムは、複数の記憶モジュールからデータを受信するように構成された単一の処理ユニットを含む。また、ハードウェアシステムは、対応する記憶モジュールからのみデータを受信するように構成された各記憶モジュールの固有の処理ユニットも含み得る。
【００５１】
[057]  ステップ５０６では、処理ユニット（例えば、処理ユニットアレイ２４０）は、コンパイラによって生成された命令に基づいて出力データ（例えば、出力データ２８０）を生成する。いくつかの実施形態では、コンパイラは、実行可能プログラムを作成するために、あるプログラミング言語で記載されたコンピュータコードを別のプログラミング言語に変換するプログラム又はコンピュータソフトウェアである。コンパイラは、記憶媒体からデータにアクセスするように構成された命令セットを生成し、アクセスされたデータに対する所望の演算を実行し、演算に基づいて出力データを生成し、後続の処理のために、生成した出力データを記憶媒体に戻して格納することができる。また、命令は、入力及び出力データに特性を割り当てることも含み得る。データの特性は、プライベート、共有、制限又は同様のものであり得る。
【００５２】
[058]  本明細書で論じられる例では、コンパイラは、「Ａ＝Ｘ＊Ｗ１」というベクトル演算のために以下のコードを生成し、「Ｘ」はオペランド２と見なすことができ、「Ｗ１」はオペランド１と見なすことができる。命令セットについては、本開示の実施形態に従って、図４Ａを参照して説明する。
ｉ１：ＬＯＡＤ．ＳＩＭＤ  ＯＰ１  ０×０＿００
ｉ２：ＬＯＡＤ．ＳＨＡＲＥＤ  ＯＰ２  ０×０＿Ｆ０
ｉ３：ＭＵＬ  ＲＥＳＵＬＴ  ＯＰ１  ＯＰ２
ｉ４：ＳＴＯＲＥ．ＳＩＭＤ  ＲＥＳＵＬＴ  ０×０＿Ｆ１
【００５３】
[059]  前述の命令セット内の命令は、一般に、データの動作、データの特性及び記憶媒体内のターゲット場所を含む。
【００５４】
[060]  いくつかの実施形態では、データの動作は、ロード（読み取り）、格納（書き込み）、算術演算（例えば、加算、減算、乗算、除算）、コピー、ペースト及び同様のものを含む。データの特性は、一般に、記憶媒体内のデータのアクセス可能性を指し得る。データの特性は、プライベート、共有、制限、許可、グローバル、ローカル又はそれらの組合せを含み得る。データは、一般に、オペランドと呼ばれる。データは、実行されているベクトル演算に基づいて、入力オペランド（例えば、オペランド１（ＯＰ１）及びオペランド２（ＯＰ２））又は出力データであり得る。
【００５５】
[061]  ｉ１〜ｉ４の命令セットでは、ロード／格納命令のサブフィールドは、データをどのようにロード／格納するかを含意する。「．ＳＨＡＲＥＤ」というサブフィールドは、共有データとしてデータを読み取るか又は書き込むべきであることを含意する。このモードでは、高位ビット（例えば、図４Ｂの４４２）と低位ビット（例えば、図４Ｂの４４４）は両方とも、入力オペランド又は出力データのターゲット場所を決定するために利用される。「．ＳＩＭＤ」というサブフィールドは、プライベートデータとしてデータを並列に読み取るか又は書き込むべきであることを含意し、高位ビットは、ハードウェアによって無視することができ、低位ビットは、入力オペランド又は出力データのターゲット場所を決定するために利用される。
【００５６】
[062]  命令ｉ１では、各処理ユニット（例えば、図４Ａの２４２、２４４、２４６及び２４８）は、入力オペランド１（例えば、プライベート入力オペランド２７２）を並列に読み取る。ビットアドレス「０＿００」の高位ビット「０」は利用されず、低位ビット「００」は、記憶セル及び記憶セルの特性（例えば、プライベート記憶セル４３２）を示す。例えば、図２Ａを参照すると、「Ｗ１」アレイの行１のすべてのデータ（Ｗ１＿１ｉ）は同時に、しかし対応する処理ユニットの各々に対しては別々に読み取られる。「ＬＯＡＤ．ＳＩＭＤ」フィールドは、データを並列に読み取るべきであることを含意する。
【００５７】
[063]  命令ｉ２では、図４Ａに示されるように、入力オペランド２（例えば、共有入力オペランド２７４）は、１回読み取られ、すべての処理ユニットにブロードキャストされる。ビットアドレス「０＿Ｆ０」の高位ビット「０」は、データが格納される記憶モジュールを示し、低位ビット「Ｆ０」は、データが格納される記憶セル及び記憶セルの特性（例えば、共有記憶セル４３４）を示す。例えば、図２Ａを参照すると、「Ｘ」アレイの「Ｘ１」のデータは、１回読み取られ、対応する処理ユニットの各々にブロードキャストされる。ＬＯＡＤ．ＳＨＡＲＥＤフィールドは、すべての処理ユニット間で共有データとしてデータを読み取るべきであることを含意する。
【００５８】
[064]  命令ｉ３では、処理ユニットは、出力データ「Ａ」を生成するために、ベクトル演算によって定義されるように、入力オペランド１及び２の乗算を実行する。算術演算は、加算、減算、乗算若しくは除算又はそれらの組合せの基本的な算術関数を含み得る。いくつかの実施形態では、処理ユニットは、複素数算術及び代数関数、対数関数、べき乗又は同様のものを実行するように構成される。
【００５９】
[065]  命令ｉ４では、命令ｉ３において生成された出力データ「Ａ」は、さらなる処理のために記憶媒体に並列に戻して格納される。生成された出力データ「Ａ」（例えば、出力データ２８０）は、多層アルゴリズムの次の層の入力オペランドとして使用することができる。ビットアドレス「０＿Ｆ１」の高位ビット「０」は、ハードウェアによって利用されず、低位ビット「Ｆ１」は、出力データを格納するための記憶セル及び記憶セルの特性（例えば、共有記憶セル４３４）を示す。例えば、図２Ｂを参照すると、出力データ２８０は、統合記憶媒体の共有又はプライベート記憶モジュールに格納する前に、一時記憶装置（例えば、書き込みバッファ２６０）に一時的に格納することができる。
【００６０】
[066]  ステップ５０８では、生成された出力データは、さらなる処理のために統合記憶媒体に戻して格納される。一般に、ニューラルネットワークは、多層に構造化することができる。層の出力は、さらなる処理のために、次の層に伝えることができる。例えば、前の層の出力は、次の層に対する入力であり得る。
【００６１】
[067]  前述の仕様では、実装形態ごとに変化し得る多くの特有の詳細を参照して、実施形態について説明した。説明される実施形態の適応及び変更は、ある程度行うことができる。本明細書で開示される発明の仕様及び実践を考慮することにより、他の実施形態が当業者に明らかになり得る。仕様及び例は単なる例示と見なされ、本発明の真の範囲及び精神は以下の特許請求の範囲によって示されることが意図される。また、図に示されるステップのシーケンスは、単なる例示を目的とし、ステップの特定のシーケンスに限定することは意図しないことも意図される。従って、当業者は、同じ方法を実施する間、異なる順番でこれらのステップを実行できることを理解することができる。
【図１】
2021507383.tif 000003
【図２Ａ】
2021507383.tif 000004
【図２Ｂ】
2021507383.tif 000005
【図３】
2021507383.tif 000006
【図４Ａ】
2021507383.tif 000007
【図４Ｂ】
2021507383.tif 000008
【図５】
2021507383.tif 000009
【国際調査報告】
2021507383.tif 000010
2021507383.tif 000011