JP2020533691A - Simd命令を用いた効率的な直接畳み込み - Google Patents

Simd命令を用いた効率的な直接畳み込み Download PDF

Info

Publication number
JP2020533691A
JP2020533691A JP2020513910A JP2020513910A JP2020533691A JP 2020533691 A JP2020533691 A JP 2020533691A JP 2020513910 A JP2020513910 A JP 2020513910A JP 2020513910 A JP2020513910 A JP 2020513910A JP 2020533691 A JP2020533691 A JP 2020533691A
Authority
JP
Japan
Prior art keywords
vector
convolution
vectors
data
instruction
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.)
Granted
Application number
JP2020513910A
Other languages
English (en)
Other versions
JP2020533691A5 (ja
JP7335231B2 (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 JP2020533691A publication Critical patent/JP2020533691A/ja
Publication of JP2020533691A5 publication Critical patent/JP2020533691A5/ja
Priority to JP2023132932A priority Critical patent/JP2023160833A/ja
Application granted granted Critical
Publication of JP7335231B2 publication Critical patent/JP7335231B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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/15Correlation function computation including computation of convolution operations
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Abstract

【解決手段】 ベクトル命令を提供する1つ以上のプロセッサを含むコンピュータが、ソースデータセット上に直接畳み込みを実装してもよい。ソースデータセットが、1次元または多次元であり得る。ベクトル命令の所与のベクトル幅wに対して、出力データセットのw個の連続データ要素が、ベクトル命令を用いて並列に計算される。多次元データセットに対して、出力データセットの複数のベクトルが、ソースデータセットからのベクトルセットの単一ロードに対して計算される。畳み込みの性能を改善し、1つ以上のプロセッサ内の算術論理ユニットの完全な利用を可能にする新しいベクトル命令が開示される。

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のみを必要とし、これらの実施形態は、特に直接畳み込み計算に適しているが、これらの実施形態が、例えば、一般的な並列トラバーサル技術など、種々の計算タスクにより一般的に適用してもよいことに留意されたい。
コンピュータシステムの一実施形態のブロック図である。 3要素畳み込みカーネルを備えたデータ要素の1次元畳み込みを示すブロック図である。 3×3要素畳み込みカーネルを備えたデータ要素の2次元畳み込みを示すブロック図である。 少なくともいくつかの実施形態による、3つの要素畳み込みカーネルと共に使用されるソースベクトルの整列されたロードをサポートする、左シフトされたデータストリームおよび右シフトされたデータストリームを示すブロック図である。 少なくともいくつかの実施形態による、それぞれのカーネルベクトルを備えた整列され、左シフト、および右シフトされたソースベクトルを用いた、3つの要素、1次元畳み込みの出力ベクトルの計算を示す。 入力データセットの3つの要素、1次元畳み込みを含むデータセットの一連の出力ベクトルを計算する方法の一実施形態を示すフロー図である。 少なくともいくつかの実施形態による、2つのソースベクトルの連結のサブセットを含むデータベクトルを生成する抽出ベクトル命令を示す。 少なくともいくつかの実施形態による、整列逐次ソース入力ベクトルセットを用いた畳み込み演算のためのソースベクトルセットをロードするための、図6Aの抽出ベクトル命令の使用を示す。 入力データセットの3つの要素、1次元畳み込みを含み、図6Aの抽出ベクトル命令を用いて、データセットの一連の出力ベクトルを計算する方法の一実施形態を示すフロー図である。 スカラー値を導出し、ベクトルのデータレーンの各々をスカラー値によってスケーリングして、スケーリングベクトルを生成し、スケーリングベクトルをベースベクトルに加算して出力ベクトルを生成するスカラー多重加算ベクトル命令を示す。 入力データセットの3つの要素、1次元畳み込みを含み、図8のスカラー乗算加算ベクトル命令を用いて、データセットの一連の出力ベクトルを計算する方法の一実施形態を示すフロー図である。 少なくともいくつかの実施形態による、それぞれのカーネルベクトルと共に整列された、左シフト、右シフトされたソースベクトルを用いた、3×3要素、2次元畳み込みに対する複数の出力ベクトルの部分的な計算を示す。 入力データセットの3×3要素、2次元畳み込みを含み、図8のスカラー乗算加算ベクトル命令と、図6Aの抽出ベクトル命令とを用いて、データセットの出力ベクトルの列を計算する方法の一実施形態を示すフロー図である。 ストライド係数と開始ソースレーンを含む複数のインターレースソースベクトルの連結のシャッフルデータレーンを含むデータベクトルを生成するシャッフルベクトル命令の一実施形態を示す。 ストライド係数、開始ソースレーン、および開始出力レーンを含むインターレースソースベクトルから、デルインターレースされたデータレーンを含むデータベクトルを生成するシャッフルベクトル命令の一実施形態を示す。 少なくともいくつかの実施形態による、2のストライド値を含み、整列逐次ソース入力ベクトルを用いた畳み込み演算のためのソースベクトルセットをロードするための、図6Aの抽出ベクトル命令および図12Aのシャッフルベクトル命令の使用を示す。
本開示は、いくつかの実施形態および例示的な図面について例として本明細書に記載されているが、当業者は、本開示が記載された実施形態または図面に限定されないことを認識するであろう。本明細書の図面および詳細な説明は、開示された特定の形態に本開示を限定することを意図するものではなく、むしろ、本開示は、添付の特許請求の範囲によって定義される精神および範囲内にあるすべての修正、等価および代替をカバーするものであることを理解されたい。本明細書において使用されるいかなる見出しも、構成目的のためのものに過ぎず、明細書または特許請求の範囲を限定することを意図するものではない。本明細書中で使用される場合、用語「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のためのデータおよび命令を記憶するメモリ階層を集合的に形成するストレージデバイスである。より詳細には、マスストレージデバイス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つのデータレーンにシフトされたデータセットに対応する左シフトデータ310と、ベクトル整列が右1つのデータレーンにシフトされたデータセットに対応する右シフトデータ320を示す。3つのデータセット、300、310および320は、3つの列からなる畳み込みカーネルを使用する畳み込み演算に対応する。そのような畳み込みが、1次元畳み込みまたは多次元畳み込みであり得る。さらに、データセットの事前シフトは、3つの列の畳み込みに限定されないことを理解されたい。当業者であれば、任意の数の列がサポートされてもよく、例えば、5列の畳み込みが、合計5つのソースデータセット、図3に示される、300、310および320の3つ、ならびに2回左にシフトしたデータセットおよび2回右にシフトしたデータセットを有してもよいことを理解するであろう。
図4は、事前シフトされたソースベクトルが与えられた1次元の3要素畳み込みカーネルを用いた畳み込み出力ベクトルの計算を示す。事前シフトされたソースベクトルが、いくつかの実施形態では図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をロードするステップ1110から開始する。このベクトルがロードされると、畳み込み計算にすぐに利用可能となる。
次いで、本方法は、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では、ソースベクトル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. ベクトルに対する畳み込みを実行するように構成されているプロセッサであって、前記ベクトルに対する前記畳み込みを実行するために、前記プロセッサが、複数のベクトル命令を実行するように構成されており、前記複数のベクトル命令の各々が、複数のデータビットの複数のデータレーンに対する演算を実行するように構成されており、前記複数のベクトル命令が、
    複数のソースベクトルをロードすることであって、前記複数のソースベクトルをロードするために、前記複数のベクトル命令が、中央ベクトル、前記ベクトルの第1のデータレーンの前に1つ以上のデータレーンを開始する複数のデータレーンの左ベクトル、および前記ベクトルの前記第1のデータレーンの後に1つ以上のデータレーンを開始する複数のデータレーンの右ベクトルをロードするように構成されている、ロードすることと、
    1つ以上の出力ベクトルを生成することであって、前記1つ以上の出力ベクトルを生成するために、前記複数のベクトル命令が、前記1つ以上の出力ベクトルに、前記畳み込みのためのそれぞれの重み付け値によってスケーリングされた前記複数のソースベクトルの各々を加算するように構成されている、生成することと、を含む、システム。
  2. 前記左ベクトルおよび前記右ベクトルをロードするために、前記複数のベクトル命令が、
    前記ベクトルの直前の前ベクトルをロードし、
    前記ベクトルの直後に次ベクトルをロードし、
    ベクトル抽出命令を実行して、前記前ベクトルと前記ベクトルを用いて前記左ベクトルを生成し、
    別のベクトル抽出命令を実行して、前記ベクトルと前記次ベクトルを用いて前記右ベクトルを生成するように構成されている、請求項1に記載のシステム。
  3. 前記ベクトル抽出命令が、
    第1のベクトルレジスタを第2のベクトルレジスタに連結して、中間結果を生成し、
    前記中間結果を複数のレーン左にシフトし、
    前記中間結果の上部を含む出力ベクトルを生成するように構成されている、請求項2に記載のシステム。
  4. 前記複数のベクトル命令は、さらに、前記畳み込みのための複数の重み付け値の1つ以上の重み付けベクトルをロードするように構成されており、
    前記1つ以上の前記出力ベクトルのうちの特定の1つに、前記畳み込みのためのそれぞれの重み付け値によってスケーリングされた前記複数のソースベクトルの各々を加算するために、前記複数のベクトル命令は、前記複数のソースベクトルのそれぞれに対するベクトルスケーリング命令を含み、前記ベクトルスケーリング命令が、
    前記1つ以上の重み付けベクトルのうちの特定の1つの特定のレーンから、前記畳み込みのためのそれぞれの重み付け値をロードし、
    前記複数のソースベクトルのうちの1つの複数のデータレーンの各々に、前記それぞれの重み付け値を乗算して、スケーリングベクトルを生成し、
    前記1つ以上の出力ベクトルのうちの前記特定の1つに前記スケーリングベクトルを加算する、ように構成されている、請求項1に記載のシステム。
  5. 前記ベクトルに対する前記畳み込みは、ストライド値を実装し、含まれる各データレーンに対する前記畳み込みにおける省略されるデータレーンの値は、前記ストライド値に基づき、前記複数のソースベクトルをロードするために、前記複数のベクトル命令が、
    前記ベクトルの直前の前ベクトルをロードし、
    前記ベクトルの直後の次ベクトルをロードし、
    ベクトル抽出命令を実行して、前記前ベクトル、前記ベクトルおよび前記次ベクトルを用いて第1の中間ベクトルおよび第2の中間ベクトルを生成し、
    ベクトルシャッフル命令を実行して、前記第1の中間ベクトルおよび前記第2の中間ベクトルを用いて前記左ベクトルをロードし、
    ベクトルシャッフル命令を実行して、前記ベクトルおよび前記次ベクトルを用いて前記中央ベクトルと前記右ベクトルをロードする、ように構成されている、請求項1に記載のシステム。
  6. 前記畳み込みが多次元畳み込みであり、前記1つ以上の出力ベクトルが複数の出力ベクトルを含む、請求項1に記載のシステム。
  7. 前記プロセッサが、畳み込みニューラルネットワークの一部として前記畳み込みを実行するように構成されている、請求項1に記載のシステム。
  8. ベクトル命令を実装するプロセッサを含むコンピュータによって、ベクトルの畳み込みを実行することであって、
    中央ベクトル、前記ベクトルの第1のデータレーンの前に1つ以上のデータレーンを開始する複数のデータレーンの左ベクトル、および前記ベクトルの前記第1のデータレーンの後に1つ以上のデータレーンを開始する複数のデータレーンの右ベクトルを含む複数のソースベクトルをロードすることと、
    前記複数のソースベクトルの重み付け和を含む1つ以上の出力ベクトルを生成することであって、前記1つ以上の出力ベクトルを生成することが、前記1つ以上の出力ベクトルに、前記畳み込みのためのそれぞれの重み付け値によってスケーリングされた前記複数のソースベクトルの各々を加算することを含む、生成することと、を含む、実行することとを含み、
    ベクトル命令は、各々が複数のデータビットを含む複数のデータレーンを含む1つ以上のデータレジスタについて動作する命令である、方法。
  9. 前記左ベクトルおよび右ベクトルの前記ロードが、
    前記ベクトルの直前の前ベクトルをロードすることと、
    前記ベクトルの直後の次ベクトルをロードすることと、
    ベクトル抽出命令を実行して、前記前ベクトルと前記ベクトルを用いて前記左ベクトルを生成することと、
    前記ベクトル抽出命令を実行して、前記ベクトルと前記次ベクトルを用いて前記右ベクトルを生成することと、を含む、請求項8に記載の方法。
  10. 前記ベクトル抽出命令を実行することが、
    第1のベクトルレジスタを第2のベクトルレジスタに連結して、中間結果を生成することと、
    前記中間結果を複数のレーン左にシフトすることと、
    前記中間結果の上部を含む出力ベクトルを生成することと、含む、請求項9に記載の方法。
  11. 前記ベクトルに対する前記畳み込み演算を実行することが、さらに、前記畳み込みのための複数の重み付け値を含む1つ以上の重み付けベクトルをロードすることを含み、
    前記1つ以上の前記出力ベクトルのうちの特定の1つに、前記畳み込みのためのそれぞれの重み付け値によってスケーリングされた前記複数のソースベクトルの各々を加えることが、前記複数のソースベクトルの各々に対してベクトルスケーリング命令を含み、前記ベクトルスケーリング命令を実行することが、
    前記1つ以上の重み付けベクトルのうちの特定の1つの特定のレーンから、それぞれの重み付け値をロードすることと、
    前記重み付け値によってスケーリングされた前記複数のソースベクトルのうちの前記1つのそれぞれのデータレーンを含むスケーリングベクトルを生成することと、
    前記1つ以上の出力ベクトルのうちの前記特定の1つに前記スケーリングベクトルを加算することと、を含む、請求項8に記載の方法。
  12. 前記畳み込みが多次元畳み込みであり、前記1つ以上の出力ベクトルが複数の出力ベクトルを含む、請求項8に記載の方法。
  13. 前記畳み込みが、畳み込みニューラルネットワークの一部として行われる、請求項8に記載の方法。
  14. 複数のベクトル命令を記憶する非一時的コンピュータ読み取り可能記憶媒体であって、前記複数のベクトル命令が、プロセッサ上で実行されると、前記プロセッサにベクトルの畳み込みを実行させ、前記複数のベクトル命令が、
    複数のソースベクトルをロードすることであって、ベクトルが複数のデータビットの複数のデータレーンを含み、前記複数のソースベクトルが、中央ベクトル、前記ベクトルの第1のデータレーンの前に1つ以上のデータレーンを開始するデータレーンを含む左ベクトル、および前記ベクトルの第1のデータレーンの後に1つ以上のデータレーンを開始するデータレーンを含む右ベクトルを含む、ロードすることと、
    前記複数のソースベクトルの重み付け和を含む1つ以上の出力ベクトルを生成することであって、1つ以上の出力ベクトルを生成することが、前記1つ以上の出力ベクトルに、畳み込みのそれぞれの重み付け値によってスケーリングされた前記複数のソースベクトルの各々を加算することを含む、生成することと、を含む、非一時的コンピュータ読み取り可能記憶媒体。
  15. 前記左ベクトルおよび右ベクトルの前記ロードが、
    前記ベクトルの直前の前ベクトルをロードすることと、
    前記ベクトルの直後の次ベクトルをロードすることと、
    ベクトル抽出命令を実行して、前記前ベクトルと前記ベクトルを用いて前記左ベクトルを生成することと、
    前記ベクトル抽出命令を実行して、前記ベクトルと前記次ベクトルを用いて前記右ベクトルを生成することと、を含む、請求項14に記載の非一時的コンピュータ読み取り可能記憶媒体。
  16. 前記ベクトル抽出命令を実行することが、
    第1のベクトルレジスタを第2のベクトルレジスタに連結して、中間結果を生成することと、
    前記中間結果を複数のレーン左にシフトすることと、
    前記中間結果の上部を含む出力ベクトルを生成することと、含む、請求項15に記載の非一時的コンピュータ読み取り可能記憶媒体。
  17. 前記ベクトルに前記畳み込み演算を実行することが、さらに、前記畳み込みのための複数の重み付け値を含む1つ以上の重み付けベクトルをロードすることを含み、
    前記1つ以上の複数のソースベクトルのうちの特定の1つに、前記畳み込みのためのそれぞれの重み付け値によってスケーリングされた前記複数のソースベクトルのうちの各々を加算することが、前記複数のソースベクトルのうちの各々に対して、
    前記1つ以上の重み付けベクトルのうちの指定された1つのレーンの特定のレーンからそれぞれの重み付け値をロードすることと、
    前記重み付け値によってスケーリングされた前記複数のソースベクトルのうちの1つのそれぞれのデータレーンを含むスケーリングベクトルを生成することと、
    前記1つ以上の出力ベクトルのうちの前記特定の1つに前記スケーリングベクトルを加算することと、行うベクトルスケーリング命令を実行することを含む、請求項14に記載の非一時的コンピュータ読み取り可能記憶媒体。
  18. 前記ベクトル上の前記畳み込みがストライド値を実装し、含める各データレーンに対して前記畳み込みにおいて省略するデータレーンの値が前記ストライド値に基づき、前記複数のソースベクトルのロードが、
    前記ベクトルの直前の前ベクトルをロードすることと、
    前記ベクトルの直後の次ベクトルをロードすることと、
    ベクトル抽出命令を実行して、前記前ベクトル、前記ベクトルおよび前記次ベクトルを用いて第1の中間ベクトルおよび第2の中間ベクトルを生成することと、
    ベクトルシャッフル命令を実行して、前記第1の中間ベクトルおよび前記第2の中間ベクトルを用いて前記左ベクトルをロードすることと、
    ベクトルシャッフル命令を実行して、前記ベクトルおよび前記次ベクトルを用いて前記中央ベクトルと前記右ベクトルをロードすることと、を含む、請求項14に記載の非一時的なコンピュータ読み取り可能記憶媒体。
  19. 前記畳み込みが多次元畳み込みであり、前記1つ以上の出力ベクトルが複数の出力ベクトルを含む、請求項14に記載の非一時的コンピュータ読み取り可能記憶媒体。
  20. 前記畳み込みが、畳み込みニューラルネットワークの一部である、請求項14に記載の非一時的コンピュータ読み取り可能記憶媒体。
JP2020513910A 2017-09-08 2018-09-06 Simd命令を用いた効率的な直接畳み込み Active JP7335231B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2023132932A JP2023160833A (ja) 2017-09-08 2023-08-17 Simd命令を用いた効率的な直接畳み込み

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201762556274P 2017-09-08 2017-09-08
US62/556,274 2017-09-08
US15/941,975 US11803377B2 (en) 2017-09-08 2018-03-30 Efficient direct convolution using SIMD instructions
US15/941,975 2018-03-30
PCT/US2018/049666 WO2019051027A1 (en) 2017-09-08 2018-09-06 EFFECTIVE DIRECT CONVOLUTION USING HMIS INSTRUCTIONS

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2023132932A Division JP2023160833A (ja) 2017-09-08 2023-08-17 Simd命令を用いた効率的な直接畳み込み

Publications (3)

Publication Number Publication Date
JP2020533691A true JP2020533691A (ja) 2020-11-19
JP2020533691A5 JP2020533691A5 (ja) 2021-10-14
JP7335231B2 JP7335231B2 (ja) 2023-08-29

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 After (1)

Application Number Title Priority Date Filing Date
JP2023132932A Pending JP2023160833A (ja) 2017-09-08 2023-08-17 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)

* Cited by examiner, † Cited by third party
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 杭州中天微系统有限公司 一种数据拼接指令的处理方法和处理装置
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US11211944B2 (en) 2019-04-17 2021-12-28 Samsung Electronics Co., Ltd. Mixed-precision compression with random access
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卷积计算方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03189868A (ja) * 1989-12-20 1991-08-19 Akira Iwata データ処理プロセツサ
US20150086134A1 (en) * 2013-09-20 2015-03-26 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
US20150261534A1 (en) * 2014-03-13 2015-09-17 Intel Corporation Packed two source inter-element shift merge processors, methods, systems, and instructions
US20170024218A1 (en) * 2015-07-20 2017-01-26 Qualcomm Incorporated Sliding window operation

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6489868A (en) 1987-09-30 1989-04-05 Sony Corp Video signal processing circuit
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
ATE467171T1 (de) * 1998-08-24 2010-05-15 Microunity Systems Eng System mit breiter operandenarchitektur und verfahren
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
GB2409065B (en) * 2003-12-09 2006-10-25 Advanced Risc Mach Ltd Multiplexing operations in SIMD processing
GB2409063B (en) 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations
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
US9778902B2 (en) 2011-10-27 2017-10-03 Intel Corporation Software digital front end (SoftDFE) signal processing
CN102495721A (zh) * 2011-12-02 2012-06-13 南京大学 一种支持fft加速的simd向量处理器
CN104025033B (zh) * 2011-12-30 2017-11-21 英特尔公司 利用控制操纵的simd可变移位和循环
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
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
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
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 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03189868A (ja) * 1989-12-20 1991-08-19 Akira Iwata データ処理プロセツサ
US20150086134A1 (en) * 2013-09-20 2015-03-26 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
US20150261534A1 (en) * 2014-03-13 2015-09-17 Intel Corporation Packed two source inter-element shift merge processors, methods, systems, and instructions
US20170024218A1 (en) * 2015-07-20 2017-01-26 Qualcomm Incorporated Sliding window operation

Also Published As

Publication number Publication date
CN111213125B (zh) 2023-11-07
CN111213125A (zh) 2020-05-29
JP2023160833A (ja) 2023-11-02
US20240012644A1 (en) 2024-01-11
EP3676700B1 (en) 2022-12-28
US11803377B2 (en) 2023-10-31
JP7335231B2 (ja) 2023-08-29
US20190079764A1 (en) 2019-03-14
EP3676700A1 (en) 2020-07-08
WO2019051027A1 (en) 2019-03-14

Similar Documents

Publication Publication Date Title
JP7335231B2 (ja) Simd命令を用いた効率的な直接畳み込み
KR102353241B1 (ko) 가속화된 수학 엔진
CN110770701B (zh) 基于寄存器的矩阵乘法
US11175920B2 (en) Efficient work execution in a parallel computing system
TWI603262B (zh) 緊縮有限脈衝響應(fir)濾波器處理器,方法,系統及指令
KR20060056855A (ko) 프로세서
US20210089610A1 (en) Memory device and method
Shahbahrami et al. Matrix register file and extended subwords: two techniques for embedded media processors
JP7324754B2 (ja) ベクトル・キャリー付き加算命令
KR102586259B1 (ko) 레지스터 기반의 복소수 처리
US11669489B2 (en) Sparse systolic array design
US20240111530A1 (en) Matrix multiplication unit with flexible precision operations
Chiu et al. A multi-streaming SIMD architecture for multimedia applications
Regnault et al. SPC5: an efficient SpMV framework vectorized using ARM SVE and x86 AVX-512

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210906

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210906

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220930

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20221025

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230124

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230404

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230704

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230718

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230817

R150 Certificate of patent or registration of utility model

Ref document number: 7335231

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150