IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アーム・リミテッドの特許一覧

特表2024-503638メモリコピーサイズ判定命令及びデータ転送命令
<>
  • 特表-メモリコピーサイズ判定命令及びデータ転送命令 図1
  • 特表-メモリコピーサイズ判定命令及びデータ転送命令 図2
  • 特表-メモリコピーサイズ判定命令及びデータ転送命令 図3
  • 特表-メモリコピーサイズ判定命令及びデータ転送命令 図4
  • 特表-メモリコピーサイズ判定命令及びデータ転送命令 図5
  • 特表-メモリコピーサイズ判定命令及びデータ転送命令 図6A
  • 特表-メモリコピーサイズ判定命令及びデータ転送命令 図6B
  • 特表-メモリコピーサイズ判定命令及びデータ転送命令 図7
  • 特表-メモリコピーサイズ判定命令及びデータ転送命令 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-01-26
(54)【発明の名称】メモリコピーサイズ判定命令及びデータ転送命令
(51)【国際特許分類】
   G06F 9/315 20180101AFI20240119BHJP
   G06F 9/30 20180101ALI20240119BHJP
【FI】
G06F9/315 M
G06F9/30 310A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023541271
(86)(22)【出願日】2021-12-13
(85)【翻訳文提出日】2023-07-28
(86)【国際出願番号】 GB2021053257
(87)【国際公開番号】W WO2022153026
(87)【国際公開日】2022-07-21
(31)【優先権主張番号】17/149,860
(32)【優先日】2021-01-15
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ヤン, ジェームス ツン-ルン
(72)【発明者】
【氏名】アーンショウ, リチャード ウィリアム
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033AA01
5B033BE01
5B033DC01
(57)【要約】
装置、方法、及びコンピュータプログラムが記載されており、装置は、命令をデコードするように構成されたデコード回路と、デコード回路によってデコードされた命令に応じてデータ処理を実行する処理回路と、を備える。デコード回路がソースメモリアドレスと、宛先メモリアドレスと、ソースメモリアドレスによって示されるメモリロケーションのソースブロックから宛先メモリアドレスによって示されるメモリロケーションの宛先ブロックにコピーされるバイトの総数とをオペランドとして指定するメモリコピーサイズ判定命令をデコードしたことに応じて、処理回路は、ソースメモリアドレス及び宛先メモリアドレスのうちの少なくとも1つに基づいて、コピーされるバイトの総数のサブセットを示すメモリコピーサイズ指示値を判定するように構成されている。データ転送命令も、記載されている。
【選択図】図4
【特許請求の範囲】
【請求項1】
装置であって、
命令をデコードするように構成されたデコード回路と、
前記デコード回路によってデコードされた前記命令に応じてデータ処理を実行する処理回路と、を備え、
前記デコード回路がソースメモリアドレスと、宛先メモリアドレスと、前記ソースメモリアドレスによって示されるメモリロケーションのソースブロックから前記宛先メモリアドレスによって示されるメモリロケーションの宛先ブロックにコピーされるバイトの総数とをオペランドとして指定するメモリコピーサイズ判定命令をデコードしたことに応じて、前記処理回路が、前記ソースメモリアドレス及び前記宛先メモリアドレスのうちの少なくとも1つに基づいて、前記コピーされるバイトの総数のサブセットを示すメモリコピーサイズ指示値を判定するように構成されている、装置。
【請求項2】
前記処理回路が、前記ソースメモリアドレス及び前記宛先メモリアドレスのうちの少なくとも1つに対する整列境界の位置に基づいて、前記メモリコピーサイズ指示値を判定するように構成されている、
請求項1に記載の装置。
【請求項3】
前記処理回路が、前記整列境界に整列されたアドレスと前記ソースメモリアドレス及び前記宛先メモリアドレスのうちの1つとの間の差に対応する前記サブセット内のバイトの数を指定するために、前記メモリコピーサイズ指示値を判定するように構成されている、
請求項2に記載の装置。
【請求項4】
ロード整列が好ましい場合、前記ソースメモリアドレス及び前記宛先メモリアドレスのうちの前記1つが、前記ソースメモリアドレスを含み、
ストア整列が好ましい場合、前記ソースメモリアドレス及び前記宛先メモリアドレスのうちの前記1つが、前記宛先メモリアドレスを含む、
請求項3に記載の装置。
【請求項5】
ロード整列が好ましいか又はストア整列が好ましいかが、ハードウェアにおいて固定されている、
請求項4に記載の装置。
【請求項6】
前記処理回路が、ロード整列が好ましいか又はストア整列が好ましいかの指示を受信するように構成されている、
請求項4又は5に記載の装置。
【請求項7】
複数のレジスタを備え、
前記処理回路が、前記デコード回路が前記メモリコピーサイズ判定命令をデコードしたことに応じて、前記複数のレジスタのうちの少なくとも1つからロード整列が好ましいか又はストア整列が好ましいかの前記指示を読み取る、
請求項6に記載の装置。
【請求項8】
前記ロード整列が好ましいか又はストア整列が好ましいかの前記指示が、設定可能である、
請求項6又は7に記載の装置。
【請求項9】
前記メモリコピーサイズ指示値が、単一のデータ転送で転送され得るバイトの総数以下である前記サブセット内のバイトの数を示す、
請求項1~8のいずれか一項に記載の装置。
【請求項10】
複数のレジスタを備え、
前記処理回路が、前記複数のレジスタのうちの少なくとも1つに前記メモリコピーサイズ指示値を書き込むように構成されている、
請求項1~9のいずれか一項に記載の装置。
【請求項11】
複数のレジスタを備え、
前記処理回路が、前記デコード回路がターゲットメモリアドレスとバイトの数を示すデータ転送サイズ指示値とを指定するデータ転送命令をデコードしたことに応じて、前記複数のレジスタと前記ターゲットアドレスに対応するメモリロケーションのターゲットブロックとの間で前記データ転送サイズ指示値によって指定される前記バイトの数を転送する、
請求項1~10のいずれか一項に記載の装置。
【請求項12】
前記処理回路が、前記デコード回路が前記データ転送命令をデコードしたことに応じて、前記ターゲットメモリアドレスを前記データ転送サイズ指示値によって指定される前記バイトの数に対応する値だけインクリメントする、
請求項11に記載の装置。
【請求項13】
前記データ転送サイズ指示値のエンコードが、前記バイトの数を2のべき乗以外のバイトの数として指定することができる、
請求項11又は12に記載の装置。
【請求項14】
前記処理回路が、前記処理回路にアクセス可能な少なくとも1つの処理リソースの利用量に基づいて、前記メモリコピーサイズ指示値を判定するように構成されている、
請求項1~13のいずれか一項に記載の装置。
【請求項15】
前記少なくとも1つの処理リソースが、ロードバッファ及びストアバッファのうちの少なくとも1つを含む、
請求項14に記載の装置。
【請求項16】
前記処理回路が、前記デコード回路が前記メモリコピーサイズ判定命令をデコードしたことに応じて、前記コピーされるバイトの総数を前記サブセット内の前記バイトの数だけデクリメントする、
請求項1~15のいずれか一項に記載の装置。
【請求項17】
前記処理回路が、前記デコード回路が前記メモリコピーサイズ判定命令をデコードしたことに応じて、プリフェッチ動作を開始して、前記ソースメモリアドレス及び前記コピーされるバイトの総数に基づいて判定されたメモリロケーションから少なくとも1つのキャッシュ内にデータをプリフェッチする、
請求項1~16のいずれか一項に記載の装置。
【請求項18】
前記プリフェッチ動作が、前記コピーされるバイトの総数を閾値と比較することと、前記バイトの総数が前記閾値を超えているとき、前記データをプリフェッチすることと、を含む、
請求項17に記載の装置。
【請求項19】
ソースメモリアドレスと、宛先メモリアドレスと、前記ソースメモリアドレスによって示されるメモリロケーションのソースブロックから前記宛先メモリアドレスによって示されるメモリロケーションの宛先ブロックにコピーされるバイトの総数とをオペランドとして指定するメモリコピーサイズ判定命令をデコードすることと、
前記メモリコピーサイズ判定命令のデコードに応じて、前記ソースメモリアドレス及び前記宛先メモリアドレスのうちの少なくとも1つに基づいて、前記コピーされるバイトの総数のサブセットを示すメモリコピーサイズ指示値を判定することと、
を含む、方法。
【請求項20】
ターゲットコードを実行するための命令実行環境を提供するために、ホストデータ処理装置を制御するためのコンピュータプログラムであって、
前記ホストデータ処理装置を制御してデータ処理を実行するために、前記ターゲットコードの命令をデコードする命令デコードプログラム論理を備え、
前記命令デコードプログラム論理が、ソースメモリアドレスと、宛先メモリアドレスと、前記ソースメモリアドレスによって示されるメモリロケーションのソースブロックから前記宛先メモリアドレスによって示されるメモリロケーションの宛先ブロックにコピーされるバイトの総数とをオペランドとして指定するメモリコピーサイズ判定命令に応じて、前記ソースメモリアドレス及び前記宛先メモリアドレスのうちの少なくとも1つに基づいて、前記コピーされるバイトの総数のサブセットを示すメモリコピーサイズ指示値を判定するように前記ホストデータ処理装置を制御する、コンピュータプログラム。
【請求項21】
装置であって、
命令をデコードするように構成されたデコード回路と、
前記デコード回路によってデコードされた前記命令に応じてデータ処理を実行する処理回路と、
複数のレジスタと、を備え、
前記処理回路が、前記デコード回路がターゲットメモリアドレスと前記複数のレジスタのうちの所与の一般用途レジスタとを指定するデータ転送命令をデコードしたことに応じて、前記複数のレジスタと前記ターゲットアドレスに対応するメモリロケーションのターゲットブロックとの間で、前記所与の一般用途レジスタ内に保持されたデータ転送サイズ指示値によって指定されるバイトの数に対応するサイズを有するデータを転送する、装置。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、データ処理の分野に関する。
【背景技術】
【0002】
データ処理システムでは、メモリ内の1つのロケーションから別のロケーションにデータをコピーできることが有用であり得る。例えば、データは、C言語のmemcpy()関数に応じて、メモリ内の1つのロケーションから別のロケーションにコピーされ得る。そのような処理は、典型的にはソフトウェアによって制御され、大きなオーバーヘッドを有し得る。
【発明の概要】
【0003】
1つの態様から見ると、本技術は、装置を提供し、装置は、
命令をデコードするように構成されたデコード回路と、
デコード回路によってデコードされた命令に応じてデータ処理を実行する処理回路と、を備え、
デコード回路がソースメモリアドレスと、宛先メモリアドレスと、ソースメモリアドレスによって示されるメモリロケーションのソースブロックから宛先メモリアドレスによって示されるメモリロケーションの宛先ブロックにコピーされるバイトの総数とをオペランドとして指定するメモリコピーサイズ判定命令をデコードしたことに応じて、処理回路が、ソースメモリアドレス及び宛先メモリアドレスのうちの少なくとも1つに基づいて、コピーされるバイトの総数のサブセットを示すメモリコピーサイズ指示値を判定するように構成されている。
【0004】
別の態様から見ると、本技術は、方法を提供し、方法は、
ソースメモリアドレスと、宛先メモリアドレスと、ソースメモリアドレスによって示されるメモリロケーションのソースブロックから宛先メモリアドレスによって示されるメモリロケーションの宛先ブロックにコピーされるバイトの総数とをオペランドとして指定するメモリコピーサイズ判定命令をデコードすることと、
メモリコピーサイズ判定命令のデコードに応じて、ソースメモリアドレス及び宛先メモリアドレスのうちの少なくとも1つに基づいて、コピーされるバイトの総数のサブセットを示すメモリコピーサイズ指示値を判定することと、
を含む。
【0005】
別の態様から見ると、ターゲットコードを実行するための命令実行環境を提供するために、ホストデータ処理装置を制御するコンピュータプログラムが提供され、コンピュータプログラムは、
ホストデータ処理装置を制御してデータ処理を実行するために、ターゲットコードの命令をデコードする命令デコードプログラム論理を備え、
命令デコードプログラム論理は、ソースメモリアドレスと、宛先メモリアドレスと、ソースメモリアドレスによって示されるメモリロケーションのソースブロックから宛先メモリアドレスによって示されるメモリロケーションの宛先ブロックにコピーされるバイトの総数とをオペランドとして指定するメモリコピーサイズ判定命令に応じて、ソースメモリアドレス及び宛先メモリアドレスのうちの少なくとも1つに基づいて、コピーされるバイトの総数のサブセットを示すメモリコピーサイズ指示値を判定するようにホストデータ処理装置を制御する。
【0006】
別の態様から見ると、装置が提供され、装置は、
命令をデコードするように構成されたデコード回路と、
デコード回路によってデコードされた命令に応じてデータ処理を実行する処理回路と、
複数のレジスタと、を備え、
処理回路は、デコード回路がターゲットメモリアドレスと複数のレジスタのうちの所与の一般用途レジスタとを指定するデータ転送命令をデコードしたことに応じて、複数のレジスタとターゲットアドレスに対応するメモリロケーションのターゲットブロックとの間で、所与の一般用途レジスタ内に保持されたデータ転送サイズ指示値によって指定されるバイトの数に対応するサイズを有するデータを転送する。
【0007】
本技術の更なる態様、特徴、及び利点は、添付の図面とともに読まれるべき以下の例の説明から明らかになる。
【図面の簡単な説明】
【0008】
図1】データ処理システムの一例を概略的に示している。
図2】ストア整列メモリコピー動作の一例を概略的に示している。
図3】ロード整列メモリコピー動作の一例を概略的に示している。
図4】メモリコピーサイズ判定命令の実行方法の一例を示すフロー図である
図5】メモリコピーサイズ判定命令の実行方法の別の例を示すフロー図である。
図6A】ロード間接命令及びストア間接命令の実行方法の例を示すフロー図である。
図6B】ロード間接命令及びストア間接命令の実行方法の例を示すフロー図である。
図7】メモリコピーサイズ判定命令に応じてプリフェッチする一例を示すフロー図である。
図8】シミュレータ実装形態を概略的に示している。
【発明を実施するための形態】
【0009】
上述したように、例えば、C言語のmemcpy()関数などの関数に応じて、メモリ内の1つのロケーションから別のロケーションにデータをコピーする際に大きなオーバーヘッドが存在し得る。memcpy()及び同様の関数は、高レベルコードを(例えば、C言語などのプログラミング言語で)記述する際にプログラマが実装するには比較的容易であり得るが、プロセッサの命令デコーダによって見られるコンパイルされたマシンコードで実装するにははるかに困難であり得る。これは、複数の理由があり、例えば、多くのプロセッサは、命令が一般にメモリからメモリにデータをコピーしないロード/ストアアーキテクチャを使用することによるものであり得る。ロード/ストアアーキテクチャを有するプロセッサにおける動作は、それぞれメモリからレジスタにデータをロードすることができレジスタからメモリにデータをストアすることができるロード命令及びストア命令を除いて、一般にレジスタからレジスタへの命令である。したがって、ロード/ストアアーキテクチャ用のマシンコードにおけるmemcpy()などの関数の実装には、ソースメモリロケーションから1つ以上のレジスタにデータをロードし、1つ以上のレジスタから宛先メモリロケーションにデータをストアするための別個の動作(例えば、別個のロード動作及びストア動作)を必要とすることになる。したがって、ロード/ストアアーキテクチャを使用するデータ処理システム内のレジスタのサイズは、一度にコピーされ得るバイトの数に制限を課し、ロード/ストアループの複数の反復を潜在的に必要とする。しかしながら、使用され得るプロセッサに利用可能な複数のレジスタサイズが存在する場合があり、どのレジスタサイズが使用するのに最良であるかは、(例えば)コピーすべきバイトの総数に依存し得る。
【0010】
したがって、memcpy()などの関数を効率的に実装する方法についての決定は、コピーすべきバイトの総数、及びアドレス整列境界に対するコピー開始アドレスの整列などの様々なパラメータに依存し得る。実際には、これは、memcpy()などの関数を実装するコンパイルされたコードセクションが、この情報(例えば、上記のパラメータ)を分析し、かつ指定されたメモリロケーション間でデータをコピーする効率的なアプローチを決定するための「決定木」を実装する命令のセットから開始することができることを意味し得る。この決定木は、多くの場合、(それらがデータ依存であり、例えば、分岐結果が現在のmemcpy()動作の特定のパラメータに依存し、かつmemcpy()関数を呼び出す1つのインスタンスから別のインスタンスに変化するため)分岐予測器によって予測することが困難な多くの分岐を含む場合があり、したがって、性能での高程度の変動性及び平均して遅い性能の両方を引き起こす可能性がある。特に、そのような多数の分岐の実行は、多数の分岐命令を実行するために必要とされる処理能力及びリソースに関して、及び実行される必要がある多数の命令が比較的大きい命令キャッシュフットプリントを必要とするため、大幅なオーバーヘッドにつながる可能性がある。
【0011】
また、所与のmemcpy()動作を処理するための最も効率的な方法は、データ処理システムのマイクロアーキテクチャに依存する場合があり、これは、ソフトウェアで評価するには困難である及び/又は遅い可能性がある。ソフトウェアにマイクロアーキテクチャ固有の命令シーケンスを含めることは、同じコードが(例えば、異なるマイクロアーキテクチャを有する)異なるプラットフォームに適用可能であることを妨げる場合があり、その結果、memcpy()関数の実装には、サポートするための大幅な開発努力を必要とし得る。
【0012】
上記の問題は、C言語のmemcpy()関数に当てはまるだけでなく、実際には、メモリ内の1つのロケーションから別のロケーションにデータをコピーするための、又は2つの異なるメモリロケーション内のデータのストリング若しくは他のチャンクを比較するための、高レベルコードにおける任意の関数にも当てはまる可能性がある。例えば、上記の問題はまた、C言語のstrcpy()などの他の関数にも当てはまり得る。更に、上記の問題は、C言語で記述された関数に当てはまるだけではない。実際、これらの問題は、他のプログラミング言語における任意の同等又は同様の関数にも当てはまる。
【0013】
したがって、上記の問題を考慮すると、メモリ内の1つのロケーションから別のロケーションにデータをコピーするのに必要な命令の数を低減することができることが有利であることになる。
【0014】
本技術は、命令をデコードするデコード回路と、デコードされた命令に応じてデータ処理を実行する処理回路と、を備える装置を提供する。いくつかの特定の例では、デコード回路は、命令をデコードして、データ処理を実行するように処理回路を制御する制御信号を生成することができる。
【0015】
本技術によれば、ソースメモリアドレス及び宛先メモリアドレスをオペランドとして指定するメモリコピーサイズ判定命令が定義される。ソースメモリアドレスは、そこからデータがコピーされるメモリロケーションのソースブロックを示し、宛先メモリアドレスは、そこにデータがコピーされるメモリロケーションの宛先ブロックを示す。メモリコピーサイズ判定命令はまた、メモリロケーションのソースブロックからメモリロケーションの宛先ブロックにコピーされるバイトの総数を指定する。コピーされるバイトの総数は、例えば、命令において直接的に識別されてもよく、又は命令によって参照されるレジスタを使用して間接的に識別されてもよい。コピーされるバイトの総数として指定され得るバイトの数は、特に制限されず、いくつかの例では0であり得ることが理解されよう。コピーされるバイトの総数は、2つ以上の異なる非0のバイトの数を示すための少なくとも2つの異なるエンコードをサポートし、かつ(任意選択的に)転送すべきバイトの総数が0であることを示すエンコードもサポートする、エンコードを使用して表すことができる。これは、0バイトの場合をチェックするためにメモリコピーサイズ判定命令の前に実行される特定の(追加の)命令を必要としないことにより、コード密度を改善する際に特に有用であり得る。
【0016】
メモリコピーサイズ判定命令がデコード回路によってデコードされると、処理回路は、コピーされるバイトの総数のサブセットを示すメモリコピーサイズ指示値を判定するように構成されている。処理回路は、メモリコピーサイズ判定命令によって指定されるソースメモリアドレス及び宛先メモリアドレスのうちの少なくとも1つに基づいて、メモリコピーサイズ指示値を判定する。メモリコピーサイズ指示値は、例えば、サブセット内のバイトの数として、又はサブセット内のバイトを識別するメモリアドレスの範囲として、サブセットを指示することができる。
【0017】
ロード/ストアアーキテクチャでは、ロード及びストアが一般にメモリからレジスタへの又はレジスタからメモリへの動作であり、メモリからメモリへの動作ではないと仮定すると、ソースメモリアドレスと宛先メモリアドレスの両方をオペランドとして採用する単一の命令を提供することは珍しいことであり得る。したがって、本技術のメモリコピーサイズ指示命令は、直観に反しているように見え得る。しかしながら、本発明者は、コピーされるバイトの総数のサブセットを計算するための専用メモリコピーサイズ判定命令を提供することによって、コピーすべきバイトの数を判定するために必要な命令の数が大幅に低減され得ることに気付いた。特に、メモリコピーサイズ指示値を計算するためにハードウェアにおいて専用命令を提供することにより、メモリコピーサイズ指示値が、システムの特定のマイクロアーキテクチャハードウェア制約に基づいて処理回路によって判定されることを可能にし、したがって、memcpy()関数又は同様のものを実装するためにマシンコードにおいて大規模なソフトウェア実装決定木を実装する必要性を回避する。これにより、実行される多数の分岐命令を必要とすることなくメモリコピーサイズが判定されることを可能にし、これが、コピーすべきバイトの数を判定するために必要とされるオーバーヘッドを大幅に低減するため、電力消費を低減し、したがって、システムの効率を向上させる。更に、メモリコピーサイズを計算するための専用命令を提供することは、memcpy()関数などの関数を実装するためのマシンコードがマイクロアーキテクチャ依存である必要がないことを意味し、代わりに、メモリコピーサイズ判定命令のためのアーキテクチャ命令は、特定のシステムマイクロアーキテクチャに関係なく同じであってもよいが、異なるマイクロアーキテクチャ実装形態は、それらの特定のマイクロアーキテクチャ制約を考慮するために異なる方法でその命令に応じてもよい。したがって、memcpy()又は同様の機能を異なるプラットフォーム上でサポートするソフトウェアをコンパイルするためのコンパイラを開発するのに必要とされる開発努力は大幅に少なくなる。
【0018】
単一のメモリアクセスにおいてメモリから読み取られ得る又はメモリに書き込まれ得るバイトの数に対する制限の一例は、メモリ整列条件に関する。いくつかのデータ処理システムでは、メモリは、各々が整列アドレスから始まる、均一なサイズを有する(しばしばメモリワードと呼ばれる)データのブロックに(論理的に)分割されると考えられ得る。整列アドレスは、整列境界を定義する。メモリにアクセスするために提供されるハードウェアのうちの少なくともいくつかは、単一の要求に応じて、(例えば、連続する整列境界間の)データの単一のブロック(ワード)にアクセスすることに対して制限され得る。したがって、複数のメモリアクセスが、2つ以上のワードに及ぶデータにアクセスするために必要とされ得る。例えば、16バイト整列を伴うデータ処理システムでは、各ワードは、16バイト長であり、16の倍数である整列アドレスで開始し、各メモリアクセスは、したがって、単一の16バイトワードをロード又はストアする。したがって、非整列アドレスから開始するデータの16バイトチャンクをロードする要求は、非整列アクセスが別個の整列アクセスに分割される必要があり得るため、整列アドレスで開始するデータの16バイトチャンクをロードする要求よりも、性能の点で非効率的であり得る。
【0019】
したがって、いくつかの例では、処理回路は、ソースメモリアドレス及び宛先メモリアドレスのうちの少なくとも1つに対する整列境界(例えば、単一のメモリアクセスでアクセスすることができないデータのブロックを分離する境界)の位置に基づいて、メモリコピーサイズ指示値を判定するように構成されている。このようにして、ソース/宛先メモリアドレスと整列境界との間の相対オフセットを分析するためにコードシーケンス内のいくつかの分岐命令を実行することに関連するオーバーヘッドを増加させることなく、専用メモリコピーサイズ判定命令を使用することによって、ソースメモリロケーション又は宛先メモリロケーションにおけるメモリ整列条件を考慮に入れることができる。整列境界は必ずしもメモリシステムにおいて物理的に示されるわけではなく、代わりに、単一のアクセスにおいてアクセスされ得るバイトの数に基づいて識別され得る(例えば、この数が8バイトである場合、整列境界は8バイトごとであり得る)ことが理解されよう。
【0020】
メモリ整列条件に従うデータ処理システムでは、ロード又はストアを実行するために実行される必要があるメモリアクセスの数が最小化されるため、整列アドレスを指定する、整列ロード命令及び/又は整列ストア命令を発行することによって、効率が改善され得る。
【0021】
したがって、本技術のいくつかの例では、処理回路は、上記整列境界に整列されたアドレスとソースメモリアドレス及び宛先メモリアドレスのうちの1つとの間の差に対応するサブセット内のバイトの数を指定するために、メモリコピーサイズ指示値を判定するように構成されている。
【0022】
このようにして、メモリコピー動作に関連付けられたロード又はストアが整列されることを可能にするメモリコピーサイズ指示値を判定することによって、装置の効率を改善することができる。更に、メモリコピーサイズ判定命令は、いくつかの例では、命令のループの一部として実行されてもよく、各反復は、コピーされるバイトの総数のそれぞれの部分をコピーする。したがって、最初のソースアドレス又は宛先アドレスが整列されていない場合、このアプローチは、ループの次の反復のためのソースアドレス又は宛先アドレスが整列されることを可能にする。更に、この判定を実行するための専用命令を提供することは、(上述したように)メモリコピーサイズ指示値を判定するために実行される必要がある命令の数を大幅に低減することによって、この効率の改善を可能にする。
【0023】
処理回路が、上記整列境界に整列されたアドレス(例えば、整列アドレス)とソースメモリアドレスとの間、又は整列アドレスと宛先メモリアドレスとの間の差に基づいてメモリコピーサイズ指示値を判定するかどうかは、いくつかの例では、装置において、(例えば、ロード/読み取りのための整列が優先される)ロード整列が好ましいか又は(例えば、ストア/書き込みのための整列が優先される)ストア整列が好ましいかに依存し得る。特に、ロード整列が好ましい場合、メモリコピーサイズ指示値は、整列アドレスとソースメモリアドレスとの間の差に基づいて判定され得る。逆に、ストア整列が好ましい場合、メモリコピーサイズ指示値は、整列アドレスと宛先メモリアドレスとの間の差に基づいて判定され得る。
【0024】
このようにして、メモリコピーサイズ判定値の実行は、システムの特定のハードウェア制約及び要件(例えば、ロード整列が好ましいか若しくはストア整列が好ましいか)、又はプログラマの選好を考慮に入れるように調整され得る。
【0025】
いくつかの特定の例では、ロード整列が好ましいか又はストア整列が好ましいかは、ハードウェアにおいて固定される。このようにして、メモリコピーサイズ指示値は、特定のハードウェア制約及びシステムの要件に応じて判定することができ、効率のより大きい改善を可能にする。
【0026】
代替的に、処理回路は、ロード整列が好ましいか又はストア整列が好ましいかの指示を受信するように構成され得る。処理回路は、次いで、指示に基づいて、メモリコピーサイズ指示値を判定することができる。ロード整列が好ましいか又はストア整列が好ましいかの指示は、例えば、レジスタにストアされた値、又は特定の値に設定されたフラグであり得る。指示は、例えば、ロード整列を好ましいものとして若しくはストア整列を好ましいものとして識別することができ、又はロード整列もストア整列も好ましくないことを示すことができる(この場合、ロード整列が好ましいか又はストア整列が好ましいかは、マイクロアーキテクチャの考慮事項に応じて選択され得る)。このアプローチは、ロード整列が好ましいか又はストア整列が好ましいかを示すために、メモリコピーサイズ判定命令内のエンコード空間を占有する必要がないため、特に有利であり得る。
【0027】
いくつかの例では、装置は、複数のレジスタを含み、処理回路は、デコード回路がメモリコピーサイズ判定命令をデコードしたことに応じて、複数のレジスタのうちの少なくとも1つからロード整列が好ましいか又はストア整列が好ましいかの指示を読み取る。例えば、これにより、制御レジスタ内の「モード」又は「ステータス」値を特権コードによって設定可能にして、メモリコピーサイズ判定動作がロード整列を優先すべきか又はストア整列を優先すべきかを示し得る。
【0028】
いくつかの例では、ロード整列が好ましいか又はストア整列が好ましいかの指示は、設定可能である。このようにして、メモリコピーサイズ指示値は、プログラマの選好を考慮して判定することができ、これにより、柔軟性を改善し、装置がプログラマの必要性に対してより容易に調整されることを可能にする。
【0029】
本技術のいくつかの例では、メモリコピーサイズ指示値は、単一のデータ転送(例えば、単一のロード又はストア)においてコピーされ得るバイトの数以下(例えば、それを超えない)である、コピーされるバイトの総数のサブセット内のバイトの数を指示するように判定される。このようにして、コードが、コピーされる領域の端部を超えて過剰にコピーされることを防ぐことができる。
【0030】
いくつかの例では、装置が複数のレジスタを備える場合、処理回路は、複数のレジスタのうちの少なくとも1つにメモリコピーサイズ指示値を(それが判定されると)書き込むように構成されている。複数のレジスタの少なくとも1つは、例えば、一般用途レジスタであり得る。このようにして、メモリコピーサイズ指示値を後続の命令に利用可能にすることができ、後続の命令は(例えば)、次いで、メモリロケーションのソースブロックからメモリロケーションの宛先ブロックにバイトの総数のサブセット(メモリコピーサイズ指示値に基づく)をロード/ストアし得る。
【0031】
いくつかの例では、装置は複数のレジスタを備え、処理回路は、デコード回路がターゲットメモリアドレスとバイトの数を示すデータ転送サイズ指示値とを指定するデータ転送命令をデコードしたことに応じて、複数のレジスタとターゲットアドレスに対応するメモリロケーションのターゲットブロックとの間でデータ転送サイズ指示値によって指定されるバイトの数を転送する。例えば、データ転送命令は、ロード間接命令であり得、処理回路は、デコード回路がロード間接命令をデコードしたことに応じて、メモリロケーションのターゲットブロックから複数のレジスタにデータ転送サイズによって指定されるバイトの数を転送し得る。別の例では、データ転送命令は、ストア間接命令であり得、処理回路は、デコード回路がストア間接命令をデコードしたことに応じて、複数のレジスタからメモリロケーションのターゲットブロックにデータ転送サイズによって指定されるバイトの数を転送することができる。
【0032】
このようにして、データ転送命令は、メモリコピーサイズ判定命令とともに、メモリコピー機能を実装する命令のループにおいて使用され得る。
【0033】
データ転送命令がメモリコピーサイズ判定命令の後に実行される場合、ターゲットメモリアドレスは、メモリコピーサイズ判定命令において指定された(例えば、ロード間接命令に対する)ソースメモリアドレス又は(例えば、ストア間接命令に対する)宛先メモリアドレスであり得、データ転送サイズ指示値は、メモリコピーサイズ判定命令に応じて判定されたメモリコピーサイズ指示値であり得る。しかしながら、データ転送命令が実際にサイズ判定命令に従うか否かは、実行される特定のソフトウェアに依存し、したがってハードウェア装置自体の特徴ではないことが理解されよう。例えば、ソフトウェアは、本技術のデータ転送命令の別の用途を見いだし、それをメモリサイズ判定命令とは独立して使用してもよい。
【0034】
また、データ転送命令は、メモリコピーサイズ判定命令とは独立して提供されてもよく、例えば、データ処理装置は、必ずしもメモリコピーサイズ判定命令をサポートすることなく、データ転送命令をサポートするように構成されてもよいことが理解されよう。
【0035】
いくつかの例では、処理回路は、デコード回路がデータ転送命令をデコードしたことに応じて、ターゲットメモリアドレスをデータ転送サイズ指示値によって指定されるバイトの数に対応する値だけインクリメントする。これにより、アクセスされたバイトの数に基づいてアドレスをインクリメントする別個の加算命令の必要性を回避し、したがって、性能を改善してコードサイズを低減する。これは、データ転送命令が、メモリと複数のレジスタとの間でデータ転送サイズ指示値によって指定されるバイトの数よりも大きいバイトの総数を転送するために実行される複数の命令のうちの1つである場合に特に有用であり得る。特に、このようにターゲットメモリアドレスをインクリメントすることにより、後続のデータ転送命令が実行されて、メモリとレジスタとの間でバイトの次のサブセット(例えば、メモリ内の連続バイト)を転送することを可能にする。
【0036】
いくつかの例では、データ転送サイズ指示値のエンコードは、バイトの数を2のべき乗以外のバイトの数として指定することができる。データ処理命令は、典型的には、2のべき乗に等しいバイトの数(例えば、2=2、4=2、8=2、16=2など)で構成されるデータ値に対して動作するため、これは直観に反している。例えば、データ転送命令は、典型的には、2のべき乗ではない転送されるバイトの数を指定しない。しかしながら、本発明者は、任意の数のバイトがデータ転送サイズ指示値によって指示されることを可能にすることが、メモリアクセスを例えば整列境界に整列させることをより容易にするという利点を有することに気付いた。例えば、データ転送命令が命令のループの一部として実行され、各反復がターゲットメモリアドレスと複数のレジスタとの間でデータの連続ブロックを転送する場合、データ転送サイズ指示値が任意のバイトの数を指定することを可能にすることが、次の反復における次のアクセスが整列されることを可能にし得る。データ転送サイズ指示値は、命令エンコードにおいてサイズを直接エンコードするのではなく、データ転送命令によって指定されるソースレジスタにおいて指定され得る。
【0037】
いくつかの例では、処理回路は、処理回路にアクセス可能な少なくとも1つの処理リソースの利用量に基づいて、メモリコピーサイズ指示値を判定するように構成されている。このようなメモリコピーサイズ指示値を判定する動的なアプローチにより、メモリアクセスに対する他の処理の影響を考慮に入れることによって、更に大きい性能改善を可能にすることができる。
【0038】
1つの特定の例では、上述の少なくとも1つの処理リソースは、ロードバッファ及びストアバッファのうちの少なくとも1つを含む。ロードバッファは、ロードが実行され得るまで、メモリからデータをロードするために処理回路によって発行されたアクセス要求をストアするバッファであり得る。例えば、ロードは、関連付けられたメモリアドレスが計算される前に発行され、メモリアドレスの準備ができるまでロードバッファ内に保持され得る。同様に、ストアバッファは、ストアが実行され得るまで、メモリにデータをストアするために処理回路によって発行されたアクセス要求をストアするバッファであり得る。例えば、ストアは、関連付けられたメモリアドレス及び/又はデータの準備ができる前に発行され、メモリアドレス及びデータの両方の準備ができるまでストアバッファ内に保持され得る。加えて、ストアは、(例えば、アウトオブオーダプロセッサにおいて)命令がコミットされる前にストアバッファに発行され、命令がコミットされるまでストアバッファ内に保持され得る。
【0039】
ロードバッファ又はストアバッファの利用量に基づいてメモリコピーサイズ指示値を判定することにより、装置が、メモリシステム上の他の既に発行されたメモリアクセス要求の影響を考慮に入れることを可能にし得る。例えば、メモリコピーサイズ指示値は、バッファ利用がより厳しく制約されるロード及びストアのうちの1つの整列を優先するように、ロードバッファ及びストアバッファの各々の残りの容量を考慮して判定され得る。
【0040】
いくつかの例では、処理回路は、デコード回路がメモリコピーサイズ判定命令をデコードしたことに応じて、コピーされるバイトの総数をサブセット内のバイトの数だけデクリメントする(例えば、バイトの総数からサブセット内のバイトの数をデクリメントし、バイトの総数を計算値に更新する)。メモリコピーサイズ判定命令を実行する際にバイトの総数も更新することによって、これは、余分な減算命令が提供される必要性を回避し、したがって、コードサイズを低減して性能を改善する。例えば、メモリコピーサイズ判定命令が、メモリロケーション間でデータの連続ブロックを転送するための命令のループの一部として実行される場合、たとえ更新されたバイトの総数がループの同じ反復内の他の命令によって必要とされなくても、各反復の一部として実行される余分な減算命令を必要とすることなく、次の反復によって使用され得る。
【0041】
しかしながら、メモリコピーサイズ判定命令のこの特徴がまた、コピーされるバイトの総数を更新することは必須ではなく、他のアプローチが、メモリコピーサイズ判定命令の実行に応じてバイトの総数を更新しないことによって、メモリコピーサイズ判定命令のマイクロアーキテクチャ実装形態を単純化することを可能にし得ることを理解されよう。例えば、これにより、同じ命令に応じて2つの宛先レジスタ(例えば、メモリコピーサイズ指示値を保持するための1つのレジスタ、及び更新されたバイトの総数を保持するための1つのレジスタ)が更新される必要性を回避することによって、マイクロアーキテクチャ実装形態をより単純にすることができる。更に、たとえ処理回路がメモリコピーサイズ判定命令に応じてバイトの総数も更新するようにも構成されている場合であっても、いくつかのマイクロアーキテクチャは、パイプラインのデコードステージにおけるメモリコピーサイズ判定命令を、パイプラインの実行ステージにおいて独立してスケジューリングされる別個のサイズ判定動作及び減算マイクロ動作に分割することによって、減算を実装することができる。
【0042】
いくつかの例では、処理回路は、デコード回路がメモリコピーサイズ判定命令をデコードしたことに応じて、プリフェッチ動作を開始して、ソースメモリアドレス及びコピーされるバイトの総数に基づいて判定されたメモリロケーションから少なくとも1つのキャッシュ内にデータをプリフェッチする。このようにして、コピーされるバイトの一部又は全部を、それらのバイトにアクセスするための任意のロード命令を実行する前に少なくとも1つのキャッシュ内で利用可能にすることによって、メモリコピー動作の性能を改善することができる。これは、ソフトウェア決定木が、多くの他の目的のためにも使用され得る一般的な分岐及び/又は算術/論理ユニット(arithmetic/logic unit、ALU)命令を使用するため、コピーされるバイトの総数のサブセットのサイズを決定するためにソフトウェア決定木を使用する実装形態において可能ではないことに留意されたい。ロードされるバイトの総数を明示的に識別する命令のエンコードは(たとえ総数のサブセットのみが次にコピーされるものとして判定される場合であっても)、プリフェッチ動作が、そうでなければ利用可能ではないであろう、現在のソースメモリアドレスのどれだけ先を見ることができるかに関するヒントを提供する。したがって、メモリコピーサイズ判定命令によって提供されるこのヒントは、プリフェッチを実行するために(任意選択的に、マイクロアーキテクチャに応じて)利用され得る。
【0043】
このようにしてデータをプリフェッチすることは、コピーされるバイトの総数が大きい場合に特に有利であり得、これは、コピーされるバイトの総数が小さい場合、対応するロードに遭遇する前にプリフェッチされたデータがキャッシュに到達する可能性が低いためである。したがって、プリフェッチされたデータのロードを要求することになるループの対応する反復に遭遇する前に、データがキャッシュに戻される機会を有するほど十分に離れているプリフェッチを優先することがより有利であり得る。したがって、いくつかの例では、プリフェッチ動作は、コピーされるバイトの総数を閾値と比較することと、バイトの総数が閾値を超えているとき、データをプリフェッチすることと、を含む。しかしながら、これは、プリフェッチ動作を実行するかどうかを決定するための基準の一例にすぎないことに留意されたい。いくつかの例では、他の基準が使用されてもよく、又はプリフェッチが常に実行されてもよく若しくは全く実行されなくてもよい。
【0044】
上述の技術は、デコード回路及び処理回路によってサポートされるネイティブ命令セットアーキテクチャの一部としてメモリコピーサイズ判定命令をサポートする、上述の処理回路及びデコード回路を実装する回路ハードウェアを有するハードウェア装置において実装され得る。
【0045】
しかしながら、別の例では、同じ技術が、ターゲットコードからの命令の実行のための命令実行環境を提供するようにホストデータ処理装置を制御するために提供され得るコンピュータプログラム(例えば、アーキテクチャシミュレータ又はモデル)において実装され得る。コンピュータプログラムは、ホストデータ処理装置を制御してデータ処理を実行するようにターゲットコードの命令をデコードする命令デコードプログラム論理を含み得る。したがって、命令デコードプログラム論理は、上述のようにハードウェア装置の命令デコーダの機能性をエミュレートする。また、プログラムは、プログラムによってシミュレーションされている命令セットアーキテクチャのアーキテクチャレジスタを表す(エミュレートする)データ構造を(ホスト装置のメモリ又はアーキテクチャレジスタ内に)維持するレジスタ維持プログラム論理を含み得る。エミュレートされたレジスタは、上記のいくつかの例で説明した複数のレジスタのいずれかを含み得る。命令デコードプログラム論理は、ハードウェアの例について上述したのと同じ機能性を有するメモリコピーサイズ判定命令に対する(及び任意選択的にデータ転送命令に対する)サポートを含む。したがって、そのようなシミュレータコンピュータプログラムは、たとえシミュレータプログラムを実行しているホストコンピュータにおいてこれらの機能を提供する任意の実際のハードウェアが存在しなくても、シミュレータコンピュータプログラム上で実行されるターゲットコードに対して、ターゲット命令セットを直接実行することができる実際のハードウェア装置によって提供されるであろう命令実行環境と同様の命令実行環境を提示することができる。これは、そのアーキテクチャを実際にサポートしていないホストプラットフォーム上で1つの命令セットアーキテクチャに対して書き込まれたコードを実行するのに有用であり得る。また、シミュレータは、ソフトウェア開発が新しいアーキテクチャをサポートするハードウェアデバイスの開発と並行して実行されている間に、命令セットアーキテクチャの新しいバージョン用のソフトウェアの開発中に有用であり得る。これにより、新しいアーキテクチャをサポートするハードウェアデバイスが利用可能になる前にソフトウェア開発を開始することができるように、ソフトウェアがシミュレータ上で開発されテストされることを可能にし得る。
【0046】
上述のように、データ転送命令は、メモリコピーサイズ判定命令とは独立して提供されてもよく、必ずしもメモリコピーサイズ判定命令もサポートしないデータ処理システムにおいてサポートされ得る。したがって、装置は、命令をデコードするように構成されたデコード回路と、デコード回路によってデコードされた命令に応じてデータ処理を実行する処理回路と、複数のレジスタと、を備えることができる。この例では、ターゲットメモリアドレスと複数のレジスタのうちの所与の一般用途レジスタとを指定するデータ転送命令が定義される。処理回路は、デコード回路がデータ転送命令をデコードしたことに応じて、複数のレジスタのうちの少なくとも1つとターゲットアドレスに対応するメモリロケーションのターゲットブロックとの間で(そのサイズが、所与の一般用途レジスタ内に保持されたデータ転送サイズ指示値によって指定されるバイトの数に対応する)データを転送する。一般用途レジスタ(general purpose register、GPR)は、命令セットアーキテクチャにおいて明示的に定義されていない意味を有する一般的なデータ値を保持することができるレジスタであり得る。例えば、GPRは、データ及び/又はアドレスを保持することができる。GPRは、算術/論理命令におけるソースオペランドとして、又はロード/ストア命令用のアドレスを生成するためのオペランドとして、参照され得る。GPR内の値をソースオペランドとして使用する命令は、ソースオペランドを提供するために複数のGPRのうちのどれを使用すべきかを選択するマルチビットレジスタ指定子フィールドを含むエンコードを有し得る。対照的に、特殊用途レジスタ(special purpose register、SPR)は、命令セットアーキテクチャにおいて定義された特別に定義された意味を有し、かつ一般に算術/論理命令又はロード/ストア命令の一般用途レジスタ指定子フィールドにおいてGPRとして参照することができないデータ値を保持するために指定されたレジスタであり得る。例えば、SPR(制御レジスタ又はシステムレジスタとも呼ばれる)は、特定の制御タスク又はデータ処理タスク(例えば、現在の動作モードを示すモード指示値、例外を処理するための例外処理情報、条件付き命令によってテストされ得る処理の結果を示すステータスフラグなどを定義する)において使用するための制御値を保持することができる。一般用途レジスタとは異なり、特殊用途レジスタは、典型的には、算術命令又はアドレス計算動作においてオペランドとして参照することができない。代わりに、特殊用途レジスタは、命令のエンコードにおいて明示的なレジスタフィールドによって指定されるのではなく、特定の動作のために処理回路によって暗黙的に参照され得る。また、一般に算術/論理命令又はロード/ストア命令とは別個であり得、かつ場合によっては所与の特権レベル以上に関連付けられた動作状態での実行に制限され得る、特殊用途レジスタを読み取る又はそれに書き込むことができる限られた数の特殊命令のみが存在してもよい。
【0047】
特殊用途レジスタの代わりに一般用途レジスタにおいて指定されたバイトの数を転送するためのデータ転送命令を提供することにより、システムの汎用性を改善することができ、実際には、システム上で実行されるソフトウェアのコード密度を改善することができる。SPRのコンテンツを操作することができる命令は制限され得るため、データ転送命令がSPRを参照する場合、SPRとGPRとの間でデータを移動させるための追加の命令が、他の命令がデータ転送サイズ指示値を望み通りに設定又は応答することを可能にするために必要とされる。データ転送サイズ指示値を指示するためにGPRを使用することによって、GPRが上述のメモリコピーサイズ判定命令の宛先レジスタであることができ、一般用途算術命令又は他の命令によってソースレジスタとして参照もされ得るため、そのような移動命令の必要性を回避することができる。例えば、(例えば、メモリアドレスが、メモリコピーループの異なる反復に対応するロード間でインクリメントされ得る)メモリアドレスの計算、及び(例えば、上述のメモリコピーサイズ判定命令を含むループにおいて、コピーされるバイトの総数がループの各実行後にデクリメントされ得る)他の計算は、データ転送命令のためのオペランドが算術演算及びアドレス計算動作においてオペランドとして参照され得る一般用途レジスタにおいて指定される場合、より良好にサポートされ得る。代わりに、これらのオペランドが特殊用途レジスタ内にある場合、追加の移動命令が必要になり得る。
【0048】
また、データ転送サイズ指示値を提供するためにGPRを使用することによって、これは、データ転送サイズ指示値の異なるインスタンスが異なるGPRを参照することを可能にすることができ、これにより、例えば、同じループ反復内でコピーされる複数の異なるデータ構造を伴うアクセス若しくはコピーをサポートするための、又はループアンローリング(ループ展開、loop unwinding)をより良好にサポートするための、より大きい柔軟性を提供することができ、ここで、高レベル動作ループの複数の反復のための命令は、コンパイルされたループの各反復がループの複数の発生を実行することを含むように、明示的に次々にコンパイルされる。ループアンローリングは、(同じコンパイルされたループ反復内で組み合わされる)高レベルループの異なるインスタンスに対応する命令が、それらのオペランドに対する異なるレジスタを参照することができるいくつかの場合では、より効率的であり得、これは、GPRがオペランドを提供するために使用される場合、より簡単であり得る。
【0049】
処理回路は、データ転送サイズ指示値がバイトの数が0であることを示す場合、データ転送命令を非動作(no-operation、NOP)命令として解釈してもよい。
【0050】
ここで、特定の実施形態を、図面を参照して説明する。
【0051】
図1は、複数のパイプラインステージを含む処理パイプラインを有するデータ処理装置102の一例を概略的に示している。パイプラインは、レベル1命令キャッシュ106、又はレベル2キャッシュ108若しくはメインメモリ110などの他のメモリ構造から、命令をフェッチするフェッチユニット104を含む。フェッチステージ(フェッチ回路)104は、フェッチアドレスによって識別された命令をフェッチし、デコードステージ(デコード回路又は命令デコーダ)112は、フェッチされた命令をデコードして、パイプラインの(処理回路118を含む)後続のステージを制御するための制御情報(例えば、制御信号)を生成する。したがって、デコードステージ112は、命令をデコードするように構成されたデコード回路の一例である。
【0052】
発行ステージ114は、命令を処理するために必要なオペランドがレジスタ116において利用可能になるまで実行を待機している命令をキューに入れる発行キューと、実行ステージ118による実行のために命令を選択する選択回路と、を含む。実行ステージ118は、デコードステージ112によって生成された制御信号の制御下で、対応する処理動作を実行する命令を実行し、書き戻しステージ120は、実行された命令の結果をレジスタ116に書き戻す。実行ステージ118は、デコード回路によってデコードされた命令に応じてデータ処理を実行する処理回路の一例である。
【0053】
実行ステージ118は、算術演算又は論理演算を実行するためのALU(算術論理演算ユニット)、浮動小数点オペランドを使用する演算を実行するための浮動小数点ユニット、及びメモリシステムからレジスタ116にデータをロードするためのロード演算又はレジスタ116からメモリシステムにデータをストアするためのストア演算を実行するためのロード/ストアユニットなどのいくつかの実行ユニットを含み得る。この例では、メモリシステムは、レベル1命令キャッシュ106と、レベル1データキャッシュ122と、データと命令との間で共有されるレベル2キャッシュ108と、メインメモリ110と、を含むが、これは可能なメモリ階層の一例にすぎず、かつ他の実装形態は、更なるレベルのキャッシュ又は異なる構成を有し得ることが理解されよう。メモリへのアクセスは、アドレス変換及び/又はメモリ保護を制御するためのメモリ管理ユニット(memory management unit、MMU-図示せず)を使用して制御され得る。メモリからデータをロードする要求は、例えば、それらの関連するメモリアドレスが計算される間に、ロードバッファ121にバッファリングされ得る。同様に、それらの関連するメモリアドレス及びデータが利用可能になるまでデータをメモリに書き込む要求をバッファリングするために、ストアバッファ123も提供される。アウトオブオーダプロセッサでは、ストアバッファ123はまた、ストア要求がコミットされるまで(たとえそれらの関連するアドレス及びデータの準備ができた後でも)、ストア要求を保持するように構成されてもよい。ロードバッファ121/ストアバッファ123にバッファリングされた要求間でアドレス比較を実行して、例えば、読み取り後読み取りハザード、書き込み後読み取りハザード、又は書き込み後書き込みハザードを検出及び解決し、かつ複数の保留中のストアを同じアドレスにマージすること、又は保留中のストア要求と同じアドレスをターゲットとするロードアドレスに応じて戻されるロード値として保留中のストア要求に応じてメモリシステムへの書き込みを待機しているストアデータを転送すること、などの性能改善を可能にすることができる。
【0054】
図1に示されるパイプラインは一例にすぎず、他の例は、パイプラインステージ又は実行ユニットの異なるセットを有し得ることが理解されよう。例えば、アウトオブオーダプロセッサは、命令によって識別されたアーキテクチャレジスタ指定子をハードウェアに提供されるレジスタ116を識別する物理レジスタ指定子にマッピングするようにレジスタリネームを実行するリネームステージを含み得る。データ処理システムはまた、分岐命令の結果を予測し、予測された結果に従ってフェッチ回路104に命令をフェッチさせる分岐予測器を任意選択的に含み得る。
【0055】
また、図1には、モード指示値レジスタ124が示されており、これは、後述するように、メモリコピーサイズ判定命令の実行中に使用され得るモード指示値を保持する。例えば、モード指示値は、ロード整列が好ましいか又はストア整列が好ましいかなど、メモリコピーサイズ指示値を判定するための基準を示すことができる。
【0056】
フェッチステージ104によってフェッチされた命令は、コンパイラによって判定されてもよく、コンパイラは、(例えば、プログラマによって記述されたソースコードを実行ステージ118によって実行され得る命令を含む実行可能コードに変換することによって)プログラマによって指定される特定の機能を行うために実行される必要があるプログラム命令を識別する。例えば、コンパイラは、同じプロセッサ上のソフトウェアで実行されるジャストインタイムコンパイラであってもよく、又は異なる装置上でオフラインで実行することができ、結果としてコンパイルされたコードが記憶装置からメモリに読み込まれる。ソースコードにおいて指定され得る関数の一例は、メモリコピー、すなわちmemcpy()関数であり、これは、コンパイラによって、コピーデータ値をメインメモリ110の1つの部分からメインメモリの別の部分にコピーするための一連の命令に変換され得る。例えば、図2に示されるように、プログラマは、メモリロケーション202のソースブロックにストアされたデータをメモリロケーション204の宛先ブロックにコピーすることを望む場合がある。特に、図2は、アドレス0x0~0x22によって識別されたメモリソースロケーションにストアされた35バイトのデータが、アドレス0xA5~0xC7によって識別された宛先メモリロケーションにコピーされる一例を示している。この例では、メモリは、バイト単位でデータをストアするように構成されており、16バイト整列されている。したがって、メモリにストアされたデータへの各個々のアクセス(ロード又はストア)は、16バイトごとに整列境界206a、206bによって定義されるように、単一の16バイトメモリワードにアクセスすることのみが許可される。メモリ内の整列境界206は、典型的には、メモリ内の物理的境界ではないことに留意されたい。代わりに、整列境界106は、典型的には、それらのアドレスに基づいて識別される。例えば、16バイト整列の場合、整列境界は、16の倍数である整列メモリアドレス(例えば、0x10、0x20、0xB0、0xC0)によって識別されたメモリロケーションにあると予想される。したがって、メモリへの各アクセスは、整列アドレスに整列され、一度に16バイト以下にアクセスする。
【0057】
場合によっては、(ロード命令の整列が優先される)ロード整列、又は(ストア命令の整列が優先される)ストア整列のうちの1つが好ましい。この選好は、所与のデータ処理装置に対して固定されてもよく、例えば、システム内のロードバッファ及びストアバッファの容量に依存し得る。代替的に、この選好は、(例えば、ロードバッファ及びストアバッファなどの処理リソースの現在の利用に応じて)動的に判定されてもよく、又は設定可能であってもよい。例えば、図1に関して上述したように、モード指示値レジスタにストアされたモード指示値を使用して、ロード整列が好ましいか又はストア整列が好ましいかを示すことができる。
【0058】
図2に戻ると、コピーされるバイトの数(35)はメモリワードサイズ(16)よりも大きいため、ソースメモリロケーション202と宛先メモリロケーション204との間で識別されたバイトをコピーする処理は、ロード動作及びストア動作の単一のペアを使用して実行することができない。したがって、処理を複数の反復に分割することができ、各反復は、その反復においてコピーすべきバイトの数を判定するステップから開始する。図2は、メモリロケーション間でバイトをコピーするために3回の反復が実行される一例を示している。
【0059】
典型的なデータ処理システムでは、第1の反復は、ソフトウェアにおいて、一度にコピーされるバイトの数を判定するための複雑な決定木によって先行されてもよく、これには、分岐命令などの多数の命令の実行を必要とし得る。これは、多数の命令の実行がかなりの量の処理能力を必要とする場合があり、かつシステム内のキャッシュにおいて大量の空間を占有する場合があるため、典型的なメモリコピー機能に対する大きなオーバーヘッドの一因となる。更に、同じmemcpy()関数を呼び出す異なる機会において、コピーされるバイトの総数及び/又は開始アドレスが異なり、決定木において全く異なる結果をもたらすことになることで、そのような分岐は予測することが困難であるため、多数の重度のデータ依存分岐の実行は、大きなオーバーヘッドに更に寄与する。したがって、決定木の分岐命令の誤予測の可能性が高く、性能の損失につながる。これは、システムの性能及び効率に悪影響を与え得るため、望ましくない可能性がある。
【0060】
したがって、より少ない命令を使用して、各反復においてコピーされるバイトの数を計算できることが望ましいであろう。これを考慮して、本発明者は、メモリコピー処理の所与の反復においてコピーされるバイトの数を計算することに特化した、新しい命令(メモリコピーサイズ判定命令)を提案している。例えば、ソースメモリロケーションから宛先メモリロケーションにバイトの総数をコピーする完全な処理(本明細書ではメモリコピー動作と呼ばれる)は、メモリコピーサイズ判定命令から始まる命令の反復ループとして実行され得る。メモリコピーサイズ判定命令は、メモリロケーションのソースブロックを識別するソースメモリアドレス(例えば、図2の例における0x0)と、メモリロケーションの宛先ブロックを識別する宛先メモリアドレス(例えば、図2の例における0xA5)と、コピーされるバイトの総数(例えば、図2の例における35)とを指定する。処理回路(実行ステージ)は、デコード回路(デコードステージ)がメモリコピーサイズ判定命令をデコードしたことに応じて、ソースメモリアドレス、宛先メモリアドレス、及びコピーされるバイトの総数に基づいて、メモリコピー動作の現在の反復においてコピーされるバイトの総数のサブセットを示すメモリコピーサイズ指示値を判定する。例えば、図2では、第1の反復においてコピーされるバイトのサブセットは、0x0~0xAの間にストアされたデータを含む。
【0061】
メモリコピーサイズ判定命令は、いくつかの異なる方法で実装され得る。本技術によるメモリコピーサイズ判定命令の一例は、以下のように表され、ここで、メモリコピーサイズ判定命令は、「memcpy1X」として示され、(ソースメモリアドレスを識別するXsource、宛先メモリアドレスを識別するXdest、及びコピーすべき残りのバイトの数(例えば、コピーされるバイトの総数)を識別するXbytes_leftである)3つのレジスタを入力として識別し、かつこの反復をコピーするためのバイトの数が書き込まれるXbytesを出力レジスタとして識別する。
【0062】
【数1】
【0063】
次いで、減算(サブ)命令を実行して、この反復をコピーすべきバイトの数をコピーすべき残りのバイトの総数から減算することによって、コピーすべきバイトの総数を調節(デクリメント)することができる。
【0064】
【数2】
【0065】
メモリコピーサイズ判定命令及び減算命令が実行されると、メモリロケーションのソースブロックから1つ以上のレジスタに、メモリコピーサイズ判定命令によって識別されたバイトのサブセットをロードするためのロード間接命令が発行され得、その後、1つ以上のレジスタからメモリロケーションの宛先ブロックにバイトのサブセットをストアするためのストア間接命令が続く。例えば、以下のようになる。
【0066】
【数3】
【0067】
【数4】
【0068】
上記には示されていないが、ロード間接命令及びストア間接命令はまた、ソースアドレス及び宛先アドレスを、現在の反復においてコピーされたバイトの数だけそれぞれインクリメントしてもよい。上記の例におけるメモリコピーサイズ判定命令、ロード間接命令、及びストア間接命令によって指定されるレジスタは、全て一般用途レジスタである。
【0069】
次いで、メモリコピーサイズ判定命令、減算命令、ロード間接命令、及びストア間接命令を、必要に応じて命令のループとして複数回の反復にわたって一緒に実行して、ソースメモリロケーションから宛先メモリロケーションにバイトの総数の全てをコピーするメモリコピー動作を実行することができる。これは、以下のように表される。
【0070】
【数5】
【0071】
上記のmemcpy1X命令は、メモリコピーサイズ判定命令の1つの例示的な実装形態にすぎない。別の例では、減算動作は、メモリコピーサイズ判定命令が実行されたことに応じて実行されるメモリコピーサイズ判定動作の一部として計算され得る。
【0072】
【数6】
【0073】
次いで、メモリコピー動作は、以下のように、memcpy1命令を含むループとして実装され得る。
【0074】
【数7】
【0075】
図2に戻ると、この例に示されるメモリコピー処理は、上記の例のいずれかに従って実装され得る。例えば、memcpy1命令を使用すると、以下のようになる。
【0076】
第1の反復:
【0077】
【数8】
【0078】
第2の反復:
【0079】
【数9】
【0080】
第3の反復:
【0081】
【数10】
【0082】
この例では、ストア整列が好ましく、したがって、ループの次の反復に対してXdestになるアドレスが宛先メモリロケーション内の整列境界206と整列されるように、各反復に対するメモリコピーサイズ指示値(Xbytes)が計算される。特に、メモリコピーサイズ指示値(Xbytes)は、Xdestと次の整列境界アドレスとの間の差として計算される。
【0083】
上記の例では、メモリコピーサイズ判定命令は、コピーすべき残りのバイトの数を計算する(例えば、コピーされるバイトの総数をデクリメントする)、上記で与えられた「memcpy1」の例に対応している。しかしながら、上記の動作は、代わりに、「memcpy1X」の例と減算命令との組み合わせを使用して実行され得ることに留意されたい。また、上記の例におけるロード間接命令及びストア間接命令は、Xn(64ビット)レジスタを指定するが、これは一例にすぎず、任意のタイプのレジスタが指定され得ることが理解されよう。例えば、代わりに、Qn(128ビット)レジスタを代わりに使用してもよい。更に、上記の例におけるロード間接命令及びストア間接命令は各々、現在の反復においてコピーされたバイトのサブセットを保持するための単一のレジスタを指定するが、ロード間接命令及びストア間接命令が各々、サブセットを保持するための2つのレジスタを指定することも可能である。
【0084】
【数11】
【0085】
したがって、memcpy2X命令は、以下のようにロード間接ペア命令及びストア間接ペア命令と組み合わせて実装され得る。
【0086】
【数12】
【0087】
代替的に、Xnレジスタの代わりにQnレジスタを使用すると、以下のようになる。
【0088】
【数13】
【0089】
したがって、データ処理システムにおいて、メモリコピーサイズ判定命令、ロード間接命令、及びストア間接命令を実装するいくつかの方法が存在する。メモリコピーサイズ判定命令の上記の例の全ては、メモリロケーションのソースブロックを示すソースメモリアドレスと、メモリロケーションの宛先ブロックを示す宛先メモリアドレスと、宛先ロケーションのソースブロックからメモリロケーションの宛先ブロックにコピーされるバイトの総数とを識別する。上記の例の全てにおいて、コピーされるバイトの総数のサブセットを示すメモリコピーサイズ指示値は、ソースメモリアドレス及び/又は宛先メモリアドレスに応じて判定される。上記の例は網羅的なものではなく、これらの命令を実装する他のアプローチも可能であることが理解されよう。
【0090】
図3は、ソースメモリロケーション202から宛先メモリロケーション204に35バイトをコピーするメモリコピー動作の別の例を示している。図3に示される例は、ストア整列の代わりにロード整列が好ましいことを除いて、図2の例と同じである。したがって、図2のように、メモリコピーサイズ判定命令は、ソースメモリアドレス0x0、宛先メモリアドレス0xA5、及びコピーされるバイトの総数35を指定することになる。
【0091】
しかしながら、この例では、ストア整列の代わりにロード整列が好ましいため、各反復に対するメモリコピーサイズ指示値(Xbytes)は、次の反復においてXsourceになるアドレスがソースメモリロケーション内の整列境界206と整列されるように計算される。特に、メモリコピーサイズ指示値(Xbytes)は、Xsourceと次の整列境界アドレスとの間の差として計算され得る。
【0092】
第1の反復:
【0093】
【数14】
【0094】
第2の反復:
【0095】
【数15】
【0096】
第3の反復:
【0097】
【数16】
【0098】
図2と同様に、上記の一連の反復は、上記で検討したmemcpy1X、memcpy2X、又はmemcpy2Qの例を使用して等しく実行され得ることが理解されよう。図2と同様に、メモリコピーサイズ判定命令のこれらの例示的な実装形態は、網羅的ではないことも理解されよう。
【0099】
図2及び図3の両方の例は、必要とされるバイトの全てがコピーされたという点で、同じ最終結果を達成する。しかしながら、異なるアプローチは、異なる状況において(例えば、異なるマイクロアーキテクチャ上で実装されるとき、又はロードバッファ占有若しくはストアバッファ占有などの動的条件に起因して)、異なるレベルの性能をもたらし得る。図3の例(ロード整列を優先する)では、整列されていないストアの各々は、2つのストア要求に分割される必要があり得るが、第1のロードは1つのワードの一部のみをロードし、他のロードは整列されるため、ロードは全て1つの要求内で処理され得る。しかしながら、それにもかかわらず、結果は、図2の例(ストア整列を優先する)と同じになる。
【0100】
ロード整列が好ましいか又はストア整列が好ましいかは、ソフトウェアにおいて提供される指示に依存し得る。代替的に、ロード整列が好ましいか又はストア整列が好ましいかは、ハードウェアにおいて固定され得る。ハードウェアにおいて固定される場合、ロード整列が好ましいか又はストア整列が好ましいかのハードウェアの決定は、ソフトウェアにおいて提供される任意の指示とは無関係であり得、その結果、同じソフトウェアコードが、異なる設計選択に基づいて実装された異なるマイクロアーキテクチャ上で実行することができ、サブセットにおいて判定されるバイトの数に対する異なる結果をもたらす(図2及び図3の例を参照)。異なるマイクロアーキテクチャ上の結果値に対して異なる機能的結果を与える命令は、命令セットアーキテクチャ(instruction set architecture、ISA)をサポートする各マイクロアーキテクチャ上でコードが全く同じ機能的結果を与えることを予想するため、直観に反している。しかしながら、本発明者は、実際には、レジスタ内に適合するバイトの数の制限が、memcpy()関数の実装形態がコピーされるメモリ領域を通して反復するループを必要とし得ることを意味し、したがって、たとえ第1の反復においてメモリコピーサイズ判定命令によって判定されるバイトの数が異なる場合であっても、最終結果が同じになるようにループを書き込むことができ、ループが全体として、コピーされる全ての必要とされる領域を通して依然として進むことを認識した。ハードウェアにおいて、ロード整列が好ましいか又はストア整列が好ましいかを判定する自由をマイクロアーキテクチャに与えることにより、マイクロアーキテクチャ設計者に対して様々な決定をサポートするのに役立つ。
【0101】
図4は、メモリコピーサイズ判定命令を実行するために処理回路によって実行される方法S402の一例を示すフロー図である。方法S402は、メモリコピーサイズ判定命令がデコード回路によってデコードされたかどうかを判定するステップS404を含む。例えば、処理回路は、デコード回路から制御信号を受信したことに応じて、メモリコピーサイズ判定命令がデコードされたと判定してもよい。メモリコピーサイズ判定命令は、ソースメモリアドレスと、宛先メモリアドレスと、ソースメモリアドレスとによって示されるメモリロケーションのソースブロックから宛先メモリアドレスによって示されるメモリロケーションの宛先ブロックにコピーされるバイトの総数とを指定する。
【0102】
メモリコピーサイズ判定命令がデコードされたと判定された場合、処理回路は、コピーされるバイトの総数のサブセットを示すメモリコピーサイズ指示値を判定し(S406)(例えば、メモリコピーサイズ指示値は、メモリコピーサイズ判定命令、ロード間接命令、及びストア間接命令を含む命令のループの現在の反復においてコピーされるバイトのサブセットを示し得る)、この値をレジスタにストアする。
【0103】
図4の例では、処理回路はまた、メモリコピーサイズ判定命令がデコードされたことに応じて、(例えば、上述のループの後続の反復において)コピーすべき残りのバイトの数を示すために、コピーすべきバイトの総数をサブセット内のバイトの数だけデクリメントする(S408)。しかしながら、メモリコピーサイズ判定命令がデコードされたことに応じて処理回路がこのステップS408を実行するのではなく、(上述したように)別個の減算命令が代わりに提供されてコピーすべきバイトの総数をデクリメントしてもよいことが理解されよう。
【0104】
図5は、ストア整列が好ましいか又はロード整列が好ましいかの指示(例えば、図1のモード指示値レジスタ124にストアされた値)に基づいてメモリコピーサイズ指示値を判定するように処理回路によって実行される方法S502の一例を示している。図4のように、方法は、メモリコピーサイズ判定命令がデコードされたかどうかを判定するステップS404を含む。メモリコピーサイズ判定命令がデコードされたと判定されると、処理回路は、レジスタから、ロード整列が好ましいか又はストア整列が好ましいかの指示を読み取る(S506)ように構成されている。
【0105】
指示を読み取った後、処理回路は、指示に基づいて、ロード整列が好ましいかどうかを判定する(S508)。ロード整列が好ましい場合、処理回路は、サブセット内のバイトの数がソースメモリアドレスと整列境界に整列されたアドレスとの間の差に対応するように、メモリコピーサイズ指示値を判定する(S510)。
【0106】
ロード整列が好ましくない場合、処理回路は、ストア整列が好ましいかどうかを判定する(S512)。ストア整列が好ましい場合、処理回路は、サブセット内のバイトの数が宛先メモリアドレスと整列境界に整列されたアドレスとの間の差に対応するように、メモリコピーサイズ指示値を判定する(S514)。
【0107】
一方、ロード整列もストア整列も好ましくないと判定された場合、処理回路は、データ処理装置のデフォルト設定に基づいてメモリコピーサイズ指示値を判定する(S516)ように構成されている。
【0108】
任意選択的に、処理回路は、上述したように、バイトの総数をサブセット内のバイトの数だけデクリメントし続けてもよい。
【0109】
図5のアプローチでは、ロード整列が好ましいか又はストア整列が好ましいかの指示は、(例えば、上述のモード指示値レジスタ内に保持された値を更新することによって)設定可能である。これにより、メモリコピーサイズ判定命令の実行をプログラマ及び/又はシステムの特定のニーズに調整するための追加の柔軟性を提供する。しかしながら、他の例では、ロード整列が好ましいか又はストア整列が好ましいかはハードウェアにおいて固定され、この場合、ロード整列及びストア整列のどちらを優先するかの決定は、ソフトウェアにおいて提供される任意の指示とは無関係であり得ることが理解されよう。
【0110】
図6A及び図6Bは、ロード間接命令及びストア間接命令を実行するために処理回路によって実行される方法S602、S612の例を示すフロー図である。その実行が図6A及び図6Bに示されているロード間接命令及びストア間接命令は各々、ターゲットメモリロケーション、レジスタ識別子、及び識別されたレジスタとターゲットメモリアドレスによって識別されたメモリロケーションとの間で転送すべきバイトの数を指定するデータ転送命令の例である。特に、ロード間接命令は、ターゲットメモリアドレスとして、先行するメモリコピーサイズ指示命令によって指定されるソースメモリアドレスを指定し、転送すべきバイトの数として、メモリコピーサイズ指示値を指定する。データ処理回路は、デコード回路がロード間接命令をデコードしたことに応じて、指定されたバイトをソースメモリアドレスによって識別されたソースメモリロケーションから識別されたレジスタにコピーする。
【0111】
図6Aは、ロード間接命令の実行方法S602を示し、方法は、ロード間接命令がデコードされたかどうかを判定するステップS604を含む。ロード間接命令は、ソースメモリアドレスと、メモリコピーサイズ指示値を保持するレジスタのレジスタ識別子と、バイトの総数のサブセットがロードされることになるレジスタとを指定する。
【0112】
ロード間接命令がデコードされると、ロード間接命令を実行する処理回路は、対応するレジスタからメモリコピーサイズ指示値を読み取る(S606)ように構成されている。データ転送サイズ指示値に基づいて、処理回路は、ソースメモリアドレスによって識別されたソースメモリロケーションからロード間接命令において識別された他のレジスタに、メモリコピーサイズ指示値によって識別されたバイトの数をロードする(S608)。
【0113】
この例におけるロード間接命令を実行する処理回路はまた、ターゲットアドレス(ソースアドレス)を、レジスタにロードされたバイトの数だけインクリメントする(S610)。しかしながら、このステップは、代わりに、デコード回路が別個の命令をデコードしたことに応じて実行され得ることを理解されよう。
【0114】
図6Bは、ストア間接命令を実行する処理回路によって実行される方法S612を示すフロー図である。ストア間接命令は、ターゲットメモリアドレスとして、先行するメモリコピーサイズ指示命令によって指定される宛先メモリアドレスを指定し、転送すべきバイトの数として、メモリコピーサイズ指示値を指定する。データ処理回路は、デコード回路がストア間接命令をデコードしたことに応じて、ストア間接命令によって指定されるレジスタから宛先メモリアドレスによって識別された宛先メモリロケーションに指定されたバイトを転送する。
【0115】
方法S612は、ストア間接命令がデコード回路によってデコードされたかどうかを判定するステップS614を含む。処理回路は、ストア間接命令がデコードされたと判定すると、ストア間接命令によって指定されるレジスタからメモリコピーサイズ指示値を読み取る(S616)。メモリコピーサイズ指示値に基づいて、処理回路は、ストア間接命令において指定された別のレジスタから宛先メモリロケーションに、メモリコピーサイズ指示値によって識別されたバイトのサブセットをストアする(S618)。
【0116】
この例では、ストア間接命令を実行する処理回路はまた、宛先メモリアドレスを、レジスタから宛先メモリロケーションにストアされたバイトの数だけインクリメントする(S620)。しかしながら、このステップは、代わりに、デコード回路が別個の命令をデコードしたことに応じて実行され得ることに留意されたい。
【0117】
例えば、図4又は図5の方法S402、S502、並びに図6A及び図6Bの方法S602、S612に従って、メモリコピーサイズ判定命令、ロード間接命令、及びストア間接命令を含む命令のループを反復的に実行することにより、処理回路は、メモリロケーションのソースブロックからメモリロケーションの宛先ブロックにデータをコピーするメモリコピー動作を実行することができる。命令のこのループは、ループが実行される回数を調節することによって、任意の数のバイトがこのようにコピーされることを可能にする。この機能性を実行するための専用命令を提供することにより(特に、専用メモリコピーサイズ指示値を提供することにより)、実行される必要がある命令の総数を低減することによって、メモリコピー処理に関連するオーバーヘッドを低減することができる。
【0118】
メモリコピーサイズ判定命令がデコードされたことに応じてプリフェッチを実行することによって、データ処理装置の性能を更に改善させることができる。図7は、メモリコピーサイズ判定命令に応じてデータをプリフェッチする方法の一例を示すフロー図である。特に、方法は、メモリコピーサイズ判定命令がデコード回路によってデコードされたかどうかを判定するステップS704を含む。メモリコピーサイズ判定命令がデコードされると、処理回路は、メモリコピーサイズ判定命令によって示されたバイトの総数が所定の閾値よりも大きいかどうかを判定するステップS706を最適に実行することができる。バイトの総数が閾値を超えていない場合、方法は、ステップS704に戻るが、バイトの総数が閾値を超えている場合、方法は、メモリコピーサイズ判定命令によって示されたソースアドレスに基づいて判定されたメモリロケーションから、少なくとも1つのキャッシュ内にデータをプリフェッチするステップS708に移動する。少なくとも1つのキャッシュ内にプリフェッチされるバイトの数は、メモリコピーサイズ判定命令によって指定されるバイトの総数に依存し得る。
【0119】
バイトの総数が閾値より大きいかどうかを判定する任意選択的なステップS706の例では、プリフェッチされるデータは、ソースアドレスから閾値バイトの数を超えて離れたアドレスからのデータであってもよい。これは、プリフェッチされたデータが、そのデータが必要とされる反復に実際に遭遇する前に戻されるためのいくらかの時間を与えるため、有利であり、例えば、ソースアドレスに近いアドレスからプリフェッチされた任意のデータは、プリフェッチされたデータに対応するロード間接命令が実行される前に戻されなくてもよい。
【0120】
ループの所与の反復のメモリコピーサイズ判定命令に応じてプリフェッチされるデータは、ループの後の反復に対応するデータである。これは、(データが既にキャッシュ内にフェッチされているので)後の反復におけるロード間接命令がより迅速に実行されることを可能にするため、特に有利であり得る。
【0121】
メモリコピーサイズ判定命令のデコードに応じてデータをプリフェッチすることは、コピーされるバイトの総数が大きく、その結果、メモリロケーションのソースブロックからメモリロケーションの宛先ブロックにバイトの総数の全てをコピーするために多数の反復が必要とされる場合、特に有利であり得る。したがって、方法S702は、上述したように、バイトの総数が所定の閾値よりも大きいかどうかをチェックするステップS706を任意選択的に含んでもよい。これにより、データをプリフェッチすることによって達成され得るメモリコピー動作の性能の改善が、プリフェッチ動作を実行することの性能コストを上回るかどうかに関する判定が行われることを可能にする。しかしながら、このステップは任意選択的であり、代わりに、処理回路は、デフォルトでデータをプリフェッチするように構成されてもよく、又はデータを全くプリフェッチしないように構成されてもよく、あるいは、他の基準が、データをプリフェッチするかどうかを判定するために使用されてもよいことが理解されよう。
【0122】
図8は、使用され得るシミュレータ実装形態を例示している。上記の実施形態は、当該技術をサポートする特定の処理ハードウェアを動作させる装置及び方法の点において本発明を実装しているが、コンピュータプログラムの使用によって実装される本明細書に記載の実施形態による命令実行環境を提供することも可能である。そのようなコンピュータプログラムは、コンピュータプログラムがハードウェアアーキテクチャのソフトウェアベースの実装形態を提供する限り、多くの場合、シミュレータと呼ばれる。様々なシミュレータコンピュータプログラムは、エミュレータ、仮想マシン、モデル、及び動的バイナリトランスレータを含むバイナリトランスレータを含む。典型的に、シミュレータ実装形態は、ホストプロセッサ830上で実行することができ、任意選択的にホストオペレーティングシステム820を実行して、シミュレータプログラム810をサポートする。いくつかの配置では、ハードウェアと提供されている命令実行環境との間に複数のレイヤのシミュレーションがあってもよく、及び/又は、同じホストプロセッサ上に提供されている複数の異なる命令実行環境があってもよい。歴史的に、強力なプロセッサが、合理的な速度で実行されるシミュレータ実装形態を提供するのに必要とされてきたが、このようなアプローチは、互換性又は再使用の理由から別のプロセッサにネイティブなコードを実行することが望まれるようなときなど一定の状況では、正当化され得る。例えば、シミュレータ実装形態は、ホストプロセッサハードウェアによってサポートされていない追加の機能性を有する命令実行環境を提供し得るか、又は典型的には異なるハードウェアアーキテクチャに関連付けられた命令実行環境を提供し得る。シミュレーションの概要は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、1990年冬 USENIX Conference、53~63頁に記載されている。
【0123】
これまで、特定のハードウェア構成物又は特性を参照して実施形態を説明してきたが、シミュレーションされた実施形態では、適切なソフトウェア構成物又は特性によって同等の機能性を提供することができる。例えば、特定の回路構成は、シミュレーションされた実施形態で、コンピュータプログラム論理として実装されてもよい。同様に、レジスタ又はキャッシュなどのメモリハードウェアは、シミュレーションされた実施形態で、ソフトウェアのデータ構造として実装されてもよい。前述の実施形態で参照されたハードウェア要素のうちの1つ以上がホストハードウェア(例えば、ホストプロセッサ830)上に存在する構成では、いくつかのシミュレーションされた実施形態は、適する場合、ホストハードウェアを使用してもよい。
【0124】
特に、シミュレータコード810は、ホストデータ処理装置を制御してデータ処理を実行するように、ターゲットコードの(上述のメモリコピーサイズ判定命令、ロード間接命令、及び/又はストア間接命令を含み得る)命令をデコードする命令デコードプログラム論理812を含んでもよい。したがって、命令デコードプログラム論理は、上述のようにハードウェア装置のデコード回路の機能性をエミュレートする。また、プログラムは、プログラムによってシミュレーションされている命令セットアーキテクチャのアーキテクチャレジスタを表す(エミュレートする)データ構造を(ホスト装置のメモリ又はアーキテクチャレジスタ内に)維持するレジスタ維持プログラム論理814を含んでもよい。エミュレートされたレジスタは、上記のいくつかの例で説明した複数のレジスタのいずれかを含み得る。命令デコードプログラム論理は、ハードウェアの例について上述したのと同じ機能性を有する、上述したメモリコピーサイズ判定命令、データ転送命令(例えば、ロード間接命令及び/又はストア間接命令)に対するサポートを含む。シミュレータコード810はまた、例えば上述のロード間接命令及びストア間接命令に応じて、ホストハードウェア830のメモリ内のデータにアクセスするメモリアクセス回路の機能性をエミュレートするためのシミュレーションされたメモリアクセスプログラム論理816を含んでもよい。
【0125】
シミュレータプログラム810は、(非一時的媒体であり得る)コンピュータ可読ストレージ媒体にストアされて、(アプリケーション、オペレーティングシステム、及びハイパーバイザを含み得る)ターゲットコード800に、シミュレータプログラム810によってモデル化されたハードウェアアーキテクチャのインタフェースと同じであるプログラムインタフェース(命令実行環境)を提供することができる。したがって、上述したメモリコピーサイズ判定命令、ロード間接命令、及びストア間接命令を含むターゲットコード800のプログラム命令は、シミュレータプログラム810を使用する命令実行環境内から実行することができ、それによって、上記で検討した装置102のハードウェア機能を実際には有していないホストコンピュータ830が、これらの機能をエミュレートすることができる。
【0126】
本出願において、「~ように構成された(configured to...)」という用語は、装置の要素が、定義された動作を実施することが可能である構成を有することを意味するために使用される。この文脈において、「構成」とは、ハードウェア又はソフトウェアの配置又は相互接続の方法を意味する。例えば、装置は、定義された動作を提供する専用ハードウェアを有し得るか、又はプロセッサ若しくは他の処理デバイスが、機能を実行するようにプログラムされ得る。「ように構成された」は、装置要素が、定義された動作を提供するために何らかの変更がなされる必要があることを意味しない。
【0127】
本発明の例示的な実施形態が添付の図面を参照して本明細書で詳細に説明されているが、本発明はこれらの正確な実施形態に限定されないこと、及び様々な変更及び修正が、当業者によって、添付の特許請求の範囲によって定義されている本発明の範囲から逸脱することなく、実施形態に行われ得ることが理解されよう。
図1
図2
図3
図4
図5
図6A
図6B
図7
図8
【国際調査報告】