JP2021522630A - マルチポート・メモリーを備えたベクトル・レジスター・ファイルを有する行列ベクトル乗算器 - Google Patents

マルチポート・メモリーを備えたベクトル・レジスター・ファイルを有する行列ベクトル乗算器 Download PDF

Info

Publication number
JP2021522630A
JP2021522630A JP2021506612A JP2021506612A JP2021522630A JP 2021522630 A JP2021522630 A JP 2021522630A JP 2021506612 A JP2021506612 A JP 2021506612A JP 2021506612 A JP2021506612 A JP 2021506612A JP 2021522630 A JP2021522630 A JP 2021522630A
Authority
JP
Japan
Prior art keywords
data elements
vector
interface circuits
during
memory
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
JP2021506612A
Other languages
English (en)
Other versions
JP7262569B2 (ja
Inventor
フォワーズ,ジェレミー
オフチャロフ,カリン
チャン,エリック・エス
マッセンギル,トッド・マイケル
リウ,ミーン・ガーン
ワイズ,ガブリエル・レナード
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2021522630A publication Critical patent/JP2021522630A/ja
Application granted granted Critical
Publication of JP7262569B2 publication Critical patent/JP7262569B2/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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1078Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/04Arrangements for selecting an address in a digital store using a sequential addressing device, e.g. shift register, counter
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/12Group selection circuits, e.g. for memory block selection, chip selection, array selection
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/16Multiple access memory array, e.g. addressing one storage element via at least two independent addressing line groups
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/18Address timing or clocking circuits; Address control signal generation or management, e.g. for row address strobe [RAS] or column address strobe [CAS] signals

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Memory System (AREA)

Abstract

マルチポート・メモリーを有するベクトル・レジスター・ファイル(VRF)を含むニューラル・ネットワーク・プロセッサー、および関連する方法を提供する。プロセッサーは、データー・エレメントのN×N行列およびデーター・エレメントのN×1ベクトルを処理するタイルを含むことができる。VRFは、ライト命令に応答して、N個のデーター・エレメントをマルチポート・メモリーに格納し、Pクロック・サイクルの各々の間に、N個のデーター・エレメントをマルチポート・メモリーのP個の入力インターフェース回路の各々に供給することができる。P個の出力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された入力レーンを備える。Pクロック・サイクルの各々の間に、マルチポート・メモリーは、N個のデーター・エレメントを、P個の入力インターフェース回路から選択した少なくとも1つを通じて受け取るように構成することができる。VRFは、リード命令に応答してN個のデーター・エレメントを供給する出力インターフェース回路を含むことができる。
【選択図】図3

Description

[0001] ニューラル・ネットワーク技術は、読解力、翻訳、画像認識、または音声認識というような複雑なタスクを実行するために使用される。回帰型ニューラル・ネットワーク(RNN:Recurrent Neural Network)、畳み込みニューラル・ネットワーク(CNN:Convolution Neural Networks)、長/短期記憶(LSTM:Long Short Term Memory)ニューラル・ネットワーク、またはゲート付き回帰型ユニット(GRU:Gated Recurrent Units)に基づくものというような機械学習サービスが、このような複雑なタスクを実行するためにデプロイされている。これらの型式のニューラル・ネットワークは既にデプロイされているが、基礎アーキテクチャ、およびこれらの複雑なタスクを実行するための対応する命令には引き続き改善が求められている。
[0002] 一例では、本開示は、マルチポート・メモリー(例えば、二重ポート・メモリー)を含むベクトル・レジスター・ファイルを備えるプロセッサーに関する。このプロセッサーは、更に、データー・エレメントのN×N行列およびデーター・エレメントのN×1ベクトルを処理するように構成された複数のタイルも備えることができる。ここで、Nは8以上の整数であり、複数のタイルの各々は、N個のデーター・エレメントを処理するように構成される。ベクトル・レジスター・ファイルは、ライト命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントをマルチポート・メモリーに格納し、Pクロック・サイクルの各々の間に、N個のデーター・エレメントをマルチポート・メモリーのP個の入力インターフェース回路の各々に供給するように構成することができる。ここで、PはNをLで除算した値に等しい整数であり、Lは2以上の整数であり、P個の入力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Pクロック・サイクルの各々の間に、マルチポート・メモリーは、P個の入力インターフェース回路から選択された少なくとも1つを通じて、N個のデーター・エレメントを受け取るように構成される。
[0003] 更に、ベクトル・レジスター・ファイルは、リード命令に応答して、1クロック・サイクルの間に、マルチポート・メモリーからN個のデーター・エレメントを引き出し、Qクロック・サイクルの各々の間に、マルチポート・メモリーのQ個の出力インターフェース回路の各々からL個のデーター・エレメントを供給するように構成することができる。ここで、QはNをLで除算した値に等しい整数であり、Q個の出力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Qクロック・サイクルの各々の間に、マルチポート・メモリーは、N個のデーター・エレメントを、Q個の出力インターフェース回路から選択された少なくとも1つに供給するように構成される。
[0004] 他の例では、本開示は、複数のタイルと、二重ポート・メモリーを備えるベクトル・レジスター・ファイルとを備えるシステムにおける方法に関し、複数のタイルの各々が、データー・エレメントのN×N行列およびデーター・エレメントのN×1ベクトルを処理するように構成される。ここで、Nは8以上の整数であり、複数のタイルの各々は、N個のデーター・エレメントを処理するように構成される。
[0005] この方法は、ライト命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを二重ポート・メモリーに格納し、Pクロック・サイクルの各々の間に、N個のデーター・エレメントを二重ポート・メモリーのP個の入力インターフェース回路の各々に供給するステップを含むことができる。ここで、PはNをLで除算した値に等しい整数であり、Lは2以上の整数であり、P個の入力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Pクロック・サイクルの各々の間、二重ポート・メモリーは、N個のデーター・エレメントを、P個の入力インターフェース回路から選択した1つを通じて受け取るように構成される。
[0006] 更に、この方法は、リード命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを二重ポート・メモリーから引き出し、Qクロック・サイクルの各々の間に、L個のデーター・エレメントを二重ポート・メモリーのQ個の出力インターフェース回路の各々から供給するステップを含むこともできる。ここで、QはNをLで除算した値に等しい整数であり、Q個の出力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Qクロック・サイクルの各々の間、二重ポート・メモリーは、N個のデーター・エレメントを、Q個の出力インターフェース回路から選択した1つに供給するように構成される。
[0007] 更に他の例では、本開示は、1つのリード・ポートと1つのライト・ポートとを含む二重ポート・メモリーを備えるベクトル・レジスター・ファイルを備えるプロセッサーに関する。このプロセッサーは、更に、N×N行列およびN×1ベクトルを処理するように構成された複数のタイルを備えることもできる。ここで、Nは8以上の整数であり、複数のタイルの各々は、N個のデーター・エレメントを処理するように構成される。
[0008] ベクトル・レジスター・ファイルは、ライト命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを二重ポート・メモリーに、1つのライト・ポートを通じて格納し、Pクロック・サイクルの各々の間に、N個のデーター・エレメントを二重ポート・メモリーのP個の入力インターフェース回路の各々に供給するように構成することができる。ここで、PはNをLで除算した値に等しい整数であり、Lは2以上の整数であり、P個の入力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Pクロック・サイクルの各々の間、二重ポート・メモリーは、N個のデーター・エレメントを、P個の入力インターフェース回路から選択した1つを通じて受け取るように構成される。
[0009] 更に、ベクトル・レジスター・ファイルは、リード命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを二重ポート・メモリーから、1つのリード・ポートを通じて引き出し、Qクロック・サイクルの各々の間に、L個のデーター・エレメントを二重ポート・メモリーのQ個の出力インターフェース回路の各々から供給するように構成することができる。ここで、QはNをLで除算した値に等しい整数であり、Q個の出力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Qクロック・サイクルの各々の間、二重ポート・メモリーは、N個のデーター・エレメントを、Q個の出力インターフェース回路から選択した1つに供給するように構成される。
[00010] この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定するために使用されることを意図するのでもない。
[00011] 本開示を一例として示すが、添付図面によって限定されるのではない。添付図面では、同様の参照番号は同様の要素を示す。図における要素は、簡素さおよび明確さ を考慮して示されており、必ずしも同じ拡縮率で描かれてはいない。
図1は、一例によるプロセッサーのブロック図である。 図2は、一例による行列−ベクトル乗算ユニットのブロック図である。 図3は、一例によるベクトル・レジスター・ファイルのブロック図である。 図4は、他の例によるベクトル・レジスター・ファイルのブロック図である。 図5は、図1のプロセッサーおよび一例によるベクトル・レジスター・ファイルを使用してベクトル・データー・エレメントを処理する方法の流れ図を示す。
[00017] 本例において開示する例は、ベクトル・レジスター・ファイルを有する行列ベクトル乗算器を含むプロセッサーに関する。ベクトル・レジスター・ファイルは、ベクトル・データーを行列ベクトル乗算器から/へ読み出す/書き込むために使用することができる。特定の例では、マルチポート・メモリー、例えば、二重ポート・メモリーを、入力インターフェース回路および出力インターフェース回路と共に使用して、1つのライト・ポートおよび1つのリード・ポートを有するのでもよい二重ポート・メモリーを、高速かつ効率的に使用して、ニューラル・ネットワーク計算を実行することを可能にすることに関する。
[00018] 畳み込みニューラル・ネットワーク(CNN:Convolution Neural Networks)および回帰型ニューラル・ネットワーク(RNN:Recurrent Neural Network)は双方共、主流の機械学習において広く使用されている計算カーネルである。CNNおよびRNNは、行列−ベクトル乗算に関して、効率的に表現することができるが、各々に固有な並列処理およびデーター構造は著しく異なる。したがって、CNNおよびRNNの双方を効率的に計算する1つのテラフロップ規模のコンピューター・アーキテクチャを生成することは難題である。この問題は、リアル・タイム・レイテンシー要件を設計に加えると、更に悪化する。その結果、以前の解決策は、双方に対する高い性能を優先するのではなく、CNNまたはRNNに合わせて特化されている。本開示において開示する特定の例は、CNNおよびRNN双方に対して効率的な計算を可能にする(provide for)システム、方法、およびコンポーネントの使用に関する。
[00019] 一例として、本開示は、CNNにおいて個々の出力活性化(output activations)間における並列処理を利用して、個々のCNN評価内において限定された形態の行列−行列乗算を実行するプロセッサーについて説明する。この並列処理は、同じ行列データーであるが異なるベクトル・データーを受け取る擬似独立行列−ベクトル乗算タイル・エンジンのアレイの形態で、回路上にマッピングされる。この手法は、CNN入力に対してバッチ=1における高度利用を可能にし(allow for)、その結果、低レイテンシーで高いスループットを実現する。この手法を可能にする方法の1つは、マルチポート・ベクトル・レジスター・ファイル(VRF)の使用であり、共有メモリー空間に対する多くの同時ベクトル化読み出しおよび書き込み(simultaneous vectorized reads and writes)を可能にする。また、この手法は、RNNを表現するために使用することができる同じアセンブリー・レベル・コードにおいてCNNの情報濃密表現を提供するCNN認識(CNN-aware)命令集合アーキテクチャ(ISA:instruction set architecture)によっても可能になる。
[00020] 本開示において説明するプロセッサーは、フィールド・プログラマブル・ゲート・アレイ(FPGA)、特定用途集積回路(ASIC)、消去可能および/または複合プログラマブル・ロジック・デバイス(PLD)、プログラマブル・アレイ・ロジック(PAL)デバイス、および汎用アレイ・ロジック(GAL:Generic Array Logic)デバイスの複数の部分または組み合わせを使用して実装することができる。FPGAのようなプロセッサーを構成または再構成するために、イメージ・ファイルを使用してもよい。イメージ・ファイルまたは同様のファイルもしくはプログラムは、ネットワーク・リンクまたはローカル・リンク(例えば、PCIe)を通じてホストCPUから配信されてもよい。イメージ・ファイルに含まれる情報は、所望の機能を実装するために、プロセッサーのハードウェア・ブロック(例えば、FPGAのロジック・ブロックおよび再構成可能な相互接続)をプログラミングするために使用することができる。コンピューティング、ネットワーキング、および記憶リソースの組み合わせによって、サービスを配信するためのデーター・センターまたは他のインフラストラクチャを通じてというようにして提供することができる任意のサービスを支援するために、所望の機能を実装することができる。
[00021] 一例では、プロセッサー(例えば、FPGA)またはこのようなプロセッサーの集合体を、低レイテンシー・ネットワークを通じて互いに結合してもよい。数百から数千ものこのようなプロセッサー(例えば、FPGA)を利用するコンバージド・プラットフォームは、以下のことを提供する利点があると言える。(1)数十万箇所ものノードに跨がって並列処理を活用することによって、訓練時間を著しく短縮する、(2)ライブ・データーに対する現場でのオンライン学習というような、新たな訓練シナリオを可能にする、(3)数十万箇所ものサーバに広がるハイパースケール・データーセンターにおいて、柔軟性があり代替可能な同質FPGAリソースを利用しながら、前例のない規模のモデルを訓練する。一例では、このような利点は、FPGAのようなプロセッサーのアーキテクチャを利用することができる、自由な(unconventional)データー表現を活用することによって得ることができる。
[00022] また、説明した態様は、クラウド・コンピューティング環境においても実施することができる。クラウド・コンピューティングとは、構成可能なコンピューティング・リソースの共有プールに対するオンデマンド・ネットワーク・アクセスを可能にするためのモデルを指すとしてよい。例えば、クラウド・コンピューティングは、市場において、構成可能なコンピューティング・リソースの共有プールに対して遍在的で便利なオンデマンド・アクセスを提供するために採用することができる。構成可能なコンピューティング・リソースの共有プールは、仮想化によって迅速にプロビジョニングし、そして少ない管理の手間またはサービス提供業者の介入で解放し、次いで適宜規模調整することができる。クラウド・コンピューティング・モデルは、例えば、オンデマンド・セルフサービス、広帯域ネットワーク・アクセス、リソース・プーリング(resource pooling)、速やかな拡張性、度数制等のような、種々の特性で構成することができる。クラウド・コンピューティング・モデルは、例えば、サービスとしてのハードウェア(「HaaS」)、サービスとしてのソフトウェア(「SaaS」)、サービスとしてのプラットフォーム(「PaaS」)、およびサービスとしてのインフラストラクチャ(「IaaS」)というような、種々のサービス・モデルを露出するために使用されてもよい。また、クラウド・コンピューティング・モデルは、プライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、ハイブリッド・クラウド等というような、異なるデプロイ・モデルを使用してデプロイすることもできる。
[00023] 機械学習サービスは、回帰型ニューラル・ネットワーク(RNN:Recurrent Neural Network)、畳み込みニューラル・ネットワーク(CNN:Convolution Neural Networks)、長/短期記憶(LSTM:Long Short Term Memory)ニューラル・ネットワーク、またはゲート付き回帰型ユニット(GRU:Gated Recurrent Units)に基づくもの等があり、本開示において説明するプロセッサーを使用して実施することができる。一例では、サービス関連コンテンツ、あるいは単語、文章、画像、ビデオ、または他のこのようなコンテンツ/情報というような他の情報を、ベクトル表現に変換することもできる。ベクトル表現は、RNN、CNN、LSTM、またはGRUというような技法に対応することができる。深層学習モデルは、サービス初期化の前にオフラインで訓練することができ、次いで本開示において説明するシステムおよびプロセッサーを使用してデプロイすることができる。
[00024] 一例では、ニューラル・ネットワーク・モデルは、多くのレイヤで構成することもでき、各レイヤは、ニューラル・ネットワークのオフライン訓練によって得られた係数または定数の形態で表現された重みの行列またはベクトルとしてエンコードすることができる。ノードにおけるプログラマブル・ハードウェア・ロジック/ブロックが、行列またはベクトルを処理して、乗算、加算、およびその他の演算を含む種々の演算を、サービスに関係するエンコード情報(encoded information)を表す入力ベクトルに対して実行することができる。一例では、重みの行列またはベクトルは、グラフ分割のような技法を使用することによって分割し、複数のノードに跨がってピンニングする(pin)ことができる。このプロセスの一部として、大きなニューラル・ネットワークを中間表現(例えば、グラフ)に変換することもでき、次いでこの中間表現をもっと小さな表現(例えば、サブグラフ)に刻む(carved into)ことができ、各サブグラフに対応する重みの行列の各々を、ノードのオンチップ・メモリーにピンニングすることができる。一例では、モデルを固定サイズの行列およびベクトルに変換してもよい。このように、ノードのリソースは、固定サイズの行列およびベクトルに対して並列に処理する(operate)ことができる。
[00025] LSTMを例に取ると、LSTMネットワークは、繰り返すRNNレイヤまたは他の型のレイヤのシーケンスを備えることができる。LSTMネットワークの各レイヤは、所与の時間ステップにおける入力、例えば、以前の時間ステップからのレイヤの状態を消費することができ、そして新たな1組の出力または状態を生成することができる。LSTMを使用する場合、コンテンツの1つのチャンクを1つのベクトルまたは複数のベクトルにエンコードすることができる。一例として、単語または単語の組み合わせ(例えば、語句、文章、または段落)を1つのベクトルとしてエンコードすることができる。各チャンクをLSTMネットワークの個々のレイヤ(例えば、特定の時間ステップ)にエンコードすることができる。LSTMレイヤは、以下のような、1組の方程式を使用して記述することができる。
Figure 2021522630
[00026] この例では、各LSTMレイヤの内部において、ベクトル演算(例えば、ドット積、内積、またはベクトル加算)および非線形関数(例えば、シグモイド、双曲線、および正接)の組み合わせを使用して、入力および隠れ状態を処理することができる。場合によっては、最も計算集約的な演算が、ドット積から生ずることもあるが、密行列−ベクトルおよび行列−行列乗算ルーチンを使用して実装すればよい。一例では、ベクトル演算および非線形関数の処理は、並列に実行することもできる。
[00027] 一例では、個々のプロセッサーが、パケットを含むメッセージを直接互いに送ることができ、つまり、これによって1つのニューラル・ネットワークでさえも、容認できないレイテンシーを発生することなく、複数のプロセッサーに跨がる分割を可能にすることができる。通信のために、プロセッサーは、例えば、RDMAを含む軽量プロトコルを使用することができる。また、並列化(parallelization)は、ニューラル重みを複数のプロセッサーに跨がって分割することによって、ニューラル・ネットワークの1レイヤ内で実行することもできる。一例として、1つのCNNまたはRNNモデル(例えば、LSTM重み行列を含む)を分割し、プロセッサーを使用して処理するのでもよい。
[00028] 図1は、一例によるプロセッサー100のブロック図である。各プロセッサー100は、他のプロセッサーからメッセージを受け取るための入力メッセージ・プロセッサー(IMP)104と、他のプロセッサーまたはコンポーネントへの発信メッセージを処理するための出力メッセージ・プロセッサー(OMP)106とを含むことができる。このようなメッセージは、ネットワーク102を通じて受信および送信することができる。更に、各プロセッサー100は、行列ベクトル乗算器(MVM)110、2つ以上の多機能ユニット(MFU)(例えば、MFU[0]140およびMFU[1]160)も含んでもよい。更に、各プロセッサー100は、行列メモリー・マネージャ170、ベクトル・メモリー・マネージャ180、ベクトルDRAM182、および行列DRAM184も含んでもよい。この例では、プロセッサーは、制御およびスカラー・データーならびにペイロード・データー(例えば、ベクトル、行列、または他のテンソル・データー構造)というような補助情報を含むオフチップ・メッセージ(off-chip message)を受け入れることもできる。この例では、着信メッセージは、軽量入力メッセージ・プロセッサー(IMP)104によって操作され(handle)、軽量入力メッセージ・プロセッサー104はベクトルをベクトル・メモリー・マネージャ180に送る。IMP104は、行列を行列メモリー・マネージャ170に送ることができる。
[00029] 引き続き図1を参照すると、行列の各々はN×Nのサイズを有するとしてもよく、ベクトルの各々はN×1のサイズを有するとしてもよい。この例では、プロセッサー100に対応する全ての命令は、ネーティブ・サイズのデーター(native-sized data)を処理する(operate on)ことができる。プロセッサー100によって操作されるアプリケーションに対応する論理ベクトルおよび行列は、ネーティブ・サイズよりも大きいことが多いとして差し支えない。これらの場合、ベクトルおよび行列はネーティブ・サイズのタイルに分割される。一例では、行列ベクトル乗算では、行列データーおよびベクトル・データーをブロック浮動小数点(BFP)フォーマットで表現することができる。この例では、BFPフォーマット・データーのブロック・サイズは、ネーティブな寸法に等しくすることができる。したがって、ネーティブなN×1ベクトルの各々は、共有指数(shared exponent)を有することができ、N×N行列の各行は共有指数を有することができる。共有指数は5ビットでもよい。ベクトル・データーおよび行列データーの各々は、2の補数仮数部分(two’s complement mantissa portion)を有することができ、ベクトル・データーおよび行列データーの仮数サイズは異なってもよい。
[00030] MVM110は、ベクトル・レジスター・ファイル(VRF)112、行列レジスター・ファイル(MRF)120、およびタイル・エンジン(例えば、タイル・エンジン114、116、および118)を含むことができる。タイル・エンジンは、入力行列および入力ベクトル・データーをVRF112から受け取ることができる。更に、MVM110は、必要に応じて、ブロック浮動小数点(BFP)−浮動小数点(FP)変換器を含む、フォーマット変換器を含んでもよい。一例では、2つの内部BFPフォーマットが、MVM110によって、その入力および出力を表現するために、使用されてもよい。ベクトルおよび行列の格納のためにはBFP短(BFP short)、そして蓄積のためにはBFP長(BFP long)を使用してもよい。MVM110の一例では、BFP短は、共有5ビット指数を有するql.15固定小数点値を使用してもよく、BFP長は、共有5ビット指数を有するq34.40固定小数点値を使用してもよい。この例では、行列−ベクトル乗算の結果、BFP長が生じる場合があるが、最終出力段階としてこれを浮動小数点フォーマットに逆変換すればよい。つまり、図1に示すMVM110の例は、BFP−FP16変換器122、124、および126出力段において含めばよい。タイル・エンジン114、116、および118は、図1における例に示すように、並列にそれぞれの変換器に出力を供給することができる。MVM110に関する更なる詳細は、図2に示されており、VRF112の更なる詳細は、図3および図4に示されている。
[00031] 行列データーは、行列DRAM184と行列メモリー・マネージャ170との間で、M個のチャネルを使用して伝達することができる。ベクトル・メモリー・マネージャは、ベクトル・データーをC個よりも多いチャネルを通じて移動させることができる。
[00032] 引き続き図1を参照すると、各MFU(例えば、MFU[0]140およびMFU[1]160)はクロスバー(例えば、xbarsという記号が付されたクロスバー)を含んでもよい。MFU[0]140は、ベクトル−ベクトル乗算および加算、シグモイド関数、TanH関数、softmax演算、正規化線形関数(ReLU: Rectified Linear Unit)演算、および/または活性化ブロック演算というような、ベクトル演算をサポートすることができる。つまり、図1に示すように、MFU[0]140は、ベクトルをその入力バスからパイプライン状演算シーケンスを通ってストリーミングすることができるクロスバー(例えば、xbar146、148、および150)を含んでもよい。つまり、MulVrf142という名称が付されたレジスター・ファイルまたはAsVrf[0]144という名称が付された他のレジスター・ファイルを介してベクトルを受け取ることができ、このようなベクトルは、乗算演算、加算演算、または何らかの他の演算の内任意のものを受けることができる。MFU[0]140は、加算を実行するために様々なハードウェア・ブロック(例えば、153、157、および161)を含むことができる。また、MFU[0]140は、乗算を実行するために様々なハードウェア・ブロック(例えば、152、156、および159)を含むこともできる。また、MFU[0]140は、活性化を実行するために様々なハードウェア・ブロック(例えば、151、154、および158)を含むこともできる。
[00033] 更に図1を参照すると、MFU[1]160はクロスバー(例えば、xbar162、163、および164)を含んでもよく、これらは、MFU[1]160がMFU[0]140からの出力を受け取り、これらの出力およびADD/SUB VRF168を通じて受け取った任意の追加入力に対して追加演算を実行することを可能にすることができる。MFU[1]160は、加算を実行するための様々なハードウェア・ブロック(例えば、169、171、および172)を含むことができる。また、MFU[1]160は、活性化を実行するために様々なハードウェア・ブロックを含むこともできる。MFU[1]160からC個のチャネルを通じて受け取られた出力は、乗算回路174を介して、ベクトル・メモリー・マネージャ180に結合することができる。図1は、プロセッサー100の特定数のコンポーネントが特定の態様で配置されていることを示すが、これらよりも多いまたは少ない数のコンポーネントの異なる配置が行われることも可能である。
[00034] プロセッサー100は、少数の命令を使用して数万もの演算をトリガすることができる命令の発行を可能にするために使用することができる。一例として、以下の表1は、完全にパラメータ化されたLSTMに対応する命令を示す。
Figure 2021522630
[00035] 表1は、特定のフォーマットを有する特定数の命令を示すが、プロセッサー100は、同じ目的を遂行するために、異なるフォーマットを有する、もっと多いまたは少ない命令を実行してもよい。
[00036] 表2は、CNN評価の一部として、1×1畳み込みをどのように計算するかを示す。
Figure 2021522630
[00037] 上の表に示すように、計算のための命令のチェーンを繰り返す回数を指定することができる。次に、必要に応じて、各命令チェーンのネーティブ・ディメンション(native dimension)を、コラム倍率(column scaling factor)によって規模調整することができる。そして、ベクトル・レジスター・ファイルからベクトル・データーを読み出した後、行列レジスター・ファイルから引き出された重みとベクトル・データーを乗算することができる。CNN評価に必要な追加の演算を実行した後、出力を提供することができる。一例として、点別正規化線形関数(ReLU)演算を、ベクトル・データーのエレメント毎に実行することができる。
[00038] 以下の表3は、CNN評価の一部として、N×N畳み込みをどのように計算するかを示す。以下の命令の内、1×1畳み込みと同様のものについては、再度説明しない。Set2dWindows命令は、全ウィンドウ・サイズを設定するために使用することができ、次いでSetIterations命令は、このウィンドウを入力ボリューム全域にわたってスライドさせるために使用することができる。*_inc命令(例えば、v_rd_incおよびv_add_inc)は、ストライドに基づいて命令のアドレスを増分するために使用することができる。一例として、2のストライドは、加算のような演算のためにベクトル・データーを格納するために使用されるベクトル・レジスター・ファイルにおいて、1つ置きにベクトルを飛ばすという結果を得ることができる。
Figure 2021522630
[00039] 図2は、一例による行列−ベクトル乗算器(MVM)200のブロック図である。この例では、MVM200は図1のMVM110を実装するために使用することができる。MVM200は、ベクトル・レジスター・ファイル(VRF)210、行列レジスター・ファイル(MRF)220、およびMVMプロセッサー230を含むことができる。更に、VRF210はアドレス・デコーダー212およびハザード検出器(hazard detector)214を含んでもよい。VRF210は、コマンドと、テンソルのようなベクトル・データーの双方を受け取ることができる。MRF220は、アドレス・デコーダー222およびハザード検出器224を含んでもよい。MRF220は、コマンドおよび行列データーの双方を受け取ることができる。MVMプロセッサー230は、タイル・エンジン232、234、および236を含むことができる。また、MVMプロセッサー230は、テンソルを受け取り供給するためにバッファ(例えば、テンソル・バッファ242、244、および246)も含んでもよい。更に、MVMプロセッサー230は、MVMコントローラー250も含んでもよい。この例では、MVM200は一連のタイル・エンジンをインスタンス化することができ、タイル・エンジンの各々は、ネーティブ・サイズMVMを加速するように設計されてもよい。この例では、各タイル・エンジンが一連のドット積ユニット(DPU)で構成され、各ドット積ユニットが、行列タイルにおける1つのネーティブ行(native row)に対応するドット積計算を担当するようにしてもよい。一例では、FPGAを使用してプロセッサー100が実装される場合、小さな1組のBRAMおよびDSPを、タイル・エンジンを形成するように構成してもよい。一例として、各々が、ブロック・ランダム・アクセス・メモリー(BRAM)および処理ロジック・ブロック(例えば、ディジタル信号プロセッサー(DSP))を含んでもよい。処理ロジック・ブロックは、入力ベクトルを重みの行と乗算するために使用することができる。処理ロジック・ブロックの出力は、加算器を使用して加算することができる。つまり、この例では、各タイルが点別ドット積演算を実行するとして差し支えない。ドット積ユニットは、蓄積ツリーに繰り入れる(feed into)ことができる並列乗算器のレーンで構成することができる。これらのレーンは、行列タイルの1つの行にある複数の列内において並列処理を行う(provide)ことができる。このように、MVM200は、並列処理の少なくとも4つのディメンション、即ち、MVM間、MVMタイリング、1つのタイルの複数の行全域、そして行の複数の列内部の並列処理を活用することができる。この例では、MVMの総スループットは、サイクル当たりのFLOP=2*#タイル・ユニット*#DPU*#レーンとして表現することができる。
[00040] MRF220は、行列データーまたはエレメントを各タイル内にあるドット積ユニットに供給するように構成することができる数個の行列レジスター・ファイルを含むことができる。各乗算器は、サイクル毎に1つのベクトル・エレメントをVRF210から、そしてサイクル毎に1つの行列エレメントを行列レジスター・ファイルの1つから受け取ることができる。行列エレメントは、その乗算器に隣接して位置付けられた行列レジスター・ファイルの専用ポートによって送出することができる。MRF220は、以下のように編成することができる。格納された行列をネーティブ・サイズのタイルに分割することができ、各タイルを1つのタイル・エンジンだけに格納することができる。所与のタイル・エンジンに格納された行列は、MRFバンクとして見なすこともできる。各ドット積ユニットは、MRFバンクにおける各行列タイルの1つの行を保持する、そのMRFのサブバンクと関連付けることができる。最初のドット積ユニットがMRFバンクにおける各行列タイルの最初の行を収容するように、行をドット積ユニットに統計的に割り当てることもできる。最後に、SRAMのリード・ポートを、ワイヤのみによって、乗算器レーンに直接接続できるように、 行のエレメントをSRAMにおいてインターリーブすることもできる。行列レジスター・ファイルへの書き込みは、異なる操作によって行われることもある。何故なら、MRF220に書き込むための行列データーは、DRAMのようなオフチップ・メモリーから来ることもあるからである。図2は、MVM200の特定の数のコンポーネントが特定の態様で配置されていることを示すが、これらよりも多いまたは少ない数のコンポーネントの異なる配置が行われることも可能である。
[00041] 図3は、一例によるベクトル・レジスター・ファイル(VRF)300のブロック図である。VRF300は、図1のVRF112の少なくとも一部分を実装するために使用することができる。また、VRF300は、図2のVRF210の少なくとも一部分を実装するためにも使用することができる。この例では、VRF300へのリード/ライト・データー・インターフェースは、1組のITensorReadおよびITensorWriteインターフェースで構成することができ、その各々がサイクル毎にデーター・エレメントのLANESを読み出す/書き込むことができる。各インターフェースは、テンソル・プロトコルに従えばよく、独立してバックプレッシャされて(back-pressured)もよい。VRF300リード/ライト・インターフェースは、入力バッファ302、304,および306、ならびに出力バッファ352、354、および356を含むことができる。書き込み動作に応答して、テンソル(例えば、ニューラル・ネットワークのあるレイヤに対応する入力ベクトル・データー)を受け取るために入力バッファを使用することができる。この例では、VRF300はベクトル・データーをブロック浮動小数点(BFP)フォーマットで処理することができる。指数(例えば、共有指数)は、指数レジスター(例えば、EXP REG314、316、および318)に格納することができ、仮数はシフト・レジスター(例えば、SHIFT REG308、310、および312)に格納することができる。指数レジスターの出力をマルチプレクサ322に結合することができ、シフト・レジスターの出力をマルチプレクサ320に結合することができ、出力をメモリー(例えば、ブロックRAM(RRAVi))に書き込むことができる。このように、指数をEXP BRAM352に書き込むことができ、仮数をMANTISSA BRAM330に書き込むことができる。読み出しに応答して、メモリーからのデーターを出力インターフェースに出力することができる。このように、指数を指数レジスター(例えば、EXP REG344、346、および348)に出力することができ、仮数をシフト・レジスター(例えば、SHIFT REG338、340、および342)に出力することができる。これらのレジスターから、BFPベクトル・データーを出力バッファ(例えば、バッファ352、354、および356)に供給することができる。制御ロジック370は、例えば、マルチプレクサ320および322を含む、VRF300の種々のコンポーネントを通過するベクトル・データーの移動を制御することができる。制御ロジック370は、アドレス・デコーディング(たとえば、ADDRESS DECODE372)、コマンド・デコーディング(例えば、COMMAND DECODE374による)、およびリード/ライト制御(例えば、READ FSM378およびWRITE FSM376による)を含むことができる。つまり、INfuCmdバスを通じてコマンドおよびアドレスを受け取ると、このコマンドおよびアドレスをデコードして、アドレス・アクセス・パターンおよびポート選択を判定することができる。以下の表4は、制御ロジック370によってデコードすることができるコマンド・フィールドおよびパラメータを示す。
Figure 2021522630
[00042] 一例では、プロセッサー100に関連付けられた制御ロジックが、表2に指定したパラメータをデコードして、読み出すまたは書き込むネーティブ・ベクトル・アドレスおよびインターフェースの双方を決定することができる。VRF300に接続されているモジュールは、これらのモジュールが正しいデーターを該当するインターフェースにおいて、そして適切な順序でVRF300にまたはVRF300から読み出す/書き込むことができるように、コマンドおよびこれらのパラメータを同様にデコードしなければならないのはもっともである。
[00043] 一例では、これは、階層デコードおよびディスパッチ・アーキテクチャを使用して遂行することができる。つまり、プロセッサー100がFPGAに基づいて実装される場合、カスタム・コードと対を組む既製のNiosII/fプロセッサーを使用して、制御プロセッサーを実現することができる。制御プロセッサーに関連付けられた最上位のスケジューラーが、命令のストリームを受け取り、チェーンにグループ化することができる。これらの命令をデコードした後、最上位のスケジューラーは、分散制御信号を1組の第2レベル・スケジューラーおよび他の1組の第2レベル・デコーダーにディスパッチすることができる。これらの第2レベル・スケジューラーおよびデコーダーは、追加の分散制御信号を最下位のデコーダーにディスパッチすることができる。Niosプロセッサーを使用するこの実装例では、NiosプロセッサーはN個の命令のT回の繰り返しを最上位スケジューラーにストリーミングすることができる。次に、最上位スケジューラーは、命令のMVM特定部分を第2レベル・スケジューラーにディスパッチすることができ、第2レベル・スケジューラーは、目標行列のN行およびN列に沿って、動作を広げることができる。これらのMVMスケジュールをE個の行列−ベクトル・タイル・エンジンにマッピングすることができ、これらのタイル・エンジンならびにそれらの関連するベクトル・レジスター・ファイルおよび蓄積ユニットに1つずつとして、E個で1組のデコーダーに動作をディスパッチすることができる。このE個で1組のデコーダーは、データー平面に散開する(fan out into)制御信号を生成することができ、各タイル・エンジン・ディスパッチャは、ベクトル・データーをベクトル・レジスター・ファイルから読み出し、ベクトル・データーをベクトル・レジスター・ファイルに(back to)書き込むことができる数百ものドット積ユニットに散開する。
[00044] 読み出し/書き込み動作に関して、この例では、VRF300は、内部で、データー幅NATIVE_DIM*BFP_WIDTH+EXP_WIDTHのマルチポート・メモリー(例えば、二重ポートBRAM)を使用することができる。一例では、二重ポート・メモリー(例えば、BRAM)は、サイクル毎に異なるインターフェース回路においてデーターを配給する(serve)ために、回転することができる。つまり、この例では、定常状態において、VRF300は最大読み出し/書き込み帯域幅を達成することができ、ポート競合は発生しない。図3は特定の態様で構成されたVRF300の特定数のコンポーネントを示すが、もっと多いまたは少ないコンポーネントの異なる構成にすることもできる。一例として、二重ポート・メモリーをBRAMとして説明したが、他の種類のプロセッサーでは他の種類のメモリーも使用することができる。一例として、GPU、CPU、または他の種類のプロセッサーにおいて、SRAMまたは他の種類の二重ポート・メモリーを使用することもできる。加えて、図3は二重ポート・メモリー(読み出しのために1つのポート、そして書き込みのために1つのポート)について説明するが、追加のポートを有するメモリーも使用することができる。例えば、2つのリード・ポートおよび2つのライト・ポートを有するメモリーを使用してもよい。
[00045] 図4は、他の例によるベクトル・レジスター・ファイル400のブロック図である。この例は、二重ポート・メモリー430を含むベクトル・レジスター・ファイル(例えば、図3のVRF300)の動作を説明するために、簡略化されている。この例では、ベクトルまたは行列のネーティブ・ディメンションNが128ワードであると仮定する。つまり、行列ベクトル乗算器は、ニューラル・ネットワーク処理の一部として、N×N行列をN×1ベクトルと乗算することができる。更に、この例では、各エレメントが1ワードであり、Wビット幅であることも仮定する。更に、この例では、各ドット積ユニットがL−ワード(またはL−エレメント)のベクトルおよび行列データーを処理し、部分的なドット積を生成する(produce)ことも仮定する。MVMは、部分的なドット積を蓄積するために、追加−削減ツリーを含むことができる。次いで、追加−削減出力(add-reduction output)をアキュミュレータに供給することができ、アキュミュレータは全ての部分和を合計して、行列の行全体に対する最終的なドット積を供給する。VRF400は、8つのインターフェースを通じてベクトル・データーを受け取ることができ、各インターフェースはL個のレーンを有する。VRF400ライト・インターフェースは、例えば、入力インターフェース回路401、入力インターフェース回路403、入力インターフェース回路405を含む、入力インターフェース回路を有することができる。VRF400リード・インターフェースは、例えば、出力インターフェース回路451、出力インターフェース回路453、および出力インターフェース回路455を含む、出力インターフェース回路を有することができる。各入力インターフェース回路は入力バッファ(例えば、入力バッファ402、404、および406)を含むことができ、各出力インターフェース回路は出力バッファ(例えば、出力バッファ462、464、466)を含むことができる。更に、入力バッファは、追加のインターフェース・エレメント(例えば、インターフェース・エレメント412、414、および416)に結合することができる。更に、出力バッファは、追加の出力インターフェース・エレメント(例えば、出力インターフェース・エレメント452、454、および456)に結合することができる。更に、ライト・インターフェースは、マルチプレクサ420を備えることができる。マルチプレクサ420は、入力インターフェース回路の各々から出力を受け取るように結合することができる。マルチプレクサ420の出力は、二重ポート・メモリー430のリード・ポートに結合することができる。更に、リード・インターフェースはデマルチプレクサ440を備えることができ、デマルチプレクサ440は、二重ポート・メモリー430から出力を受け取るように結合することができる。デマルチプレクサからの出力は、出力インターフェース回路に結合することができる。
[00046] 書き込み動作に応答して、テンソルを受け取るために入力インターフェース回路を使用することができ、読み出し動作に応答して、出力インターフェース回路はベクトル・データーを供給することができる。この例では、ライト命令に応答して、1回のクロック・サイクル中に、N個のデーター・エレメントを二重ポート・メモリーに、広いインターフェース(図4においてVで示す)を通じて格納することができる。P(N/L)回のクロック・サイクルの各々の間に、VRF400は、各入力インターフェースを通じて、テンソルの1つ(例えば、1つのN×1ベクトル)を受け取ることができる。図4に示す例では、P=8、N=128、およびL=16である。各データー・エレメントが1ワードであり、1ワードがWビットを有すると仮定すると、8クロック・サイクル毎に、各入力インターフェース回路はN×Wビット(Vビット)を受け取ることができる。この例では、Nは128であり、ワード・サイズが4ビットであると仮定すると、クロック・サイクル毎に、VRF400は512ビットを格納することができる。各クロック・サイクルL(例えば、この場合16)中に、入力インターフェース回路の一部である入力レーンはL個のデーター・エレメント(例えば、L個のワード)を並列に搬送することができる。入力インターフェース回路の一部であるシフト・レジスター(例えば、シフト・レジスター412、414、および416)は、クロック・サイクル毎に512ビットをマルチプレクサ420に供給することができる。
[00047] 同様に、リード命令に応答して、8クロック・サイクル毎に、VRF400はVビット(512ビット)を、V−ビット幅のリード・ポートを通じて、出力インターフェース回路の内少なくとも1つに、マルチプレクサ440を介して供給することができる。シフト・レジスター(例えば、シフト・レジスター452、454、および456)は、クロック・サイクロ毎に、L個のデーター・エレメントをそれぞれの出力バッファに供給することができる。リードおよびライト命令は、同時に実行するように、スケジューリングすることができる。つまり、二重ポート・メモリー430をインターフェースからインターフェースに「回転させる」ことによって、クロック・サイクル毎に、Nのネーティブ・ディメンションを有するベクトル全体をVRF400から読み出すことができ、更にVRF400に書き込むことができる。これによって、プロセッサー100が、FPGAに基づくことが可能になり、またはBRAMの量が制限されるFPGAのような、SRAMの量が制限される他の種類のハードウェア・ノードに基づくことが可能になるという利点を得ることができる。これが有利であるとしてよいのは、行列ベクトル乗算を、FPGAのリソースの大部分にまで拡大する(scale up)ように設計することができ、専用マルチポートBRAMに対応する(provide for)ためにFPGAリソースを無駄にすることがないからである。制御ロジック425は、INPUT CONTROLおよびOUTPUT制御というような制御信号を供給することができる。VRF400の制御面に関する更なる詳細は、図3および他の説明に関して示されている。図4では、N×Nサイズとした2D行列およびN−長IDベクトルを使用するVRF400の動作について説明したが、他のサイズを使用しても、VRF400を動作させることができる。ベクトル・サイズの選択は、目標とする1組のモデルに左右されてよい。大きすぎるベクトルを選択すると、最適なパディング(padding)が得られないおそれがあり、一方小さすぎるベクトルを選択すると、プロセッサーの制御オーバーヘッドが増大するおそれがある。加えて、図4では、二重ポート・メモリーを使用するVRF400の動作について説明したが、メモリーは追加のリード/ライト・ポートを有してもよい。
[00048] 図5は、一例にしたがって、プロセッサーおよびベクトル・レジスター・ファイルを使用してベクトル・データー・エレメントを処理する方法の流れ図を示す。この例では、ステップ510は、ベクトル・レジスター・ファイル(VRF)コマンドをデコードして、アドレス・アクセス・パターンおよびポート選択を判定するステップを含むことができる。このステップは、コマンド・デコード374が実行することができる。先に説明したように、一例では、これは、階層デコードおよびディスパッチ・アーキテクチャを使用して行うこともできる。つまり、FPGAに基づいてプロセッサー100が実装される場合、カスタム・コードと対を組む既製品のNios II/fプロセッサーを使用して制御プロセッサーを実現することができる。制御プロセッサーと関連付けられた最上位スケジューラーが、命令のストリームを受け取り、チェーンにグループ化することができる。命令をデコードした後、最上位スケジューラーは、分散制御信号を1組の第2レベル・スケジューラーおよび他の1組の第2レベル・デコーダーにディスパッチすることができる。これらの第2レベル・スケジューラーおよびデコーダーは、追加の分散制御信号を、最下位レベルのデコーダーにディスパッチすることができる。Niosプロセッサーを使用するこの実装例では、NiosプロセッサーはN個の命令のT回の繰り返しを最上位スケジューラーにストリーミングすることができる。次に、最上位スケジューラーは、命令のMVM特定部分を第2レベル・スケジューラーにディスパッチすることができ、第2レベル・スケジューラーは、目標行列のN行およびN列に沿って、動作を広げることができる。これらのMVMスケジュールをE個の行列−ベクトル・タイル・エンジンにマッピングすることができ、これらのタイル・エンジンならびにそれらの関連するベクトル・レジスター・ファイルおよび蓄積ユニットに1つずつとして、E個で1組のデコーダーに、動作をディスパッチすることができる。このE個で1組のデコーダーは、データー平面に散開する(fan out into)制御信号を生成することができ、各タイル・エンジン・ディスパッチャは、ベクトル・データーをベクトル・レジスター・ファイルから読み出し、ベクトル・データーをベクトル・レジスター・ファイルに(back to)書き込むことができる数百ものドット積ユニットに散開する。
[00049] 加えて、ベクトル・レジスター・ファイル内においてリード−アフター−ライト(RAW)またはライト−アフター−リード(WAR)ハザードが起こる可能性があるので、ハザード検出を使用することができる。つまり、一例では、ハザード検出器(例えば、図2の214)が、リードまたはライト命令によってアクセスされたアドレスを追跡することができ、リード命令が到着し、進行中の書き込みがある場合、ハザード検出器は、到着したリード命令によってアクセスされるアドレスが、現在のライト命令によってアクセスされるアドレスと重複するか否かチェックすることができる。一例では、ハザード検出器は、1対のレジスターを維持することによって、これらの命令によってアクセスされる特定数のアドレスを追跡することを遂行してもよい。
[00050] ステップ520は、少なくとも1つのデコードされたVRFアドレスを待ち行列に入れるステップを含むことができる。この例では、アドレス・デコード372がこのステップを実行することができる。
[00051] ステップ530は、Nのネーティブ・ディメンションを有するベクトル・データーの到着時に、待ち行列からデーターを出すステップを含むことができる。VRF370と関連付けられた制御ロジック370が、このステップを実行することができる。
[00052] ステップ540は、ライト命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを二重ポート・メモリーに格納し、Pクロック・サイクルの各々の間に、N個のデーター・エレメントを二重ポート・メモリーのP個の入力インターフェース回路の各々に供給するステップを含むことができる。ここで、PはNをLで除算した値に等しい整数であり、P個の入力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Pクロック・サイクルの各々の間に、二重ポート・メモリーは、P個の入力インターフェース回路から選択した1つを通じて、N個のデーター・エレメントを受け取るように構成される。この例では、有限状態機械(例えば、WRITE FSM376)がこのステップを実行することができる。このステップに関する更なる詳細は図4に関して示されている。
[00053] ステップ550は、リード命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを二重ポート・メモリーから引き出し、Pクロック・サイクルの各々の間に、L個のデーター・エレメントを二重ポート・メモリーのP個の出力インターフェース回路の各々から供給するステップを含むことができ、P個の出力インターフェース回路の各々が、L個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Pクロック・サイクルの各々の間に、二重ポート・メモリーが、P個の出力インターフェース回路から選択した1つに、N個のデーター・エレメントを供給するように構成される。この例では、有限状態機械(例えば、READ FSM378)がこのステップを実行することができる。このステップに関する追加の詳細は、図4に関して示されている。図5は、特定の順序で実行される特定数のステップについて説明するが、異なる順序でもっと多いまたはもっと少ないステップを実行してもよい。加えて、図5は、二重ポート・メモリーに関する方法について説明したが、追加のポートを有するメモリーを使用してもよい。一例として、2つのリード・ポートおよび2つのライト・ポートを有するメモリーを使用してもよい。
[00054] 結論として、本開示は、マルチポート・メモリー(例えば、二重ポート・メモリー)を含むベクトル・レジスター・ファイルを備えたプロセッサーに関する。このプロセッサーは、更に、データー・エレメントのN×N行列およびデーター・エレメントのN×1ベクトルを処理するように構成された複数のタイルを含むことができ、ここでNは8以上の整数であり、複数のタイルの各々はN個のデーター・エレメントを処理するように構成される。ベクトル・レジスター・ファイルは、ライト命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントをマルチポート・メモリーに格納し、Pクロック・サイクルの各々の間に、N個のデーター・エレメントをマルチポート・メモリーのP個の入力インターフェース回路の各々に供給するように構成することができ、ここでPはNをLで除算した値に等しい整数であり、Lは2以上の整数であり、P個の入力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Pクロック・サイクルの各々の間に、マルチポート・メモリーは、N個のデーター・エレメントを、P個の入力インターフェース回路から選択した少なくとも1つを通じて受け取るように構成される。
[00055] ベクトル・レジスター・ファイルは、更に、リード命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントをマルチポート・メモリーから引き出し、Qクロック・サイクルの各々の間に、L個のデーター・エレメントをマルチポート・メモリーのQ個の出力インターフェース回路の各々から供給するように構成することもでき、ここでQはNをLで除算した値に等しい整数であり、Q個の出力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Qクロック・サイクルの各々の間に、マルチポート・メモリーは、N個のデーター・エレメントを、Q個の出力インターフェース回路から選択した少なくとも1つに供給するように構成される。
[00056] 一例では、マルチポート・メモリーは、二重ポート・メモリーとして構成されてもよく、二重ポート・メモリーは、1つのリード・ポートと1つのライト・ポートとを備えることができる。この例では、リード命令は、ライト命令と実質的に同時に処理することができる。
[00057] 一例では、P個の入力インターフェース回路の1つの各々が、N×1ベクトルを格納するように構成された入力バッファを備え、Q個の出力インターフェース回路の各々が、N×1ベクトルを格納するように構成された出力バッファを備える。この例では、P個の入力インターフェース回路の各々は、N×1ベクトルを入力バッファから受け取るように結合された少なくとも1つのシフト・レジスターを備え、Q個の出力インターフェース回路の各々が、N×1ベクトルを出力バッファに供給するように結合された少なくとも1つのシフト・レジスターを備える。
[00058] 他の例では、本開示は、複数のタイルと、二重ポート・メモリーを備えるベクトル・レジスター・ファイルとを備えるシステムにおける方法に関する。複数のタイルの各々は、データー・エレメントのN×N行列およびデーター・エレメントのN×1ベクトルを処理するように構成される。ここで、Nは8以上の整数であり、複数のタイルの各々はN個のデーター・エレメントを処理するように構成される。
[00059] この方法は、ライト命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを二重ポート・メモリーに格納し、Pクロック・サイクルの各々の間に、N個のデーター・エレメントを二重ポート・メモリーのP個の入力インターフェース回路の各々に供給するステップを含むことができる。ここで、PはNをLで除算した値に等しい整数であり、Lは2以上の整数であり、P個の入力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された入力得レーンを備え、Pクロック・サイクルの各々の間に、二重ポート・メモリーは、N個のデーター・エレメントを、P個の入力インターフェース回路から選択した1つを通じて受け取るように構成される。
[00060] 更に、この方法は、リード命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを二重ポート・メモリーから引き出し、Qクロック・サイクルの各々の間に、L個のデーター・エレメントを二重ポート・メモリーのQ個の出力インターフェース回路の各々から供給するステップを含むことができる。ここで、QはNをLで除算した値に等しい整数であり、Q個の出力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Qクロック・サイクルの各々の間に、二重ポート・メモリーはN個のデーター・エレメントをQ個の出力インターフェース回路から選択した1つに供給するように構成される。
[00061] 一例では、二重ポート・メモリーは1つのリード・ポートと1つのライト・ポートとを備えることができる。この例では、リード命令は、ライト命令と実質的に同時に処理することができる。
[00062] 一例では、P個の入力インターフェース回路の各々は、N×1ベクトルを格納するように構成された入力バッファを備え、Q個の出力インターフェース回路の各々は、N×1ベクトルを格納するように構成された出力バッファを備える。この例では、P個の入力インターフェース回路の各々は、N×1ベクトルを入力バッファから受け取るように結合された少なくとも1つのシフト・レジスターを備え、Q個の出力インターフェース回路の各々は、N×1ベクトルを出力バッファに供給するように結合された少なくとも1つのシフト・レジスターを備える。
[00063] 更に他の例では、本開示は、1つのリード・ポートと1つのライト・ポートとを含む二重ポート・メモリーを備えるベクトル・レジスター・ファイルを備えるプロセッサーに関する。このプロセッサーは、更に、N×N行列およびN×1ベクトルを処理するように構成された複数のタイルを備えてもよい。ここで、Nは8以上の整数であり、複数のタイルの各々は、N個のデーター・エレメントを処理するように構成される。
[00064] ベクトル・レジスター・ファイルは、ライト命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを二重ポート・メモリーに、1つのライト・ポートを通じて格納し、Pクロック・サイクルの各々の間に、N個のデーター・エレメントを二重ポート・メモリーのP個の入力インターフェース回路の各々に供給するように構成されてもよい。ここで、PはNをLで除算した値に等しい整数であり、Lは2以上の整数であり、P個の入力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、Pクロック・サイクルの各々の間に、二重ポート・メモリーは、N個のデーター・エレメントをP個の入力インターフェース回路から選択した1つを通じて受け取るように構成される。
[00065] 更に、ベクトル・レジスター・ファイルは、リード命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを二重ポート・メモリーから、1つのリード・ポートを通じて引き出し、Qクロック・サイクルの各々の間に、L個のデーター・エレメントを二重ポート・メモリーのQ個の出力インターフェース回路の各々から供給するように構成されてもよい。ここで、QはNをLで除算した値に等しい整数であり、Q個の出力インターフェース回路の各々は、L個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、Qクロック・サイクルの各々の間に、二重ポート・メモリーは、N個のデーター・エレメントを、Q個の出力インターフェース回路から選択した1つに供給するように構成される。
[00066] 一例では、P個の入力インターフェース回路の1つの各々が、N×1ベクトルを格納するように構成された入力バッファを備え、Q個の出力インターフェース回路の各々が、N×1ベクトルを格納するように構成された出力バッファを備える。この例では、P個の入力インターフェース回路の各々が、N×1ベクトルを入力バッファから受け取るように結合された少なくとも1つのシフト・レジスターを備え、Q個の出力インターフェース回路の各々が、N×1ベクトルを出力バッファに供給するように構成された少なくとも1つのシフト・レジスターを備える。この例では、リード命令は、ライト命令と実質的に同時に処理することができる。
[00067] 尚、本明細書において図示した方法、モジュール、およびコンポーネントは例示に過ぎないことは理解されよう。あるいは、または加えて、本明細書において説明した機能は、少なくとも部分的に、1つ以上のハードウェア・ロジック・コンポーネントによって実行することができる。例えば、そして限定ではなく、使用することができるハードウェア・ロジック・コンポーネントの実例的な種類には、フィールド・プログラマブル・ゲート・アレイ(FPGA)、特定用途集積回路(ASIC)、特定用途標準製品(ASSP)、システム・オン・チップ・システム(SOC)、複合プログラマブル・ロジック・デバイス(CPLD)等が含まれる。抽象的な、しかしそれでも明確な意味で、同じ機能を達成するためのコンポーネントの構成(arrangement)はいずれも、所望の機能が達成されるように、効果的に「関連付けられる」。したがって、本明細書において特定の機能を達成するために組み合わせられた任意の2つのコンポーネントは、アーキテクチャや仲介コンポーネントに関係なく、所望の機能が達成されるように、互いに「関連付けられた」ものとして見ることができる。同様に、そのように関連付けられた任意の2つのコンポーネントは、所望の機能を達成するために、互いに「動作可能に接続された」または「結合された」ものと見なすこともできる。
[00068] また、本開示において説明したいくつかの例と関連付けられる機能は、非一時的媒体に格納された命令を含むこともできる。「非一時的媒体」という用語は、本明細書において使用する場合、データーおよび/または特定の態様で機械を動作させる命令を格納する任意の媒体を指す。例示的な非一時的媒体には、不揮発性媒体および/または揮発性媒体が含まれる。不揮発性媒体には、例えば、ハード・ディスク、ソリッド・ステート・ドライブ、磁気ディスクまたはテープ、光ディスクまたはテープ、フラッシュ・メモリー、EPROM、NVRAM、PRAM、あるいはその他のこのような媒体、もしくはこのような媒体のネットワーク接続バージョンが含まれる。揮発性媒体には、例えば、DRAM、SRAM、キャッシュ、またはその他のこのような媒体というような、ダイナミック・メモリーが含まれる。非一時的媒体は、伝送媒体とは全く異なるが、これと併せて使用することができる。伝送媒体は、データーおよび/または命令を機械にまたは機械から転送するために使用される。例示的な伝送媒体には、同軸ケーブル、光ファイバ・ケーブル、銅製ワイヤ、および無線波のようなワイヤレス媒体が含まれる。
[00069] 更に、以上で説明した動作の機能間における境界は、単なる例示に過ぎないことは、当業者には認められよう。複数の動作の機能を組み合わせて1つの動作にすることもでき、および/または1つの動作の機能を追加の動作に分散することもできる。更に、代替実施形態では、特定の動作の複数のインスタンスを含んでもよく、種々の他の実施形態では、動作の順序を変更してもよい。
[00070] 本開示は特定的な例を提供するが、以下の請求項に明記される通りの、本開示の範囲から逸脱することなく、種々の修正および変更を行うことができる。したがって、明細書および図は、限定的な意味ではなく、例示的な意味で捕らえられて当然であり、このような修正は全て本開示の範囲内に含まれることを意図している。特定的な例に関して本明細書において説明した便益、利点、または問題に対する解決策はいずれも、任意のまたは全ての請求項の肝要な(critical)、必要な(required)、または必須の特徴もしくは要素として解釈されることは意図していない。
[00071] 更に、「a」または「an」という用語は、本明細書において使用する場合、1つまたは1つよりも多いと定義する。また、請求項における「少なくとも1つ」および「1つ以上の」というような導入句の使用は、同じ請求項が導入句「1つ以上」または「少なくとも1つ」および「a」または「an」のような不定冠詞を含むときであっても、不定冠詞「a」または「an」による他の請求項要素の導入が、このように導入された請求項要素を含む任意の特定の請求項を、1つのこのような要素だけを含む発明に限定することを暗示するように解釈してはならない。これは、定冠詞の使用についても該当する。
[00072] 特に明記されていない限り、「第1の」および「第2の」というような用語は、このような用語が記述する要素間において任意に区別するために使用される。つまり、これらの用語は、必ずしも、このような要素の時間的優先順位または他の優先順位を示すことを意図するのではない。

Claims (15)

  1. プロセッサーであって、
    マルチポート・メモリーを備えるベクトル・レジスター・ファイルと、
    データー・エレメントのN×N行列およびデーター・エレメントのN×1ベクトルを処理するように構成された複数のタイルであって、Nが8以上の整数であり、前記複数のタイルの各々が、N個のデーター・エレメントを処理するように構成される、複数のタイルと、
    を備え、前記ベクトル・レジスター・ファイルが、
    ライト命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを前記マルチポート・メモリーに格納し、Pクロック・サイクルの各々の間に、N個のデーター・エレメントを前記マルチポート・メモリーのP個の入力インターフェース回路の各々に供給するように構成され、PがNをLで除算した値に等しい整数であり、Lが2以上の整数であり、前記P個の入力インターフェース回路の各々が、L個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、前記Pクロック・サイクルの各々の間に、前記マルチポート・メモリーが、N個のデーター・エレメントを、前記P個の入力インターフェース回路から選択した少なくとも1つを通じて受け取るように、構成され、
    リード命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを前記マルチポート・メモリーから引き出し、Qクロック・サイクルの各々の間に、L個のデーター・エレメントを前記マルチポート・メモリーのQ個の出力インターフェース回路の各々から供給するように構成され、QがNをLで除算した値に等しい整数であり、前記Q個の出力インターフェース回路の各々が、L個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、前記Qクロック・サイクルの各々の間に、前記マルチポート・メモリーが、N個のデーター・エレメントを、前記Q個の出力インターフェース回路から選択した少なくとも1つに供給するように構成される、プロセッサー。
  2. 請求項1記載のプロセッサーにおいて、前記マルチポート・メモリーが二重ポート・メモリーであり、前記二重ポート・メモリーが1つのリード・ポートと1つのライト・ポートとを備える、プロセッサー。
  3. 請求項1記載のプロセッサーにおいて、前記リード命令が、前記ライト命令と実質的に同時に処理される、プロセッサー。
  4. 請求項1記載のプロセッサーにおいて、前記P個の入力インターフェース回路の各々が、N×1ベクトルを格納するように構成された入力バッファを備える、プロセッサー。
  5. 請求項1記載のプロセッサーにおいて、前記Q個の出力インターフェース回路の各々が、N×1ベクトルを格納するように構成された出力バッファを備える、プロセッサー。
  6. 請求項4記載のプロセッサーにおいて、前記P個の入力インターフェース回路の各々が、前記N×1ベクトルを前記入力バッファから受け取るように結合された少なくとも1つのシフト・レジスターを備える、プロセッサー。
  7. 請求項5記載のプロセッサーにおいて、前記Q個の出力インターフェース回路の各々が、前記N×1ベクトルを前記出力バッファに供給するように結合された少なくとも1つのシフト・レジスターを備える、プロセッサー。
  8. 複数のタイルと、二重ポート・メモリーを備えるベクトル・レジスター・ファイルとを備えるシステムにおける方法であって、前記複数のタイルの各々が、データー・エレメントのN×N行列およびデーター・エレメントのN×1ベクトルを処理するように構成され構成され、Nが8以上の整数であり、前記複数のタイルの各々が、N個のデーター・エレメントを処理するように構成され、前記方法が、
    ライト命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを前記二重ポート・メモリーに格納し、Pクロック・サイクルの各々の間に、N個のデーター・エレメントを前記二重ポート・メモリーのP個の入力インターフェース回路の各々に供給するステップであって、PがNをLで除算した値に等しい整数であり、Lが2以上の整数であり、前記P個の入力インターフェース回路の各々が、L個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、前記Pクロック・サイクルの各々の間に、前記二重ポート・メモリーが、N個のデーター・エレメントを、前記P個の入力インターフェース回路から選択した1つを通じて受け取るように、構成される、ステップと、
    リード命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを前記二重ポート・メモリーから引き出し、Qクロック・サイクルの各々の間に、L個のデーター・エレメントを前記二重ポート・メモリーのQ個の出力インターフェース回路の各々から供給するステップであって、QがNをLで除算した値に等しい整数であり、前記Q個の出力インターフェース回路の各々が、L個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、前記Qクロック・サイクルの各々の間に、前記二重ポート・メモリーが、N個のデーター・エレメントを、前記Q個の出力インターフェース回路から選択した1つに供給するように構成される、ステップと、
    を含む、方法。
  9. 請求項8記載の方法において、前記二重ポート・メモリーが、1つのリード・ポートと1つのライト・ポートとを備える、方法。
  10. 請求項8記載の方法において、前記リード命令が、ライト命令と実質的に同時に処理される、方法。
  11. 請求項8記載の方法において、前記P個の入力インターフェース回路の各々は、N×1ベクトルを格納するように構成された入力バッファを備える、方法。
  12. 請求項8記載の方法において、前記Q個の出力インターフェース回路の各々は、N×1ベクトルを格納するように構成された出力バッファを備える、方法。
  13. 請求項11記載の方法において、前記P個の入力インターフェース回路の各々が、前記N×1ベクトルを前記入力バッファから受け取るように結合された少なくとも1つのシフト・レジスターを備える、方法。
  14. 請求項12記載の方法において、前記Q個の出力インターフェース回路の各々が、前記N×1ベクトルを前記出力バッファに供給するように結合された少なくとも1つのシフト・レジスターを備える、方法。
  15. プロセッサーであって、
    1つのリード・ポートと1つのライト・ポートとを含む二重ポート・メモリーを備えるベクトル・レジスター・ファイルと、
    N×N行列およびN×1ベクトルを処理するように構成された複数のタイルと、
    を備え、Nが8以上の整数であり、前記複数のタイルの各々が、N個のデーター・エレメントを処理するように構成され、前記ベクトル・レジスター・ファイルが、
    ライト命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを前記二重ポート・メモリーに、前記1つのライト・ポートを通じて格納し、Pクロック・サイクルの各々の間に、N個のデーター・エレメントを前記二重ポート・メモリーのP個の入力インターフェース回路の各々に供給するように構成され、PがNをLで除算した値に等しい整数であり、Lが2以上の整数であり、P個の入力インターフェース回路の各々が、L個のデーター・エレメントを並列に搬送するように構成された入力レーンを備え、前記Pクロック・サイクルの各々の間に、前記二重ポート・メモリーが、N個のデーター・エレメントを前記P個の入力インターフェース回路から選択した1つを通じて受け取るように構成され、
    リード命令に応答して、1クロック・サイクルの間に、N個のデーター・エレメントを前記二重ポート・メモリーから、前記1つのリード・ポートを通じて引き出し、Qクロック・サイクルの各々の間に、L個のデーター・エレメントを前記二重ポート・メモリーのQ個の出力インターフェース回路の各々から供給するように構成され、QがNをLで除算した値に等しい整数であり、前記Q個の出力インターフェース回路の各々が、L個のデーター・エレメントを並列に搬送するように構成された出力レーンを備え、前記Qクロック・サイクルの各々の間に、前記二重ポート・メモリーが、N個のデーター・エレメントを、前記Q個の出力インターフェース回路から選択した1つに供給するように構成される、プロセッサー。
JP2021506612A 2018-04-21 2019-04-06 マルチポート・メモリーを備えたベクトル・レジスター・ファイルを有する行列ベクトル乗算器 Active JP7262569B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/959,209 2018-04-21
US15/959,209 US10795678B2 (en) 2018-04-21 2018-04-21 Matrix vector multiplier with a vector register file comprising a multi-port memory
PCT/US2019/026205 WO2019204068A1 (en) 2018-04-21 2019-04-06 Matrix vector multiplier with a vector register file comprising a multi-port memory

Publications (2)

Publication Number Publication Date
JP2021522630A true JP2021522630A (ja) 2021-08-30
JP7262569B2 JP7262569B2 (ja) 2023-04-21

Family

ID=66248741

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021506612A Active JP7262569B2 (ja) 2018-04-21 2019-04-06 マルチポート・メモリーを備えたベクトル・レジスター・ファイルを有する行列ベクトル乗算器

Country Status (13)

Country Link
US (1) US10795678B2 (ja)
EP (1) EP3785112B1 (ja)
JP (1) JP7262569B2 (ja)
KR (1) KR20210002495A (ja)
CN (1) CN112005214B (ja)
AU (1) AU2019257260B2 (ja)
BR (1) BR112020019457A2 (ja)
CA (1) CA3096443A1 (ja)
IL (1) IL278050B2 (ja)
MX (1) MX2020010916A (ja)
PH (1) PH12020551746A1 (ja)
SG (1) SG11202009936XA (ja)
WO (1) WO2019204068A1 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11574659B2 (en) * 2018-09-11 2023-02-07 Micron Technology, Inc. Parallel access to volatile memory by a processing device for machine learning
US11579883B2 (en) * 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
EP3623984A1 (en) * 2018-09-17 2020-03-18 Secure-IC SAS Circuit configured to monitor a sensitive payload
US11983616B2 (en) * 2018-10-01 2024-05-14 Expedera, Inc. Methods and apparatus for constructing digital circuits for performing matrix operations
US11586883B2 (en) * 2018-12-14 2023-02-21 Microsoft Technology Licensing, Llc Residual quantization for neural networks
US11748599B2 (en) * 2019-02-21 2023-09-05 Texas Instruments Incorporated Super-tiling in neural network processing to enable analytics at lower memory speed
US11907827B2 (en) * 2019-06-28 2024-02-20 Intel Corporation Schedule-aware tensor distribution module
KR102371451B1 (ko) 2021-05-27 2022-03-07 충남대학교 산학협력단 멀티포트 메모리를 이용한 병렬 곱셈장치
US20220413852A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Processor embedded streaming buffer

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0573516A (ja) * 1991-09-12 1993-03-26 Sony Corp 信号処理用プロセツサ
JPH06502265A (ja) * 1990-11-15 1994-03-10 シーメンス アクチエンゲゼルシヤフト 信号処理におけるマトリクス演算の計算回路装置
JP2007280297A (ja) * 2006-04-11 2007-10-25 Seiko Epson Corp プロセッサ、レジスタファイル回路、集積回路装置、マイクロコンピュータ及び電子機器
US20110153707A1 (en) * 2009-12-23 2011-06-23 Boris Ginzburg Multiplying and adding matrices
JP2015225427A (ja) * 2014-05-27 2015-12-14 ルネサスエレクトロニクス株式会社 プロセッサ及びデータ収集方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1311945A1 (en) 2000-08-22 2003-05-21 Jean-Paul Theis A configurable register file with multi-range shift register support
IL145245A0 (en) * 2001-09-03 2002-06-30 Jtc 2000 Dev Delaware Inc System and method including vector-matrix multiplication
US7284113B2 (en) * 2003-01-29 2007-10-16 Via Technologies, Inc. Synchronous periodical orthogonal data converter
GB2399900B (en) * 2003-03-27 2005-10-05 Micron Technology Inc Data reording processor and method for use in an active memory device
US8155113B1 (en) 2004-12-13 2012-04-10 Massachusetts Institute Of Technology Processing data in a parallel processing environment
EP2953792B1 (en) 2013-02-05 2019-03-20 3M Innovative Properties Company Graphic article
US9384168B2 (en) * 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
GB2540940B (en) * 2015-07-31 2018-01-03 Advanced Risc Mach Ltd An apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank
US20170371657A1 (en) * 2016-06-24 2017-12-28 Qualcomm Incorporated Scatter to gather operation
US10140252B2 (en) * 2017-02-28 2018-11-27 Microsoft Technology Licensing, Llc Hardware node with matrix-vector multiply tiles for neural network processing

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06502265A (ja) * 1990-11-15 1994-03-10 シーメンス アクチエンゲゼルシヤフト 信号処理におけるマトリクス演算の計算回路装置
JPH0573516A (ja) * 1991-09-12 1993-03-26 Sony Corp 信号処理用プロセツサ
JP2007280297A (ja) * 2006-04-11 2007-10-25 Seiko Epson Corp プロセッサ、レジスタファイル回路、集積回路装置、マイクロコンピュータ及び電子機器
US20110153707A1 (en) * 2009-12-23 2011-06-23 Boris Ginzburg Multiplying and adding matrices
JP2015225427A (ja) * 2014-05-27 2015-12-14 ルネサスエレクトロニクス株式会社 プロセッサ及びデータ収集方法

Also Published As

Publication number Publication date
BR112020019457A2 (pt) 2021-01-05
AU2019257260A1 (en) 2020-10-01
MX2020010916A (es) 2020-11-09
CA3096443A1 (en) 2019-10-24
EP3785112A1 (en) 2021-03-03
SG11202009936XA (en) 2020-11-27
IL278050B1 (en) 2023-07-01
IL278050A (en) 2020-11-30
EP3785112B1 (en) 2022-03-16
CN112005214B (zh) 2024-02-20
IL278050B2 (en) 2023-11-01
US10795678B2 (en) 2020-10-06
US20190324748A1 (en) 2019-10-24
AU2019257260B2 (en) 2023-09-28
PH12020551746A1 (en) 2021-07-26
KR20210002495A (ko) 2021-01-08
WO2019204068A1 (en) 2019-10-24
JP7262569B2 (ja) 2023-04-21
CN112005214A (zh) 2020-11-27

Similar Documents

Publication Publication Date Title
JP7262569B2 (ja) マルチポート・メモリーを備えたベクトル・レジスター・ファイルを有する行列ベクトル乗算器
CN110998570B (zh) 具有带有块浮点处理的矩阵矢量单元的硬件节点
US11151445B2 (en) Neural network processor with a window expander circuit
US20210406657A1 (en) Multi-function unit for programmable hardware nodes for neural network processing
WO2019204067A1 (en) Neural network processor based on application specific synthesis specialization parameters
US20210312266A1 (en) Deep neural network accelerator with independent datapaths for simultaneous processing of different classes of operations
RU2795887C2 (ru) Матрично-векторный умножитель с набором регистров для хранения векторов, содержащим многопортовую память

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220406

TRDD Decision of grant or rejection written
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230308

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20230313

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230411

R150 Certificate of patent or registration of utility model

Ref document number: 7262569

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150