(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-01-15
(54)【発明の名称】固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行
(51)【国際特許分類】
G06F 9/34 20180101AFI20240105BHJP
G06F 12/00 20060101ALI20240105BHJP
G06F 12/0808 20160101ALI20240105BHJP
G06F 12/0815 20160101ALI20240105BHJP
【FI】
G06F9/34 350A
G06F12/00 560F
G06F12/0808
G06F12/0815
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023536455
(86)(22)【出願日】2021-12-14
(85)【翻訳文提出日】2023-07-24
(86)【国際出願番号】 US2021063345
(87)【国際公開番号】W WO2022132795
(87)【国際公開日】2022-06-23
(32)【優先日】2020-12-16
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ジョン カラマティアノス
(72)【発明者】
【氏名】マイケル ティー. クラーク
(72)【発明者】
【氏名】マリウス エバーズ
(72)【発明者】
【氏名】ウィリアム エル. ウォーカー
(72)【発明者】
【氏名】ポール モイヤー
(72)【発明者】
【氏名】ジェイ フライシュマン
(72)【発明者】
【氏名】ジャガディッシュ ビー. コトゥラ
【テーマコード(参考)】
5B033
5B160
5B205
【Fターム(参考)】
5B033AA10
5B033AA14
5B033DB10
5B160MM20
5B205KK14
5B205PP03
5B205PP22
5B205UU31
(57)【要約】
固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行が開示される。ターゲットデバイスによるリモート実行のために指定された命令は、プロセッサによって受信される。それぞれの命令は、オペランドとして、ターゲットデバイス内のターゲットレジスタを含む。ターゲットレジスタは、アーキテクチャ化仮想レジスタであり得る。プロセッサは、複数の命令のそれぞれについて、命令が受信された順序でオフロード要求を送信する。オフロード要求は、リモート実行のために指定された命令を含む。ターゲットデバイスは、例えば、プロセッシングインメモリデバイス、又は、メモリに結合されたアクセラレータであり得る。
【選択図】
図1
【特許請求の範囲】
【請求項1】
固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の方法であって、
ターゲットデバイスによるリモート実行のために指定された1つ以上の命令を受信することと、
前記1つ以上の命令のそれぞれについてオフロード要求を送信することであって、前記オフロード要求は、リモート実行のために指定された命令を含む、ことと、を含む、
方法。
【請求項2】
前記1つ以上の命令のそれぞれは、オペランドとして、前記ターゲットデバイス内のターゲットレジスタを含み、プロセッサは、前記ターゲットレジスタを仮想レジスタとして識別する命令セットアーキテクチャ拡張を実行する、
請求項1の方法。
【請求項3】
前記1つ以上の命令のそれぞれは、プロセッサによって実行される命令セットアーキテクチャ拡張内のオペコードのグループからのオペコードを含み、前記命令セットアーキテクチャ拡張内のオペコードのグループは、リモートロードオペコード、リモート計算オペコード及びリモートストアオペコードから構成されている、
請求項1の方法。
【請求項4】
前記1つ以上の命令のそれぞれについてオフロード要求を送信することであって、前記オフロード要求は、リモート実行のために指定された命令を含む、ことは、
リモート実行のために指定された命令のメモリアドレスを生成することと、
前記メモリアドレスを前記オフロード要求と結合することと、を含む、
請求項1の方法。
【請求項5】
前記1つ以上の命令のそれぞれについてオフロード要求を送信することであって、前記オフロード要求は、リモート実行のために指定された命令を含む、ことは、
リモート実行のために指定された命令のローカルデータを取得することと、
前記ローカルデータを前記オフロード要求と結合することと、を含む、
請求項1の方法。
【請求項6】
前記1つ以上の命令のそれぞれについてオフロード要求を送信することであって、前記オフロード要求は、リモート実行のために指定された命令を含む、ことは、
前記1つ以上の命令の中の最も古い命令がリタイアした後まで、前記オフロード要求をバッファリングすることと、
前記1つ以上の命令のそれぞれについて、受信された順序でオフロード要求を送信することと、を含む、
請求項1の方法。
【請求項7】
前記オフロード要求に含まれるメモリアドレスに対応するエントリを含む1つ以上のキャッシュに対してキャッシュ動作を実行することを更に含み、
前記キャッシュ動作は、クリーンデータを含むキャッシュエントリを無効化すること、及び、ダーティデータを含むキャッシュエントリをフラッシュすること、のうち少なくとも1つを含む、
請求項1の方法。
【請求項8】
前記キャッシュ動作は、前記オフロード要求に含まれるメモリアドレスに対応するエントリを含む複数のキャッシュ上で実行され、
前記複数のキャッシュは、複数のプロセッサコアをそれぞれ含む複数のコアクラスタにわたって分散されている、
請求項7の方法。
【請求項9】
前記ターゲットデバイスは、プロセッシングインメモリデバイスである、
請求項1の方法。
【請求項10】
前記ターゲットデバイスは、メモリデバイスに結合されたアクセラレータである、
請求項1の方法。
【請求項11】
マルチコアプロセッサであって、
ターゲットデバイスによるリモート実行のために指定された1つ以上の命令を受信することと、
前記1つ以上の命令のそれぞれについてオフロード要求を送信することであって、前記オフロード要求は、リモート実行のために指定された命令を含む、ことと、
を行うように構成されている、
マルチコアプロセッサ。
【請求項12】
前記1つ以上の命令のそれぞれは、オペランドとして、前記ターゲットデバイス内のターゲットレジスタを含み、前記マルチコアプロセッサは、前記ターゲットレジスタを仮想レジスタとして識別する命令セットアーキテクチャ拡張を実行する、
請求項11のマルチコアプロセッサ。
【請求項13】
前記1つ以上の命令のそれぞれは、前記マルチコアプロセッサによって実行される命令セットアーキテクチャ拡張内のオペコードのグループからのオペコードを含み、前記命令セットアーキテクチャ拡張内のオペコードのグループは、リモートロードオペコード、リモート計算オペコード及びリモートストアオペコードから構成されている、
請求項11のマルチコアプロセッサ。
【請求項14】
前記1つ以上の命令のそれぞれについてオフロード要求を送信することであって、前記オフロード要求は、リモート実行のために指定された命令を含む、ことは、
前記1つ以上の命令の中の最も古い命令がリタイアした後まで、前記オフロード要求をバッファリングすることと、
前記1つ以上の命令のそれぞれについて、受信された順序でオフロード要求を送信することと、を含む、
請求項11のマルチコアプロセッサ。
【請求項15】
前記オフロード要求に含まれるメモリアドレスに対応するエントリを含む1つ以上のキャッシュに対してキャッシュ動作を実行することを更に含み、
前記キャッシュ動作は、クリーンデータを含むキャッシュエントリを無効化すること、及び、ダーティデータを含むキャッシュエントリをフラッシュすること、のうち少なくとも1つを含む、
請求項11のマルチコアプロセッサ。
【請求項16】
システムであって、
プロセッシングインメモリ(PIM)デバイスと、
前記PIMデバイスに結合されたマルチコアプロセッサと、を備え、
前記マルチコアプロセッサは、
前記PIMデバイスによるリモート実行のために指定された1つ以上の命令を受信することと、
前記1つ以上の命令のそれぞれについてオフロード要求を送信することであって、前記オフロード要求は、リモート実行のために指定された命令を含む、ことと、
を行うように構成されている、
システム。
【請求項17】
前記1つ以上の命令のそれぞれは、オペランドとして、前記PIMデバイス内のターゲットレジスタを含み、前記マルチコアプロセッサは、前記ターゲットレジスタを仮想レジスタとして識別する命令セットアーキテクチャ拡張を実行する、
請求項16のシステム。
【請求項18】
前記1つ以上の命令のそれぞれは、前記マルチコアプロセッサによって実行される命令セットアーキテクチャ拡張内のオペコードのグループからのオペコードを含み、前記命令セットアーキテクチャ拡張内の前記オペコードのグループは、リモートロードオペコード、リモート計算オペコード及びリモートストアオペコードから構成されている、
請求項16のシステム。
【請求項19】
前記1つ以上の命令のそれぞれについてオフロード要求を送信することであって、前記オフロード要求は、リモート実行のために指定された命令を含む、ことは、
前記1つ以上の命令の中の最も古い命令がリタイアした後まで、前記オフロード要求をバッファリングすることと、
前記1つ以上の命令のそれぞれについて、受信された順序でオフロード要求を送信することと、を含む、
請求項16のシステム。
【請求項20】
前記オフロード要求に含まれるメモリアドレスに対応するエントリを含む1つ以上のキャッシュに対してキャッシュ動作を実行することを更に含み、
前記キャッシュ動作は、クリーンデータを含むキャッシュエントリを無効化すること、及び、ダーティデータを含むキャッシュエントリをフラッシュすること、のうち少なくとも1つを含む、
請求項16のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
コンピューティングシステムは、多くの場合、命令を取り出して実行し、実行された命令の結果を適切な場所に記憶することができるいくつかの処理リソース(例えば、1つ以上のプロセッサ)を含む。処理リソース(例えば、中央演算処理装置(central processing unit、CPU))は、データ(例えば、1つ以上のオペランド)に対して論理演算を実行することによって命令を実行するために使用され得る、例えば、算術論理演算装置(arithmetic logic unit、ALU)回路、浮動小数点演算装置(floating point unit、FPU)回路、及び/又は組み合わせ論理ブロック等のいくつかの機能ユニットを備え得る。例えば、機能ユニット回路は、いくつかの論理演算を介してオペランドに対して加算、減算、乗算及び/又は除算等の算術演算を実行するために使用され得る。典型的には、処理リソース(例えば、プロセッサ及び/又は関連付けられた機能ユニット回路)は、メモリアレイの外部にあってもよく、データは、命令セットを実行するために、処理リソースとメモリアレイとの間のバスを介してアクセスされる。メモリアレイ内のデータをフェッチ又は記憶するためのアクセスの量を低減するために、コンピューティングシステムは、処理リソース又は処理リソースのグループによる使用のために最近アクセス又は変更されたデータを一時的に記憶するキャッシュ階層を採用する場合がある。しかしながら、処理性能は、特定の動作をプロセッサインメモリ(processor-in-memory、PIM)デバイスにオフロードすることによって更に改善され、PIMデバイスでは、データを処理リソースに近づけるのではなく、データを記憶するメモリ場所のより近くでデータ処理が実行されるように、処理リソースがメモリの内部及び/又は近くに実装され得る。PIMデバイスは、外部通信を低減及び/又は排除することによって時間を節約することができ、電力を節約することもできる。
【0002】
ある種のアプリケーションは、一時的なデータの再利用が少ない又はまったくないフェーズを有し、このフェーズの間、頻繁にキャッシュ階層でミスが起こり、メモリからデータがフェッチされる。加えて、これらのフェーズは、低い計算強度(フロップ/バイトの比)を示し得る。これらのフェーズの間、データの移動が多く、フェーズはメモリバウンドであるため、エネルギー効率及び性能が低下する。したがって、これらのフェーズは、PIMデバイス又はアクセラレータにオフロードするのに特に適している。例えば、プログラマは、特定のコードシーケンスがオフロードされるべきであるという指標をアプリケーションソースコード内に提供することができ、又は、コンパイラがそのような決定を行うこともできる。オフロードされた命令の解釈及びオーケストレーションは、依然として、アプリケーションをホストする処理リソース(単数又は複数)によって実行されなければならない。
【図面の簡単な説明】
【0003】
【
図1】本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行のための例示的なシステムのブロック図である。
【
図2】本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行のための別の例示的なシステムのブロック図である。
【
図3】本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の例示的な方法を示すフロー図である。
【
図4】本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の別の例示的な方法を示すフロー図である。
【
図5】本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の別の例示的な方法を示すフロー図である。
【
図6】本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の別の例示的な方法を示すフロー図である。
【
図7】本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の別の例示的な方法を示すフロー図である。
【発明を実施するための形態】
【0004】
プロセッシングインメモリ(Processing-in-Memory、PIM)アーキテクチャは、プロセッサとメモリとの間のデータリンク上の帯域幅が節約され、プロセッサの電力消費が低減され得るように、命令をメモリ内又はメモリの近くで実行するためにオフロードすることをサポートする。例えば、PIMデバイスによるオフロードされた命令の実行は、データをローカルCPUレジスタにロードすること、及び、データをローカルCPUストレージからメモリに書き戻すことを必要としない。
【0005】
PIMアーキテクチャのいくつかの例は、インオーダー、アウトオブオーダーのCPUコア、プログラマブルアドレス生成エンジン、GPU、カスタムアクセラレータ等の形態で利用可能なプログラマブルハードウェアを考慮し、PIMハードウェアは、3Dスタックメモリの論理層又は2D接続ダブルデータレート(2D-attached double data rate、DDRx)メモリのデュアルインラインメモリモジュール(dual in-line memory module、DIMM)の内部の何れかに配置される。アプリケーションのメモリバウンドフェーズをそれらのコアに起動することは、スレッディングモデルの変更、メインコアからPIMハードウェアにマシン状態を伝送するためのハードウェアサポート、及び、その逆を必要とする。これは、メインスレッドからPIMスレッドへの遷移及びその逆の遷移を複雑にし、遅延させる。
【0006】
PIMアーキテクチャのいくつかの例は、(従属ロードのアドレスを生成することによって)グラフトラバーサル等の特定のコードイディオムを高速化するための専用エンジンを使用する。また、これらのエンジンは、(複数のスレッドにわたるグラフトラバーサルをサポートするために)マルチスレッド化され、インオーダー型である必要がある。カーネルをそれらのエンジンにオフロードすることは、それらがスカラー命令実行もサポートすることを必要とし、それらの複雑さを増加させる。これらの例では、そのようなPIMソリューションは、物理アドレス空間のキャッシュ可能な部分からキャッシュ不可能な部分にデータ構造全体をコピーすることによって、非コヒーレントPIMデータにアクセスすることを想定する。
【0007】
PIM命令がCPUコアによってディスパッチされる一例では、PIM命令は、キャッシュ局所性に基づいて選択的にオフロードされる。より具体的には、これらのPIM命令は、PIM命令によってアクセスされたデータがキャッシュ階層内で見つかった場合、(専用実行ユニットを使用して)CPU側で実行される。したがって、この手法は、データ局所性が低いシナリオにおいてのみ、命令をPIMデバイスにオフロードする。しかしながら、これは、従来のCPUパイプラインと並行してCPUコア内でPIM命令を実行するための専用ハードウェアを想定する。加えて、この手法は、PIM上及びコア内の両方で実行され得る命令(CPUコアデコーダ修正)の新しいセット全体でISAを拡張することを必要とする(これらの命令は、オフロードされる場合も、されない場合もあるため)。更に、この手法は、例えば、PIM管理ハードウェア構造内に常駐するPIMディレクトリを介して、CPUコアにわたるPIM命令の同期を必要とする。更に、この手法では、全てのPIM命令が原子的(アトミック)に実行されなければならない。これらのPIM命令間の原子性(アトミック性)の強制は、CPUコアとPIMデバイスとの間の往復通信を必要とするため、遅延をもたらす。
【0008】
本開示による実施形態は、CPUコア、キャッシュ及び機能論理ブロックでのハードウェア及び命令セットアーキテクチャのサポートを提供し、固定機能能力を有するPIMデバイス又はアクセラレータへの計算のオフロードを可能にする。ハードウェアサポートは、元のアプリケーションのスレッディングモデルに対する変更を必要とせず、アプリケーションが、ソフトウェアキャッシュ管理を必要とすることなくキャッシュ可能なデータに対して固定機能の計算を実行することを可能にする。本開示による実施形態は、キャッシュ可能なコヒーレントデータを想定して、任意の追加スレッドを起動することなく、命令がターゲットデバイスにオフロードされることを可能にすることによって、命令をオフロードすることの複雑さ及びオーバーヘッドを低減する。
【0009】
本開示による一実施形態は、ターゲットデバイスによるリモート実行のために指定された命令セットを受信することを含む、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の方法を対象とする。命令セット内のそれぞれの命令は、オペランドとして、ターゲットデバイス内のターゲットレジスタを含む。また、本方法は、命令セット内のそれぞれの命令について、受信された順序でオフロード要求を送信することを含む。オフロード要求は、リモート実行のために指定された命令を含む。いくつかの例では、オフロードターゲットデバイスは、プロセッシングインメモリデバイスである。他の例では、オフロードターゲットデバイスは、メモリデバイスに結合されたアクセラレータである。
【0010】
いくつかの実施形態では、プロセッサは、ターゲットレジスタを仮想レジスタとして識別する命令セットアーキテクチャ拡張を実行する。いくつかの例では、複数の命令のそれぞれは、プロセッサによって実行される命令セットアーキテクチャ拡張におけるオペコードのグループからのオペコードを含む。これらの例では、命令セットアーキテクチャ拡張内のオペコードのグループは、リモートロードオペコード、リモート計算オペコード及びリモートストアオペコードからなり得る。
【0011】
いくつかの実施形態では、命令セット内のそれぞれの命令について、受信された順序でオフロード要求を送信することは、リモート実行のために指定された命令のメモリアドレスを生成することと、メモリアドレスをオフロード要求と結合することと、を含む。
【0012】
いくつかの実施形態では、命令セット内のそれぞれの命令について、受信された順序でオフロード要求を送信することは、リモート実行のために指定された命令のローカルデータを取得することと、ローカルデータをオフロード要求と結合することと、を含む。
【0013】
いくつかの実施形態では、命令セット内のそれぞれの命令について、受信された順序でオフロード要求を送信することは、命令セットの中の最も古い命令がリタイアした後まで、オフロード要求をバッファリングすることを含む。
【0014】
いくつかの実施形態では、方法は、オフロード要求に含まれるメモリアドレスに対応するエントリを含む1つ以上のキャッシュに対してキャッシュ動作を実行することを含む。キャッシュ動作は、クリーンデータを含むキャッシュエントリを無効化すること、又は、ダーティデータを含むキャッシュエントリをフラッシュすることを含み得る。キャッシュ動作は、オフロード要求に含まれるメモリアドレスに対応するエントリを含む複数のキャッシュ上で実行され得る。キャッシュは、それぞれが複数のプロセッサコアを含む複数のコアクラスタにわたって分散され得る。
【0015】
本開示による一実施形態は、マルチコアプロセッサを対象とする。プロセッサは、ターゲットデバイスによるリモート実行のために指定された命令セットを受信するように構成されている。命令セット内のそれぞれの命令は、オペランドとして、ターゲットデバイス内のターゲットレジスタを含む。また、プロセッサは、命令セット内のそれぞれの命令について、受信された順序でオフロード要求を送信するように構成されている。オフロード要求は、リモート実行のために指定された命令を含む。
【0016】
いくつかの実施形態では、プロセッサは、ターゲットレジスタを仮想レジスタとして識別する命令セットアーキテクチャ拡張を実行する。いくつかの例では、複数の命令のそれぞれは、プロセッサによって実行される命令セットアーキテクチャ拡張におけるオペコードのグループからのオペコードを含む。これらの例では、命令セットアーキテクチャ拡張内のオペコードのグループは、リモートロードオペコード、リモート計算オペコード及びリモートストアオペコードからなり得る。
【0017】
いくつかの実施形態では、プロセッサは、命令セットの中の最も古い命令がリタイアした後まで、オフロード要求をバッファリングするように構成されている。
【0018】
いくつかの実施形態では、プロセッサは、オフロード要求に含まれるメモリアドレスに対応するエントリを含む1つ以上のキャッシュに対してキャッシュ動作を実行するように構成されている。キャッシュ動作は、クリーンデータを含むキャッシュエントリを無効化すること、又は、ダーティデータを含むキャッシュエントリをフラッシュすることを含み得る。キャッシュ動作は、オフロード要求に含まれるメモリアドレスに対応するエントリを含む複数のキャッシュ上で実行され得る。キャッシュは、それぞれが複数のプロセッサコアを含む複数のコアクラスタにわたって分散され得る。
【0019】
本開示による一実施形態は、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行のためのシステムを対象とする。システムは、プロセッシングインメモリ(PIM)デバイスと、PIMデバイスによるリモート実行のために指定された命令セットを受信するように構成されたマルチコアプロセッサと、を含む。命令セット内のそれぞれの命令は、オペランドとして、PIMデバイス内のターゲットレジスタを含む。また、プロセッサは、命令セット内のそれぞれの命令について、受信された順序でオフロード要求を送信するように構成されている。オフロード要求は、リモート実行のために指定された命令を含む。
【0020】
いくつかの実施形態では、プロセッサは、ターゲットレジスタを仮想レジスタとして識別する命令セットアーキテクチャ拡張を実行する。いくつかの例では、複数の命令のそれぞれは、プロセッサによって実行される命令セットアーキテクチャ拡張におけるオペコードのグループからのオペコードを含む。これらの例では、命令セットアーキテクチャ拡張内のオペコードのグループは、リモートロードオペコード、リモート計算オペコード及びリモートストアオペコードからなり得る。
【0021】
いくつかの実施形態では、プロセッサは、命令セットの中の最も古い命令がリタイアした後まで、オフロード要求をバッファリングするように構成されている。
【0022】
いくつかの実施形態では、プロセッサは、オフロード要求に含まれるメモリアドレスに対応するエントリを含む1つ以上のキャッシュに対してキャッシュ動作を実行するように構成されている。キャッシュ動作は、クリーンデータを含むキャッシュエントリを無効化すること、又は、ダーティデータを含むキャッシュエントリをフラッシュすることを含み得る。キャッシュ動作は、オフロード要求に含まれるメモリアドレスに対応するエントリを含む複数のキャッシュ上で実行され得る。キャッシュは、それぞれが複数のプロセッサコアを含む複数のコアクラスタにわたって分散され得る。
【0023】
図1は、本開示の様々な実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行のための例示的なシステム100を示すブロック図である。
図1の例では、システム100は、コアのクラスタ(例えば、ラストレベルキャッシュ又はインターフェースを共有する2つ以上のコア)を含む複数のコア複合体102、104を含むマルチコアプロセッサ101を含む。例えば、プロセッサ101は、システムオンチップ(system-on-chip、SoC)アーキテクチャに実装され得る。
図1に示す例では、それぞれのコア複合体102、104は、二次(L2)キャッシュ114、116、118、120にそれぞれ結合された複数のプロセッサコア106、108、110、112(例えば、中央処理演算装置(CPU)コア、グラフィカル処理装置(GPU)コア等)を含む。更に、プロセッサコア106、108、110、112のそれぞれは、対応の一次(L1)キャッシュ122、124、126、128を含む。プロセッサコア106、108、110、112のそれぞれは、命令フェッチ、デコード及びディスパッチパイプライン、プリフェッチ入力キュー、スケジューラ、ロード/ストアキュー、ルックアサイドバッファ、リオーダバッファ及びリタイアキュー等のプロセッサパイプライン(図示せず)の様々な構成要素、並びに、様々な算術演算論理装置(ALU)及びレジスタファイルを含む。
【0024】
図1に示される例示的なシステム100の構成は、説明の目的で提示される。読者は、4つのプロセッサコア106、108、110、112が
図1に示されているが、プロセッサ101は、示されているよりも多い又は少ないプロセッサコア、及び、多い又は少ないコア複合体、並びに、多い又は少ないキャッシュを含み得ることを理解するであろう。
【0025】
図1に示される例では、それぞれのコア複合体102、104は、特定のコア複合体のL2キャッシュの全てを接続する相互接続キャッシュ又はラストレベルキャッシュ(LLC)として機能する三次(L3)キャッシュ130、132を含む。いくつかの例では、プロセッサ101は、複数のプロセッサコア106、108、110、112を使用してマルチスレッドアプリケーションを実行するように構成されている。これらの例では、1つのコア複合体102内のキャッシュ内のデータの変更は、別のコア複合体104内にキャッシュされたデータの有効性に影響を及ぼし得る。キャッシュコヒーレンシを強制するために、プロセッサ101は、コア複合体102、104のそれぞれのL3キャッシュ130、132に結合されたコヒーレンシシンクロナイザ136を含んでもよい。これらの例では、コヒーレンシシンクロナイザ136は、例えば、プロセッサ101内に存在する任意のL1キャッシュ、L2キャッシュ又はL3キャッシュのキャッシュエントリに含まれるデータを無効化又はフラッシュするためにキャッシュプローブを送信することによって、キャッシュ動作を開始する。
【0026】
それぞれのL1、L2及びL3キャッシュは、プロセッサ要求に応じて、要求された動作に関連付けられたデータがキャッシュのキャッシュエントリ内に存在するか否かを決定するキャッシュ論理を含む。データが存在する場合(キャッシュヒット)、キャッシュエントリ内に存在するデータを使用してプロセッサ要求が遂行される。データが存在しない場合(キャッシュミス)、要求は、キャッシュミスがLLC内で検出されるまで、次レベルキャッシュに転送される。LLCにおけるキャッシュミスに応じて、キャッシュは、メインメモリ(例えば、メモリデバイス138)に記憶されたデータを使用して要求を遂行するために、プロセッサ101のメモリコントローラ134に転送される。一例では、プロセッサ要求は、メモリデバイス138内のメモリ場所に向けられた読取り/書込み要求等の入力/出力(I/O)動作である。
【0027】
プロセッサコア106、108、110、112のそれぞれは、プロセッサ101上で実行するアプリケーションからコンパイラシステム(例えば、GNUコンパイラコレクション(GNU Compiler Collection、GCC))によって生成された機械語コードを実行する。例えば、アプリケーションは、シングルスレッドアプリケーション又はマルチスレッドアプリケーションであってもよい。プロセッサコアは、機械語コードを生成するためにコンパイラシステムによって利用される命令セットアーキテクチャ(instruction set architecture、ISA)を実行する。一例では、プロセッサ101のためのISAは、AVX-256等の高度なベクトル拡張のサポートを有するx86-64命令セットである。
【0028】
本開示の様々な実施形態によれば、プロセッサ101は、オフロードターゲットデバイスに動作をオフロードするための3つのオペコード、及び、オフロードターゲットデバイスのためのアーキテクチャ化レジスタファイルを有する拡張ISAを実行する。例えば、オフロードターゲットデバイスは、以下でより詳細に説明するように、プロセッシングインメモリ(PIM)デバイス又はアクセラレータ等のように、固定機能を実行するリモート構成要素であり得る。拡張ISAでは、remote_load命令オペコードは、メインメモリからオフロードターゲットデバイスのローカルレジスタにメモリオペランドのデータをロードし、remote_store命令オペコードは、オフロードターゲットデバイスのローカルレジスタからメインメモリのメモリオペランドにデータを書き込む。拡張ISA内のremote_op命令オペコードは、ターゲットデバイスの固定機能アーキテクチャによってサポートされる任意の算術演算又は論理演算を表し得る。何れの動作も制御フローを変更せず、したがって、オフロードされた命令は順次実行される。オフロードremote_op命令ソースオペランドは、(a)メモリアドレス(ベースラインISAと同じ方法で指定される)、(b)アーキテクチャレジスタ(CPUコア標準ISAからの)、又は、(c)オフロードターゲットデバイス内に実装されたオフロードターゲットレジスタとすることができる。いくつかの実施形態において、オフロード命令デスティネーションオペランドは、オフロードターゲットレジスタのみであり得る。オフロードターゲットレジスタは、オフロードターゲット固定機能論理に対してローカルなレジスタを表し、コンパイラによって割り振られる、拡張ISA内のアーキテクチャ化レジスタである。オフロードターゲットレジスタは、プロセッサコア内に物理ストレージを有さないという点で仮想であり、オフロード命令間のデータ依存性をサポートし、オフロード要求が固定機能モジュール146に送信される場合にメモリコントローラ134におけるオフロードターゲットレジスタの使用を追跡するために使用される。
【0029】
いくつかの実施形態では、remote_load命令は、オフロードターゲットレジスタであるデスティネーションオペランドと、メモリアドレスであるソースオペランドと、メモリアドレスを生成するために使用されるアーキテクチャレジスタである別のソースオペランドと、を含む。remote_load命令は、オフロードターゲットデバイスが、メモリアドレスによって識別されたメモリ場所からオフロードターゲットレジスタにデータをロードすべきであることを示す。オフロードターゲットがPIMデバイスである場合、remote_load命令は、以下で詳細に説明するように、PIMデバイスが、メモリアドレスによって識別されるPIMデバイス内のメモリ場所からPIMレジスタにデータをロードすべきであることを示す。
【0030】
いくつかの実施形態では、remote_store命令は、メモリアドレスであるデスティネーションオペランドと、オフロードターゲットレジスタであるソースオペランドと、メモリアドレスを生成するために使用されるアーキテクチャレジスタである別のソースオペランドと、を含む。remote_store命令は、オフロードターゲットデバイスがオフロードターゲットレジスタ内のデータをメモリアドレスによって識別されるメモリ場所に記憶すべきであることを示す。オフロードターゲットデバイスがPIMデバイスである場合、remote_store命令は、以下で詳細に説明するように、PIMデバイスがターゲットレジスタからのデータを、物理メモリアドレスによって識別されるPIMデバイス内のメモリ場所に記憶すべきであることを示す。
【0031】
いくつかの実施形態では、remote_op命令は、オフロードターゲットレジスタであるデスティネーションオペランドと、計算のためのソースオペランドと、を含み、ソースオペランドは、アーキテクチャレジスタ(以前のオフロードされていない計算からの値を搬送する)、オフロードターゲットレジスタ又はメモリアドレス(同じくremote_op命令において指定されたアーキテクチャレジスタから生成される)であり得る。remote_op命令は、オフロードターゲットデバイス内の固定機能論理が計算を実行し、その結果をデスティネーションオペランドによって示されるオフロードターゲットレジスタに配置すべきであることを示す。オフロードターゲットデバイスがPIMデバイスである場合、remote_op命令は、以下で詳細に説明するように、PIMデバイスがPIMデバイスのメモリ論理内の機能を実行すべきであることを示す。
【0032】
いくつかの実施形態では、オフロード命令は、拡張ISAを使用してアプリケーションコンパイル時にコンパイラによって生成される。一例では、コンパイラは、例えば、オフロードのためのアプリケーションプログラミングインターフェース(application programming interface、API)を使用して、プログラマによって提供されるアプリケーションソースコード内の指標に基づいて、ソースコード内のオフロード命令を識別する。別の例では、コンパイラは、命令がオフロードに適しているという決定に基づいて、オフロードのための命令を識別する。オフロード命令は、ソースコード内の関心領域(region of interest、ROI)として識別され得る。ソースコード内のROIのそれぞれの動的インスタンスは、1つ以上のオフロード命令を含むオフロードトランザクションとして識別され得る。例えば、オフロードトランザクションは、remote_load命令、1つ以上のremote_op命令、及び、remote_store命令を含み得る。オフロードトランザクションは、ループ反復、サブルーチン、又は、サブルーチンの本体のサブセットとすることができる。オフロードトランザクションは、一連のコードであり、いかなる制御フロー変更命令も含まない。いくつかの例では、特別な命令が、それぞれのオフロードトランザクションの開始及び終了をマークし得る。
【0033】
いくつかの実施形態において、オフロード命令は、任意の典型的な非オフロード命令に対して実行されるように、フェッチされ、デコードされ、ディスパッチされる(例えば、コアのフロントエンドパイプラインによって)。オフロード命令がディスパッチされた後、オフロード命令がスケジューラによって選択されると、コアリソースを使用して、オフロード命令において(例えば、メモリオペランドを有するremote_load命令、remote_store命令及びremote_op命令において)識別される任意のメモリ場所の仮想アドレス及び/又は物理アドレス、並びに、コアレジスタからのオフロード命令によって消費される(例えば、非オフロード命令から計算された)任意の値が生成される。仮想アドレス及び/又は物理アドレスが生成され、コアレジスタからの値が利用可能になった後、オフロード命令はリタイアの準備が整う。オフロード命令がスケジューラによって選択されるが、これらの命令は、コアのALU(ベクトル又はスカラ、整数又は浮動小数点)においていかなる動作も実行せず、コアによって発行された場合に、コアの標準ISAにおいて定義されているアーキテクチャ化レジスタ及びフラグを含むマシン状態の変更も行わない。オフロード命令は、メモリ順序付けに違反することなく、上述した動作(アドレス生成及び/又は非オフロード命令によって計算された値の読取り)を完了するとすぐに、リタイアの準備が整う。パイプラインフラッシング(例えば、分岐予測ミス、ロードストア転送データ依存違反、割り込み、トラップ等に起因する)の場合、オフロード命令は、非オフロード命令のように命令ウィンドウエントリを占有するため、従来の命令のようにフラッシュされ得る。更に、remote_op命令はコアのALU上で実行されないため、それらに関する算術エラートラップは検出されない。しかしながら、オフロード命令によって生成された他のトラップ(例えば、仮想アドレス又は物理アドレスの生成、命令ブレークポイント等に関する)は、非オフロード命令のために使用される同じ機構を用いてコアパイプライン内で検出され、処理される。
【0034】
オフロード命令がリタイアすると、生成されたメモリアドレス及び任意のコアレジスタオペランドの値は、オフロード命令のために生成されたオフロード要求に含まれる。オフロード要求は、オフロードターゲットレジスタを含むオフロード命令、及び、オフロード命令を完了し、その結果をオフロードターゲットレジスタに記憶するために必要な任意の生成されたメモリアドレス又はレジスタ値を含む。いくつかの実施形態では、オフロード要求のためのオフロード要求先入れ先出し(first-in-first-out、FIFO)キューを利用して、命令がリタイアする場合に命令のためのプログラムシーケンスが維持される。一例では、オフロード要求FIFOにおいてオフロードトランザクションの終わりに達した場合にのみ、オフロード命令はリタイアされ得る。コアがマルチスレッディングをサポートする場合、スレッドごとに1つのオフロード要求FIFOが存在し得る。それぞれのオフロード要求は、オフロードターゲットデバイスにおいてリモートで同じプログラム順序で実行されるように、リタイア時にコアによってプログラム順序でオフロードターゲットデバイスに発行される。
【0035】
いくつかの例では、オフロード要求がプロセッサコア106、108、110、112によって発行された後、オフロード要求はコヒーレンシシンクロナイザ136によって受信される。コヒーレンシシンクロナイザ136は、コア複合体102、104の様々なキャッシュに対してキャッシュ動作を実行して、オフロード要求において識別された仮想アドレス及び/又は物理アドレスに対する任意のキャッシュエントリがコヒーレントなままであることを確実にする。例えば、オフロード要求がオペランドとして仮想アドレス及び/又は物理アドレスを含む場合、コヒーレンシシンクロナイザ136は、キャッシュプローブを実行して、オフロード要求において識別された仮想アドレス及び/又は物理アドレスに関するキャッシュエントリを含むコア複合体のL1キャッシュ、L2キャッシュ及びL3キャッシュ内のキャッシュエントリを識別する。識別されたキャッシュエントリがクリーンデータを含む場合、キャッシュエントリは無効化される。識別されたキャッシュエントリがダーティデータを含む場合、キャッシュエントリ内のデータは、メインメモリ(すなわち、メモリデバイス)にフラッシュされる。いくつかの例では、コア複合体内の特定のコアによって発行されたオフロード要求において識別された仮想アドレス及び/又は物理アドレスに対応するキャッシュエントリは、コヒーレンシシンクロナイザ136に到達する前に無効化/フラッシュされ、その結果、コヒーレンシシンクロナイザ136は、システム100内の他のコア複合体に対してのみキャッシュプローブを実行する。他の例では、コヒーレンシシンクロナイザ136は、オフロード要求を直接受信し、システム100内の全てのコア複合体に対してキャッシュプローブを実行する。キャッシュエントリが無効化又はフラッシュされるまで、命令キュー内のより若い非オフロード命令が、オフロード要求(単数又は複数)内で識別された仮想アドレス及び/又は物理アドレスのためのキャッシュエントリにアクセスしないことを確実にするために、メモリフェンスが採用されてもよい。このようにして、より若い非オフロード命令は、古いキャッシュデータにアクセスすることを防止され、代わりに(前のオフロード要求によって変更されている可能性がある)メインメモリからデータを取り出さなければならない。適切なキャッシュ動作が完了した後、オフロード要求は、オフロードターゲットデバイスにオフロードするためにメモリコントローラ134に送信される。コヒーレンシシンクロナイザの動作については、以下でより詳細に説明する。
【0036】
いくつかの実施形態では、メモリコントローラ134は、I/O要求がオフロード要求であることを示すフラグを有するI/O要求(例えば、書き込み要求)として構成され得るオフロード要求を受信する。これらの実施形態では、メモリコントローラ134は、要求をデコードして、要求がオフロード要求であると決定し、オフロード命令及びオフロード要求を完了するためのオペランドを識別する。メモリコントローラ134は、オフロード要求から、オフロードターゲットデバイス内に位置するコマンドバッファへのポインタを介して、要求された動作を識別する。メモリコントローラ134は、オフロード要求を、オフロードターゲットデバイスに送信される1つ以上のコマンドに分解する。ターゲットデバイスがPIMデバイスである例では、要求は、メモリコントローラ134によって1つ以上のPIMコマンドに分解されるPIM要求であり得る。
【0037】
図1に示される例では、プロセッサ101は、データを記憶するための1つ以上のメモリアレイ142を含むメモリデバイス138に結合される。いくつかの例では、メモリデバイス138は、プロセッサ101とインターフェースするメモリインターフェース論理ダイ上に積層された複数のメモリダイを含む、積層ダイナミックランダムアクセスメモリ(dynamic random-access memory、DRAM)デバイスである。例えば、メモリデバイス138は、高帯域幅メモリ(high bandwidth memory、HBM)モジュール又はハイブリッドメモリキューブ(hybrid memory cube、HMC)モジュールであってもよい。他の例では、メモリデバイス138は、メモリインターフェース論理を含むデュアルインラインメモリモジュール(dual in-line memory module、DIMM)等のインラインメモリモジュールであってもよい。メモリコントローラ134は、読み出し要求、書き込み要求及び他のメモリ動作等のコマンドをメモリデバイス138のメモリ論理140に発行する。いくつかの実施形態では、メモリコントローラ134によってメモリデバイス138に送信されるコマンドは、オフロードコマンドとしてフラグが立てられてもよい。
【0038】
いくつかの実施形態では、メモリデバイス138は、メモリ論理140がメモリデバイス138内でメモリ動作及び非メモリ動作又は機能(例えば、算術演算及び論理演算)のセットを実行するように設計されるという点で、プロセッシングインメモリ(PIM)デバイスを含む。いくつかの実施形態では、メモリデバイス138は、機能によって作用するオペランドを提供するために使用され得る別個のレジスタファイル144を含む。
【0039】
オフロードターゲットがメモリデバイス138であり、メモリデバイスがPIMデバイスである実施形態では、メモリデバイス138は、プロセッサ101のメモリコントローラ134からのオフロード要求から生成されたオフロードコマンドを受信する。
図1に示される例では、メモリ論理140は、PIM要求において識別される固定機能を実行するための固定機能モジュール146に結合される。固定機能モジュール146は、オフロード命令を含むスレッドが起動された後にオペレーティングシステムによって固定機能モジュール146によって実行されるべき実際のコマンドが投入されるコマンドバッファを含み得る。いくつかの実施形態では、それぞれのオフロード命令のオペコードは、オフロードターゲットデバイスにおいてやはり実行される動作(ロード、ストア、加算、減算、乗算、インクリメント等)のためのコマンドへの埋め込みポインタを含む。オフロード要求がオフロード命令から生成される場合、このポインタもオフロード要求に含まれる。これらの実施形態では、オフロードコマンドを生成する場合、メモリコントローラは、オフロード要求内のポインタを使用して、動作のための実際のコマンドを含むオフロードターゲットデバイスのコマンドバッファ内の場所を識別する。
【0040】
メモリデバイスがPIMデバイスであり、コンパイル時に、コンパイラシステムがレジスタファイル144内のレジスタr1を割り当て、固定機能モジュール146に乗算命令を発行する単純な例を考える。この簡略化された例では、コア106が以下の命令を受信すると考える。
pimLd r1,[5000];
pimOp r1,r1,10;
pimSt[6000],r1;
ここで、pimLdはremote_load命令、pimOpはremote_op命令、及びpimStはremote_store命令である。コアは、前述したように、メモリコントローラに送信されるPIM要求を生成する。メモリコントローラ134は、PIM要求のシーケンスを受信する(元のマシンコードで示される同じプログラム順序で受信される)。この例では、メモリコントローラ134は、レジスタr1であるデスティネーションオペランドと、メモリアレイ142内の物理メモリアドレス5000であるソースオペランドと、を有するロード動作を含む第1のPIM要求を受信する。メモリコントローラ134は、アドレス5000を読み取り、データをレジスタファイル144内のレジスタr1にロードするために、1つ以上のコマンドをメモリ論理140に送信する。次いで、メモリコントローラ134は、レジスタr1であるデスティネーションオペランドと、レジスタr1であるソースオペランドと、PIM要求から取得されたスカラー値(例えば、10)であるソースオペランドと、固定機能モジュール146内の乗算命令へのポインタと、を有するリモート実行命令を含む第2のPIM要求を受信する。メモリコントローラ134は、固定機能モジュール146内の乗算命令を実行するために1つ以上のコマンドをメモリ論理140に送信し、メモリ論理140のALUは、r1内のデータに10を乗算するために使用され、結果はレジスタr1に書き込まれる。次いで、メモリコントローラ134は、メモリアレイ142内の物理メモリアドレス6000であるデスティネーションオペランドと、レジスタr1であるソースオペランドと、を有するストア動作である第3のPIM要求を受信する。メモリコントローラ134は、物理メモリアドレス6000によって識別されるメモリ場所のレジスタr1にデータを記憶するための1つ以上のコマンドをメモリ論理140に送信する。
【0041】
いくつかの例では、コヒーレンシシンクロナイザ136及びメモリコントローラ134は、コア複合体102、104を実装するダイ154、156とは異なるI/Oダイ150上に実装されてもよい。I/Oダイ150は、1つ以上のチャネルを介して、メモリ論理140及び固定機能モジュール146を含むメモリインターフェースダイ(図示せず)に結合されてもよい。それぞれがメモリアレイ142を含む1つ以上のメモリ構成要素は、メモリインターフェースダイの上に積層され、シリコン貫通ビアを使用してメモリインターフェースダイに結合され得る。I/Oダイ150は、オンチップファブリックを通してコア複合ダイ154、156に結合され得る。
【0042】
図2は、本開示の様々な実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行のための別の例示的なシステム200を示すブロック図である。
図2の例は、システム200もマルチコアプロセッサ101を含むという点で、
図1の例示的なシステムと同様である。例示的なシステム200は、オフロードターゲットデバイスがメモリデバイス250に結合されたアクセラレータ238であるという点で、
図1の例示的なシステム100とは異なる。アクセラレータ238は、オフロードされた命令をリモートで実行するためにプロセッサ101によって使用される。例えば、オフロードされた命令は、ループ反復、サブルーチン、サブルーチンの本体のサブセット、又は、上述したような他の連続的なコード片であってもよい。この実施形態では、アクセラレータ238は、プロセッサ101によって実行される拡張ISAがアクセラレータ238に命令をオフロードするために利用され得るという点で、上述のように、PIMデバイスとして構成されるメモリデバイス138と同様に動作する。しかしながら、アクセラレータ238は、オフロードされた命令を、PIMデバイスではないメモリデバイス(例えば、メモリデバイス250)内のデータに対して実行するために使用され得る。
【0043】
アクセラレータ238は、アクセラレータ238内でメモリ動作(ロード/ストア)及び非メモリ動作(例えば、算術演算及び論理演算)を実行するように設計された処理リソースを含むアクセラレータ論理を含む。例えば、アクセラレータ238は、メモリデバイス250からデータをロードし、データに対して計算を実行し、メモリデバイス250にデータを記憶し得る。いくつかの実施形態では、アクセラレータ238は、アクセラレータ論理240によって実行され得る固定機能のセットを実行するように設計される。これらの実施形態では、アクセラレータ238は、固定機能を実行するのに必要なオペランドを提供するために使用されるレジスタファイル244を含む。レジスタファイル244内のレジスタは、上述した拡張ISAを使用して、ソースオペランド又はデスティネーションオペランドとしてオフロード命令においてターゲットにされ得る。
【0044】
アクセラレータ238は、プロセッサ101のメモリコントローラ134から、オフロード要求から生成されたオフロードコマンドを受信する。
図2に示される例では、アクセラレータ論理240は、PIM要求において識別される固定機能のセットを実行するための固定機能モジュール246に結合される。固定機能モジュール246は、固定機能モジュール246によって実行される実際のコマンドを記憶するコマンドバッファを含み得る。コマンドバッファは、オフロード命令を含むアプリケーションスレッドが起動される場合にオペレーティングシステムによって設定される。オフロードコマンドの処理は、メモリアレイがメモリデバイス138内にあるため、アクセラレータ238に対してローカルではないことを除いて、上述したメモリデバイス138によって実行されるオフロードコマンドの処理と同様である。
【0045】
更なる説明のために、
図3は、本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の例示的な方法を示すフロー図である。
図3の例示的な方法は、ターゲットデバイスによるリモート実行のために指定された複数の命令306を受信すること(302)を含み、複数の命令306のそれぞれの命令は、オペランドとして、ターゲットデバイス内のターゲットレジスタを含む。いくつかの実施形態では、ターゲットデバイスによるリモート実行のために指定された複数の命令306であって、複数の命令306のそれぞれの命令は、オペランドとして、ターゲットデバイス内のターゲットレジスタを含む、複数の命令306を受信することは、複数のオフロード命令を受信するプロセッサコア308によって実行され、それぞれのオフロード命令は、上述したように、オフロードターゲットデバイス内のリモートレジスタを識別するオペランドを含む。例えば、オフロードターゲットデバイスは、メモリデバイスに結合されたPIMデバイス又はアクセラレータであってもよい。プロセッサコア308は、例えば、
図1に示されるプロセッサコア106、108、110、112の何れかであってもよい。
【0046】
図3の例では、複数の命令306は、オフロードトランザクションに含まれるオフロード命令であってもよい。1つ以上のオフロードトランザクションは、非オフロード命令(すなわち、従来の命令)を含む機械語コード内でインターリーブされ得る。いくつかの例では、コア308が、少なくとも一連のオフロード命令の終了を認識することができるように、オフロードトランザクションの開始及び終了がコード内で示される。場合によっては、コンパイラシステムは、アプリケーションのソースコード内のプログラムヒントを使用して、リモート実行のために指定されたオフロード命令としてレンダリングされるべきソースコードの部分を認識し得る。例えば、プログラマは、コンパイラシステムによって提供されるAPIを使用して、ソースコードの特定の部分がオフロード命令としてレンダリングされるべきであるという指標を提供することができる。場合によっては、コンパイラシステムは、ソースコードの特定の部分を、リモート実行によって最適化され得るコードとして認識し、そのソースコードを、オフロード命令を含む機械語コードでレンダリングし得る。
【0047】
図3の例では、コア308は、リモート実行のために指定された複数の命令306内のそれぞれの命令が、リモートロード命令、リモート処理命令及びリモートストア命令からなる動作のグループのうちの1つであるように、上述した拡張ISAを実行し得る。上述したように、拡張ISAは、これらの命令、及び、リモートで実行される動作によって使用されるオフロードターゲットデバイスに対してローカルなリモートレジスタファイルを定義する。複数の命令306のそれぞれは、拡張ISAにおいて指定されたターゲットデバイス内のリモートレジスタのうち少なくとも1つをオペランドとして含む。オフロードターゲットデバイス内のこれらのリモートレジスタは、コア308内の記憶空間を占有しない。リモートレジスタは、複数の命令306間のデータ依存関係を作るために使用され、命令が実行されるオフロードターゲットでのレジスタ使用を追跡するために使用される。いくつかの実施形態では、任意のオフロード命令のデスティネーションオペランド又は少なくとも1つのソースオペランドの何れかは、オフロードターゲットデバイス内のリモートレジスタである。
【0048】
複数の命令306内の命令がremote_load命令又はremote_store命令である例を考える。この例では、remote_load命令は、オフロードターゲットデバイス内のリモートレジスタであるデスティネーションオペランドと、仮想アドレス空間又は物理アドレス空間内のメモリ場所へのポインタであるソースオペランドと、を含み、同様に、remote_store命令は、仮想アドレス空間又は物理アドレス空間内のメモリ場所へのポインタであるデスティネーションと、オフロードターゲットデバイス内のリモートレジスタであるソースオペランドと、を含む。
【0049】
複数の命令306内の命令がremote_op命令である別の例を考える。この例では、remote_op命令は、オフロードターゲットデバイス内のリモートレジスタであるデスティネーションオペランドと、オフロードターゲットデバイス内のリモートレジスタ又はプロセッサコアに対してローカルな汎用レジスタであり得る2つ以上のソースオペランドと、を含む。プロセッサコアに対してローカルな汎用レジスタは、非オフロード命令から計算されたデータを含み得る。任意のremote_op計算の結果は、オフロードターゲットデバイスのデスティネーションリモートレジスタに記憶され、オフロード命令のシーケンスにおける更なる計算のために、又は、remote_store動作の一部としてメモリに書き込むために利用可能になる。いくつかの例では、remote_op命令(並びにremote_load命令及びremote_store命令)は、オフロードターゲットデバイス内の実際のオペコード及びリモートレジスタオペランドを記憶するオフロードターゲットデバイス内のコマンドバッファ場所へのポインタを含む。コマンドバッファへのポインタは、remote_op命令のメタデータとしてコアを介して渡され得るコンパイラシステムによって提供され得る。他の例では、オフロード命令に関連付けられた動作は、(例えば、メモリ論理140によって命令306のシーケンスから)推測され得る。この例では、コア308は、オフロードターゲットデバイスに実行される特定の動作をデコードする必要はない。
【0050】
図3の方法は、複数の命令306のそれぞれについて、受信された順序でオフロード要求310を送信すること(304)を含み、オフロード要求310は、リモート実行のために指定された命令を含む。いくつかの実施形態では、複数の命令306のそれぞれについて、受信された順序でオフロード要求310であって、オフロード要求はリモート実行のために指定された命令を含む、オフロード要求310を送信すること(304)は、オフロード命令並びにオフロード命令に関するヘッダ及び/又はメタデータを含む要求パケットの形態でオフロード要求310を生成するプロセッサコア308によって実行される。いくつかの例では、要求パケットは、要求がリモート実行のためのオフロード要求であることを示すヘッダ又はフラグを含む。いくつかの例では、要求パケットは、命令がremote_load命令、remote_op命令又はremote_store命令であるかどうかを示す命令フィールドを含む。要求パケットは、2つ以上のオペランドフィールドを含んでもよく、オペランドは、ターゲットデバイス内のリモートレジスタ、物理メモリアドレス及びプロセッサコア308に対してローカルな汎用レジスタから取得される値であってもよい。remote_op命令の場合、要求パケットは、オフロードターゲットデバイス内のコマンドバッファエントリへのポインタを含むフィールドを含み得る。アプリケーションがマルチスレッドアプリケーションである場合、オフロード要求310はまた、コア308のスレッド識別子を含み得る。
【0051】
いくつかの実施形態では、命令306は、開始マーカ、命令306及び終了マーカを含むオフロードトランザクションの一部である。これらの例では、命令306がリタイアした後、オフロードトランザクションに含まれる命令306は、オフロードトランザクション内の全ての命令306がリタイアするまで保持され得る。すなわち、それぞれの命令のオペランドデータの全てがそれぞれの要求に含めるために利用可能である場合(例えば、生成されたメモリアドレス、他の非オフロード命令から計算されたレジスタ値)、オフロード命令はリタイアされる。(オフロードトランザクションの終了を示すための)終了マーカを有するオフロード命令がリタイアし、命令306の全てがリタイアした場合、オフロード要求がプロセッサコア308から発行され得る。したがって、複数の命令に対応する(すなわち、オフロードトランザクションにおける)複数のオフロード要求は、命令の全てが(例えば、リオーダバッファから)リタイアした後に送信される。このようにして、オフロードトランザクションにおける複数の命令306のプログラム順序は、データ依存性を維持するためのリモートレジスタの使用を容易にするために保存され得る。
【0052】
いくつかの実施形態では、リタイア後であるがプロセッサコア308から発行される前に、オフロードトランザクションにおけるオフロード命令のシーケンスを維持するために、FIFO構造が使用されてもよい。
【0053】
いくつかの実施形態では、オフロード要求310がコア308からディスパッチされた後、オフロード要求310は、以下でより詳細に説明するように、プロセッサコア308から直接、又は、プロセッサコア308を含むコア複合体のL3キャッシュから、コヒーレンシシンクロナイザ(例えば、コヒーレンシシンクロナイザ136)で受信される。コヒーレンシシンクロナイザ136は、他のプロセッサコア及びコア複合体のキャッシュを含む、オフロード要求310に含まれるメモリアドレスに対応するキャッシュエントリを含むキャッシュ内のデータを無効化又はフラッシュするために、キャッシュ動作を実行し得る。コヒーレンシシンクロナイザが、オフロード要求310に含まれるメモリアドレスに対応する全てのキャッシュエントリが無効化されたと(例えば、無効化プローブ応答から)決定すると、オフロード要求310は、リンクを介してオフロードターゲット(例えば、メモリデバイスのメモリインターフェース)に送信するためにメモリコントローラ134に転送される。メモリコントローラ134は、オフロードコマンドの一部としてオフロード要求310を送信し得る。読者は、リモートレジスタを使用するリモート実行の使用を通して、オフロードターゲットデバイスとプロセッサ101内のデータバッファとの間で(コマンドに含まれるデータを除いて)データが転送されないことを理解するであろう。
【0054】
オフロード命令コードが非オフロード命令コードとインターリーブされると仮定すると、オフロード命令コードとメモリにアクセスする非オフロード命令との間のデータ依存性及びメモリ一貫性を強制するために、オフロード命令コード前後の明示的な同期が必要とされ得る。例えば、プログラマは、何れのコードがオフロードされ得るかを指定することによって明示的な同期を確実にする責任を負う場合がある。任意の粒度(例えば、典型的な64Bよりも広い)でオフロード命令データアクセスのコヒーレンシを確立するために、非オフロード命令コードと後続のオフロード命令コードとの間のバリア及びメモリフェンス等の従来の同期プリミティブが、プログラマ/コンパイラによって挿入され得る。同期プリミティブは、オフロード命令コードと後続の非オフロード命令コードとの間で同じプロパティを強制するために用いられ得る。そのような同期プリミティブは、全てのオフロード命令メモリアクセスがメモリを更新するまで、より若い非オフロード命令メモリアクセスをブロックするために使用され得る。本開示では、オフロード命令は、それらがリタイアした後にメモリを更新するため、オフロード要求がコヒーレンシシンクロナイザ136を通過する場合に、全てのコア上でそのような同期プリミティブを解放することによって一貫性が保証される必要がある。
【0055】
読者は、拡張ISAが、プロセッサの標準ISAに対して3つの追加命令のみを必要とすることを理解するであろう。読者は更に、リモート実行のために予約されたアーキテクチャ化レジスタが、オフロードされた命令のリモート実行におけるデータ依存関係を強制するために使用され得ることを理解するであろう。更に、読者は、オフロードトランザクション内のリモートで実行される全ての命令が、リタイア時にプロセッサコアによってプログラム順序でディスパッチされ、同じプログラム順序で、リモートで実行され、したがって、アトミック性の強制又はオフロードターゲットデバイスからの応答の必要性を回避することが可能であることを理解するであろう。更に、読者は、リモート実行のために予約されたレジスタが、システム100内の物理的な記憶空間を占有しないことを更に理解するであろう。
【0056】
更なる説明のために、
図4は、本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の別の例示的な方法を示すフロー図である。
図3の例示的な方法と同様に、
図4の方法は、ターゲットデバイスによるリモート実行のために指定された複数の命令306であって、複数の命令306のそれぞれの命令は、オペランドとして、ターゲットデバイス内のターゲットレジスタを含む、複数の命令306を受信すること(302)と、複数の命令306のそれぞれについて、受信された順序でオフロード要求310であって、オフロード要求310は、リモート実行のために指定された命令を含む、オフロード要求310を送信すること(304)と、を含む。
【0057】
図4の例示的な方法では、複数の命令306のそれぞれについて、受信された順序でオフロード要求310であって、オフロード要求310がリモート実行のために指定された命令を含む、オフロード要求310を送信すること(304)は、リモート実行のために指定された命令内のメモリアドレスを生成すること(402)を含む。いくつかの例では、リモート実行のために指定された命令内のメモリアドレスを生成すること(402)は、命令内のアレイ要素を識別し、アレイ要素のメモリ内位置を計算することによって実行される。例えば、リモート実行のために指定された命令においてメモリアドレスを生成すること(402)は、コア308のアドレス生成ユニット(address generation unit、AGU)によって実行され得る。生成されるメモリアドレスは、仮想メモリアドレス又は物理メモリアドレスであってもよい。本開示によれば、リモートで実行される命令は、仮想メモリ内で管理されるキャッシュ可能なデータ上で動作し得る。
【0058】
リモート実行のために指定された命令が、オフロードターゲットデバイスによって実行されることになるremote_load命令又はremote_store命令である例を考える。この例では、remote_loadは、アレイ又はベクトル内の要素へのポインタをソースオペランドとして識別し、remote_storeは、アレイ又はベクトル内の要素へのポインタをデスティネーションオペランドとして識別した。この例では、コア308のAGUは、識別された要素(すなわち、ソース又はデスティネーションメモリオペランド)のメモリ内位置を計算することによってメモリアドレスを生成する。
【0059】
図4の方法では、複数の命令306のそれぞれについて、受信された順序でオフロード要求310であって、オフロード要求310は、リモート実行のために指定された命令を含む、オフロード要求310を送信すること(304)は、生成されたメモリアドレスをオフロード要求と結合すること(404)を含む。いくつかの例では、オフロード要求において生成されたメモリアドレスを結合すること(404)は、計算されたメモリアドレスが利用可能になった場合に、オフロード要求のメモリアドレスフィールドに生成されたメモリアドレスを記憶することによって実行される。例えば、オフロード要求は、他のデータの中でも特に、メモリアドレス生成を待つために生成され、キューに入れられ得る。メモリオペランドのメモリアドレスがAGUから利用可能になると、メモリアドレスは、オフロード要求のメモリアドレスフィールドに挿入される。このようにして、オフロードターゲットデバイスがオフロード要求を受信する場合、オフロードターゲットデバイスは、アドレス生成を実行するためにプロセッサレジスタにアクセスする必要がなく、オフロードターゲットデバイスは、アドレスを生成するためにそれ自体のリソースを使用する必要もない。したがって、オフロードターゲットデバイスは、remote_load命令又はremote_store命令等のリモート命令を実行する場合、実行可能な動作、動作を実行する際に使用されるオフロードターゲットデバイスに対してローカルなターゲットレジスタ、及び、ロード/ストア・ソース/デスティネーションオペランドとして使用されるメモリオペランドを含む、命令を完了するために必要な全ての情報をコア308から受信する。
【0060】
更なる説明のために、
図5は、本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の別の例示的な方法を示すフロー図である。
図3の例示的な方法と同様に、
図5の方法は、ターゲットデバイスによるリモート実行のために指定された複数の命令306であって、複数の命令306のそれぞれの命令は、オペランドとして、ターゲットデバイス内のターゲットレジスタを含む、複数の命令306を受信すること(302)と、複数の命令306のそれぞれについて、受信された順序でオフロード要求310であって、オフロード要求310は、リモート実行のために指定された命令を含む、オフロード要求310を送信すること(304)と、を含む。
【0061】
図5の例示的な方法では、複数の命令306のそれぞれについて、受信された順序でオフロード要求310であって、オフロード要求310がリモート実行のために指定された命令を含む、オフロード要求310を送信すること(304)は、リモート実行のために指定された命令のローカルデータを取得すること(502)を含む。いくつかの例では、リモート実行のために指定された命令のローカルデータを取得すること(502)は、ローカルプロセッサレジスタからデータを読み取ること、又は、バイパスネットワークから転送されたデータを読み取ることを含む。これらの例では、リモート実行のために指定された命令は、命令を実行するためのプロセッサシステム(例えば、
図1のプロセッサ101)に対してローカルなデータを含むプロセッサレジスタを識別する。例えば、命令は、他の非オフロード命令から計算されたデータ(例えば、スカラー値)を保持するレジスタを識別する。
【0062】
リモート実行のために指定された命令がremote_op命令である例を考える。この例では、remote_op命令は、リモートレジスタ(すなわち、オフロードターゲットデバイスのレジスタ)をデスティネーションオペランド、及び、コア308のローカルレジスタである少なくとも1つのソースオペランドとして識別する。この例では、remote_op命令は、オフロードターゲットデバイス内のコマンドバッファエントリへのポインタを含むメタデータに関連付けられる。ソースデータがローカルレジスタで利用可能になると、ソースデータは、ローカルレジスタからデータを読み取ることによって取得される。
【0063】
図5の方法では、複数の命令306のそれぞれについて、受信された順序でオフロード要求310であって、オフロード要求310は、リモート実行のために指定された命令を含む、オフロード要求310を送信すること(304)は、ローカルデータをオフロード要求と結合すること(504)を含む。いくつかの例では、ローカルデータをオフロード要求と結合すること(504)は、データが利用可能になった後に、ローカルレジスタ又はプロセッサコア308のバイパスネットワークから読み取られたデータをオフロード要求のソースオペランドフィールドにコピーすることによって実行される。例えば、オフロード要求は、他のデータの中でも特に、他の非オフロード命令から計算されたデータを待つために生成され、キューに入れられ得る。データが、ローカルプロセッサレジスタにおいて、又は、プロセッサコア308のバイパスネットワーク(図示せず)を介して利用可能になると、データは、オフロード要求のソースオペランドフィールドに挿入される。このようにして、オフロードターゲットデバイスがオフロード要求を受信する場合、オフロードターゲットデバイスは、動作を実行するためにプロセッサレジスタ(例えば、メモリマップドレジスタ)へのアクセスを必要とせず、オフロードターゲットデバイスは、スカラー値を計算するためにそれ自体のリソースを使用する必要もない。したがって、オフロードターゲットデバイスは、remote_op命令等のリモート命令を実行する場合、実行可能な動作、動作の結果を記憶するためのオフロードターゲットデバイスに対してローカルなデスティネーションレジスタ、コア308から取得されたデータである少なくとも1つのソースオペランド、及び、オフロードターゲットデバイスの固定機能モジュール内のコマンドバッファエントリへのポインタを含む、命令を完了するために必要な全ての情報をコア308から受信する。
【0064】
更なる説明のために、
図6は、本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の別の例示的な方法を示すフロー図である。
図3の例示的な方法と同様に、
図6の方法は、ターゲットデバイスによるリモート実行のために指定された複数の命令306であって、複数の命令306のそれぞれの命令は、オペランドとして、ターゲットデバイス内のターゲットレジスタを含む、複数の命令306を受信すること(302)と、複数の命令306のそれぞれについて、受信された順序でオフロード要求310であって、オフロード要求310は、リモート実行のために指定された命令を含む、オフロード要求310を送信すること(304)と、を含む。
【0065】
図6の例示的な方法では複数の命令306のそれぞれについて、受信された順序でオフロード要求310であって、オフロード要求310がリモート実行のために指定された命令を含む、オフロード要求310を送信すること(304)は、複数の命令の中の最も古い命令がリタイアした後まで、オフロード要求をバッファリングすること(602)を含む。いくつかの例では、複数の命令の中の最も古い命令がリタイアした後までオフロード要求をバッファリングすること(602)は、複数の命令306を含むオフロードトランザクションの開始及び終了を検出し、オフロードトランザクション内の最後の命令がリタイアするまで命令306の何れかの送信を遅延させることによって実行される。これらの例では、オフロードトランザクションがオフロードされた命令のグループを表し得るように、オフロードトランザクションの境界を線引きするため、オフロードトランザクションの開始及び終了をマークする特別な命令が用いられてもよい。いくつかの実施形態では、オフロードトランザクション内の対応するオフロード命令がリタイアする場合、それぞれのオフロード要求をバッファリングするためにFIFOが使用される。複数の命令306の中の最も古い命令がリタイアすると、FIFO内で保留中のオフロード要求は、オフロードターゲットデバイスへの送信のためにディスパッチされ、したがって、命令シーケンス及び依存性が保存される。いくつかの例では、オフロードトランザクションの終了を示す特別な命令が受信される。この命令のリタイア時に、オフロードトランザクション内の全ての命令がリタイアしたことが決定され得る。メモリコントローラ134で受信されると、順次受信されたオフロード要求は、オフロードターゲットに順次送信されるオフロードコマンドを生成するために使用される。このようにして、オフロードトランザクション内のリモートで実行される全ての命令は、コアによってプログラム順序でディスパッチされ、同じプログラム順序で、リモートで実行される。
【0066】
更なる説明のために、
図7は、本開示の実施形態による、固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の別の例示的な方法を示すフロー図である。
図3の例示的な方法と同様に、
図7の方法は、ターゲットデバイスによるリモート実行のために指定された複数の命令306であって、複数の命令306のそれぞれの命令は、オペランドとして、ターゲットデバイス内のターゲットレジスタを含む、複数の命令306を受信すること(302)と、複数の命令306のそれぞれについて、受信された順序でオフロード要求310であって、オフロード要求310は、リモート実行のために指定された命令を含む、オフロード要求310を送信すること(304)と、を含む。
【0067】
図7の例示的な方法は、オフロード要求310に含まれるメモリアドレスに対応するエントリを含む1つ以上のキャッシュに対してキャッシュ動作を実行すること(702)を含み、キャッシュ動作は、クリーンデータを含むキャッシュエントリを無効化すること及びダーティデータを含むキャッシュエントリをフラッシュすることのうち少なくとも1つを含む。いくつかの実施形態では、オフロード要求310に含まれるメモリアドレスに対応するエントリを含む1つ以上のキャッシュに対してキャッシュ動作であって、キャッシュ動作は、クリーンデータを含むキャッシュエントリを無効化すること及びダーティデータを含むキャッシュエントリをフラッシュすることのうち少なくとも1つを含む、キャッシュ動作を実行すること(702)は、コヒーレンシシンクロナイザ704(例えば、
図1のコヒーレンシシンクロナイザ136)が、オフロード要求を受信し、オフロード要求に含まれるメモリアドレスオペランドを識別し、コヒーレンシシンクロナイザ704に結合されたそれぞれのコア複合体内のキャッシュにプローブを送信することによって実行される。
【0068】
いくつかの例では、キャッシュプローブは、remote_load命令がオフロード要求中に最新のコピーを読み取ることを確実にするために、remote_load命令のために読み取られるメモリアドレスに対応するキャッシュエントリ内のクリーンデータを無効化する。いくつかの例では、キャッシュプローブは、オフロードターゲットデバイスが、キャッシュエントリ内に記憶された最新のデータを利用するように、メモリへのremote_load命令又はremote_op命令のために読み取られるメモリアドレスに対応するキャッシュエントリ内のダーティデータをフラッシュする。いくつかの例では、キャッシュプローブは、書き込まれるメモリアドレス又はremote_store命令に対応するキャッシュエントリ内のデータを無効化して、より若い命令が、remote_store命令によって変更される可能性があるデータをキャッシュから読み取らないようにする。キャッシュプローブを受信するそれぞれのキャッシュは、適切なキャッシュ動作が完了したことを示すプローブ応答をコヒーレンシシンクロナイザに返信する。プローブ応答が受信された場合、オフロード要求は、オフロードターゲットデバイスへの送信のためにメモリコントローラ134に転送され得る。コヒーレンシシンクロナイザ704は、オフロードトランザクション内の全てのオフロード要求に対するキャッシュ動作が完了する(すなわち、全てのオフロード要求に対するプローブ応答が受信される)まで待ってから、オフロード要求をメモリコントローラに転送し得るか、又は、それぞれの要求を、そのプローブ動作(もしあれば)が完了する場合に順次転送し得る。
【0069】
これらの例では、キャッシュ動作は、所定のオフロードトランザクションの全てのオフロード要求に対して実行される。いくつかの実施形態では、コヒーレンシシンクロナイザは、所与のトランザクションの全てのオフロード要求についてコアからのいかなるデータもフラッシュ又は無効化する必要がないことを示すプローブフィルタを採用する。そのような場合、オフロード要求は、プローブ応答が到着するのを待たずにメモリコントローラに転送される。そうでない場合、オフロード要求は、オフロード要求がメモリコントローラに送信される前に、ダーティデータがメモリコントローラに送信されるのをプローブフィルタにおいて待つ。読者は、オフロード要求が、無効化プローブを介してコヒーレンスを強制することができ、オフロード命令によって読み取られるダーティラインがキャッシュ内にない限り、プローブが完了するのを待つことさえなく、メモリへのアクセスを進め得ることを理解するであろう。また、読者は、コヒーレンシシンクロナイザ704を介して、キャッシュプローブが、複数のコア複合体内の複数の最終レベルキャッシュに通信して、これらの複数のコア複合体にわたってコヒーレンシを強制することができ、マルチスレッドアプリケーションに有利であることを理解するであろう。
【0070】
いくつかの実施形態では、それぞれのオフロード要求310は、コヒーレンシシンクロナイザ704に直接送信される。これらの実施形態では、コヒーレンシシンクロナイザ704は、受信したオフロード要求内のメモリアドレスオペランドを識別し、接続されたそれぞれのコア複合体内のそれぞれのキャッシュにキャッシュプローブを送信する。キャッシュプローブは、オフロード要求に含まれるオペコード(すなわち、remote_load、remote_store、remote_op)に応じて、データを無効化又はフラッシュすることを要求する。
【0071】
コア106が、コヒーレンシシンクロナイザ136によって受信されるオフロード要求を送信する例を、
図1を使用して考える。コヒーレンシシンクロナイザ136は、要求内のメモリアドレスオペランドを識別し、メモリアドレスに対するキャッシュプローブをコア複合体102内のL3キャッシュ130及びL3キャッシュ132に送信する。キャッシュプローブは、メモリアドレスに対応するキャッシュエントリ内のクリーンデータが無効化されるべきであること、又は、メモリアドレスに対応するキャッシュエントリ内のダーティデータがフラッシュされるべきであることを示す。コア複合体102内のL3キャッシュ130内のキャッシュ論理は、プローブ要求を受信し、適切であればキャッシュ動作を実行し、プローブ要求をL2キャッシュ114、116に転送する。L2キャッシュ114、116内のキャッシュ論理は、プローブ要求を受信し、適切であればキャッシュ動作を実行し、プローブ要求をそれぞれのL1キャッシュ122、124に転送する。L1キャッシュ122、124内のキャッシュ論理は、プローブ要求を受信し、適切であればキャッシュ動作を実行する。L1キャッシュ122、124は、プローブ応答をL2キャッシュ114、116に送信し、L2キャッシュ114、116は、プローブ応答をL3キャッシュ130に送信し、L3キャッシュ130は、コア複合体102内の全てのキャッシュがオフロード要求310に対して同期していることを示すプローブ応答をコヒーレンシシンクロナイザ136に送信する。同じ手順がコア複合体104において実行される。コヒーレンシシンクロナイザ136が、両方のコア複合体102、104内の全てのキャッシュ120~132がオフロード要求310に対して同期していることを示すプローブ応答を受信すると、オフロード要求は、メモリコントローラ134に転送するための準備が整う。
【0072】
いくつかの実施形態において、それぞれのオフロード要求310は、コア308のためのそれぞれの連続キャッシュレベルを介してコヒーレンシシンクロナイザ704に送信される。これらの実施形態では、コア308のそれぞれのキャッシュレベル(L1、L2、L3)内のキャッシュ論理は、要求内のメモリオペランドを識別し、メモリアドレスに対応するキャッシュエントリ内のデータを無効化又はフラッシュするためにキャッシュ動作を実行し、コア308のL3キャッシュは、受信されたオフロード要求内のメモリアドレスオペランドを識別し、コア複合体内の他のコアのそれぞれのキャッシュにキャッシュプローブを送信する。コヒーレンシシンクロナイザがオフロード要求を受信すると、コヒーレンシシンクロナイザ704は、受信されたオフロード要求内のメモリアドレスオペランドを識別し、キャッシュプローブを他のコア複合体に送信する。キャッシュプローブは、オフロード要求に含まれるオペコード(すなわち、remote_load、remote_store、remote_op)に応じて、データを無効化又はフラッシュすることを要求する。
【0073】
コア110が、コア110のL1キャッシュ126によって受信されるオフロード要求を送信する例を、
図1を使用して考える。L1キャッシュ126内のキャッシュ論理は、オフロード要求内のメモリアドレスオペランドを識別し、メモリアドレスに対応するキャッシュエントリ内のデータを無効化又はフラッシュするためにキャッシュ動作を実行し、オフロード要求をコア110のL2キャッシュ118に転送する。L2キャッシュ118内のキャッシュ論理は、オフロード要求内のメモリアドレスオペランドを識別し、メモリアドレスに対応するキャッシュエントリ内のデータを無効化又はフラッシュするためにキャッシュ動作を実行し、オフロード要求をコア110のL3キャッシュ132に転送する。コア複合体104内のL3キャッシュ132内のキャッシュ論理は、オフロード要求内のメモリアドレスオペランドを識別し、メモリアドレスに対応するキャッシュエントリ内のデータを無効化又はフラッシュするためにキャッシュ動作を実行し、コア複合体104内の他のコア112のL2キャッシュ120にプローブ要求を送信する。L2キャッシュ120内のキャッシュ論理は、プローブ要求を受信し、適切であればキャッシュ動作を実行し、プローブ要求をコア112のL1キャッシュ128に転送する。L1キャッシュ128内のキャッシュ論理は、プローブ要求を受信し、適切であればキャッシュ動作を実行する。L1キャッシュ128は、プローブ応答をL2キャッシュ120に送信し、L2キャッシュ120は、プローブ応答をL3キャッシュ132に送信し、L3キャッシュ132は、コア複合体104内の全てのキャッシュがオフロード要求310に対して同期していることを示すプローブ応答をコヒーレンシシンクロナイザ136に転送する。
【0074】
この例では、コヒーレンシシンクロナイザ136がオフロード要求310を受信すると、コヒーレンシシンクロナイザは、要求内のメモリアドレスオペランドを識別し、メモリアドレスに対するキャッシュプローブをコア複合体102内のL3キャッシュ130に送信する。キャッシュプローブは、メモリアドレスに対応するキャッシュエントリ内のクリーンデータが無効化されるべきであること、及び/又は、メモリアドレスに対応するキャッシュエントリ内のダーティデータがフラッシュされるべきであることを示す。コア複合体102内のL3キャッシュ130内のキャッシュ論理は、プローブ要求を受信し、適切であればキャッシュ動作を実行し、プローブ要求をL2キャッシュ114、116に転送する。L2キャッシュ114、116内のキャッシュ論理は、プローブ要求を受信し、適切であればキャッシュ動作を実行し、プローブ要求をそれぞれのL1キャッシュ122、124に転送する。L1キャッシュ122、124内のキャッシュ論理は、プローブ要求を受信し、適切であればキャッシュ動作を実行する。L1キャッシュ122、124は、プローブ応答をL2キャッシュ114、116に送信し、L2キャッシュ114、116は、プローブ応答をL3キャッシュ130に送信し、L3キャッシュ130は、コア複合体102内の全てのキャッシュがオフロード要求310に対して同期していることを示すプローブ応答をコヒーレンシシンクロナイザ136に送信する。
【0075】
上記の説明を鑑みれば、読者は、本開示による実施形態が多数の利点を提供することを理解するであろう。これらの実施形態では、命令のセット及びアーキテクチャレジスタファイルを有するCPUベースのISAがリモート実行のために予約されている。例えば、PIMデバイスに結合された場合、リモートレジスタファイルは、(新しい命令及びレジスタ保持データによって指示される計算が行われる)メモリ内に物理的に配置される。リモートレジスタは、リモートで実行される命令間のデータ依存性を定義し、コードが実行されるリモートデバイスにおけるレジスタの有効性を指示する。オフロードターゲットデバイスによって実行される実際の動作を記憶するコマンドバッファエントリを示すポインタ又は他のメタデータがオフロード要求に含まれ、その結果、CPUコアは、オフロードターゲットデバイス内の固定機能モジュールによって実行される特定の動作をデコードする必要がないという点で、実施形態では、全てのタイプのオフロードされる動作のためのISA拡張をサポートするために広範なデコーダ変更を必要としない。更に、本明細書に記載されるアーキテクチャは、アドレスの一時的再利用を追跡する追加の構造を必要としない。
【0076】
読者は、本開示による実施形態が、リモート実行のためにオフロードされる命令の線形シーケンスとしてオフロードトランザクションを提供することを理解するであろう。オフロードトランザクション内のリモートで実行される全ての命令は、リタイア時にCPUコアによってプログラム順序でディスパッチされ、同じプログラム順序で、リモートで実行される。
【0077】
読者は、本開示による実施形態が、メモリ一貫性及びコヒーレンシを保つオフロード命令のためのリモート実行フローを提供することを理解するであろう。リモートで実行される命令は、仮想メモリ内で管理されるキャッシュ可能なデータに対して動作する。CPUコア並びに他のコア及びコア複合体におけるキャッシュコヒーレンシは、コヒーレンシシンクロナイザによって実行されるキャッシュプローブを介して強制される。
【0078】
読者は、本開示による実施形態が、オフロードターゲットデバイスとCPUコアとの間の往復通信を必要としないことを理解するであろう。オフロード要求は、オフロード命令がCPUコア内でリタイアした後にオフロードターゲットデバイスによって遂行されるので、オフロードターゲットデバイスからCPUコアに戻る追加の通信の必要はない。
【0079】
読者は、オフロード命令が従来の命令と同様にCPUパイプラインを通って流れるので、本開示による実施形態が任意のタイプのCPUパイプラインフラッシュをサポートすることを理解するであろう。
【0080】
実施形態は、システム、装置、方法及び/又は論理回路であり得る。本開示のコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(instruction-set-architecture、ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、Smalltalk、C++等のオブジェクト指向プログラミング言語、並びに、「C」プログラミング言語又は同様のプログラミング言語等の従来の手続きプログラミング言語を含む1つ以上のプログラミング言語の任意の組み合わせで書き込まれたソースコード若しくはオブジェクトコードの何れかであり得る。いくつかの実施形態では、例えば、プログラマブル論理回路、フィールドプログラマブルゲートアレイ(field-programmable gate array、FPGA)又はプログラマブル論理アレイ(programmable logic array、PLA)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行し得る。
【0081】
本開示の態様は、本開示の実施形態による方法、装置(システム)及び論理回路のフロー図及び/又はブロック図を参照して本明細書に記載されている。フロー図及び/又はブロック図のそれぞれのブロック、並びに、フロー図及び/又はブロック図におけるブロックの組み合わせは、論理回路によって実行され得ることが理解されよう。
【0082】
論理回路は、プロセッサ、他のプログラマブルデータ処理装置、又は、他のデバイスに実装されて、コンピュータ実行プロセスを生成するために、プロセッサ、他のプログラマブル装置、又は、他のデバイス上で実行される一連の動作ステップを行わせることができ、そのため、コンピュータ、他のプログラマブル装置、又は、他のデバイス上で実行される命令は、フロー図及び/又はブロック図のブロックに指定される機能/行為を実行する。
【0083】
図中のフロー図及びブロック図は、本開示の様々な実施形態によるシステム、方法及び論理回路の可能な実施形態のアーキテクチャ、機能及び動作を示す。これに関して、フロー図又はブロック図の各ブロックは、指定された論理機能(単数又は複数)を実行するための1つ以上の実行可能命令を含む、命令のモジュール、セグメント又は部分を表すことができる。いくつかの代替的な実施形態では、ブロックに記載されている機能は、図に記載された順序から外れて発生する場合がある。例えば、連続して示される2つのブロックは、実際には実質的に同時に実行され得るか、又は、ブロックは、関与する機能に応じて、逆の順序で実行され得る。ブロック図及び/又はフロー図の各ブロック、並びに、ブロック図及び/又はフロー図におけるブロックの組み合わせは、指定された機能若しくは行為を実行するか、又は、専用ハードウェアとコンピュータ命令との組み合わせを行う、専用ハードウェアベースのシステムによって実行することができることにも留意されたい。
【0084】
本開示の利点及び特徴は、以下のステートメントによって更に記載され得る。
1.固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行の方法であって、ターゲットデバイスによるリモート実行のために指定された1つ以上の命令を受信することと、1つ以上の命令のそれぞれについてオフロード要求であって、オフロード要求は、リモート実行のために指定された命令を含む、送信することと、を含む、方法。
2.1つ以上の命令のそれぞれの命令は、オペランドとして、ターゲットデバイス内のターゲットレジスタを含み、プロセッサは、ターゲットレジスタを仮想レジスタとして識別する命令セットアーキテクチャ拡張を実行する、ステートメント1に記載の方法。
3.1つ以上の命令のそれぞれは、プロセッサによって実行される命令セットアーキテクチャ拡張内のオペコードのグループからのオペコードを含み、命令セットアーキテクチャ拡張内のオペコードのグループは、リモートロードオペコード、リモート計算オペコード及びリモートストアオペコードからなる、ステートメント1~2の何れかに記載の方法。
4.1つ以上の命令のそれぞれについてオフロード要求であって、オフロード要求はリモート実行のために指定された命令を含む、オフロード要求を送信することは、リモート実行のために指定された命令のメモリアドレスを生成することと、メモリアドレスをオフロード要求と結合することと、を含む、ステートメント1~3の何れかに記載の方法。
5.1つ以上の命令のそれぞれについてオフロード要求であって、オフロード要求はリモート実行のために指定された命令を含む、オフロード要求を送信することは、リモート実行のために指定された命令のローカルデータを取得することと、ローカルデータをオフロード要求と結合することと、を含む、ステートメント1~4の何れかに記載の方法。
6.1つ以上の命令のそれぞれについてオフロード要求であって、オフロード要求はリモート実行のために指定された命令を含む、オフロード要求を送信することは、1つ以上の命令の中の最も古い命令がリタイアした後まで、オフロード要求をバッファリングすることと、1つ以上の命令のそれぞれについて、受信された順序でオフロード要求を送信することと、を含む、ステートメント1~5の何れかに記載の方法。
7.オフロード要求に含まれるメモリアドレスに対応するエントリを含む1つ以上のキャッシュに対してキャッシュ動作を実行することを更に含み、キャッシュ動作は、クリーンデータを含むキャッシュエントリを無効化すること及びダーティデータを含むキャッシュエントリをフラッシュすることのうちの少なくとも1つを含む、ステートメント1~6の何れかに記載の方法。
8.キャッシュ動作は、オフロード要求に含まれるメモリアドレスに対応するエントリを含む複数のキャッシュ上で実行され、複数のキャッシュは、複数のプロセッサコアをそれぞれ含む複数のコアクラスタにわたって分散されている、ステートメント1~7の何れかに記載の方法。
9.ターゲットデバイスは、プロセッシングインメモリデバイスである、ステートメント1~2の何れかに記載の方法。
10.ターゲットデバイスは、メモリデバイスに結合されたアクセラレータである、ステートメント1~2の何れかに記載の方法。
11.マルチコアプロセッサであって、ターゲットデバイスによるリモート実行のために指定された1つ以上の命令を受信し、1つ以上の命令のそれぞれについてオフロード要求であって、オフロード要求は、リモート実行のために指定された命令を含む、オフロード要求を送信する、ように構成されている、マルチコアプロセッサ。
12.1つ以上の命令のそれぞれの命令は、オペランドとして、ターゲットデバイス内のターゲットレジスタを含み、プロセッサは、ターゲットレジスタを仮想レジスタとして識別する命令セットアーキテクチャ拡張を実行する、ステートメント11に記載のプロセッサ。
13.1つ以上の命令のそれぞれは、プロセッサによって実行される命令セットアーキテクチャ拡張内のオペコードのグループからのオペコードを含み、命令セットアーキテクチャ拡張内のオペコードのグループは、リモートロードオペコード、リモート計算オペコード、及びリモートストアオペコードからなる、ステートメント11~12の何れかに記載のプロセッサ。
14.1つ以上の命令のそれぞれについてオフロード要求であって、オフロード要求はリモート実行のために指定された命令を含む、オフロード要求を送信することは、1つ以上の命令の中の最も古い命令がリタイアした後まで、オフロード要求をバッファリングすることと、1つ以上の命令のそれぞれについて、受信された順序でオフロード要求を送信することと、を含む、ステートメント11~13の何れかに記載のプロセッサ。
15.オフロード要求に含まれるメモリアドレスに対応するエントリを含む1つ以上のキャッシュに対してキャッシュ動作を実行することを更に含み、キャッシュ動作は、クリーンデータを含むキャッシュエントリを無効化すること及びダーティデータを含むキャッシュエントリをフラッシュすることのうちの少なくとも1つを含む、ステートメント11~14の何れかに記載のプロセッサ。
16.プロセッシングインメモリ(PIM)デバイスと、PIMデバイスに結合されたマルチコアプロセッサと、を含むシステムであって、プロセッサは、PIMデバイスによるリモート実行のために指定された1つ以上の命令を受信し、1つ以上の命令のそれぞれについてオフロード要求であって、オフロード要求は、リモート実行のために指定された命令を含む、オフロード要求を送信する、ように構成されている、システム。
17.1つ以上の命令のそれぞれの命令は、オペランドとして、PIMデバイス内のターゲットレジスタを含み、プロセッサは、ターゲットレジスタを仮想レジスタとして識別する命令セットアーキテクチャ拡張を実行する、ステートメント16に記載のシステム。
18.1つ以上の命令のそれぞれは、プロセッサによって実行される命令セットアーキテクチャ拡張内のオペコードのグループからのオペコードを含み、命令セットアーキテクチャ拡張内のオペコードのグループは、リモートロードオペコード、リモート計算オペコード、及びリモートストアオペコードからなる、ステートメント16~17の何れかに記載のシステム。
19.1つ以上の命令のそれぞれについてオフロード要求であって、オフロード要求はリモート実行のために指定された命令を含む、オフロード要求を送信することは、1つ以上の命令の中の最も古い命令がリタイアした後まで、オフロード要求をバッファリングすることと、1つ以上の命令のそれぞれについて、受信された順序でオフロード要求を送信することと、を含む、ステートメント16~18の何れかに記載のシステム。
20.オフロード要求に含まれるメモリアドレスに対応するエントリを含む1つ以上のキャッシュに対してキャッシュ動作を実行することを更に含み、キャッシュ動作は、クリーンデータを含むキャッシュエントリを無効化すること及びダーティデータを含むキャッシュエントリをフラッシュすることのうちの少なくとも1つを含む、ステートメント16~19の何れかに記載のシステム。
【0085】
本開示は、その実施形態を参照して具体的に示され、説明されてきたが、以下の「特許請求の範囲」の趣旨及び範囲から逸脱することなく、形態及び詳細における様々な変更が行われ得ることが理解されるであろう。したがって、本明細書に記載された実施形態は、限定目的ではなく、説明的な意味でのみ考慮されるべきである。本開示は、「発明を実施するための形態」ではなく添付の「特許請求の範囲」によって定義され、その範囲内の全ての差異は、本開示に含まれるものと解釈されるべきである。
【国際調査報告】