IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

<>
  • 特開-行列処理装置 図1
  • 特開-行列処理装置 図2A
  • 特開-行列処理装置 図2B
  • 特開-行列処理装置 図2C
  • 特開-行列処理装置 図3
  • 特開-行列処理装置 図4
  • 特開-行列処理装置 図5
  • 特開-行列処理装置 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022177096
(43)【公開日】2022-11-30
(54)【発明の名称】行列処理装置
(51)【国際特許分類】
   G06F 17/16 20060101AFI20221122BHJP
   G06F 9/50 20060101ALI20221122BHJP
   G06F 9/38 20060101ALI20221122BHJP
【FI】
G06F17/16 K
G06F9/50 150E
G06F9/38 370X
【審査請求】有
【請求項の数】15
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022142663
(22)【出願日】2022-09-08
(62)【分割の表示】P 2022063915の分割
【原出願日】2017-10-12
(31)【優先権主張番号】15/395,654
(32)【優先日】2016-12-30
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.macOS
2.VERILOG
3.OPENCL
(71)【出願人】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】トニー エル. ワーナー
(72)【発明者】
【氏名】アラヴィンド カライア
(72)【発明者】
【氏名】ヴィジェイ コルチカンティ
(72)【発明者】
【氏名】ホーレス ロウ
(57)【要約】      (修正有)
【課題】特定の行列演算を定義または実装する柔軟またはプログラマブルな手法を提供する。
【解決手段】行列演算は、1つ又は複数の行列オペランドに対して実行される。例えば、行列データは、多次元メモリから受信されてよく、1つ又は複数の行列オペランドと関連付けられている。1つ又は複数の行列オペランドは、行列データから取り出される。行列演算と関連付けられた行列ルーチンが識別され、行列ルーチンが、1つ又は複数の行列オペランドを用いて、行列プロセッサで実行される。行列演算の結果は、行列プロセッサにより実行された行列ルーチンに基づいて取得される。
【選択図】図6
【特許請求の範囲】
【請求項1】
パッケージ上に集積された複数の行列処理チップであって、前記複数の行列処理チップのそれぞれは、行列命令を処理する、複数の行列処理チップと、
前記複数の行列処理チップのうち2つまたは2つ以上の行列処理チップを接続するためのチップ間リンクであって、前記2つまたは2つ以上の行列処理チップ間の通信を可能にする、チップ間リンクと、
複数の高帯域幅メモリ(HBM)モジュールであって、前記複数のHBMモジュールのうちの1つのHBMモジュールは、前記複数の行列処理チップのうちの1つの行列処理チップによって処理するための行列データを格納する、複数のHBMモジュールと、を備え、
前記行列処理チップは、
前記行列処理チップをホストプロセッサに結合するホストインタフェースと、
行列ルーチンの行列演算を制御および/または管理するコントローラと、
前記コントローラに結合され、前記行列ルーチンからの行列乗算命令に基づいて行列乗算演算を実行するように構成された、複数の行列処理ユニットであって、前記行列乗算命令は、第1入力行列と第2入力行列とを含む行列オペランドを指定し、前記複数の行列処理ユニットは、第1入力行列と第2入力行列とを乗じることで出力行列を生成する、複数の行列処理ユニットと、を有する、
装置。
【請求項2】
前記行列処理チップは、複数の行列処理クラスタを有し、
前記行列処理ユニットのそれぞれは、前記複数の行列処理クラスタのいずれかに含まれ、
前記装置は、複数のクラスタコントローラであって、前記複数のクラスタコントローラのそれぞれは、前記複数の行列処理クラスタのうち対応する行列処理クラスタ内の行列演算を制御する、複数のクラスタコントローラをさらに備える、
請求項1に記載の装置。
【請求項3】
前記複数のクラスタコントローラのそれぞれは、前記対応する行列処理クラスタ内の1または複数の行列処理ユニットを用いて、前記行列乗算命令を実行させる、請求項2に記載の装置。
【請求項4】
少なくとも1つの行列処理ユニットは、前記複数のHBMモジュールの前記1つのHBMモジュールから前記行列データを受信し、前記行列データは、前記行列乗算命令の前記行列オペランドに関連付けられる、請求項1に記載の装置。
【請求項5】
前記少なくとも1つの行列処理ユニットは、前記行列オペランドを用いて前記行列乗算命令を実行する、請求項4に記載の装置。
【請求項6】
前記行列乗算命令は、前記複数の行列処理チップの少なくとも1つによって実行される前記行列ルーチンの複数の命令のうちの1つである、請求項5に記載の装置。
【請求項7】
前記行列ルーチンは、複数の前記行列処理チップによって実行される分散された行列乗算ルーチンを含む、請求項6に記載の装置。
【請求項8】
少なくとも1つの前記行列処理チップは、複数の行列ルーチンから前記行列ルーチンを識別する、請求項6に記載の装置。
【請求項9】
前記ホストインタフェースは、前記行列処理チップをペリフェラルコンポーネントインターコネクトエクスプレスバスに結合する、請求項1に記載の装置。
【請求項10】
前記行列ルーチンの前記複数の命令は、1つ又は複数の畳み込み演算を実行するために実行される、請求項6に記載の装置。
【請求項11】
前記行列ルーチンは、ニューラルネットワーク内の演算に関連付けられる、請求項10に記載の装置。
【請求項12】
前記コントローラは、前記複数のクラスタコントローラと共に、行列演算を制御および/または管理する、請求項3に記載の装置。
【請求項13】
前記複数のHBMモジュールは、前記複数の行列処理チップの第1行列処理チップと結合した4つのHBMモジュールと、前記複数の行列処理チップの第2行列処理チップと結合した別の4つのHBMモジュールとを有する、請求項1に記載の装置。
【請求項14】
前記コントローラは、チップレベルコントローラを有する、請求項2に記載の装置。
【請求項15】
前記チップレベルコントローラは、前記複数のクラスタコントローラと共に、行列演算を制御および/または管理する、請求項14に記載の装置。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概してコンピュータ処理の分野に関し、より詳細には、限定するわけではないがプログラマブルな行列処理に関する。
【背景技術】
【0002】
行列乗算及び行列畳み込みなどの行列演算は、大型の多次元行列オペランドに対する複雑な演算を含むことが多いので、非常にプロセッサに負担がかかり、且つ非常にメモリをたくさん使う演算になり得る。したがって、複雑な行列演算の性能は、処理及び/又はメモリレイテンシによって制限され得る。行列演算は、様々な用途(グラフィックス処理や画像処理から機械学習や人工知能まで)において、増加し続けるデータセットを用いてますます利用されているので、行列演算の高性能且つ柔軟な処理に対する要求が増大している。
【図面の簡単な説明】
【0003】
本開示は、添付の図と共に読まれた場合、以下の詳細な説明によって最もよく理解される。業界の慣例に従って、様々な特徴は必ずしも縮尺通りに描かれておらず、説明目的のためだけに用いられていることを銘記されたい。縮尺が明示的に又は暗示的に示されている場合、その縮尺は1つの説明的な例だけを提供する。他の実施形態において、様々な特徴の寸法は、解説を明確にするために、任意で増大又は減少することがある。
【0004】
図1】特定の実施形態による例示的なコンピューティングシステムの概略図を示す。
【0005】
図2A】行列処理アーキテクチャの例示的な実施形態のブロック図を示す。
図2B】行列処理アーキテクチャの例示的な実施形態のブロック図を示す。
図2C】行列処理アーキテクチャの例示的な実施形態のブロック図を示す。
【0006】
図3】コンピュータプロセッサに関する例示的な実施形態のブロック図を示す。
図4】コンピュータプロセッサに関する例示的な実施形態のブロック図を示す。
【0007】
図5】プログラマブルな行列処理エンジンの例示的な実施形態を示す。
【0008】
図6】プログラマブルな行列処理の例示的な実施形態のフローチャートを示す。
【発明を実施するための形態】
【0009】
以下の開示では、多数の異なる実施形態又は例が、本開示の異なる特徴を実装するために提供される。コンポーネント及び配置についての特定の例が、本開示を分かり易くするように後述されている。これらはもちろん、単に例であるに過ぎず、限定することを意図されてはいない。さらに、本開示は、様々な例において参照数字及び/又は参照文字を繰り返すことがある。この繰り返しは、簡潔さと明確さを目的にしており、繰り返し自体には、論じられた様々な実施形態及び/又は構成の間の関係を規定してはいない。異なる実施形態が異なる利点を有してよく、特定の利点があらゆる実施形態に必ずしも必要とされてはいない。
【0010】
行列処理演算(例えば、行列及び/又はベクトルオペランドを含む線形代数演算)は、コンピューティングシステムにおいて、数ある例の中でも特に、グラフィックス処理から機械学習や人工知能まで広範囲の用途を有する。例えば、数ある例の中でも特に、コンピュータビジョン、自律型ナビゲーション、会話認識及び音声認識、自然な言語処理を含む、人工知能及び機械学習の機能を提供する人工ニューラルネットワークを実装するのに、複雑な行列演算が用いられ得る。これらの複雑な行列演算(例えば、行列乗算及び行列畳み込み)は、前方伝搬、後方伝搬、及び荷重更新などの、ニューラルネットワークの基本的演算を実装するのに用いることができる。しかし、これらの行列演算は、大型の多次元行列オペランドに対する複雑な演算を含むことが多いので、プロセッサ及びメモリに非常に負担をかけることになり得る。したがって、これらの行列演算の性能は、処理及び/又はメモリレイテンシによって制限され得る。さらに、これらの変更が利かない行列演算は、新たな種類又はバリエーションの行列演算を実装する、及び/又は、既存の演算の挙動を修正するという柔軟性を何も持たずに実装されることが多い。行列演算は、人工知能及び機械学習などの様々な用途において、増加し続けるデータセットを用いてますます利用されているので、行列演算の高性能処理及び柔軟な実装の両方に対して要求が増大している。
【0011】
既存の行列処理手法は、特に、人工ニューラルネットワークにおいて人工知能及び機械学習を実装するのに用いられる場合、様々な非効率さに見舞われる。例えば、中央処理装置(CPU)が行列演算を実行するのに用いられることがあるが、多数のCPUアーキテクチャは、低算術強度演算を目的に設計されており(すなわち、メモリ演算と比べて算術演算の比率が低い)、したがって、行列演算の効率的な実行を目的に設計されてはいない。さらに、多数のCPUアーキテクチャは、ローカルメモリ又はキャッシュメモリの複雑な管理ルーチンを利用し、これにより、大型の行列オペランドを伴う演算の処理オーバーヘッド及び実行の複雑さが増大し得る。グラフィックス処理ユニット(GPU)も、行列演算を実行するのに用いられることがある。しかしGPUは、高精度計算用に設計されることが多く、特定の行列演算にとっては不必要なレベルの精度を提供する場合があり、したがって、実行され得る行列演算の量を減少させることになる。したがって、既存の行列処理手法は、数ある例の中でも特に、大型の行列オペランド及び/又は特定の次元を有する行列オペランドを伴う行列乗算演算又は畳み込み演算などの、特定の行列演算にとっては非効率的である。さらに既存の手法は、これらの行列演算を追加の処理リソース全体に並列に実行するように、効率的にスケーリングされることができない。したがって、既存の手法は、これらの行列演算をスケーリング及び/又は分散する場合に、100%の処理効率を実現しない。さらに既存の手法は、変更が利かず柔軟性がないことが多く、新たな行列演算を定義する、既存の行列演算を修正するなどの能力が限定されているか、又はその能力がない。
【0012】
本開示の全体にわたって説明される行列処理機能は、特定の行列演算を定義又は実装するための柔軟な又は「プログラマブルな」手法を提供する。例えば、特定の実施形態は、プログラマブルな行列ルーチンを実行することができる行列プロセッサを含んでよい。例えば、行列ルーチンは、行列プロセッサによって実行されると、特定の行列演算を実行するように設計されているプログラマブルなルーチンであってよい。例えば、行列ルーチンには、特定の行列プロセッサによりサポートされ、その行列プロセッサによって実行されると所望の行列演算を実行するように設計された、一連の命令及び/又はコマンドが含まれてよい。いくつかの実施形態において、例えば、行列プロセッサは、様々な基本的演算を実行するための命令及び/又はコマンドのセットをサポートするように設計されてよい。このように、より複雑な行列演算用の行列ルーチンが、行列プロセッサによりサポートされた基本的な命令及び/又はコマンドを用いてプログラムされ得る。いくつかの実施形態において、これらの行列ルーチンは、行列プロセッサと関連付けられた行列ルーチンメモリに格納され得る。次に、特定の行列演算が実行される必要がある場合、行列プロセッサは、対応する行列ルーチンを行列ルーチンメモリから引き出し、その後、所望の行列演算を実行するために、そのルーチンの命令及び/又はコマンドを実行することができる。
【0013】
本開示の全体にわたって説明されるプログラマブルな行列処理機能は、既存の手法の非効率さを軽減すること、柔軟な行列演算が効率的に定義され、プログラマブルな行列ルーチンを用いて実装されることを可能にすることを含む、多数の技術的な利点を提供する。これらのプログラマブルな行列ルーチンによって、幅広い範囲の行列処理機能が、非効率的で時間がかかりコストの高いハードウェアベースの実装を介するのではなく、プログラムで行列プロセッサに実装されることが可能になる。
【0014】
次に、本開示の行列処理機能を実装するのに用いられ得る例示的な実施形態が、添付した図をより詳細に参照して説明されることになる。
【0015】
図1は、特定の実施形態による例示的なコンピューティングシステム100の概略図を例示する。
【0016】
いくつかの実施形態において、本開示の全体にわたって説明される行列処理機能は、システム100に実装されてよい。行列処理機能は、数ある例の中でも特に、行列演算を伴う、グラフィックス処理から機械学習や人工知能までの広範囲の用途及び/又は使用事例のために、システム100に用いられてよい。例えば、いくつかの実施形態において、行列処理機能は、人工ニューラルネットワークにおいて、人工知能及び機械学習を実装するのに用いられてよい。さらに、行列処理機能は、システム100の任意のコンポーネントにより実装されてよい。例えば、例示された実施形態において、システム100には、エッジデバイス110、クラウドサービス120、行列処理ノード130、及びネットワーク150が含まれている。行列処理ノード130には、システム100の任意のコンポーネントを含め、行列処理機能を備えた任意のコンポーネント又はデバイスが含まれてよい。例えば、行列処理ノード130には、クラウドサービス120及び/又は行列処理機能が実装されたサーバ(例えば、データセンタのアプリケーションサーバ)、行列処理機能が実装されたエッジデバイス110(例えばエンドユーザデバイス112、モノのインターネットデバイス114、ゲートウェイ116)などが含まれてよい。システム100のこれらの様々なコンポーネントが、さらに下記に論じられている。
【0017】
エッジデバイス110には、通信システム100の「エッジ」近くに配置又は接続された任意の機器及び/又はデバイスが含まれてよい。エッジデバイス110は、ネットワーク150などの1つ又は複数のネットワーク及び/又は通信プロトコルを通じて、互いに、並びに/又は他のリモートネットワーク及びサービス(例えば、クラウドサービス120)と通信することができる。いくつかの実施形態において、特定のエッジデバイス110は、本開示の全体にわたって説明される行列処理機能を含むことができ、したがって、行列処理ノード130として用いられてよい。例示された実施形態において、エッジデバイス110には、数ある例の中でも特に、エンドユーザデバイス112(例えば、デスクトップ、ラップトップ、モバイルデバイス)、モノのインターネット(IoT)デバイス114、並びにゲートウェイ及び/又はルータ116が含まれる。
【0018】
エンドユーザデバイス112には、ユーザのコンピューティングシステム100との対話を可能又は容易にする任意のデバイスが含まれてよく、例えば、数ある例の中でも特に、デスクトップコンピュータ、ラップトップ、タブレット、携帯電話及び他のモバイルデバイス、並びにウェアラブルデバイス(例えば、スマートウォッチ、スマートグラス、ヘッドセット)が含まれる。
【0019】
IoTデバイス114には、モノのインターネット(IoT)システム又はネットワークで通信することができる、及び/又はそこに加わることができる任意のデバイスが含まれてよい。IoTシステムとは、特定の用途又は使用事例のために相互運用し相乗作用を示す複数の異なるデバイス(例えば、IoTデバイス114)から構成された、新たな又は改善されたアドホックシステム及びネットワークを指してよい。ますます多くの製品及び機器が発展して「スマート」になるにつれて、そのようなアドホックシステムが出現しつつある。「スマート」とは、これらの製品及び機器がコンピュータプロセッサにより制御又は監視され、また他のデバイスと通信できることを意味する。例えば、IoTデバイス114には、クラウドサービス120及び/又は他のエッジデバイス110などの、システム100の他のコンポーネントとの相互運用を可能にするコンピュータプロセッサ及び/又は通信インタフェースが含まれてよい。IoTデバイス114には、初めからIoT機能を有するものとして開発される「グリーンフィールド」デバイス、又は最初はIoT機能を有さないものとして開発された既存のレガシデバイスにIoT機能を統合することで作り出される「ブラウンフィールド」デバイスがあってよい。例えば、場合によっては、IoTデバイス114は、機器、玩具、道具、車両、生物(例えば、植物、動物、人間)などの「モノ」に統合された、又はそれらに取り付けられたセンサ及び通信モジュールから構成されてよい。あるいは又はさらに、特定のIoTデバイス114は、システム100の様々なコンポーネントと通信するために、エッジゲートウェイ又はルータ116などの中間コンポーネントに頼ってよい。
【0020】
IoTデバイス114には、自身の環境の特性に関連付けられたセンサデータ及び信号を、監視、検出、測定、及び生成するための、様々な種類のセンサが含まれてよい。例えば、所与のセンサが、数ある例の中でも特に、運動、重量、物理接触、温度、風、雑音、光、位置、湿度、放射能、液体、特定の化合物、バッテリ寿命、無線信号、コンピュータ通信、及び帯域幅などの、1つ又は複数のそれぞれの特性を検出するように構成されてよい。センサには、物理センサ(例えば、物理監視コンポーネント)、及び仮想センサ(例えば、ソフトウェアベースの監視コンポーネント)が含まれてよい。IoTデバイス114には、自身のそれぞれの環境で様々な動作を実行するアクチュエータも含まれてよい。例えば、アクチュエータは、数ある例の中でも特に、セキュリティシステム(例えば、アラーム、カメラ、ロック)、又は家庭用電気器具(例えば、オーディオシステム、照明設備、HVAC設備、ガレージドア)の電源又は動作のオンオフを切り替えるなどの、特定の機能を選択的に作動させるのに用いられてよい。
【0021】
さらに言えば、本開示は、IoTデバイス114及び関連センサ/アクチュエータに関して、潜在的に無限の領域の用途を考えている。IoTデバイス114には、例えば、任意の種類のシステム100、並びに/又は、数ある中でも特に、運輸産業(例えば、自動車、航空会社)、工業製造産業、エネルギー産業(例えば、発電所)、通信産業(例えば、インターネット、セルラー、及びテレビ放送事業者)、医療産業(例えば、ヘルスケア、医薬)、食品加工産業、及び/若しくは小売産業を含む産業と関連した、任意の種類の機器及び/又はデバイスが含まれてよい。例えば運輸産業において、IoTデバイス114には、航空機、自動車、又は船舶と関連した、ナビゲーションシステム、自律型飛行若しくは運転システム、トラフィックセンサ及びコントローラ、並びに/又はセンサにより監視されている任意の内部機械若しくは電気コンポーネント(例えば、エンジン)などの機器及びデバイスが含まれてよい。IoTデバイス114には、数ある例の中でも特に、工業製造及び生産、輸送(例えば、貨物追跡)、通信ネットワーク(例えば、ゲートウェイ、ルータ、サーバ、セルラータワー)、サーバファーム、発電所、ウィンドファーム、石油パイプライン及びガスパイプライン、水処理及び配水、廃水収集及び廃水処理、並びに気象観測(例えば、温度センサ、風センサ、及び湿度センサ)と関連した、機器、デバイス、及び/又はインフラストラクチャも含まれてよい。IoTデバイス114には、例えば、任意の種類の「スマート」デバイス又はシステムも含まれてよく、ここには、数ある例の中でも特に、スマートエンターテイメントシステム(例えば、テレビ、オーディオシステム、ビデオゲームシステム)、家庭用又はオフィス用のスマート電気器具(例えば、暖房/換気/空調(HVAC)器具、冷蔵庫、洗濯機及び乾燥機、コーヒーメーカー)、電力制御システム(例えば、電気、照明、及びHVACの自動制御)、セキュリティシステム(例えば、アラーム、ロック、カメラ、動作感知装置、指紋スキャナ、顔認識システム)、及び他のホームオートメーションシステムなどが含まれる。IoTデバイス114は、建物、壁、床、地面、電柱、看板、給水塔、又は任意の他の据え置き式若しくは固定式の構造に取り付けられるなど、静的に配置されてよい。IoTデバイス114は、数ある例の中でも特に、車両又は航空機、ドローン、(例えば、貨物を追跡するための)パッケージ、モバイルデバイス、及びウェアラブルデバイスの中のデバイスなど、移動式であってもよい。さらに、IoTデバイス114は、エンドユーザデバイス112並びにエッジゲートウェイ及びルータ116を含む任意の種類のエッジデバイス110であってもよい。
【0022】
エッジゲートウェイ及び/又はルータ116は、エッジデバイス110との間の通信を容易にするのに用いられてよい。例えば、ゲートウェイ116は、最初は通信機能を何も持たずに開発された既存のレガシデバイス(例えば、「ブラウンフィールド」のIoTデバイス)に、そのような通信機能を提供してよい。ゲートウェイ116は、Bluetooth(登録商標)又はZigBee(登録商標)通信機能を備えたIoTデバイス114などの、短距離通信機能、独自の通信機能、又はそうでなければ限定された通信機能でエッジデバイス110の地理的範囲を広げるためにも利用されてよい。例えば、ゲートウェイ116は、最初から備わっている自身の通信機能(例えば、Bluetooth(登録商標)、ZigBee(登録商標))を用いてフロントホールをIoTデバイス114に提供することで、且つ別の有線通信媒体又は無線通信媒体(例えば、Ethernet(登録商標)、Wi-Fi(登録商標)、セルラー)を用いてバックホールを他のネットワーク150及び/又はクラウドサービス120に提供することで、IoTデバイス114とリモートネットワーク又はサービスとの間の仲介物として働くことができる。いくつかの実施形態において、ゲートウェイ116は、別のIoTデバイス114、エンドユーザデバイス112、又は他の種類のエッジデバイス110などの、専用ゲートウェイデバイス又は汎用デバイスによって実装されてよい。
【0023】
いくつかの例において、ゲートウェイ116は、特定のネットワーク管理及び/又はアプリケーション機能(例えば、IoTデバイス114のIoT管理及び/又はIoTアプリケーション機能)を、個々に、又はクラウドサービス120及び/若しくは他のエッジデバイス110などの他のコンポーネントと共に、実装することもできる。例えば、いくつかの実施形態において、構成パラメータ及び/又はアプリケーションロジックは、ゲートウェイデバイス116にプッシュされるか、又はそこからプルされてよく、これにより、ゲートウェイ116の範囲内の又はそこに近接したIoTデバイス114(又は他のエッジデバイス110)が、特定のIoT用途又は使用事例のために構成されることが可能になる。
【0024】
クラウドサービス120は、ネットワーク150を通じてリモートにホストされている、又は「クラウド」内にあるサービスを含んでよい。いくつかの実施形態において、例えば、クラウドサービス120は、データセンタのサーバ(例えば、アプリケーションサーバ又はデータベースサーバ)でリモートにホストされてよい。クラウドサービス120は、エッジデバイス110により利用され得る、又はエッジデバイス110用に利用され得る任意のサービスを含むことができ、これらのサービスには、限定されないが、数ある例の中でも特に、データストレージ、コンピュータによるサービス(例えば、データ解析、検索、診断及び故障管理)、セキュリティサービス(例えば、監視、アラーム、ユーザ認証)、マッピング及びナビゲーション、地理位置情報サービス、ネットワーク管理又はインフラストラクチャ管理、IoTアプリケーション及び管理サービス、支払い処理、音声及び映像のストリーミング、メッセージ、ソーシャルネットワーキング、ニュース、並びに天気が含まれる。いくつかの実施形態において、特定のクラウドサービス120が、本開示の全体にわたって説明される行列処理機能を含むことができ、したがって、行列処理ノード130として用いられてよい。
【0025】
概して、エッジデバイス110(及び、特にIoTデバイス114)は、極めて大量の様々なデータを生成することができる。IoTエッジデバイス114は通常、(例えば、クラウドサービス120によって)このデータを処理及び/又は保管のためにクラウドにオフロードする。しかし、クラウドサービス120は、IoTデバイス114及び他のエッジデバイス110により生成されたデータの急速に増加する量、種類、及び速度に対処するのに必ずしも好適でないことがある。例えば、クラウドベースの処理は、数ある例の中でも特に、時間的制約のあるデータ若しくは機密性の高いデータを処理する、又はネットワーク帯域幅の制約に直面した場合などの、特定の状況には理想的でないことがある。いくつかの実施形態において、クラウドサービス120は、クラウドサービスの性能を向上させるために、エッジデバイス110を用いて「エッジ」ベースの処理を活用することができる。エッジ処理とは、大量のデータを処理及び保管のためにクラウドに単に送り込むのではなく、(例えば、エッジデバイス110を用いて)特定のデータをネットワークエッジで、つまり、データが生成される場所の近くで処理することを含む手法である。特定のデータは依然として、より深い解析及び/又は長期保管などのために、必要に応じてクラウドに送信されてよい。エッジ処理は、(例えば、クラウドベースの処理が非効率的である、効果的でない、及び/又はセキュアでない場合に)クラウドベースの処理の短所を補完し、したがって、IoTデバイス114及び/又は他のエッジデバイス110により生成されるデータの増加する量、種類、及び速度への対処を向上させるのに用いられてよい。例えば、場合によっては、データを、クラウドではなくデータソースの近くで(例えば、ネットワークエッジにおいて)処理することで、性能を向上させることができ、及び/又はシステム故障若しくはシステム災害を回避することができる。エッジ処理は、ネットワーク帯域幅を節約することもでき、このことは、帯域幅の制約及び/又は限定されたネットワーク接続性に直面した場合に、特に有益となり得る。
【0026】
いくつかの実施形態において、エッジベースの処理をクラウドサービス120に提供するエッジデバイス110は、集合的に「フォグ(fog)」と呼ばれることがあるが、これは、エッジデバイス110が「クラウド」をネットワークのエッジまで広げるように働き、したがって、ネットワークエッジ上に「フォグ」を形成するからである。いくつかの実施形態において、「フォグ」の中のデバイス110は、例えば、相互接続規格又はプロトコルを用いて、互いに接続及び/又は通信することができる。例えば、いくつかの実施形態において、デバイスの相互接続は、2015年12月23日にOpen Connectivity Foundation(商標)(OCF)により公開された、open interconnect consortium(OIC)標準規格1.0を用いて実装されてよく、これにより、デバイスが互いに検出及び接続することが可能となる。用いられ得る別の相互接続プロトコルは、「スマート」ホームオートメーション及び類似した配置において用いられるモノのインターネット(IoT)デバイス向けのネットワーキングプロトコルであるThreadであり、これは、「Thread Group」という名称の団体組織により開発された。例えば、数ある中でも特に、最適化リンク状態ルーティング(OLSR)プロトコル、又はモバイルアドホックネットワーキングへのより良いアプローチ(better approach to mobile ad-hoc networking:B.A.T.M.A.N.)を含む他の相互接続プロトコルも用いられてよい。
【0027】
ネットワーク150は、コンピューティングシステム100のコンポーネント間の通信を容易にするのに用いられてよい。例えば、エンドユーザデバイス112及びIoTデバイス114などのエッジデバイス110は、互いに通信するために、及び/又は、1つ又は複数のリモートクラウドサービス120にアクセスするために、ネットワーク150を用いることができる。ネットワーク150には、任意の数又は任意の種類の通信ネットワークが含まれてよく、例えば、ローカルエリアネットワーク、ワイドエリアネットワーク、公共ネットワーク、インターネット、セルラーネットワーク、Wi-Fi(登録商標)ネットワーク、短距離ネットワーク(例えば、Bluetooth(登録商標)又はZigBee(登録商標))、及び/又は任意の他の有線又は無線ネットワーク若しくは通信媒体が含まれる。
【0028】
システム100のコンピューティングデバイスのいずれか、全て、又はいくつかが、特定のオペレーティングシステムの実行を仮想化するように適合された仮想マシンと共に、Linux(登録商標)若しくは他のUNIX(登録商標)ベースのオペレーティングシステム、Microsoft Windows(登録商標)、Windows(登録商標)Server、MacOS、Apple iOS(登録商標)、Google Android(登録商標)、又は任意のカスタマイズされたオペレーティングシステム及び/若しくは独自のオペレーティングシステムを含む任意のオペレーティングシステムを実行するように適合されてよい。
【0029】
図1は、複数の要素を含むか、又はそれらの要素と関連しているように説明されているが、図1のシステム100の中に例示された全ての要素が、本開示のそれぞれの代替的な実施態様において利用されていなくてよい。さらに、図1の例に関連して説明される要素のうち1つ又は複数が、システム100の外部に位置してよく、他の例では、特定の要素が、他の説明された要素のうち1つ又は複数、並びに例示された実施態様に説明されていない他の要素の中に、又はそれらの部分として含まれてよい。さらに、図1に例示された特定の要素が、他のコンポーネントと組み合わされてよく、また本明細書に説明されたこれらの目的に加えて、代替又は追加の目的のために用いられてよい。
[例示的な行列処理アーキテクチャ]
【0030】
図2A図2Cは、行列処理アーキテクチャの例示的な実施形態のブロック図を示す。
【0031】
いくつかの実施形態において、本開示の全体にわたって説明される行列処理機能が、図2A図2Cの行列処理アーキテクチャなどの行列処理アーキテクチャを用いて実装されてよい。図2A図2Cの行列処理アーキテクチャなどの行列処理アーキテクチャは、図1のシステム100及び/又はその関連コンポーネント(例えば、クラウドサービス120/データセンタサーバ、エッジデバイス110、行列処理ノード130)のうちいずれかを含む、本開示の全体にわたって説明されるものなどの、様々なシステム、デバイス、及び/又はコンポーネントに実装されるか、又はこれらに用いられてよい。いくつかの実施形態において、図2A図2Cの行列処理アーキテクチャは、ニューラルネットワークにおいて、人工知能及び機械学習を実装するのに用いられてよい。図2A図2Cに例示された行列処理アーキテクチャは、本開示の全体にわたって説明される行列処理機能を実行するための、単に1つの例示的な実施形態に過ぎない。他の実施形態が、異なる種類、異なる配置、及び/又は異なる数のコンポーネントを用いてよい。例えば、他の実施形態が、任意の数の行列処理チップ220、行列処理クラスタ230、行列処理ユニット(MPU)234、高帯域幅メモリ(HBM)モジュール240、及び/又はメモリリソースブロック(MRB)238を含んでよい。さらに、図2A図2Cの行列処理アーキテクチャの任意のコンポーネント(例えば、行列処理システム200、行列処理チップ220、及び/又は行列処理クラスタ230のうち任意のコンポーネント)の全て又は一部が、別個の又は独立型のコンポーネント若しくはチップとして実装されてよく、あるいは様々なコンピュータコンポーネントを単一のチップに統合するシステムオンチップ(SoC)などの、他のコンポーネント又はチップと統合されてよい。
【0032】
図2Aは、行列処理システム200の例示的な実施形態のブロック図を示す。例示された実施形態において、行列処理システム200には、ホストプロセッサ260、ホストメモリ270、行列処理リソース210、及び相互接続バス280が含まれている。
【0033】
ホストプロセッサ260は、行列処理システム200を制御及び/又は管理するように構成されてよい。例えば、いくつかの実施形態において、ホストプロセッサ260は、複雑な行列演算を実行するために、行列処理リソース210を用いることができる。ホストプロセッサ260は、行列処理システム200の行列処理機能を制御及び/又は管理することができる任意の処理リソースであってよい。例えば、いくつかの実施形態において、ホストプロセッサ260は、図3及び図4のコンピュータプロセッサ300又は400をそれぞれ用いて実装されてよい。いくつかの実施形態において、ホストプロセッサ260は、行列処理リソース210に通信可能に結合されている別個の又は独立型のコンポーネントであってよい。あるいは、他の実施形態において、ホストプロセッサ260及び行列処理リソース210は、同じコンポーネント又はチップに統合されてよい。例えば、いくつかの実施形態において、ホストプロセッサ260及び行列処理リソース210を含む行列処理システム200のコンポーネントが、システムオンチップ(SoC)として実装されてよい。
【0034】
ホストメモリ270は、揮発性メモリ及び/若しくは不揮発性メモリの任意の種類又は組み合わせを含んでよい。揮発性メモリの例には、様々な種類のランダムアクセスメモリ(RAM)が含まれ、数ある例の中でも特に、ダイナミックランダムアクセスメモリ(DRAM)、同期型ダイナミックランダムアクセスメモリ(SDRAM)、及びスタティックランダムアクセスメモリ(SRAM)などが含まれる。不揮発性メモリに例には、数ある例の中でも特に、ディスクベースの記憶媒体(例えば、磁気及び/又は光記憶媒体)、固体ストレージ(例えば、プレーナ型又は3次元(3D)型のNANDフラッシュメモリ又はNORフラッシュメモリを含む、任意の形態の永続的フラッシュメモリ)、3Dクロスポイントメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、及び/又は他の種類の不揮発性ランダムアクセスメモリ(RAM)が含まれる。例えばホストメモリ270は、実行中に、コード及び/又はデータなどの、ホストプロセッサ260の情報を格納するのに用いられてよい。
【0035】
相互接続バス280は、いくつかの実施形態において、ホストプロセッサ260及びホストメモリ270を行列処理リソース210に通信可能に結合するのに用いられてよい。相互接続バス280は、数ある例の中でも特に、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)、ユニバーサルシリアルバス(USB)、又はスモールコンピュータシステムインタフェース(SCSI)などの、任意の相互接続プロトコルを用いることができる。
【0036】
行列処理リソース210は、行列演算を実行するように構成された任意の処理リソースを含んでよい。例えば、行列処理リソース210は、行列乗算演算、畳み込み演算、要素単位の行列演算(例えば、+、×、/、<、>、==)、次元シャッフル演算、及び/又はこれらの任意の組み合わせを実行するように構成されてよい。いくつかの実施形態において、行列処理リソース210は、行列演算を実行するために設計され最適化されている処理リソースを含んでよい。いくつかの実施形態において、行列処理リソース210は、複数のレベルの処理リソースで階層的に配置されてもよい。例えば、例示された実施形態において、行列処理リソース210は、複数の行列処理チップ220を含み、それぞれの行列処理チップ220の中に任意の処理リソースを含んでもよい。例えば、図2B及び図2Cに関連して後述されるように、それぞれの行列処理チップ220は、複数の高帯域幅メモリ(HBM)モジュール240及び複数の行列処理クラスタ230を含んでよく、それぞれの行列処理クラスタ230は複数の行列処理ユニット234を含んでよい。したがって、いくつかの実施形態において、行列処理リソース210は複数の行列処理チップ220、複数の高帯域幅メモリ(HBM)モジュール240、及び複数の行列処理クラスタ230をそれぞれの行列処理チップ220に含んでよく、及び/又は複数の行列処理ユニット234をそれぞれの行列処理クラスタ230に含んでよい。
【0037】
行列処理チップ220は、例えば、行列演算を実行するように構成された任意のチップ又は他のコンポーネントであってよい。例えば、いくつかの実施形態において、行列処理チップ220は、PCIeインタフェースなどの、任意の種類の相互接続インタフェースを用いてホストプロセッサ260に接続された周辺機器のカード又はチップであってよい。いくつかの実施形態において、行列処理チップ220は、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、及び/又は任意の他の種類の回路などの集積回路を用いて実装されてよい。例示された実施形態において、行列処理チップ220は循環配置で構成されており、通信チャネル215が隣接する行列処理チップ220の間に設けられている。いくつかの実施形態において、通信チャネル215は、隣接する行列処理チップ220の間に一方向の通信を提供してよい。しかし、他の実施形態において、通信チャネル215は、隣接する行列処理チップ220の間に双方向の通信を提供してよい。隣接する処理リソースの間で一方向の通信を用いる循環配置は、「単一循環」構成と呼ばれることがあり、隣接する処理リソースの間で双方向の通信を用いる循環配置は、「二重循環」構成と呼ばれることがある。
【0038】
さらに、例示されていないが、いくつかの実施形態において、行列処理システム200は、通信ネットワークを通じて通信するための通信インタフェースを含んでよい。例えば、いくつかの実施形態において、行列処理システム200は、分散された行列演算を実行するために、1つ又は複数のリモート行列処理チップと、ネットワークを通じて通信することができる。
【0039】
図2Bは、行列処理チップ220の例示的な実施形態のブロック図を示す。例示された実施形態において、行列処理チップ220には、コントローラ222、ホストインタフェース224、チップ間リンク225、高帯域幅メモリ(HBM)モジュール240、及び行列処理クラスタ230が含まれる。
【0040】
コントローラ222は、行列処理チップ220により実行される行列演算を制御及び/又は管理するように構成されてよい。いくつかの実施形態において、コントローラ222は、図2Aのホストプロセッサ260、及び/又は図2Cの行列処理クラスタ230のマスタ制御CPU(MCC)232と共に、行列演算を制御及び/又は管理することができる。例えば、いくつかの実施形態において、ホストプロセッサ260、コントローラ222、及び/又はマスタ制御CPU(MCC)232は、行列演算又はコマンドを受信し、行列演算及び行列オペランドを行列処理クラスタ230及び高帯域幅メモリ(HBM)モジュール240の全体に分散するように構成されてよい。いくつかの実施形態において、コントローラ222は、マイクロプロセッサ、集積回路、並びに/又は任意の他の種類の回路及び/若しくは処理ロジックであってよい。
【0041】
ホストインタフェース224は、行列処理チップ220が図2Aのホストプロセッサ260と通信することを可能にする通信インタフェースであってよい。いくつかの実施形態において、例えば、コントローラ222は、図2Aのホストプロセッサ260と通信するために、ホストインタフェース224を用いることができる。ホストインタフェース224は、数ある例の中でも特に、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)、ユニバーサルシリアルバス(USB)、又はスモールコンピュータシステムインタフェース(SCSI)を含む、任意の種類の相互接続プロトコル又はインタフェースを用いることができる。
【0042】
チップ間リンク(ICL)225は、行列処理チップ220が他の行列処理チップと通信することを可能にすることができる。例えば、チップ間リンク225は、図2Aの行列処理チップ220の間に通信チャネル215を実装するのに用いられてよい。チップ間リンク225は、例えば、行列処理チップ220が別の行列処理チップと通信することを可能にする任意の通信インタフェースであってよい。いくつかの実施形態において、行列処理チップ220は、複数のチップ間リンク225(例えば、12個のチップ間リンク)を含んでよい。いくつかの実施形態において、チップ間リンク225は、1つ又は複数のシリアライザ/デシリアライザ(SerDes)インタフェースを用いて実装されてよい。SerDesインタフェースは、データをシリアルからパラレルに、またその逆に変換する通信インタフェースであってよい。例えば、SerDesインタフェースの送信機は、シリアル/パラレル変換器を含んでよく、SerDesインタフェースの受信機は、パラレル/シリアル変換器を含んでよい。いくつかの実施形態において、行列処理チップ220は、別の行列処理チップへの接続ごとに複数のSerDesインタフェース(例えば、接続された行列処理チップのそれぞれの対の間に、4つのSerDesインタフェース)を用いることができる。
【0043】
高帯域幅メモリ(HBM)モジュール240は、行列処理チップ220に関連付けられた、行列オペランド及び他の行列データを格納するのに用いられるメモリコンポーネントであってよい。いくつかの実施形態において、高帯域幅メモリ(HBM)モジュール240は、行列データを効率的に格納及び引き出すように設計されてよい。いくつかの実施形態において、高帯域幅メモリ(HBM)モジュール240は、複数の次元のデータを格納及び引き出すように構成された多次元メモリコンポーネントであってよい。例えば、いくつかの実施形態において、高帯域幅メモリ(HBM)モジュール240は、行及び列などの2次元のデータを格納及び引き出すように構成されたメモリコンポーネントであってよい。しかし他の実施形態は、任意の他の数の次元(例えば、1次元、3次元、4次元など)を用いたデータを、格納及び引き出すように構成されたメモリコンポーネントを用いることができる。例示された実施形態において、行列処理チップ220は、4つの高帯域幅メモリ(HBM)モジュール240a~dを含む。いくつかの実施形態において、高帯域幅メモリ(HBM)モジュール240は、行列処理チップ220の行列処理クラスタ230によって共有されてよい。
【0044】
行列処理クラスタ230は、数ある例の中でも特に、行列乗算、畳み込み、及び/又は次元シャッフルなどの行列演算を実行するように構成された処理リソースを含んでよい。いくつかの実施形態において、行列処理クラスタ230は、行列処理を並列に実行することで特定の行列演算を実行するのに集合的に用いられてよい。例示された実施形態において、行列処理チップ220は、12個の行列処理クラスタ230a~lを含む。さらに、例示された実施形態において、行列処理クラスタ230は、2次元のメッシュ型相互接続トポロジを用いて構成又は配置されている。行列処理クラスタ230の相互接続トポロジは、行列処理クラスタ230の間で循環型通信を容易にすることができる。さらに、他の実施形態は、任意の数及び/又は任意の配置の行列処理クラスタ230を含んでよい。
【0045】
図2Cは、行列処理クラスタ230の例示的な実施形態のブロック図を示す。例示された実施形態において、行列処理クラスタ230には、マスタ制御CPU(MCC)232、行列処理ユニット(MPU)234、スライスエンジン236、及びメモリリソースブロック(MRB)238が含まれる。
【0046】
マスタ制御CPU(MCC)232は、行列処理クラスタ230により実行される行列演算を制御及び/又は管理するように構成されてよい。いくつかの実施形態において、マスタ制御CPU232は、マイクロプロセッサ、集積回路、並びに/又は任意の他の種類の回路及び/若しくは処理ロジックであってよい。いくつかの実施形態において、マスタ制御CPU232は、図2Aのホストプロセッサ260及び/又は図2Bのコントローラ222などの、別のコンポーネントから命令を受信することができる。命令に基づいて、マスタ制御CPU232は次に、数ある例の中でも特に、行列乗算、畳み込み、及び/又は次元シャッフルなどの行列演算を実行するための行列処理ユニット234を用いることができる。例えば、マスタ制御CPU232は、C=A×Bなどの行列乗算演算を実行する命令を受信することができる。命令は、行列ごとにハンドル又は識別子を含んでよく、メモリリソースブロック(MRB)238に行列がどのように格納されることになるかを示すこともできる。行列A及びBは次に、一連のより小さい行列(例えば、32×32行列)に分割されてよい。行列演算は次に、出力行列Cが完全に計算されるまで、より小さい行列に対して実行されてよく、部分的結果がメモリリソースブロック(MRB)238に格納されてよい。
【0047】
行列処理ユニット(MPU)234は、行列乗算、畳み込み、及び/又は次元シャッフルなどの行列演算を実行するように構成されてよい。いくつかの実施形態において、行列処理ユニット(MPU)234は、マスタ制御CPU(MCC)232から受信したコマンドに基づいて行列演算を実行する。さらに、いくつかの実施形態において、それぞれの行列処理クラスタ230は、複数の行列処理ユニット(MPU)234を含んでよい。例えば、例示された実施形態において、行列処理クラスタ230には、2つの行列処理ユニット(MPU)234が含まれる。行列処理ユニット(MPU)234は、行列乗算などの行列演算を小行列(例えば、32×32行列)に対して実行することが可能であってよい。場合によっては、行列処理ユニット(MPU)234は、行列乗算演算を実行するように設計及び/又は最適化されてよい。行列処理ユニット(MPU)234は、メモリリソースブロック(MRB)238から行列オペランドを読み込むことができる。いくつかの実施形態において、行列処理ユニット(MPU)234は、以下の算術演算、すなわち、行列乗算、単項行列演算、二項行列演算(加算(+)、減算(-)、乗算(×)、除算(/)、ビット単位のXOR、AND、OR、論理及び算術の左シフト及び右シフト、比較(>、<、>=、<=、==、!=)など)、並びに、列方向、行方向、及び行列全体の演算(合計、最大値、及び最小値など)をサポートすることができる。
【0048】
スライスエンジン236は、特定の行列演算の行列オペランドをより小さい部分行列にスライスするように構成されてよい。例えば、いくつかの実施形態において、マスタ制御CPU(MCC)232は、行列処理ユニット(MPU)234用に、行列オペランドをより小さい部分行列に分割するために、スライスエンジン236を用いることができる。いくつかの実施形態において、スライスエンジン236は、畳み込み演算のために行列スライスを実行する畳み込みスライスエンジン(CSE)を含んでよい。例えば、いくつかの実施形態において、畳み込みスライスエンジン(CSE)は、畳み込み演算が行列乗算演算としてキャストされることを可能にする方式で行列オペランドをスライスすることができ、したがって、同じ処理ロジックが行列乗算演算及び行列畳み込み演算の両方を実行することが可能になる。さらに、いくつかの実施形態において、スライスエンジン236及び/又は関連畳み込みスライスエンジン(CSE)は、行列の次元を並べ替える次元シャッフル演算を実行するのに用いられてよい。
【0049】
メモリリソースブロック(MRB)238は、行列オペランド及び他の行列データを格納するのに用いられる行列処理クラスタ230上のメモリコンポーネントであってよい。いくつかの実施形態において、メモリリソースブロック(MRB)238は、行列データを効率的に格納及び引き出すように設計されてよい。いくつかの実施形態において、メモリリソースブロック(MRB)238は、データを複数の次元で格納及び引き出すように構成された多次元メモリコンポーネントであってよい。例えば、いくつかの実施形態において、メモリリソースブロック(MRB)238は、行及び列などの2次元で、データを格納及び引き出すように構成されたメモリコンポーネントであってよい。例示された実施形態において、行列処理クラスタ230には、10個のメモリリソースブロック(MRB)238が含まれる。しかし他の実施形態では、異なる数のメモリリソースブロック(MRB)238が行列処理クラスタ230上に含まれてよい。いくつかの実施形態において、それぞれのメモリリソースブロック(MRB)238は、特定のサイズの行列(例えば、256×512行列)を格納することができてよい。いくつかの実施形態において、メモリリソースブロック(MRB)238は、特定の行列処理クラスタ230の行列処理ユニット(MPU)234によって共有されてよい。
【0050】
いくつかの実施形態において、図2A図2Cの行列処理アーキテクチャは、本開示の全体にわたって説明される行列処理機能を実装するのに用いられてよい。例えば、行列処理システム200は、利用可能な処理リソースを用いて100%の処理効率を実現する分散手法を用いて、行列演算を実行するのに用いられてよい。例えば、いくつかの実施形態において、行列演算が、行列処理のために最適化されている複数の処理リソース210の全体にわたって分散されてよく、したがって、行列演算の継続期間全体にわたって処理リソース210の完全利用が可能になる。例えば、行列処理システム200は、行列演算を実行するために設計され最適化されている複数の処理リソース210を含んでよい。いくつかの実施形態において、これらの処理リソース210は、単一循環配置又は二重循環配置で構成されてよい。さらに、処理リソース210は、複数のレベルの処理リソースで階層的に配置されてよい。例えば、いくつかの実施形態において、処理リソース210は、複数の行列処理チップ220、複数の高帯域幅メモリ(HBM)モジュール240、及び複数の行列処理クラスタ230をそれぞれの行列処理チップ220に含んでよく、及び/又は複数の行列処理ユニット(MPU)234をそれぞれの行列処理クラスタ230に含んでよい。この処理アーキテクチャによって、行列演算が複数の処理リソース210の全体に分散され、及び/又は、行列演算が100%の処理効率で階層を処理することが可能となる。さらに、この処理アーキテクチャによって、行列演算が、並列に動作する可変数の処理リソース210の全体に効率的にスケーリングされるとともに、100%の処理効率を実現することが可能となる。例えば、スケーリングが、特定の行列演算を実行するのに用いられる処理リソース210の数、例えば、行列処理システム200又はサーバの数、それぞれの行列処理システム200又はサーバ内の行列処理チップ220の数などを調整することで実現されてよい。
【0051】
一例として、図2A図2Cの行列処理アーキテクチャは、行列乗算演算及び/又は畳み込み演算を実装するのに用いられてよい。例えば、いくつかの実施形態において、行列オペランドを伝達するためのレイテンシが行列処理時間より少なくなる方式で、行列乗算演算が複数の処理リソース210の全体に分散されてよく、これにより、行列処理が実行されている間に、行列オペランドの伝達を完了させることが可能となる。例えば、特定の次元を有する行列オペランドを含む特定の行列演算(例えば、「細長い」行列オペランドを用いた行列乗算)の場合、行列オペランドにアクセスし且つこれを伝達するのに必要な時間は、実際の行列計算を実行するのに必要な時間を上回ることがあり、その結果、行列オペランドがメモリから取得され及び/又は処理リソース210に伝達されている間は、アイドル処理時間になる。例えば、単一循環構成(例えば、それぞれの処理リソース210が、いかなるときにでも、隣接する1つの処理リソース210だけから行列オペランド及びデータを取得する)では、これらの特定の種類の行列演算及び行列オペランドに対して、100%の処理効率を実現できないことがある。しかし、処理リソース210の二重循環構成では、それぞれの処理リソースが、自身の両隣の処理リソース210から行列オペランド及びデータを同時に取得する間に、行列計算を実行することが可能となり、これにより、行列オペランドを伝達するためのレイテンシが著しく減少するので、あらゆるアイドル処理時間が回避される。例えば、特定の演算の通信レイテンシは、単一循環手法ではなく二重循環手法を用いる場合、半分に減らすことができる。このように、行列オペランド及び行列データを伝達するためのレイテンシは、行列処理時間によって完全にマスクされ、したがって、あらゆる無駄な時間又はアイドル処理時間を回避して、100%の処理効率を実現することができる。したがって、大型の行列オペランド及び/又は特定の次元を有する行列オペランド、例えば、正方行列でも単一ベクトルでもない大型の行列オペランド(例えば、幅よりも高さがはるかに大きい「細長い」行列)などに対してさえも、行列演算(例えば、行列乗算又はGEMM)が効率的に実行され得る。例えば、行列乗算が、2つの細長い行列を掛ける、細長い行列と正方行列を掛けるなどの場合でも、効率的に実行され得る。同様に、利用可能な処理リソースを用いて100%の処理効率になる方式で、畳み込み演算が複数の処理リソース210の全体に分散されてよい。
【0052】
一例として、行列演算又はコマンドが受信されると、行列演算は、行列処理システム200の処理リソース210の全体に分散されてよい。例えば、行列オペランド(又は入力行列)は、利用可能な処理リソース210の数に基づいて区画分けされてよい。さらに、いくつかの実施形態において、これらの区画は、行列オペランドの行全体にわたってよく、及び/又は行列オペランドの任意の他の次元全体にわたってよい。次に、各区画が特定の処理リソース210に分散されてよい。それぞれの処理リソース210は次に、複数の部分行列演算を実行することができる。いくつかの実施形態において、複数の部分行列演算は、複数の段階で実行される。例えば、それぞれの処理リソース210は、特定の段階の部分行列演算を実行し、その間に同時に、隣接する処理リソース210との間で部分行列データを送信及び受信することができる。例えば、処理リソース210の単一循環構成では、それぞれの処理リソース210は、それぞれの隣接処理リソースとの間で部分行列データを送信又は受信する。同様に、処理リソース210の二重循環構成では、それぞれの処理リソース210は、それぞれの隣接処理リソース210との間で部分行列データを送信及び受信することができる。
【0053】
次に、それぞれの処理リソース210は、次の部分行列演算に部分行列データを用いることができる。次に、行列演算の結果は、処理リソース210により集合的に実行される部分行列演算に基づいて、決定されてよい。
【0054】
さらに、処理リソース210が階層的に配置されている場合、行列演算は階層方式で分散されてよい。例えば、行列オペランド(又は入力行列)は、利用可能な行列処理チップ220の数に基づいて、最初に区画分けされてよい。次に、各区画及び関連した部分行列演算が、特定の行列処理チップ220に分散されてよい。次に、特定の行列処理チップ220に分散された区画及び部分行列演算は、特定の行列処理チップ220の行列処理クラスタ230及び/又は高帯域幅メモリ(HBM)モジュール240の全体に、同様に区画分けされ分散されてよい。例えば、特定の行列演算の場合、部分行列演算が、それぞれの行列処理クラスタ230に分散されてよい。あるいは、特定の行列演算の場合、部分行列演算が、様々な「論理処理ノード」(例えば、高帯域幅メモリ(HBM)モジュール240と関連付けられた行列処理クラスタ230のグループ)の全体に分散されてよく、その後、特定の論理処理ノードのそれぞれの行列処理クラスタ230に分散されてよい。いくつかの実施形態において、行列処理クラスタ230(及び/又は論理処理ノード)は、行列処理チップ220と同様に循環的に構成されてよい。次に、特定の行列処理クラスタ230に分散された区画及び部分行列演算は、特定の行列処理クラスタ230の行列処理ユニット(MPU)234の全体に、同様に区画分けされ分散されてよい。
[例示的なコンピュータプロセッサアーキテクチャ]
【0055】
図3及び図4は、本明細書で開示される実施形態に従って用いられ得るコンピュータプロセッサの例示的な実施形態のブロック図を示す。例えば、図3及び図4に例示されるコンピュータプロセッサは、行列処理システムと関連したホストプロセッサ(例えば、図2Aの行列処理システム200のホストプロセッサ260)として、又は本開示の全体にわたって論じられる他のコンポーネント及び/若しくはデバイスと関連したプロセッサ(例えば、図1のシステム100のコンポーネントと関連したプロセッサ)として用いられてよい。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯メディアプレーヤ、ハンドヘルドデバイス、及び様々な他の電子デバイス用の、当技術分野において知られている他のプロセッサ並びにシステム設計及び構成も好適である。概して、本明細書で開示されるようなプロセッサ及び/又は他の実行ロジックを組み込むことができる、膨大な種類のシステム又は電子デバイスが一般に好適である。
【0056】
図3は、プロセッサ300の例示的な実施形態のブロック図を示す。プロセッサ300は、本開示の全体にわたって説明される実施形態に関連して用いられ得るハードウェアデバイスの種類の一例である。プロセッサ300は、任意の種類のプロセッサであってよく、マイクロプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、マルチコアプロセッサ、シングルコアプロセッサ、又はコードを実行する他のデバイスなどがある。図3には1つのプロセッサ300だけが例示されているが、代替的に処理要素が、図3に例示されたプロセッサ300を1つより多く含んでよい。プロセッサ300はシングルスレッドコアであってよく、少なくとも1つの実施形態では、プロセッサ300は、コアごとに1つより多くのハードウェアスレッドコンテキスト(又は「論理プロセッサ」)を含むことができるという点で、マルチスレッドであってよい。
【0057】
図3は、一実施形態による、プロセッサ300に結合されたメモリ302も例示する。メモリ302は、当業者に知られているか、そうでなければ当業者が利用可能な、幅広い種類のメモリ(メモリ階層の様々なレイヤを含む)のうちいずれかであってよい。そのようなメモリ要素には、限定されないが、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、フィールドプログラマブルゲートアレイ(FPGA)の論理ブロック、消去可能プログラマブルリードオンリメモリ(EPROM)、及び電気的消去可能プログラマブルROM(EEPROM)が含まれてよい。
【0058】
プロセッサ300は、本明細書で詳述されるアルゴリズム、プロセス、又は動作と関連した任意の種類の命令を実行することができる。一般に、プロセッサ300は要素又は項目(例えば、データ)を、ある状態又は状況から別の状態又は状況に変換することができる。
【0059】
プロセッサ300により実行される1つ又は複数の命令であり得るコード304は、メモリ302に格納されてよく、あるいは、ソフトウェア、ハードウェア、ファームウェア、若しくはこれらの任意の好適な組み合わせに、又は、必要に応じて特定のニーズに基づき、任意の他の内部若しくは外部のコンポーネント、デバイス、要素、若しくはオブジェクトに格納されてよい。1つの例では、プロセッサ300は、コード304により示される命令のプログラムシーケンスに従ってよい。各命令はフロントエンドロジック306に入り、1つ又は複数のデコーダ308により処理される。デコーダはその出力として、あらかじめ定義されたフォーマットの固定幅マイクロオペレーションなどのマイクロオペレーションを生成してよく、又は他の命令、マイクロ命令、若しくは元のコード命令を反映する制御信号を生成してよい。フロントエンドロジック306は、レジスタリネーミングロジック及びスケジューリングロジックも含んでよく、これらは一般に、リソースを割り当て、実行命令に対応する演算をキューに入れる。
【0060】
プロセッサ300は、実行ユニット316a、316b、316nなどのセットを有する実行ロジック314も含んでよい。いくつかの実施形態は、特定の機能又は機能のセットに専用の多数の実行ユニットを含んでよい。他の実施形態が1つの実行ユニットだけ、又は特定の機能を実行することができる1つの実行ユニットを含んでよい。実行ロジック314は、コード命令により指定された演算を実行する。
【0061】
コード命令により指定された演算の実行が完了した後、バックエンドロジック318はコード304の命令をリタイアすることができる。1つの実施形態において、プロセッサ300はアウトオブオーダ実行を可能にするが、命令のインオーダリタイアメントを必要とする。リタイアメントロジック320は、様々な既知の形態(例えば、リオーダバッファなど)を取ってよい。このように、プロセッサ300は、コード304の実行中に、少なくともデコーダ、レジスタリネーミングロジック310により利用されるハードウェアレジスタ及びテーブル、並びに実行ロジック314により修正される任意のレジスタ(不図示)によって生成される出力に関して変換される。
【0062】
図3には示されていないが、処理要素が、プロセッサ300を搭載したチップ上に他の要素を含んでよい。例えば、処理要素が、プロセッサ300と共にメモリ制御ロジックを含んでよい。処理要素は、I/O制御ロジックを含んでよく、及び/又は、メモリ制御ロジックと統合されたI/O制御ロジックを含んでよい。処理要素は、1つ又は複数のキャッシュも含んでよい。いくつかの実施形態において、不揮発性メモリ(フラッシュメモリ又はヒューズなど)も、プロセッサ300を搭載したチップ上に含まれてよい。
【0063】
図4は、マルチプロセッサ400の例示的な実施形態のブロック図を示す。図4に示されるように、マルチプロセッサシステム400は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続450を介して結合された第1のプロセッサ470及び第2のプロセッサ480を含む。いくつかの実施形態において、プロセッサ470及び480のそれぞれは、図3のプロセッサ300の何らかのバージョンであってよい。
【0064】
統合メモリコントローラ(IMC)ユニット472及び482をそれぞれ含むプロセッサ470及び480が示されている。プロセッサ470は、そのバスコントローラユニットの一部として、ポイントツーポイント(P-P)インタフェース476及び478も含み、同様に、第2のプロセッサ480はP-Pインタフェース486及び488を含む。プロセッサ470、480は、ポイントツーポイント(P-P)インタフェース450を介し、P-Pインタフェース回路478、488を用いて情報を交換することができる。図4に示されるように、IMC472及び482は、プロセッサをそれぞれのメモリに、すなわちメモリ432及びメモリ434に結合し、これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【0065】
プロセッサ470、480はそれぞれ、個々のP-Pインタフェース452、454を介し、ポイントツーポイントインタフェース回路476、494、486、498を用いて、チップセット490と情報を交換することができる。チップセット490は任意で、高性能インタフェース439を介してコプロセッサ438と情報を交換することができる。1つの実施形態において、コプロセッサ438は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、行列プロセッサなどの専用プロセッサである。
【0066】
共有キャッシュ(不図示)が、どちらかのプロセッサに含まれても、又は両方のプロセッサの外側に含まれてもよく、それでもP-P相互接続を介してプロセッサと接続されており、これにより、プロセッサが低電力モードに入っている場合に、どちらか又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
【0067】
チップセット490は、インタフェース496を介して第1のバス416に結合されてよい。1つの実施形態において、第1のバス416は、ペリフェラルコンポーネントインターコネクト(PCI)バス、又はPCIエクスプレスバス若しくは別の第3世代I/O相互接続バスなどのバスであってよいが、本開示の範囲はそのように限定されていない。
【0068】
図4に示されるように、様々なI/Oデバイス414が、第1のバス416を第2のバス420に結合するバスブリッジ418と共に、第1のバス416に結合されてよい。1つの実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィックスアクセラレータ又はデジタル信号処理(DSP)ユニットなど)、行列プロセッサ、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサなどの、1つ又は複数の追加のプロセッサ415が第1のバス416に結合されている。1つの実施形態において、第2のバス420はローピンカウント(LPC)バスであってよい。様々なデバイスが第2のバス420に結合されてよく、1つの実施形態において、それらのデバイスには、例えば、キーボード及び/又はマウス422、通信デバイス427、並びに命令/コード及びデータ430を含み得るディスクドライブ又は他の大容量ストレージデバイスなどのストレージユニット428が含まれる。さらに、オーディオI/O424が第2のバス420に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図4のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバス又は他のそのようなアーキテクチャを実装してよい。
【0069】
図4の任意のコンポーネントのうち全て又は一部が、別個の又は独立型のコンポーネント又はチップとして実装されてよく、あるいは、様々なコンピュータコンポーネントを単一のチップに統合するシステムオンチップ(SoC)などの、他のコンポーネント又はチップと統合されてよい。
【0070】
本明細書で開示されるメカニズムの実施形態が、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。特定の実施形態が、少なくとも1つのプロセッサ、ストレージシステム(揮発性及び不揮発性のメモリ及び/又はストレージ要素を含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを備えるプログラマブルなシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
【0071】
図4に例示されたコード430などのプログラムコードは、本明細書で説明される機能を実行して出力情報を生成する命令を、入力するように適用されてよい。出力情報は、1つ又は複数の出力デバイスに既知の方式で適用されてよい。本出願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサなどのプロセッサを有するあらゆるシステムを含む。
【0072】
プログラムコードは、処理システムと通信するために、高水準手続き型プログラミング言語又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要であれば、アセンブリ言語又は機械語でも実装されてよい。つまり、本明細書で説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されていない。いずれの場合でも、言語は、コンパイラ型言語又はインタプリタ型言語であってよい。
【0073】
少なくとも1つの実施形態の1つ又は複数の態様が、機械可読媒体に格納された、プロセッサ内の様々なロジックを表す代表的な命令によって実装されてよく、その命令は、機械により読み出された場合、本明細書で説明される技術を実行するロジックを機械に作らせる。そのような表現は「IPコア」として知られており、有形の機械可読媒体に格納され、実際にロジック又はプロセッサを作る製造機械に読み込むために様々な顧客又は製造施設に供給されてよい。
【0074】
そのような機械可読記憶媒体は、限定されないが、機械又は装置により製造又は形成された非一時的で有形の構成をした物品を含んでよく、これらの物品には、ハードディスク、フロッピ(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD-ROM)、コンパクトディスクリライタブル(CD-RW)、及び光磁気ディスクを含む任意の他の種類のディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)やスタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、及び相変化メモリ(PCM)などの半導体デバイス、磁気カード若しくは光カード、又は電子命令を格納するのに好適な任意の他の種類の媒体などの記憶媒体が含まれる。
【0075】
したがって、本開示の実施形態は非一時的で有形の機械可読媒体も含み、その媒体には命令が含まれており、又はハードウェア記述言語(HDL)などの設計データが含まれており、HDLによって、本明細書で説明される構造、回路、装置、プロセッサ、及び/又はシステムの特徴が定義される。そのような実施形態は、プログラム製品とも呼ばれることがある。
[プログラマブルな行列処理エンジン]
【0076】
図5は、プログラマブルな行列処理エンジン500の例示的な実施形態を示す。いくつかの実施形態において、行列処理エンジン500は、図2A図2Cの行列処理アーキテクチャなどの行列処理アーキテクチャにより実装されてよい。例えば、いくつかの実施形態において、行列処理エンジン500は、行列処理チップ上の行列処理クラスタ(例えば、図2B及び図2Cの行列処理チップ220の行列処理クラスタ230)により実装されてよい。これらの実施形態では、特定の行列処理クラスタが、その関連した行列処理エンジン500を用いて、(例えば、本開示の全体にわたって説明されるような)複数の行列処理リソースの全体に分散された、特定の行列演算と関連付けられた部分行列演算などの、行列ベースの処理及び演算を実行してよい。
【0077】
例示された実施形態において、行列処理エンジン500には、読み出しエンジン535、スライスエンジン536、及び出力エンジン537が含まれ、これらについては、下記にさらに論じられている。例示された実施形態は、行列処理エンジン500を用いて行列演算を実行する場合に関与し得る、基礎的な行列処理アーキテクチャの様々なコンポーネントも示す。例えば、例示された実施形態には、高帯域幅メモリ(HBM)モジュール540、マスタ制御CPU(MCC)532、行列処理ユニット(MPU)534、メモリリソースブロック(MRB)538、及び行列ルーチンメモリ539が示されている。例示された実施形態において、例えば、これらの様々なコンポーネントは行列処理エンジン500に重ね合わされており、下記にさらに説明されるように、これらのコンポーネントが行列処理エンジン500によって、いつどのように用いられるかを示している。
【0078】
HBMモジュール540は、大量の行列データを効率的に格納及び引き出すように設計された高帯域幅メモリ(HBM)モジュールであってよい。いくつかの実施形態において、例えば、HBMモジュール540は、行列処理チップ上の高帯域幅メモリ(HBM)モジュール(例えば、図2Bの行列処理チップ220のHBMモジュール240)であってよい。
【0079】
MCC532は、行列演算を制御及び/又は管理するのに用いられるマスタ制御CPU(MCC)であってよい。いくつかの実施形態において、例えば、MCC532は、特定の行列処理クラスタ上のマスタ制御CPU(例えば、図2Cの行列処理クラスタ230のMCC232)であってよい。これらの実施形態において、例えば、MCC532は、その特定のクラスタ上で実行される行列演算を制御及び/又は管理するのに用いられてよい。
【0080】
MPU534は、行列演算を実行するのに用いられる行列処理ユニット(MPU)であってよい。いくつかの実施形態において、例えば、MPU534は、特定の行列処理クラスタ上の行列処理ユニット(例えば、図2Cの行列処理クラスタ230のMPU234)であってよい。例えば、いくつかの実施形態において、行列処理クラスタは、行列演算を実行するために、複数の行列処理ユニット(MPU)を含んでよい。例えば、例示された実施形態は、2つの行列処理ユニット(MPU)534a及び534bを示す。いくつかの実施形態において、MPU534は、マスタ制御CPU(MCC)532からのコマンド又は命令に基づいて、行列演算を実行することができる。
【0081】
メモリリソースブロック(MRB)538は、行列データを効率的に格納及び引き出すように設計されたメモリコンポーネントであってよい。いくつかの実施形態において、例えば、MRB538は、特定の行列処理クラスタ上のメモリリソースブロック(例えば、図2Cの行列処理クラスタ230のメモリリソースブロック238)であってよい。これらの実施形態において、例えば、MRB538は、特定のクラスタ上で実行される行列演算と関連した行列データを格納及び引き出すのに用いられてよい。
【0082】
行列ルーチンメモリ539は、行列ルーチンを格納するのに用いられるメモリコンポーネントであってよい。例えば、行列ルーチンは、行列プロセッサにより実行されると、特定の行列演算を実行するように設計されている、行列プロセッサ用のプログラマブルなルーチンであってよい。例えば、行列ルーチンには、特定の行列プロセッサによりサポートされ、その行列プロセッサによって実行されると所望の行列演算を実行するように設計された、一連の命令及び/又はコマンドが含まれてよい。いくつかの実施形態において、例えば、行列プロセッサは、様々な基本的演算を実行するための命令及び/又はコマンドのセットをサポートするように設計されてよい。例えば、いくつかの実施形態において、行列プロセッサは、データの処理、様々な算術演算の実行、並びに/又は、様々な命令及び演算に合った行列オペランド及び出力の識別のための命令をサポートすることができる。
【0083】
例えば、特定の命令が、異なる位置との間でデータ(例えば、行列データ)を読み出す、書き込む、及び/又はコピーする、行列データをスライスする、行列データを取り出す、行列データを並べ替えるなどの、データの処理に用いられてよい。
【0084】
別の例として、特定の命令が、以下の演算、すなわち、行列乗算、畳み込み、単項行列演算、二項行列演算(加算(+)、減算(-)、乗算(×)、除算(/)、ビット単位のXOR、AND、OR、論理及び算術の左シフト及び右シフト、比較(>、<、>=、<=、==、!=)など)、並びに、列方向、行方向、及び行列全体の演算(合計、最大値、及び最小値など)のいずれかを含む特定の算術演算を実行するのに用いられてよい。
【0085】
さらに、特別な「レジスタオペランド」(REGOP)命令が、サポートされた様々な命令及び演算の行列オペランド及び出力を識別するのに用いられてよい。レジスタオペランド命令は、例えば、オペランドのサイズ及び位置、並びに特定の命令又は演算の出力を指定するのに用いられてよい。例えば、いくつかの実施形態において、レジスタオペランド命令が、特定のオペランド又は出力と関連付けられている高帯域幅メモリ(HBM)モジュール又はメモリリソースブロック(MRB)において位置を識別するのに用いられてよい。一例として、基本的な行列乗算演算が、それぞれのオペランドの位置及び出力の位置を識別するREGOP命令を用いてプログラムされることがあり、行列乗算演算を実行する命令が後に続く。
【0086】
このように、行列プロセッサによってサポートされる基本的な命令及び/又はコマンドは、分散した行列乗算及び/又は畳み込み演算、次元シャッフル演算、再構成(reshape)演算などの、より複雑な行列演算用の行列ルーチンをプログラムするのに用いられ得る。
【0087】
行列ルーチンメモリ539は、行列処理チップ、行列処理クラスタ、及び/又はホストコンピューティングシステムなどの、行列処理アーキテクチャの任意の部分に実装されてよい。いくつかの実施形態において、例えば、行列処理チップ(例えば、図2Bの行列処理チップ220)は、その行列処理チップ上のそれぞれのクラスタにアクセス可能な行列ルーチンメモリ539を含んでよい。別の例として、いくつかの実施形態において、行列処理クラスタ(例えば、図2Cの行列処理クラスタ230)は、それ自身の行列ルーチンメモリ539を含んでよい。さらに別の例として、いくつかの実施形態において、行列処理アーキテクチャのホストコンピューティングシステムが、その関連した行列処理リソースにアクセス可能な行列ルーチンメモリ539を含んでよい(例えば、図2Aにおいて、行列処理システム200のホストメモリ270は、行列処理リソース210にアクセス可能な行列ルーチンメモリを含んでよい)。
【0088】
さらに、行列ルーチンメモリ539は、データを格納することができる任意のコンポーネント又はメカニズムであってよく、それには、ランダムアクセスメモリ(RAM)(例えば、ダイナミックランダムアクセスメモリ(DRAM)、同期型ダイナミックランダムアクセスメモリ(SDRAM)、スタティックランダムアクセスメモリ(SRAM))、フラッシュベースのメモリ、リードオンリメモリ(ROM)、フィールドプログラマブルゲートアレイ(FPGA)の論理ブロック、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、及び/又は前述のものからなる任意の好適な組み合わせなどの、揮発性メモリ及び/又は不揮発性メモリの任意の種類又は組み合わせが含まれる。
【0089】
一例として、いくつかの実施形態において、行列ルーチンメモリ539は、ランダムアクセスメモリ(例えば、SRAM)を用いて行列処理チップ上に実装されてよい。これら実施形態において、例えば、行列ルーチンは、ホストコンピューティングシステム(例えば、図2Aのホストプロセッサ260)によって行列ルーチンメモリ539に読み込まれてよい。例えば、ホストコンピューティングシステムが、相互接続インタフェース(例えば、PCIeインタフェース)を介して、行列ルーチンを行列処理チップに転送してよく、行列処理チップは次に、行列ルーチンをその関連した行列ルーチンメモリ539に格納してよい。いくつかの実施形態において、ホストコンピューティングシステムのソフトウェアドライバが、行列ルーチンを読み込むのに用いられてよい。さらに、いくつかの実施形態において、任意の既存の行列ルーチンが、システム起動中に行列ルーチンメモリ539に読み込まれてよく、任意の追加の行列ルーチンが、必要に応じて、システム起動後に続いて読み込まれてよい。
【0090】
示された例において、行列処理エンジン500は、複数の行列演算501及び502を並列に実行する。例えば、上述されたように、いくつかの実施形態において、行列処理エンジン500は特定の行列処理クラスタ上に実装されてよく、特定の行列処理クラスタは複数のMPU534を含んでよい。示された例において、行列処理エンジン500は、2つのMPUである534a~bと共にクラスタ上に実装されている。したがって、行列処理エンジン500は、2つの行列演算501及び502を、それぞれのMPU534を用いて並列に実行することができる。示された例は、第1の行列演算501及び第2の行列演算502の両方に対する、行列処理エンジン500の制御フローを示す。
【0091】
示された例において、第1の行列演算501の制御フローは、行列処理エンジン500の読み出しエンジン535で始まる。読み出しエンジン535は最初に、行列データ(例えば、行列演算501のオペランドと関連付けられた行列データ)を行列処理チップの対応するHBMモジュール540aから引き出すことができ、読み出しエンジン535は次に、読み出しエンジン535と関連した特定のクラスタの特定のMRB538aに、その行列データを格納することができる。例えば、上述されたように、HBMモジュール540aは、特定の行列処理チップ上の高帯域幅メモリモジュール(例えば、特定の行列処理チップの行列処理クラスタにより共有されたメモリ)であってよく、MRB538は、特定の行列処理クラスタ上のローカルメモリリソースブロックであってよい。さらに、いくつかの実施形態において、読み出しエンジン535は、HBM540及びMRB538にデータを格納し、且つそれらからデータを引き出すために、自身のそれぞれのクラスタ上のマスタ制御CPU(MCC)532を用いることができる。
【0092】
スライスエンジン536aは次に、行列演算501と関連付けられた特定の行列オペランドを取り出すために、MRB538aに格納された行列データを「スライス」することができる。例えば、場合によっては、関連した行列オペランドは、MRB538aに格納された行列データのサブセットだけを含んでよく、及び/又は、この行列オペランドは、MRB538aに格納された行列データの中に隣接して配置されてなくてよい。したがって、スライスエンジン536aは、MRB538aに格納された特定「スライス」の行列データ又は特定部分の行列データを取り出すことができ、その後、それぞれの行列オペランドを形成するためにこれらのスライスを配置することができる。例えば、示された例において、行列演算501は畳み込み演算と関連付けられ、したがって、スライスエンジン536aが、MRB538aに格納された行列データから、スライスされた行列オペランド及びフィルタを取り出すのに用いられる。次に、スライスされた行列オペランド及びフィルタは、MRB538b及び538cにそれぞれ格納される。場合によっては、スライスエンジン536aにより用いられる特定のスライス手法は、行列演算501の種類、利用可能な処理リソースの数、オペランドのサイズなどを含む、様々な要因に依存し得る。さらに、いくつかの実施形態において、特定の演算のためにスライスエンジン536aにより実行される特定のスライシングは、スライスエンジン536aによりサポートされる命令のセットを用いてプログラムされてよく、及び/又は定義されてよい。
【0093】
次に、出力エンジン537は、特定の行列演算501に対する結果を計算するのに用いられてよい。例えば、出力エンジン537は、スライスエンジン536aにより生成された行列オペランド(例えば、MRB538b及び538cに格納された行列オペランド)を用いて、適切な行列演算501を実行することができる。例えば、いくつかの実施形態において、出力エンジン537は最初に、特定の行列演算501に対応する関連した行列ルーチンを識別することができ、出力エンジン537は次に、行列ルーチンメモリ539からその行列ルーチンを取得することができる。いくつかの実施形態において、出力エンジン537は、自身のそれぞれのクラスタ上のマスタ制御CPU(MCC)532を用いて、行列ルーチンメモリ539から行列ルーチンを引き出すことができる。
【0094】
出力エンジン537は次に、適切であれば、行列ルーチンにより用いられる特定の情報又はフィールドを指定するか、又は供給することができる。例えば、いくつかの実施形態において、行列ルーチンの特定のオペランドのサイズ及び/又は位置などの、行列ルーチンの特定の情報及び/又はフィールドは、不十分であっても指定されていなくてもよい。したがって、いくつかの実施形態において、出力エンジン537は、特定の行列ルーチンのあらゆる残りの情報及び/又はフィールド(例えば、行列オペランドのサイズ及び/又は位置)を指定するか、又は供給するために、MCC532を用いることができる。
【0095】
出力エンジン537は次に、特定の行列ルーチンを実行することができる。例えば、出力エンジン537は、特定の行列ルーチンに関連付けられた、プログラムされた命令を実行するために、MCC532及び/又はMPU534aを用いることができる。MCC532は、例えば、命令により指定された、データの読み出し及び書き込み、他のリソースとの通信などの特定のタスクを実行するのに用いられてよい。MPU534aは、例えば、命令により指定された特定の算術演算を実行するのに用いられてよい。さらに、場合によっては、特定の演算が必要な全データ(例えば、特定の行列オペランドの全データ)に対して実行されて完了するまで、特定の行列ルーチンが繰り返し実行されてよく、又はループ化されてよい。
【0096】
出力エンジン537は次に、行列ルーチンの出力又は結果を、行列ルーチンの実行に用いられるクラスタの特定のMRB538dに格納することができる。場合によっては、出力エンジン537は次に、MRB538dに格納された出力を、行列処理アーキテクチャの別のコンポーネントに提供することができる。例えば、場合によっては、行列演算501が、複数の処理リソースの全体に分散された大型の行列演算と関連した部分行列演算であってよく、したがって、行列演算501の出力は分散された大型の演算と関連付けられた部分的結果であってよい。さらに、部分行列演算501の出力は、分散された行列演算に関与する他の処理リソースによって必要とされることがある。したがって、出力エンジン537は、例えば、さらなる処理及び/又は保管のために、部分行列演算501の出力を適切なリソースに提供することができる。場合によっては、適切なリソースは、実行中の行列演算の種類、関連した行列ルーチンの実装、処理リソースの数及び可用性などを含む状況に基づいて、変わることがある。例えば、場合によっては、行列演算の特定の処理及び/又は出力のデスティネーションは、関連した行列ルーチンによってプログラムされてよく、又は定義されてよい。さらに、いくつかの実施形態において、出力エンジン537は、部分行列演算501の出力を適切なデスティネーションに提供するために、自身のそれぞれのクラスタ上のマスタ制御CPU(MCC)532を用いることができる。
【0097】
場合によっては、例えば、出力エンジン537は、部分行列演算501の出力(例えば、MRB538dに格納された出力)を、分散」された行列演算の部分的結果を格納するのに用いられる特定のデスティネーションに提供することができる。例えば、分散された行列演算の場合、それぞれの処理リソースにより決定されたそれぞれの部分的結果は、行列処理チップの特定のHBM540bなどの、特定のメモリコンポーネント上で統合されてよい。例えば、場合によっては、行列処理チップのそれぞれのクラスタにより決定されたそれぞれの部分的結果は、行列処理チップの特定のHBM540b上で統合されてよい。さらに、これらの部分的結果は、行列演算の完全な結果を集合的に形成する特定の配置を用いて、HBM540bに格納されてよい。
【0098】
別の例として、場合によっては、出力エンジン537は、部分行列演算501の出力(例えば、MRB538dに格納された出力)をMPU534aにフィードバックして、例えば、MPU534aがその出力を次の部分的演算のオペランドとして用いることを可能にすることができる。場合によっては、例えば、分散された行列演算のある段階における部分的演算の出力は、分散された行列演算の別の段階の部分的演算に、入力又はオペランドとして用いられてよい。
【0099】
別の例として、場合によっては、出力エンジン537は、部分行列演算501の出力(例えば、MRB538dに格納された出力)を、同じ行列処理チップ上の別の行列処理クラスタなどの、別の行列処理リソースに、又は完全に別の行列処理チップに提供することができる。例えば、場合によっては、分散された行列演算は、行列処理チップの複数のクラスタの全体に分散されてよく、及び/又は、複数の行列処理チップの全体に分散されてよい。さらに、場合によっては、特定の行列処理リソースにより実行される部分的演算の出力は、異なる処理リソースにより実行される別の部分的演算のオペランドとして用いられてよい。
【0100】
示された例において、第2の行列演算502は、第1の行列演算501と並列に実行されてよい。さらに、第2の行列演算502の制御フローは、上述された第1の行列演算501用の制御フローと類似してよい。しかし、第2の行列演算502は、(例えば、異なる行列ルーチンを用いて実行され)異なる行列オペランド及び結果を有し、HBM540及び/又はMRB538の異なるメモリ位置を用いる、異なる行列演算であってよく、また第2の行列演算502は、異なるMPU534b及び関連したスライスエンジン536bを用いて実行されてよい。
【0101】
図6はプログラマブルな行列処理の例示的な実施形態のフローチャート600を示す。フローチャート600は、いくつかの実施形態において、本開示の全体にわたって説明されるコンポーネント(例えば、図2A図2Cの行列処理アーキテクチャ、及び/又は図5のプログラマブルな行列処理エンジン)により実装されてよい。
【0102】
フローチャートは、行列演算を実行するコマンドを受信することにより、ブロック602で始まってよい。行列演算は、1つ又は複数の行列オペランドに対する演算を含み得る。例えば、行列演算は、要素単位の行列演算、行列乗算、畳み込み、及び/又はそのような演算のあらゆる組み合わせを含む、あらゆる行列ベースの算術演算を含んでよい。
【0103】
さらに、いくつかの実施形態において、行列演算は、コンピュータビジョン人工知能及び機械学習機能を人工ニューラルネットワークに実装するのに用いられてよい。例えば、いくつかの実施形態において、ブロック602の行列演算は、人工ニューラルネットワーク内の、前方伝搬演算、後方伝搬演算、及び/又は荷重更新演算などの演算と関連付けられてよい。
【0104】
フローチャートは次に、ブロック604に進み、行列データをメモリから取得してよい。行列データは、例えば、行列演算の1つ又は複数の行列オペランドと関連付けられてよい。いくつかの実施形態において、行列データは、多次元メモリから取得されてよい。多次元メモリは、例えば、複数の次元(例えば、2次元)の行列データを効率的に格納及び引き出すように設計されたメモリコンポーネントであってよい。いくつかの実施形態において、行列データは、1つ又は複数の命令を実行し、多次元メモリの1つ又は複数のメモリ位置から行列データを取得することで取得されてよい。
【0105】
次に、フローチャートはブロック606に進み、行列オペランドを行列データから取得してよい。いくつかの実施形態において、例えば、行列オペランドは、行列データをスライスして、行列オペランドを行列データから取り出すことで取得されてよい。さらに、いくつかの実施形態において、行列オペランドは、1つ又は複数の命令を実行して、行列オペランドを行列データからスライスするか、又は取り出すことで取得されてよい。
【0106】
次に、フローチャートはブロック608に進み、行列演算に関連付けられた行列ルーチンを識別してよい。例えば、行列ルーチンは、行列プロセッサにより実行されると、特定の行列演算を実行するように設計されている、行列プロセッサ用のプログラマブルなルーチンであってよい。例えば、行列ルーチンには、特定の行列プロセッサによりサポートされ、その行列プロセッサによって実行されると所望の行列演算を実行するように設計された、一連の命令及び/又はコマンドが含まれてよい。いくつかの実施形態において、例えば、行列プロセッサは、様々な基本的な行列演算を実行するための命令及び/又はコマンドのセットをサポートするように設計されてよい。例えば、行列プロセッサは、数ある例の中でも特に、行列オペランドのメモリ位置を識別し、行列オペランドをメモリから取得し、及び/又は行列オペランドに対して特定の算術演算又は計算を実行するための、命令及び/又はコマンドを含んでよい。このように、行列プロセッサによりサポートされる基本的な命令及び/又はコマンドは、より複雑な行列演算の行列ルーチンをプログラムするのに用いられ得る。
【0107】
いくつかの実施形態において、行列ルーチンメモリが、行列ルーチンを格納するのに用いられてよく、行列ルーチンは、必要に応じて、行列ルーチンメモリから引き出されてよい。例えば、所望の行列演算を実行するために、対応する行列ルーチンが最初に、行列ルーチンメモリから取得されてよい。しかし、場合によっては、特定の行列ルーチンが行列ルーチンメモリにまだ格納されていない場合がある。したがって、特定の行列ルーチンは、行列ルーチンメモリ上に読み込まれる必要があり得る。したがって、場合によっては、特定の行列ルーチンが最初に、ホストコンピューティングシステムから取得されてよく、次に行列ルーチンメモリに格納されてよい。
【0108】
次に、フローチャートはブロック610に進み、行列ルーチンを実行してよい。いくつかの実施形態において、例えば、行列ルーチンは、1つ又は複数の行列オペランドを用いで、行列プロセッサで実行されてよい。次に、フローチャートはブロック612に進み、行列プロセッサにより実行された行列ルーチンに基づいて、行列演算の結果を取得してよい。例えば、場合によっては、特定の行列ルーチンは、行列プロセッサにより実行された一連の命令及び/又はコマンドにより決定された結果を返してよい。
【0109】
この時点で、フローチャートは完了してよい。しかし、いくつかの実施形態において、フローチャートは再開してよく、及び/又は特定のブロックが繰り返されてよい。例えば、いくつかの実施形態において、フローチャートは、ブロック602で再開し、コマンドを引き続き受信及び処理して行列演算を実行することができる。
【0110】
図のフローチャート及びブロック図は、本開示の様々な態様によるシステム、方法、及びコンピュータプログラム製品に関する可能な実施態様のアーキテクチャ、機能、及び動作を例示している。この点に関して、フローチャート又はブロック図の各ブロックは、モジュール、セグメント、又はコードの一部を表してよく、ここには、指定された論理機能を実装するための1つ又は複数の実行可能な命令が含まれている。いくつかの代替的な実施態様において、ブロックで示された機能は、図に示された順序通りに行われなくてよいことにも留意されたい。例えば、連続して示されている2つのブロックが、実際には、実質的に同時に実行されてよく、又はそれらのブロックが、関与する機能に応じて、逆の順序で若しくは二者択一式で実行されてよい場合もある。ブロック図及び/又はフロー図の各ブロック、並びにブロック図及び/又はフロー図のブロックの組み合わせは、指定された機能又は行為を実行する専用ハードウェアベースのシステム、若しくは専用ハードウェアとコンピュータ命令の組み合わせによって実装されてよいことにも留意されたい。
【0111】
前述の開示は、当業者が本開示の様々な態様をより十分に理解できるように、いくつかの実施形態の特徴を概説している。当業者は、本明細書に導入された実施形態の同じ目的を果たす及び/又は同じ利点を実現するために、他のプロセス及び構造を設計又は修正する基礎として、本開示を容易に用いることができることを理解されたい。当業者は、そのような均等な解釈が本開示の精神及び範囲から逸脱しないこと、及び、そのような解釈によって、本開示の精神及び範囲から逸脱することなく、本明細書で様々な変更、置換、及び改変が行われてよいことも理解されたい。
【0112】
本明細書で開示された、あらゆるハードウェア要素の全て又は一部は、中央処理装置(CPU)パッケージを含むシステムオンチップ(SoC)で容易に提供されてよい。SoCは、コンピュータ又は他の電子システムのコンポーネント類を単一のチップに統合する集積回路(IC)を表す。SoCは、デジタル機能、アナログ機能、ミックスシグナル機能、及び無線周波数機能を含んでよく、それらの全てが単一のチップ基板上に設けられてよい。他の実施形態は、複数のチップが単一の電子パッケージ内に設けられ、電子パッケージを通じて互いに密接にやり取りするように構成されたマルチチップモジュール(MCM)を含んでよい。様々な他の実施形態において、本明細書で開示されたコンピューティング機能は、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、及び他の半導体チップの中の1つ又は複数のシリコンコアに実装されてよい。
【0113】
本明細書の全体にわたって用いられる場合、「プロセッサ」又は「マイクロプロセッサ」という用語は、従来のマイクロプロセッサ(Intel(登録商標)の業界最高のx86及びx64アーキテクチャなど)だけでなく、行列プロセッサ、グラフィックスプロセッサ、及びあらゆるASIC、FPGA、マイクロコントローラ、デジタル信号プロセッサ(DSP)、プログラマブルロジックデバイス、プログラマブルロジックアレイ(PLA)、マイクロコード、命令セット、エミュレーションプロセッサ若しくは仮想マシンプロセッサ、又は、命令の実行を可能にするあらゆる類似の「チューリング完全」デバイス、デバイスの組み合わせ、若しくはロジック要素(ハードウェア又はソフトウェア)も含むものと理解されたい。
【0114】
特定の実施形態において、いくつかのコンポーネントが除外又は統合されてよいことも留意されたい。一般的な意味では、図に示された構成は論理的な分割と理解されるべきであるが、物理アーキテクチャは様々な置換、組み合わせ、及び/又はこれらの要素の混成物を含んでよい。無数の可能な設計構成が、本明細書で概説された演算の目的を実現するのに用いられてよいことに留意することが絶対必要である。したがって、関連インフラストラクチャは、無数の代わりの構成、設計選択、デバイス可能性、ハードウェア構成、ソフトウェア実装、及び機器オプションを有する。
【0115】
一般的な意味では、あらゆる好適に構成されたプロセッサが、データ又はマイクロコードと関連付けられた命令を実行して、本明細書に詳述された演算を実現することができる。本明細書で開示されたあらゆるプロセッサが、要素又は項目(例えば、データ)を、ある状態又は状況から別の状態又は状況に変換してよい。別の例において、本明細書で概説されるいくつかの機能が、固定ロジック又はプログラマブルロジック(例えば、プロセッサにより実行されるソフトウェア及び/又はコンピュータ命令)で実装されてよく、本明細書で特定された要素は、何らかの種類のプログラマブルプロセッサ、プログラマブルデジタルロジック(例えば、フィールドプログラマブルゲートアレイ(FPGA)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM))、デジタルロジックを含むASIC、ソフトウェア、コード、電子命令、フラッシュメモリ、光ディスク、CD-ROM、DVD-ROM、磁気カード若しくは光カード、電子命令を格納するのに好適な他の種類の機械可読媒体、又はこれらの任意の好適な組み合わせであってよい。
【0116】
動作にあたっては、必要に応じて且つ特定のニーズに基づき、ストレージが、任意の適切な種類の有形の非一時的記憶媒体(例えば、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、フィールドプログラマブルゲートアレイ(FPGA)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、若しくはマイクロコード)、ソフトウェア、ハードウェア(例えば、プロセッサ命令若しくはマイクロコード)に、又は任意の他の好適なコンポーネント、デバイス、要素、若しくはオブジェクトに情報を格納することができる。さらに、追跡、送信、受信、又はプロセッサに格納されている情報は、特定のニーズ及び実施態様に基づいて、任意のデータベース、レジスタ、テーブル、キャッシュ、キュー、制御リスト、又はストレージ構造に提供されてよく、これらの全てが任意の適切なタイムフレームで参照されてよい。本明細書で開示されたメモリ又はストレージ要素のいずれも、必要に応じて、「メモリ」及び「ストレージ」という広範な用語の中に含まれていると解釈されたい。本明細書における非一時的記憶媒体は、開示された演算を提供するように構成された、又は開示された演算をプロセッサに実行させるように構成された、任意の非一時的専用ハードウェア又はプログラマブルハードウェアを含むことが明確に意図されている。非一時的記憶媒体は、ハードウェアでコード化された命令、及び任意で、ハードウェア、ファームウェア、ソフトウェアで符号化されたマイクロコード命令又はシーケンスを格納したプロセッサも明確に含んでいる。
【0117】
本明細書で説明された機能の全て又は一部を実装するコンピュータプログラムロジックは、様々な形態で具現化されており、それらには、全く限定されないが、ハードウェア記述言語、ソースコード形態、コンピュータ実行可能形態、機械命令又はマイクロコード、プログラマブルハードウェア、及び様々な中間形態(例えば、HDLプロセッサ、アセンブラ、コンパイラ、リンカ、又はロケータにより生成された形態)が含まれる。一例において、ソースコードには、オブジェクトコード、アセンブリ言語、又は様々なオペレーティングシステム若しくは動作環境と共に使用するOpenCL、FORTRAN、C++、Java(登録商標)、若しくはHTMLなどの高水準言語などの様々なプログラミング言語で実装された、あるいはSpice、Verilog、及びVHDLなどのハードウェア記述言語で実装された、一連のコンピュータプログラム命令が含まれる。ソースコードは、様々なデータ構造及び伝達メッセージを定義し、これらを用いることができる。ソースコードは、(例えば、インタプリタを介して)コンピュータ実行可能形態になってよく、あるいはソースコードは、(例えば、トランスレータ、アセンブラ、若しくはコンパイラを介して)コンピュータ実行可能形態に変換されるか、又はバイトコードなどの中間形態に変換されてよい。必要に応じて、前述したもののいずれかが、シーケンシャルマシン、コンビネーションマシン、ステートマシンであっても、そうでなくても、適切なディスクリート回路又は集積回路を作る又は説明するのに用いられてよい。
【0118】
1つの例において、図の任意の数の電気回路が、関連電子デバイスのボード上に実装されてよい。このボードは、電子デバイスの内部電子システムの様々なコンポーネントを保持し、さらに他の周辺機器にコネクタを提供し得る一般的な回路ボードであってよい。より具体的には、このボードは、電気接続を提供することができ、これによって、システムの他のコンポーネントは電気的に通信することができる。任意の適切なプロセッサ及びメモリが、特定の構成ニーズ、処理要求、及びコンピューティング設計に基づいて、ボードに好適に結合されてよい。外部ストレージ、追加のセンサ、オーディオ/ビデオディスプレイのコントローラ、及び周辺機器デバイスなどの他のコンポーネントが、プラグインカードとして、ケーブルを介してボードに取り付けられてよく、又はボードそのものに統合されてもよい。別の例として、図の電気回路は、独立型モジュール(例えば、特定のアプリケーション又は機能を実行するように構成された関連コンポーネント及び回路を有するデバイス)として実装されてよく、又は、プラグインモジュールとして、電子デバイスの特定用途向けハードウェアに実装されてもよい。
【0119】
本明細書に提供された多数の例を用いて、2つ、3つ、4つ、又はそれより多くの電気コンポーネントに関して、相互作用が説明され得ることに留意されたい。しかし、これは、明確さと例示だけを目的に行われている。システムは、任意の適切な方式で、統合又は再構成され得ることを理解されたい。類似の設計代替例に沿って、図に示されたコンポーネント、モジュール、及び要素のいずれも、様々な可能な構成に組み合わされてよく、その全ては、本明細書の広範な範囲に含まる。ある場合には、所与のセットのフローに関する機能のうち1つ又は複数を、限られた数の電気要素を参照するだけで説明することが、より容易となることがある。図の電気回路及びその教示は、容易にスケーリング可能であり、多数のコンポーネント、並びにより複雑/精巧な配置及び構成を収容することができることを理解されたい。したがって、提供された例は、その範囲を限定するべきではなく、場合によっては無数の他のアーキテクチャに適用されるような電気回路の広範な教示を妨げるべきではない。
【0120】
多数の他の変更、置換、変形、改変、及び修正が当業者に確認されてよく、本開示は、そのような変更、置換、変形、改変、及び修正の全てを、添付の特許請求の範囲に含まれるものとして包含することが意図されている。
[例示的な実施態様]
【0121】
以下の例は、本開示の全体にわたって説明される実施形態に関する。
【0122】
1つ又は複数の実施形態が、多次元メモリと、1つ又は複数の行列オペランドに対して行列演算を実行する、1つ又は複数の行列プロセッサを含んだ複数の処理要素とを備える装置を含んでよく、複数の処理要素は、1つ又は複数の行列オペランドと関連付けられている行列データを、多次元メモリから受信し、1つ又は複数の行列オペランドを行列データから取り出し、行列演算と関連付けられた行列ルーチンを識別し、1つ又は複数の行列オペランドを用いて行列ルーチンを実行し、実行された行列ルーチンに基づいて行列演算の結果を取得するように構成されている。
【0123】
装置に関する1つの例示的な実施形態において、本装置はさらに行列ルーチンメモリを備え、行列ルーチンメモリは、1つ又は複数の行列演算と関連付けられた1つ又は複数の行列ルーチンを含む。
【0124】
装置に関する1つの例示的な実施形態において、複数の処理要素はさらに、行列ルーチンを行列ルーチンメモリから受信するように構成されている。
【0125】
装置に関する1つの例示的な実施形態において、複数の処理要素はさらに、行列ルーチンをホストコンピューティングシステムから受信し、行列ルーチンを行列ルーチンメモリに格納するように構成されている。
【0126】
装置に関する1つの例示的な実施形態において、行列ルーチンは、行列演算と関連付けられた1つ又は複数の命令を含む。
【0127】
装置に関する1つの例示的な実施形態において、行列ルーチンの1つ又は複数の命令は、1つ又は複数の行列オペランドと関連付けられた1つ又は複数のメモリ位置を示すものを含む。
【0128】
装置に関する1つの例示的な実施形態において、1つ又は複数の行列オペランドを行列データから取り出す複数の処理要素はさらに、1つ又は複数の行列オペランドを取り出すために、行列データをスライスするように構成されている。
【0129】
装置に関する1つの例示的な実施形態において、複数の処理要素はさらに、1つ又は複数の行列オペランドを行列データから取り出す1つ又は複数の命令を実行するように構成されている。
【0130】
装置に関する1つの例示的な実施形態において、複数の処理要素はさらに、多次元メモリの1つ又は複数のメモリ位置から行列データを取得する1つ又は複数の命令を実行するように構成されている。
【0131】
装置に関する1つの例示的な実施形態において、行列演算は、1つ又は複数の行列乗算演算を含む。
【0132】
装置に関する1つの例示的な実施形態において、行列演算は、1つ又は複数の畳み込み演算を含む。
【0133】
装置に関する1つの例示的な実施形態において、行列演算は、ニューラルネットワークにおける演算と関連付けられている。
【0134】
1つ又は複数の実施形態は、1つ又は複数の行列オペランドに対して行列演算を実行する段階を備えた方法を含んでよく、行列演算を実行する段階は、1つ又は複数の行列オペランドと関連付けられている行列データを多次元メモリから受信する段階と、1つ又は複数の行列オペランドを行列データから取り出す段階と、行列演算と関連付けられた行列ルーチンを識別する段階と、1つ又は複数の行列オペランドを用いて、行列プロセッサで行列ルーチンを実行する段階と、行列プロセッサにより実行された行列ルーチンに基づいて、行列演算の結果を取得する段階とを含む。
【0135】
方法に関する1つの例示的な実施形態において、本方法は行列ルーチンを行列ルーチンメモリから受信する段階をさらに備え、行列ルーチンメモリは、1つ又は複数の行列演算と関連付けられた1つ又は複数の行列ルーチンを含む。
【0136】
方法に関する1つの例示的な実施形態において、行列ルーチンは、行列演算と関連付けられた1つ又は複数の命令を含む。
【0137】
方法に関する1つの例示的な実施形態において、行列ルーチンの1つ又は複数の命令は、1つ又は複数の行列オペランドと関連付けられた1つ又は複数のメモリ位置を示すものを含む。
【0138】
1つ又は複数の実施形態は、多次元メモリを含む複数のメモリ素子と、1つ又は複数の行列オペランドに対して行列演算を実行する複数の処理要素とを備えるシステムを含んでよく、複数の処理要素は、ホストプロセッサと、1つ又は複数の行列処理チップとを含み、複数の処理要素は、1つ又は複数の行列オペランドと関連付けられている行列データを多次元メモリから受信し、1つ又は複数の行列オペランドを行列データから取り出し、行列演算と関連付けられた行列ルーチンを識別し、1つ又は複数の行列オペランドを用いて行列ルーチンを実行し、実行された行列ルーチンに基づいて、行列演算の結果を取得するように構成されている。
【0139】
システムに関する1つの例示的な実施形態において、それぞれの行列処理チップは、複数の行列処理クラスタを含む。
【0140】
システムに関する1つの例示的な実施形態において、それぞれの行列処理クラスタは、複数の行列処理ユニットを含む。
【0141】
システムに関する1つの例示的な実施形態において、それぞれの行列処理クラスタは、複数のメモリリソースブロックを含む。
【0142】
1つ又は複数の実施形態は、格納された命令を有する少なくとも1つの機械アクセス可能記憶媒体を含んでよく、命令は機械で実行されると、1つ又は複数の行列オペランドに対して行列演算を機械に実行させ、行列演算を機械に実行させる命令はさらに、機械に、1つ又は複数の行列オペランドと関連付けられている行列データを多次元メモリから受信させ、1つ又は複数の行列オペランドを行列データから取り出させ、行列演算と関連付けられた行列ルーチンを識別させ、1つ又は複数の行列オペランドを用いて、行列プロセッサで行列ルーチンを実行させ、行列プロセッサにより実行された行列ルーチンに基づいて、行列演算の結果を取得させる。
【0143】
記憶媒体に関する1つの例示的な実施形態において、命令はさらに、行列ルーチンメモリから行列ルーチンを機械に受信させ、行列ルーチンメモリは、1つ又は複数の行列演算と関連付けられた1つ又は複数の行列ルーチンを含む。
【0144】
記憶媒体に関する1つの例示的な実施形態において、行列ルーチンは、行列演算と関連付けられた1つ又は複数の命令を含む。
【0145】
記憶媒体に関する1つの例示的な実施形態において、行列ルーチンは、1つ又は複数の行列オペランドと関連付けられた1つ又は複数のメモリ位置を示すものを含む。
【0146】
記憶媒体に関する1つの例示的な実施形態において、多次元メモリから行列データを機械に受信させる命令はさらに、多次元メモリの1つ又は複数のメモリ位置から行列データを機械に取得させる。
【0147】
1つ又は複数の実施形態は、上記各例のいずれかの方法を実行する手段を備えた装置を含んでよい。
【0148】
1つ又は複数の実施形態は、格納された命令を有する少なくとも1つの機械アクセス可能記憶媒体を含んでよく、命令は機械で実行されると、機械に、上記各例のいずれかの方法を実行させるか、又は上記各例の装置を実現させる。
[項目1]
複数のプログラマブルな行列ルーチンを格納する回路を有するプログラマブルな行列ルーチンメモリであって、前記複数のプログラマブルな行列ルーチンのそれぞれは、複数の行列演算の対応する行列演算を実行するための命令を含み、前記プログラマブルな行列ルーチンメモリは、複数の行列演算を実行するために実行される前記複数のプログラマブルな行列ルーチンを用いてプログラムされる、プログラマブルな行列ルーチンメモリと、
行列計算を実行するための回路を有する1つまたは複数の行列処理ユニットと、
回路を有するコントローラであって、
前記複数の行列演算の特定の行列演算を実行するためのコマンドを受信し、
前記特定の行列演算に対応するプログラマブルな行列ルーチンを識別し、前記プログラマブルな行列ルーチンは前記複数のプログラマブルな行列ルーチンから識別され、
前記プログラマブルな行列ルーチンを前記プログラマブルな行列ルーチンメモリから受信し、
前記プログラマブルな行列ルーチンを実行し、前記1つまたは複数の行列処理ユニットを用いて、前記プログラマブルな行列ルーチンの実行に関連付けられた1つまたは複数の行列計算が実行され、
前記特定の行列演算の結果を決定し、前記結果は前記プログラマブルな行列ルーチンの実行に基づいて決定される、回路を有するコントローラと、
を備える、
行列処理回路。
[項目2]
前記プログラマブルな行列ルーチンを実行する前記回路は、
前記特定の行列演算に関連付けられた1つまたは複数の行列オペランドを受信し、
前記1つまたは複数の行列処理ユニットを用いて、前記1つまたは複数の行列オペランドに対して前記1つまたは複数の行列計算を実行する、
項目1に記載の行列処理回路。
[項目3]
前記行列処理回路は、複数のメモリリソースブロックをさらに備え、
前記特定の行列演算に関連付けられた前記1つまたは複数の行列オペランドを受信する前記回路はさらに、
前記1つまたは複数の行列オペランドに関連付けられた行列データをメモリから受信し、
前記1つまたは複数の行列オペランドを前記行列データから取り出し、
1つまたは複数の前記複数のメモリリソースブロック内に前記1つまたは複数の行列オペランドを格納する、
項目2に記載の行列処理回路。
[項目4]
前記プログラマブルな行列ルーチンは前記特定の行列演算を実行するための命令のセットを有し、
命令の前記セットは、
前記行列データを前記メモリから受信し、前記1つまたは複数の行列オペランドを前記行列データから取り出す、命令の第1のサブセットと、
前記1つまたは複数の行列オペランドに対して前記1つまたは複数の行列計算を実行する、命令の第2のサブセットと、
を含む、
項目3に記載の行列処理回路。
[項目5]
前記1つまたは複数の行列処理ユニットは、複数の行列処理ユニットを有し、
前記行列処理回路は、行列処理クラスタをさらに備え、前記行列処理クラスタは前記複数の行列処理ユニットと前記複数のメモリリソースブロックを有する、
項目3または4に記載の行列処理回路。
[項目6]
前記コントローラは、
前記複数のプログラマブルな行列ルーチンをホストコンピューティングシステムから受信し、
前記プログラマブルな行列ルーチンメモリ内に前記複数のプログラマブルな行列ルーチンを格納する、
ための回路をさらに有する、
項目1から5のいずれか一項に記載の行列処理回路。
[項目7]
前記1つまたは複数の行列計算は、1つまたは複数の行列乗算計算を有する、項目1から6のいずれか一項に記載の行列処理回路。
[項目8]
前記1つまたは複数の行列計算は、1つまたは複数の畳み込み計算を有する、項目1から7のいずれか一項に記載の行列処理回路。
[項目9]
前記特定の行列演算は、人工ニューラルネットワークにおける演算と関連付けられている、項目1から8のいずれか一項に記載の行列処理回路。
[項目10]
アプリケーションを実行するプロセッサであって、前記アプリケーションの実行は複数の行列演算を有する、プロセッサと、
前記複数の行列演算を実行する行列処理回路と、を備えるシステムであって、
前記行列処理回路は、
複数のプログラマブルな行列ルーチンを格納する回路を含むプログラマブルな行列ルーチンメモリであって、前記複数のプログラマブルな行列ルーチンのそれぞれは、前記複数の行列演算の対応する行列演算を実行するための命令を含み、前記プログラマブルな行列ルーチンメモリは、前記複数の行列演算を実行するために実行される前記複数のプログラマブルな行列ルーチンを用いてプログラムされる、プログラマブルな行列ルーチンメモリと、
1つまたは複数の行列処理クラスタであって、前記1つまたは複数の行列処理クラスタのそれぞれは複数の行列処理ユニットを含み、前記複数の行列処理ユニットは行列計算を実行するための回路を有する、1つまたは複数の行列処理クラスタと、
回路を有するコントローラであって、前記回路は、
前記複数の行列演算の特定の行列演算を実行するコマンドを受信し、
前記特定の行列演算に対応するプログラマブルな行列ルーチンを識別し、前記プログラマブルな行列ルーチンは前記複数のプログラマブルな行列ルーチンから識別され、
前記プログラマブルな行列ルーチンを前記プログラマブルな行列ルーチンメモリから受信し、
前記プログラマブルな行列ルーチンの実行を、前記1つまたは複数の行列処理クラスタにわたって分散し、
前記特定の行列演算の結果を決定し、前記結果は前記プログラマブルな行列ルーチンの実行に基づいて決定される、コントローラと、
を有する、
システム。
[項目11]
前記1つまたは複数の行列処理クラスタは、
複数の行列処理クラスタと、
前記複数の行列処理クラスタと通信可能に結合するように相互接続された多次元メッシュと、
を含む、項目10に記載のシステム。
[項目12]
前記1つまたは複数の行列処理クラスタのそれぞれは、
前記特定の行列演算に関連付けられた1つまたは複数の行列オペランドを受信し、
前記複数の行列処理ユニットを用いて、前記1つまたは複数の行列オペランドに対して複数の行列計算を実行する、
ための回路をさらに有する、
項目10または11に記載のシステム。
[項目13]
前記行列処理回路は、1つまたは複数のメモリモジュールをさらに有し、
前記1つまたは複数の行列処理クラスタのそれぞれは、複数のメモリリソースブロックをさらに含み、
前記特定の行列演算に関連付けられた前記1つまたは複数の行列オペランドを受信する前記回路はさらに、
前記1つまたは複数の行列オペランドに関連付けられた行列データを、前記1つまたは複数のメモリモジュールから受信し、
前記1つまたは複数の行列オペランドを前記行列データから取り出し、
1つまたは複数の前記複数のメモリリソースブロック内に前記1つまたは複数の行列オペランドを格納する、
項目12に記載のシステム。
[項目14]
前記プログラマブルな行列ルーチンは、前記特定の行列演算を実行するための命令のセットを有し、
命令の前記セットは、
前記行列データを前記1つまたは複数のメモリモジュールから受信し、前記1つまたは複数の行列オペランドを前記行列データから取り出す、命令の第1のサブセットと、
前記1つまたは複数の行列オペランドに対して前記複数の行列計算を実行する、命令の第2のサブセットと、
を含む、
項目13に記載のシステム。
[項目15]
前記コントローラは、
前記複数のプログラマブルな行列ルーチンを前記プロセッサから受信し、
前記プログラマブルな行列ルーチンメモリ内に前記複数のプログラマブルな行列ルーチンを格納する、
ための回路をさらに有する、
項目10から14のいずれか一項に記載のシステム。
[項目16]
命令を格納する少なくとも1つの非一時的機械アクセス可能記憶媒体であって、前記命令は、機械に対して実行された場合、前記機械に、
複数の行列演算の特定の行列演算を実行するためのコマンドを受信させ、
前記特定の行列演算に対応するプログラマブルな行列ルーチンを識別させ、前記プログラマブルな行列ルーチンは複数のプログラマブルな行列ルーチンから識別され、前記複数のプログラマブルな行列ルーチンのそれぞれは、前記複数の行列演算の対応する行列演算を実行するためのプログラマブルな命令を有し、
前記プログラマブルな行列ルーチンをプログラマブルな行列ルーチンメモリから受信させ、前記プログラマブルな行列ルーチンメモリは、前記複数の行列演算を実行するために実行される前記複数のプログラマブルな行列ルーチンを用いてプログラムされ、
前記プログラマブルな行列ルーチンを実行させ、1つまたは複数の行列処理ユニットを用いて、前記プログラマブルな行列ルーチンの実行に関連付けられた1つまたは複数の行列計算が実行され、前記1つまたは複数の行列処理ユニットは、行列計算を実行するための回路を含み、
前記特定の行列演算の結果を決定させ、前記結果は前記プログラマブルな行列ルーチンの実行に基づいて決定される、
非一時的機械アクセス可能記憶媒体。
[項目17]
前記機械に前記プログラマブルな行列ルーチンを実行させる前記命令は、さらに前記機械に、
前記特定の行列演算に関連付けられた1つまたは複数の行列オペランドを受信させ、
前記1つまたは複数の行列処理ユニットを用いて、前記1つまたは複数の行列オペランドに対して前記1つまたは複数の行列計算を実行させる、
項目16に記載の非一時的機械アクセス可能記憶媒体。
[項目18]
前記機械に前記特定の行列演算に関連付けられた前記1つまたは複数の行列オペランドを受信させる前記命令は、さらに前記機械に、
前記1つまたは複数の行列オペランドに関連付けられた行列データをメモリから受信させ、
前記1つまたは複数の行列オペランドを前記行列データから取り出させ、
1つまたは複数の複数のメモリリソースブロック内に前記1つまたは複数の行列オペランドを格納させる、
項目17に記載の非一時的機械アクセス可能記憶媒体。
[項目19]
前記プログラマブルな行列ルーチンは、前記特定の行列演算を実行するための命令のセットを有し、
命令の前記セットは、
前記行列データを前記メモリから受信し、前記1つまたは複数の行列オペランドを前記行列データから取り出す、命令の第1のサブセットと、
前記1つまたは複数の行列オペランドに対して前記1つまたは複数の行列計算を実行する、命令の第2のサブセットと、
を含む、
項目18に記載の非一時的機械アクセス可能記憶媒体。
[項目20]
前記命令は、さらに前記機械に、
前記複数のプログラマブルな行列ルーチンをホストコンピューティングシステムから受信させ、
前記プログラマブルな行列ルーチンメモリ内に前記複数のプログラマブルな行列ルーチンを格納させる、
項目16から19のいずれか一項に記載の非一時的機械アクセス可能記憶媒体。
[項目21]
複数の行列演算の特定の行列演算を実行するためのコマンドを受信する段階と、
前記特定の行列演算に対応するプログラマブルな行列ルーチンを識別する段階であって、前記プログラマブルな行列ルーチンは、複数のプログラマブルな行列ルーチンから識別され、前記複数のプログラマブルな行列ルーチンのそれぞれは、前記複数の行列演算の対応する行列演算を実行するためのプログラマブルな命令を有する、識別する段階と、
前記プログラマブルな行列ルーチンをプログラマブルな行列ルーチンメモリから受信する段階であって、前記プログラマブルな行列ルーチンメモリは、前記複数の行列演算を実行するために実行される前記複数のプログラマブルな行列ルーチンを用いてプログラムされる、受信する段階と、
前記プログラマブルな行列ルーチンを実行する段階であって、前記プログラマブルな行列ルーチンの実行に関連付けられた1つまたは複数の行列計算は1つまたは複数の行列処理ユニットを用いて実行され、前記1つまたは複数の行列処理ユニットは、行列計算を実行する回路を含む、実行する段階と、
前記特定の行列演算の結果を決定する段階であって、前記結果は、前記プログラマブルな行列ルーチンの実行に基づいて決定される、決定する段階と、
を備える方法。
[項目22]
前記プログラマブルな行列ルーチンを実行する段階は、
前記特定の行列演算に関連付けられた1つまたは複数の行列オペランドを受信する段階と、
前記1つまたは複数の行列処理ユニットを用いて、前記1つまたは複数の行列オペランドに対して前記1つまたは複数の行列計算を実行する段階と、
を有する、
項目21に記載の方法。
[項目23]
前記特定の行列演算に関連付けられた前記1つまたは複数の行列オペランドを受信する段階は、
前記1つまたは複数の行列オペランドに関連付けられた行列データをメモリから受信する段階と、
前記1つまたは複数の行列オペランドを前記行列データから取り出す段階と、
1つまたは複数の複数のメモリリソースブロック内に前記1つまたは複数の行列オペランドを格納する段階と、
を含む、
項目22に記載の方法。
[項目24]
前記プログラマブルな行列ルーチンは、前記特定の行列演算を実行するための命令のセットを備え、
命令の前記セットは、
前記行列データを前記メモリから受信し、前記1つまたは複数の行列オペランドを前記行列データから取り出す、命令の第1のサブセットと、
前記1つまたは複数の行列オペランドに対して前記1つまたは複数の行列計算を実行する、命令の第2のサブセットと、
を有する、
項目23に記載の方法。
[項目25]
前記複数のプログラマブルな行列ルーチンをホストコンピューティングシステムから受信する段階と、
前記プログラマブルな行列ルーチンメモリ内に、前記複数のプログラマブルな行列ルーチンを格納する段階と、
をさらに備える、
項目21から24のいずれか一項に記載の方法。
図1
図2A
図2B
図2C
図3
図4
図5
図6
【外国語明細書】