(57)【要約】  コンピュータシステムが提示される。コンピュータシステムは、データを格納するメモリシステムと、コンピュータプロセッサと、メモリアクセスエンジンと、を含む。メモリアクセスエンジンは、コンピュータプロセッサから計算プロセスの第１の命令を受信することであって、第１の命令が、メモリシステムからのデータにアクセスするためのものであることと、第１の命令に基づいて、メモリシステムからのデータの少なくとも部分を取得することと、データの少なくとも第１の部分の取得後に、コンピュータプロセッサが、計算プロセスの第２の命令を実行できるようにする指示をコンピュータプロセッサに送信することと、を行うように構成される。
2020507848.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムであって、
データを格納するメモリシステムと、
コンピュータプロセッサと、
メモリアクセスエンジンであって、
前記コンピュータプロセッサから計算プロセスの第１の命令を受信することであって、前記第１の命令が、前記メモリシステムからの前記データにアクセスするためのものであることと、
前記第１の命令に基づいて、前記メモリシステムからの前記データの少なくとも部分を取得することと、
前記データの前記少なくとも第１の部分の前記取得後に、前記コンピュータプロセッサが、前記計算プロセスの第２の命令を実行できるようにする指示を前記コンピュータプロセッサに送信することと、
を行うように構成されるメモリアクセスエンジンと、
を含むコンピュータシステム。
【請求項２】
前記メモリアクセスエンジンが、
前記第１の命令に関連する仮想アドレスを取得し、
前記仮想アドレスに基づいて、前記第１の命令に関連する物理アドレスを取得し、
前記物理アドレスの取得の結果に基づいて、前記第１の命令が、例外を引き起こすかどうかを判定し、
前記第１の命令が例外を引き起こすという判定に応じて、前記コンピュータプロセッサに前記例外を扱わせる指示を前記コンピュータプロセッサに送信するように更に構成される、請求項１に記載のコンピュータシステム。
【請求項３】
前記第１の命令が例外を引き起こすかどうかの前記判定が、
前記物理アドレスに関連するページが存在するかどうかを判定し、
前記物理ページが存在しないという判定に応じて、前記第１の命令が例外を引き起こすと判定するように、前記メモリアクセスエンジンが更に構成されることを含む、請求項２に記載のコンピュータシステム。
【請求項４】
前記第１の命令が例外を発生させるかどうかの前記判定が、
前記物理アドレス及び前記仮想アドレスの少なくとも１つに関連するページが、アクセス可能かどうかを判定し、
前記ページがアクセス可能ではないという判定に応じて、前記第１の命令が例外を引き起こすと判定するように、前記メモリアクセスエンジンが更に構成されることを含む、請求項２に記載のコンピュータシステム。
【請求項５】
前記メモリシステムが、複数のキャッシュラインを備えたキャッシュを含み、前記第１の命令が例外を引き起こすかどうかの前記判定が、
前記第１の命令に関連するアドレスが、前記複数のキャッシュラインの１つと整列するかどうかを判定し、
前記アドレスが前記複数のキャッシュラインのどれとも整列しないという判定に応じて、前記第１の命令が例外を引き起こすと判定するように、前記メモリアクセスエンジンが更に構成されることを含む、請求項２に記載のコンピュータシステム。
【請求項６】
前記メモリアクセスエンジンが、１つのキャッシュラインにおけるデータの前記少なくとも第１の部分を一度に取得するように更に構成される、請求項５に記載のコンピュータシステム。
【請求項７】
前記指示が、まだアクセスされていない前記データの第２の部分のサイズ及び位置を示す情報を含む、請求項１に記載のコンピュータシステム。
【請求項８】
前記第２の命令が、前記メモリアクセス命令に対するデータ依存性を有する、請求項１に記載のコンピュータシステム。
【請求項９】
コンピュータシステムであって、
第１のデータ及び第２のデータを格納するメモリシステムと、
第１のコア識別子に関連する第１のコンピュータプロセッサコア及び第２のコア識別子に関連する第２のコンピュータプロセッサコアを含むコンピュータプロセッサと、
メモリアクセスエンジンであって、
前記第１のコンピュータプロセッサコアから計算プロセスの第１の命令を受信することであって、前記第１の命令が、前記メモリシステムからの前記第１のデータにアクセスするためのものであることと、
前記第１の命令を前記第１のコア識別子と関連付けることと、
前記第１の命令に基づいて、前記メモリシステムからの前記データの少なくとも部分を取得することと、
前記データの前記少なくとも第１の部分の前記取得後に、前記第１のコンピュータプロセッサコアが、前記計算プロセスの第２の命令を実行できるようにするために、前記第１のコア識別子を含む指示を前記コンピュータプロセッサに送信することと、
を行うように構成されるメモリアクセスエンジンと、
を含むコンピュータシステム。
【請求項１０】
前記メモリアクセスエンジンが、
前記第１の命令に関連する仮想アドレスを取得し、
前記仮想アドレスに基づいて、前記第１の命令に関連する物理アドレスを取得し、
前記物理アドレスの取得の結果に基づいて、前記第１の命令が、例外を引き起こすかどうかを判定し、
前記第１の命令が例外を引き起こすという判定に応じて、前記第１のコンピュータプロセッサコアに前記例外を扱わせる指示を前記第１のコンピュータプロセッサコアに送信するように更に構成される、請求項９に記載のコンピュータシステム。
【請求項１１】
前記指示が、まだアクセスされていない前記データの第２の部分のサイズ及び位置を示す情報を含む、請求項９に記載のコンピュータシステム。
【請求項１２】
前記メモリアクセスエンジンがまた、
前記メモリシステムからの前記第２のデータにアクセスするために、前記第２のコンピュータプロセッサコアから前記計算プロセスの第３の命令を受信し、
前記第３の命令を前記第２のコア識別子と関連付けるように構成され、
前記指示が、前記第２のコア識別子と前記第３の命令の実行ステータスとを含み、且つ
前記指示に含まれる前記第２のコア識別子が、前記第３の命令の前記実行ステータスを前記第１のコンピュータプロセッサコアが無視できるようにする、請求項９に記載のコンピュータシステム。
【請求項１３】
メモリアクセス方法であって、前記方法が、コンピュータプロセッサと、データを格納するメモリシステムと結合されたメモリアクセスエンジンによって実行され、前記方法が、
前記コンピュータプロセッサから計算プロセスの第１の命令を受信することであって、前記第１の命令が、前記メモリシステムからの前記データにアクセスするためのものであることと、
前記第１の命令に基づいて、前記メモリシステムからの前記データの少なくとも部分を取得することと、
前記データの前記少なくとも第１の部分の取得後に、前記コンピュータプロセッサが、前記計算プロセスの第２の命令を実行できるようにするために、前記コンピュータプロセッサに指示を送信することと、
を含むメモリアクセス方法。
【請求項１４】
前記第１の命令に関連する仮想アドレスを取得することと、
前記仮想アドレスに基づいて、前記第１の命令に関連する物理アドレスを取得することと、
前記物理アドレスの取得の結果に基づいて、前記第１の命令が、例外を引き起こすかどうかを判定することと、
前記第１の命令が例外を引き起こすという判定に応じて、前記コンピュータプロセッサに前記例外を扱わせる指示を前記コンピュータプロセッサに送信することと、
を更に含む、請求項１３に記載の方法。
【請求項１５】
前記第１の命令が例外を引き起こすかどうかの前記判定が、
前記物理アドレスに関連するページが存在するかどうかを判定することと、
前記物理ページが存在しないという判定に応じて、前記第１の命令が、例外を引き起こすと判定することと、
を含む、請求項１４に記載の方法。
【請求項１６】
前記第１の命令が例外を発生させるかどうかの判定が、
前記物理アドレス及び前記仮想アドレスの少なくとも１つに関連するページが、アクセス可能かどうかを判定することと、
前記ページがアクセス可能ではないという判定に応じて、前記第１の命令が例外を引き起こすと判定することと、
を含む、請求項１４に記載の方法。
【請求項１７】
前記メモリシステムが、複数のキャッシュラインを備えたキャッシュを含み、前記第１の命令が、例外を引き起こすかどうかの判定が、
前記第１の命令に関連するアドレスが、前記複数のキャッシュラインの１つと整列するかどうかを判定することと、
前記アドレスが、前記複数のキャッシュラインのどれとも整列しないという判定に応じて、前記第１の命令が、例外を引き起こすと判定することと、
を含む、請求項１４に記載の方法。
【請求項１８】
前記指示が、まだアクセスされていない前記データの第２の部分のサイズ及び位置を示す情報を含む、請求項１３に記載の方法。
【請求項１９】
メモリアクセス方法であって、前記方法が、第１のデータ及び第２のデータを格納するメモリシステムと結合され、且つ第１のコア識別子に関連する第１のコンピュータプロセッサコア及び第２のコア識別子に関連する第２のコンピュータプロセッサコアを含むコンピュータプロセッサと結合されたメモリアクセスエンジンによって実行され、前記方法が、
前記第１のコンピュータプロセッサコアから計算プロセスの第１の命令を受信することであって、前記第１の命令が、前記メモリシステムからの前記第１のデータにアクセスするためのものであることと、
前記第１の命令を前記第１のコア識別子と関連付けることと、
前記第１の命令に基づいて、前記メモリシステムからの前記第１のデータの少なくとも一部を取得することと、
前記第１のデータの前記少なくとも一部を取得した後で、前記第１のコンピュータプロセッサコアが、前記計算プロセスの第２の命令を実行できるようにするために、前記第１のコア識別子と前記第１の命令の実行ステータスとを含む指示を前記コンピュータプロセッサに送信することと、
を含むメモリアクセス方法。
【請求項２０】
前記第２のコンピュータプロセッサコアから前記計算プロセスの第３の命令を受信することであって、前記第３の命令が、前記メモリシステムからの前記第２のデータにアクセスするためのものであることと、
前記第３の命令を前記第２のコア識別子と関連付けることと、
を更に含み、
前記指示が、前記第２のコア識別子と前記第３の命令の実行ステータスとを含み、且つ
前記指示に含まれる前記第２のコア識別子が、前記第３の命令の前記実行ステータスを前記第１のコンピュータプロセッサコアが無視できるようにする、請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
[001]  本開示は、一般にコンピュータアーキテクチャの分野に関し、特にメモリシステムへの加速されたアクセスを提供するための方法及び機器に関する。
【背景技術】
【０００２】
背景
[002]  メモリシステムは、ランダムアクセスメモリ（ＤＲＡＭ）及びキャッシュメモリ装置を含んでもよいが、コンピュータプロセッサによって、又は他の装置（例えば入力／出力（Ｉ／Ｏ）装置）によってアクセスできる一時記憶空間を提供する。メモリシステムは、データを格納するために用いることができ、次にデータは、コンピュータプロセッサ及び／又はＩ／Ｏ装置にフェッチすることができる。コンピュータプロセッサはまた、コンピュータプロセッサによって、又はＩ／Ｏ装置によって、処理の結果を後続の処理用にメモリシステムに格納することができる。ＤＲＡＭは、適度なアクセス速度を提供するが、メモリアクセス待ち時間は、特に、コンピュータプロセッサが、メモリアクセスタスクを実行するために、自らの計算資源を用いる場合に、コンピュータプロセッサにとってボトルネックのままである。メモリアクセス待ち時間は、例えば、メモリアクセスタスクが完了するまで他の命令の処理が遅延される場合に、コンピュータプロセッサの性能をひどく低下させる可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
[003]  本開示の実施形態は、コンピュータシステムを提供する。コンピュータシステムは、データを格納するメモリシステムと、コンピュータプロセッサと、メモリアクセスエンジンと、を含む。メモリアクセスエンジンは、コンピュータプロセッサから計算プロセスの第１の命令を受信することであって、第１の命令が、メモリシステムからのデータにアクセスするためのものであることと、第１の命令に基づいて、メモリシステムからのデータの少なくとも部分を取得することと、データの少なくとも第１の部分の取得後に、コンピュータプロセッサが、計算プロセスの第２の命令を実行できるようにする指示をコンピュータプロセッサに送信することと、を行うように構成される。
【０００４】
[004]  本開示の実施形態はまた、別のコンピュータシステムを提供する。コンピュータシステムは、第１のデータ及び第２のデータを格納するメモリシステムと、第１のコア識別子に関連する第１のコンピュータプロセッサコア及び第２のコア識別子に関連する第２のコンピュータプロセッサコアを含むコンピュータプロセッサと、メモリアクセスエンジンと、を含む。メモリアクセスエンジンは、第１のコンピュータプロセッサコアから計算プロセスの第１の命令を受信することであって、第１の命令が、メモリシステムからの第１のデータにアクセスするためのものであることと、第１の命令を第１のコア識別子と関連付けることと、第１の命令に基づいて、メモリシステムからのデータの少なくとも部分を取得することと、データの少なくとも第１の部分の取得後に、第１のコンピュータプロセッサコアが、計算プロセスの第２の命令を実行できるようにするために、第１のコア識別子を含む命令をコンピュータプロセッサに送信することと、を行うように構成される。
【０００５】
[005]  本開示の実施形態はまた、メモリアクセス方法を提供する。方法は、コンピュータプロセッサとメモリシステムとに結合されたメモリアクセスエンジンによって実行することができる。方法は、コンピュータプロセッサから計算プロセスの第１の命令を受信することであって、第１の命令が、メモリシステムからのデータにアクセスするためのものであることと、第１の命令に基づいて、メモリシステムからのデータの少なくとも部分を取得することと、データの少なくとも第１の部分の取得後に、コンピュータプロセッサが、計算プロセスの第２の命令を実行できるようにするために、コンピュータプロセッサに指示を送信することと、を含む。
【０００６】
[006]  本開示の実施形態はまた、別のメモリアクセス方法を提供する。方法は、第１のデータ及び第２のデータを格納するメモリシステムと結合され、第１のコア識別子に関連する第１のコンピュータプロセッサコア及び第２のコア識別子に関連する第２のコンピュータプロセッサコアを含むコンピュータプロセッサと結合されたメモリアクセスエンジンによって実行することができる。方法は、第１のコンピュータプロセッサコアから計算プロセスの第１の命令を受信することであって、第１の命令が、メモリシステムからの第１のデータにアクセスするためのものであることと、第１の命令を第１のコア識別子と関連付けることと、第１の命令に基づいて、メモリシステムからの第１のデータの少なくとも一部を取得することと、第１のデータの少なくとも一部を取得した後で、第１のコンピュータプロセッサコアが、計算プロセスの第２の命令を実行できるようにするために、第１のコア識別子と第１の命令の実行ステータスとを含む指示をコンピュータプロセッサに送信することと、を含む。
【０００７】
[007]  開示される実施形態の追加の目的及び利点は、以下の説明において部分的に述べられ、且つ説明から部分的に明らになるか、又は実施形態の実施によって学習され得る。開示される実施形態の目的及び利点は、特許請求の範囲で述べられる要素及び組み合わせによって実現され達成され得る。
【０００８】
[008]  前述の概説及び以下の詳細な説明の両方が、例示的で単に説明であり、請求されるものとして、開示される実施形態を制限するものでないことを理解されたい。
【図面の簡単な説明】
【０００９】
図面の簡単な説明
【図１Ａ】[009]本開示の実施形態が使用され得る例示的なコンピュータシステムを示す概略図である。
【図１Ｂ】[010]図１Ａのコンピュータシステムの例示的な動作を示すタイミング図である。
【図２Ａ】[011]本開示の実施形態に従って、例示的なコンピュータシステムを示す概略図である。
【図２Ｂ】[012]図２Ａのコンピュータシステムの例示的なコンポーネントを示す図である。
【図２Ｃ】[012]図２Ａのコンピュータシステムの例示的なコンポーネントを示す図である。
【図２Ｄ】[013]本開示の実施形態に従って、別の例示的なコンピュータシステムを示す概略図である。
【図２Ｅ】[014]図２Ａのコンピュータシステムの例示的な動作を示すタイミング図である。
【図３】[015]本開示の実施形態に従って、メモリアクセスを実行する例示的な方法を示す流れ図である。
【発明を実施するための形態】
【００１０】
実施形態の説明
[016]  ここで、例示的な実施形態に対して詳細な参照が行われるが、それらの実施形態の例は、添付の図面に示されている。以下の説明は、添付の図面を参照し、そこでは、相異なる図面における同じ番号は、別段の表現がない限り、同じ又は同様の要素を表す。例示的な実施形態の以下の説明で明らかにされる実装形態は、本発明と一致する全ての実装形態を表すわけではない。代わりに、それらは、添付の特許請求の範囲において挙げられるような本発明に関係する態様と一致する機器及び方法の単なる例である。
【００１１】
[017]  本開示の実施形態は、メモリシステムへの加速されたアクセスを提供するための方法及びメモリアクセスエンジンを提供する。本開示の実施形態を用いれば、コンピュータプロセッサが計算プロセスのメモリアクセス命令を受信した後で、コンピュータプロセッサは、メモリアクセスエンジンに命令を送信することができ、メモリアクセスエンジンは、コンピュータプロセッサに代わって、メモリアクセス命令を実行することができる。結果として、コンピュータプロセッサの計算資源は、コンピュータプロセッサの性能をひどく低下させる可能性がある高い待ち時間のメモリアクセス命令の実行から解放され得る。更に、メモリアクセス命令の実行中に、メモリアクセスエンジンは、コンピュータプロセッサにステータス情報（status indication）を送信することができる。ステータス情報は、計算プロセスの後続の命令がメモリアクセス命令に対するデータ依存性を有するかどうかをコンピュータプロセッサが判定できるようにし、且つデータ依存性が除去されるか又は存在しないと分かるとすぐに、コンピュータプロセッサが後続の命令を実行できるようにする。結果として、メモリアクセスタスクの遂行は、計算プロセスの命令の実行に対して最小の割り込みしかもたらさない。これらのステップは、コンピュータプロセッサの性能を著しく改善することができる。
【００１２】
[018]  ここで図１Ａを参照すると、図１Ａは、本開示の実施形態が利用され得るコンピュータシステム１００を示す。図１Ａに示されているように、コンピュータシステム１００は、コンピュータプロセッサ１０１及びメモリシステム１０２を含む。メモリシステム１０２は、ＤＲＡＭ装置１０３及びキャッシュ装置１０４を含んでもよく、且つデータ及び命令を格納することができる。命令は、コンピュータプログラム１０５の一部とすることができ、コンピュータプログラム１０５は、処理パイプライン１０６によって実行された場合に、処理パイプライン１０６に、メモリシステム１０２に格納されたデータにアクセスさせる。コンピュータプログラムは、コンパイラ（図１Ａには図示せず）によって、処理パイプライン１０６による実行用の命令セットへと生成することができる。図１Ａに示されている実例として、コンピュータプログラム１０５は、命令１０５ａ、１０５ｂ、及び１０５ｃを含む。命令１０５ａは、「ｓｒｃ」と名付けられたメモリ位置から「ｄｓｔ」と名付けられたメモリ位置に、１０００バイトのデータをコピーするための「ｍｅｍｃｐｙ」（メモリコピー）命令とすることができる。コンパイラは、（メモリからデータを読み出すための）「ロード」命令及び（データをメモリに書き込むための）「格納」命令のセットへとｍｅｍｃｐｙ命令を復号してもよい。各ロード及び格納命令は、メモリにおける８バイトのデータにアクセスすることができる。例えば、１０００バイトのデータをコピーするために、コンパイラは、１２５ペアの「ロード」及び「格納」命令を生成してもよく、ペアのそれぞれは、メモリ内の位置から１バイトのデータをロードし、且つそのバイトのデータを逆にメモリ内の別の位置に格納するためのものである。命令１０５ｂ及び１０５ｃは、算術命令（例えば加算）とすることができる。
【００１３】
[019]  コンピュータプロセッサ１０１はまた、処理パイプライン１０６、命令バッファ１０８、実行管理ユニット１１０、及びメモリ管理ユニット（ＭＭＵ）１１２を含む。ユニット及びバッファのそれぞれは、例えば金属酸化物半導体電界効果トランジスタ（ＭＯＳＦＥＴ）に基づいて構成された組み合わせ及び順序論理回路セットを含んでもよい。実行管理ユニット１１０は、処理パイプライン１０６による命令の実行を制御及び管理することができる。例えば、実行管理ユニット１１０が、コンピュータプログラム１０５を実行する指示を（例えば図１Ａには示されていないオペレーティングシステムから）受信した後で、実行管理ユニット１１０は、計算プロセスを生成することができ、計算プロセスは、処理パイプライン１０６によるコンピュータプログラム１０５の実行のステータス情報を提供することができる。計算プロセスを生成した後で、実行管理ユニット１１０は、二次記憶装置（例えばハードディスクドライブ）からメモリシステム１０２にコンピュータプログラム１０５をロードし、且つメモリシステム１０２からコンピュータプログラム１０５の命令セットを取得するために、命令バッファ１０８を制御することができる。
【００１４】
[020]  命令セットは、コンピュータプログラムにおいて反映されたシーケンシャル順序に従って、格納され実行され得る。例えば、図１Ａに示されているように、命令バッファ１０８は、バッファヘッドポインタ及びバッファテールポインタを含む。実行管理ユニット１１０の管理下で、命令バッファ１０８は、バッファヘッドポインタに関連するバッファ位置に格納された命令を実行用に処理パイプライン１０６にフェッチしてもよい。処理パイプライン１０６は、命令を実行する場合に、命令に従ってデータ１１４を送信又は受信するために、メモリシステム１０２にアクセスすることができる。命令をフェッチした後で、命令バッファ１０８は、バッファから命令を除去し、且つ実行用に次の命令をフェッチするために、次のバッファ位置にバッファヘッドポインタを移動させることができる。
【００１５】
[021]  実行管理ユニット１１０はまた、様々な基準に基づいて、命令バッファ１０８による命令のフェッチングを制御することができる。例えば、実行管理ユニット１１０は、命令が、例外を引き起こすかどうかを判定してもよい。命令の実行が、コンピュータプロセッサ用の異常な又は例外的な動作条件につながる可能性がある場合に、例外が発生し得る。実例として、図１Ａのコンピュータプログラム１０５のｍｅｍｃｐｙ命令は、メモリシステム１０２内の存在しないメモリ位置、又はコンピュータプロセッサ１０１がアクセス許可を有しないメモリ位置へと、コンピュータプロセッサ１０１にアクセスさせる可能性がある。
【００１６】
[022]  ＭＭＵ１１２は、相異なる計算プロセス用にメモリ空間を割り当てて管理する。実行管理ユニット１１０が、コンピュータプログラム１０５の実行用に計算プロセスを生成した後で、ＭＭＵ１１２は、メモリシステム１０２における物理メモリ位置セットを割り当てることができ、各メモリ位置は、物理アドレスと関連付けられる。ＭＭＵ１１２はまた、仮想メモリ空間を生成し、且つ物理メモリ位置セットへのエイリアスとして、仮想メモリ空間を計算プロセスに提供することができる。仮想メモリ空間は、ページセットを含むことができ、ページのそれぞれは、コンテイジャスメモリ空間を形成するために、連続仮想メモリ位置セットを含むことができる。各仮想メモリ位置は、仮想メモリアドレスと関連付けることができ、且つＭＭＵ１１２によって割り当てられた物理メモリ位置にマッピングすることができる。ページは、典型的には、４０９６バイトのメモリ空間を含み、ｍｅｍｃｐｙ命令１０５ａによってアクセスされる１０００バイトのデータは、仮想メモリ空間の１ページ内に格納することができる。
【００１７】
[023]  仮想メモリアドレスと物理メモリアドレスとの間のマッピングは、ＭＭＵ１１２によって維持されるページテーブルに格納することができる。ページテーブルはまた、例外を検出するために実行管理ユニット１１０によってアクセス可能である。例えば、ｍｅｍｃｐｙ命令に関連する仮想メモリアドレスに基づいて、実行管理ユニット１１０は、対応する物理アドレスセットを取得するために、ページテーブルを参照することができる。実行管理ユニット１１０が、コンピュータプログラム１０５によって参照される仮想アドレス用の物理アドレスをページテーブルから見つけることができない場合に、又は物理アドレスが、コンピュータプログラム１０５（若しくは処理パイプライン１０６）にとってアクセス可能でない場合に、実行管理ユニット１１０は、ｍｅｍｃｐｙ命令が、例外を引き起こすと判定してもよい。かかる場合に、特殊処理（例えばコンピュータプログラムの実行の通常フローの変更、実行の終了等）が、例外を扱うために必要とされ得る。例えば、実行管理ユニット１１０は、コンピュータプログラム１０５の実行のフローを変更すること（例えばｍｅｍｃｐｙ命令の省略、コンピュータプログラム等１０５の実行の終了等）を決定してもよい。
【００１８】
[024]  例外の取り扱いは、割り込みが、コンピュータプロセッサ２０１に、計算プロセス（例えばコンピュータプログラム２０５用の計算プロセス）の実行を中断させ、且つ第２の計算プロセス（例えば割り込みの承認）を開始させることができる点で、割り込みの取り扱いとは異なる。第２の計算プロセスが完了した後で、コンピュータプロセッサ２０１は、コンピュータプログラム２０５用の計算プロセスに逆に切り替わり、且つコンピュータプログラム２０５の命令の残りを実行してもよい。他方で、例外の取り扱い中に、コンピュータプロセッサ２０１は、例外を引き起こすコンピュータプロセスの実行を維持する。
【００１９】
[025]  更に、実行管理ユニット１１０はまた、後続の命令が、先行する命令に対するデータ依存性を有する場合に、後続の命令の実行を保留することができる。実行はまた、計算資源が利用可能になるまで、保留することができる。例えば、図１Ａに示されているように、コンピュータプログラム１０５の命令１０５ｂ、即ち「＄Ｒ３＝ｄｓｔ［５］＋１」は、「ｄｓｔ」と名付けられたメモリ位置に格納されたデータを要求し、データはまた、前のｍｅｍｃｐｙ命令（命令１０５ａ）によって修正される。かかるデータ依存性の判定に基づいて、実行管理ユニット１１０は、命令１０５ｂが、最新のメモリデータで動作することを保証するために、命令１０５ａの実行が完了するまで、命令１０５ｂの実行を保留することができる。更に、命令１０５ｃ（＄Ｒ２＝＄Ｒ１＋１）と命令１０５ａ及び１０５ｂとの間にデータ依存性がなくても、命令１０５ｃの実行はまた、限られた計算資源ゆえに遅延されてもよい。例えば、命令バッファ１０８は、限られたエントリ数を有し、命令１０５ｃは、ｍｅｍｃｐｙ命令用の命令の少なくとも幾つかが、処理パイプライン１０６にフェッチされ、且つ命令バッファ１０８から除去されるまで、命令バッファ１０８に格納する（且つフェッチング用に利用可能になる）ことができない。
【００２０】
[026]  ここで図１Ｂを参照すると、図１Ｂは、図１Ａのコンピュータプログラム１０５の実行用のタイミング図を示す。図１Ｂに示されているように、命令バッファ１０８から処理パイプライン１０６に各命令をフェッチする（メモリから１バイトのデータを読み出すこと及びメモリに１バイトのデータを格納することを含む）前に、実行管理ユニット１１０は、例えば、命令によって参照される仮想メモリアドレスに対応する物理メモリアドレスを取得するために、ページテーブルを参照することによって、例外確認を実行する。命令が例外確認に通ると判定した後で、実行管理ユニット１１０は、処理用に処理パイプライン１０６に命令をフェッチすることができる。次に、ｍｅｍｃｐｙ命令１０５ａの実行が完了した後で、命令１０５ｂ及び１０５ｃは、実行用に処理パイプライン１０６にフェッチされる。
【００２１】
[027]  図１Ｂに示されているように、ｍｅｍｃｐｙ命令１０５ａの実行は、コンピュータプログラム１０５の他の命令の実行に対して極めて大きい遅延を引き起こす可能性がある。例えば、例外確認は、１０００の１バイトメモリアクセス命令のそれぞれのために実行され、それは、ｍｅｍｃｐｙ命令１０５ａの実行に遅延を加える。更に、メモリアクセス命令が、命令バッファ１０８をいっぱいに満たすので、ｍｅｍｃｐｙ命令１０５ａの実行結果に依存しない命令１０５ｃを含む他の命令の実行もまた、メモリアクセス命令の少なくとも幾つかが、フェッチされて命令バッファ１０８から除去されるのを待たなければならない。
【００２２】
[028]  高い待ち時間のメモリアクセス動作によってもたらされる負担を軽減するために、メモリアクセスエンジンが、メモリアクセス動作を実行するために提供され得、メモリアクセスエンジンは、コンピュータプロセッサ１０１の計算資源を他の動作用に使用できるようにする。ここで図２Ａを参照すると、図２Ａは、本開示の実施形態に基づくコンピュータシステム２００を示す。図２Ａに示されているように、コンピュータシステム２００は、コンピュータプロセッサ２０１を含み、コンピュータプロセッサ２０１は、図１Ａの処理パイプライン１０６及び命令バッファ１０８、実行管理ユニット２１０、並びにＭＭＵ２１２を含む。コンピュータシステム２００はまた、メモリアクセスエンジン２２０、及び図１Ａのメモリシステム１０２を含む。メモリアクセスエンジン２２０は、ＭＯＳＦＥＴに基づいて構成された組み合わせ及び順序論理回路セットを含んでもよい。
【００２３】
[029]  実行管理ユニット２１０は、処理パイプライン１０６によって、且つメモリアクセスエンジン２２０によって、コンピュータプログラム２０５の命令の実行を制御及び管理することができる。実行管理ユニット２１０が、コンピュータプログラム２０５を実行するために、（例えば図２Ａに示されていないオペレーティングシステムから）指示を受信した後で、実行管理ユニット２１０は、コンピュータプログラム２０５用の計算プロセスを生成し、且つ二次記憶装置（例えばハードディスクドライブ）からメモリシステム１０２に、コンピュータプログラム２０５のコンパイルされた命令をロードすることができる。実行管理ユニット２１０は、メモリシステム１０２から命令を取得し、且つバッファに命令を格納するために、命令バッファ１０８を制御することができる。
【００２４】
[030]  バッファに命令を格納した後で、実行管理ユニット２１０はまた、命令の幾つかにおける実行をメモリアクセスエンジン２００に委託することを決定することができる。決定は、様々な基準に基づくことができる。例として、実行管理ユニット２１０は、限定するわけではないが、ｍｅｍｃｐｙ及び「ｓｔｒｃｐｙ」（ストリングコピー）命令を含む、メモリ内のデータのコピー又は移動を伴う任意の命令の実行をメモリアクセスエンジン２００に委託することを決定してもよい。別の例として、実行管理ユニット２１０はまた、メモリシステム１０２への所定数の書き込み及び読み出し動作を要求するメモリデータコピー／移動命令をメモリアクセスエンジン２２０に委託することを決定してもよい。実例として、実行管理ユニット２１０は、復号命令２０５ａの結果に基づいて、命令が、「ｓｒｃ」と名付けられたメモリ位置から「ｄｓｔ」と名付けられたメモリ位置に、１２０００バイトのデータをコピーするためのｍｅｍｃｐｙ命令を含むと判定してもよい。実行管理ユニット２１０は、命令２０５ａが、多数（例えば１２０００）の読み出し動作（例えばロード命令）及び書き込み動作（例えば格納命令）をメモリシステム１０２に要求し、且つメモリアクセス待ち時間ゆえに処理パイプライン１０６に非常に大きな遅延をもたらし得ると判定してもよい。これらの判定に基づいて、実行管理ユニット２１０は、命令２０５ａの実行をメモリアクセスエンジン２２０に委託してもよい。別の例として、実行管理ユニット２１０はまた、キャッシュミスの場合に、メモリデータコピー／移動命令の実行をメモリアクセスエンジン２２０に委託することを決定してもよく、キャッシュミスは、例えばキャッシュ装置１０４に対する読み出し及び書き込み動作よりはるかに大きなアクセス待ち時間で、ＤＲＡＭ１０３への読み出し及び書き込み動作を要求し得る。これらの例において、実行管理ユニット２１０は、命令２０５ａを表すロード及び格納命令セットを実行用にメモリアクセスエンジン２２０に送信してもよい。次に、メモリアクセスエンジン２２０は、メモリシステム１０２においてデータ２２２を取得及び／又は格納することができる。
【００２５】
[031]  実行用にメモリアクセスエンジン２２０に命令２０５ａを送信した後で、実行管理ユニット２１０は、処理パイプライン１０６が残りの命令を実行できるようにするために、（例えばバッファヘッドポインタの位置を変更することによって）対応するロード及び格納命令を命令バッファ１０８から除去してもよい。バッファヘッドポインタに関連する命令が、メモリアクセスエンジン２２０によって実行されている命令のどれにもデータ依存性を有しないと実行管理ユニット２１０が判定した場合に、実行管理ユニット２１０は、メモリアクセスエンジン２２０が命令の実行を完了したかどうかにかかわらず、バッファヘッドポインタに関連する命令を実行用に処理パイプライン１０６にフェッチするために、命令バッファ１０８を制御することができる。実例として、図２Ａに示されているように、実行用にメモリアクセスエンジン２２０に命令２０５ａを送信した後で、実行管理ユニット２１０は、命令２０５ｂが命令２０５ａに対してデータ依存性を有しないという判定に基づいて、処理パイプライン１０６に命令２０５ｂをフェッチするために命令バッファ１０８を制御してもよい。これによって、命令２０５ｂの実行は、後ではなく、メモリアクセス命令２０５ａの実行と並行して行うことができ、且つメモリシステム１０２のメモリアクセス待ち時間（特にＤＲＡＭ部にアクセスするための）によってそれほど影響されないようにすることができる。結果として、コンピュータプロセッサ２０２の性能は、改善することができる。
【００２６】
[032]  他方で、バッファヘッドポインタに関連する命令が、メモリアクセスエンジン２２０によって実行されているメモリアクセス命令に対するデータ依存性を有すると実行管理ユニット２１０が判定した場合に、実行管理ユニット２１０は、メモリアクセス命令の少なくとも幾つかにおける実行が完了されたという指示２２４を実行管理ユニット２１０がメモリアクセスエンジン２２０から受信するまで、処理パイプライン１０６への命令のフェッチングを保留してもよい。実行管理ユニット２１０はまた、指示２２４を待つ間に、データ依存性を有しない他の命令をフェッチしてもよい。実例として、図２Ａに示されているように、実行管理ユニット２１０は、命令２０５ｃが、メモリ位置「ｄｓｔ［０９９］」に格納された値に加算動作を実行することを決定してもよい。更に、実行管理ユニット２１０はまた、メモリ位置「ｄｓｔ［０９９］」が、「ｄｓｔ」メモリ位置と関連付けられ、「ｄｓｔ」メモリ位置が、ｍｅｍｃｐｙ命令２０５ａの実行中に更新されることを決定してもよい。従って、実行管理ユニット２１０は、命令２０５ｃが、命令２０５ａに対するデータ依存性を有すると判定してもよい。この判定に基づいて、実行管理ユニット２１０は、メモリ位置ｄｓｔ［０９９］が、ｍｅｍｃｐｙ命令の実行によって更新されたという指示２２４を実行管理ユニット２１０がメモリアクセスエンジン２２０から受信するまで、処理パイプライン１０６への命令２０５ｃのフェッチングを遅延させてもよい。幾つかの実施形態において、実行管理ユニット２１０はまた、ｍｅｍｃｐｙ命令２０５ａの実行が完了したという指示２２４を実行管理ユニット２１０が受信するまで、処理パイプライン１０６への命令２０５ｃのフェッチングを遅延させてもよい。
【００２７】
[033]  指示２２４は、メモリアクセスエンジン２２０による命令の実行ステータスを実行管理ユニット２１０に提供するように構成された、メモリアクセスエンジン２２０から実行管理ユニット２１０への（又はコンピュータプロセッサ２０２の他のコンポーネントへの）通信の一部とすることができる。ここで図２Ｂを参照すると、図２Ｂは、図２Ａの指示２２４の例として指示２２４ａを示す。図２Ｂに示されているように、指示２２４ａは、１つ又は複数のメモリアクセス命令識別子２２５と１つ又は複数のステータスインジケータ２２６との間のマッピングを含むことができる。命令識別子２２５は、実行管理ユニット２１０が、メモリアクセスエンジン２２０に送信された複数の命令の実行ステータスを追跡できるようにする。ステータスインジケータ２２６は、命令に特有のステータスデータを含むことができる。例えば、命令が、メモリデータコピー又は移動動作を含む場合に、ステータスインジケータ２２６は、例えば、コピー又は移動されたメモリデータの量を示す数値を含むことができる。
【００２８】
[034]  幾つかの実施形態において、指示２２４ａはまた、コア識別子２２８を含むことができ、コア識別子２２８は、命令を送信するプロセッサコアを識別することができる。コンピュータシステム２００が、マルチコアプロセッサを含む場合に、各コアは、処理パイプライン及び実行管理ユニットを含むことができ、且つ実行用にメモリアクセスエンジン２２０に命令を送信することができる。かかる場合に、メモリアクセスエンジン２２０は、各コアから受信する各命令とステータス情報を関連付ける指示２２４を生成し、且つ指示２２４を各コアにブロードキャストすることができる。コアが指示２２４を受信すると、次にコアは、メモリアクセスエンジン２２０に送信した命令用のステータス情報を識別するために、コア識別子２２８を参照することができる。メモリアクセスエンジン２２０は、例えば実行管理ユニット２１０からコア識別子２２８を受信してもよい。
【００２９】
[035]  図２Ｃは、指示２２４ｂを示し、指示２２４ｂは、指示２２４の別の例とすることができる。指示２２４ｂは、ｍｅｍｃｐｙ命令の実行ステータスを提供するために用いることができる。図２Ｃに示されているように、指示２２４ｂは、コア識別子２２８と、ソース仮想アドレス２３０、宛先仮想アドレス２３２、ソース物理アドレス２３４、及び宛先物理アドレス２３６用のアドレスフィールドセットと、を含む。これらのアドレスは、特定のｍｅｍｃｐｙ命令のパラメータから導き出すことができ、且つＭＭＵ２１２によって提供することができる。
【００３０】
[036]  実例として、命令２０５ａ用に、「ｍｅｍｃｐｙ（ｄｓｔ，ｓｒｃ，１２０００）」、「ｄｓｔ」、及び「ｓｒｃ」は、仮想アドレス空間におけるメモリ位置のラベルとすることができる。仮想アドレス空間は、コンピュータプログラム２０５の実行に関連する計算プロセスへとＭＭＵ２１２によって割り当てることができる。例えば、「ｓｒｃ」は、コピーされるデータ用のメモリ位置とすることができ、且つＭＭＵ２１２によって割り当てられたソース仮想アドレス２３０と関連付けることができ、一方で「ｄｓｔ」は、データで更新されるメモリ位置とすることができ、且つＭＭＵ２１２によって割り当てられた宛先仮想アドレス２３２と関連付けることができる。更に、ソース仮想アドレス２３０及び宛先仮想アドレス２３２は、それぞれ、ＭＭＵ２１２によって提供されるページテーブルに従って、メモリシステム１０２のソース物理アドレス２３４及び宛先物理アドレス２３６へマッピングすることができる。
【００３１】
[037]  実行管理ユニット２１０からｍｅｍｃｐｙ命令２０５ａ（コンパイルされたロード及び格納命令セットを含む）を受信した後で、メモリアクセスエンジン２２０は、命令に関連する仮想及び物理アドレスを取得するために、１つ又は複数の要求をＭＭＵ２１２に送信し、且つＭＭＵ２１２によって提供された仮想及び物理アドレスを、ソース仮想アドレス２３０、宛先仮想アドレス２３２、ソース物理アドレス２３４、及び宛先物理アドレス２３６のフィールドに格納することができる。メモリアクセスエンジン２２０はまた、ｍｅｍｃｐｙ命令２０５ａのパラメータに基づいて、コピーされるべき仮想メモリ空間のページ数を決定することができる。例えば、「ｍｅｍｃｐｙ（ｄｓｔ，ｓｒｃ，１２０００）」は、１２０００バイトのデータが、コピーされるべきであることを示す。４０９６バイトのページサイズを仮定すると、メモリアクセスエンジン２２０は、合計３ページ分のデータがコピーされるべきことを決定し、残りページ２３８のフィールドの数を「３」で初期化することができる。残りページオフセット２４０は、まだコピーされていない特定のページにおけるデータの開始位置を示すことができ、且つ４０９６において初期化することができる。
【００３２】
[038]  メモリアクセスエンジン２２０がメモリシステムにおける「ｓｒｃ」メモリ位置から「ｄｓｔ」メモリ位置までデータをコピーし始めるときに、メモリアクセスエンジン２２０は、ソース仮想アドレス２３０、宛先仮想アドレス２３２、ソース物理アドレス２３４、宛先物理アドレス２３６、残りページ２３８の数、及び残りページオフセット２４０に関連する値を更新し、更新された指示２２４ｂを実行管理ユニット２１０に送信することができる。幾つかの実施形態において、メモリアクセスエンジン２２０は、データコピーを実行するために、キャッシュ装置１０４から一キャッシュラインのデータ（例えば６４バイト）（又はキャッシュミスがある場合に、ＤＲＡＭ装置１０３から同じサイズのデータ）用の読み出し及び書き込み動作を一度に実行してもよく、且つ各読み出し及び書き込み動作後に、これらの値を更新することができる。
【００３３】
[039]  実例として、メモリアクセスエンジン２２０が、仮想メモリ空間のページ内の位置からデータをコピーするために、１つの読み出し及び１つの書き込み動作を実行した後で、メモリアクセスエンジン２２０は、残りページオフセット２４０に関連する値を６４バイトだけ減少させることができる。メモリアクセスエンジン２２０はまた、ページコピーが完了されたことを残りオフセット２４０における値が示すまで、例えばソース物理アドレス２３４及び宛先物理アドレス２３６の値を同様に６４バイトだけ増加させることによって、ソース物理アドレス２３４及び宛先物理アドレス２３６を更新してもよい。次に、メモリアクセスエンジン２２０は、次のページ用の更新されたソース及び宛先物理アドレス用の要求をＭＭＵ２１２に送信することができる。幾つかの実施形態において、メモリアクセスエンジン２２０はまた、ページの処理の初めに要求を送信し、ページの各仮想ソース及び宛先アドレスにマッピングされたソース及び宛先物理アドレスを受信し、且つそれを変換索引バッファ（ＴＬＢ）に格納することができる。ＴＬＢは、仮想アドレスセットと物理アドレスセットとの間の、ＭＭＵ２１２から最近受信されたマッピングを格納するためのキャッシュとして動作することができる。次に、メモリアクセスエンジン２２０は、ページ用の読み出し／書き込み動作用の更新されたソース物理アドレス２３４及び宛先物理アドレス２３６のためにＴＬＢを参照することができる。幾つかの実施形態において、コンピュータプロセッサ２０１はまた、ＴＬＢを含んでもよい。コンピュータプロセッサ２０１は、例えば、処理パイプライン１０６で発生するＴＬＢ無効化要求及びグローバルＴＬＢシュートダウンイベントをアクセスエンジン２２０に送信することによって、コンピュータプロセッサ２０１のＴＬＢに格納された内容と、メモリアクセスエンジン２２０のＴＬＢに格納された内容との間の一致を維持することができる。
【００３４】
[040]  メモリアクセスエンジン２２０が、１ページ用のデータの全てをコピーし終えた後で（それは、残りページオフセット２４０の値がゼロになることによって反映され得る）、メモリアクセスエンジン２２０は、次のページに進むことができる。メモリアクセスエンジン２２０は、残りページ２３８の数に関連する値を１だけ減少させ、且つソース仮想アドレス２３０及び宛先仮想アドレス２３２の値を４０９６（ページのサイズ）だけ増加させることができる。ｍｅｍｃｐｙ命令の実行は、残りページ２３８の値がゼロになるときに完了する。
【００３５】
[041]  実行管理ユニット２１０はまた、指示２２４ｂからのデータ依存性の判定に基づいて、処理パイプライン１０６への後続の命令（例えば命令２０５ｃ）のフェッチングを遅延させてもよい。例えば、後続の命令が、ｍｅｍｃｐｙ命令２０５ａ用のソースメモリ位置を更新するための格納動作を含む場合に、実行管理ユニット２１０は、リードアフターライト依存性が存在すると判定してもよい。実行管理ユニット２１０は、ソースが後続の命令によって更新される前に、ｍｅｍｃｐｙ命令がソースを読み出すことを保証するために、ｍｅｍｃｐｙ命令が、ソースアドレス位置からデータをコピーしてしまうまで、後続の命令のフェッチングを遅延させてもよい。ライトアフターリード依存性の存在（又は除去）を判定するために、実行管理ユニット２１０は、指示２２４ｂに基づいて、現在の読み出し仮想アドレスが、次の例示的な式によって更新されることを決定してもよい。
現在の読み出しアドレス＝仮想アドレス＋残りページの数×４０９６＋残りページオフセット    （式１）
【００３６】
[043]  ここで、仮想アドレスは、ソース仮想アドレス２３０又は宛先仮想アドレス２３２に関連する値とすることができ、残りページの数は、残りページ２３８の数に関連する値とすることができ、残りページオフセットは、残りページオフセット２４０に関連する値とすることができる。後続の命令の格納動作によって更新される仮想書き込みアドレスが、式１に基づいて決定される現在の読み出しアドレスを超過する場合に、実行管理ユニット２１０は、後続の命令が、ｍｅｍｃｐｙ命令２０５ａによってまだ読み出されていないアドレス位置を更新することを試み、且つライトアフターリード依存性が存在すると判定してもよい。実行管理ユニット２１０は、指示２２４ａに基づいて、現在の読み出しアドレスが後続の命令の仮想の書き込みアドレスを超過すること、及びライトアフターリード依存が除去されたことを実行管理ユニット２１０が判定するまで、処理パイプライン１０６への後続の命令のフェッチングを遅延させてもよい。
【００３７】
[044]  更に、後続の命令が、ｍｅｍｃｐｙ命令２０５ａ（例えば命令２０５ｃ）によって更新されたアドレス位置からのロード動作を含む場合に、実行管理ユニット２１０は、リードアフターライト依存性が存在すると判定し、且つ後続の命令が最新のデータを読み出すことを保証するために、アドレス位置が更新されてしまうまで、後続の命令のフェッチングを遅延させてもよい。リードアフターライト依存性の存在（又は除去）を判定するために、実行管理ユニット２１０は、指示２２４ｂに基づいて、次の例示的な式に従って、現在の書き込み仮想アドレスが更新されることを決定してもよい。
現在の書き込みアドレス＝仮想アドレス＋残りページの数×４０９６＋残りページオフセット    （式２）
【００３８】
[046]  ここで、仮想アドレスは、ソース仮想アドレス２３０又は宛先仮想アドレス２３２に関連する値とすることができ、残りページの数は、残りページ２３８の数に関連する値とすることができ、残りページオフセットは、残りページオフセット２４０に関連する値とすることができる。後続の命令のロード動作の仮想読み出しアドレスが、式２に基づいて決定された現在の書き込みアドレスを超過する場合に、実行管理ユニット２１０は、後続の命令が、ｍｅｍｃｐｙ命令２０５ａによってまだ更新されていないメモリ位置を読み出すように試み、且つリードアフターライト依存性が存在すると判定してもよい。実行管理ユニット２１０はまた、指示２２４ａに基づいて、現在の書き込みアドレスが後続の命令の仮想読み出しアドレスを超過すること、及びリードアフターライト依存性が除去され得ることを実行管理ユニット２１０が判定するまで、処理パイプライン１０６への後続の命令のフェッチングを遅延させてもよい。
【００３９】
[047]  幾つかの実施形態において、ｍｅｍｃｐｙ命令２０５ａの読み出し／書き込み動作を実行する前に、メモリアクセスエンジン２２０（又は実行管理ユニット２１０）は、読み出し／書き込み動作が例外を引き起こし得るかどうかを判定してもよい。上記のように、例外は、例えば、ｍｅｍｃｐｙ命令が、存在しないメモリシステム１０２内のメモリ位置又はコンピュータプロセッサがアクセス許可を有しないメモリ位置へコンピュータプロセッサにアクセスさせる場合に、発生し得る。例外の判定は、例えば、メモリアクセスエンジン２２０が、ページのための、又は特定のｍｅｍｃｐｙ命令によって更新されているページの全てのための物理ソース及び宛先アドレス用の要求を送信する場合に行われ得る。ＭＭＵ２１２が、要求された物理アドレスの少なくとも１つを提供できない場合に、メモリアクセスエンジン２２０は、ｍｅｍｃｐｙ命令が例外を引き起こすと判定してもよい。幾つかの実施形態において、メモリアクセスエンジン２２０は、受信された物理アドレスがキャッシュ装置１０４のキャッシュラインの境界と整列するかどうかを判定してもよく、且つｍｅｍｃｐｙ命令が、不整列のアドレス空間で動作し、不整列のアドレス空間が、１つのキャッシュラインに対する読み出し／書き込み動作をメモリアクセスエンジン２２０が一度に実行するのを妨げ得ると判定してもよい。これは、例えば、コンピュータプログラム２０５が、ｍｅｍｃｐｙ動作用のキャッシュライン整列バッファを提供するために、ヒープ管理ライブラリにおけるｍａｌｌｏｃなどのバッファ割り当てルートを組み込まない場合に発生する可能性がある。
【００４０】
[048]  これらの全ての例において、メモリアクセスエンジン２２０は、例外であることを示す指示情報をコンピュータプロセッサ２０１に送信してもよく、コンピュータプロセッサ２０１は、例外を扱うために、例外ハンドラ（図２Ａには示されていない）を含んでもよい。例外情報は、命令バッファ１０８の一部として格納することができる。例えば、命令バッファ１０８の各エントリは、例外ビット（図２Ａには示されていない）と関連付けることができる。ｍｅｍｃｐｙ命令２０５ａが、（例えば物理アドレスの取得の失敗ゆえに）例外を引き起こし得るという指示をメモリアクセスエンジン２２０から受信した後で、実行管理ユニット２１０は、ｍｅｍｃｐｙ命令と関連付けられる、バッファに格納された格納及びロード命令の全てのための例外ビットをアサートしてもよい。コンピュータプロセッサ２０１は、例えば、コンピュータプログラム２０５の実行の通常のフローを変更すること、コンピュータプログラム２０５の実行を終了すること等によって例外を扱うために、例外ハンドラ（図２Ａには示されていない）を含んでもよい。
【００４１】
[049]  上記のように、本開示の実施形態はまた、多数のプロセッサコアを備えたコンピュータシステムにおいて用いることができる。ここで図２Ｄを参照すると、図２Ｄは、本開示の実施形態に基づくコンピュータシステム２５０を示す。図２Ｄに示されているように、コンピュータシステム２５０は、コンピュータプロセッサコアセット２５１−２５８を含み、これらのそれぞれは、レベル１（Ｌ１）データ及び命令キャッシュ、レベル−２（Ｌ２）キャッシュ、並びにレベル−３（Ｌ３）キャッシュを有する。これらのキャッシュの間で、Ｌ１キャッシュは、最小のサイズを有するが、最速のアクセス速度を提供し、一方でＬ３キャッシュは、最大のサイズを有するが、最低のアクセス速度を提供する。各コンピュータプロセッサコアは、コア識別子と関連付けられる。各コンピュータプロセッサコアはまた、図２Ａの処理パイプライン１０６、実行管理ユニット２１０、及びメモリ管理ユニット２１２を含む（それらは、図２Ｄには示されていない）。コンピュータプロセッサコアのそれぞれは、計算プロセスを実行してもよい。複数のコンピュータプロセッサコアはまた、計算プロセスの完了を速めるために、同じ計算プロセスに関連する相異なる命令を同時に実行してもよい。
【００４２】
[050]  コンピュータシステム２５０は、図２Ａのメモリアクセスエンジン２２０を更に含み、メモリアクセスエンジン２２０は、コンピュータプロセッサコアに代わってメモリアクセス動作（Ｌ３キャッシュへのアクセスを含む）を実行することができる。メモリアクセスエンジン２２０は、コンピュータシステム２５０のコンピュータプロセッサコアから分離されたホップとして存在してもよい。メモリアクセスエンジン２２０は、例えばチャネル２６０を介してコンピュータプロセッサコア２５１〜２５８のそれぞれと通信してもよく、チャネル２６０を用いてメモリアクセスエンジン２２０は、図２Ｃの指示２２４ｂをブロードキャストすることができる。上記のように、指示２２４ｂは、メモリアクセス命令の実行ステータス情報をコア識別子２２８と関連付ける。コンピュータプロセッサコア２５１−２５８のそれぞれは、チャネル２６０から指示を拾い上げ、且つ適合するコア識別子に関連するステータス情報に基づいて、命令のフェッチングを決定することができる。
【００４３】
[051]  更に、メモリアクセスエンジン２２０はまた、仮想アドレスと物理アドレスとの間の最近受信されたマッピングを格納するために用いることができる装置側ＴＬＢ２７０を格納する。装置側ＴＬＢ２７０はまた、ＭＭＵシステム全体と一致するように維持されるために更新することができる。例えば、コンピュータプロセッサコア２５１〜２５８のそれぞれにおけるＭＭＵは、仮想アドレスと物理アドレスとの間のマッピングを格納する１つ又は複数のページテーブルを維持してもよい。それらのページテーブルは、（例えばオペレーティングシステムによって、又は他のエージェントによって）更新されてもよい。その場合に、ＭＭＵは、チャネル２６０を通じて更新を循環させてもよい。装置側ＴＬＢ２７０はまた、チャネル２６０を通じて更新を拾い上げ、且つそれに応じて、格納されたマッピングを更新することができる。
【００４４】
[052]  ここで図２Ｅを参照すると、図２Ｅは、図２Ａのコンピュータシステム２００によるコンピュータプログラムの実行用のタイミング図を示す。図２Ｅに示されているように、命令バッファ１０８は、命令２８０ａ（ｍｅｍｃｐｙ命令）、命令２８０ｂ及び２８０ｃ（命令２８０ａに対するデータ依存性を有しない算術命令）、並びに命令２８０ｄ（命令２８０ａに対するデータ依存性を有する）を格納する。実行管理ユニット２１０が、命令２８０ａを受信した後で、それは、ｍｅｍｃｐｙ命令によってアクセスされた仮想メモリ空間の全てのページの例外確認を実行する。同時に、実行管理ユニット２１０はまた、後続の命令２８０ｂ、２８０ｃ及び２８０ｄが、命令２８０ａに対するデータ依存性を有するかどうかを判定する。命令２８０ｂ及び２８０ｃが、データ依存性を有しないと判定した後で、実行管理ユニット２１０は、時間ｔ０において実行用に処理パイプライン１０６に命令２８０ｂをフェッチし、時間ｔ１において命令２８０ｃが後に続く。これらの命令がフェッチされた後で、それらの命令は、命令バッファ１０８から除去される。他方で、実行管理ユニット２１０はまた、命令２８０ｄが、ｍｅｍｃｐｙ命令に対するデータ依存性を有すると判定し、且つ処理パイプライン１０６への命令のフェッチングを保留する。
【００４５】
[053]  ｍｅｍｃｐｙ用の例外確認が完了した後で、メモリアクセスエンジン２２０は、読み出し及び書き込み動作を実行し、且つｍｅｍｃｐｙ命令の実行ステータスを提供するために、実行管理ユニット２１０に指示２２４を送信し始める。時間ｔ２に、指示２２４に基づいて、実行管理ユニット２１０は、命令２８０ｄによってアクセスされるメモリ位置が、ｍｅｍｃｐｙ命令によって更新されおり、且つデータ依存性が除去されたと判定する。従って、実行管理ユニット２１０は、実行用に処理パイプライン１０６に命令２８０ｄをフェッチし、且つバッファから命令２８０ｄを除去する。これは、他の後続の命令が、命令バッファ１０８に格納され、且つフェッチされるのを待つことができるようにする。
【００４６】
[054]  ここで図３を参照すると、図３は、メモリシステムにアクセスする例示的な方法３００を示す。方法は、コンピュータプロセッサ２０１及びメモリアクセスエンジン２２０を含むコンピュータシステム（例えばコンピュータシステム２００）によって実行することができる。幾つかの実施形態において、方法はまた、例えばそれがメモリアクセスエンジン２２０を含む場合に、コンピュータプロセッサ２０１だけによって実行することができる。
【００４７】
[055]  最初の開始後に、方法３００は、ステップＳ３０１に進み、そこでコンピュータプロセッサ２０１は、実行用にメモリアクセスエンジン２２０にメモリアクセス命令（例えばｍｅｍｃｐｙ命令）を送信する。メモリアクセス命令は、計算プロセスの一部として実行されてもよく、且つ仮想アドレスセットに関連するロード及び格納命令セットを含んでもよい。送信は、例えば、メモリアクセス命令がメモリ１０２への多数のロード及び格納動作を含むという判定に基づくことができる。コンピュータプロセッサ２０１からメモリアクセス命令を受信した後で、メモリアクセスエンジン２２０は、ステップＳ３０２において、メモリアクセス命令の仮想アドレスにマッピングされた物理アドレス用の要求を送信することができる。コンピュータプロセッサ２０１のメモリ管理ユニット２１２は、ステップＳ３０３において、要求された物理アドレスの少なくとも幾つかをメモリアクセスエンジン２２０に送信してもよい。
【００４８】
[056]  メモリアクセスエンジン２２０は、ステップＳ３０４において、例外が検出されるかどうかを判定してもよい。例えば、コンピュータプロセッサ２０１が物理アドレスを提供できない場合に、例外が検出され得る。ステップＳ３０４において例外が検出される場合に、メモリアクセスエンジン２２０は、ステップＳ３０５において、メモリアクセス命令が例外を引き起こし得ることをコンピュータプロセッサ２０１の実行管理ユニット２１０に伝えてもよく、それは、コンピュータプロセッサ２０１が、ステップＳ３０６において例外を扱うことができるようにする。
【００４９】
[057]  他方で、ステップＳ３０４において例外が検出されない場合に、メモリアクセスエンジン２２０は、ステップＳ３０７において、メモリアクセス命令用のメモリアクセスタスクを実行することができる。上記のように、メモリアクセスエンジン２２０は、メモリシステム１０２において、一キャッシュラインのデータを一度にロード又は格納してもよい。１つ又は複数のメモリアクセスタスクを実行した後で、メモリアクセスエンジン２２０は、ステップＳ３０８において、メモリアクセス命令の実行ステータスに関する指示を実行管理ユニット２１０に送信してもよい。指示は、例えば、メモリアクセスエンジン２２０によってアクセスされている物理的及び仮想アドレスセットや、どれくらい多くのデータがまだ修正されていない等を含んでもよい。幾つかの実施形態において、指示は、図２Ｃの残りページ２３８の数を含む、指示２２４ｂに含まれる情報を含んでもよい。メモリアクセスエンジン２２０はまた、ステップＳ３０９において、メモリアクセスタスクの全てが完了されたかどうかを判定してもよい。判定は、例えば、残りページの数がゼロであるかどうかに基づくことができる。メモリアクセスエンジン２２０が、ステップＳ３０９において、残りのタスクがあると判定した場合に、メモリアクセスエンジン２２０は、（ステップＳ３０７において）実行を継続してもよい。
【００５０】
[058]  更に、実行管理ユニット２１０が、メモリアクセスエンジン２２０からステータス情報を受信した後で、実行管理ユニット２１０は、メモリアクセス命令の実行が例外を引き起こさないと判定してもよい。次に、ステップＳ３１０において、同じ計算プロセスの後続の命令を処理するために、命令バッファ１０８からメモリアクセス命令を除去してもよい。実行用に命令バッファ１０８から処理パイプライン１０６に後続の命令をフェッチする前に、実行管理ユニット２１０は、ステップＳ３１１において、後続の命令が、メモリアクセス命令に対するデータ依存性（例えばリードアフターライト、ライトアフターリード等）を有するかどうかを判定してもよい。判定は、例えば、後続の命令に関連するソース又は宛先仮想アドレスと、ステップＳ３０８において受信されたステータス情報に基づいて決定された現在のソース／宛先仮想アドレスと、上記の式１及び２と、に基づくことができる。ステップＳ３１１においてデータ依存性が検出されない場合に、コンピュータプロセッサ２０１の命令バッファ１０８は、ステップＳ３１２において、後続の命令を処理パイプライン２０６にフェッチしてもよい。データ依存性が検出される場合に、命令バッファ１０８は、ステップＳ３０８において受信された、更新されたステータス情報に基づいて、データ依存性が除去されたと命令バッファ１０８が判定するまで、フェッチングを遅延させてもよい。
【００５１】
[059]  本発明が、上記で説明され、且つ添付の図面に示された構成に正確に限定されるわけではなく、様々な修正及び変更が、本発明の範囲から逸脱せずに行われ得ることが認識されよう。本発明の範囲が、添付の特許請求の範囲によってのみ限定されるべきことが意図されている。
【図１Ａ】
2020507848.tif 000003
【図１Ｂ】
2020507848.tif 000004
【図２Ａ】
2020507848.tif 000005
【図２Ｂ】
2020507848.tif 000006
【図２Ｃ】
2020507848.tif 000007
【図２Ｄ】
2020507848.tif 000008
【図２Ｅ】
2020507848.tif 000009
【図３】
2020507848.tif 000010
【国際調査報告】
2020507848.tif 000011