(57)【要約】  本開示は、複数パイプラインアーキテクチャを有する演算デバイスに関する。複数パイプラインアーキテクチャは、同時に起動される第１及び第２のパイプラインを含み、第１のパイプラインは、第２のパイプラインの少なくとも１サイクル先に起動する。第１のパイプラインにおいて特殊数の検出が利用され、特殊数は、予測可能な結果をもたらす数値である。特殊数が検出された場合、演算が最適化される。
2021507368.tif 000002
【特許請求の範囲】
【請求項１】
複数パイプラインアーキテクチャを有するコアを有する演算デバイスにおける特殊数の検出を伴う演算のための方法であって、
メモリからのデータの第１及び第２のパイプラインを並列に起動することであって、前記第１のパイプラインが、前記メモリから第１のオペランドを受信するように構成され、前記第２のパイプラインが、前記メモリから第２のオペランドを受信するように構成され、前記第１のパイプラインが、前記第２のパイプラインの少なくとも１サイクル先に動作することと、
前記第１のオペランドに対する前記メモリのメモリアドレスを生成することと、
前記第１のパイプラインにおいて、前記生成されたメモリアドレスから前記第１のオペランドを読み取ることと、
前記第１のオペランドが特殊数であるかどうかを検出することであって、特殊数が、予測可能な演算結果をもたらす数値であることと、
前記第１のオペランドが前記特殊数であるかどうかの前記検出に基づいて結果を前記メモリに格納することと
を含む、方法。
【請求項２】
前記第１のオペランドが特殊数であると決定された場合：
前記検出された特殊数と関連付けられた前記結果を取得することと、
前記第１及び第２のパイプラインのために前記取得された結果を前記メモリに格納することと
を行う、請求項１に記載の方法。
【請求項３】
前記複数パイプラインアーキテクチャが、乗算演算を実行するように構成され、前記第１のオペランドが、ゼロの数値を含む特殊数として検出され、前記方法が、
前記第２のオペランドに対するメモリアドレスの生成を阻止すること
をさらに含む、請求項２に記載の方法。
【請求項４】
前記複数パイプラインアーキテクチャが、乗算演算を実行するように構成され、前記第１のオペランドが、１の数値を含む特殊数として検出され、前記方法が、
前記第２のオペランドに対するメモリアドレスを生成することと、
前記第２のパイプラインにおいて、前記生成されたメモリアドレスから前記第２のオペランドを読み取ることと、
前記第２のオペランドの値に等しいものとして前記結果の値を割り当てることと
をさらに含む、請求項２に記載の方法。
【請求項５】
前記第１のオペランドが特殊数ではないと決定された場合：
前記第２のオペランドに対する前記メモリのメモリアドレスを生成することと、
前記第２のパイプラインにおいて、前記生成されたメモリアドレスから前記第２のオペランドを読み取ることと、
前記第１及び第２のオペランドに対する演算を実行することと、
前記第１及び第２のパイプラインのために、前記実行された演算の前記結果を前記メモリに格納することと
を行う、請求項１に記載の方法。
【請求項６】
特殊数の検出を伴う演算を実行するための演算デバイスであって、
前記演算デバイスが、演算を実行するように構成された多数の処理ユニットを有するコアを含み、前記コアが、
オペランドを格納するように構成されたメモリと、
第１のオペランドに対して生成されたメモリアドレスに基づいて、前記メモリから前記第１のオペランドを読み取るように構成された第１のパイプラインと、
前記メモリから第２のオペランドを受信するように構成された第２のパイプラインであって、前記第１のパイプラインが、前記第２のパイプラインの少なくとも１サイクル先に動作する、第２のパイプラインと、
前記第１のオペランドが特殊数であるかどうかを検出するように構成された検出器であって、前記特殊数が、予測可能な演算結果をもたらす数値であり、前記コアが、前記第１のオペランドが特殊数であるかどうかの前記検出に基づいて結果を前記メモリに格納するようにさらに構成される、検出器と
を含む、演算デバイス。
【請求項７】
前記第１のオペランドが特殊数である場合：
前記コアが、前記検出された特殊数と関連付けられた前記予測可能な演算結果を取得するようにさらに構成され、
前記コアが、前記第１及び第２のパイプラインのために前記取得された結果を前記メモリに格納するように構成される、請求項６に記載の演算デバイス。
【請求項８】
前記演算が、乗算演算であり、前記第１のオペランドが、ゼロの数値を含む特殊数として検出され、
前記コアが、前記第２のオペランドに対するメモリアドレスの生成を停止するようにさらに構成される、請求項７に記載の演算デバイス。
【請求項９】
前記演算が、乗算演算であり、前記第１のオペランドが、１の数値を含む特殊数として検出され、
前記コアが、前記第２のオペランドに対するメモリアドレスを生成するようにさらに構成され、
前記第２のパイプラインが、前記生成されたメモリアドレスから前記第２のオペランドを読み取るように構成され、
前記コアが、前記第２のオペランドの値に等しいものとして前記結果の値を割り当てるように構成される、請求項７に記載の演算デバイス。
【請求項１０】
前記第１のオペランドが特殊数ではない場合：
前記コアが、前記第２のオペランドに対する前記メモリのメモリアドレスを生成するようにさらに構成され、
前記第２のパイプラインが、前記生成されたメモリアドレスから前記第２のオペランドを読み取るように構成され、
前記コアの処理ユニットが、前記第１及び第２のオペランドに対する演算を実行するようにさらに構成され、
前記コアが、前記第１及び第２のパイプラインのために、前記実行された演算の前記結果を前記メモリに格納するように構成される、請求項６に記載の演算デバイス。
【請求項１１】
前記メモリが、複数の記憶セルを含み、前記複数の記憶セルが、前記第１のパイプラインにブロードキャストされるデータを含む少なくとも１つの共有メモリ記憶セルと、前記第２のパイプラインに読み取られるデータを含む少なくとも１つのプライベートメモリ記憶セルとをさらに含む、請求項６〜１０のいずれか一項に記載の演算デバイス。
【請求項１２】
前記コアが、少なくとも１つの処理ユニットアレイを含む、請求項６〜１１のいずれか一項に記載の演算デバイス。
【請求項１３】
前記コアが、単一命令複数データ（ＳＩＭＤ）アーキテクチャを含む、請求項６〜１２のいずれか一項に記載の演算デバイス。
【請求項１４】
前記実行された演算が、加算、減算、乗算、又は除算に基づく演算である、請求項６〜１３のいずれか一項に記載の演算デバイス。
【請求項１５】
前記コアが、ニューラルネットワークに含まれる、請求項６〜１４のいずれか一項に記載の演算デバイス。
【請求項１６】
命令セットを格納する非一時的なコンピュータ可読媒体であって、前記命令セットが、
演算デバイスのコアのメモリからのデータの第１及び第２のパイプラインを並列に起動することであって、前記第１のパイプラインが、前記メモリから第１のオペランドを受信するように構成され、前記第２のパイプラインが、前記メモリから第２のオペランドを受信するように構成され、前記第１のパイプラインが、前記第２のパイプラインの少なくとも１サイクル先に動作することと、
前記第１のオペランドに対する前記メモリのメモリアドレスを生成することと、
前記第１のパイプラインにおいて、前記生成されたメモリアドレスから前記第１のオペランドを読み取ることと、
前記第１のオペランドが特殊数であるかどうかを検出することであって、特殊数が、予測可能な演算結果をもたらす数値であることと、
前記第１の動作が前記特殊数であるかどうかの前記検出に基づいて結果を前記メモリに格納することと
を前記コアに行わせるように、前記演算デバイスによって実行可能である、非一時的なコンピュータ可読媒体。
【請求項１７】
前記第１のオペランドが特殊数であると検出された場合：
前記検出された特殊数と関連付けられた前記結果を取得することと、
前記第１及び第２のパイプラインのために前記取得された結果を前記メモリに格納することと
を行う、請求項１６に記載の非一時的なコンピュータ可読媒体。
【請求項１８】
前記複数パイプラインアーキテクチャが、乗算演算を実行するように構成され、前記第１のオペランドが、ゼロの数値を含む特殊数として検出され、前記命令が、
前記第２のオペランドに対するメモリアドレスの生成を阻止すること
を演算デバイスに行わせるように、前記演算デバイスの少なくとも１つのプロセッサによって実行可能である、請求項１７に記載の非一時的なコンピュータ可読媒体。
【請求項１９】
前記コアが、乗算演算を実行するように構成され、前記第１のオペランドが、１の数値を含む特殊数として検出され、前記命令が、
前記第２のオペランドに対するメモリアドレスを生成することと、
前記第２のパイプラインにおいて、前記生成されたメモリアドレスから前記第２のオペランドを読み取ることと、
前記第２のオペランドの値に等しいものとして前記結果の値を割り当てることと
を前記コアに行わせるように、前記演算デバイスによって実行可能である、請求項１７に記載の非一時的なコンピュータ可読媒体。
【請求項２０】
前記第１のオペランドが特殊数ではない場合：
前記第２のオペランドに対する前記メモリのメモリアドレスを生成することと、
前記第２のパイプラインにおいて、前記生成されたメモリアドレスから前記第２のオペランドを読み取ることと、
前記第１及び第２のオペランドに対する演算を実行することと、
前記第１及び第２のパイプラインのために、前記実行された演算の前記結果を前記メモリに格納することと
を行う、請求項１６に記載の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
[001]  本開示は、２０１７年１２月２２日に出願された米国仮特許出願第６２／６１０，０７７号及び２０１８年１２月１０日に出願された米国特許出願第１６／２１５，５５３号への優先権の利益を主張し、同特許出願は、その全体が参照により本明細書に組み込まれる。
【背景技術】
【０００２】
背景
[002]  ニューラルネットワークに基づくディープラーニングアプリケーションを加速させるためのニューラルネットワークプロセッサの開発は、既成のチップメーカー、新興企業及びインターネット大企業を含む多くのビジネス部門にわたってかなりの勢いを増している。単一命令複数データ（ＳＩＭＤ）アーキテクチャは、ディープラーニングのアプリケーションに対する演算を加速させるためにチップに適用することができる。画像認識、言語／音声認識及び機械翻訳などのニューラルネットワークに基づくディープラーニングアプリケーションの急激な成長と共に、システムの演算強度を維持及び増大することが望ましい。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
[003]  本開示は、演算を簡略化し且つ演算強度を増大するために、特殊数の検出能力を有する複数パイプパイプラインのための方法及びシステムに関する。
【０００４】
[004]  いくつかの開示される実施形態と一致して、複数パイプラインアーキテクチャを有する演算デバイスにおける特殊数の検出を伴う演算のための方法が提供される。演算デバイスは、命令を格納するためのメモリと、方法を実行するために命令を実行するための処理ユニットとを含む。方法は、メモリからのデータの第１及び第２のパイプラインを同時に起動することを含む。第１のパイプラインは、メモリから第１のオペランドを受信するように構成され、第２のパイプラインは、メモリから第２のオペランドを受信するように構成される。第１のパイプラインは、第２のパイプラインの少なくとも１サイクル先に動作する。
【０００５】
[005]  方法は、第１のオペランドに対するメモリのメモリアドレスを生成することと、第１のパイプラインにおいて、生成されたメモリアドレスから第１のオペランドを読み取ることとをさらに含む。それに加えて、方法は、検出器によって、第１のオペランドが特殊数であるかどうかを検出することを含み、特殊数は、既定の又は予測可能な演算結果をもたらす数値である。
【０００６】
[006]  第１のオペランドが特殊数である場合は、方法は、検出された特殊数と関連付けられた結果を取得することと、第１及び第２のパイプラインのために、取得された結果をメモリに格納することとをさらに含む。第１のオペランドが特殊数ではない場合は、方法は、第２のオペランドに対するメモリのメモリアドレスを生成することと、第２のパイプラインにおいて、生成されたメモリアドレスから第２のオペランドを読み取ることと、第１及び第２のオペランドに対する演算を実行することと、第１及び第２のパイプラインのために、実行された演算の結果をメモリに格納することとをさらに含む。
【０００７】
[007]  本明細書で開示されるいくつかの実施形態は、特殊数の検出を伴う演算のための演算デバイスを対象とする。演算デバイスは、メモリと、第１及び第２のパイプラインとを含む。第１のパイプラインは、メモリから第１のオペランドを受信するように構成され、第２のパイプラインは、メモリから第２のオペランドを受信するように構成される。第１のパイプラインは、第２のパイプラインの少なくとも１サイクル先に動作する。デバイスは、第１のオペランドに対するメモリのメモリアドレスを生成するための処理ユニットをさらに含む。
【０００８】
[008]  第１のパイプラインは、生成されたメモリアドレスから第１のオペランドを読み取る。その後、検出器は、第１のオペランドが特殊数であるかどうかを検出する。特殊数は、既定の又は予測可能な演算結果をもたらす数値である。
【０００９】
[009]  第１のオペランドが特殊数である場合は、処理ユニットは、検出された特殊数と関連付けられた既定の又は予測可能な演算結果を取得し、第１及び第２のパイプラインのために、取得された結果をメモリに格納する。
【００１０】
[010]  第１のオペランドが特殊数ではない場合は、処理ユニットは、第２のオペランドに対するメモリのメモリアドレスを生成する。その後、第２のパイプラインは、生成されたメモリアドレスから第２のオペランドを読み取る。次いで、処理ユニットは、第１及び第２のオペランドに対する演算を実行し、第１及び第２のパイプラインのために、実行された演算の結果をメモリに格納する。
【００１１】
[011]  いくつかの開示される実施形態と一致して、演算デバイスにおける特殊数の検出能力を有する複数パイプパイプラインのための方法であって、各演算デバイスが、命令を格納する１つ又は複数のメモリと、方法を実行するために命令を実行する１つ又は複数のプロセッサとを含む、方法が開示される。方法は、１つ又は複数のメモリからのデータの１対のパイプラインを同時に起動することであって、１対のパイプラインのうちの一方が、ブロードキャストオペランドを取り入れ、１対のパイプラインのうちの他方が、プライベートオペランドを取り入れる、起動することと、ブロードキャストオペランドに対する１つ又は複数のメモリのメモリアドレスを生成することと、生成されたメモリアドレスからブロードキャストオペランドを読み取ることと、検出器によって、ブロードキャストオペランドが０であるかどうかを検出することと、ブロードキャストオペランドが０である場合は、プライベートオペランドに対する１つ又は複数のメモリのメモリアドレスの生成を停止することと、ブロードキャストオペランドが１である場合は、プライベートオペランドに対する１つ又は複数のメモリのメモリアドレスを更新することと、別の検出器によって、ブロードキャストオペランドが１であるかどうかを検出することと、ブロードキャストオペランド及びプライベートオペランドの結果を演算することと、データの１対のパイプラインのために、１つ又は複数のメモリのメモリアドレスに結果を格納することとを含む。
【００１２】
[012]  いくつかの開示される実施形態と一致して、演算を簡略化し且つ演算強度を増大するために、特殊数の検出能力を有する複数パイプパイプラインのためのシステムが提供される。
【００１３】
[013]  いくつかの開示される実施形態と一致して、前述の方法を実行するために少なくとも１つのプロセッサによって実行可能な命令セットを含むコンピュータ可読記憶媒体が提供される。
【００１４】
[014]  他の開示される実施形態と一致して、非一時的なコンピュータ可読記憶媒体は、プログラム命令を格納することができ、プログラム命令は、少なくとも１つの処理デバイスによって実行され、本明細書で説明される前述の方法を実行する。
【図面の簡単な説明】
【００１５】
図面の簡単な説明
【図１】[015]本開示の実施形態と一致する、例示的なニューラルネットワーク処理ユニット（ＮＰＵ）アーキテクチャを示す。
【図２Ａ】[016]本開示の実施形態と一致する、ニューラルネットワークプロセッサの層の例示的な機能を示す。
【図２Ｂ】[017]本開示の実施形態と一致する、例示的なハードウェアニューラルネットワークプロセッサを示す。
【図３】[018]本開示の実施形態と一致する、多層ネットワークにおけるデータ共有を示す。
【図４Ａ】[019]本開示の実施形態と一致する、メモリモジュールの統合組織を含む例示的なハードウェアの概略図を示す。
【図４Ｂ】[020]本開示の実施形態と一致する、統合記憶媒体の例示的な記憶セルを示す。
【図５】[021]本開示の実施形態と一致する、演算デバイスにおいて実装された複数パイプライン構成を示す。
【図６】[022]本開示の実施形態と一致する、図５の複数パイプライン構成の動作サイクル図である。
【図７】[023]本開示の実施形態と一致する、図５の複数パイプライン構成を特徴とする演算デバイスによって取り入れられた例示的な動作のプロセスフロー図である。
【発明を実施するための形態】
【００１６】
詳細な説明
[024]  ここでは、例示的な実施形態を詳細に参照し、その例は、添付の図面に示される。以下の説明は、添付の図面を参照し、添付の図面では、異なる図面の同じ番号は、別段の表現がない限り、同じ又は同様の要素を表す。例示的な実施形態の以下の説明に記載される実装形態は、本発明と一致するすべての実装形態を表すわけではない。代わりに、それらの実装形態は、添付の特許請求の範囲に記述されるように、本発明に関連する態様と一致する装置及び方法の単なる例である。
【００１７】
[025]  中央処理装置（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、デジタル信号処理ユニット（ＤＳＰ）、ニューラルネットワークプロセッサなどを含む演算デバイス（例えば、デスクトップ、ラップトップ、サーバ、セルラフォンなどの携帯電話、ＰＤＡ、タブレット及び同様のもの）では、演算強度（computational strength）は、通常、演算を迅速に実行するというデバイスの能力として定義される。演算強度は、特殊数（０、１など）を検出するというデバイスの能力によって増大することができる。ベクトル、ＳＩＭＤ又はアレイ演算を伴うコンピュータアーキテクチャの場合、そのような検出及び検出に基づいて演算を実行するという能力は、演算強度をさらにいっそう増大することができる。
【００１８】
[026]  開示される実施形態は、演算を簡略化し且つ演算強度を増大するために、特殊数の検出能力を有する複数パイプパイプラインのための方法及びシステムに関する。本明細書の「複数」という用語は、２つ以上を意味すると解釈されるものとすることを理解されたい。特殊数は、演算において使用されると、既定の又は予測可能な結果をもたらす数値である。既定の又は予測可能な結果は、演算を事前形成することなく得ることができる演算結果である。そのような数値の例は、乗算演算における１又はゼロの数値であり得る。具体的には、第１の数値に１の数値を乗じると、常に、第１の数値に等しいという結果をもたらし、また、任意の数値にゼロの数値を乗じると、常に、ゼロという結果をもたらす。従って、本明細書で説明されるように、そのような数値を検出するという能力により、特殊数の検出に基づいて結果を決定することができるため、そのような演算の性能を最適化することができる。従って、そのような数値を認識できることにより、特殊数が検出された場合に全演算を実行することなく結果を決定することができるという理由で計算回数が低減されるため、演算強度を増大することができる。
【００１９】
[027]  ニューラルネットワークを使用して、本明細書で開示される例示的な実施形態について説明する。しかし、例示的な実施形態は、演算を最適化することができる他のいかなるシステムにも適用できることを理解されたい。図１は、例示的なニューラルネットワーク処理ユニット（ＮＰＵ）アーキテクチャ１００を示す。ＮＰＵアーキテクチャ１００は、オンチップ通信システム１１０、ホストメモリ１２０、メモリコントローラ１３０、直接メモリアクセス（ＤＭＡ）ユニット１４０、ジョイントテストアクショングループ（ＪＴＡＧ）／テストアクセスエンド（ＴＡＰ）コントローラ１５０、ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ）インタフェース１６０、バス１７０、グローバルメモリ１２６及び同様のものを含み得る。オンチップ通信システム１１０は、通信データに基づいてアルゴリズム動作を実行できることが理解される。その上、ＮＰＵアーキテクチャ５００は、メインメモリとして機能するためのオンチップメモリブロック（例えば、第二世代の８ＧＢ高帯域幅メモリ（ＨＢＭ２）の４つのブロック）を有するグローバルメモリ１２６を含み得る。
【００２０】
[028]  オンチップ通信システム１１０は、グローバルマネージャ１１２及び複数のコア１１６を含み得る。グローバルマネージャ１１２は、１つ又は複数のコア１１６と協調するように構成された１つ又は複数のタスクマネージャ１１４を含み得る。各タスクマネージャ１１４は、ニューラルネットワーク用のシナプス／ニューロン回路を提供するコア１１６のアレイと関連付けることができる。例えば、図１のコアの最上層は、ニューラルネットワークへの入力層を表す回路を提供することができ、コアの第２の層は、ニューラルネットワークの１つ又は複数の隠れ層を表す回路を提供することができる。図１に示されるように、グローバルマネージャ１１２は、コア１１６の２つのアレイと協調するように構成された２つのタスクマネージャ１１４を含み得る。
【００２１】
[029]  コア１１６は、１つ又は複数の処理要素を含み得、１つ又は複数の処理要素の各々は、グローバルマネージャ１１２の制御の下で通信データにおける１つ又は複数の演算（例えば、乗算、加算、乗累算など）を実行するように構成された１つ又は複数の処理ユニットを含む単一命令複数データ（ＳＩＭＤ）アーキテクチャを含む。通信データパケットにおける演算を実行するため、コア１１６は、データパケットを格納するための少なくとも１つのバッファ、命令を格納するための１つ又は複数のバッファ、データパケットの情報を格納するための１つ又は複数のメモリ、及び、データパケットの情報を処理するための１つ又は複数の処理要素を含み得る。各処理要素は、いかなる数の処理ユニットも含み得る。いくつかの実施形態では、コア１１６は、タイル又は同様のものと見なすことができる。
【００２２】
[030]  ホストメモリ１２０は、ホストＣＰＵのメモリなどのオフチップメモリであり得る。例えば、ホストメモリ１２０は、ＤＤＲメモリ（例えば、ＤＤＲ  ＳＤＲＡＭ）又は同様のものであり得る。ホストメモリ１２０は、１つ又は複数のプロセッサ内で統合されたオンチップメモリと比べて、低アクセス速度で大量のデータを格納するように構成することができ、高次キャッシュの役割を果たす。
【００２３】
[031]  メモリコントローラ１３０は、グローバルメモリ１２６内のメモリブロック（例えば、ＨＢＭ２）からのデータの読み取り及びメモリブロックへのデータの書き込みを管理することができる。例えば、メモリコントローラ１３０は、チップ通信システム１１０の外部から（例えば、ＤＭＡユニット１４０から若しくは別のＮＰＵと連通するＤＭＡユニットから）又はチップ通信システム１１０の内部から（例えば、グローバルマネージャ１１２のタスクマネージャによって制御された２Ｄメッシュを介してコア１１６のローカルメモリから）来るデータの読み取り／書き込みを管理することができる。また、図１には１つのメモリコントローラが示されているが、ＮＰＵアーキテクチャ１００において複数のメモリコントローラを提供できることが理解される。例えば、グローバルメモリ１２６内の各メモリブロック（例えば、ＨＢＭ２）に対して１つずつメモリコントローラが存在し得る。
【００２４】
[032]  メモリコントローラ１３０は、メモリアドレスを生成し、メモリ読み取り又は書き込みサイクルを開始することができる。メモリコントローラ１３０は、１つ又は複数のプロセッサによる書き込み及び読み取りが可能ないくつかのハードウェアレジスタを含み得る。レジスタは、メモリアドレスレジスタ、バイトカウントレジスタ、１つ又は複数の制御レジスタ及び他のタイプのレジスタを含み得る。これらのレジスタは、ソース、送り先、転送方向（入力／出力（Ｉ／Ｏ）デバイスから読み取るか若しくはＩ／Ｏデバイスに書き込む）、転送単位のサイズ、１バーストで転送されるバイト数及び／又はメモリコントローラの他の典型的な特徴のいくつかの組合せを指定することができる。
【００２５】
[033]  ＤＭＡユニット１４０は、ホストメモリ１２０とグローバルメモリ１２６との間のデータ転送を補助することができる。それに加えて、ＤＭＡユニット１４０は、複数のＮＰＵ間のデータ転送を補助することができる。ＤＭＡユニット１４０は、ＣＰＵ割り込みを引き起こすことなく、オフチップデバイスがオンチップメモリとオフチップメモリの両方にアクセスできるようにすることができる。従って、ＤＭＡユニット１４０もまた、メモリアドレスを生成し、メモリ読み取り又は書き込みサイクルを開始することができる。また、ＤＭＡユニット１４０は、１つ又は複数のプロセッサによる書き込み及び読み取りが可能ないくつかのハードウェアレジスタ（メモリアドレスレジスタ、バイトカウントレジスタ、１つ又は複数の制御レジスタ及び他のタイプのレジスタを含む）を含むこともできる。これらのレジスタは、ソース、送り先、転送方向（入力／出力（Ｉ／Ｏ）デバイスから読み取るか若しくはＩ／Ｏデバイスに書き込む）、転送単位のサイズ及び／又は１バーストで転送されるバイト数のいくつかの組合せを指定することができる。ＮＰＵアーキテクチャ１００は、複数のＮＰＵアーキテクチャがホストＣＰＵを巻き込むことなく直接通信できるように他のＮＰＵアーキテクチャとの間でデータを転送するために使用することができる第２のＤＭＡユニットを含み得ることが理解される。
【００２６】
[034]  ＪＴＡＧ／ＴＡＰコントローラ１５０は、システムアドレス及びデータバスへの直接的な外部アクセスを必要としないＮＰＵへの低オーバヘッドアクセスのためのシリアル通信インタフェース（例えば、ＪＴＡＧインタフェース）を実装する専用デバッグポートを指定することができる。また、ＪＴＡＧ／ＴＡＰコントローラ１５０は、チップ論理レベル及び様々な部品のデバイス能力を提示するテストレジスタセットにアクセスするためのプロトコルを実装するオンチップテストアクセスインタフェース（例えば、ＴＡＰインタフェース）も有し得る。
【００２７】
[035]  ペリフェラルインタフェース１６０（ＰＣＩｅインタフェースなど）は、存在する場合は、インターチップバスとして機能し（及び典型的にはインターチップバスである）、ＮＰＵと他のデバイスとの間の通信を提供する。
【００２８】
[036]  バス１７０は、イントラチップバスとインターチップバスの両方を含む。イントラチップバスは、システムアーキテクチャに求められるように、すべての内部のコンポーネントを互いに接続する。すべてのコンポーネントが他のすべてのコンポーネントに接続されるわけではないが、すべてのコンポーネントは、通信する必要がある他のコンポーネントへの何らかの接続を有する。インターチップバスは、ＮＰＵを他のデバイス（オフチップメモリ又は周辺機器など）と接続する。典型的には、ＰＣＩｅインタフェースが存在する場合は、それはインターチップバスであり、バス１７０はイントラチップバスのみに関係するが、いくつかの実装形態では、依然として、専用バス間通信に関係し得る。
【００２９】
[037]  ＮＰＵアーキテクチャ１００は本開示の実施形態を組み込むが、開示される実施形態は、ディープラーニングなどのいくつかのアプリケーションを加速するためのＳＩＭＤアーキテクチャを有するチップに適用できることが理解される。そのようなチップは、例えば、ディープラーニング用のＧＰＵ、ベクトル処理能力を有するＣＰＵ又はニューラルネットワークアクセラレータであり得る。ＳＩＭＤ又はベクトルアーキテクチャは、一般的に、グラフィックス処理及びディープラーニングなどのデータ並列処理を伴う演算デバイスをサポートするために使用される。ＳＩＭＤアーキテクチャは、複数の処理要素を含み得、処理要素の各々は、複数のデータポイントにおいて同じ動作を同時に実行することができる。
【００３０】
[038]  いくつかの実施形態では、ニューラルネットワークプロセッサは、コンパイラ（図示せず）を含む。コンパイラは、実行可能プログラムを作成するために、あるプログラミング言語で記載されたコンピュータコードをＮＰＵ命令に変換するプログラム又はコンピュータソフトウェアである。マシニングアプリケーションでは、コンパイラは、例えば、前処理、字句解析、構文解析、意味解析、入力プログラムから中間表現への変換、コード最適化及びコード生成、又は、それらの組合せなどの様々な動作を実行することができる。
【００３１】
[039]  いくつかの実施形態では、コンパイラは、ホストユニット（例えば、ホストメモリ１０４を有するＣＰＵ）上にあり得、ホストユニットは、コマンドをＮＰＵ  １００にプッシュする。これらのコマンドに基づいて、タスクマネージャ１０２２は、任意の数のタスクを１つ又は複数のコア（例えば、コア１０２４）に割り当てることができる。コマンドのいくつかは、ホストメモリ１０４からグローバルメモリ１１６に命令及びデータをロードするようにＤＭＡユニット１０８に指示することができる。次いで、ロードされた命令は、対応するタスクが割り当てられた各コアに分配することができ、１つ又は複数のコアは、これらの命令を処理することができる。
【００３２】
[040]  コアによって受信される最初の少数の命令は、グローバルメモリ１１６からコアの１つ又は複数のローカルメモリ（例えば、コアのメモリ又はコアの各能動処理要素に対するローカルメモリ）にデータをロード／格納するように、コアに指示できることが理解される。次いで、各コアは、命令パイプラインを開始することができ、命令パイプラインは、ローカルメモリから命令をフェッチすること（例えば、フェッチユニットを介して）、命令を復号して（例えば、命令デコーダを介して）ローカルメモリアドレス（例えば、オペランドに対応する）を生成すること、ソースデータを読み取ること、演算を実行するか又はロード／格納すること、次いで、結果を書き戻すことを伴う。
【００３３】
[041]  図２Ａは、ニューラルネットワークの層２００の例示的な機能を示し、ソフトウェアアルゴリズム２１０及びハードウェア２２０を含む。ハードウェア２２０は、プライベートメモリモジュール２３０、処理ユニットアレイ２４０の１つ又は複数の処理ユニット、共有（例えば、ブロードキャスト）メモリモジュール２５０、書き込みバッファ２６０、入力オペランド２７０、出力オペランド２８０及び同様のものを含み得る。いくつかの実施形態では、ハードウェア２２０は、コア（例えば、図１のコア１１６）内に位置し得る。単一の均質メモリモジュールも採用できることを理解されたい。
【００３４】
[042]  いくつかの実施形態では、処理ユニットアレイ２４０の処理ユニットは、乗算、加算、乗累算などの１つ又は複数の演算を提供することができる。処理ユニットアレイ２４０は、複数の処理ユニット２４２、２４４、２４６及び２４８（例えば、図２Ｂに示されるような処理ユニットのアレイ）を含み得る。
【００３５】
[043]  プライベートメモリモジュール２３０は、別個のプライベートメモリブロックに仕切ることができ、その結果、複数の処理ユニット２４２、２４４、２４６及び２４８の各々は、図２Ｂに示されるように、対応するプライベートメモリブロック２３２、２３４、２３６及び２３８を有する。
【００３６】
[044]  入力オペランド２７０は、処理ユニットアレイ２４０によって演算される入力データであり得る。いくつかの実施形態では、図２Ａの入力オペランド２７０は、図２Ｂに示されるように、１つ又は複数のプライベート入力オペランド２７２及び１つ又は複数の共有入力オペランド２７４を含み得る。プライベート入力オペランド２７２は、プライベートメモリモジュール２３０に格納することができ、共有入力オペランド２７４は、共有メモリモジュール２５０に格納することができる。
【００３７】
[045]  ニューラルネットワークのアプリケーションでは、ソフトウェアアルゴリズム２１０は、共有データを有し、共有データは、共有メモリモジュール２５０に格納することができ、共有オペランド２７４として処理ユニットアレイ２４０の複数の処理ユニット２４２、２４４、２４６及び２４８の各々にブロードキャストすることができる。例えば、図２Ａに示されるアルゴリズムは、以下のベクトル演算を演算し、
Ａ＝ｓｉｇｍｏｉｄ（ｂ＋Ｘ*Ｗ１）  （方程式１）
これは、ディープラーニングアルゴリズムにおいて呼び出される場合が多いニューラルネットワークの層２００における代表的な演算である。方程式１を参照すると、「ｂ」は、一定の値を含み得、「Ｘ」は、共有入力オペランド２７４を含み得、「Ｗ１」は、プライベート入力オペランド２７２を含み得る。
【００３８】
[046]  図２Ａを参照すると、ベクトルサイズは、任意の自然数として設定することができる。ここでは、ベクトルサイズ４が例として取り入れられ、ベクトルを演算するための４ウェイＳＩＭＤハードウェアが使用される。処理ユニット２４２、２４４、２４６及び２４８は、以下の演算を並列で演算することができる。
ａ１＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１*Ｗ１11＋ｘ２*Ｗ１21＋ｘ３*Ｗ１31＋ｘ４*Ｗ１41）  （方程式２）
ａ２＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１*Ｗ１12＋ｘ２*Ｗ１22＋ｘ３*Ｗ１32＋ｘ４*Ｗ１42）  （方程式３）
ａ３＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１*Ｗ１13＋ｘ２*Ｗ１23＋ｘ３*Ｗ１33＋ｘ４*Ｗ１43）  （方程式４）
ａ４＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１*Ｗ１14＋ｘ２*Ｗ１24＋ｘ３*Ｗ１34＋ｘ４*Ｗ１44）  （方程式５）
【００３９】
[047]  図２Ａの網掛けブロック及び点線は、「ａ１」がどのように計算されるかを示す。この演算から、「Ｗ１」アレイの各列のデータは、処理ユニットアレイ２４０の対応する処理ユニットに対してローカルであり、したがってデータは、プライベートメモリモジュール２３０の対応するメモリブロックにプライベート入力オペランド２７２として格納できることが理解される。例えば、Ｗ１アレイの第１、第２、第３及び第４の列の各々におけるデータは、プライベートメモリモジュール２３０のそれらの対応するメモリブロック２３２、２３４、２３６及び２３８にプライベート入力オペランドとして格納することができる。
【００４０】
[048]  図２Ａを参照すると、Ｗ１アレイは、格納データの行列を含み得、行列の各要素は、Ｗ１ｉｊ又はＷ１＿ｉｊとして表され（後に示されるように）、「ｉ」は行列の行番号を表し、「ｊ」は行列の列番号を表す。例えば、方程式２では、Ｗ１41は、Ｗ１アレイの行４と列１に位置する要素に格納されたデータを表す。行列の要素をアドレス指定するため、他の一般的に知られている表記も使用することができる。
【００４１】
[049]  同時に、Ｘアレイのデータは、すべての処理ユニット２４２、２４４、２４６及び２４８によって利用され、したがって共有メモリモジュール２５０に共有入力オペランド２７４として格納され、共有メモリモジュール２５０からの読み取りを行うすべてのコンポーネントにブロードキャストされる。方程式２〜５は、ニューラルネットワークプロセッサの層２００において実行される例示的な演算を表し、ａ１、ａ２、ａ３及びａ４を計算するように設計される。
【００４２】
[050]  いくつかの実施形態では、機械学習又はディープラーニングは、ニューラル処理の１つ又は複数の層に対するアルゴリズムを実施することによって遂行された、入力データに基づいて最終結果を生成するためにニューラルネットワークプロセッサを訓練することを含む。例えば、図２Ａの層２００は、バイアスｂ、Ｘアレイに格納されたデータ及びＷ１アレイに格納されたデータを使用して演算を実行するように構成されたアルゴリズムを含む第１の層を表す。第２及び第３の層（図示せず）は、バイアスｂ、Ｘアレイに格納されたデータ並びにＷ２及びＷ３アレイに格納されたデータを使用するアルゴリズムを含み得る。各層は、バイアスｂの異なる値及び「Ｗ」アレイに格納された異なるパラメータを含み得る。
【００４３】
[051]  図２Ａを参照すると、例えば、アレイＸは、異なるクラスの個人のスコアを含み得る。アレイＸのｘ１の値は、学生Ａの数学のスコアであり得、ｘ２は、英語のスコアであり得、ｘ３は、歴史のスコアであり得、ｘ４は、科学のスコアであり得る。最終結果は、スコア（入力データ）に基づいて、個人が学校への入学許可を得られるか又は入学を拒否されるかであり得る。図２Ａに示されるように及び方程式２〜５において説明されるように、データｘ１〜ｘ４は、「共有」され、ａ１〜ａ４の計算において共通である。
【００４４】
[052]  図３は、多層ネットワークにおけるデータ共有を示す。本明細書で説明されるデータ共有は、以前のプライベートデータがプログラムの後の段階においてどのようにして共有データになり得るかを指す。いくつかの実施形態では、ニューラルネットワークアーキテクチャ３００は、多層（例えば、層３１０及び３２０）を含む。いくつかの実施形態では、層３１０の出力オペランド２８０は、層３２０に対する入力オペランド２７０として使用することができる。いくつかの実施形態では、１つの層の出力オペランド２８０は、１つ又は複数の層によって入力オペランド２７０として利用することができる。
【００４５】
[053]  例えば、層３１０では、ａ１は、プライベートメモリモジュール２３０の処理ユニット２４２によって計算される。ａ１のデータは、層３２０に対するブロードキャスト入力になる。一般に、ニューラルネットワークは、層の状態に組織化することができる。各層は、その入力において１つ又は複数の演算を実行し、出力を生成することができる。層の出力は、さらなる処理のために、次の層に伝えることができる。例えば、前の層の出力は、次の層に対する入力であり得る。それに従って、ローカルで生成された「ａ」は、共有メモリ２５０に戻して格納されるか、又は、プライベートメモリ２３０に格納され、後に共有メモリ２５０にコピーされなければならない。
【００４６】
[054]  プライベートメモリ２３０に格納し、後に共有メモリ２５０にコピーすることに対する代替の解決法として、ａ１からの出力オペランド２８０は、メモリにコピーするよりも、共有メモリ２５０に直接戻して格納することができる。それにもかかわらず、この代替の解決法は、依然として、プログラムを減速させる恐れがある。単一の処理ユニット（例えば、処理ユニット２４２）は、１つのサイクルあたりたった１つの乗加算演算（例えば、Ｘｉ*Ｗ１＿ｉｊ）しか終了できないため、「ａ」の各動作は、複数のサイクルにわたって実行され得る。この理由のため、各サイクルにおいてプライベートメモリ２３０からたった１つのオペランドＷ１＿ｉｊしか読み取られず、従って、共有メモリ２５０からは、たった１つの「Ｘ」しか必要ではない。結果的に、各メモリモジュールの共通の設計は、１つのサイクルあたり単一読み取り／単一書き込みである。最後のサイクルにおいて複数の処理ユニットによってすべての「ａ」が同時に生成される場合、共有メモリ２５０は、それらをすべて書き戻す能力を有さない可能性がある。
【００４７】
[055]  いくつかの実施形態では、これらの出力オペランド２８０を個別に消費するためのさらなる時間を共有メモリ２５０に与えるための書き込みバッファ２６０が導入される。しかし、処理ユニット２４０の出力速度が書き込みバッファ２６０の幅より速い（例えば、ＡのサイズがＸより大きい）場合は、書き込みバッファ２６０はバックプレッシャを伝播し、処理ユニットアレイ２４０を強制的に減速させ、それにより、プログラム全体の実行が減速する。
【００４８】
[056]  図４Ａは、メモリモジュールの統合組織を含む例示的なハードウェアシステム４００の概略図を示す。ハードウェアシステム４００は、統合記憶媒体４０５と、処理ユニット２４２、２４４、２４６及び２４８とを含む。統合記憶媒体４０５は、１つ又は複数の記憶モジュール４１０を含み、１つ又は複数の記憶モジュール４１０の各々は、入力オペランド２７０、出力データ２８０を格納するように構成された記憶セル４３０を含む。複数の記憶モジュール４１０は、統合記憶媒体４０５を形成するために、単一の媒体にマージすることができる。各記憶モジュール４１０は、プライベート記憶モジュール４１２及び共有記憶モジュール４１４を含み得る。いくつかの例示的な実施形態では、メモリモジュールは、単一の均質媒体であり得ることを理解されたい。
【００４９】
[057]  ハードウェアシステム４００は、複数の処理ユニット２４２、２４４、２４６及び２４８を含み得る。処理ユニットアレイ２４０の複数の処理ユニットの各々は、１つ又は複数の記憶モジュールと通信するように構成される。例えば、処理ユニット２４２は、プライベート記憶モジュール４１２からプライベート入力オペランド２７２を受信することができる。また、処理ユニット２４２は、１つ又は複数の共有記憶モジュール４１４から共有入力オペランド２７４を受信することもできる。いくつかの実施形態では、処理ユニットアレイ２４０は、プライベート記憶モジュール４１２からプライベート入力オペランド２７２を受信し、共有記憶モジュール４１４から共有入力オペランド２７４を受信し、及びプライベート入力オペランド２７２及び共有入力オペランド２７４に基づいて出力オペランド２８０を生成するように構成される。
【００５０】
[058]  図４Ｂに示されるように、記憶セル４３０の各々は、一意識別子４４０によって一意的に識別することができる。一意識別子４４０は、高位ビット４４２及び低位ビット４４４を含むビットアドレスか、高位及び低位バイトを含むバイトアドレスか又はそれらの組合せであり得る。演算においては、高位ビット４４２は、最上位ビット（ＭＳＢ）であり得る。また、ＭＳＢは、上位の数字になればなるほど左側に記載されるという位置表記法により、左端ビットと呼ぶこともできる。他方では、低位ビット４４４は、右端に位置するビットと呼ばれる。例えば、「２＿Ｅ５」というビットアドレスを有する一意識別子４４０では、高位ビット４４２は、左端ビット（すなわち「２」）を指し、低位ビット４４４は、右側のビット（すなわち「Ｅ５」）を指す。
【００５１】
[059]  例示的な実施形態のいくつかによれば、メモリ（オン又はオフチップ）は、プライベート又は共有（例えば、放送）メモリとして特徴付けることができる。例えば、プライベートメモリは、複数の並列する処理要素の中の単一の処理要素の各々に対してデータを供給することを専門とするメモリであり、共有メモリは、すべての並列する処理要素（例えば、コアのすべての処理要素）に対してデータを供給することを専門とするメモリを指すことができる。例示的な実施形態のいくつかによれば、メモリは、単一のメモリユニットであり得る。
【００５２】
[060]  いくつかの実施形態では、記憶セル４３０は、プライベート記憶セル４３２又は共有記憶セル４３４である。プライベート記憶セル４３２は、プライベート記憶モジュール４１２内に位置し得る。共有記憶セル４３４は、共有記憶モジュール４１４内に位置し得る。一意識別子４４０の高位ビット４４２は、オペランド（２７０、２８０）のターゲット記憶モジュールを示すように構成され、一意識別子４４０の低位ビット４４４は、オペランド（２７０、２８０）のターゲット記憶モジュール内のターゲット記憶セルを示すように構成される。例えば、「２＿Ｅ５」というビットアドレスを有する一意識別子４４０は、記憶モジュール「２」と、記憶モジュール「２」内の記憶セル「Ｅ５」とを指す。言い換えれば、高位ビット４４２は、記憶モジュールが「プライベート」である処理ユニットも示し得、低位ビット４４４は、記憶モジュール内の場所も示し得る。
【００５３】
[061]  プライベート記憶セル４３２及び共有記憶セル４３４は、物理的に区別できない記憶セルであり、そのように事前にラベル付けされないことを理解されたい。記憶セルに対する「プライベート」及び「共有」の属性は、データのアドレス指定を行うようにプログラムされたコンパイラが生成した命令に基づいて決定される。例えば、データは、いかなるセルにも格納することができる。読み取りステップの間、コンパイラが生成した命令がデータを「プライベート」として示す場合は、データは、プライベート入力オペランド２７２として並列で読み取ることができる。或いは、コンパイラが生成した命令がデータを「共有」として示す場合は、データは、共有入力オペランド２７４として読み取ることができる。
【００５４】
[062]  いくつかの実施形態では、一意識別子４４０は、例えば、数字、英数字、１６進数（例えば、図４Ａに示されるもの）、８進数又は同様のものなど、ソフトウェアアドレス指定モードによってアドレス指定可能な他の文字を含む。
【００５５】
[063]  図４Ａに戻ると、処理ユニットアレイ２４０又は複数の処理ユニットの各々は、出力データ２８０を生成することができる。出力データ２８０は、プライベート出力データ２８２又は共有出力データ２８４であり得、ニューラルネットワークプロセッサの多層アルゴリズムの次の層における動作によって決定される。図４Ａに示されるように、出力データ２８０は、統合記憶媒体の記憶モジュール４１０の各々に並列に書き戻されるため、プライベート出力データ２８２と見なすことができる。
【００５６】
[064]  図４Ａの例示的な実装形態では、処理ユニットアレイの一方のオペランドは、プライベートデータから来るものであり、他方は、すべての処理ユニットにブロードキャストされている数値から（例えば、共有メモリから）来るものである。単一のｏｐ２又は共有オペランド２７４が特殊数として検出された場合は、アレイ全体の演算を簡略化できることを理解されたい。
【００５７】
[065]  例示的な実施形態のいくつかによれば、処理ユニットユニット２４０は、特殊数の存在を検出するための少なくとも１つの検出器を含む。演算強度は、演算を迅速に実行するというデバイスの能力によって定義することができる。
【００５８】
[066]  数学では、特殊数は、演算において期待される結果をもたらす数値として定義することができる。０、１などの特殊数を利用することにより、これらの特殊数に基づく演算を簡略化することができる。例えば、Ａｎｙ＿Ｎｕｍｂｅｒ*０＝０、Ｔｈｅ＿Ｎｕｍｂｅｒ*１＝Ｔｈｅ＿Ｎｕｍｂｅｒ、Ｔｈｅ＿Ｎｕｍｂｅｒ＋０＝Ｔｈｅ＿Ｎｕｍｂｅｒ、ｍｉｎ（Ｒａｎｇｅ＿Ｍｉｎ，Ａｎｙ＿Ｎｕｍｂｅｒ）＝Ｒａｎｇｅ＿Ｍｉｎ、ｍａｘ（Ｒａｎｇｅ＿Ｍａｘ，Ａｎｙ＿Ｎｕｍｂｅｒ）＝Ｒａｎｇｅ＿Ｍａｘなどが挙げられる。特殊数に直面すると、演算デバイスのハードウェアは、従来のものの代わりに、簡略化されたいくつかの演算を実行することができる。例えば、結果＝０、何もしない、結果＝他のオペランドなどが挙げられる。従って、特殊数を識別できることは、演算を簡略化する上で役立ち得、その結果、演算速度が増加し、従って、演算強度が増大する。
【００５９】
[067]  図５は、本開示の実施形態と一致する、例示的な複数パイプのパイプラインアーキテクチャのブロック図を示す。図５のアーキテクチャは、複数パイプラインの一部分をパイプラインＡ  ５０１として示し、残りの半分をパイプラインＢ  ５０３として示しており、それらは両方とも、コアの一部である。簡単にするため、アーキテクチャは、乗算演算の観点から説明されており、結果＝ｏｐＡ*ｏｐＢである。図５に示される演算は、２つのオペランドを有する乗算に限定されず、特殊数に対して簡略化できる、いかなる数のオペランドも有するいかなる演算にも拡張できることに留意されたい。例えば、複数パイプライン構成は、加算、減算、乗算、除算に基づく演算（数ある中でも特に、乗累算演算を含み得る）において利用することができる。そのような演算では、０の数値は、特殊数として識別することができる。
【００６０】
[068]  メモリユニット５０５は、図２Ａに関連して論じられるように、共有メモリ２５０及びプライベートメモリ２３０を含み得る。一方のオペランドは、共有メモリからブロードキャストされるか又は読み取られるものであり、他方のオペランドは、プライベートであり、プライベートメモリから読み取ることができる。本明細書で提示される例示的な実施形態は、均質記憶セル（homogenous storage cell）を特徴とするメモリユニットにも適用できることを理解されたい。
【００６１】
[069]  オペランドの各々は異なるパイプライン段階を有し、同時に起動される２つのパイプライン（すなわち、パイプラインＡ及びパイプラインＢ）が存在するため、アーキテクチャは、複数パイプのパイプラインと呼ばれる。その上、パイプラインは３つ以上のオペランドを受信できることが理解されるが、簡単にするため、本出願の残りの部分では、２つのオペランドを受信する複数パイプのパイプラインにより焦点を置く。
【００６２】
[070]  単一の演算において同じ瞬間に少なくとも２つのオペランドが必要であるため、特殊数の検出は、演算が開始される前に検出器５０７を介して実行される。検出器５０７は、コア（例えば、図１のコア１１６）内に位置し得、システム内の他のいかなる処理ユニット又はプロセッサ内にも位置する可能性があることを理解されたい。
【００６３】
[071]  いくつかの実施形態によれば、特殊数は、他のオペランド（又は他の任意のオペランド）がメモリから読み取られる前でさえも、検出器５０７を介して検出される。これを達成するため、複数パイプのパイプラインが実装され、一方のパイプはオペランド１に対して使用され、他方はオペランド２に対して使用される。図５によって提供される例では、第１のオペランドｏｐＢは、パイプライン５０８を使用してメモリ５０５から読み取られる。パイプライン５０９＿１〜５０９＿ｎは、メモリ５０５から第２のオペランドｏｐＡを読み取るために使用される。オペランド１に対して使用されるパイプラインは、オペランド２に対して使用されるパイプラインの少なくとも１サイクル先に動作し、オペランド２がメモリから読み取られる前に特殊数の検出を可能にする。
【００６４】
[072]  動作の際、本例によれば、パイプラインの第１の部分５０３は、実行のための４つの段階を有する。これらの段階は、段階１から段階４までである。
【００６５】
[073]  段階１では、最初に、例えば、命令フェッチユニット（図５には図示せず）を介して、命令がフェッチされる。例示的な実施形態のいくつかによれば、命令は、実行される演算に関連する。その後、受信された命令は、例えば、命令デコーダ（図５には図示せず）を介して、復号することができる。例示的な実施形態のいくつかによれば、命令デコーダは、コアからフェッチされ復号された命令に基づいて第１のオペランドｏｐＢに対してメモリアドレスを生成するためのアドレスジェネレータを含み得る。
【００６６】
[074]  段階２では、メモリ５０５からデータが読み取られる。例示的な実施形態のいくつかによれば、データは、パイプライン５０８（メモリ５０５から第１のオペランドｏｐＢを読み取るために使用されるもの）を使用してメモリから読み取られる。例示的な実施形態のいくつかによれば、第１のオペランドｏｐＢは、共有又はブロードキャストメモリから読み取ることができる。例示的な実施形態のいくつかによれば、第１のオペランドは、単一の均質メモリユニットから読み取ることができる。
【００６７】
[075]  コア又は処理ユニットアレイに含まれ得る検出器５０７は、第１のオペランドｏｐＢにおける特殊数の存在を判断する。本乗算例では、第１の検出は、０の数値に対して行うことができる。検出器がデータ内に０の形式の特殊数を見つけた場合は、コアは、第２のオペランドｏｐＡに対するアドレスの生成を停止し（例えば、動作のこのステップは阻止されるか又は省略される）、段階の間にｏｐＡがフリップフロップ５１０＿１〜５１０＿ｎに更新されることを停止する。
【００６８】
[076]  段階３では、処理ユニットが乗算器として動作する本乗算例によれば、別の特殊数（例えば、１の形式のもの）がデータ内に含まれるかどうかを判断するために検出を行うことができる。第２の検出は、コア又は処理ユニットアレイ内に位置する同じ又は異なる検出器によって行うことができる。図５に示される例では、第２の検出器５１１が利用されている。
【００６９】
[077]  第１及び第２の検出の結果は、フリップフロップ５１２＿１及び５１２＿２を介して次の段階にプッシュされる。結果は、検出された関連する特殊数に基づいて、既定の又は予測可能なものである。特殊数（すなわち、本例では、０又は１）が検出されなかった場合は、データ自体（ｏｐＢ）が、フリップフロップ５１２＿３に更新される。
【００７０】
[078]  段階４では、本乗算器（ＭＵＬ）例によれば、以下のように条件付きで機能する：
ｏｐＢが０である場合、結果＝０
ｏｐＢが１である場合、結果＝ｏｐＡ、又は、
結果＝結果（すなわち、ｏｐＡ*ｏｐＢ）。
【００７１】
[079]  動作の際、本乗算例によれば、第２のオペランドｏｐＡと関連付けられた動作（複数パイプラインの第２の部分５０１によって実行される）は、実行のための４つの段階を有する。
【００７２】
[080]  これらの段階は、第１のオペランドｏｐＢと関連付けられたものと同様である場合もあり得るが、異なる場合もあり得る。例えば、段階１では、第２のオペランドｏｐＡを読み取るためのメモリアドレスは、コアからフェッチされ復号された命令に基づいて生成される。本例では、第１のオペランドｏｐＢが０の特殊数として検出されなかった場合は、データが更新され、次の段階のフリップフロップ５１２−１又は５１２−３に送信される。
【００７３】
[081]  段階２では、メモリ５０５から第２のパイプライン５０９＿１〜５０９＿ｎを介して、第２のオペランドｏｐＡと関連付けられたデータが読み取られる。
【００７４】
[082]  段階３では、第１のオペランドｏｐＢの段階４に関連して上記で説明されるように、処理ユニットを介して、条件付き演算が実行される。
【００７５】
[083]  段階４の間、コアは、各データレーン５０９＿１〜５０９＿ｎのために結果をメモリに戻して格納する。
【００７６】
[084]  図６は、本開示の実施形態と一致する、図５において説明される動作を示す。図６では、垂直破線は、図５の複数パイプライン構成の異なる動作サイクルＣを表し、図６のサイクル数は、図５に関連して説明される段階数に対応する。図６の上部Ｂは、第１のオペランドｏｐＢに対して動作するように構成されたパイプラインアーキテクチャの部分５０３によって行われた動作を表す。図６の下部Ａは、第２のオペランドｏｐＡに対して動作するように構成されたパイプラインアーキテクチャの部分５０１によって行われた動作を表す。斜線部分及び網点部分は、相次ぐ２つの異なる乗算を示す。各動作は、図５に関連して説明されるように、４段階の複数パイプパイプラインを次々と経由する。
【００７７】
[085]  図６に示されるように、オペランドｏｐＢに対して動作するように構成されたパイプラインアーキテクチャの部分５０３は、第２のオペランドｏｐＡに対して動作するように構成された部分５０２の１サイクル前に開始される。部分５０３は部分５０２の１サイクル前に開始されるため、複数パイプライン構成の部分５０１内において不要な動作を阻止することができる。例えば、段階２／サイクル２では、第１のオペランドｏｐＢは、メモリから読み取られ、特殊数の検出が実行される。本乗算例では、第１の検出は、０の数値に対して実行される。第１のオペランドｏｐＢは０の数値を含むということが検出され次第、第１のオペランドｏｐＡを得るためのメモリのアドレスの生成が休止される。従って、起こったであろう後続のいかなる動作（例えば、段階及びサイクル３、４）も休止することができ、識別された特殊数（０）と関連付けられた既定の又は予測可能な結果を格納し、新しい動作（サイクル１ａ〜４ａ）を開始することができる。
【００７８】
[086]  図７は、複数パイプラインアーキテクチャを有する演算デバイスにおいて特殊数の検出を伴う演算を提供する際に、図５の複数パイプライン構成によって行うことができる例示的な動作を描写するフロー図である。演算デバイスは、命令を格納するメモリと、命令を実行する１つ又は複数のコアとを含む。
【００７９】
[087]  図７は、実線の枠線で示されるいくつかの動作及び破線の枠線で示されるいくつかの動作を含むことを理解されたい。実線の枠線で囲まれる動作は、最大限広範な例示的な実施形態に含まれる動作である。破線の枠線で囲まれる動作は、枠線の例示的な実施形態の動作に含まれるか、同動作の一部であるか又は同動作に加えて行うことができるさらなる動作である例示的な実施形態である。これらの動作は順番に実行する必要はないことを理解されたい。その上、すべての動作を実行しなければならないわけではないことを理解されたい。例示的な動作は、いかなる順番及びいかなる組合せでも実行することができる。
【００８０】
[088]  動作は、メモリからのデータの第１及び第２のパイプラインを同時に起動すること（７１０）を含む。第１のパイプラインは、メモリから第１のオペランドを受信するように構成され、第２のパイプラインは、メモリから第２のオペランドを受信するように構成され、第１のオペランドは、第２のパイプラインの少なくとも１サイクル先に動作する。コアは、第１及び第２のパイプラインの同時起動を提供するように構成することができる。
【００８１】
[089]  図５及び６に示されるように、特殊数の検出は、少なくとも１つのオペランドにおいて実行される。そのような検出が実行されるオペランドの場合、メモリからオペランドを読み取るために別個のパイプラインが使用される。この別個のパイプラインは、システムの他の任意のパイプラインの少なくとも１サイクル先に動作する。そのような構成の利点は例えば、システム内で起こる他の任意の動作の前に特殊数の存在を検出できることである。特殊数は、既定の又は予測可能な演算結果をもたらす。従って、特殊数の存在が検出され次第、全演算を実行する必要なく演算結果を得ることができる。そのような演算最適化の例は、図６に示されており、特殊数（０）の検出により、サイクル３及び４の残りの動作を実行することなく、結果が提供される。
【００８２】
[090]  その後、動作は、フェッチユニットを介して命令バッファから命令をフェッチすることを含む。命令は、実行される演算に関連し得る。
【００８３】
[091]  動作は、フェッチされた命令を復号することをさらに含む。復号することは、デコーダ又はコアによって実行することができる。その後、動作は、第１のオペランドに対するメモリのメモリアドレスを生成すること（７１２）をさらに含み得る。コア又はアドレスジェネレータは、第１のオペランドに対するメモリのメモリアドレスを生成することができる。例示的な実施形態のいくつかによれば、アドレスは、フェッチされ復号された命令に基づいて生成することができる。
【００８４】
[092]  図６では、この動作は、サイクル１において示されている。図５では、この動作は、第１のパイプライン５０３の段階１に関連して説明されている。いくつかの実施形態では、メモリは、共有メモリ記憶装置であり得ることを理解されたい。
【００８５】
[093]  いくつかの実施形態では、メモリは、多数の記憶セルを含み得、多数の記憶セルは、少なくとも１つの共有メモリ記憶セルと、少なくとも１つのプライベートメモリセルとをさらに含む。いくつかの例示的な実施形態によれば、第１のオペランドは、共有メモリ記憶セルに格納されたブロードキャストオペランドであり、第１のパイプラインにブロードキャストするように構成することができる。そのような例示的な実施形態によれば、第２のオペランドは、プライベートメモリ記憶セルに格納され、読み取られて第２のパイプラインに提供されるプライベートオペランドであり得る。
【００８６】
[094]  動作は、第１のパイプラインにおいて、生成されたメモリアドレスから第１のオペランドを読み取ること（７１４）をさらに含み得る。処理ユニットは、生成されたメモリアドレスから第１のオペランドを読み取って第１のパイプラインに提供するように構成することができる。
【００８７】
[095]  図６では、この動作は、第１のパイプラインＢによって実行されるように、サイクル２において示されている。図５では、この動作は、第１のパイプライン５０３の段階２に関連して説明されている。
【００８８】
[096]  動作は、検出器を介して、第１のオペランドが特殊数かどうかを検出すること（７１６）をさらに含み、特殊数は、既定の又は予測可能な演算結果をもたらす数値である。検出器は、コアに含まれ得る。
【００８９】
[097]  図６では、この動作は、第１のパイプラインＢによって実行されるように、サイクル２において示されている。図５では、この動作は、第１のパイプライン５０３の段階２に関連して説明されている。
【００９０】
[098]  第１のオペランドが特殊数として検出された場合は、動作は、検出された特殊数と関連付けられた結果を取得すること（７１８）をさらに含む。処理ユニットは、検出された特殊数と関連付けられた結果を取得するように構成することができる。
【００９１】
[099]  特殊数は既定の又は予測可能な演算結果をもたらすため、この結果は、演算を実行することなく得ることができる。従って、これらの既定の又は予測可能な結果は、メモリに格納しておき、特殊数が検出され次第、取得することができる。そのような特殊数及び対応する既定の又は予測可能な結果の例は、（１）０の数値を乗じた数値はいずれも、０の既定の又は予測可能な結果をもたらすこと、及び、（２）１の数値を乗じた数値はいずれも、１を乗じた数値の予測可能な結果をもたらすことである。
【００９２】
[0100]  例示的な実施形態のいくつかによれば、複数パイプライン構成によって実行される演算は乗算である。そのような実施形態によれば、検出する動作７１６は、０の形式の特殊数を検出するように構成することができる。そのような例示的な実施形態によれば、動作は、第２のオペランドに対するメモリアドレスの生成を阻止すること（７１９）をさらに含み得る。コアは、第２のオペランドの生成を停止するように構成することができる。
【００９３】
[0101]  そのような例示的な実施形態によれば、０の数値による乗算は０の結果をもたらすため、さらなる演算を実行する必要はない。従って、検出され次第、サイクル２〜４の動作を休止し、０の既定の又は予測可能な結果を格納することができる。
【００９４】
[0102]  例示的な実施形態のいくつかによれば、複数パイプライン構成によって実行される演算は乗算である。そのような実施形態によれば、検出する動作７１６は、１の形式の特殊数を検出するように構成することができる。そのような例示的な実施形態によれば、動作は、第２のオペランドに対するメモリアドレスを生成すること（７２０）をさらに含み得る。コアは、第２のオペランドに対するメモリアドレスを生成するように構成することができる。第２のオペランドに対するメモリアドレスの生成は、フェッチされ復号された命令に基づき得る。
【００９５】
[0103]  そのような例示的な実施形態によれば、１の数値による乗算は１を乗じた数値の結果をもたらすため、その演算を最適化することができる。従って、検出され次第、サイクル４の動作を休止し、第２のオペランドの値の既定の又は予測可能な結果を格納することができる。
【００９６】
[0104]  メモリアドレスを生成すること（７２０）が行われ次第、動作は、第２のパイプラインにおいて、生成されたメモリアドレスから第２のオペランドを読み取ること（７２１）をさらに含み得る。処理ユニットは、第２のパイプラインにおいて、生成されたメモリアドレスから第２のオペランドを読み取るように構成することができる。
【００９７】
[0105]  例示的な動作７２０に関連して論じられるように、乗算演算における検出された１の特殊数に対する既定の又は予測可能な結果は、１を乗じた数値である。従って、結果を決定する際、第２のオペランドは、メモリから読み取られる。
【００９８】
[0106]  生成すること（７２０）及び読み取ること（７２１）は、第２のオペランドの値に等しいものとして結果の値を割り当てること（７２２）をさらに含む。処理ユニットは、第２のオペランドの値に等しいものとして結果の値を割り当てるように構成することができる。
【００９９】
[0107]  取得する動作７１８は、第１及び第２のパイプラインのために、取得された結果をメモリに格納すること（７２３）をさらに含む。コアは、第１及び第２のパイプラインのために、取得された結果をメモリに格納するように構成される。
【０１００】
[0108]  第２の動作が特殊数ではないと判断された場合は、動作は、第２のオペランドに対するメモリのメモリアドレスを生成すること（７２４）をさらに含む。コアは、第２のオペランドに対するメモリのメモリアドレスを生成するように構成することができる。
【０１０１】
[0109]  特殊数が存在しないことが検出され次第、図５に関連して説明されるようなすべての段階及び図６に関連して説明されるようなすべてのサイクルが実行される。
【０１０２】
[0110]  アドレスを生成すること（７２４）が行われ次第、動作は、第２のパイプラインにおいて、生成されたメモリアドレスから第２のオペランドを読み取ること（７２６）をさらに含む。処理ユニットは、第２のパイプラインにおいて、生成されたメモリアドレスから第２のオペランドを読み取るように構成することができる。
【０１０３】
[0111]  図６では、この動作は、第２のパイプラインＡによって実行されるように、サイクル３において示されている。図５では、この動作は、第１のパイプライン５０３の段階２に関連して説明されている。
【０１０４】
[0112]  第２のオペランドを読み取ること（７２４）が行われ次第、動作は、第１及び第２のオペランドに対して演算を実行すること（７２８）をさらに含む。処理ユニットは、第１及び第２のオペランドに対して演算を実行するように構成することができる。
【０１０５】
[0113]  図６では、この動作は、サイクル４において示されている。図５では、この動作は、第１のパイプライン５０３の段階３に関連して説明されている。サイクル１〜３の間、フェッチは完全に止まっていることを理解されたい。サイクル４では、動作は、第１の命令を計算している間に、第２の命令を取得するフェッチユニットをさらに含み得る。サイクル１ａ〜４ａは、第２の命令を使用して繰り返すことができる。
【０１０６】
[0114]  演算を実行すること（７２８）が行われ次第、動作は、第１及び第２のパイプラインのために、実行された演算の結果をメモリに格納すること（７３０）をさらに含む。コアは、第１及び第２のオペランドに対して実行された演算の結果をメモリに格納するように構成することができる。
【０１０７】
[0115]  図６では、この動作は、第１のパイプラインＢによって実行されるように、サイクル１ａにおいて示されている。図５では、この動作は、第１のパイプライン５０３の段階４に関連して説明されている。
【０１０８】
[0116]  本明細書で説明される様々な例示的な実施形態は、方法ステップ又はプロセスの一般的な文脈において説明されており、方法ステップ又はプロセスは、一態様では、コンピュータ可読媒体において具体化されるコンピュータプログラム製品（ネットワーク接続環境においてコンピュータによって実行されるプログラムコードなどのコンピュータ実行可能命令を含む）によって実施することができる。コンピュータ可読媒体は、着脱可能及び着脱不能な記憶装置を含み得、これらに限定されないが、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）などを含む。一般に、プログラムモジュールは、特定のタスクを実行するか又は特定の抽象データタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含み得る。コンピュータ実行可能命令、関連データ構造及びプログラムモジュールは、本明細書で開示される方法のステップを実行するためのプログラムコードの例を表す。そのような実行可能命令又は関連データ構造の特定のシーケンスは、そのようなステップ又はプロセスにおいて説明された機能を実装するための対応する行為の例を表す。
【０１０９】
[0117]  前述の仕様では、実装形態ごとに変化し得る多くの特有の詳細を参照して、実施形態について説明した。説明される実施形態の適応及び変更は、ある程度行うことができる。本明細書で開示される発明の仕様及び実践を考慮することにより、他の実施形態が当業者に明らかになり得る。仕様及び例は単なる例示と見なされ、本発明の真の範囲及び精神は以下の特許請求の範囲によって示されることが意図される。また、図に示されるステップのシーケンスは、単なる例示を目的とし、ステップの特定のシーケンスに限定することは意図しないことも意図される。従って、当業者は、同じ方法を実施する間、異なる順番でこれらのステップを実行できることを理解することができる。
【０１１０】
[0118]  図面及び明細書では、例示的な実施形態を開示した。しかし、これらの実施形態に対し、多くの変形及び変更を行うことができる。それに従って、特有の用語が採用されているが、それらは単に一般的且つ記述的な意味で使用され、制限する目的では使用されない。実施形態の範囲は、以下の特許請求の範囲によって定義される。
【図１】
2021507368.tif 000003
【図２Ａ】
2021507368.tif 000004
【図２Ｂ】
2021507368.tif 000005
【図３】
2021507368.tif 000006
【図４Ａ】
2021507368.tif 000007
【図４Ｂ】
2021507368.tif 000008
【図５】
2021507368.tif 000009
【図６】
2021507368.tif 000010
【図７】
2021507368.tif 000011
【国際調査報告】
2021507368.tif 000012
2021507368.tif 000013