(57)【要約】  本開示は、少なくともＮ個の処理ユニット及びローカルメモリをそれぞれ有するＭ個の処理要素を有するメモリアーキテクチャを提供するプロセッサを提供する。このプロセッサは、Ｍ個の処理要素のうちの第１の処理要素であって、計算操作を実行するように構成される第１の組のＮ個の処理ユニットと、Ｎ個の処理ユニットによって利用されるデータを記憶するように構成される第１のローカルメモリとを含む第１の処理要素を含む。このプロセッサは、Ｍ個の処理要素からデータを受信し、Ｍ個の処理要素の各処理要素に共用データを提供するように構成されるデータハブを更に含む。
2021507386.tif 000002
【特許請求の範囲】
【請求項１】
少なくともＮ個の処理ユニット及びローカルメモリをそれぞれ有するＭ個の処理要素を有するメモリアーキテクチャを含むプロセッサであって、Ｍ、Ｎは１を上回る整数からなり、前記メモリアーキテクチャは、
前記Ｍ個の処理要素のうちの第１の処理要素であって、
計算操作を実行するように構成される第１の組のＮ個の処理ユニット、及び
前記Ｎ個の処理ユニットによって利用され得るデータを記憶するように構成される第１のローカルメモリ
を含む第１の処理要素と、
前記Ｍ個の処理要素からデータを受信することができ、前記Ｍ個の処理要素の１つから前記Ｍ個の処理要素の他の処理要素に共用データを提供することができるデータハブと
を含む、プロセッサ。
【請求項２】
前記第１の処理要素が、
前記データハブから共用データを受信し、前記第１のローカルメモリに前記共用データを提供するように構成される第１のマルチプレクサ
を含む、請求項１に記載のプロセッサ。
【請求項３】
前記データハブは、第２のマルチプレクサに前記共用データを提供するように構成され、前記第２のマルチプレクサは、前記第１の組のＮ個の処理ユニットのうちの１つ又は複数に前記共用データを提供するように構成される、請求項１又は２に記載のプロセッサ。
【請求項４】
前記第１のローカルメモリが、
前記第１の組のＮ個の処理ユニットのうちの少なくとも１つによって利用されるプライベートデータを記憶するように構成される第１の組の１つ又は複数の記憶ブロックと、前記データハブから受信される共用データを記憶するように構成される第２の組の１つ又は複数の記憶ブロックとを含む複数のローカルメモリ記憶ブロック
を含む、請求項１〜３の何れか一項に記載のプロセッサ。
【請求項５】
前記第１のローカルメモリがフルライトポート、フルリードポート、ナローライトポート、及びナローリードポートを有し、前記第１の組の１つ又は複数の記憶ブロックが、前記フルライトポートを介してプライベートデータを取得し、前記フルリードポートを介してプライベートデータを送信するように構成され、前記第２の組の１つ又は複数の記憶ブロックが、前記ナローライトポートを介して共用データを取得し、前記ナローリードポートを介して共用データを送信するように構成される、請求項４に記載のプロセッサ。
【請求項６】
前記データハブが、前記ナローリードポートを介して前記第１のローカルメモリから共用データを受信するように構成される、請求項５に記載のプロセッサ。
【請求項７】
前記データハブが、前記フルライトポートを介して前記第１の組の１つ又は複数の記憶ブロックに共用データを送信するように構成される、請求項５に記載のプロセッサ。
【請求項８】
前記データハブが、前記ナローライトポートを介して前記第２の組の１つ又は複数の記憶ブロックに共用データを送信するように構成される、請求項５に記載のプロセッサ。
【請求項９】
前記Ｎ個が前記Ｍ個と同一の数である、請求項１〜８の何れか一項に記載のプロセッサ。
【請求項１０】
前記データハブが、分散パターンを使用して共用データを分散させるように構成される、請求項１〜９の何れか一項に記載のプロセッサ。
【請求項１１】
前記分散パターンが、ブロードキャストパターン、ＸＯＲパターン、シフトパターン、又はローテートパターンを含む、請求項１０に記載のプロセッサ。
【請求項１２】
前記データハブが、前記第１の組のＮ個の処理ユニットに共用データを送信するように構成される、請求項１に記載のプロセッサ。
【請求項１３】
少なくともＮ個の処理ユニット及びローカルメモリをそれぞれ有するＭ個の処理要素と通信することができる集中型データハブによって実行される方法であって、
Ｍ個の処理要素のうちの１つの処理要素からデータを取得すること、
前記取得済みのデータの分散パターンを決定すること、及び
前記分散パターンを使用して前記Ｍ個の処理要素のうちの少なくとも１つ又は複数に前記取得済みのデータを分散させること
を含む、方法。
【請求項１４】
前記分散パターンが、ブロードキャストパターン、ＸＯＲパターン、シフトパターン、又はローテートパターンを含む、請求項１３に記載の方法。
【請求項１５】
前記分散パターンが、前記分散パターンを使用して取得済みのデータをどのように分散させるのかを示すオフセットを含む、請求項１４に記載の方法。
【請求項１６】
前記分散パターンを決定することが、
分散指示を受信すること、及び
前記分散指示に基づいて前記分散パターンを決定すること
を含む、請求項１３〜１５の何れか一項に記載の方法。
【請求項１７】
集中型データハブに結合される複数の処理要素のうちの１つの処理要素によって実行される方法であって、
前記集中型データハブから共用データを取得すること、
前記１つの処理要素にとってローカルなプライベートデータを取得すること、
前記１つの処理要素のローカルメモリ内に前記プライベートデータを記憶すること、
前記１つの処理要素の１つ又は複数の処理ユニットに前記共用データ及び前記記憶済みのプライベートデータをオペランドとして提供すること、及び
対応する１つ又は複数の処理ユニットによって実行される１つ又は複数の演算から１つ又は複数の結果を生成すること
を含む、方法。
【請求項１８】
前記取得済みの共用データを前記ローカルメモリ内に記憶することを更に含む、請求項１７に記載の方法。
【請求項１９】
前記取得済みの共用データを前記ローカルメモリ内に記憶することが、前記ローカルメモリ内の第１の組の１つ又は複数のブロック内に前記共用データを記憶することを含み、
前記ローカルメモリ内に前記プライベートデータを記憶することが、前記ローカルメモリ内の第２の組の１つ又は複数のブロック内に前記プライベートデータを記憶することを含む、
請求項１８に記載の方法。
【請求項２０】
前記取得済みの共用データが、前記ローカルメモリ内に記憶されることなしに前記処理要素の前記１つ又は複数の処理ユニットに直接提供される、請求項１７に記載の方法。
【請求項２１】
前記取得されるプライベートデータが、前記処理要素の前記１つ又は複数の処理ユニットによって生成されるデータに対応する、請求項１７〜２０の何れか一項に記載の方法。
【請求項２２】
前記ローカルメモリ内に前記生成済みの１つ又は複数の結果を記憶することを更に含む、請求項１７〜２１の何れか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
[0001]  本願は、参照によりその全内容を本明細書に援用する、２０１７年１２月２２日に出願された米国仮特許出願第６２／６１０，０９８号、及び２０１８年１１月２７日に出願された米国特許出願第１６／２０１，９０４号に基づき、それらの優先権を主張する。
【背景技術】
【０００２】
背景
[0002]  ディープニューラルネットワークアルゴリズムは、非常に幅広の単一命令多重データ（ＳＩＭＤ）処理ユニット及び大きいオンチップ記憶域を含むハードウェアアーキテクチャを一般的にもたらす多数の行列計算を伴う。ディープラーニングの性質により、異なるＳＩＭＤレーンが時々データをやり取りする必要がある。レーン間のデータ処理及び計算を提供する幾つかのメモリアーキテクチャが存在するが、それらのアーキテクチャは、メモリアクセスレイテンシの許容できない増加、バンク競合問題の許容できない増加、性能問題の許容できない増加等の幾つかの理由から不十分である。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
[0003]  本開示は、少なくともＮ個の処理ユニット及びローカルメモリをそれぞれ有するＭ個の処理要素を有するメモリアーキテクチャを提供するプロセッサを提供する。このプロセッサは、Ｍ個の処理要素のうちの第１の処理要素を含み、第１の処理要素は、計算操作を実行するように構成される第１の組のＮ個の処理ユニット、及びＮ個の処理ユニットによって利用されるデータを記憶するように構成される第１のローカルメモリを含む。このプロセッサは、Ｍ個の処理要素からデータを受信し、Ｍ個の処理要素の各処理要素に共用データを提供するように構成されるデータハブを更に含む。
【０００４】
[0004]  本開示は、少なくともＮ個の処理ユニット及びローカルメモリをそれぞれ有するＭ個の処理要素と通信することができる集中型データハブによって実行される方法を提供する。この方法は、Ｍ個の処理要素のうちの１つの処理要素からデータを取得すること、取得済みのデータの分散パターンを決定すること、及び分散パターンを使用してＭ個の処理要素のうちの少なくとも１つ又は複数に取得済みのデータを分散させることを含む。
【０００５】
[0005]  本開示は、集中型データハブに結合される複数の処理要素のうちの１つの処理要素によって実行される方法を提供する。この方法は、集中型データハブから共用データを取得すること、処理要素にとってローカルなプライベートデータを取得すること、処理要素のローカルメモリ内にプライベートデータを記憶すること、処理要素の１つ又は複数の処理ユニットに共用データ及び記憶済みのプライベートデータをオペランドとして提供すること、及び対応する１つ又は複数の処理ユニットによって実行される１つ又は複数の演算から１つ又は複数の結果を生成することを含む。
【０００６】
図面の簡単な説明
[0006]  本開示の実施形態及び様々な態様を以下の詳細な説明及び添付図面に示す。図示の様々な特徴は縮尺通り描かれていない。
【図面の簡単な説明】
【０００７】
【図１】[0007]ＳＩＭＤレーン間でやり取りされるデータを記憶する例示的な集中型共用メモリを示す概略図である。
【図２】[0008]ＳＩＭＤレーン間でやり取りされるデータを記憶する例示的な分散型共用メモリを示す概略図である。
【図３】[0009]二点間クロスバーを使用する分散型共用メモリの例示的実装形態を示す概略図である。
【図４Ａ】[0010]接続シフト法によるデータ共用を伴う分散型共用メモリアーキテクチャの例示的実装形態を示す概略図である。
【図４Ｂ】[0011]二次元メッシュ接続法によるデータ共用を伴う分散型メモリアーキテクチャの例示的実装形態を示す概略図である。
【図５】[0012]本開示の実施形態による、例示的なニューラルネットワーク処理ユニット（ＮＰＵ）チップを示す概略図である。
【図６】[0013]本開示の実施形態による、２層データ共用アーキテクチャの例示的実装形態を示す概略図である。
【図７】[0014]本開示の実施形態による、データハブを有する図６の例示的な２層データ共用アーキテクチャによって利用される例示的な接続方法を示す概略図である。
【図８】[0015]本開示の実施形態による、図７の例示的なデータハブによって提供される例示的なスウィズル機能を示す。
【図９】[0016]本開示の実施形態による、集中型データハブからデータを分散させるための例示的方法の流れ図を示す。
【図１０】[0017]本開示の実施形態による、処理要素の１つ又は複数の処理ユニットにデータを分散させるための例示的方法の流れ図を示す。
【発明を実施するための形態】
【０００８】
詳細な説明
[0018]  以下の説明は添付図面を参照し、別段の定めがない限り添付図面では異なる図中の同じ番号が同じ又は同様の要素を表す。例示的実施形態についての以下の説明において記載する実装形態は、本発明と合致する全ての実装形態を表すわけではない。代わりにそれらの実装形態は、添付の特許請求の範囲の中で列挙する本発明に関係する態様と合致する機器及び方法の例に過ぎない。
【０００９】
[0019]  ＳＩＭＤレーン間でやり取りされるデータを記憶する例示的な集中型共用メモリを示す概略図である図１を参照する。この集中型共用メモリアーキテクチャは、複数の処理ユニット（例えば図１に示す処理ユニット０、処理ユニット１、処理ユニットＮ）及びメモリブロックを含む。
【００１０】
[0020]  これらの処理ユニットは、同じ又は異なる機能を提供するように、及び同じメモリブロック（例えば図１のメモリ）に接続するように構成することができる。各処理ユニットは、ＳＩＭＤレーンによってメモリの記憶ブロックに接続される。メモリブロックは、電気的に接続される複数の記憶ブロックを含む。ＳＩＭＤレーン間のデータのやり取りはメモリの記憶ブロック間のデータのやり取りによって実現される。データはメモリに接続する任意の処理ユニットによって要求されてもよく、要求側の処理ユニットに送信され得る。
【００１１】
[0021]  しかし、集中型共用メモリアーキテクチャは拡張性がない。各ＳＩＭＤレーンが処理ユニット及びメモリ内の一部の記憶ブロックに電気的に接続されるので、ＳＩＭＤレーンの数が増加するとき、メモリのサイズが更に速い速度で増加し、それは記憶ブロックにアクセスするための主要ルートが様々なデータアクセス要求によって共用されるようにメモリが集中化されるからである。様々なプロセスが主要ルートに沿って様々な記憶ブロックにアクセスするとき、バンクの競合が発生し得る。記憶ブロックにアクセスするためのルートは、或るプロセスが或る時点において或る記憶ブロックにアクセスすること、及び別のプロセスが別の時点において別の記憶ブロックにアクセスすることしか許可できない。換言すれば、記憶ブロックへのアクセスは優先順位付けされ線形化される。２つのアクセスが同時に生じることはできない。従って、バンク競合問題は、ＳＩＭＤレーン数の増加と共に一層深刻になる。バンク競合問題は、典型的なニューラルネットワーク計算応用にとって許容できないレベルまでメモリアクセスレイテンシを素早く増加させる。
【００１２】
[0022]  次に、ＳＩＭＤレーン間でやり取りされるデータを記憶する例示的な分散型共用メモリ（ＤＳＭ）を示す概略図である図２を参照する。このＤＳＭアーキテクチャでは、複数の処理ユニット及び複数のメモリブロックがある。各処理ユニットはメモリブロックに関連し、メモリブロックに電気的に接続される。共用メモリブロックはアドレスによってグローバルにアドレス指定されるが、複数の計算ノード内に分散される。各コンピュータノードは、遠隔データにアクセスするためのメモリマネージャを含むように構成される。
【００１３】
[0023]  コンピュータノードを分散式に構成することによってＤＳＭが集中型メモリよりも上手く拡張し、それはアーキテクチャが同時のアクセス要求によって引き起こされるバンク競合問題を回避するからである。しかし、非分散型の共用メモリアーキテクチャと比較してＤＳＭアーキテクチャの方がデータへのアクセスが遅い。これは処理レーンがかなりの数に増え、それにより計算ノード間でデータをやり取りすることに関する問題が生じる場合に特に当てはまる。データへの遅いアクセスは、ＤＳＭアーキテクチャ内の計算ノード間でデータをやり取りすることによって主に引き起こされる。しばしば、遠隔データへのアクセスが複数の計算ノードを関与させなければならない場合があり、かかる形態はアクセスを著しく遅延させる。
【００１４】
[0024]  現在、ＤＳＭアーキテクチャは、幾つかの異なるやり方でデータをやり取りする。例えば図３に示すように、各処理ユニットが分散型ノードのそれぞれの上にあるメモリにアクセスすることを可能にする、全ての分散型メモリを接続するための二点間クロスバーがある。この形態はノードの各メモリマネージャを各メモリブロックに結合し、それによりメモリマネージャに関連する処理ユニットが自らの専用アクセスルートによって各メモリブロックにアクセスできるようにすることによって実装される。しかし、計算ノードの数と共にクロスバーのコストが、非常に速く指数関数的に増加する。つまり、８対８のクロスバーのコストは４対４のクロスバーのコストの４倍を超える可能性がある。
【００１５】
[0025]  図４Ａは、ＳＩＭＤレーン間でデータをやり取りし共用するための別のＤＳＭアーキテクチャを示す。各ノードは自らの左側の近傍及び右側の近傍にしか接続しない。遠隔ノードに達するには、データが所期の宛先に達するために複数のホップを必要とすることになる。従って、データ転送性能がクロスバーの方法に匹敵しないので、このアーキテクチャは性能問題に見舞われる。
【００１６】
[0026]  より複雑な接続は（図４Ｂに示す）２Ｄメッシュ又は３Ｄトポロジを含み得る。２Ｄメッシュでは計算ノードが２Ｄアレイとして編成され、各ノードが自らの左側の近傍、右側の近傍、上側の近傍、及び下側の近傍と通信する。３Ｄトポロジ（３Ｄトーラス又はハイパーキューブ等）では、各計算ノードが６個の近傍と通信することができる。複数のあり得る宛先があるので、これらのアーキテクチャは、入力データパケットを何処に転送すべきかを決定するために各ノード内にルータを通常導入する必要がある。ルーティングスキームは非常に複雑であり、スキームが慎重に設計されていない場合はデッドロックを引き起こす可能性がある。従ってこのような構成は、遠隔データアクセスを滅多に伴わない粗粒度のデータの共用に一般的に使用される。
【００１７】
[0027]  本開示の実施形態は、集中型アーキテクチャ及びＤＳＭアーキテクチャの両方を上手く利用し、両方の欠点を克服するために階層化混合アーキテクチャを使用する。開示する実施形態は、分散型共用メモリ間でデータを低コストで効率的且つ迅速にやり取りするためにスマートデータハブも使用する。
【００１８】
[0028]  図５は、本開示の実施形態による、例示的なニューラルネットワーク処理ユニット（ＮＰＵ）アーキテクチャ５００を示す。図５に示すように、ＮＰＵアーキテクチャ５００は、オンチップ通信システム５０２、ホストメモリ５０４、メモリコントローラ５０６、直接メモリアクセス（ＤＭＡ）ユニット５０８、ジョイントテストアクショングループ（ＪＴＡＧ）／テストアクセスエンド（ＴＡＰ）コントローラ５１０、周辺インタフェース５１２、バス５１４、グローバルメモリ５１６等を含むことができる。オンチップ通信システム５０２は、伝達されるデータに基づいてアルゴリズム演算を実行できることが理解されよう。更に、ＮＰＵアーキテクチャ５００は、メインメモリの機能を果たすためにオンチップメモリブロック（例えば４ブロックの８ＧＢ第２世代高帯域幅メモリ（ＨＢＭ２））を有するグローバルメモリ５１６を含むことができる。
【００１９】
[0029]  チップ通信システム５０２は、グローバルマネージャ５０２２及び複数のコア５０２４を含むことができる。グローバルマネージャ５０２２は、１つ又は複数のコア５０２４と連携するための少なくとも１つのタスクマネージャを含むことができる。各タスクマネージャは、ニューラルネットワークのシナプス／ニューロン回路を提供するコア５０２４のアレイに関連することができる。例えば図５の処理要素の最上層はニューラルネットワークへの入力層を表す回路を提供することができる一方、タイルの第２の層はニューラルネットワークの隠れ層を表す回路を提供することができる。図５に示すように、グローバルマネージャ５０２２は、コア５０２４の２つのアレイと連携するために２つのタスクマネージャを含むことができる。
【００２０】
[0030]  コア５０２４は、伝達されるデータに対してグローバルマネージャ５０２２の制御下で１つ又は複数の演算（例えば乗算、加算、乗算累算等）を実行するように構成される１つ又は複数の処理ユニットを含む単一命令多重データ（ＳＩＭＤ）アーキテクチャをそれぞれ含む、１つ又は複数の処理要素を含むことができる。伝達されるデータパケットに対する演算を実行するために、コア５０２４は、データパケット内の情報を処理するための１つ又は複数の処理要素を含むことができる。各処理要素は任意の数の処理ユニットを含むことができる。一部の実施形態では、コア５０２４をタイル等と見なすことができる。
【００２１】
[0031]  ホストメモリ５０４は、ホストＣＰＵのメモリ等のオフチップメモリとすることができる。例えば、ホストメモリ５０４は、ＤＤＲメモリ（例えばＤＤＲ  ＳＤＲＡＭ）等とすることができる。ホストメモリ５０４は、高レベルキャッシュとして機能する１つ又は複数のプロセッサに組み込まれるオンチップメモリに比べて、遅いアクセス速度で大量のデータを記憶するように構成され得る。
【００２２】
[0032]  メモリコントローラ５０６は、グローバルメモリ５１６内の特定のメモリブロック（例えばＨＢＭ２）との間のデータの読み書きを管理することができる。例えばメモリコントローラ５０６は、チップ通信システム５０２の外から（例えばＤＭＡユニット５０８又は別のＮＰＵに対応するＤＭＡユニットから）来るデータの読み書き、又はチップ通信システム５０２の中から（例えばグローバルマネージャ５０２２のタスクマネージャによって制御される２Ｄメッシュを介してコア５０２４内のローカルメモリから）来るデータの読み書きを管理することができる。更に、図５ではメモリコントローラを１つ示すが、複数のメモリコントローラがＮＰＵアーキテクチャ５００内に設けられ得ることが理解されよう。例えば、グローバルメモリ５１６内のメモリブロック（例えばＨＢＭ２）ごとに１つのメモリコントローラがあり得る。
【００２３】
[0033]  メモリコントローラ５０６はメモリアドレスを生成し、メモリの読み取り又は書き込みサイクルを開始することができる。メモリコントローラ５０６は、１つ又は複数のプロセッサによって読み書きされ得る幾つかのハードウェアレジスタを含むことができる。レジスタは、メモリアドレスレジスタ、バイトカウントレジスタ、１つ又は複数の制御レジスタ、及び他の種類のレジスタを含み得る。これらのレジスタは、ソース、宛先、転送の方向（入出力（Ｉ／Ｏ）装置からの読み取り又はＩ／Ｏ装置への書き込み）、転送単位のサイズ、１つのバースト内で転送するバイト数、及び／又はメモリコントローラの他の典型的な特徴の幾つかの組み合わせを指定することができる。
【００２４】
[0034]  ＤＭＡユニット５０８は、ホストメモリ５０４とグローバルメモリ５１６との間のデータ転送を支援することができる。加えて、ＤＭＡユニット５０８は、複数のＮＰＵ（例えばＮＰＵ５００）間のデータ転送を支援することができる。ＤＭＡユニット５０８は、ＣＰＵの割り込みを引き起こすことなしにオフチップ装置がオンチップメモリ及びオフチップメモリの両方にアクセスすることを可能にし得る。従って、ＤＭＡユニット５０８もメモリアドレスを生成し、メモリの読み取り又は書き込みサイクルを開始することができる。ＤＭＡユニット５０８も、メモリアドレスレジスタ、バイトカウントレジスタ、１つ又は複数の制御レジスタ、及び他の種類のレジスタを含む、１つ又は複数のプロセッサによって読み書きされ得る幾つかのハードウェアレジスタを含むことができる。これらのレジスタは、ソース、宛先、転送の方向（入出力（Ｉ／Ｏ）装置からの読み取り又はＩ／Ｏ装置への書き込み）、転送単位のサイズ、１つのバースト内で転送するバイト数の幾つかの組み合わせを指定することができる。ＮＰＵアーキテクチャ５００は第２のＤＭＡユニットを含み得ることが理解され、第２のＤＭＡユニットは、ホストＣＰＵを関与させることなしに複数のＮＰＵアーキテクチャが直接通信できるようにするために他のＮＰＵアーキテクチャとの間でデータを転送するために使用され得る。
【００２５】
[0035]  ＪＴＡＧ／ＴＡＰコントローラ５１０は、システムアドレス及びデータバスへの直接の外部アクセスを必要とすることなしに、ＮＰＵへの低オーバヘッドアクセスのためのシリアル通信インタフェース（例えばＪＴＡＧインタフェース）を実装する専用デバッグポートを指定することができる。ＪＴＡＧ／ＴＡＰコントローラ５１０は、様々な部分のチップロジックレベル及び装置機能を提示する１組のテストレジスタにアクセスするためのプロトコルを実装するオンチップテストアクセスインタフェース（例えばＴＡＰインタフェース）も有することができる。
【００２６】
[0036]  もしある場合、周辺インタフェース５１２（ＰＣＩｅインタフェース等）はＮＰＵと他の装置との間の通信を提供するチップ間バスの役割を果たす（且つ典型的にはチップ間バスである）。
【００２７】
[0037]  バス５１４は、チップ内バス及びチップ間バスの両方を含む。チップ内バスは、システムアーキテクチャによって呼び出される全ての内部コンポーネントを互いに接続する。全てのコンポーネントが他の全てのコンポーネントに接続されるわけではないが、全てのコンポーネントは通信する必要がある他のコンポーネントへの幾らかの接続を有する。チップ間バスは、ＮＰＵをオフチップメモリ又は周辺機器等の他の装置と接続する。典型的には、周辺インタフェース５１２（例えばチップ間バス）がある場合、バス５１４はチップ内バスに専ら携わるが、一部の実装形態では専用のバス間通信に引き続き携わることができる。
【００２８】
[0038]  図５のＮＰＵアーキテクチャ５００は本開示の実施形態を組み込むが、開示する実施形態は、ディープラーニング等の一部の応用を加速するためのＳＩＭＤアーキテクチャを有するチップに適用できることが理解されよう。かかるチップは、例えばベクトル処理能力を有するＧＰＵ、ＣＰＵ又はディープラーニングのためのニューラルネットワークアクセラレータとすることができる。ＳＩＭＤ又はベクトルアーキテクチャは、グラフィックス処理及びディープラーニング等のデータ並列処理を伴う計算装置を支援するために一般に使用される。ＳＩＭＤアーキテクチャは複数の処理要素を含むことができ、処理要素のそれぞれは、複数のデータ点に対して同じ演算を同時に実行することができる。
【００２９】
[0039]  一部の実施形態では、ニューラルネットワークプロセッサがコンパイラ（不図示）を含む。コンパイラは、或るプログラミング言語で書かれたコンピュータコードをＮＰＵ命令に変換して実行可能プログラムを作成するプログラム又はコンピュータソフトウェアである。マシニングの応用では、コンパイラは様々な演算、例えば前処理、字句解析、構文解析、意味解析、入力プログラムの中間表現への変換、コードの最適化、及びコードの生成、又はそれらのものの組み合わせを実行することができる。
【００３０】
[0040]  図６は、本開示の実施形態による、２層データ共用アーキテクチャ６００の例示的実装形態を示す。２層データ共用アーキテクチャ６００は、２Ｍ本のデータ線（例えばＭ本の入力データ線及びＭ本の出力データ線）を有するデータハブ６４０、及びＭ個の処理要素６１０を含む。各処理要素６１０は、Ｎ個の処理ユニット６３０と、当該処理要素のＮ個の処理ユニット６３０によって共用される集中型共用メモリであるローカルメモリ６２０とを含む。
【００３１】
[0041]  一部の実施形態では、各処理要素６１０が共用メモリアーキテクチャを提供し、その中の各処理ユニット６３０は隣接する処理ユニットに電気的に結合され、最終的にデータハブ６４０に電気的に接続される。この構成では、データのやり取りが（１）ローカルメモリ６２０の記憶ブロック間でデータをやり取りすることによって同じ処理要素内のＳＩＭＤレーン間で、及び（２）データハブ６４０を介して処理要素６１０間で生じ得る。後者に関して、各ローカルメモリ６２０はデータハブ６４０に電気的に結合され、Ｍ本の入力データ線の自らの対応するものによってデータハブ６４０にデータを送信することができる。各処理ユニット６３０もデータハブ６４０に電気的に結合され、Ｍ本の出力データ線の対応するものによってデータハブ６４０から出力データを受信することができる。
【００３２】
[0042]  図７は、本開示の実施形態による、図６の例示的な２層データ共用アーキテクチャによって利用される例示的な処理要素及びデータハブを示す。例示目的で、図６〜図７に示す実施形態ではＭ及びＮの値が３２に等しく、データ幅が１６ビットに等しいが、開示する実施形態と合致するＭ及びデータ幅の任意の妥当な値を使用できることが理解されよう。但し、実装形態ではＭがＮ以上であり得る。大規模な設計ではＭ及びＮの値がより大きいことが好ましいが、Ｍ及びＮの最大値は集積回路中の配置配線（place-and-route）によって限定される場合があり、それはひいてはチップ製造技術に依存する。
【００３３】
[0043]  例えば図７に示すように、下位の処理要素の層において、開示する例示的実施形態はＮ個の処理ユニット（例えば図７に示すマルチプライヤアキュムレータレデューサ（ＭＡＲ）等）を１つの処理要素に編成し、処理要素はデータを共用するためにそれらの３２個の処理ユニットのための集中型共用メモリ（ローカルメモリ（ＬＭ）６２０と呼ぶ）を使用する。図６に示す最上位のデータハブ層（複数の処理要素を有するデータハブのレベル）において、処理要素６１０がデータハブ６４０を介して１つのシステムへとまとめて接続され、各処理要素のローカルメモリは分散型共用メモリアーキテクチャを形成する。これらのローカルメモリはグローバルにアドレス指定され、高速共用能力を提供するデータハブ６４０を介して電気的に接続される。
【００３４】
[0044]  各ローカルメモリ６２０は、ローカルメモリ６２０への並列アクセスを処理ユニット６３０に与えるフルポート（例えば１６ビット有する３２個の接続（処理要素の処理ユニットごとに１つの接続）を含むF.writeポート及びF.readポートに関連する図７のローカルメモリ６２０の左側の２つのポート）を含むことができる。フルポートは、ニューラルネットワーク内の完全接続層の重み等のプライベートデータへのＳＩＭＤアクセスに使用することができる。ローカルメモリ６２０内に記憶され、同じローカルメモリに関連する処理ユニット６３０と直接共用されるローカルデータはプライベートデータとして扱われることが理解されよう。各ローカルメモリ６２０は、メモリへのナローアクセスを処理ユニット６３０に提供するナローポート（例えば１６ビット有する１個の接続を含むN.writeポート及びN.readポートに関連する図７のローカルメモリ６２０の右側の２つのポート）も含み得る。ナローポートは、ブロードキャスト又はブロードキャストされる共用データに使用することができる。別のローカルメモリ内に記憶され、全てのＬＭの全ての処理ユニット６３０と共用される遠隔データは共用データとして扱われることが理解されよう。
【００３５】
[0045]  フルポート及びナローポートは、ローカルメモリ６２０内の様々な記憶ブロックに関連するように構成される。ローカルメモリ６２０内のこれらの複数の記憶ブロック（例えばそれぞれＳＲＡＭであり得る記憶ブロックＬＭ０からＬＭｎ）はマルチプレクサ（例えばマルチプレクサ７０５、７１０、７４０、及び７４５）を介して全てのフルポート及びナローポートに物理的に接続され、それらのポートとの間の同時アクセスを提供することができる。例えばリードポートに関して、各ポートについて１つのマルチプレクサ（例えばF.readポートではマルチプレクサ７０５、N.readポートではマルチプレクサ７１０）があり、どちらも記憶ブロックのそれぞれに接続される。従って、マルチプレクサ７０５及び７１０はどちらもｎ対１のポートとすることができ、ｎはローカルメモリ内の記憶ブロックの数である。記憶ブロックとマルチプレクサ７１０との間に１つ又は複数の他のマルチプレクサが存在してもよいことが理解されよう。例えば３２個の１６ビット出力がある状況では、３２対１マルチプレクサが、N.readポートに提供するために３２個の入力の１つを選択することができる。
【００３６】
[0046]  ライトポートに関して、各記憶ブロックはF.writeポート及びN.writeポートの両方から受信される入力を選択する１つ又は複数の対応する２対１マルチプレクサを有する。例えばデータがメモリブロックに書き込まれる状況では、F.writeポート又はN.writeポートから受信される１つの１６ビット入力を選択する３２個の２対１マルチプレクサがあり得る（３２個の１６ビット入力のそれぞれにつき１つ）。記憶ブロックＬＭ０〜ＬＭｎとポートとの間のこれらの接続の構成は、コア５０２４によって受信される命令に基づいて確立され得る。
【００３７】
[0047]  例えば、１つ又は複数のコア内で実行されるＳＩＭＤ命令のシーケンスは、Aout[1024] = W[1024] * Ain[1]の計算を実行するために３２個の処理要素６１０それぞれの全３２個の処理ユニット６３０を関与させ得る。この例では、データを記憶するために記憶ブロックＬＭ０〜ＬＭ３を使用し、ＬＭ０はプライベートデータを記憶し、ＬＭ１はバックステージ制御シーケンスによって受信される共用データを記憶する。３２個の処理要素のそれぞれは、計算を並列に実行することができる：
１）記憶ブロックＬＭ０からマルチプレクサ７０５及びF.readポートを介して、３２個の接続上で、（各処理ユニット６３０へのプライベートデータである）重み値W[0:32]を１６ビットとして読み出す。
２）記憶ブロックＬＭ１からマルチプレクサ７１０及びN.readポートを介して、（全３２個の処理要素６３０間で共用される）入力値Ainを読み出す。
３）３２個の処理ユニット６３０がW[i]*Ainの計算を実行した後、ＬＭ２に対応するF.writeポート及び２−１マルチプレクサを介して、３２個の結果をローカルメモリ６２０内に（例えば記憶ブロックＬＭ２内に）並列に再び記憶する。
４）更に、対応する２−１マルチプレクサを介して、（例えばデータハブによる）バックステージデータインストールメント（back-staged data installment）に関連する共用データをＬＭ３に記憶することができる。
各記憶ブロックＬＭ０〜ＬＭ３の設計は、１リード／１ライトポートのＳＲＡＭ（１つのREAD及び１つのWRITEを供給することができる）ではなく、１リード／ライトポート（ＳＲＡＭの各記憶ブロックは、サイクル動作する１つのREAD記憶ブロック又は１つのWrite記憶ブロックとして働くことができる）を使用して実装し、約３０％のシリコン面積の削減をもたらすことができる。この例では、記憶ブロックＬＭ０〜ＬＭ３が同一機能を有し、ソフトウェアに基づいて構成され得る。つまり、データ競合を回避するために、任意の所与の瞬間において１つのポートを経由して１つの専用記憶ブロックを通るデータフローが１つだけあることが満たされる限り、（プライベートだろうが共用だろうが）任意の種類のデータを任意の記憶ブロック内に記憶することができ、但し全ての記憶ブロックは全てのポートに物理的に接続される。更に、他の記憶ブロックが存在してもよく、クロックサイクルに応じてアイドル状態にあってもよいことが理解されよう。
【００３８】
[0048]  更に、一部の実施形態では、記憶ブロック内に記憶されるプライベートデータ（例えばＬＭ０内に記憶されるプライベートデータ）は、そのプライベートデータが（マルチプレクサ７１０を介して）ナローポートN.readにプッシュされる場合、他のローカルメモリと共用することができる。その後、ナローポートN.readにおけるデータはデータハブ６４０に送信され、他の処理要素の他の処理ユニットによって更に使用されるように共用データに変わる。一部の実施形態では、記憶ブロックの構成に基づき、データハブ６４０を介して循環するデータが、後で使用するためにプライベートデータとして記憶され得る。組み合わせて、プライベートデータ及び共用データの両方がローカルメモリの画一的な構成内に記憶される。プライベートデータ及び共用データは、対応するポート（フルポート又はナローポート）によって、対応する宛先（処理ユニット又はデータハブ）に送信される。
【００３９】
[0049]  更に、開示する実施形態は、データハブの効率的設計を提供する。共用データの大部分がブロードキャストモードの下でアクセスされることを所与とし、開示する実施形態は、データ共用に大量のハードウェア資源を消費するフルクロスバー（例えば１０２４対１０２４ｘ１６ビット）を導入する必要がないことが理解されよう。代わりに、開示する実施形態は、以下に記載するように安価だが十分効率的なやり方を提供する。
【００４０】
[0050]  図７に示すように、データハブ６４０の３２個の入力のそれぞれが、各処理要素６１０のナローリードポート（N.read）に接続される。合計で、３２個の処理要素のナローリードポートから３２個の入力がある。データハブ６４０の３２個の出力は、各処理要素６１０のマルチプレクサ７２０に接続される。この形態は、３２個のデータ入力（処理要素のそれぞれから１つ）を集める能力、及び３２個の処理要素の何れか１つにそれらの入力を転送する能力を、データハブ６４０に与える。転送先の３２個の処理要素は、入力データの送信元の３２個の処理要素と異なり得ることが理解されよう。つまり、図６の１組の処理要素と異なる第２の１組の処理要素が、データハブ６４０に入力データを与えることができる。
【００４１】
[0051]  データハブ６４０は、以下で更に説明するスウィズル機能（swizzling function）を提供するように構成され得る。このようにして各処理要素は、別の処理要素からの共用データを処理ユニット（例えばＭＡＲ）内に供給することができる。ＳＩＭＤの応用に関して、全ての処理要素が同じ演算を並列に実行できることが理解されよう。
【００４２】
[0052]  更に、データハブ６４０の３２個の１６ビットデータ出力は、（ローカル処理ユニットの出力も受信することができる）処理要素のローカルメモリのフルライトポート（F.write）に接続される。この構成は、３２個（処理要素ごとに１つ）のデータ入力を集め、それらを図７の選択された１つの処理要素にプッシュする能力をデータハブに与え、それにより選択された１つの処理要素は、処理要素群全体についてリダクション演算を後で行うことができる。
【００４３】
[0053]  同様に、データハブ６４０は、処理要素のフルリードポート（F.read）から３２個の１６ビットデータ入力を読み取り、それらを３２個の処理要素に並列に転送することができる。３２個の１６ビットデータは処理要素のフルリードポートから送出され、データハブ６４０の入力データ線に送信される。３２個の１６ビットデータは、マルチプレクサ７２０を介して３２個の処理要素の一部の選択されたものに又は３２個の処理要素の全てに、同時に転送され得る。従ってデータハブ６４０は、その後の更なる並列計算操作のために、３２個の処理要素からの過去に集められた及び処理されたデータを循環（又は分散）させることができる。
【００４４】
[0054]  更に、データハブ６４０は、スウィズル機能を提供することができる。スウィズル機能は、入力データ線と出力データ線との間でデータをリシャッフルする能力を提供する。スウィズル機能により、データハブ６４０によって受信される或る処理要素からのデータを、データハブ６４０に関連する複数の処理要素のうちの別の処理要素に提供することができる。完全接続されたクロスバー構成の代わりに、データハブ６４０は処理要素間で共用データを並列且つ効率的にやり取りするために幾つかの主要パターンを選択的にサポートすることができる。それらのパターンは図８に示すようにブロードキャスト、バタフライ（ＸＯＲ）、右／左シフト、及び右／左ローテートを含み、図８は４対４の接続を示すように単純化されている。このスウィズル機能は、低いハードウェア資源コストでメモリアーキテクチャ全体にわたってデータを効率的且つ迅速にやり取りする能力を提供する。
【００４５】
[0055]  一部の実施形態では、図８の１列目に示すように、データハブ６４０は、スウィズル機能のブロードキャストパターンを利用して処理要素０、１、２、又は３から、全４個の処理要素にデータをブロードキャストすることができる。一部の実施形態では、図８の２列目に示すようにスウィズル機能がシフトパターンを提供することができ、シフトパターンでは様々なオフセット（例えば１、２等）でデータを左に又は右にシフトすることができる。一部の実施形態では、図８の３列目に示すようにスウィズル機能がローテートパターンを提供することができ、ローテートパターンでは様々なオフセット（例えば１、２等）でデータを左に又は右にローテートすることができる。一部の実施形態では、図８の４列目に示すようにスウィズル機能がＸＯＲパターンを提供することができ、ＸＯＲパターンでは同じく様々なオフセット（例えば１、２、３等）でデータをＸＯＲ演算によって演算することができる。設計されたスウィズルパターンに基づいて対応する処理要素との間でデータを送受信するために、データハブ６４０のスウィズルパターンは、同じ原理の下で異なるように設計することができる。従って、処理要素にわたってデータを分散させるために他のスウィズルパターンが存在し得ることが理解されよう。
【００４６】
[0056]  図９は、本開示の実施形態による、集中型データハブからデータを分散させるための例示的方法９００の流れ図を示す。方法９００は、集中型データハブ（例えばデータハブ６４０）によって実行され得る。集中型データハブは、ホストＣＰＵからのコマンドに基づいてタスクマネージャから命令を受信することができる。集中型データハブは複数の処理要素（例えば図６のＭ個の処理要素６１０）と通信することができ、各処理要素は複数の処理ユニット（例えば図６のＮ個の処理ユニット６１０）を有することができる。
【００４７】
[0057]  ステップ９１０で、集中型データハブが、複数の処理ユニット（例えば処理ユニット６３０）及びローカルメモリ（例えばローカルメモリ６２０）を有する複数の処理要素のうちの１つの処理要素（例えば図７の処理要素６１０）からデータを取得する。一部の実施形態では、集中型データハブが、処理要素のローカルメモリからデータを取得することができる。例えば、データは処理要素のマルチプレクサ（例えば図７のローカルメモリ６２０のナローリードポートに関連するマルチプレクサ７１０）を介して取得され得る。
【００４８】
[0058]  ステップ９２０で、集中型データハブが取得済みのデータの分散パターンを決定する。この決定は、集中型データハブによって直接行うことができ、又は集中型データハブによって受信される情報に基づいて間接的に行うことができる。例えば図７に示すように、データハブ６４０は分散指示（例えば左シフトの左、右シフトの右、ブロードキャスト、ＸＯＲ）を受信することができる。この分散指示は、取得済みの情報をどのように分散させるのかをデータハブ６４０に命令するタスクマネージャ（例えばグローバルマネージャ５０２２のタスクマネージャ）からのものであり得る。
【００４９】
[0059]  分散パターンは、データを分散させるための任意の種類のパターンとすることができる。例えば図８において上記で示したように、分散パターンはブロードキャスト、左若しくは右シフト、左若しくは右ローテート、又はＸＯＲを含むことができる。更に、分散パターンは任意のオフセットデータを提供することができる。
【００５０】
[0060]  ステップ９３０で、集中型データハブが決定した分散パターンを使用して、複数の処理要素のうちの少なくとも一部に取得済みのデータを分散させる。分散パターンを使用し、集中型データハブは取得済みのデータを処理ユニットに又は処理要素のローカルメモリに分散させる。例えば図７に示すように、データハブ６４０は、マルチプレクサ７４０及び７４５に接続されるフルライトポート又はナローライトポートを介してローカルメモリ６２０に、又はマルチプレクサ７２０を介して１つ又は複数の処理ユニット６３０に、データを提供することができる。データを分散させた後、この方法は終了し得る。
【００５１】
[0061]  図１０は、本開示の実施形態による、処理要素の１つ又は複数の処理ユニットにデータを分散させるための例示的方法１０００の流れ図を示す。方法１０００は処理要素（例えば図６及び図７の処理要素６１０）によって実行され得る。
【００５２】
[0062]  ステップ１０１０で、処理要素が、集中型データハブ（例えばデータハブ６４０）から共用データを取得する。一部の実施形態では、取得される共用データは図９のステップ９３０で分散されるデータであり得る。上記で示したように、共用データは処理要素の１つ又は複数の処理ユニットに提供することができ、又は処理要素のローカルメモリ（例えばローカルメモリ６２０）に提供することができる。
【００５３】
[0063]  ステップ１０２０で、一部の実施形態では、処理要素がローカルメモリ内の第１の組の１つ又は複数のブロック内に共用データを記憶する。共用データは処理要素の１つ又は複数の処理ユニットに直接提供することができ、それにより処理要素のローカルメモリをバイパスする場合、このステップは任意選択的である。
【００５４】
[0064]  １つ又は複数の処理ユニットに共用データが直接提供されない状況では、処理要素が、共用データをローカルメモリに記憶することができる。共用データは、プライベートデータを記憶する記憶ブロック（例えば図７のＬＭ０）から仮想的に又は物理的に区分され得る第１の組の１つ又は複数のブロック（例えば図７のＬＭｎ）内に記憶することができる。プライベートデータ及び共用データは、異なるブロック内に互いに別々に記憶することができるが、プライベートデータ及び共用データは一緒に記憶され得ることが理解されよう。
【００５５】
[0065]  ステップ１０３０で、処理要素がプライベートデータを取得する。上記で示したように、プライベートデータは、処理要素の１つ又は複数の処理ユニットによってローカルに生成されるデータに対応する。ステップ１０４０で、処理要素が、ローカルメモリ内の第２１組の１つ又は複数のブロック（例えば図７のＬＭ０）においてプライベートデータを記憶する。上記で述べたように、プライベートデータ及び共用データは、異なるブロック内に互いに別々に記憶することができるが、プライベートデータ及び共用データは一緒に記憶され得ることが理解されよう。ステップ１０３０及び１０４０はステップ１０１０及び１０２０の後に示すが、ステップ１０３０及び１０４０はステップ１０１０及び１０２０の前に又はそれらのステップと並列に実行することもできることが理解されよう。
【００５６】
[0066]  ステップ１０５０で、処理要素が、当該処理要素の１つ又は複数の処理ユニット（例えば図７の処理ユニット６３０）に記憶済みのプライベートデータ及び共用データをオペランドとして提供する。上記で述べたように、共用データは処理要素のローカルメモリから、又は集中型データハブから来ることができる。プライベートデータ及び共用データをオペランドとして受信した後、処理ユニットは、そのオペランドを使用して演算を実行することができ、ステップ１０６０のその時点において処理要素は、１つ又は複数の処理ユニットから１つ又は複数の結果を生成する。先に述べたように、それらの演算は乗算、加算、乗算累算、乗算累算リデュース等の１つ又は複数に基づくことができる。生成される結果は、処理要素のローカルメモリ内にプライベートデータとして記憶することができる。例えば図７に示すように、処理ユニットからの結果がフルライトポートを介してローカルメモリ６２０に提供される（処理ユニットの結果がＬＭ．Ｆに提供され、マルチプレクサ７３０が処理ユニット（ＰＵ）からデータを受信するものとして注釈を付けてある）。この結果は、ローカルメモリの記憶ブロック内に更に記憶することができる。例えば結果は記憶ブロックＬＭ０内に又は別の記憶ブロック（例えばＬＭ１等）内に記憶することができる。結果の生成後にこの方法は終了し得る。
【００５７】
[0067]  ２層アーキテクチャの設計により、開示した実施形態は、集中型共用メモリアーキテクチャ及び分散型共用メモリアーキテクチャの両方の技術的利点を提供する。下層では、メモリアーキテクチャの開示した実施形態は、同じローカルメモリに関連する３２個の処理ユニット間でデータを共用するための直接的且つ高速なやり方を提供する。一方で最上層では、メモリアーキテクチャの開示した実施形態は、分散型共用メモリの概念を使用して集中型メモリアーキテクチャの拡張性の問題を解決する。最上層は様々なローカルメモリの処理ユニット間のデータのやり取りを可能にする。データハブは、３２個の分散型共用ローカルメモリ間でデータを迅速にやり取りするためのコスト効率の高いやり方を提供する。これらの特徴は、上記で説明した性能及び複雑性の問題と共に、フルクロスバー法を含む従来の分散型共用メモリアーキテクチャの問題を克服する。この階層化されネスト化されたトポロジは、ハードウェア及び資源の合理的な消費量のバランスを伴い、分散型共用メモリアーキテクチャのデータアクセスが遅いという欠点を克服する。
【００５８】
[0068]  本明細書に記載した様々な実施形態の例は、一態様ではネットワーク化された環境内のコンピュータによって実行されるプログラムコード等のコンピュータ実行可能命令を含む、コンピュータ可読媒体の中に実装されるコンピュータプログラム製品によって実施され得る方法ステップ又はプロセスの全般的な脈絡において説明した。例えば命令は、分散指示と提携する分散パターンに従って共用データを分散させることができる集中型データハブへの分散指示の送信を引き起こし得ることが理解されよう。コンピュータ可読媒体は、これだけに限定されないが読取専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）等を含む取り外し可能記憶装置及び固定型記憶装置を含み得る。概してプログラムモジュールは、特定のタスクを実行し又は特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含み得る。コンピュータ実行可能命令、関連するデータ構造、及びプログラムモジュールは本明細書で開示した方法のステップを実行するためのプログラムコードの例を表す。かかる個々の一連の実行可能命令又は関連するデータ構造は、かかるステップ又はプロセスの中で説明した機能を実装するための対応する行為の例を表す。
【００５９】
[0069]  上記の明細書では、実装形態ごとに異なり得る数多くの具体的詳細に関して実施形態を説明してきた。記載した実施形態の特定の適応及び修正を加えることができる。本明細書を検討し本明細書で開示した発明を実践することにより、他の実施形態が当業者に明らかになり得る。本明細書及び例は専ら例示として見なされることを意図し、本発明の真の範囲及び趣旨は添付の特許請求の範囲によって示す。図示のステップの順序は例示目的に過ぎず、或る特定のステップの順序に限定されることを目的としないことも意図する。そのため、それらのステップは同じ方法を実装しながら異なる順序で実行できることを当業者なら理解することができる。
【００６０】
[0070]  図面及び本明細書の中で例示的実施形態を開示してきた。但し、それらの実施形態に対して多くの改変及び修正を加えることができる。従って、特定の用語を使用したが、それらの用語は限定目的ではなく専ら全般的且つ説明的な意味で使用しており、実施形態の範囲は添付の特許請求の範囲によって定める。
【図１】
2021507386.tif 000003
【図２】
2021507386.tif 000004
【図３】
2021507386.tif 000005
【図４Ａ】
2021507386.tif 000006
【図４Ｂ】
2021507386.tif 000007
【図５】
2021507386.tif 000008
【図６】
2021507386.tif 000009
【図７】
2021507386.tif 000010
【図８】
2021507386.tif 000011
【図９】
2021507386.tif 000012
【図１０】
2021507386.tif 000013
【国際調査報告】
2021507386.tif 000014
2021507386.tif 000015