JP2022506345A - ドット積計算機およびその演算方法 - Google Patents

ドット積計算機およびその演算方法 Download PDF

Info

Publication number
JP2022506345A
JP2022506345A JP2021523664A JP2021523664A JP2022506345A JP 2022506345 A JP2022506345 A JP 2022506345A JP 2021523664 A JP2021523664 A JP 2021523664A JP 2021523664 A JP2021523664 A JP 2021523664A JP 2022506345 A JP2022506345 A JP 2022506345A
Authority
JP
Japan
Prior art keywords
vector
value
product
mask
binary
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.)
Ceased
Application number
JP2021523664A
Other languages
English (en)
Other versions
JPWO2020094586A5 (ja
Inventor
コナー、ファーガル
ベルナルド、デイヴィッド
ハンラハン、ニアル
Original Assignee
モビディウス リミテッド
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by モビディウス リミテッド filed Critical モビディウス リミテッド
Publication of JP2022506345A publication Critical patent/JP2022506345A/ja
Publication of JPWO2020094586A5 publication Critical patent/JPWO2020094586A5/ja
Ceased legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)

Abstract

Figure 2022506345000001
スパースベクトルを用いてドット積計算を実行する方法、装置、システムおよび製造物品が開示される。例示的ドット積計算機は、制御ベクトルのトレーリングバイナリカウントを決定するカウンタであって、制御ベクトルは、第1スパースベクトルの第1ビットマップ及び第2スパースベクトルの第2ビットマップに対する第1論理AND演算の第1結果に対応する、カウンタを備える。例示的ドット積計算機は、トレーリングバイナリカウントに基づいてマスクベクトルを生成するマスク生成器をさらに備える。例示的ドット積計算機は、インタフェースであって、第1ビットマップ及びマスクベクトルについての第2論理AND演算の第2結果に基づく第1スパースベクトルの第1の値にアクセスするため、および第2ビットマップおよびマスクベクトルについての第3論理AND演算の第3結果に基づく第2スパースベクトルの第2の値にアクセスするためのインタフェースをさらに備える。例示的ドット積計算機は、第1の値と第2の値とを乗算して、積を生成する乗算器をさらに備える。

Description

