JP6843187B2 - ダブルロード命令 - Google Patents

ダブルロード命令 Download PDF

Info

Publication number
JP6843187B2
JP6843187B2 JP2019113331A JP2019113331A JP6843187B2 JP 6843187 B2 JP6843187 B2 JP 6843187B2 JP 2019113331 A JP2019113331 A JP 2019113331A JP 2019113331 A JP2019113331 A JP 2019113331A JP 6843187 B2 JP6843187 B2 JP 6843187B2
Authority
JP
Japan
Prior art keywords
register
instruction
stride
load
offset
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.)
Active
Application number
JP2019113331A
Other languages
English (en)
Other versions
JP2020119490A (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.)
Graphcore Ltd
Original Assignee
Graphcore Ltd
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 Graphcore Ltd filed Critical Graphcore Ltd
Publication of JP2020119490A publication Critical patent/JP2020119490A/ja
Application granted granted Critical
Publication of JP6843187B2 publication Critical patent/JP6843187B2/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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
    • 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
    • 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/30141Implementation provisions of register files, e.g. ports
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Neurology (AREA)
  • Executing Machine-Instructions (AREA)

Description

本開示は、単一のオペコードに応答して2つのロード操作を実行するロード命令に関する。
グラフィックス処理装置(GPU)およびデジタル信号プロセッサ(DSP)などの特定のアプリケーション用に設計されたプロセッサの開発への関心が高まってきている。最近関心を集めた別のタイプのアプリケーション特有のプロセッサは、出願人によって「IPU(intelligence processing unit)」(知能処理装置)と呼ばれる機械知能アプリケーション専用のものである。これらは、例えば、ニューラルネットワークなどの知識モデルを訓練するかまたは知識モデルの訓練を補助するため、あるいは、そのようなモデルに基づいて予測もしくは推論を実行するかまたは予測もしくは推論の実行を補助するために、ホストによって割り当てられた仕事を実行するように構成されたアクセラレータプロセッサとして採用することができる。
機械知能アルゴリズムは、複数の相互接続ノードのグラフによって表すことができる「知識モデル」に反復更新を実行することに基づく。各ノードは、その入力の関数を表す。ノードは、グラフへの入力を受信するものもあれば、1つまたは複数の他のノードからの入力を受信するものもある一方で、ノードの出力は、他のノードの入力を形成するものもあれば、グラフの出力を提供するものもある(いくつかの事例では、所定のノードは、これらのグラフへの入力、グラフからの出力および他のノードとの接続のすべてを有するものさえもあり得る)。さらに、各ノードにおける関数は、1つまたは複数のそれぞれのパラメータ(例えば、重み)によってパラメータ化される。学習段階では、経験に基づく入力データセットに基づいて、グラフが全体として、可能な入力の範囲に対して所望の出力を生成するように、様々なパラメータに対する値を見出すことを目的とする。この学習を行うための様々なアルゴリズムは、確率的勾配降下法に基づく誤差逆伝播アルゴリズムなど、当技術分野において知られている。入力データに基づく複数の反復にわたり、パラメータは、それらの誤差を減少するように徐々に調節され、グラフは、解に向けて収束する。次いで、後続の段階では、学習済みのモデルを使用して、指定された入力セットに与えられる出力の予測を行うこと、または、指定された出力セットに与えられる入力(原因)に関する推論を行うことができる。
プロセッサの命令セットは、プロセッサの実行ユニットが実行するように構成された基本的なタイプの機械語命令のセットを指す。各機械語命令は、オペコードと、0またはそれ以上のオペランドを取るための1つまたは複数のオペランドフィールドとを含む。命令セットの機械語命令の各タイプは、実行時に、実行ユニットの異なるロジックを異なるタイプの処理を実行させるようトリガする異なるオペコードにより特徴付けられる。
機械知能などの特定のアプリケーションに適するようにプロセッサの設計を調整するための方法の1つは、問題のアプリケーションにおいて発生することが多い傾向にあるタイプの動作を実行するためのプロセッサの命令セットの1つまたは複数の専用タイプの命令を提供することである。例えば、アプリケーションが特定のタイプの算術関数(例えば、行列乗算)の実行を必要とする場合が多ければ、アプリケーション特有のプロセッサに対する新しい設計には、単一の機械語命令の単一のインスタンスの単一のオペコードおよび関連オペランドによってこの算術関数を代わりに実行することができる命令を命令セットに含める。そうでなければ、より簡単な機械語命令(例えば、加算およびスカラ乗算)のシーケンスから構築しなければならないであろう。
機械知能などのアプリケーションにおいてデータを処理する際に対処する問題の1つは、スパース性(sparsity)である。すなわち、いくつかのデータセットでは、有益なまたは関連する情報を含むデータ値が少数しか存在しない場合がある。そのようなデータを効率的に処理するため、メモリからそれらの値のみをロードすることが望ましい。しかし、関連データのパターンは、事実上ランダムである。どのデータ値をロードするかは、プログラムが決めることである。この動作を効率的に行うため、ロード命令の暗黙的な機能の一部としてプログラム可能ストライドを含めることができる。すなわち、各ロード命令を用いて、命令は、ストライド値をロードアドレスに適用することも行う(典型的には、現在の値のロード後。すなわち、アドレスは、次のロード命令のためにポストインクリメントされる)。このストライド値は、プロセッサのプログラム可能レジスタにおいて設定することによってプログラム可能とできる。
他方では、いくつかのデータがスパース性のものである一方で、同じアプリケーションにおいてスパースデータと並んで使用されている値の別のセットはシステマティック性のものである。すなわち、プログラムは、メモリの広範にわたる隣接するアドレスからすべての値を(または少なくともメモリアドレス空間における規則的な間隔から値を)ロードする必要がある。この例は、ニューラルネットワークで発生する場合があり、プログラムは、ニューラルネットワークの重み(システマティック性の)と、ニューラルネットワークによる動作の基となるデータ(典型的には、スパース性の)の両方をロードする必要がある。
そのようなデータを効率的に処理するため、本明細書では、「準スパース性の(semi sparse)」アドレス指定機能を有するタイプのロード命令を提供することが望ましいことが認識されている。すなわち、ロード命令は、単一の機械語命令において2つのロード命令を実行し、各ロード命令は、異なる挙動を有する。重みなどの第1のシステマティックセット値に対応するため、第1のロードは、実行された命令の各インスタンスによって固定ストライドの分だけ第1のロードアドレスをシステマティックにインクリメントするが、第1のシステマティックセット値と並んで処理されているデータのスパースセットに対応するため、第2のロード操作は、命令の各インスタンスによってプログラム可能ストライド値の分だけ第2のロードアドレスをインクリメントする。
従って、本明細書で開示される一態様によれば、実行ユニットと、メモリと、1つまたは複数のレジスタファイルとを含むプロセッサがある。実行ユニットは、命令セットから機械語命令のインスタンスを実行するように構成される。命令セットにおいて定義される命令のタイプは、メモリから1つまたは複数のレジスタファイルの少なくとも1つにロードするためのダブルロード命令を含む。実行ユニットは、ロード命令が実行されると、固定ストライドの分だけストライドさせる第1のロード操作および可変ストライドの分だけストライドさせる第2のロード操作を実行するように構成され、可変ストライドは、1つまたは複数のレジスタファイルのうちの1つのレジスタファイルの可変ストライドレジスタにおいて指定される。
実行ユニットは、ロード操作を実行するように構成されたロード/ストアユニットを含む。また、実行ユニットは、論理ユニットも含み、論理ユニットは、整数演算ユニットおよび/または浮動小数点演算ユニットを含んでもよい。実施形態に応じて、ストライドは、ロード/ストアユニットまたは整数演算ユニットによって適用されてもよい。
実施形態では、ロード/ストアユニットは、第1のロードの後に固定ストライドを適用し、第2のロードの後に可変ストライドを適用するように構成することができる。すなわち、アドレスは、実行されたダブルロード命令の各インスタンスによってポストインクリメントされる。しかし、その代替として、他の実装形態では、ストライドがダブルロード命令の各インスタンスによってアドレスをプレインクリメントできることも除外されない。
実施形態では、ダブルロード命令は、第1のロードに対するメモリにおける第1の送信元アドレスと、第1のロードに対する1つまたは複数のレジスタファイルのうちの1つにおける第1の送信先と、第2のロードに対するメモリにおける第2の送信元アドレスと、第2のロードに対する1つまたは複数のレジスタファイルのうちの1つにおける第2の送信先と、を指定するオペランドを取ることができる。第1の送信元アドレスは、1つまたは複数のレジスタファイルのうちの1つのオフセットレジスタにおける第1のオフセットによって指定され、第2の送信元アドレスは、1つまたは複数のレジスタファイルのうちの1つのオフセットレジスタにおける第2のオフセットによって指定される。この場合、実行ユニットは、ロード命令が実行されると、第1の送信元アドレスから第1の送信先に第1の値をロードすることによって第1のロード操作を実行し、固定ストライドを第1のオフセットに適用し、第2の送信元アドレスから第2の送信先に第2の値をロードすることによって第2のロード操作を実行し、可変ストライドを第2のオフセットに適用するように構成される。
好ましくは、オフセットは、非ゼロベースアドレスに対するオフセットである。しかし、その代替として、他の実装形態では、オフセットがゼロからのオフセット(すなわち、関連アドレス空間内の絶対アドレス)であってもよいことも除外されない。
実施形態に応じて、第1および第2の送信先は、1つまたは複数のレジスタファイルのうち1つの第1および第2のレジスタまたはレジスタのうち異なるものであってもよく、1つまたは複数のレジスタファイルのうち1つの同じ送信先レジスタの第1および第2のフィールドであってもよい。例えば、実施形態では、ロードに対する送信先として使用されるレジスタファイルは、32ビットまたは64ビットワードアーキテクチャを有し、第1および第2の値の各々は、16ビット値(例えば、16ビット浮動小数点値)であり、第1の値は、32ビットまたは64ビットレジスタのうちの1つのレジスタの第1のフィールドにロードされ、第2の値は、同じレジスタの第2のフィールドにロードされる。
実施形態では、第1および第2のオフセットは、1つまたは複数のレジスタファイルのうちの1つの同じオフセットレジスタの異なるフィールドに保持でき、実行ユニットは、固定および可変ストライドを第1および第2のオフセットにそれぞれ加え、次いで、オフセットレジスタに書き戻すことによって、ストライドを適用するように構成される。あるいは、他の実装形態では、第1および第2のオフセットをそれぞれの第1および第2のオフセットレジスタに保持可能であることも除外されない。
実施形態では、上記オフセットレジスタは、ダブルロード命令のオペランドによって指定することができる。あるいは、他の実装形態では、オフセットレジスタは、暗黙的であってもよい(すなわち、オペランドによって指定する必要はなく、例えば、代わりに、固定することも、1つまたは複数の他の以前の命令によってパラメータとして設定することもできる)。
実施形態では、実行ユニットは、第1のオフセットを非ゼロベースアドレスに加えることによって上記第1の送信元アドレスを決定し、第2のオフセットを非ゼロベースアドレスに加えることによって上記第2の送信先アドレスを決定するように構成することができる。例えば、実施形態では、ベースアドレスは、32ビットレジスタに保持される21ビット値であり、オフセット値は、32ビットベースアドレス値の最下位ビットに加えられる16ビット値の各々である。
実施形態では、第1および第2の送信元アドレスに対して同じベースアドレスを使用することができる。あるいは、他の実装形態では、異なるそれぞれのベースアドレスを使用可能であることも除外されない。
実施形態では、ベースアドレスは、1つまたは複数のレジスタファイルのうちの1つのレジスタファイルのベースアドレスレジスタにおいて指定することができる。実施形態では、ダブルロード命令は、ベースアドレスを指定するオペランドを取ることができる。代替の実装形態では、例えば、ベースアドレスがゼロであることも、ゼロではないが固定された暗黙的な値であることも除外されない。
実施形態では、ダブルロード命令は、可変ストライドレジスタを指定するオペランドを取りることができる。あるいは、他の実装形態では、可変ストライドレジスタは、暗黙的であってもよい。
実施形態では、可変ストライドレジスタは、可変ストライドレジスタの多数のフィールドのそれぞれに多数のストライド値を保持するように構成することができ、実行ユニットは、実行ユニットによって実行されたダブルロード命令の各連続インスタンスによってストライド値のうちの異なるものを使用することによって、可変ストライドの上記変更を実行するように構成される。例えば、実施形態では、各フィールドは、4ビットであり、従って、各フィールドは、16個の異なる可能なストライド値のいずれかを指定することができる。実施形態では、ストライドレジスタは、32ビット幅であり、従って、8個のストライド値の保持が可能である。
実施形態では、実行ユニットは、ダブルロード命令の各連続インスタンスによって1つのフィールドに相当するビット数の分だけ可変ストライドレジスタのコンテンツをシフトすることによって異なる値の上記使用を実行するように構成することができる。
実施形態では、実行ユニットは、常に、最下位フィールド(例えば、最下位4ビット)を使用することができ、シフトは右シフトである。例えば、各フィールドが4ビットである場合は、右シフトは、4ビットずつ右にシフトすることを含む。
しかし、他の代替の実施形態では、ストライドを変更するための他の手段を使用することができる。例えば、実行ユニットは、ダブルロード命令の各連続インスタンスによって、ストライドレジスタの異なるフィールドおよび/または異なる連続ストライドレジスタを使用するように構成することができる。
実行ユニットは、以前の命令を実行することによって、ストライド値を可変ストライドレジスタにロードすること、第1および第2のオフセットをオフセットレジスタにロードすること、ならびに/あるいは、ベースアドレスをベースアドレスレジスタにロードするように動作可能であってもよい。
実施形態では、プロセッサは、ニューラルネットワークの少なくとも一部を含むプログラムを実行するようにプログラムすることができ、プログラムは、ダブルロード命令の多数のインスタンスを含み、各インスタンスでは、第1のロード操作は、ニューラルネットワークの重みをロードするために使用され、第2のロード操作は、ニューラルネットワークによる動作の基となるデータをロードするために使用される。
本明細書で開示される別の態様によれば、コンピュータ可読記憶媒体上で具体化されるコンピュータプログラムであって、本明細書で開示される任意の実施形態のプロセッサによって実行されるように構成されたコードであって、ダブルロード命令の多数のインスタンスを含むコードを含む、コンピュータプログラムが提供される。
本明細書で開示される別の態様によれば、実行ユニットと、メモリと、1つまたは複数のレジスタファイルとを含むプロセッサを操作するための方法であって、実行ユニットが、命令セットから機械語命令のインスタンスを実行するように構成され、命令セットにおいて定義される命令のタイプが、メモリから1つまたは複数のレジスタファイルの少なくとも1つにロードするためのダブルロード命令を含む、方法であり、実行ユニットを通じてダブルロード命令の多数のインスタンスを実行するステップを含む方法であり、実行ユニットが、ダブルロード命令の各連続インスタンスによって固定ストライドの分だけストライドさせる第1のロード操作と、ダブルロード命令の各連続インスタンスによって可変ストライドの分だけストライドさせる第2のロード操作とを実行することによって、ダブルロード命令の上記インスタンスの各々を実行するように構成され、可変ストライドが、1つまたは複数のレジスタファイルのうちの1つのレジスタファイルの可変ストライドレジスタにおいて指定される、方法が提供される。
実施形態では、方法は、本明細書で開示されるプロセッサ特徴のいずれかによる動作をさらに含み得る。
本開示の実施形態を理解することを支援するため、および、そのような実施形態をどのように実施するかを示すため、単なる例示として、添付の図面を参照する。
プロセッサの概略ブロック図である。 ニューラルネットワークの概略図である。 プロセッサの別の概略ブロック図である。 レジスタファイルのいくつかのレジスタの概略図である。 準スパース性のロード命令の動作を概略的に示す。
実施形態の詳細な説明
図1は、本開示の実施形態による、少なくとも1つの処理モジュール4を含むプロセッサの例を示す。実施形態では、プロセッサは、複数の処理モジュール4または「タイル」を含んでもよく、複数の処理モジュール4は、同じチップ(すなわち、ダイ)上に実装され、互いに通信できるようにする相互接続構造を介して共に接続される。
処理モジュール4は、処理装置10、1つまたは複数のレジスタファイル26およびローカルメモリ11(すなわち、マルチタイルアレイの場合には同じタイル上、または、単一プロセッサチップの場合には同じチップ上)を含む。メモリ11は、命令メモリ12およびデータメモリ22(異なるアドレス可能メモリユニットまたは同じアドレス可能メモリユニットの異なる領域において実装することができる)を含む。命令メモリ12は、処理装置10によって実行される機械語命令を含むプログラムを格納する。データメモリ22は、実行コードによる動作の基となるデータと、実行コードによって出力されたデータ(例えば、そのような演算の結果として)を格納する。レジスタファイル26のレジスタは、メモリアドレスが命令を実行することによって演算することができる一方で、レジスタアドレスが命令語においてビットとして固定されるという点で、一般メモリとは異なる。
実行パイプライン13は、フェッチステージ14と、復号ステージ16と、命令セットアーキテクチャによって定義されるような、算術および他の論理演算、アドレス計算、ロードおよびストア操作ならびに他の動作を実行することができる実行ユニットを含む実行ステージ18とを含む。本明細書で言及される命令は、単一のオペコードおよび0またはそれ以上のオペランドからなる機械語命令(すなわち、プロセッサの命令セットの基本命令のうちの1つのインスタンス)を意味することに留意されたい。
フェッチステージ14は、メモリ12からプログラムの命令を次々とフェッチし、それらの命令を復号のために復号ステージ16に渡す。次いで、復号ステージ16は、命令を実行するために、命令において指定された任意のオペランドレジスタの復号済みのレジスタアドレス(すなわち、レジスタファイル26のアドレス)と共に、復号済みの命令を実行ユニット18に渡す。実行ユニット18は、レジスタファイル26のオペランドおよび制御状態レジスタへアクセスでき、オペランドおよび制御状態レジスタは、復号済みのレジスタアドレスに基づいて命令を実行する際に使用することができる。実施形態では、レジスタファイル26は、少なくともメモリアドレスを含む整数を格納するための第1のまたはメインレジスタファイル(MRF)と、浮動小数点値(例えば、f16および/またはf32)を格納するための第2のまたは補助レジスタファイル(ARF)とを含んでもよい。
実行ユニット18があるタイプの命令を実行する際、実行ユニット18は、命令のタイプに応じて、1つまたは複数のレジスタファイル26のうちの1つまたは複数のレジスタを使用することができる。例えば、プロセッサの命令セットは、少なくとも1つのタイプのロード(load)命令を含み、実施形態では、多数の異なるタイプのロード命令を含む。ロード命令は、メモリ22の送信元アドレスを指定するための少なくとも1つのオペランドと、少なくとも1つのレジスタファイル26の1つまたは複数の送信先レジスタを指定するための少なくとも1つのオペランドとを取る。実行されると、実行ユニット18は、メモリ22の送信元アドレスからレジスタファイル26(例えば、ARF)の指定されたレジスタに値をロードする。ロード命令のいくつかのタイプは、レジスタファイル26(例えば、MRF)のうちの1つのレジスタファイル26の別のレジスタに保持されたポインタを介して送信元アドレスを指定する。ポインタは、メモリ22の送信元アドレスを指す。この場合、ロードの送信元オペランドは、送信元アドレスを取り入れる対象となるMRFのレジスタを指定することによって、送信元メモリアドレスを代理的に指定する。ポインタは、他の以前に実行された命令インスタンスによってMRFにプリロードすることができる。例えば、いくつかの実施形態では、これは、即値送信元アドレスオペランドを取り入れる別の「より基本的な」タイプのロード命令のインスタンスによるものであってもよい。あるいは、他の実施形態では、ロードが即値送信元オペランドを取り入れるというよりむしろ、その即値は、他の命令の即値から形成され、後続のロード命令のためにレジスタに格納され、次いで、アドレスレジスタとして使用することができる。注:一般に、他の任意のデータとは異なる形でポインタを扱う必要はない。コンテンツは、整数または浮動小数点値というよりむしろ、たまたまアドレスであっただけである。従って、いくつかの実施形態では、命令セットは、実際に、即値として完全な絶対アドレスを取り入れるいかなるロード命令も含まない(ただし、即値をレジスタにコピーするための命令を含む)。
また、プロセッサ命令セットは、典型的には、整数演算命令と浮動小数点演算命令の両方を含む多数の算術命令も含む。算術命令は、レジスタファイル26(例えば、ARF)のうちの少なくとも1つのレジスタファイル26の送信元および送信先レジスタを指定する1つまたは複数の送信元オペランドおよび少なくとも1つの送信先オペランドを取る。実行されると、算術演算は、送信元レジスタに保持された値に基づいてそのそれぞれのタイプの算術演算を実行し、指定された送信先レジスタに結果を入れる。例えば、加算命令は、2つの送信元オペランドおよび1つの送信先オペランドを取ることができ、送信元レジスタに存在する値を加算し、結果として得られた総和を送信先レジスタに入れる。また、行列乗算または畳み込み(もしくはその一部)を実行するためのものなど、様々な他のより複雑なタイプの算術演算も命令セットに含めることができる。例えば、これらのタイプの命令は、入力データのセットに重み(カーネル)の行列を効率的に畳み込むプログラムを有することが望ましい機械学習において特定の適用を見出すことができる。
プロセッサの命令セットは、少なくとも1つのタイプのストア(store)命令をさらに含む。ストア命令は、レジスタファイル26(例えば、ARF)のうちの少なくとも1つのレジスタファイル26の少なくとも1つの送信元およびメモリ22の少なくとも1つの送信先を指定するためのオペランドを取る。実行されると、ストア命令は、指定された送信元レジスタに存在する値をメモリ22の指定されたメモリアドレスに格納する。ストア命令のいくつかのタイプは、レジスタファイル26(例えば、MRF)のうちの別のレジスタに保持されたポインタを介して送信先アドレスを指定する。ポインタは、メモリ22の送信先アドレスを指す。この場合、ストアの送信先オペランドは、送信先アドレスを取り入れる対象となるMRFのレジスタを指定することによって、送信先メモリアドレスを代理的に指定する。また、単一の命令においてストアとロードの両方を実行するロード/ストア命令も知られている。
実施形態では、処理装置10は、多数の時間的にインターリーブされた(interleave)スレッドを並列に実行することが可能なマルチスレッド処理装置(場合により、バレルスレッド処理装置とも呼ばれる)の形態を取ることができる。この場合、メモリ12は、プログラムの多数の異なるスレッドを格納し、各スレッドは、1つまたは複数のあるタスクを実行するための命令のそれぞれのシーケンスを含む。フェッチステージ14は、スレッドの並列セットのうちの異なるものから命令を次々とフェッチし、パイプライン13を通じてそれらの命令を交互に実行するように構成される。並列スレッドの各々は、他の並列スレッドとは別にそのそれぞれのスレッドのプログラム状態(すなわち、コンテキスト)を保持するために、それぞれのレジスタファイル26のうちの少なくとも1つに割り当てられる。場合により、各スレッドのレジスタは、そのコンテキストレジスタと呼ばれる。所定のスレッドが実行されている際、実行ユニット18は、本来は、ロード命令、算術命令およびストア命令などのそのスレッドの命令を実行するために、それぞれのスレッドのレジスタファイル26を使用する。実施形態では、各スレッドのコンテキストは、別個の対応するMRFおよびARFで提供され、実行ユニット18が所定のスレッドを実行する際、実行ユニット18は、本来は、オペランドのタイプに従って、それぞれのスレッドの対応するMRFまたはARFを使用する。
開示されるプロセッサの例示的な適用の1つでは、処理モジュール4上で実行されるプログラムは、ニューラルネットワーク100の少なくとも一部を実装することができ、そのアイデアについては、図2において概略的に例示として示す。
ニューラルネットワークは、相互接続ノード(すなわち、頂点)102およびエッジ(すなわち、接続)104のグラフを含む。グラフの各ノード102は、1つまたは複数の入力エッジと、1つまたは複数の出力エッジとを有する。ノード102のうちのいくつかの入力エッジのうちのいくつかは、ノード102のうちの他のいくつかの出力エッジであり、それにより、ノードが互いに接続され、グラフが形成される。さらに、ノード102の1つまたは複数の入力エッジは、全体としてのグラフへの入力を形成し、ノード102の1つまたは複数の出力エッジは、全体としてのグラフの出力を形成する。所定のノードは、これらのグラフへの入力、グラフからの出力および他のノードとの接続のすべてを有するものであってもよい。各エッジ104は、値またはテンソル(n次元行列)を伝達し、これらは、入力および出力エッジにおいてノード102におよびノード102から提供される入力および出力を形成する。
各ノード102は、1つまたは複数の入力エッジにおいて受信される1つまたは複数の入力についての関数を表し、この関数の結果は、1つまたは複数の出力エッジにおいて提供される出力である。各関数は、1つまたは複数のパラメータ(重みと呼ばれる場合もあるが、必ずしも乗法重みである必要はない)によってパラメータ化される。一般に、異なるノード102によって表される関数は、関数の異なる形態であることおよび/または異なるパラメータによってパラメータ化することが可能である。
さらに、各ノードの関数の1つまたは複数のパラメータは、それぞれの誤差値によって特徴付けられる。その上、それぞれの条件は、各ノード102のパラメータの誤差と関連付けることができる。単一のパラメータによってパラメータ化された関数を表すノード102の場合、条件は、簡単な閾値であってもよく、すなわち、条件は、誤差が指定閾値内にある場合に満たされるが、誤差が閾値を超える場合には満たされない。複数のそれぞれのパラメータによってパラメータ化されたノード102の場合、誤差の許容レベルに達したノード102に対する条件は、より複雑なものであってもよい。例えば、条件は、そのノード102のパラメータの各々が対応する閾値内に収まる場合にのみ満たされてもよい。別の例として、同じノード102に対する異なるパラメータの誤差を組み合わせた組合せ計量を定義することができ、条件は、組合せ計量の値が指定閾値内に収まるという条件で満たされ得るが、そうでなければ、条件は、組合せ計量の値が閾値を超える場合は満たされない(あるいは、計量の定義に応じて、その逆も同様である)。条件が何であれ、これにより、ノードのパラメータの誤差が許容度の一定のレベルまたは程度を下回るかどうかの尺度が得られる。一般に、任意の適切な計量を使用することができる。条件または計量は、すべてのノードに対して同じものであってもよいし、それぞれのノードに対して異なるものであってもよい。
学習段階では、アルゴリズムは、経験データ(すなわち、グラフへの入力の異なる可能な組合せを表す複数のデータポイント)を受信する。多くの経験データが受信されるにつれて、アルゴリズムは、経験データに基づいて、パラメータの誤差ができうる限り最小となるよう、グラフの様々なノード102のパラメータを徐々に調節する。目標は、所定の入力に対してグラフの出力が所望の出力にできる限り近くなるようなパラメータの値を見出すことである。グラフが全体としてそのような状態に向かう傾向となったときに、グラフは収束したと言える。適切な収束度が得られた後、グラフは、予測または推論を実行するため(すなわち、何らかの所定の入力に対する結果を予測するかまたは何らかの所定の出力に対する原因を推論するため)に使用することができる。
学習段階は、多くの異なる可能な形態を取ることができる。例えば、教師ありアプローチ(supervised approach)では、入力経験データは、訓練データ(すなわち、既知の出力に対応する入力)の形態を取る。各データポイントを用いると、アルゴリズムは、出力が所定の入力に対する既知の出力によりマッチするよう、パラメータを調節することができる。後続の予測段階では、グラフは、入力クエリを近似予測出力にマッピングするために使用することができる(または、推論する場合は、その逆も同様である)。また、他の手法も可能である。例えば、教師なしアプローチ(unsupervised approach)では、1つの入力データ当たり1つの参照結果という概念は存在せず、代わりに、機械知能アルゴリズムは、出力データの構造の識別を任される。あるいは、強化学習アプローチ(reinforcement approach)では、アルゴリズムは、入力経験データの各データポイントに対して少なくとも1つの可能な出力を試し、この出力が、正か否か(および、潜在的には、正または否の度合い)(例えば、勝つか負けるか、利益か損失かまたは同様のもの)が知らされる。多くの試行にわたり、アルゴリズムは、正の結果をもたらす入力を予測することができるように、グラフのパラメータを徐々に調節することができる。グラフを学習するための様々な手法およびアルゴリズムは、機械学習の当業者に知られている。
処理装置10がマルチスレッド処理モジュールである実施形態では、各スレッドは、ニューラルネットワークの異なるノード102を実装するために使用することができる。ならびに/あるいは、プロセッサが多数のタイルを含む実施形態では、各タイルは、説明される処理モジュール4の例であり、各タイル4は、ノード102のうちの1つまたは複数のサブセットを含むニューラルネットワークのそれぞれの部分を実装するために使用することができる。それに従って、スレッド間および/またはタイル間の通信は、ニューラルネットワークのノード102間のエッジ104を表す。複数のスレッドおよび/またはタイル4にわたって実行される全体としてのプログラムは、ニューラルネットワークを訓練するように構成された訓練アルゴリズムおよび/またはニューラルネットワークに基づいて推論もしくは予測を実行するための推論もしくは予測アルゴリズムと共に、ニューラルネットワークを含む機械知能アルゴリズムを実装することができる。
図3は、本明細書で開示される実施形態による、処理モジュール10のさらなる詳細を示す。示されるように、実行ユニット18は、ロードおよびストア命令を実行するためのロード/ストアユニット(LSU)55と、算術命令を実行するための論理ユニット58とを含む。論理ユニット58は、整数演算命令を実行するための整数演算論理ユニット(IALU)および/または浮動小数点演算命令を実行するための浮動小数点ユニット(FPU)を含む。
所定のアプリケーションでは、メモリ22は、少なくとも3つのタイプのコンテンツ、すなわち、a)ポインタ(図では、斜線ハッチングによって概略的に表されている)、b)システマティック値(クロスハッチング)、および、c)スパースデータ(点で塗りつぶされている)を格納するために使用できる。ポインタは、メモリアドレスまたはアドレスオフセットもしくはデルタであり、レジスタファイル26(例えば、MRF)のうちの少なくとも1つのレジスタにロードされ、ロードすべきメモリ22の他の値/データを指し示すためにさらなるロード命令によって使用されるものである。ポインタは、以前に言及したように、以前に実行された命令によってレジスタファイル26に保持できる。この動作が終了した時点で、1つまたは複数のさらなるタイプのロード命令は、レジスタに保持されたアドレスに対するストライド(デルタ)またはオフセットによって定義されたアドレスから代わりにロードを実行することができる。これは、さらなるタイプのロード命令がより高い意味的密度を有し得ることを意味する。基本タイプのロード命令と同様に、命令フォーマットの所望のロードアドレスの完全な即値インスタンスを含めると、送信元オペランドフィールドのかなりのビットが占められる。従って、この動作が必要ではなく、代わりに、さらなるタイプのロード命令の送信元オペランドがより小さなレジスタアドレス(ロードのためのポインタを含む)を指定することしか必要としない場合は、単一の基本的なロードより多くの機能をサポートするさらなる追加のオペランドの1つを収容することができる。また、ソフトウェアデータ構造は、空間的局所性を呈し、アドレスは、互いによく似たものになる傾向がある。エネルギーの観点から、数ビットしか違わない命令(およびそれらの関連即値)をフェッチし続けることは非効率的である。
本明細書で開示されるストライドされる高い意味的密度のロード命令の例は、ダブルロード命令(準スパース性のロード命令とも呼ばれる)であり、間もなくさらに詳細に論じる。
システマティック値は、プログラムによる動作の基となる値である。プログラムは、その値を、メモリ22の領域内の広範にわたるメモリアドレス全体を通じてシステマティックな場所から(すなわち、隣接するアドレスの各々またはアドレス空間における少なくとも規則的な間隔から)ロードする必要がある。この例は、ニューラルネットワークの重みである。以下の説明は、重みとしてのシステマティック値を例示するが、これは制限されず、以下の教示を他のタイプのシステマティック値に適用することもできることが理解されよう。他方では、スパースデータはデータであり、これもまたプログラムによる動作の基となり、システマティック方式で離間されていない(すなわち、規則的な間隔ではない)ある特定の選択された場所からロードする必要があるだけである。別の言い方をすれば、データの一部のみが有益なまたは関連する情報を含む。例えば、データの多くは、ゼロに量子化することができ、非ゼロデータエントリのみが必要とされる。あるいは、別の例として、プログラムは、擬似ランダムパターンで値のいくつかをドロップアウトすることを望む場合がある。データのそのようなアイテムのメモリの場所は、それらのメモリの場所がシステマティックパターンに従わず、所定のプログラムがデータの中のどこにでも現れる可能性があるという点で、事実上任意である。
プログラムは、互いに並んだシステマティック値およびスパースデータから選択されたエントリの両方をロードする(例えば、それらに共に基づいて動作するために)必要があってもよい。例えば、スパースデータセットから選択されたデータのみを用いて、重みのシステマティックセットを低減することを必要とする場合がある。例えば、ニューラルネットワークの文脈では、重みは、典型的には、高密にパックされ、他のニューロンからの作動は、スパースにパックされてもよい。
どのデータをロードする必要があるかは、アプリケーションに応じて、プログラムが決定することである。しかし、プログラムがメモリコンテンツを効率的に処理できるようにするため、本明細書では、「準スパース性の」ロード機能を有し、単一の命令において2つのロードを実行するプロセッサの命令セットの命令を提供することが望ましいことが認識されている。すなわち、ロード操作のうちの一方は、実行されたロード命令の各インスタンスによって固定ストライドの分だけストライドされ、他方のロードは、ロード命令の各インスタンスによって可変ストライドの分だけストライドされる。このタイプのロード命令は、本明細書では、ダブルロードもしくは準スパース性のロード命令と呼ぶことができるか、または、いくつかの実施形態では、「ldb16b16」と呼ぶことができる。実施形態では、そのセマンティクス(semantics)は、以下の通りである。
ldb16b16 $aDst0:Dst0+1,$mBase0,$mOffset++,$mDelta>>
例示的な実装形態を表すものとして、「$m」は、MRFのレジスタ(メモリアドレスのために使用される)を指し、「$a」は、ARFのレジスタ(浮動小数点値のために使用される)を指す。
上記のセマンティクスにおいて表されるように、ダブルロード命令は、第1および第2のロード操作のそれぞれに対して、レジスタファイル26(例えば、ARF)のうちの少なくとも1つにおいて、第1および第2の送信先を指定する少なくとも1つの送信先オペランドを取り入れる。実施形態では、これらの送信先は、レジスタファイル26(例えば、ARF)のうちの1つのレジスタファイル26の2つの別個の送信先レジスタ$aDst0および$aDst0+1(例えば、隣接するレジスタ)である。実施形態では、この動作には、単一のオペランドがレジスタファイル26のうち1つのレジスタの一方(例えば、最初の$aDst0)を識別する必要があり、他方のレジスタの場所は、実行ユニット18によって、その一方のレジスタに対して固有のものである(例えば、先行するまたは次の隣接するレジスタ$aDst0+1である、すなわち、自然に位置合わせされたレジスタである)と理解される。あるいは、別の実装形態では、第1および第2の送信先が同じレジスタの第1および第2のフィールドであってもよい(その場合、そのレジスタを識別するために単一の送信先オペランドしか必要としない)ことは除外されない。いずれにせよ、実施形態では、ダブルロード命令は、1対(2要素ベクトル)の16ビット値(例えば、f16(半精度浮動小数点値))をロードする。この方法は、1つの16ビット重みと、スパースデータセットからの1つの16ビットデータ値とをロードするために使用することができる(例えば、両方ともf16)。
「ldb16b16」というニーモニックは、実施形態では、実行される第1および第2のロード操作が16ビットブロードキャストロードであるという事実を指す。この文脈における「ブロードキャスト」は、ベクトルが十分に埋まるようにスカラ値を複製することを指し、各ベクトル要素は、スカラ値のコピーである。ldb16b16の「b」は、2つのロードされた16ビットスカラ値がブロードキャストされることを示す。実施形態では、値の各々は、16ビット要素の2要素ベクトルを埋めるために複製される。すなわち、第1および第2の送信先レジスタ(例えば、$Dst0および$Dst0+1)の各々は、32ビット幅レジスタである。第1のロード操作によってロードされた16ビットの重みは、第1の送信先レジスタ(例えば、$Dst0)の32ビットを埋めるように複製され、第2のロード操作の16ビットのデータ値は、第2の送信先レジスタ(例えば、$Dst0+1)を埋めるように複製される。この理由は、少なくとも1つの実装形態では、レジスタファイル26およびARFパイプラインが最小で32ビットに基づいて動作し得るためである。16ビット値の場合、最小データは、2要素ベクトル(f16v2)である。ブロードキャストにより、同じ入力値が両方の16ビットの半パイプラインに提示されることが保証される。複製は、結果として生じるいかなる例外も、16ビット入力オペランドのみに起因し得ることを意味する(その一方で、半パイプラインの一方に例えばゼロが提示された場合は、入力オペランドによるものではない例外をもたらし得る)。
また、ダブルロード命令は、第1および第2のロード操作によってそれぞれロードされる予定の値をロードする対象となるメモリ22の第1および第2の送信元アドレスを指定する1つまたは複数のオペランドも取る。実施形態では、これらの送信元アドレスは、少なくとも1つのレジスタファイル26の1つまたは複数のレジスタを識別することによって指定され、それらの間では、メモリ22の第1および第2の送信元アドレスを決定するための値が保持される。この動作を行うため、実施形態では、ダブルロード命令は、レジスタファイル26(例えば、MRF)のうち1つのベースアドレスレジスタ$mBaseを識別する1つの送信元オペランドと、レジスタファイル26のうち1つのオフセットレジスタ$mOffsetを識別する別の送信元オペランドとを取る。ベースアドレスレジスタ$mBaseは、ベースメモリアドレス、すなわち、ベースポインタ(例えば、別のタイプのロード命令などの別の命令の以前のインスタンスによって、命令を形成する定数によってまたはベースアドレスを形成するための何らかの整数演算によってそこにプリロードされている)を保持するように構成される。このベースアドレスは、第1および第2のロード操作の両方に共通のベースアドレスである。オフセットレジスタ$mOffsetは、$mOffsetレジスタの第1および第2のそれぞれのフィールドに第1および第2のロードに対する第1および第2のアドレスオフセット値(この場合もやはり、以前に実行された命令によって以前にそこに配置されている)をそれぞれ保持するように構成される。あるいは、代替の実施形態では、オフセットサイズおよびレジスタアーキテクチャに応じて、第1および第2のオフセットを保持するために、2つの別個の第1および第2のレジスタを使用することができる(例えば、オフセットオペランドは、これらのレジスタのうちの一方のみを識別し、他方の場所は、その一方のレジスタに対して固有のものである(例えば、同じレジスタファイルの隣接するレジスタである))。いずれにせよ、上記のセマンティクス表現における「++」は、オフセットレジスタのオフセット値が、実行されたダブルロード命令の各インスタンスによってストライド値の分だけ(第1のロードは固定ストライド値の分だけ、そして、第2のロードはプログラム可能デルタの分だけ)自動的にインクリメントされるという事実を指す。
ダブルロード命令は、実行されたダブルロード命令の各インスタンスによって第2のロード操作に対するストライド値(すなわち、オフセットレジスタ$mOffsetの第2のオフセットに適用されるアドレスデルタ)を指定する少なくとも1つのオペランドをさらに取る。実施形態では、このダブルロード命令は、単一のオペランドしか必要としない。実施形態では、オペランドは、レジスタファイル26(例えば、MRF)のうち1つのデルタレジスタ$mDelta(以前に実行された命令によって以前にそこに配置されている)を識別することによってデルタを指定する。デルタレジスタ$mDeltaは、少なくとも1つのデルタ値を保持するように構成され、実施形態では、デルタレジスタの多数のフィールド(例えば、4ビットフィールド)のそれぞれに多数のデルタを保持するように構成される。ダブルロード命令の機能は、実行されたダブルロード命令の各連続インスタンスによってデルタ値のうちの異なるものを使用することである。実施形態では、この機能は、毎回1つのフィールドに相当するビット数(例えば、4ビット)の分だけレジスタのコンテンツを右にシフトし、現在のデルタ(すなわち、ストライド)に対して最下位フィールド(例えば、最下位4ビット)を常に使用することによって実装される。これが、上記の表現において「>>」によって表されているものである。
図4に示されるように、実施形態では、ベースアドレスレジスタ$mBase(MRFの)は、32ビット幅であり、ベースアドレス(base_addr)は、ベースアドレスレジスタの最下位21ビットを占めている21ビットポインタである。実施形態では、オフセットレジスタ$mOffset(MRFの)は、32ビット幅である。オフセットレジスタ$mOffsetの第1の16ビットフィールド(例えば、最上位16ビットの$mOffset[31:16])は、第1のロード操作に対する(重みに対する)16ビットオフセット値(woffset)を保持するために使用され、オフセットレジスタ$mOffsetの第2の16ビットフィールド(例えば、最下位16ビットの$mOffset[15:0])は、第2のロード操作に対する(スパースデータからのデータ値に対する)16ビットオフセット値(doffset)を保持するために使用される。実施形態では、デルタレジスタ$mDelta(MRFの)は、32ビット幅であり、デルタレジスタ$mDelta内のデルタフィールドの各々は、4ビットであり、8つの独立設定可能な4ビットストライドを格納するための合計で8つのフィールドが得られ、各々は、異なる16の可能な値のうちのいずれかを取ることができる。
図5は、実行ユニット18によって実行される際のダブルロード命令の動作を示す(実行ユニット18は、ダブルロード命令のオペコードに応答してこの機能を実行するように適切に構成された論理を含む)。ダブルロード命令のインスタンスが実行されると、第1のロード操作は、メモリ22の第1の送信元アドレスに存在する値をレジスタファイル26(例えば、ARF)のうち1つの第1の送信先レジスタ(例えば、$aDst0)にロードする。実施形態では、第1の送信元アドレスの値は、ベースアドレス(base_addr)に第1のオフセット値を加えたものである。実施形態では、第1の送信元アドレスは、ベースアドレスレジスタ$mBaseから取り入れられ、第1のオフセット(woffset)は、オフセットレジスタ$mOffsetの第1のフィールド(例えば、$mOffset[31:16])から取り入れられる。すなわち、第1のロード操作は、$mBase+$mOffset[31:16]から$Dst0にロードする。
また、第2のロード操作もダブルロード命令の同じインスタンスの同じオペコードに応答して実行される。第2のロード操作は、メモリ22の第2の送信元アドレスに見られる値をレジスタファイル26(例えば、ARF)のうちの1つのレジスタファイル26の第2の送信先レジスタ(例えば、$aDst0+1)にロードする。実施形態では、第2の送信元アドレスの値は、ベースアドレス(base_addr)に第2のオフセット値を加えたものである。実施形態では、第2の送信元アドレスは、ベースアドレスレジスタ$mBaseから取り入れられ、第2のオフセット(doffset)は、オフセットレジスタ$mOffsetの第2のフィールド(例えば、$mOffset[15:0])から取り入れられる。すなわち、第2のロード操作は、$mBase+$mOffset[15:0]から$Dst0+1にロードする。
実行されたダブルロード命令の各連続インスタンスによって、第1の送信元アドレスは、固定デルタ(例えば、アドレス空間の1単位(アトム)(例えば、ストライドの目的で1単位は2バイトである−以下を参照))の分だけ自動的にインクリメントされる。実施形態では、この動作は、1単位をオフセットレジスタ$mOffsetの第1のフィールドに加えることによって実装される。さらに、第2の送信元アドレスは、プログラム可能デルタの分だけ自動的にインクリメントされる。実施形態では、この動作は、プログラム可能デルタをオフセットレジスタ$mOffsetの第2のフィールドに加えることによって実装される。実施形態では、プログラム可能デルタは、デルタレジスタ$mDeltaのフィールドのうちの1つから取り入れられる。このデルタ値は、第2のオフセットに加える単位(アトム)の数(例えば、2バイトの単位の数)を示す。さらに、実行されたダブルロード命令の各連続インスタンスによって、デルタレジスタ$mDeltaの複数のデルタ値のうちの異なるものが使用される。実施形態では、この動作は、ダブルロード命令の各インスタンスによって、デルタレジスタ$mDeltaの最下位フィールド(例えば、最下位4ビット)を常に使用し、次いで、1フィールド(例えば、4ビット)分だけこのレジスタのコンテンツを右にシフトすることによって実装される。均等の変形形態は、各命令によって、最上位フィールド(例えば、最上位4ビット)を常に使用し、左にシフトすることであろう。二値論理の文脈における「左」および「右」は、物理的な向きではなく、ビットシグニフィカンス(bit significance)を指すことに注意されたい。
2つのストライドは、ダブルロード命令のオペコードに応答してダブルロード命令の同じ単一のインスタンスを実行する固有の部分として、それぞれのアドレスに自動的に適用される。ストライドをオフセットに適用するために別個の機械語命令は不要である(ただし、別個の機械語命令は、ベースアドレス、オフセットおよびストライドデルタをベースアドレス、オフセットおよびデルタレジスタ($mBase、$mOffset、$mDelta)に最初にロードするために必要であってもよい)。
実施形態では、ロードされている値のそれぞれ(すなわち、重みおよびデータ値)は、16ビット値である。従って、本目的のためのストライドまたはデルタの1単位(アトミックサイズ)は、2バイトである。従って、ダブルロード命令の各インスタンスによって、第1の送信元アドレス(重みに対する)は、1単位(2バイト)分だけインクリメントされ、第2の送信元アドレス(データに対する)は、デルタレジスタに1を加えたものに2バイトを乗じたもの(すなわち、2バイトの単位が(デルタ+1)組)の値(「デルタ」)に等しい数の分だけインクリメントされる。デルタ=0のときは、このインクリメントは、1単位(2バイト)のストライドに相当し、デルタ=1のときは、このインクリメントは、2単位(4バイト)のストライドに相当するなど、以下同様であることに留意されたい。この理由は、ほとんどのアプリケーションの場合、ゼロのストライドが無効であるためである。しかし、いくつかの代替の実装形態では、プログラム可能ストライドの異なる可能な値のうちの1つに対してゼロのストライドを選択することができるオプションが与えられる(すなわち、2つのロード操作のうちの1つに対してあるインスタンスから次のインスタンスへの静的アドレスを可能にする)ことは除外されない。
実施形態では、第1および第2のロードは、それらのそれぞれのストライドの分だけポストインクリメントされる。すなわち、実行されたダブルロード命令の各インスタンスによって、そのインスタンスの第1のロード操作の後に、そのインスタンスの第1の固定ストライドが適用され、そのインスタンスの第2のロード操作の後に、同じインスタンスの第2の可変ストライドが適用される(ただし、第1のロードと第2のロード、第1のストライドと第2のストライド、第1のストライドと第2のロード、および、第1のロードと第2のストライドの相対的順番は、必ずしも問題にはならない)。しかし、他の代替の実装形態では、ダブルロード命令が実行される際に第1および第2のロードをそれらのそれぞれのストライドの分だけプレインクリメントできることは除外されない。
数学的には、説明された機能は、以下の通り表現することができる。
base_addr=$mBase[20:0] // ベースレジスタからベースアドレスを読み取る。
woffset=$mOffset[31:16] // オフセットレジスタの第1のフィールドから重みオフセットを読み取る。
doffset=$mOffset[15:0] // オフセットレジスタの第2のフィールドからデータオフセットを読み取る。
delta=$mDelta[3:0] // デルタレジスタの最下位4ビットからストライドを読み取る。
EA[0]=base_addr+woffset // 重みアドレスオフセットをベースアドレスに加える。
EA[1]=base_addr+doffset // データアドレスオフセットをベースアドレスに加える。
woffset+=2 // 重みアドレスオフセットを2バイトだけインクリメントする。
mdelta=(delta+1)*2 // ストライドを演算する(単位:バイト)
doffset+=mdelta // データアドレスオフセットをストライドの分だけインクリメントする。
$mOffset:=(woffset<<16)|doffset // インクリメントしたオフセットをオフセットレジスタに書き戻す。
$mDelta:=$mDelta>>4 // 次のストライドを得るためにストライドデルタを4ビットだけ右にシフトする。
第1および第2のロード操作は、ダブルロード命令のオペコードに応答して、実行ユニット18のロード/ストアユニット(LSU)55によって実行される。実施形態では、ストライドの演算および適用もまた、LSUによって実行することができる。あるいは、他の実施形態では、この機能のいくつかまたはすべては、整数演算論理ユニットIALUなど、実行ユニット18の別のユニット58のロジックを再利用することによって実装することができる。
上記の実施形態は単なる例示として説明されていることが理解されよう。
例えば、上記で与えられる正確なセマンティクスは必ずしも制限するものではなく、当業者は、同じ基本的な機能または同様のものを単一の機械語命令に符号化するための他の方法を見出すことができる。例えば、オペランドのうちの1つまたは複数は、$mBase、$mOffset、$mDeltaなどのレジスタに保持されている値を参照して、それぞれの情報を指定するオペランドというよりむしろ、即値オペランドであってもよい(「即値」は、命令セットアーキテクチャの文脈の用語であり、レジスタを参照するというよりむしろ、数として直接符号化してオペランドフィールドに埋め込むことによって情報が指定されることを意味する)。
その代替としてまたはそれに加えて、オペランドのうち1つまたは複数は必要ではない場合があり、それらのオペランドが指定することになっている情報は、代わりに、暗黙的であってもよい(「暗黙的」は、当技術分野の命令セットアーキテクチャの文脈の用語であり、オペランドにおいて問題の情報を指定する必要がないことを意味し、その理由は、問題の情報が代わりに自動的に想定されるためである)。例えば、ストライドレジスタ$mDeltaの識別情報(identity)は、暗黙的であってもよい。
さらなる変形形態では、より多くのオペランドフィールドが設けられてもよい。例えば、命令において2つの送信先オペランドフィールドを設け、第1および第2の送信先レジスタを独立して指定できるようにしてもよい。そのような設計考察は、例えば、意図するアプリケーションの機能の量およびプロセッサアーキテクチャの命令ビット幅に依存してもよい。
さらなる例示的な変形形態では、第1および第2のオフセットは、ベースに対するものというよりむしろ、絶対アドレス(すなわち、アドレス空間における0に対するオフセット)でとでき、それによって、ベースアドレスオペランドは不要となる。また、オフセットまたはデルタのアイデア(「加える」、「インクリメントする」または同様のものに対して説明される場合を含む)は、本明細書で言及される場合は、負の値を加えることを除外するものと読み取るべきではない。すなわち、同等に、ダブルロード命令の各インスタンスによって、オフセットの大きさをベースアドレスから減ずること、および/または、ストライド(デルタ)の大きさを第2のオフセットから減ずることができる(高値から始め、低値に向かって減少するように、メモリアドレスを通じて逆行させるため)。
さらに、上記で説明される様々なレジスタのアーキテクチャ上のビット幅およびサイズならびに値は、制限されず、この場合もやはり、他の実装形態では、プロセッサの設計考察および意図するアプリケーションなどに応じて異なってもよいことに留意されたい。
さらに、本開示の範囲は、ニューラルネットワークまたは機械学習のアプリケーションに限定されず、本明細書の教示は、より一般に、スパースデータセットからの他の選択された値と並んで、いくつかのシステマティック値をロードして処理する必要があるいかなるアプリケーションにおいても採用することができる。また、本開示の範囲は、マルチスレッドまたはマルチタイルアーキテクチャに限定されない。技法は、システマティックデータとスパースデータの両方をロードして処理するために使用することができるプロセッサのいかなる設計に対しても使用することができる。
開示される技法の他の変形形態または使用事例は、本明細書の本開示が与えられた時点で当業者に明らかになるであろう。本開示の範囲は、説明される実施形態による制限は受けず、添付の請求項による制限のみを受ける。
4 処理モジュール
10 処理装置
11 ローカルメモリ
12 命令メモリ
13 パイプライン
14 フェッチ
16 復号
18 実行ユニット
22 データメモリ
26 コンテキストレジスタ
55 ロード/ストアユニット
58 論理ユニット
100 ニューラルネットワーク
102 ノード
104 エッジ

