(58)【調査した分野】(Int.Cl.,DB名)
記憶メモリ及びメモリ処理装置を含むメモリデバイスで実行される方法であって、前記メモリ処理装置は、少なくとも1つの実行ユニットと、パケットパーサと、パケットジェネレータとを含み、前記方法は、
前記メモリ処理装置で、前記パケットパーサを用いて命令一式を受信し且つ構文解析することと、
前記少なくとも1つの実行ユニットを用いて前記命令一式を実行して、前記メモリデバイスの前記記憶メモリからデータを取り出すことを試みることと、
前記パケットジェネレータを用いて、前記命令一式を、前記少なくとも1つの実行ユニットによる前記命令一式の前記実行に応じて前記メモリデバイスの前記記憶メモリから取り出された任意のデータと組み合わせて、パケットを生成することと、
前記パケットジェネレータを用いて前記パケットを送信することであって、前記パケットは、前記メモリ処理装置から、前記メモリデバイスに接続されたメモリコントローラへ転送される、ことと、
を含み、
前記メモリ処理装置の、前記少なくとも1つの実行ユニット、前記パケットパーサ、及び前記パケットジェネレータは、前記記憶メモリと同一のハードウェアコンポーネント内に配置されている、方法。
前記命令一式を受信し且つ構文解析することは、前記メモリデバイスに結合されたネットワークから前記命令一式を受信することを含み、前記パケットを送信することは、前記パケットを前記ネットワークへ送信することを含む、請求項1に記載の方法。
前記命令一式を実行することは、第1の実行ユニットで第1の命令を実行することと、第2の実行ユニットで第2の命令を実行することとを含み、前記第1及び第2の命令の前記実行は並列である、請求項1に記載の方法。
前記メモリデバイスは、複数のメモリデバイスノードのうちの第1のノードであり、前記メモリデバイスから前記パケットを送信することは、前記パケットを、前記複数のメモリデバイスノードのうちの第2のノードへ送信することを含む、請求項1に記載の方法。
前記命令一式はフェンスフラグを含み、前記命令一式を記憶させることは、前記フェンスフラグよりも前の1つ以上の命令を命令メモリに記憶させ、前記フェンスフラグよりも後の1つ以上の命令を前記命令メモリに記憶させることを含む、請求項1に記載の方法。
【発明を実施するための形態】
【0007】
以下の詳細説明において、本明細書の一部を形成し、例示のために特定の実施形態が示される添付図面を参照する。図面において同じ番号は、いくつかの図を通して実質的に同様の構成要素を説明する。他の実施形態が使用可能であり、そして本開示の範囲から逸脱することなく構造的、論理的、及び電気的変更を行うことが可能である。従って、以下の詳細説明は、限定的な意味で解釈されるべきではない。
【0008】
本開示は、いかなる1つの種類のメモリにも限定されない。自律的メモリ処理装置は、任意の種類のメモリデバイス、メモリデバイス群、または半導体メモリ、光学メモリ、磁気メモリを含むメモリ技術に対応付けることが可能である。例えば、メモリは、不揮発性(例えばNANDフラッシュ、NORフラッシュ、相変化メモリ(PCM))、または揮発性(例えばDRAM、SRAM)を含み得る。
【0009】
本明細書で使用される場合、ノードは、受信パケットを構文解析するパケットパーサと、ノードからネットワークへ送信されるパケットを生成するパケットジェネレータと、任意のネットワークにノードをインターフェイス接続可能なネットワークポートとを備え得る。ノードはその上、ノードの作動を制御する処理要素と、並びにデータを記憶するメモリとを備え得る。別の実施形態において、ノードは、追加機能のための追加ハードウェア及び/またはソフトウェア/ファームウェアを備え得る。自律的処理装置を有する自律的メモリデバイスは、ノードとみなされ得る。
【0010】
図1は、自律的メモリ処理装置の実施形態の機能的ブロック図を例示する。このような装置は、メモリ100に対応付けられ、中央処理装置(CPU)ベースのコンピューティングシステムにおけるボトルネックメモリ帯域幅の渋滞を軽減するのに使用され得る。自律的メモリ処理装置は、自律的メモリデバイス内に配置され得る。
【0011】
自律的メモリ処理装置は、パケットパーサ101と、プログラムカウンタ107と、命令メモリ105と、デコードロジック103と、レジスタファイル109と、パーサ115と、パケットジェネレータ111と、1つまたは複数の実行ユニット(EU)113と、ページバッファ117とを備え得る。
図1の構成要素及び構成は、他の実施形態が他の構成要素及び他の構成を使用することができるので、例示のみを目的とする。
【0012】
図2は、パケットパーサ101のブロック図を例示する。パケットパーサ101はネットワークに接続され、ネットワークから(例えば外部ネットワークからメモリ100へ)のデータパケットを受け入れ得る。パケットパーサ101がネットワークからのパケットにおいて受信したプログラムカウント(例えば命令メモリ位置)をプログラムカウンタ107にロードできるように、パケットパーサ101はプログラムカウンタ107の入力にも接続され得る。プログラムカウンタ107が現在のプログラムカウント(例えば命令メモリ位置)をパケットパーサ101にロードできるように、パケットパーサ101はプログラムカウンタ107の出力にも接続され得る。パケットパーサ101はさらに、ネットワークからのパケットにおいて受信したデータ(例えば命令)を命令メモリ105及びレジスタファイル109へロードできるように、命令メモリ105及びレジスタファイル109の入力にも接続され得る。
【0013】
図3は、プログラムカウンタ107のブロック図を例示する。例示のため、プログラムカウンタ107は、32ビットカウンタとして示される。しかしながら、他の実施形態は、他のプログラムカウンタサイズを使用可能である。
【0014】
プログラムカウンタ107は、パケットパーサ101と、1つまたは複数の実行ユニット113から成る部であり得るプログラムカウンタ実行ユニット(PCEU)114とからの入力を有し得る。プログラムカウンタ107は、命令メモリ105に接続された出力を有し得る。
【0015】
プログラムカウンタ107は、プログラム(例えば実行可能命令)を含み得る命令メモリ105における特定の命令位置へアクセスするプログラムカウント値(例えば命令メモリ位置)を含み得る。プログラムカウント値は、パケットパーサ101により特定されパケットパーサから受信された、受信パケット内の特定のデータフィールドにより、またはプログラムカウンタ実行ユニット114からの計算値により、設定され得る。そしてプログラムカウンタ107は、プログラムカウント値(例えば32ビットレジスタ)を命令メモリ105に出力し得る。
【0016】
図4は、命令メモリ105のブロック図を例示する。命令メモリ105は、プログラム(例えば実行可能命令)を記憶するいくつかのレジスタを備え得る。パケットパーサ101は、命令メモリ105の書込ポートに接続され得る。命令メモリ105はパケットパーサ101により書込可能であり、それによってパケットパーサ101により特定される受信パケット内の受信命令は、当該パケットから命令メモリ105へロードされ得る。
【0017】
命令メモリ105は、命令メモリ105内の特定位置にアクセスするためのアドレスを各自受入可能な2つのアドレスポートを備え得る。1つのアドレスは、プログラムカウンタ107から送られ得る。他方のアドレスは、パケットジェネレータ111から送られ得る。
【0018】
1つの動作中に、命令メモリ105は、プログラムカウンタ107のアドレスが示す位置から、命令(例えばデータポート)を出力し得る。行う演算に関して実行ユニット113に指示するために、この命令は実行ユニット113により解読及び実行され得る。この命令は、実行ユニット113にオペランドを与え、並びに処理のため何のデータを実行ユニット113に出力するかに関してレジスタファイル109に指示するために、レジスタファイル109にインデックスを与え得る。
【0019】
図5は、デコードロジック103のブロック図を例示する。デコードロジック103は、実行ユニットデコードロジック501と、パーサデコードロジック502と、多重分離機能503(例えばデマルチプレクサ)とを備え得る。
【0020】
多重分離機能503への入力は、命令メモリ105の出力からの命令ストリームに接続され得る。命令ストリーム内の1つまたは複数の制御ビットは、命令ストリーム内の特定命令の行先(例えEUデコードロジック501、パーサデコードロジック502)を選択するのに使用され得る。
【0021】
命令がEUデコードロジック501へ送られた場合、EUデコードロジック501は、命令を実行ユニット113のうちの1つに送るため命令を処理し得る。命令は、何の種類の演算を行うのかに関して、並びに命令の実行中に使用するオペランドを実行ユニット113のうちの1つに与えるように、実行ユニット113のうちの1つに指示し得る。オペランドは、レジスタファイル109のレジスタに対し指標を付け、実行ユニット113のうちの1つがデータを処理できるように何のデータを出力するかに関してそのレジスタに指示し得る。
【0022】
多重分離機能503はまた、命令をパーサ115に接続されたパーサデコードロジック502へ送信し得る。命令はパーサデコードロジック502を制御し、今度はパーサデコードロジック502が、処理のためにページバッファ117の特定セグメントからのデータを実行ユニット113のうちの1つへ読込むために、ページバッファ117のどのセグメントにアクセスするかパーサに指示する。
【0023】
図6は、レジスタファイル109のブロック図を例示する。レジスタファイル109は、パケットパーサ101、パケットジェネレータ111、実行ユニット113のうちの1つまたは複数、及びメモリ読出指示からの入力を備え得る。メモリ読出指示は、パーサ115により生成される、メモリ動作が完了したことを示す信号であり得る。レジスタファイル109は、パケットジェネレータ111、実行ユニット113、及びパーサ115への出力を備え得る。
【0024】
レジスタファイル109は、実行ユニット113による処理が起こっている間に変数を記憶するメモリ(例えば複数のレジスタ)を備え得る。これらの変数は、1つまたは複数の命令に応答してメモリから取得されたデータを含み得る。レジスタファイル109は、レジスタに初期条件を設定するためパケットパーサ101により書込まれ、パケットジェネレータ111により読出され得る。それぞれの実行ユニット113は、多重化機能を介してレジスタファイル109から引数を受信し得る。パケットジェネレータ111への出力は、レジスタファイル109のレジスタに記憶されているデータを、ネットワークへ送信するためのパケットにまとめるのに使用され得る。
【0025】
図7Aは、一般の実行ユニット113(例えば実行ユニット(0−N))の実施形態のブロック図を例示する一方、
図7Bは、特にプログラムカウンタ実行ユニット114の実施形態のブロック図を例示する。PCEU114は、実行ユニット113群の一部とみなされ得るが、他の実行ユニット113とは異なる構成を有し得る。
【0026】
特定の自律的メモリ処理装置に、特定の数の実行ユニット113が含まれ得る必要はない。1つの装置は単一の実行ユニット113を有し得る一方、別の装置は複数(例えば100個)の実行ユニットを有し得る。
【0027】
図7Aは、実行ユニット113が4つの演算論理装置(ALU)701〜704を備え得ることを例示する。ALU1703及びALU2704の出力は、多重化機能706に対する入力であり得る。ALU703、704の出力のうちどちらを選ぶかは、CompALU702の出力により決定され得る。CompALU702の出力は、多重化機能706に対する選択信号として使用され得る。4番目のALUであるALUOut701は、実行ユニット113により行われた演算の結果を記憶する場所をレジスタファイル109に指示し得る、レジスタファイル109に対するレジスタアドレスR
dとしての出力を有し得る。
【0028】
下の3つのALU702〜704及び多重化機能706は、if−then−else演算を行い得る。多重化機能706は、CompALU702により決定される条件の「ある条件の時」を提供し得る。従って、条件が真である場合、1つのALU(例えばALU1703)の出力がCompALU702の出力により選択される、それ以外の場合、別のALU(例えばALU2704)の出力がCompALU702の出力により選択される。
【0029】
例えば、ALU1703がオペランド入力のOPERAND1(R
1)及びOPERAND2(R
2)とコマンド入力のOPERATOR1を有し、ALU2704がオペランド入力のOPERAND3(R
3)及びOPERAND4(R
4)とコマンド入力のOPERATOR2を有すると仮定する場合、if−then−else文は以下のように表され得、
if(条件)
then
Operand1 OPERATOR1 Operand2
else
Operand3 OPERATOR2 Operand4
ここで「Operand1 OPERATOR1 Operand2」はALU1703により提供され、「Operand3 OPERATOR2 Operand4」はALU2704により提供され、そして「if(条件)」はCompALU702及び多重化機能706より提供され得る。
【0030】
図10の命令フォーマットに関連して後述されるように、オペランドと演算子は、命令により提供され得るか、命令がどのレジスタにオペランド値が配置されているかを示し得る。例えば、OPERAND1(R1)はレジスタR
1に配置され、OPERAND(R2)はレジスタR
2に配置され、OPERAND(R3)はレジスタR
3に配置され、OPERAND(R4)はレジスタR
4に配置され得る。
【0031】
ALU1703及びALU2704は、同一の演算または異なる演算を行い得る。言い換えると、OPERATOR1はOPERATOR2と同じであり得る、またはOPERATOR1はOPERATOR2とは異なり得る。
【0032】
ALU Out701は、オペランド入力R
5、及びR
6(例えばレジスタR
5、R
6)とコマンド入力OPERATOR3を有し得る。ALUOut701がR
5とR
6の値に対しコマンドOPERATOR3を行うことにより生成される結果R
dは、実行ユニット113の結果がどこに記憶されるかを決定する。
【0033】
CompALU702は、オペランド入力R
7、R
8(例えばレジスタR
7、R
8)とコマンド入力OPERATOR4を有し得る。前述のように、R
7とR
8の値に対しコマンドOPERATOR4を行うことにより得られる結果が、多重化機能106の選択を決定する。
【0034】
前述のALU701〜704におけるコマンド(例えばOPERATOR1、OPERATOR2、OPERATOR3、OPERATOR4)として使用され得る一般演算には、加算、減算、論理AND、論理OR、論理NOT、論理NOR、〜と等しい、〜以下、〜未満、〜以外、〜以上、または〜より大きいが含まれ得る。これらの演算は、他の実施形態が他の演算を使用可能であるので、例示のみを目的とする。
【0035】
図7Bは、プログラムカウンタ実行ユニット(PCEU)114の構成を例示する。この構成は、実行ユニット0〜n113と同様であり得るが、ALUOut701を有さない。PCEU114はプログラムカウンタ107に対する新たなアドレスを特定することを専門とし、PCEU114の演算の結果を記憶する場所はプログラムカウンタ107であるため、ALUOut701は含まれない。
【0036】
PCEU114は、オペランド入力R9、R10とコマンド入力OPERATOR5を有するCompALU710を備え得る。ALU1711は、オペランド入力R11、R12とコマンド入力OPERATOR6を含み得る。ALU2712は、オペランド入力R13、R14とコマンド入力OPERATOR7を含み得る。
【0037】
ALU1711及びALU2712の出力は、多重化機能714に対する入力であり得る。CompALU710の出力は、多重化機能714に対する選択信号を提供し得る。従って、前述の実行ユニット113の場合と同様に、PCEU114は、CompALU710により決定される条件の「ある条件の時」を多重化機能714が提供する、if−then−else文を提供し得る。従って、条件が真である場合、1つのALU(例えばALU1711)の出力がCompALU710の出力により選択される、それ以外の場合、別のALU(例えばALU2712)の出力がCompALU710の出力により選択される。結果は、プログラムカウンタ107へロードされ得る。
【0038】
前述の実行ユニット113の場合と同様に、PCEU114において使用される演算子及びコマンドは、命令メモリの命令からロードされ得るか、命令がどのレジスタが値を含み得るかを示し得る。
【0039】
図8は、パーサ115のブロック図を例示する。パーサ115は、書込むアドレス並びにデータを含むメモリ書込ポートを備え得る。メモリ読出アドレスポートは、読出すアドレスをメモリに提供し、それによって読出されたデータは、メモリ読出データポートに読込まれ得る。パーサ115はまた、メモリ読出動作が完了すると、メモリ読出完了指示信号を出力し得る。パーサ115はさらに、実行ユニット113への出力と、レジスタファイル109からの入力と、及びパーサデコードロジック502からの設定入力とを備え得る。
【0040】
パーサ115は、メモリ100のページバッファ117からの直接読出し、またはページバッファ117への直接書込みができるように、メモリ100への直接アクセスを有し得る。パーサ115は、ページバッファ117の全長に対しアクセス権を有するので、処理をより管理しやすいように、ページバッファ117をより小さいセグメント(例えば規則正しく定義されたセグメント)に細分化し得る。例えば、パーサ115は、ページバッファの最初の100バイトに対し作動し、それから次の100バイトに対し作動し、そしてページバッファ117全体の読出し/書込みが完了するまで、これを続け得る。これを達成するために、ページバッファ117のどのセグメントを読出すかを特定する、パケットパーサ101からのアドレスがパーサ115に与えられ得る。
【0041】
パーサ115は、ページバッファ117の内容をどのように構文解析するかパーサ115に指示し得る設定入力をレジスタファイル109から受信し得る。パーサ115は、新たな内容がレジスタファイル109において利用可能であることを実行プログラムに指示するメモリ読出完了指示信号を生成し得る。
【0042】
図9は、パケットジェネレータ111の実施形態のブロック図を例示する。パケットジェネレータは、命令メモリ105及びレジスタファイル109からの入力と、命令メモリ105及びレジスタファイル109への出力とを備え得る。パケットジェネレータ111はその上、任意の生成パケットを出力するために、ネットワークへの出力を有する。
【0043】
パケットジェネレータ111は、命令メモリ105及びレジスタファイル109からデータを読出すために、命令メモリ105に対するアドレスと、レジスタファイル109に対するアドレスを生成し得る。そしてパケットジェネレータ111は、レジスタファイル109から読出されたデータ(例えば命令メモリ105からの命令及びコンテキスト(例えばデータ、メモリ読出しの結果、行われた演算の結果))を使用して、このデータをまとめ、ネットワーク上に送信するパケットを生成する。
【0044】
図10は、
図1の実施形態による、命令実行フォーマットの実施形態を例示する。各命令1001〜1003は、実行ユニット113により実行されるために、命令メモリに記憶され得る。
【0045】
命令の例示された実施形態には、4つの命令1000〜1003が含まれる。各命令は、実行ユニット113の異なるALUに対応付けられ得る。従って、実行ユニット113が異なる数のALUを含む場合、実行フォーマットは異なる数の命令1000〜1003を含み得る。以下の論述においては、
図10と
図7AのALUの両方を参照する。
【0046】
第1命令1000(例えば命令D)は、実行ユニット113のうちの1つによる演算の結果の行先レジスタ(例えばR
d)を示し得る。前述のように、ALUOut701は、実行ユニット113の結果を記憶するための行先レジスタR
dのアドレスを生成し得る。従って、ALUOut701は、レジスタR
dを生成するために、第1命令1000に対応付けられ得る。
【0047】
第2命令1001(例えば命令C)は、実行ユニット113により実行されるif−then−else文の条件を示し得る。例示された実施形態において、条件は比較値V
cにより表される。前述のように、CompALU702は、多重化機能706に対する選択信号として使用される条件を生成し得る。従って、CompALU702は、V
cが真か否かを比較するために、第2命令1001に対応付けられ得る。
【0048】
第3命令1002(例えば命令T)は、実行ユニット113により実行されるif−then−else文の「then」(真の場合)の結果を示し得る。例示された実施形態において、「then」の結果はV
t、すなわち真の場合の値により表される。前述のように、ALU1703は、「then」の結果を生成し得る。従って、ALU1703は、V
tである「then」の結果のための第3命令1002に対応付けられ得る。
【0049】
第4命令1003(例えば命令F)は、実行ユニット113により実行されるif−then−else文の「else」(偽の場合)の結果を示し得る。例示された実施形態において、elseの結果はV
f、すなわち偽の場合の値により表される。前述のように、ALU2704は、「else」の結果を生成し得る。従って、ALU2704は、「else」の結果V
fのため、第4命令1003に対応付けられ得る。
【0050】
条件のV
c、thenの結果のV
t、elseの結果のV
f、及び結果レジスタのR
dを使用すると、if−then−else文は以下のように表され得る。
if(V
c==TRUE)
then
Reg[R
d]:=V
t
else
Reg[R
d]:=V
f
【0051】
図11は、
図1の自律的メモリ処理装置130を組み込み得るメモリシステムの実施形態のブロック図を例示する。メモリシステムは、ネットワーク1120を介して1つまたは複数のメモリデバイス(例えばSSD)1101、1102と通信し得るコントローラ1100(例えばCPU)を備え得る。ネットワーク1120は、有線バス、または無線通信(例えばWiFi)であり得る。
【0052】
メモリデバイス1101は、メモリデバイス1101のストレージ部を構成するローカルメモリ100(例えばRAM、DRAM、SRAM、NANDフラッシュ、NORフラッシュ、相変化メモリ(PCM))と、並びに
図1の自律的メモリ処理装置130とを備え得る。自律的メモリ処理装置130は、メモリ100に相対的に近い所(例えば同じダイ、同じダイスタック、同じメモリモジュール)に配置され得る。例えば、自律的メモリ処理装置130は、メモリ100のバンクレベルの回路に含まれ得る。各バンクが異なる自律的メモリ処理装置130を含み得、そのために1つのメモリチップは、ほぼ同時に作動する自律的メモリ処理装置130の複数のインスタンスを有し得る。本明細書において使用される場合、ローカルメモリ100は、ネットワークを介さずに自律的メモリ処理装置130に接続されるメモリであり得る。
【0053】
図11のシステムのそれぞれのデバイスは、ノードとみなされ得る。各ノードは他のノードとネットワーク1120を介して通信し得る。それぞれのノードは実質的に同様であり得る、またはノードのうちの1つまたは複数は異なる構成を有し得る。例えば、第1メモリデバイス1101は、プログラムカウンタ実行ユニット114に加えて単一実行ユニット113のみを有し得る一方、第2メモリデバイス1102は、プログラムカウンタ実行ユニット114に加えて複数の実行ユニット113を有し得る。
【0054】
従って、後述のように、コントローラ1100(例えばソースノード)は、命令及びソースノードの現在の処理状態を含むメッセージ(例えばパケット)を、メモリデバイス1101(例えば目標ノード)へ送信し得る。別の実施形態において、第1メモリデバイス1101がソースノードであり得る一方、第2メモリデバイス1102が目標ノードであり得る。
【0055】
命令は、メモリデバイス1101に対するコマンド(例えば、検索、ソート、比較)を含み得る。メモリデバイス1101は、コントローラの介在なしに、コマンドにより指示されたタスクを行い得る。自律的メモリ処理装置130は、他のノード1100、1102へメッセージの送信、他のノード1100、1102からメッセージの受信、他のノード1100、1102へ処理命令及び処理状態の送信、他のノード1100、1102から処理命令及び処理状態の受信、プログラム状態の復元及び保存、処理命令の実行、ローカルメモリの読出し及び書込み、及び/または単一ノードにおける多重処理コンテキストの支援を行い得る。
【0056】
自律的メモリ処理装置130の構成により、動的で滞りがなく柔軟性のある実行ユニット113(例えばALUを含む)の追加及び削除が可能となり、従ってノードは必要に応じて追加の処理能力が与えられる。自律的メモリ処理装置130における実行ユニット113の動的な追加及び削除は、以下の作動実施例において例示され得る。
【0057】
標準的な先行技術のプログラムは、以下のように生成され得る。
命令1(ADDレジスタ1、レジスタ2、レジスタ3)
命令2(SUBレジスタ2、レジスタ3、レジスタ4)
【0058】
標準的な先行技術のCPUシステムの場合のように、これらの命令には暗黙の従属性が含まれる。例えば、命令1が実行機会を有する前に、レジスタ2の値が書換えられ得るので、命令2は命令1の前に(または命令1と同じサイクルにおいて)実行不可能であり得る。
【0059】
プログラムを実行するのに必要なサイクル数を削減するために、自律的メモリ処理装置構成において、より複雑な実行ユニット(EU)構成が使用され得る。各EUは、それぞれが別個のタスクを行ういくつかの異なるALU(例えば4つのALU)を含み得る。従って、自律的メモリ処理装置のために書かれたプログラムは、以下のように生成され得る(1つのEUに加えPCEUを有する構成と仮定した場合)。
[PCEU命令1][EU1命令1]
[PCEU命令2][EU1命令2]
【0060】
各[EU#命令#]は、
図10に例示されるように、以下のように現れる。
[行先命令][比較命令][If−true命令][If−false命令]
【0061】
また、自律的メモリ処理装置の構成の一部として、プロセッサはその内部に、異なる数のEUを組み込み得る。これにより4つのEUと1つのPCEUを有する構成は、例えば以下のことが可能になり得る。
[PCEU命令1][EU1命令1][EU2命令1][EU3命令1][EU4命令1]
[PCEU命令2][EU1命令2][EU2命令2][EU3命令2][EU4命令2]
【0062】
当サイクルにおいて実行する追加作業は存在し得ないという事実に基づいて、これらのEU命令のうちのいずれか1つは空であり得る。これは、プログラムの特定の段階において、並列処理がないことに起因し得る。
【0063】
自律的メモリ処理装置の構成により、システムにおける異種の自律的メモリ処理装置エンジン(例えば1つの装置「A」は1つのEUに加えPCEUを有し得る一方、同じ相互接続システムにおける別の装置「B」は4つのEUに加えPCEUを有し得る)一式内の対話が可能になり得る。当シナリオにおいて、装置Aが装置「B」に対しコンテキストを送る必要があると仮定した場合、プログラムは命令の連続ストリーム内に装入され、装置「B」へ送り出され得る。装置「B」は、そこで、それ自体のハードウェア上にそれら命令を以下同様にスケジュールし得る。
[PCEU命令1][EU1命令1][空][空][空]
[PCEU命令2][EU1命令2][空][空][空]
...
【0064】
全てのプログラムは最終的に、最も精密な自律的メモリ処理装置の並列処理に臨み得るため、これはシステムにおいて非効率性を生じる無駄な並列処理へと導き得る。
【0065】
命令間に従属性が何もないことを確かめずに、命令を並列EUへまとめて渡すことはあり得ない。標準的な先行技術のシステムにおいて、このような種類の比較は計算上コストが高くあり得るため、自律的メモリ処理装置は、「フェンス」フラグという命令の概念を使用し得る。「フェンス」フラグにより、アプリケーションの作者またはアプリケーションの作成者は、命令ストリームがそのストリームにおける前の命令に対する従属性をもう有さないということを示すことが可能になる。当情報により、命令ストリームは、重要処理のオーバーヘッドなしで、異種プロセッサ一式上で回され、スケジュールされることが可能になり得る。
【0066】
例えば、以下の命令ストリーム[PCEU命令][EU命令1][EU命令2][EU命令3][フェンスマーカ/命令][EU命令4][EU命令5][EU命令6][EU命令7][フェンスフラグ/命令]は、自律的メモリ処理装置「A」上において[PCEU][1][PCEU][2][F][PCEU][3][PCEU][4][PCEU][5][PCEU][6][F][PCEU][7]のようにスケジュールされ([F]は「フェンス」マーカを示す)、そして自律的メモリ処理装置「B」において[PCEU][1][2][3][X][F][PCEU][4][5][6][7]としてスケジュールされ得る。
【0067】
「フェンス」命令は、所定の自律的メモリ処理装置(例えば「A」または「B」)の命令メモリへロードされている間に、パケット内論理により処理され得る。「フェンス」フラグの存在は、命令メモリに記憶され得るが、スケジューリングコンテキスト外では意味がない場合がある。しかしながら、これは命令メモリにおいてフラグとして記憶され、そのためパケット送信論理により元のストリームが再構成され得る。
【0068】
自律的メモリ処理装置の作動実施例として(例えばメモリ検索)、パケットは、ネットワーク(例えばメモリネットワーク)からパケットパーサ101により受信され得る。パケットパーサ101は、パケットをセグメントに分解し得る。いくつかのセグメントは、パケットが前のノードから送られた時の前のノードの状態を表すレジスタ内容を含み得るため、コンテキストであり得る。
【0069】
パケットは、プログラムが実行される、命令メモリ105における開始位置を含み得る。この開始点は、プログラムカウンタ107へロードされ得る。パケットはまた、命令メモリ105へロードされる命令一式と、レジスタファイル109へロードされ得る初期条件一式とを含み得る。初期条件は、前のノードからの命令により送られた変数であり得る。初期条件はまた、現行の実行プログラムにより使用される定数でもあり得る。
【0070】
プログラムカウンタ107の値は、どの命令を実行のために命令メモリ105から読出すかを決定する。プログラムカウンタ107の次の値は、前の値より増加した値であり得る、またはプログラムカウンタ実行ユニット114により決定される計算値であり得る。
【0071】
命令は、パーサ115の構成を設定し得る。パーサ115は、命令の実行を通して、変数をページバッファ117から取出し、最終的にメモリ読出動作を行うように構成され得る。
【0072】
メモリ読出動作が起こると、変数はページバッファ117の内容からリアルタイムに取り出され、実行ユニット113に対し入力として提供され得る。プログラム命令により決定されるように、別の可能入力がレジスタファイルから読出され、処理のため実行ユニット113へ提供され得る。前述のように、「フェンス」により、いくつかの連続命令を並行して実行することが可能になり得る。並列実行不可能な命令は、延期され、次のサイクル中に実行され得る。
【0073】
実行ユニット113は、これらの入力引数を、各セットが並列処理される複数の入力引数セットとして処理し得る。従って、複数の実行ユニット113が、レジスタファイルへ戻され得る、あるいは1つまたは複数のメモリ書込動作のためのデータとして最終的にページバッファ117へ書込まれるようにパーサ115へ移動され得る、出力変数を生成し得る。すなわち出力変数は、ある特定の活動を生み出すためにレジスタファイルへ入り得る。動作は、パケットジェネレータ111によりパケットを生成する、あるいは新たなメモリ読出動作またはメモリ書込動作を開始するためのものであり得る。
【0074】
ページバッファ117の内容(例えば検索コマンドの結果)は、ネットワークを介して要求ノードへ送信されるパケットに含まれるように、パケットジェネレータ111に提供され得る。パケットには、タスク(例えば検索)が完了したこと、及びその結果がパケットに含まれていることを示す要求ノードに対するメッセージが含まれ得る。
【0075】
作動に関するより広範な実施例として、ネットワークは、それぞれが少なくとも1つの自律的メモリ処理装置を備える複数の自律的メモリデバイスから成る機構を含み得る。データ群はメモリデバイス機構の至る所に記憶され得る。特定のデータリストについてデータ群全体の検索が望まれる時、検索プログラムが1つの自律的メモリデバイスにプッシュされ、当該デバイスにおいて特定のデータリストが検索され得る。その特定の自律的メモリデバイスに記憶されているデータが検索され、リストの全てのデータは存在しないことがプログラムにより判定されると、プログラムは1つまたは複数のパケットにまとめられ、別の自律的メモリデバイスに転送され、この別のデバイスの自律的メモリ処理装置が検索を継続し得る。このプログラムをまとめる動作は、自律的メモリデバイスの機構全体が検索されるまで、またはデータリストが完了するまで、続けられ得る。いくつかの実施形態において、特定の自律的メモリデバイスにおいて見つかったデータもまた、転送するプログラムと一緒にパケット(複数可)にまとめられ得る。
【0076】
そのような実施形態が、
図12のフローチャートにおいて例示される。例示された方法は、
図11のシステムにおいて、自律的メモリデバイス1101内の自律的メモリ処理装置130により実行され得る。
【0077】
メモリデバイス1101は、自律的メモリ処理装置130に提供されるパケットを受信し得る1201。装置130は、前述のように、命令、プログラムカウンタ、データを取り出すために、パケットを構文解析し得る1203。そしてメモリ100に記憶されているデータに対し所望のタスクを行うために、命令が実行され得る1205。そして命令と命令により生成された任意のデータが、ネットワーク上で送信するために1209、パケットにまとめられ得る1207。
【0078】
装置は回路、集積回路ダイ、メモリデバイス、メモリアレイ、またはシステムとして定義され得る。
【0079】
[結論]
自律的メモリデバイス内の自律的メモリ処理装置の1つまたは複数の実施形態は、従来のCPUベースのコンピューティングシステムにおけるメモリ帯域幅のボトルネックを軽減するために、命令の処理を行い得る。命令(例えばプログラム)一式及び/またはデータを含むパケットはノード間で転送され得、そのためにこれらのノード内のメモリに記憶されたデータは、ソースノードまたはCPUによる制御とは独立した命令により処理され得る。
【0080】
特定の実施形態が本明細書において例示され説明されたが、同じ目的を達成する意図の任意の配置が、示された特定の実施形態と置換えられ得ることを、当業者は理解するであろう。当業者にとって、数多くの適応形態が明らかであろう。従って、本出願は、任意の適応形態または変形を含めることが意図される。