[関連出願]
本特許は、米国特許出願第16/184,985号(出願日:2018年11月8日)の恩恵を主張する出願から生じる。米国特許出願第16/184,985号の内容は全て、参照により本願に組み込まれる。米国特許出願第16/184,985号の優先権をここに主張する。
本開示は概して、プロセッサに関する。より詳しくは、ドット積計算機とその演算方法に関する。
近年、画像処理能力に対する要求は、高出力に特化したデスクトップハードウェアを超え、パーソナルおよび/または別のモバイルデバイスへの期待になっている。モバイルデバイスは、サイズの制約、温度管理の制約、および/または、電力制約により制限される処理能力を通常有する。
例示的な畳み込みニューラルネットワークエンジンの図のブロック実装である。
図1の例示的プロセッサのドット積計算機の例示的な実装のブロック図である。
図1のドット積計算機の例示的な実装のハードウェア図である。
図1、図2および/または図は3の例示的ドット積計算機により実行されるドット積プロトコルの例である。
図1および/または図2の例示的ドット積計算機を実装するために実行されてよく、2つのベクトルのビットマップを用いて2つのベクトルのドット積を決定する、例示的機械可読命令の代表的なフローチャートである。
図1および2における例示的ドット積計算機を実装するための、図5における命令を実行するために構成される、例示的な処理プラットフォームのブロック図である。
図は縮尺通りではない。概して、同じまたは同様の部分を指すために、同じ参照番号が図面および添付の書面の記述を通じて使用される。
パーソナルコンピュータおよび/またはモバイルデバイスを含む典型的なコンピューティングシステムは、高度画像処理、または人間の視覚が実行できるタスクを自動化するためのコンピュータビジョンアルゴリズムを採用する。コンピュータ視覚タスクは、デジタル画像を取得、処理、分析、および/または、理解することを含む。このようなタスクの一部は、デジタル画像から寸法データを抜き取ることを容易にして、数値および/または記号情報を生成する。コンピュータビジョンアルゴリズムは、数値および/または記号情報を用いることで、特に3次元(3-D)位置姿勢推定、イベント検出、物体認識、動画追尾などと関連する決定および/または別のオペレーションを行うことができる。拡張現実(AR)、仮想現実(VR)、ロボティクスおよび/またはその他のアプリケーションをサポートするためであれば、それに応じてこのようなタスクを迅速に(例えば、リアルタイムで、または、ほぼリアルタイムで)、且つ効率的に行うことは、重要である。
高度画像処理またはコンピュータビジョンアルゴリズムは、畳み込みニューラルネットワーク(CNNまたはConvNet)を採用する場合がある。CNNは、深い、人工のニューラルネットワークで、画像を分類すること、類似性により画像をクラスタすること(例えば、画像検索)、および/または畳み込みを用いて画像内の物体認識を行うことに、通常用いられる。本願で用いられるように、畳み込みは、どのように関数1つの形状が、他方の関数の形状により修正されるかを表すインテグレーションにより2つの所与の関数から導き出される関数であると定義される。このように、ある画像特徴(例えば、水平線、2次元(2-D)形状など)に対応する1つまたは複数のフィルターの出力を入力画像に通して、入力画像内での画像特徴のマッチングを識別することで、CNNは、入力画像に含まれる顔、個人、道路標識、動物などを識別するために用いられることができる。
CNNは、1つまたは複数の関数を実行するための計算に用いられる、または保存される必要があるベクトル(例えば、多次元配列から細分化されるもの)を取得する。このように、CNNは、1つまたは複数の画像に対応するデータを含む多次元配列(例えば、テンソルまたはベクトルの行)を受け取ってよい。多次元配列は、ベクトルに細分化される。そのようなベクトルは、数千個の要素を含んでよい。そのような要素のそれぞれは、多数のビットを含んでよい。10,000個の16ビット要素を持つベクトルは、160,000ビットの情報に相当する。そのようなベクトルを保存するには大量のメモリが必要である。ただし、そのようなベクトルは、値が「0」である多数の要素を含むかもしれない。したがって、一部のCNNまたは他の処理エンジンは、そのようなベクトルをスパースベクトル及びスパース性マップベクトル(例えば、ビットマップベクトル)に分割してよい。
本明細書で定義するように、スパースベクトルは、密ベクトルと同じ順序で、あるベクトルのすべての非ゼロ要素を含むが、すべてのゼロ要素を除外するベクトルである。本明細書で定義されるように、密ベクトルは、ゼロ及び非ゼロ要素の両方を含む入力ベクトルである。そのため、密ベクトル[0,0,5,0,18,0,4,0]は、スパースベクトル[5,18,4]に対応する。本明細書で定義されるように、スパース性マップは、密ベクトルの各要素がゼロであるか非ゼロであるかを識別する1ビット要素を含むベクトルである。したがって、スパース性マップは、密ベクトルの非ゼロ値を「1」に置換してよく、密ベクトルのゼロ値を「0」に置換してよい。上記の[0,0,5,0,18,0,4,0]の密ベクトルに対して、(例えば、密ベクトルの3番目、5番目、及び7番目の要素が非ゼロ要素であるから)スパース性マップは、[0,0,1,0,1,0,1,0]であってよい。スパースベクトルとスパース性マップの組み合わせは、密ベクトル(例えば、密ベクトルは対応するスパースベクトル及びスパース性マップに基づいて生成/再編成され得る)を表す。したがって、CNNエンジンは、メモリに密ベクトルを保存することなく、対応するスパースベクトル及びスパース性マップに基づいて密ベクトルを生成/決定することができる。
(例えば、密ベクトルに十分な「0」があるとすれば)密ベクトルの代わりに、スパースベクトル及びスパース性マップをメモリに保存することは、メモリと処理リソースを節約する。例えば、上記の密ベクトルの各要素(例えば[0,0,5,0,18,0,4,0])が、16ビット情報であった場合、密ベクトルを保存するのに必要なメモリ量は128ビット(例えば、8要素×16ビット)である。しかし、対応するスパースベクトル(例えば、[5,18,4])及びスパース性マップ(例えば、[0,0,1,0,1,0,1,0])を保存するのに必要なメモリ量は、64ビット(例えば、(スパースベクトルの3要素×16ビット)+(スパース性マップの8要素×1ビット))である。したがって、対応する密ベクトルの代わりに、スパースベクトル及びスパース性マップを保存することは、そのようなベクトルを保存するのに必要なメモリ量を減らす。さらに、スパースベクトル及びスパース性マップを利用することで、計算エンジンに送達されるデータの量が減り、計算エンジンへの受け渡し速度を上げるので、帯域幅要件を改善する。
プログラムまたはアプリケーションの中には、2つの入力ベクトル(例えば、密ベクトル)間のドット積またはスカラー積を求めるものがあってよい。いくつかの状況では、入力ベクトルは、その入力ベクトルに対応するスパースベクトル及びスパース性マップとして、すでにメモリに保存されていてよい。従来、ドット/スカラー積が求められたとき、プロセッサは、対応するスパースベクトル及びスパース性マップに、メモリからアクセスして、対応する密ベクトルを再生成する。そして、密ベクトルは、ローカルのメモリに書き込まれる。よって、従来技術は、ドット積を計算する前に、密ベクトルを入力ベクトルとしてローカルのメモリに保存する。ひとたびアクセスしたら、プロセッサは、1つの密ベクトルの各要素を、他の密ベクトルの対応する要素と乗算し、且つそれらの積を合計する、従来のドット積計算を実行する。例えば、第1密ベクトルが[5,412,0,0,0,4,192]であり、第2密ベクトルが[2,0,0,432,52,4,0]である場合、従来のドット積技術では、7つの乗算計算が実行され、それら7つの積が合計される(例えば、(5×2)+(412×0)+(0×0)+(0×432)+(0×52)+(4×4)+(192×0))。しかし、そのような従来技術は、どちらでも任意の入力ベクトルの要素の数に相当するX個の乗算計算を必要とする。乗算計算は、複雑で、実行が遅く、行うために多くのリソースを必要とする。以下で背景技術とは対照の説明するように、本明細書で開示する例は、メモリを節約し、ドット積計算の速度を上げ、且つ、従来のドット積技術より少ない処理リソースを要する。
本明細書で開示する例は、(例えば、どんな数でも「0」との積は「0」なので)「0」である要素の乗算計算を少しも実行せずに、ドット/スカラー積計算を実行する。代わりに、本明細書で開示する例は、スパース性マップに基づいて、よりシンプルで、計算的に軽い計算を行う。このように、複雑で、計算的に重い乗算計算の数が減らされる。結果として、ドット積計算を実行するのに必要な時間量が減る。例えば、上記のように、第1密ベクトルが[5,412,0,0,0,4,192]であり、第2密ベクトルが[2,0,0,432,52,3,0]である場合、従来技術では7つの乗算計算が必要だったのに対して、本明細書で開示する例での複雑な乗算計算の数は、2つ(例えば、(5×2)と(4×3))に減る。本明細書で開示する例は、シンプルな計算(例えば、論理AND、1の差し引き、ベクトルのバイナリーカウントなど)を実行して、どの要素が乗算される必要があるのかを特定する。それにより、ドット積を決定するのに必要な処理リソースを減らし、ドット積計算などを実行する速度を上げる。さらに、本明細書で開示する例は、スパース性マップに基づいてドット/スカラー積計算を実行するので、(例えば、「0」との乗算に伴う些細な計算を排除することで、)2つのベクトル間のドット積を計算するのに必要なローカルのメモリの量は減り、且つ、そのような計算の速度は上がる。
図1は、例示的CNNエンジン100(例えば、畳み込みニューラルネットワークエンジン)のブロック図である。CNNエンジン100は、スパース性ベクトル変換器102、例示的メモリインタフェース104、例示的メモリ105、及び例示的ドット積計算機106を含む。例示的CNNエンジン100は、密ベクトルを受け取る、または、例示的ドット積結果108を入力及び出力する。
図1における例示的スパース性ベクトル変換器102は、密ベクトルを受け取り、密ベクトルをスパースベクトル(例えば、受け取ったベクトルの非ゼロ値のみを含むベクトル)とスパース性マップ(例えば、どの密ベクトルの要素がゼロで、どのベクトルの要素が非ゼロなのかを特定するビットマップ)とに変換する。例えば、スパース性ベクトル変換器102が、8×1次元密ベクトル[0;0;532;0;1432;4;0;0;1]を受け取った場合、スパース性ベクトル変換器102は、8×1次元密ベクトルを、密ベクトルの非ゼロ値を含み密ベクトルのゼロ値を排除した、4×1次元スパースベクトル(例えば、[532;1432;4;1])に変換する。スパース性ベクトル変換器102はまた、8×1次元スパース性マップ(例えば、[0;0;1;0;1;1;0;0;1])を生成する。これは、受け取った密ベクトルの各要素を単ビットで表したもので、対応する要素がゼロか非ゼロかどうかを特定する(例えば、ベクトルの対応する要素が「0」のときは「0」で、ベクトルの対応する要素が非ゼロの時は「1」)。密ベクトル(例えば、ゼロ値と非ゼロ値の両方を含むベクトル)は、スパース性マップ(例えば、密ベクトルのビットマップベクトル)を用いて、スパースベクトル(例えば、密ベクトルの非ゼロ値のみを含むベクトル)から再編成されることができる。ところで、密ベクトルが十分なゼロ値要素を含む場合には、スパースベクトルとスパース性マップとを保存することは、密ベクトルを保存するより少ないメモリを必要とする。例えば、上記の密ベクトルの各要素が16ビットに相当する場合であれば、密ベクトルを保存するのに必要なビット数は72ビット(例えば、9要素×8ビット=72ビット)である。しかし、対応するスパースベクトルは、4要素のみを含み、対応するスパース性マップは、各要素につき1ビットのみを要するから、対応するスパースベクトル及びスパース性マップを保存するのに必要となるのは41ビット(例えば、(4要素×8ビット)+(9要素×1ビット)=41ビット)である。ある例では、密ベクトルは他のプロセッサから取得される。ある例では、密ベクトルは、ユーザインタフェースを介してユーザから取得される。例示的スパース性ベクトル変換器102は、密ベクトルと対応する生成されたスパースベクトル及びスパース性マップを例示的メモリインタフェース104に送信する。
図1の例示的メモリインタフェース104は、生成されたスパースベクトルとスパース性マップを保存するために、且つ、例示的メモリ105内の情報にアクセスするために、例示的メモリ105とインタフェースで接続する。例えば、メモリインタフェース104が、密ベクトルに対応するスパースベクトル及びスパース性マップを受け取ったとき、メモリインタフェース104は、例示的メモリ105内にスパースベクトルとスパース性マップとを保存する。ドット/スカラー積の関数が求められたとき、ドット積計算機106は、メモリインタフェース104に、1つまたは複数のスパース性マップ、および/または、ドット/スカラー積計算で利用されるスパースベクトルの要素の値に対応する1つまたは複数のメモリアドレスにアクセスするよう命令する。メモリインタフェース104は、例示的メモリ105からの情報にアクセスし、要求された情報(例えば、スパースベクトル値)を例示的ドット積計算機106に戻す。
図1の例示的メモリ105は、スパースベクトルと、対応するスパース性マップとを保存する。例えば、メモリ105は、メモリ105内の1つまたは複数のアドレスにスパースベクトルの各要素を保存する。このように、スパースベクトルの各要素は1つまたは複数のメモリアドレスと対応する。したがって、メモリインタフェース104がスパースベクトル内のある位置に対応するスパースベクトルの要素にアクセスする命令を受け取ったとき、メモリインタフェース104は、各要素が保存されているアドレスに基づいて、スパースベクトル内での要請された位置にある各要素にアクセスすることができる。
図1の例示的ドット積計算機106は、スパースベクトル及び2つのスパースベクトルに対応するスパース性マップを用いて、2つのベクトル間のドット/スカラー積を計算する。例えば、すべての密ベクトルをローカルのメモリに保存し、且つ、要素別の乗算計算を実行する必要がある従来技術を用いて、2つのベクトル間のドット積を計算する代わりに、例示的ドット積計算機106は、乗算のためのスパースベクトル内の要素を特定するためのスパース性マップに基づいて、ドット積の計算をする。このアプローチは、従来の技術よりも、メモリ内のより小さいスペースを取り、より少ない乗算計算を必要とする。例示的ドット積計算機106は、より複雑でない計算によりドット積計算を実行するので、ドット積計算機106は、従来のドット積技術よりも、より少ないメモリ、より少ない処理リソース、及びより速い速度により、ドット積を決定することができる。ひとたび計算されると、例示的ドット積計算機106は、例示的ドット積結果108を出力する。例示的ドット積結果108は、ユーザに出力されてもよく、および/または、他のプロセッサやアプリケーションに出力されてもよく、および/または、CNNエンジン100内のその後のプロセスで用いられる、若しくは、CNNエンジン100に入力されてよい。例示的ドット積計算機106の例示的な実装はさらに、図2および図3と共に以下で説明される。
図2は、図1のドット積計算機106の例示的な実装に関するブロック図である。図2の例示的ドット積計算機106は、例示的インタフェース200、例示的反復制御ベクトル生成器202、例示的論理ゲート204、例示的減算器206、例示的トレーリングバイナリカウンタ208、例示的マスク生成器210、例示的要素位置決定器212、例示的乗算器214、例示的加算器216、及び、例示的結果ストレージ218を備える。
図2の例示的インタフェース200は、ドット積命令を受け取る。例えば、ユーザ、アプリケーションおよび/またはプログラムは、2つのベクトル(例えばベクトルAとベクトルB)に対してドット積を行う命令を伝達してよい。さらに、インタフェース200は図1のメモリインタフェース104と通信して、スパース性マップおよび/または入力ベクトルA及びBの値にアクセスする。さらに、例示的インタフェース200は、ひとたび例示的ドット積結果108が計算(例えば、決定)されたら、その結果を出力する。
図2の例示的反復制御ベクトル生成器202は、制御ベクトル(例えば、ベクトルC)を生成し、ドット積プロトコルの各反復により、制御ベクトルを更新する。最初に、反復制御ベクトル生成器202は、入力ベクトルAとB(例えば、スパース性マップA及びB)のスパースマップに基づいて制御ベクトルを生成する。例えば、反復制御ベクトル生成器202の例示的論理ゲート204は、スパースマップA及びBの論理AND関数/演算を実行することで、最初の制御ベクトルCを生成する。反復制御ベクトル生成器202は、(例えば、A AND Bに基づいて)制御ベクトルCを生成することで、共に乗算される必要がある密ベクトルの非ゼロ要素を分離する。そのあとに続くドット積プロトコルの反復の間、例示的反復制御ベクトル生成器202は、制御ベクトルCと差分ベクトルC-1(例えば、制御ベクトルCから1を引いた値に相当する)に基づく論理AND関数を実行することで、制御ベクトルCを更新し、それにより、あとに続く反復のための後端の「1」を排除する。このように、あとに続く反復は、これ以上分離されるべき後端の1がなくなるまで、密ベクトルから異要素を分離する。反復制御ベクトル生成器202の減算器206は、制御ベクトルCのそれぞれの値からビット値1を減算することで、差分ベクトル(例えば、C-1)を計算する。例えば、制御ベクトルCが[1,0,0,0](例えば、十進法で8)である場合、減算器206は、ベクトルC-1を[0,1,1,1](例えば、十進法で7)になるように生成する。ひとたび減算器206が差分ベクトル(例えば、C-1)を計算すれば、例示的論理ゲート204は、ベクトルC及びベクトルC-1について論理AND関数を実行することで、新たな/更新された制御ベクトルを生成する。例示的反復制御ベクトル生成器202は、制御ベクトルCを新たな制御ベクトル(例えば、C=C AND (C-1))と置き換えることで、あとに続く反復のための制御ベクトルを更新する。例示的反復制御ベクトル生成器202は、新たな制御ベクトルの要素が全て同一の二進値(例えば、すべての要素が0)であるとき、ドット積プロトコルは完了した(例えば、これ以上走るべき反復は、ない)と決定する。
図2の例示的トレーリングバイナリカウンタ208は、ベクトルの後端の「0」の数(例えば、ベクトルにおいて非ゼロ値が発現する前の「0」に対応する最下位ビットの数)をカウントする。例えば、ベクトル[0,1,0,1,0,0,0]に対して、トレーリングバイナリカウンタ208は、ベクトル内で非ゼロ値が発現する前に、ベクトルの3つの最下位ビット(例えば、ベクトルにおける右端のビット)が「0」であるので、後端の「0」の数は3つであると決定する。他の例では、ベクトル[0,0,0,1]に対して、トレーリングバイナリカウンタ208は、ベクトル内に、後端の「0」がない(例えば、最下位ビットが1である)ので、後端の「0」の数は0つであると決定する。トレーリングゼロカウントは、密ベクトル内での要素のロケーションに対応する制御ベクトルと対応する。スパースベクトルでのこれらの要素の場所を示すために、マスクベクトルは、結果の「1」カウントを用いて、スパース性マップからビットを分離するように生成される。ドット積プロトコルにおいて、反復制御ベクトル生成器202が制御ベクトルを生成または更新した後、トレーリングバイナリカウンタ208は、制御ベクトルにおける後端の「0」の数を決定する。他の例において、トレーリングバイナリカウンタ208は、(例えば、ベクトルが反転された場合に)ベクトルの「1」値の数をカウントしてよい。加えて、または代替的に、例示的論理ゲート204は、ドットプロトコルの他の部分に対して論理関数を実行してよい。例えば、論理ゲート204は、論理AND関数をスパース性マップA/B、及び(例えばマスク生成器210により生成される)マスクについて実行してよい。このように、この例での要素位置決定器212は、以下にさらに説明するように、ドット積プロトコルに必要であるメモリ105に保存されるスパースベクトル内の値の要素位置を決定する。
図2の例示的マスク生成器210は、トレーリングバイナリカウント及び入力ベクトル内の要素の数に基づいて、マスクベクトルを生成する。例えば、トレーリングゼロカウントが4つで、各入力ベクトルの値の数が7である場合、マスク生成器210は、4つの最下位ビットが「1」、残りのビットが「0」(例えば、[0,0,0,1,1,1,1])である、入力ベクトルと同じ次元のマスクベクトルを生成する。他の例では、トレーリングゼロカウントが0で、各入力ベクトルの値の数が4である場合、マスク生成器210は、(例えば、トレーリングゼロカウントがゼロなので)ビットが「1」のものがなく、残りのビットが「0」(例えば、[0,0,0,0])である、入力ベクトルと同じ次元のマスクベクトルを生成する。マスクは、スキップしたい要素を分離し、関心のない要素を完全に取り除く。ひとたび例示的マスク生成器210がマスクベクトルを生成したら、例示的論理ゲート204は、論理AND関数をスパース性マップA及びマスクベクトルについて実行して第1結果を生成し、論理ゲート204は、論理AND関数をスパース性マップB及びマスクベクトルについて実行して第2結果を生成する。マスクベクトルは、関心のある要素を分離するために生成されるが、関心のある要素(例えば、乗算される要素)を分離する他の方法があってよい。例えば、例示的マスク生成器210は、制御ベクトルを1だけ減算(例えば、C-1)することや、制御ベクトルCの反転を数え上げることでマスクベクトルを生成してもよく、例示的論理ゲート204は、制御ベクトル引く1と、制御ベクトルCの反転を伴うそれ自体とに対して論理AND関数を実行してよい。
図2の例示的要素位置決定器212は、第1結果の「1」カウントに基づいて、スパースベクトルA内の要素の1番目の位置で、第2結果の「1」カウントに基づいて、スパースベクトルB内の要素の2番目の位置であると決定する。例えば、第1結果(例えば、A AND マスク)が5つの「1」を備えるベクトルに帰着した場合であれば、要素位置決定器212は、ドット積プロトコルに必要な値は、スパースベクトルAの5番目の位置であると決定する。そのような例では、第2結果(例えば、B AND マスク)が0つの「1」を備えるベクトルに帰着した場合であれば、要素位置決定器212は、ドット積プロトコルに必要な保存された値は、スパースベクトルBの0番目の位置であると決定する。さらに、要素位置決定器212は、インタフェース200に対して、例示的メモリ105内に保存された各スパースベクトルから、決定された位置に保存された値に、アクセスすることを命令する。
図2の例示的乗算器214は、(例えば、要素位置決定器212により決定された位置に対応する)例示的インタフェース200によりアクセスされた値を乗算する。ひとたび乗算されると、例示的加算器216は、その積と結果ストレージ218内に保存された以前の結果とを合計する。最初に、結果ストレージ218内に保存された値は「0」であり、それは、ドット積プロトコルの各反復の後、更新される。このように、最初の反復の間、乗算器214は、インタフェース200によりアクセスされた値を乗算し、結果ストレージ218にその積を保存する。その後の反復の間に、乗算器214は、インタフェース200によりアクセスされた値を乗算し、加算器216は、その積と先行して保存された結果(例えば、先行する反復からの積の和)とを合計する。ひとたび例示的反復制御ベクトル生成器202が、ドット積プロトコルが完了した(例えば、新たな制御ベクトルがゼロ値のみを含むので、実行すべきこれ以上の反復がない)と決定すると、インタフェース200は、結果ストレージ218内の結果にアクセスし、その結果をドット積結果108として出力する。ドット積プロトコルの例と2つの例示的ベクトルについて、図4と共に以下にさらに説明する。
図2の例示的CNNエンジン100は、部分的に、命令を実行するプロセッサにより実装されてよい。図3は、図1のドット積計算機106の他の例示的な実装の図である。図3の例では、ドット積計算機106は、ハードウェア(例えば、専用回路)により実装される。ある例では、図3のハードウェアはプロセッサ内(例えばプロセッサパッケージや、チップ上のシステムの一部などの中)に組み込まれる。図3の例示的ドット積計算機106は、例示的AND論理ゲート300、306、314、316、322、例示的マルチプレクサ(MUXs)302、332、例示的減算器304、例示的レジスタ308、328、334、例示的コンパレータ310、例示的NOTゲート312、例示的「1」カウンタ318、324、及び例示的加算器320、326、330を含む。ある例において、例示的構成要素の300、302、304、306、308、310は、例示的反復制御ベクトル生成器202を実装するために使用されてよく、例示的論理ANDゲート316、322は、論理ゲート204を実装するために使用されてよく、例示的構成要素の304は、減算器206を実装するために使用されてよく、例示的「1」カウンタ318、324は、トレーリングバイナリカウンタ208を実装するために使用されてよく、例示的構成要素の312、314は、例示的マスク生成器210を実装するために使用されてよく、例示的加算器320、326は、例示的要素位置決定器212を実装するために使用されてよく、例示的乗算器328は、例示的乗算器214を実装するために使用されてよく、例示的加算器330は、例示的加算器216を実装するために使用されてよく、及び、例示的レジスタ334は、図2の例示的結果ストレージ218を実装するために使用されてよい。
ユーザ、アプリケーション、および/またはデバイス(例えば、他のプロセッサ)が、2つのスパースベクトル(例えばAsとBs)に基づいて、ドット/スカラー積を決定する命令を送信するとき、2つの対応するスパース性マップ(例えばAmとBm)は、例示的AND論理ゲート300により、例示的メモリインタフェース104を介して例示的メモリ105から取得される。例示的AND論理ゲート300は、AND論理関数を実行し、制御ベクトルCを生成する。AND論理ゲート300は、制御ベクトルCを例示的MUX302に出力する。例示的MUX302は、スタート信号を受け取り、いつドット/スカラー積計算が開始したかを特定する。以下にさらに説明するように、図4の例と共に、スパース性マップAmとBmは、最初に制御ベクトルを決定するために利用される。しかし、その後の反復はスパース性マップAmとBmを利用することなく制御ベクトルを更新する。したがって、例示的AND論理ゲート300が第1制御ベクトルCを決定した後、例示的MUX302は、もはや最初の制御ベクトルをさらなる計算に進めない。むしろ、MUX302は、(例えば以下にさらに説明するように、例示的構成要素の304、306、308により生成された)後続の制御ベクトルを出力する。
図3の例示的MUX302は、スタート信号により可能になったとき、例示的AND論理ゲート300のアウトプットを、例示的減算器304に出力する(例えば最初の制御ベクトル)。例示的MUX302は、スタート信号により可能にされなかったとき、例示的レジスタ308のアウトプットを出力する(例えば、後続の制御ベクトル)。例示的減算器304は、制御ベクトルを1の値だけ差し引き(例えばC-1)、例示的AND論理ゲート306は、制御ベクトル(C)と制御ベクトル引く1(C-1)について論理AND関数を実行して、例示的レジスタ308に保存されたその後の反復のための後続の制御ベクトルを生成する。例示的コンパレータ310は、後続の制御ベクトルが「0」に等しいか否かを決定する。後続の制御ベクトルが「0」に等しい場合であれば、ドット積処理が完了し、コンパレータ310は処理の終了を示すトリガー電力を出力する。後続の制御ベクトルが「0」に等しくない場合は、その処理は後続の制御ベクトルに続く。
図3の例示的構成要素の306、308がその後の反復のために後続の制御ベクトルの計算をする一方で、例示的構成要素の304、312、314は、現在の反復のためにマスキングベクトルを生成する。図3の例では、マスキングベクトル(例えば制御ベクトルのトレーリングゼロカウントに対応するベクトル)は、制御ベクトル引く1(C-1)と制御ベクトルの反転についての論理AND関数に基づいて、生成される。したがって、例示的論理NOTゲート312(例えばインバータ)が制御ベクトルの反転を計算する間に、例示的減算器304は、制御ベクトル引く1を生成する。例示的論理ANDゲート314は、制御ベクトルの反転と制御ベクトル引く1について論理AND関数を実行することで、結果として、マスクベクトルが生じる。さらにまたは代替的に、マスクベクトルを生成するために異なるハードウェア構成要素が存在してもよい。
ひとたびマスクベクトルが計算されると、図3の例示的論理ANDゲート316は、第1スパース性マップAmについて論理AND関数を実行し、例示的論理ANDゲート322は、第2スパース性マップBmについて論理AND関数を実行する。例示的「1」カウンタ318は、例示的論理ANDゲート316のアウトプットの「1」の合計数(例えば1_count(Am AND マスク))を計算し、例示的「1」カウンタ324は、例示的論理ANDゲート322のアウトプットの「1」の合計数(例えば1_count(Bm AND mask))を計算する。例示的加算器320は、例示的「1」カウンタ318の「1」カウントをスパースベクトルAsのベースアドレスに加える。加算器326は、例示的「1」カウンタ324の「1」カウントをスパースベクトルBsのベースアドレスに加える。したがって、加算器320のアウトプットは、現在の反復のために乗算されるべきスパースベクトルAsの各要素のアドレスに対応し、加算器326のアウトプットは、現在の反復中に乗算されるべきスパースベクトルBsの各要素のアドレスに対応する。
図1の例示的メモリ105から、アドレスに保存された値を取得するために、スパースベクトルAsとBsのアドレス(例えばA_addr及びB_addr)は、例示的メモリインタフェース104に送信される。ひとたび取得すると、例示的メモリインタフェース104は、対応する値(例えばAおよびB)を、例示的乗算器328に送信し、それらの値を乗算する。例示的乗算器328は、例示的加算器330に積を出力し、積を先行する反復の積に加える。先行する反復がない場合は、例示的加算器330は、以下にさらに説明するように、「0」を積に加える。例示的加算器330のアウトプットは、例示的レジスタ334に保存される。レジスタ334は、先行する反復の積の和を保存する。ドット/スカラー積計算が完了(例えば、全ての反復が完了)すると、レジスタ334は、アウトプットとドット積を保存する。例えば、レジスタ334は、計算完了(例えば、終了信号)に相当する例示的コンパレータ310の出力を受け取った後、最終ドット/スカラー積を出力する。
図3の例示的レジスタ334は、例示的MUX332の現在保存されている第1インプットの値を出力する。例示的MUX332は、加えて、「0」に相当する第2インプットと、スタート信号に相当する選択インプットを含む。このように、ドット積計算が開始されるとき、MUX332は、「0」を出力する。ゼロ値は、加算器330に提供され、最初の反復の積に加えられる。しかし、第1反復の後、スタート信号は変化し、MUX332は、例示的レジスタ334のアウトプットを出力する。上記のように、例示的レジスタ334のアウトプットは、すべての先行する反復の積の和を含む。したがって、加算器330は、現在の反復の積を、先行する反復の積の合計に加え、その結果、全ての反復が完了するとき、ドット積に対応する。
図4は、図2および/または図3の例示的ドット積計算機106により、ドット積プロトコル演算の例を説明する。図4は、例示的密ベクトル400、402、例示的位置識別子404、例示的スパースベクトル406、408、スパースベクトル410の例示的要素位置、例示的スパース性マップ412、414、例示的制御ベクトル416、例示的トレーリングゼロカウント418、430、例示的マスク420、432、例示的スパースベクトル値422、424、434、436、例示的な積426、438、例示的差分ベクトル427、442、例示的更新された制御ベクトル428、及び例示的ドット積結果440を含む。
図4の例示的密ベクトル400、402は、ドット積演算で使用するために特定され得るベクトルに対応する。例示的位置識別子404は、密ベクトル400、402内の要素の位置に対応する。上記のように、スパース性ベクトル変換器102は、密ベクトル400、402を例示的スパースベクトル406、408及び例示的スパース性マップ412、414に変換する。スパースベクトル406は、密ベクトル400と同じ順で列挙される例示的密ベクトル400の非ゼロ値と対応する。スパースベクトル408は、密ベクトル400と同じ順で列挙される例示的密ベクトル402の非ゼロ値と対応する。スパースベクトル406、408の値は、例示的要素位置410(0から4)によりインデックスされる。スパース性マップ412は、各位置識別子404内の密ベクトル400の要素が、ゼロ値に相当するのか、非ゼロ値に相当するのかに対応するビットマップベクトルである。例えば、密ベクトル400の2番目、3番目、5番目及び6番目の位置は、非ゼロ値に相当するので、スパース性マップ412は、「1」を2番目、3番目、5番目及び6番目の位置に含む。スパース性マップ414も同様に、密ベクトル402のビットマップベクトルと対応する。
インタフェース200が密ベクトル400および402についてのドット積を演算するように命令を受け取ったとき、ドット積計算機106は、スパース性マップ412、414にアクセスし、反復制御ベクトル生成器202は、例示的スパース性マップ412及び例示的スパース性マップ414について論理AND関数を実行することで、例示的制御ベクトル416を生成する。第1反復(例えば、反復0)の間、2つのトレーリングゼロが制御ベクトルに存在すること(例えば、制御ベクトル内に「1」がある前に、制御ベクトルでの2つの最下位ビットがゼロであること)を理由として、トレーリングバイナリカウンタ208は、例示的トレーリングゼロカウント418が2であると決定する。それに応じて、例示的マスク生成器210は、トレーリングゼロカウント418に基づいて、例示的マスクベクトル420を生成する。例えばマスク生成器210は、マスクベクトル420を生成し、2つの最下位ビット(例えば、トレーリングゼロカウント2に等しい2ビット)を「1」に、残りのビットを「0」にする。例示的マスクベクトル420は、関心のある要素を分離するために生成されるが、関心のある要素(例えば、乗算される要素)を分離する他の方法があってよい。例えば、例示的マスク生成器210は、1だけ制御ベクトルを減算すること(例えば、C-1)や、制御ベクトルCの反転を数え上げることで、例示的マスクベクトル420を生成してよく、例示的論理ゲート204は、制御ベクトル引く1と、制御ベクトルCの反転を伴うそれ自体とに対して論理AND関数を実行してよい。
ひとたびマスク生成器210がマスクベクトル420を生成すると、論理ゲート204は、マスク420及び第1スパース性マップ412について論理AND関数を実行する。要素位置決定器212は、論理ゲート204からの結果の「1」カウントに基づいて、位置を決定する。例えば図4では、要素位置決定器212は、A AND マスクの結果に1がないので、その位置はゼロであると決定する。インタフェース200は、メモリ105から、0番目の位置における、スパースベクトル406の値にアクセスし、8(例えば、スパースベクトル406の0番目の値)である値422を戻す。同様に、マスク生成器210はマスクベクトル420を生成し、論理ゲート204は、マスク及び第2スパース性マップ414について論理AND関数を実行する。要素位置決定器212は、論理ゲート204から、結果の「1」カウントに基づいて、要素位置を決定する。例えば、図4において、要素位置決定器212は、B AND マスクの結果の中に2つの「1」があるため、位置が2であると決定する。インタフェース200は、メモリ105から、スパースベクトル408の2番目の位置の要素/値にアクセスし、61(例えば、スパースベクトル408の2番目の値)である値424を戻す。
ひとたびインタフェース200が対応する値422、424(例えば、8と61)にアクセスすると、例示的乗算器214は対応する値422、424を乗算して、第1の例示的積426(例えば、8×61=488)を生成する。第1の例示的積426は、例示的結果ストレージ218に保存される。第1反復が完了した後、例示的反復制御ベクトル生成器202は、制御ベクトル416を1だけ差し引き(例えば、C-1)、例示的差分ベクトル427を生成する。制御ベクトル生成器202は、制御ベクトル416及び差分ベクトル427について論理AND演算を実行する。結果が非ゼロ値(例えば、[0,0,1,0,0,0,0,0])を含むことにより、反復制御ベクトル生成器202は、その後の反復が必要であり、制御ベクトル416を例示的新たな制御ベクトル428と置き換える必要があると決定する。
第2反復(例えば、反復1)の間、制御ベクトル428に5つの例示的トレーリングゼロがあること(例えば、制御ベクトル内で「1」がある前に、制御ベクトルでの5つの最下位ビットが「0」であること)により、トレーリングバイナリカウンタ208は、トレーリングゼロカウント430が5であると決定する。したがって、例示的マスク生成器210は、トレーリングゼロカウント430に基づいて例示的マスクベクトル432を生成する。例えば、マスク生成器210は、マスクベクトル432を生成し、5つの最下位ビットを「1」に、残りのビットを「0」にする。
ひとたびマスク生成器210がマスクベクトル432を生成すると、論理ゲート204は、マスク及び第1スパース性マップ412について論理AND関数を実行する。要素位置決定器212は、論理ゲート204から結果の「1」カウントに基づいて、要素位置を決定する。例えば、図4では、A AND マスクの結果内に2つの「1」があるので、要素位置決定器212は、位置が2であると決定する。インタフェース200は、メモリ105から、2番目の位置に保存される、スパースベクトル406の要素/値にアクセスし、4(例えば、スパースベクトル406の2番目の値)である値434を戻す。同様に、論理ゲート204は、マスク432及びスパース性マップ414について論理AND関数を実行する。要素位置決定器212は、論理ゲート204から、結果の「1」カウントに基づいて、要素位置を決定する。例えば、図4において、要素位置決定器212は、B AND マスクの結果の中に3つの「1」があるため、要素位置が3であると決定する。インタフェース200は、スパースベクトル408の3番目の位置に対応するアドレスにおいて、メモリ105に保存される要素/値にアクセスし、6(例えば、スパースベクトル408の3番目の値)である値436を戻す。
ひとたびインタフェース200が、対応する値434、436(例えば、3と6)にアクセスすると、例示的乗算器214は、対応する値434、436を乗算して、第1の例示的積438(例えば、18)を生成する。これは第1反復ではないので、例示的加算器216は、先行して保存された積426と現在の積438を合計して(例えば、488+18=506)現在の結果440を生成する。例示的結果ストレージ218は、現在の結果を保存する。図4のコンテキストで説明されるように、第2反復が完了した後、例示的反復制御ベクトル生成器202は、制御ベクトル428を1だけ差し引くことで(例えば、C-1)、例示的差分ベクトル442を生成し、かつ、制御ベクトル428及び差分ベクトル442について論理AND関数を実行する。図4のコンテキストで説明されるように、結果がゼロ値のみを含むことにより、反復制御ベクトル生成器202は、その後の反復は必要なく、且つドット積プロトコルは完了したと決定する。したがって、例示的インタフェース200は、例示的結果ストレージ218内に保存される結果にアクセスし、それをドット積結果108として出力する。
図1の例示的ドット積計算機106を実装する例示的な方式は、図2で示されている一方、図2で示される1つまたは複数の要素、処理および/またはデバイスは、組み合わされてよく、分けられてよく、配置し直されてよく、省略されてよく、除外されてよく、および/または他のいずれの方式で実装されてよい。さらに、図2の例示的インタフェース200、例示的反復制御ベクトル生成器202、例示的論理ゲート204、例示的減算器206、例示的トレーリングバイナリカウンタ208、例示的マスク生成器210、例示的要素位置決定器212、例示的乗算器214、例示的加算器216、例示的結果ストレージ218、および/または、より広くは、例示的ドット積計算機106は、ハードウェア、ソフトウェア、ファームウェアおよび/またはハードウェア、ソフトウェアおよび/またはファームウェアのあらゆる組み合わせにより実装されてよい。それと共に、例えば、図2の例示的インタフェース200、例示的反復制御ベクトル生成器202、例示的論理ゲート204、例示的減算器206、例示的トレーリングバイナリカウンタ208、例示的マスク生成器210、例示的要素位置決定器212、例示的乗算器214、例示的加算器216、例示的結果ストレージ218、および/または、より広くは、例示的ドット積計算機106のいずれも、1つまたは複数のアナログまたはデジタル回路、論理回路、プログラマブルプロセッサ、プログラマブルコントローラ、グラフィック処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラマブルロジックデバイス(PLD)、および/または、フィールドプログラマブル論理デバイス(FPLD)により実装され得る。単にソフトウェアおよび/またはファームウェアの実装を網羅する本特許の装置請求項またはシステム請求項のいずれかを読む場合、図2の例示的インタフェース200、例示的反復制御ベクトル生成器202、例示的論理ゲート204、例示的減算器206、例示的トレーリングバイナリカウンタ208、例示的マスク生成器210、例示的要素位置決定器212、例示的乗算器214、例示的加算器216m例示的結果ストレージ218、および/または、より広くは、例示的ドット積計算機106の少なくとも1つは、ソフトウェアおよび/またはファームウェアを含んだ、非一時的コンピュータ可読ストレージデバイス、又は、メモリ、デジタル多用途ディスク(DVD)、コンパクトディスク(CD)ブルーレイディスク等のストレージディスク、を含むものとして、ここに明白に定義される。また依然として、図2の例示的ドット積計算機106は、図2に示されものに加えて、又は、代わって、1つまたは複数の要素、プロセスおよび/またはデバイスを含んでよく、および/または図示された要素、プロセス、及びデバイスのいずれか又はすべてのうち1つ以上を含んでよい。本明細書で使用されるように、「と通信する」という表現は、その変形例を含み、1または複数の中間要素による直接通信および/または間接通信を包含し、直接的な物理的(例えば、有線)通信および/または常時通信を必要としないが、むしろ、周期的な間隔、スケジュールされた間隔、非周期的な間隔、および/または一度だけのイベントにおける選択的な通信を追加的に含む。
図5には、図1および/または図2の例示的ドット積計算機106を実装するための例示的なハードウェアロジック、機械可読命令、ハードウェア実装ステートマシンおよび/またはそれらの任意の組み合わせを表すフローチャートが示される。機械可読命令は、図6に関連して以下に論じられる例示的プロセッサプラットフォーム600に示されるプロセッサ612などのコンピュータプロセッサによる実行のための実行可能プログラムまたは実行可能プログラムの一部であり得る。 プログラムは、CD‐ROM、フロッピーディスク、ハードドライブ、DVD、ブルーレイディスク、またはプロセッサ612に関連付けられるメモリなどの非一時的コンピュータ可読記録媒体に保存されたソフトウェアで具現化され得るが、全体のプログラムおよび/またはその一部は、代替的に、プロセッサ612以外のデバイスにより実行されることおよび/またはファームウェアもしくは専用ハードウェアで具現化されることが可能である。また、例のプログラムは、図5に示されるフローチャートを基準に説明されるが、図2の例示的ドット積計算機106を実装するための多くの他の方法を代替的に用いてよい。例えば、ブロックの実行順序が変更され得、および/または説明されたブロックの一部が変更され得、除去され得、または組み合わされ得る。追加的にまたは代替的に、いずれかまたは全てのブロックは、ソフトウェアまたはファームウェアを実行することなく対応する動作を実行するように構造化された1または複数のハードウェア回路(例えば、ディスクリートおよび/または集積アナログおよび/またはデジタル回路、FPGA、ASIC、コンパレータ、演算増幅器(オペアンプ)、論理回路など)により実装され得る。
上述されるように、図5の例の処理は、非一時的コンピュータに保存された実行可能命令(例えば、コンピュータおよび/または機械可読命令)、および/またはハードディスクドライブ、フラッシュメモリ、リードオンリメモリ、コンパクトディスク、デジタル多用途ディスク、キャッシュ、ランダムアクセスメモリといった機械可読媒体、および/または任意の期間(例えば、長期間、永久に、短期間の瞬間、一時的バッファリング、および/または情報のキャッシング)に情報を保存する他のあらゆるストレージデバイスまたはストレージディスクを用いて実装されてよい。本明細書に使用される場合、非一時的コンピュータ可読媒体という用語は、任意の種類のコンピュータ可読ストレージデバイスおよび/またはストレージディスクを含み、伝搬する信号を排除し、送信媒体を排除するように明示的に定義される。
「含む(including)」および「含む(comprising)」(およびこれらのすべての形態および時制)は、本明細書ではオープンエンドの用語として用いられている。したがって、あらゆる形態の「include(含む)」又は「comprise(含む)」(例えば、comprises、includes、comprising、including、havingなど)を、クレームがプリアンブルとして又はあらゆる種類のクレーム記述内で用いるときにはいつでも、さらなる要素、項目などが、対応するクレーム又は記述の範囲から外れることなく存在してよいことを理解されたい。本明細書で使用されるように、「少なくとも(at least)」という表現が移行部の用語、例えば、請求項のプリアンブルとして使用される場合、それは「備える」および「含む」という用語が非限定的であるのと同じように、非限定的である。「and/or(及び/又は)」という用語は、例えば、A、B、及び/又はCなどの形で用いられると、A、B、Cの任意の組み合わせ又はこれらのサブセット、例えば、(1)Aだけ、(2)Bだけ、(3)Cだけ、(4)AとB、(5)AとC、(6)BとC、及び(7)AとBとCなどを意味する。
図5は、対応するスパースベクトル及びスパース性マップを用いて2つの密ベクトルのドット積計算を実行するために、図2および/または図3のドット積計算機106の例示的な実装により実行され得る例示的機械可読命令を代表するフローチャート500の例である。図5のフローチャート500は、図2および/または図3の例示的ドット積計算機106と共に説明されたが、他のタイプのドット積計算機および/または他のタイプのプロセッサが代わりに利用されてよい。
ブロック502で、例示的ドット積計算機106は、2つのベクトルについてドット積を実行するためにインタフェース200が命令を受け取ったか(例えば、取得したか)を決定する。ドット積を実行するための命令が受け取られていなかった場合(ブロック502:NO)、プロセスは、命令が受け取られるまでブロック502に戻る。2つのベクトル(例えば、AとB)についてドット積を実行するための命令がインタフェース200に受け取られた場合(ブロック502:YES)、例示的メモリ105から、例示的ドット積計算機106は、2つのベクトル(AとB)に対応するスパース性マップ(AとB)にアクセスする(ブロック504)。例えば、インタフェース200は、図5のメモリインタフェース104と通信し、例示的メモリ105から2つのベクトルに対応するスパース性マップにアクセスする。
ブロック506で、例示的反復制御ベクトル生成器202は、2つのスパース性マップ(AとB)について論理AND関数を実行することで制御ベクトル(C)を生成する。例えば、論理ゲート204は、論理AND関数を実行して、制御ベクトル(例えば、C=A AND B)を生成する。ある例では、制御ベクトルCがすべて「0」を含む場合、ドット積が完了し、インタフェース200は、ドット積結果108として、(例えば、結果ストレージ218に初期設定された)「0」を出力する。制御ベクトルが、非ゼロ値を含まない場合(ブロック507:NO)、ドット積の結果は「0」(例えば、2つの密ベクトルの間で共通の非ゼロ要素がゼロ)であり、プロセスは、ブロック534に進み、例示的結果ストレージ218内に結果を出力する(例えば、0に初期化される)。制御ベクトルが非ゼロ値を含む場合(ブロック507:YES)、例示的トレーリングバイナリカウンタ208は、制御ベクトル(C)のトレーリングバイナリカウント(例えば、トレーリングゼロカウントまたはトレーリング1カウント)を決定する(ブロック508)。例えば、図2のトレーリングバイナリカウンタ208は、いくつの最下位ビットが制御ベクトルで「1」が発現する前で「0」なのかを決定する。(他の例では、トレーリングバイナリカウンタ208は、いくつの最下位ビットが制御ベクトルに「0」が発現する前で「1」なのかを決定する。)
ブロック510では、例示的マスク生成器210が、トレーリングゼロ/バイナリーカウントに基づいて、マスクベクトルを生成する。例えば、マスク生成器210は、入力ベクトル(AとB)と同じ次元のベクトルを生成してよく、マスクベクトルの第1X(例えば、Xは、トレーリングゼロカウント)最下位ビットは「1」であり、マスクベクトルの残りのビットは「0」である。(他の例では、マスク生成器210は、入力ベクトルと同じ次元のベクトルを生成してよく、マスクベクトルの第1X最下位ビットが「0」であり、マスクベクトルの残りのビットは、「1」である。)ブロック512では、例示的論理ゲート204は、マスク及び第1スパース性マップA(例えば、マスク AND A)について論理AND関数を実行することにより、第1結果を生成し、マスクと第2スパース性マップB(例えば、マスク AND B)について論理AND関数を実行することで、第2結果を生成する。
ブロック514では、例示的要素位置決定器212は、第1結果の「1」カウントに基づいて、第1ベクトル(A)に対応する第1スパースベクトル(A)の第1メモリ位置を決定する。例えば、要素位置決定器212は、第1結果での「1」(例えば、二進値)の数をカウントし、「1」(例えば、二進値)の数に基づいて、スパースベクトルの位置を決定する。ブロック516では、例示的要素位置決定器212は、第2結果の「1」カウントに基づいて、第2ベクトル(B)に対応する第2スパースベクトル(B)の第2メモリ位置を決定する。例えば、要素位置決定器212は、第2結果の「1」の数をカウントし、「1」の数に基づいて、スパースベクトルの位置を決定する。
ブロック518では、例示的インタフェース200は、スパースベクトル(AとB)の1番目及び2番目の位置に保存された値にアクセスする。例えば、第1スパースベクトルAが[5;316;935;17]であり、第1メモリ位置が2である場合、インタフェース200は、例示的メモリ105に保存されたスパースベクトルから、935(例えば、Aの2番目の位置に対応し、5は0番目の位置、316は1番目の位置、935は2番目の位置、17は3番目の位置)の値にアクセスする。ブロック520では、例示的乗算器214は、対応するスパースベクトルからアクセスされた値を乗算して、積を取得する。例えば、第1スパースベクトルAからアクセスされた値が935であり、第2スパースベクトルBからアクセスされた値が5である場合、乗算器214は、値935と5を乗算して、5,675の積を生成する。
ブロック522では、加算器216は、積と、結果ストレージ218に保存された値(例えば、保存された結果)とを合計する。ブロック524では、結果ストレージ218が合計に基づいて、保存された結果を更新する。第1反復の間、結果ストレージ218に保存された値は、「0」である。したがって、ある例では、第1反復の間、ブロック522は、スキップされ得、結果ストレージ218は、結果ストレージ218に保存された結果として積を保存し得る。ブロック526では、例示的減算器206は、制御ベクトルCの値に対応するものから、1を差し引いて、C-1ベクトル(例えば、差分ベクトル)を生成する。例えば、制御ベクトルCが[1,0,0,0](例えば、十進法で8)である場合、減算器206は、ベクトルC-1を[0,1,1,1](例えば、十進法で7)となるように生成する。
ブロック528では、例示的反復制御ベクトル生成器202は、制御ベクトル(C)及び差分ベクトル(C-1)について論理AND関数を実行するために論理ゲート204を用いて、更新された制御ベクトルを生成する。ブロック530では、例示的反復制御ベクトル生成器202は、更新された制御ベクトルの要素がすべて同一の二進値に対応するかどうかを決定する(例えば、更新された制御ベクトルの各要素が「0」であるかを決定する)。例示的反復制御ベクトル生成器202が、更新された制御ベクトル要素がすべて同一の二進値に対応しないと決定した場合(ブロック530:NO)、反復制御ベクトル生成器202は、制御ベクトルを更新された制御ベクトルと置き換えて(ブロック532)、プロセスはブロック508に戻って後続の反復を実行する。例示的反復制御ベクトル生成器202が、更新された制御ベクトル要素がすべて同一の二進値(例えば、すべて「0」)に対応すると決定した場合(ブロック530:YES)、例示的インタフェース200は、結果ストレージ218に保存された結果にアクセスし、保存された結果をドット積結果108として出力する(ブロック534)。
図6は、図2における例示的ドット積計算機106を実装するための図5における命令を実行するために構成される、例示的プロセッサプラットフォーム1000のブロック図である。プロセッサプラットフォーム600は、例えば、サーバ、パーソナルコンピュータ、ワークステーション、自己学習機械(例えば、ニューラルネットワーク)、モバイルデバイス(例えば、携帯電話、スマートフォン、iPad(登録商標)といったタブレット)、または他のあらゆるタイプのコンピューティングデバイスであり得る。
図示した例のプロセッサプラットフォーム600はプロセッサ612を含む。図示した例のプロセッサ612はハードウェアである。例えば、プロセッサ612は、1または複数の集積回路、論理回路、マイクロプロセッサ、GPU、DSP、又は任意の所望の系統若しくはメーカーからのコントローラにより実装されてよい。ハードウェアプロセッサは、半導体ベース(例えば、シリコンベース)のデバイスであり得る。この例では、プロセッサは、例示的インタフェース200、例示的反復制御ベクトル生成器202、例示的論理ゲート204、例示的減算器206、例示的トレーリングバイナリカウンタ208、例示的マスク生成器210、例示的要素位置決定器212、例示的乗算器214、及び例示的加算器216を実装する。
図示した例のプロセッサ612は、ローカルメモリ613(例えばキャッシュ)を含む。ある例では、ローカルメモリ613は例示的結果ストレージ218を実装する。示された例のプロセッサ612は、バス618を介して、揮発性メモリ614と不揮発性メモリ616とを含むメインメモリと通信する。ある例では、メインメモリは例示的メモリ105を実装する。揮発性メモリ614は、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)、ダイナミックランダムアクセスメモリ(DRAM)、RAMBUS(登録商標)ダイナミックランダムアクセスメモリ(RDRAM(登録商標))および/または任意の他の種類のランダムアクセスメモリデバイスにより実装され得る。不揮発性メモリ616は、フラッシュメモリおよび/または任意の他の所望の種類のメモリデバイスにより実装されてよい。メインメモリ614、616へのアクセスが、メモリコントローラにより制御される。
図示した例のプロセッサプラットフォーム600は、インタフェース回路620も含む。インタフェース回路620は、イーサネット(登録商標)インタフェース、ユニバーサルシリアルバス(USB)、Bluetooth(登録商標)インタフェース、近距離無線通信(NFC)インタフェース、および/またはPCIエクスプレスインタフェースなどの任意の種類のインタフェース規格により実装され得る。
図示した例において、1または複数の入力デバイス622はインタフェース回路620に接続される。入力デバイス622は、ユーザがプロセッサ612にデータおよび/またはコマンドを入力することを許可する。入力デバイスは、例えば、オーディオセンサ、マイク、カメラ(スチールまたはビデオ)、キーボード、ボタン、マウス、タッチスクリーン、トラッキングパッド、トラックボール、アイソポイントおよび/または音声認識システムにより実装され得る。
1または複数の出力デバイス624も、図示した例のインタフェース回路620に接続されている。出力デバイス624は、例えば、ディスプレイデバイス(例えば、発光ダイオード(LED)、有機発光ダイオード(OLED)、液晶ディスプレイ(LCD)、ブラウン管ディスプレイ(CRT)、in-place switching(IPS)ディスプレイ、タッチスクリーンなど)、触知出力デバイス、プリンタおよび/またはスピーカにより実装され得る。したがって、示された例のインタフェース回路620は通常、グラフィックスドライバカード、グラフィックスドライバチップ、および/またはグラフィックスドライバプロセッサを含む。
また、示された例のインタフェース回路620は、ネットワーク626を介して外部機械(例えば、任意の種類のコンピューティングデバイス)とのデータ交換を容易にする、送信機、受信機、トランシーバ、モデム、レジデンシャルゲートウェイ、無線アクセスポイント、および/またはネットワークインタフェースなどの通信デバイスを含む。通信は、例えば、イーサネット接続、デジタル加入者回線(DSL)接続、電話回線接続、同軸ケーブルシステム、衛星システム、有視界無線システム、セルラ電話システムなどを介してよい。
図示した例のプロセッサプラットフォーム600は、ソフトウェアおよび/またはデータを保存するための1または複数の大容量ストレージデバイス628も含む。そのような大容量ストレージデバイス628の例は、フロッピーディスクドライブ、ハードドライブディスク、コンパクトディスクドライブ、ブルーレイディスクドライブ、独立ディスクの冗長アレイ(RAID)システム、およびデジタル多用途ディスク(DVD)ドライブを含む。
図6の機械実行可能命令632は、大容量ストレージデバイス628、揮発性メモリ614、不揮発性メモリ616、および/または、CDやDVDなどの取り外し可能非一時的コンピュータ可読保存媒体に保存されてよい。
上記の説明から、例示的方法、装置、製造物品は、スパースベクトルを用いたドット積計算を実行するものであることを開示したとして理解されたい。開示されている方法、装置、製造物品は、より小さなスパースベクトル(例えば、非ゼロ値のみを含むベクトル)及び大きい密ベクトルに相当するスパース性マップ/ベクトル(例えば、密ベクトルのビットマップ)を保存することで、大きい密ベクトル(例えば、ゼロ及び非ゼロ値の両方を含むベクトル)を保存するのに要するメモリ量を減らし、それによりコンピューティングデバイスの効率を向上する。加えて、本願で開示する例は、スパース性マップを用いてドット積を実行することで、ドット積の実行に要するローカルのメモリ量を減らし、且つ、従来技術に関するドット積を実行するのに要する複雑な乗算演算の量を減らす。したがって、本願で開示する例は、ドット積計算に要するプロセッサリソースの量を減らす(例えば、同じ計算を実行するのに必要なプロセッササイクルを減らす)ことでコンピューティングデバイスの効率を向上させ、それによりドット積計算の計算速度を上げる。開示されている方法、装置、製造物品は、したがってコンピュータの機能の1つまたは複数の向上に向けられている。
例1は、制御ベクトルのトレーリングバイナリカウントを決定するカウンタであって、制御ベクトルは、第1スパースベクトルの第1ビットマップ及び第2スパースベクトルの第2ビットマップに対する第1論理AND演算の第1結果に対応する、カウンタと、トレーリングバイナリカウントに基づいてマスクベクトルを生成するマスク生成器と、インタフェースであって、第1ビットマップ及びマスクベクトルについての第2論理AND演算の第2結果に基づく第1スパースベクトルの第1の値にアクセスする、且つ第2ビットマップおよびマスクベクトルについての第3論理AND演算の第3結果に基づく第2スパースベクトルの第2の値にアクセスするインタフェースと、第1の値と第2の値とを乗算し、積を生成する乗算器とを備えるドット積計算機を含む。
例2は、例1に記載のドット積計算機を含み、第1ビットマップは、第1ベクトルの第1要素がそれぞれ、ゼロ値または非ゼロ値に相当するかを特定するためのものであり、第2ビットマップは、第2ベクトルの第2要素がそれぞれ、ゼロ値または非ゼロ値に相当するかを特定するためのものであり、第1スパースベクトルは、第1密ベクトルの非ゼロ値に対応し、第2スパースベクトルは、第2密ベクトルの非ゼロ値に対応する。
例3は、インプットとしての第1ビットマップおよび第2ビットマップに対する第1論理AND演算に基づく制御ベクトルを生成する論理ゲートをさらに備える、例1のドット積計算機を含む。
例4は、マスク生成器は、例1に記載のドット積計算機を含み、最下位ビットに複数の第1二進値を含むマスクベクトルを生成するためのものであり、第1二進値の数は、トレーリングバイナリカウントに対応しており、マスク生成器は、第1ベクトルと同じ次元を有するマスクベクトルを生成する。
例5は、第2結果内の二進値の第1の数の決定であって、インタフェースは、二進値の第1の数に対応する第1アドレスに基づいて第1の値にアクセスする、決定と、第3結果内の二進値の第2の数の決定であって、インタフェースは、二進値の第2の数に対応する第2のアドレスに基づいて第2の値にアクセスする、決定とを行う要素位置決定器をさらに備える、例1に記載のドット積計算機を含む。
例6は、積を保存するストレージをさらに含む、例1に記載のドット積計算機を含む。
例7は、制御ベクトルのバイナリビットに対応する値から1を減算することにより差分ベクトルを生成する減算器と、制御ベクトル及び差分ベクトルについての論理AND演算に対応して更新された制御ベクトルを生成し、且つ、更新された制御ベクトルのすべての要素が同一の二進値に対応するかを決定する、反復制御ベクトル生成器とをさらに備える、例1に記載のドット積計算機を含む。
例8は、反復制御ベクトル生成器が、更新された制御ベクトルのすべての要素が同一の二進値に対応すると決定したとき、インタフェースは、積をドット積結果として出力する、例7に記載のドット積計算機を含む。
例9は、トレーリングバイナリカウントは、第1トレーリングバイナリカウントであり、マスクベクトルは第1マスクベクトルであり、積は、第1の積であり、反復制御ベクトル生成器が更新された制御ベクトルのすべての要素が同一の二進値に対応していないと決定したとき、カウンタは、更新された制御ベクトルの第2トレーリングバイナリカウントを決定し、マスク生成器は、第2トレーリングバイナリカウントに対応する第2マスクベクトルを生成し、インタフェースは、第1ビットマップ及び第2マスクベクトルについての第4論理AND演算の第4結果に基づく第1スパースベクトルの第3の値にアクセスし、且つ第2ビットマップ及び第2マスクベクトルについての第5論理AND演算の第5結果に基づく第2スパースベクトルの第4の値にアクセスし、乗算器は、第3の値を第4の値と乗算し、第2の積を生成し、ドット積計算機は、第1の積を第2の積と合計する加算器をさらに備える、例7に記載のドット積計算機を含む。
例10は、差分ベクトルは、第1差分ベクトルであり、更新された制御ベクトルは、第1の更新された制御ベクトルであり、要素は第1要素であり、減算器は、更新された制御ベクトルの二進数変換したものから1を減算することにより、第2差分ベクトルを生成し、反復制御ベクトル生成器は、更新された制御ベクトル及び第2差分ベクトルについての論理AND演算に対応する第2の更新された制御ベクトルを生成し、インタフェースは、第2の更新された制御ベクトルのすべての第2要素が同一の二進値に対応するとき、第1の積と第2の積の和をドット積結果として出力する、例9に記載のドット積計算機を含む。
例11は、実行されたとき、機械に少なくとも、制御ベクトルのトレーリングバイナリカウントの決定であって、制御ベクトルは、第1スパースベクトルの第1ビットマップ及び第2スパースベクトルの第2ビットマップに対する第1論理AND演算の第1結果に対応する、決定をさせて、トレーリングバイナリカウントに基づいて、マスクベクトルを生成させて、(A)第1ビットマップ及びマスクベクトルについての第2論理AND演算の第2結果に基づく第1スパースベクトルの第1の値と、(B)第2ビットマップ及びマスクベクトルについての第3論理AND演算の第3結果に基づく第2ベクトルに対応する第2スパースベクトルの第2の値とを乗算させる命令を備える少なくとも1つの非一時的コンピュータ可読保存媒体を含む。
例12は、第1ビットマップは、第1ベクトルのゼロ値または非ゼロ値をそれぞれ特定し、第2ビットマップは、第2ベクトルのゼロ値または非ゼロ値をそれぞれ特定し、第1スパースベクトルは、第1密ベクトルの非ゼロ値に対応し、第2スパースベクトルは、第2密ベクトルの非ゼロ値に対応する、例11に記載のコンピュータ可読保存媒体を含む。
例13は、命令は、機械に、インプットとしての第1ビットマップ及び第2ビットマップに対する第1論理AND演算に基づいて、制御ベクトルを生成させる、例11に記載のコンピュータ可読保存媒体を含む。
例14は、命令は、機械に、最下位ビットに複数の第1二進値を含むマスクベクトルを生成させて、第1二進値の数はトレーリングバイナリカウントに対応し、マスクベクトルは第1ベクトルと同じ次元を持つ、例11に記載のコンピュータ可読保存媒体を含む。
例15は、命令は、機械に、第2結果内の二進値の第1の数を決定させて、二進値の第1の数に対応する第1アドレスに基づく第1の値にアクセスさせて、第3結果内の二進値の第2の数を決定させて、二進値の第2の数に対応する第2のアドレスに基づいて第2の値にアクセスさせる、例11に記載のコンピュータ可読保存媒体を含む。
例16は、命令は、機械に、第1の値及びと第2の値との積をローカルメモリに保存させる、例11に記載のコンピュータ可読保存媒体を含む。
例17は、命令は、機械に、制御ベクトルのバイナリビットに対応する値から1を減算することで差分ベクトルを生成させて、制御ベクトル及び差分ベクトルについての論理AND演算に対応する更新された制御ベクトルを生成させて、更新された制御ベクトルのすべての要素が同一の二進値に対応するかを決定させる例11に記載のコンピュータ可読保存媒体を含む。
例18は、命令は、機械に、更新された制御ベクトルのすべての要素が同一の二進値に対応するとき、第1の値及びと第2の値との積をドット積結果として出力させる、例17に記載のコンピュータ可読保存媒体を含む。
例19は、トレーリングバイナリカウントは、第1トレーリングバイナリカウントであり、マスクベクトルは第1マスクベクトルであり、積は第1の積であり、更新された制御ベクトルのすべての要素が同一の二進値に対応していないとき、命令は、機械に、更新された制御ベクトルの第2トレーリングバイナリカウントを決定させ、第2トレーリングバイナリカウントに対応する第2マスクベクトルを生成させ、第1ビットマップ及び第2マスクベクトルについての第4論理AND演算の第4結果に基づく第1スパースベクトルの第3の値にアクセスさせ、第2ビットマップ及び第2マスクベクトルについての第5論理AND演算の第5結果に基づく第2スパースベクトルの第4の値にアクセスさせ、第3の値を第4の値と乗算し、第2の積を生成させ、かつ、第1の積を第2の積と合計させる、例17に記載のコンピュータ可読保存媒体を含む。
例20は、差分ベクトルは第1差分ベクトルであり、更新された制御ベクトルは、第1の更新された制御ベクトルであり、要素は第1要素であり、命令が機械に、更新された制御ベクトルの二進数変換したものから1を減算することで、第2差分ベクトルを生成させ、更新された制御ベクトルと第2差分ベクトルとの間の論理AND関数に対応する第2の更新された制御ベクトルを生成させ、第2の更新された制御ベクトルのすべての第2要素が同一の二進値に対応するとき、第1の積と第2の積との合計をドット積結果として出力させる、例19に記載のコンピュータ可読保存媒体を含む。
例21は、2つのベクトル間のドット積を決定する方法であって、少なくとも1つの論理回路、制御ベクトルのトレーリングバイナリカウント、第1ベクトルの第1ビットマップ及び第2ベクトルの第2ビットマップに対する第1論理AND演算の第1結果に対応する制御ベクトルを決定する段階と、トレーリングバイナリカウントに対応するマスクベクトルを、少なくとも1つの論理回路を用いて、生成する段階と、第1ビットマップ及びマスクベクトルについての第2論理AND演算の第2結果に基づいて第1ベクトルに対応する第1スパースベクトルの第1の値にアクセスする段階と、第2ビットマップ及びマスクベクトルについての第3論理AND演算の第3結果に基づいて第2ベクトルに対応する第2スパースベクトルの第2の値にアクセスする段階と、第1の値と第2の値を、少なくとも1つの論理回路を用いて、乗算することで、積を生成する段階とを備える方法を含む。
例22は、第1ビットマップは、第1ベクトルの第1要素が、ゼロ値または非ゼロ値に相当するのかに対応して、第2ビットマップは、第2ベクトルの第2要素がゼロ値または非ゼロ値に相当するのかに対応して、第1スパースベクトルは、第1ベクトルの非ゼロ値に対応して、第2スパースベクトルは、第2ベクトルの非ゼロ値に対応する例21に記載の方法を含む。
例23は、インプットとしての第1ビットマップおよび第2ビットマップに対する第1論理AND演算に基づいて、制御ベクトルを生成する段階をさらに備える、例21に記載の方法を含む。
例24は、最下位ビットに複数の第1二進値を含むマスクベクトルを生成する段階であって、第1二進値の数は、トレーリングバイナリカウントに対応して、マスクベクトルは、第1ベクトルと同じ次元を有する、段階をさらに備える例21に記載の方法を含む。
例25は、第2結果内の二進値の第1の数を決定する段階と、二進値の第1の数に対応する第1アドレスに基づいて第1の値にアクセスする段階と、第3結果内の二進値の第2の数を決定する段階と、二進値の第2の数に対応する第2のアドレスに基づいて第2の値にアクセスする段階とをさらに備える例21に記載の方法を含む。
例26は、第1の値と第2の値との積をローカルメモリに保存する段階をさらに備える例21に記載の方法を含む。
例27は、制御ベクトルのバイナリビットに対応する値から1を減算することにより差分ベクトルを生成する段階と、制御ベクトルおよび差分ベクトルについての論理AND演算も対応する更新された制御ベクトルを生成する段階と、更新された制御ベクトルのすべての要素が同一の二進値に対応するかを決定する段階とをさらに備える例21に記載の方法を含む。
例28は、更新された制御ベクトルのすべて要素が、同一の二進値に対応するとき、第1の値と第2の値との積を、ドット積結果として出力する段階をさらに備える例27に記載の方法を含む。
例29は、トレーリングバイナリカウントは、第1トレーリングバイナリカウントであり、マスクベクトルは、第1マスクベクトルであり、積は、第1の積であり、更新された制御ベクトルのすべての要素が同一の二進値に対応していないとき、更新された制御ベクトルの第2トレーリングバイナリカウントを決定する段階と、第2トレーリングバイナリカウントに対応する第2マスクベクトルを生成する段階と、第1ビットマップおよび第2マスクベクトルについての第4論理AND演算の第4結果に基づく第1スパースベクトルの第3の値にアクセスする段階と、第2ビットマップおよび第2マスクベクトルについての第5論理AND演算の第5結果に基づく第2スパースベクトルの第4の値にアクセスする段階と、第3の値を第4の値と乗算し、第2の積を生成する段階と、第1の積を第2の積と合計する段階とをさらに備える例27に記載の方法を含む。
例30は、差分ベクトルは第1差分ベクトルであり、更新された制御ベクトルは第1の更新された制御ベクトルであり、要素は第1要素であり、更新された制御ベクトルの二進数変換したものから1を減算することで第2差分ベクトルを生成する段階と、更新された制御ベクトルおよび第2差分ベクトルについての論理AND演算に対応する第2の更新された制御ベクトルを生成する段階と、第2の更新された制御ベクトルのすべて第2要素が同一の二進値に対応するとき、第1の積と第2の積との和をドット積結果として出力する段階とをさらに備える例29に記載の方法を含む。
例31は、制御ベクトルのトレーリングバイナリカウントを決定するための第1手段であって、制御ベクトルは、第1スパースベクトルの第1ビットマップ及び第2スパースベクトルの第2ビットマップに対する第1論理AND演算の第1結果に対応する、第1手段と、トレーリングバイナリカウントに基づいてマスクベクトルを生成するための第2手段と、第3手段であって、第1ビットマップ及びマスクベクトルについての第2論理AND演算の第2結果に基づく第1スパースベクトルの第1の値にアクセスするため、および第2ビットマップおよびマスクベクトルについての第3論理AND演算の第3結果に基づく第2スパースベクトルの第2の値にアクセスするための第3手段と、第1の値と第2の値とを乗算して、積を生成するための第4手段とを備えるドット積計算機を含む。
例32は、第1ビットマップは、第1ベクトルの第1要素がそれぞれ、ゼロ値または非ゼロ値に相当するかを特定するためのものであり、第2ビットマップは、第2ベクトルの第2要素がそれぞれ、ゼロ値または非ゼロ値に相当するかを特定するためのものであり、第1スパースベクトルは、第1密ベクトルの非ゼロ値に対応し、第2スパースベクトルは、第2密ベクトルの非ゼロ値に対応する、例31に記載のドット積計算機を含む。
例33は、インプットとしての第1ビットマップおよび第2ビットマップに対する第1論理AND演算に基づく制御ベクトルを生成するための第5手段をさらに備える、例31に記載のドット積計算機を含む。
例34は、第2手段は、最下位ビットに複数の第1二進値を含むマスクベクトルを生成するための手段を含んで、第1二進値の数は、トレーリングバイナリカウントに対応しており、第2手段は、第1ベクトルと同じ次元を有するマスクベクトルを生成するための手段を含む、例31に記載のドット積計算機を含む。
例35は、第2結果内の二進値の第1の数の決定であり、第3手段は、二進値の第1の数に対応する第1アドレスに基づいて第1の値にアクセスするための手段を含む、決定と第3結果内の二進値の第2の数の決定であり、第3手段は、二進値の第2の数に対応する第2のアドレスに基づいて第2の値にアクセスするための手段を含む、決定とを行う第6手段をさらに備える、例31に記載のドット積計算機を含む。
例36は、積を保存する第7手段をさらに含む、例31に記載のドット積計算機を含む。
例37は、制御ベクトルのバイナリビットに対応する値から1を減算することにより差分ベクトルを生成するための第8手段と、制御ベクトル及び差分ベクトルについての論理AND演算に対応して更新された制御ベクトルを生成するため、且つ更新された制御ベクトルのすべての要素が同一の二進値に対応するかを決定するための、第9手段とをさらに備える、例31に記載のドット積計算機を含む。
例38は、反復制御ベクトル生成器が、更新された制御ベクトルのすべての要素が同一の二進値に対応すると決定したとき、第3手段は、積をドット積結果として出力するための手段を含む、例37に記載のドット積計算機を含む。
例39は、トレーリングバイナリカウントは、第1トレーリングバイナリカウントであり、マスクベクトルは第1マスクベクトルであり、積は、第1の積であり、反復制御ベクトル生成器が更新された制御ベクトルのすべての要素が同一の二進値に対応していないと決定したとき、第1手段は、更新された制御ベクトルの第2トレーリングバイナリカウントを決定するための手段を含み、第2手段は、第2トレーリングバイナリカウントに対応する第2マスクベクトルを生成するための手段を含み、第3手段は、第1ビットマップ及び第2マスクベクトルについての第4論理AND演算の第4結果に基づく第1スパースベクトルの第3の値にアクセスするための、および第2ビットマップ及び第2マスクベクトルについての第5論理AND演算の第5結果に基づく第2スパースベクトルの第4の値にアクセスするための手段を含み、第4手段は、第3の値を第4の値と乗算し、第2の積を生成するための手段を含み、ドット積計算機は、第1の積を第2の積と合計する加算器をさらに備える例37に記載のドット積計算機を含む。
例40は、差分ベクトルは、第1差分ベクトルであり、更新された制御ベクトルは、第1の更新された制御ベクトルであり、要素は第1要素であり、第8手段は、更新された制御ベクトルの二進数変換したものから1を減算することにより、第2差分ベクトルを生成するための手段を含み、第9手段は、更新された制御ベクトル及び第2差分ベクトルについての論理AND演算に対応する第2の更新された制御ベクトルを生成するための手段を含み、第3手段は、第2の更新された制御ベクトルのすべての第2要素が同一の二進値に対応するとき、第1の積と第2の積の和をドット積結果として出力するための手段を含む例39に記載のドット積計算機を含む。
特定の例の方法、装置および製造物品が本明細書において開示されているが、本特許の網羅する範囲はこれらに限定されない。むしろ、本特許は、本特許の請求項の範囲に公正に含まれるすべての方法、装置および製品を網羅する。

