JP2021507368A - 特殊数の検出を伴う複数パイプラインアーキテクチャ - Google Patents
特殊数の検出を伴う複数パイプラインアーキテクチャ Download PDFInfo
- Publication number
- JP2021507368A JP2021507368A JP2020532566A JP2020532566A JP2021507368A JP 2021507368 A JP2021507368 A JP 2021507368A JP 2020532566 A JP2020532566 A JP 2020532566A JP 2020532566 A JP2020532566 A JP 2020532566A JP 2021507368 A JP2021507368 A JP 2021507368A
- Authority
- JP
- Japan
- Prior art keywords
- operand
- memory
- pipeline
- special number
- core
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 26
- 230000015654 memory Effects 0.000 claims description 223
- 238000012545 processing Methods 0.000 claims description 75
- 238000000034 method Methods 0.000 claims description 31
- 210000000352 storage cell Anatomy 0.000 claims description 23
- 238000013528 artificial neural network Methods 0.000 claims description 22
- 238000004364 calculation method Methods 0.000 claims description 9
- 230000005055 memory storage Effects 0.000 claims description 6
- 230000000903 blocking effect Effects 0.000 claims description 2
- 230000003213 activating effect Effects 0.000 claims 1
- 230000009471 action Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 11
- 230000000875 corresponding effect Effects 0.000 description 8
- 238000013135 deep learning Methods 0.000 description 8
- 239000000872 buffer Substances 0.000 description 7
- 238000012546 transfer Methods 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 6
- 239000011159 matrix material Substances 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 210000004027 cell Anatomy 0.000 description 2
- 230000001537 neural effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000003754 machining Methods 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000000946 synaptic effect Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
- G06F9/3832—Value prediction for operands; operand history buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/48—Indexing scheme relating to groups G06F7/48 - G06F7/575
- G06F2207/4802—Special implementations
- G06F2207/4818—Threshold devices
- G06F2207/4824—Neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computational Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Neurology (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
Abstract
本開示は、複数パイプラインアーキテクチャを有する演算デバイスに関する。複数パイプラインアーキテクチャは、同時に起動される第1及び第2のパイプラインを含み、第1のパイプラインは、第2のパイプラインの少なくとも1サイクル先に起動する。第1のパイプラインにおいて特殊数の検出が利用され、特殊数は、予測可能な結果をもたらす数値である。特殊数が検出された場合、演算が最適化される。
Description
関連出願の相互参照
[001] 本開示は、2017年12月22日に出願された米国仮特許出願第62/610,077号及び2018年12月10日に出願された米国特許出願第16/215,553号への優先権の利益を主張し、同特許出願は、その全体が参照により本明細書に組み込まれる。
[001] 本開示は、2017年12月22日に出願された米国仮特許出願第62/610,077号及び2018年12月10日に出願された米国特許出願第16/215,553号への優先権の利益を主張し、同特許出願は、その全体が参照により本明細書に組み込まれる。
背景
[002] ニューラルネットワークに基づくディープラーニングアプリケーションを加速させるためのニューラルネットワークプロセッサの開発は、既成のチップメーカー、新興企業及びインターネット大企業を含む多くのビジネス部門にわたってかなりの勢いを増している。単一命令複数データ(SIMD)アーキテクチャは、ディープラーニングのアプリケーションに対する演算を加速させるためにチップに適用することができる。画像認識、言語/音声認識及び機械翻訳などのニューラルネットワークに基づくディープラーニングアプリケーションの急激な成長と共に、システムの演算強度を維持及び増大することが望ましい。
[002] ニューラルネットワークに基づくディープラーニングアプリケーションを加速させるためのニューラルネットワークプロセッサの開発は、既成のチップメーカー、新興企業及びインターネット大企業を含む多くのビジネス部門にわたってかなりの勢いを増している。単一命令複数データ(SIMD)アーキテクチャは、ディープラーニングのアプリケーションに対する演算を加速させるためにチップに適用することができる。画像認識、言語/音声認識及び機械翻訳などのニューラルネットワークに基づくディープラーニングアプリケーションの急激な成長と共に、システムの演算強度を維持及び増大することが望ましい。
概要
[003] 本開示は、演算を簡略化し且つ演算強度を増大するために、特殊数の検出能力を有する複数パイプパイプラインのための方法及びシステムに関する。
[003] 本開示は、演算を簡略化し且つ演算強度を増大するために、特殊数の検出能力を有する複数パイプパイプラインのための方法及びシステムに関する。
[004] いくつかの開示される実施形態と一致して、複数パイプラインアーキテクチャを有する演算デバイスにおける特殊数の検出を伴う演算のための方法が提供される。演算デバイスは、命令を格納するためのメモリと、方法を実行するために命令を実行するための処理ユニットとを含む。方法は、メモリからのデータの第1及び第2のパイプラインを同時に起動することを含む。第1のパイプラインは、メモリから第1のオペランドを受信するように構成され、第2のパイプラインは、メモリから第2のオペランドを受信するように構成される。第1のパイプラインは、第2のパイプラインの少なくとも1サイクル先に動作する。
[005] 方法は、第1のオペランドに対するメモリのメモリアドレスを生成することと、第1のパイプラインにおいて、生成されたメモリアドレスから第1のオペランドを読み取ることとをさらに含む。それに加えて、方法は、検出器によって、第1のオペランドが特殊数であるかどうかを検出することを含み、特殊数は、既定の又は予測可能な演算結果をもたらす数値である。
[006] 第1のオペランドが特殊数である場合は、方法は、検出された特殊数と関連付けられた結果を取得することと、第1及び第2のパイプラインのために、取得された結果をメモリに格納することとをさらに含む。第1のオペランドが特殊数ではない場合は、方法は、第2のオペランドに対するメモリのメモリアドレスを生成することと、第2のパイプラインにおいて、生成されたメモリアドレスから第2のオペランドを読み取ることと、第1及び第2のオペランドに対する演算を実行することと、第1及び第2のパイプラインのために、実行された演算の結果をメモリに格納することとをさらに含む。
[007] 本明細書で開示されるいくつかの実施形態は、特殊数の検出を伴う演算のための演算デバイスを対象とする。演算デバイスは、メモリと、第1及び第2のパイプラインとを含む。第1のパイプラインは、メモリから第1のオペランドを受信するように構成され、第2のパイプラインは、メモリから第2のオペランドを受信するように構成される。第1のパイプラインは、第2のパイプラインの少なくとも1サイクル先に動作する。デバイスは、第1のオペランドに対するメモリのメモリアドレスを生成するための処理ユニットをさらに含む。
[008] 第1のパイプラインは、生成されたメモリアドレスから第1のオペランドを読み取る。その後、検出器は、第1のオペランドが特殊数であるかどうかを検出する。特殊数は、既定の又は予測可能な演算結果をもたらす数値である。
[009] 第1のオペランドが特殊数である場合は、処理ユニットは、検出された特殊数と関連付けられた既定の又は予測可能な演算結果を取得し、第1及び第2のパイプラインのために、取得された結果をメモリに格納する。
[010] 第1のオペランドが特殊数ではない場合は、処理ユニットは、第2のオペランドに対するメモリのメモリアドレスを生成する。その後、第2のパイプラインは、生成されたメモリアドレスから第2のオペランドを読み取る。次いで、処理ユニットは、第1及び第2のオペランドに対する演算を実行し、第1及び第2のパイプラインのために、実行された演算の結果をメモリに格納する。
[011] いくつかの開示される実施形態と一致して、演算デバイスにおける特殊数の検出能力を有する複数パイプパイプラインのための方法であって、各演算デバイスが、命令を格納する1つ又は複数のメモリと、方法を実行するために命令を実行する1つ又は複数のプロセッサとを含む、方法が開示される。方法は、1つ又は複数のメモリからのデータの1対のパイプラインを同時に起動することであって、1対のパイプラインのうちの一方が、ブロードキャストオペランドを取り入れ、1対のパイプラインのうちの他方が、プライベートオペランドを取り入れる、起動することと、ブロードキャストオペランドに対する1つ又は複数のメモリのメモリアドレスを生成することと、生成されたメモリアドレスからブロードキャストオペランドを読み取ることと、検出器によって、ブロードキャストオペランドが0であるかどうかを検出することと、ブロードキャストオペランドが0である場合は、プライベートオペランドに対する1つ又は複数のメモリのメモリアドレスの生成を停止することと、ブロードキャストオペランドが1である場合は、プライベートオペランドに対する1つ又は複数のメモリのメモリアドレスを更新することと、別の検出器によって、ブロードキャストオペランドが1であるかどうかを検出することと、ブロードキャストオペランド及びプライベートオペランドの結果を演算することと、データの1対のパイプラインのために、1つ又は複数のメモリのメモリアドレスに結果を格納することとを含む。
[012] いくつかの開示される実施形態と一致して、演算を簡略化し且つ演算強度を増大するために、特殊数の検出能力を有する複数パイプパイプラインのためのシステムが提供される。
[013] いくつかの開示される実施形態と一致して、前述の方法を実行するために少なくとも1つのプロセッサによって実行可能な命令セットを含むコンピュータ可読記憶媒体が提供される。
[014] 他の開示される実施形態と一致して、非一時的なコンピュータ可読記憶媒体は、プログラム命令を格納することができ、プログラム命令は、少なくとも1つの処理デバイスによって実行され、本明細書で説明される前述の方法を実行する。
図面の簡単な説明
[015]本開示の実施形態と一致する、例示的なニューラルネットワーク処理ユニット(NPU)アーキテクチャを示す。
[016]本開示の実施形態と一致する、ニューラルネットワークプロセッサの層の例示的な機能を示す。
[017]本開示の実施形態と一致する、例示的なハードウェアニューラルネットワークプロセッサを示す。
[018]本開示の実施形態と一致する、多層ネットワークにおけるデータ共有を示す。
[019]本開示の実施形態と一致する、メモリモジュールの統合組織を含む例示的なハードウェアの概略図を示す。
[020]本開示の実施形態と一致する、統合記憶媒体の例示的な記憶セルを示す。
[021]本開示の実施形態と一致する、演算デバイスにおいて実装された複数パイプライン構成を示す。
[022]本開示の実施形態と一致する、図5の複数パイプライン構成の動作サイクル図である。
[023]本開示の実施形態と一致する、図5の複数パイプライン構成を特徴とする演算デバイスによって取り入れられた例示的な動作のプロセスフロー図である。
詳細な説明
[024] ここでは、例示的な実施形態を詳細に参照し、その例は、添付の図面に示される。以下の説明は、添付の図面を参照し、添付の図面では、異なる図面の同じ番号は、別段の表現がない限り、同じ又は同様の要素を表す。例示的な実施形態の以下の説明に記載される実装形態は、本発明と一致するすべての実装形態を表すわけではない。代わりに、それらの実装形態は、添付の特許請求の範囲に記述されるように、本発明に関連する態様と一致する装置及び方法の単なる例である。
[024] ここでは、例示的な実施形態を詳細に参照し、その例は、添付の図面に示される。以下の説明は、添付の図面を参照し、添付の図面では、異なる図面の同じ番号は、別段の表現がない限り、同じ又は同様の要素を表す。例示的な実施形態の以下の説明に記載される実装形態は、本発明と一致するすべての実装形態を表すわけではない。代わりに、それらの実装形態は、添付の特許請求の範囲に記述されるように、本発明に関連する態様と一致する装置及び方法の単なる例である。
[025] 中央処理装置(CPU)、グラフィックス処理ユニット(GPU)、デジタル信号処理ユニット(DSP)、ニューラルネットワークプロセッサなどを含む演算デバイス(例えば、デスクトップ、ラップトップ、サーバ、セルラフォンなどの携帯電話、PDA、タブレット及び同様のもの)では、演算強度(computational strength)は、通常、演算を迅速に実行するというデバイスの能力として定義される。演算強度は、特殊数(0、1など)を検出するというデバイスの能力によって増大することができる。ベクトル、SIMD又はアレイ演算を伴うコンピュータアーキテクチャの場合、そのような検出及び検出に基づいて演算を実行するという能力は、演算強度をさらにいっそう増大することができる。
[026] 開示される実施形態は、演算を簡略化し且つ演算強度を増大するために、特殊数の検出能力を有する複数パイプパイプラインのための方法及びシステムに関する。本明細書の「複数」という用語は、2つ以上を意味すると解釈されるものとすることを理解されたい。特殊数は、演算において使用されると、既定の又は予測可能な結果をもたらす数値である。既定の又は予測可能な結果は、演算を事前形成することなく得ることができる演算結果である。そのような数値の例は、乗算演算における1又はゼロの数値であり得る。具体的には、第1の数値に1の数値を乗じると、常に、第1の数値に等しいという結果をもたらし、また、任意の数値にゼロの数値を乗じると、常に、ゼロという結果をもたらす。従って、本明細書で説明されるように、そのような数値を検出するという能力により、特殊数の検出に基づいて結果を決定することができるため、そのような演算の性能を最適化することができる。従って、そのような数値を認識できることにより、特殊数が検出された場合に全演算を実行することなく結果を決定することができるという理由で計算回数が低減されるため、演算強度を増大することができる。
[027] ニューラルネットワークを使用して、本明細書で開示される例示的な実施形態について説明する。しかし、例示的な実施形態は、演算を最適化することができる他のいかなるシステムにも適用できることを理解されたい。図1は、例示的なニューラルネットワーク処理ユニット(NPU)アーキテクチャ100を示す。NPUアーキテクチャ100は、オンチップ通信システム110、ホストメモリ120、メモリコントローラ130、直接メモリアクセス(DMA)ユニット140、ジョイントテストアクショングループ(JTAG)/テストアクセスエンド(TAP)コントローラ150、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)インタフェース160、バス170、グローバルメモリ126及び同様のものを含み得る。オンチップ通信システム110は、通信データに基づいてアルゴリズム動作を実行できることが理解される。その上、NPUアーキテクチャ500は、メインメモリとして機能するためのオンチップメモリブロック(例えば、第二世代の8GB高帯域幅メモリ(HBM2)の4つのブロック)を有するグローバルメモリ126を含み得る。
[028] オンチップ通信システム110は、グローバルマネージャ112及び複数のコア116を含み得る。グローバルマネージャ112は、1つ又は複数のコア116と協調するように構成された1つ又は複数のタスクマネージャ114を含み得る。各タスクマネージャ114は、ニューラルネットワーク用のシナプス/ニューロン回路を提供するコア116のアレイと関連付けることができる。例えば、図1のコアの最上層は、ニューラルネットワークへの入力層を表す回路を提供することができ、コアの第2の層は、ニューラルネットワークの1つ又は複数の隠れ層を表す回路を提供することができる。図1に示されるように、グローバルマネージャ112は、コア116の2つのアレイと協調するように構成された2つのタスクマネージャ114を含み得る。
[029] コア116は、1つ又は複数の処理要素を含み得、1つ又は複数の処理要素の各々は、グローバルマネージャ112の制御の下で通信データにおける1つ又は複数の演算(例えば、乗算、加算、乗累算など)を実行するように構成された1つ又は複数の処理ユニットを含む単一命令複数データ(SIMD)アーキテクチャを含む。通信データパケットにおける演算を実行するため、コア116は、データパケットを格納するための少なくとも1つのバッファ、命令を格納するための1つ又は複数のバッファ、データパケットの情報を格納するための1つ又は複数のメモリ、及び、データパケットの情報を処理するための1つ又は複数の処理要素を含み得る。各処理要素は、いかなる数の処理ユニットも含み得る。いくつかの実施形態では、コア116は、タイル又は同様のものと見なすことができる。
[030] ホストメモリ120は、ホストCPUのメモリなどのオフチップメモリであり得る。例えば、ホストメモリ120は、DDRメモリ(例えば、DDR SDRAM)又は同様のものであり得る。ホストメモリ120は、1つ又は複数のプロセッサ内で統合されたオンチップメモリと比べて、低アクセス速度で大量のデータを格納するように構成することができ、高次キャッシュの役割を果たす。
[031] メモリコントローラ130は、グローバルメモリ126内のメモリブロック(例えば、HBM2)からのデータの読み取り及びメモリブロックへのデータの書き込みを管理することができる。例えば、メモリコントローラ130は、チップ通信システム110の外部から(例えば、DMAユニット140から若しくは別のNPUと連通するDMAユニットから)又はチップ通信システム110の内部から(例えば、グローバルマネージャ112のタスクマネージャによって制御された2Dメッシュを介してコア116のローカルメモリから)来るデータの読み取り/書き込みを管理することができる。また、図1には1つのメモリコントローラが示されているが、NPUアーキテクチャ100において複数のメモリコントローラを提供できることが理解される。例えば、グローバルメモリ126内の各メモリブロック(例えば、HBM2)に対して1つずつメモリコントローラが存在し得る。
[032] メモリコントローラ130は、メモリアドレスを生成し、メモリ読み取り又は書き込みサイクルを開始することができる。メモリコントローラ130は、1つ又は複数のプロセッサによる書き込み及び読み取りが可能ないくつかのハードウェアレジスタを含み得る。レジスタは、メモリアドレスレジスタ、バイトカウントレジスタ、1つ又は複数の制御レジスタ及び他のタイプのレジスタを含み得る。これらのレジスタは、ソース、送り先、転送方向(入力/出力(I/O)デバイスから読み取るか若しくはI/Oデバイスに書き込む)、転送単位のサイズ、1バーストで転送されるバイト数及び/又はメモリコントローラの他の典型的な特徴のいくつかの組合せを指定することができる。
[033] DMAユニット140は、ホストメモリ120とグローバルメモリ126との間のデータ転送を補助することができる。それに加えて、DMAユニット140は、複数のNPU間のデータ転送を補助することができる。DMAユニット140は、CPU割り込みを引き起こすことなく、オフチップデバイスがオンチップメモリとオフチップメモリの両方にアクセスできるようにすることができる。従って、DMAユニット140もまた、メモリアドレスを生成し、メモリ読み取り又は書き込みサイクルを開始することができる。また、DMAユニット140は、1つ又は複数のプロセッサによる書き込み及び読み取りが可能ないくつかのハードウェアレジスタ(メモリアドレスレジスタ、バイトカウントレジスタ、1つ又は複数の制御レジスタ及び他のタイプのレジスタを含む)を含むこともできる。これらのレジスタは、ソース、送り先、転送方向(入力/出力(I/O)デバイスから読み取るか若しくはI/Oデバイスに書き込む)、転送単位のサイズ及び/又は1バーストで転送されるバイト数のいくつかの組合せを指定することができる。NPUアーキテクチャ100は、複数のNPUアーキテクチャがホストCPUを巻き込むことなく直接通信できるように他のNPUアーキテクチャとの間でデータを転送するために使用することができる第2のDMAユニットを含み得ることが理解される。
[034] JTAG/TAPコントローラ150は、システムアドレス及びデータバスへの直接的な外部アクセスを必要としないNPUへの低オーバヘッドアクセスのためのシリアル通信インタフェース(例えば、JTAGインタフェース)を実装する専用デバッグポートを指定することができる。また、JTAG/TAPコントローラ150は、チップ論理レベル及び様々な部品のデバイス能力を提示するテストレジスタセットにアクセスするためのプロトコルを実装するオンチップテストアクセスインタフェース(例えば、TAPインタフェース)も有し得る。
[035] ペリフェラルインタフェース160(PCIeインタフェースなど)は、存在する場合は、インターチップバスとして機能し(及び典型的にはインターチップバスである)、NPUと他のデバイスとの間の通信を提供する。
[036] バス170は、イントラチップバスとインターチップバスの両方を含む。イントラチップバスは、システムアーキテクチャに求められるように、すべての内部のコンポーネントを互いに接続する。すべてのコンポーネントが他のすべてのコンポーネントに接続されるわけではないが、すべてのコンポーネントは、通信する必要がある他のコンポーネントへの何らかの接続を有する。インターチップバスは、NPUを他のデバイス(オフチップメモリ又は周辺機器など)と接続する。典型的には、PCIeインタフェースが存在する場合は、それはインターチップバスであり、バス170はイントラチップバスのみに関係するが、いくつかの実装形態では、依然として、専用バス間通信に関係し得る。
[037] NPUアーキテクチャ100は本開示の実施形態を組み込むが、開示される実施形態は、ディープラーニングなどのいくつかのアプリケーションを加速するためのSIMDアーキテクチャを有するチップに適用できることが理解される。そのようなチップは、例えば、ディープラーニング用のGPU、ベクトル処理能力を有するCPU又はニューラルネットワークアクセラレータであり得る。SIMD又はベクトルアーキテクチャは、一般的に、グラフィックス処理及びディープラーニングなどのデータ並列処理を伴う演算デバイスをサポートするために使用される。SIMDアーキテクチャは、複数の処理要素を含み得、処理要素の各々は、複数のデータポイントにおいて同じ動作を同時に実行することができる。
[038] いくつかの実施形態では、ニューラルネットワークプロセッサは、コンパイラ(図示せず)を含む。コンパイラは、実行可能プログラムを作成するために、あるプログラミング言語で記載されたコンピュータコードをNPU命令に変換するプログラム又はコンピュータソフトウェアである。マシニングアプリケーションでは、コンパイラは、例えば、前処理、字句解析、構文解析、意味解析、入力プログラムから中間表現への変換、コード最適化及びコード生成、又は、それらの組合せなどの様々な動作を実行することができる。
[039] いくつかの実施形態では、コンパイラは、ホストユニット(例えば、ホストメモリ104を有するCPU)上にあり得、ホストユニットは、コマンドをNPU 100にプッシュする。これらのコマンドに基づいて、タスクマネージャ1022は、任意の数のタスクを1つ又は複数のコア(例えば、コア1024)に割り当てることができる。コマンドのいくつかは、ホストメモリ104からグローバルメモリ116に命令及びデータをロードするようにDMAユニット108に指示することができる。次いで、ロードされた命令は、対応するタスクが割り当てられた各コアに分配することができ、1つ又は複数のコアは、これらの命令を処理することができる。
[040] コアによって受信される最初の少数の命令は、グローバルメモリ116からコアの1つ又は複数のローカルメモリ(例えば、コアのメモリ又はコアの各能動処理要素に対するローカルメモリ)にデータをロード/格納するように、コアに指示できることが理解される。次いで、各コアは、命令パイプラインを開始することができ、命令パイプラインは、ローカルメモリから命令をフェッチすること(例えば、フェッチユニットを介して)、命令を復号して(例えば、命令デコーダを介して)ローカルメモリアドレス(例えば、オペランドに対応する)を生成すること、ソースデータを読み取ること、演算を実行するか又はロード/格納すること、次いで、結果を書き戻すことを伴う。
[041] 図2Aは、ニューラルネットワークの層200の例示的な機能を示し、ソフトウェアアルゴリズム210及びハードウェア220を含む。ハードウェア220は、プライベートメモリモジュール230、処理ユニットアレイ240の1つ又は複数の処理ユニット、共有(例えば、ブロードキャスト)メモリモジュール250、書き込みバッファ260、入力オペランド270、出力オペランド280及び同様のものを含み得る。いくつかの実施形態では、ハードウェア220は、コア(例えば、図1のコア116)内に位置し得る。単一の均質メモリモジュールも採用できることを理解されたい。
[042] いくつかの実施形態では、処理ユニットアレイ240の処理ユニットは、乗算、加算、乗累算などの1つ又は複数の演算を提供することができる。処理ユニットアレイ240は、複数の処理ユニット242、244、246及び248(例えば、図2Bに示されるような処理ユニットのアレイ)を含み得る。
[043] プライベートメモリモジュール230は、別個のプライベートメモリブロックに仕切ることができ、その結果、複数の処理ユニット242、244、246及び248の各々は、図2Bに示されるように、対応するプライベートメモリブロック232、234、236及び238を有する。
[044] 入力オペランド270は、処理ユニットアレイ240によって演算される入力データであり得る。いくつかの実施形態では、図2Aの入力オペランド270は、図2Bに示されるように、1つ又は複数のプライベート入力オペランド272及び1つ又は複数の共有入力オペランド274を含み得る。プライベート入力オペランド272は、プライベートメモリモジュール230に格納することができ、共有入力オペランド274は、共有メモリモジュール250に格納することができる。
[045] ニューラルネットワークのアプリケーションでは、ソフトウェアアルゴリズム210は、共有データを有し、共有データは、共有メモリモジュール250に格納することができ、共有オペランド274として処理ユニットアレイ240の複数の処理ユニット242、244、246及び248の各々にブロードキャストすることができる。例えば、図2Aに示されるアルゴリズムは、以下のベクトル演算を演算し、
A=sigmoid(b+X*W1) (方程式1)
これは、ディープラーニングアルゴリズムにおいて呼び出される場合が多いニューラルネットワークの層200における代表的な演算である。方程式1を参照すると、「b」は、一定の値を含み得、「X」は、共有入力オペランド274を含み得、「W1」は、プライベート入力オペランド272を含み得る。
A=sigmoid(b+X*W1) (方程式1)
これは、ディープラーニングアルゴリズムにおいて呼び出される場合が多いニューラルネットワークの層200における代表的な演算である。方程式1を参照すると、「b」は、一定の値を含み得、「X」は、共有入力オペランド274を含み得、「W1」は、プライベート入力オペランド272を含み得る。
[046] 図2Aを参照すると、ベクトルサイズは、任意の自然数として設定することができる。ここでは、ベクトルサイズ4が例として取り入れられ、ベクトルを演算するための4ウェイSIMDハードウェアが使用される。処理ユニット242、244、246及び248は、以下の演算を並列で演算することができる。
a1=sigmoid(b+x1*W111+x2*W121+x3*W131+x4*W141) (方程式2)
a2=sigmoid(b+x1*W112+x2*W122+x3*W132+x4*W142) (方程式3)
a3=sigmoid(b+x1*W113+x2*W123+x3*W133+x4*W143) (方程式4)
a4=sigmoid(b+x1*W114+x2*W124+x3*W134+x4*W144) (方程式5)
a1=sigmoid(b+x1*W111+x2*W121+x3*W131+x4*W141) (方程式2)
a2=sigmoid(b+x1*W112+x2*W122+x3*W132+x4*W142) (方程式3)
a3=sigmoid(b+x1*W113+x2*W123+x3*W133+x4*W143) (方程式4)
a4=sigmoid(b+x1*W114+x2*W124+x3*W134+x4*W144) (方程式5)
[047] 図2Aの網掛けブロック及び点線は、「a1」がどのように計算されるかを示す。この演算から、「W1」アレイの各列のデータは、処理ユニットアレイ240の対応する処理ユニットに対してローカルであり、したがってデータは、プライベートメモリモジュール230の対応するメモリブロックにプライベート入力オペランド272として格納できることが理解される。例えば、W1アレイの第1、第2、第3及び第4の列の各々におけるデータは、プライベートメモリモジュール230のそれらの対応するメモリブロック232、234、236及び238にプライベート入力オペランドとして格納することができる。
[048] 図2Aを参照すると、W1アレイは、格納データの行列を含み得、行列の各要素は、W1ij又はW1_ijとして表され(後に示されるように)、「i」は行列の行番号を表し、「j」は行列の列番号を表す。例えば、方程式2では、W141は、W1アレイの行4と列1に位置する要素に格納されたデータを表す。行列の要素をアドレス指定するため、他の一般的に知られている表記も使用することができる。
[049] 同時に、Xアレイのデータは、すべての処理ユニット242、244、246及び248によって利用され、したがって共有メモリモジュール250に共有入力オペランド274として格納され、共有メモリモジュール250からの読み取りを行うすべてのコンポーネントにブロードキャストされる。方程式2〜5は、ニューラルネットワークプロセッサの層200において実行される例示的な演算を表し、a1、a2、a3及びa4を計算するように設計される。
[050] いくつかの実施形態では、機械学習又はディープラーニングは、ニューラル処理の1つ又は複数の層に対するアルゴリズムを実施することによって遂行された、入力データに基づいて最終結果を生成するためにニューラルネットワークプロセッサを訓練することを含む。例えば、図2Aの層200は、バイアスb、Xアレイに格納されたデータ及びW1アレイに格納されたデータを使用して演算を実行するように構成されたアルゴリズムを含む第1の層を表す。第2及び第3の層(図示せず)は、バイアスb、Xアレイに格納されたデータ並びにW2及びW3アレイに格納されたデータを使用するアルゴリズムを含み得る。各層は、バイアスbの異なる値及び「W」アレイに格納された異なるパラメータを含み得る。
[051] 図2Aを参照すると、例えば、アレイXは、異なるクラスの個人のスコアを含み得る。アレイXのx1の値は、学生Aの数学のスコアであり得、x2は、英語のスコアであり得、x3は、歴史のスコアであり得、x4は、科学のスコアであり得る。最終結果は、スコア(入力データ)に基づいて、個人が学校への入学許可を得られるか又は入学を拒否されるかであり得る。図2Aに示されるように及び方程式2〜5において説明されるように、データx1〜x4は、「共有」され、a1〜a4の計算において共通である。
[052] 図3は、多層ネットワークにおけるデータ共有を示す。本明細書で説明されるデータ共有は、以前のプライベートデータがプログラムの後の段階においてどのようにして共有データになり得るかを指す。いくつかの実施形態では、ニューラルネットワークアーキテクチャ300は、多層(例えば、層310及び320)を含む。いくつかの実施形態では、層310の出力オペランド280は、層320に対する入力オペランド270として使用することができる。いくつかの実施形態では、1つの層の出力オペランド280は、1つ又は複数の層によって入力オペランド270として利用することができる。
[053] 例えば、層310では、a1は、プライベートメモリモジュール230の処理ユニット242によって計算される。a1のデータは、層320に対するブロードキャスト入力になる。一般に、ニューラルネットワークは、層の状態に組織化することができる。各層は、その入力において1つ又は複数の演算を実行し、出力を生成することができる。層の出力は、さらなる処理のために、次の層に伝えることができる。例えば、前の層の出力は、次の層に対する入力であり得る。それに従って、ローカルで生成された「a」は、共有メモリ250に戻して格納されるか、又は、プライベートメモリ230に格納され、後に共有メモリ250にコピーされなければならない。
[054] プライベートメモリ230に格納し、後に共有メモリ250にコピーすることに対する代替の解決法として、a1からの出力オペランド280は、メモリにコピーするよりも、共有メモリ250に直接戻して格納することができる。それにもかかわらず、この代替の解決法は、依然として、プログラムを減速させる恐れがある。単一の処理ユニット(例えば、処理ユニット242)は、1つのサイクルあたりたった1つの乗加算演算(例えば、Xi*W1_ij)しか終了できないため、「a」の各動作は、複数のサイクルにわたって実行され得る。この理由のため、各サイクルにおいてプライベートメモリ230からたった1つのオペランドW1_ijしか読み取られず、従って、共有メモリ250からは、たった1つの「X」しか必要ではない。結果的に、各メモリモジュールの共通の設計は、1つのサイクルあたり単一読み取り/単一書き込みである。最後のサイクルにおいて複数の処理ユニットによってすべての「a」が同時に生成される場合、共有メモリ250は、それらをすべて書き戻す能力を有さない可能性がある。
[055] いくつかの実施形態では、これらの出力オペランド280を個別に消費するためのさらなる時間を共有メモリ250に与えるための書き込みバッファ260が導入される。しかし、処理ユニット240の出力速度が書き込みバッファ260の幅より速い(例えば、AのサイズがXより大きい)場合は、書き込みバッファ260はバックプレッシャを伝播し、処理ユニットアレイ240を強制的に減速させ、それにより、プログラム全体の実行が減速する。
[056] 図4Aは、メモリモジュールの統合組織を含む例示的なハードウェアシステム400の概略図を示す。ハードウェアシステム400は、統合記憶媒体405と、処理ユニット242、244、246及び248とを含む。統合記憶媒体405は、1つ又は複数の記憶モジュール410を含み、1つ又は複数の記憶モジュール410の各々は、入力オペランド270、出力データ280を格納するように構成された記憶セル430を含む。複数の記憶モジュール410は、統合記憶媒体405を形成するために、単一の媒体にマージすることができる。各記憶モジュール410は、プライベート記憶モジュール412及び共有記憶モジュール414を含み得る。いくつかの例示的な実施形態では、メモリモジュールは、単一の均質媒体であり得ることを理解されたい。
[057] ハードウェアシステム400は、複数の処理ユニット242、244、246及び248を含み得る。処理ユニットアレイ240の複数の処理ユニットの各々は、1つ又は複数の記憶モジュールと通信するように構成される。例えば、処理ユニット242は、プライベート記憶モジュール412からプライベート入力オペランド272を受信することができる。また、処理ユニット242は、1つ又は複数の共有記憶モジュール414から共有入力オペランド274を受信することもできる。いくつかの実施形態では、処理ユニットアレイ240は、プライベート記憶モジュール412からプライベート入力オペランド272を受信し、共有記憶モジュール414から共有入力オペランド274を受信し、及びプライベート入力オペランド272及び共有入力オペランド274に基づいて出力オペランド280を生成するように構成される。
[058] 図4Bに示されるように、記憶セル430の各々は、一意識別子440によって一意的に識別することができる。一意識別子440は、高位ビット442及び低位ビット444を含むビットアドレスか、高位及び低位バイトを含むバイトアドレスか又はそれらの組合せであり得る。演算においては、高位ビット442は、最上位ビット(MSB)であり得る。また、MSBは、上位の数字になればなるほど左側に記載されるという位置表記法により、左端ビットと呼ぶこともできる。他方では、低位ビット444は、右端に位置するビットと呼ばれる。例えば、「2_E5」というビットアドレスを有する一意識別子440では、高位ビット442は、左端ビット(すなわち「2」)を指し、低位ビット444は、右側のビット(すなわち「E5」)を指す。
[059] 例示的な実施形態のいくつかによれば、メモリ(オン又はオフチップ)は、プライベート又は共有(例えば、放送)メモリとして特徴付けることができる。例えば、プライベートメモリは、複数の並列する処理要素の中の単一の処理要素の各々に対してデータを供給することを専門とするメモリであり、共有メモリは、すべての並列する処理要素(例えば、コアのすべての処理要素)に対してデータを供給することを専門とするメモリを指すことができる。例示的な実施形態のいくつかによれば、メモリは、単一のメモリユニットであり得る。
[060] いくつかの実施形態では、記憶セル430は、プライベート記憶セル432又は共有記憶セル434である。プライベート記憶セル432は、プライベート記憶モジュール412内に位置し得る。共有記憶セル434は、共有記憶モジュール414内に位置し得る。一意識別子440の高位ビット442は、オペランド(270、280)のターゲット記憶モジュールを示すように構成され、一意識別子440の低位ビット444は、オペランド(270、280)のターゲット記憶モジュール内のターゲット記憶セルを示すように構成される。例えば、「2_E5」というビットアドレスを有する一意識別子440は、記憶モジュール「2」と、記憶モジュール「2」内の記憶セル「E5」とを指す。言い換えれば、高位ビット442は、記憶モジュールが「プライベート」である処理ユニットも示し得、低位ビット444は、記憶モジュール内の場所も示し得る。
[061] プライベート記憶セル432及び共有記憶セル434は、物理的に区別できない記憶セルであり、そのように事前にラベル付けされないことを理解されたい。記憶セルに対する「プライベート」及び「共有」の属性は、データのアドレス指定を行うようにプログラムされたコンパイラが生成した命令に基づいて決定される。例えば、データは、いかなるセルにも格納することができる。読み取りステップの間、コンパイラが生成した命令がデータを「プライベート」として示す場合は、データは、プライベート入力オペランド272として並列で読み取ることができる。或いは、コンパイラが生成した命令がデータを「共有」として示す場合は、データは、共有入力オペランド274として読み取ることができる。
[062] いくつかの実施形態では、一意識別子440は、例えば、数字、英数字、16進数(例えば、図4Aに示されるもの)、8進数又は同様のものなど、ソフトウェアアドレス指定モードによってアドレス指定可能な他の文字を含む。
[063] 図4Aに戻ると、処理ユニットアレイ240又は複数の処理ユニットの各々は、出力データ280を生成することができる。出力データ280は、プライベート出力データ282又は共有出力データ284であり得、ニューラルネットワークプロセッサの多層アルゴリズムの次の層における動作によって決定される。図4Aに示されるように、出力データ280は、統合記憶媒体の記憶モジュール410の各々に並列に書き戻されるため、プライベート出力データ282と見なすことができる。
[064] 図4Aの例示的な実装形態では、処理ユニットアレイの一方のオペランドは、プライベートデータから来るものであり、他方は、すべての処理ユニットにブロードキャストされている数値から(例えば、共有メモリから)来るものである。単一のop2又は共有オペランド274が特殊数として検出された場合は、アレイ全体の演算を簡略化できることを理解されたい。
[065] 例示的な実施形態のいくつかによれば、処理ユニットユニット240は、特殊数の存在を検出するための少なくとも1つの検出器を含む。演算強度は、演算を迅速に実行するというデバイスの能力によって定義することができる。
[066] 数学では、特殊数は、演算において期待される結果をもたらす数値として定義することができる。0、1などの特殊数を利用することにより、これらの特殊数に基づく演算を簡略化することができる。例えば、Any_Number*0=0、The_Number*1=The_Number、The_Number+0=The_Number、min(Range_Min,Any_Number)=Range_Min、max(Range_Max,Any_Number)=Range_Maxなどが挙げられる。特殊数に直面すると、演算デバイスのハードウェアは、従来のものの代わりに、簡略化されたいくつかの演算を実行することができる。例えば、結果=0、何もしない、結果=他のオペランドなどが挙げられる。従って、特殊数を識別できることは、演算を簡略化する上で役立ち得、その結果、演算速度が増加し、従って、演算強度が増大する。
[067] 図5は、本開示の実施形態と一致する、例示的な複数パイプのパイプラインアーキテクチャのブロック図を示す。図5のアーキテクチャは、複数パイプラインの一部分をパイプラインA 501として示し、残りの半分をパイプラインB 503として示しており、それらは両方とも、コアの一部である。簡単にするため、アーキテクチャは、乗算演算の観点から説明されており、結果=opA*opBである。図5に示される演算は、2つのオペランドを有する乗算に限定されず、特殊数に対して簡略化できる、いかなる数のオペランドも有するいかなる演算にも拡張できることに留意されたい。例えば、複数パイプライン構成は、加算、減算、乗算、除算に基づく演算(数ある中でも特に、乗累算演算を含み得る)において利用することができる。そのような演算では、0の数値は、特殊数として識別することができる。
[068] メモリユニット505は、図2Aに関連して論じられるように、共有メモリ250及びプライベートメモリ230を含み得る。一方のオペランドは、共有メモリからブロードキャストされるか又は読み取られるものであり、他方のオペランドは、プライベートであり、プライベートメモリから読み取ることができる。本明細書で提示される例示的な実施形態は、均質記憶セル(homogenous storage cell)を特徴とするメモリユニットにも適用できることを理解されたい。
[069] オペランドの各々は異なるパイプライン段階を有し、同時に起動される2つのパイプライン(すなわち、パイプラインA及びパイプラインB)が存在するため、アーキテクチャは、複数パイプのパイプラインと呼ばれる。その上、パイプラインは3つ以上のオペランドを受信できることが理解されるが、簡単にするため、本出願の残りの部分では、2つのオペランドを受信する複数パイプのパイプラインにより焦点を置く。
[070] 単一の演算において同じ瞬間に少なくとも2つのオペランドが必要であるため、特殊数の検出は、演算が開始される前に検出器507を介して実行される。検出器507は、コア(例えば、図1のコア116)内に位置し得、システム内の他のいかなる処理ユニット又はプロセッサ内にも位置する可能性があることを理解されたい。
[071] いくつかの実施形態によれば、特殊数は、他のオペランド(又は他の任意のオペランド)がメモリから読み取られる前でさえも、検出器507を介して検出される。これを達成するため、複数パイプのパイプラインが実装され、一方のパイプはオペランド1に対して使用され、他方はオペランド2に対して使用される。図5によって提供される例では、第1のオペランドopBは、パイプライン508を使用してメモリ505から読み取られる。パイプライン509_1〜509_nは、メモリ505から第2のオペランドopAを読み取るために使用される。オペランド1に対して使用されるパイプラインは、オペランド2に対して使用されるパイプラインの少なくとも1サイクル先に動作し、オペランド2がメモリから読み取られる前に特殊数の検出を可能にする。
[072] 動作の際、本例によれば、パイプラインの第1の部分503は、実行のための4つの段階を有する。これらの段階は、段階1から段階4までである。
[073] 段階1では、最初に、例えば、命令フェッチユニット(図5には図示せず)を介して、命令がフェッチされる。例示的な実施形態のいくつかによれば、命令は、実行される演算に関連する。その後、受信された命令は、例えば、命令デコーダ(図5には図示せず)を介して、復号することができる。例示的な実施形態のいくつかによれば、命令デコーダは、コアからフェッチされ復号された命令に基づいて第1のオペランドopBに対してメモリアドレスを生成するためのアドレスジェネレータを含み得る。
[074] 段階2では、メモリ505からデータが読み取られる。例示的な実施形態のいくつかによれば、データは、パイプライン508(メモリ505から第1のオペランドopBを読み取るために使用されるもの)を使用してメモリから読み取られる。例示的な実施形態のいくつかによれば、第1のオペランドopBは、共有又はブロードキャストメモリから読み取ることができる。例示的な実施形態のいくつかによれば、第1のオペランドは、単一の均質メモリユニットから読み取ることができる。
[075] コア又は処理ユニットアレイに含まれ得る検出器507は、第1のオペランドopBにおける特殊数の存在を判断する。本乗算例では、第1の検出は、0の数値に対して行うことができる。検出器がデータ内に0の形式の特殊数を見つけた場合は、コアは、第2のオペランドopAに対するアドレスの生成を停止し(例えば、動作のこのステップは阻止されるか又は省略される)、段階の間にopAがフリップフロップ510_1〜510_nに更新されることを停止する。
[076] 段階3では、処理ユニットが乗算器として動作する本乗算例によれば、別の特殊数(例えば、1の形式のもの)がデータ内に含まれるかどうかを判断するために検出を行うことができる。第2の検出は、コア又は処理ユニットアレイ内に位置する同じ又は異なる検出器によって行うことができる。図5に示される例では、第2の検出器511が利用されている。
[077] 第1及び第2の検出の結果は、フリップフロップ512_1及び512_2を介して次の段階にプッシュされる。結果は、検出された関連する特殊数に基づいて、既定の又は予測可能なものである。特殊数(すなわち、本例では、0又は1)が検出されなかった場合は、データ自体(opB)が、フリップフロップ512_3に更新される。
[078] 段階4では、本乗算器(MUL)例によれば、以下のように条件付きで機能する:
opBが0である場合、結果=0
opBが1である場合、結果=opA、又は、
結果=結果(すなわち、opA*opB)。
opBが0である場合、結果=0
opBが1である場合、結果=opA、又は、
結果=結果(すなわち、opA*opB)。
[079] 動作の際、本乗算例によれば、第2のオペランドopAと関連付けられた動作(複数パイプラインの第2の部分501によって実行される)は、実行のための4つの段階を有する。
[080] これらの段階は、第1のオペランドopBと関連付けられたものと同様である場合もあり得るが、異なる場合もあり得る。例えば、段階1では、第2のオペランドopAを読み取るためのメモリアドレスは、コアからフェッチされ復号された命令に基づいて生成される。本例では、第1のオペランドopBが0の特殊数として検出されなかった場合は、データが更新され、次の段階のフリップフロップ512−1又は512−3に送信される。
[081] 段階2では、メモリ505から第2のパイプライン509_1〜509_nを介して、第2のオペランドopAと関連付けられたデータが読み取られる。
[082] 段階3では、第1のオペランドopBの段階4に関連して上記で説明されるように、処理ユニットを介して、条件付き演算が実行される。
[083] 段階4の間、コアは、各データレーン509_1〜509_nのために結果をメモリに戻して格納する。
[084] 図6は、本開示の実施形態と一致する、図5において説明される動作を示す。図6では、垂直破線は、図5の複数パイプライン構成の異なる動作サイクルCを表し、図6のサイクル数は、図5に関連して説明される段階数に対応する。図6の上部Bは、第1のオペランドopBに対して動作するように構成されたパイプラインアーキテクチャの部分503によって行われた動作を表す。図6の下部Aは、第2のオペランドopAに対して動作するように構成されたパイプラインアーキテクチャの部分501によって行われた動作を表す。斜線部分及び網点部分は、相次ぐ2つの異なる乗算を示す。各動作は、図5に関連して説明されるように、4段階の複数パイプパイプラインを次々と経由する。
[085] 図6に示されるように、オペランドopBに対して動作するように構成されたパイプラインアーキテクチャの部分503は、第2のオペランドopAに対して動作するように構成された部分502の1サイクル前に開始される。部分503は部分502の1サイクル前に開始されるため、複数パイプライン構成の部分501内において不要な動作を阻止することができる。例えば、段階2/サイクル2では、第1のオペランドopBは、メモリから読み取られ、特殊数の検出が実行される。本乗算例では、第1の検出は、0の数値に対して実行される。第1のオペランドopBは0の数値を含むということが検出され次第、第1のオペランドopAを得るためのメモリのアドレスの生成が休止される。従って、起こったであろう後続のいかなる動作(例えば、段階及びサイクル3、4)も休止することができ、識別された特殊数(0)と関連付けられた既定の又は予測可能な結果を格納し、新しい動作(サイクル1a〜4a)を開始することができる。
[086] 図7は、複数パイプラインアーキテクチャを有する演算デバイスにおいて特殊数の検出を伴う演算を提供する際に、図5の複数パイプライン構成によって行うことができる例示的な動作を描写するフロー図である。演算デバイスは、命令を格納するメモリと、命令を実行する1つ又は複数のコアとを含む。
[087] 図7は、実線の枠線で示されるいくつかの動作及び破線の枠線で示されるいくつかの動作を含むことを理解されたい。実線の枠線で囲まれる動作は、最大限広範な例示的な実施形態に含まれる動作である。破線の枠線で囲まれる動作は、枠線の例示的な実施形態の動作に含まれるか、同動作の一部であるか又は同動作に加えて行うことができるさらなる動作である例示的な実施形態である。これらの動作は順番に実行する必要はないことを理解されたい。その上、すべての動作を実行しなければならないわけではないことを理解されたい。例示的な動作は、いかなる順番及びいかなる組合せでも実行することができる。
[088] 動作は、メモリからのデータの第1及び第2のパイプラインを同時に起動すること(710)を含む。第1のパイプラインは、メモリから第1のオペランドを受信するように構成され、第2のパイプラインは、メモリから第2のオペランドを受信するように構成され、第1のオペランドは、第2のパイプラインの少なくとも1サイクル先に動作する。コアは、第1及び第2のパイプラインの同時起動を提供するように構成することができる。
[089] 図5及び6に示されるように、特殊数の検出は、少なくとも1つのオペランドにおいて実行される。そのような検出が実行されるオペランドの場合、メモリからオペランドを読み取るために別個のパイプラインが使用される。この別個のパイプラインは、システムの他の任意のパイプラインの少なくとも1サイクル先に動作する。そのような構成の利点は例えば、システム内で起こる他の任意の動作の前に特殊数の存在を検出できることである。特殊数は、既定の又は予測可能な演算結果をもたらす。従って、特殊数の存在が検出され次第、全演算を実行する必要なく演算結果を得ることができる。そのような演算最適化の例は、図6に示されており、特殊数(0)の検出により、サイクル3及び4の残りの動作を実行することなく、結果が提供される。
[090] その後、動作は、フェッチユニットを介して命令バッファから命令をフェッチすることを含む。命令は、実行される演算に関連し得る。
[091] 動作は、フェッチされた命令を復号することをさらに含む。復号することは、デコーダ又はコアによって実行することができる。その後、動作は、第1のオペランドに対するメモリのメモリアドレスを生成すること(712)をさらに含み得る。コア又はアドレスジェネレータは、第1のオペランドに対するメモリのメモリアドレスを生成することができる。例示的な実施形態のいくつかによれば、アドレスは、フェッチされ復号された命令に基づいて生成することができる。
[092] 図6では、この動作は、サイクル1において示されている。図5では、この動作は、第1のパイプライン503の段階1に関連して説明されている。いくつかの実施形態では、メモリは、共有メモリ記憶装置であり得ることを理解されたい。
[093] いくつかの実施形態では、メモリは、多数の記憶セルを含み得、多数の記憶セルは、少なくとも1つの共有メモリ記憶セルと、少なくとも1つのプライベートメモリセルとをさらに含む。いくつかの例示的な実施形態によれば、第1のオペランドは、共有メモリ記憶セルに格納されたブロードキャストオペランドであり、第1のパイプラインにブロードキャストするように構成することができる。そのような例示的な実施形態によれば、第2のオペランドは、プライベートメモリ記憶セルに格納され、読み取られて第2のパイプラインに提供されるプライベートオペランドであり得る。
[094] 動作は、第1のパイプラインにおいて、生成されたメモリアドレスから第1のオペランドを読み取ること(714)をさらに含み得る。処理ユニットは、生成されたメモリアドレスから第1のオペランドを読み取って第1のパイプラインに提供するように構成することができる。
[095] 図6では、この動作は、第1のパイプラインBによって実行されるように、サイクル2において示されている。図5では、この動作は、第1のパイプライン503の段階2に関連して説明されている。
[096] 動作は、検出器を介して、第1のオペランドが特殊数かどうかを検出すること(716)をさらに含み、特殊数は、既定の又は予測可能な演算結果をもたらす数値である。検出器は、コアに含まれ得る。
[097] 図6では、この動作は、第1のパイプラインBによって実行されるように、サイクル2において示されている。図5では、この動作は、第1のパイプライン503の段階2に関連して説明されている。
[098] 第1のオペランドが特殊数として検出された場合は、動作は、検出された特殊数と関連付けられた結果を取得すること(718)をさらに含む。処理ユニットは、検出された特殊数と関連付けられた結果を取得するように構成することができる。
[099] 特殊数は既定の又は予測可能な演算結果をもたらすため、この結果は、演算を実行することなく得ることができる。従って、これらの既定の又は予測可能な結果は、メモリに格納しておき、特殊数が検出され次第、取得することができる。そのような特殊数及び対応する既定の又は予測可能な結果の例は、(1)0の数値を乗じた数値はいずれも、0の既定の又は予測可能な結果をもたらすこと、及び、(2)1の数値を乗じた数値はいずれも、1を乗じた数値の予測可能な結果をもたらすことである。
[0100] 例示的な実施形態のいくつかによれば、複数パイプライン構成によって実行される演算は乗算である。そのような実施形態によれば、検出する動作716は、0の形式の特殊数を検出するように構成することができる。そのような例示的な実施形態によれば、動作は、第2のオペランドに対するメモリアドレスの生成を阻止すること(719)をさらに含み得る。コアは、第2のオペランドの生成を停止するように構成することができる。
[0101] そのような例示的な実施形態によれば、0の数値による乗算は0の結果をもたらすため、さらなる演算を実行する必要はない。従って、検出され次第、サイクル2〜4の動作を休止し、0の既定の又は予測可能な結果を格納することができる。
[0102] 例示的な実施形態のいくつかによれば、複数パイプライン構成によって実行される演算は乗算である。そのような実施形態によれば、検出する動作716は、1の形式の特殊数を検出するように構成することができる。そのような例示的な実施形態によれば、動作は、第2のオペランドに対するメモリアドレスを生成すること(720)をさらに含み得る。コアは、第2のオペランドに対するメモリアドレスを生成するように構成することができる。第2のオペランドに対するメモリアドレスの生成は、フェッチされ復号された命令に基づき得る。
[0103] そのような例示的な実施形態によれば、1の数値による乗算は1を乗じた数値の結果をもたらすため、その演算を最適化することができる。従って、検出され次第、サイクル4の動作を休止し、第2のオペランドの値の既定の又は予測可能な結果を格納することができる。
[0104] メモリアドレスを生成すること(720)が行われ次第、動作は、第2のパイプラインにおいて、生成されたメモリアドレスから第2のオペランドを読み取ること(721)をさらに含み得る。処理ユニットは、第2のパイプラインにおいて、生成されたメモリアドレスから第2のオペランドを読み取るように構成することができる。
[0105] 例示的な動作720に関連して論じられるように、乗算演算における検出された1の特殊数に対する既定の又は予測可能な結果は、1を乗じた数値である。従って、結果を決定する際、第2のオペランドは、メモリから読み取られる。
[0106] 生成すること(720)及び読み取ること(721)は、第2のオペランドの値に等しいものとして結果の値を割り当てること(722)をさらに含む。処理ユニットは、第2のオペランドの値に等しいものとして結果の値を割り当てるように構成することができる。
[0107] 取得する動作718は、第1及び第2のパイプラインのために、取得された結果をメモリに格納すること(723)をさらに含む。コアは、第1及び第2のパイプラインのために、取得された結果をメモリに格納するように構成される。
[0108] 第2の動作が特殊数ではないと判断された場合は、動作は、第2のオペランドに対するメモリのメモリアドレスを生成すること(724)をさらに含む。コアは、第2のオペランドに対するメモリのメモリアドレスを生成するように構成することができる。
[0109] 特殊数が存在しないことが検出され次第、図5に関連して説明されるようなすべての段階及び図6に関連して説明されるようなすべてのサイクルが実行される。
[0110] アドレスを生成すること(724)が行われ次第、動作は、第2のパイプラインにおいて、生成されたメモリアドレスから第2のオペランドを読み取ること(726)をさらに含む。処理ユニットは、第2のパイプラインにおいて、生成されたメモリアドレスから第2のオペランドを読み取るように構成することができる。
[0111] 図6では、この動作は、第2のパイプラインAによって実行されるように、サイクル3において示されている。図5では、この動作は、第1のパイプライン503の段階2に関連して説明されている。
[0112] 第2のオペランドを読み取ること(724)が行われ次第、動作は、第1及び第2のオペランドに対して演算を実行すること(728)をさらに含む。処理ユニットは、第1及び第2のオペランドに対して演算を実行するように構成することができる。
[0113] 図6では、この動作は、サイクル4において示されている。図5では、この動作は、第1のパイプライン503の段階3に関連して説明されている。サイクル1〜3の間、フェッチは完全に止まっていることを理解されたい。サイクル4では、動作は、第1の命令を計算している間に、第2の命令を取得するフェッチユニットをさらに含み得る。サイクル1a〜4aは、第2の命令を使用して繰り返すことができる。
[0114] 演算を実行すること(728)が行われ次第、動作は、第1及び第2のパイプラインのために、実行された演算の結果をメモリに格納すること(730)をさらに含む。コアは、第1及び第2のオペランドに対して実行された演算の結果をメモリに格納するように構成することができる。
[0115] 図6では、この動作は、第1のパイプラインBによって実行されるように、サイクル1aにおいて示されている。図5では、この動作は、第1のパイプライン503の段階4に関連して説明されている。
[0116] 本明細書で説明される様々な例示的な実施形態は、方法ステップ又はプロセスの一般的な文脈において説明されており、方法ステップ又はプロセスは、一態様では、コンピュータ可読媒体において具体化されるコンピュータプログラム製品(ネットワーク接続環境においてコンピュータによって実行されるプログラムコードなどのコンピュータ実行可能命令を含む)によって実施することができる。コンピュータ可読媒体は、着脱可能及び着脱不能な記憶装置を含み得、これらに限定されないが、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)などを含む。一般に、プログラムモジュールは、特定のタスクを実行するか又は特定の抽象データタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含み得る。コンピュータ実行可能命令、関連データ構造及びプログラムモジュールは、本明細書で開示される方法のステップを実行するためのプログラムコードの例を表す。そのような実行可能命令又は関連データ構造の特定のシーケンスは、そのようなステップ又はプロセスにおいて説明された機能を実装するための対応する行為の例を表す。
[0117] 前述の仕様では、実装形態ごとに変化し得る多くの特有の詳細を参照して、実施形態について説明した。説明される実施形態の適応及び変更は、ある程度行うことができる。本明細書で開示される発明の仕様及び実践を考慮することにより、他の実施形態が当業者に明らかになり得る。仕様及び例は単なる例示と見なされ、本発明の真の範囲及び精神は以下の特許請求の範囲によって示されることが意図される。また、図に示されるステップのシーケンスは、単なる例示を目的とし、ステップの特定のシーケンスに限定することは意図しないことも意図される。従って、当業者は、同じ方法を実施する間、異なる順番でこれらのステップを実行できることを理解することができる。
[0118] 図面及び明細書では、例示的な実施形態を開示した。しかし、これらの実施形態に対し、多くの変形及び変更を行うことができる。それに従って、特有の用語が採用されているが、それらは単に一般的且つ記述的な意味で使用され、制限する目的では使用されない。実施形態の範囲は、以下の特許請求の範囲によって定義される。
Claims (20)
- 複数パイプラインアーキテクチャを有するコアを有する演算デバイスにおける特殊数の検出を伴う演算のための方法であって、
メモリからのデータの第1及び第2のパイプラインを並列に起動することであって、前記第1のパイプラインが、前記メモリから第1のオペランドを受信するように構成され、前記第2のパイプラインが、前記メモリから第2のオペランドを受信するように構成され、前記第1のパイプラインが、前記第2のパイプラインの少なくとも1サイクル先に動作することと、
前記第1のオペランドに対する前記メモリのメモリアドレスを生成することと、
前記第1のパイプラインにおいて、前記生成されたメモリアドレスから前記第1のオペランドを読み取ることと、
前記第1のオペランドが特殊数であるかどうかを検出することであって、特殊数が、予測可能な演算結果をもたらす数値であることと、
前記第1のオペランドが前記特殊数であるかどうかの前記検出に基づいて結果を前記メモリに格納することと
を含む、方法。 - 前記第1のオペランドが特殊数であると決定された場合:
前記検出された特殊数と関連付けられた前記結果を取得することと、
前記第1及び第2のパイプラインのために前記取得された結果を前記メモリに格納することと
を行う、請求項1に記載の方法。 - 前記複数パイプラインアーキテクチャが、乗算演算を実行するように構成され、前記第1のオペランドが、ゼロの数値を含む特殊数として検出され、前記方法が、
前記第2のオペランドに対するメモリアドレスの生成を阻止すること
をさらに含む、請求項2に記載の方法。 - 前記複数パイプラインアーキテクチャが、乗算演算を実行するように構成され、前記第1のオペランドが、1の数値を含む特殊数として検出され、前記方法が、
前記第2のオペランドに対するメモリアドレスを生成することと、
前記第2のパイプラインにおいて、前記生成されたメモリアドレスから前記第2のオペランドを読み取ることと、
前記第2のオペランドの値に等しいものとして前記結果の値を割り当てることと
をさらに含む、請求項2に記載の方法。 - 前記第1のオペランドが特殊数ではないと決定された場合:
前記第2のオペランドに対する前記メモリのメモリアドレスを生成することと、
前記第2のパイプラインにおいて、前記生成されたメモリアドレスから前記第2のオペランドを読み取ることと、
前記第1及び第2のオペランドに対する演算を実行することと、
前記第1及び第2のパイプラインのために、前記実行された演算の前記結果を前記メモリに格納することと
を行う、請求項1に記載の方法。 - 特殊数の検出を伴う演算を実行するための演算デバイスであって、
前記演算デバイスが、演算を実行するように構成された多数の処理ユニットを有するコアを含み、前記コアが、
オペランドを格納するように構成されたメモリと、
第1のオペランドに対して生成されたメモリアドレスに基づいて、前記メモリから前記第1のオペランドを読み取るように構成された第1のパイプラインと、
前記メモリから第2のオペランドを受信するように構成された第2のパイプラインであって、前記第1のパイプラインが、前記第2のパイプラインの少なくとも1サイクル先に動作する、第2のパイプラインと、
前記第1のオペランドが特殊数であるかどうかを検出するように構成された検出器であって、前記特殊数が、予測可能な演算結果をもたらす数値であり、前記コアが、前記第1のオペランドが特殊数であるかどうかの前記検出に基づいて結果を前記メモリに格納するようにさらに構成される、検出器と
を含む、演算デバイス。 - 前記第1のオペランドが特殊数である場合:
前記コアが、前記検出された特殊数と関連付けられた前記予測可能な演算結果を取得するようにさらに構成され、
前記コアが、前記第1及び第2のパイプラインのために前記取得された結果を前記メモリに格納するように構成される、請求項6に記載の演算デバイス。 - 前記演算が、乗算演算であり、前記第1のオペランドが、ゼロの数値を含む特殊数として検出され、
前記コアが、前記第2のオペランドに対するメモリアドレスの生成を停止するようにさらに構成される、請求項7に記載の演算デバイス。 - 前記演算が、乗算演算であり、前記第1のオペランドが、1の数値を含む特殊数として検出され、
前記コアが、前記第2のオペランドに対するメモリアドレスを生成するようにさらに構成され、
前記第2のパイプラインが、前記生成されたメモリアドレスから前記第2のオペランドを読み取るように構成され、
前記コアが、前記第2のオペランドの値に等しいものとして前記結果の値を割り当てるように構成される、請求項7に記載の演算デバイス。 - 前記第1のオペランドが特殊数ではない場合:
前記コアが、前記第2のオペランドに対する前記メモリのメモリアドレスを生成するようにさらに構成され、
前記第2のパイプラインが、前記生成されたメモリアドレスから前記第2のオペランドを読み取るように構成され、
前記コアの処理ユニットが、前記第1及び第2のオペランドに対する演算を実行するようにさらに構成され、
前記コアが、前記第1及び第2のパイプラインのために、前記実行された演算の前記結果を前記メモリに格納するように構成される、請求項6に記載の演算デバイス。 - 前記メモリが、複数の記憶セルを含み、前記複数の記憶セルが、前記第1のパイプラインにブロードキャストされるデータを含む少なくとも1つの共有メモリ記憶セルと、前記第2のパイプラインに読み取られるデータを含む少なくとも1つのプライベートメモリ記憶セルとをさらに含む、請求項6〜10のいずれか一項に記載の演算デバイス。
- 前記コアが、少なくとも1つの処理ユニットアレイを含む、請求項6〜11のいずれか一項に記載の演算デバイス。
- 前記コアが、単一命令複数データ(SIMD)アーキテクチャを含む、請求項6〜12のいずれか一項に記載の演算デバイス。
- 前記実行された演算が、加算、減算、乗算、又は除算に基づく演算である、請求項6〜13のいずれか一項に記載の演算デバイス。
- 前記コアが、ニューラルネットワークに含まれる、請求項6〜14のいずれか一項に記載の演算デバイス。
- 命令セットを格納する非一時的なコンピュータ可読媒体であって、前記命令セットが、
演算デバイスのコアのメモリからのデータの第1及び第2のパイプラインを並列に起動することであって、前記第1のパイプラインが、前記メモリから第1のオペランドを受信するように構成され、前記第2のパイプラインが、前記メモリから第2のオペランドを受信するように構成され、前記第1のパイプラインが、前記第2のパイプラインの少なくとも1サイクル先に動作することと、
前記第1のオペランドに対する前記メモリのメモリアドレスを生成することと、
前記第1のパイプラインにおいて、前記生成されたメモリアドレスから前記第1のオペランドを読み取ることと、
前記第1のオペランドが特殊数であるかどうかを検出することであって、特殊数が、予測可能な演算結果をもたらす数値であることと、
前記第1の動作が前記特殊数であるかどうかの前記検出に基づいて結果を前記メモリに格納することと
を前記コアに行わせるように、前記演算デバイスによって実行可能である、非一時的なコンピュータ可読媒体。 - 前記第1のオペランドが特殊数であると検出された場合:
前記検出された特殊数と関連付けられた前記結果を取得することと、
前記第1及び第2のパイプラインのために前記取得された結果を前記メモリに格納することと
を行う、請求項16に記載の非一時的なコンピュータ可読媒体。 - 前記複数パイプラインアーキテクチャが、乗算演算を実行するように構成され、前記第1のオペランドが、ゼロの数値を含む特殊数として検出され、前記命令が、
前記第2のオペランドに対するメモリアドレスの生成を阻止すること
を演算デバイスに行わせるように、前記演算デバイスの少なくとも1つのプロセッサによって実行可能である、請求項17に記載の非一時的なコンピュータ可読媒体。 - 前記コアが、乗算演算を実行するように構成され、前記第1のオペランドが、1の数値を含む特殊数として検出され、前記命令が、
前記第2のオペランドに対するメモリアドレスを生成することと、
前記第2のパイプラインにおいて、前記生成されたメモリアドレスから前記第2のオペランドを読み取ることと、
前記第2のオペランドの値に等しいものとして前記結果の値を割り当てることと
を前記コアに行わせるように、前記演算デバイスによって実行可能である、請求項17に記載の非一時的なコンピュータ可読媒体。 - 前記第1のオペランドが特殊数ではない場合:
前記第2のオペランドに対する前記メモリのメモリアドレスを生成することと、
前記第2のパイプラインにおいて、前記生成されたメモリアドレスから前記第2のオペランドを読み取ることと、
前記第1及び第2のオペランドに対する演算を実行することと、
前記第1及び第2のパイプラインのために、前記実行された演算の前記結果を前記メモリに格納することと
を行う、請求項16に記載の非一時的なコンピュータ可読媒体。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762610077P | 2017-12-22 | 2017-12-22 | |
US62/610,077 | 2017-12-22 | ||
US16/215,553 US10915317B2 (en) | 2017-12-22 | 2018-12-10 | Multiple-pipeline architecture with special number detection |
US16/215,553 | 2018-12-10 | ||
PCT/US2018/067352 WO2019126787A2 (en) | 2017-12-22 | 2018-12-21 | A multiple-pipeline architecture with special number detection |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021507368A true JP2021507368A (ja) | 2021-02-22 |
Family
ID=66951140
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020532566A Pending JP2021507368A (ja) | 2017-12-22 | 2018-12-21 | 特殊数の検出を伴う複数パイプラインアーキテクチャ |
Country Status (5)
Country | Link |
---|---|
US (1) | US10915317B2 (ja) |
EP (1) | EP3729260B1 (ja) |
JP (1) | JP2021507368A (ja) |
CN (1) | CN111656319B (ja) |
WO (1) | WO2019126787A2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113222126B (zh) * | 2020-01-21 | 2022-01-28 | 上海商汤智能科技有限公司 | 数据处理装置、人工智能芯片 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5898882A (en) * | 1993-01-08 | 1999-04-27 | International Business Machines Corporation | Method and system for enhanced instruction dispatch in a superscalar processor system utilizing independently accessed intermediate storage |
US20050251638A1 (en) | 1994-08-19 | 2005-11-10 | Frederic Boutaud | Devices, systems and methods for conditional instructions |
JP2894438B2 (ja) * | 1996-11-25 | 1999-05-24 | 日本電気株式会社 | パイプライン処理装置 |
US6636222B1 (en) | 1999-11-09 | 2003-10-21 | Broadcom Corporation | Video and graphics system with an MPEG video decoder for concurrent multi-row decoding |
US7890734B2 (en) * | 2004-06-30 | 2011-02-15 | Open Computing Trust I & II | Mechanism for selecting instructions for execution in a multithreaded processor |
US7856523B2 (en) | 2005-06-01 | 2010-12-21 | Microsoft Corporation | Random Access Memory (RAM) based Content Addressable Memory (CAM) management |
US7895421B2 (en) * | 2007-07-12 | 2011-02-22 | Globalfoundries Inc. | Mechanism for using performance counters to identify reasons and delay times for instructions that are stalled during retirement |
US9552206B2 (en) | 2010-11-18 | 2017-01-24 | Texas Instruments Incorporated | Integrated circuit with control node circuitry and processing circuitry |
US8671129B2 (en) * | 2011-03-08 | 2014-03-11 | Oracle International Corporation | System and method of bypassing unrounded results in a multiply-add pipeline unit |
US9430243B2 (en) * | 2012-04-30 | 2016-08-30 | Apple Inc. | Optimizing register initialization operations |
US9081608B2 (en) * | 2012-05-19 | 2015-07-14 | Digital System Research Inc. | Residue number arithmetic logic unit |
CN102750133B (zh) * | 2012-06-20 | 2014-07-30 | 中国电子科技集团公司第五十八研究所 | 支持simd的32位三发射的数字信号处理器 |
US9116817B2 (en) * | 2013-05-09 | 2015-08-25 | Apple Inc. | Pointer chasing prediction |
GB2525264B (en) * | 2014-04-17 | 2021-06-02 | Advanced Risc Mach Ltd | Power saving by reusing results of identical micro-operations |
DE102015119202A1 (de) * | 2015-05-11 | 2016-11-17 | Dspace Digital Signal Processing And Control Engineering Gmbh | Schnittstelleneinheit zur Weiterleitung priorisierter Eingangsdaten an einen Prozessor |
US10705589B2 (en) * | 2016-06-02 | 2020-07-07 | Northwestern University | System and method for associative power and clock management with instruction governed operation for power efficient computing |
-
2018
- 2018-12-10 US US16/215,553 patent/US10915317B2/en active Active
- 2018-12-21 JP JP2020532566A patent/JP2021507368A/ja active Pending
- 2018-12-21 WO PCT/US2018/067352 patent/WO2019126787A2/en unknown
- 2018-12-21 EP EP18890823.0A patent/EP3729260B1/en active Active
- 2018-12-21 CN CN201880078950.2A patent/CN111656319B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
US20190196814A1 (en) | 2019-06-27 |
US10915317B2 (en) | 2021-02-09 |
CN111656319B (zh) | 2023-06-13 |
EP3729260A2 (en) | 2020-10-28 |
EP3729260A4 (en) | 2021-02-17 |
CN111656319A (zh) | 2020-09-11 |
WO2019126787A2 (en) | 2019-06-27 |
WO2019126787A3 (en) | 2020-03-26 |
EP3729260B1 (en) | 2022-10-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7266602B2 (ja) | ニューラルネットワークプロセッサに対する統合メモリ構造 | |
JP7264897B2 (ja) | メモリ装置及びそれを制御するための方法 | |
US11500811B2 (en) | Apparatuses and methods for map reduce | |
WO2017124642A1 (zh) | 用于执行人工神经网络正向运算的装置和方法 | |
US11609792B2 (en) | Maximizing resource utilization of neural network computing system | |
US20190057727A1 (en) | Memory device to provide in-memory computation functionality for a pipeline circuit architecture | |
US11921814B2 (en) | Method and device for matrix multiplication optimization using vector registers | |
US11556756B2 (en) | Computation graph mapping in heterogeneous computer system | |
US20210073625A1 (en) | Partitioning control dependency edge in computation graph | |
US10970043B2 (en) | Programmable multiply-add array hardware | |
US11562217B2 (en) | Apparatuses and methods for approximating nonlinear function | |
US11544189B2 (en) | System and method for memory management | |
JP2021507368A (ja) | 特殊数の検出を伴う複数パイプラインアーキテクチャ | |
US20210357730A1 (en) | Multi-size convolutional layer background | |
US20210209462A1 (en) | Method and system for processing a neural network | |
US20230315341A1 (en) | Processor for performing a predetermined computational operation, and processing unit | |
CN115145837A (zh) | 预取数据的方法、装置和介质 |