(57)【要約】  マルチポート・メモリーを有するベクトル・レジスター・ファイル（ＶＲＦ）を含むニューラル・ネットワーク・プロセッサー、および関連する方法を提供する。プロセッサーは、データー・エレメントのＮ×Ｎ行列およびデーター・エレメントのＮ×１ベクトルを処理するタイルを含むことができる。ＶＲＦは、ライト命令に応答して、Ｎ個のデーター・エレメントをマルチポート・メモリーに格納し、Ｐクロック・サイクルの各々の間に、Ｎ個のデーター・エレメントをマルチポート・メモリーのＰ個の入力インターフェース回路の各々に供給することができる。Ｐ個の出力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された入力レーンを備える。Ｐクロック・サイクルの各々の間に、マルチポート・メモリーは、Ｎ個のデーター・エレメントを、Ｐ個の入力インターフェース回路から選択した少なくとも１つを通じて受け取るように構成することができる。ＶＲＦは、リード命令に応答してＮ個のデーター・エレメントを供給する出力インターフェース回路を含むことができる。【選択図】図３
2021522630.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサーであって、
マルチポート・メモリーを備えるベクトル・レジスター・ファイルと、
データー・エレメントのＮ×Ｎ行列およびデーター・エレメントのＮ×１ベクトルを処理するように構成された複数のタイルであって、Ｎが８以上の整数であり、前記複数のタイルの各々が、Ｎ個のデーター・エレメントを処理するように構成される、複数のタイルと、
を備え、前記ベクトル・レジスター・ファイルが、
ライト命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを前記マルチポート・メモリーに格納し、Ｐクロック・サイクルの各々の間に、Ｎ個のデーター・エレメントを前記マルチポート・メモリーのＰ個の入力インターフェース回路の各々に供給するように構成され、ＰがＮをＬで除算した値に等しい整数であり、Ｌが２以上の整数であり、前記Ｐ個の入力インターフェース回路の各々が、Ｌ個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、前記Ｐクロック・サイクルの各々の間に、前記マルチポート・メモリーが、Ｎ個のデーター・エレメントを、前記Ｐ個の入力インターフェース回路から選択した少なくとも１つを通じて受け取るように、構成され、
リード命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを前記マルチポート・メモリーから引き出し、Ｑクロック・サイクルの各々の間に、Ｌ個のデーター・エレメントを前記マルチポート・メモリーのＱ個の出力インターフェース回路の各々から供給するように構成され、ＱがＮをＬで除算した値に等しい整数であり、前記Ｑ個の出力インターフェース回路の各々が、Ｌ個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、前記Ｑクロック・サイクルの各々の間に、前記マルチポート・メモリーが、Ｎ個のデーター・エレメントを、前記Ｑ個の出力インターフェース回路から選択した少なくとも１つに供給するように構成される、プロセッサー。
【請求項２】
請求項１記載のプロセッサーにおいて、前記マルチポート・メモリーが二重ポート・メモリーであり、前記二重ポート・メモリーが１つのリード・ポートと１つのライト・ポートとを備える、プロセッサー。
【請求項３】
請求項１記載のプロセッサーにおいて、前記リード命令が、前記ライト命令と実質的に同時に処理される、プロセッサー。
【請求項４】
請求項１記載のプロセッサーにおいて、前記Ｐ個の入力インターフェース回路の各々が、Ｎ×１ベクトルを格納するように構成された入力バッファを備える、プロセッサー。
【請求項５】
請求項１記載のプロセッサーにおいて、前記Ｑ個の出力インターフェース回路の各々が、Ｎ×１ベクトルを格納するように構成された出力バッファを備える、プロセッサー。
【請求項６】
請求項４記載のプロセッサーにおいて、前記Ｐ個の入力インターフェース回路の各々が、前記Ｎ×１ベクトルを前記入力バッファから受け取るように結合された少なくとも１つのシフト・レジスターを備える、プロセッサー。
【請求項７】
請求項５記載のプロセッサーにおいて、前記Ｑ個の出力インターフェース回路の各々が、前記Ｎ×１ベクトルを前記出力バッファに供給するように結合された少なくとも１つのシフト・レジスターを備える、プロセッサー。
【請求項８】
複数のタイルと、二重ポート・メモリーを備えるベクトル・レジスター・ファイルとを備えるシステムにおける方法であって、前記複数のタイルの各々が、データー・エレメントのＮ×Ｎ行列およびデーター・エレメントのＮ×１ベクトルを処理するように構成され構成され、Ｎが８以上の整数であり、前記複数のタイルの各々が、Ｎ個のデーター・エレメントを処理するように構成され、前記方法が、
ライト命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを前記二重ポート・メモリーに格納し、Ｐクロック・サイクルの各々の間に、Ｎ個のデーター・エレメントを前記二重ポート・メモリーのＰ個の入力インターフェース回路の各々に供給するステップであって、ＰがＮをＬで除算した値に等しい整数であり、Ｌが２以上の整数であり、前記Ｐ個の入力インターフェース回路の各々が、Ｌ個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、前記Ｐクロック・サイクルの各々の間に、前記二重ポート・メモリーが、Ｎ個のデーター・エレメントを、前記Ｐ個の入力インターフェース回路から選択した１つを通じて受け取るように、構成される、ステップと、
リード命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを前記二重ポート・メモリーから引き出し、Ｑクロック・サイクルの各々の間に、Ｌ個のデーター・エレメントを前記二重ポート・メモリーのＱ個の出力インターフェース回路の各々から供給するステップであって、ＱがＮをＬで除算した値に等しい整数であり、前記Ｑ個の出力インターフェース回路の各々が、Ｌ個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、前記Ｑクロック・サイクルの各々の間に、前記二重ポート・メモリーが、Ｎ個のデーター・エレメントを、前記Ｑ個の出力インターフェース回路から選択した１つに供給するように構成される、ステップと、
を含む、方法。
【請求項９】
請求項８記載の方法において、前記二重ポート・メモリーが、１つのリード・ポートと１つのライト・ポートとを備える、方法。
【請求項１０】
請求項８記載の方法において、前記リード命令が、ライト命令と実質的に同時に処理される、方法。
【請求項１１】
請求項８記載の方法において、前記Ｐ個の入力インターフェース回路の各々は、Ｎ×１ベクトルを格納するように構成された入力バッファを備える、方法。
【請求項１２】
請求項８記載の方法において、前記Ｑ個の出力インターフェース回路の各々は、Ｎ×１ベクトルを格納するように構成された出力バッファを備える、方法。
【請求項１３】
請求項１１記載の方法において、前記Ｐ個の入力インターフェース回路の各々が、前記Ｎ×１ベクトルを前記入力バッファから受け取るように結合された少なくとも１つのシフト・レジスターを備える、方法。
【請求項１４】
請求項１２記載の方法において、前記Ｑ個の出力インターフェース回路の各々が、前記Ｎ×１ベクトルを前記出力バッファに供給するように結合された少なくとも１つのシフト・レジスターを備える、方法。
【請求項１５】
プロセッサーであって、
１つのリード・ポートと１つのライト・ポートとを含む二重ポート・メモリーを備えるベクトル・レジスター・ファイルと、
Ｎ×Ｎ行列およびＮ×１ベクトルを処理するように構成された複数のタイルと、
を備え、Ｎが８以上の整数であり、前記複数のタイルの各々が、Ｎ個のデーター・エレメントを処理するように構成され、前記ベクトル・レジスター・ファイルが、
ライト命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを前記二重ポート・メモリーに、前記１つのライト・ポートを通じて格納し、Ｐクロック・サイクルの各々の間に、Ｎ個のデーター・エレメントを前記二重ポート・メモリーのＰ個の入力インターフェース回路の各々に供給するように構成され、ＰがＮをＬで除算した値に等しい整数であり、Ｌが２以上の整数であり、Ｐ個の入力インターフェース回路の各々が、Ｌ個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、前記Ｐクロック・サイクルの各々の間に、前記二重ポート・メモリーが、Ｎ個のデーター・エレメントを前記Ｐ個の入力インターフェース回路から選択した１つを通じて受け取るように構成され、
リード命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを前記二重ポート・メモリーから、前記１つのリード・ポートを通じて引き出し、Ｑクロック・サイクルの各々の間に、Ｌ個のデーター・エレメントを前記二重ポート・メモリーのＱ個の出力インターフェース回路の各々から供給するように構成され、ＱがＮをＬで除算した値に等しい整数であり、前記Ｑ個の出力インターフェース回路の各々が、Ｌ個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、前記Ｑクロック・サイクルの各々の間に、前記二重ポート・メモリーが、Ｎ個のデーター・エレメントを、前記Ｑ個の出力インターフェース回路から選択した１つに供給するように構成される、プロセッサー。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  ニューラル・ネットワーク技術は、読解力、翻訳、画像認識、または音声認識というような複雑なタスクを実行するために使用される。回帰型ニューラル・ネットワーク（ＲＮＮ：Recurrent Neural Network）、畳み込みニューラル・ネットワーク（ＣＮＮ：Convolution Neural Networks）、長／短期記憶（ＬＳＴＭ：Long Short Term Memory）ニューラル・ネットワーク、またはゲート付き回帰型ユニット（ＧＲＵ：Gated Recurrent Units）に基づくものというような機械学習サービスが、このような複雑なタスクを実行するためにデプロイされている。これらの型式のニューラル・ネットワークは既にデプロイされているが、基礎アーキテクチャ、およびこれらの複雑なタスクを実行するための対応する命令には引き続き改善が求められている。
【発明の概要】
【０００２】
[0002]  一例では、本開示は、マルチポート・メモリー（例えば、二重ポート・メモリー）を含むベクトル・レジスター・ファイルを備えるプロセッサーに関する。このプロセッサーは、更に、データー・エレメントのＮ×Ｎ行列およびデーター・エレメントのＮ×１ベクトルを処理するように構成された複数のタイルも備えることができる。ここで、Ｎは８以上の整数であり、複数のタイルの各々は、Ｎ個のデーター・エレメントを処理するように構成される。ベクトル・レジスター・ファイルは、ライト命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントをマルチポート・メモリーに格納し、Ｐクロック・サイクルの各々の間に、Ｎ個のデーター・エレメントをマルチポート・メモリーのＰ個の入力インターフェース回路の各々に供給するように構成することができる。ここで、ＰはＮをＬで除算した値に等しい整数であり、Ｌは２以上の整数であり、Ｐ個の入力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Ｐクロック・サイクルの各々の間に、マルチポート・メモリーは、Ｐ個の入力インターフェース回路から選択された少なくとも１つを通じて、Ｎ個のデーター・エレメントを受け取るように構成される。
【０００３】
[0003]  更に、ベクトル・レジスター・ファイルは、リード命令に応答して、１クロック・サイクルの間に、マルチポート・メモリーからＮ個のデーター・エレメントを引き出し、Ｑクロック・サイクルの各々の間に、マルチポート・メモリーのＱ個の出力インターフェース回路の各々からＬ個のデーター・エレメントを供給するように構成することができる。ここで、ＱはＮをＬで除算した値に等しい整数であり、Ｑ個の出力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Ｑクロック・サイクルの各々の間に、マルチポート・メモリーは、Ｎ個のデーター・エレメントを、Ｑ個の出力インターフェース回路から選択された少なくとも１つに供給するように構成される。
【０００４】
[0004]  他の例では、本開示は、複数のタイルと、二重ポート・メモリーを備えるベクトル・レジスター・ファイルとを備えるシステムにおける方法に関し、複数のタイルの各々が、データー・エレメントのＮ×Ｎ行列およびデーター・エレメントのＮ×１ベクトルを処理するように構成される。ここで、Ｎは８以上の整数であり、複数のタイルの各々は、Ｎ個のデーター・エレメントを処理するように構成される。
【０００５】
[0005]  この方法は、ライト命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを二重ポート・メモリーに格納し、Ｐクロック・サイクルの各々の間に、Ｎ個のデーター・エレメントを二重ポート・メモリーのＰ個の入力インターフェース回路の各々に供給するステップを含むことができる。ここで、ＰはＮをＬで除算した値に等しい整数であり、Ｌは２以上の整数であり、Ｐ個の入力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Ｐクロック・サイクルの各々の間、二重ポート・メモリーは、Ｎ個のデーター・エレメントを、Ｐ個の入力インターフェース回路から選択した１つを通じて受け取るように構成される。
【０００６】
[0006]  更に、この方法は、リード命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを二重ポート・メモリーから引き出し、Ｑクロック・サイクルの各々の間に、Ｌ個のデーター・エレメントを二重ポート・メモリーのＱ個の出力インターフェース回路の各々から供給するステップを含むこともできる。ここで、ＱはＮをＬで除算した値に等しい整数であり、Ｑ個の出力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Ｑクロック・サイクルの各々の間、二重ポート・メモリーは、Ｎ個のデーター・エレメントを、Ｑ個の出力インターフェース回路から選択した１つに供給するように構成される。
【０００７】
[0007]  更に他の例では、本開示は、１つのリード・ポートと１つのライト・ポートとを含む二重ポート・メモリーを備えるベクトル・レジスター・ファイルを備えるプロセッサーに関する。このプロセッサーは、更に、Ｎ×Ｎ行列およびＮ×１ベクトルを処理するように構成された複数のタイルを備えることもできる。ここで、Ｎは８以上の整数であり、複数のタイルの各々は、Ｎ個のデーター・エレメントを処理するように構成される。
【０００８】
[0008]  ベクトル・レジスター・ファイルは、ライト命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを二重ポート・メモリーに、１つのライト・ポートを通じて格納し、Ｐクロック・サイクルの各々の間に、Ｎ個のデーター・エレメントを二重ポート・メモリーのＰ個の入力インターフェース回路の各々に供給するように構成することができる。ここで、ＰはＮをＬで除算した値に等しい整数であり、Ｌは２以上の整数であり、Ｐ個の入力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Ｐクロック・サイクルの各々の間、二重ポート・メモリーは、Ｎ個のデーター・エレメントを、Ｐ個の入力インターフェース回路から選択した１つを通じて受け取るように構成される。
【０００９】
[0009]  更に、ベクトル・レジスター・ファイルは、リード命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを二重ポート・メモリーから、１つのリード・ポートを通じて引き出し、Ｑクロック・サイクルの各々の間に、Ｌ個のデーター・エレメントを二重ポート・メモリーのＱ個の出力インターフェース回路の各々から供給するように構成することができる。ここで、ＱはＮをＬで除算した値に等しい整数であり、Ｑ個の出力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Ｑクロック・サイクルの各々の間、二重ポート・メモリーは、Ｎ個のデーター・エレメントを、Ｑ個の出力インターフェース回路から選択した１つに供給するように構成される。
【００１０】
[00010]  この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定するために使用されることを意図するのでもない。
【図面の簡単な説明】
【００１１】
[00011]  本開示を一例として示すが、添付図面によって限定されるのではない。添付図面では、同様の参照番号は同様の要素を示す。図における要素は、簡素さおよび明確さ    を考慮して示されており、必ずしも同じ拡縮率で描かれてはいない。
【図１】図１は、一例によるプロセッサーのブロック図である。
【図２】図２は、一例による行列−ベクトル乗算ユニットのブロック図である。
【図３】図３は、一例によるベクトル・レジスター・ファイルのブロック図である。
【図４】図４は、他の例によるベクトル・レジスター・ファイルのブロック図である。
【図５】図５は、図１のプロセッサーおよび一例によるベクトル・レジスター・ファイルを使用してベクトル・データー・エレメントを処理する方法の流れ図を示す。
【発明を実施するための形態】
【００１２】
[00017]  本例において開示する例は、ベクトル・レジスター・ファイルを有する行列ベクトル乗算器を含むプロセッサーに関する。ベクトル・レジスター・ファイルは、ベクトル・データーを行列ベクトル乗算器から／へ読み出す／書き込むために使用することができる。特定の例では、マルチポート・メモリー、例えば、二重ポート・メモリーを、入力インターフェース回路および出力インターフェース回路と共に使用して、１つのライト・ポートおよび１つのリード・ポートを有するのでもよい二重ポート・メモリーを、高速かつ効率的に使用して、ニューラル・ネットワーク計算を実行することを可能にすることに関する。
【００１３】
[00018]  畳み込みニューラル・ネットワーク（ＣＮＮ：Convolution Neural Networks）および回帰型ニューラル・ネットワーク（ＲＮＮ：Recurrent Neural Network）は双方共、主流の機械学習において広く使用されている計算カーネルである。ＣＮＮおよびＲＮＮは、行列−ベクトル乗算に関して、効率的に表現することができるが、各々に固有な並列処理およびデーター構造は著しく異なる。したがって、ＣＮＮおよびＲＮＮの双方を効率的に計算する１つのテラフロップ規模のコンピューター・アーキテクチャを生成することは難題である。この問題は、リアル・タイム・レイテンシー要件を設計に加えると、更に悪化する。その結果、以前の解決策は、双方に対する高い性能を優先するのではなく、ＣＮＮまたはＲＮＮに合わせて特化されている。本開示において開示する特定の例は、ＣＮＮおよびＲＮＮ双方に対して効率的な計算を可能にする(provide for)システム、方法、およびコンポーネントの使用に関する。
【００１４】
[00019]  一例として、本開示は、ＣＮＮにおいて個々の出力活性化(output activations)間における並列処理を利用して、個々のＣＮＮ評価内において限定された形態の行列−行列乗算を実行するプロセッサーについて説明する。この並列処理は、同じ行列データーであるが異なるベクトル・データーを受け取る擬似独立行列−ベクトル乗算タイル・エンジンのアレイの形態で、回路上にマッピングされる。この手法は、ＣＮＮ入力に対してバッチ＝１における高度利用を可能にし(allow for)、その結果、低レイテンシーで高いスループットを実現する。この手法を可能にする方法の１つは、マルチポート・ベクトル・レジスター・ファイル（ＶＲＦ）の使用であり、共有メモリー空間に対する多くの同時ベクトル化読み出しおよび書き込み(simultaneous vectorized reads and writes)を可能にする。また、この手法は、ＲＮＮを表現するために使用することができる同じアセンブリー・レベル・コードにおいてＣＮＮの情報濃密表現を提供するＣＮＮ認識(CNN-aware)命令集合アーキテクチャ（ＩＳＡ：instruction set architecture）によっても可能になる。
【００１５】
[00020]  本開示において説明するプロセッサーは、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、特定用途集積回路（ＡＳＩＣ）、消去可能および／または複合プログラマブル・ロジック・デバイス（ＰＬＤ）、プログラマブル・アレイ・ロジック（ＰＡＬ）デバイス、および汎用アレイ・ロジック（ＧＡＬ：Generic Array Logic）デバイスの複数の部分または組み合わせを使用して実装することができる。ＦＰＧＡのようなプロセッサーを構成または再構成するために、イメージ・ファイルを使用してもよい。イメージ・ファイルまたは同様のファイルもしくはプログラムは、ネットワーク・リンクまたはローカル・リンク（例えば、ＰＣＩｅ）を通じてホストＣＰＵから配信されてもよい。イメージ・ファイルに含まれる情報は、所望の機能を実装するために、プロセッサーのハードウェア・ブロック（例えば、ＦＰＧＡのロジック・ブロックおよび再構成可能な相互接続）をプログラミングするために使用することができる。コンピューティング、ネットワーキング、および記憶リソースの組み合わせによって、サービスを配信するためのデーター・センターまたは他のインフラストラクチャを通じてというようにして提供することができる任意のサービスを支援するために、所望の機能を実装することができる。
【００１６】
[00021]  一例では、プロセッサー（例えば、ＦＰＧＡ）またはこのようなプロセッサーの集合体を、低レイテンシー・ネットワークを通じて互いに結合してもよい。数百から数千ものこのようなプロセッサー（例えば、ＦＰＧＡ）を利用するコンバージド・プラットフォームは、以下のことを提供する利点があると言える。（１）数十万箇所ものノードに跨がって並列処理を活用することによって、訓練時間を著しく短縮する、（２）ライブ・データーに対する現場でのオンライン学習というような、新たな訓練シナリオを可能にする、（３）数十万箇所ものサーバに広がるハイパースケール・データーセンターにおいて、柔軟性があり代替可能な同質ＦＰＧＡリソースを利用しながら、前例のない規模のモデルを訓練する。一例では、このような利点は、ＦＰＧＡのようなプロセッサーのアーキテクチャを利用することができる、自由な(unconventional)データー表現を活用することによって得ることができる。
【００１７】
[00022]  また、説明した態様は、クラウド・コンピューティング環境においても実施することができる。クラウド・コンピューティングとは、構成可能なコンピューティング・リソースの共有プールに対するオンデマンド・ネットワーク・アクセスを可能にするためのモデルを指すとしてよい。例えば、クラウド・コンピューティングは、市場において、構成可能なコンピューティング・リソースの共有プールに対して遍在的で便利なオンデマンド・アクセスを提供するために採用することができる。構成可能なコンピューティング・リソースの共有プールは、仮想化によって迅速にプロビジョニングし、そして少ない管理の手間またはサービス提供業者の介入で解放し、次いで適宜規模調整することができる。クラウド・コンピューティング・モデルは、例えば、オンデマンド・セルフサービス、広帯域ネットワーク・アクセス、リソース・プーリング(resource pooling)、速やかな拡張性、度数制等のような、種々の特性で構成することができる。クラウド・コンピューティング・モデルは、例えば、サービスとしてのハードウェア（「ＨａａＳ」）、サービスとしてのソフトウェア（「ＳａａＳ」）、サービスとしてのプラットフォーム（「ＰａａＳ」）、およびサービスとしてのインフラストラクチャ（「ＩａａＳ」）というような、種々のサービス・モデルを露出するために使用されてもよい。また、クラウド・コンピューティング・モデルは、プライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、ハイブリッド・クラウド等というような、異なるデプロイ・モデルを使用してデプロイすることもできる。
【００１８】
[00023]  機械学習サービスは、回帰型ニューラル・ネットワーク（ＲＮＮ：Recurrent Neural Network）、畳み込みニューラル・ネットワーク（ＣＮＮ：Convolution Neural Networks）、長／短期記憶（ＬＳＴＭ：Long Short Term Memory）ニューラル・ネットワーク、またはゲート付き回帰型ユニット（ＧＲＵ：Gated Recurrent Units）に基づくもの等があり、本開示において説明するプロセッサーを使用して実施することができる。一例では、サービス関連コンテンツ、あるいは単語、文章、画像、ビデオ、または他のこのようなコンテンツ／情報というような他の情報を、ベクトル表現に変換することもできる。ベクトル表現は、ＲＮＮ、ＣＮＮ、ＬＳＴＭ、またはＧＲＵというような技法に対応することができる。深層学習モデルは、サービス初期化の前にオフラインで訓練することができ、次いで本開示において説明するシステムおよびプロセッサーを使用してデプロイすることができる。
【００１９】
[00024]  一例では、ニューラル・ネットワーク・モデルは、多くのレイヤで構成することもでき、各レイヤは、ニューラル・ネットワークのオフライン訓練によって得られた係数または定数の形態で表現された重みの行列またはベクトルとしてエンコードすることができる。ノードにおけるプログラマブル・ハードウェア・ロジック／ブロックが、行列またはベクトルを処理して、乗算、加算、およびその他の演算を含む種々の演算を、サービスに関係するエンコード情報(encoded information)を表す入力ベクトルに対して実行することができる。一例では、重みの行列またはベクトルは、グラフ分割のような技法を使用することによって分割し、複数のノードに跨がってピンニングする(pin)ことができる。このプロセスの一部として、大きなニューラル・ネットワークを中間表現（例えば、グラフ）に変換することもでき、次いでこの中間表現をもっと小さな表現（例えば、サブグラフ）に刻む(carved into)ことができ、各サブグラフに対応する重みの行列の各々を、ノードのオンチップ・メモリーにピンニングすることができる。一例では、モデルを固定サイズの行列およびベクトルに変換してもよい。このように、ノードのリソースは、固定サイズの行列およびベクトルに対して並列に処理する(operate)ことができる。
【００２０】
[00025]  ＬＳＴＭを例に取ると、ＬＳＴＭネットワークは、繰り返すＲＮＮレイヤまたは他の型のレイヤのシーケンスを備えることができる。ＬＳＴＭネットワークの各レイヤは、所与の時間ステップにおける入力、例えば、以前の時間ステップからのレイヤの状態を消費することができ、そして新たな１組の出力または状態を生成することができる。ＬＳＴＭを使用する場合、コンテンツの１つのチャンクを１つのベクトルまたは複数のベクトルにエンコードすることができる。一例として、単語または単語の組み合わせ（例えば、語句、文章、または段落）を１つのベクトルとしてエンコードすることができる。各チャンクをＬＳＴＭネットワークの個々のレイヤ（例えば、特定の時間ステップ）にエンコードすることができる。ＬＳＴＭレイヤは、以下のような、１組の方程式を使用して記述することができる。
【００２１】
【数１】
2021522630.tif 000003
【００２２】
[00026]  この例では、各ＬＳＴＭレイヤの内部において、ベクトル演算（例えば、ドット積、内積、またはベクトル加算）および非線形関数（例えば、シグモイド、双曲線、および正接）の組み合わせを使用して、入力および隠れ状態を処理することができる。場合によっては、最も計算集約的な演算が、ドット積から生ずることもあるが、密行列−ベクトルおよび行列−行列乗算ルーチンを使用して実装すればよい。一例では、ベクトル演算および非線形関数の処理は、並列に実行することもできる。
【００２３】
[00027]  一例では、個々のプロセッサーが、パケットを含むメッセージを直接互いに送ることができ、つまり、これによって１つのニューラル・ネットワークでさえも、容認できないレイテンシーを発生することなく、複数のプロセッサーに跨がる分割を可能にすることができる。通信のために、プロセッサーは、例えば、ＲＤＭＡを含む軽量プロトコルを使用することができる。また、並列化(parallelization)は、ニューラル重みを複数のプロセッサーに跨がって分割することによって、ニューラル・ネットワークの１レイヤ内で実行することもできる。一例として、１つのＣＮＮまたはＲＮＮモデル（例えば、ＬＳＴＭ重み行列を含む）を分割し、プロセッサーを使用して処理するのでもよい。
【００２４】
[00028]  図１は、一例によるプロセッサー１００のブロック図である。各プロセッサー１００は、他のプロセッサーからメッセージを受け取るための入力メッセージ・プロセッサー（ＩＭＰ）１０４と、他のプロセッサーまたはコンポーネントへの発信メッセージを処理するための出力メッセージ・プロセッサー（ＯＭＰ）１０６とを含むことができる。このようなメッセージは、ネットワーク１０２を通じて受信および送信することができる。更に、各プロセッサー１００は、行列ベクトル乗算器（ＭＶＭ）１１０、２つ以上の多機能ユニット（ＭＦＵ）（例えば、ＭＦＵ［０］１４０およびＭＦＵ［１］１６０）も含んでもよい。更に、各プロセッサー１００は、行列メモリー・マネージャ１７０、ベクトル・メモリー・マネージャ１８０、ベクトルＤＲＡＭ１８２、および行列ＤＲＡＭ１８４も含んでもよい。この例では、プロセッサーは、制御およびスカラー・データーならびにペイロード・データー（例えば、ベクトル、行列、または他のテンソル・データー構造）というような補助情報を含むオフチップ・メッセージ(off-chip message)を受け入れることもできる。この例では、着信メッセージは、軽量入力メッセージ・プロセッサー（ＩＭＰ）１０４によって操作され(handle)、軽量入力メッセージ・プロセッサー１０４はベクトルをベクトル・メモリー・マネージャ１８０に送る。ＩＭＰ１０４は、行列を行列メモリー・マネージャ１７０に送ることができる。
【００２５】
[00029]  引き続き図１を参照すると、行列の各々はＮ×Ｎのサイズを有するとしてもよく、ベクトルの各々はＮ×１のサイズを有するとしてもよい。この例では、プロセッサー１００に対応する全ての命令は、ネーティブ・サイズのデーター(native-sized data)を処理する(operate on)ことができる。プロセッサー１００によって操作されるアプリケーションに対応する論理ベクトルおよび行列は、ネーティブ・サイズよりも大きいことが多いとして差し支えない。これらの場合、ベクトルおよび行列はネーティブ・サイズのタイルに分割される。一例では、行列ベクトル乗算では、行列データーおよびベクトル・データーをブロック浮動小数点（ＢＦＰ）フォーマットで表現することができる。この例では、ＢＦＰフォーマット・データーのブロック・サイズは、ネーティブな寸法に等しくすることができる。したがって、ネーティブなＮ×１ベクトルの各々は、共有指数(shared exponent)を有することができ、Ｎ×Ｎ行列の各行は共有指数を有することができる。共有指数は５ビットでもよい。ベクトル・データーおよび行列データーの各々は、２の補数仮数部分(two’s complement mantissa portion)を有することができ、ベクトル・データーおよび行列データーの仮数サイズは異なってもよい。
【００２６】
[00030]  MVM１１０は、ベクトル・レジスター・ファイル（ＶＲＦ）１１２、行列レジスター・ファイル（ＭＲＦ）１２０、およびタイル・エンジン（例えば、タイル・エンジン１１４、１１６、および１１８）を含むことができる。タイル・エンジンは、入力行列および入力ベクトル・データーをＶＲＦ１１２から受け取ることができる。更に、ＭＶＭ１１０は、必要に応じて、ブロック浮動小数点（ＢＦＰ）−浮動小数点（ＦＰ）変換器を含む、フォーマット変換器を含んでもよい。一例では、２つの内部ＢＦＰフォーマットが、ＭＶＭ１１０によって、その入力および出力を表現するために、使用されてもよい。ベクトルおよび行列の格納のためにはＢＦＰ短(BFP short)、そして蓄積のためにはＢＦＰ長(BFP long)を使用してもよい。ＭＶＭ１１０の一例では、ＢＦＰ短は、共有５ビット指数を有するｑｌ．１５固定小数点値を使用してもよく、ＢＦＰ長は、共有５ビット指数を有するｑ３４．４０固定小数点値を使用してもよい。この例では、行列−ベクトル乗算の結果、ＢＦＰ長が生じる場合があるが、最終出力段階としてこれを浮動小数点フォーマットに逆変換すればよい。つまり、図１に示すＭＶＭ１１０の例は、ＢＦＰ−ＦＰ１６変換器１２２、１２４、および１２６出力段において含めばよい。タイル・エンジン１１４、１１６、および１１８は、図１における例に示すように、並列にそれぞれの変換器に出力を供給することができる。ＭＶＭ１１０に関する更なる詳細は、図２に示されており、ＶＲＦ１１２の更なる詳細は、図３および図４に示されている。
【００２７】
[00031]  行列データーは、行列ＤＲＡＭ１８４と行列メモリー・マネージャ１７０との間で、Ｍ個のチャネルを使用して伝達することができる。ベクトル・メモリー・マネージャは、ベクトル・データーをＣ個よりも多いチャネルを通じて移動させることができる。
【００２８】
[00032]  引き続き図１を参照すると、各ＭＦＵ（例えば、ＭＦＵ［０］１４０およびＭＦＵ［１］１６０）はクロスバー（例えば、ｘｂａｒｓという記号が付されたクロスバー）を含んでもよい。ＭＦＵ［０］１４０は、ベクトル−ベクトル乗算および加算、シグモイド関数、ＴａｎＨ関数、ｓｏｆｔｍａｘ演算、正規化線形関数（ＲｅＬＵ： Rectified Linear Unit）演算、および／または活性化ブロック演算というような、ベクトル演算をサポートすることができる。つまり、図１に示すように、ＭＦＵ［０］１４０は、ベクトルをその入力バスからパイプライン状演算シーケンスを通ってストリーミングすることができるクロスバー（例えば、ｘｂａｒ１４６、１４８、および１５０）を含んでもよい。つまり、ＭｕｌＶｒｆ１４２という名称が付されたレジスター・ファイルまたはＡｓＶｒｆ［０］１４４という名称が付された他のレジスター・ファイルを介してベクトルを受け取ることができ、このようなベクトルは、乗算演算、加算演算、または何らかの他の演算の内任意のものを受けることができる。ＭＦＵ［０］１４０は、加算を実行するために様々なハードウェア・ブロック（例えば、１５３、１５７、および１６１）を含むことができる。また、ＭＦＵ［０］１４０は、乗算を実行するために様々なハードウェア・ブロック（例えば、１５２、１５６、および１５９）を含むこともできる。また、ＭＦＵ［０］１４０は、活性化を実行するために様々なハードウェア・ブロック（例えば、１５１、１５４、および１５８）を含むこともできる。
【００２９】
[00033]  更に図１を参照すると、ＭＦＵ［１］１６０はクロスバー（例えば、ｘｂａｒ１６２、１６３、および１６４）を含んでもよく、これらは、ＭＦＵ［１］１６０がＭＦＵ［０］１４０からの出力を受け取り、これらの出力およびＡＤＤ／ＳＵＢ  ＶＲＦ１６８を通じて受け取った任意の追加入力に対して追加演算を実行することを可能にすることができる。ＭＦＵ［１］１６０は、加算を実行するための様々なハードウェア・ブロック（例えば、１６９、１７１、および１７２）を含むことができる。また、ＭＦＵ［１］１６０は、活性化を実行するために様々なハードウェア・ブロックを含むこともできる。ＭＦＵ［１］１６０からＣ個のチャネルを通じて受け取られた出力は、乗算回路１７４を介して、ベクトル・メモリー・マネージャ１８０に結合することができる。図１は、プロセッサー１００の特定数のコンポーネントが特定の態様で配置されていることを示すが、これらよりも多いまたは少ない数のコンポーネントの異なる配置が行われることも可能である。
【００３０】
[00034]  プロセッサー１００は、少数の命令を使用して数万もの演算をトリガすることができる命令の発行を可能にするために使用することができる。一例として、以下の表１は、完全にパラメータ化されたＬＳＴＭに対応する命令を示す。
【００３１】
【表１】
2021522630.tif 000004
【００３２】
[00035]  表１は、特定のフォーマットを有する特定数の命令を示すが、プロセッサー１００は、同じ目的を遂行するために、異なるフォーマットを有する、もっと多いまたは少ない命令を実行してもよい。
【００３３】
[00036]  表２は、ＣＮＮ評価の一部として、１×１畳み込みをどのように計算するかを示す。
【００３４】
【表２】
2021522630.tif 000005
【００３５】
[00037]  上の表に示すように、計算のための命令のチェーンを繰り返す回数を指定することができる。次に、必要に応じて、各命令チェーンのネーティブ・ディメンション(native dimension)を、コラム倍率(column scaling factor)によって規模調整することができる。そして、ベクトル・レジスター・ファイルからベクトル・データーを読み出した後、行列レジスター・ファイルから引き出された重みとベクトル・データーを乗算することができる。ＣＮＮ評価に必要な追加の演算を実行した後、出力を提供することができる。一例として、点別正規化線形関数（ＲｅＬＵ）演算を、ベクトル・データーのエレメント毎に実行することができる。
【００３６】
[00038]  以下の表３は、ＣＮＮ評価の一部として、Ｎ×Ｎ畳み込みをどのように計算するかを示す。以下の命令の内、１×１畳み込みと同様のものについては、再度説明しない。Ｓｅｔ２ｄＷｉｎｄｏｗｓ命令は、全ウィンドウ・サイズを設定するために使用することができ、次いでＳｅｔＩｔｅｒａｔｉｏｎｓ命令は、このウィンドウを入力ボリューム全域にわたってスライドさせるために使用することができる。＊＿ｉｎｃ命令（例えば、ｖ＿ｒｄ＿ｉｎｃおよびｖ＿ａｄｄ＿ｉｎｃ）は、ストライドに基づいて命令のアドレスを増分するために使用することができる。一例として、２のストライドは、加算のような演算のためにベクトル・データーを格納するために使用されるベクトル・レジスター・ファイルにおいて、１つ置きにベクトルを飛ばすという結果を得ることができる。
【００３７】
【表３】
2021522630.tif 000006
【００３８】
[00039]  図２は、一例による行列−ベクトル乗算器（ＭＶＭ）２００のブロック図である。この例では、ＭＶＭ２００は図１のＭＶＭ１１０を実装するために使用することができる。ＭＶＭ２００は、ベクトル・レジスター・ファイル（ＶＲＦ）２１０、行列レジスター・ファイル（ＭＲＦ）２２０、およびＭＶＭプロセッサー２３０を含むことができる。更に、ＶＲＦ２１０はアドレス・デコーダー２１２およびハザード検出器(hazard detector)２１４を含んでもよい。ＶＲＦ２１０は、コマンドと、テンソルのようなベクトル・データーの双方を受け取ることができる。ＭＲＦ２２０は、アドレス・デコーダー２２２およびハザード検出器２２４を含んでもよい。ＭＲＦ２２０は、コマンドおよび行列データーの双方を受け取ることができる。ＭＶＭプロセッサー２３０は、タイル・エンジン２３２、２３４、および２３６を含むことができる。また、ＭＶＭプロセッサー２３０は、テンソルを受け取り供給するためにバッファ（例えば、テンソル・バッファ２４２、２４４、および２４６）も含んでもよい。更に、ＭＶＭプロセッサー２３０は、ＭＶＭコントローラー２５０も含んでもよい。この例では、ＭＶＭ２００は一連のタイル・エンジンをインスタンス化することができ、タイル・エンジンの各々は、ネーティブ・サイズＭＶＭを加速するように設計されてもよい。この例では、各タイル・エンジンが一連のドット積ユニット（ＤＰＵ）で構成され、各ドット積ユニットが、行列タイルにおける１つのネーティブ行(native row)に対応するドット積計算を担当するようにしてもよい。一例では、ＦＰＧＡを使用してプロセッサー１００が実装される場合、小さな１組のＢＲＡＭおよびＤＳＰを、タイル・エンジンを形成するように構成してもよい。一例として、各々が、ブロック・ランダム・アクセス・メモリー（ＢＲＡＭ）および処理ロジック・ブロック（例えば、ディジタル信号プロセッサー（ＤＳＰ））を含んでもよい。処理ロジック・ブロックは、入力ベクトルを重みの行と乗算するために使用することができる。処理ロジック・ブロックの出力は、加算器を使用して加算することができる。つまり、この例では、各タイルが点別ドット積演算を実行するとして差し支えない。ドット積ユニットは、蓄積ツリーに繰り入れる(feed into)ことができる並列乗算器のレーンで構成することができる。これらのレーンは、行列タイルの１つの行にある複数の列内において並列処理を行う(provide)ことができる。このように、ＭＶＭ２００は、並列処理の少なくとも４つのディメンション、即ち、ＭＶＭ間、ＭＶＭタイリング、１つのタイルの複数の行全域、そして行の複数の列内部の並列処理を活用することができる。この例では、ＭＶＭの総スループットは、サイクル当たりのＦＬＯＰ＝２＊＃タイル・ユニット＊＃ＤＰＵ＊＃レーンとして表現することができる。
【００３９】
[00040]  ＭＲＦ２２０は、行列データーまたはエレメントを各タイル内にあるドット積ユニットに供給するように構成することができる数個の行列レジスター・ファイルを含むことができる。各乗算器は、サイクル毎に１つのベクトル・エレメントをＶＲＦ２１０から、そしてサイクル毎に１つの行列エレメントを行列レジスター・ファイルの１つから受け取ることができる。行列エレメントは、その乗算器に隣接して位置付けられた行列レジスター・ファイルの専用ポートによって送出することができる。ＭＲＦ２２０は、以下のように編成することができる。格納された行列をネーティブ・サイズのタイルに分割することができ、各タイルを１つのタイル・エンジンだけに格納することができる。所与のタイル・エンジンに格納された行列は、ＭＲＦバンクとして見なすこともできる。各ドット積ユニットは、ＭＲＦバンクにおける各行列タイルの１つの行を保持する、そのＭＲＦのサブバンクと関連付けることができる。最初のドット積ユニットがＭＲＦバンクにおける各行列タイルの最初の行を収容するように、行をドット積ユニットに統計的に割り当てることもできる。最後に、ＳＲＡＭのリード・ポートを、ワイヤのみによって、乗算器レーンに直接接続できるように、 行のエレメントをＳＲＡＭにおいてインターリーブすることもできる。行列レジスター・ファイルへの書き込みは、異なる操作によって行われることもある。何故なら、ＭＲＦ２２０に書き込むための行列データーは、ＤＲＡＭのようなオフチップ・メモリーから来ることもあるからである。図２は、ＭＶＭ２００の特定の数のコンポーネントが特定の態様で配置されていることを示すが、これらよりも多いまたは少ない数のコンポーネントの異なる配置が行われることも可能である。
【００４０】
[00041]  図３は、一例によるベクトル・レジスター・ファイル（ＶＲＦ）３００のブロック図である。ＶＲＦ３００は、図１のＶＲＦ１１２の少なくとも一部分を実装するために使用することができる。また、ＶＲＦ３００は、図２のＶＲＦ２１０の少なくとも一部分を実装するためにも使用することができる。この例では、ＶＲＦ３００へのリード／ライト・データー・インターフェースは、１組のＩＴｅｎｓｏｒＲｅａｄおよびＩＴｅｎｓｏｒＷｒｉｔｅインターフェースで構成することができ、その各々がサイクル毎にデーター・エレメントのＬＡＮＥＳを読み出す／書き込むことができる。各インターフェースは、テンソル・プロトコルに従えばよく、独立してバックプレッシャされて(back-pressured)もよい。ＶＲＦ３００リード／ライト・インターフェースは、入力バッファ３０２、３０４，および３０６、ならびに出力バッファ３５２、３５４、および３５６を含むことができる。書き込み動作に応答して、テンソル（例えば、ニューラル・ネットワークのあるレイヤに対応する入力ベクトル・データー）を受け取るために入力バッファを使用することができる。この例では、ＶＲＦ３００はベクトル・データーをブロック浮動小数点（ＢＦＰ）フォーマットで処理することができる。指数（例えば、共有指数）は、指数レジスター（例えば、ＥＸＰ  ＲＥＧ３１４、３１６、および３１８）に格納することができ、仮数はシフト・レジスター（例えば、ＳＨＩＦＴ  ＲＥＧ３０８、３１０、および３１２）に格納することができる。指数レジスターの出力をマルチプレクサ３２２に結合することができ、シフト・レジスターの出力をマルチプレクサ３２０に結合することができ、出力をメモリー（例えば、ブロックＲＡＭ（ＲＲＡＶｉ））に書き込むことができる。このように、指数をＥＸＰ  ＢＲＡＭ３５２に書き込むことができ、仮数をＭＡＮＴＩＳＳＡ  ＢＲＡＭ３３０に書き込むことができる。読み出しに応答して、メモリーからのデーターを出力インターフェースに出力することができる。このように、指数を指数レジスター（例えば、ＥＸＰ  ＲＥＧ３４４、３４６、および３４８）に出力することができ、仮数をシフト・レジスター（例えば、ＳＨＩＦＴ  ＲＥＧ３３８、３４０、および３４２）に出力することができる。これらのレジスターから、ＢＦＰベクトル・データーを出力バッファ（例えば、バッファ３５２、３５４、および３５６）に供給することができる。制御ロジック３７０は、例えば、マルチプレクサ３２０および３２２を含む、ＶＲＦ３００の種々のコンポーネントを通過するベクトル・データーの移動を制御することができる。制御ロジック３７０は、アドレス・デコーディング（たとえば、ＡＤＤＲＥＳＳ  ＤＥＣＯＤＥ３７２）、コマンド・デコーディング（例えば、ＣＯＭＭＡＮＤ  ＤＥＣＯＤＥ３７４による）、およびリード／ライト制御（例えば、ＲＥＡＤ  ＦＳＭ３７８およびＷＲＩＴＥ  ＦＳＭ３７６による）を含むことができる。つまり、ＩＮｆｕＣｍｄバスを通じてコマンドおよびアドレスを受け取ると、このコマンドおよびアドレスをデコードして、アドレス・アクセス・パターンおよびポート選択を判定することができる。以下の表４は、制御ロジック３７０によってデコードすることができるコマンド・フィールドおよびパラメータを示す。
【００４１】
【表４】
2021522630.tif 000007
【００４２】
[00042]  一例では、プロセッサー１００に関連付けられた制御ロジックが、表２に指定したパラメータをデコードして、読み出すまたは書き込むネーティブ・ベクトル・アドレスおよびインターフェースの双方を決定することができる。ＶＲＦ３００に接続されているモジュールは、これらのモジュールが正しいデーターを該当するインターフェースにおいて、そして適切な順序でＶＲＦ３００にまたはＶＲＦ３００から読み出す／書き込むことができるように、コマンドおよびこれらのパラメータを同様にデコードしなければならないのはもっともである。
【００４３】
[00043]  一例では、これは、階層デコードおよびディスパッチ・アーキテクチャを使用して遂行することができる。つまり、プロセッサー１００がＦＰＧＡに基づいて実装される場合、カスタム・コードと対を組む既製のＮｉｏｓＩＩ／ｆプロセッサーを使用して、制御プロセッサーを実現することができる。制御プロセッサーに関連付けられた最上位のスケジューラーが、命令のストリームを受け取り、チェーンにグループ化することができる。これらの命令をデコードした後、最上位のスケジューラーは、分散制御信号を１組の第２レベル・スケジューラーおよび他の１組の第２レベル・デコーダーにディスパッチすることができる。これらの第２レベル・スケジューラーおよびデコーダーは、追加の分散制御信号を最下位のデコーダーにディスパッチすることができる。Ｎｉｏｓプロセッサーを使用するこの実装例では、ＮｉｏｓプロセッサーはＮ個の命令のＴ回の繰り返しを最上位スケジューラーにストリーミングすることができる。次に、最上位スケジューラーは、命令のＭＶＭ特定部分を第２レベル・スケジューラーにディスパッチすることができ、第２レベル・スケジューラーは、目標行列のＮ行およびＮ列に沿って、動作を広げることができる。これらのＭＶＭスケジュールをＥ個の行列−ベクトル・タイル・エンジンにマッピングすることができ、これらのタイル・エンジンならびにそれらの関連するベクトル・レジスター・ファイルおよび蓄積ユニットに１つずつとして、Ｅ個で１組のデコーダーに動作をディスパッチすることができる。このＥ個で１組のデコーダーは、データー平面に散開する(fan out into)制御信号を生成することができ、各タイル・エンジン・ディスパッチャは、ベクトル・データーをベクトル・レジスター・ファイルから読み出し、ベクトル・データーをベクトル・レジスター・ファイルに(back to)書き込むことができる数百ものドット積ユニットに散開する。
【００４４】
[00044]  読み出し／書き込み動作に関して、この例では、ＶＲＦ３００は、内部で、データー幅ＮＡＴＩＶＥ＿ＤＩＭ＊ＢＦＰ＿ＷＩＤＴＨ＋ＥＸＰ＿ＷＩＤＴＨのマルチポート・メモリー（例えば、二重ポートＢＲＡＭ）を使用することができる。一例では、二重ポート・メモリー（例えば、ＢＲＡＭ）は、サイクル毎に異なるインターフェース回路においてデーターを配給する(serve)ために、回転することができる。つまり、この例では、定常状態において、ＶＲＦ３００は最大読み出し／書き込み帯域幅を達成することができ、ポート競合は発生しない。図３は特定の態様で構成されたＶＲＦ３００の特定数のコンポーネントを示すが、もっと多いまたは少ないコンポーネントの異なる構成にすることもできる。一例として、二重ポート・メモリーをＢＲＡＭとして説明したが、他の種類のプロセッサーでは他の種類のメモリーも使用することができる。一例として、ＧＰＵ、ＣＰＵ、または他の種類のプロセッサーにおいて、ＳＲＡＭまたは他の種類の二重ポート・メモリーを使用することもできる。加えて、図３は二重ポート・メモリー（読み出しのために１つのポート、そして書き込みのために１つのポート）について説明するが、追加のポートを有するメモリーも使用することができる。例えば、２つのリード・ポートおよび２つのライト・ポートを有するメモリーを使用してもよい。
【００４５】
[00045]  図４は、他の例によるベクトル・レジスター・ファイル４００のブロック図である。この例は、二重ポート・メモリー４３０を含むベクトル・レジスター・ファイル（例えば、図３のＶＲＦ３００）の動作を説明するために、簡略化されている。この例では、ベクトルまたは行列のネーティブ・ディメンションＮが１２８ワードであると仮定する。つまり、行列ベクトル乗算器は、ニューラル・ネットワーク処理の一部として、Ｎ×Ｎ行列をＮ×１ベクトルと乗算することができる。更に、この例では、各エレメントが１ワードであり、Ｗビット幅であることも仮定する。更に、この例では、各ドット積ユニットがＬ−ワード（またはＬ−エレメント）のベクトルおよび行列データーを処理し、部分的なドット積を生成する(produce)ことも仮定する。ＭＶＭは、部分的なドット積を蓄積するために、追加−削減ツリーを含むことができる。次いで、追加−削減出力(add-reduction output)をアキュミュレータに供給することができ、アキュミュレータは全ての部分和を合計して、行列の行全体に対する最終的なドット積を供給する。ＶＲＦ４００は、８つのインターフェースを通じてベクトル・データーを受け取ることができ、各インターフェースはＬ個のレーンを有する。ＶＲＦ４００ライト・インターフェースは、例えば、入力インターフェース回路４０１、入力インターフェース回路４０３、入力インターフェース回路４０５を含む、入力インターフェース回路を有することができる。ＶＲＦ４００リード・インターフェースは、例えば、出力インターフェース回路４５１、出力インターフェース回路４５３、および出力インターフェース回路４５５を含む、出力インターフェース回路を有することができる。各入力インターフェース回路は入力バッファ（例えば、入力バッファ４０２、４０４、および４０６）を含むことができ、各出力インターフェース回路は出力バッファ（例えば、出力バッファ４６２、４６４、４６６）を含むことができる。更に、入力バッファは、追加のインターフェース・エレメント（例えば、インターフェース・エレメント４１２、４１４、および４１６）に結合することができる。更に、出力バッファは、追加の出力インターフェース・エレメント（例えば、出力インターフェース・エレメント４５２、４５４、および４５６）に結合することができる。更に、ライト・インターフェースは、マルチプレクサ４２０を備えることができる。マルチプレクサ４２０は、入力インターフェース回路の各々から出力を受け取るように結合することができる。マルチプレクサ４２０の出力は、二重ポート・メモリー４３０のリード・ポートに結合することができる。更に、リード・インターフェースはデマルチプレクサ４４０を備えることができ、デマルチプレクサ４４０は、二重ポート・メモリー４３０から出力を受け取るように結合することができる。デマルチプレクサからの出力は、出力インターフェース回路に結合することができる。
【００４６】
[00046]  書き込み動作に応答して、テンソルを受け取るために入力インターフェース回路を使用することができ、読み出し動作に応答して、出力インターフェース回路はベクトル・データーを供給することができる。この例では、ライト命令に応答して、１回のクロック・サイクル中に、Ｎ個のデーター・エレメントを二重ポート・メモリーに、広いインターフェース（図４においてＶで示す）を通じて格納することができる。P（Ｎ／Ｌ）回のクロック・サイクルの各々の間に、ＶＲＦ４００は、各入力インターフェースを通じて、テンソルの１つ（例えば、１つのＮ×１ベクトル）を受け取ることができる。図４に示す例では、Ｐ＝８、Ｎ＝１２８、およびＬ＝１６である。各データー・エレメントが１ワードであり、１ワードがＷビットを有すると仮定すると、８クロック・サイクル毎に、各入力インターフェース回路はＮ×Ｗビット（Ｖビット）を受け取ることができる。この例では、Ｎは１２８であり、ワード・サイズが４ビットであると仮定すると、クロック・サイクル毎に、ＶＲＦ４００は５１２ビットを格納することができる。各クロック・サイクルＬ（例えば、この場合１６）中に、入力インターフェース回路の一部である入力レーンはＬ個のデーター・エレメント（例えば、Ｌ個のワード）を並列に搬送することができる。入力インターフェース回路の一部であるシフト・レジスター（例えば、シフト・レジスター４１２、４１４、および４１６）は、クロック・サイクル毎に５１２ビットをマルチプレクサ４２０に供給することができる。
【００４７】
[00047]  同様に、リード命令に応答して、８クロック・サイクル毎に、ＶＲＦ４００はＶビット（５１２ビット）を、Ｖ−ビット幅のリード・ポートを通じて、出力インターフェース回路の内少なくとも１つに、マルチプレクサ４４０を介して供給することができる。シフト・レジスター（例えば、シフト・レジスター４５２、４５４、および４５６）は、クロック・サイクロ毎に、Ｌ個のデーター・エレメントをそれぞれの出力バッファに供給することができる。リードおよびライト命令は、同時に実行するように、スケジューリングすることができる。つまり、二重ポート・メモリー４３０をインターフェースからインターフェースに「回転させる」ことによって、クロック・サイクル毎に、Ｎのネーティブ・ディメンションを有するベクトル全体をＶＲＦ４００から読み出すことができ、更にＶＲＦ４００に書き込むことができる。これによって、プロセッサー１００が、ＦＰＧＡに基づくことが可能になり、またはＢＲＡＭの量が制限されるＦＰＧＡのような、ＳＲＡＭの量が制限される他の種類のハードウェア・ノードに基づくことが可能になるという利点を得ることができる。これが有利であるとしてよいのは、行列ベクトル乗算を、ＦＰＧＡのリソースの大部分にまで拡大する(scale up)ように設計することができ、専用マルチポートＢＲＡＭに対応する(provide for)ためにＦＰＧＡリソースを無駄にすることがないからである。制御ロジック４２５は、ＩＮＰＵＴ  ＣＯＮＴＲＯＬおよびＯＵＴＰＵＴ制御というような制御信号を供給することができる。ＶＲＦ４００の制御面に関する更なる詳細は、図３および他の説明に関して示されている。図４では、Ｎ×Ｎサイズとした２Ｄ行列およびＮ−長ＩＤベクトルを使用するＶＲＦ４００の動作について説明したが、他のサイズを使用しても、ＶＲＦ４００を動作させることができる。ベクトル・サイズの選択は、目標とする１組のモデルに左右されてよい。大きすぎるベクトルを選択すると、最適なパディング(padding)が得られないおそれがあり、一方小さすぎるベクトルを選択すると、プロセッサーの制御オーバーヘッドが増大するおそれがある。加えて、図４では、二重ポート・メモリーを使用するＶＲＦ４００の動作について説明したが、メモリーは追加のリード／ライト・ポートを有してもよい。
【００４８】
[00048]  図５は、一例にしたがって、プロセッサーおよびベクトル・レジスター・ファイルを使用してベクトル・データー・エレメントを処理する方法の流れ図を示す。この例では、ステップ５１０は、ベクトル・レジスター・ファイル（ＶＲＦ）コマンドをデコードして、アドレス・アクセス・パターンおよびポート選択を判定するステップを含むことができる。このステップは、コマンド・デコード３７４が実行することができる。先に説明したように、一例では、これは、階層デコードおよびディスパッチ・アーキテクチャを使用して行うこともできる。つまり、ＦＰＧＡに基づいてプロセッサー１００が実装される場合、カスタム・コードと対を組む既製品のＮｉｏｓ  ＩＩ／ｆプロセッサーを使用して制御プロセッサーを実現することができる。制御プロセッサーと関連付けられた最上位スケジューラーが、命令のストリームを受け取り、チェーンにグループ化することができる。命令をデコードした後、最上位スケジューラーは、分散制御信号を１組の第２レベル・スケジューラーおよび他の１組の第２レベル・デコーダーにディスパッチすることができる。これらの第２レベル・スケジューラーおよびデコーダーは、追加の分散制御信号を、最下位レベルのデコーダーにディスパッチすることができる。Ｎｉｏｓプロセッサーを使用するこの実装例では、ＮｉｏｓプロセッサーはＮ個の命令のＴ回の繰り返しを最上位スケジューラーにストリーミングすることができる。次に、最上位スケジューラーは、命令のＭＶＭ特定部分を第２レベル・スケジューラーにディスパッチすることができ、第２レベル・スケジューラーは、目標行列のＮ行およびＮ列に沿って、動作を広げることができる。これらのＭＶＭスケジュールをＥ個の行列−ベクトル・タイル・エンジンにマッピングすることができ、これらのタイル・エンジンならびにそれらの関連するベクトル・レジスター・ファイルおよび蓄積ユニットに１つずつとして、Ｅ個で１組のデコーダーに、動作をディスパッチすることができる。このＥ個で１組のデコーダーは、データー平面に散開する(fan out into)制御信号を生成することができ、各タイル・エンジン・ディスパッチャは、ベクトル・データーをベクトル・レジスター・ファイルから読み出し、ベクトル・データーをベクトル・レジスター・ファイルに(back to)書き込むことができる数百ものドット積ユニットに散開する。
【００４９】
[00049]  加えて、ベクトル・レジスター・ファイル内においてリード−アフター−ライト（ＲＡＷ）またはライト−アフター−リード（ＷＡＲ）ハザードが起こる可能性があるので、ハザード検出を使用することができる。つまり、一例では、ハザード検出器（例えば、図２の２１４）が、リードまたはライト命令によってアクセスされたアドレスを追跡することができ、リード命令が到着し、進行中の書き込みがある場合、ハザード検出器は、到着したリード命令によってアクセスされるアドレスが、現在のライト命令によってアクセスされるアドレスと重複するか否かチェックすることができる。一例では、ハザード検出器は、１対のレジスターを維持することによって、これらの命令によってアクセスされる特定数のアドレスを追跡することを遂行してもよい。
【００５０】
[00050]  ステップ５２０は、少なくとも１つのデコードされたＶＲＦアドレスを待ち行列に入れるステップを含むことができる。この例では、アドレス・デコード３７２がこのステップを実行することができる。
【００５１】
[00051]  ステップ５３０は、Ｎのネーティブ・ディメンションを有するベクトル・データーの到着時に、待ち行列からデーターを出すステップを含むことができる。ＶＲＦ３７０と関連付けられた制御ロジック３７０が、このステップを実行することができる。
【００５２】
[00052]  ステップ５４０は、ライト命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを二重ポート・メモリーに格納し、Ｐクロック・サイクルの各々の間に、Ｎ個のデーター・エレメントを二重ポート・メモリーのＰ個の入力インターフェース回路の各々に供給するステップを含むことができる。ここで、ＰはＮをＬで除算した値に等しい整数であり、Ｐ個の入力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Ｐクロック・サイクルの各々の間に、二重ポート・メモリーは、Ｐ個の入力インターフェース回路から選択した１つを通じて、Ｎ個のデーター・エレメントを受け取るように構成される。この例では、有限状態機械（例えば、ＷＲＩＴＥ  ＦＳＭ３７６）がこのステップを実行することができる。このステップに関する更なる詳細は図４に関して示されている。
【００５３】
[00053]  ステップ５５０は、リード命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを二重ポート・メモリーから引き出し、Ｐクロック・サイクルの各々の間に、Ｌ個のデーター・エレメントを二重ポート・メモリーのＰ個の出力インターフェース回路の各々から供給するステップを含むことができ、Ｐ個の出力インターフェース回路の各々が、Ｌ個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Ｐクロック・サイクルの各々の間に、二重ポート・メモリーが、Ｐ個の出力インターフェース回路から選択した１つに、Ｎ個のデーター・エレメントを供給するように構成される。この例では、有限状態機械（例えば、ＲＥＡＤ  ＦＳＭ３７８）がこのステップを実行することができる。このステップに関する追加の詳細は、図４に関して示されている。図５は、特定の順序で実行される特定数のステップについて説明するが、異なる順序でもっと多いまたはもっと少ないステップを実行してもよい。加えて、図５は、二重ポート・メモリーに関する方法について説明したが、追加のポートを有するメモリーを使用してもよい。一例として、２つのリード・ポートおよび２つのライト・ポートを有するメモリーを使用してもよい。
【００５４】
[00054]  結論として、本開示は、マルチポート・メモリー（例えば、二重ポート・メモリー）を含むベクトル・レジスター・ファイルを備えたプロセッサーに関する。このプロセッサーは、更に、データー・エレメントのＮ×Ｎ行列およびデーター・エレメントのＮ×１ベクトルを処理するように構成された複数のタイルを含むことができ、ここでＮは８以上の整数であり、複数のタイルの各々はＮ個のデーター・エレメントを処理するように構成される。ベクトル・レジスター・ファイルは、ライト命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントをマルチポート・メモリーに格納し、Ｐクロック・サイクルの各々の間に、Ｎ個のデーター・エレメントをマルチポート・メモリーのＰ個の入力インターフェース回路の各々に供給するように構成することができ、ここでＰはＮをＬで除算した値に等しい整数であり、Ｌは２以上の整数であり、Ｐ個の入力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Ｐクロック・サイクルの各々の間に、マルチポート・メモリーは、Ｎ個のデーター・エレメントを、Ｐ個の入力インターフェース回路から選択した少なくとも１つを通じて受け取るように構成される。
【００５５】
[00055]  ベクトル・レジスター・ファイルは、更に、リード命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントをマルチポート・メモリーから引き出し、Ｑクロック・サイクルの各々の間に、Ｌ個のデーター・エレメントをマルチポート・メモリーのＱ個の出力インターフェース回路の各々から供給するように構成することもでき、ここでＱはＮをＬで除算した値に等しい整数であり、Ｑ個の出力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Ｑクロック・サイクルの各々の間に、マルチポート・メモリーは、Ｎ個のデーター・エレメントを、Ｑ個の出力インターフェース回路から選択した少なくとも１つに供給するように構成される。
【００５６】
[00056]  一例では、マルチポート・メモリーは、二重ポート・メモリーとして構成されてもよく、二重ポート・メモリーは、１つのリード・ポートと１つのライト・ポートとを備えることができる。この例では、リード命令は、ライト命令と実質的に同時に処理することができる。
【００５７】
[00057]  一例では、Ｐ個の入力インターフェース回路の１つの各々が、Ｎ×１ベクトルを格納するように構成された入力バッファを備え、Ｑ個の出力インターフェース回路の各々が、Ｎ×１ベクトルを格納するように構成された出力バッファを備える。この例では、Ｐ個の入力インターフェース回路の各々は、Ｎ×１ベクトルを入力バッファから受け取るように結合された少なくとも１つのシフト・レジスターを備え、Ｑ個の出力インターフェース回路の各々が、Ｎ×１ベクトルを出力バッファに供給するように結合された少なくとも１つのシフト・レジスターを備える。
【００５８】
[00058]  他の例では、本開示は、複数のタイルと、二重ポート・メモリーを備えるベクトル・レジスター・ファイルとを備えるシステムにおける方法に関する。複数のタイルの各々は、データー・エレメントのＮ×Ｎ行列およびデーター・エレメントのＮ×１ベクトルを処理するように構成される。ここで、Ｎは８以上の整数であり、複数のタイルの各々はＮ個のデーター・エレメントを処理するように構成される。
【００５９】
[00059]  この方法は、ライト命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを二重ポート・メモリーに格納し、Ｐクロック・サイクルの各々の間に、Ｎ個のデーター・エレメントを二重ポート・メモリーのＰ個の入力インターフェース回路の各々に供給するステップを含むことができる。ここで、ＰはＮをＬで除算した値に等しい整数であり、Ｌは２以上の整数であり、Ｐ個の入力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された入力得レーンを備え、Ｐクロック・サイクルの各々の間に、二重ポート・メモリーは、Ｎ個のデーター・エレメントを、Ｐ個の入力インターフェース回路から選択した１つを通じて受け取るように構成される。
【００６０】
[00060]  更に、この方法は、リード命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを二重ポート・メモリーから引き出し、Ｑクロック・サイクルの各々の間に、Ｌ個のデーター・エレメントを二重ポート・メモリーのＱ個の出力インターフェース回路の各々から供給するステップを含むことができる。ここで、ＱはＮをＬで除算した値に等しい整数であり、Ｑ個の出力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Ｑクロック・サイクルの各々の間に、二重ポート・メモリーはＮ個のデーター・エレメントをＱ個の出力インターフェース回路から選択した１つに供給するように構成される。
【００６１】
[00061]  一例では、二重ポート・メモリーは１つのリード・ポートと１つのライト・ポートとを備えることができる。この例では、リード命令は、ライト命令と実質的に同時に処理することができる。
【００６２】
[00062]  一例では、Ｐ個の入力インターフェース回路の各々は、Ｎ×１ベクトルを格納するように構成された入力バッファを備え、Ｑ個の出力インターフェース回路の各々は、Ｎ×１ベクトルを格納するように構成された出力バッファを備える。この例では、Ｐ個の入力インターフェース回路の各々は、Ｎ×１ベクトルを入力バッファから受け取るように結合された少なくとも１つのシフト・レジスターを備え、Ｑ個の出力インターフェース回路の各々は、Ｎ×１ベクトルを出力バッファに供給するように結合された少なくとも１つのシフト・レジスターを備える。
【００６３】
[00063]  更に他の例では、本開示は、１つのリード・ポートと１つのライト・ポートとを含む二重ポート・メモリーを備えるベクトル・レジスター・ファイルを備えるプロセッサーに関する。このプロセッサーは、更に、Ｎ×Ｎ行列およびＮ×１ベクトルを処理するように構成された複数のタイルを備えてもよい。ここで、Ｎは８以上の整数であり、複数のタイルの各々は、Ｎ個のデーター・エレメントを処理するように構成される。
【００６４】
[00064]  ベクトル・レジスター・ファイルは、ライト命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを二重ポート・メモリーに、１つのライト・ポートを通じて格納し、Ｐクロック・サイクルの各々の間に、Ｎ個のデーター・エレメントを二重ポート・メモリーのＰ個の入力インターフェース回路の各々に供給するように構成されてもよい。ここで、ＰはＮをＬで除算した値に等しい整数であり、Ｌは２以上の整数であり、Ｐ個の入力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Ｐクロック・サイクルの各々の間に、二重ポート・メモリーは、Ｎ個のデーター・エレメントをＰ個の入力インターフェース回路から選択した１つを通じて受け取るように構成される。
【００６５】
[00065]  更に、ベクトル・レジスター・ファイルは、リード命令に応答して、１クロック・サイクルの間に、Ｎ個のデーター・エレメントを二重ポート・メモリーから、１つのリード・ポートを通じて引き出し、Ｑクロック・サイクルの各々の間に、Ｌ個のデーター・エレメントを二重ポート・メモリーのＱ個の出力インターフェース回路の各々から供給するように構成されてもよい。ここで、ＱはＮをＬで除算した値に等しい整数であり、Ｑ個の出力インターフェース回路の各々は、Ｌ個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Ｑクロック・サイクルの各々の間に、二重ポート・メモリーは、Ｎ個のデーター・エレメントを、Ｑ個の出力インターフェース回路から選択した１つに供給するように構成される。
【００６６】
[00066]  一例では、Ｐ個の入力インターフェース回路の１つの各々が、Ｎ×１ベクトルを格納するように構成された入力バッファを備え、Ｑ個の出力インターフェース回路の各々が、Ｎ×１ベクトルを格納するように構成された出力バッファを備える。この例では、Ｐ個の入力インターフェース回路の各々が、Ｎ×１ベクトルを入力バッファから受け取るように結合された少なくとも１つのシフト・レジスターを備え、Ｑ個の出力インターフェース回路の各々が、Ｎ×１ベクトルを出力バッファに供給するように構成された少なくとも１つのシフト・レジスターを備える。この例では、リード命令は、ライト命令と実質的に同時に処理することができる。
【００６７】
[00067]  尚、本明細書において図示した方法、モジュール、およびコンポーネントは例示に過ぎないことは理解されよう。あるいは、または加えて、本明細書において説明した機能は、少なくとも部分的に、１つ以上のハードウェア・ロジック・コンポーネントによって実行することができる。例えば、そして限定ではなく、使用することができるハードウェア・ロジック・コンポーネントの実例的な種類には、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、特定用途集積回路（ＡＳＩＣ）、特定用途標準製品（ＡＳＳＰ）、システム・オン・チップ・システム（ＳＯＣ）、複合プログラマブル・ロジック・デバイス（ＣＰＬＤ）等が含まれる。抽象的な、しかしそれでも明確な意味で、同じ機能を達成するためのコンポーネントの構成(arrangement)はいずれも、所望の機能が達成されるように、効果的に「関連付けられる」。したがって、本明細書において特定の機能を達成するために組み合わせられた任意の２つのコンポーネントは、アーキテクチャや仲介コンポーネントに関係なく、所望の機能が達成されるように、互いに「関連付けられた」ものとして見ることができる。同様に、そのように関連付けられた任意の２つのコンポーネントは、所望の機能を達成するために、互いに「動作可能に接続された」または「結合された」ものと見なすこともできる。
【００６８】
[00068]  また、本開示において説明したいくつかの例と関連付けられる機能は、非一時的媒体に格納された命令を含むこともできる。「非一時的媒体」という用語は、本明細書において使用する場合、データーおよび／または特定の態様で機械を動作させる命令を格納する任意の媒体を指す。例示的な非一時的媒体には、不揮発性媒体および／または揮発性媒体が含まれる。不揮発性媒体には、例えば、ハード・ディスク、ソリッド・ステート・ドライブ、磁気ディスクまたはテープ、光ディスクまたはテープ、フラッシュ・メモリー、ＥＰＲＯＭ、ＮＶＲＡＭ、ＰＲＡＭ、あるいはその他のこのような媒体、もしくはこのような媒体のネットワーク接続バージョンが含まれる。揮発性媒体には、例えば、ＤＲＡＭ、ＳＲＡＭ、キャッシュ、またはその他のこのような媒体というような、ダイナミック・メモリーが含まれる。非一時的媒体は、伝送媒体とは全く異なるが、これと併せて使用することができる。伝送媒体は、データーおよび／または命令を機械にまたは機械から転送するために使用される。例示的な伝送媒体には、同軸ケーブル、光ファイバ・ケーブル、銅製ワイヤ、および無線波のようなワイヤレス媒体が含まれる。
【００６９】
[00069]  更に、以上で説明した動作の機能間における境界は、単なる例示に過ぎないことは、当業者には認められよう。複数の動作の機能を組み合わせて１つの動作にすることもでき、および／または１つの動作の機能を追加の動作に分散することもできる。更に、代替実施形態では、特定の動作の複数のインスタンスを含んでもよく、種々の他の実施形態では、動作の順序を変更してもよい。
【００７０】
[00070]  本開示は特定的な例を提供するが、以下の請求項に明記される通りの、本開示の範囲から逸脱することなく、種々の修正および変更を行うことができる。したがって、明細書および図は、限定的な意味ではなく、例示的な意味で捕らえられて当然であり、このような修正は全て本開示の範囲内に含まれることを意図している。特定的な例に関して本明細書において説明した便益、利点、または問題に対する解決策はいずれも、任意のまたは全ての請求項の肝要な(critical)、必要な(required)、または必須の特徴もしくは要素として解釈されることは意図していない。
【００７１】
[00071]  更に、「ａ」または「ａｎ」という用語は、本明細書において使用する場合、１つまたは１つよりも多いと定義する。また、請求項における「少なくとも１つ」および「１つ以上の」というような導入句の使用は、同じ請求項が導入句「１つ以上」または「少なくとも１つ」および「ａ」または「ａｎ」のような不定冠詞を含むときであっても、不定冠詞「ａ」または「ａｎ」による他の請求項要素の導入が、このように導入された請求項要素を含む任意の特定の請求項を、１つのこのような要素だけを含む発明に限定することを暗示するように解釈してはならない。これは、定冠詞の使用についても該当する。
【００７２】
[00072]  特に明記されていない限り、「第１の」および「第２の」というような用語は、このような用語が記述する要素間において任意に区別するために使用される。つまり、これらの用語は、必ずしも、このような要素の時間的優先順位または他の優先順位を示すことを意図するのではない。
【図１】
2021522630.tif 000008
【図２】
2021522630.tif 000009
【図３】
2021522630.tif 000010
【図４】
2021522630.tif 000011
【図５】
2021522630.tif 000012
【国際調査報告】
2021522630.tif 000013
2021522630.tif 000014