(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-16
(45)【発行日】2023-11-27
(54)【発明の名称】機械知覚および高密度アルゴリズム集積回路を実装するためのシステムおよび方法
(51)【国際特許分類】
G06F 15/167 20060101AFI20231117BHJP
G06F 15/173 20060101ALI20231117BHJP
G06F 15/80 20060101ALI20231117BHJP
G06F 9/318 20180101ALI20231117BHJP
G06F 9/34 20180101ALI20231117BHJP
G06F 9/38 20180101ALI20231117BHJP
G06F 13/14 20060101ALI20231117BHJP
【FI】
G06F15/167 610A
G06F15/173 683C
G06F15/80
G06F9/318 A
G06F9/34 350A
G06F9/38 370X
G06F13/14 310H
(21)【出願番号】P 2020548934
(86)(22)【出願日】2019-03-05
(86)【国際出願番号】 US2019020652
(87)【国際公開番号】W WO2019190707
(87)【国際公開日】2019-10-03
【審査請求日】2022-02-07
(32)【優先日】2018-03-28
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】520337086
【氏名又は名称】クアドリック.アイオー,インコーポレイテッド
(74)【代理人】
【識別番号】110000659
【氏名又は名称】弁理士法人広江アソシエイツ特許事務所
(72)【発明者】
【氏名】ドレゴ,ナイジェル
(72)【発明者】
【氏名】シッカ,アマン
(72)【発明者】
【氏名】ダーブハ,アナンス
(72)【発明者】
【氏名】ラビチャンドラン,ミリナリーニ
(72)【発明者】
【氏名】フィル,ロバート,ダニエル
(72)【発明者】
【氏名】ケタパル,ヴェルブハン
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2007/0050603(US,A1)
【文献】米国特許第06130551(US,A)
【文献】米国特許出願公開第2013/0024826(US,A1)
【文献】米国特許出願公開第2011/0010524(US,A1)
【文献】米国特許出願公開第2006/0277545(US,A1)
【文献】米国特許第09213652(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/167
G06F 15/173
G06F 15/80
G06F 9/318
G06F 9/34
G06F 9/38
G06F 13/14
(57)【特許請求の範囲】
【請求項1】
集積回路
のアレイコア内で、データセットを伝播させるための方法であって、前記方法が、
データ移動命令を実行することを含み、前記データ移動命令は、実行されるとき、集積回路アレイの複数のアレイコアのアレイのうちの1つのアレイコア内でデータセットを回転移動させる命令であり、前記アレイコアは、アレイコアの側面に沿って位置する複数の異なるデータポートを備えており、
前記データ移動命令を実行することが、
前記アレイコア内の前記データセットを、0度~360度の間の回転度で、前記アレイコアの前記複数の異なるデータポートの開始データポートから前記複数の異なるデータポートの終端データポートまで移動させることを含む、方法。
【請求項2】
前記開始データポートのレジスタファイル内にデータセットを記憶することをさらに含み、前記開始データポートは、前記アレイコアの、第1の側面に沿った第1のデータポート、第2の側面に沿った第2のデータポート、第3の側面に沿った第3のデータポート、および第4の側面に沿った第4のデータポートのうちの1つであり、かつ前記終端データポートは、前記開始データポートとは異なるデータポートであって、前記第1のデータポート、前記第2のデータポート、前記第3のデータポート、および前記第4のデータポートのうちの1つであることを特徴とする、請求項1記載の方法。
【請求項3】
前記データセットのデータの複数の異なるデータサブセットの各々の粗データ伝播経路を識別することと、
前記データセットのデータの前記複数の異なるデータサブセットの各々の粒状データ伝播経路を識別することと、をさらに含み、
粗データ伝播経路および粒状データ伝播経路の各々が、前記集積回路の階層メモリ構造と前記集積回路の前記集積回路アレイとの間のデータの伝播を管理する所定のデータフロースケジュールに基づいて定義されており、
前記集積回路アレイが、
複数のアレイコアであって、前記複数のアレイコアの各々が、入力データを処理するための少なくとも1つの処理回路を含む、複数のアレイコアと、
複数のボーダーコアであって、前記複数のボーダーコアの各々が、入力データを記憶するための少なくとも1つのレジスタファイルを含む、複数のボーダーコアと、を含み、
前記複数のアレイコアが、前記複数のボーダーコアとは異なる、請求項2に記載の方法。
【請求項4】
階層メモリ構造が、メインメモリと前記集積回路アレイとの間の直接メモリアクセスを可能にし、前記階層メモリ構造は、
各々が前記集積回路アレイとインターフェースし、先入れ先出しベースでデータを送信および受け取る複数のデュアルFIFOと、
各々が前記複数のデュアルFIFOのそれぞれのデュアルFIFOとインターフェースし、かつ前記それぞれのデュアルFIFOから受信され、および/または前記それぞれのデュアルFIFOへのロードを保留しているかのいずれかであるデータの1つ以上のロードを記憶する複数の周辺ロードストアと、
各々が前記複数の周辺ロードストアのそれぞれの周辺ロードストアとインターフェースし、かつ前記メインメモリとインターフェースする複数の周辺メモリと、を含む、請求項2に記載の方法。
【請求項5】
前記
データセットの属性および前記集積回路アレイのアーキテクチャに基づいて、データ移動命令を生成することをさらに含み、
前記データ移動命令が、前記
データセットの
複数の異なるデータサブセットの各々に対して、
粗データ伝播経路および
粒状データ伝播経路を定義する、請求項1に記載の方法。
【請求項6】
データ計算命令および/または実行命令を生成することと、
データ移動命令の組み合わせを、データ計算命令および実行命令のうちの1つ以上の命令と共に含む単一の命令のセットを生成することと、をさらに含む、請求項5に記載の方法。
【請求項7】
データ移動命令を生成することが、
前記集積回路アレイの所定の構成に基づいて、前記
データセットから前記複数の異なるデータサブセットの各々を識別することを含み、前記複数の異なるデータサブセットの各々を識別することが、
前記
データセットを、前記集積回路アレイの前記所定の構成に適合するように前記複数の異なるデータサブセットに分割することを含む、請求項5に記載の方法。
【請求項8】
前記
データセットの前記複数の異なるデータサブセットの各々に、所与の粗データ伝播経路を関連付けることと、
前記
データセットの前記複数の異なるデータサブセットの各々に、所与の粒状データ伝播経路を関連付けることと、をさらに含む、請求項5に記載の方法。
【請求項9】
前記データセットの
複数の異なるデータサブセットの各々の
粗データ伝播経路が、前記複数の異なるデータサブセットの各々の少なくとも開始位置、および前記複数の異なるデータサブセットの各々の終端位置を定義する、請求項1に記載の方法。
【請求項10】
前記データセットの前記複数の異なるデータサブセットの各々の
粒状データ伝播経路が、前記開始位置と前記終端位置との間で発生する中間進行位置を定義する、請求項9に記載の方法。
【請求項11】
前記データセットの所与のデータサブセットの一連のデータ移動の各データ移動が、実行するために単一のクロックサイクルのみを必要とする、請求項
1に記載の方法。
【請求項12】
前記データセットの
複数の異なるデータサブセットの各々の
粗データ伝播経路および
粒状データ伝播経路が、前記複数の
アレイコアのアレイによってメモリアドレスを発行することなく実施される、請求項1に記載の方法。
【請求項13】
集積回路内でデータを伝播する方法であって、前記方法が、
入力データセットを取得することと、
前記入力データセットの複数の異なるデータサブセットの各々の粗データ伝播経路を実装することであって、前記粗データ伝播経路が、
前記複数の異なるデータサブセットの各々の定義されたコア間データ移動であって、前記集積回路の集積回路アレイの複数のコアのうちの2つ以上を通る、前記複数の異なるデータサブセットのうちの所与のデータサブセットの所定の進行経路を定義する、定義されたコア間データ移動を含む、実装することと、
前記入力データセットの前記複数の異なるデータサブセットの各々の粒状データ伝播経路を実装することであって、前記粒状データ伝播経路が、
前記複数の異なるデータサブセットの各々の定義されたコア内データ移動であって、前記コア内データ移動が、前記集積回路の前記集積回路アレイの前記複数のコアのうちの1つ以上内の、前記複数の異なるデータサブセットの前記所与のデータサブセットの所定の進行経路を定義する、定義されたコア内データ移動を含む、実装することと、
データ移動命令を実行することであって、前記データ移動命令は、実行されるとき、前記複数のコアのアレイコア内のデータの複数の異なるデータサブセットの各々を回転移動させる命令であり、前記アレイコアは、アレイコアの側面に沿って位置する複数の異なるデータポートを備えており、
前記データ移動命令を実行することが、
前記アレイコア内の前記複数の異なるデータサブセットの各々を、0度~360度の回転度で、前記アレイコアの前記複数の異なるデータポートの開始データポートから前記複数の異なるデータポートの終端データポートまで移動させること、
を含む、方法。
【請求項14】
前記粗データ伝播経路および前記粒状データ伝播経路の各々が、前記集積回路の階層メモリ構造と前記集積回路の
データ処理回路との間のデータの伝播を管理する所定のデータフロースケジュールに基づいて定義される、請求項
13に記載の方法。
【請求項15】
前記集積回路アレイが、
複数のアレイコアであって、前記複数のアレイコアの各々が、入力データを処理するための少なくとも1つの処理回路を含む、複数のアレイコアと、
複数のボーダーコアであって、前記複数のボーダーコアの各々が、入力データを記憶するための少なくとも1つのレジスタファイルを含む、複数のボーダーコアと、を含み、
前記複数のアレイコアが、前記複数のボーダーコアとは異なる、請求項
13に記載の方法。
【請求項16】
階層メモリ構造が、メインメモリと前記集積回路アレイとの間の直接メモリアクセスを可能にし、前記階層メモリ構造が、
各々が前記集積回路アレイとインターフェースし、かつ先入れ先出しベースでデータを送信および受け取る複数のデュアルFIFOと、
各々が前記複数のデュアルFIFOのそれぞれのデュアルFIFOとインターフェースし、かつ前記それぞれのデュアルFIFOから受信され、および/または前記それぞれのデュアルFIFOへのロードを保留しているかのいずれかのデータの1つ以上のロードのいずれかを記憶する複数の周辺ロードストアと、
各々が前記複数の周辺ロードストアのそれぞれの周辺ロードストアとインターフェースし、かつ前記メインメモリとインターフェースする複数の周辺メモリと、を含む、請求項
15に記載の方法。
【請求項17】
集積回路内でデータを伝播する方法であって、前記方法が、
入力データセットを識別することと、
前記入力データセットの複数の異なるデータサブセットの各々の粗データ伝播経路を実行することであって、前記粗データ伝播経路が、
前記複数の異なるデータサブセットの各々の定義されたコア間データ移動であって、前記コア間データ移動が、前記集積回路の集積回路アレイの複数のコアのうちの2つ以上を通じて、前記複数の異なるデータサブセットのうちの所与のデータサブセットの所定の進行経路を定義する、定義されたコア間データ移動を含む、実行することと、
データ移動命令を実行することであって、前記データ移動命令は、実行されるとき、前記複数のコアのアレイコア内のデータの複数の異なるデータサブセットの各々を回転移動させる命令であり、前記アレイコアは、アレイコアの側面に沿って位置する複数の異なるデータポートを備えており、前記データ移動命令を実行することが、
前記アレイコア内の前記複数の異なるデータサブセットの各々を、0度~360度の回転度で、前記アレイコアの前記複数の異なるデータポートの開始データポートから前記複数の異なるデータポートの終端データポートまで移動させること、
を含む、方法。
【請求項18】
前記開始データポートのレジスタファイル内に前記入力データセットを記憶することをさらに含み、前記開始データポートは、前記アレイコアの、第1の側面に沿った第1のデータポート、第2の側面に沿った第2のデータポート、第3の側面に沿った第3のデータポート、および第4の側面に沿った第4のデータポートのうちの1つであり、かつ前記終端データポートは、前記開始データポートとは異なるデータポートであって、前記第1のデータポート、前記第2のデータポート、前記第3のデータポート、および前記第4のデータポートのうちの1つであり、
前記集積回路アレイが、
複数のアレイコアであって、前記複数のアレイコアの各々が、入力データを処理するための少なくとも1つの処理回路を含む、複数のアレイコアと、
複数のボーダーコアであって、前記複数のボーダーコアの各々が、入力データを記憶するための少なくとも1つのレジスタファイルを含む、複数のボーダーコアと、を含み、
前記複数のアレイコアが、前記複数のボーダーコアとは異なる、請求項
17に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2018年3月28日に出願された米国仮出願第62/649,551号の利益を主張し、その全体がこの参照により組み込まれる。
【0002】
本明細書に記載する1つ以上の発明は、概して、集積回路分野に関し、より具体的には、集積回路分野における新しくかつ有用な高密度アルゴリズム処理集積回路アーキテクチャに関する。
【背景技術】
【0003】
人工知能の現代的な応用、および概して機械学習は、ロボット工学、具体的には、自律型ロボット工学および自立型車両に関連する技術の革新を牽引しているように見える。また、機械知覚技術の発達により、自律型ロボット工学および自律型車両の空間における多くの実装の能力は、機械がその環境を理解することを可能にする多くの他の能力のうちの視覚、聴覚、および触覚を知覚することが可能になった。
【0004】
これらの自律型実装に適用される基礎知覚技術は、多くの場合、自律型ロボットおよび/または自律型車両を取り囲む環境の捕捉を豊かに可能にする、多くの高度かつ能力のあるセンサを含む。しかしながら、これらの高度かつ能力のあるセンサの多くは、多くの自律型実装の物理環境の堅牢な捕捉を可能にし得るが、センサからの様々なセンサ信号データを処理するために機能し得る基礎となる処理回路は、センサ信号データの高性能かつリアルタイムの計算を可能にするのに十分な対応する堅牢な処理能力を欠いていることが多い。
【0005】
基礎となる処理回路は、多くの場合、中央処理ユニット(CPU)およびグラフィック処理ユニット(GPU)を含む汎用集積回路を含む。多くの用途では、CPUではなくGPUが実装されており、これは、GPUがCPUに比べて大きなまたは大量の計算を実行できるからである。しかしながら、ほとんどのGPUのアーキテクチャは、機械知覚技術で使用される複雑な機械学習アルゴリズム(例えば、ニューラルネットワークアルゴリズムなど)の多くを処理するために最適化されていない。例えば、自律型車両空間は、車両および人物を単に認識するだけにとどまらない複数の知覚処理ニーズを含む。自律型車両は、自律型車両の経路または経路計画を可能にするセンサデータの融合を提供する高度なセンサスイートで実装されている。しかし、現代のGPUは、これらの追加の高い計算タスクを処理するために構築されていない。
【0006】
せいぜい、GPUまたは同様の処理回路が経路計画、およびセンサ融合などを含む追加のセンサ処理ニーズを処理できるようにするために、追加のおよび/または別個の回路を従来のGPUに組み立ててもよい。ロボット工学および自律型機械の追加の知覚処理ニーズを処理するためのこの断片的および部分的なアプローチは、センサ信号処理の非効率性を含む計算を実施する上で多くの非効率性をもたらす。
【発明の概要】
【発明が解決しようとする課題】
【0007】
したがって、集積回路分野では、ロボット工学または任意のタイプまたは種類の知覚機械の知覚を可能にするためのルーチンおよび高度なセンサ信号の高性能かつリアルタイムな処理および計算が可能な高度な集積回路の必要性が存在する。
本出願に記載する発明の発明者らは、強化されたセンサデータ処理能力を可能にする集積回路アーキテクチャを設計し、ロボット工学および様々な機械の知覚を可能にするためを含むいくつかの目的のために集積回路アーキテクチャを実装するための関連方法をさらに発見した。
【課題を解決するための手段】
【0008】
発明の概要
一実施形態では、集積回路内のデータの移動を制御する方法は、入力データセットを取得することと、入力データセットの複数の異なるデータサブセットの各々の粗データ伝播経路を識別することであって、粗データ伝播経路を識別することが、複数の異なるデータサブセットの各々に対してコア間データ移動を設定することであって、コア間データ移動が、集積回路の集積回路アレイの複数のコアのうちの2つ以上間の複数の異なるデータサブセットの所与のデータサブセットの所定の伝播を定義する、設定することを含む、識別することと、入力データセットの複数の異なるデータサブセットの各々の粒状データ伝播経路を識別することであって、粒状データ伝播経路を識別することが、複数の異なるデータサブセットの各々に対してコア内データ移動を設定することであって、コア内データ移動が、集積回路の集積回路アレイの複数のコアのうちの1つ以上内の、データの複数の異なるサブセットの所与のデータサブセットの所定の伝播を定義する、設定することを含む、識別することと、粗データ伝播経路および粒状伝播経路に基づいて、集積回路内の入力データセットのフローを可能にすることと、を含む。
【0009】
一実施形態では、粗データ伝播経路および粒状データ伝播経路の各々は、集積回路の階層メモリ構造と集積回路のアレイとの間のデータの伝播を管理する所定のデータフロースケジュールに基づいて定義される。
【0010】
一実施形態では、集積回路アレイは、複数のアレイコアであって、複数のアレイコアの各々が、入力データを処理するための少なくとも1つの処理回路を含む、複数のアレイコアと、複数のボーダーコアであって、複数のボーダーコアの各々が、入力データを記憶するための少なくとも1つのレジスタファイルを含む、複数のボーダーコアと、を含み、複数のアレイコアが、複数のボーダーコアとは異なる。
【0011】
一実施形態では、階層メモリ構造は、メインメモリと集積回路アレイとの間の直接メモリアクセスを可能にし、階層メモリ構造は、各々が集積回路アレイとインターフェースし、先入れ先出しベースでデータを送信および受け取る複数のデュアルFIFOと、各々が複数のデュアルFIFOのそれぞれのデュアルFIFOとインターフェースし、かつそれぞれのデュアルFIFOから受信されたデータの1つ以上のロード、および/またはそれぞれのデュアルFIFOへのロードを保留しているデータの1つ以上のロードのいずれかを記憶する複数の周辺ロードストアと、各々が複数の周辺ロードストアのそれぞれの周辺ロードストアとインターフェースし、かつメインメモリとインターフェースする複数の周辺メモリと、を含む。
【0012】
一実施形態では、方法は、入力データセットの属性および集積回路アレイのアーキテクチャに基づいて、データ移動命令を生成することをさらに含み、データ移動命令は、入力データセットの複数の異なるデータサブセットの各々に対して、粗データ伝播経路および粒状データ伝播経路を定義する。
【0013】
一実施形態では、方法は、データ計算命令および/または実行命令を生成することと、データ移動命令と、データ計算命令および実行命令のうちの1つ以上との組み合わせを含む単一の命令のセットを生成することと、を含む。
【0014】
一実施形態では、データ移動命令を生成することは、入力データセットから、集積回路アレイの所定の構成に基づいて複数の異なるデータサブセットの各々を識別することを含み、複数の異なるデータサブセットの各々を識別することが、入力データセットを、集積回路アレイの所定の構成に適合するように複数の異なるデータサブセットに分割することを含む。
【0015】
一実施形態では、方法は、
入力データセットの複数の異なるデータサブセットの各々に、所与の粗データ伝播経路を関連付けることと、入力データセットの複数の異なるデータサブセットの各々に、所与の粒状データ伝播経路を関連付けることと、を含む。
【0016】
一実施形態では、複数の異なるデータサブセットの各々の粗データ伝播経路は、複数の異なるデータサブセットの各々の少なくとも開始位置、および複数の異なるデータサブセットの各々の終端位置を定義する。
【0017】
一実施形態では、複数の異なるデータサブセットの各々の粒状データ伝播経路は、開始位置と終端位置との間で発生する中間進行位置を定義する。
【0018】
一実施形態では、複数の異なるデータサブセットの各々の粒状伝播経路は、1つ以上のデータ回転命令を含む一連のデータ移動を含み、1つ以上のデータ回転命令は、実行されるとき、複数の異なるデータサブセットの所与データのサブセットを、複数のコアのうちのコアの第1のデータポートからコアの1つ以上の別個のデータポートへと回転様式で移動させる。
【0019】
一実施形態では、1つ以上のデータ回転命令は、コア内の所与のデータサブセットの初期位置から測定して0度~360度および/または0度~マイナス360度の回転度として定義される特定の回転度値として定義される1つ以上の離散的な(discrete)回転値を含む。
【0020】
一実施形態では、所与のデータサブセットの一連のデータ移動の各データ移動は、実行するために単一のクロックサイクルのみを必要とする。
【0021】
一実施形態では、複数の異なるデータサブセットの各々の粗データ伝播経路および粒状データ伝播経路は、複数のコアによってメモリアドレスを発行することなく実施される。
【0022】
一実施形態では、集積回路内でデータを伝搬する方法は、入力データセットを取得することと、入力データセットの複数の異なるデータサブセットの各々の粗データ伝播経路を実装することであって、粗データ伝播経路が、複数の異なるデータサブセットの各々の定義されたコア間データ移動であって、集積回路の集積回路アレイの複数のコアのうちの2つ以上を通じて、複数の異なるデータサブセットのうちの所与のサブセットの所定の進行経路を定義する、定義されたコア間データ移動を含む、実装することと、入力データセットの複数の異なるデータサブセットの各々の粒状データ伝播経路を実装することであって、粒状データ伝播経路が、複数の異なるデータサブセットの各々の定義されたコア内データ移動であって、コア内データ移動が、集積回路の集積回路アレイの複数のコアのうちの1つ以上内の、複数の異なるデータサブセットの所与のデータサブセットの所定の進行経路を定義する、定義されたコア内データ移動を含む、実装することと、粗データ伝播経路および粒状伝播経路に基づいて、集積回路内の入力データセットのフローを実行することと、を含む。
【0023】
一実施形態では、粗データ伝播経路および粒状データ伝播経路の各々は、集積回路の階層メモリ構造と集積回路のデータ処理回路との間のデータの伝播を管理する所定のデータフロースケジュールに基づいて定義される。
【0024】
一実施形態では、集積回路アレイは、複数のアレイコアであって、複数のアレイコアの各々が、入力データを処理するための少なくとも1つの処理回路を含む、複数のアレイコアと、複数のボーダーコアであって、複数のボーダーコアの各々が、入力データを記憶するための少なくとも1つのレジスタファイルを含む、複数のボーダーコアと、を含み、複数のアレイコアが、複数のボーダーコアとは異なる。
【0025】
一実施形態では、階層メモリ構造が、メインメモリと集積回路アレイとの間の直接メモリアクセスを可能にし、階層メモリ構造が、各々が集積回路アレイとインターフェースし、かつ先入れ先出しベースでデータを送信および受け取る複数のデュアルFIFOと、各々が複数のデュアルFIFOのそれぞれのデュアルFIFOとインターフェースし、かつそれぞれのデュアルFIFOから受信されたデータの1つ以上のロード、および/またはそれぞれのデュアルFIFOへのロードを保留しているデータの1つ以上のロードのいずれかを記憶する複数の周辺ロードストアと、各々が複数の周辺ロードストアのそれぞれの周辺ロードストアとインターフェースし、かつメインメモリとインターフェースする複数の周辺メモリと、を含む。
【0026】
一実施形態では、集積回路内でデータを伝播する方法は、入力データセットを識別することと、入力データセットの複数の異なるデータサブセットの各々の粗データ伝播経路を実行することであって、粗データ伝播経路が、複数の異なるデータサブセットの各々の定義されたコア間データ移動であって、コア間データ移動が、集積回路の集積回路アレイの複数のコアのうちの2つ以上を通じて、複数の異なるデータサブセットのうちの所与のサブセットの所定の進行経路を定義する、定義されたコア間データ移動を含む、実行することと、入力データセットの複数の異なるデータサブセットの各々の粒状データ伝播経路を実行することであって、粒状データ伝播経路が、複数の異なるデータサブセットの各々の定義されたコア内データ移動であって、集積回路の集積回路アレイの複数のコアのうちの1つ以上内の、複数の異なるデータサブセットの所与のデータサブセットの所定の進行経路を定義する、定義されたコア内データ移動を含む、実行することと、を含む。
【0027】
一実施形態では、集積回路アレイは、複数のアレイコアであって、複数のアレイコアの各々が、入力データを処理するための少なくとも1つの処理回路を含む、複数のアレイコアと、複数のボーダーコアであって、複数のボーダーコアの各々が、入力データを記憶するための少なくとも1つのレジスタファイルを含む、複数のボーダーコアと、を含み、複数のアレイコアが、複数のボーダーコアとは異なる。
【図面の簡単な説明】
【0028】
【
図1】本出願の1つ以上の実施形態によるシステム100の概略図を示す。
【
図1A】本出願の1つ以上の実施形態によるシステム100の注釈付きの概略図を示す。
【
図2】本出願の1つ以上の実施形態による集積回路アレイ105のセグメントの詳細な概略図を例示する。
【
図3A】本出願の1つ以上の実施形態による命令生成器の概略図を示す。
【
図3B】本出願の1つ以上の実施形態による集積回路コントローラの概略図を示す。
【
図4】本出願の1つ以上の実施形態によるデータ制御を実装するための方法400を示す。
【
図5】本出願の1つ以上の実施形態による集積回路アレイのセクション内の粗データ伝播経路の概略図を示す。
【
図6】本出願の1つ以上の実施形態による集積回路アレイのセクション内の粒状データ伝播経路の概略図を示す。
【発明を実施するための形態】
【0029】
本出願の好ましい実施形態の以下の説明は、本発明をこれらの好ましい実施形態に限定することを意図するものではなく、むしろ、当業者がこれらの発明を行い、使用することを可能にすることを意図している。
【0030】
I.概略
背景技術セクションで上述したように、集積回路アーキテクチャにおける最先端の技術は、ロボット工学および自律型機械の多くの知覚処理タスクを処理するための好適な解決策を欠いている。GPUは、ロボット工学および自律型機械のこれらの知覚処理要件のいくつかを実施するために追加のおよび/または個別の回路で修正されてもよいが、GPUの処理能力には、結果として生じる性能が低く、リアルタイムではないような大きなギャップが存在する。ニューラルネットワーク固有のプロセッサ、コンピュータビジョン固有のプロセッサなどを含む他の知覚処理回路が存在し得るが、これらのいずれも、センサ取得、センサ融合、知覚処理、および経路計画などに必要な多くの異なる知覚アルゴリズムおよび計算を処理することができる単一の包括的集積回路を提供しない。
【0031】
したがって、本出願の1つ以上の実施形態は、知覚アルゴリズム、知覚データ(例えば、センサデータなど)、ならびにロボット工学および自律型機械の様々な知覚処理要件を処理するための包括的に最適化された計算プラットフォームを提供するように機能する。好ましい実施形態では、最適化された計算プラットフォームは、高性能かつリアルタイムな処理密度の高いアルゴリズム処理ユニット(DAPU)および/または知覚処理ユニット(PPU)として実装されてもよい。1つ以上の実装形態では、本出願の様々な実施形態に開示される集積回路は、複数の別個の処理要素と、メッシュアーキテクチャを形成するように動作し、アレイコア内の処理要素の多くの組み合わせ間でデータの移動を可能にするデータフローおよび記憶要素を有するアレイコアを含む。
【0032】
アレイコア内の複数の処理要素によって定義されるメッシュアーキテクチャは、好ましくは、メモリ内計算を可能にし、通信およびデータ処理遅延を軽減する。
【0033】
II.高密度アルゴリズムおよび/または知覚処理回路(ユニット)のシステムアーキテクチャ
図1~
図1Aに示すように、知覚処理を実施するための集積回路100(高密度アルゴリズムおよび/または知覚処理ユニット)は、複数のアレイコア110と、複数のボーダーコア120と、ディスパッチャ(メインコントローラ)130と、第1の複数の周辺コントローラ140と、第2の複数の周辺コントローラ150と、メインメモリ160と、を含む。集積回路100は、第1の周辺ロードストア145と、第2の周辺ロードストア155と、第1の周辺メモリ147と、第2の周辺メモリ157と、第1の複数のデュアルFIFO149と、第2の複数のデュアルFIFO159と、をさらに含んでもよい。
【0034】
集積回路100は、好ましくは、知覚データおよび/またはセンサデータのリアルタイムかつ高い計算効率を可能にするように機能する。集積回路100の一般的な構成は、全体がこの参照により組み込まれる、米国仮出願第62/640,478号および米国特許出願第16/290,064号に記載されているように、メモリから処理するためにデータを引き込んだり押し出したりするためにアレイコア110によって必要とされるクロックサイクルを排除または著しく減少し得る大きなレジスタファイルを各々有する中央信号およびデータ処理ノードを定義する複数のアレイコア110を含む。集積回路100の能力(例えば、ディスパッチャ130および/またはコンパイラモジュール175を介して)を生成する命令(すなわち、計算/実行およびデータ移動命令)は、集積回路100全体、すなわち、複数のアレイコア110およびボーダーコア120内のデータの連続性およびフローを可能にするように機能する。
【0035】
アレイコア110は、好ましくは、データもしくは信号処理ノード(例えば、小さなマイクロプロセッサ)または処理回路として機能し、好ましくは、大きなデータ記憶容量(例えば、1024kbなど)を有するレジスタファイル112と、算数論理ユニット(ALU)118、または整数バイナリ数に対して算数動作およびビット動作を実施する任意の好適なデジタル電子回路と、を含む。好ましい実施形態では、アレイコア110のレジスタファイル112は、アレイコア110の処理回路が直接アクセスし得る唯一のメモリ要素であってもよい。アレイコア110は、複数のボーダーコア120および複数のアレイコア110によって定義されるアレイコアおよび/または集積回路アレイ105(すなわち、コアメッシュ)の外側のメモリへの間接アクセスを有してもよい。
【0036】
アレイコア110のレジスタファイル112は、任意の好適なメモリ要素またはデバイスであってもよいが、好ましくは、1つ以上の静的ランダムアクセスメモリ(SRAM)を備える。レジスタファイル112は、アレイコア110による処理のための十分に大きなデータセットの記憶を可能にする、1024アレイ個のレジスタなどの多数のレジスタを含んでもよい。したがって、各アレイコア110内の大きなレジスタファイル112の配置によって達成される技術的利点は、大きなレジスタファイル112が、処理のためにそのレジスタファイル112内にデータをフェッチおよびロードする必要性をアレイコア110によって減少することである。結果として、データをメモリに押し込み、データをメモリから引き出すためにアレイコア112によって必要とされるいくつかのクロックサイクルは、著しく減少または完全に排除される。すなわち、大きなレジスタファイル112は、アレイコア110が処理する予定であるデータのほとんど(全てではないにせよ)が、アレイコア110の処理回路(例えば、1つ以上のMAC、ALUなど)のすぐ隣に位置するため、アレイコア110によって実施される計算の効率を高める。例えば、ニューラルネットワークアルゴリズム(複数可)またはアプリケーション(複数可)(例えば、畳み込みニューラルネットワークアルゴリズムなど)を使用して集積回路100または関連システムによる画像処理を実装するときに、アレイコアの大きなレジスタファイル112は、画像全体を処理するために必要な全ての画像データの記憶を可能にするように機能することができる。したがって、いくつかの実施形態では、ニューラルネットワーク実装(または同様の計算集約アプリケーション)の層データのほとんどまたはそうでなければ全ては、ニューラルネットワークアルゴリズム(複数可)の重みまたは係数を除いて、アレイコア110の大きなレジスタファイル112にローカルに記憶され得る。したがって、これは、アレイコア110がレジスタファイル112のデータを絶えず進めることを可能にし、さらに、オフアレイコアデータソース(例えば、メインメモリ、周辺メモリなど)からのデータのフェッチおよびロードを制限することによって、アレイコア110の計算および/または処理要素(例えば、1つ以上のMACおよびALU)の最適な利用を可能にする。
【0037】
比較すると、GPUなどによって実装される従来のシステムにおけるレジスタファイルを横断するためには、通常、メモリからデータをフェッチするためにメモリアドレスを発行する必要がある。しかしながら、大きなレジスタファイル112を実装する好ましい実施形態では、レジスタファイル112内の(生)入力データは、レジスタファイル112から自動的にインクリメントされてもよく、隣り合うコア(複数可)(例えば、アレイコアおよび/またはボーダーコア)からのデータは、アレイコア110によって要求を行うこと(またはメモリアドレスを発行すること)を明示的に必要とせずに、アレイコア110の計算要素への連続的なフローを可能にするために、レジスタファイル112に連続的に供給される。
【0038】
本出願のいくつかの実施形態では、スケジュールされた所定のデータフローは、集積回路アレイ105内の構成要素によるデータの要求を軽減し得るか、または全体的に排除し得るが、これらの実施形態の変形例では、従来のランダムメモリアクセスは、集積回路アレイ105の構成要素によって達成されてもよい。すなわち、アレイコア110またはボーダーコア120が処理のためのランダムなデータの部分の必要性を認識する場合、アレイコア110および/またはボーダー120は、集積回路100のメモリ階層内のメモリ要素のいずれかからデータに対して特定の要求を行ってもよい。
【0039】
アレイコア110は、追加的にまたは代替的に、複数の乗算器(乗算)アキュムレータ(MAC)114、または乗算および和算機能を実施することが可能であり得る任意の好適な論理デバイスもしくはデジタル回路を含んでもよい。好ましい実施形態では、各アレイコア110は、
図2に例として示すように、4つのMACを含み、各MAC114は、矩形形状のアレイコア110の特定の側面に、またはその近傍に配置されてもよい。好ましい実施形態では、アレイコア110の複数のMAC114の各々は、アレイコア110のそれぞれの側面にまたはその近傍に配置されてもよいが、複数のMAC114は、アレイコア110のそれぞれのコーナーを含む任意の好適な配置、パターン、および位置などでアレイコア110内に配置されてもよい(またはアレイコアの周辺部に拡張されてもよい)ことが知られているであろう。好ましい実施形態では、アレイコア110の側面に沿った複数のMAC114の配置は、集積回路100のアレイコア110によって、直接隣あるコア(すなわち、隣接する隣り合うコア)のうちの1つ以上から受信された入力データおよびその計算の効率的な流入または捕捉を可能にする。
【0040】
したがって、アレイコア110内に位置付けられた複数のMAC114の各々は、集積回路100内の隣り合うコア(例えば、アレイコア、ボーダーコアなど)と直接通信能力を有するように機能してもよい。複数のMAC114は、アレイコア110の大きなレジスタファイル112から供給されたデータ(例えば、オペランド)を使用して計算を実行するようにさらに機能してもよい。しかしながら、複数のMAC114は、好ましくは、それぞれの隣り合うコア(複数可)および/または重みまたは係数(定数)バス116のうちの1つ以上から計算を実行するためのデータを供給するように機能し、このバス116は、1つ以上のメモリ要素(例えば、メインメモリ160など)または1つ以上の入力ソースから1つ以上のアルゴリズム(機械学習アルゴリズムを含む)の係数または重み入力を転送するように機能する。
【0041】
重みバス116は、第1の入力端子において周辺コントローラ140、150のうちの少なくとも1つ以上と電気通信するように動作可能に配置されてもよく、さらに、複数のアレイコア110のうちの1つ以上と動作可能に接続されてもよい。このようにして、重みバス116は、1つ以上の周辺コントローラ140、150から入力された重みおよび係数データを収集し、複数のアレイコア110のうちの1つ以上に直接入力された重みおよび係数データを送信するように機能してもよい。したがって、いくつかの実施形態では、複数のアレイコア110は、重みバス116を介して並列に入力された重みおよび/または係数データを送り、それによってアレイコア110の計算速度を向上させることができる。
【0042】
各アレイコア110は、好ましくは、そのすぐに隣り合うアレイコアと双方向に通信するように機能する。すなわち、いくつかの実施形態では、それぞれのアレイコア110は、矩形形状を有する処理ノードとして構成されてもよく、処理ノードの各側が、アレイコア110の4つの側面または面の各々のうちの1つ隣に位置付けられる別のノード(例えば、別の処理ノード、データ記憶/移動ノードなど)とやり取りできるように配置されてもよい。アレイコア110が、その側面の各々に沿って隣あるコアと双方向に通信する能力は、アレイコア110が、その隣り合うアレイコアのいずれかからのデータを引き出すとともに、その隣り合うアレイコアのいずれかへの(処理されたまたは生の)データを押し込むことを可能にする。これにより、集積回路100のアレイおよびボーダーコア110、120の集合体全体にわたってデータの効率的な移動を可能にするメッシュ通信アーキテクチャが可能になる。
【0043】
複数のボーダーコア120の各々は、好ましくは、レジスタファイル122を含む。レジスタファイル122は、レジスタファイル122が大きなデータセットを記憶するように機能し得る点で、アレイコア110のレジスタファイル112と同様に構成されてもよい。好ましくは、各ボーダーコア120は、アレイコア110と比較したときに、簡略化されたアーキテクチャを含む。したがって、いくつかの実施形態では、ボーダーコア120は、実行能力を含まない場合があり、したがって、多くのアレイコア110に提供されるように、乗算器アキュムレータおよび/または算術論理ユニットを含まない場合がある。
【0044】
従来の集積回路(例えば、GPUなど)では、そのような回路内で計算集約アプリケーション(例えば、ニューラルネットワークアルゴリズム)を処理するために受信された画像データ(または任意の他の好適なセンサデータ)を入力するとき、入力画像データに基づいて画像値(例えば、画素値)を含まない回路内の領域にパディング要求を発行する必要があり得る。すなわち、画像処理などの際に、従来の集積回路は、画像データ値を一切含まないメモリ要素から画像処理を実施するように機能してもよい。このような場合、従来の集積回路は、画像データ値を伴わずにメモリ要素における後続の画像処理努力を回避するために、ゼロなどのパディング値をメモリ要素に追加することを要求するように機能してもよい。従来の集積回路によるこの典型的な画像データ処理の結果、ブランクメモリ要素を識別し、従来の集積回路によって画像処理などのためのメモリ素要素に計算可能な値を付加するためのいくつかのクロックサイクルが発生する。
【0045】
集積回路100の好ましい実装では、複数のボーダーコア120のうちの1つ以上は、入力データ(例えば、入力センサデータ)が受信されないときに、自動的にデフォルト値に設定されるように機能してもよい。例えば、センサ(または別の回路層)からの入力画像データは、集積回路アレイ105の全てのボーダーコアセルを占めない総画像データサイズを有してもよい。そのような場合、入力画像データを受信すると、入力画像データを伴わない1つ以上のボーダーコア120(すなわち、ボーダーコアセル)は、ゼロまたはゼロ以外の定数値などのデフォルト値に自動的に設定されてもよい。
【0046】
いくつかの実施形態では、ディスパッチャによって生成され、複数のボーダーコアのうちの1つ以上に送信される所定の入力データフロースケジュールは、デフォルト値または所定の定数値に設定する命令を含んでもよい。追加的にまたは代替的に、1つ以上のボーダーコア120は、集積回路アレイ105への所定の入力データフローで入力センサデータなどが受信されないことが検出されたときに、自動的に既定値または所定値に設定されてもよい。追加的にまたは代替的に、1つの変形例では、1つ以上のボーダーコア120は、集積回路アレイ105への所定の入力データフローで入力センサデータなどが受信されないことが検出されたときに、入力センサデータを有する1つ以上の他のボーダーコアの値を反映するように自動的に設定されてもよい。
【0047】
したがって、自動パディング要素としての複数のボーダーコア120のうちの1つ以上の実装に従って達成される技術的利益は、自動パディング値が設定されている入力センサデータの関心領域(または周辺領域)への作業要求を最小限にすることによって、複数のアレイコア110のうちの1つ以上による計算の効率を向上させることを含んでもよい。それによって、入力データセット上で計算を実施する際に、複数のアレイコア110によって使用されるクロックサイクルを減少させる。
【0048】
集積回路100の好ましい実施態様では、処理のための複数のアレイコア110および複数のボーダーコア120へのデータの進行は、好ましくは、ディスパッチャ130で生成された所定のデータフロースケジュールに基づいている。所定のデータフロースケジュールは、ボーダーコア120および/またはアレイコア110からの入力データに対する明示的な要求を必要とせずに、1つ以上のソース(例えば、センサ、他のNN層、上流デバイスなど)からの入力データをボーダーコア120およびアレイコア110にロードすることを可能にする。すなわち、所定のデータフロースケジュールにより、集積回路100のメモリ要素(例えば、メインメモリ160)から、処理のためのデータを受け取る容量を有する複数のボーダーコア120および複数のアレイコア110への生データの自動フローが可能になる。例えば、アレイコア110が、そのレジスタファイル112に記憶されたデータロードの第1のデータサブセットを処理するために機能する場合、第1のデータサブセットの処理の結果が完了し、アレイコア110から送出されると、所定のデータフロースケジュールは、レジスタファイル112におけるデータロードに追加され、アレイコア110によって以前に処理されたデータの第1のデータサブセットを置き換えるアレイコア110への生データの自動フローを可能にするように機能してもよい。したがって、このような場合、アレイコア110から処理のための追加の生データに対する明示的な要求は不要である。むしろ、ディスパッチャ130を実装する集積回路100は、アレイコア110がそのレジスタファイル112から供給されたいくらかの程度の量のデータを処理すると、アレイコア110が処理のために追加のデータを受け取るための追加の容量を有し得ることを認識するように機能してもよい。
【0049】
好ましい実施形態では、集積回路100は、
図3Aに例として示されるように、計算、実行、およびデータ移動命令を生成するように機能する命令生成器170と動作可能に通信してもよい。命令生成器170は、集積100の構成要素および回路に対してオフチップで配置されてもよい。しかしながら、代替的な実施形態では、命令生成器170は、ディスパッチャ130の異なるまたは統合された構成要素として集積回路100内に協調的に統合されてもよい。
【0050】
好ましくは、命令生成器170は、複数のおよび/または別個のタイプの命令を生成するように特別に構成されたコンパイラモジュール175を動作させるように機能する1つ以上の汎用コンピュータ(例えば、Macコンピュータ、Linux(登録商標)コンピュータ、もしくは任意の好適なハードウェアコンピュータ)または汎用コンピュータ処理(GPCP)ユニット171を使用して実装されてもよい。コンパイラモジュール175は、任意の好適なコンパイラソフトウェア(例えば、GNUコンパイラコレクション(GCC)、クラングコンパイラ、および/または任意の好適なオープンソースコンパイラまたは他のコンパイラ)を使用して実装されてもよい。コンパイラモジュール175は、少なくとも計算命令および実行命令ならびにデータ移動命令を生成するように機能してもよい。好ましい実施形態では、コンパイル時に、コンパイラモジュール175は、1つ以上のGPCPユニット171によって実行されて、命令計算/実行命令およびデータ移動命令の2つ以上のセットを順次または並列に生成してもよい。いくつかの実施形態では、コンパイラモジュール175は、別個の複数の命令セットを単一の組成命令セットに合成するように機能してもよく、その命令セット、メモリ(例えば、命令バッファ、外部DDR、SPIフラッシュメモリなど)にロードされてもよく、そのメモリから、ディスパッチャが単一の組成命令セットをフェッチして実行してもよい。
【0051】
しかしながら、第1の変形例では、コンパイラモジュール175が、計算命令およびデータ移動命令などの複数の別個の命令のセットを生成すると、命令生成器170は、命令セットをメモリ(例えば、メモリ160または生成器170に関連付けられたオフチップメモリ)にロードするように機能してもよい。そのような実施形態では、ディスパッチャ130は、命令生成器170によって生成される複数の別個の命令セットをメモリからフェッチし、ディスパッチャが集積回路100内で実行および/またはロードし得る複数の別個の命令セットを単一の組成命令セットに合成するように機能してもよい。
【0052】
第2の変形例では、ディスパッチャ130は、単一の組成命令セットを生成するためのコンパイル機能を有するように構成されていてもよい。そのような変形例では、ディスパッチャ130は、集積回路100の様々な回路および/または構成要素(例えば、アレイコア計算など)によって実施されるスケジュールされた計算または実行を含む命令を作成し、さらに集積回路100を通る入力データのフローを制御することを可能にする命令を作成するように機能する処理回路(例えば、マイクロプロセッサなど)を含んでもよい。いくつかの実施形態では、ディスパッチャ130は、命令の一部を実行し、命令の別の部分を集積回路アレイ105にロードするように機能してもよい。概して、ディスパッチャ130は、集積回路100の1つ以上の他の記憶および/または処理回路へのメモリからのデータのフロー(移動)へのアクセスを制御および管理する集積回路100の一次コントローラとして機能してもよい(およびその逆も同様である)。さらに、ディスパッチャ130は、様々なサブコントローラ(例えば、周辺コントローラなど)および複数のアレイコア110の制御実行動作をスケジュールしてもよい。
【0053】
図3Bの例として示されるように、いくつかの実施形態では、ディスパッチャ130の処理回路は、それぞれ独立して計算/実行命令およびデータ転送/移動スケジュールまたは命令を生成し得る計算命令生成器回路132およびデータ移動命令生成器回路134(例えば、アドレス生成ユニットまたはアドレス計算ユニット)を含む離散回路を含む。したがって、この構成は、ディスパッチャ130が、データアドレス計算および計算/実行命令の生成を並列に実施することを可能にする。ディスパッチャ130は、コンピュータ命令生成器回路132とデータ移動命令生成器回路134との両方からの出力を、別個の出力を組み合わせた単一の命令組成に合成するように機能してもよい。
【0054】
命令生成器170および/またはディスパッチャ130によって生成される単一の命令組成は、1つ以上の下流構成要素および集積回路アレイ105に提供されてもよく、計算または処理命令およびデータ転送/移動命令が集積回路100のこれらの様々な回路または構成要素によって同時に実施されることを可能にしてもよい。集積回路アレイ105に関して、単一の命令組成のデータ移動構成要素は、周辺コントローラ140、150のうちの1つ以上によって実行され、計算命令は、複数のアレイコア110のうちの1つ以上によって実施されてもよい。したがって、そのような実施形態では、周辺コントローラ140、150は、命令のデータ移動構成要素を復号するように機能してもよく、関与する場合、デュアルFIFO149、159との間の読み出しまたは書き込み、およびデュアルFIFO149、159から集積回路へのデータバス上にそのデータを移動するための動作を実施してもよい(またはその逆も同様である)。周辺コントローラ140、150によって実施される読み取りまたは書き込み動作は、順次または同時に実行され得ることを理解されたい(すなわち、デュアルFIFOとの間の書き込みおよび読み取りも同時に実行され得る)。
【0055】
計算命令生成器回路132およびデータ移動命令生成器回路134は、好ましくは、別々のまたは独立した回路であるが、いくつかの実施形態では、計算命令生成器回路132およびデータ移動命令生成器回路134は、計算命令生成とデータ移動命令生成との両方を実施するように機能する単一の回路または単一のモジュールによって実装され得ることに留意されたい。
【0056】
動作中、ディスパッチャ130は、1つ以上の周辺ロードストア145および周辺ロードストア155にロードされるメモリアドレスを生成し、スケジュールするように機能してもよい。周辺ロードストア145、155は、好ましくは、ディスパッチャ130からの全てのロードおよび命令を実行するように機能する特殊な実行ユニットを含み、概して、メモリからデータをロードもしくはフェッチするか、または統合されたアレイコアからメモリにデータを記憶するように機能してもよい。第1の周辺ロードストア145は、好ましくは、第1の複数のデュアルFIFO149および第1の周辺メモリ147の両方と、通信可能かつ動作可能にインターフェースする。第1および第2の周辺メモリ147、157は、好ましくは、オンチップスタティックランダムアクセスメモリを備える。
【0057】
構成において、第1の周辺ロードストア145は、第1の複数のデュアルFIFO149と第1の周辺メモリ147との間に配置されてもよく、その結果、第1の周辺ロードストア145は、第1の複数のデュアルFIFO149のすぐ隣またはその後ろに位置付けられる。同様に、第2の周辺ロードストア155は、好ましくは、第2の複数のデュアルFIFO159と第2の周辺メモリ157との両方と通信可能かつ動作可能にインターフェースする。したがって、第2の周辺ロードストア155は、第2の周辺ロードストア155が第2の複数のデュアルFIFO159のすぐ隣または後ろに配置されるように、第2の複数のデュアルFIFO159と第2の周辺メモリ157との間に位置付けられてもよい。
【0058】
第1および第2の周辺ロードストア145、155のうちの1つ以上にディスパッチャ130によって発行されるメモリアドレス指定命令に応答して、第1および第2の周辺ロードストア145、155は、第1の周辺メモリ147および第2の周辺メモリ157のうちの1つからデータをフェッチし、フェッチしたデータを第1および第2の複数のデュアルFIFO149、159のうちの1つ以上に移動させるための命令を実行するように機能してもよい。追加的にまたは代替的に、デュアルFIFO149、159は、データバスからデータを読み出し、読み出しデータをそれぞれのデュアルFIFOのうちの1つ以上に移動させるか、またはデュアルFIFOのうちの1つ以上からデータを読み出し、読み出しデータをデータバスに移動させるように機能してもよい。同様に、メモリアドレス指定命令は、第1および第2の周辺ロードストア145、155のうちの1つ以上に、複数のデュアルFIFO149、159のうちの1つ以上から収集されたデータを第1および第2の周辺メモリ147、157のうちの1つに移動させることができる。
【0059】
第1の複数のデュアルFIFO149の各々および第2の複数のデュアルFIFO159の各々は、好ましくは、少なくとも2つのメモリ要素(図示せず)を備える。好ましくは、第1の複数のデュアルFIFO149は集積回路アレイ105の第1の側面に沿って配置され得、第1の複数のデュアルFIFO149の各々は集積回路アレイ105の行と整列されてもよい。同様に、第2の複数のデュアルFIFO159は、集積回路アレイ105の第2の側面に沿って配置され得、第2の複数のデュアルFIFO159の各々は、集積回路アレイ105の列と整列されてもよい。この配置は、好ましくは、集積回路アレイ105の第1の側面に沿った各境界120が、集積回路アレイ105の第2の側面に沿った第1の周辺コントローラ145および各境界120のうちの少なくとも1つと通信可能かつ動作可能にインターフェースし、第2の周辺コントローラ155のうちの少なくとも1つと通信可能かつ動作可能にインターフェースすることを可能にする。
【0060】
少なくとも
図1~
図1Aには、第1および第2の複数のデュアルFIFO、第1および第2の周辺コントローラ、第1および第2の周辺メモリ、ならびに第1および第2のロードストアが存在することが例示されるが、これらの構造は、例えば、これらの構成要素が集積回路アレイ105の全(4つの)側面に沿って配置されるように、集積回路アレイ105の周辺全体を取り囲むように配置され得ることに留意されたい。
【0061】
デュアルFIFO149、159は、好ましくは、それぞれの側面からのデータのための特定の命令に反応するように機能する。すなわち、デュアルFIFO149、159は、集積回路アレイ105の第2の側面に沿った第1の複数のデュアルFIFO149または第2の複数のデュアルFIFOのいずれかに固有の、ディスパッチャ130からのデータ移動命令を識別するように構成されてもよい。
【0062】
第1の実装(implementation)によれば、デュアルFIFOの各々は、集積回路アレイ105内にデータを押し込むために2つのメモリ要素のうちの第1のメモリ素子を使用してもよく、集積回路アレイ105からデータを引き出すために2つのメモリ要素のうちの第2のメモリ素子を使用してもよい。したがって、各デュアルFIFO149、159は、集積回路アレイ105にデータを内向きに移動させるための第1のメモリ要素と、集積回路アレイ105からデータを外向きに移動させるための第2のメモリ要素と、を有してもよい。
【0063】
第2の実施態様によれば、デュアルFIFOは、各それぞれのデュアルFIFOが所定のシーケンスまたは順序で集積回路アレイ105にデータを提供し、かつ同じ所定のシーケンスまたは順序で集積回路アレイ105からデータを収集するように機能するスタック(第2の)モードで動作してもよい。
【0064】
さらに、集積回路100は、好ましくは、単一の統一メモリを含むメインメモリ160を備える。メインメモリ160は、好ましくは、1つ以上のセンサ、システム由来のまたはシステム生成されたデータ、1つ以上の集積回路層からのデータ、および1つ以上の上流デバイスまたは構成要素からのデータなどに由来するデータを記憶するように機能する。好ましくは、メインメモリ160は、オンチップスタティックランダムアクセスメモリなどを備える。
【0065】
追加的または代替的に、メインメモリ160は、複数のレベルのオンダイ(オンチップ)メモリを含んでよい。このような実施形態では、メインメモリ160は、互いに電気的に通信し、集積回路アレイ105と同じダイ上に配置された単一の統一メモリとして機能し得る複数のメモリ(例えば、SRAM)素子を含んでもよい。
【0066】
追加的または代替的に、メインメモリ160は、複数のレベルのオフダイ(オフチップ)メモリ(図示せず)を含んでもよい。そのような実施形態では、メインメモリ160は、おそらく互いに電気通信し、集積回路アレイとは別個のダイ上に配置された単一の統一メモリとして機能する複数のメモリ(例えば、DDR SRAM、高帯域幅メモリ(HBM)など)要素を含んでもよい。
【0067】
いくつかの実施形態では、集積回路100は、オンダイおよびオフダイで配置されたメモリを含むメインメモリ160を備えることに留意されたい。そのような実施形態では、メインメモリ160のオンダイおよびオフダイメモリは、集積回路100のオンダイ構成要素にアクセス可能な単一の統一メモリとして機能してもよい。
【0068】
第1の周辺メモリ147および第2の周辺メモリ157の各々は、メインメモリ160内に入れてもよい。第1の周辺メモリ147とメインメモリ160との間には、第1の周辺メモリ147がメインメモリ160からデータをフェッチすることを可能にするロードストアユニットが配置されてもよい。同様に、第2の周辺メモリ157とメインメモリ160との間には、第2の周辺メモリ157がメインメモリ160からデータをフェッチすることを可能にする第2のロードストアユニットが配置されてもよい。
【0069】
デュアルFIFO149、159とロードストア145、155との間、ロードストア145、155と周辺メモリ147、157との間、および周辺メモリ147、157とメインメモリ160とで発生する集積回路100のメモリ階層に沿ったデータ転送は、好ましくは、ディスパッチャ130またはいくつかのメイン処理回路の直接的な発明を伴わずに、メモリ要素およびロードストアがメモリ階層内のデータに独立してアクセスおよび転送することを可能にする予定されたまたは所定のダイレクトメモリアクセス(DMA)転送として実装され得ることに留意されたい。さらに、集積回路100のメモリ階層内のデータ転送は、2つのカウントおよび2つのステップを有する2D DMA転送として実装されてもよく、それによって、転送中の効率的なデータアクセスおよびデータ再形成を可能にする。好ましい実施形態では、DMAデータ転送は、複数のアレイコア110のうちの1つ以上のステータスまたは動作によってトリガされてもよい。例えば、アレイコアが第1のデータのセットの処理を完了しているまたは完了した場合、完了またはほぼ完了は、追加のデータが処理のために集積回路アレイ105に入ることを可能にするためにDMA転送をトリガしてもよい。
【0070】
III.集積回路アレイ内のデータ制御のための方法(複数可)
図4に示すように、集積回路内のデータの移動を制御するための方法400は、データ入力S410を受信することと、データ移動命令S420を生成することと、命令S430を合成(および/またはテザリング)することと、を含む。データ移動命令S420を生成することは、別個のデータサブセットS422を識別することと、識別された別個のデータサブセットS424の各々のデータ伝播経路を生成することと、を追加的にまたは任意に含んでもよい。
【0071】
方法400は、好ましくは、メモリ内のデータ重複を減少し、データの取得および処理に必要なクロックサイクルを減少することによって、集積回路の処理効率を向上させるデータフローの連続性を可能にする集積回路内のデータの伝播を最適化するように機能する。具体的には、方法400は、複数のデータサブセットに関する広範囲のおよび/または粗いデータ伝播経路、ならびに集積回路を通じて複数のデータサブセットの各々に関する特定のおよび/または粒状のデータ伝播経路を含む所定のデータフロースケジュールの生成を可能にする。
【0072】
さらに、方法400は、好ましくは、集積回路の記憶装置(メモリ)および処理要素全体を通じて、所定の様式でデータ入力を移動させる命令を生成し、さらに、データ移動命令を計算および/または実行命令と統合してもよい。これは、次いで、計算命令および/または実行命令を完了するために必要とされる特定のデータのためのデータ要求およびメモリへのアドレス発行を排除するように機能する。すなわち、従来の集積回路などでは、処理に必要なデータは、典型的には、データを必要とする回路またはデバイスによるメモリへのアドレスを使用して回路に引き込まれる。しかしながら、方法400は、集積回路および/または集積回路のデバイスによる記憶および処理のために集積回路にデータを押し込み、これによって、データ処理回路からのメモリアドレス指定に典型的に関連付けられるいくつかのクロックサイクルを減少し、集積回路の処理速度および性能を向上させるように機能してもよい。
【0073】
入力データを受信することを含むS410は、1つ以上の入力データソースから処理するための入力データを受信および/または収集するように機能する。入力データは、任意のタイプまたは種類のデータであり得る。例えば、入力データは、方法400を実装するシステム(例えば、集積回路100)と動作可能に通信して配置され得る1つ以上の外部センサによるデータ取り込みを含んでもよい。1つ以上のセンサで収集されるデータは、画像データ、音響データ、熱データ、およびマイクロ波データなどを含んでもよい。1つ以上のセンサにおいて収集されたデータは、(例えば、1つ以上のセンサを介して)検出可能であり、1つ以上のセンサによって捕捉され得る任意の好適なデータを含んでもよく、データは、方法400を実装するシステムを取り囲む周囲および/または状況に関する任意のデータを含んでもよく、かつ/またはデータは、通信ネットワークを介して方法400を実装する機械に提供され得る別個のまたは接続されたシステム(例えば、ネットワーク(メッシュネットワークなど)を介して接続される別のシステム)から収集されたデータを含んでもよく、かつ/またはデータは、方法400を実装する機械の内部/外部動作データを含んでもよいことに留意されたい。
【0074】
S410のいくつかの実装では、方法400を実装する集積回路またはシステムへの入力として提供されるデータは、生データ(例えば、生センサデータ)の事前処理または先行処理されたデータの潜在的な事前処理の結果として生成されるシステム由来データを含む。例えば、処理回路の複数の階層または層を含む多階層または多層システムにおいて、マルチレベルシステムの第1の処理層において処理された生データは、方法400を実装するために機能し得る後続の処理層への入力として提供されてもよい。したがって、S410において収集されたデータは、単一の統合システムなどの先行または上流処理層から供給されてもよい。
【0075】
S410のいくつかの実装では、方法400を実装する集積回路またはシステムへの入力として提供されるデータは、上流デバイスによって生成されるシステム由来データを含む。上流デバイスは、一次処理回路(例えば、集積回路アレイ105)と動作可能に通信するオンチップデバイスまたは回路であってもよい。追加的または代替的に、上流デバイスは、方法400を実装するシステムの一次処理回路を動作可能に通信し得るオンチップデバイスまたは回路にデータを提供するオフチップデバイスまたは回路であってもよい。いずれの場合も、オフチップおよび/もしくはオンチップデバイスまたは回路は、データを処理のために一次処理回路に送信する前にデータの1つ以上の前処理または記憶機能を実施するように機能してもよい。
【0076】
データ移動命令を生成することを含むS420は、受信および/または収集したデータが好ましくは方法400を実装するシステム内で伝播する様式を管理する命令を生成するように機能する。具体的には、S420は、集積回路全体を通じて異なるデータサブセットの移動を粗く、かつ粒状に定義する所定のデータフロースケジュールを含むデータ移動命令を生成することを含んでもよい。好ましい実施形態では、S420は、計算命令(例えば、x+yの加算など)、実行命令(例えば、読み取り、書き込み、記憶など)、データ移動命令、および/または方法400を実装するシステム内でデータを処理するための任意の好適な命令を含む命令の集合を生成するように機能し得る命令生成器170および/またはディスパッチャ回路(例えば、ディスパッチャ130)によって実施されてもよい。
【0077】
好ましくは、ディスパッチャまたは命令生成器によって生成されるデータ移動命令は、単一の組成命令セットに他の命令と統合され得る。この組み合わされた状態または形式では、データ移動命令および他の命令は、集積回路(またはシステム)内の1つ以上の回路および/またはノードによって単数の命令パケットとして受信されてもよく、それによって、命令パケット内の命令の一部または全てが並列に実施されることを可能にする。
【0078】
好ましい実施形態では、S420は、他の計算および/または実行命令の生成と並列に(同時に)受信および/または収集されたデータのデータ移動命令を生成するように機能してもよい。そのような実施形態では、S420は、データ移動命令ならびに計算および/または実行命令の生成を同時に可能にする単一のモジュールまたは複数の別個のモジュールを(ディスパッチャにおいて)実装するように機能してもよい。追加的にまたは代替的に、S420は、連続した順序、および優先順位付けされた順序などを含む任意の好適な順序で、計算および/または実行命令と共にデータ移動命令を生成するように機能してもよい。
【0079】
好ましくは、S420は、データセットの属性(例えば、データサイズ、いくつかのデータ層、および/またはデータ依存性など)、ならびに方法400を実行する集積回路の集積回路アレイの1つ以上の属性のうちの1つ以上に基づいて、データセットのデータ移動命令を生成するように機能してもよい。
【0080】
追加的にまたは代替的に、S420は、受信および/または収集された入力データセットS422から別個のデータサブセットを識別することを含む。好ましい実施形態では、S422は、方法400を実装するシステムの集積回路アレイの構成および/または配置に基づいて、別個のデータサブセットを識別するように機能してもよい。集積回路アレイ(例えば、集積回路アレイ105)は、好ましくは、所定のまたは固定された様式で配置された複数のボーダーコア(例えば、ボーダーコア120)および複数のアレイコア(アレイコア110)を含む。したがって、S422は、受信したまたは収集した入力データを別個のデータサブセットに分割またはセグメント化して、所定の配置または集積回路アレイの所定の構成の容量に基づいて、データサブセットの配置に適合させるかまたは最適化するように機能してもよい。例えば、受信した入力データが画像データを含む場合、S422は、画像データを別個のデータサブセット(すなわち、画像全体の画素データサブセット)に分割することによって、画像データの全ての画素を集積回路アレイの所定の構成に適合させるように機能してもよく、ここで、別個のデータサブセットの各々は、各別個のデータサブセットが集積回路アレイ内の別個のアレイコアまたはボーダーコアを占有するように、集積回路アレイにロードされ(または割り当てられ)てもよい。
【0081】
追加的にまたは代替的に、S420は、集積回路アレイのアレイコアの構成に基づいて、入力データセットをサブセットに分割またはセグメント化するように機能してもよい。このような実施形態では、S420は、入力データセットを、それぞれのアレイコアの計算および/または処理要素の容量と一致するか、またはそれよりも小さいサイズに分割するように機能してもよい。例えば、アレイコアは、特定のサイズのデータを受信および計算するための所定の容量を有する複数のMACコンピューティング要素を含んでもよい。このような例では、S420は、より大きなデータセットから、容量に一致するか、またはアレイコアのそれぞれのMACの容量よりも小さいサイズを有する複数のより小さいまたはサブセットのデータを作成するように機能してもよい。
【0082】
さらに、各識別されたデータサブセットに対して、S420は、伝播経路S424を識別するように機能してもよい。好ましくは、各データサブセットの伝播経路は、特定のデータサブセットの少なくとも開始位置と特定のデータサブセットの終端位置とを識別する。追加的または代替的に、伝播経路は、開始位置と終端位置との間で発生するデータサブセットの中間進行位置を含んでもよい。したがって、S424は、集積回路アレイ内のデータサブセットの初期(開始)位置を割り当てるように機能してもよい。好ましい実施形態では、ほとんどまたは全てのデータサブセットは、ボーダーコアにおいて集積回路アレイ内の初期位置を割り当てられてもよい。1つ以上の好ましい実施形態では、複数のボーダーコアは、集積回路アレイの周辺を形成してもよい。そのような実施形態において、処理のためにスケジュールされたデータは、まず集積回路アレイの外側周辺を形成するボーダーコアにおいてデータをロードすることによって集積回路アレイにロードされてもよい。
【0083】
しかしながら、いくつかの実施形態では、データサブセットは、周辺ボーダーコア(例えば、データ伝播の潜在的な開始位置および/または終了位置)において集積回路アレイに注入され得るが、追加的または代替的な実施形態では、データサブセットは、集積回路アレイの任意のアレイコアまたはボーダーコアに直接注入され得ることに留意されたい。具体的には、いくつかの実施形態では、データサブセットは、データロード機構(例えば、周辺コントローラなど)に接続された1つ以上のデータバスおよび集積回路アレイの内部の1つ以上のコアを介して集積回路アレイの周辺コアをバイパスしてもよい。
【0084】
したがって、S424は、
図5に例として示すように、識別されたデータサブセットが処理前、処理中、および/または処理後に横断し得る2つ以上のノード(すなわち、ボーダーおよび/またはアレイコア)によって識別された集積回路に沿った一般的な伝播経路を示す識別されたデータサブセットの各々について粗伝播経路を生成するように機能してもよい。いくつかの実施形態では、粗伝播経路は、集積回路アレイ105のコア間のデータサブセットの進行経路またはルーティングを定義するコア間データ移動などとして本明細書で言及されるか、またはそれを含むことができる。
【0085】
S424は、追加的または代替的に、
図6に例として示されるように、ボーダーコア内および/またはアレイコア内の識別されたデータサブセットの1つ以上の移動を正確に識別する粒状伝播経路を生成してもよい。一般に、粒状伝播経路は、データサブセットが進行するべきコアの内部(着信/発信)データポートの順序および/または処理要素(例えば、MAC)を識別することによって、データサブセットが集積回路アレイのコア間を物理的に横断することを可能にするデータ移動命令を提供する。好ましい実施形態では、識別されたデータサブセットのための粒状伝播経路は、[i]コアの1つ以上のレジスタファイルとコアの内部データポートとの間のデータサブセットの移動と、[ii]別個の内部データポートおよび/またはコアの処理要素との間のデータサブセットの移動とを定義する一連のコア内データ移動を含んでもよい。追加的または代替的に、識別されたデータサブセットの粒状伝播経路は、少なくとも第1のコアと第2のコアの内部データポートとの間のデータサブセットのコア内移動のシーケンスを含んでもよい。粒状伝播経路は、コアの内部データポートと周辺コントローラなどのポートとの間のデータサブセットの移動、ならびにコアのポートおよび/またはレジスタファイルと集積回路内に配置されたデータバスとの間の移動を定義してもよい。したがって、粒状伝播経路は、コアの1つ以上の処理要素に入るための、およびコアの1つ以上の処理要素から出るための命令を含んでもよい。
【0086】
一実装では、S424は、実行されるとき、データサブセットに、コアの第1のデータポートから同じコアの別個のデータポートへと回転様式で移動させる、1つ以上のデータ回転命令を含む一連のデータ移動を定義する粒状伝播経路を生成するように機能してもよい。追加的または代替的に、データ移動のシーケンスは、処理要素(例えば、MAC)および/またはコアのデータポートとの間であってもよい。したがって、本明細書で言及されるデータ回転は、好ましくは、回転命令に基づいて回転様式でコア内のデータ(例えば、ボーダーコア、アレイコアなど)を移動することに関する。回転命令は、好ましくは、データサブセットの初期位置(すなわち、コア内のデータポート位置)から測定される0~360(0~360)(および/または-360~0)の回転度として定義される。
【0087】
図6にさらに示すように、コアは、着信および/または発信データサブセットを記憶するように機能し得る少なくとも4つのデータポートを含み得る。各データポートは、別個のコア、レジスタファイル、またはデータポートからから着信するデータサブセットを受信および記憶するように機能し得る1つ以上の着信レジスタファイルと、別個のコア、レジスタファイル、またはデータポートに発信するデータサブセットを記憶および送信するように機能し得る1つ以上の発信レジスタファイルとを含んでもよい。一例では、S424は、データサブセットがデータサブセットを処理するように機能し得るアレイコアのデータポート内に到着するまで、ボーダーコアのデータポート間で回転することによって、画像のサブセットを処理するための3×3フィルタを横断することを可能にするデータ回転命令を含む粒状伝播経路を生成するように機能してもよい。この例では、S424は、最も効率的な経路で処理するために、ボーダーコアからアレイコアにデータサブセットを転送する最適化されたデータ回転シーケンスを生成するように機能してもよい。データ回転命令の第1の例として、S424は、データ回転命令[R270-ボーダーコア_1、R90-ボーダーコア_4]を生成してもよく、R270-ボーダーコア_1を実行すると、データサブセットは、ボーダーコア_1のデータポート_1からボーダーコア_1のデータポート_4の発信レジスタファイルに270度回転し、その時点で、データサブセットは、ボーダーコア_1からボーダーコア_4のデータポート_2の着信レジスタファイルに転送される。R90-ボーダーコア_4を実行すると、データサブセットがボーダーコア_4のデータポート_2からボーダーコア_4のデータポート_3に90度回転し、その時点で、データサブセットは、ボーダーコア_4からアレイコアのデータポート_1の着信レジスタファイルに転送される。
【0088】
いくつかの実施形態では、データは、コアのデータポート間の直接送信を介して回転されてもよく、データはまた、コアの中央またはメイン(大きな)レジスタファイルなどの仲介を使用してコア間で線形で送信されてもよいことに留意されたい。例えば、コアの第1のデータポートにおけるデータサブセットは、コアの中央レジスタファイルによってコアの第2のデータポートに収集および送信されてもよい。
【0089】
さらに、コアは、コアの側面に位置する4つのデータポートを有し得ることが一般的に示されるが、コアは、そのコーナーに位置することができるか、またはコアがその横方向の隣り合うコアに加えて、その斜めの隣り合うコアからデータを送信または収集し得るように位置することができる4つ以上のデータポートを有し得ることに留意されたい。
【0090】
追加的または代替的に、S424は、クロックサイクルごとに実行され得るデータセットのデータ回転命令を生成するように機能してもよい。すなわち、データサブセットの一連のデータ回転命令の各データ回転命令は、単一のクロックサイクルを必要とし得る。例えば、シーケンス[(1)R270-ボーダーコア_1、(2)R90-ボーダーコア_4]を含むデータ回転命令は、2つのデータ移動命令を実行するために少なくとも2つのクロックサイクルを必要とし得る。なお、上記の例では、各別個のデータ回転命令をクロックサイクルごとに実行してもよいが、単一のデータサブセットについて、クロックサイクルごとに複数のデータ回転命令を実行してもよい。
【0091】
第2の実装では、S424は、データポート識別値に基づいて一連のデータ移動を識別することに基づいて、粒状データ伝播経路を生成するように機能してもよい。そのような実装では、コアの各データポートは、データポート識別値に割り当てられてもよい。粒状データ伝播経路のデータ移動命令は、例えば、[(1)南側ポート-ボーダーコア_1、(2)東側ポート-ボーダーコア_4]などの一連のデータポート識別値によって定義されてもよい。この例では、データサブセットは、ボーダーコア_1の第1のデータポートから南側ポートに移動し、次いでボーダーコア_4の第1のポートから東側ポートに移動してもよい。ポート識別値は、任意のタイプの値ならびに/または文字および/もしくは記号の組み合わせであってもよい。
【0092】
命令を合成することを含むS430は、計算命令および実行命令のうちの1つ以上の命令と共にデータ移動命令の組み合わせを含む単一の命令のセットを生成および/または構成するように機能する。S430は、組成に含まれる異なるタイプの命令を並列、直列、ならびに/または直列および並列の組み合わせで実行することを可能にする任意の好適な様式で、データ移動命令を計算および/または実行命令と合成するように機能してもよい。
【0093】
したがって、S430は、データサブセットおよび単一の組成命令セットが集積回路アレイ全体を通じて共同で移動するように、単一の組成命令セットを特定のデータサブセットにテザリングするように機能してもよい。あるいは、S430は、単一の組成命令セットを、関連するデータサブセットとは別に集積回路アレイにロードするように機能してもよい。
【0094】
データ移動命令を実行することを含むS440は、所与のデータセットおよび/または所与のデータセットに由来する複数の異なるデータサブセットの各々についてのデータ移動命令の実行を可能にするように機能してもよい。データ移動命令の実行は、複数の周辺コントローラのうちの1つ以上による命令の実行を含んでもよい。
【0095】
したがって、いくつかの実施形態では、S440におけるデータ移動命令の実行は、所定のデータフロースケジュールに従って方法400を実行する集積回路内のデータの自動フローをトリガするようにさらに機能してもよい。そのような実施形態では、データ移動命令の実行が実施されると、入力データセットは、生または未処理の状態で所定のデータフロースケジュールの終了時に完了または処理された状態へ集積回路全体を流れてもよい。
【0096】
好ましい実施形態のシステムおよび方法ならびにその変形例は、コンピュータ可読命令を記憶するコンピュータ可読媒体を受信するように構成された機械として少なくとも部分的に具体化および/または実装され得る。命令は、好ましくはシステムおよびプロセッサおよび/またはコントローラの1つ以上の部分と統合されたコンピュータ実行可能な構成要素によって実行される。コンピュータ可読媒体は、RAM、ROM、フラッシュメモリ、EEPROM、光学デバイス(CDまたはDVD)、ハードドライブ、フロッピードライブ、または任意の好適なデバイスなどの任意の好適なコンピュータ可読媒体に記憶することができる。コンピュータ実行可能構成要素は、好ましくは、一般的またはアプリケーション固有のプロセッサであるが、任意の好適な専用ハードウェアまたはハードウェア/ファームウェアの組み合わせデバイスは、代替的または追加的に、命令を実行することができる。
【0097】
簡潔さのために省略したが、好ましい実施形態は、本明細書に記載するシステムおよび方法の実装の全ての組み合わせおよび順列を含む。
【0098】
当業者は、先の詳細な説明から、ならびに図面および特許請求の範囲から認識するであるように、以下の特許請求の範囲に定義される本発明の範囲から逸脱することなく、本発明の好ましい実施形態に修正および変更を加えることができる。