JP2023160833A - Simd命令を用いた効率的な直接畳み込み - Google Patents
Simd命令を用いた効率的な直接畳み込み Download PDFInfo
- Publication number
- JP2023160833A JP2023160833A JP2023132932A JP2023132932A JP2023160833A JP 2023160833 A JP2023160833 A JP 2023160833A JP 2023132932 A JP2023132932 A JP 2023132932A JP 2023132932 A JP2023132932 A JP 2023132932A JP 2023160833 A JP2023160833 A JP 2023160833A
- Authority
- JP
- Japan
- Prior art keywords
- vector
- source
- source vector
- output
- data
- 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
- 239000013598 vector Substances 0.000 claims abstract description 612
- 238000000034 method Methods 0.000 claims abstract description 52
- 238000000605 extraction Methods 0.000 claims description 9
- 238000013527 convolutional neural network Methods 0.000 claims description 4
- 238000001914 filtration Methods 0.000 abstract description 2
- 230000015654 memory Effects 0.000 description 32
- 238000004364 calculation method Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 14
- 238000013459 approach Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 10
- 238000013528 artificial neural network Methods 0.000 description 9
- 238000010801 machine learning Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Images
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/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
-
- 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
- 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/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- 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
- 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/045—Combinations of 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/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
- 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)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Neurology (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
【課題】畳み込み演算を用いた信号をフィルタリングするためのシステムおよび方法【解決手段】ベクトル命令を提供する1つ以上のプロセッサを含むコンピュータが、ソースデータセット上に直接畳み込みを実装してもよい。ソースデータセットが、1次元または多次元であり得る。ベクトル命令の所与のベクトル幅wに対して、出力データセットのw個の連続データ要素が、ベクトル命令を用いて並列に計算される。多次元データセットに対して、出力データセットの複数のベクトルが、ソースデータセットからのベクトルセットの単一ロードに対して計算される。畳み込みの性能を改善し、1つ以上のプロセッサ内の算術論理ユニットの完全な利用を可能にする新しいベクトル命令が開示される。【選択図】図9
Description
本開示は、一般に、デジタル信号処理、機械学習およびニューラルネットワークに関し、より詳細には、畳み込み演算を用いた信号をフィルタリングするためのシステムおよび方法に関する。
デジタル信号処理では、畳み込みは、出力データセットの出力値を生成するデータセット内の入力値とその直近隣接値の重み付け和である。これらのデータセットが、入力値の直近隣接する値を決定する対応するデータ構成を備えた1次元または多次元であってもよい。畳み込みの重み付け値は、カーネルが入出力データセットと同じ次元数を有する畳み込みカーネルで指定される。畳み込み演算は、非常に多様な信号処理アプリケーションにおいて有用であり、ディープニューラルネットワークの多くの態様の演算に不可欠である。
畳み込みが、機械学習アプリケーションで広く使用されることがある。この文脈では、多くの小さな畳み込みカーネルを用いて単一のデータセットに畳み込みを適用することが一般的である。その結果、畳み込みは、機械学習アプリケーションの計算集約的な部分であることが多く、畳み込み演算を実行する効率的な手段が、ますます大きな価値を有する。
畳み込み効率を改善するための一般的なアプローチの1つである畳み込み低下は、畳み込み演算を、最適化された高密度線形代数によって解くことができる等価計算プロセスに変換することを伴う。これは、データの固有再利用を活用し、オフチップ帯域幅の必要性を最小化し、多くのコアに分散できる計算を細分化することに熟達した、最適化されたGEMM(General Matrix Multiply)ルーチンの使用を可能にする。また、このアプローチには、畳み込み低下は、追加のプロセッサオーバヘッドを増加させ、データサイズを著しく増加させるという重大な欠点がある。データサイズの増加は、キャッシュを困難にし、オフチップ帯域幅の使用を増加させ、キャッシングおよび従来のメモリ技術の代わりに、高価で高性能なメモリを好むソリューションをもたらす。
第2のアプローチは、周波数領域における畳み込みを実行することである。これには、入力データセットと畳み込みカーネルをそれぞれ周波数ドメインに変換し、2つの変換データセットを乗算し、積に逆周波数変換を適用する必要があります。このアプローチは、畳み込み低下と同様の利点と欠点を提供し、乗算演算が再びGEMMルーチンによって実装され得るが、追加の計算オーバーヘッドが追加され、メモリフットプリントが、小さなカーネルサイズに対して劇的に増加することがある。多くの小さなカーネルが使用される機械学習アプリケーションでは、多くの小さなカーネルを周波数ドメインに変換する必要があるため、周波数ドメインにおける畳み込みは魅力的ではない。
一般に「直接畳み込み」と呼ばれる第3のアプローチは、畳み込みフィルタを時間または空間領域においてデータに直接適用する。このアプローチは、以前のアプローチの追加的な計算オーバーヘッドおよびメモリの増加を回避するが、プロセッサ利用率がはるかに低いこと、再利用の並列性および利用が少ないこと、または、畳み込みを解くことのみの専用のハードウェアに悩まされる。典型的には、このようなハードウェアは、従来のハードウェアの既存の資源を活用せず、所与のディープニューラルネットワークのためにプログラムし最適化することが重要である。
ベクトル命令を提供する中央処理装置(CPU)を用いて効率的な直接畳み込み演算を提供するための方法およびシステムについて説明する。効率的な直接畳み込み演算は、畳み込み演算がかなりのメモリ帯域幅と計算資源を必要とし得る機械学習とディープニューラルネットワークアプリケーションにおいて有用である。これらの畳み込みアプリケーションは、一般に、より小さな畳み込みカーネルサイズを使用することによって特徴づけられ、ここで、直接畳み込みアプローチは、そうでなければ、メモリバンド幅が制約される。本明細書に開示されたアプローチを用いてメインCPUに直接畳み込みを実装することによって、システムが専用ハードウェアアクセラレータまたは汎用GPU(GPGPU)ソリューションの必要性を回避することができ、従って、これらのアプリケーションにおいてより良好な性能スケーリングを可能にする一方で、機械学習アプリケーションにおいて典型的に使用されるより小さいカーネルサイズにおけるキャッシュおよびメモリ帯域幅だけでなく、計算資源を十分に利用することができる。
ハードウェアにおけるデータレベルの並列性を増加させるために、プロセッサが、SIMD(Single Instruction Multiple Data)マイクロアーキテクチャのように、実行される各命令に対して並列実行レーンを提供するベクトル命令を含んでもよい。このタイプのマイクロアーキテクチャが、単一レーンまたは汎用マイクロアーキテクチャよりも、特定の用途に対してより高いスループットを提供することができる。汎用マイクロアーキテクチャはレジスタに含まれる単一レーンのデータで動作するが、SIMDマイクロアーキテクチャは複数レーンの独立したデータで構成されるベクトルに含まれるデータに作用する。
いくつかの実施形態では、複数のSIMDソースベクトルがロードされ、1つのソースベクトルは計算される宛先ベクトルと整列し、1つ以上のソースベクトルは、宛先ベクトルに関して左部分データを含む、1つ以上のソースベクトルは、宛先ベクトルに関して右部分データを含む。これらのソースベクトルの各々は、それぞれの畳み込み係数ベクトルと乗算され、アキュムレータベクトルに加算される。すべてのソースベクトルが処理されると、アキュムレータベクトルは宛先ベクトルに書き込まれる。
いくつかの実施形態において、行われる畳み込みが、多次元畳み込みであってもよい。これらの実施形態では、複数のアキュムレータベクトルが、同じロードされたソースベクトルを用いて同時に計算されてもよい。種々のソースベクトルが、畳み込みカーネルの他の次元に対応する他の畳み込み係数ベクトルと乗算されてもよく、複数のアキュムレータベクトルが、所与の宛先ベクトルに対するすべてのソースベクトルが処理されるまで、書き込まれなくてもよい。
いくつかの実施形態において、SIMD命令が、整列されていないSIMDベクトルを一対の整列SIMDベクトルから抽出するために提供されてもよい。これらの実施形態では、整列ソースベクトルおよび複数のシフトされたソースベクトルが、共通のデータソースからロードされてもよい。
いくつかの実施形態において、SIMD命令が、データベクトルの各レーンにスカラー量が乗算され、ベースベクトルの各レーンに加算されるSIMDスカラー多重加算演算を実行するために提供されてもよい。
いくつかの実施形態では、畳み込み演算が、インターリーブ前のソースデータを用いて部分解像度の出力データセットを計算することによって、複数の入力データセットについて同時に実行されてもよい。これらの実施形態において、部分解像度出力データベクトルを抽出するために、計算されたデータベクトルについてインターレース解除演算を行うために、SIMD命令が提供されてもよい。
開示された種々の実施形態は、従来メモリ帯域幅によって制限されていた演算から、キャッシュおよびメモリサブシステムの計算資源および帯域幅を十分に利用するものに直接畳み込みの計算を変換するが、メインCPUのみを必要とし、これらの実施形態は、特に直接畳み込み計算に適しているが、これらの実施形態が、例えば、一般的な並列トラバーサル技術など、種々の計算タスクにより一般的に適用してもよいことに留意されたい。
本開示は、いくつかの実施形態および例示的な図面について例として本明細書に記載されているが、当業者は、本開示が記載された実施形態または図面に限定されないことを認識するであろう。本明細書の図面および詳細な説明は、開示された特定の形態に本開示を限定することを意図するものではなく、むしろ、本開示は、添付の特許請求の範囲によって定義される精神および範囲内にあるすべての修正、等価および代替をカバーするものであることを理解されたい。本明細書において使用されるいかなる見出しも、構成目的のためのものに過ぎず、明細書または特許請求の範囲を限定することを意図するものではない。本明細書中で使用される場合、用語「may」は、必須の意味(すなわち、意味しなければならない)ではなく、許容的な意味(すなわち、可能性を有することを意味する)で使用され、同様に、用語「include」、「including」および「includes」は、含むことを意味するが、これらに限定されない。
種々のユニット、回路、または他の構成要素が、タスクまたは複数のタスクを行うように「構成されている」と記載されてもよい。このような文脈において、「構成されている」とは、一般に、動作中にタスクまたは複数のタスクを行う「回路を有する」ことを意味する構造の広義の規定である。したがって、ユニット/回路/構成要素は、ユニット/回路/構成要素が現在オンになっていない場合でもタスクを実行するように構成されていることができる。一般に、「構成されている」に対応する構造を形成する回路が、ハードウェア回路を含んでもよい。同様に、様々なユニット/回路/構成要素が、説明の便宜上、タスクまたは複数のタスクを行うものとして記載されてもよい。このような記載は、「構成されている」という表現を含むものと解釈されるべきである。1つ以上のタスクを実行するように構成されているユニット/回路/構成要素を規定することは、そのユニット/回路/構成要素についての35U.S.C§112(f)の解釈を呼び出さないことを明確に意図している。
本明細書は、「一実施形態」または「ある実施形態」への言及を含む。「一実施形態において」または「一実施形態において」という表現が現れても、必ずしも同一の実施形態を指すものではないが、本明細書において明示的に否認されない限り、特徴の任意の組み合わせを含む実施形態が一般的に企図される。特定の特徴、構造、または特性が、本開示と矛盾しない任意の適切な方法で組み合わせられてもよい。
ディープニューラルネットワークは、大規模なデータセットと共に広範な一般的問題を解く際にますます重要になってきている。しかしながら、これらのネットワークは、ニューロンの重み付けを更新するために、トレーニングフェーズの間、パス当たり2倍以上の処理時間を有するかなりの量の処理時間を、畳み込みおよびマトリックス乗算に費やす。ゆっくりと収束するネットワークでは、さらに多数のパスが必要になることがある。その結果、効率的な畳み込み計算がますます重要になっている。
ベクトル命令を提供する中央処理装置(CPU)を用いて効率的な直接畳み込み演算を提供するための方法およびシステムが記載される。効率的な直接畳込み演算は、ディープニューラルネットワークアプリケーションおよび畳込み演算がかなりの計算資源を必要とする他のアプリケーションにおいて有用である。メインCPUに畳み込みを実装することにより、システムが、専用ハードウェアアクセラレータまたは汎用GPU(GPGPU)ソリューションの必要性を回避することができ、従って、畳み込みニューラルネットワークアプリケーションにおいてより良好な性能スケーリングを可能にする。
図1は、コンピュータシステムの一実施形態のブロック図を提供する。コンピュータシステム100は、IOバス130に取り付けられたプロセッサ110、メモリ120、およびマスストレージデバイス140を含む。プロセッサ110は、キャッシュ116に結合された、レジスタファイル114を含む実行コア112を含む。特定の構成要素がコンピュータシステム100に示され記載されているが、代替的な実施形態では、異なる構成要素および異なるの数の構成要素が存在してもよいことに留意されたい。例えば、コンピュータシステム100がマスストレージデバイス140を含まなくてもよく、プロセッサ110に類似の複数のプロセッサが含まれてもよい。追加的に、単一のキャッシュ116がプロセッサ110の内部に示されているが、プロセッサ110の内部および外部の両方の複数のレベルを含む階層的キャッシュが存在してもよい。コンピュータシステム100がまた、グラフィックス・プロセッサ、ユーザ・インターフェース・デバイス、ネットワーク・カード、および/またはIOバス130、ネットワーク、または他の通信チャネルを用いてプロセッサ110に結合される他の周辺デバイスを含んでもよい。
様々な実施形態では、プロセッサ110が、計算演算を実行する汎用プロセッサを代表するものであってもよい。例えば、プロセッサ110が、マイクロプロセッサ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)などの中央処理装置(CPU)であってもよい。プロセッサ110が、スタンドアロン構成要素であってもよく、もしくは他の構成要素(例えば、他のプロセッサ、システムオンチップの他の構成要素(SOC)もしくはFPGA)と一体化されてもよく、または他の構成要素とマルチチップモジュール(MCM)内の構成要素であってもよい。プロセッサ110が、ベクトル処理のための1つ以上のメカニズム(例えば、ベクトル実行ユニット)を含んでもよい。
図1に示すように、プロセッサ110が、実行コア112を含んでもよい。実行コア112が、プロセッサ110によって実装される命令セットアーキテクチャに定義された命令を実行するように構成されてもよい。実行コア112が、所望により、様々なマイクロアーキテクチャの特徴および実装の特徴を有してもよい。例えば、実行コア112が、スーパースカラーまたはスカラー実装を含んでもよい。実行コア112が、順序通りまたは順序外れの実装、および投機的または非投機的実装を含んでもよい。実行コア112が、上記特徴の任意の組み合わせを含んでもよい。実装が、いくつかの実施形態においてマイクロコードを含んでもよい。実行コア112がまた、各々が様々な種類(例えば、整数、浮動小数点、ベクトル、マルチメディア、ロード/記憶など)の演算を実行するように構成されている様々な実行ユニットを含んでもよい。実行コア112が、異なる数のパイプライン段階および分岐予測のような種々の他の性能向上機能を含んでもよい。実行コア112が、命令デコードユニット、スケジューラまたは予約ステーション、リオーダバッファ、メモリ管理ユニット、I/Oインターフェースなどのうちの1つ以上を含んでもよい。
レジスタファイル114が、種々の命令のためのオペランドを記憶するために使用され得るレジスタセットを含み得る。レジスタファイル114が、オペランドのタイプに基づいて、様々なデータ・タイプのレジスタを含んでもよく、実行コア112は、レジスタ(例えば、整数、浮動小数点、マルチメディア、ベクトルなど)に記憶するように構成されている。レジスタファイル114が、アーキテクチャ化されたレジスタ(すなわち、プロセッサ110によって実装される命令セットアーキテクチャにおいて指定されるレジスタ)を含み得る。代替的または追加的に、レジスタファイル114が、物理レジスタを含み得る(例えば、レジスタリネームが実行コア112において実装される場合)。
キャッシュ116が、任意のキャッシュ構造を例示してもよい。例えば、キャッシュ116が、ハーバード・アーキテクチャ(命令フェッチのための別個の命令キャッシュと、メモリ参照演算のための実行ユニットによるデータ読み込み/書き込みのためのデータキャッシュ)として、共有命令、データキャッシュなどとして実装されてもよい。いくつかの実施形態において、ロード/記憶実行ユニットが、メモリ参照演算を実行するために設けられてもよい。
命令が、プロセッサ110によって実装される命令セットアーキテクチャにおいて定義される実行可能エンティティであってもよい。さまざまな命令セットアーキテクチャ(例えば、Intelが元々開発したx86アーキテクチャ、ARM HoldingsからのARM、IBM/MotorolaからのPower and PowerPCなど)がある。各命令は、メモリにおけるその符号化、その動作、およびレジスタ、メモリ位置、および/または他のプロセッサ状態に対するその影響を含む命令セットアーキテクチャにおいて定義される。命令セットアーキテクチャの所与の実装は、各命令を直接実行してもよいが、その形式が、プロセッサハードウェア内の復号および他の操作によって変更されてもよい。別の実装が、プロセッサ110内の実行ユニットによって実行されるために、少なくともいくつかの命令を複数の命令演算に復号してもよい。いくつかの命令が、いくつかの実施形態においてマイクロコード化されてもよい。
マスストレージデバイス140、メモリ120およびキャッシュ116は、プロセッサ110のためのデータ124および命令122を記憶するメモリ階層を集合的に形成するストレージデバイスである。より詳細には、マスストレージデバイス140は、長いアクセス時間を有するディスクドライブ、大きなフラッシュメモリユニットなどの大容量の不揮発性メモリであってもよく、一方、キャッシュ116およびメモリ120が、より小さいが、アクセス時間がより短い。これらの高速な半導体メモリは、頻繁に使用されるデータのコピーを記憶する。メモリ120が、メモリデバイスのダイナミックランダムアクセスメモリ(DRAM)ファミリ内のメモリデバイスを表してもよい。メモリ120のサイズは、典型的には、キャッシュ116より大きいが、キャッシュ116は、典型的には、スタティックランダムアクセスメモリ(SRAM)ファミリのデバイスにおいて、より小さなデバイスを用いて実装される。いくつかの実施形態では、キャッシュ116、メモリ120、およびマスストレージデバイス140は、コンピュータシステム100内の1つ以上のプロセッサ間で共有される。
データおよび命令が、コンピュータシステム(例えば、コンピュータシステム100)によって使用されるコードおよび/またはデータを記憶することができる任意のデバイスまたは記憶媒体であってもよい、非一時的なコンピュータ読み取り可能記憶デバイスに記憶されてもよいことに留意されたい。一般に、非一時的コンピュータ読み取り可能記憶デバイスは、揮発性メモリ、不揮発性メモリ、ディスクドライブ、磁気テープ、コンパクトディスク(CD)、デジタル多用途ディスクまたはデジタルビデオディスク(DVD)、現在公知のまたは後に開発されるコンピュータ読み取り可能媒体を記憶する能力がある他の媒体などの磁気および光記憶デバイスを含むが、これらに限定されない。従って、マスストレージデバイス140、メモリ120、およびキャッシュ116はすべて、非一時的コンピュータ読み取り可能記憶媒体の例である。
上述のように、実行コア112が、ベクトル命令を実行するように構成されてもよい。ベクトル命令は、それらが複数のデータ要素について並列に実行されるべき同じ演算を定義し得るという点で、古典的な意味で単一命令多重データ(SIMD)命令として定義され得る。命令のインスタンスによって操作されるデータ要素が、ベクトルと称されてもよく、データレーンに編成される。これらのデータ要素は、オペランドのタイプに基づいて、実行コア112がレジスタに記憶するように構成されている種々のマルチビットデータタイプのデータ(例えば、整数、浮動小数点、マルチメディア、ベクトルなど)を含んでもよい。簡単のために、本開示のベクトルは、8つのデータレーンを含むものとして表現されるが、これは、本開示をこの特定のベクトル構成に限定することを意図するものではないことを理解すべきである。それどころか、当業者であれば、ベクトルが任意の数のデータレーンを提供するように構成されてもよいことを認識するであろう。いくつかの実施形態において、ベクトルレジスタファイル内に32個のベクトルレジスタがあってもよく、各ベクトルレジスタが128ビットを含み得る。しかし、別の実施形態では、ベクトルレジスタの数が異なってもよく、および/またはレジスタ当たりのビット数が異なってもよい。一般に、ベクトル長は、2のべき乗(例えば、2、4、8など)として実装されてもよい。しかしながら、いくつかの実施形態では、ベクトル長は2のべき乗である必要はない。さらに、レジスタリネームを実装する実施形態が、アーキテクチャ化されたベクトルレジスタに割り当ててもよい任意の数の物理レジスタを含んでもよい。アーキテクチャ化されたレジスタが、ベクトル命令においてオペランドとして指定可能なレジスタであってもよい。
デジタル信号処理では、畳み込みは、出力データセットの出力値を生成するデータセット内の入力値とその直近隣接値の重み付け和である。これらのデータセットが、入力値の隣接する値を決定する対応するデータ構成を有する1次元または多次元であってもよい。畳み込みの重み付け値は、カーネルが入出力データセットと同じ次元数を持つ畳み込みカーネルで指定される。
図2Aは、1次元畳み込み演算225を示す。図2Aにおいて、ソースデータ200のデータ要素s2は、3要素の畳み込みカーネル210と畳み込みされて、出力データ220においてデータ要素o2を生成する。追加的に、ソースデータ200のデータ要素s1およびs3は、データ要素s2の直近の左隣接および右隣接として畳み込みのために必要とされる。出力データは、畳み込みカーネル210のそれぞれの重み付け係数k1~k3を用いたソースデータ要素の重み付け和であり、すなわち、o2=k1*s1+k2*s2+k3*s3である。
図2Bは、2次元畳み込み演算275を示す。図2Bにおいて、ソースデータ250のデータ要素s5は、3×3要素の畳み込みカーネル260と畳み込みされて、出力データ270においてデータ要素o5を生成する。追加的に、ソースデータ250のデータ要素s1~s4およびs6~s9は、データ要素s2の左、右、上および下の直近隣接として、畳み込みのために必要とされる。出力データは、畳み込みカーネル260のそれぞれの重み付け係数k1~k9を用いたソースデータ要素の重み付け和であり、すなわち、o5=k1*s1+k2*s2+k3*s3+k4*s4+k5*s5+k6*s6+k7*s7+k8*s8+k9*s9である。
1次元および2次元畳み込みの例は、本開示をこれらの特定の畳み込み構成に限定することを意図していないことを理解されたい。それどころか、当業者は、畳み込みが任意の次元数で行われてもよいことを認識するであろう。さらに、この実施例は、畳み込みを1次元あたり3つの要素に制限することを意図するものではなく、当業者であれば、畳み込みが1次元あたり他の数の要素で行われてもよいことを認識するであろう。
図3は、いくつかの実施形態によるソースデータセットの事前シフトの方法を示す。整列データ300に加えて、図3は、ベクトル整列が左1つのデータレーン360にシフトされたデータセット350に対応する左シフトデータ310と、ベクトル整列が右1つのデータレーン370にシフトされたデータセット350に対応する右シフトデータ320を示す。3つのデータセット、300、310および320は、3つの列からなる畳み込みカーネルを使用する畳み込み演算に対応する。そのような畳み込みが、1次元畳み込みまたは多次元畳み込みであり得る。さらに、データセットの事前シフトは、3つの列の畳み込みに限定されないことを理解されたい。当業者であれば、任意の数の列がサポートされてもよく、例えば、5列の畳み込みが、合計5つのソースデータセット、図3に示される、300、310および320の3つ、ならびに2回左にシフトしたデータセットおよび2回右にシフトしたデータセットを有してもよいことを理解するであろう。
図4は、事前シフトされたソースベクトルが与えられた1次元の3要素畳み込みカーネルを用いた畳み込み出力ベクトルの計算を示す。事前シフトされたソースベクトル400A、400Bおよび400Cが、いくつかの実施形態では図3に示すような事前シフトされたデータセットからロードされてもよいが、他の実施形態では様々な他の方法を用いてロードされてもよい。カーネルベクトル410A、410Bおよび410Cが、図2Aの畳み込みカーネル210のベクトル表現である。各カーネルベクトルは、カーネルベクトルのすべてのデータレーンに複製されたそれぞれの畳み込みカーネル重み付け値から構成される。例えば、カーネルベクトル410Bは、畳み込みカーネル210の中程度の重み付け値に対応し、したがって、その重み付け値k2は、そのすべてのデータレーンに複製される。したがって、出力ベクトル420は、ソースベクトル400にそれぞれのカーネルベクトル410を乗算したものの合計である。図4に示す畳み込み計算が、3つのカーネル列のみを伴う畳み込みの実行に限定されず、任意の数のカーネル列を実装するように拡張されてもよい。
図5は、いくつかの実施形態による複数のデータベクトルの1次元3要素畳み込みを示すフロー図である。本方法は、図4のカーネルベクトル410に対応する3つのカーネルベクトルvKLeft、vKCenterおよびvKRightを初期化するステップ502から開始する。これらのベクトルは、畳み込み演算の継続期間中、一定のままであるため、1回だけロードされてもよい。
本方法は、図4のベクトル400に対応する整列およびシフトされたソースベクトルvLeft、vCenterおよびvRightをロードするステップ504に進む。いくつかの実施形態では、vLeft、vCenterおよびvRightが、図3に示すような事前シフトされたデータセットからロードされてもよいが、他の実施形態では、他の手段を介してロードされてもよい。
次いで、本方法は、ベクトルアキュムレータvAccに加算される3つの重み付け和を行うステップ506に進む。各重み付け値は、多くのSIMDアーキテクチャに共通の乗算加算ベクトル命令を用いて計算されるが、いくつかの実施形態では、算術ベクトル命令の組み合わせを用いて実装されてもよい。ステップ506において、乗算加算ベクトル命令は、3つのオペランド、すなわち、第1のオペランドは基本ベクトル、第2のオペランドはソースベクトル、および第3のオペランドはカーネルベクトルをとるMADD演算によって表される。MADD演算は、第2と第3のオペランドを乗算した後、積を第1のオペランドに加算し、結果ベクトルを返す。第1のMADD演算では、指定されたベースベクトルvZeroは、すべてのデータレーンで0の値を含むベクトルに対応し、多くのSIMDアーキテクチャに共通である。このようにしてvZeroを用いることは、ベクトルアキュムレータvAccを初期化する効率的な手段を提供するが、いくつかの代替的な実施形態では、同等のvZeroベクトルを提供しないSIMDアーキテクチャでは、ベクトルアキュムレータvAccは、まず、代替手段によって初期化されてもよい。残りの2つのMADD演算では、指定されたベースベクトルはアキュムレータvAccである。3つのソースベクトルvLeft、vCenter、vRightにそれぞれのカーネルベクトルvKLeft、vKCenter、vKRightを乗算し、アキュムレータvAccに加算される。
MADD演算が完了すると、本方法はステップ508に進み、アキュムレータベクトルが宛先アドレスに書き込まれる。ステップ510で残余ベクトルの数がチェックされ、プロセスは、すべてのベクトルが生成されるまでステップ504で継続する。
図5に開示された実施形態は、3つの要素カーネルで1次元畳み込みを実行するが、この実施形態は、3つの要素に限定されることを意図するものではなく、種々のカーネル幅を含み得ることを理解されたい。図5の実施形態は、重み付け和の効率的な計算を実装するが、図3に示されているような事前シフトされたソースデータに依存し、カーネル幅を広くするために、これらの事前シフトされたデータセットの使用は、メモリおよびオフチップ帯域幅に対するより大きな需要をもたらす。このため、シフトされたソースデータを導出するためのベクトル命令が図6Aに開示されている。このベクトル命令の使用は、図5の実施形態と組み合わされるときに、特により広いカーネル幅で、オフチップ帯域幅要件を最小化する。
いくつかの実施形態において、抽出ベクトル命令を用いて、一対の整列ソースベクトルを用いて、畳み込み計算に必要なシフトされたデータベクトルを生成してもよい。抽出ベクトル命令の使用は、畳み込み演算のために最初に供給されたソースデータの使用を可能にし、従って、メモリおよびキャッシュ帯域幅の効率的な使用を可能にする。図6Aは、そのような抽出ベクトル命令620の一例を示す。図6Aでは、2つの連続するソースベクトル600Aおよび600Bが連結され、得られた二重幅ベクトルのサブセットが、シフト605によって指定されたオフセットデータレーンから開始して抽出され、出力ベクトル610を生成する。任意で、出力ベクトルが出力データレーンの全ベクトル幅未満を含むことを可能にする出力幅615が指定されてもよい。この場合、出力ベクトル610の最右レーンはゼロを含む。図6Aでは、8つのデータレーンのベクトル幅が、4のシフト605値および6の出力幅615値で示されている。
抽出ベクトル命令を用いて、畳み込み演算の種々の実施形態が、3つの整列ソースベクトル、中央整列ベクトル、および整列ベクトルを、中央整列ベクトルの直近の左および直近の右の整列ベクトルを用いて、広範囲の多様なカーネル幅に対してシフトされたソースベクトルをロードしてもよい。
図6Bは、図4に示すような1次元3要素畳み込みに対するソースベクトルのロードを示す。3つの整列ソースベクトル、中央ソースベクトル625B、中央ベクトルの直近左ソースベクトル625A、および中央ベクトルの直近右ソースベクトル625Cがロードされる。抽出左演算630は、左ソースベクトル625Aおよび中央ソースベクトル625B、ならびに図6Aの抽出ベクトル命令620を用いて、ベクトル内のデータレーンの数、実施例では8から1を引いた数に等しいシフト値を用いて実行される。この演算により、左ベクトル650をもたらす。同様に、抽出右演算640は、中央ソースベクトル625Bおよび右ソースベクトル625C、ならびに図6Aの抽出ベクトル命令620を用いて、1のシフト値を用いて実行される。この演算により、右ベクトル670をもたらす。次いで、ベクトル650、660、および670のセットが、図5に示すような畳み込みで使用され得る。当業者であれば、図6Bに示す方法が、3要素畳み込み演算に限定されることを意図するものではなく、しばしば図6Bに示すものを超える追加のソースベクトル625をロードする必要なく、種々のカーネル幅の畳み込みを行うために必要なベクトルを生成するために使用されてもよいことを理解するであろう。さらに、抽出ベクトル命令620の使用は、図3に示すような事前シフトされたデータの必要性を排除し、これは、畳み込み演算のためのデータサイズの増加を排除する。
図7は、いくつかの実施形態による図6Bの抽出方法を使用した、複数のデータベクトルの1次元3要素畳み込みを示すフロー図である。図7の畳み込みは、ベクトルデータの主メモリへのロードおよび記憶の数を最小化し、ベクトルデータの予備計算なしで元のソースデータを使用する。さらに、メインメモリへのロードおよび記憶のシーケンスは、システムキャッシュの高性能を可能にし、計算上の要求とキャッシュおよびメモリ帯域幅とのバランスをとる高性能畳み込み実装をもたらす。
本方法は、図4のカーネルベクトル410に対応する3つのカーネルベクトルvKLeft、vKCenterおよびvKRightを初期化するステップ702で開始する。これらのベクトルは、畳み込み演算の継続期間中、一定のままであるため、1回だけロードされてもよい。追加的に、左整列ソースベクトルvSrcLeftが初期化され、第1のソースベクトルがvCenterにロードされる。
本方法は、右整列ソースベクトルvSrcRightをロードするステップ704に進む。vSrcLeftおよびvCenterが既にロードされているので、いったんvSrcRightがロードされると、本方法はステップ706に進み、ここでは、抽出ベクトル命令620を用いて、畳み込み計算のために左シフトベクトルおよび右シフトベクトルvLeftおよびvRightを生成する。ステップ706において、抽出ベクトル命令620は、4つのオペランド(第1および第2オペランドはソースベクトルであり、第3オペランドはシフト値であり、第4オペランドは出力幅である)をとるEXTRACT演算によって表される。ステップ706は、左シフトおよび右シフトされたソースベクトルvLeftおよびvRightを生成し、これは、中央ベクトルvCenterと組み合わされると、畳み込みを実行するために使用されるベクトルを形成する。
次いで、本方法は、ベクトルアキュムレータvAccに加算された3つの重み付け和を行うステップ708に進む。各重み付け値は、多くのSIMDアーキテクチャに共通の乗算加算ベクトル命令を用いて計算されるが、いくつかの実施形態では、算術ベクトル命令の組み合わせを用いて実装されてもよい。ステップ708において、乗算加算ベクトル命令は、3つのオペランド(第1のオペランドはベースベクトルであり、第2のオペランドはソースベクトルであり、第3のオペランドはカーネルベクトルである)をとるMADD演算によって表される。MADD演算は、第2と第3のオペランドを乗算した後、積を第1のオペランドに追加し、結果ベクトルを返す。第1のMADD演算では、指定されたベースベクトルvZeroは、すべてのデータレーンで0の値を含むベクトルに対応し、多くのSIMDアーキテクチャに共通である。このようにしてvZeroを使用することは、ベクトルアキュムレータvAccを初期化する効率的な手段を提供するが、いくつかの代替実施形態では、同等のvZeroベクトルを提供しないSIMDアーキテクチャでは、ベクトルアキュムレータvAccは、まず、代替手段によって初期化されてもよい。残りの2つのMADD演算では、指定されたベースベクトルはアキュムレータvAccである。3つのソースベクトルvLeft、vCenter、vRightにそれぞれのカーネルベクトルvKLeft、vKCenter、vKRightを乗算し、アキュムレータvAccに加算される。
MADD演算が完了すると、本方法はステップ710に進み、ここでは、アキュムレータベクトルが宛先アドレスに書き込まれる。ステップ712において、vCenterおよびvSrcRightベクトルは、それぞれvSrcLeftおよびvCenterベクトルとなるようにシフトされ、次いで、ステップ714において残余ベクトルの数がチェックされ、プロセスは、すべてのベクトルが生成されるまでステップ704において継続する。
いくつかの実施形態において、スカラー乗算加算ベクトル命令が使用されてもよい。従来の乗算加算ベクトル命令では、2つのベクトルが乗算され、その積が第3のベクトルに加算されて出力ベクトルを生成する。図8に示される開示されたスカラー乗算加算ベクトル命令860では、ソースベクトル800の各レーンにカーネルベクトル810のレーン820によって指定されたスカラー量を乗算してスケールベクトル830を形成し、これをベースベクトル840に加算して出力ベクトル850を生成する。このベクトル命令を使用することにより、畳み込みカーネルの重み付け係数を、各重み付け係数に対してベクトルを使用するのではなく、ベクトルの個々のレーンにコンパクトに記憶することが可能になる。これにより、レジスタファイル114の使用およびオフチップ・バンド幅要件が低減される。
図9は、いくつかの実施形態による、図8のスカラー乗算加算ベクトル命令860を使用した、複数のデータベクトルの1次元3要素畳み込みを示すフロー図である。本方法は、単一カーネルベクトルvKernelをベクトルの種々のレーンにおける重み付け係数で初期化するステップ902から開始する。このベクトルは、畳み込み演算の継続期間中、一定のままであるので、1回だけロードされてもよい。
本方法は、図4のベクトル400に対応する整列およびシフトされたソースベクトルvLeft、vCenterおよびvRightをロードするステップ904に進む。いくつかの実施形態では、vLeft、vCenter、およびvRightは、図3に示されるような事前シフトされたデータセットからロードされてもよく、他の実施形態では、それらは、図6Aおよび図6Bに示されるような抽出ベクトル命令620および方法を使用するなどの他の手段を介してロードされてもよい。
次いで、本方法は、ベクトルアキュムレータvAccに対して3つの重み付け和を行うステップ906に進む。各重み付け値は、図8のスカラー乗算加算ベクトル命令860を用いて計算される。ステップ906において、スカラー乗算加算ベクトル命令860は、4つのオペランド(第1のオペランドがベースベクトルであり、第2のオペランドがソースベクトルであり、第3のオペランドがカーネルベクトルであり、および第4のオペランドがスケーリング係数を含むカーネルベクトルのレーンである)をとるSCALAR_MADD演算によって表される。SCALAR_MADD演算は、第2オペランドの各レーンに第3および第4オペランドで指定されたレーンを乗算した後、積を第1オペランドに追加して結果ベクトルを返す。第1のSCALAR_MADD演算では、指定されたベースベクトルvZeroは、すべてのデータレーンで0の値を含むベクトルに対応し、多くのSIMDアーキテクチャに共通である。このようにしてvZeroを使用することは、ベクトルアキュムレータvAccを初期化する効率的な手段を提供するが、いくつかの代替的な実施形態では、同等のvZeroベクトルを提供しないSIMDアーキテクチャでは、ベクトルアキュムレータvAccは、まず、代替手段によって初期化されてもよい。残りの2つのSCALAR_MADD演算では、指定されたベースベクトルはアキュムレータvAccである。3つのソースベクトルvLeft、vCenter、およびvRightには、カーネルベクトルvKernelのそれぞれのデータレーンからロードされたそれぞれのカーネルスカラー値が乗算され、アキュムレータvAccに追加される。
SCALAR_MADD演算が完了すると、本方法はステップ908に進み、ここでは、アキュムレータベクトルが宛先アドレスに書き込まれる。残余ベクトルの数は、ステップ910でチェックされ、プロセスは、すべてのベクトルが生成されるまで、ステップ904において継続する。
図9に開示された実施形態は、3要素カーネルで1次元畳み込みを行うが、本実施形態は、3つの要素に限定されることを意図するものではなく、種々のカーネル幅を含んでもよいことを理解されたい。さらに、前述の種々の実施形態は、1次元畳み込み演算を実装しているが、論じた方法は、多次元畳み込み演算にも同様に適用することができることを理解されたい。多次元畳み込みの場合、図4に示すようなソースベクトルセットを複数のアキュムレータベクトルに同時に適用して、多次元畳み込みを実装してもよい。
図10は、事前シフトされたソースベクトルが与えられた2次元3×3要素畳み込みカーネルを用いた畳み込み出力ベクトルの部分計算を示す。左ベクトル1002、中央ベクトル1004、および右ベクトル1006を含む事前シフトされたソースベクトルは、いくつかの実施形態では、図3に示すような事前シフトされたデータセットからロードされてもよく、または、図6Aおよび図6Bに示すような抽出ベクトル命令620および方法を使用することを含む種々の他の方法を用いてロードされてもよい。3×3カーネル1010の様々な重み付け係数が、いくつかの実施形態では、図4に示すようにカーネルベクトル410として記憶されてもよく、または、他の実施形態では、図8のスカラー乗算加算ベクトル命令860と共に使用するために、カーネルベクトルの個々のデータレーンとして記憶されてもよい。左ベクトル1002、中央ベクトル1004および右ベクトル1006は、3×3カーネル1010内にそれぞれ左、中央、右の列を有し、ここで、各列は、3行の重み付け係数を含む。3×3カーネル1010の各行は、それぞれのアキュムレータベクトル、第1行のためのリーディングアキュムレータ1018、第2行のための中央アキュムレータ1016、および第3行のラギングアキュムレータ1014を有する。
乗算加算ベクトル命令は、ソースベクトル1002、1004、および1006の各々に対して3回、3つのアキュムレータベクトルの各々に対して1回、実行される。これにより、合計9つの乗算加算ベクトル命令をもたらし、各カーネルの重み付け係数に対して1つずつ指定される。乗算加算ベクトル命令ごとに、カーネルの行と列は、演算のそれぞれのソースベクトルとアキュムレータベクトルに基づいて選択される。従って、リーディングアキュムレータ1018は、係数k1を使用する左ベクトル1002、係数k2を使用する中央ベクトル1004、および係数k3を使用する右ベクトル1006の重み付け和である。同様に、中央アキュムレータ1016は、係数k4を使用する左ベクトル1002、係数k5を使用する中央ベクトル1004、および係数k6を使用する右ベクトル1006の重み付け和である。最後に、ラギングアキュムレータ1014は、係数k7を使用する左ベクトル1002、係数k8を使用する中央ベクトル1004、および係数k9を使用する右ベクトル1006の重み付け和である。
図10は、単一セットのソースベクトルに対する出力ベクトルの部分計算のみを示す。各出力ベクトルの完全な計算のために、各宛先ベクトルの直上および直下のベクトルの重み付け和も実行されなければならない。図10に示す方法をソースデータの列にわたって反復することによって、各ソースベクトルを、その関連する左シフトベクトルおよび右シフトベクトルと共に、1回だけロードしながら、完全な畳み込み計算が実行されてもよい。
図10は、単純化のために3×3畳み込みカーネルを備えた畳み込み計算を示しているが、当業者であれば、示された計算が3つの行または3つの列のいずれかに限定されず、他の数の行、列または行および列をサポートするために使用されてもよいことを認識するであろう。さらに、示された計算が、2次元畳み込み演算に限定されることを意図するものではなく、2次元よりも大きな畳み込みを実行するために採用されてもよい。
図11は、いくつかの実施形態による、図8のスカラー乗算加算ベクトル命令860および図6Aの抽出ベクトル命令620を用いて、複数のデータベクトルの2次元3要素畳み込みの一部を示すフロー図である。本方法では、カーネルベクトルvKernelとvKernel2がすでに重み付け係数で初期化されていると仮定する。この例では、ベクトルは8レーンのデータを含むと仮定されているが、9つの重み係数が必要であるため、2つのカーネルベクトルが使用されるが、当業者であれば、ベクトルおよび畳み込みカーネル構成に応じて、より多くまたはより少なくカーネルベクトルが使用され得ることを認識するであろう。本方法は、中央ソースベクトルvCenterをロードするステップ1100から開始する。このベクトルがロードされると、畳み込み計算にすぐに利用可能となる。
次いで、本方法は、2つの機能を行うステップ1102に進む。第1に、左整列ソースベクトルがロードされる。いったんこのベクトルがロードされると、vCenterと組み合わせて左シフトベクトルvLeftを生成してもよい。第2に、前のステップでロードされたvCenterベクトルは、図8のスカラー乗算加算ベクトル命令860を用いて重み付き和計算を行うために使用される。
スカラー乗算加算ベクトル命令860は、4つのオペランド(第1のオペランドは基本ベクトルであり、第2のオペランドはソースベクトルであり、第3のオペランドはカーネルベクトルであり、第4のオペランドはスケーリング係数を含むカーネルベクトルのレーンである)をとるSCALAR_MADD演算によって表される。SCALAR_MADD演算は、第2のオペランドの各レーンに第3および第4のオペランドで指定されたレーンを乗算した後、積を第1オペランドに加算して結果ベクトルを返す。
vTopおよびvMidアキュムレータベクトルは、本方法の以前の反復から部分的な結果を有する可能性があるため、初期化されない。ただし、vBtmアキュムレータは初期化する必要がある。ステップ1102のvBtm計算で指定されたベースベクトルvZeroは、すべてのデータレーンにおいて0の値を含むベクトルに対応し、多くのSIMDアーキテクチャに共通である。このようにしてvZeroを使用することは、ベクトルアキュムレータvBtmを初期化する効率的な手段を提供するが、いくつかの代替的な実施形態では、同等のvZeroベクトルを提供しないSIMDアーキテクチャでは、ベクトルアキュムレータが、まず、代替的な手段によって初期化されてもよい。ステップ1102は、SCALAR_MADD演算を用いて、vCenterソースベクトルと、3×3畳み込みカーネルの中央列に対応する3つの重み付け値とを用いて、3つの部分和を計算する。
次いで、本方法は、vSrcRightソースベクトルをロードするステップ1104に進む。ステップ1104はまた、既にロードされたvSrcLeftおよびvCenterベクトル、ならびに図6Aの抽出ベクトル命令620を用いて、vLeftベクトルをロードする。抽出ベクトル命令620は、4つのオペランド(第1および第2のオペランドはソースベクトルであり、第3のオペランドはシフト値であり、第4のオペランドは出力幅である)をとるEXTRACT演算によって表される。
次いで、本方法は、既にロードされたvCenterベクトルおよびvSrcRightベクトル、ならびに図6Aの抽出ベクトル命令620を用いてvRightベクトルをロードするステップ1106に進む。追加的に、ステップ1104でロードされたvLeftベクトルは、3×3畳み込みカーネルの左列に対応する3つの重み付け値を用いて、図8のスカラー乗算加算ベクトル命令860を用いて重み付け和計算を行うために使用される。
次いで、本方法は、ステップ1106でロードされたvRightベクトルが、3×3畳み込みカーネルの右列に対応する3つの重み付け値を用いて、図8のスカラー乗算加算ベクトル命令860を用いて重み付け和計算を行うために使用される。
次いで、本方法は、ソースベクトルの部分和がソース行について完了したステップ1110に進む。この時点で、アキュムレータvTopはすべての行を完了し、宛先ベクトルに書き込まれてもよい。本方法は、ステップ1112に進み、ここで、残余2つのアキュムレータ、vMidおよびvBtmが、次の計算行の準備のために、それぞれvTopおよびvMid位置にシフトされる。
図11のフロー図は、簡略化のために3×3の畳み込みカーネルを備えた畳み込み計算を示しているが、当業者であれば、示された計算が3つの行または3つの列のいずれかに限定されず、他の数の行、列または行および列をサポートするために使用され得ることを認識するであろう。さらに、示された計算が、2次元畳み込み演算に限定されることを意図するものではなく、2次元よりも大きな畳み込みを実行するために使用されてもよい。
本明細書で論じる畳み込み演算の様々な実施形態が、非常に多様なアプリケーションに適用されてもよいが、様々な実施形態が、機械学習およびディープニューラルネットワークに適用するときに特に有用であり得る。これらのアプリケーションにおいて、畳み込みステップが、かなり時間集約的で資源効率の悪い演算として認識される。その結果、プロセッサは、この演算を加速するように調整され得る。畳み込み段階は、畳み込みネットワーク(D‐CNN)、LSTMのようなリカレントニューラルネットワーク、ジェネラルアドバサリアル(GAN)などを含む、広範囲のディープニューラルネットワーク(DNN)にますます追加されている。汎用CPUコア上で利用可能なSIMD命令を用いて直接畳み込み演算を行うことによって、従来のプロセッサパイプラインに適合し、従って余分なハードウェアを最小化または排除しながら、特殊化された空間畳み込みニューラルネットワークハードウェアを使用することを可能とする効率的またはより効率的な畳み込みが実行されてもよい。さらに、これらのアプリケーションにおける畳み込みは、多くの小さな畳み込みカーネルを使用する所与のデータセットに対して反復して採用されることが多いので、このアプローチは、個々の畳み込み演算が個々のプロセッサコアに専用とすることができるので、優れたプロセッサ利用を可能にし、単に追加のプロセッサ資源を追加することによってシステムをうまくスケールすることを可能にする。最後に、本明細書に記載されるSIMD命令の様々な実施形態が、畳み込みを超える広範囲の動作に利点を提供してもよい。
いくつかの実施形態では、畳み込み演算の計算要求および出力サイズを低減するために、ストライドが使用されてもよい。この場合、ストライド値は、計算されたすべてのデータ要素に対してスキップできるデータ要素の数を指定する。例えば、2のストライドが採用される場合、他のすべてのデータ要素はスキップされ、データ要素の半分のみが計算される。多次元畳み込み次元の場合、データ要素の行をスキップすることによって、ストライドを効率的に採用することができるが、本明細書に記載される種々の実施形態における1次元畳み込みの場合、ストライド係数は、実行コアの算術論理ユニットの利用を低下させるのに役立つ。この理由のために、シャッフルされたデータセットを採用して、ベクトル命令の他に利用されていないデータレーンの使用を可能にすることができる。この場合、シャッフルベクトル命令の様々な実施形態が開示されており、シャッフルされたソースデータベクトルが、1よりも大きいストライド値を有する畳み込みの実装のためにロードされることを可能にする。
図12Aは、いくつかの実施形態による、そのようなシャッフルベクトル命令1240の実施例を示す。図12Aでは、1200A、1200Bなどのソースベクトル1200が連結され、得られたベクトルのサブセットが、ソースレーン1210から始まり、ストライド1220によって指定されたストライド値を実装して、抽出される。結果は、出力ベクトル1230に書き込まれる。必要とされるソースベクトル1200の数は、ストライド1220と等しく、すべてのデータレーン内のデータ要素を含む出力ベクトルをもたらす。いくつかの実施形態において、ソースベクトル1200の各々は、命令オペランドを用いて指定されてもよい。他の実施形態において、ソースベクトル1200は、ベクトルの範囲を指定するオペランドを用いて指定されてもよい。
図12Bは、いくつかの実施形態による、シャッフルベクトル命令1290の別の実施例を示す。図12Bでは、1つ以上のベクトルを含むソースベクトル1250の固定数が連結され、得られたベクトルのサブセットが、ソースレーン1260から始まり、ストライド1265によって指定されたストライド値を実装して、抽出される。結果は出力ベクトル1280に書き込まれる。ソースベクトル1250の数は固定され、ストライド1265よりも小さくてもよいので、出力ベクトルが、すべてのデータレーンの連続するサブセットのみを含んでもよい。この理由のために、第1の出力レーン1270を指定して出力データレーンを抽出するために、追加のオペランドが提供されてもよい。
図13は、2のストライド値を含む1次元3要素畳み込みに対するソースベクトルのロードを示す。3つの整列ソースベクトルがロードされ、中央ソースベクトル1300B、中央ベクトルの直近左ソースベクトル1300A、および中央ベクトルの直近右ソースベクトル1300Cがロードされる。抽出演算1310Aは、図6Aの左および中央ソースベクトル1300Aおよび1300B、ならびに抽出ベクトル命令620を用いて、ベクトル内のデータレーン数に等しいシフト値、実施例では8から1を引いた値を用いて行われる。同様に、抽出演算1310Bは、中央および右ソースベクトル1300Bおよび1300C、ならびに図6Aの抽出ベクトル命令620を用いて、1のシフト値を用いて実行される。抽出演算1310Aおよび1310Bは、中間ソースベクトル1320Aおよび1320Bをもたらし、それらはシャッフル演算1330Aに入力される。シャッフル演算1330Aは、ソースレーン1210の値がゼロであり、ストライド1220の値が2である図12Aのシャッフルベクトル命令1240を採用して、ソースベクトル1300Aのデータレーンl8で開始する元のソースベクトル1300の交互のデータレーンを含む左ベクトル1340Aを生成する。
次いで、ソースベクトル1300Bおよび1300Cがシャッフル演算1330Bおよび1330Cに入力される。シャッフル演算1330Bは、中央ベクトル1340Bを生成するために、ソースレーン1210の値がゼロであり、ストライド1220の値が2である図12Aのシャッフルベクトル命令1240を使用し、シャッフル演算1330Cは、ソースレーン1210の値が1であり、ストライド1220の値が2である図12Aのシャッフルベクトル命令1240を用いて、右ベクトル1340Bを生成する。したがって、中央ベクトル1340Bは、ソースベクトル1300Bのデータレーンc1から開始する元のソースベクトル1300の交互のデータレーンを含み、右ベクトル1340Cは、ソースベクトル1300Bのデータレーンc2から開始する元のソースベクトル1300の交互のデータレーンを含む。
次いで、ベクトル1340のセットを、図5に示すような畳み込みで、または図11に示す方法と組み合わせて用いて、ストライドによる多次元畳み込みを実装してもよい。当業者であれば、図13に示す方法が、3要素の畳み込み演算または2のストライド値に限定されることを意図するものではなく、図13に示すものを超える追加のソースベクトル1300をロードする必要がなく、種々のカーネルの幅およびストライド値に対して畳み込みを実行するために必要なベクトルを生成するために使用されてもよいことを認識するであろう。また、当業者であれば、3を超えるカーネル幅および/または2を超えるストライドを実装する実施形態は、図13に示されるものを超えるさらなるソースベクトル1300を必要とし得ること、ならびにさらなる抽出演算1310が、これらの特定の実施形態によって必要とされることを認識するであろう。抽出ベクトル命令620およびシャッフルベクトル命令1240または1290の使用は、図3に示されるような事前シフトされたデータの必要性を排除し、ストライド特徴を実装する畳み込み演算のためのデータサイズの増加を排除する。
Claims (20)
- システムであって、
第1のソースベクトルおよび第2のソースベクトルから出力ベクトルを生成するベクトル命令を実行するように構成されたプロセッサを含み、前記出力ベクトル、前記第1のソースベクトルおよび前記第2のソースベクトルは、それぞれ複数のデータレーンを含み、前記ベクトル命令を実行するために、前記プロセッサは、
前記第1のソースベクトルと前記第2のソースベクトルとを連結して、組み合わせられたソースベクトルを生成することと、
0よりも大きいデータレーンオフセットで開始する前記組み合わせられたソースベクトルから前記出力ベクトルを抽出することであって、前記出力ベクトルは、前記第1のソースベクトルの少なくとも1つのデータレーンと、前記第2のソースベクトルの少なくとも1つのデータレーンとを含む、ことと、
前記抽出された出力ベクトルを前記プロセッサのベクトルレジスタに書き込むことと、を行うように構成されている、システム。 - 前記第1のソースベクトルおよび前記第2のソースベクトルは、前記ベクトル命令の各オペランドによって識別される前記プロセッサの各ソースベクトルレジスタからアクセスされる、請求項1に記載のシステム。
- 前記データレーンオフセットは、前記ベクトル命令のオペランドとして識別される、請求項1または2に記載のシステム。
- 前記データレーンオフセットで開始する前記組み合わされたソースベクトルから前記出力ベクトルを抽出するために、前記プロセッサは、
前記ベクトル命令のオペランドとして識別された抽出幅に従って、データレーン数を抽出することであって、前記抽出幅は、前記ベクトルレジスタのデータレーン数よりも小さい、ことと、
各0値を含む最右データレーン数を前記出力ベクトルに加算し、前記ベクトルレジスタの前記データレーン数と一致するデータレーン数を有する抽出された出力ベクトルを生成することと、を行うように構成されている、請求項1に記載のシステム。 - 前記ベクトル命令は、ベクトルに対して畳み込みを行う一部として実行され、前記出力ベクトルは、前記畳み込みの左ソースベクトルであり、前記第2のソースベクトルは、前記畳み込みの中央ソースベクトルであり、前記畳み込みを行うために、前記プロセッサは、
複数のソースベクトルレジスタに、前記第1のソースベクトル、前記第2のソースベクトルおよび第3のソースベクトルを含む前記ベクトルの各ソースベクトルをロードすることと、
前記第2のソースベクトルと前記第3のソースベクトルとを連結して、別の組み合わせられたソースベクトルを生成することと、
別のデータレーンオフセットで開始する前記別の組み合わせられたソースベクトルから右ソースベクトルを抽出することであって、前記右ソースベクトルは、前記第2のソースベクトルの少なくとも1つのデータレーンと、前記第3のソースベクトルの少なくとも1つのデータレーンとを含む、ことと、
前記右ソースベクトルを前記プロセッサの別のベクトルレジスタに書き込むことと、
中央重み付け値、左重み付け値および右重み付け値を含む複数の重み付け値を含むカーネルベクトルをロードすることと、
前記左ソースベクトル、前記中央ソースベクトル、および前記右ソースベクトルを含む複数ソースベクトルの重み付け和をそれぞれ含む1つ以上の出力ベクトルを生成することと、を行うようにさらに構成されており、前記1つ以上の出力ベクトルの特定の出力ベクトルを生成するために、前記プロセッサは、
前記カーネルベクトルのレーンからスカラー重み付け値をロードすることであって、前記レーンが、前記特定の出力ベクトルに従って前記特定のベクトル命令に指定され、前記複数のソースベクトルのうちの特定のソースベクトルが、前記特定のベクトル命令のオペランドとして指定される、ことと、
前記特定のソースベクトルの複数のデータレーンのそれぞれを、前記ロードされたスカラー重み付け値によってスケーリングして、スケーリングされたベクトルを生成することと、
ベクトルアキュムレータに記憶されているアキュムレータベクトルに前記スケーリングされたベクトルを加算して、新たな出力ベクトルを生成することと、
前記新たな出力ベクトルを前記ベクトルアキュムレータに記憶することと、を行うように構成されている、請求項1又は4に記載のシステム。 - 前記別のデータレーンオフセットは、前記データレーンオフセット及び前記ベクトルレジスタのデータレーン数に従って決定される、請求項5に記載のシステム。
- 前記プロセッサは、畳み込みニューラルネットワークの一部として前記畳み込みを行うように構成されている、請求項5に記載のシステム。
- 方法であって、
プロセッサによって、第1のソースベクトルおよび第2のソースベクトルから出力ベクトルを生成するベクトル命令を実行することであって、前記出力ベクトル、前記第1のソースベクトルおよび前記第2のソースベクトルは、それぞれ複数のデータレーンを含み、前記実行することは、
前記第1のソースベクトルと前記第2のソースベクトルとを連結して、組み合わせられたソースベクトルを生成することと、
データレーンオフセットで開始する前記組み合わせられたソースベクトルから前記出力ベクトルを抽出することであって、前記出力ベクトルは、第1のソースベクトルの少なくとも1つのデータレーンと、第2のソースベクトルの少なくとも1つのデータレーンとを含む、ことと、
前記抽出された出力ベクトルを前記プロセッサのベクトルレジスタに書き込むことと、を含む、方法。 - 前記第1のソースベクトルおよび前記第2のソースベクトルは、前記ベクトル命令の各オペランドによって識別される前記プロセッサの各ソースベクトルレジスタからアクセスされる、請求項8に記載の方法。
- 前記データレーンオフセットは、前記ベクトル命令のオペランドとして識別される、請求項8または9に記載の方法。
- 前記データレーンオフセットで開始する前記組み合わされたソースベクトルから前記出力ベクトルを抽出することは、
前記ベクトル命令のオペランドとして識別された抽出幅に従って、データレーン数を抽出することであって、前記抽出幅は、前記ベクトルレジスタのデータレーン数よりも小さい、ことと、
各0値を含む最右データレーン数を前記出力ベクトルに加算し、前記ベクトルレジスタの前記データレーン数と一致するデータレーン数を有する抽出された出力ベクトルを生成することと、を含む、請求項8に記載の方法。 - 前記ベクトル命令は、ベクトルに対して畳み込みを行う一部として実行され、前記出力ベクトルは、前記畳み込みの左ソースベクトルであり、前記第2のソースベクトルは、前記畳み込みの中央ソースベクトルであり、前記畳み込みを行うことは、
複数のソースベクトルレジスタに、前記第1のソースベクトル、前記第2のソースベクトルおよび第3のソースベクトルを含む前記ベクトルの各ソースベクトルをロードすることと、
別のベクトル命令を実行して、前記第2のソースベクトル及び前記第3のソースベクトルから右ソースベクトルを生成することであって、
前記第2のソースベクトルと前記第3のソースベクトルとを連結して、別の組み合わせられたソースベクトルを生成することと、
別のデータレーンオフセットで開始する前記別の組み合わせられたソースベクトルから前記右ソースベクトルを抽出することであって、前記右ソースベクトルは、前記第2のソースベクトルの少なくとも1つのデータレーンと、前記第3のソースベクトルの少なくとも1つのデータレーンとを含む、ことと、
前記右ソースベクトルを前記プロセッサの別のベクトルレジスタに書き込むことと、を含む、生成することと、
中央重み付け値、左重み付け値および右重み付け値を含む複数の重み付け値を含むカーネルベクトルをロードすることと、
前記左ソースベクトル、前記中央ソースベクトル、および前記右ソースベクトルを含む複数ソースベクトルの重み付け和をそれぞれ含む1つ以上の出力ベクトルを生成することと、を含み、前記1つ以上の出力ベクトルの特定の出力ベクトルを生成することは、
前記カーネルベクトルのレーンからスカラー重み付け値をロードすることであって、前記レーンが、前記特定の出力ベクトルに従って前記特定のベクトル命令に指定され、前記複数のソースベクトルのうちの特定のソースベクトルが、前記特定のベクトル命令のオペランドとして指定される、ことと、
前記特定のソースベクトルの複数のデータレーンのそれぞれを、前記ロードされたスカラー重み付け値によってスケーリングして、スケーリングされたベクトルを生成することと、
ベクトルアキュムレータに記憶されているアキュムレータベクトルに前記スケーリングされたベクトルを加算して、新たな出力ベクトルを生成することと、
前記新たな出力ベクトルを前記ベクトルアキュムレータに記憶することと、を行う特定のベクトル命令を実行することを含む、請求項8又は11に記載の方法。 - 前記別のデータレーンオフセットは、前記データレーンオフセット及び前記ベクトルレジスタのデータレーン数に従って決定される、請求項12に記載の方法。
- 前記プロセッサは、畳み込みニューラルネットワークの一部として前記畳み込みを行うように構成されている、請求項12に記載の方法。
- プログラム命令を記憶する1つ以上の非一時的なコンピュータアクセス可能な記憶媒体であって、前記プログラム命令が、1つ以上のコンピューティングデバイス上でまたは1つ以上のコンピューティングデバイスにわたって実行されると、前記1つ以上のコンピューティングデバイスに、
プロセッサによって、第1のソースベクトルおよび第2のソースベクトルから出力ベクトルを生成するベクトル命令を実行することを行わせ、前記出力ベクトル、前記第1のソースベクトルおよび前記第2のソースベクトルは、それぞれ複数のデータレーンを含み、前記実行することは、
前記第1のソースベクトルと前記第2のソースベクトルとを連結して、組み合わせられたソースベクトルを生成することと、
データレーンオフセットで開始する前記組み合わせられたソースベクトルから前記出力ベクトルを抽出することであって、前記出力ベクトルは、第1のソースベクトルの少なくとも1つのデータレーンと、第2のソースベクトルの少なくとも1つのデータレーンとを含む、ことと、
前記抽出された出力ベクトルを前記プロセッサのベクトルレジスタに書き込むことと、を含む、1つ以上の非一時的なコンピュータアクセス可能な記憶媒体。 - 前記第1のソースベクトルおよび前記第2のソースベクトルは、前記ベクトル命令の各オペランドによって識別される前記プロセッサの各ソースベクトルレジスタからアクセスされる、請求項15に記載の1つ以上の非一時的なコンピュータアクセス可能な記憶媒体。
- 前記データレーンオフセットは、前記ベクトル命令のオペランドとして識別される、請求項15または16に記載の1つ以上の非一時的なコンピュータアクセス可能な記憶媒体。
- 前記データレーンオフセットで開始する前記組み合わされたソースベクトルから前記出力ベクトルを抽出することは、
前記ベクトル命令のオペランドとして識別された抽出幅に従って、データレーン数を抽出することであって、前記抽出幅は、前記ベクトルレジスタのデータレーン数よりも小さい、ことと、
各0値を含む最右データレーン数を前記出力ベクトルに加算し、前記ベクトルレジスタの前記データレーン数と一致するデータレーン数を有する抽出された出力ベクトルを生成することと、を含む、請求項15に記載の1つ以上の非一時的なコンピュータアクセス可能な記憶媒体。 - 前記ベクトル命令は、ベクトルに対して畳み込みを行う一部として実行され、前記出力ベクトルは、前記畳み込みの左ソースベクトルであり、前記第2のソースベクトルは、前記畳み込みの中央ソースベクトルであり、前記畳み込みを行うことは、
複数のソースベクトルレジスタに、前記第1のソースベクトル、前記第2のソースベクトルおよび第3のソースベクトルを含む前記ベクトルの各ソースベクトルをロードすることと、
別のベクトル命令を実行して、前記第2のソースベクトル及び前記第3のソースベクトルから右ソースベクトルを生成することであって、
前記第2のソースベクトルと前記第3のソースベクトルとを連結して、別の組み合わせられたソースベクトルを生成することと、
別のデータレーンオフセットで開始する前記別の組み合わせられたソースベクトルから前記右ソースベクトルを抽出することであって、前記右ソースベクトルは、前記第2のソースベクトルの少なくとも1つのデータレーンと、前記第3のソースベクトルの少なくとも1つのデータレーンとを含む、ことと、
前記右ソースベクトルを前記プロセッサの別のベクトルレジスタに書き込むことと、を含む、生成することと、
中央重み付け値、左重み付け値および右重み付け値を含む複数の重み付け値を含むカーネルベクトルをロードすることと、
前記左ソースベクトル、前記中央ソースベクトル、および前記右ソースベクトルを含む複数ソースベクトルの重み付け和をそれぞれ含む1つ以上の出力ベクトルを生成することと、を含み、前記1つ以上の出力ベクトルの特定の出力ベクトルを生成することは、
前記カーネルベクトルのレーンからスカラー重み付け値をロードすることであって、前記レーンが、前記特定の出力ベクトルに従って前記特定のベクトル命令に指定され、前記複数のソースベクトルのうちの特定のソースベクトルが、前記特定のベクトル命令のオペランドとして指定される、ことと、
前記特定のソースベクトルの複数のデータレーンのそれぞれを、前記ロードされたスカラー重み付け値によってスケーリングして、スケーリングされたベクトルを生成することと、
ベクトルアキュムレータに記憶されているアキュムレータベクトルに前記スケーリングされたベクトルを加算して、新たな出力ベクトルを生成することと、
前記新たな出力ベクトルを前記ベクトルアキュムレータに記憶することと、を行う特定のベクトル命令を実行することを含む、請求項15又は18に記載の1つ以上の非一時的なコンピュータアクセス可能な記憶媒体。 - 前記プロセッサは、畳み込みニューラルネットワークの一部として前記畳み込みを行うように構成されている、請求項19に記載の1つ以上の非一時的なコンピュータアクセス可能な記憶媒体。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762556274P | 2017-09-08 | 2017-09-08 | |
US62/556,274 | 2017-09-08 | ||
US15/941,975 | 2018-03-30 | ||
US15/941,975 US11803377B2 (en) | 2017-09-08 | 2018-03-30 | Efficient direct convolution using SIMD instructions |
JP2020513910A JP7335231B2 (ja) | 2017-09-08 | 2018-09-06 | Simd命令を用いた効率的な直接畳み込み |
PCT/US2018/049666 WO2019051027A1 (en) | 2017-09-08 | 2018-09-06 | EFFECTIVE DIRECT CONVOLUTION USING HMIS INSTRUCTIONS |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020513910A Division JP7335231B2 (ja) | 2017-09-08 | 2018-09-06 | Simd命令を用いた効率的な直接畳み込み |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023160833A true JP2023160833A (ja) | 2023-11-02 |
Family
ID=65631104
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020513910A Active JP7335231B2 (ja) | 2017-09-08 | 2018-09-06 | Simd命令を用いた効率的な直接畳み込み |
JP2023132932A Pending JP2023160833A (ja) | 2017-09-08 | 2023-08-17 | Simd命令を用いた効率的な直接畳み込み |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020513910A Active JP7335231B2 (ja) | 2017-09-08 | 2018-09-06 | Simd命令を用いた効率的な直接畳み込み |
Country Status (5)
Country | Link |
---|---|
US (2) | US11803377B2 (ja) |
EP (1) | EP3676700B1 (ja) |
JP (2) | JP7335231B2 (ja) |
CN (1) | CN111213125B (ja) |
WO (1) | WO2019051027A1 (ja) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10747844B2 (en) * | 2017-12-12 | 2020-08-18 | Tesla, Inc. | Systems and methods for converting a matrix input to a vectorized input for a matrix processor |
US10565285B2 (en) * | 2017-12-18 | 2020-02-18 | International Business Machines Corporation | Processor and memory transparent convolutional lowering and auto zero padding for deep neural network implementations |
US20190392287A1 (en) | 2018-06-22 | 2019-12-26 | Samsung Electronics Co., Ltd. | Neural processor |
CN111813447B (zh) * | 2019-04-12 | 2022-11-08 | 杭州中天微系统有限公司 | 一种数据拼接指令的处理方法和处理装置 |
US11211944B2 (en) | 2019-04-17 | 2021-12-28 | Samsung Electronics Co., Ltd. | Mixed-precision compression with random access |
US11671111B2 (en) | 2019-04-17 | 2023-06-06 | Samsung Electronics Co., Ltd. | Hardware channel-parallel data compression/decompression |
US11880760B2 (en) | 2019-05-01 | 2024-01-23 | Samsung Electronics Co., Ltd. | Mixed-precision NPU tile with depth-wise convolution |
US20210049474A1 (en) * | 2019-08-13 | 2021-02-18 | Samsung Electronics Co., Ltd. | Neural network method and apparatus |
US11726950B2 (en) * | 2019-09-28 | 2023-08-15 | Intel Corporation | Compute near memory convolution accelerator |
US11475283B2 (en) * | 2019-10-24 | 2022-10-18 | Apple Inc. | Multi dimensional convolution in neural network processor |
US20210182025A1 (en) * | 2019-12-12 | 2021-06-17 | Samsung Electronics Co., Ltd. | Accelerating 2d convolutional layer mapping on a dot product architecture |
CN111178505B (zh) * | 2019-12-23 | 2023-04-07 | 福建星网视易信息系统有限公司 | 卷积神经网络的加速方法和计算机可读存储介质 |
CN111797985B (zh) * | 2020-07-22 | 2022-11-22 | 哈尔滨工业大学 | 一种基于gpu的卷积运算内存访问优化方法 |
CN112633505B (zh) * | 2020-12-24 | 2022-05-27 | 苏州浪潮智能科技有限公司 | 一种基于risc-v的人工智能推理方法和系统 |
US20220413853A1 (en) * | 2021-06-25 | 2022-12-29 | Intel Corporation | Apparatuses, methods, and systems for a packed data convolution instruction with shift control and width control |
CN117313803B (zh) * | 2023-11-28 | 2024-02-02 | 进迭时空(杭州)科技有限公司 | 基于risc-v向量处理器架构的滑动窗口2d卷积计算方法 |
Family Cites Families (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6489868A (en) | 1987-09-30 | 1989-04-05 | Sony Corp | Video signal processing circuit |
JPH03189868A (ja) * | 1989-12-20 | 1991-08-19 | Akira Iwata | データ処理プロセツサ |
US5734874A (en) * | 1994-04-29 | 1998-03-31 | Sun Microsystems, Inc. | Central processing unit with integrated graphics functions |
DE69519449T2 (de) * | 1994-05-05 | 2001-06-21 | Conexant Systems Inc | Raumzeigersdatenpfad |
US7085795B2 (en) | 2001-10-29 | 2006-08-01 | Intel Corporation | Apparatus and method for efficient filtering and convolution of content data |
US6061711A (en) * | 1996-08-19 | 2000-05-09 | Samsung Electronics, Inc. | Efficient context saving and restoring in a multi-tasking computing system environment |
US5801975A (en) * | 1996-12-02 | 1998-09-01 | Compaq Computer Corporation And Advanced Micro Devices, Inc. | Computer modified to perform inverse discrete cosine transform operations on a one-dimensional matrix of numbers within a minimal number of instruction cycles |
US5909572A (en) * | 1996-12-02 | 1999-06-01 | Compaq Computer Corp. | System and method for conditionally moving an operand from a source register to a destination register |
US5933650A (en) * | 1997-10-09 | 1999-08-03 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US6115812A (en) * | 1998-04-01 | 2000-09-05 | Intel Corporation | Method and apparatus for efficient vertical SIMD computations |
ATE557342T1 (de) * | 1998-08-24 | 2012-05-15 | Microunity Systems Eng | Prozessor und verfahren zur matrixmultiplikation mit einem breiten operand |
US7685212B2 (en) | 2001-10-29 | 2010-03-23 | Intel Corporation | Fast full search motion estimation with SIMD merge instruction |
US7725521B2 (en) * | 2001-10-29 | 2010-05-25 | Intel Corporation | Method and apparatus for computing matrix transformations |
US6954841B2 (en) * | 2002-06-26 | 2005-10-11 | International Business Machines Corporation | Viterbi decoding for SIMD vector processors with indirect vector element access |
GB2395306B (en) * | 2002-11-15 | 2006-02-15 | Imagination Tech Ltd | A configurable processor architecture |
US7689641B2 (en) | 2003-06-30 | 2010-03-30 | Intel Corporation | SIMD integer multiply high with round and shift |
GB2409063B (en) | 2003-12-09 | 2006-07-12 | Advanced Risc Mach Ltd | Vector by scalar operations |
GB2409065B (en) * | 2003-12-09 | 2006-10-25 | Advanced Risc Mach Ltd | Multiplexing operations in SIMD processing |
US7328230B2 (en) * | 2004-03-26 | 2008-02-05 | Intel Corporation | SIMD four-data element average instruction |
US7623732B1 (en) | 2005-04-26 | 2009-11-24 | Mercury Computer Systems, Inc. | Method and apparatus for digital image filtering with discrete filter kernels using graphics hardware |
US20080071851A1 (en) * | 2006-09-20 | 2008-03-20 | Ronen Zohar | Instruction and logic for performing a dot-product operation |
US8255884B2 (en) | 2008-06-06 | 2012-08-28 | International Business Machines Corporation | Optimized scalar promotion with load and splat SIMD instructions |
US20100180100A1 (en) | 2009-01-13 | 2010-07-15 | Mavrix Technology, Inc. | Matrix microprocessor and method of operation |
CN101923534B (zh) | 2009-06-10 | 2012-02-01 | 新奥特(北京)视频技术有限公司 | 应用sse指令集对视音频信号的对称卷积核进行卷积的方法 |
US8732437B2 (en) * | 2010-01-26 | 2014-05-20 | Oracle America, Inc. | Low-overhead misalignment and reformatting support for SIMD |
EP2772033A4 (en) | 2011-10-27 | 2015-07-22 | Lsi Corp | SOFTDFE SIGNAL PROCESSING |
CN102495721A (zh) * | 2011-12-02 | 2012-06-13 | 南京大学 | 一种支持fft加速的simd向量处理器 |
WO2013101198A1 (en) | 2011-12-30 | 2013-07-04 | Intel Corporation | Simd variable shift and rotate using control manipulation |
US9275014B2 (en) * | 2013-03-13 | 2016-03-01 | Qualcomm Incorporated | Vector processing engines having programmable data path configurations for providing multi-mode radix-2x butterfly vector processing circuits, and related vector processors, systems, and methods |
US9813223B2 (en) | 2013-04-17 | 2017-11-07 | Intel Corporation | Non-linear modeling of a physical system using direct optimization of look-up table values |
US9477999B2 (en) * | 2013-09-20 | 2016-10-25 | The Board Of Trustees Of The Leland Stanford Junior University | Low power programmable image processor |
US9684509B2 (en) * | 2013-11-15 | 2017-06-20 | Qualcomm Incorporated | Vector processing engines (VPEs) employing merging circuitry in data flow paths between execution units and vector data memory to provide in-flight merging of output vector data stored to vector data memory, and related vector processing instructions, systems, and methods |
US9442731B2 (en) * | 2014-03-13 | 2016-09-13 | Intel Corporation | Packed two source inter-element shift merge processors, methods, systems, and instructions |
US10402196B2 (en) | 2015-05-11 | 2019-09-03 | Ceva D.S.P. Ltd. | Multi-dimensional sliding window operation for a vector processor, including dividing a filter into a plurality of patterns for selecting data elements from a plurality of input registers and performing calculations in parallel using groups of the data elements and coefficients |
US9582726B2 (en) * | 2015-06-24 | 2017-02-28 | Qualcomm Incorporated | Systems and methods for image processing in a deep convolution network |
US10459731B2 (en) * | 2015-07-20 | 2019-10-29 | Qualcomm Incorporated | Sliding window operation |
US20170357894A1 (en) * | 2016-06-10 | 2017-12-14 | Apple Inc. | Data packing for convolution of artificial neural networks |
US10282204B2 (en) * | 2016-07-02 | 2019-05-07 | Intel Corporation | Systems, apparatuses, and methods for strided load |
CN106940815B (zh) * | 2017-02-13 | 2020-07-28 | 西安交通大学 | 一种可编程卷积神经网络协处理器ip核 |
CN106991473A (zh) * | 2017-03-30 | 2017-07-28 | 中国人民解放军国防科学技术大学 | 面向向量处理器的基于simd的平均值值池化并行处理方法 |
US10824938B2 (en) * | 2017-04-24 | 2020-11-03 | Intel Corporation | Specialized fixed function hardware for efficient convolution |
JP6958027B2 (ja) * | 2017-07-03 | 2021-11-02 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
-
2018
- 2018-03-30 US US15/941,975 patent/US11803377B2/en active Active
- 2018-09-06 WO PCT/US2018/049666 patent/WO2019051027A1/en unknown
- 2018-09-06 EP EP18779130.6A patent/EP3676700B1/en active Active
- 2018-09-06 JP JP2020513910A patent/JP7335231B2/ja active Active
- 2018-09-06 CN CN201880066852.7A patent/CN111213125B/zh active Active
-
2023
- 2023-08-17 JP JP2023132932A patent/JP2023160833A/ja active Pending
- 2023-09-22 US US18/472,482 patent/US20240012644A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP3676700A1 (en) | 2020-07-08 |
JP2020533691A (ja) | 2020-11-19 |
JP7335231B2 (ja) | 2023-08-29 |
CN111213125A (zh) | 2020-05-29 |
US11803377B2 (en) | 2023-10-31 |
US20190079764A1 (en) | 2019-03-14 |
US20240012644A1 (en) | 2024-01-11 |
CN111213125B (zh) | 2023-11-07 |
WO2019051027A1 (en) | 2019-03-14 |
EP3676700B1 (en) | 2022-12-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7335231B2 (ja) | Simd命令を用いた効率的な直接畳み込み | |
CN111095241B (zh) | 加速数学引擎 | |
CN110770701B (zh) | 基于寄存器的矩阵乘法 | |
CN107408037B (zh) | 配置成对可变长度向量进行操作的单片向量处理器 | |
US8122078B2 (en) | Processor with enhanced combined-arithmetic capability | |
US7814297B2 (en) | Algebraic single instruction multiple data processing | |
US11341210B2 (en) | Two-dimensional multi-layer convolution for deep learning | |
TWI603262B (zh) | 緊縮有限脈衝響應(fir)濾波器處理器,方法,系統及指令 | |
US20120072704A1 (en) | "or" bit matrix multiply vector instruction | |
CN114090954A (zh) | 一种基于ft-2000+的整数矩阵乘法内核优化方法 | |
US20080288756A1 (en) | "or" bit matrix multiply vector instruction | |
JP7385009B2 (ja) | 圧縮支援命令 | |
KR20230018361A (ko) | 벡터 연산들을 위한 회전식 누산기 | |
Shahbahrami et al. | Matrix register file and extended subwords: two techniques for embedded media processors | |
CN112434256A (zh) | 矩阵乘法器和处理器 | |
KR102591988B1 (ko) | 데이터 처리장치에서의 벡터 인터리빙 | |
US20230129750A1 (en) | Performing a floating-point multiply-add operation in a computer implemented environment | |
Regnault et al. | SPC5: an efficient SpMV framework vectorized using ARM SVE and x86 AVX-512 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230914 |