(57)【要約】      （修正有）【課題】特定の行列演算を定義又は実装するための柔軟な又は「プログラマブルな」手法を提供する。【解決手段】行列演算が、１つ又は複数の行列オペランドに対して実行される。行列データを多次元メモリから受信する。行列データは、１つ又は複数の行列オペランドと関連付けられている。１つ又は複数の行列オペランドは、行列データから取り出される。行列演算と関連付けられた行列ルーチンが識別される。行列ルーチンは、１つ又は複数の行列オペランドを用いて、行列プロセッサで実行される。行列演算の結果が、行列プロセッサにより実行された行列ルーチンに基づいて取得される。【選択図】図６
2018139097.tif 000002
【特許請求の範囲】
【請求項１】
多次元メモリと、
１つ又は複数の行列オペランドに対して行列演算を実行する、１つ又は複数の行列プロセッサを含んだ複数の処理要素と
を備え、
前記複数の処理要素は、
前記１つ又は複数の行列オペランドと関連付けられている行列データを、前記多次元メモリから受信し、
前記１つ又は複数の行列オペランドを前記行列データから取り出し、
前記行列演算と関連付けられた行列ルーチンを識別し、
前記１つ又は複数の行列オペランドを用いて前記行列ルーチンを実行し、
実行された前記行列ルーチンに基づいて前記行列演算の結果を取得する、
装置。
【請求項２】
行列ルーチンメモリをさらに備え、前記行列ルーチンメモリは、１つ又は複数の行列演算と関連付けられた１つ又は複数の行列ルーチンを含む、請求項１に記載の装置。
【請求項３】
前記複数の処理要素はさらに、前記行列ルーチンを前記行列ルーチンメモリから受信する、請求項２に記載の装置。
【請求項４】
前記複数の処理要素はさらに、
前記行列ルーチンをホストコンピューティングシステムから受信し、
前記行列ルーチンを前記行列ルーチンメモリに格納する、
請求項２に記載の装置。
【請求項５】
前記行列ルーチンは、前記行列演算と関連付けられた１つ又は複数の命令を含む、請求項１から４のいずれか一項に記載の装置。
【請求項６】
前記行列ルーチンの前記１つ又は複数の命令は、前記１つ又は複数の行列オペランドと関連付けられた１つ又は複数のメモリ位置を示すものを含む、請求項５に記載の装置。
【請求項７】
前記１つ又は複数の行列オペランドを前記行列データから取り出す前記複数の処理要素はさらに、前記１つ又は複数の行列オペランドを取り出すために、前記行列データをスライスする、請求項１から６のいずれか一項に記載の装置。
【請求項８】
前記複数の処理要素はさらに、前記１つ又は複数の行列オペランドを前記行列データから取り出す１つ又は複数の命令を実行する、請求項１から７のいずれか一項に記載の装置。
【請求項９】
前記複数の処理要素はさらに、前記多次元メモリの１つ又は複数のメモリ位置から前記行列データを取得する１つ又は複数の命令を実行する、請求項１から８のいずれか一項に記載の装置。
【請求項１０】
前記行列演算は、１つ又は複数の行列乗算演算を含む、請求項１から９のいずれか一項に記載の装置。
【請求項１１】
前記行列演算は、１つ又は複数の畳み込み演算を含む、請求項１から１０のいずれか一項に記載の装置。
【請求項１２】
前記行列演算は、ニューラルネットワークにおける演算と関連付けられている、請求項１から１１のいずれか一項に記載の装置。
【請求項１３】
１つ又は複数の行列オペランドに対して行列演算を実行する段階を備えた方法であって、
前記行列演算を実行する段階は、
前記１つ又は複数の行列オペランドと関連付けられている行列データを多次元メモリから受信する段階と、
前記１つ又は複数の行列オペランドを前記行列データから取り出す段階と、
前記行列演算と関連付けられた行列ルーチンを識別する段階と、
前記１つ又は複数の行列オペランドを用いて、行列プロセッサで前記行列ルーチンを実行する段階と、
前記行列プロセッサにより実行された前記行列ルーチンに基づいて、前記行列演算の結果を取得する段階と
を含む、方法。
【請求項１４】
前記行列ルーチンを行列ルーチンメモリから受信する段階をさらに備え、前記行列ルーチンメモリは、１つ又は複数の行列演算と関連付けられた１つ又は複数の行列ルーチンを含む、請求項１３に記載の方法。
【請求項１５】
前記行列ルーチンは、前記行列演算と関連付けられた１つ又は複数の命令を含む、請求項１３又は１４に記載の方法。
【請求項１６】
前記行列ルーチンの前記１つ又は複数の命令は、前記１つ又は複数の行列オペランドと関連付けられた１つ又は複数のメモリ位置を示すものを含む、請求項１５に記載の方法。
【請求項１７】
多次元メモリを含む複数のメモリ要素と、
１つ又は複数の行列オペランドに対して行列演算を実行する複数の処理要素と
を備え、
前記複数の処理要素は、
ホストプロセッサと、
１つ又は複数の行列処理チップと
を含み、
前記複数の処理要素は、
前記１つ又は複数の行列オペランドと関連付けられている行列データを前記多次元メモリから受信し、
前記１つ又は複数の行列オペランドを前記行列データから取り出し、
前記行列演算と関連付けられた行列ルーチンを識別し、
前記１つ又は複数の行列オペランドを用いて前記行列ルーチンを実行し、
実行された前記行列ルーチンに基づいて、前記行列演算の結果を取得する、システム。
【請求項１８】
それぞれの行列処理チップは、複数の行列処理クラスタを含む、請求項１７に記載のシステム。
【請求項１９】
それぞれの行列処理クラスタは、複数の行列処理ユニットを含む、請求項１８に記載のシステム。
【請求項２０】
それぞれの行列処理クラスタは、複数のメモリリソースブロックを含む、請求項１８又は１９に記載のシステム。
【請求項２１】
格納された命令を有する少なくとも１つの機械アクセス可能記憶媒体であって、前記命令は機械で実行されると、１つ又は複数の行列オペランドに対して行列演算を前記機械に実行させ、
前記行列演算を前記機械に実行させる前記命令はさらに、前記機械に、
前記１つ又は複数の行列オペランドと関連付けられている行列データを多次元メモリから受信させ、
前記１つ又は複数の行列オペランドを前記行列データから取り出させ、
前記行列演算と関連付けられた行列ルーチンを識別させ、
前記１つ又は複数の行列オペランドを用いて行列プロセッサで前記行列ルーチンを実行させ、
前記行列プロセッサにより実行された前記行列ルーチンに基づいて、前記行列演算の結果を取得させる、記憶媒体。
【請求項２２】
前記命令はさらに、行列ルーチンメモリから前記行列ルーチンを前記機械に受信させ、前記行列ルーチンメモリは、１つ又は複数の行列演算と関連付けられた１つ又は複数の行列ルーチンを含む、請求項２１に記載の記憶媒体。
【請求項２３】
前記行列ルーチンは、前記行列演算と関連付けられた１つ又は複数の命令を含む、請求項２１又は２２に記載の記憶媒体。
【請求項２４】
前記行列ルーチンは、前記１つ又は複数の行列オペランドと関連付けられた１つ又は複数のメモリ位置を示すものを含む、請求項２３に記載の記憶媒体。
【請求項２５】
前記多次元メモリから前記行列データを前記機械に受信させる前記命令はさらに、前記多次元メモリの１つ又は複数のメモリ位置から前記行列データを前記機械に取得させる、請求項２１から２４のいずれか一項に記載の記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概してコンピュータ処理の分野に関し、より詳細には、限定するわけではないがプログラマブルな行列処理に関する。
【背景技術】
【０００２】
行列乗算及び行列畳み込みなどの行列演算は、大型の多次元行列オペランドに対する複雑な演算を含むことが多いので、非常にプロセッサに負担がかかり、且つ非常にメモリをたくさん使う演算になり得る。したがって、複雑な行列演算の性能は、処理及び／又はメモリレイテンシによって制限され得る。行列演算は、様々な用途（グラフィックス処理や画像処理から機械学習や人工知能まで）において、増加し続けるデータセットを用いてますます利用されているので、行列演算の高性能且つ柔軟な処理に対する要求が増大している。
【図面の簡単な説明】
【０００３】
本開示は、添付の図と共に読まれた場合、以下の詳細な説明によって最もよく理解される。業界の慣例に従って、様々な特徴は必ずしも縮尺通りに描かれておらず、説明目的のためだけに用いられていることを銘記されたい。縮尺が明示的に又は暗示的に示されている場合、その縮尺は１つの説明的な例だけを提供する。他の実施形態において、様々な特徴の寸法は、解説を明確にするために、任意で増大又は減少することがある。
【０００４】
【図１】特定の実施形態による例示的なコンピューティングシステムの概略図を示す。
【０００５】
【図２Ａ】行列処理アーキテクチャの例示的な実施形態のブロック図を示す。
【図２Ｂ】行列処理アーキテクチャの例示的な実施形態のブロック図を示す。
【図２Ｃ】行列処理アーキテクチャの例示的な実施形態のブロック図を示す。
【０００６】
【図３】コンピュータプロセッサに関する例示的な実施形態のブロック図を示す。
【図４】コンピュータプロセッサに関する例示的な実施形態のブロック図を示す。
【０００７】
【図５】プログラマブルな行列処理エンジンの例示的な実施形態を示す。
【０００８】
【図６】プログラマブルな行列処理の例示的な実施形態のフローチャートを示す。
【発明を実施するための形態】
【０００９】
以下の開示では、多数の異なる実施形態又は例が、本開示の異なる特徴を実装するために提供される。コンポーネント及び配置についての特定の例が、本開示を分かり易くするように後述されている。これらはもちろん、単に例であるに過ぎず、限定することを意図されてはいない。さらに、本開示は、様々な例において参照数字及び／又は参照文字を繰り返すことがある。この繰り返しは、簡潔さと明確さを目的にしており、繰り返し自体には、論じられた様々な実施形態及び／又は構成の間の関係を規定してはいない。異なる実施形態が異なる利点を有してよく、特定の利点があらゆる実施形態に必ずしも必要とされてはいない。
【００１０】
行列処理演算（例えば、行列及び／又はベクトルオペランドを含む線形代数演算）は、コンピューティングシステムにおいて、数ある例の中でも特に、グラフィックス処理から機械学習や人工知能まで広範囲の用途を有する。例えば、数ある例の中でも特に、コンピュータビジョン、自律型ナビゲーション、会話認識及び音声認識、自然な言語処理を含む、人工知能及び機械学習の機能を提供する人工ニューラルネットワークを実装するのに、複雑な行列演算が用いられ得る。これらの複雑な行列演算（例えば、行列乗算及び行列畳み込み）は、前方伝搬、後方伝搬、及び荷重更新などの、ニューラルネットワークの基本的演算を実装するのに用いることができる。しかし、これらの行列演算は、大型の多次元行列オペランドに対する複雑な演算を含むことが多いので、プロセッサ及びメモリに非常に負担をかけることになり得る。したがって、これらの行列演算の性能は、処理及び／又はメモリレイテンシによって制限され得る。さらに、これらの変更が利かない行列演算は、新たな種類又はバリエーションの行列演算を実装する、及び／又は、既存の演算の挙動を修正するという柔軟性を何も持たずに実装されることが多い。行列演算は、人工知能及び機械学習などの様々な用途において、増加し続けるデータセットを用いてますます利用されているので、行列演算の高性能処理及び柔軟な実装の両方に対して要求が増大している。
【００１１】
既存の行列処理手法は、特に、人工ニューラルネットワークにおいて人工知能及び機械学習を実装するのに用いられる場合、様々な非効率さに見舞われる。例えば、中央処理装置（ＣＰＵ）が行列演算を実行するのに用いられることがあるが、多数のＣＰＵアーキテクチャは、低算術強度演算を目的に設計されており（すなわち、メモリ演算と比べて算術演算の比率が低い）、したがって、行列演算の効率的な実行を目的に設計されてはいない。さらに、多数のＣＰＵアーキテクチャは、ローカルメモリ又はキャッシュメモリの複雑な管理ルーチンを利用し、これにより、大型の行列オペランドを伴う演算の処理オーバーヘッド及び実行の複雑さが増大し得る。グラフィックス処理ユニット（ＧＰＵ）も、行列演算を実行するのに用いられることがある。しかしＧＰＵは、高精度計算用に設計されることが多く、特定の行列演算にとっては不必要なレベルの精度を提供する場合があり、したがって、実行され得る行列演算の量を減少させることになる。したがって、既存の行列処理手法は、数ある例の中でも特に、大型の行列オペランド及び／又は特定の次元を有する行列オペランドを伴う行列乗算演算又は畳み込み演算などの、特定の行列演算にとっては非効率的である。さらに既存の手法は、これらの行列演算を追加の処理リソース全体に並列に実行するように、効率的にスケーリングされることができない。したがって、既存の手法は、これらの行列演算をスケーリング及び／又は分散する場合に、１００％の処理効率を実現しない。さらに既存の手法は、変更が利かず柔軟性がないことが多く、新たな行列演算を定義する、既存の行列演算を修正するなどの能力が限定されているか、又はその能力がない。
【００１２】
本開示の全体にわたって説明される行列処理機能は、特定の行列演算を定義又は実装するための柔軟な又は「プログラマブルな」手法を提供する。例えば、特定の実施形態は、プログラマブルな行列ルーチンを実行することができる行列プロセッサを含んでよい。例えば、行列ルーチンは、行列プロセッサによって実行されると、特定の行列演算を実行するように設計されているプログラマブルなルーチンであってよい。例えば、行列ルーチンには、特定の行列プロセッサによりサポートされ、その行列プロセッサによって実行されると所望の行列演算を実行するように設計された、一連の命令及び／又はコマンドが含まれてよい。いくつかの実施形態において、例えば、行列プロセッサは、様々な基本的演算を実行するための命令及び／又はコマンドのセットをサポートするように設計されてよい。このように、より複雑な行列演算用の行列ルーチンが、行列プロセッサによりサポートされた基本的な命令及び／又はコマンドを用いてプログラムされ得る。いくつかの実施形態において、これらの行列ルーチンは、行列プロセッサと関連付けられた行列ルーチンメモリに格納され得る。次に、特定の行列演算が実行される必要がある場合、行列プロセッサは、対応する行列ルーチンを行列ルーチンメモリから引き出し、その後、所望の行列演算を実行するために、そのルーチンの命令及び／又はコマンドを実行することができる。
【００１３】
本開示の全体にわたって説明されるプログラマブルな行列処理機能は、既存の手法の非効率さを軽減すること、柔軟な行列演算が効率的に定義され、プログラマブルな行列ルーチンを用いて実装されることを可能にすることを含む、多数の技術的な利点を提供する。これらのプログラマブルな行列ルーチンによって、幅広い範囲の行列処理機能が、非効率的で時間がかかりコストの高いハードウェアベースの実装を介するのではなく、プログラムで行列プロセッサに実装されることが可能になる。
【００１４】
次に、本開示の行列処理機能を実装するのに用いられ得る例示的な実施形態が、添付した図をより詳細に参照して説明されることになる。
【００１５】
図１は、特定の実施形態による例示的なコンピューティングシステム１００の概略図を例示する。
【００１６】
いくつかの実施形態において、本開示の全体にわたって説明される行列処理機能は、システム１００に実装されてよい。行列処理機能は、数ある例の中でも特に、行列演算を伴う、グラフィックス処理から機械学習や人工知能までの広範囲の用途及び／又は使用事例のために、システム１００に用いられてよい。例えば、いくつかの実施形態において、行列処理機能は、人工ニューラルネットワークにおいて、人工知能及び機械学習を実装するのに用いられてよい。さらに、行列処理機能は、システム１００の任意のコンポーネントにより実装されてよい。例えば、例示された実施形態において、システム１００には、エッジデバイス１１０、クラウドサービス１２０、行列処理ノード１３０、及びネットワーク１５０が含まれている。行列処理ノード１３０には、システム１００の任意のコンポーネントを含め、行列処理機能を備えた任意のコンポーネント又はデバイスが含まれてよい。例えば、行列処理ノード１３０には、クラウドサービス１２０及び／又は行列処理機能が実装されたサーバ（例えば、データセンタのアプリケーションサーバ）、行列処理機能が実装されたエッジデバイス１１０（例えばエンドユーザデバイス１１２、モノのインターネットデバイス１１４、ゲートウェイ１１６）などが含まれてよい。システム１００のこれらの様々なコンポーネントが、さらに下記に論じられている。
【００１７】
エッジデバイス１１０には、通信システム１００の「エッジ」近くに配置又は接続された任意の機器及び／又はデバイスが含まれてよい。エッジデバイス１１０は、ネットワーク１５０などの１つ又は複数のネットワーク及び／又は通信プロトコルを通じて、互いに、並びに／又は他のリモートネットワーク及びサービス（例えば、クラウドサービス１２０）と通信することができる。いくつかの実施形態において、特定のエッジデバイス１１０は、本開示の全体にわたって説明される行列処理機能を含むことができ、したがって、行列処理ノード１３０として用いられてよい。例示された実施形態において、エッジデバイス１１０には、数ある例の中でも特に、エンドユーザデバイス１１２（例えば、デスクトップ、ラップトップ、モバイルデバイス）、モノのインターネット（ＩｏＴ）デバイス１１４、並びにゲートウェイ及び／又はルータ１１６が含まれる。
【００１８】
エンドユーザデバイス１１２には、ユーザのコンピューティングシステム１００との対話を可能又は容易にする任意のデバイスが含まれてよく、例えば、数ある例の中でも特に、デスクトップコンピュータ、ラップトップ、タブレット、携帯電話及び他のモバイルデバイス、並びにウェアラブルデバイス（例えば、スマートウォッチ、スマートグラス、ヘッドセット）が含まれる。
【００１９】
ＩｏＴデバイス１１４には、モノのインターネット（ＩｏＴ）システム又はネットワークで通信することができる、及び／又はそこに加わることができる任意のデバイスが含まれてよい。ＩｏＴシステムとは、特定の用途又は使用事例のために相互運用し相乗作用を示す複数の異なるデバイス（例えば、ＩｏＴデバイス１１４）から構成された、新たな又は改善されたアドホックシステム及びネットワークを指してよい。ますます多くの製品及び機器が発展して「スマート」になるにつれて、そのようなアドホックシステムが出現しつつある。「スマート」とは、これらの製品及び機器がコンピュータプロセッサにより制御又は監視され、また他のデバイスと通信できることを意味する。例えば、ＩｏＴデバイス１１４には、クラウドサービス１２０及び／又は他のエッジデバイス１１０などの、システム１００の他のコンポーネントとの相互運用を可能にするコンピュータプロセッサ及び／又は通信インタフェースが含まれてよい。ＩｏＴデバイス１１４には、初めからＩｏＴ機能を有するものとして開発される「グリーンフィールド」デバイス、又は最初はＩｏＴ機能を有さないものとして開発された既存のレガシデバイスにＩｏＴ機能を統合することで作り出される「ブラウンフィールド」デバイスがあってよい。例えば、場合によっては、ＩｏＴデバイス１１４は、機器、玩具、道具、車両、生物（例えば、植物、動物、人間）などの「モノ」に統合された、又はそれらに取り付けられたセンサ及び通信モジュールから構成されてよい。あるいは又はさらに、特定のＩｏＴデバイス１１４は、システム１００の様々なコンポーネントと通信するために、エッジゲートウェイ又はルータ１１６などの中間コンポーネントに頼ってよい。
【００２０】
ＩｏＴデバイス１１４には、自身の環境の特性に関連付けられたセンサデータ及び信号を、監視、検出、測定、及び生成するための、様々な種類のセンサが含まれてよい。例えば、所与のセンサが、数ある例の中でも特に、運動、重量、物理接触、温度、風、雑音、光、位置、湿度、放射能、液体、特定の化合物、バッテリ寿命、無線信号、コンピュータ通信、及び帯域幅などの、１つ又は複数のそれぞれの特性を検出するように構成されてよい。センサには、物理センサ（例えば、物理監視コンポーネント）、及び仮想センサ（例えば、ソフトウェアベースの監視コンポーネント）が含まれてよい。ＩｏＴデバイス１１４には、自身のそれぞれの環境で様々な動作を実行するアクチュエータも含まれてよい。例えば、アクチュエータは、数ある例の中でも特に、セキュリティシステム（例えば、アラーム、カメラ、ロック）、又は家庭用電気器具（例えば、オーディオシステム、照明設備、ＨＶＡＣ設備、ガレージドア）の電源又は動作のオンオフを切り替えるなどの、特定の機能を選択的に作動させるのに用いられてよい。
【００２１】
さらに言えば、本開示は、ＩｏＴデバイス１１４及び関連センサ／アクチュエータに関して、潜在的に無限の領域の用途を考えている。ＩｏＴデバイス１１４には、例えば、任意の種類のシステム１００、並びに／又は、数ある中でも特に、運輸産業（例えば、自動車、航空会社）、工業製造産業、エネルギー産業（例えば、発電所）、通信産業（例えば、インターネット、セルラー、及びテレビ放送事業者）、医療産業（例えば、ヘルスケア、医薬）、食品加工産業、及び／若しくは小売産業を含む産業と関連した、任意の種類の機器及び／又はデバイスが含まれてよい。例えば運輸産業において、ＩｏＴデバイス１１４には、航空機、自動車、又は船舶と関連した、ナビゲーションシステム、自律型飛行若しくは運転システム、トラフィックセンサ及びコントローラ、並びに／又はセンサにより監視されている任意の内部機械若しくは電気コンポーネント（例えば、エンジン）などの機器及びデバイスが含まれてよい。ＩｏＴデバイス１１４には、数ある例の中でも特に、工業製造及び生産、輸送（例えば、貨物追跡）、通信ネットワーク（例えば、ゲートウェイ、ルータ、サーバ、セルラータワー）、サーバファーム、発電所、ウィンドファーム、石油パイプライン及びガスパイプライン、水処理及び配水、廃水収集及び廃水処理、並びに気象観測（例えば、温度センサ、風センサ、及び湿度センサ）と関連した、機器、デバイス、及び／又はインフラストラクチャも含まれてよい。ＩｏＴデバイス１１４には、例えば、任意の種類の「スマート」デバイス又はシステムも含まれてよく、ここには、数ある例の中でも特に、スマートエンターテイメントシステム（例えば、テレビ、オーディオシステム、ビデオゲームシステム）、家庭用又はオフィス用のスマート電気器具（例えば、暖房／換気／空調（ＨＶＡＣ）器具、冷蔵庫、洗濯機及び乾燥機、コーヒーメーカー）、電力制御システム（例えば、電気、照明、及びＨＶＡＣの自動制御）、セキュリティシステム（例えば、アラーム、ロック、カメラ、動作感知装置、指紋スキャナ、顔認識システム）、及び他のホームオートメーションシステムなどが含まれる。ＩｏＴデバイス１１４は、建物、壁、床、地面、電柱、看板、給水塔、又は任意の他の据え置き式若しくは固定式の構造に取り付けられるなど、静的に配置されてよい。ＩｏＴデバイス１１４は、数ある例の中でも特に、車両又は航空機、ドローン、（例えば、貨物を追跡するための）パッケージ、モバイルデバイス、及びウェアラブルデバイスの中のデバイスなど、移動式であってもよい。さらに、ＩｏＴデバイス１１４は、エンドユーザデバイス１１２並びにエッジゲートウェイ及びルータ１１６を含む任意の種類のエッジデバイス１１０であってもよい。
【００２２】
エッジゲートウェイ及び／又はルータ１１６は、エッジデバイス１１０との間の通信を容易にするのに用いられてよい。例えば、ゲートウェイ１１６は、最初は通信機能を何も持たずに開発された既存のレガシデバイス（例えば、「ブラウンフィールド」のＩｏＴデバイス）に、そのような通信機能を提供してよい。ゲートウェイ１１６は、Ｂｌｕｅｔｏｏｔｈ（登録商標）又はＺｉｇＢｅｅ（登録商標）通信機能を備えたＩｏＴデバイス１１４などの、短距離通信機能、独自の通信機能、又はそうでなければ限定された通信機能でエッジデバイス１１０の地理的範囲を広げるためにも利用されてよい。例えば、ゲートウェイ１１６は、最初から備わっている自身の通信機能（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）、ＺｉｇＢｅｅ（登録商標））を用いてフロントホールをＩｏＴデバイス１１４に提供することで、且つ別の有線通信媒体又は無線通信媒体（例えば、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｗｉ−Ｆｉ（登録商標）、セルラー）を用いてバックホールを他のネットワーク１５０及び／又はクラウドサービス１２０に提供することで、ＩｏＴデバイス１１４とリモートネットワーク又はサービスとの間の仲介物として働くことができる。いくつかの実施形態において、ゲートウェイ１１６は、別のＩｏＴデバイス１１４、エンドユーザデバイス１１２、又は他の種類のエッジデバイス１１０などの、専用ゲートウェイデバイス又は汎用デバイスによって実装されてよい。
【００２３】
いくつかの例において、ゲートウェイ１１６は、特定のネットワーク管理及び／又はアプリケーション機能（例えば、ＩｏＴデバイス１１４のＩｏＴ管理及び／又はＩｏＴアプリケーション機能）を、個々に、又はクラウドサービス１２０及び／若しくは他のエッジデバイス１１０などの他のコンポーネントと共に、実装することもできる。例えば、いくつかの実施形態において、構成パラメータ及び／又はアプリケーションロジックは、ゲートウェイデバイス１１６にプッシュされるか、又はそこからプルされてよく、これにより、ゲートウェイ１１６の範囲内の又はそこに近接したＩｏＴデバイス１１４（又は他のエッジデバイス１１０）が、特定のＩｏＴ用途又は使用事例のために構成されることが可能になる。
【００２４】
クラウドサービス１２０は、ネットワーク１５０を通じてリモートにホストされている、又は「クラウド」内にあるサービスを含んでよい。いくつかの実施形態において、例えば、クラウドサービス１２０は、データセンタのサーバ（例えば、アプリケーションサーバ又はデータベースサーバ）でリモートにホストされてよい。クラウドサービス１２０は、エッジデバイス１１０により利用され得る、又はエッジデバイス１１０用に利用され得る任意のサービスを含むことができ、これらのサービスには、限定されないが、数ある例の中でも特に、データストレージ、コンピュータによるサービス（例えば、データ解析、検索、診断及び故障管理）、セキュリティサービス（例えば、監視、アラーム、ユーザ認証）、マッピング及びナビゲーション、地理位置情報サービス、ネットワーク管理又はインフラストラクチャ管理、ＩｏＴアプリケーション及び管理サービス、支払い処理、音声及び映像のストリーミング、メッセージ、ソーシャルネットワーキング、ニュース、並びに天気が含まれる。いくつかの実施形態において、特定のクラウドサービス１２０が、本開示の全体にわたって説明される行列処理機能を含むことができ、したがって、行列処理ノード１３０として用いられてよい。
【００２５】
概して、エッジデバイス１１０（及び、特にＩｏＴデバイス１１４）は、極めて大量の様々なデータを生成することができる。ＩｏＴエッジデバイス１１４は通常、（例えば、クラウドサービス１２０によって）このデータを処理及び／又は保管のためにクラウドにオフロードする。しかし、クラウドサービス１２０は、ＩｏＴデバイス１１４及び他のエッジデバイス１１０により生成されたデータの急速に増加する量、種類、及び速度に対処するのに必ずしも好適でないことがある。例えば、クラウドベースの処理は、数ある例の中でも特に、時間的制約のあるデータ若しくは機密性の高いデータを処理する、又はネットワーク帯域幅の制約に直面した場合などの、特定の状況には理想的でないことがある。いくつかの実施形態において、クラウドサービス１２０は、クラウドサービスの性能を向上させるために、エッジデバイス１１０を用いて「エッジ」ベースの処理を活用することができる。エッジ処理とは、大量のデータを処理及び保管のためにクラウドに単に送り込むのではなく、（例えば、エッジデバイス１１０を用いて）特定のデータをネットワークエッジで、つまり、データが生成される場所の近くで処理することを含む手法である。特定のデータは依然として、より深い解析及び／又は長期保管などのために、必要に応じてクラウドに送信されてよい。エッジ処理は、（例えば、クラウドベースの処理が非効率的である、効果的でない、及び／又はセキュアでない場合に）クラウドベースの処理の短所を補完し、したがって、ＩｏＴデバイス１１４及び／又は他のエッジデバイス１１０により生成されるデータの増加する量、種類、及び速度への対処を向上させるのに用いられてよい。例えば、場合によっては、データを、クラウドではなくデータソースの近くで（例えば、ネットワークエッジにおいて）処理することで、性能を向上させることができ、及び／又はシステム故障若しくはシステム災害を回避することができる。エッジ処理は、ネットワーク帯域幅を節約することもでき、このことは、帯域幅の制約及び／又は限定されたネットワーク接続性に直面した場合に、特に有益となり得る。
【００２６】
いくつかの実施形態において、エッジベースの処理をクラウドサービス１２０に提供するエッジデバイス１１０は、集合的に「フォグ（ｆｏｇ）」と呼ばれることがあるが、これは、エッジデバイス１１０が「クラウド」をネットワークのエッジまで広げるように働き、したがって、ネットワークエッジ上に「フォグ」を形成するからである。いくつかの実施形態において、「フォグ」の中のデバイス１１０は、例えば、相互接続規格又はプロトコルを用いて、互いに接続及び／又は通信することができる。例えば、いくつかの実施形態において、デバイスの相互接続は、２０１５年１２月２３日にＯｐｅｎ  Ｃｏｎｎｅｃｔｉｖｉｔｙ  Ｆｏｕｎｄａｔｉｏｎ（商標）（ＯＣＦ）により公開された、ｏｐｅｎ  ｉｎｔｅｒｃｏｎｎｅｃｔ  ｃｏｎｓｏｒｔｉｕｍ（ＯＩＣ）標準規格１．０を用いて実装されてよく、これにより、デバイスが互いに検出及び接続することが可能となる。用いられ得る別の相互接続プロトコルは、「スマート」ホームオートメーション及び類似した配置において用いられるモノのインターネット（ＩｏＴ）デバイス向けのネットワーキングプロトコルであるＴｈｒｅａｄであり、これは、「Ｔｈｒｅａｄ  Ｇｒｏｕｐ」という名称の団体組織により開発された。例えば、数ある中でも特に、最適化リンク状態ルーティング（ＯＬＳＲ）プロトコル、又はモバイルアドホックネットワーキングへのより良いアプローチ（ｂｅｔｔｅｒ  ａｐｐｒｏａｃｈ  ｔｏ  ｍｏｂｉｌｅ  ａｄ−ｈｏｃ  ｎｅｔｗｏｒｋｉｎｇ：Ｂ．Ａ．Ｔ．Ｍ．Ａ．Ｎ．）を含む他の相互接続プロトコルも用いられてよい。
【００２７】
ネットワーク１５０は、コンピューティングシステム１００のコンポーネント間の通信を容易にするのに用いられてよい。例えば、エンドユーザデバイス１１２及びＩｏＴデバイス１１４などのエッジデバイス１１０は、互いに通信するために、及び／又は、１つ又は複数のリモートクラウドサービス１２０にアクセスするために、ネットワーク１５０を用いることができる。ネットワーク１５０には、任意の数又は任意の種類の通信ネットワークが含まれてよく、例えば、ローカルエリアネットワーク、ワイドエリアネットワーク、公共ネットワーク、インターネット、セルラーネットワーク、Ｗｉ−Ｆｉ（登録商標）ネットワーク、短距離ネットワーク（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）又はＺｉｇＢｅｅ（登録商標））、及び／又は任意の他の有線又は無線ネットワーク若しくは通信媒体が含まれる。
【００２８】
システム１００のコンピューティングデバイスのいずれか、全て、又はいくつかが、特定のオペレーティングシステムの実行を仮想化するように適合された仮想マシンと共に、Ｌｉｎｕｘ（登録商標）若しくは他のＵＮＩＸ（登録商標）ベースのオペレーティングシステム、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）Ｓｅｒｖｅｒ、ＭａｃＯＳ、Ａｐｐｌｅ  ｉＯＳ、Ｇｏｏｇｌｅ  Ａｎｄｒｏｉｄ（登録商標）、又は任意のカスタマイズされたオペレーティングシステム及び／若しくは独自のオペレーティングシステムを含む任意のオペレーティングシステムを実行するように適合されてよい。
【００２９】
図１は、複数の要素を含むか、又はそれらの要素と関連しているように説明されているが、図１のシステム１００の中に例示された全ての要素が、本開示のそれぞれの代替的な実施態様において利用されていなくてよい。さらに、図１の例に関連して説明される要素のうち１つ又は複数が、システム１００の外部に位置してよく、他の例では、特定の要素が、他の説明された要素のうち１つ又は複数、並びに例示された実施態様に説明されていない他の要素の中に、又はそれらの部分として含まれてよい。さらに、図１に例示された特定の要素が、他のコンポーネントと組み合わされてよく、また本明細書に説明されたこれらの目的に加えて、代替又は追加の目的のために用いられてよい。
［例示的な行列処理アーキテクチャ］
【００３０】
図２Ａ〜図２Ｃは、行列処理アーキテクチャの例示的な実施形態のブロック図を示す。
【００３１】
いくつかの実施形態において、本開示の全体にわたって説明される行列処理機能が、図２Ａ〜図２Ｃの行列処理アーキテクチャなどの行列処理アーキテクチャを用いて実装されてよい。図２Ａ〜図２Ｃの行列処理アーキテクチャなどの行列処理アーキテクチャは、図１のシステム１００及び／又はその関連コンポーネント（例えば、クラウドサービス１２０／データセンタサーバ、エッジデバイス１１０、行列処理ノード１３０）のうちいずれかを含む、本開示の全体にわたって説明されるものなどの、様々なシステム、デバイス、及び／又はコンポーネントに実装されるか、又はこれらに用いられてよい。いくつかの実施形態において、図２Ａ〜図２Ｃの行列処理アーキテクチャは、ニューラルネットワークにおいて、人工知能及び機械学習を実装するのに用いられてよい。図２Ａ〜図２Ｃに例示された行列処理アーキテクチャは、本開示の全体にわたって説明される行列処理機能を実行するための、単に１つの例示的な実施形態に過ぎない。他の実施形態が、異なる種類、異なる配置、及び／又は異なる数のコンポーネントを用いてよい。例えば、他の実施形態が、任意の数の行列処理チップ２２０、行列処理クラスタ２３０、行列処理ユニット（ＭＰＵ）２３４、高帯域幅メモリ（ＨＢＭ）モジュール２４０、及び／又はメモリリソースブロック（ＭＲＢ）２３８を含んでよい。さらに、図２Ａ〜図２Ｃの行列処理アーキテクチャの任意のコンポーネント（例えば、行列処理システム２００、行列処理チップ２２０、及び／又は行列処理クラスタ２３０のうち任意のコンポーネント）の全て又は一部が、別個の又は独立型のコンポーネント若しくはチップとして実装されてよく、あるいは様々なコンピュータコンポーネントを単一のチップに統合するシステムオンチップ（ＳｏＣ）などの、他のコンポーネント又はチップと統合されてよい。
【００３２】
図２Ａは、行列処理システム２００の例示的な実施形態のブロック図を示す。例示された実施形態において、行列処理システム２００には、ホストプロセッサ２６０、ホストメモリ２７０、行列処理リソース２１０、及び相互接続バス２８０が含まれている。
【００３３】
ホストプロセッサ２６０は、行列処理システム２００を制御及び／又は管理するように構成されてよい。例えば、いくつかの実施形態において、ホストプロセッサ２６０は、複雑な行列演算を実行するために、行列処理リソース２１０を用いることができる。ホストプロセッサ２６０は、行列処理システム２００の行列処理機能を制御及び／又は管理することができる任意の処理リソースであってよい。例えば、いくつかの実施形態において、ホストプロセッサ２６０は、図３及び図４のコンピュータプロセッサ３００又は４００をそれぞれ用いて実装されてよい。いくつかの実施形態において、ホストプロセッサ２６０は、行列処理リソース２１０に通信可能に結合されている別個の又は独立型のコンポーネントであってよい。あるいは、他の実施形態において、ホストプロセッサ２６０及び行列処理リソース２１０は、同じコンポーネント又はチップに統合されてよい。例えば、いくつかの実施形態において、ホストプロセッサ２６０及び行列処理リソース２１０を含む行列処理システム２００のコンポーネントが、システムオンチップ（ＳｏＣ）として実装されてよい。
【００３４】
ホストメモリ２７０は、揮発性メモリ及び／若しくは不揮発性メモリの任意の種類又は組み合わせを含んでよい。揮発性メモリの例には、様々な種類のランダムアクセスメモリ（ＲＡＭ）が含まれ、数ある例の中でも特に、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、同期型ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、及びスタティックランダムアクセスメモリ（ＳＲＡＭ）などが含まれる。不揮発性メモリに例には、数ある例の中でも特に、ディスクベースの記憶媒体（例えば、磁気及び／又は光記憶媒体）、固体ストレージ（例えば、プレーナ型又は３次元（３Ｄ）型のＮＡＮＤフラッシュメモリ又はＮＯＲフラッシュメモリを含む、任意の形態の永続的フラッシュメモリ）、３Ｄクロスポイントメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、及び／又は他の種類の不揮発性ランダムアクセスメモリ（ＲＡＭ）が含まれる。例えばホストメモリ２７０は、実行中に、コード及び／又はデータなどの、ホストプロセッサ２６０の情報を格納するのに用いられてよい。
【００３５】
相互接続バス２８０は、いくつかの実施形態において、ホストプロセッサ２６０及びホストメモリ２７０を行列処理リソース２１０に通信可能に結合するのに用いられてよい。相互接続バス２８０は、数ある例の中でも特に、ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ）、ユニバーサルシリアルバス（ＵＳＢ）、又はスモールコンピュータシステムインタフェース（ＳＣＳＩ）などの、任意の相互接続プロトコルを用いることができる。
【００３６】
行列処理リソース２１０は、行列演算を実行するように構成された任意の処理リソースを含んでよい。例えば、行列処理リソース２１０は、行列乗算演算、畳み込み演算、要素単位の行列演算（例えば、＋、×、／、＜、＞、＝＝）、次元シャッフル演算、及び／又はこれらの任意の組み合わせを実行するように構成されてよい。いくつかの実施形態において、行列処理リソース２１０は、行列演算を実行するために設計され最適化されている処理リソースを含んでよい。いくつかの実施形態において、行列処理リソース２１０は、複数のレベルの処理リソースで階層的に配置されてもよい。例えば、例示された実施形態において、行列処理リソース２１０は、複数の行列処理チップ２２０を含み、それぞれの行列処理チップ２２０の中に任意の処理リソースを含んでもよい。例えば、図２Ｂ及び図２Ｃに関連して後述されるように、それぞれの行列処理チップ２２０は、複数の高帯域幅メモリ（ＨＢＭ）モジュール２４０及び複数の行列処理クラスタ２３０を含んでよく、それぞれの行列処理クラスタ２３０は複数の行列処理ユニット２３４を含んでよい。したがって、いくつかの実施形態において、行列処理リソース２１０は複数の行列処理チップ２２０、複数の高帯域幅メモリ（ＨＢＭ）モジュール２４０、及び複数の行列処理クラスタ２３０をそれぞれの行列処理チップ２２０に含んでよく、及び／又は複数の行列処理ユニット２３４をそれぞれの行列処理クラスタ２３０に含んでよい。
【００３７】
行列処理チップ２２０は、例えば、行列演算を実行するように構成された任意のチップ又は他のコンポーネントであってよい。例えば、いくつかの実施形態において、行列処理チップ２２０は、ＰＣＩｅインタフェースなどの、任意の種類の相互接続インタフェースを用いてホストプロセッサ２６０に接続された周辺機器のカード又はチップであってよい。いくつかの実施形態において、行列処理チップ２２０は、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、及び／又は任意の他の種類の回路などの集積回路を用いて実装されてよい。例示された実施形態において、行列処理チップ２２０は循環配置で構成されており、通信チャネル２１５が隣接する行列処理チップ２２０の間に設けられている。いくつかの実施形態において、通信チャネル２１５は、隣接する行列処理チップ２２０の間に一方向の通信を提供してよい。しかし、他の実施形態において、通信チャネル２１５は、隣接する行列処理チップ２２０の間に双方向の通信を提供してよい。隣接する処理リソースの間で一方向の通信を用いる循環配置は、「単一循環」構成と呼ばれることがあり、隣接する処理リソースの間で双方向の通信を用いる循環配置は、「二重循環」構成と呼ばれることがある。
【００３８】
さらに、例示されていないが、いくつかの実施形態において、行列処理システム２００は、通信ネットワークを通じて通信するための通信インタフェースを含んでよい。例えば、いくつかの実施形態において、行列処理システム２００は、分散された行列演算を実行するために、１つ又は複数のリモート行列処理チップと、ネットワークを通じて通信することができる。
【００３９】
図２Ｂは、行列処理チップ２２０の例示的な実施形態のブロック図を示す。例示された実施形態において、行列処理チップ２２０には、コントローラ２２２、ホストインタフェース２２４、チップ間リンク２２５、高帯域幅メモリ（ＨＢＭ）モジュール２４０、及び行列処理クラスタ２３０が含まれる。
【００４０】
コントローラ２２２は、行列処理チップ２２０により実行される行列演算を制御及び／又は管理するように構成されてよい。いくつかの実施形態において、コントローラ２２２は、図２Ａのホストプロセッサ２６０、及び／又は図２Ｃの行列処理クラスタ２３０のマスタ制御ＣＰＵ（ＭＣＣ）２３２と共に、行列演算を制御及び／又は管理することができる。例えば、いくつかの実施形態において、ホストプロセッサ２６０、コントローラ２２２、及び／又はマスタ制御ＣＰＵ（ＭＣＣ）２３２は、行列演算又はコマンドを受信し、行列演算及び行列オペランドを行列処理クラスタ２３０及び高帯域幅メモリ（ＨＢＭ）モジュール２４０の全体に分散するように構成されてよい。いくつかの実施形態において、コントローラ２２２は、マイクロプロセッサ、集積回路、並びに／又は任意の他の種類の回路及び／若しくは処理ロジックであってよい。
【００４１】
ホストインタフェース２２４は、行列処理チップ２２０が図２Ａのホストプロセッサ２６０と通信することを可能にする通信インタフェースであってよい。いくつかの実施形態において、例えば、コントローラ２２２は、図２Ａのホストプロセッサ２６０と通信するために、ホストインタフェース２２４を用いることができる。ホストインタフェース２２４は、数ある例の中でも特に、ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ）、ユニバーサルシリアルバス（ＵＳＢ）、又はスモールコンピュータシステムインタフェース（ＳＣＳＩ）を含む、任意の種類の相互接続プロトコル又はインタフェースを用いることができる。
【００４２】
チップ間リンク（ＩＣＬ）２２５は、行列処理チップ２２０が他の行列処理チップと通信することを可能にすることができる。例えば、チップ間リンク２２５は、図２Ａの行列処理チップ２２０の間に通信チャネル２１５を実装するのに用いられてよい。チップ間リンク２２５は、例えば、行列処理チップ２２０が別の行列処理チップと通信することを可能にする任意の通信インタフェースであってよい。いくつかの実施形態において、行列処理チップ２２０は、複数のチップ間リンク２２５（例えば、１２個のチップ間リンク）を含んでよい。いくつかの実施形態において、チップ間リンク２２５は、１つ又は複数のシリアライザ／デシリアライザ（ＳｅｒＤｅｓ）インタフェースを用いて実装されてよい。ＳｅｒＤｅｓインタフェースは、データをシリアルからパラレルに、またその逆に変換する通信インタフェースであってよい。例えば、ＳｅｒＤｅｓインタフェースの送信機は、シリアル／パラレル変換器を含んでよく、ＳｅｒＤｅｓインタフェースの受信機は、パラレル／シリアル変換器を含んでよい。いくつかの実施形態において、行列処理チップ２２０は、別の行列処理チップへの接続ごとに複数のＳｅｒＤｅｓインタフェース（例えば、接続された行列処理チップのそれぞれの対の間に、４つのＳｅｒＤｅｓインタフェース）を用いることができる。
【００４３】
高帯域幅メモリ（ＨＢＭ）モジュール２４０は、行列処理チップ２２０に関連付けられた、行列オペランド及び他の行列データを格納するのに用いられるメモリコンポーネントであってよい。いくつかの実施形態において、高帯域幅メモリ（ＨＢＭ）モジュール２４０は、行列データを効率的に格納及び引き出すように設計されてよい。いくつかの実施形態において、高帯域幅メモリ（ＨＢＭ）モジュール２４０は、複数の次元のデータを格納及び引き出すように構成された多次元メモリコンポーネントであってよい。例えば、いくつかの実施形態において、高帯域幅メモリ（ＨＢＭ）モジュール２４０は、行及び列などの２次元のデータを格納及び引き出すように構成されたメモリコンポーネントであってよい。しかし他の実施形態は、任意の他の数の次元（例えば、１次元、３次元、４次元など）を用いたデータを、格納及び引き出すように構成されたメモリコンポーネントを用いることができる。例示された実施形態において、行列処理チップ２２０は、４つの高帯域幅メモリ（ＨＢＭ）モジュール２４０ａ〜ｄを含む。いくつかの実施形態において、高帯域幅メモリ（ＨＢＭ）モジュール２４０は、行列処理チップ２２０の行列処理クラスタ２３０によって共有されてよい。
【００４４】
行列処理クラスタ２３０は、数ある例の中でも特に、行列乗算、畳み込み、及び／又は次元シャッフルなどの行列演算を実行するように構成された処理リソースを含んでよい。いくつかの実施形態において、行列処理クラスタ２３０は、行列処理を並列に実行することで特定の行列演算を実行するのに集合的に用いられてよい。例示された実施形態において、行列処理チップ２２０は、１２個の行列処理クラスタ２３０ａ〜ｌを含む。さらに、例示された実施形態において、行列処理クラスタ２３０は、２次元のメッシュ型相互接続トポロジを用いて構成又は配置されている。行列処理クラスタ２３０の相互接続トポロジは、行列処理クラスタ２３０の間で循環型通信を容易にすることができる。さらに、他の実施形態は、任意の数及び／又は任意の配置の行列処理クラスタ２３０を含んでよい。
【００４５】
図２Ｃは、行列処理クラスタ２３０の例示的な実施形態のブロック図を示す。例示された実施形態において、行列処理クラスタ２３０には、マスタ制御ＣＰＵ（ＭＣＣ）２３２、行列処理ユニット（ＭＰＵ）２３４、スライスエンジン２３６、及びメモリリソースブロック（ＭＲＢ）２３８が含まれる。
【００４６】
マスタ制御ＣＰＵ（ＭＣＣ）２３２は、行列処理クラスタ２３０により実行される行列演算を制御及び／又は管理するように構成されてよい。いくつかの実施形態において、マスタ制御ＣＰＵ２３２は、マイクロプロセッサ、集積回路、並びに／又は任意の他の種類の回路及び／若しくは処理ロジックであってよい。いくつかの実施形態において、マスタ制御ＣＰＵ２３２は、図２Ａのホストプロセッサ２６０及び／又は図２Ｂのコントローラ２２２などの、別のコンポーネントから命令を受信することができる。命令に基づいて、マスタ制御ＣＰＵ２３２は次に、数ある例の中でも特に、行列乗算、畳み込み、及び／又は次元シャッフルなどの行列演算を実行するための行列処理ユニット２３４を用いることができる。例えば、マスタ制御ＣＰＵ２３２は、Ｃ＝Ａ×Ｂなどの行列乗算演算を実行する命令を受信することができる。命令は、行列ごとにハンドル又は識別子を含んでよく、メモリリソースブロック（ＭＲＢ）２３８に行列がどのように格納されることになるかを示すこともできる。行列Ａ及びＢは次に、一連のより小さい行列（例えば、３２×３２行列）に分割されてよい。行列演算は次に、出力行列Ｃが完全に計算されるまで、より小さい行列に対して実行されてよく、部分的結果がメモリリソースブロック（ＭＲＢ）２３８に格納されてよい。
【００４７】
行列処理ユニット（ＭＰＵ）２３４は、行列乗算、畳み込み、及び／又は次元シャッフルなどの行列演算を実行するように構成されてよい。いくつかの実施形態において、行列処理ユニット（ＭＰＵ）２３４は、マスタ制御ＣＰＵ（ＭＣＣ）２３２から受信したコマンドに基づいて行列演算を実行する。さらに、いくつかの実施形態において、それぞれの行列処理クラスタ２３０は、複数の行列処理ユニット（ＭＰＵ）２３４を含んでよい。例えば、例示された実施形態において、行列処理クラスタ２３０には、２つの行列処理ユニット（ＭＰＵ）２３４が含まれる。行列処理ユニット（ＭＰＵ）２３４は、行列乗算などの行列演算を小行列（例えば、３２×３２行列）に対して実行することが可能であってよい。場合によっては、行列処理ユニット（ＭＰＵ）２３４は、行列乗算演算を実行するように設計及び／又は最適化されてよい。行列処理ユニット（ＭＰＵ）２３４は、メモリリソースブロック（ＭＲＢ）２３８から行列オペランドを読み込むことができる。いくつかの実施形態において、行列処理ユニット（ＭＰＵ）２３４は、以下の算術演算、すなわち、行列乗算、単項行列演算、二項行列演算（加算（＋）、減算（−）、乗算（×）、除算（／）、ビット単位のＸＯＲ、ＡＮＤ、ＯＲ、論理及び算術の左シフト及び右シフト、比較（＞、＜、＞＝、＜＝、＝＝、！＝）など）、並びに、列方向、行方向、及び行列全体の演算（合計、最大値、及び最小値など）をサポートすることができる。
【００４８】
スライスエンジン２３６は、特定の行列演算の行列オペランドをより小さい部分行列にスライスするように構成されてよい。例えば、いくつかの実施形態において、マスタ制御ＣＰＵ（ＭＣＣ）２３２は、行列処理ユニット（ＭＰＵ）２３４用に、行列オペランドをより小さい部分行列に分割するために、スライスエンジン２３６を用いることができる。いくつかの実施形態において、スライスエンジン２３６は、畳み込み演算のために行列スライスを実行する畳み込みスライスエンジン（ＣＳＥ）を含んでよい。例えば、いくつかの実施形態において、畳み込みスライスエンジン（ＣＳＥ）は、畳み込み演算が行列乗算演算としてキャストされることを可能にする方式で行列オペランドをスライスすることができ、したがって、同じ処理ロジックが行列乗算演算及び行列畳み込み演算の両方を実行することが可能になる。さらに、いくつかの実施形態において、スライスエンジン２３６及び／又は関連畳み込みスライスエンジン（ＣＳＥ）は、行列の次元を並べ替える次元シャッフル演算を実行するのに用いられてよい。
【００４９】
メモリリソースブロック（ＭＲＢ）２３８は、行列オペランド及び他の行列データを格納するのに用いられる行列処理クラスタ２３０上のメモリコンポーネントであってよい。いくつかの実施形態において、メモリリソースブロック（ＭＲＢ）２３８は、行列データを効率的に格納及び引き出すように設計されてよい。いくつかの実施形態において、メモリリソースブロック（ＭＲＢ）２３８は、データを複数の次元で格納及び引き出すように構成された多次元メモリコンポーネントであってよい。例えば、いくつかの実施形態において、メモリリソースブロック（ＭＲＢ）２３８は、行及び列などの２次元で、データを格納及び引き出すように構成されたメモリコンポーネントであってよい。例示された実施形態において、行列処理クラスタ２３０には、１０個のメモリリソースブロック（ＭＲＢ）２３８が含まれる。しかし他の実施形態では、異なる数のメモリリソースブロック（ＭＲＢ）２３８が行列処理クラスタ２３０上に含まれてよい。いくつかの実施形態において、それぞれのメモリリソースブロック（ＭＲＢ）２３８は、特定のサイズの行列（例えば、２５６×５１２行列）を格納することができてよい。いくつかの実施形態において、メモリリソースブロック（ＭＲＢ）２３８は、特定の行列処理クラスタ２３０の行列処理ユニット（ＭＰＵ）２３４によって共有されてよい。
【００５０】
いくつかの実施形態において、図２Ａ〜図２Ｃの行列処理アーキテクチャは、本開示の全体にわたって説明される行列処理機能を実装するのに用いられてよい。例えば、行列処理システム２００は、利用可能な処理リソースを用いて１００％の処理効率を実現する分散手法を用いて、行列演算を実行するのに用いられてよい。例えば、いくつかの実施形態において、行列演算が、行列処理のために最適化されている複数の処理リソース２１０の全体にわたって分散されてよく、したがって、行列演算の継続期間全体にわたって処理リソース２１０の完全利用が可能になる。例えば、行列処理システム２００は、行列演算を実行するために設計され最適化されている複数の処理リソース２１０を含んでよい。いくつかの実施形態において、これらの処理リソース２１０は、単一循環配置又は二重循環配置で構成されてよい。さらに、処理リソース２１０は、複数のレベルの処理リソースで階層的に配置されてよい。例えば、いくつかの実施形態において、処理リソース２１０は、複数の行列処理チップ２２０、複数の高帯域幅メモリ（ＨＢＭ）モジュール２４０、及び複数の行列処理クラスタ２３０をそれぞれの行列処理チップ２２０に含んでよく、及び／又は複数の行列処理ユニット（ＭＰＵ）２３４をそれぞれの行列処理クラスタ２３０に含んでよい。この処理アーキテクチャによって、行列演算が複数の処理リソース２１０の全体に分散され、及び／又は、行列演算が１００％の処理効率で階層を処理することが可能となる。さらに、この処理アーキテクチャによって、行列演算が、並列に動作する可変数の処理リソース２１０の全体に効率的にスケーリングされるとともに、１００％の処理効率を実現することが可能となる。例えば、スケーリングが、特定の行列演算を実行するのに用いられる処理リソース２１０の数、例えば、行列処理システム２００又はサーバの数、それぞれの行列処理システム２００又はサーバ内の行列処理チップ２２０の数などを調整することで実現されてよい。
【００５１】
一例として、図２Ａ〜図２Ｃの行列処理アーキテクチャは、行列乗算演算及び／又は畳み込み演算を実装するのに用いられてよい。例えば、いくつかの実施形態において、行列オペランドを伝達するためのレイテンシが行列処理時間より少なくなる方式で、行列乗算演算が複数の処理リソース２１０の全体に分散されてよく、これにより、行列処理が実行されている間に、行列オペランドの伝達を完了させることが可能となる。例えば、特定の次元を有する行列オペランドを含む特定の行列演算（例えば、「細長い」行列オペランドを用いた行列乗算）の場合、行列オペランドにアクセスし且つこれを伝達するのに必要な時間は、実際の行列計算を実行するのに必要な時間を上回ることがあり、その結果、行列オペランドがメモリから取得され及び／又は処理リソース２１０に伝達されている間は、アイドル処理時間になる。例えば、単一循環構成（例えば、それぞれの処理リソース２１０が、いかなるときにでも、隣接する１つの処理リソース２１０だけから行列オペランド及びデータを取得する）では、これらの特定の種類の行列演算及び行列オペランドに対して、１００％の処理効率を実現できないことがある。しかし、処理リソース２１０の二重循環構成では、それぞれの処理リソースが、自身の両隣の処理リソース２１０から行列オペランド及びデータを同時に取得する間に、行列計算を実行することが可能となり、これにより、行列オペランドを伝達するためのレイテンシが著しく減少するので、あらゆるアイドル処理時間が回避される。例えば、特定の演算の通信レイテンシは、単一循環手法ではなく二重循環手法を用いる場合、半分に減らすことができる。このように、行列オペランド及び行列データを伝達するためのレイテンシは、行列処理時間によって完全にマスクされ、したがって、あらゆる無駄な時間又はアイドル処理時間を回避して、１００％の処理効率を実現することができる。したがって、大型の行列オペランド及び／又は特定の次元を有する行列オペランド、例えば、正方行列でも単一ベクトルでもない大型の行列オペランド（例えば、幅よりも高さがはるかに大きい「細長い」行列）などに対してさえも、行列演算（例えば、行列乗算又はＧＥＭＭ）が効率的に実行され得る。例えば、行列乗算が、２つの細長い行列を掛ける、細長い行列と正方行列を掛けるなどの場合でも、効率的に実行され得る。同様に、利用可能な処理リソースを用いて１００％の処理効率になる方式で、畳み込み演算が複数の処理リソース２１０の全体に分散されてよい。
【００５２】
一例として、行列演算又はコマンドが受信されると、行列演算は、行列処理システム２００の処理リソース２１０の全体に分散されてよい。例えば、行列オペランド（又は入力行列）は、利用可能な処理リソース２１０の数に基づいて区画分けされてよい。さらに、いくつかの実施形態において、これらの区画は、行列オペランドの行全体にわたってよく、及び／又は行列オペランドの任意の他の次元全体にわたってよい。次に、各区画が特定の処理リソース２１０に分散されてよい。それぞれの処理リソース２１０は次に、複数の部分行列演算を実行することができる。いくつかの実施形態において、複数の部分行列演算は、複数の段階で実行される。例えば、それぞれの処理リソース２１０は、特定の段階の部分行列演算を実行し、その間に同時に、隣接する処理リソース２１０との間で部分行列データを送信及び受信することができる。例えば、処理リソース２１０の単一循環構成では、それぞれの処理リソース２１０は、それぞれの隣接処理リソースとの間で部分行列データを送信又は受信する。同様に、処理リソース２１０の二重循環構成では、それぞれの処理リソース２１０は、それぞれの隣接処理リソース２１０との間で部分行列データを送信及び受信することができる。
【００５３】
次に、それぞれの処理リソース２１０は、次の部分行列演算に部分行列データを用いることができる。次に、行列演算の結果は、処理リソース２１０により集合的に実行される部分行列演算に基づいて、決定されてよい。
【００５４】
さらに、処理リソース２１０が階層的に配置されている場合、行列演算は階層方式で分散されてよい。例えば、行列オペランド（又は入力行列）は、利用可能な行列処理チップ２２０の数に基づいて、最初に区画分けされてよい。次に、各区画及び関連した部分行列演算が、特定の行列処理チップ２２０に分散されてよい。次に、特定の行列処理チップ２２０に分散された区画及び部分行列演算は、特定の行列処理チップ２２０の行列処理クラスタ２３０及び／又は高帯域幅メモリ（ＨＢＭ）モジュール２４０の全体に、同様に区画分けされ分散されてよい。例えば、特定の行列演算の場合、部分行列演算が、それぞれの行列処理クラスタ２３０に分散されてよい。あるいは、特定の行列演算の場合、部分行列演算が、様々な「論理処理ノード」（例えば、高帯域幅メモリ（ＨＢＭ）モジュール２４０と関連付けられた行列処理クラスタ２３０のグループ）の全体に分散されてよく、その後、特定の論理処理ノードのそれぞれの行列処理クラスタ２３０に分散されてよい。いくつかの実施形態において、行列処理クラスタ２３０（及び／又は論理処理ノード）は、行列処理チップ２２０と同様に循環的に構成されてよい。次に、特定の行列処理クラスタ２３０に分散された区画及び部分行列演算は、特定の行列処理クラスタ２３０の行列処理ユニット（ＭＰＵ）２３４の全体に、同様に区画分けされ分散されてよい。
［例示的なコンピュータプロセッサアーキテクチャ］
【００５５】
図３及び図４は、本明細書で開示される実施形態に従って用いられ得るコンピュータプロセッサの例示的な実施形態のブロック図を示す。例えば、図３及び図４に例示されるコンピュータプロセッサは、行列処理システムと関連したホストプロセッサ（例えば、図２Ａの行列処理システム２００のホストプロセッサ２６０）として、又は本開示の全体にわたって論じられる他のコンポーネント及び／若しくはデバイスと関連したプロセッサ（例えば、図１のシステム１００のコンポーネントと関連したプロセッサ）として用いられてよい。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯メディアプレーヤ、ハンドヘルドデバイス、及び様々な他の電子デバイス用の、当技術分野において知られている他のプロセッサ並びにシステム設計及び構成も好適である。概して、本明細書で開示されるようなプロセッサ及び／又は他の実行ロジックを組み込むことができる、膨大な種類のシステム又は電子デバイスが一般に好適である。
【００５６】
図３は、プロセッサ３００の例示的な実施形態のブロック図を示す。プロセッサ３００は、本開示の全体にわたって説明される実施形態に関連して用いられ得るハードウェアデバイスの種類の一例である。プロセッサ３００は、任意の種類のプロセッサであってよく、マイクロプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、ネットワークプロセッサ、マルチコアプロセッサ、シングルコアプロセッサ、又はコードを実行する他のデバイスなどがある。図３には１つのプロセッサ３００だけが例示されているが、代替的に処理要素が、図３に例示されたプロセッサ３００を１つより多く含んでよい。プロセッサ３００はシングルスレッドコアであってよく、少なくとも１つの実施形態では、プロセッサ３００は、コアごとに１つより多くのハードウェアスレッドコンテキスト（又は「論理プロセッサ」）を含むことができるという点で、マルチスレッドであってよい。
【００５７】
図３は、一実施形態による、プロセッサ３００に結合されたメモリ３０２も例示する。メモリ３０２は、当業者に知られているか、そうでなければ当業者が利用可能な、幅広い種類のメモリ（メモリ階層の様々なレイヤを含む）のうちいずれかであってよい。そのようなメモリ要素には、限定されないが、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）の論理ブロック、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、及び電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）が含まれてよい。
【００５８】
プロセッサ３００は、本明細書で詳述されるアルゴリズム、プロセス、又は動作と関連した任意の種類の命令を実行することができる。一般に、プロセッサ３００は要素又は項目（例えば、データ）を、ある状態又は状況から別の状態又は状況に変換することができる。
【００５９】
プロセッサ３００により実行される１つ又は複数の命令であり得るコード３０４は、メモリ３０２に格納されてよく、あるいは、ソフトウェア、ハードウェア、ファームウェア、若しくはこれらの任意の好適な組み合わせに、又は、必要に応じて特定のニーズに基づき、任意の他の内部若しくは外部のコンポーネント、デバイス、要素、若しくはオブジェクトに格納されてよい。１つの例では、プロセッサ３００は、コード３０４により示される命令のプログラムシーケンスに従ってよい。各命令はフロントエンドロジック３０６に入り、１つ又は複数のデコーダ３０８により処理される。デコーダはその出力として、あらかじめ定義されたフォーマットの固定幅マイクロオペレーションなどのマイクロオペレーションを生成してよく、又は他の命令、マイクロ命令、若しくは元のコード命令を反映する制御信号を生成してよい。フロントエンドロジック３０６は、レジスタリネーミングロジック及びスケジューリングロジックも含んでよく、これらは一般に、リソースを割り当て、実行命令に対応する演算をキューに入れる。
【００６０】
プロセッサ３００は、実行ユニット３１６ａ、３１６ｂ、３１６ｎなどのセットを有する実行ロジック３１４も含んでよい。いくつかの実施形態は、特定の機能又は機能のセットに専用の多数の実行ユニットを含んでよい。他の実施形態が１つの実行ユニットだけ、又は特定の機能を実行することができる１つの実行ユニットを含んでよい。実行ロジック３１４は、コード命令により指定された演算を実行する。
【００６１】
コード命令により指定された演算の実行が完了した後、バックエンドロジック３１８はコード３０４の命令をリタイアすることができる。１つの実施形態において、プロセッサ３００はアウトオブオーダ実行を可能にするが、命令のインオーダリタイアメントを必要とする。リタイアメントロジック３２０は、様々な既知の形態（例えば、リオーダバッファなど）を取ってよい。このように、プロセッサ３００は、コード３０４の実行中に、少なくともデコーダ、レジスタリネーミングロジック３１０により利用されるハードウェアレジスタ及びテーブル、並びに実行ロジック３１４により修正される任意のレジスタ（不図示）によって生成される出力に関して変換される。
【００６２】
図３には示されていないが、処理要素が、プロセッサ３００を搭載したチップ上に他の要素を含んでよい。例えば、処理要素が、プロセッサ３００と共にメモリ制御ロジックを含んでよい。処理要素は、Ｉ／Ｏ制御ロジックを含んでよく、及び／又は、メモリ制御ロジックと統合されたＩ／Ｏ制御ロジックを含んでよい。処理要素は、１つ又は複数のキャッシュも含んでよい。いくつかの実施形態において、不揮発性メモリ（フラッシュメモリ又はヒューズなど）も、プロセッサ３００を搭載したチップ上に含まれてよい。
【００６３】
図４は、マルチプロセッサ４００の例示的な実施形態のブロック図を示す。図４に示されるように、マルチプロセッサシステム４００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続４５０を介して結合された第１のプロセッサ４７０及び第２のプロセッサ４８０を含む。いくつかの実施形態において、プロセッサ４７０及び４８０のそれぞれは、図３のプロセッサ３００の何らかのバージョンであってよい。
【００６４】
統合メモリコントローラ（ＩＭＣ）ユニット４７２及び４８２をそれぞれ含むプロセッサ４７０及び４８０が示されている。プロセッサ４７０は、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース４７６及び４７８も含み、同様に、第２のプロセッサ４８０はＰ−Ｐインタフェース４８６及び４８８を含む。プロセッサ４７０、４８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース４５０を介し、Ｐ−Ｐインタフェース回路４７８、４８８を用いて情報を交換することができる。図４に示されるように、ＩＭＣ４７２及び４８２は、プロセッサをそれぞれのメモリに、すなわちメモリ４３２及びメモリ４３４に結合し、これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【００６５】
プロセッサ４７０、４８０はそれぞれ、個々のＰ−Ｐインタフェース４５２、４５４を介し、ポイントツーポイントインタフェース回路４７６、４９４、４８６、４９８を用いて、チップセット４９０と情報を交換することができる。チップセット４９０は任意で、高性能インタフェース４３９を介してコプロセッサ４３８と情報を交換することができる。１つの実施形態において、コプロセッサ４３８は、例えば、高スループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、行列プロセッサなどの専用プロセッサである。
【００６６】
共有キャッシュ（不図示）が、どちらかのプロセッサに含まれても、又は両方のプロセッサの外側に含まれてもよく、それでもＰ−Ｐ相互接続を介してプロセッサと接続されており、これにより、プロセッサが低電力モードに入っている場合に、どちらか又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
【００６７】
チップセット４９０は、インタフェース４９６を介して第１のバス４１６に結合されてよい。１つの実施形態において、第１のバス４１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、又はＰＣＩエクスプレスバス若しくは別の第３世代Ｉ／Ｏ相互接続バスなどのバスであってよいが、本開示の範囲はそのように限定されていない。
【００６８】
図４に示されるように、様々なＩ／Ｏデバイス４１４が、第１のバス４１６を第２のバス４２０に結合するバスブリッジ４１８と共に、第１のバス４１６に結合されてよい。１つの実施形態において、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィックスアクセラレータ又はデジタル信号処理（ＤＳＰ）ユニットなど）、行列プロセッサ、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサなどの、１つ又は複数の追加のプロセッサ４１５が第１のバス４１６に結合されている。１つの実施形態において、第２のバス４２０はローピンカウント（ＬＰＣ）バスであってよい。様々なデバイスが第２のバス４２０に結合されてよく、１つの実施形態において、それらのデバイスには、例えば、キーボード及び／又はマウス４２２、通信デバイス４２７、並びに命令／コード及びデータ４３０を含み得るディスクドライブ又は他の大容量ストレージデバイスなどのストレージユニット４２８が含まれる。さらに、オーディオＩ／Ｏ４２４が第２のバス４２０に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図４のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバス又は他のそのようなアーキテクチャを実装してよい。
【００６９】
図４の任意のコンポーネントのうち全て又は一部が、別個の又は独立型のコンポーネント又はチップとして実装されてよく、あるいは、様々なコンピュータコンポーネントを単一のチップに統合するシステムオンチップ（ＳｏＣ）などの、他のコンポーネント又はチップと統合されてよい。
【００７０】
本明細書で開示されるメカニズムの実施形態が、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。特定の実施形態が、少なくとも１つのプロセッサ、ストレージシステム（揮発性及び不揮発性のメモリ及び／又はストレージ要素を含む）、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを備えるプログラマブルなシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
【００７１】
図４に例示されたコード４３０などのプログラムコードは、本明細書で説明される機能を実行して出力情報を生成する命令を、入力するように適用されてよい。出力情報は、１つ又は複数の出力デバイスに既知の方式で適用されてよい。本出願の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサなどのプロセッサを有するあらゆるシステムを含む。
【００７２】
プログラムコードは、処理システムと通信するために、高水準手続き型プログラミング言語又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要であれば、アセンブリ言語又は機械語でも実装されてよい。つまり、本明細書で説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されていない。いずれの場合でも、言語は、コンパイラ型言語又はインタプリタ型言語であってよい。
【００７３】
少なくとも１つの実施形態の１つ又は複数の態様が、機械可読媒体に格納された、プロセッサ内の様々なロジックを表す代表的な命令によって実装されてよく、その命令は、機械により読み出された場合、本明細書で説明される技術を実行するロジックを機械に作らせる。そのような表現は「ＩＰコア」として知られており、有形の機械可読媒体に格納され、実際にロジック又はプロセッサを作る製造機械に読み込むために様々な顧客又は製造施設に供給されてよい。
【００７４】
そのような機械可読記憶媒体は、限定されないが、機械又は装置により製造又は形成された非一時的で有形の構成をした物品を含んでよく、これらの物品には、ハードディスク、フロッピ（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、及び光磁気ディスクを含む任意の他の種類のディスク、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）やスタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、及び相変化メモリ（ＰＣＭ）などの半導体デバイス、磁気カード若しくは光カード、又は電子命令を格納するのに好適な任意の他の種類の媒体などの記憶媒体が含まれる。
【００７５】
したがって、本開示の実施形態は非一時的で有形の機械可読媒体も含み、その媒体には命令が含まれており、又はハードウェア記述言語（ＨＤＬ）などの設計データが含まれており、ＨＤＬによって、本明細書で説明される構造、回路、装置、プロセッサ、及び／又はシステムの特徴が定義される。そのような実施形態は、プログラム製品とも呼ばれることがある。
［プログラマブルな行列処理エンジン］
【００７６】
図５は、プログラマブルな行列処理エンジン５００の例示的な実施形態を示す。いくつかの実施形態において、行列処理エンジン５００は、図２Ａ〜図２Ｃの行列処理アーキテクチャなどの行列処理アーキテクチャにより実装されてよい。例えば、いくつかの実施形態において、行列処理エンジン５００は、行列処理チップ上の行列処理クラスタ（例えば、図２Ｂ及び図２Ｃの行列処理チップ２２０の行列処理クラスタ２３０）により実装されてよい。これらの実施形態では、特定の行列処理クラスタが、その関連した行列処理エンジン５００を用いて、（例えば、本開示の全体にわたって説明されるような）複数の行列処理リソースの全体に分散された、特定の行列演算と関連付けられた部分行列演算などの、行列ベースの処理及び演算を実行してよい。
【００７７】
例示された実施形態において、行列処理エンジン５００には、読み出しエンジン５３５、スライスエンジン５３６、及び出力エンジン５３７が含まれ、これらについては、下記にさらに論じられている。例示された実施形態は、行列処理エンジン５００を用いて行列演算を実行する場合に関与し得る、基礎的な行列処理アーキテクチャの様々なコンポーネントも示す。例えば、例示された実施形態には、高帯域幅メモリ（ＨＢＭ）モジュール５４０、マスタ制御ＣＰＵ（ＭＣＣ）５３２、行列処理ユニット（ＭＰＵ）５３４、メモリリソースブロック（ＭＲＢ）５３８、及び行列ルーチンメモリ５３９が示されている。例示された実施形態において、例えば、これらの様々なコンポーネントは行列処理エンジン５００に重ね合わされており、下記にさらに説明されるように、これらのコンポーネントが行列処理エンジン５００によって、いつどのように用いられるかを示している。
【００７８】
ＨＢＭモジュール５４０は、大量の行列データを効率的に格納及び引き出すように設計された高帯域幅メモリ（ＨＢＭ）モジュールであってよい。いくつかの実施形態において、例えば、ＨＢＭモジュール５４０は、行列処理チップ上の高帯域幅メモリ（ＨＢＭ）モジュール（例えば、図２Ｂの行列処理チップ２２０のＨＢＭモジュール２４０）であってよい。
【００７９】
ＭＣＣ５３２は、行列演算を制御及び／又は管理するのに用いられるマスタ制御ＣＰＵ（ＭＣＣ）であってよい。いくつかの実施形態において、例えば、ＭＣＣ５３２は、特定の行列処理クラスタ上のマスタ制御ＣＰＵ（例えば、図２Ｃの行列処理クラスタ２３０のＭＣＣ２３２）であってよい。これらの実施形態において、例えば、ＭＣＣ５３２は、その特定のクラスタ上で実行される行列演算を制御及び／又は管理するのに用いられてよい。
【００８０】
ＭＰＵ５３４は、行列演算を実行するのに用いられる行列処理ユニット（ＭＰＵ）であってよい。いくつかの実施形態において、例えば、ＭＰＵ５３４は、特定の行列処理クラスタ上の行列処理ユニット（例えば、図２Ｃの行列処理クラスタ２３０のＭＰＵ２３４）であってよい。例えば、いくつかの実施形態において、行列処理クラスタは、行列演算を実行するために、複数の行列処理ユニット（ＭＰＵ）を含んでよい。例えば、例示された実施形態は、２つの行列処理ユニット（ＭＰＵ）５３４ａ及び５３４ｂを示す。いくつかの実施形態において、ＭＰＵ５３４は、マスタ制御ＣＰＵ（ＭＣＣ）５３２からのコマンド又は命令に基づいて、行列演算を実行することができる。
【００８１】
メモリリソースブロック（ＭＲＢ）５３８は、行列データを効率的に格納及び引き出すように設計されたメモリコンポーネントであってよい。いくつかの実施形態において、例えば、ＭＲＢ５３８は、特定の行列処理クラスタ上のメモリリソースブロック（例えば、図２Ｃの行列処理クラスタ２３０のメモリリソースブロック２３８）であってよい。これらの実施形態において、例えば、ＭＲＢ５３８は、特定のクラスタ上で実行される行列演算と関連した行列データを格納及び引き出すのに用いられてよい。
【００８２】
行列ルーチンメモリ５３９は、行列ルーチンを格納するのに用いられるメモリコンポーネントであってよい。例えば、行列ルーチンは、行列プロセッサにより実行されると、特定の行列演算を実行するように設計されている、行列プロセッサ用のプログラマブルなルーチンであってよい。例えば、行列ルーチンには、特定の行列プロセッサによりサポートされ、その行列プロセッサによって実行されると所望の行列演算を実行するように設計された、一連の命令及び／又はコマンドが含まれてよい。いくつかの実施形態において、例えば、行列プロセッサは、様々な基本的演算を実行するための命令及び／又はコマンドのセットをサポートするように設計されてよい。例えば、いくつかの実施形態において、行列プロセッサは、データの処理、様々な算術演算の実行、並びに／又は、様々な命令及び演算に合った行列オペランド及び出力の識別のための命令をサポートすることができる。
【００８３】
例えば、特定の命令が、異なる位置との間でデータ（例えば、行列データ）を読み出す、書き込む、及び／又はコピーする、行列データをスライスする、行列データを取り出す、行列データを並べ替えるなどの、データの処理に用いられてよい。
【００８４】
別の例として、特定の命令が、以下の演算、すなわち、行列乗算、畳み込み、単項行列演算、二項行列演算（加算（＋）、減算（−）、乗算（×）、除算（／）、ビット単位のＸＯＲ、ＡＮＤ、ＯＲ、論理及び算術の左シフト及び右シフト、比較（＞、＜、＞＝、＜＝、＝＝、！＝）など）、並びに、列方向、行方向、及び行列全体の演算（合計、最大値、及び最小値など）のいずれかを含む特定の算術演算を実行するのに用いられてよい。
【００８５】
さらに、特別な「レジスタオペランド」（ＲＥＧＯＰ）命令が、サポートされた様々な命令及び演算の行列オペランド及び出力を識別するのに用いられてよい。レジスタオペランド命令は、例えば、オペランドのサイズ及び位置、並びに特定の命令又は演算の出力を指定するのに用いられてよい。例えば、いくつかの実施形態において、レジスタオペランド命令が、特定のオペランド又は出力と関連付けられている高帯域幅メモリ（ＨＢＭ）モジュール又はメモリリソースブロック（ＭＲＢ）において位置を識別するのに用いられてよい。一例として、基本的な行列乗算演算が、それぞれのオペランドの位置及び出力の位置を識別するＲＥＧＯＰ命令を用いてプログラムされることがあり、行列乗算演算を実行する命令が後に続く。
【００８６】
このように、行列プロセッサによってサポートされる基本的な命令及び／又はコマンドは、分散した行列乗算及び／又は畳み込み演算、次元シャッフル演算、再構成（ｒｅｓｈａｐｅ）演算などの、より複雑な行列演算用の行列ルーチンをプログラムするのに用いられ得る。
【００８７】
行列ルーチンメモリ５３９は、行列処理チップ、行列処理クラスタ、及び／又はホストコンピューティングシステムなどの、行列処理アーキテクチャの任意の部分に実装されてよい。いくつかの実施形態において、例えば、行列処理チップ（例えば、図２Ｂの行列処理チップ２２０）は、その行列処理チップ上のそれぞれのクラスタにアクセス可能な行列ルーチンメモリ５３９を含んでよい。別の例として、いくつかの実施形態において、行列処理クラスタ（例えば、図２Ｃの行列処理クラスタ２３０）は、それ自身の行列ルーチンメモリ５３９を含んでよい。さらに別の例として、いくつかの実施形態において、行列処理アーキテクチャのホストコンピューティングシステムが、その関連した行列処理リソースにアクセス可能な行列ルーチンメモリ５３９を含んでよい（例えば、図２Ａにおいて、行列処理システム２００のホストメモリ２７０は、行列処理リソース２１０にアクセス可能な行列ルーチンメモリを含んでよい）。
【００８８】
さらに、行列ルーチンメモリ５３９は、データを格納することができる任意のコンポーネント又はメカニズムであってよく、それには、ランダムアクセスメモリ（ＲＡＭ）（例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、同期型ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ））、フラッシュベースのメモリ、リードオンリメモリ（ＲＯＭ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）の論理ブロック、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、及び／又は前述のものからなる任意の好適な組み合わせなどの、揮発性メモリ及び／又は不揮発性メモリの任意の種類又は組み合わせが含まれる。
【００８９】
一例として、いくつかの実施形態において、行列ルーチンメモリ５３９は、ランダムアクセスメモリ（例えば、ＳＲＡＭ）を用いて行列処理チップ上に実装されてよい。これら実施形態において、例えば、行列ルーチンは、ホストコンピューティングシステム（例えば、図２Ａのホストプロセッサ２６０）によって行列ルーチンメモリ５３９に読み込まれてよい。例えば、ホストコンピューティングシステムが、相互接続インタフェース（例えば、ＰＣＩｅインタフェース）を介して、行列ルーチンを行列処理チップに転送してよく、行列処理チップは次に、行列ルーチンをその関連した行列ルーチンメモリ５３９に格納してよい。いくつかの実施形態において、ホストコンピューティングシステムのソフトウェアドライバが、行列ルーチンを読み込むのに用いられてよい。さらに、いくつかの実施形態において、任意の既存の行列ルーチンが、システム起動中に行列ルーチンメモリ５３９に読み込まれてよく、任意の追加の行列ルーチンが、必要に応じて、システム起動後に続いて読み込まれてよい。
【００９０】
示された例において、行列処理エンジン５００は、複数の行列演算５０１及び５０２を並列に実行する。例えば、上述されたように、いくつかの実施形態において、行列処理エンジン５００は特定の行列処理クラスタ上に実装されてよく、特定の行列処理クラスタは複数のＭＰＵ５３４を含んでよい。示された例において、行列処理エンジン５００は、２つのＭＰＵである５３４ａ〜ｂと共にクラスタ上に実装されている。したがって、行列処理エンジン５００は、２つの行列演算５０１及び５０２を、それぞれのＭＰＵ５３４を用いて並列に実行することができる。示された例は、第１の行列演算５０１及び第２の行列演算５０２の両方に対する、行列処理エンジン５００の制御フローを示す。
【００９１】
示された例において、第１の行列演算５０１の制御フローは、行列処理エンジン５００の読み出しエンジン５３５で始まる。読み出しエンジン５３５は最初に、行列データ（例えば、行列演算５０１のオペランドと関連付けられた行列データ）を行列処理チップの対応するＨＢＭモジュール５４０ａから引き出すことができ、読み出しエンジン５３５は次に、読み出しエンジン５３５と関連した特定のクラスタの特定のＭＲＢ５３８ａに、その行列データを格納することができる。例えば、上述されたように、ＨＢＭモジュール５４０ａは、特定の行列処理チップ上の高帯域幅メモリモジュール（例えば、特定の行列処理チップの行列処理クラスタにより共有されたメモリ）であってよく、ＭＲＢ５３８は、特定の行列処理クラスタ上のローカルメモリリソースブロックであってよい。さらに、いくつかの実施形態において、読み出しエンジン５３５は、ＨＢＭ５４０及びＭＲＢ５３８にデータを格納し、且つそれらからデータを引き出すために、自身のそれぞれのクラスタ上のマスタ制御ＣＰＵ（ＭＣＣ）５３２を用いることができる。
【００９２】
スライスエンジン５３６ａは次に、行列演算５０１と関連付けられた特定の行列オペランドを取り出すために、ＭＲＢ５３８ａに格納された行列データを「スライス」することができる。例えば、場合によっては、関連した行列オペランドは、ＭＲＢ５３８ａに格納された行列データのサブセットだけを含んでよく、及び／又は、この行列オペランドは、ＭＲＢ５３８ａに格納された行列データの中に隣接して配置されてなくてよい。したがって、スライスエンジン５３６ａは、ＭＲＢ５３８ａに格納された特定「スライス」の行列データ又は特定部分の行列データを取り出すことができ、その後、それぞれの行列オペランドを形成するためにこれらのスライスを配置することができる。例えば、示された例において、行列演算５０１は畳み込み演算と関連付けられ、したがって、スライスエンジン５３６ａが、ＭＲＢ５３８ａに格納された行列データから、スライスされた行列オペランド及びフィルタを取り出すのに用いられる。次に、スライスされた行列オペランド及びフィルタは、ＭＲＢ５３８ｂ及び５３８ｃにそれぞれ格納される。場合によっては、スライスエンジン５３６ａにより用いられる特定のスライス手法は、行列演算５０１の種類、利用可能な処理リソースの数、オペランドのサイズなどを含む、様々な要因に依存し得る。さらに、いくつかの実施形態において、特定の演算のためにスライスエンジン５３６ａにより実行される特定のスライシングは、スライスエンジン５３６ａによりサポートされる命令のセットを用いてプログラムされてよく、及び／又は定義されてよい。
【００９３】
次に、出力エンジン５３７は、特定の行列演算５０１に対する結果を計算するのに用いられてよい。例えば、出力エンジン５３７は、スライスエンジン５３６ａにより生成された行列オペランド（例えば、ＭＲＢ５３８ｂ及び５３８ｃに格納された行列オペランド）を用いて、適切な行列演算５０１を実行することができる。例えば、いくつかの実施形態において、出力エンジン５３７は最初に、特定の行列演算５０１に対応する関連した行列ルーチンを識別することができ、出力エンジン５３７は次に、行列ルーチンメモリ５３９からその行列ルーチンを取得することができる。いくつかの実施形態において、出力エンジン５３７は、自身のそれぞれのクラスタ上のマスタ制御ＣＰＵ（ＭＣＣ）５３２を用いて、行列ルーチンメモリ５３９から行列ルーチンを引き出すことができる。
【００９４】
出力エンジン５３７は次に、適切であれば、行列ルーチンにより用いられる特定の情報又はフィールドを指定するか、又は供給することができる。例えば、いくつかの実施形態において、行列ルーチンの特定のオペランドのサイズ及び／又は位置などの、行列ルーチンの特定の情報及び／又はフィールドは、不十分であっても指定されていなくてもよい。したがって、いくつかの実施形態において、出力エンジン５３７は、特定の行列ルーチンのあらゆる残りの情報及び／又はフィールド（例えば、行列オペランドのサイズ及び／又は位置）を指定するか、又は供給するために、ＭＣＣ５３２を用いることができる。
【００９５】
出力エンジン５３７は次に、特定の行列ルーチンを実行することができる。例えば、出力エンジン５３７は、特定の行列ルーチンに関連付けられた、プログラムされた命令を実行するために、ＭＣＣ５３２及び／又はＭＰＵ５３４ａを用いることができる。ＭＣＣ５３２は、例えば、命令により指定された、データの読み出し及び書き込み、他のリソースとの通信などの特定のタスクを実行するのに用いられてよい。ＭＰＵ５３４ａは、例えば、命令により指定された特定の算術演算を実行するのに用いられてよい。さらに、場合によっては、特定の演算が必要な全データ（例えば、特定の行列オペランドの全データ）に対して実行されて完了するまで、特定の行列ルーチンが繰り返し実行されてよく、又はループ化されてよい。
【００９６】
出力エンジン５３７は次に、行列ルーチンの出力又は結果を、行列ルーチンの実行に用いられるクラスタの特定のＭＲＢ５３８ｄに格納することができる。場合によっては、出力エンジン５３７は次に、ＭＲＢ５３８ｄに格納された出力を、行列処理アーキテクチャの別のコンポーネントに提供することができる。例えば、場合によっては、行列演算５０１が、複数の処理リソースの全体に分散された大型の行列演算と関連した部分行列演算であってよく、したがって、行列演算５０１の出力は分散された大型の演算と関連付けられた部分的結果であってよい。さらに、部分行列演算５０１の出力は、分散された行列演算に関与する他の処理リソースによって必要とされることがある。したがって、出力エンジン５３７は、例えば、さらなる処理及び／又は保管のために、部分行列演算５０１の出力を適切なリソースに提供することができる。場合によっては、適切なリソースは、実行中の行列演算の種類、関連した行列ルーチンの実装、処理リソースの数及び可用性などを含む状況に基づいて、変わることがある。例えば、場合によっては、行列演算の特定の処理及び／又は出力のデスティネーションは、関連した行列ルーチンによってプログラムされてよく、又は定義されてよい。さらに、いくつかの実施形態において、出力エンジン５３７は、部分行列演算５０１の出力を適切なデスティネーションに提供するために、自身のそれぞれのクラスタ上のマスタ制御ＣＰＵ（ＭＣＣ）５３２を用いることができる。
【００９７】
場合によっては、例えば、出力エンジン５３７は、部分行列演算５０１の出力（例えば、ＭＲＢ５３８ｄに格納された出力）を、分散」された行列演算の部分的結果を格納するのに用いられる特定のデスティネーションに提供することができる。例えば、分散された行列演算の場合、それぞれの処理リソースにより決定されたそれぞれの部分的結果は、行列処理チップの特定のＨＢＭ５４０ｂなどの、特定のメモリコンポーネント上で統合されてよい。例えば、場合によっては、行列処理チップのそれぞれのクラスタにより決定されたそれぞれの部分的結果は、行列処理チップの特定のＨＢＭ５４０ｂ上で統合されてよい。さらに、これらの部分的結果は、行列演算の完全な結果を集合的に形成する特定の配置を用いて、ＨＢＭ５４０ｂに格納されてよい。
【００９８】
別の例として、場合によっては、出力エンジン５３７は、部分行列演算５０１の出力（例えば、ＭＲＢ５３８ｄに格納された出力）をＭＰＵ５３４ａにフィードバックして、例えば、ＭＰＵ５３４ａがその出力を次の部分的演算のオペランドとして用いることを可能にすることができる。場合によっては、例えば、分散された行列演算のある段階における部分的演算の出力は、分散された行列演算の別の段階の部分的演算に、入力又はオペランドとして用いられてよい。
【００９９】
別の例として、場合によっては、出力エンジン５３７は、部分行列演算５０１の出力（例えば、ＭＲＢ５３８ｄに格納された出力）を、同じ行列処理チップ上の別の行列処理クラスタなどの、別の行列処理リソースに、又は完全に別の行列処理チップに提供することができる。例えば、場合によっては、分散された行列演算は、行列処理チップの複数のクラスタの全体に分散されてよく、及び／又は、複数の行列処理チップの全体に分散されてよい。さらに、場合によっては、特定の行列処理リソースにより実行される部分的演算の出力は、異なる処理リソースにより実行される別の部分的演算のオペランドとして用いられてよい。
【０１００】
示された例において、第２の行列演算５０２は、第１の行列演算５０１と並列に実行されてよい。さらに、第２の行列演算５０２の制御フローは、上述された第１の行列演算５０１用の制御フローと類似してよい。しかし、第２の行列演算５０２は、（例えば、異なる行列ルーチンを用いて実行され）異なる行列オペランド及び結果を有し、ＨＢＭ５４０及び／又はＭＲＢ５３８の異なるメモリ位置を用いる、異なる行列演算であってよく、また第２の行列演算５０２は、異なるＭＰＵ５３４ｂ及び関連したスライスエンジン５３６ｂを用いて実行されてよい。
【０１０１】
図６はプログラマブルな行列処理の例示的な実施形態のフローチャート６００を示す。フローチャート６００は、いくつかの実施形態において、本開示の全体にわたって説明されるコンポーネント（例えば、図２Ａ〜図２Ｃの行列処理アーキテクチャ、及び／又は図５のプログラマブルな行列処理エンジン）により実装されてよい。
【０１０２】
フローチャートは、行列演算を実行するコマンドを受信することにより、ブロック６０２で始まってよい。行列演算は、１つ又は複数の行列オペランドに対する演算を含み得る。例えば、行列演算は、要素単位の行列演算、行列乗算、畳み込み、及び／又はそのような演算のあらゆる組み合わせを含む、あらゆる行列ベースの算術演算を含んでよい。
【０１０３】
さらに、いくつかの実施形態において、行列演算は、コンピュータビジョン人工知能及び機械学習機能を人工ニューラルネットワークに実装するのに用いられてよい。例えば、いくつかの実施形態において、ブロック６０２の行列演算は、人工ニューラルネットワーク内の、前方伝搬演算、後方伝搬演算、及び／又は荷重更新演算などの演算と関連付けられてよい。
【０１０４】
フローチャートは次に、ブロック６０４に進み、行列データをメモリから取得してよい。行列データは、例えば、行列演算の１つ又は複数の行列オペランドと関連付けられてよい。いくつかの実施形態において、行列データは、多次元メモリから取得されてよい。多次元メモリは、例えば、複数の次元（例えば、２次元）の行列データを効率的に格納及び引き出すように設計されたメモリコンポーネントであってよい。いくつかの実施形態において、行列データは、１つ又は複数の命令を実行し、多次元メモリの１つ又は複数のメモリ位置から行列データを取得することで取得されてよい。
【０１０５】
次に、フローチャートはブロック６０６に進み、行列オペランドを行列データから取得してよい。いくつかの実施形態において、例えば、行列オペランドは、行列データをスライスして、行列オペランドを行列データから取り出すことで取得されてよい。さらに、いくつかの実施形態において、行列オペランドは、１つ又は複数の命令を実行して、行列オペランドを行列データからスライスするか、又は取り出すことで取得されてよい。
【０１０６】
次に、フローチャートはブロック６０８に進み、行列演算に関連付けられた行列ルーチンを識別してよい。例えば、行列ルーチンは、行列プロセッサにより実行されると、特定の行列演算を実行するように設計されている、行列プロセッサ用のプログラマブルなルーチンであってよい。例えば、行列ルーチンには、特定の行列プロセッサによりサポートされ、その行列プロセッサによって実行されると所望の行列演算を実行するように設計された、一連の命令及び／又はコマンドが含まれてよい。いくつかの実施形態において、例えば、行列プロセッサは、様々な基本的な行列演算を実行するための命令及び／又はコマンドのセットをサポートするように設計されてよい。例えば、行列プロセッサは、数ある例の中でも特に、行列オペランドのメモリ位置を識別し、行列オペランドをメモリから取得し、及び／又は行列オペランドに対して特定の算術演算又は計算を実行するための、命令及び／又はコマンドを含んでよい。このように、行列プロセッサによりサポートされる基本的な命令及び／又はコマンドは、より複雑な行列演算の行列ルーチンをプログラムするのに用いられ得る。
【０１０７】
いくつかの実施形態において、行列ルーチンメモリが、行列ルーチンを格納するのに用いられてよく、行列ルーチンは、必要に応じて、行列ルーチンメモリから引き出されてよい。例えば、所望の行列演算を実行するために、対応する行列ルーチンが最初に、行列ルーチンメモリから取得されてよい。しかし、場合によっては、特定の行列ルーチンが行列ルーチンメモリにまだ格納されていない場合がある。したがって、特定の行列ルーチンは、行列ルーチンメモリ上に読み込まれる必要があり得る。したがって、場合によっては、特定の行列ルーチンが最初に、ホストコンピューティングシステムから取得されてよく、次に行列ルーチンメモリに格納されてよい。
【０１０８】
次に、フローチャートはブロック６１０に進み、行列ルーチンを実行してよい。いくつかの実施形態において、例えば、行列ルーチンは、１つ又は複数の行列オペランドを用いで、行列プロセッサで実行されてよい。次に、フローチャートはブロック６１２に進み、行列プロセッサにより実行された行列ルーチンに基づいて、行列演算の結果を取得してよい。例えば、場合によっては、特定の行列ルーチンは、行列プロセッサにより実行された一連の命令及び／又はコマンドにより決定された結果を返してよい。
【０１０９】
この時点で、フローチャートは完了してよい。しかし、いくつかの実施形態において、フローチャートは再開してよく、及び／又は特定のブロックが繰り返されてよい。例えば、いくつかの実施形態において、フローチャートは、ブロック６０２で再開し、コマンドを引き続き受信及び処理して行列演算を実行することができる。
【０１１０】
図のフローチャート及びブロック図は、本開示の様々な態様によるシステム、方法、及びコンピュータプログラム製品に関する可能な実施態様のアーキテクチャ、機能、及び動作を例示している。この点に関して、フローチャート又はブロック図の各ブロックは、モジュール、セグメント、又はコードの一部を表してよく、ここには、指定された論理機能を実装するための１つ又は複数の実行可能な命令が含まれている。いくつかの代替的な実施態様において、ブロックで示された機能は、図に示された順序通りに行われなくてよいことにも留意されたい。例えば、連続して示されている２つのブロックが、実際には、実質的に同時に実行されてよく、又はそれらのブロックが、関与する機能に応じて、逆の順序で若しくは二者択一式で実行されてよい場合もある。ブロック図及び／又はフロー図の各ブロック、並びにブロック図及び／又はフロー図のブロックの組み合わせは、指定された機能又は行為を実行する専用ハードウェアベースのシステム、若しくは専用ハードウェアとコンピュータ命令の組み合わせによって実装されてよいことにも留意されたい。
【０１１１】
前述の開示は、当業者が本開示の様々な態様をより十分に理解できるように、いくつかの実施形態の特徴を概説している。当業者は、本明細書に導入された実施形態の同じ目的を果たす及び／又は同じ利点を実現するために、他のプロセス及び構造を設計又は修正する基礎として、本開示を容易に用いることができることを理解されたい。当業者は、そのような均等な解釈が本開示の精神及び範囲から逸脱しないこと、及び、そのような解釈によって、本開示の精神及び範囲から逸脱することなく、本明細書で様々な変更、置換、及び改変が行われてよいことも理解されたい。
【０１１２】
本明細書で開示された、あらゆるハードウェア要素の全て又は一部は、中央処理装置（ＣＰＵ）パッケージを含むシステムオンチップ（ＳｏＣ）で容易に提供されてよい。ＳｏＣは、コンピュータ又は他の電子システムのコンポーネント類を単一のチップに統合する集積回路（ＩＣ）を表す。ＳｏＣは、デジタル機能、アナログ機能、ミックスシグナル機能、及び無線周波数機能を含んでよく、それらの全てが単一のチップ基板上に設けられてよい。他の実施形態は、複数のチップが単一の電子パッケージ内に設けられ、電子パッケージを通じて互いに密接にやり取りするように構成されたマルチチップモジュール（ＭＣＭ）を含んでよい。様々な他の実施形態において、本明細書で開示されたコンピューティング機能は、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、及び他の半導体チップの中の１つ又は複数のシリコンコアに実装されてよい。
【０１１３】
本明細書の全体にわたって用いられる場合、「プロセッサ」又は「マイクロプロセッサ」という用語は、従来のマイクロプロセッサ（Ｉｎｔｅｌ（登録商標）の業界最高のｘ８６及びｘ６４アーキテクチャなど）だけでなく、行列プロセッサ、グラフィックスプロセッサ、及びあらゆるＡＳＩＣ、ＦＰＧＡ、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、プログラマブルロジックデバイス、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコード、命令セット、エミュレーションプロセッサ若しくは仮想マシンプロセッサ、又は、命令の実行を可能にするあらゆる類似の「チューリング完全」デバイス、デバイスの組み合わせ、若しくはロジック要素（ハードウェア又はソフトウェア）も含むものと理解されたい。
【０１１４】
特定の実施形態において、いくつかのコンポーネントが除外又は統合されてよいことも留意されたい。一般的な意味では、図に示された構成は論理的な分割と理解されるべきであるが、物理アーキテクチャは様々な置換、組み合わせ、及び／又はこれらの要素の混成物を含んでよい。無数の可能な設計構成が、本明細書で概説された演算の目的を実現するのに用いられてよいことに留意することが絶対必要である。したがって、関連インフラストラクチャは、無数の代わりの構成、設計選択、デバイス可能性、ハードウェア構成、ソフトウェア実装、及び機器オプションを有する。
【０１１５】
一般的な意味では、あらゆる好適に構成されたプロセッサが、データ又はマイクロコードと関連付けられた命令を実行して、本明細書に詳述された演算を実現することができる。本明細書で開示されたあらゆるプロセッサが、要素又は項目（例えば、データ）を、ある状態又は状況から別の状態又は状況に変換してよい。別の例において、本明細書で概説されるいくつかの機能が、固定ロジック又はプログラマブルロジック（例えば、プロセッサにより実行されるソフトウェア及び／又はコンピュータ命令）で実装されてよく、本明細書で特定された要素は、何らかの種類のプログラマブルプロセッサ、プログラマブルデジタルロジック（例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ））、デジタルロジックを含むＡＳＩＣ、ソフトウェア、コード、電子命令、フラッシュメモリ、光ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、磁気カード若しくは光カード、電子命令を格納するのに好適な他の種類の機械可読媒体、又はこれらの任意の好適な組み合わせであってよい。
【０１１６】
動作にあたっては、必要に応じて且つ特定のニーズに基づき、ストレージが、任意の適切な種類の有形の非一時的記憶媒体（例えば、ランダムアクセスメモリ（ＲＡＭ）、リードオンリメモリ（ＲＯＭ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、若しくはマイクロコード）、ソフトウェア、ハードウェア（例えば、プロセッサ命令若しくはマイクロコード）に、又は任意の他の好適なコンポーネント、デバイス、要素、若しくはオブジェクトに情報を格納することができる。さらに、追跡、送信、受信、又はプロセッサに格納されている情報は、特定のニーズ及び実施態様に基づいて、任意のデータベース、レジスタ、テーブル、キャッシュ、キュー、制御リスト、又はストレージ構造に提供されてよく、これらの全てが任意の適切なタイムフレームで参照されてよい。本明細書で開示されたメモリ又はストレージ要素のいずれも、必要に応じて、「メモリ」及び「ストレージ」という広範な用語の中に含まれていると解釈されたい。本明細書における非一時的記憶媒体は、開示された演算を提供するように構成された、又は開示された演算をプロセッサに実行させるように構成された、任意の非一時的専用ハードウェア又はプログラマブルハードウェアを含むことが明確に意図されている。非一時的記憶媒体は、ハードウェアでコード化された命令、及び任意で、ハードウェア、ファームウェア、ソフトウェアで符号化されたマイクロコード命令又はシーケンスを格納したプロセッサも明確に含んでいる。
【０１１７】
本明細書で説明された機能の全て又は一部を実装するコンピュータプログラムロジックは、様々な形態で具現化されており、それらには、全く限定されないが、ハードウェア記述言語、ソースコード形態、コンピュータ実行可能形態、機械命令又はマイクロコード、プログラマブルハードウェア、及び様々な中間形態（例えば、ＨＤＬプロセッサ、アセンブラ、コンパイラ、リンカ、又はロケータにより生成された形態）が含まれる。一例において、ソースコードには、オブジェクトコード、アセンブリ言語、又は様々なオペレーティングシステム若しくは動作環境と共に使用するＯｐｅｎＣＬ、ＦＯＲＴＲＡＮ、Ｃ＋＋、Ｊａｖａ（登録商標）、若しくはＨＴＭＬなどの高水準言語などの様々なプログラミング言語で実装された、あるいはＳｐｉｃｅ、Ｖｅｒｉｌｏｇ、及びＶＨＤＬなどのハードウェア記述言語で実装された、一連のコンピュータプログラム命令が含まれる。ソースコードは、様々なデータ構造及び伝達メッセージを定義し、これらを用いることができる。ソースコードは、（例えば、インタプリタを介して）コンピュータ実行可能形態になってよく、あるいはソースコードは、（例えば、トランスレータ、アセンブラ、若しくはコンパイラを介して）コンピュータ実行可能形態に変換されるか、又はバイトコードなどの中間形態に変換されてよい。必要に応じて、前述したもののいずれかが、シーケンシャルマシン、コンビネーションマシン、ステートマシンであっても、そうでなくても、適切なディスクリート回路又は集積回路を作る又は説明するのに用いられてよい。
【０１１８】
１つの例において、図の任意の数の電気回路が、関連電子デバイスのボード上に実装されてよい。このボードは、電子デバイスの内部電子システムの様々なコンポーネントを保持し、さらに他の周辺機器にコネクタを提供し得る一般的な回路ボードであってよい。より具体的には、このボードは、電気接続を提供することができ、これによって、システムの他のコンポーネントは電気的に通信することができる。任意の適切なプロセッサ及びメモリが、特定の構成ニーズ、処理要求、及びコンピューティング設計に基づいて、ボードに好適に結合されてよい。外部ストレージ、追加のセンサ、オーディオ／ビデオディスプレイのコントローラ、及び周辺機器デバイスなどの他のコンポーネントが、プラグインカードとして、ケーブルを介してボードに取り付けられてよく、又はボードそのものに統合されてもよい。別の例として、図の電気回路は、独立型モジュール（例えば、特定のアプリケーション又は機能を実行するように構成された関連コンポーネント及び回路を有するデバイス）として実装されてよく、又は、プラグインモジュールとして、電子デバイスの特定用途向けハードウェアに実装されてもよい。
【０１１９】
本明細書に提供された多数の例を用いて、２つ、３つ、４つ、又はそれより多くの電気コンポーネントに関して、相互作用が説明され得ることに留意されたい。しかし、これは、明確さと例示だけを目的に行われている。システムは、任意の適切な方式で、統合又は再構成され得ることを理解されたい。類似の設計代替例に沿って、図に示されたコンポーネント、モジュール、及び要素のいずれも、様々な可能な構成に組み合わされてよく、その全ては、本明細書の広範な範囲に含まる。ある場合には、所与のセットのフローに関する機能のうち１つ又は複数を、限られた数の電気要素を参照するだけで説明することが、より容易となることがある。図の電気回路及びその教示は、容易にスケーリング可能であり、多数のコンポーネント、並びにより複雑／精巧な配置及び構成を収容することができることを理解されたい。したがって、提供された例は、その範囲を限定するべきではなく、場合によっては無数の他のアーキテクチャに適用されるような電気回路の広範な教示を妨げるべきではない。
【０１２０】
多数の他の変更、置換、変形、改変、及び修正が当業者に確認されてよく、本開示は、そのような変更、置換、変形、改変、及び修正の全てを、添付の特許請求の範囲に含まれるものとして包含することが意図されている。
［例示的な実施態様］
【０１２１】
以下の例は、本開示の全体にわたって説明される実施形態に関する。
【０１２２】
１つ又は複数の実施形態が、多次元メモリと、１つ又は複数の行列オペランドに対して行列演算を実行する、１つ又は複数の行列プロセッサを含んだ複数の処理要素とを備える装置を含んでよく、複数の処理要素は、１つ又は複数の行列オペランドと関連付けられている行列データを、多次元メモリから受信し、１つ又は複数の行列オペランドを行列データから取り出し、行列演算と関連付けられた行列ルーチンを識別し、１つ又は複数の行列オペランドを用いて行列ルーチンを実行し、実行された行列ルーチンに基づいて行列演算の結果を取得するように構成されている。
【０１２３】
装置に関する１つの例示的な実施形態において、本装置はさらに行列ルーチンメモリを備え、行列ルーチンメモリは、１つ又は複数の行列演算と関連付けられた１つ又は複数の行列ルーチンを含む。
【０１２４】
装置に関する１つの例示的な実施形態において、複数の処理要素はさらに、行列ルーチンを行列ルーチンメモリから受信するように構成されている。
【０１２５】
装置に関する１つの例示的な実施形態において、複数の処理要素はさらに、行列ルーチンをホストコンピューティングシステムから受信し、行列ルーチンを行列ルーチンメモリに格納するように構成されている。
【０１２６】
装置に関する１つの例示的な実施形態において、行列ルーチンは、行列演算と関連付けられた１つ又は複数の命令を含む。
【０１２７】
装置に関する１つの例示的な実施形態において、行列ルーチンの１つ又は複数の命令は、１つ又は複数の行列オペランドと関連付けられた１つ又は複数のメモリ位置を示すものを含む。
【０１２８】
装置に関する１つの例示的な実施形態において、１つ又は複数の行列オペランドを行列データから取り出す複数の処理要素はさらに、１つ又は複数の行列オペランドを取り出すために、行列データをスライスするように構成されている。
【０１２９】
装置に関する１つの例示的な実施形態において、複数の処理要素はさらに、１つ又は複数の行列オペランドを行列データから取り出す１つ又は複数の命令を実行するように構成されている。
【０１３０】
装置に関する１つの例示的な実施形態において、複数の処理要素はさらに、多次元メモリの１つ又は複数のメモリ位置から行列データを取得する１つ又は複数の命令を実行するように構成されている。
【０１３１】
装置に関する１つの例示的な実施形態において、行列演算は、１つ又は複数の行列乗算演算を含む。
【０１３２】
装置に関する１つの例示的な実施形態において、行列演算は、１つ又は複数の畳み込み演算を含む。
【０１３３】
装置に関する１つの例示的な実施形態において、行列演算は、ニューラルネットワークにおける演算と関連付けられている。
【０１３４】
１つ又は複数の実施形態は、１つ又は複数の行列オペランドに対して行列演算を実行する段階を備えた方法を含んでよく、行列演算を実行する段階は、１つ又は複数の行列オペランドと関連付けられている行列データを多次元メモリから受信する段階と、１つ又は複数の行列オペランドを行列データから取り出す段階と、行列演算と関連付けられた行列ルーチンを識別する段階と、１つ又は複数の行列オペランドを用いて、行列プロセッサで行列ルーチンを実行する段階と、行列プロセッサにより実行された行列ルーチンに基づいて、行列演算の結果を取得する段階とを含む。
【０１３５】
方法に関する１つの例示的な実施形態において、本方法は行列ルーチンを行列ルーチンメモリから受信する段階をさらに備え、行列ルーチンメモリは、１つ又は複数の行列演算と関連付けられた１つ又は複数の行列ルーチンを含む。
【０１３６】
方法に関する１つの例示的な実施形態において、行列ルーチンは、行列演算と関連付けられた１つ又は複数の命令を含む。
【０１３７】
方法に関する１つの例示的な実施形態において、行列ルーチンの１つ又は複数の命令は、１つ又は複数の行列オペランドと関連付けられた１つ又は複数のメモリ位置を示すものを含む。
【０１３８】
１つ又は複数の実施形態は、多次元メモリを含む複数のメモリ素子と、１つ又は複数の行列オペランドに対して行列演算を実行する複数の処理要素とを備えるシステムを含んでよく、複数の処理要素は、ホストプロセッサと、１つ又は複数の行列処理チップとを含み、複数の処理要素は、１つ又は複数の行列オペランドと関連付けられている行列データを多次元メモリから受信し、１つ又は複数の行列オペランドを行列データから取り出し、行列演算と関連付けられた行列ルーチンを識別し、１つ又は複数の行列オペランドを用いて行列ルーチンを実行し、実行された行列ルーチンに基づいて、行列演算の結果を取得するように構成されている。
【０１３９】
システムに関する１つの例示的な実施形態において、それぞれの行列処理チップは、複数の行列処理クラスタを含む。
【０１４０】
システムに関する１つの例示的な実施形態において、それぞれの行列処理クラスタは、複数の行列処理ユニットを含む。
【０１４１】
システムに関する１つの例示的な実施形態において、それぞれの行列処理クラスタは、複数のメモリリソースブロックを含む。
【０１４２】
１つ又は複数の実施形態は、格納された命令を有する少なくとも１つの機械アクセス可能記憶媒体を含んでよく、命令は機械で実行されると、１つ又は複数の行列オペランドに対して行列演算を機械に実行させ、行列演算を機械に実行させる命令はさらに、機械に、１つ又は複数の行列オペランドと関連付けられている行列データを多次元メモリから受信させ、１つ又は複数の行列オペランドを行列データから取り出させ、行列演算と関連付けられた行列ルーチンを識別させ、１つ又は複数の行列オペランドを用いて、行列プロセッサで行列ルーチンを実行させ、行列プロセッサにより実行された行列ルーチンに基づいて、行列演算の結果を取得させる。
【０１４３】
記憶媒体に関する１つの例示的な実施形態において、命令はさらに、行列ルーチンメモリから行列ルーチンを機械に受信させ、行列ルーチンメモリは、１つ又は複数の行列演算と関連付けられた１つ又は複数の行列ルーチンを含む。
【０１４４】
記憶媒体に関する１つの例示的な実施形態において、行列ルーチンは、行列演算と関連付けられた１つ又は複数の命令を含む。
【０１４５】
記憶媒体に関する１つの例示的な実施形態において、行列ルーチンは、１つ又は複数の行列オペランドと関連付けられた１つ又は複数のメモリ位置を示すものを含む。
【０１４６】
記憶媒体に関する１つの例示的な実施形態において、多次元メモリから行列データを機械に受信させる命令はさらに、多次元メモリの１つ又は複数のメモリ位置から行列データを機械に取得させる。
【０１４７】
１つ又は複数の実施形態は、上記各例のいずれかの方法を実行する手段を備えた装置を含んでよい。
【０１４８】
１つ又は複数の実施形態は、格納された命令を有する少なくとも１つの機械アクセス可能記憶媒体を含んでよく、命令は機械で実行されると、機械に、上記各例のいずれかの方法を実行させるか、又は上記各例の装置を実現させる。
【図１】
2018139097.tif 000003
【図２Ａ】
2018139097.tif 000004
【図２Ｂ】
2018139097.tif 000005
【図２Ｃ】
2018139097.tif 000006
【図３】
2018139097.tif 000007
【図４】
2018139097.tif 000008
【図５】
2018139097.tif 000009
【図６】
2018139097.tif 000010
【手続補正書】
【提出日】平成30年4月27日(2018.4.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
多次元メモリと、
１つ又は複数の行列オペランドに対して行列演算を実行する、１つ又は複数の行列プロセッサを含んだ複数の処理要素と
を備え、
前記複数の処理要素は、
前記１つ又は複数の行列オペランドと関連付けられている行列データを、前記多次元メモリから受信し、
前記１つ又は複数の行列オペランドを前記行列データから取り出し、
前記行列演算と関連付けられた行列ルーチンを識別し、
前記１つ又は複数の行列オペランドを用いて前記行列ルーチンを実行し、
実行された前記行列ルーチンに基づいて前記行列演算の結果を取得する、
装置。
【請求項２】
行列ルーチンメモリをさらに備え、前記行列ルーチンメモリは、１つ又は複数の行列演算と関連付けられた１つ又は複数の行列ルーチンを含む、請求項１に記載の装置。
【請求項３】
前記複数の処理要素はさらに、前記行列ルーチンを前記行列ルーチンメモリから受信する、請求項２に記載の装置。
【請求項４】
前記複数の処理要素はさらに、
前記行列ルーチンをホストコンピューティングシステムから受信し、
前記行列ルーチンを前記行列ルーチンメモリに格納する、
請求項２に記載の装置。
【請求項５】
前記行列ルーチンは、前記行列演算と関連付けられた１つ又は複数の命令を含む、請求項１から４のいずれか一項に記載の装置。
【請求項６】
前記行列ルーチンの前記１つ又は複数の命令は、前記１つ又は複数の行列オペランドと関連付けられた１つ又は複数のメモリ位置を示すものを含む、請求項５に記載の装置。
【請求項７】
前記１つ又は複数の行列オペランドを前記行列データから取り出す前記複数の処理要素はさらに、前記１つ又は複数の行列オペランドを取り出すために、前記行列データをスライスする、請求項１から６のいずれか一項に記載の装置。
【請求項８】
前記複数の処理要素はさらに、前記１つ又は複数の行列オペランドを前記行列データから取り出す１つ又は複数の命令を実行する、請求項１から７のいずれか一項に記載の装置。
【請求項９】
前記複数の処理要素はさらに、前記多次元メモリの１つ又は複数のメモリ位置から前記行列データを取得する１つ又は複数の命令を実行する、請求項１から８のいずれか一項に記載の装置。
【請求項１０】
前記行列演算は、１つ又は複数の行列乗算演算を含む、請求項１から９のいずれか一項に記載の装置。
【請求項１１】
前記行列演算は、１つ又は複数の畳み込み演算を含む、請求項１から１０のいずれか一項に記載の装置。
【請求項１２】
前記行列演算は、ニューラルネットワークにおける演算と関連付けられている、請求項１から１１のいずれか一項に記載の装置。
【請求項１３】
１つ又は複数の行列オペランドに対して行列演算を実行する段階を備えた方法であって、
前記行列演算を実行する段階は、
前記１つ又は複数の行列オペランドと関連付けられている行列データを多次元メモリから受信する段階と、
前記１つ又は複数の行列オペランドを前記行列データから取り出す段階と、
前記行列演算と関連付けられた行列ルーチンを識別する段階と、
前記１つ又は複数の行列オペランドを用いて、行列プロセッサで前記行列ルーチンを実行する段階と、
前記行列プロセッサにより実行された前記行列ルーチンに基づいて、前記行列演算の結果を取得する段階と
を含む、方法。
【請求項１４】
前記行列ルーチンを行列ルーチンメモリから受信する段階をさらに備え、前記行列ルーチンメモリは、１つ又は複数の行列演算と関連付けられた１つ又は複数の行列ルーチンを含む、請求項１３に記載の方法。
【請求項１５】
前記行列ルーチンは、前記行列演算と関連付けられた１つ又は複数の命令を含む、請求項１３又は１４に記載の方法。
【請求項１６】
前記行列ルーチンの前記１つ又は複数の命令は、前記１つ又は複数の行列オペランドと関連付けられた１つ又は複数のメモリ位置を示すものを含む、請求項１５に記載の方法。
【請求項１７】
多次元メモリを含む複数のメモリ要素と、
１つ又は複数の行列オペランドに対して行列演算を実行する複数の処理要素と
を備え、
前記複数の処理要素は、
ホストプロセッサと、
１つ又は複数の行列処理チップと
を含み、
前記複数の処理要素は、
前記１つ又は複数の行列オペランドと関連付けられている行列データを前記多次元メモリから受信し、
前記１つ又は複数の行列オペランドを前記行列データから取り出し、
前記行列演算と関連付けられた行列ルーチンを識別し、
前記１つ又は複数の行列オペランドを用いて前記行列ルーチンを実行し、
実行された前記行列ルーチンに基づいて、前記行列演算の結果を取得する、システム。
【請求項１８】
それぞれの行列処理チップは、複数の行列処理クラスタを含む、請求項１７に記載のシステム。
【請求項１９】
それぞれの行列処理クラスタは、複数の行列処理ユニットを含む、請求項１８に記載のシステム。
【請求項２０】
それぞれの行列処理クラスタは、複数のメモリリソースブロックを含む、請求項１８又は１９に記載のシステム。
【請求項２１】
１つ又は複数の行列オペランドに対して行列演算をコンピュータに実行させるためのプログラムであって、
前記行列演算を前記コンピュータに実行させる前記プログラムはさらに、前記コンピュータに、
前記１つ又は複数の行列オペランドと関連付けられている行列データを多次元メモリから受信させ、
前記１つ又は複数の行列オペランドを前記行列データから取り出させ、
前記行列演算と関連付けられた行列ルーチンを識別させ、
前記１つ又は複数の行列オペランドを用いて行列プロセッサで前記行列ルーチンを実行させ、
前記行列プロセッサにより実行された前記行列ルーチンに基づいて、前記行列演算の結果を取得させる、プログラム。
【請求項２２】
前記プログラムはさらに、行列ルーチンメモリから前記行列ルーチンを前記コンピュータに受信させ、前記行列ルーチンメモリは、１つ又は複数の行列演算と関連付けられた１つ又は複数の行列ルーチンを含む、請求項２１に記載のプログラム。
【請求項２３】
前記行列ルーチンは、前記行列演算と関連付けられた１つ又は複数の命令を含む、請求項２１又は２２に記載のプログラム。
【請求項２４】
前記行列ルーチンは、前記１つ又は複数の行列オペランドと関連付けられた１つ又は複数のメモリ位置を示すものを含む、請求項２３に記載のプログラム。
【請求項２５】
前記多次元メモリから前記行列データを前記コンピュータに受信させる前記プログラムはさらに、前記多次元メモリの１つ又は複数のメモリ位置から前記行列データを前記コンピュータに取得させる、請求項２１から２４のいずれか一項に記載のプログラム。
【請求項２６】
請求項２１から２５のいずれか一項に記載のプログラムを格納する、
コンピュータ可読記憶媒体。
【外国語明細書】
2018139097000001.pdf