Claims (15)

  1. 実行ユニットと、メモリと、1つまたは複数のレジスタファイルとを含むプロセッサであって、前記実行ユニットが、命令セットにおいて定義される機械語命令のインスタンスを実行するように構成され、
    前記命令セットは前記メモリの送信元アドレスに存在する値を前記1つまたは複数のレジスタファイルの少なくとも1つにロードするためのダブルロード命令を含み、
    前記実行ユニットは、前記ダブルロード命令の複数のインスタンスが実行されると、各インスタンスの実行毎に第1の送信元アドレスを固定ストライドの分だけインクリメントさせる第1のロード操作、および、各インスタンスの実行毎に第2の送信元アドレスを可変ストライドの分だけインクリメントさせる第2のロード操作を実行するように構成され、前記可変ストライドは、前記1つまたは複数のレジスタファイルのうち1つの可変ストライドレジスタにおいて指定される、プロセッサ。
  2. 前記第1のロード操作の後に前記固定ストライドを適用し、前記第2のロード操作の後に前記可変ストライドを適用するように構成されるロード/ストアユニットをさらに含む、請求項1に記載のプロセッサ。
  3. 前記ダブルロード命令は、前記第1の送信元アドレスと、前記第1のロード操作に対する前記1つまたは複数のレジスタファイルのうち1つの第1の送信先と、前記第2の送信元アドレスと、前記第2のロード操作に対する前記1つまたは複数のレジスタファイルのうち1つの第2の送信先と、を指定するオペランドを取り、前記第1の送信元アドレスは、前記1つまたは複数のレジスタファイルのうち1つのオフセットレジスタの第1のオフセットによって指定され、前記第2の送信元アドレスは、前記1つまたは複数のレジスタファイルのうち1つのオフセットレジスタの第2のオフセットによって指定され、
    前記実行ユニットは、前記ダブルロード命令が実行されると、前記第1の送信元アドレスから前記第1の送信先に第1の値をロードすることによって前記第1のロード操作を実行し、前記固定ストライドを前記第1のオフセットに適用し、前記第2の送信元アドレスから前記第2の送信先に第2の値をロードすることによって前記第2のロード操作を実行し、前記可変ストライドを前記第2のオフセットに適用するように構成される、請求項1または2に記載のプロセッサ。
  4. 前記第1および第2のオフセットは、前記1つまたは複数のレジスタファイルのうち1つの同じオフセットレジスタの異なるフィールドに保持され、前記実行ユニットは、前記固定および可変ストライドを前記第1および第2のオフセットにそれぞれ加え、次いで、前記オフセットレジスタに書き戻すことによって、前記ストライドを適用するように構成される、請求項3に記載のプロセッサ。
  5. 前記オフセットレジスタは、前記ダブルロード命令のオペランドによって指定される、請求項4に記載のプロセッサ。
  6. 前記実行ユニットは、前記第1のオフセットを非ゼロベースアドレスに加えることによって前記第1の送信元アドレスを決定し、前記第2のオフセットを非ゼロベースアドレスに加えることによって前記第2の送信元アドレスを決定するように構成される、請求項3〜5のいずれか一項に記載のプロセッサ。
  7. 前記第1および第2の送信元アドレスに対して同じベースアドレスが使用される、請求項6に記載のプロセッサ。
  8. 前記ベースアドレスは、前記1つまたは複数のレジスタファイルのうちの1つのレジスタファイルのベースアドレスレジスタにおいて指定される、請求項7に記載のプロセッサ。
  9. 前記ダブルロード命令は、前記ベースアドレスを指定するオペランドを取る、請求項8に記載のプロセッサ。
  10. 前記ダブルロード命令は、前記可変ストライドレジスタを指定するオペランドを取る、請求項1〜9のいずれか一項に記載のプロセッサ。
  11. 前記可変ストライドレジスタは複数のフィールドを有し、前記可変ストライドレジスタの少なくともいくつかのフィールドのそれぞれにストライド値を保持するように構成され、前記実行ユニットは、ダブルロード命令の各インスタンスの実行毎に前記可変ストライドレジスタの異なるフィールドに保持されたストライド値を使用して前記可変ストライドの値の変更を実行するように構成される、請求項1〜10のいずれか一項に記載のプロセッサ。
  12. 前記実行ユニットは、前記ダブルロード命令の各インスタンスの実行毎に1つのフィールドに相当するビット数の分だけ前記可変ストライドレジスタのコンテンツをシフトすることによって前記可変ストライドの値の前記変更を実行するように構成される、請求項11に記載のプロセッサ。
  13. ニューラルネットワークの少なくとも一部を実現するプログラムを実行するようにプログラムされ、前記プログラムは、前記ダブルロード命令の複数のインスタンスを含み、各インスタンスでは、前記第1のロード操作は、ニューラルネットワークの重みをロードするために使用され、前記第2のロード操作は、前記ニューラルネットワークによる動作の基となるデータをロードするために使用される、請求項1〜12のいずれか一項に記載のプロセッサ。
  14. コンピュータ可読記憶媒体上で具体化されるコンピュータプログラムであって、請求項1〜13のいずれか一項に記載のプロセッサによって実行されるように構成されたコードであって、前記ダブルロード命令の複数のインスタンスを含むコードを含む、コンピュータプログラム。
  15. 実行ユニットと、メモリと、1つまたは複数のレジスタファイルとを含むプロセッサを操作するための方法であって、前記実行ユニットは、命令セットにおいて定義される機械語命令のインスタンスを実行するように構成され、
    前記命令セットは前記メモリの送信元アドレスに存在する値を前記1つまたは複数のレジスタファイルの少なくとも1つにロードするためのダブルロード命令を含み、
    前記方法は、前記実行ユニットを通じて前記ダブルロード命令の複数のインスタンスを実行するステップを含み、前記実行ユニットは、前記ダブルロード命令の各インスタンスの実行毎に第1の送信元アドレスを固定ストライドの分だけインクリメントさせる第1のロード操作と、前記ダブルロード命令の各インスタンスの実行毎に第2の送信元アドレスを可変ストライドの分だけインクリメントさせる第2のロード操作とを実行することによって、前記ダブルロード命令の前記インスタンスの各々を実行するように構成され、前記可変ストライドが、前記1つまたは複数のレジスタファイルのうちの1つのレジスタファイルの可変ストライドレジスタにおいて指定される、方法。