Claims (40)

  1. 制御ベクトルのトレーリングバイナリカウントを決定するカウンタであって、前記制御ベクトルは、第1スパースベクトルの第1ビットマップ及び第2スパースベクトルの第2ビットマップに対する第1論理AND演算の第1結果に対応する、カウンタと、
    前記トレーリングバイナリカウントに基づいてマスクベクトルを生成するマスク生成器と、
    インタフェースであって、
    前記第1ビットマップ及び前記マスクベクトルについての第2論理AND演算の第2結果に基づく前記第1スパースベクトルの第1の値にアクセスする、且つ
    前記第2ビットマップおよび前記マスクベクトルについての第3論理AND演算の第3結果に基づく前記第2スパースベクトルの第2の値にアクセスするインタフェースと、
    前記第1の値と前記第2の値とを乗算して、積を生成する乗算器と
    を備えるドット積計算機。
  2. 前記第1ビットマップは、第1ベクトルの第1要素がそれぞれ、ゼロ値または非ゼロ値に相当するかを特定するためのものであり、前記第2ビットマップは、第2ベクトルの第2要素がそれぞれ、ゼロ値または非ゼロ値に相当するかを特定するためのものであり、
    前記第1スパースベクトルは、第1密ベクトルの非ゼロ値に対応し、前記第2スパースベクトルは、第2密ベクトルの非ゼロ値に対応する
    請求項1に記載のドット積計算機。
  3. インプットとしての前記第1ビットマップおよび前記第2ビットマップについての前記第1論理AND演算に基づいて前記制御ベクトルを生成する論理ゲートをさらに備える、請求項1または2に記載のドット積計算機。
  4. 前記マスク生成器は、最下位ビットに複数の第1二進値を含む前記マスクベクトルを生成し、前記複数の第1二進値の数は、前記トレーリングバイナリカウントに対応しており、前記マスク生成器は、第1ベクトルと同じ次元を有する前記マスクベクトルを生成する、請求項1から3のいずれか一項に記載のドット積計算機。
  5. 前記第2結果内の二進値の第1の数の決定であって、前記インタフェースは、二進値の前記第1の数に対応する第1アドレスに基づいて前記第1の値にアクセスする、決定と、
    前記第3結果内の二進値の第2の数の決定であって、前記インタフェースは、二進値の前記第2の数に対応する第2のアドレスに基づいて前記第2の値にアクセスする、決定とを
    行う要素位置決定器をさらに備える、請求項1から4のいずれか一項に記載のドット積計算機。
  6. 前記積を保存するストレージをさらに含む、請求項1から5のいずれか一項に記載のドット積計算機。
  7. 前記制御ベクトルのバイナリビットに対応する値から1を減算することにより差分ベクトルを生成する減算器と、
    前記制御ベクトル及び前記差分ベクトルについての論理AND演算に対応して更新された制御ベクトルを生成し、且つ
    前記更新された制御ベクトルのすべての要素が同一の二進値に対応するかを決定する、
    反復制御ベクトル生成器と
    をさらに備える、請求項1から6のいずれか一項に記載のドット積計算機。
  8. 前記更新された制御ベクトルのすべての前記要素が前記同一の二進値に対応すると、前記反復制御ベクトル生成器が決定したとき、前記インタフェースは、前記積をドット積結果として出力する、請求項7に記載のドット積計算機。
  9. 前記トレーリングバイナリカウントは、第1トレーリングバイナリカウントであり、前記マスクベクトルは第1マスクベクトルであり、前記積は、第1の積であり、前記更新された制御ベクトルのすべての前記要素が前記同一の二進値に対応していないと、前記反復制御ベクトル生成器が決定したとき、
    前記カウンタは、前記更新された制御ベクトルの第2トレーリングバイナリカウントを決定し、
    前記マスク生成器は、前記第2トレーリングバイナリカウントに対応する第2マスクベクトルを生成し、
    前記インタフェースは、
    前記第1ビットマップ及び前記第2マスクベクトルについての第4論理AND演算の第4結果に基づく前記第1スパースベクトルの第3の値にアクセスし、且つ
    前記第2ビットマップ及び前記第2マスクベクトルについての第5論理AND演算の第5結果に基づく前記第2スパースベクトルの第4の値にアクセスし、
    前記乗算器は、前記第3の値を前記第4の値と乗算して、第2の積を生成し、前記ドット積計算機は、前記第1の積を前記第2の積と合計する加算器をさらに備える請求項7または8に記載のドット積計算機。
  10. 前記差分ベクトルは、第1差分ベクトルであり、前記更新された制御ベクトルは、第1の更新された制御ベクトルであり、前記要素は第1要素であり、
    前記減算器は、前記更新された制御ベクトルの二進数変換したものから1を減算することにより、第2差分ベクトルを生成し、
    前記反復制御ベクトル生成器は、前記更新された制御ベクトル及び前記第2差分ベクトルについての論理AND演算に対応する第2の更新された制御ベクトルを生成し、
    前記インタフェースは、前記第2の更新された制御ベクトルのすべての第2要素が前記同一の二進値に対応するとき、前記第1の積と前記第2の積の和をドット積結果として出力する
    請求項9に記載のドット積計算機。
  11. コンピュータに、
    実行されたとき、機械に少なくとも、制御ベクトルのトレーリングバイナリカウントを決定する手順であって、前記制御ベクトルは、第1スパースベクトルの第1ビットマップ及び第2スパースベクトルの第2ビットマップに対する第1論理AND演算の第1結果に対応する、手順と、
    前記トレーリングバイナリカウントに基づいて、マスクベクトルを生成する手順と、
    (A)前記第1ビットマップ及び前記マスクベクトルについての第2論理AND演算の第2結果に基づく前記第1スパースベクトルの第1の値と、(B)前記第2ビットマップ及び前記マスクベクトルについての第3論理AND演算の第3結果に基づく第2ベクトルに対応する前記第2スパースベクトルの第2の値とを乗算する手順と
    を実行させるためのプログラム。
  12. 前記第1ビットマップは、第1ベクトルのゼロ値または非ゼロ値をそれぞれ特定し、前記第2ビットマップは、前記第2ベクトルのゼロ値または非ゼロ値をそれぞれ特定し、
    前記第1スパースベクトルは、第1密ベクトルの非ゼロ値に対応し、前記第2スパースベクトルは、第2密ベクトルの非ゼロ値に対応する
    請求項11に記載のプログラム。
  13. 前記コンピュータに、インプットとしての第1ビットマップ及び前記第2ビットマップについての前記第1論理AND演算に基づいて、前記制御ベクトルを生成する手順を実行させる、請求項11または12に記載のプログラム。
  14. 前記コンピュータに、最下位ビットに複数の第1二進値を含む前記マスクベクトルを生成する手順を実行させ、前記複数の第1二進値の数は前記トレーリングバイナリカウントに対応し、前記マスクベクトルは第1ベクトルと同じ次元を持つ、請求項11から13のいずれか一項に記載のプログラム。
  15. 前記コンピュータに、
    前記第2結果内の二進値の第1の数を決定する手順と、
    二進値の前記第1の数に対応する第1アドレスに基づく前記第1の値にアクセスする手順と、
    前記第3結果内の二進値の第2の数を決定する手順と、
    二進値の前記第2の数に対応する第2のアドレスに基づいて前記第2の値にアクセスする手順と
    を実行させる、請求項11から14のいずれか一項に記載のプログラム。
  16. 前記コンピュータに、前記第1の値と前記第2の値との積をローカルメモリに保存する手順を実行させる、請求項11から15のいずれか一項に記載のプログラム。
  17. 前記コンピュータに、
    前記制御ベクトルのバイナリビットに対応する値から1を減算することで差分ベクトルを生成する手順と、
    前記制御ベクトル及び前記差分ベクトルについての論理AND演算に対応する更新された制御ベクトルを生成する手順と、
    前記更新された制御ベクトルのすべての要素が同一の二進値に対応するかを決定する手順と
    を実行させる、請求項11から16のいずれか一項に記載のプログラム。
  18. 前記コンピュータに、前記更新された制御ベクトルのすべての前記要素が前記同一の二進値に対応するとき、前記第1の値と前記第2の値との積をドット積結果として出力する手順を実行させる、請求項17に記載のプログラム。
  19. 前記トレーリングバイナリカウントは、第1トレーリングバイナリカウントであり、前記マスクベクトルは第1マスクベクトルであり、積は第1の積であり、前記更新された制御ベクトルのすべての前記要素が前記同一の二進値に対応していないとき、前記コンピュータに、
    前記更新された制御ベクトルの第2トレーリングバイナリカウントを決定する手順と、
    前記第2トレーリングバイナリカウントに対応する第2マスクベクトルを生成する手順と、
    前記第1ビットマップ及び前記第2マスクベクトルについての第4論理AND演算の第4結果に基づく前記第1スパースベクトルの第3の値にアクセスする手順と、
    前記第2ビットマップ及び前記第2マスクベクトルについての第5論理AND演算の第5結果に基づく前記第2スパースベクトルの第4の値にアクセスする手順と、
    前記第3の値を前記第4の値と乗算して、第2の積を生成する手順と、
    前記第1の積を前記第2の積と合計する手順と
    を実行させる、請求項17または18に記載のプログラム。
  20. 前記差分ベクトルは第1差分ベクトルであり、前記更新された制御ベクトルは、第1の更新された制御ベクトルであり、前記要素は第1要素であり、前記コンピュータに、
    前記更新された制御ベクトルの二進数変換したものから1を減算することで、第2差分ベクトルを生成する手順と、
    前記更新された制御ベクトルと前記第2差分ベクトルとの間の論理AND関数に対応する第2の更新された制御ベクトルを生成する手順と、
    前記第2の更新された制御ベクトルのすべての第2要素が前記同一の二進値に対応するとき、前記第1の積と前記第2の積との和をドット積結果として出力する手順と
    を実行させる、請求項19に記載のプログラム。
  21. 2つのベクトル間のドット積を決定する方法であって、
    少なくとも1つの論理回路、制御ベクトルのトレーリングバイナリカウント、第1ベクトルの第1ビットマップ及び第2ベクトルの第2ビットマップに対する第1論理AND演算の第1結果に対応する前記制御ベクトルを決定する段階と、
    前記トレーリングバイナリカウントに対応するマスクベクトルを、前記少なくとも1つの論理回路を用いて、生成する段階と、
    前記第1ビットマップ及び前記マスクベクトルについての第2論理AND演算の第2結果に基づいて前記第1ベクトルに対応する第1スパースベクトルの第1の値にアクセスする段階と、
    前記第2ビットマップ及び前記マスクベクトルについての第3論理AND演算の第3結果に基づいて前記第2ベクトルに対応する第2スパースベクトルの第2の値にアクセスする段階と
    前記第1の値と前記第2の値を、前記少なくとも1つの論理回路を用いて、乗算することで、積を生成する段階と
    を備える方法。
  22. 前記第1ビットマップは、前記第1ベクトルの第1要素が、ゼロ値または非ゼロ値に相当するのかに対応して、前記第2ビットマップは、前記第2ベクトルの第2要素がゼロ値または非ゼロ値に相当するのかに対応し、
    前記第1スパースベクトルは、前記第1ベクトルの非ゼロ値に対応し、前記第2スパースベクトルは、前記第2ベクトルの非ゼロ値に対応する
    請求項21に記載の方法。
  23. インプットとしての第1ビットマップおよび前記第2ビットマップについての前記第1論理AND演算に基づいて、前記制御ベクトルを生成する段階をさらに備える、請求項21または22に記載の方法。
  24. 最下位ビットに複数の第1二進値を含む前記マスクベクトルを生成する段階であって、前記複数の第1二進値の数は、前記トレーリングバイナリカウントに対応し、前記マスクベクトルは、前記第1ベクトルと同じ次元を有する、段階をさらに備える請求項21から23のいずれか一項に記載の方法。
  25. 前記第2結果内の二進値の第1の数を決定する段階と、
    二進値の前記第1の数に対応する第1アドレスに基づいて前記第1の値にアクセスする段階と、
    前記第3結果内の二進値の第2の数を決定する段階と、
    二進値の前記第2の数に対応する第2のアドレスに基づいて前記第2の値にアクセスする段階と
    をさらに備える請求項21から24のいずれか一項に記載の方法。
  26. 前記第1の値と前記第2の値との前記積をローカルメモリに保存する段階をさらに備える請求項21から25のいずれか一項に記載の方法。
  27. 前記制御ベクトルのバイナリビットに対応する値から1を減算することにより差分ベクトルを生成する段階と、
    前記制御ベクトルおよび前記差分ベクトルについての論理AND演算も対応する更新された制御ベクトルを生成する段階と、
    前記更新された制御ベクトルのすべての要素が同一の二進値に対応するかを決定する段階と
    をさらに備える請求項21から26のいずれか一項に記載の方法。
  28. 前記更新された制御ベクトルのすべて前記要素が、前記同一の二進値に対応するとき、前記第1の値と前記第2の値との前記積を、ドット積結果として出力する段階をさらに備える請求項27に記載の方法。
  29. 前記トレーリングバイナリカウントは、第1トレーリングバイナリカウントであり、前記マスクベクトルは、第1マスクベクトルであり、前記積は、第1の積であり、前記更新された制御ベクトルのすべての前記要素が前記同一の二進値に対応していないとき、
    前記更新された制御ベクトルの第2トレーリングバイナリカウントを決定する段階と、
    前記第2トレーリングバイナリカウントに対応する第2マスクベクトルを生成する段階と、
    前記第1ビットマップおよび前記第2マスクベクトルについての第4論理AND演算の第4結果に基づく前記第1スパースベクトルの第3の値にアクセスする段階と、
    前記第2ビットマップおよび前記第2マスクベクトルについての第5論理AND演算の第5結果に基づく前記第2スパースベクトルの第4の値にアクセスする段階と、
    前記第3の値を前記第4の値と乗算して、第2の積を生成する段階と、
    前記第1の積を前記第2の積と合計する段階と
    をさらに備える請求項27または28に記載の方法。
  30. 前記差分ベクトルは第1差分ベクトルであり、前記更新された制御ベクトルは第1の更新された制御ベクトルであり、前記要素は第1要素であり、
    前記更新された制御ベクトルの二進数変換したものから1を減算することで第2差分ベクトルを生成する段階と、
    前記更新された制御ベクトルおよび前記第2差分ベクトルについての論理AND演算に対応する第2の更新された制御ベクトルを生成する段階と、
    前記第2の更新された制御ベクトルのすべて第2要素が前記同一の二進値に対応するとき、前記第1の積と前記第2の積との和をドット積結果として出力する段階と
    をさらに備える請求項29に記載の方法。
  31. 制御ベクトルのトレーリングバイナリカウントを決定するための第1手段であって、前記制御ベクトルは、第1スパースベクトルの第1ビットマップ及び第2スパースベクトルの第2ビットマップに対する第1論理AND演算の第1結果に対応する、第1手段と、
    前記トレーリングバイナリカウントに基づいてマスクベクトルを生成するための第2手段と、
    第3手段であって、
    前記第1ビットマップ及び前記マスクベクトルについての第2論理AND演算の第2結果に基づく前記第1スパースベクトルの第1の値にアクセスするため、および
    前記第2ビットマップおよび前記マスクベクトルについての第3論理AND演算の第3結果に基づく前記第2スパースベクトルの第2の値にアクセスするための第3手段と、
    前記第1の値と前記第2の値とを乗算して、積を生成するための第4手段と
    を備えるドット積計算機。
  32. 前記第1ビットマップは、第1ベクトルの第1要素がそれぞれ、ゼロ値または非ゼロ値に相当するかを特定するためのものであり、前記第2ビットマップは、第2ベクトルの第2要素がそれぞれ、ゼロ値または非ゼロ値に相当するかを特定するためのものであり、
    前記第1スパースベクトルは、第1密ベクトルの非ゼロ値に対応し、前記第2スパースベクトルは、第2密ベクトルの非ゼロ値に対応する
    請求項31に記載のドット積計算機。
  33. インプットとしての前記第1ビットマップおよび前記第2ビットマップについての前記第1論理AND演算に基づく前記制御ベクトルを生成するための第5手段をさらに備える、請求項31または32に記載のドット積計算機。
  34. 前記第2手段は、最下位ビットに複数の第1二進値を含む前記マスクベクトルを生成するための手段を含んで、前記複数の第1二進値の数は、前記トレーリングバイナリカウントに対応しており、前記第2手段は、第1ベクトルと同じ次元を有する前記マスクベクトルを生成するための手段を含む、請求項31から33のいずれか一項に記載のドット積計算機。
  35. 前記第2結果内の二進値の第1の数の決定であって、前記第3手段は、二進値の前記第1の数に対応する第1アドレスに基づいて前記第1の値にアクセスするための手段を含む、決定と、
    前記第3結果内の二進値の第2の数の決定であって、前記第3手段は、二進値の前記第2の数に対応する第2のアドレスに基づいて前記第2の値にアクセスするための手段を含む、決定と
    を行う第6手段をさらに備える、請求項31から34のいずれか一項に記載のドット積計算機。
  36. 前記積を保存する第7手段をさらに含む、請求項31から35のいずれか一項に記載のドット積計算機。
  37. 前記制御ベクトルのバイナリビットに対応する値から1を減算することにより差分ベクトルを生成するための第8手段と、
    前記制御ベクトル及び前記差分ベクトルについての論理AND演算に対応して更新された制御ベクトルを生成するため、且つ
    前記更新された制御ベクトルのすべての要素が同一の二進値に対応するかを決定するための、
    第9手段と
    をさらに備える、請求項31から36のいずれか一項に記載のドット積計算機。
  38. 反復制御ベクトル生成器が、前記更新された制御ベクトルのすべての前記要素が前記同一の二進値に対応すると決定したとき、前記第3手段は、前記積をドット積結果として出力するための手段を含む、請求項37に記載のドット積計算機。
  39. 前記トレーリングバイナリカウントは、第1トレーリングバイナリカウントであって、前記マスクベクトルは第1マスクベクトルであって、前記積は、第1の積であって、反復制御ベクトル生成器が前記更新された制御ベクトルのすべての前記要素が前記同一の二進値に対応していないと決定したとき、
    前記第1手段は、前記更新された制御ベクトルの第2トレーリングバイナリカウントを決定するための手段を含み、
    前記第2手段は、前記第2トレーリングバイナリカウントに対応する第2マスクベクトルを生成するための手段を含み、
    前記第3手段は、
    前記第1ビットマップ及び前記第2マスクベクトルについての第4論理AND演算の第4結果に基づく前記第1スパースベクトルの第3の値にアクセスするための、および
    前記第2ビットマップ及び前記第2マスクベクトルについての第5論理AND演算の第5結果に基づく前記第2スパースベクトルの第4の値にアクセスするための手段を含み、
    前記第4手段は、前記第3の値を前記第4の値と乗算して、第2の積を生成するための手段を含み、前記ドット積計算機は、
    前記第1の積を前記第2の積と合計する加算器をさらに備える
    請求項37または38に記載のドット積計算機。
  40. 前記差分ベクトルは、第1差分ベクトルであり、前記更新された制御ベクトルは、第1の更新された制御ベクトルであり、前記要素は第1要素であり、
    前記第8手段は、前記更新された制御ベクトルの二進数変換したものから1を減算することにより、第2差分ベクトルを生成するための手段を含み、
    前記第9手段は、前記更新された制御ベクトル及び前記第2差分ベクトルについての論理AND演算に対応する第2の更新された制御ベクトルを生成するための手段を含み、
    前記第3手段は、前記第2の更新された制御ベクトルのすべての第2要素が前記同一の二進値に対応するとき、前記第1の積と前記第2の積の和をドット積結果として出力するための手段を含む
    請求項39に記載のドット積計算機。
