(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
以下、図面に基づいて本発明の実施の形態を説明する。
【0009】
各実施例は、プロセッサ(ソケット上の中央処理ユニット(CPU)など)がアクセラレータ上のメモリにアクセスし、特別なロード/ストアトランザクションを利用してメモリをアドレッシングすることによって、Peripheral Component Interconnect Express(PCIe
TM)などのインタフェースによりシステムに相互接続されるアクセラレータによる完全に共有されたバーチャルアドレススペースを構成及び管理することを可能にする。リモートメモリをアドレッシングすることが可能であることは、アプリケーションソフトウェアにより見える有効計算キャパシティを増加させることを直接可能にし、データを前方及び後方に移動させるのにプログラマの明示的な関与なくアプリケーションがデータをシームレスに共有することを可能にする。このようにして、メモリは、メモリプロテクションを用いる必要なく、またフォルトハンドラから完結されるべきメモリアクセスをリダイレクトするためにバーチャルアドレスアクセス上でフォルトすることなく、アドレッシング可能である。また、既存の共有メモリマルチコア処理は、ソケット上にはないが、周辺のコヒーラントでないリンクを介し接続されるアクセラレータを含むよう拡張可能である。
【0010】
他方、クラスタベースシステムなどの典型的なシステムは、プログラマにより見えるような部分的な共有メモリモデルを構成し、CPUと周辺デバイスとの間でページをフォルト及び移動するためにメモリプロテクション機構に依存する。また、クラスタベースシステムでは、各ノードはオペレーティングシステム(OS)スタックの別のコピーを実行し、その先頭においてアプリケーションが実行される。アドレススペースの一部しか共有されず、プログラマはデータのどの部分が共有アドレススペースに配置されるか共有エリアから割り当てるか、又は明示的に指定するため、システムのこの特徴はプログラマに明らかにされる。この実行環境は、単一共有メモリマルチコアシステムに類似する完全共有メモリ実行環境とは異なる。
【0011】
各種実施例では、ソケット上のプロセッサは、アクセラレータにローカルなリモートメモリをアドレッシング可能であり、このことは、プロセッサがリモートメモリアドレスを透過的に用いて共有データにアクセスすることを可能にする。これを実現するため、バーチャルメモリマネージメントシステムが、特別なロード/ストアトランザクションがリモート共有データをアドレッシングするため発行可能となるようにエンハンスされ、さらに明示的なプログラマの関与を必要とすることなくシステムがメモリページをより頻繁にアクセスされる場合にはより近くに移動することを可能にするため、アーキテクチャの拡張が提供される。さらに、メモリマネージメントの拡張は、プログラマがアドレススペースの何れの部分が共有される必要があるか明示的に指定する必要なくアプリケーションコードを直接実行し、又はプログラマが共通の共有データエリアを管理することを可能にする。
【0012】
また、キャッシュコヒーラントなCPUソケット上のコアと周辺相互接続を介しシステムに相互接続されるアクセラレータ(マルチコアCPUを含む)との間で共有されるバーチャルアドレススペースが構成及び管理可能である。このため、相互接続の両サイドのCPU/アクセラレータは、キャッシュコヒーラントであってもよいし又はなくてもよい相互接続を介しアクセラレータにローカルなメモリ又はシステムメモリに物理的に配置される共有バーチャルページにアクセス可能となる。
【0013】
従って、アクセラレータのローカルメモリが相互接続を介し、コヒーラントなファブリック(フロントサイドバス(FSB)又はクイックパスインターコネクト(QPI)など)を介しCPUにより直接的にはアクセス可能でなくても、アクセラレータ上のローカルな物理メモリは、CPUとさらにOS及びアプリケーションへの追加的なシステムメモリとして動作可能である。
【0014】
各実施例は、多数の異なるシステムタイプにより実現可能である。
図1を参照して、本発明の一実施例によるシステムのブロック図が示される。
図1に示されるように、システム100は、例えば、PCIe
TMリンクであってもよいコヒーラントでないインターコネクト140を介しアクセラレータカード150に接続されるホストパーソナルコンピュータ(PC)プラットフォーム110を有する一例となるコンピュータシステムである。図示されるように、ホストプラットフォーム110は、CPU120と、一部の実施例ではDRAM(Dynamic Random Access Memory)であるシステムメモリ130とを有する。
図1では簡単化のため最小限の構成要素しか示されていないが、所与のプラットフォームは、入出力ハブ、チップセットコンポーネント、周辺デバイス、大容量記憶装置、入出力デバイスなどを含む他の多数の典型的な構成要素を含むものであってもよいことは理解されるであろう。
【0015】
図1に示されるように、CPU120は、メモリマネージメントユニット(MMU)125を有する。MMU125は、バーチャルアドレスと物理アドレスとのマッピングを可能にし、一部の実施例では、1以上の変換ルックアサイドバッファ(TLB)を有する。後述されるように、本発明の一実施例によるMMUへの各種アーキテクチャの拡張は、プラットフォーム110とアクセラレータカード150に付属するメモリの間の共有バーチャルメモリの構成及び利用を可能にする。
【0016】
図1を参照するに、アクセラレータカード150は、グラフィックス処理ユニット、CPU又は他の何れか同様のデバイスなどの何れかのタイプのアクセラレータであってもよいインテレクチャルプロパティ(IP)ブロック160を有する。図示されるように、このIPブロック自体がMMU165を有する。プラットフォーム110との通信を可能にするため、ブリッジ155が、インターコネクト140のためのプロトコルに従って行われる通信を、システムオンチップ(SoC)ファブリック170上で使用されるものと整合するプロトコルに変換するため存在し、SoCファブリック170は次にIPブロック160をDRAMであってもよいローカルメモリに接続する。
図1の実施例では特定の実現形態により示されているが、本発明の範囲はこれに限定されるものでない。
【0017】
各実施例は、オンボード(マザーボードなど)システムメモリの外部の物理メモリアクセスをCPUが特定可能であることをエンハンスするリバースプロキシ実行(RPE)を実現する。このとき、このような位置へのアクセスは、周辺ファブリックを介しアクセラレータにトンネルされるアクセスクラスに変換される。さらに、アクセラレータは、それのローカル物理メモリからのアクセスに利用される。RPEとプロキシ実行(CPUがアクセラレータのリクエストの下でメモリアクセスの完了を支援する)とを一緒に利用して、(コヒーラント又は非コヒーラントな)ファブリックを介しマルチソケットCPUに接続される独立したMMUを有する任意のアクセラレータは、システムメモリとアクセラレータローカルメモリとの双方を含む物理メモリのための共有バーチャルアドレススペースを構築可能である。RPEとプロキシ実行とを利用して、一実施例は、従来のシンメトリックなマルチプロセッシング(SMP)のために構築された同一のマルチスレッド共有バーチャルメモリベースプログラムが、周辺I/Oファブリック上の複数のストップ又は複数のCPUソケット上にある各CPUにスレッドを分散させることを可能にする。
【0018】
アーキテクチャ機構と共に、各実施例はまた、周辺インターコネクトを介しソケットとアクセラレータ(又はCPU)上のコアの間の制御及びデータ転送がそれぞれが異なる最適化オプションを備えた完全にOSアンアウェアなものからOSアウェアなものまでの異なる抽象化レベルにおいて透過的に動作することを可能にするファームウェア及びシステムソフトウェアの拡張を含む。
【0019】
データは、アクセラレータサイドと共にCPUサイドからの共有データに対するアクセスパターンに基づく要求ベースにより共有可能である。バーチャルアドレスにより動作し、アドレス変換をサポート可能なアクセラレータは、アクセラレータがアプリケーションプログラムの一部を実行する際にコード又はデータを参照するときに同一のバーチャルアドレスが利用可能であるため、手つかずのままのデータ及びコードを参照して同一のコードを透過的に実行可能である。コード又はデータを含む物理ページは、アクセラレータにローカルに配置可能であるか、又はシステムメモリからフェッチ可能である。バーチャルページは、アプリケーションがアクセラレータ上での計算を設定するためのデータ移動を管理することが不要であるため、アプリケーションソフトウェアスタックの明示的な関与なくアクセス頻度に基づき、リモート位置からローカル位置に移動可能である。
【0020】
ドライバソフトウェアには、しばしばメインシステムメモリとアクセラレータにローカルなリモートメモリとの間のDMA(Direct Memory Access)転送を利用して、データを大量に明示的に移動するジョブが課せられる。従来のドライバモデルでは、CPU上で実行されるアプリケーションプログラムとアクセラレータを管理するドライバプログラムとは、典型的には2つの異なるバーチャルアドレススペースにある。このため、アプリケーションとドライバとの間のデータ通信と、システムメモリとアクセラレータローカルメモリとの間のデータ転送とのために、かなりのオーバヘッドが通常生じる。さらに、このデータ転送は、典型的には、プログラマにより記述されるアプリケーションコードにより実現される。例えば、プログラマは、ベンダ固有のアプリケーションプログラミングインタフェース(API)セットを利用して、システムメモリからアクセラレータメモリにデータを手動により移動することが要求される。DMA処理の明示的な管理を必要とすることのない、本発明の一実施例によるCPUとアクセラレータコアとの間の共有バーチャルアドレススペースの構成は、データ共有化をかなり簡単化する。これは、アプリケーションコードとデータ全体が、例えば、プログラマによるDMA処理の明示的な編成などによりアプリケーションプログラムを変更することによってデータを明示的に移動させる必要なく、共通の共有バーチャルアドレススペースに配置可能であるためである。従って、データ転送は依然としてDMAにより可能であるが、それらはプログラマにより制御されない。すなわち、プロセッサは、データアクセスを可能にするため基礎となるファブリックを設定及び管理するためのプログラマによる明示的なプログラミングなく、ユーザレベルアプリケーションの実行中にリモートメモリに存在するデータに直接アクセスする。
【0021】
CPUとアクセラレータとの間の共有アドレススペースを構成するため、メモリマネージメントユニットは、共有バーチャルアドレススペースへのロード/ストアアクセスが、仮想アドレスから物理アドレスへの変換に用いられるページテーブルのコンテンツに基づきリモートメモリに送られることを可能にする。
【0022】
システムソフトウェアサポートは、ランタイムシステムがバーチャルページの位置を透過的かつ動的に移動することを可能にする。これにより、CPUとアクセラレータとの間の共通の共有バーチャルアドレススペースが構成可能となり、プログラムのランタイムワーキングセットロカリティ動作が、アクセスが頻繁でない場合にはバーチャルページをリモートに配置し、又は頻繁にアクセスされるページに対してはローカルにそれらを配置するのに利用される。
【0023】
各種実施例では、バーチャルメモリサポートを拡張するための異なる機構が提供される。1つの実現形態は、既存のレガシーページングシステム設計に対するOSの変更を含まないが、他の実現形態は、ページテーブルエントリにより多くの情報を追加可能である。これらの機構は、リバースプロキシ実行、すなわち、CPUがシステムメモリ上でなく周辺ファブリックのアクセラレータにローカルなリモート物理メモリにマップされるバーチャルアドレスアクセスを特定及び提供する機能をサポートするための同様のアーキテクチャ機構を伴う。
【0024】
RPEをサポートするため、CPUは、与えられたバーチャルアドレスがシステムメモリ又は周辺ファブリックのリモートメモリにマップされるか特定する。物理アドレスがシステムメモリにマップされた場合、当該アクセスは通常のメモリアクセスによりローカルに処理され、そうでない場合、RPEが当該アクセスを処理するよう指示される。一実施例では、RPEは、専用のマイクロコードフローを用いて実現されてもよい。RPEは、マイクロコードハンドラにより処理される特別なフォルト状態によりアクセス(ロード/ストア(LD/ST)など)をタグ付けすることによって開始される。複数の変形が可能であるが、ハンドラはアクセスを周辺ファブリックのREAD/WRITE/DMAトランザクションに変換する。説明の簡単化のため、周辺ファブリックはPCIe
TMインターコネクトであり、リモート物理メモリへの個別の各アクセスはキャッシュ不可なアクセスに変換され、さらにPCIe
TMファブリック上のリクエスト/データをトンネルするため、PCIe
TMデータトランザクションに変換されると仮定する。このトランザクションは、オリジナルのバーチャルアドレス又は物理アドレスをカプセル化可能である。一部の実施例では、アクセスを実行するCPUスレッドは、リモートアクセスの保留中の完了をストールしてもよい(又は他のスレッドにスイッチしてもよい)。アクセラレータがCPUからアクセスリクエストを通知するPCIe
TMトランザクションを受信すると、アクセラレータのシーケンサは当該リクエストを特別なインタラプトイベントとして処理する。シーケンサは、当該リクエストからアクセスアドレスとアクセスタイプとを抽出する。アクセスアドレスがバーチャルアドレスである場合、シーケンサは、物理アドレスを取得するため、ローカルMMUを介しトランザクションをローカルに実行する。物理アドレスを利用して、アクセラレータのシーケンサは、ストアをコミットするか(ライトトランザクションの場合)、又はロードのためのデータを取得する(リードトランザクションの場合)。シーケンサは、リプライ(ロードの場合など)をPCIe
TMトランザクションにカプセル化し、ホストルート(すなわち、CPU)に送り返す。CPUコアは、PCIe
TMトランザクションと完了したアクセスの状態とを受信し、以降の処理を再開する。これにより、リモートアクセスのアクセス状態に基づくアクセスフォルトが生じうる。
【0025】
図2を参照するに、本発明の一実施例によるリバースプロキシ実行のためのフロー図が示される。
図2に示されるように、アクセラレータのローカルメモリ、すなわち、CPUに関するリモートメモリ上にあるデータにアクセスするため、方法200が利用される。
図2に示されるように、方法200は、メモリアクセスリクエストを受信することによって開始される(ブロック210)。このリクエストはホストCPUにおいて受信され、さらにエントリがTLBにあるバーチャルアドレスのためのものであるか判断するため、TLBなどのMMUに転送される(ダイアモンド220)。エントリがTLBにあるバーチャルアドレスのためのものでない場合、ページミスハンドラが、エントリを取得し、TLBに格納するため実行される(ブロック225)。
【0026】
エントリがTLBにあるとき、それは対応する物理アドレスの位置を決定するため解析される(ブロック230)。例えば、後述されるように、各TLBエントリは、対応するページがローカルメモリ(すなわち、システムメモリ)又はリモートメモリにあるか示すための情報を含むものであってもよい。物理アドレスがシステムメモリにある場合(ダイアモンド240)、制御はブロック245に移行し、メモリアクセスリクエストがシステムメモリに対して実行され、リクエストされたデータがレスポンスとしてリクエスト元に提供される(ブロック250)。
【0027】
ダイヤモンド240において、物理アドレスがシステムメモリにないと判断された場合、制御はブロック260に移行する。ブロック260において、データを含むメモリアクセスリクエストをリモートメモリ(アクセラレータのローカルメモリなど)に送信するため、リバースプロキシ実行リクエストが用意される。各種実施例では、このリクエストは、特別なロード/ストアリクエストなどとして非コヒーラントインターコネクトにおいてトンネリングされる。このリバースプロキシ実行リクエストがアクセラレータ上で処理された後、制御はブロック270に移行し、リバースプロキシ実行リクエストの結果が受信される。すなわち、ブロック250に関連して上述されたように、リクエストされたデータが受信され、レスポンスがリクエスト元に提供可能である。
図2の実施例では特定の実現形態が示されたが、本発明の範囲はこれに限定されるものでない。
【0028】
図3を参照して、本発明の一実施例によるリバースプロキシ実行のための処理を示すブロック図が示される。
図3に示されるように、CPU120からMMU125へのバーチャルアドレス(V.A)Xにアクセスする(1)リクエストが失敗すると(例えば、ルックアップが、当該ページはアクセラレータカードのローカルメモリにあることを示すなど)、リバースプロキシ実行リクエストが用意され、アクセラレータカード150に送信される(2)。次に、アクセラレータ160は、メモリアクセスリクエストをMMU165に送信する(3)ため当該リクエストを処理し、次にMMU165はローカルメモリ180のリクエストされたページにアクセスする(4)。これにより、リクエストされたデータはCPU120に送り返すことができる(5)。アクセラレータからのデータはDMAを介しホストCPUに送信可能であるか、又は見せかけのLD/ST実現形態内のホストの下ですべてをポーリング可能である(マイクロコードフローなどにおいて)ことに留意されたい。すなわち、CPUがリモートメモリ位置へのアクセスを送出すると、CPUは、DMAインタラプトを待機するか又はアクセラレータからの“リターン”データを取得するためアクティブなポーリングを実行する見せかけのLD/STを実行するためのマイクロコードルーチンへのアクセスに移る。(V.A)Xへのメモリアクセスの完了は、バーチャルアドレスXにおいて特定されるメモリ位置にアクセスしたアプリケーションプログラムに透過な方法により実行される。
【0029】
全体的に、RPE処理は非一様メモリアーキテクチャ(NUMA)システムにおける長い遅延メモリアクセス処理と同様に機能する。基礎となるトンネリング機構は、ファブリックの性質に応じて変更される。PCIe
TMファブリックの場合、ルート(システム)とチャイルド(アクセラレータ)コンプレックスとの間の非対称性によって、CPUは通常はアクセラレータのローカルメモリの何れにもアクセスできないが、アクセラレータがシステムメモリの範囲にアクセス可能な場合、RPE実行機構の各種最適化は、システムメモリ又はアクセラレータのローカルメモリの一部をプライベートメモリとして利用することによって実現される。一実施例では、システムメモリの一部はリモートアクセラレータのローカルメモリのキャッシュとして確保可能である。あるいは、プライベートメモリ領域は、リモートアクセスされるバーチャルページを保持するためのバッファとして機能するよう割当て可能である。例えば、リモートページにマップされるバーチャルアドレスXへのアクセスは、ページ全体がリモートメモリアクセスを減少させるため、以降のアクセスのために利用可能なローカルバッファに一時的に読み込まれる。
【0030】
一実施例では、プロキシ実行機構は、アクセラレータのシーケンサ上で起こるページフォルト状況を処理するのに利用され、これは、当該フォルトが処理のためCPUに送信可能であることを意味する。これは、アクセラレータのシーケンサ上のMMUがCPUのMMUとコヒーラントであり、すべてのポイントがOSの同一のページテーブルになることを意味する。CPU又はアクセラレータ上での処理により生じるか否かにかかわらず、バーチャルページへのページフォルトは、CPUに従来のページ処理機構を利用して当該ページをメモリに配置させる。フォルトがアクセラレータのシーケンサ上のアクセスから生じたものである場合、CPUは、新たなページをリモートアクセラレータのローカル物理メモリにインストールする。そうでない場合、ページはシステムメモリに配置可能である。リモートアクセラレータのローカルメモリにマップされたバーチャルアドレスへのCPU上での非フォルトアクセスは、アクセラレータの物理ページにマップすることを保障し、プロキシ実行の完了を保障する。
【0031】
図4を参照して、本発明の一実施例によるプロキシ実行方法のフロー図が示される。
図4に示されるように、アクセラレータにより所望されるデータがそれのローカルメモリにないときにプロキシ実行を実行するため、方法300が利用される。
【0032】
図4に示されるように、方法300は、アクセラレータからメモリアクセスリクエストを受信することにより開始される(ブロック310)。その後、当該リクエストのバーチャルアドレスのエントリがアクセラレータのTLBにあるか判断される(ダイアモンド350)。当該リクエストのバーチャルアドレスのエントリがアクセラレータのTLBにある場合、アクセラレータのローカルメモリがこのバーチャルアドレスを用いてアクセスされ(ブロック370)、リクエスト元にレスポンスが提供される(ブロック380)。
【0033】
他方、エントリがTLBにない場合、制御はブロック330に移行し、プロキシ実行リクエストがCPUに送信される(ブロック330)。リクエストされた変換がCPUのMMUにないとすると、ページミスハンドラがエントリを取得するため実行される(ブロック335)。さらに、このバーチャルアドレスに対応するページが、システムメモリからアクセラレータのローカルメモリに移動される(ブロック340)。その後、再開メッセージがCPUからアクセラレータに送信される(ブロック350)。エントリがMMUにあるため、メモリアクセスリクエストが、リクエストされたデータを取得するためローカルメモリに対して実行される(ブロック370)。リクエストされたデータを含むレスポンスがリクエスト元に提供される(ブロック380)。
【0034】
図5を参照して、本発明の一実施例によるプロキシ実行処理を示すブロック図が示される。
図5に示されるように、プロキシ実行hまアクセラレータがローカルMMU165にないバーチャルアドレス(V.A)Xへのアクセスをリクエストしたときに行われる(1)。このページフォルトに対するプロキシ実行リクエスト(2)が、CPU120に送信される。
図5は、MMU165がプロキシ実行リクエストをCPU120に直接送信する実現形態を示す。しかしながら、プロキシがページウォーキングコード(MMUがどのように管理されるかに応じてマイクロコード、ファームウェア又はソフトウェア)により実現されるとき、このコードはプロキシリクエストを送信可能である。CPU120は、当該リクエストをローカルMMU125に送信し(3)、MMU125はさらにリクエストされたバーチャルアドレスに対してシステムメモリ130のページにアクセスする(4)。図示されるように、リクエストがデータの読み込むに対するものであるとき、ページ全体がシステムメモリ130からローカルメモリ180に送信される(5)。一実施例では、データ転送は、データをシステムメモリ130の領域からローカルメモリ180の領域にコピーするようDMAをプログラムするCPU120を介して行われる。あるいは、CPU120は、上述されるマイクロコードを用いて実現されるなど、“見せかけの”各ロード/ストア命令シーケンスを実行することによってコピーを実行可能である。その後、CPU120は、再開メッセージをアクセラレータ160に送信し(6)、アクセラレータ160はさらにMMU165へのアクセスをリトライする(7)。そして、現在の変換を検出し、対応するデータをローカルメモリ180から取得するためリクエストが送信される(8)。ローカルメモリ180のデータへのアクセスを可能にするため、MMU165がアドレッシング可能とされることに留意されたい。CPU120は、システムメモリ130上のページテーブルからMMU165への変換エントリを更新するため、“見せかけ”の各LD/STを直接実行する。あるいは、CPU120は、アクセラレータサイドにローカルメモリ180へのデータ転送を介し変換を含むページテーブル又はその一部をコピーすることが可能であり、その後、ローカルに配置されたページテーブルをウォークするページウォーカを有するアクセラレータ160を再開する。
【0035】
CPU上のバーチャルアドレスアクセスがローカル(システムメモリにおいて)又はリモート(アクセラレータのメモリにおいて)であるか区別するための情報は、システムメモリコンフィギュレーションに関する完全な知識を有するBIOS(Basic Input/Output System)から当該情報を獲得するOSから与えられる。RPEをサポートするため、BIOSは、アクセラレータに関する通知されたメモリサイズを列挙する。この処理は、BIOSによりブート時に実行されるROM/RAMチップセレクトに類似している。その後、BIOSは、システムメモリとアクセラレータローカルメモリとの和を報告し、OSにメモリの何れの範囲がローカルシステムメモリであるか、またリモートであるかを通知する。
【0036】
各種実施例では、メモリパーティション記述子と呼ばれる、BIOSのシステムレベル状態、すなわち、記述子アーキテクチャ状態セットが、このレンジ情報、例えば、最小ではシステムメモリのレンジ情報を記録する。これにより、この範囲外の物理アドレスは、リモートとして特定される。一実施例では、この情報はBIOSビルトインデータ構造に格納可能である。メモリ記述子はまた、ソフトウェアとマイクロコードとの双方にアクセス可能なマシーンに固有のレジスタにプライベート状態として格納される。このようなレンジ情報はまずOSのスタート前にBIOSにより確定され、これらの状態の使用はOSに従属しないことに留意されたい。すなわち、RPE機構は、リモートメモリとローカルメモリとの区別を意識しないレガシーOSにより機能可能である。
【0037】
CPUにより処理される所与のLD/STについて、各TLB変換に物理アドレスとメモリパーティション記述子とを比較させ、それがローカルシステムメモリかリモートアクセスであるか決定させることは困難である。代わりに、このようなチェックはMMUのクリティカルなパスから離れて実行可能であり、新たなTLBエントリが充填されると、ページウォーク上でのみ実行される。一部の実施例では、各TLBエントリは、対応するエントリがリモート又はローカルシステムメモリにあるか示すための属性ビットを含むことが可能である。新たなTLBエントリがインストールされると、ページウォーカは、メモリパーティション記述子に対してページテーブルエントリの物理アドレス範囲のレンジチェックを実行可能である。この機構は、OSがローカルに又はリモートにマップされるページとを区別しない場合であっても機能することに留意されたい。
【0038】
一部の実施例では、OSは、アクセラレータのローカルメモリを用いてアクセラレータが頻繁にアクセスするアプリケーションのコード及びデータの一部のみを保持することによって、アクセラレータのローカルメモリの利用の背後にあるポリシーを処理することができる。OSがアウェアでない場合、ランタイムレイヤ又は他のエンティティなどのロカリティ原理は、システムメモリ又はアクセラレータローカルメモリにおいてアクセスがより頻繁に発生する場所に近いワーキングセットを移動するのに役立つ。
【0039】
さらに、上述されるように、OSページテーブルフォーマットは、対応するページがローカルメモリ又はリモートメモリに格納されるか示すための属性ビットを有することが可能である。このビットは、OSがバーチャルアドレスと物理アドレスとのマッピングを確定するとマークでき、各物理ページに対して、OSは当該ページをローカル又はリモートとしてマークするため、メモリパーティション記述子によりチェックすることができる。このように、範囲のチェックはインストールされたTLBエントリに対して実行される必要がない。アプリケーションがアクセラレータ上のメモリにアクセス可能にするため、CPUは属性ビットを解析し、これにより、それが所与のバーチャルアドレスへのロード/ストアをリモート物理メモリ位置に指定可能となる。さらに、属性ビットはまたリモートに実行されるアクセスの回数を追跡し、リモートアクセスの回数が特定の閾値を超える場合、ページが他の場所に移動可能となるように、OSソフトウェアがリモートアクセスの回数に基づきポリシーを実現することを可能にする。
【0040】
ページをアクセス不可又は存在しないとしてマーク付けするなど、バーチャルページのプロテクションを実行し、結果としてのフォルトを処理することによって、リモートメモリアクセスを実現することが可能であるが、メモリアクセスが行われる毎にページフォルトハンドラが実行される必要があるため、アクセス遅延は増大する。その代わりに、本発明の一実施例を用いて、CPUは、リモートメモリ位置アドレスをバスコントローラに提供することが可能であり、バスコントローラは当該アクセスをアクセラレータのメモリ位置に誘導する。例えば、CPUは、ロード/ストアを完了させるためのソフトウェアからの支援なしにリモートメモリ位置にアクセスするため、バスコントローラにおいて規定された標準的なレジスタセットにアクセスすることによって、ロード/ストアを直接リダイレクトすることが可能である。このデータ転送はDMA(バルク転送)によるものであってもよいし、又はキャッシュライン粒度によるスカラー転送であってもよい。バーチャルページをリモートメモリ位置からローカルメモリ位置に(またその反対)透過的に移動させる機能は、ソフトウェア(アプリケーションなど)がデータの移動を明示的に管理することなくアクセラレータとデータを共有することを可能にする。アクセラレータがシステムに接続されず、又は非応答状態に入ると、アドレス変換ユニットは、ロード/ストアが失敗した理由を示すページフォルトを生成する。
【0041】
図6を参照して、本発明の一実施例によるページテーブルにおける一例となるエントリ400が示される。図示されるように、各エントリは、メモリに格納されているページの第1アドレスを示すPBAを格納するページベースアドレス(PBA)を有する。さらに、各エントリは、当該ページを有するシステムにあるアクセラレータを参照するためのnビットアクセラレータ識別子(ID)を格納するアクセラレータフィールド420と、対応するバーチャルページがローカルメモリ又はおそらく多数のリモートメモリの1つに格納されているかに関するnビットインジケータなどを格納するローカル/リモートフィールド430と、リモートメモリになされるアクセスの回数をカウントするmビットカウンタを格納するカウンタフィールド440と(カウンタは、ページがリモートメモリにある場合にのみアクティブとなるよう)、ページの異なる属性を示すための各種ビットを格納する属性フィールド450とを有する。
【0042】
一実施例では、アクセスカウンタの値がゼロになると、例外処理が引き起こされる。この例外処理は、ページ移動のためのバーチャルメモリ管理カーネルなどのOSソフトウェアが与えられたバーチャルページへのアクセス回数に基づき移動ポリシーを管理することを可能にする。すなわち、ソフトウェアは、バーチャルアドレススペースがCPU又はアクセラレータにより近くにある物理メモリページをマップすることが可能となるように、アプリケーションが処理するバーチャルアドレススペースを管理することができる。PCIe
TMバスに接続されるアクセラレータについて、バスがコヒーラントでないとき、基礎となるランタイムソフトウェアは、ソフトウェアベースのコヒーレンス機構を実現してもよい。何れかの共有データ構造への競合するアクセスに対して、セマフォなどの同期制御は、生成スレッドがデータをコンシューマにハンドオフする準備ができるまでセマフォをリリースしないように利用可能である。生成スレッドがセマフォをリリースする前、それは、共有データに関するすべてのダーティキャッシュラインをメモリにフラッシュする必要がある。これは、アクセラレータ上のコンシューマスレッドがメモリから共有データへのアクセスを開始すると、ホストCPUとアクセラレータとの間のファブリックがキャッシュコヒーレンシをサポートしなくても、データがコヒーラントであることを保障する。他方、アクセラレータが共有データの処理を終了すると、同様の同期及びフラッシュ機構が、メモリベースデータコヒーレンシを保障するのに利用可能である。CPUとアクセラレータとの間のファブリックがキャッシュコヒーラントである場合(例えば、PCIeの以降の生成など)、生成スレッドがセマフォをリリースする前のハンドオフに対して、メモリへのダーティラインのフラッシュは必要とされない。
【0043】
OSサポートによる実施例では、アクセラレータ上のメモリの割当て及び管理は、アプリケーションに与えられるシステムメモリページを割当て及び管理し、バーチャルアドレスを物理アドレスに変換するためCPUにより用いられるページテーブルを管理するOSのメモリマネージャと協調して実行可能である。メモリマネージャはまた、リモートメモリにアクセスするためのリダイレクションによって行われる例外処理を処理し、CPUとアクセラレータとの間の物理ページの移動の背後にあるポリシーを管理する。ページ移動ポリシーは、ワークロードの動作に応じて可変的であり、潜在的にはリモートアクセスの回数を減少させるか(システムメモリへの対応するページの移動前に)、又はアクセス回数が最大となる位置にページを移動させるファーストタッチポリシーを実現するため変更可能である。コード及び読み出し専用データページは、物理ページの不要な移動を回避するため、複数のメモリに複製可能である。プログラムの実行中に処理されるデータを含むデータページのみが、データページへのアクセスのロカリティに基づき移動される。
【0044】
図7を参照して、本発明の一実施例によるプロセッサのブロック図が示される。
図7に示されるように、プロセッサ500は、マルチステージパイプラインアウトオブオーダプロセッサである。プロセッサ500は、本発明の一実施例によるプロキシ実行及びリバースプロキシ実行に関連して用いられる各種特徴を示すため、
図7において簡略化された図により示される。
【0045】
図7に示されるように、プロセッサ500は、実行対象のマクロ命令をフェッチし、プロセッサにおける以降の利用のために準備するのに利用されるフロントエンドユニット510を有する。例えば、フロントエンドユニット510は、フェッチユニット504と、命令キャッシュ506と、命令デコーダ508とを有する。一部の実現形態では、フロントエンドユニット510はさらに、マイクロ処理ストレージと共にマイクロコードストレージと一緒にトレースキャッシュを有してもよい。フェッチユニット504は、メモリ又は命令キャッシュ506などからマクロ命令をフェッチし、それらをプリミティブ、すなわち、プロセッサによる実行用のマイクロ処理に復号化するため、命令デコーダ508に供給する。フロントエンドユニット510はさらに、ここに記載されるプロキシ実行及びリバースプロキシ実行を処理するための追加された状態情報を含むエントリを格納するため、本発明の一実施例によるMMU509を有する。このような情報に基づき、システムメモリと1以上のアクセラレータのローカルメモリとを含む共有バーチャルメモリスペースにおける各処理は、データを移動させるためのプログラムによるサポートなしに効率的に実行可能となる。
【0046】
マイクロ命令を受信し、実行用にそれらを準備するのに用いられるアウトオブオーダ(OOO)エンジン515が、フロントエンドユニット510と実行ユニット520との間に接続される。より詳細には、OOOエンジン515は、マイクロ命令フローをリオーダし、実行に必要な各種リソースを割当て、レジスタファイル530及び拡張されたレジスタファイル535などの各種レジスタファイル内の記憶位置に論理レジスタのリネーミングを提供するための各種バッファを有する。レジスタファイル530は、整数及び浮動小数点演算のための別々のレジスタファイルを有する。拡張されたレジスタファイル535は、レジスタ毎に256又は512ビットなどのベクトルサイズ単位のストレージを提供する。
【0047】
各種リソースは、例えば、各種整数、浮動小数点、SIMD(Single Instruction Multiple Data)論理ユニット、特殊なハードウェアなどを含む実行ユニット520に存在する。結果は、リタイアメントロジック、すなわち、リオーダバッファ(ROB)540に提供される。より詳細には、ROB540は、実行される命令に係る情報を受信するための各種アレイ及びロジックを有する。この情報は、その後にROB540により調べられ、命令が有効にリタイアされ、結果データがプロセッサのアーキテクチャ状態にコミット可能であるか、又は命令の適切なリタイアメントを回避する1以上の例外処理が実行されたか判断される。もちろん、ROB540は、リタイアメントに係る他の処理を処理してもよい。
【0048】
図7に示されるように、ROB540は、本発明の範囲はこれに限定されるものでないが、一実施例では低レベルキャッシュ(L1キャッシュなど)であってもよいキャッシュ550に接続される。また、実行ユニット520は、キャッシュ550に直接接続可能である。キャッシュ550から、データ通信がより高いレベルのキャッシュ、システムメモリなどにより実行される。
図7の実施例にはこの高レベルにより示されるが、本発明の範囲がこれに限定されるものでないことは理解されるであろう。
【0049】
例えば、一部の実現形態では、アクセラレータはプロセッサとオンチップに一体化可能である。例えば、1つのアーキテクチャでは、多数の個別のプロセッサコアを、グラフィックスプロセッサ又は他の特殊な処理ユニットなどの異質なコアでありうるアクセラレータと共に含むマルチコアプロセッサであってもよい。一般に、プロキシ実行及びリバースプロキシ実行の処理は、コヒーラント又は非コヒーラントリンクを含む何れかのタイプのインターコネクトによりコアに接続されるオンチップアクセラレータに対して、上述したのと同様にして実行されてもよい。
【0050】
図8を参照して、本発明の他の実施例によるシステムのブロック図が示される。
図8に示されるように、システム600は、単一の半導体ダイ上に形成され、各種コンポーネントを含むマルチコアプロセッサ610を有する。具体的には、
図8の実現形態では、プロセッサ610は、各コアがTLB625a〜625nを有し、上述されるような変換及び追加フィールドを有するエントリを含む複数のコア620a〜620nを有する。また、これらのコアは、各コアが自らのキャッシュメモリを有する点で、共有される最後のレベルのキャッシュである共有キャッシュ640に接続可能である。図示される実現形態では、このような2つのアクセラレータが示されるが、本発明の範囲はこれに限定されるものでない。アクセラレータとコアとの接続は、PCIe
TMリンク、共有バスインターコネクトなどのコヒーラント又は非コヒーラントリンクなどの任意のタイプのインターコネクトによるものであってもよい。アクセラレータ630a,630bは、上述されるエントリを有するTLB635を有するよう示されている。さらに、プロセッサ610は、メモリコントローラ650を有する。
【0051】
一実現形態では、プロセッサ610はメモリ660に接続され、メモリ660は、プロセッサコアに関連付け可能な第1パーティション665aと、アクセラレータに関連付け可能な第2パーティション665bとを含む複数のパーティションに分割可能なシステムメモリであってもよい。もちろん、コア及びアクセラレータに係るメモリは、異なるポートを介し異なるメモリモジュールとして異なって構成されてもよい。プロセッサ610はさらにチップセット670に接続され、チップセット670は入出力デバイス、記憶装置、他のアクセラレータなどの各種周辺装置に接続可能である。
【0052】
従って、コヒーラント又は非コヒーラントとすることができるリンクを介し接続されるアクセラレータ又は一体化されたアクセラレータを有することが可能な異なるシステムにおいて、プロキシ実行とリバースプロキシ実行とを処理するための実施例が提供できる。
【0053】
各実施例はコードにより実現され、命令を実行するようシステムをプログラムするのに利用可能な命令を格納する記憶媒体に格納されてもよい。この記憶媒体は、以下に限定されるものでないが、フロッピー(登録商標)ディスク、光ディスク、ソリッドステートドライブ(SSD)、CD−ROM(Compact Disk−Read Only Memory)、CD−RW(Compact Disk−Rewritable)、光磁気ディスクを含む何れかのタイプのディスク、ROM(Read−Only Memory)などの半導体デバイス、DRAM(Dynamic Random Access Memory)、SRAM(Static Random Access Memory)、EPROM(Erasable Programmable Read−Only Memory)、フラッシュメモリ、EEPROM(Electrically Erasable Programmable Read−Only Memory)などのRAM、磁気若しくは光カード、又は電子命令を格納するのに適した他の何れかのタイプの媒体を含む。
【0054】
本発明が限定数の実施例に関して説明されたが、当業者は多数の改良及び変形を理解するであろう。添付した請求項はこのようなすべての改良及び変形を本発明の真の趣旨及び範囲内に属するものとしてカバーすることが意図される。