JP2019113331A 2019-01-22 2019-06-19 ダブルロード命令 Active JP6843187B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1900848.1A GB2580664B (en) 2019-01-22 2019-01-22 Double load instruction
GB1900848.1 2019-01-22

Publications (2)

Publication Number Publication Date
JP2020119490A JP2020119490A (ja) 2020-08-06
JP6843187B2 true JP6843187B2 (ja) 2021-03-17

Family

ID=65656024

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019113331A Active JP6843187B2 (ja) 2019-01-22 2019-06-19 ダブルロード命令

Country Status (7)

Country Link
US (1) US11061679B2 (ja)
JP (1) JP6843187B2 (ja)
CN (1) CN111459548B (ja)
CA (1) CA3040894C (ja)
DE (1) DE102019112186A1 (ja)
FR (1) FR3091937B1 (ja)
GB (1) GB2580664B (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB202112803D0 (en) 2021-09-08 2021-10-20 Graphcore Ltd Processing device using variable stride pattern

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002517038A (ja) 1998-05-27 2002-06-11 エイアールエム リミテッド 再循環レジスタファイル
AU2003286131A1 (en) 2002-08-07 2004-03-19 Pact Xpp Technologies Ag Method and device for processing data
US7275148B2 (en) * 2003-09-08 2007-09-25 Freescale Semiconductor, Inc. Data processing system using multiple addressing modes for SIMD operations and method thereof
US7487296B1 (en) * 2004-02-19 2009-02-03 Sun Microsystems, Inc. Multi-stride prefetcher with a recurring prefetch table
US8145877B2 (en) * 2008-03-31 2012-03-27 Xilinx, Inc. Address generation for quadratic permutation polynomial interleaving
US8458685B2 (en) * 2009-06-12 2013-06-04 Cray Inc. Vector atomic memory operation vector update system and method
US8850166B2 (en) 2010-02-18 2014-09-30 International Business Machines Corporation Load pair disjoint facility and instruction therefore
WO2013048369A1 (en) * 2011-09-26 2013-04-04 Intel Corporation Instruction and logic to provide vector load-op/store-op with stride functionality
US10049061B2 (en) * 2012-11-12 2018-08-14 International Business Machines Corporation Active memory device gather, scatter, and filter
US9619229B2 (en) * 2012-12-27 2017-04-11 Intel Corporation Collapsing of multiple nested loops, methods and instructions
US9582422B2 (en) * 2014-12-24 2017-02-28 Intel Corporation Hardware prefetcher for indirect access patterns
US20160313995A1 (en) * 2015-04-24 2016-10-27 Optimum Semiconductor Technologies, Inc. Computer processor with indirect only branching
US9875214B2 (en) * 2015-07-31 2018-01-23 Arm Limited Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers
US20170192783A1 (en) * 2015-12-30 2017-07-06 Elmoustapha Ould-Ahmed-Vall Systems, Apparatuses, and Methods for Stride Load
US20170192782A1 (en) * 2015-12-30 2017-07-06 Robert Valentine Systems, Apparatuses, and Methods for Aggregate Gather and Stride
US10108538B1 (en) 2017-07-31 2018-10-23 Google Llc Accessing prologue and epilogue data
US20190332924A1 (en) * 2018-04-27 2019-10-31 International Business Machines Corporation Central scheduler and instruction dispatcher for a neural inference processor
US10769070B2 (en) * 2018-09-25 2020-09-08 Arm Limited Multiple stride prefetching
GB2584268B (en) 2018-12-31 2021-06-30 Graphcore Ltd Load-Store Instruction

Also Published As

Publication number Publication date
GB2580664B (en) 2021-01-13
CN111459548A (zh) 2020-07-28
CN111459548B (zh) 2024-03-22
FR3091937B1 (fr) 2021-12-24
US11061679B2 (en) 2021-07-13
JP2020119490A (ja) 2020-08-06
DE102019112186A1 (de) 2020-07-23
US20200233670A1 (en) 2020-07-23
CA3040894C (en) 2022-03-22
CA3040894A1 (en) 2020-07-22
FR3091937A1 (fr) 2020-07-24
GB2580664A (en) 2020-07-29
GB201900848D0 (en) 2019-03-13

Similar Documents

Publication Publication Date Title
US20200394495A1 (en) System and architecture of neural network accelerator
TWI787313B (zh) 資料處理設備中的資料項中的計數元件
JP6944974B2 (ja) ロード/ストア命令
CN112559051A (zh) 使用脉动阵列和融合操作的深度学习实现方式
KR102379899B1 (ko) 벡터 술어 명령
JP6918051B2 (ja) マルチスレッドプロセッサの命令キャッシュ
GB2480338A (en) Conditional compare instruction using a status register
TW201805835A (zh) 一種能支援不同位元寬運算資料的運算單元、方法及裝置
JP2019517060A (ja) ベクトル演算を実行する際にアドレス衝突を管理するための装置及び方法
US11907158B2 (en) Vector processor with vector first and multiple lane configuration
JP2020501270A (ja) パーティション・レプリケート命令
CN115599742A (zh) 用于阵列处理器的装置及相关方法
JP6843187B2 (ja) ダブルロード命令
JP2020501274A (ja) 要素レプリケート命令
JP7377208B2 (ja) データ処理
US20230196124A1 (en) Runtime predictors for neural network computation reduction
CN105404588B (zh) 处理器和其中生成数据存储操作的一个或多个地址的方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190628

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200525

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200818

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201112

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: 20210202

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210222

R150 Certificate of patent or registration of utility model

Ref document number: 6843187

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250