(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-11
(54)【発明の名称】ミスアライメントデータを扱うための処理装置
(51)【国際特許分類】
G06F 9/34 20180101AFI20241204BHJP
【FI】
G06F9/34 320C
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2024539743
(86)(22)【出願日】2022-10-10
(85)【翻訳文提出日】2024-08-23
(86)【国際出願番号】 EP2022078050
(87)【国際公開番号】W WO2023126087
(87)【国際公開日】2023-07-06
(32)【優先日】2021-12-31
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】518371892
【氏名又は名称】グラフコアー リミテッド
【氏名又は名称原語表記】Graphcore Limited
【住所又は居所原語表記】11-19 Wine Street,Bristol,BS1 2PH,United Kingdom
(74)【代理人】
【識別番号】100169904
【氏名又は名称】村井 康司
(74)【代理人】
【識別番号】100221372
【氏名又は名称】岡崎 信治
(72)【発明者】
【氏名】アラン グラハム アレクサンダー
(72)【発明者】
【氏名】エドワード アンドリュース
(72)【発明者】
【氏名】ピーター ヘディンガー
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033DC02
(57)【要約】
メモリ内でミスアライメントされ得るデータを扱うために、新しい種類の命令及び新しい種類の命令のための制御レジスタが提供される。(メモリ内でミスアライメントされ得る)第1のデータ部分は、第1のデータ部分を含む最初のアトムをレジスタ内にロードすることにより、第1のレジスタの組内にロードされる。パック命令は、あるレジスタの組から別のレジスタの組内の識別された位置(制御レジスタ内の第1の値によって識別される)内にデータ部分(その長さ及び開始位置は、制御レジスタ内の第2及び第3の値によって示される)を配置するように実行ユニットによって実行される。
【特許請求の範囲】
【請求項1】
第1の部分及び1つ又は複数の追加部分を含む第1のデータ単位を記憶するように構成されたメモリと、
前記メモリからデータをロードするロード操作を行うためのロード命令を実行するように構成される少なくとも1つの実行ユニットと、
第2のデータ単位を記憶するように構成される1つ又は複数のレジスタの第2の組と、
第3のデータ単位内において前記第1の部分が提供されるべき開始位置を示す第1の値と、前記第1のデータ単位内の前記第1の部分の開始位置を示す第2の値と、前記第1の部分の長さを示す第3の値と、を含む制御値を記憶するように構成される制御レジスタと、
を備え、
前記少なくとも1つの実行ユニットは、
前記ロード命令の少なくとも1つを実行して前記ロード操作うちの第1のロード操作を実行し、1つ又は複数のレジスタの第1の組内に前記第1のデータ単位をロードすることと、
第1の種類の命令の実行に応答し、前記制御値の各々に応じて、
1つ又は複数のレジスタの組内の前記第3のデータ単位に、前記第1の値によって示される前記開始位置から始まる1つ又は複数のビット位置にある前記第1の部分を提供し、前記第3のデータ単位の残りのビット位置に前記第2のデータ単位の対応するビット位置からのデータを提供することと、
を実行するように構成される、データ処理装置。
【請求項2】
前記メモリは、前記第2のデータ単位を記憶するように構成され、前記少なくとも1つの実行ユニットは、前記第1の種類の前記命令の実行前に、前記ロード命令の更なる少なくとも1つの実行に応答して、前記第2のデータ単位を、1つ又は複数のレジスタの第2の組内にロードするように構成される、請求項1に記載のデータ処理装置。
【請求項3】
前記第3のデータ単位が記憶される前記1つ又は複数のレジスタの組は、1つ又は複数のレジスタの前記第1の組及び第2の組とは異なる1つ又は複数のレジスタの第3の組である、請求項1又は2に記載のデータ処理装置。
【請求項4】
前記第3のデータ単位が記憶される前記1つ又は複数のレジスタの組は、1つ又は複数のレジスタの第2の組である、請求項1又は2に記載のデータ処理装置。
【請求項5】
前記少なくとも1つの実行ユニットは、前記第1の種類の前記命令を実行して、前記第1の部分が前記第2のデータ単位の一部を上書きするように1つ又は複数のレジスタの前記第2の組内に前記第3のデータ単位を提供するように構成される、請求項4に記載のデータ処理装置。
【請求項6】
前記少なくとも1つの実行ユニットは、前記第1の種類の前記命令の実行前に、前記メモリ内のデータのバッファの位置を示す1つ又は複数のオペランドを使用して、前記制御レジスタ内に前記制御値を提供するための初期化命令を実行するように構成され、前記データのバッファは、前記第1の部分を含む、請求項1~5の何れか一項に記載のデータ処理装置。
【請求項7】
前記初期化命令の前記1つ又は複数のオペランドは、前記データのバッファがコピーされるべき前記メモリ内のメモリ領域の位置を更に示す、請求項6に記載のデータ処理装置。
【請求項8】
前記メモリは、前記第1の種類の前記命令の前記実行前に、前記第2のデータ単位を前記メモリ領域内に記憶するように構成される、請求項7に記載のデータ処理装置。
【請求項9】
前記第1のデータ単位は、前記データのバッファに属する、請求項7又は8に記載のデータ処理装置。
【請求項10】
第4のデータ単位内の第3のデータ部分の開始位置、及び、第5のデータ単位内の第4のデータ部分の終了位置を示す単一の値を記憶するように構成される更なる制御レジスタを含み、
前記少なくとも1つの実行ユニットは、第2の種類の更なる命令を実行し、前記単一の値に基づいて、1つ又は複数のレジスタの組内に第6のデータ単位を提供するように構成され、
前記第6のデータ単位は、前記単一の値によって示される前記開始位置で始まる前記第3のデータ部分、及び、前記単一の値によって示される前記終了位置で終わる前記第4のデータ部分を含む、請求項1~9の何れか一項に記載のデータ処理装置。
【請求項11】
前記少なくとも1つの実行ユニットは、命令のシーケンスを実行することにより、前記メモリ内のバッファのメモリコピーを行うように構成され、
前記メモリは、前記バッファの先頭及び終端の少なくとも一方が、前記ロード操作の開始アドレスとしてサポートされるメモリアドレスの組とミスアライメントされるように前記バッファを記憶するように構成され、
前記命令のシーケンスは、前記第1の種類の前記命令の第1のインスタンスと、前記第2の種類の前記更なる命令の複数のインスタンスと、前記第1の種類の前記命令の第2のインスタンスと、を含む、請求項10に記載のデータ処理装置。
【請求項12】
前記少なくとも1つの実行ユニットは、前記第1の種類の前記命令の前記第1のインスタンスの実行前に、前記メモリ内の前記バッファの位置を示す1つ又は複数のオペランドを使用して、前記第2の種類の前記命令の前記複数のインスタンスの少なくとも1つのインスタンスによって使用するための前記単一の値を前記更なる制御レジスタ内に提供し、前記第1の種類の前記更なる命令の前記第1のインスタンス及び第2のインスタンスによって使用するための前記制御値を少なくとも1つのレジスタ内に提供するための少なくとも1つの初期化命令を実行するように構成される、請求項11に記載のデータ処理装置。
【請求項13】
前記メモリは、前記第1の部分の先頭又は終端の少なくとも一方が、前記ロード操作の開始アドレスとして使用するためにサポートされるメモリアドレスの組とミスアライメントされるように、前記第1のデータ単位の一部として前記第1の部分を記憶するように構成される、請求項1~12の何れか一項に記載のデータ処理装置。
【請求項14】
前記メモリ内の前記メモリアドレスの組は、固定量だけ互いに隔てられ、前記固定量は、 32ビット、64ビット、又は128ビットの1つを含む、請求項13に記載のデータ処理装置。
【請求項15】
メモリからデータをロードするロード操作を行うためのロード命令の実行をサポートする少なくとも1つの実行ユニットを含むデータ処理装置において実装される方法であって、
前記メモリ内に、第1の部分及び1つ又は複数の追加部分を含む第1のデータ単位を記憶するステップと、
1つ又は複数のレジスタの第2の組内に第2のデータ単位を記憶するステップと、
第3のデータ単位内において前記第1の部分が提供されるべき開始位置を示す第1の値と、前記第1のデータ単位内の前記第1の部分の開始位置を示す第2の値と、前記第1の部分の長さを示す第3の値と、を含む制御値を制御レジスタ内に記憶するステップと、
前記ロード命令の少なくとも1つを実行して前記ロード操作のうちの第1のロード操作を実行し、1つ又は複数のレジスタの第1の組内に前記第1のデータ単位をロードするステップと、
第1の種類の命令の実行に応答し、前記制御値の各々に応じて、
前記第1の値によって示される前記開始位置から始まる1つ又は複数のビット位置にある前記第1の部分を、1つ又は複数のレジスタの組内の前記第3のデータ単位に提供するステップと、
前記第3のデータ単位の残りのビット位置に前記第2のデータ単位の対応するビット位置からのデータを提供するステップと、
を含む方法。
【請求項16】
処理装置の少なくとも1つの実行ユニットに方法を実行させるコンピュータ可読命令の組を含むコンピュータプログラムであって、前記コンピュータ可読命令は、メモリからデータをロードするためのロード操作を実行するロード命令を含み、前記方法は、
前記メモリ内に第1の部分及び1つ又は複数の追加部分を含む第1のデータ単位を記憶するステップと、
1つ又は複数のレジスタの第2の組内に第2のデータ単位を記憶するステップと、
第3のデータ単位内において前記第1の部分が提供されるべき開始位置を示す第1の値と、前記第1のデータ単位内の前記第1の部分の開始位置を示す第2の値と、前記第1の部分の長さを示す第3の値と、を含む制御値を制御レジスタ内に記憶するステップと、
前記ロード命令の少なくとも1つを実行することに応答して、前記ロード操作の第1のものを実行し、1つ又は複数のレジスタ第1の組内に前記第1のデータ単位をロードするステップと、
第1の種類の命令の実行に応答し、前記制御値の各々に応じて、
前記第1の値によって示される前記開始位置から始まる1つ又は複数のビット位置にある前記第1の部分を、1つ又は複数のレジスタの組内の前記第3のデータ単位に提供するステップと、
前記第3のデータ単位の残りのビット位置に前記第2のデータ単位の対応するビット位置からのデータを提供するステップと、
を含む、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ処理装置に関し、具体的には、データ処理装置のメモリからのデータにアクセスするための命令を実行するように構成される実行ユニットを含むデータ処理装置に関する。
【背景技術】
【0002】
処理装置は、実行ユニット及びメモリを含み得る。実行ユニットは、メモリからロードされたデータに対して演算を実行して結果を生成するために、1つ又は複数のプログラムスレッドを実行することができ、それらの結果は、メモリ内に記憶される。結果は、実行ユニットによるその後の処理の対象となり得るか又は処理装置からディスパッチされ得る。
【0003】
メモリ内のデータにアクセスする場合、メモリ内のそのデータのアクセスには一定の制約があり得る。具体的には、ロード操作及びストア操作を実行することができるメモリアドレスを制限するアーキテクチャ上の制約があり得る。これらのメモリアドレスは、処理装置のための命令セットの一部として提供されるロード操作及びストア操作のサイズに応じて決定される。
【0004】
図1を参照すると、
図1は、実行ユニットによってデータ単位がロードされ、実行ユニットによってデータ単位が記憶され得るメモリ部分100を示す。実行ユニットが4バイト幅のデータ単位のロード命令を実行するように構成されると仮定する。この場合、各ロード命令は、4バイトのバイト幅を有する4つのデータ単位の何れかをメモリ部分100からロードさせることができる。例えば、あるロード命令は、メモリアドレス0x80000から始まる4バイトのデータをロードさせ得るか、又はメモリアドレス0x80004から始まる4バイトのデータをロードさせるために使用され得る。しかし、処理装置のアーキテクチャ上の制約のため、メモリアドレス0x80002から始まるデータをロードすることは不可能である。なぜなら、このメモリアドレスは、メモリアクセスのサイズとアライメントされていないためである。同様の制約がストアの場合にもある。各ストア命令が4バイトをメモリ部分100に記憶させる場合、処理装置のアーキテクチャ上の制約のため、4バイトアライメントされたストアのみが実行され得る。処理装置のアーキテクチャ上の制約によってロード操作又はストア操作が許可されたこれらのメモリアドレス(例えば、メモリアドレス0x80000、0x80004、0x80008、0x80012、0x80016)を本明細書ではアライメントされたメモリアドレスと呼ぶ。その境界(即ちその開始アドレス及び終了アドレス)の少なくとも一方が、これらのアライメントされたメモリアドレスの1つにかからないデータをミスアライメントデータと呼ぶ。
【発明の概要】
【発明が解決しようとする課題】
【0005】
ロード操作及びストア操作のためのデータの開始アドレスに課される制限には問題がある。すなわち、その問題は、場合によりロード操作又はストア操作のための開始アドレスとメモリ内でアライメントされていないデータ部分に対して操作を実行する必要があり得ることである。例えば、
図1の例では、メモリ部分100内のメモリアドレス0x80002から始まるデータ部分をロードする必要があり得る。このデータ部分は、特定の1つ又は複数の算術演算を実行するためにレジスタ内にロードする必要があり得るか、又はメモリの別の部分に(やはりストアを実行することによって)コピーされ得る。しかし、アライメントされたメモリアドレスへのアクセスのみが許可されるという制約があるため、メモリアドレス0x80002から始まるデータをロードするためのいかなるロード操作もメモリアドレス0x80000から開始する必要があり、従って(算術演算又はメモリコピーのために)必要とされない追加のデータをロードすることを要する。
【課題を解決するための手段】
【0006】
提案する1つの解決策は、ロード命令及びストア命令によってアクセスされるデータのサイズを小さくすることである。例えば、4バイトのデータ単位をロードするロード命令を使用する代わりに、メモリ部分100から任意のバイトのデータに個別にアクセスすることができるように、1バイトのデータ単位のロードを実行するためのロード命令を提供することができる。しかし、この実施形態は、とりわけメモリからアクセスされるデータの部分が大きい場合、多数のロード命令を実行する必要があり得るため、性能を低下させ得る。
【0007】
提案する別の解決策は、メモリからアクセスされるデータの全てをメモリ内でアライメントされるように配置することである。このようにして、あるデータ部分がメモリからロードされるときには常に、そのデータ部分の先頭は、ロード操作の開始アドレスとして機能し得るアドレスにある。しかし、メモリ内のデータのアライメントを確実にすることは、操作が必要とされる全てのデータがロードアクセスサイズの倍数のサイズである可能性が低いため、有用なデータが記憶されない隙間をメモリに空けることを要する。有用なデータ間に隙間を設けるとメモリ空間が無駄になる。
【0008】
第1の態様によれば、第1の部分及び1つ又は複数の追加部分を含む第1のデータ単位を記憶するように構成されたメモリと、メモリからデータをロードするロード操作を行うためのロード命令を実行するように構成される少なくとも1つの実行ユニットと、第2のデータ単位を記憶するように構成される1つ又は複数のレジスタ第2の組と、第3のデータ単位内において第1の部分が提供されるべき開始位置を示す第1の値と、第1のデータ単位内の第1の部分の開始位置を示す第2の値と、第1の部分の長さを示す第3の値と、を含む制御値を記憶するように構成される制御レジスタと、を備えるデータ処理装置が提供される。少なくとも1つの実行ユニットは、ロード命令の少なくとも1つを実行してロード操作のうちの第1のロード操作を実行し、1つ又は複数のレジスタの第1の組内に第1のデータ単位をロードすることと、第1の種類の命令の実行に応答し、制御値の各々に応じて、1つ又は複数のレジスタの組内の第3のデータ単位に、第1の値によって示される開始位置から始まる1つ又は複数のビット位置にある第1の部分を提供し、第3のデータ単位の残りのビット位置に第2のデータ単位の対応するビット位置からのデータを提供することと、を実行するように構成される。
【0009】
メモリ内でミスアライメントされ得るデータを扱うために、パック命令と呼ばれ得る新しい種類の命令、及び、新しい種類の命令のための制御レジスタが提供される。パック命令は、レジスタの組内に保持されるデータ部分(その長さ及び開始位置は、制御レジスタ内の第2及び第3の値によって示される)を別のレジスタの組内の識別された位置(制御レジスタ内の第1の値によって識別される)に配置するように実行ユニットによって実行される。例えば、第1のデータ部分は、メモリ内でミスアライメントされている場合がある。この第1のデータ部分は、第1のデータ部分を含む第1のデータ単位(又は最初のアトム)をこれらのレジスタ内にロードすることによってレジスタ第1の組内にロードされる。レジスタの第2の組は、第2のデータ単位を含む。一緒に、第1の単位及び第2の単位は、(算術演算を実行するために又はアライメントされた形態でメモリに記憶し直すために)自らのレジスタの組内にアライメントして提供されることが望まれる第3の単位データのためのデータを提供する。パック命令が実行されると、実行ユニットは、第1の値によって識別される位置にある第1のデータ部分を第3のデータ単位に提供し、その残りのビットには、第2のデータ単位の対応するビットを提供する。その後、第3のデータ単位を、操作するか又はメモリに記憶し直すことができる。パック命令は、メモリコピーを行うために、抽出命令と呼ばれる第2の種類の命令と共に使用され得る。
【0010】
一部の実施形態では、メモリは、第2のデータ単位を記憶するように構成され、少なくとも1つの実行ユニットは、第1の種類の命令の実行前に、ロード命令の更なる少なくとも1つの実行に応答して、第2のデータ単位を1つ又は複数のレジスタの第2の組内にロードするように構成される。
【0011】
一部の実施形態では、第3のデータ単位が記憶される1つ又は複数のレジスタの組は、1つ又は複数のレジスタの第1の組及び第2の組とは異なる1つ又は複数のレジスタの第3の組である。
【0012】
一部の実施形態では、第3のデータ単位が記憶される1つ又は複数のレジスタの組は、1つ又は複数のレジスタの第2の組である。
【0013】
一部の実施形態では、少なくとも1つの実行ユニットは、第1の種類の命令を実行して、第1の部分が第2のデータ単位の一部を上書きするように1つ又は複数のレジスタの第2の組内に第3のデータ単位を提供するように構成される。
【0014】
一部の実施形態では、少なくとも1つの実行ユニットは、第1の種類の命令の実行前に、メモリ内のデータのバッファの位置を示す1つ又は複数のオペランドを使用して、制御レジスタ内に制御値を提供するための初期化命令を実行するように構成され、データのバッファは、第1の部分を含む。
【0015】
一部の実施形態では、初期化命令の1つ又は複数のオペランドは、データのバッファがコピーされるべきメモリ内のメモリ領域の位置を更に示す。
【0016】
一部の実施形態では、メモリは、第1の種類の命令の実行前に、第2のデータ単位をメモリ領域内に記憶するように構成される。
【0017】
一部の実施形態では、第1のデータ単位は、データのバッファに属する。
【0018】
一部の実施形態では、データ処理装置は、第4のデータ単位内の第3のデータ部分の開始位置及び第5のデータ単位内の第4のデータ部分の終了位置を示す単一の値を記憶するように構成される更なる制御レジスタを含み、少なくとも1つの実行ユニットは、第2の種類の更なる命令を実行し、単一の値に基づいて、1つ又は複数のレジスタの組内に第6のデータ単位を提供するように構成され、第6のデータ単位は、単一の値によって示される開始位置で始まる第3のデータ部分及び単一の値によって示される終了位置で終わる第4のデータ部分を含む。
【0019】
一部の実施形態では、少なくとも1つの実行ユニットは、命令のシーケンスを実行することにより、メモリ内のバッファのメモリコピーを行うように構成され、メモリは、バッファの先頭及び終端の少なくとも一方が、ロード操作の開始アドレスとしてサポートされるメモリアドレスの組とミスアライメントされるようにバッファを記憶するように構成され、命令のシーケンスは、第1の種類の命令の第1のインスタンスと、第2の種類の更なる命令の複数のインスタンスと、第1の種類の命令の第2のインスタンスとを含む。
【0020】
一部の実施形態では、少なくとも1つの実行ユニットは、第1の種類の命令の第1のインスタンスの実行前に、メモリ内のバッファの位置を示す1つ又は複数のオペランドを使用して、第2の種類の命令の複数のインスタンスの少なくとも1つのインスタンスによって使用するための単一の値を更なる制御レジスタ内に提供し、第1の種類の更なる命令の第1のインスタンス及び第2のインスタンスによって使用するための制御値を少なくとも1つのレジスタ内に提供するための少なくとも1つの初期化命令を実行するように構成される。
【0021】
一部の実施形態では、メモリは、第1の部分の先頭又は終端の少なくとも一方が、ロード操作の開始アドレスとして使用するためにサポートされるメモリアドレスの組とミスアライメントされるように、第1のデータ単位の一部として第1の部分を記憶するように構成される。
【0022】
一部の実施形態では、メモリ内のメモリアドレスの組は、固定量だけ互いに隔てられ、固定量は、32ビット、64ビット、又は128ビットの1つを含む。
【0023】
第2の態様によれば、メモリからデータをロードするロード操作を行うためのロード命令の実行をサポートする少なくとも1つの実行ユニットを含むデータ処理装置において実装される方法が提供され、この方法は、メモリ内に、第1の部分及び1つ又は複数の追加部分を含む第1のデータ単位を記憶するステップと、1つ又は複数のレジスタの第2の組内に第2のデータ単位を記憶するステップと、第3のデータ単位内において第1の部分が提供されるべき開始位置を示す第1の値と、第1のデータ単位内の第1の部分の開始位置を示す第2の値と、第1の部分の長さを示す第3の値と、を含む制御値を制御レジスタ内に記憶するステップと、ロード命令の少なくとも1つを実行してロード操作のうちの第1のロード操作を実行し、1つ又は複数のレジスタの第1の組内に第1のデータ単位をロードするステップと、第1の種類の命令の実行に応答し、制御値の各々に応じて、第1の値によって示される開始位置から始まる1つ又は複数のビット位置にある第1の部分を、1つ又は複数のレジスタの組内の第3のデータ単位に提供するステップと、第3のデータ単位の残りのビット位置に第2のデータ単位の対応するビット位置からのデータを提供するステップと、を含む。
【0024】
一部の実施形態では、本方法は、第2のデータ単位をメモリ内に記憶するステップと、第1の種類の命令の実行前に、ロード命令の更なる少なくとも1つの実行に応答して、1つ又は複数のレジスタの第2の組内に第2のデータ単位をロードするステップとを含む。
【0025】
一部の実施形態では、第3のデータ単位が記憶される1つ又は複数のレジスタの組は、1つ又は複数のレジスタの第1の組及び第2の組とは異なる1つ又は複数のレジスタの第3の組である。
【0026】
一部の実施形態では、第3のデータ単位が記憶される1つ又は複数のレジスタの組は、1つ又は複数のレジスタの第2の組である。
【0027】
一部の実施形態では、本方法は、第1の種類の命令を実行して、第1の部分が第2のデータ単位の一部を上書きするように1つ又は複数のレジスタ第2の組内に第3のデータ単位を提供するステップを含む。
【0028】
一部の実施形態では、本方法は、第1の種類の命令の実行前に、メモリ内のデータのバッファの位置を示す1つ又は複数のオペランドを使用して、制御レジスタ内に制御値を提供するための初期化命令を実行するステップを含み、データのバッファは、第1の部分を含む。
【0029】
一部の実施形態では、初期化命令の1つ又は複数のオペランドは、データのバッファがコピーされるべきメモリ内のメモリ領域の位置を更に示す。
【0030】
一部の実施形態では、本方法は、第1の種類の命令の実行前に、第2のデータ単位をメモリ領域内に記憶するステップを含む。
【0031】
一部の実施形態では、第1のデータ単位は、データのバッファに属する。
【0032】
一部の実施形態では、本方法は、第4のデータ単位内の第3のデータ部分の開始位置及び第5のデータ単位内の第4のデータ部分の終了位置を示す単一の値を更なる制御レジスタ内に記憶するステップを含み、第2の種類の更なる命令を実行して、単一の値に基づいて、1つ又は複数のレジスタの組内に第6のデータ単位を提供するステップを含み、第6のデータ単位は、単一の値によって示される開始位置で始まる第3のデータ部分及び単一の値によって示される終了位置で終わる第4のデータ部分を含む。
【0033】
一部の実施形態では、本方法は、バッファの先頭及び終端の少なくとも一方が、ロード操作の開始アドレスとしてサポートされるメモリアドレスの組とミスアライメントされるようにデータのバッファをメモリ内に記憶するステップと、命令のシーケンスを実行することにより、メモリ内のバッファのメモリコピーを行うステップとを含み、命令のシーケンスは、第1の種類の命令の第1のインスタンスと、第2の種類の更なる命令の複数のインスタンスと、第1の種類の命令の第2のインスタンスとを含む。
【0034】
一部の実施形態では、本方法は、第1の種類の命令の第1のインスタンスの実行前に、メモリ内のバッファの位置を示す1つ又は複数のオペランドを使用して、第2の種類の命令の複数のインスタンスの少なくとも1つのインスタンスによって使用するための単一の値を更なる制御レジスタ内に提供し、第1の種類の更なる命令の第1のインスタンス及び第2のインスタンスによって使用するための制御値を少なくとも1つのレジスタ内に提供するために少なくとも1つの初期化命令を実行するステップを含む。
【0035】
一部の実施形態では、本方法は、第1の部分の先頭又は終端の少なくとも一方が、ロード操作の開始アドレスとして使用するためにサポートされるメモリアドレスの組とミスアライメントされるように、第1のデータ単位の一部として第1の部分をメモリ内に記憶するステップを含む。
【0036】
一部の実施形態では、メモリ内のメモリアドレスの組は、固定量だけ互いに隔てられ、固定量は、32ビット、64ビット、又は128ビットの1つを含む。
【0037】
第3の態様によれば、第2の態様又は任意の実施形態による方法を処理装置の少なくとも1つの実行ユニットに実行させるコンピュータ可読命令の組を含むコンピュータプログラムが提供される。コンピュータ可読命令は、メモリからデータをロードするためのロード操作を実行するロード命令を含む。
【0038】
第4の態様によれば、第3の態様によるコンピュータプログラムを記憶する非一時的コンピュータ可読媒体が提供される。
【0039】
ここで、本発明のよりよい理解のため及び本発明をどのように実施することができるかを示すために、添付図を例として参照する。
【図面の簡単な説明】
【0040】
【
図1】アライメントされたメモリアドレスの概念を示す。
【
図3】パック命令の実行に応答したデータ単位の提供の使用例を示す。
【
図4】抽出命令の実行に応答したデータ単位の提供の使用例を示す。
【
図5A】第1の初期化命令の実行後のレジスタ及びメモリの状態を示す。
【
図5B】ロード命令、第1の抽出命令及び第1のパック命令の実行に応答したレジスタの状態の更新を示す。
【
図5C】ストア命令の実行に応答したメモリの状態の更新を示す。
【
図5D】第2の初期化命令の実行後のレジスタ及びメモリの状態を示す。
【
図5E】ロード命令、第2の抽出命令及びストア命令の実行に応答したレジスタ及びメモリの状態の更新を示す。
【
図5F】ロード命令及び第3の抽出命令並びにストア命令の実行に応答したレジスタ及びメモリの状態の更新を示す。
【
図5G】ロード命令、第4の抽出命令及び第2のパック命令の実行に応答したレジスタの状態の更新を示す。
【
図5H】ストア命令の実行に応答したメモリの状態の更新を示す。
【
図6】メモリ内で処理されるデータをアライメントするための単一のパック命令の使用を示す。
【発明を実施するための形態】
【0041】
実施形態は、
図2に関してより詳細に説明するプロセッサ4の形態を取り得る処理装置によって実装される。一部の実施形態では、プロセッサ4は、マルチタイル処理ユニットのタイル4の形態を取り得る。このようなマルチタイル処理ユニットの例は、参照により援用される、本発明者らの先行出願である米国特許出願公開第16/527,410号明細書でより詳細に説明されている。
【0042】
図2を参照すると、実行ユニット18及びコンテキストレジスタ26の詳細を含むプロセッサ4の一例を示している。図示のプロセッサ4は、重みレジスタファイル26Wを含み、そのため、機械学習モデルがそれらのモデルの重みを調節することによって訓練される機械学習の応用に特別に適合され得る。但し、本願の実施形態は、機械学習の応用に限定されず、より広範に適用可能である。更に、説明したプロセッサ4は、M個のスレッドを同時に実行可能なマルチスレッドプロセッサである。プロセッサ4は、M個のワーカースレッド及び1つのスーパバイザスレッドの実行をサポートすることができ、ワーカースレッドは、データに対する算術演算を実行して結果を生成し、スーパバイザスレッドは、ワーカースレッドを調整し、プロセッサ4の同期、送信及び受信機能を制御する。
【0043】
プロセッサ4は、同時に実行することができるM個のスレッドのそれぞれについて個々の命令バッファ53を含む。コンテキストレジスタ26は、M個のワーカーコンテキスト及びスーパバイザコンテキストのそれぞれについて個々の主レジスタファイル(MRF)26Mを含む。コンテキストレジスタは、ワーカーコンテキストの少なくともそれぞれについて個々の補助レジスタファイル(ARF)26Aを更に含む。コンテキストレジスタ26は、現在実行中の全てのワーカースレッドがアクセスして読み出すことができる共通重みレジスタファイル(WRF)26Wを更に含む。WRFは、スーパバイザスレッドがWRFに書き込むことができる唯一のスレッドである点でスーパバイザコンテキストに関連付けられ得る。コンテキストレジスタ26は、スーパバイザコンテキスト及びワーカーコンテキストの各々に対する制御状態レジスタ26CSRのそれぞれのグループも含み得る。実行ユニット18は、主実行ユニット18M及び補助実行ユニット18Aを含む。主実行ユニット18Mは、ロードストアユニット(LSU)55及び整数演算ロジックユニット(IALU)56を含む。補助実行ユニット18Aは、少なくとも浮動小数点演算ユニット(FPU)を含む。
【0044】
J個のインタリーブされたタイムスロットS0...SJ-1のそれぞれにおいて、スケジューラ24は、命令メモリ11から現在のタイムスロットに対応するJ個の命令バッファ53の1つに個々のスレッドの少なくとも1つの命令をフェッチするようにフェッチ段14を制御する。実施形態では、各タイムスロットがプロセッサの1つの実行サイクルであるが、他の方式も除外されない(例えば、重み付けラウンドロビン)。プロセッサ4の各実行サイクル(即ちプログラムカウンタをクロックするプロセッサクロックの各サイクル)において、フェッチ段14は、実装形態に応じて、単一の命令又は小さい「命令バンドル」(例えば、2命令バンドル又は4命令バンドル)をフェッチする。次に、命令が(そのオペコードに従って)メモリアクセス命令、整数演算命令又は浮動小数点演算命令であるかどうかに応じて、各命令は、デコード段16によって主実行ユニット18MのLSU55若しくはIALU56又は補助実行ユニット18AのFPUの1つに発行される。主実行ユニット18MのLSU55及びIALU56は、MRF26Mからのレジスタを使用して自らの命令を実行し、MRF26M内の特定のレジスタは、命令のオペランドによって指定される。補助実行ユニット18AのFPUは、ARF26A及びWRF26W内のレジスタを使用して操作を実行し、ARF内の特定のレジスタは、命令のオペランドによって指定される。実施形態では、WRF内のレジスタは、命令タイプにおいて暗黙的であり得る(即ちその命令タイプに対して予め決定されている)。補助実行ユニット18Aは、浮動小数点演算命令の1つ又は複数の種類の操作を実行する際に使用するための、幾らかの内部状態57を保持するための補助実行ユニット18A内の論理ラッチ形式の回路も含み得る。
【0045】
命令をバンドルでフェッチ及び実行する実施形態では、所与の命令バンドル内の個々の命令は、(
図2に示す)独立したパイプライン18M、18Aを下って並行して同時に実行される。2つの命令のバンドルを実行する実施形態では、2つの命令は、それぞれの補助パイプライン及び主パイプラインを下って同時に実行され得る。この場合、主パイプラインは、MRFを使用する種類の命令を実行するように構成され、補助パイプラインは、ARFを使用する種類の命令を実行するために使用される。適切な相補的バンドルへの命令のペアリングは、コンパイラによって扱われ得る。
【0046】
各ワーカースレッドコンテキストは、主レジスタファイル(MRF)26M及び補助レジスタファイル(ARF)26Aの独自のインスタンス(即ちバレルスレッドスロットの各々について1つのMRF及び1つのARF)を有する。MRF又はARFに関して本明細書に記載する機能は、コンテキストごとに動作すると理解すべきである。但し、スレッド間で共有される単一の共有重みレジスタファイル(WRF)がある。各スレッドは、自らのコンテキスト26のMRF及びARFにのみアクセスすることができる。しかし、現在実行中の全てのワーカースレッドが共通のWRFにアクセスすることができる。従って、WRFは、全てのワーカースレッドが使用するための共通の重みの組を提供する。実施形態では、スーパーバイザのみがWRFに書き込むことができ、ワーカーは、WRFから読み出すことのみができる。
【0047】
プロセッサ4の命令セットは、少なくとも1種類のロード命令を含み、その命令のオペコードは、実行されると、ロード命令が実行されたスレッドの個々のARF26A内にデータメモリ22からデータをロードすることをLSU55に行わせる。ARF内の宛先の位置は、ロード命令のオペランドによって指定される。ロード命令の別のオペランドは、データのロード元となるデータメモリ22内のアドレスへのポインタを保持する個々のMRF26M内のアドレスレジスタを指定する。プロセッサ4の命令セットは、少なくとも1種類のストア命令も含み、その命令のオペコードは、実行されると、ストア命令が実行されたスレッドの個々のARFからデータメモリ22にデータを記憶することをLSU55に行わせる。ARF内の記憶元の位置は、ストア命令のオペランドによって指定される。ストア命令の別のオペランドは、データの記憶先となるデータメモリ22内のアドレスへのポインタを保持するMRF内のアドレスレジスタを指定する。概して、命令セットは、別個のロード及びストア命令タイプ及び/又は単一の命令にロード及びストア操作を結合する少なくとも1つのロードストア命令タイプを含み得る。
【0048】
関連する種類の算術命令のオペコードに応答して、補助実行ユニット18A内の算術ユニット(例えば、FPU)は、オペコードによって指定されるように、スレッドのそれぞれのARF内の指定されたソースレジスタ及び任意にWRF内のソースレジスタ内の値を操作することを含む算術演算を実行する。算術ユニットは、算術命令の宛先オペランドによって明示的に指定されるように、スレッドの個々のARF内の宛先レジスタに算術演算の結果を更に出力する。
【0049】
「主」及び「補助」というラベルは、必ずしも限定的なものではないことが理解されるであろう。実施形態では、それらは、任意の第1のレジスタファイル(ワーカーコンテキストごと)、第2のレジスタファイル(ワーカーコンテキストごと)及び共有された第3のレジスタファイル(例えば、スーパバイザコンテキストの一部であるが、全てのワーカーにとってアクセス可能)であり得る。ARF26A及び補助実行ユニット18は、算術命令(又は少なくとも浮動小数点演算)に使用されるため、算術レジスタファイル及び算術実行ユニットとも呼ばれ得る。MRF26M及び補助実行ユニット18は、その用途の1つがメモリへのアクセスであることから、メモリアドレスレジスタファイル及び算術実行ユニットとも呼ばれ得る。重みレジスタファイル(WRF)26Wは、間もなくより詳細に論じる一定の種類の算術命令に使用される乗算型重みを保持するために使用されるため、このように呼ばれている。例えば、これらは、ニューラルネットワーク内のノードの重みを表すために使用することができる。別の見方をすれば、MRFは、整数オペランドを保持するために使用されるため、整数レジスタファイルと呼ぶことができる一方、ARFは、浮動小数点オペランドを保持するために使用されるため、浮動小数点レジスタファイルと呼ぶことができる。命令を2つのバンドルで実行する実施形態では、MRFは、主パイプラインによって使用されるレジスタファイルであり、ARFは、補助パイプラインによって使用されるレジスタである。
【0050】
但し、代替的実施形態では、レジスタ空間26は、これらの異なる目的のために必ずしもこれらの別々のレジスタファイルに分割されないことに留意されたい。代わりに、主実行ユニット及び補助実行ユニットによって実行される命令は、同じ共有レジスタファイル(マルチスレッドプロセッサの場合にはコンテキストごとに1つのレジスタファイル)の中からレジスタを指定でき得る。更に、パイプライン13は、命令のバンドルを同時に実行するための並列構成パイプライン(例えば、補助パイプライン及び主パイプライン)を必ずしも含まなくてよい。
【0051】
プロセッサ4は、メモリ11と、1つ又は複数の他のリソース、例えばプロセッサの他のインスタンス及び/又はネットワークインタフェース若しくはネットワーク接続ストレージ(NAS)装置等の外部装置との間でデータを交換するための交換インタフェース51も含み得る。上述したように、実施形態では、プロセッサ4は、相互接続されたプロセッサタイルのアレイ6の1つを形成することができ、各タイルは、より広いプログラムの一部を実行する。従って、個々のプロセッサ4(タイル)は、より広いプロセッサ又は処理システム6の一部を形成する。タイル4は、タイル4が自らの個々の交換インタフェース51を介して接続する相互接続サブシステム34によって一緒に接続され得る。タイル4は、同じチップ(即ちダイ)上に実装されるか若しくは異なるチップ上に実装され得るか、又はその組み合わせ(即ち、アレイは、それぞれ複数のタイル4を含む複数のチップから形成され得る)であり得る。従って、相互接続システム34及び交換インタフェース51は、それに応じて、内部(オンチップ)相互接続機構及び/又は外部(チップ間)交換機構を含み得る。
【0052】
前述のように、LSU55は、タイルメモリ11との間でデータ単位をロード及び記憶するためのロード及びストア命令を実行することができる。これらの操作は、ロード及びストア命令の操作がアライメントされたメモリアドレスでのみ実行され得るというアーキテクチャ上の制約を受ける。これらのアライメントされたメモリアドレスは、32ビット、64ビット、128ビット又は命令セットアーキテクチャに依存する別のビット数の倍数であり得る。その結果、メモリ11からロードされるデータの一部がミスアライメントされ得、ミスアライメントとは、データの境界(先頭及び/又は終端)の少なくとも一方がアライメントされたメモリアドレス上に位置しないことを意味する。その結果、データをロードするためのいかなるロード操作も必然的にメモリ11から追加データをロードすることを伴うことになる。
【0053】
本願の実施形態によれば、プロセッサ4は、メモリからプロセッサ4のレジスタ(例えば、ARF26Aに属するレジスタ)内にデータをロードするためのロード命令を実行することができる。具体的には、第1のロード命令を実行して1つ又は複数のレジスタの第1の組内に第1のデータ単位をロードし、第2のロード命令を実行して1つ又は複数のレジスタの第2の組内に第2のデータ単位をロードする。次いで、プロセッサ4は、パック命令を実行して、第3のデータ単位をレジスタ内に形成させる。第3のデータ単位は、第1のデータ単位からの第1の部分及び第2のデータ単位の対応するビット位置からのデータを含む。第1のデータ部分は、パック命令の制御値によって示される第3のデータ単位内の位置に提供され、必要に応じてデータを配置することを可能にする。これは、パック命令を抽出命令と共に使用して、単一のロード命令を使用してアクセスできないメモリアドレスの範囲にまたがるデータのバッファをコピーするメモリコピーに使用することができるか、又は算術演算によって演算するためにレジスタの組の始まりにデータ単位の一部をアライメントするために使用することができる。
【0054】
本明細書で論じるデータ単位のそれぞれ(即ち第1のデータ単位、第2のデータ単位及び第3のデータ単位)は、アトムと呼ぶこともできる。各アトム/データ単位は、1回のロード操作でロードされるか又は1回のストア操作で記憶されるデータ量を表す。記載する実施形態では、そのような各アトムのサイズは、128ビットである。そのような各ロード及びストア操作は、ロード命令又はストア命令に応答して実行される。説明したようなロード命令を実行するために使用されるロード命令は、ダブルロード命令であり得る。ダブルロード命令では、同じダブルロード命令を実行することに応答して2つのロード操作が実行される。同様に、説明したようなストア命令を実行するために使用されるストア命令は、ダブルストア命令であり得、ダブルストア命令では、同じダブルストア命令を実行することに応答して2つのストア操作が実行される。
【0055】
パック命令と組み合わせて使用することができる第2の種類の命令も本明細書で説明する。パック命令は、第1のデータ単位の一部が挿入される第3のデータ単位内の一定数のビット位置を除き、第2のデータ単位と同じである第3のデータ単位を提供するように動作する。他方では、「抽出命令」と呼ばれる第2の種類の命令は、結果として生じるデータ単位を提供するように動作し、結果として生じるそのデータ単位は、指定されたピボットポイントまで入力データ単位から抽出されるデータで構成され、それ以降、結果として生じるデータ単位は、更なる入力データ単位から抽出されるデータで構成される。後述するように、あるメモリ位置から別のメモリ位置へのデータのバッファのメモリコピーを行う場合、パック命令及び抽出命令の両方がメモリコピープロセスの一部として実行される。
【0056】
以下の説明では、実行ユニットによって実行される命令及び実行される操作について言及する。但し、異なる命令が同じ実行ユニットによって実行される必要はない。実施形態では、ロード命令及びストア命令は、LSU55によって実行されるのに対して、パック命令及び抽出命令は、補助パイプライン18Aの実行ユニットによって実行される。実行ユニットによって行われる操作への以下の言及は、特定の実行ユニットによって行われると記載されない限り、プロセッサ、例えばプロセッサ4の1つ若しくは複数の実行ユニット又は少なくとも1つの実行ユニットによって実行される操作を指すと解釈されるべきである。
【0057】
パック命令の操作の一例を示す
図3を参照する。
図3は、メモリ内に記憶された第1のデータ単位300及びメモリ内の異なる位置に同じく記憶された第2のデータ単位310を示す。この例では、第1のデータ単位300は、メモリ位置0x82000から始まるメモリ部分に記憶されている一方、第2のデータ単位310は、メモリ位置0x80000から始まるメモリ部分に記憶されている。
【0058】
プロセッサ4は、データ単位をレジスタ内にロードするためのロード命令を実行する。これらのロード命令のそれぞれは、LSU55によって実行される。第1のデータ単位300をレジスタの第1の組($a4:7として示す)内にロードするために、ロード命令のうちの第1のロード命令が実行される。第2のデータ単位310をレジスタ第2の組($a0:3として示す)内にロードするために、ロード命令のうちの第2のロード命令が実行される。
【0059】
両方のデータ単位がレジスタ内にロードされると、第3のデータ単位をレジスタの別の組($a8:11として示す)内に提供するためのパック命令がプロセッサ4によって実行される。パック命令は、プロセッサの補助パイプライン18Aの実行ユニットによって実行される。パック命令は、レジスタを識別する幾つかのオペランドを取る。具体的には、第1のオペランドは、第3のデータ単位が記憶される宛先レジスタ(この例では$a8:11)を識別する。第2のオペランドは、第2のデータ単位が記憶されるソースレジスタ(この例では$a0:3)を識別する。第3のオペランドは、第1のデータ単位が記憶されるソースレジスタ(この例では$a4:7)を識別する。
【0060】
オペランドに加えて、パック命令は、本明細書で$PACKレジスタと呼ぶ制御レジスタ内に保持される幾つかの値を利用する。これらの値は、(とりわけ)第3のデータ単位内に含めるべき第1のデータ単位に属する第1のデータ部分の開始位置及び同じく第3のデータ単位内に含めるべき第2のデータ単位に属する第2のデータ部分の終了位置を示す。$PACKレジスタ内の値は、第1のデータ部分を書き込むべき宛先レジスタ内の開始位置を指定する第1の値を含む。この第1の値を
図3では「INSERT_BYTE」として示し、
図3の例では9の値を取る。$PACKレジスタの値は、第1のデータ単位を含むソースレジスタ内の第1のデータ部分の開始位置を指定する第2の値を含む。この第2の値を
図3では「EXTRACT_BYTE」として示し、
図3の例では2の値を取る。$PACKレジスタ内の値は、第1のデータ部分のサイズ(即ちバイト数)を指定する第3の値を含む。この第3の値を
図3では「NUM_BYTES」として示し、
図3の例では3の値を取る。
【0061】
プロセッサ4の実行ユニットにより、$PACKレジスタからの値を用いてパック命令が実行されると、それは、第2のデータ単位を宛先レジスタ内にコピーさせ、宛先レジスタ内の第2のデータ単位の一部を第1のデータ単位からの第1のデータ部分で上書きさせる。その結果を
図3に示す。宛先レジスタ内に示されているのは、第2のデータ単位から取られた第2のデータ部分320と、第1のデータ単位から取られた第1のデータ部分330とである。この例では、宛先レジスタは、第2のデータ単位から取られた更なるデータ部分340も含む。
【0062】
パック命令は、データ部分をデータのアトム内の新たな位置に移動するために使用できることが理解されるであろう。これは、第1のデータ部分330及び第2のデータ部分320を一緒に処理する必要がある場合に有用であり得る。例えば、特定の算術演算の組は、データ320、330のこれらの2つの部分に対して操作し得る。ロード命令及びストア命令のサイズが最小サイズに制限されることを所与として、データ320、330のこれらの部分を宛先レジスタ内で一緒にアライメントすることは、不可能であり得る(例えば、第1のデータ部分及び第2のデータ部分の終了位置の境界が、ロード操作を実行できる境界とメモリ内でアライメントされていない場合)。
【0063】
第3のデータ単位が宛先レジスタ内に提供されると、この第3のデータ単位は、算術演算によって直ちに操作され得るか、又は何らかの処理を受ける前にメモリ11に記憶し直され得る。
【0064】
図3では、パック命令をpack128として示し、これは、操作される第1のデータ単位及び第2のデータ単位並びにその結果得られる第3のデータ単位がそれぞれ128ビット長であるパック命令のバージョンである。但し、異なるサイズのデータ単位を操作するパック命令の異なるバージョンを提供することもできる。具体的には、実施形態では、プロセッサ4の命令セットの一部として、それぞれ32ビット長のデータ単位を操作するパック命令のバージョン(pack32と呼ぶ)と、それぞれ64ビット長のデータ単位を操作するパック命令のバージョン(pack64と呼ぶ)とが提供される。
【0065】
抽出命令の操作の一例を示す
図4を参照する。
図4は、メモリ内に記憶された第1のデータ単位400と、同じくメモリ内の異なる位置に記憶された第2のデータ単位410とを示す。この例では、第1のデータ単位400がメモリ位置0x80000に記憶されている一方、第2のデータ単位410がメモリ位置0x80010に記憶されている。図示のように、この場合、第1のデータ単位400及び第2のデータ単位410がメモリ内で連続して記憶される。抽出命令は、データ部分が、ロード命令及びストア命令によってアクセスされ得るデータ単位の境界とアライメントしていない場合にそれらのデータ部分を抽出し、それらを結合するのに有用である。図示のように、第1のデータ単位400は、第1のデータ部分420を含むのに対して、第2のデータ単位410は、第2のデータ部分430を含む。
【0066】
抽出命令を実行する前に、LSU55は、2つのロード操作を実行し、その第1のものは、第1のデータ単位400をレジスタの第1の組($a4:7として示す)内にロードし、その第2のものは、第2のデータ単位410をレジスタの第2の組($a0:3として示す)内にロードする。
【0067】
両方のデータ単位がレジスタ内にロードされると、第3のデータ単位をレジスタの別の組($a8:11として示す)内に提供するための抽出命令がプロセッサ4によって実行される。抽出命令は、プロセッサの補助パイプライン18Aの実行ユニットによって実行される。抽出命令は、レジスタを識別する幾つかのオペランドを取る。具体的には、第1のオペランドは、第3のデータ単位が記憶される宛先レジスタ(この例では$a8:11)を識別する。第2のオペランドは、第2のデータ単位が記憶されるソースレジスタ(この例では$a0:3)を識別する。第3のオペランドは、第1のデータ単位400が記憶されるソースレジスタ(この例では$a4:7)を識別する。
【0068】
オペランドに加えて、抽出命令は、本明細書で$EXTRACTレジスタと呼ぶ制御レジスタ内の値を利用する。$EXTRACTレジスタ内の値は、第1のデータ単位400内の第1のデータ部分420の開始位置及び第2のデータ単位410内の第2のデータ部分430の終了位置の両方を指定する。抽出命令の実行から生じる第3のデータ単位は、第1のデータ部分420及び第2のデータ部分430から完全に構成されるため、これらの開始位置及び終了位置の両方を指定するために同じ値(本明細書では「ピボットポイント」と呼ぶ)を使用することができる。
図4では、この値が「PIVOT_POINT」として示されており、11の値を取り、これにより関連する開始位置及び終了位置が抽出命令のソースレジスタの組のそれぞれのバイト11の始まりにあることを指定する。
【0069】
抽出命令がプロセッサ4の実行ユニットによって実行されると、$EXTRACTレジスタ内の値を使用して、実行ユニットは、第1のデータ単位400を含むソースレジスタから宛先レジスタの一部に第1のデータ部分420をコピーする。加えて、抽出命令を実行することに応答して、第2のデータ部分430は、第2のデータ単位410を含むソースレジスタから宛先レジスタの一部にコピーされる。図示のように、プロセッサ4の実行ユニットは、第2のデータ部分430を宛先レジスタの第2の部分内に記憶させる。加えて、プロセッサ4の実行ユニットは、第1のデータ部分420を宛先レジスタの第1の部分内に記憶させ、宛先レジスタの第2の部分は、宛先レジスタの第1の部分に続く。このようにして、宛先レジスタの組内の部分420、430それぞれの位置は、ソースレジスタの組内のそれらの位置に関して逆にされる。第1のデータ部分420は、第1のデータ単位400を含むソースレジスタの組の終端(即ち最下位ビット)に記憶される一方、宛先レジスタの組の始端(即ち最上位ビット)に記憶される。第2のデータ部分430は、第2のデータ単位410を含むソースレジスタの先頭(即ち最上位ビット)に記憶される一方、宛先レジスタの組の終端(即ち最下位ビット)に記憶される。
【0070】
第3のデータ単位が宛先レジスタ内に提供されると、この第3のデータ単位は、算術演算によって直ちに操作され得るか、又は何らかの処理を受ける前にメモリ11に記憶し直され得る。
【0071】
図4では、抽出命令をextract128として示し、これは、操作される第1のデータ単位及び第2のデータ単位並びにその結果得られる第3のデータ単位がそれぞれ128ビット長である抽出命令のバージョンである。但し、異なるサイズのデータ単位を操作する抽出命令の異なるバージョンを提供することもできる。
【0072】
図3及び
図4では、関連する命令によって指定されるレジスタの全3組(即ち2つのソースレジスタの組及び宛先レジスタの組)が異なる例が提供されている。しかし、一部の例では、ソースレジスタの組の1つが宛先レジスタの組と同じであり得、命令を実行する効果は、ソースレジスタの組内のデータの一部を上書きすることである。そのような例をパック命令に関して
図6に示す。
【0073】
バッファが幾つかのデータのアトムを含む場合、抽出命令は、(バッファがメモリアクセスの境界とアライメントされていない)メモリのある部分からメモリの別の部分へのバッファのメモリコピーを行うために使用するとき特に有用であり得る。
【0074】
ここで、
図5A~
図5Hを参照して、パック命令及び抽出命令の両方を利用するミスアライメントデータバッファに対するメモリコピーの一例を説明する。このメモリコピーを行うために、レジスタ内のロード済みデータの再構成を行うためにパック命令及び抽出命令を実行する前に、コピーに関係する一定のパラメータを使用し、プロセッサ4の実行ユニットによって初期化命令がどのように予め実行され得るかを説明する。
【0075】
図5Aを参照すると、データのバッファ500のコピー元であるメモリ部分11(ソースメモリとも呼ばれ得る)が示されている。バッファ500は、別のメモリ部分11(本明細書では宛先メモリと呼ぶ)にコピーされる。ソースメモリ及び宛先メモリは、それぞれ「メモリ」と呼ばれるが、これらは、同じメモリユニット又はメモリバンクの一部を形成し得る。
【0076】
バッファ500は、バッファ500と同じサイズである宛先メモリ内のメモリ領域510にコピーされる。ロード操作及びストア操作は最小サイズ(例えば、128ビット又は64ビットであり得る)のデータにアクセスすることに制限されるため、バッファ500及びメモリ領域510の両方の境界がメモリアクセス境界とアライメントされていないことが見て取れる。その結果、バッファ500のデータをロードするために実行されるロード操作の2つは、(メモリ領域510にコピーすることが望まれない)幾つかのデータもロードすることになる。更に、バッファ500のデータをメモリ領域510に記憶するために実行されるストア操作の2つは、(バッファ500のデータ以外の)幾つかのデータもメモリ領域510に記憶することになる。宛先メモリから一部のデータをロードし、これをバッファ500のデータと一緒に組み合わせて宛先メモリに記憶される適切なデータを形成することにより、この状況に対処するためにパック命令及び抽出命令を一緒に使用することができ、最終結果は、宛先メモリに記憶される唯一の新規データがバッファ500からのデータであることである。
【0077】
パック命令及び抽出命令の実行前に、最初の初期化命令(init128headtailと呼ぶ)が実行される。このinit128headtail命令は、宛先メモリに記憶されるデータの最初のアトム及び最後のアトムを提供するために使用されるレジスタにデータ投入する。最初のアトムは、「ヘッド」アトムと呼ぶことができるのに対して、最後のアトムは、「テール」アトムと呼ばれ得る。これらのレジスタは、$PACKレジスタを含み、$PACKレジスタには、第1のパック命令の実行時に使用される制御値が投入される。このレジスタは、$EXTRACTレジスタも含み、$EXTRACTレジスタには、第1の抽出命令の実行時に使用される制御値が投入される。このレジスタは、第2の(及び最後の)パック命令の実行時に使用される制御値を含むレジスタ($m5として示す)も含む。このレジスタは、ソースメモリからデータをロードするための第1のロード操作のためのアドレス(ヘッドアドレスと呼ぶ)が実行されるレジスタ($m4として示す)も含む。
【0078】
init128headtail命令は、制御レジスタ値を提供するために使用される幾つかのオペランドを有する。これらの最初のものは、バッファ500の開始アドレスである。
図5Aの例では、これは、0x80002に等しく、レジスタ$m0に位置する。オペランドの第2のものは、メモリ領域510の開始アドレスである。
図5Aの例では、これは、0x82004に等しく、レジスタ$m1に位置する。オペランドの第3のものは、バッファ500のサイズである。
図5Aの例では、このサイズは、48バイトに等しく、レジスタ$m2に位置する。
【0079】
init128headtail命令を実行することに応答して、実行ユニットは、ソースアドレス(即ちこの例では0x80002)が先行するアライメントされたメモリアドレス(この例では0x80000)から何バイトずれているかを決定することにより、$EXTRACTレジスタのピボット値を決定する。この先行するアライメントされたメモリアドレスは、バッファ500の第1の部分をロードするための第1のロード操作が実行される開始アドレスである。この例では、抽出命令によって決定され、$EXTRACTレジスタ内に記憶されるピボット値は、2バイトに等しい。
【0080】
加えて、init128headtail命令を実行することに応答して、実行ユニットは、$PACKレジスタ内に記憶する第1の制御値(即ち挿入バイト)を決定する。実行ユニットは、ソース宛先(即ちこの例では0x82004)が先行するアライメントされたメモリアドレス(この例では0x82000)から何バイトずれているかを決定することにより、第1の制御値(即ち挿入バイト)を決定する。この先行するアライメントされたメモリアドレスは、バッファ500の一部を含むデータ単位を宛先メモリに記憶するための第1のストア操作が実行される開始アドレスである。この例では、抽出命令によって決定され、$PACKレジスタ内に記憶される挿入バイト値は、4バイトに等しい。
【0081】
init128headtail命令を実行することに応答して、実行ユニットは、第2の制御値(即ち抽出バイト)をゼロに等しく設定する。挿入されるデータは、バッファ500のデータのみを含むレジスタの組の先頭から始まるため、この値は、バッファのメモリコピーに対してゼロに設定される。後述するように、データは、第1の抽出命令の実行によってこのレジスタの組内に提供される。
【0082】
実行ユニットは、init128headtail命令を実行することに応答して、第3の制御値(即ちnumバイト)を、第1のストア操作において宛先メモリに記憶されるバッファ500のデータ量に等しく設定する。これは、宛先メモリの最初のアトム内(即ちアドレス0x82000~0x82010)に入るメモリ領域510の一部であるものとして視覚的に表されている。従って、
図5A~
図5Hの例では、第3の制御値は、$m1で指定された宛先アドレスの値、即ち0x82004と、宛先メモリ内の次のアライメントされたメモリアドレス、即ち0x82010との間のバイト数である。
図5A~
図5Fの例における第3の制御値は、12バイトに等しい。
【0083】
前述のように、実行ユニットは、init128headtail命令を実行することに応答して、第2の(及び最後の)パック命令のパック制御値を決定する。これらは、
図5Aにおいてテール$PACKとしてラベル付けされるように示され、以下では第2のパック制御値として参照される。
【0084】
init128headtail命令を実行することに応答して、実行ユニットは、第2のパック制御値の第1の制御値(即ち挿入バイト)を決定する。実行ユニットは、宛先メモリに記憶される最後のデータ単位内に存在するメモリ領域510のバイト数を決定することにより、この第1の制御値を決定する。これらのバイト数は、宛先メモリ内のこの最後のデータ単位内に記憶されるバッファ500のバイト数である。
図5Aの例では、データの最後のアトムは、アドレス0x82030から始まる。メモリ領域510の終端(実行ユニットが$m2からのバイト数(即ち48)を$m1からのメモリ領域510の開始アドレス(即ち0x82004)に加算することによって決定することができる)は、0x82034にある。そのアドレスに先行するアライメントされたメモリアドレス(即ち0x82030)からメモリ領域の終端を減算することにより、実行ユニットは、第2のパック制御値の第1の制御値を表すバイト数(即ち4)を決定することができる。
【0085】
init128headtail命令を実行することに応答して、実行ユニットは、第2のパック制御値の第2の制御値(即ち抽出バイト)を決定する。実行ユニットは、この値を第1の制御値の値と同じ値(即ち与えられた例では4バイト)に設定する。
【0086】
init128headtail命令を実行することに応答して、実行ユニットは、第2のパック制御値の第3の制御値(即ちnumバイト)を決定する。実行ユニットは、各ロード操作内でロードされるデータ単位のサイズ(即ちこの例では16バイト)から第2のパック制御値の第1の及び第2の制御値の値(即ちこの例では4バイト)を減算した値に等しくなるようにこの値を設定する。これは、最後のストア操作(即ちメモリアドレス0x82030から始まるストア操作)で宛先メモリに書き戻される、宛先メモリからロードされるデータ量を表す。この値は、この例では12バイトに等しい。
【0087】
init128headtail命令の実行後に行われる操作を示す
図5Bを参照する。実行ユニットは、第1のロード命令(ld128paceとして示す)を実行して、ソースメモリからレジスタの組内にデータ単位515をロードする。実行ユニットは、第2のロード命令(ld128stepとして示す)を実行して、ソースメモリから更なるレジスタの組内にデータ単位516をロードする。実行ユニットは、第3のロード命令(ld128として示す)を実行して、宛先メモリからレジスタの別の組内にデータ単位517をロードする。
【0088】
データをロードすると、実行ユニットは、抽出命令(
図5Bではextract128として示す)を実行する。この抽出命令のインスタンスは、データ単位516がロードされているソースレジスタの第1の組を指定する第1のオペランド及びデータ単位515がロードされているレジスタの組を指定する第2のソースオペランドと共に実行される。$EXTRACTレジスタ内で指定されるピボットポイントは、2の値を取るため、実行ユニットは、データ単位516の最初の2バイトを宛先レジスタの組内に記憶させ、単位515の最初の2バイトの後のデータ単位515のバイトを同じ宛先レジスタの組内に記憶させる。換言すれば、実行ユニットは、抽出命令に応答して、ピボットポイントを使用して単位515のn-2個の最上位バイトを取り出し、それらを単位516の最下位の2バイトと組み合わせて単位518の全nバイトを提供する。この抽出命令の実行から得られるデータ単位518を
図5Bに示す。図示のように、データ単位518は、第2の単位516の最初の2バイトであるデータ単位518の最後の2バイトを除き、第1の単位515からのデータで構成される。結果として生じるこのデータ単位518は、バッファ500の第1の完全なデータ単位である。
【0089】
データ単位518を得た後、実行ユニットは、パック命令(
図5Bではpack128として示す)を実行する。パック命令は、データ単位518を含むレジスタをソースレジスタの組として指定する第1のオペランド及びデータ単位517を含むレジスタをソースレジスタの組として指定する第2のオペランドを取る。このパック命令の実行結果は、データ単位517がパック命令のための宛先レジスタの組内にコピーされ、そのデータの一部がデータ単位518からのデータによって上書きされることである。$PACKレジスタ内のゼロの抽出値を所与として、実行ユニットは、データ単位518の先頭から始まるデータを宛先レジスタの組に書き込ませる。$PACKレジスタ内の0x04の挿入値を所与として、実行ユニットは、宛先レジスタの組の先頭から4バイトのオフセットから始まる宛先レジスタの組内に抽出データを書き込ませる。12(16進数で0x0c)のバイト数の値を所与として、実行ユニットは、データ単位518の12バイトを宛先レジスタの組に書き込ませる。結果として生じる、宛先レジスタの組内に保持されるデータ単位519を
図5Bに示す。第1のパック命令の実行から生じるこのデータ単位519は、宛先メモリに記憶される第1のデータ単位519を構成する。
【0090】
図5Cを参照すると、データ単位519をどのようにメモリに記憶し直すことができるかが示されている。具体的には、実行ユニットは、データ単位519を宛先メモリに記憶するためにストア命令(st128として示す)を実行する。ストア命令は、メモリコピーの一部として宛先メモリに記憶されるデータの最初のアトムのアライメントされたメモリアドレス(即ち0x82000)を指定するオペランドを取る。図示のように、ロード操作は、0x82000のメモリアドレスから開始してデータ単位519を記憶させる。
【0091】
図5Dを参照すると、宛先メモリ内の2つの終端データ単位間に位置するデータ単位を生成するための操作を処理するための値をレジスタ内にロードするために、第2の初期化命令(init128bodyと呼ぶ)がどのように実行され得るかが示されている。データ単位の2つの終端間のこれらのデータ単位は、バッファ500のボディ部と呼ぶことができる。
【0092】
init128body命令は、$EXTRACT制御レジスタ内に保持される値を修正させる。この値は、メモリ領域510に記憶されるとき、バッファ500のボディ部を形成するデータ単位を生成するために使用される抽出操作を可能にするために修正される。init128body命令を実行することに応答して、実行ユニットは、(init128headtailの実行によって決定された)$EXTRACT制御レジスタ内に保持される前の値(即ちこの例では2バイト)を各データ単位のバイト数(即ちこの例では16バイト)から減算することによって新しいピボット値を決定する。結果として生じるこの例の値(即ち14バイト)は、第1の抽出命令に使用された以前のピボット値の代わりに$EXTRACT制御レジスタ内に記憶される。
【0093】
init128body命令を実行することに応答して、実行ユニットは、バッファ500のボディ部に属するデータのアトム数を決定する。この数は、バッファ500のボディ部を宛先メモリに記憶するために実行される必要のあるストア操作の数に等しい。バッファ500のボディ部は、最初のアトム(即ちアトム519)内の宛先メモリに記憶されるバッファ500のデータ又は最後のアトム(即ちメモリアドレス0x80030から始まるアトム)内の宛先メモリに記憶されるバッファ500のデータ以外の、宛先メモリに記憶されるバッファ500のデータで構成される。
図5A~
図5Hの例におけるバッファ500のボディ部は、メモリアドレス0x82010と0x82030との間に位置し、2つのデータのアトムで構成される。
【0094】
init128body命令を実行することに応答して、実行ユニットは、バッファ500のボディを決定するためにソースメモリに対して実行される第1のロード操作のためのメモリアドレスを決定する。このメモリアドレス(即ちこの例では0x80000)は、この例では、$m0に記憶されるものとして示されている。加えて、実行ユニットは、バッファ500のボディのための(データ単位519のストア操作に続く)宛先メモリへの第1のストア操作のメモリアドレスを決定する。このメモリアドレス(即ちこの例では0x82010)は、この例では、$m1内に保持されているものとして示されている。
【0095】
図5Eを参照すると、init128body命令の実行後にプロセッサ4によって実行される操作が示されている。実行ユニットは、ソースメモリからデータ単位515をロードするための第1のロード命令(ld128paceとして示す)及びソースメモリからデータ単位516をロードするための第2のロード命令(同じくld128paceとして示す)を実行する。これらの同じデータ単位515、516は、ヘッドデータ単位517を提供するためにソースメモリからロードされるため、一部の実施形態では、これらのデータ単位515、516は、init128bodyの実行後に再びロードされないが、ヘッドデータ単位517を構築するために以前にロードされたレジスタの組内に保持され得る。
【0096】
データをロードすると、実行ユニットは、抽出命令(
図5Eではextract128として示す)を実行する。この抽出命令のインスタンスは、データ単位516がロードされているレジスタの組をソースレジスタの第1の組として指定する第1のオペランド及びデータ単位515がロードされているレジスタの組をソースレジスタの第2の組として指定する第2のオペランドと共に実行される。$EXTRACTレジスタ内で指定されたピボットポイントは、14の値を取るため、実行ユニットは、データ単位520を提供する。単位520は、データ単位515のデータの最初の14バイトの後の単位515のバイト(換言すれば最後の2単位)を含む。単位520は、データ516の最初の14バイトも含む。単位516から取り出された14バイトは、データ単位520内で単位515から取り出された2バイトに続く。実行ユニットは、抽出命令のオペランドによって識別される宛先レジスタの組内にデータ単位520を提供する。これらの宛先レジスタ内に記憶されるデータ単位520は、バッファ500のボディの最初のアトムを形成する。
【0097】
データ単位520を提供した後、実行ユニットは、データ単位520をメモリに記憶するためにストア命令を実行する。データ単位520は、データ単位519が記憶されたアドレスの次のアライメントされたメモリアドレスであるアライメントされたメモリアドレスに記憶される。
【0098】
図5Fを参照すると、バッファ500のボディのためのデータの第2のアトムがどのように生成されるかが示されている。
【0099】
実行ユニットは、データ単位525をレジスタの組内にロードするためのロード命令を実行する。このデータ単位525は、データ単位516のロード元のアライメントされたメモリアドレス(即ち0x80010)の次のアライメントされたメモリアドレス(即ち0x80020)からロードされる。このアドレスは、データ単位516をロードするために実行されるロード命令の後でインクリメントされる(即ち0x80030にインクリメントされる)レジスタ$m0内のソースアドレスの値によって与えられる。
【0100】
データをロードした後、実行ユニットは、抽出命令(
図5Fではextract128として示す)を実行する。この抽出命令のインスタンスは、データ単位525がロードされているレジスタの組をソースレジスタの第1の組として指定する第1のオペランド及びデータ単位516がロードされているレジスタの組をソースレジスタの第2の組として指定する第2のオペランドと共に実行される。この抽出命令のインスタンスに応答して、実行ユニットは、データ単位526を提供する。$EXTRACTレジスタ内のピボット値は、14であるため、単位526は、データ単位516のデータの最初の14バイトの後の単位516のバイト(換言すれば最後の2バイト)を含む。単位526は、単位525の最初の14バイトも含む。単位525から取り出された14バイトは、データ単位526内で単位516から取り出された2バイトに続く。実行ユニットは、抽出命令の関連するオペランドによって識別される宛先レジスタの組内にデータ単位526を提供する。これらの宛先レジスタ内に記憶されるデータ単位526は、バッファ500のボディの第2のアトムを形成する。
【0101】
データ単位526を提供した後、実行ユニットは、データ単位526をメモリに記憶するためにストア命令を実行する。データ単位526は、データ単位520が記憶されたアドレスの次のアライメントされたメモリアドレスであるアライメントされたメモリアドレス(即ち0x82020)に記憶される。この次のアライメントされたアドレスは、$m1レジスタ内に保持された値によって与えられる。ストア操作を実行した後、このレジスタ内の値は、次のアライメントされたメモリアドレス(即ち0x82030)を指すようにインクリメントされる。
【0102】
図5Gを参照すると、宛先メモリ内に記憶するための最終的なアトム(即ちテール)がどのように生成され得るかに関する一例が示されている。この最終的なアトムを提供することは、第2のパック制御値の組を使用する第2のパック命令を実行することを含む。第2のパック命令が実行されるときにこれらを利用可能にするために、実行ユニットは、init128headtail命令を使用して決定されたこれらの(この例では$m5レジスタからの)値を$PACK制御レジスタ内にコピーする。
【0103】
実行ユニットは、ソースメモリから最終的なデータ単位527をレジスタの組内にロードするためのロード命令(ld128として示す)を実行する。
図5Gでは、このデータ単位527の前半部527aのみがソースメモリ内に示されている。実行は、$m0内のソースアドレス値からこの値をロードする。
【0104】
データ単位529をロードした後、実行ユニットは、抽出命令(
図5Gではextract128として示す)を実行する。この抽出命令のインスタンスは、データ単位527がロードされているレジスタの組をソースレジスタの第1の組として指定する第1のオペランド及びデータ単位525がロードされているレジスタの組をソースレジスタの第2の組として指定する第2のオペランドと共に実行される。この抽出命令のインスタンスに応答して、実行ユニットは、データ単位528を提供する。$EXTRACTレジスタ内のピボット値は、14であるため、単位528は、データ単位525のデータの最初の14バイトの後の単位525のバイト(換言すれば最後の2バイト)を含む。単位528は、単位527の最初の14バイトも含む。単位527から取り出された14バイトは、単位525から取り出された2バイトに続く。実行ユニットは、抽出命令の関連するオペランドによって識別される宛先レジスタの組内にデータ単位528を提供する。
【0105】
実行ユニットは、更なるロード命令(ld128)を実行して、宛先メモリからのデータ単位529をレジスタの組内にロードする。
図5Gでは、このデータ単位529の前半部529aのみが示されている。
【0106】
実行ユニットは、第2のパック命令(
図5Gではpack128として示す)を実行する。このパック命令のインスタンスは、データ単位528を含むレジスタをソースレジスタの組として指定する1つのオペランド及びデータ単位529を含むレジスタをソースレジスタの組として指定する別のオペランドを取る。このパック命令の実行結果は、データ単位528がパック命令のための宛先レジスタの組内にコピーされ、そのデータ528の一部がデータ単位529からのデータによって上書きされることである。$PACKレジスタ内の4の抽出値を所与として、実行ユニットは、データ単位529内の4バイト目以降のデータを宛先レジスタの組に書き込ませる。$PACKレジスタ内の0x04の挿入値を所与として、実行ユニットは、宛先レジスタの組の先頭から4バイトのオフセットから始まる宛先レジスタの組内に抽出データを書き込ませる。12(16進数で0x0c)のバイト数の値を所与として、実行ユニットは、データ単位529の12バイトを宛先レジスタの組に書き込ませる。パック命令の効果は、コピーされているバッファ500からのデータではない単位528内のデータ部分を宛先メモリからのデータで上書きすることである。結果として生じる、宛先レジスタの組内に保持されるデータ単位530を
図5Bに示す。第2のパック命令の実行から生じるこのデータ単位530は、メモリコピーの一部として宛先メモリに記憶されるデータ530の最終的なアトムを構成する。
【0107】
図5Hを参照すると、データ単位530を宛先メモリ内に記憶するためのストア命令を実行ユニットがどのように実行するかが示されている。ストア命令を実行することは、データ単位526の記憶が行われたメモリアドレスの次のアライメントされたメモリアドレス(即ち0x82030)から開始してデータ単位530を記憶させる。
図5Hには、このデータ単位530の前半部530aのみが示されている。
【0108】
実施形態は、メモリコピーを行うためのパック命令の使用に限定されない。例えば、パック命令は、処理するためにメモリからのミスアライメントデータを1つ又は複数のレジスタ内の適切な位置に配置するために使用され得る。
【0109】
図6を参照すると、処理するために1つ又は複数のレジスタの先頭にデータを配置するためのパック命令の使用例が示されている。
【0110】
メモリ内に記憶されたデータ610を使用して、1つ又は複数の算術演算を実行する必要があると仮定する。データ610は、メモリ内でアライメントされていないため、ロード命令を使用してデータ610を1つ又は複数のレジスタ内の適切な位置に直接ロードすることができない。従って、データ610を含むデータ単位をレジスタの組$a4:7内にロードするためにロード操作を行う。このデータ単位は、
図6でメモリアドレス0x82000から始まるように示されている。
【0111】
データ610がレジスタの組$a4:7内に記憶されると、データ610をレジスタの別の組$a0:3の先頭に記憶させるためにパック命令が実行される。レジスタ$a0:3の残りの部分は、レジスタ$a0:3のその部分の初期コンテンツによって占有される。次いで、レジスタ$a0:3の関連するものの先頭にアライメントされたデータ610に対して1つ又は複数の算術演算を実行することができる。
【0112】
実施形態は、例として記載されたに過ぎないことが理解されるであろう。様々な命令(例えば、パック、抽出、init128headtail、init128body)、レジスタ(例えば、$PACK、$EXTRACT)及びレジスタ値(例えば、ピボットポイント、挿入バイト、抽出バイト、numバイト)に使用される名称は、名称に過ぎず、限定として解釈すべきではないことが理解されるであろう。
【0113】
図7を参照すると、本願の実施形態による方法700が示されている。方法700は、第1のデータの組及び第2のデータの組を使用して、レジスタの組内に第3のデータ単位を提供するための方法である。
【0114】
S710では、処理装置4のメモリ11内に第1のデータ単位を記憶する。第1のデータ単位は、第1の部分及び1つ又は複数の追加部分を含む。第1のデータ単位は、処理装置4のLSU55又は処理装置4で受信されたデータをメモリ11に記憶するように構成される処理装置4の他の回路(例えば、受信エンジン)によってメモリ11内に記憶することができる。
【0115】
S720では、処理装置4のレジスタの第2の組内に第2のデータ単位を記憶する。これらのレジスタは、ARF26Aのレジスタであり得る。第2のデータ単位は、第2のデータ単位をメモリからロードするためのロード命令を実行することによってこれらのレジスタ内に記憶され得る。
【0116】
S730では、$PACK制御レジスタ内に制御値を記憶する。
【0117】
S740では、少なくとも1つの実行ユニットは、1つ又は複数のレジスタの第1の組内に第1のデータ単位をロードするためのロード命令を実行する。
【0118】
S750では、少なくとも1つの実行ユニットは、1つ又は複数のレジスタの組内に提供された制御値に基づいて第3のデータ単位を提供するためのパック命令を実行する。第3のデータ単位は、第1の値によって示される開始位置から始まる1つ又は複数のビット位置における第1の部分を含み、第3のデータ単位の残りのビット位置において、第2のデータ単位の対応するビット位置からのデータを含む。
【0119】
実施形態は、専ら例として記載されたことが理解されるであろう。
【手続補正書】
【提出日】2024-08-23
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
第1の部分及び1つ又は複数の追加部分を含む第1のデータ単位を記憶するように構成されたメモリと、
前記メモリからデータをロードするロード操作を行うためのロード命令を実行するように構成される少なくとも1つの実行ユニットと、
第2のデータ単位を記憶するように構成される1つ又は複数のレジスタの第2の組と、
第3のデータ単位内において前記第1の部分が提供されるべき開始位置を示す第1の値と、前記第1のデータ単位内の前記第1の部分の開始位置を示す第2の値と、前記第1の部分の長さを示す第3の値と、を含む制御値を記憶するように構成される制御レジスタと、
を備え、
前記少なくとも1つの実行ユニットは、
前記ロード命令の少なくとも1つを実行して前記ロード操作うちの第1のロード操作を実行し、1つ又は複数のレジスタの第1の組内に前記第1のデータ単位をロードすることと、
第1の種類の命令の実行に応答し、前記制御値の各々に応じて、
1つ又は複数のレジスタの組内の前記第3のデータ単位に、前記第1の値によって示される前記開始位置から始まる1つ又は複数のビット位置にある前記第1の部分を提供し、前記第3のデータ単位の残りのビット位置に前記第2のデータ単位の対応するビット位置からのデータを提供することと、
を実行するように構成される、データ処理装置。
【請求項2】
前記メモリは、前記第2のデータ単位を記憶するように構成され、前記少なくとも1つの実行ユニットは、前記第1の種類の前記命令の実行前に、前記ロード命令の更なる少なくとも1つの実行に応答して、前記第2のデータ単位を、1つ又は複数のレジスタの第2の組内にロードするように構成される、請求項1に記載のデータ処理装置。
【請求項3】
前記第3のデータ単位が記憶される前記1つ又は複数のレジスタの組は、1つ又は複数のレジスタの前記第1の組及び第2の組とは異なる1つ又は複数のレジスタの第3の組である、請求項1又は2に記載のデータ処理装置。
【請求項4】
前記第3のデータ単位が記憶される前記1つ又は複数のレジスタの組は、1つ又は複数のレジスタの第2の組である、請求項1又は2に記載のデータ処理装置。
【請求項5】
前記少なくとも1つの実行ユニットは、前記第1の種類の前記命令を実行して、前記第1の部分が前記第2のデータ単位の一部を上書きするように1つ又は複数のレジスタの前記第2の組内に前記第3のデータ単位を提供するように構成される、請求項4に記載のデータ処理装置。
【請求項6】
前記少なくとも1つの実行ユニットは、前記第1の種類の前記命令の実行前に、前記メモリ内のデータのバッファの位置を示す1つ又は複数のオペランドを使用して、前記制御レジスタ内に前記制御値を提供するための初期化命令を実行するように構成され、前記データのバッファは、前記第1の部分を含む、請求項
1に記載のデータ処理装置。
【請求項7】
前記初期化命令の前記1つ又は複数のオペランドは、前記データのバッファがコピーされるべき前記メモリ内のメモリ領域の位置を更に示す、請求項6に記載のデータ処理装置。
【請求項8】
前記メモリは、前記第1の種類の前記命令の前記実行前に、前記第2のデータ単位を前記メモリ領域内に記憶するように構成される、請求項7に記載のデータ処理装置。
【請求項9】
前記第1のデータ単位は、前記データのバッファに属する、請求項7又は8に記載のデータ処理装置。
【請求項10】
第4のデータ単位内の第3のデータ部分の開始位置、及び、第5のデータ単位内の第4のデータ部分の終了位置を示す単一の値を記憶するように構成される更なる制御レジスタを含み、
前記少なくとも1つの実行ユニットは、第2の種類の更なる命令を実行し、前記単一の値に基づいて、1つ又は複数のレジスタの組内に第6のデータ単位を提供するように構成され、
前記第6のデータ単位は、前記単一の値によって示される前記開始位置で始まる前記第3のデータ部分、及び、前記単一の値によって示される前記終了位置で終わる前記第4のデータ部分を含む、請求項
1に記載のデータ処理装置。
【請求項11】
前記少なくとも1つの実行ユニットは、命令のシーケンスを実行することにより、前記メモリ内のバッファのメモリコピーを行うように構成され、
前記メモリは、前記バッファの先頭及び終端の少なくとも一方が、前記ロード操作の開始アドレスとしてサポートされるメモリアドレスの組とミスアライメントされるように前記バッファを記憶するように構成され、
前記命令のシーケンスは、前記第1の種類の前記命令の第1のインスタンスと、前記第2の種類の前記更なる命令の複数のインスタンスと、前記第1の種類の前記命令の第2のインスタンスと、を含む、請求項10に記載のデータ処理装置。
【請求項12】
前記少なくとも1つの実行ユニットは、前記第1の種類の前記命令の前記第1のインスタンスの実行前に、前記メモリ内の前記バッファの位置を示す1つ又は複数のオペランドを使用して、前記第2の種類の前記命令の前記複数のインスタンスの少なくとも1つのインスタンスによって使用するための前記単一の値を前記更なる制御レジスタ内に提供し、前記第1の種類の前記更なる命令の前記第1のインスタンス及び第2のインスタンスによって使用するための前記制御値を少なくとも1つのレジスタ内に提供するための少なくとも1つの初期化命令を実行するように構成される、請求項11に記載のデータ処理装置。
【請求項13】
前記メモリは、前記第1の部分の先頭又は終端の少なくとも一方が、前記ロード操作の開始アドレスとして使用するためにサポートされるメモリアドレスの組とミスアライメントされるように、前記第1のデータ単位の一部として前記第1の部分を記憶するように構成される、請求項
1に記載のデータ処理装置。
【請求項14】
前記メモリ内の前記メモリアドレスの組は、固定量だけ互いに隔てられ、前記固定量は、 32ビット、64ビット、又は128ビットの1つを含む、請求項13に記載のデータ処理装置。
【請求項15】
メモリからデータをロードするロード操作を行うためのロード命令の実行をサポートする少なくとも1つの実行ユニットを含むデータ処理装置において実装される方法であって、
前記メモリ内に、第1の部分及び1つ又は複数の追加部分を含む第1のデータ単位を記憶するステップと、
1つ又は複数のレジスタの第2の組内に第2のデータ単位を記憶するステップと、
第3のデータ単位内において前記第1の部分が提供されるべき開始位置を示す第1の値と、前記第1のデータ単位内の前記第1の部分の開始位置を示す第2の値と、前記第1の部分の長さを示す第3の値と、を含む制御値を制御レジスタ内に記憶するステップと、
前記ロード命令の少なくとも1つを実行して前記ロード操作のうちの第1のロード操作を実行し、1つ又は複数のレジスタの第1の組内に前記第1のデータ単位をロードするステップと、
第1の種類の命令の実行に応答し、前記制御値の各々に応じて、
前記第1の値によって示される前記開始位置から始まる1つ又は複数のビット位置にある前記第1の部分を、1つ又は複数のレジスタの組内の前記第3のデータ単位に提供するステップと、
前記第3のデータ単位の残りのビット位置に前記第2のデータ単位の対応するビット位置からのデータを提供するステップと、
を含む方法。
【請求項16】
処理装置の少なくとも1つの実行ユニットに方法を実行させるコンピュータ可読命令の組を含むコンピュータプログラムであって、前記コンピュータ可読命令は、メモリからデータをロードするためのロード操作を実行するロード命令を含み、前記方法は、
前記メモリ内に第1の部分及び1つ又は複数の追加部分を含む第1のデータ単位を記憶するステップと、
1つ又は複数のレジスタの第2の組内に第2のデータ単位を記憶するステップと、
第3のデータ単位内において前記第1の部分が提供されるべき開始位置を示す第1の値と、前記第1のデータ単位内の前記第1の部分の開始位置を示す第2の値と、前記第1の部分の長さを示す第3の値と、を含む制御値を制御レジスタ内に記憶するステップと、
前記ロード命令の少なくとも1つを実行することに応答して、前記ロード操作の第1のものを実行し、1つ又は複数のレジスタ第1の組内に前記第1のデータ単位をロードするステップと、
第1の種類の命令の実行に応答し、前記制御値の各々に応じて、
前記第1の値によって示される前記開始位置から始まる1つ又は複数のビット位置にある前記第1の部分を、1つ又は複数のレジスタの組内の前記第3のデータ単位に提供するステップと、
前記第3のデータ単位の残りのビット位置に前記第2のデータ単位の対応するビット位置からのデータを提供するステップと、
を含む、コンピュータプログラム。
【国際調査報告】