(57)【要約】低電力畳み込みニューラルネットワーク推論アプリケーションのメモリ帯域幅低減技術を実装するシステム、装置及び方法が開示される。システムは、処理ユニットと、処理ユニットに接続された外部メモリと、を少なくとも含む。システムは、複数のチャネルからの入力データに対して畳み込み演算を実行する要求を検出する。システムは、要求を検出したことに応じて、実行される畳み込み演算の外部メモリ帯域幅の利用を最小化するために、複数のチャネルからの入力データを３Ｄブロックに分割する。次に、システムは、選択された３Ｄブロックを外部メモリから内部メモリにロードし、１つ以上のフィーチャについて、選択された３Ｄブロックに関する畳み込み出力データを生成する。次いで、システムは、フィーチャ毎に、畳み込み出力データを外部メモリに書き込む前に、チャネルに亘って畳み込み出力データを共に追加する。【選択図】図８
2021503141.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
処理ユニットと、
前記処理ユニットに接続された外部メモリと、を備え、
前記システムは、
複数のチャネルからの入力データに対して畳み込み演算を実行する要求を検出し、
前記要求を検出したことに応じて、
１つ以上のフィーチャについて、第１の複数のチャネルに関する畳み込み出力データを生成し、
前記畳み込み出力データを前記外部メモリに書き込む前に、前記第１の複数のチャネルに亘って畳み込み出力データを共に追加する、
ように構成されている、
システム。
【請求項２】
前記処理ユニットは、内部メモリを含み、前記処理ユニットは、前記要求を検出したことに応じて、前記第１の複数のチャネルからの入力データを前記外部メモリから前記内部メモリにロードするように構成されている、
請求項１のシステム。
【請求項３】
前記システムは、前記第１の複数のチャネルからのデータの第１のＮ（Ｎは、１よりも大きい正の整数である）次元ブロックを前記外部メモリから前記内部メモリにロードする前に、前記複数のチャネルからの入力データをＮ次元ブロックに分割するように構成されている、
請求項２のシステム。
【請求項４】
Ｎは３であり、前記システムは、前記第１の三次元ブロックを処理した後に、前記入力データの後続の三次元ブロックを上から下に垂直方向に処理し、左から右に処理するように構成されている、
請求項３のシステム。
【請求項５】
Ｎは３であり、前記システムは、前記畳み込み演算に関する外部メモリ帯域幅の利用を最小化するために、前記複数のチャネルからの入力データをどのように三次元ブロックに分割するかを決定するように構成されている、
請求項３のシステム。
【請求項６】
前記システムは、前記内部メモリのサイズ、前記１つ以上のフィーチャのサイズ、及び、前記畳み込み演算のサイズに基づいて、前記複数のチャネルからの入力データをどのように三次元ブロックに分割するかを決定するように構成されている、
請求項５のシステム。
【請求項７】
前記畳み込み演算は、畳み込み層に対応しており、前記畳み込み層は、前記システムに実装されているニューラルネットワークの複数の層のうちの１つである、
請求項１のシステム。
【請求項８】
複数のチャネルからの入力データに対して畳み込み演算を実行する要求を検出することと、
前記要求を検出したことに応じて、
１つ以上のフィーチャについて、第１の複数のチャネルに関する畳み込み出力データを生成することと、
前記畳み込み出力データを外部メモリに書き込む前に、前記第１の複数のチャネルに亘って畳み込み出力データを共に追加することと、を含む、
方法。
【請求項９】
前記要求を検出したことに応じて、前記第１の複数のチャネルからの入力データを前記外部メモリから内部メモリにロードすることを含む、
請求項８の方法。
【請求項１０】
前記第１の複数のチャネルからのデータの第１のＮ（Ｎは、１よりも大きい正の整数である）次元ブロックを前記外部メモリから前記内部メモリにロードする前に、前記複数のチャネルからの入力データをＮ次元ブロックに分割することを含む、
請求項９の方法。
【請求項１１】
Ｎは３であり、前記方法は、前記第１の三次元ブロックを処理した後に、前記入力データの後続の三次元ブロックを上から下に垂直方向に処理し、左から右に処理することを含む、
請求項１０の方法。
【請求項１２】
Ｎは３であり、前記方法は、前記畳み込み演算に関する外部メモリ帯域幅の利用を最小化するために、前記複数のチャネルからの入力データをどのように三次元ブロックに分割するかを決定することを含む、
請求項１０の方法。
【請求項１３】
前記内部メモリのサイズ、前記１つ以上のフィーチャのサイズ、及び、前記畳み込み演算のサイズに基づいて、前記複数のチャネルからの入力データをどのように三次元ブロックに分割するかを決定することを含む、
請求項１２の方法。
【請求項１４】
複数のフィーチャ毎に、前記第１の複数のチャネルに亘って畳み込み出力データを共に追加することを含み、前記畳み込み出力データを追加することは、前記複数のフィーチャ毎に並列に実行される、
請求項８の方法。
【請求項１５】
装置であって、
内部メモリを含む処理ユニットと、
前記処理ユニットに接続された外部メモリと、を備え、
前記装置は、
複数のチャネルからの入力データに対して畳み込み演算を実行する要求を検出し、
前記要求を検出したことに応じて、
１つ以上のフィーチャについて、第１の複数のチャネルに関する畳み込み出力データを生成し、
前記畳み込み出力データを前記外部メモリに書き込む前に、前記第１の複数のチャネルに亘って畳み込み出力データを共に追加する、
ように構成されている、
装置。
【請求項１６】
前記装置は、前記要求を検出したことに応じて、前記第１の複数のチャネルからの入力データを前記外部メモリから前記内部メモリにロードするように構成されている、
請求項１５の装置。
【請求項１７】
前記装置は、前記第１の複数のチャネルからのデータの第１のＮ（Ｎは、１よりも大きい正の整数である）次元ブロックを前記外部メモリから前記内部メモリにロードする前に、前記複数のチャネルからの入力データをＮ次元ブロックに分割するように構成されている、
請求項１６の装置。
【請求項１８】
Ｎは３であり、前記装置は、前記第１の三次元ブロックを処理した後に、前記入力データの後続の三次元ブロックを上から下に垂直方向に処理し、左から右に処理するように構成されている、
請求項１７の装置。
【請求項１９】
Ｎは３であり、前記装置は、前記畳み込み演算に関する外部メモリ帯域幅の利用を最小化するために、前記複数のチャネルからの入力データをどのように三次元ブロックに分割するかを決定するように構成されている、
請求項１７の装置。
【請求項２０】
前記装置は、前記内部メモリのサイズ、前記１つ以上のフィーチャのサイズ、及び、前記畳み込み演算のサイズに基づいて、前記複数のチャネルからの入力データをどのように三次元ブロックに分割するかを決定するように構成されている、
請求項１９の装置。
【発明の詳細な説明】
【背景技術】
【０００１】  新しい技術分野は機械学習であり、畳み込みニューラルネットワークは機械学習モデルの一種である。畳み込みニューラルネットワークは、手書き数字の分類及び顔検出等のタスクにおいて優れたパフォーマンスを発揮する。また、畳み込みニューラルネットワークは、他のより困難な視覚的分類タスクにおいて良好に機能する可能性を示している。機械学習モデルは、大量の処理リソース及び外部メモリ帯域幅を利用する。したがって、機械学習モデルのパフォーマンスを改善し、及び／又は、メモリ帯域幅の利用を低減するための技術が望まれている。【０００２】  添付図面と共に以下の説明を参照することによって、本明細書で説明する方法及びメカニズムの利点をより良く理解することができる。
【図面の簡単な説明】
【０００３】
【図１】コンピューティングシステムの一実施形態のブロック図である。
【図２】コンピューティングシステムの別の実施形態のブロック図である。
【図３】ニューラルネットワークの実装の一実施形態のブロック図である。
【図４】推論エンジンの一実施形態のブロック図である。
【図５】推論エンジンの別の実施形態のブロック図である。
【図６】チャネルデータを３Ｄブロックに分割する一実施形態のブロック図である。
【図７】推論エンジンの別の実施形態のブロック図である。
【図８】メモリブロックを処理するための垂直順序（ｖｅｒｔｉｃａｌ  ｏｒｄｅｒ）を用いて、ニューラルネットワークの実装における外部メモリ帯域幅の利用を低減する一実施形態のブロック図である。
【図９】ニューラルネットワークの異なる層を実行するためのブロックサイズの一実施形態のブロック図である。
【図１０】畳み込み層を実装する方法の一実施形態を示す一般化されたフローチャートである。
【図１１】外部メモリ帯域幅の低減のための技術を選択する方法の別の実施形態を示す一般化されたフローチャートである。
【図１２】畳み込み演算の間の３Ｄブロックの一実施形態のブロック図である。
【図１３】畳み込み演算の間に３Ｄブロックを動的に再形成する一実施形態のブロック図である。
【発明を実施するための形態】
【０００４】  以下の説明では、本明細書で提示される方法及びメカニズムの十分な理解を提供するために、多くの特定の詳細が示されている。しかしながら、当業者は、これらの特定の詳細なしに様々な実施形態を実施することができることを認識するはずである。いくつかの例では、本明細書で説明するアプローチを曖昧にすることを避けるために、周知の構造、コンポーネント、信号、コンピュータプログラム命令及び技術を詳細に示していない。例示を単純且つ明瞭にするために、図に示される要素は、必ずしも縮尺通りに描かれていないことが認識されよう。例えば、いくつかの要素の寸法は、他の要素に比べて誇張されている場合がある。
【０００５】  低電力畳み込みニューラルネットワーク推論アプリケーションのメモリ帯域幅低減技術を実装する様々なシステム、装置、方法及びコンピュータ可読媒体が本明細書で開示されている。一実施形態では、システムは、少なくとも処理ユニットと、処理ユニットに接続された外部メモリと、を含む。一実施形態では、処理ユニットは、グラフィックス処理ユニット（ＧＰＵ）である。他の実施形態では、処理ユニットは、他のタイプの処理ユニット（例えば、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、中央処理装置（ＣＰＵ））であってもよい。一実施形態では、処理ユニットは、少なくともコマンドプロセッサ、１つ以上の計算ユニット、及び、１つ以上のキャッシュを含む。１つ以上のキャッシュは、処理ユニットの内部メモリと呼ばれることもある。
【０００６】  一実施形態では、システムは、複数のチャネルからの入力データに対して畳み込み演算を実行する要求を検出する。一実施形態では、複数のチャネルからの入力データに対する畳み込み演算は、ニューラルネットワークの畳み込み層の一部として実施される。システムは、要求を検出したことに応じて、１つ以上の要素に基づいて、複数のチャネルからの入力データを三次元（３Ｄ）ブロックに分割する。１つ以上の要素は、実行されている畳み込み演算に関する外部メモリ帯域幅の利用をどのように最小化するかを決定することを含む。別の実施形態では、１つ以上の要素は、内部メモリのサイズ、１つ以上のフィーチャ（ｆｅａｔｕｒｅｓ）のサイズ、及び／又は、畳み込みのサイズを含む。
【０００７】  システムは、複数のチャネルからの入力データを複数の３Ｄブロックに分割した後に、処理する第１の３Ｄブロックを選択し、選択した３Ｄブロックを、外部メモリから処理ユニットの内部メモリにロードする。次に、システムは、１つ以上のフィーチャについて選択された３Ｄブロックの畳み込み出力データを生成する。次いで、システムは、１つ以上のフィーチャ毎に、畳み込み出力データを外部メモリに書き込む前に、３Ｄブロックの第１の複数のチャネルに亘って畳み込み出力データを共に追加する。次に、システムは、対応するフィーチャについて生成された第１の複数のチャネルに亘る畳み込み出力データの各々の合計を、外部メモリに書き込む。次いで、システムは、処理する次の３Ｄブロックを選択する。一実施形態では、システムは、外部メモリ帯域幅の利用を最小化するために、３Ｄブロックを処理する特定のパターンに従う。一実施形態では、システムは、左上の３Ｄブロックを選択することによって開始し、次に、入力データ全体の下部境界に達するまで垂直方向に下に進む。次いで、システムは、１つ右の列に移り、列の最上部から開始して列を下に移動しながら、各３Ｄブロックを処理する。この３Ｄブロックの処理パターンは、残りの３Ｄブロックについて継続することができる。
【０００８】  ここで、図１を参照すると、コンピューティングシステム１００の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム１００は、推論エンジン１０５と、１つ以上のプロセッサ１１０と、入出力（Ｉ／Ｏ）インタフェース１２０と、バス１２５と、１つ以上のメモリデバイス１３０と、を少なくとも含む。推論エンジン１０５は、畳み込みニューラルネットワーク１０５又はニューラルネットワーク１０５と呼ばれる場合があることに留意されたい。他の実施形態では、コンピューティングシステム１００は、他のコンポーネントを含んでもよく、及び／又は、コンピューティングシステム１００は、異なるように配置されてもよい。
【０００９】  一実施形態では、推論エンジン１０５は、処理ユニット（例えば、グラフィックス処理ユニット（ＧＰＵ））上に実装される。別の実施形態では、推論エンジン１０５は、プログラマブルロジック（例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ））上に実装される。さらなる実施形態では、推論エンジン１０５は、専用ロジック（例えば、特定用途向け集積回路（ＡＳＩＣ））上に実装される。他の実施形態では、推論エンジン１０５は、他のタイプのコンポーネント、他のタイプのロジック、及び／又は、複数の異なるタイプのコンポーネント若しくは処理ユニットの組み合わせに実装されてもよい。
【００１０】  一実施形態では、推論エンジン１０５は、畳み込みニューラルネットワークの１つ以上の層を実装する。例えば、一実施形態では、推論エンジンは、１つ以上の畳み込み層、１つ以上のプーリング層、１つ以上の正規化層、及び／又は、１つ以上の完全結合層を実装する。層のスタックは、スタックのタイプ（例えば、畳み込み−正規化−プーリング）、及び、実施形態毎に異なるスタック内の層を用いて複数回繰り返されてもよい。
【００１１】  一般的に言えば、「推論エンジン」は、画像データを受信し、画像データの１つ以上のラベル確率を生成するハードウェア及び／又はソフトウェアとして定義される。「推論エンジン」は、「分類エンジン」又は「分類器」と呼ばれることもある。一実施形態では、推論エンジン１０５は、訓練されたニューラルネットワークである。例えば、この実施形態では、推論エンジン１０５は、ビデオフレームを分析して、ビデオフレームの１つ以上のラベル確率を生成するように構成されている。例えば、潜在的なユースケースには、アイトラッキング、オブジェクト認識、点群推定、レイトレーシング、ライトフィールドモデリング、深さトラッキング等が少なくとも含まれる。アイトラッキングのユースケースでは、推論エンジンは、学習パターン、ドウェル（ｄｗｅｌｌ）、遷移角度、瞬き等に基づいてもよい。他の実施形態では、推論エンジンを、他のタイプのユースケースに合わせてカスタマイズすることができる。一実施形態では、推論エンジンは、整数、又は、精度の低い重みパラメータによって近似される。これらの近似を最適な精度に近づけることができ、推論エンジンの大幅なスピードアップ及び電力低減を可能にする。また、一実施形態では、推論エンジンは、畳み込みニューラルネットワークを実装する場合のメモリ帯域幅の利用を低減するために、複数の内部チャネル処理エンジンを用いて実装される。他の実施形態では、推論エンジンは、他のタイプの機械学習モデルを実装することができる。
【００１２】  プロセッサ１１０は、任意の数及びタイプの処理ユニット（例えば、中央処理装置（ＣＰＵ）、ＧＰＵ、デジタル信号プロセッサ（ＤＳＰ）、ＦＰＧＡ、ＡＳＩＣ）を表す。一実施形態では、推論エンジン１０５に関連する処理のいくつかは、プロセッサ１１０によって実行される。メモリデバイス１３０は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス１３０内のメモリのタイプは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、強誘電体ランダムアクセスメモリ（ＦｅＲＡＭ）等を含むことができる。メモリデバイス１３０は、推論エンジン１０５及びプロセッサ１１０によってアクセス可能である。Ｉ／Ｏインタフェース１２０は、任意の数及びタイプのＩ／Ｏインタフェース（例えば、周辺機器相互接続（ＰＣＩ）バス、ＰＣＩ拡張（ＰＣＩ−Ｘ）、ＰＣＩＥ（ＰＣＩ  Ｅｘｐｒｅｓｓ）バス、ギガビットイーサネット（登録商標）（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））を表す。様々なタイプの周辺機器をＩ／Ｏインタフェース１２０に接続することができる。このような周辺機器には、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、他のタイプのゲームコントローラ、メディア記録デバイス、外部ストレージデバイス、ネットワークインタフェースカード等が含まれる（但し、これらに限定されない）。
【００１３】  様々な実施形態では、コンピューティングシステム１００は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、様々な他のタイプのコンピューティングシステム若しくはデバイスの何れかであってもよい。コンピューティングシステム１００のコンポーネントの数は、実施形態毎に異なってもよいことに留意されたい。各コンポーネント／サブコンポーネントは、図１に示す数より多くてもよいし少なくてもよい。また、コンピューティングシステム１００は、図１に示されていない他のコンポーネントを含むことができることに留意されたい。また、他の実施形態では、コンピューティングシステム１００は、図１に示す以外の方法で構成されてもよい。
【００１４】  ここで、図２を参照すると、コンピューティングシステム２００の別の実施形態のブロック図が示されている。一実施形態では、システム２００は、ＧＰＵ２０５と、ホストＣＰＵ２１０と、システムメモリ２２５と、ローカルメモリ２３０と、を含む。システム２００は、図を曖昧にすることを避けるために示されていない他のコンポーネントも含む。アプリケーションは、ホストＣＰＵ２１０上で実行され、ドライバ２１２とインタフェースして、プログラムコマンド及びデータをＧＰＵ２０５に送信する。ホストＣＰＵ２１０は、メモリコントローラ２２０及びシステムメモリ２２５に接続されている。ＧＰＵ２０５は、コマンドプロセッサ２４０と、ディスパッチユニット２５０と、計算ユニット２５５Ａ〜２５５Ｎと、メモリコントローラ２２０と、グローバルデータ共有部２７０と、レベル１（Ｌ１）キャッシュ２６５と、レベル２（Ｌ２）キャッシュ２６０と、を少なくとも含む。他の実施形態では、ＧＰＵ２０５は、他のコンポーネントを含むことができ、図示したコンポーネントのうち１つ以上を省略することができ、及び／又は、他の適切な方法で編成することができる。
【００１５】  特定のタイプの機械学習及びニューラルネットワークアプリケーションは、高帯域幅要件を有し、外部メモリの帯域幅を低減することができれば、パフォーマンスの向上及び処理時間の短縮を達成することができる。場合によっては、外部メモリ帯域幅は、ニューラルネットワークを実装する場合にボトルネックになることがある。したがって、外部メモリの帯域幅が低減すると、システム２００でのニューラルネットワークの実行速度を大幅に向上させることができる。
【００１６】  ＧＰＵ２０５のグローバルデータ共有部２７０、Ｌ１キャッシュ２６５及びＬ２キャッシュ２６０は、本明細書で使用される「内部メモリ」という用語を表す。内部メモリは、ＧＰＵ２０５に対する外部メモリと区別され、システムメモリ２２５及びローカルメモリ２３０は、本明細書で使用される「外部メモリ」という用語を表す。様々なニューラルネットワークアプリケーションの実行において、ＧＰＵ２０５は、システムメモリ２２５及びローカルメモリ２３０からデータを読み出し、これらにデータを書き込む外部メモリ帯域幅を最小化するように構成されている。
【００１７】  様々な実施形態では、コンピューティングシステム２００は、様々なタイプの機械学習アルゴリズムの何れかを実装するように構成されている。例えば、一実施形態では、コンピューティングシステム２００は、ニューラルネットワーク（例えば、パーセプトロン、畳み込みニューラルネットワーク）を実装するように構成されている。ホストＣＰＵ２１０上で実行されるアプリケーションは、ドライバ２１２を利用して、データ及びコマンドをＧＰＵ２０５に送信する。コマンドプロセッサ２４０は、ホストＣＰＵ２１０からコマンドを受信し、ディスパッチユニット２５０を利用して、コマンドを計算ユニット２５５Ａ〜２５５Ｎに発行するように構成されている。計算ユニット２５５Ａ〜２５５Ｎは、内部メモリ帯域幅を使用して、ＧＰＵ２０５内のグローバルデータ共有部２７０、Ｌ１キャッシュ２６５及びＬ２キャッシュ２６０に対してデータを読み書きするように構成されている。図２には示されていないが、計算ユニット２５５Ａ〜２５５Ｎは、各計算ユニット２５５Ａ〜２５５Ｎ内に１つ以上のキャッシュ及び／又はローカルメモリを含むことができる。これらのキャッシュ及び／又はローカルメモリは、ＧＰＵ２０５の「内部メモリ」の表現に含まれてもよい。また、計算ユニット２５５Ａ〜２５５Ｎは、外部メモリ帯域幅を利用して、メモリコントローラ２２０を介して、システムメモリ２２５及び／又はローカルメモリ２３０に対してデータを読み書きするように構成されている。
【００１８】  データ分割ユニット２４５は、ハードウェア及び／又はソフトウェアの任意の適切な組み合わせを使用して実装されてもよい。一実施形態では、コマンドプロセッサ２４０は、実装されているニューラルネットワークの１つ以上の層に対してチャネルデータをどのように分割するかを決定するチャネルデータ分割ユニット２４５を含む。別の実施形態では、チャネルデータ分割ユニット２４５は、ドライバ２１２の一部として含まれてもよい。さらなる実施形態では、チャネルデータ分割ユニット２４５は、ドライバ２１２、コマンドプロセッサ２４０、及び／又は、１つ以上の他の場所の間で分割されてもよい。一実施形態では、チャネルデータ分割ユニット２４５は、ニューラルネットワークの所定の層に対する外部メモリ帯域幅の利用を最小化するために、各ニューラルネットワーク層に対してチャネルデータをどのように分割するかを決定する。いくつかの実施形態では、ニューラルネットワークの１つ以上の層が統合（マージ）される。これらの実施形態では、分割ユニット２４５は、統合された層の外部メモリ帯域幅の利用を最小化するために、統合された層に対してチャネルデータをどのように分割するかを決定する。外部メモリ帯域幅の利用を最小化するためにニューラルネットワークの層のチャネルデータを分割する技術は、本開示の残りの部分においてより詳細に説明される。
【００１９】  ここで、図３を参照すると、ニューラルネットワーク３００の実装の一実施形態のブロック図が示されている。ニューラルネットワーク３００は、畳み込み層３０２と、サブサンプリング層３０４と、畳み込み層３０６と、サブサンプリング層３０８と、完全結合層３１０と、を含む。他の実施形態では、ニューラルネットワーク３００は、他の数の層及び層の配置を含むことができる。
【００２０】  コンピューティングシステム（例えば、図１のシステム１００）上にニューラルネットワーク３００を実装する場合、メモリ帯域幅要件は、かなりのものになる可能性がある。コンピューティングシステム上にニューラルネットワーク３００を実装する場合、消費される外部メモリ帯域幅の量を低減するために、１つ以上の技術が利用されてもよい。例えば、第１の技術では、入力チャネルを複数回ではなく１回読み出し、全てのフィーチャについて入力チャネルの畳み込みを実行することを含む。第１の技術では、入力チャネルの読み出しメモリ帯域幅がチャネル数だけ低減する。第２の技術では、１つ以上のフィーチャについて複数のチャネルの畳み込み出力データを生成し、畳み込み出力データを外部メモリに書き戻す前に、複数のチャネルに亘って畳み込み出力データを組み合わせることを含む。第３の技術では、ニューラルネットワーク３００の２つ以上の層を組み合わせ、出力データを外部メモリに書き戻す前に、２つ以上の層をインラインで実行することを含む。様々な実施形態では、他の技術が利用されてもよく、及び／又は、これらの３つの技術のうち１つ以上と組み合わされてもよい。
【００２１】  ここで、図４を参照すると、推論エンジン４００の一実施形態のブロック図が示されている。実施形態に応じて、推論エンジン４００は、（図１の）システム１００、（図２の）システム２００又は別のコンピューティングシステム上に実装されてもよい。推論エンジン４００は、複数のチャネル処理エンジン４０２Ａ〜４０２Ｎを含む。推論エンジン４００は、推論アクセラレータと呼ばれる場合があることに留意されたい。チャネル処理エンジン４０２Ａ〜４０２Ｎの数は、実施形態毎に異なってもよい。チャネル処理エンジン４０２Ａは、一実施形態によるチャネル処理エンジンのコンポーネントを示すように拡大されている。他のチャネル処理エンジン４０２Ｂ〜４０２Ｎは、コンポーネントの同様の配置を含むことができる。
【００２２】  推論エンジン４００の実装形態は、外部メモリ帯域幅の利用を低減する第１の技術を示す。図４に示す第１の技術を利用すると、各チャネルの入力チャネルデータが、複数回読み出されるのではなく、１回読み出される。次に、全てのフィーチャの入力チャネルデータに対して畳み込みが実行される。例えば、一実施形態では、入力チャネルデータ４０４がチャネル０について読み出され、その後、全ての「Ｍ」個のフィーチャ４１０Ａ〜４１０Ｍに対して畳み込みが実行される。「Ｍ」個のフィーチャの数は、層及び実施形態に従って異なり得る。入力データと各フィーチャの畳み込みの結果は、出力データブロック４１５Ａ〜４１５Ｍとして示され、出力データ４１５Ａ〜４１５Ｍが、ブロック４２０Ａ〜４２０Ｍによって表される外部メモリに書き込まれる。チャネル０に関して全てのＭ個のフィーチャの畳み込みが実行された後、チャネル１に関して全てのＭ個のフィーチャの畳み込みが実行され、チャネルに関して全てのＭ個のフィーチャの畳み込みが実行される。ブロック４０２Ｂ〜４０２Ｎは、他のチャネルに関して実行される畳み込みを示し、結果として生じる出力データが外部メモリに書き込まれる。チャネルの数「Ｎ」は、ニューラルネットワークの層に従って、及び、実施形態に従って変わってもよい。
【００２３】  加算器４３０Ａ〜４３０Ｍは、Ｎ個のチャネルの全ての畳み込みから生成された全ての出力チャネルデータの各フィーチャについて計算された合計を示す。加算器４３０Ａ〜４３０Ｍによって生成された合計は、ブロック４４０Ａ〜４４０Ｍとして示されている。これらの合計は、加算器４３０Ａ〜４３０Ｍによって計算された後に外部メモリに書き込まれてもよい。合計が外部メモリに書き込まれた後、ニューラルネットワークの１つ以上の他の層が実行されてもよい。
【００２４】  ここで、図５を参照すると、推論エンジン５００の別の実施形態のブロック図が示されている。推論エンジン５００は、外部メモリ帯域幅の利用を低減する第２の技術を示す。推論エンジン５００に示すように、複数のチャネルのデータは、処理ユニット（例えば、図２のＧＰＵ２０５）の内部メモリにロードされる。内部メモリにロードされるチャネルの数は、処理ユニットの内部メモリのサイズによって制限される。
【００２５】  一実施形態では、入力データを表すチャネルブロブ（ｂｌｏｂ）形状は、内部メモリサイズの利用可能性に基づいて三次元（３Ｄ）ブロックに分割される。次に、「Ｎ」個のチャネルの畳み込みが、畳み込み計算ブロック５０２Ａ〜５０２Ｎの各チャネルの第１のフィーチャに対して実行される。Ｎ個のチャネル及びフィーチャ０の畳み込み出力データは、フィーチャ０に関するＮ個のチャネルの畳み込み出力データの何れかを外部メモリに書き込む前に、フィーチャ０の加算器５２０Ａによって共に加算される。また、フィーチャ０のＮ個のチャネルの畳み込みと並列して、他のＭ−１個のフィーチャのＮ個のチャネルの畳み込みも実行される。Ｍ個のフィーチャの各々は、畳み込み出力データを外部メモリに書き込む前に、各フィーチャのＮ個のチャネルの畳み込み出力データを加算する別の加算器５２０Ａ〜５２０Ｍを有する。次に、加算器５２０Ａ〜５２０Ｍが異なるフィーチャ０〜フィーチャＭ−１の合計を生成した後、結果として得られる合計がブロック５３０Ａ〜５３０Ｍに示すように外部メモリに書き込まれる。
【００２６】  ここで、図６を参照すると、チャネルデータを三次元（３Ｄ）ブロックに分割する一実施形態のブロック図が示されている。チャネルデータ６０５は、図６の左側においてデータの３Ｄブロブとして示されている。一実施形態では、チャネルデータ分割ユニット（例えば、図２のチャネルデータ分割ユニット２４５）は、チャネルデータ６０５をブロック６１０Ａ〜６１０Ｈ（及び、３Ｄブロブの後側の他のラベル付けされていないブロック）に分割する方法を決定する。この説明のために、チャネルデータ６０５全体が合計１６個のブロックに分割され、各ブロックは、ＸＹ方向にサイズＮ×Ｎ、Ｚ（又は、チャネル）方向にサイズＭ／２であると想定する。この分割は、単に１つの特定の実施形態を示すものであることを理解されたい。他の実施形態では、チャネルデータ６０５全体を、他の数及びサイズのブロックに分割することができる。
【００２７】  一実施形態では、チャネルデータ６０５のブロック６１０Ａ〜６１０Ｈは、一度に１ブロックずつ、外部メモリから処理ユニット（例えば、ＧＰＵ２０５）の内部メモリにロードされる。例えば、ブロック６１０Ａが外部メモリから内部メモリにロードされ、次に、畳み込み演算とオプションで１つ以上の演算とが、ニューラルネットワークの所定の１つ以上の層についてブロック６１０Ａで実行され、出力データが外部メモリに書き戻される。次に、ブロック６１０Ｂがロードされ、出力データを外部メモリに書き戻す前に同じ演算が実行され、次いでブロック６１０が処理され、以下同様である。別の実施形態では、３Ｄブロックを処理するパターンは、ブロック６１０Ａが最初に処理され、次にブロック６１０Ｅが処理され、次にブロック６１０Ｂが処理され、次にブロック６１０Ｆが処理される等のように変わってもよい。
【００２８】  ブロック６１０Ａは、図６の右側に拡大されており、ブロック６１０Ａが外部メモリから処理ユニットの内部メモリにロードされた後、一実施形態において畳み込みがどのように実行されるかを示す。一実施形態では、第１の畳み込みステップ（ステップ１）は、チャネル０〜チャネル３の左端のＮ／４画素に対して実行される。次に、ステップＭ／８がチャネルＭ／２−４からＭ／２−１の左端のＮ／４画素の畳み込みに対して実行されるまで、第２の畳み込みステップが、チャネル４〜チャネル７の左端のＮ／４画素に対して実行され、第３の畳み込みステップが、チャネル８〜チャネル１１の左端のＮ／４画素に対して実行され、以下同様である。ステップＭ／８の後、次のステップＭ／８＋１は、ブロック６１０Ａの先頭に戻ることができ、左から２番目の列から開始し、ブロック６１０Ａの後部に向かって進む。ブロック６１０Ａの畳み込みを全てのフィーチャで処理するこのパターンは、ブロック６１０Ａの右端の後ろの列に到達するまで続けることができる。ブロック６１０Ａの異なる部分の畳み込みは、外部メモリ帯域幅を利用することなく実行されることに留意されたい。これにより、ニューラルネットワークの１つ以上の層を実装するための全体的な外部メモリ帯域幅の利用を低減するのに役立つ。
【００２９】  ここで、図７を参照すると、推論エンジン７００の別の実施形態のブロック図が示されている。推論エンジン７００は、外部メモリ帯域幅の利用を低減する第３の技術を示す。第３の技術では、チャネルデータのグループを外部メモリから内部メモリに読み出した後であって、出力データを外部メモリに出力データを書き込む前に、チャネルデータのグループに対して複数の層を実行することを含む。ニューラルネットワークの層を実行する従来のアプローチは、入力データに対して単一の層の処理を実行し、単一の層が完了した後、処理されたデータを外部メモリに書き戻す。次に、処理されたデータが外部メモリから読み戻され、ニューラルネットワークの次の層が実行される。このアプローチは、大量の外部メモリ帯域幅を利用する。
【００３０】  ニューラルネットワークの複数の層を実行するために、チャネルデータ７０５のグループは、外部メモリから、推論エンジン７００を実装する処理ユニットの内部メモリにロードされる。一実施形態では、畳み込み層７１０は、外部メモリからチャネルデータのブロックをロードした後、第１の層として実行される。
【００３１】  畳み込み層７１０の出力を外部メモリに書き戻すのではなく、畳み込み層７１０の出力は、ニューラルネットワークの次の層によって処理される。図７に示すように、ニューラルネットワークの次の層は、プーリング層７１５である。他の実施形態では、他の層が、畳み込み層７１０に続くことができる。一実施形態では、正規化層７２０がプーリング層７１５に続き、結果データ７２５が外部メモリに書き戻される。推論エンジン７００において畳み込み層をプーリング層及び正規化層と組み合わせる例は、一実施形態の単なる例示であることを理解されたい。他の実施形態では、他の数及び／又はタイプの層を組み合わせて、出力結果データ７２５を外部メモリに書き戻す前に、チャネルデータ７０５のグループに対してインライン演算で実行してもよい。
【００３２】  ここで、図８を参照すると、ニューラルネットワークの実装における外部メモリ帯域幅の利用を低減するために、メモリブロックを処理するための垂直順序を使用する一実施形態のブロック図が示されている。チャネルデータ８００のグループは、図８の左側に示されている。チャネルデータ８００のグループは、複数の３Ｄブロック８０５Ａ〜８０５Ｐに分割されている。一実施形態では、チャネルデータ８００は、チャネルデータ分割ユニット（例えば、図２のチャネルデータ分割ユニット２４５）によって複数の３Ｄブロック８０５Ａ〜８０５Ｐに分割されている。
【００３３】  一実施形態では、分割後、左上の３Ｄブロック８０５Ａが、推論エンジン（例えば、図７の推論エンジン７００）によって処理される。次に、チャネルデータ８００のグループを下に移動し、３Ｄブロック８０５Ｂが処理され、次に３Ｄブロック８０５Ｃが処理され、次に３Ｄブロック８０５Ｄが処理され、次に３Ｄブロック８０５Ｅが処理され、以下同様である。各垂直列が上から下に処理され、チャネルデータ８００のグループの全ての列が処理されるまで、次の右側の列が上から下に処理される。
【００３４】  図８の右側には、３Ｄブロック８０５Ａと３Ｄブロック８０５Ｅとの間の境界にあるソース画素８１０が示されている。境界上に畳み込み出力画素８１５を生成するために、３Ｄブロック８０５Ａ及び３Ｄブロック８０５Ｅの両方のソース画素８１０が利用される。また、プーリング層のプール出力画素８２０が図の下の行に示されており、境界付近のプール出力画素８２０は、３Ｄブロック８０５Ａ及び３Ｄブロック８０５Ｅの両方のソース画素８１０を使用する。また、各３Ｄブロック８０５Ａ〜８０５Ｐの上部及び下部の画素は、隣接するブロックからの画素を必要とする。隣接するブロックからの余分なラインのフェッチは、外部メモリからのデータの余分なフェッチをもたらす。したがって、３Ｄブロック８０５Ａ〜８０５Ｐを処理する効率的な技術は、図８の左側に示されている処理パターンを使用することである。
【００３５】  ここで、図９を参照すると、ニューラルネットワークの異なる層を実行するためのブロックサイズの一実施形態のブロック図が示されている。図９の説明は、図８の説明の続きであることを意図している。図９のブロック８０５Ａ，８０５Ｂ，８０５Ｅは、図８のチャネルデータ８００のグループの同じブロック８０５Ａ，８０５Ｂ，８０５Ｅを表すことを意図している。畳み込み層を実行するために、隣接するブロックからの追加の画素を使用して、畳み込み層の処理を実行する。これらの追加の画素は、ブロック８０５Ａの各側に追加の画素を含むブロック９１０に示されている。また、プーリング層を実行するために、隣接するブロックからの追加の画素を使用して、プーリング層の処理を実行する。これらの追加の画素は、ブロック８０５Ａの各側に（ブロック９１０と比べて）さらに追加の画素を含むブロック９２０に示されている。
【００３６】  この説明のために、一実施形態では、各ブロック８０５Ａ，８０５Ｂ，８０５Ｅは、１５ラインの画素を含むことを想定している。他の実施形態では、各ブロック８０５Ａ，８０５Ｂ，８０５Ｅは、他の数のラインの画素を含むことができる。ブロック８０５Ａ，８０５Ｂ，８０５Ｅの各々が１５ラインの画素を含む実施形態では、ブロック８０５Ａの処理において、畳み込み層及びプーリング層を実行するために、１５ラインの画素が外部メモリからフェッチされ、さらに２ラインの画素が追加される。他の実施形態では、畳み込み層及びプーリング層（及び、実行される追加の層）を実行するために、２ラインの他に、他の数のさらなるラインが必要になることがある。次に、ブロック８０５Ｂに垂直方向に移動すると、下部の４ラインの画素が、ブロック８０５Ａの以前の処理演算から内部メモリに保持される。次の１５ラインの画素がフェッチされ、これらの１５ライン及び保持された４ラインが共に処理され、ブロック８０５Ｂに対して畳み込み層及びプーリング層が実行される。ブロック８０５Ａの処理から下部の４ラインの画素が保持されるので、これらの境界ラインの再フェッチが回避される。これは、処理が垂直方向に隣接するブロック間を移動するときに畳み込み層及びプーリング層を実行する場合に、外部メモリ帯域幅の利用を低減するのに役立つ。
【００３７】  ここで、図１０を参照すると、畳み込み層を実行する方法１０００の一実施形態が示されている。説明のために、この実施形態及び図１１の実施形態におけるステップを順番に示す。しかしながら、説明する方法の様々な実施形態では、説明する要素のうち１つ以上が、同時に実行され、図示した順序とは異なる順序で実行され、まあは、完全に省略されることに留意されたい。必要に応じて、他の追加の要素も実行される。本明細書で説明する様々なシステム又は装置の何れも、方法１０００を実施するように構成されている。
【００３８】  システムは、複数のチャネルの入力データに対して畳み込み演算を実行する要求を検出する（ブロック１００５）。例えば、一実施形態では、要求は、ニューラルネットワークの畳み込み層が、複数のチャネルからの入力データを処理するように実行されることを指定することができる。一実施形態では、システムは、外部メモリに接続された処理ユニット（例えば、ＧＰＵ）を少なくとも含む。処理ユニットは、内部メモリと、様々な計算ユニット、実行ユニット、乗累算ユニット（ＭＡＣ）及び／又は他のロジックと、を含む。
【００３９】  システムは、要求を検出したことに応じて、１つ以上の要素に基づいて、複数のチャネルの入力データを複数の三次元（３Ｄ）ブロックに分割する（ブロック１０１０）。（３Ｄブロックの）三次元のうち２つは、元の入力（例えば、画像、ビデオフレーム）のｘ、ｙ空間次元に対応し、第３の次元（すなわち、ｚ）は、複数のチャネルに対応する。一実施形態では、システムは、入力データを３Ｄブロックに分割して、ニューラルネットワークの所定の層に対する外部メモリ帯域幅の利用を最小化する。別の実施形態では、システムは、内部メモリのサイズ、１つ以上のフィーチャのサイズ、及び、畳み込みのサイズに基づいて、入力データを３Ｄブロックに分割する。他の実施形態では、システムは、１つ以上の他の要素に基づいて、及び／又は、１つ以上の他の目標を達成するために、入力データを３Ｄブロックに分割することができる。
【００４０】  次に、システムは、分割された３Ｄブロックから第１の３Ｄブロックを選択して処理する（ブロック１０１５）。次いで、システムは、選択された３Ｄブロックを外部メモリから処理ユニットの内部メモリにロードする（ブロック１０２０）。次に、システムは、１つ以上のフィーチャについて、選択された３Ｄブロックの畳み込み出力データを生成する（ブロック１０２５）。次いで、システムは、１つ以上のフィーチャ毎に、畳み込み出力データを外部メモリに書き込む前に、３Ｄブロックの第１の複数のチャネルに亘る畳み込み出力データを共に追加する（ブロック１０３０）。次に、システムは、対応するフィーチャについて生成された、第１の複数のチャネルに亘る畳み込み出力データの各々の合計を外部メモリに書き込む（ブロック１０３５）。次いで、システムは、処理する他の３Ｄブロックが残っているかどうかを判別する（条件付きブロック１０４０）。処理する他の３Ｄブロックが残っている場合（条件付きブロック１０４０：Ｙｅｓ）、システムは、処理する次の３Ｄブロックを選択し（ブロック１０４５）、方法１０００はブロック１０２０に戻る。システムは、外部メモリ帯域幅の利用を最小化するために、３Ｄブロックを処理する特定のパターンに従うことができることに留意されたい。パターンの一例は、図８に関連して説明されている。全ての３Ｄブロックが処理された場合（条件付きブロック１０４０：Ｎｏ）、方法１０００は終了する。
【００４１】  ここで、図１１を参照すると、推論エンジンに対して実行される外部メモリ帯域幅の利用技術を選択する方法１１００の一実施形態が示されている。ニューラルネットワークの１つ以上の層を実行する要求が検出される（ブロック１１０５）。一実施形態では、処理ユニットはＧＰＵである。他の実施形態では、処理ユニットは、他のタイプの処理ユニットであってもよい。処理ユニットは、要求を検出したことに応じて、１つ以上の層に関連するチャネルの数、チャネルデータの量、及び、処理のタイプを決定する（ブロック１１１０）。処理ユニットは、ブロック１１１０におけるニューラルネットワークの１つ以上の層の実行に関連する他の要素（例えば、フィーチャの数、フィーチャのサイズ、ストライド）を決定することもできる。
【００４２】  次に、処理ユニットは、ブロック１１１０で決定された要素に基づいて、複数の外部メモリ帯域幅の低減技術のうち何れの１つ以上の技術を利用するかを決定する（ブロック１１１５）。例えば、処理ユニットは、技術毎に、利用される外部メモリ帯域幅の量を計算することができる。また、処理ユニットは、２つ以上の技術が組み合わされた場合に利用される外部メモリ帯域幅の量を計算することができる。次に、処理ユニットは、外部メモリ帯域幅の利用を最小化する１つ以上の技術を選択することができる。次いで、処理ユニットは、選択された１つ以上の技術に従って、及び、処理ユニットの利用可能な内部メモリの量に基づいて、チャネルデータを分割する（ブロック１１２０）。次に、処理ユニットは、分割されたチャネルデータの部分毎に、ニューラルネットワークの１つ以上の層を実行する（ブロック１１２５）。次いで、処理ユニットは、部分毎に、処理したチャネルデータを外部メモリに書き込む（ブロック１１３０）。ブロック１１３０の後、方法１１００は終了する。
【００４３】  ここで、図１２を参照すると、畳み込み演算の間の３Ｄブロックの一実施形態のブロック図が示されている。入力チャネルブロブ１２０５は、図１２の左側に示されている。チャネルブロブ１２０５及びブロック１２１０Ａ〜１２１０Ｈの寸法は、１つの特定の実施形態を示すことを理解されたい。他の実施形態では、チャネルブロブ１２０５及びブロック１２１０Ａ〜１２１０Ｈの寸法は、図１２に示す寸法と異なってもよい。一実施形態では、ブロック１２１０Ａ〜１２１０Ｈの３Ｄブロックの寸法は、内部メモリ／キャッシュサイズ、入力３Ｄブロブ形状（チャネル×ブロブ幅×ブロブ高さ）、及び、畳み込みカーネルサイズに基づいて選択される。３ＤブロックをＺ方向に再形成することによって、部分アキュムレータストレージ要件（ｐａｒｔｉａｌ  ａｃｃｕｍｕｌａｔｏｒ  ｓｔｏｒａｇｅ  ｒｅｑｕｉｒｅｍｅｎｔｓ）及び外部メモリ帯域幅の使用が低減される。一実施形態では、入力チャネルブロブ１２０５の畳み込み処理を開始する前に、３Ｄブロックサイズの動的なリサイズをファームウェア及び／又はソフトウェアで実施することができる。
【００４４】  ブロック１２１０Ａが処理されると、処理されたブロックは、外部メモリ１２２０内の入力チャネルストレージ１２３５から取り出され、内部メモリ１２１５に記憶される。内部メモリ１２１５のサイズは制限されており、したがって、単一のブロックが内部メモリ１２１５に収まるようにブロック１２１０Ａ〜１２１０Ｈの寸法を選択することができる。
【００４５】  外部メモリ１２２０内の部分アキュムレータストレージ１２３０は、０〜１２７のチャネルの第１のセットに対して部分的に畳み込まれた累積値についての全てのフィーチャを記憶するために利用される。これらの部分値は。ＸＹ方向の全ての３Ｄブロックについて外部メモリ１２２０に書き込まれる。次に、畳み込み処理をＺ方向に移動させて、後側の３Ｄブロック（チャネル１２８〜２５５の３Ｄブロック）を処理する。後側の３Ｄブロックを処理する間、前のブロックの部分的に畳み込まれた累積値１２３０が外部メモリ１２２０から読み出され、これらの値が、後側のブロックからの部分的に畳み込まれた累積値と組み合わされて、最終的な畳み込み出力が得られ、外部メモリ１２２０の出力フィーチャストレージ領域１２２５に記憶される。最終的な畳み込み出力を生成するこの畳み込み処理は、チャネルブロブ１２０５の前側から後側に移動するとき、部分アキュムレータストレージ１２３０に関連するさらなる読み出し及び書き込みメモリ帯域幅を必要とする。
【００４６】  ここで、図１３を参照すると、畳み込み演算の間に３Ｄブロックを動的に再形成する一実施形態のブロック図が示されている。図１３の左側に示すように、入力チャネルブロブ１３０５は、複数の３Ｄブロック１３１０Ａ〜１３１０Ｓに分割される。３Ｄブロック１３１０Ａ〜１３１０Ｓの寸法は、チャネル０〜２５５の全てが単一のブロック内に含まれるように選択される。また、３Ｄブロックの寸法は、３Ｄブロックの全体が、チャネル０からチャネル２５５までの全てのチャネルに関して内部メモリ１３１５内に収まるように選択される。２５６個のチャネルを有する入力チャネルブロブ１３０５の例は、一実施形態の単なる例示であることを理解されたい。他の実施形態では、入力チャネルブロブ１３０５は、他の数のチャネルを有することができる。
【００４７】  ブロック１３１０Ａ〜１３１０ＳをＺ方向に再形成することによって、全ての入力チャネルを内部メモリ１３１５に記憶して、入力チャネルブロブ１３０５の全ての入力チャネルの畳み込みを処理することができる。これは、外部メモリ１３２０内の部分アキュムレータストレージに関連する外部メモリ帯域幅を最小化するのに役立つ。図１２に示す例示的な３Ｄブロックのサイジングと比較して、入力チャネルストレージ１３３５からの入力チャネルの読み出し及び出力フィーチャの書き込みのみが、最終的に外部メモリ帯域幅を使用する。外部メモリ帯域幅の使用の低減は、システム電力消費の低減を可能にする。
【００４８】  様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書で説明する方法及び／又はメカニズムを実施する。例えば、汎用プロセッサ又は専用プロセッサによって実行可能なプログラム命令が考えられる。様々な実施形態では、このようなプログラム命令を、高レベルプログラミング言語として表すことができる。他の実施形態では、プログラム命令を、高レベルプログラミング言語からバイナリ、中間又は他の形式にコンパイルすることができる。或いは、ハードウェアの動作又は設計を記述するプログラム命令を書き込むことができる。このようなプログラム命令は、Ｃ言語等の高レベルプログラミング言語によって表すことができる。或いは、Ｖｅｒｉｌｏｇ等のハードウェア設計言語（ＨＤＬ）を使用することもできる。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、使用中にコンピューティングシステムによってアクセス可能であり、プログラム実行のためにプログラム命令をコンピューティングシステムに提供する。一般に、このようなコンピューティングシステムは、少なくとも１つ以上のメモリと、プログラム命令を実行するように構成された１つ以上のプロセッサと、を含む。
【００４９】  上述した実施形態は、実装の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、当業者には多くの変形及び修正が明らかになるであろう。以下の特許請求の範囲は、かかる変形及び修正の全てを包含すると解釈されることを意図している。
【図１】
2021503141.tif 000003
【図２】
2021503141.tif 000004
【図３】
2021503141.tif 000005
【図４】
2021503141.tif 000006
【図５】
2021503141.tif 000007
【図６】
2021503141.tif 000008
【図７】
2021503141.tif 000009
【図８】
2021503141.tif 000010
【図９】
2021503141.tif 000011
【図１０】
2021503141.tif 000012
【図１１】
2021503141.tif 000013
【図１２】
2021503141.tif 000014
【図１３】
2021503141.tif 000015
【国際調査報告】
2021503141.tif 000016
2021503141.tif 000017
2021503141.tif 000018