JP2021523664A 2018-11-08 2019-11-04 ドット積計算機およびその演算方法 Ceased JP2022506345A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/184,985 2018-11-08
US16/184,985 US10768895B2 (en) 2018-11-08 2018-11-08 Dot product calculators and methods of operating the same
PCT/EP2019/080136 WO2020094586A1 (en) 2018-11-08 2019-11-04 Dot product calculators and methods of operating the same

Publications (2)

Publication Number Publication Date
JP2022506345A true JP2022506345A (ja) 2022-01-17
JPWO2020094586A5 JPWO2020094586A5 (ja) 2022-10-20

Family

ID=68461801

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021523664A Ceased JP2022506345A (ja) 2018-11-08 2019-11-04 ドット積計算機およびその演算方法

Country Status (7)

Country Link
US (3) US10768895B2 (ja)
EP (1) EP3877839A1 (ja)
JP (1) JP2022506345A (ja)
KR (1) KR20210092751A (ja)
CN (1) CN113330421B (ja)
DE (1) DE112019005586T5 (ja)
WO (1) WO2020094586A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018182445A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Method and apparatus for converting scatter control elements to gather control elements used to sort vector data elements
WO2019000300A1 (zh) * 2017-06-29 2019-01-03 北京清影机器视觉技术有限公司 二维数据匹配方法、装置和逻辑电路
US10768895B2 (en) 2018-11-08 2020-09-08 Movidius Limited Dot product calculators and methods of operating the same
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
EP3938888A1 (en) * 2019-03-15 2022-01-19 INTEL Corporation Systolic disaggregation within a matrix accelerator architecture
WO2020190802A1 (en) 2019-03-15 2020-09-24 Intel Corporation Compression techniques
US20200302282A1 (en) * 2019-03-19 2020-09-24 Cirrus Logic International Semiconductor Ltd. Neurons for artificial neural networks
US11741349B2 (en) * 2019-10-31 2023-08-29 Arm Limited Performing matrix-vector multiply operations for neural networks on electronic devices
US11500680B2 (en) * 2020-04-24 2022-11-15 Alibaba Group Holding Limited Systolic array-friendly data placement and control based on masked write
US11789646B2 (en) 2021-09-24 2023-10-17 Intel Corporation Methods, apparatus, and articles of manufacture to increase data reuse for multiply and accumulate (MAC) operations
US11669489B2 (en) * 2021-09-30 2023-06-06 International Business Machines Corporation Sparse systolic array design

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62233884A (ja) * 1986-04-04 1987-10-14 Hitachi Ltd ベクトル・プロセツサ
JP2011511986A (ja) * 2008-02-11 2011-04-14 リニア アルジェブラ テクノロジーズ リミテッド プロセッサ
WO2018080624A1 (en) * 2016-10-27 2018-05-03 Google Llc Exploiting input data sparsity in neural network compute units

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US20160358069A1 (en) * 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
US10223359B2 (en) * 2016-10-10 2019-03-05 The Directv Group, Inc. Determining recommended media programming from sparse consumption data
US20180189675A1 (en) * 2016-12-31 2018-07-05 Intel Corporation Hardware accelerator architecture and template for web-scale k-means clustering
US10146738B2 (en) * 2016-12-31 2018-12-04 Intel Corporation Hardware accelerator architecture for processing very-sparse and hyper-sparse matrix data
US10096134B2 (en) * 2017-02-01 2018-10-09 Nvidia Corporation Data compaction and memory bandwidth reduction for sparse neural networks
US10171084B2 (en) * 2017-04-24 2019-01-01 The Regents Of The University Of Michigan Sparse coding with Memristor networks
US20180330235A1 (en) * 2017-05-15 2018-11-15 National Taiwan University Apparatus and Method of Using Dual Indexing in Input Neurons and Corresponding Weights of Sparse Neural Network
TWI684141B (zh) 2017-10-12 2020-02-01 英屬開曼群島商意騰科技股份有限公司 人工神經元中以非零封包加速乘法運算的裝置及方法
KR20190106010A (ko) * 2018-03-07 2019-09-18 삼성전자주식회사 전자 장치 및 머신 러닝 수행 방법
US10768895B2 (en) 2018-11-08 2020-09-08 Movidius Limited Dot product calculators and methods of operating the same

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62233884A (ja) * 1986-04-04 1987-10-14 Hitachi Ltd ベクトル・プロセツサ
JP2011511986A (ja) * 2008-02-11 2011-04-14 リニア アルジェブラ テクノロジーズ リミテッド プロセッサ
WO2018080624A1 (en) * 2016-10-27 2018-05-03 Google Llc Exploiting input data sparsity in neural network compute units

Also Published As

Publication number Publication date
US11023206B2 (en) 2021-06-01
US20210247961A1 (en) 2021-08-12
US20200387350A1 (en) 2020-12-10
WO2020094586A1 (en) 2020-05-14
US20200150926A1 (en) 2020-05-14
CN113330421B (zh) 2024-01-16
CN113330421A (zh) 2021-08-31
US11656845B2 (en) 2023-05-23
KR20210092751A (ko) 2021-07-26
DE112019005586T5 (de) 2021-12-16
EP3877839A1 (en) 2021-09-15
US10768895B2 (en) 2020-09-08

Similar Documents

Publication Publication Date Title
JP2022506345A (ja) ドット積計算機およびその演算方法
US20200364552A1 (en) Quantization method of improving the model inference accuracy
CN108229648B (zh) 匹配存储器中数据位宽的卷积计算方法和装置、设备、介质
US10268451B2 (en) Method and processing apparatus for performing arithmetic operation
CN109521994B (zh) 乘法硬件电路、片上系统及电子设备
JP2019102084A (ja) ニューラルネットワークにおいてコンボリューション演算を処理する方法及びその装置
TW202207052A (zh) 用以解碼零值壓縮資料向量之方法、系統、製造物品及設備
TW201737115A (zh) 一種機器學習系統的訓練方法和訓練系統
US8681166B1 (en) System and method for efficient resource management of a signal flow programmed digital signal processor code
WO2019215907A1 (ja) 演算処理装置
WO2022126116A1 (en) Data-type-aware clock-gating
TWI775210B (zh) 用於卷積運算的資料劃分方法及處理器
CN111033462A (zh) 在基于处理器的系统中使用矩阵处理器提供高效浮点运算
JP2022512211A (ja) 画像処理方法、装置、車載演算プラットフォーム、電子機器及びシステム
US11256940B1 (en) Method, apparatus and system for gradient updating of image processing model
TW202333041A (zh) 執行浮點運算的系統及方法
US20220318604A1 (en) Sparse machine learning acceleration
CN115480731A (zh) 运算方法、装置、芯片、设备和介质
CN114254563A (zh) 数据处理方法及装置、电子设备、存储介质
CN114356494A (zh) 一种神经网络模拟器的数据处理方法、装置和终端
KR20210152957A (ko) 신경망을 위한 향상된 곱셈 누산 디바이스
CN108229668B (zh) 基于深度学习的运算实现方法、装置和电子设备
EP3923132A1 (en) Device for performing multiply/accumulate operations
CN116402090B (zh) 神经网络计算图的处理方法、装置和设备
CN113642712B (zh) 一种基于深度学习的点云数据处理器及方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221012

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20221012

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230726

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230808

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231026

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20240123

A045 Written measure of dismissal of application [lapsed due to lack of payment]

Free format text: JAPANESE INTERMEDIATE CODE: A045

Effective date: 20240528