(57)【要約】バイトアドレス可能メモリとして、例えば不揮発性メモリ(ＮＶＭ)等のブロックアドレス可能入出力（Ｉ／Ｏ）デバイスにアクセスする方法及びシステムについて説明する。ＰＣＩｅ（Peripheral Component Interconnect Express）スイッチに接続されたフロントエンドプロセッサは、バイトアドレス可能性をエミュレートするために、ブロックアドレス可能Ｉ／Ｏデバイスへのフロントエンドインタフェースとして機能する。例えばグラフィックス処理ユニット（ＧＰＵ）等のＰＣＩｅデバイスは、フロントエンドプロセッサを介して、ブロックアドレス可能Ｉ／Ｏデバイスから必要なバイトに直接アクセスすることができる。ＰＣＩｅ互換デバイスは、システムメモリ及びホストコンピュータを介することなく、ブロックＩ／Ｏデバイスからデータにアクセスすることができる。一実施形態では、システムは、ブロックアドレス可能Ｉ／Ｏ、バイトアドレス可能Ｉ／Ｏ、並びに、ホストプロセッサ、ＧＰＵ及び任意の他のＰＣＩｅ互換デバイスによるバイトアドレス可能メモリへのダイレクトアクセスをサポートする、これらのハイブリッドを含むことができる。【選択図】図３
2020502694.tif 000002
【特許請求の範囲】
【請求項１】
データを転送する方法であって、
プロセッサがブロック入出力（Ｉ／Ｏ）デバイスへのアクセスを必要とする場合に、フロントエンドプロセッサが、ローカルスイッチを介してデータ転送コマンドを受信することと、
前記データ転送コマンドを第１パスを介して受信した場合に、前記フロントエンドプロセッサがバイトアドレス可能処理を行うことと、
バイトアドレス可能処理の場合に、前記データ転送コマンドにおいて要求されたバイトが前記フロントエンドプロセッサに関連するキャッシュ内に存在するかどうかをチェックすることと、
前記データ転送コマンドが読み出しである場合に、前記バイトが前記キャッシュ内に存在しない場合に、前記バイトを含むブロックを前記ブロックＩ／Ｏデバイスから読み出すことと、前記バイトを、前記ローカルスイッチを介して前記フロントエンドプロセッサからターゲットプロセッサに直接転送することと、を含む、
方法。
【請求項２】
前記プロセッサは、グラフィックス処理ユニット（ＧＰＵ）又は中央処理装置（ＣＰＵ）であり、前記ターゲットプロセッサは、ＧＰＵ又はＣＰＵであり、前記ローカルスイッチは、ＰＣＩｅ（Peripheral Component Interconnect Express）スイッチ又はルートコンプレックスであり、前記ブロックＩ／Ｏデバイスは、不揮発性メモリ（ＮＶＭ）デバイスである、
請求項１の方法。
【請求項３】
前記第１パスは、前記ローカルスイッチのメモリアパーチャで前記データ転送コマンドを受信する、
請求項１の方法。
【請求項４】
前記データ転送コマンドの宛先アドレスが前記メモリアパーチャにあるかどうかを判別することを含む、
請求項３の方法。
【請求項５】
前記ブロックが前記ブロックＩ／Ｏデバイスから読み出された場合に、前記ブロックを前記キャッシュに記憶することを含む、
請求項１の方法。
【請求項６】
前記データ転送コマンドを第２パスを介して受信した場合に、前記フロントエンドプロセッサがブロックアドレス可能処理を行うことを含む、
請求項３の方法。
【請求項７】
前記第２パスは、前記ローカルスイッチのレジスタアパーチャで前記データ転送コマンドを受信する、
請求項６の方法。
【請求項８】
前記データ転送コマンドの宛先アドレスが前記レジスタアパーチャにあるかどうかを判別することを含む、
請求項７の方法。
【請求項９】
前記データ転送コマンドが書き込みである場合に、前記バイトが前記キャッシュ内に存在する場合に前記キャッシュを更新することと、データを前記ブロックＩ／Ｏデバイスにフラッシュバックすることと、を含む、
請求項１の方法。
【請求項１０】
データを転送する装置であって、
少なくとも１つのグラフィックス処理ユニット（ＧＰＵ）と、
少なくとも１つのブロック入出力（Ｉ／Ｏ）デバイスと、
前記少なくとも１つのＧＰＵに接続されたローカルスイッチと、
前記ローカルスイッチ及び前記少なくとも１つのブロックＩ／Ｏデバイスに接続されたフロントエンドプロセッサと、
前記フロントエンドプロセッサに接続されたキャッシュと、を備え、
前記フロントエンドプロセッサは、
前記少なくとも１つのブロックＩ／Ｏデバイスへのアクセスを必要とする場合に、データ転送コマンドを前記ＧＰＵから受信し、
前記データ転送コマンドを第１パスを介して受信した場合に、前記データ転送コマンドをバイトアドレス可能処理し、
バイトアドレス可能処理の場合に、前記データ転送コマンドにおいて要求されたバイトが前記キャッシュ内に存在するどうかをチェックし、
前記データ転送コマンドが読み出しである場合に、前記バイトが前記キャッシュ内に存在しない場合に、前記バイトを含むブロックを前記少なくとも１つのブロックＩ／Ｏデバイスから読み出し、前記バイトをターゲットプロセッサに直接転送する、
装置。
【請求項１１】
前記ローカルスイッチ内のメモリアパーチャであって、前記第１パスは、前記ローカルスイッチの前記メモリアパーチャで前記データ転送コマンドを受信する、メモリアパーチャを備える、
請求項１０の装置。
【請求項１２】
前記フロントエンドプロセッサは、
前記データ転送コマンドの宛先アドレスが前記メモリアパーチャにあるかどうかを判別する、
請求項１１の装置。
【請求項１３】
前記フロントエンドプロセッサは、
前記ブロックが前記少なくとも１つのブロックＩ／Ｏデバイスから読み出された場合に、前記ブロックを前記キャッシュに記憶する、
請求項１０の装置。
【請求項１４】
前記フロントエンドプロセッサは、
前記データ転送コマンドを第２パスを介して受信した場合に、前記データ転送コマンドをブロックアドレス可能処理する、
請求項１０の装置。
【請求項１５】
前記ローカルスイッチのレジスタアパーチャであって、前記第２パスは、前記ローカルスイッチの前記レジスタアパーチャで前記データ転送コマンドを受信する、レジスタアパーチャを備える、
請求項１４の装置。
【請求項１６】
前記フロントエンドプロセッサは、
前記データ転送コマンドの宛先アドレスが前記レジスタアパーチャにあるかどうかを判別する、
請求項１５の装置。
【請求項１７】
前記フロントエンドプロセッサは、
前記データ転送コマンドが書き込みである場合に、前記バイトが前記キャッシュに存在する場合に前記キャッシュを更新し、データを前記少なくとも１つのブロックＩ／Ｏデバイスにフラッシュバックする、
請求項１０の装置。
【請求項１８】
データを転送するシステムであって、
プロセッサ及びシステムメモリを含むホストプロセッサと、
少なくとも１つのソリッドステートグラフィックス（ＳＳＧ）カードと、を備え、
各ＳＳＧカードは、
少なくとも１つのグラフィックス処理ユニット（ＧＰＵ）と、
少なくとも１つのブロック入出力（Ｉ／Ｏ）デバイスと、
前記ホストプロセッサ及び前記少なくとも１つのＧＰＵに接続されたローカルスイッチと、
前記ローカルスイッチ及び各ブロックＩ／Ｏデバイスに接続されたフロントエンドプロセッサと、
前記フロントエンドプロセッサに接続されたキャッシュと、を備え、
前記フロントエンドプロセッサは、
前記少なくとも１つのブロックＩ／Ｏデバイスへのアクセスを必要とする場合に、データ転送コマンドを前記ＧＰＵ又は前記ホストプロセッサから受信し、
前記データ転送コマンドを第１パスを介して受信した場合に、前記データ転送コマンドをバイトアドレス可能処理し、
バイトアドレス可能処理の場合に、前記データ転送コマンドにおいて要求されたバイトが前記キャッシュ内に存在するかどうかをチェックし、
前記データ転送コマンドが読み出しである場合に、前記記バイトが前記キャッシュ内に存在しない場合に、前記バイトを含むブロックを前記ブロックＩ／Ｏデバイスから読み出し、前記バイトを、前記ローカルスイッチを介してターゲットプロセッサに直接転送する、
システム。
【請求項１９】
前記ローカルスイッチのメモリアパーチャを備え、
前記第１パスは、前記ローカルスイッチの前記メモリアパーチャで前記データ転送コマンドを受信し、前記フロントエンドプロセッサは、前記データ転送コマンドの宛先アドレスが前記メモリアパーチャにあるかどうかを判別する、
請求項１８のシステム。
【請求項２０】
前記フロントエンドプロセッサは、前記データ転送コマンドを第２パスを介して受信した場合に、前記データ転送コマンドをブロックアドレス可能処理し、前記ローカルスイッチは、レジスタアパーチャを含み、前記第２パスは、前記ローカルスイッチの前記レジスタアパーチャで前記データ転送コマンドを受信する、
請求項１８のシステム。
【請求項２１】
処理システムで実行されると、データを転送する方法を前記処理システムに実行させる命令を含むコンピュータ可読記憶媒体であって、
前記方法は、
プロセッサが、ブロック入出力（Ｉ／Ｏ）デバイスへのアクセスを必要とする場合に、フロントエンドプロセッサが、ローカルスイッチを介してデータ転送コマンドを受信するステップと、
前記フロントエンドプロセッサが、前記データ転送コマンドを第１パスを介して受信した場合に、バイトアドレス可能処理を行うステップと、
バイトアドレス可能処理の場合に、前記データ転送コマンドにおいて要求されたバイトが前記フロントエンドプロセッサに関連するキャッシュ内に存在するかどうかをチェックするステップと、
前記データ転送コマンドが読み出しである場合に、前記バイトが前記キャッシュ内に存在しない場合に、前記バイトを含むブロックを前記ブロックＩ／Ｏデバイスから読み出すステップと、前記バイトを、前記ローカルスイッチを介して前記フロントエンドプロセッサからターゲットプロセッサに直接転送するステップと、を含む、
コンピュータ可読記憶媒体。
【請求項２２】
前記第１パスは、前記ローカルスイッチのメモリアパーチャで前記データ転送コマンドを受信し、
前記データ転送コマンドの宛先アドレスが前記メモリアパーチャにあるかどうかを判別するステップと、
前記データ転送コマンドを第２パスを介して受信した場合に、前記データ転送コマンドをブロックアドレス可能処理するステップであって、前記第２パスは、前記ローカルスイッチのレジスタアパーチャで前記データ転送コマンドを受信する、ステップと、を含む、
請求項２１のコンピュータ可読記憶媒体。
【請求項２３】
前記データ転送コマンドが書き込みである場合に、前記バイトが前記キャッシュに存在する場合に前記キャッシュを更新するステップと、データを前記ブロックＩ／Ｏデバイスにフラッシュバックするステップと、を含む、
請求項２１のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年１２月２３日に出願された米国特許出願第１５／３８９，８１１号の利益を主張するものであり、この内容は参照により本明細書に完全に記載されているものとして援用される。
【背景技術】
【０００２】
グラフィックス処理ユニット（ＧＰＵ）は、名目上、ＧＰＵで実行される動作をサービスするために、或る量のローカルメモリ又は専用メモリ（以下、ローカルと呼ぶ）で構成される場合がある。例えば、ローカルメモリは、ダイナミックランダムアクセスメモリとすることができる。また、そのローカルメモリ等のバイトアドレス可能デバイスを有するＧＰＵは、一種のブロックアドレス可能メモリである不揮発性メモリ（ＮＶＭ）にアクセスすることができる。ＧＰＵ又は特定のアプリケーションがＮＶＭとローカルメモリとの間のデータ転送を必要とする場合、ホストコンピューティングシステム上で動作するオペレーティングシステム（ＯＳ）、ディスプレイドライバ、デバイスドライバ、又は、同様のハードウェア／ソフトウェアエンティティは、通常、データ転送プロセスを制御又は管理する。このデータ転送プロセスは、２ホッププロセス（つまり、最初にＮＶＭからシステムメモリに、次にシステムメモリからローカルメモリに）が必要である。特に、ＮＶＭデータは、最初に、ＮＭＶコントローラのブロック入出力（Ｉ／Ｏ）転送メカニズムを介して、システムメモリに転送されなければならない。次に、ＧＰＵは、ローカルメモリのデータにアクセスすることができる。これには、少なくともシステムメモリの使用が含まれ、トラフィック及び輻輳が増加する。
【０００３】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【０００４】
【図１】特定の実施形態による、ホストコンピューティングシステム及びソリッドステートグラフィックス（ＳＳＧ）カードを有する処理システムを示す図である。
【図２】一般的なソフトウェアスタック及びハードウェアアーキテクチャを示す図である。
【図３】特定の実施形態による、ホストコンピューティングシステム及びソリッドステートグラフィックス（ＳＳＧ）カードを有する処理システムを示す図である。
【図４】特定の実施形態による、ソフトウェアスタック及びハードウェアアーキテクチャを示す図である。
【図５】特定の実施形態による、図３及び図４の処理システムを使用するフロー図である。
【図６】特定の実施形態による、図３及び図４の処理システムを使用するフロー図である。
【図７】１つ以上の開示された実施形態を実施し得る例示的なデバイスのブロック図である。
【発明を実施するための形態】
【０００５】
本願は、２０１６年１２月２３日に出願された米国特許出願第１５／３８９，５９６号の「Method and Apparatus for Connecting Direct Access From Non-Volatile Memory to Local Memory」という名称の同時係属出願、２０１６年１２月２３日に出願された米国特許出願第１５／３８９，７４７号の「Method and Apparatus for Connecting Non-volatile Memory locally to GPU through a Local Switch」という名称の同時係続出願、及び、２０１６年１２月２３日に出願された米国特許出願第１５／３８９，９０８号の「Method and Apparatus for Integration of Non-volatile Memory」という名称の同時係属出願に関連しており、これらは、言及することによって完全に記載されているかのように援用される。
【０００６】
本明細書では、ブロックアドレス可能入出力（Ｉ／Ｏ）デバイス（例えば、不揮発性メモリ（ＮＶＭ）、及び、コントローラ又は他の同様に使用されるデバイス等）をバイトアドレス可能メモリとしてアクセスする方法及びシステムについて説明する。例えばＰＣＩｅ（Peripheral Component Interconnect Express）ルートコンプレックス及びスイッチ（まとめてＰＣＩｅスイッチ）等の高速シリアルコンピュータ拡張バスに接続されたフロントエンドプロセッサは、バイトアドレス可能性をエミュレートするために、ブロックアドレス可能Ｉ／Ｏデバイスへのフロントエンドインタフェースとして機能する。例えばグラフィックス処理ユニット（ＧＰＵ）又は他のＰＣＩｅ互換デバイス等のＰＣＩｅデバイスは、フロントエンドプロセッサを介して、ブロックアドレス可能Ｉ／Ｏデバイスから必要なバイトにダイレクトアクセスする。すなわち、ＰＣＩｅ互換デバイスは、システムメモリ及びホストプロセッサを介することなく、ブロックアドレス可能Ｉ／Ｏデバイスからデータにアクセスすることができる。これは、ホストプロセッサの関与を回避し、システムメモリコピーを実行する必要がないため、帯域幅を節約するという意味でＧＰＵの性能が向上する。
【０００７】
さらに、フロントエンドプロセッサは、アクセスされたブロックを記憶するためにキャッシュを使用するので、速度が向上し、レイテンシを減少させる。これにより、ブロックへのその後のアクセス時にブロック全体を転送する必要がなくなるので、利用可能な帯域幅及び容量が増加する。一実施形態では、システムは、ブロックアドレス可能Ｉ／Ｏと、バイトアドレス可能Ｉ／Ｏと、ホストプロセッサ、ＧＰＵ及び任意の他のＰＣＩｅ互換デバイスによるバイトアドレス可能メモリへのダイレクトアクセスをサポートするこれらのハイブリッドと、を含むことができる。図示及び説明のために、ＮＶＭ及びＮＶＭコントローラという用語は、本明細書及び特許請求の範囲を限定することなく、ブロックアドレス可能Ｉ／Ｏデバイスの一例として使用される。
【０００８】
図１は、特定の実施形態による、例示的な処理システム１００を示す図である。処理システム１００は、１つ以上のソリッドステートグラフィックス（ＳＳＧ）カード１１０に接続されたホストコンピューティングシステム１０５を含むことができる。ホストコンピューティングシステム１０５は、１つ以上の中央処理装置（ＣＰＵ）１２２とＬ２キャッシュ１２４とを含むプロセッサ１２０を含む。プロセッサ１２０は、例えばダイナミックランダムアクセスメモリ（ＤＲＡＭ）等のシステムメモリ１２６、及び、当業者に知られている他のコンポーネントに接続されるか通信する（まとめて「接続される」）ことができる。
【０００９】
概して、各ＳＳＧカード１１０は、プロセッサ１２０とインタフェースするための例えばＰＣＩｅ（Peripheral Component Interconnect Express）スイッチ（ＰＣＩｅスイッチ）１３０等の高速シリアルコンピュータ拡張バスを含むが、これに限定されない。ＰＣＩｅスイッチ１３０は、例示目的で示されており、他の電気インタフェース又は通信インタフェースを使用することができる。各ＳＳＧカード１１０は、関連するＮＶＭ１３４及びＰＣＩｅスイッチ１３０を介して接続された１つ以上のＧＰＵ１４０にアクセスするために、例えばＮＶＭｅ（NVM Express）又は不揮発性メモリホストコントローラインタフェース仕様（ＮＶＭＨＣＩ）デバイス等の１つ以上の不揮発性メモリ（ＮＶＭ）コントローラ１３２をさらに含む。各ＧＰＵ１４０は、Ｌ２キャッシュ１４２に接続することができ、メモリアーキテクチャにローカルに接続することができ、当該メモリアーキテクチャは、例えば、ローカルメモリ１４４、高帯域幅メモリ（ＨＢＭ）、ＤＤＲ４（double data rate fourth-generation synchronous dynamic random- access memory）、ＧＤＤＲ５（double data rate type five synchronous graphics random access memory）、ハイブリッドメモリキューブ、又は、例えば関連するコントローラと共に同様に使用される他のメモリとすることができる。図示及び説明のために、ローカルメモリという用語は、本明細書及び特許請求の範囲を限定することなく、メモリアーキテクチャの一例として使用される。各ＮＶＭコントローラ１３２は、関連するＮＶＭ１３４を管理し、アクセスすることができ、特に、ホストコンピューティングシステム１０５又はＧＰＵ１４０からの入力コマンドをデコードすることができる。この構成は例示的であり、他の構成も、本明細書及び特許請求の範囲内で実施することができる。
【００１０】
図２は、例えば図１の処理システム１００等の処理システムのソフトウェア相互運用性を示す図である。図２は、単純化された処理システム２０５を使用して、ソフトウェアスタック２００を使用するソフトウェア及びハードウェアの相互運用性を示している。処理システム２０５は、システムメモリ２５２に接続されたＣＰＵ２５０と、ＮＶＭ２６４に接続されたＮＶＭコントローラ２６２と、ローカルメモリ２７２に接続されたＧＰＵ２７０と、を含み、これら全ては、ＰＣＩｅスイッチ２８０を介して接続されている。
【００１１】
ソフトウェアスタック２００の機能は当業者には周知であり、以下は代表的且つ例示的な例である。概して、ソフトウェアスタック２００は、ＣＰＵ２５０上で動作する。ソフトウェアスタック２００は、管理スタック２１０と、ブロックアクセスＡＰＩ（application program interface）２２０と、ファイルアクセスＡＰＩ２３０と、ファイルシステム２４０と、ＮＶＭデバイスドライバ２４５と、例えばオペレーティングシステム（ＯＳ）（図示省略）等の他のソフトウェアコンポーネントと、を含むが、これらに限定されない。管理スタック２１０は、システム管理ツールを提供し、ファイルシステム２４０を制御及び構成し、ボリュームをフォーマットし、他の同様の機能を実行するのに使用される管理ユーザインタフェース（ＵＩ）２１２及び管理ライブラリ２１４を含む。ブロックアクセスＡＰＩ２２０及びファイルアクセスＡＰＩ２３０は、入出力（Ｉ／Ｏ）ＡＰＩ又はアクセスＡＰＩである。ブロックアクセスＡＰＩ２２０は、アプリケーション２２２によって使用され、標準ローデバイスアクセスプロトコル（standard raw device access protocol）２２４を介して、例えば２Ｋ、４Ｋ、８Ｋ、１６Ｋ、６４Ｋ、１２８Ｋ等の様々なブロックサイズのメモリにアクセスする。ファイルアクセスＡＰＩ２３０は、標準ファイルＡＰＩ２３４を介してファイルシステム２４０にアクセスするために、アプリケーション２３２によって使用される。これは、例えばＮＦＳ（Network File System）又はＳＭＢ（Server Message Block）等の様々なアクセスプロトコルを使用して実行することができる。ブロックアクセスＡＰＩ２２０及びファイルアクセスＡＰＩ２３０の両方は、例えばＮＶＭデバイスドライバ２４５等のデバイスドライバを使用して、例えばＮＶＭ２６４等のメモリにアクセスする。
【００１２】
ソフトウェアスタック２００のＩ／Ｏ  ＡＰＩ又はファイルアクセスＡＰＩによってアクセス動作が行われる例では、ファイルが開かれ、ファイルハンドルが生成されて、関数呼び出しのためにファイルを識別する。次に、ファイルハンドル用のファイルマッピングハンドル又はオブジェクトが生成される。これにより、ＣＰＵ２５０がアクセスするファイルのサイズに対して仮想アドレス（ＶＡ）範囲又は空間が割り当てられる。ファイルは、割り当てられたＶＡ空間にマッピングされる。アクセスの場合、ＶＡ空間は、ＣＰＵ２５０からの関連するロードコマンド又はストアコマンドによってヒットされる。ＶＡ空間は、メモリの一部に物理的にマッピングされていないので、ロードコマンド又はストアコマンドは障害を発生させる。ＯＳは、障害を見つけ、例えばＮＶＭデバイスドライバ２４５を呼び出して、例えば、ブロックＩ／Ｏダイレクトメモリアクセス（ＤＭＡ）コマンドをＮＶＭコントローラ２６２に発行する。要求されたデータは、（データパス２９０によって示すように）ＮＶＭ２６４からシステムメモリ２５２にコピーされる。ＯＳは、システムメモリ２５２の一部を、障害が発生し、ＣＰＵ２５０によるアクセスをブロック解除（unblock）した割り当てＶＡ空間にマッピングする。図示するように、アプリケーション２２２又はアプリケーション２３２は、基本的なアクセスメカニズムを認識していない。ＯＳは、例えばＮＶＭコントローラ２６２及びＮＶＭ２６４等のブロックＩ／Ｏデバイスによって提供されるブロックＩ／Ｏ  ＤＭＡコマンドを利用して、アクセスを実現する基本的な作業を実行する。
【００１３】
ハードウェアの観点から、ＣＰＵ２５０は、（レジスタインタフェースである）ブロックＩ／Ｏプログラミングインタフェースを使用して、例えば４キロバイトの単位でデータのブロックをシステムメモリ２５２にコピーするＤＭＡコマンドを発行する。これは、ＮＶＭコントローラ２６２のブロックＩ／Ｏ  ＤＭＡコマンドを使用してデータをコピーし、システムメモリ２５２に送る、例えばＮＶＭデバイスドライバ２４５等のデバイスドライバを使用して達成される。次に、ＣＰＵ２５０は、システムメモリ２５２からのデータにアクセスすることができる。ＧＰＵ２７０は、例えばＰＣＩｅ等の相互接続バスを介して、システムメモリ２５２からのデータにアクセスすることができる。或いは、データのコピーが、最初に（データパス２９２によって示すように）システムメモリ２５２からローカルメモリ２７２にコピーされる。次に、ＧＰＵ２７０は、ローカルメモリ２７２からのデータにアクセスすることができる。
【００１４】
上記は、一般的なメモリマッピングファイルＩ／Ｏメカニズム又はブロックＩ／Ｏアクセスモデルを説明している。一般的なメモリマップファイルＩ／Ｏメカニズムでは、ＧＰＵ２７０がデータにアクセスする前に、一連のステップを順次完了する必要がある。特に、データは、コピーされ、システムメモリ２５２に記憶され、再びコピーされ、最終的にローカルメモリ２７２に記憶される。この間、ＧＰＵ２７０は進行することができず、停止状態にある。問題として、ＧＰＵ２７０は、ＮＶＭ２６４にダイレクトアクセスすることができない。この問題に対する１つの潜在的な解決策は、バイトアドレス可能メモリマップデバイスである不揮発性デュアルインラインメモリモジュール（ＮＶＤＩＭＭ）を使用することである。しかしながら、ＮＶＤＩＭＭがサポートされるのは、ＣＰＵに接続され、ＰＣＩｅデバイスであるＧＰＵに接続されていないダイナミックランダムアクセスメモリ（ＤＲＡＭ）インタフェースだけである。したがって、この提案された解決策は、ダイレクトアクセスを提供するのに不十分である。
【００１５】
図３は、特定の実施形態による、ブロックＩ／Ｏデバイスへのダイレクトアクセスを提供する例示的な処理システム３００を示す図である。処理システム３００は、１つ以上のＳＳＧカード３１０に接続されたホストコンピューティングシステム３０５を含むことができる。ホストコンピューティングシステム３０５は、１つ以上のＣＰＵ３２２とＬ２キャッシュ３２４とを含むプロセッサ３２０を含む。プロセッサ３２０は、例えばＤＲＡＭ等のシステムメモリ３２６、及び、当業者に知られている他のコンポーネントに接続することができる。
【００１６】
概して、各ＳＳＧカード３１０は、プロセッサ３２０とインタフェースするためのＰＣＩｅスイッチ３３０を含む。ＰＣＩｅスイッチ３３０は、例示目的で示されており、他の電気インタフェース又は通信インタフェースを使用することができる。各ＳＳＧカード３１０は、関連するＮＶＭ３３４及びＰＣＩｅスイッチ３３０を介して接続される１つ以上のＧＰＵ３４０にアクセスするための例えばＮＶＭｅデバイス又はＮＶＭＨＣＩデバイス等の１つ以上のＮＶＭコントローラ３３２を含む。各ＧＰＵ３４０は、Ｌ２キャッシュ３４２に接続することができ、ローカルメモリ３４４にローカルに接続することができる。各ＳＳＧカード３１０は、ＰＣＩｅスイッチ３３０と同じ場所に配置され、ＰＣＩｅスイッチ３３０に接続され、１つ以上のＮＶＭコントローラ３３２の各々にさらに接続されるフロントエンドプロセッサ３５０を含む。キャッシュ３５２は、フロントエンドプロセッサ３５０に接続されている。フロントエンドプロセッサ３５０は、マイクロプロセッサ、組み込み型マイクロプロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は、ＰＣＩｅバス上でバイトアドレス可能性をエミュレートするためにＮＶＭコントローラ３３２及びＮＶＭ３３４へのフロントエンドインタフェースとして機能する同様のデバイスであってもよい。特に、図４に関してさらに説明するように、フロントエンドプロセッサ３５０は、ホストコンピューティングシステム３０５又はＧＰＵ３４０からの入力コマンドをデコードし、ＮＶＭコントローラ３３２及びＮＶＭ３３４から要求されたバイトを読み出し、バイトをＣＰＵ３２２又はＧＰＵ３４０に直接転送する。一実施形態では、ＣＰＵ３２２又はＧＰＵ３４０によるアクセスのために、バイトをＬ２キャッシュ３２４又はＬ２キャッシュ３４２に転送することができる。この構成は例示的なものであり、他の構成も、本明細書及び特許請求の範囲内で実施することができる。
【００１７】
図４は、例えば図３の処理システム３００等の処理システムのソフトウェア相互運用性を示す図である。図４は、単純化された処理システム４０５を使用して、ソフトウェアスタック４００を使用するソフトウェア及びハードウェアの相互運用性を示している。概して、ソフトウェアスタック４００は、ＣＰＵ４５０上で動作する。ソフトウェアスタック４００は、管理スタック４１０と、ブロックアクセスＡＰＩ４２０と、ファイルアクセスＡＰＩ４３０と、ファイルシステム４４０と、ＮＶＭデバイスドライバ４４５と、例えばＯＳ（図示省略）等の他のソフトウェアコンポーネントと、を含むが、これらに限定されない。管理スタック４１０は、システム管理ツールを提供し、ファイルシステム４４０を制御及び構成し、ボリュームをフォーマットし、他の同様の機能を実行するのに使用される管理ユーザインタフェース（ＵＩ）４１２及び管理ライブラリ４１４を含む。ブロックアクセスＡＰＩ４２０及びファイルアクセスＡＰＩ４３０は、入出力（Ｉ／Ｏ）ＡＰＩ又はアクセスＡＰＩである。ブロックアクセスＡＰＩ４２０は、アプリケーション４２２によって使用され、標準ローデバイスアクセスプロトコル４２４を介して、例えば２Ｋ、４Ｋ、８Ｋ、１６Ｋ、６４Ｋ、１２８Ｋ等の様々なブロックサイズのメモリにアクセスする。ファイルアクセスＡＰＩ４３０は、標準ファイルＡＰＩ４３４を介してファイルアクセス４４０にアクセスするために、アプリケーション４３２によって使用される。
【００１８】
処理システム４０５は、システムメモリ４５２に接続されたＣＰＵ４５０と、ＮＶＭ４６２に接続されたＮＶＭコントローラ４６０と、ローカルメモリ４７２に接続されたＧＰＵ４７０と、を含み、これら全ては、ＰＣＩｅスイッチ４８０を介して接続されている。処理システム４０５は、フロントエンドプロセッサ４６５をさらに含む。一実施形態では、フロントエンドプロセッサ４６５は、宛先メモリアドレスへのＤＭＡデータ転送を開始することを意味するＰＣＩｅマスタ、及び、別のデバイスメモリアクセス要求に応じることを意味するＰＣＩｅスレーブの両方とすることができる。一実施形態では、フロントエンドプロセッサ４６５は、スレーブ要求を維持するために設けることができるキャッシュ４６７に接続されている。フロントエンドプロセッサ４６５は、レジスタアパーチャ４８２及びメモリアパーチャ４８４を介してＰＣＩｅスイッチ４８０と同じ場所に配置され、接続されている。レジスタアパーチャ４８２及びメモリアパーチャ４８４は、（ベースアドレスレジスタ（ＢＡＲ）としても知られる）ＰＣＩｅセマンティックスの下で定義され、例えばＧＰＵ４７０等のピアＰＣＩｅデバイスやＣＰＵ４５０が、標準ＰＣＩｅアクセスサイクルを使用して、例えばＮＶＭコントローラ４６０及びＮＶＭ４６２等のターゲットＰＣＩｅデバイスにアクセスできるようにする。
【００１９】
概して、データ転送コマンドが、レジスタアパーチャ４８２又はメモリアパーチャ４８４の何れかに該当するＰＣＩｅ宛先アドレス（例えば、ＧＰＵ４７０又はＣＰＵ４５０から受信される）を有する場合、データ転送コマンドは、フロントエンドプロセッサ４６５に転送される。ＰＣＩｅ宛先アドレスがレジスタアパーチャ４８２にある場合、フロントエンドプロセッサ４６５は、上述したようにＮＶＭコントローラ４６０のブロックＩ／Ｏ  ＤＭＡコマンドを介してブロックアドレス可能処理を実行する。ＰＣＩｅ宛先アドレスがメモリアパーチャ４８４にある場合、フロントエンドプロセッサ４６５は、バイトアドレス可能処理を実行する。一実施形態では、フロントエンドプロセッサ４６５は、例えば、読み出しアクセス及び書き込みアクセスのために動作することができる。読み出しアクセスの実施形態では、フロントエンドプロセッサ４６５は、（要求されたバイトが以前に要求されたブロックに存在する場合に）キャッシュ４６７からデータバイトを読み出すか、ＮＶＭコントローラ４６０のブロックＩ／Ｏ  ＤＭＡコマンドを介してＮＶＭ４６２からデータブロックを読み出す。読み出されたデータブロックは、キャッシュ４６７に記憶され、要求されたバイトは、（データパス４９５によって示すように）ＣＰＵ４５０又は（データパス４９６によって示すように）ＧＰＵ４７０に転送される。書き込みアクセスの実施形態では、フロントエンドプロセッサ４６５は、データバイトをキャッシュ４６７に書き込み、（要求されたバイトがキャッシュ４６７に存在する場合に）ＮＶＭコントローラ４６０のブロックＩ／Ｏ  ＤＭＡコマンドを介してデータをＮＶＭ４６２にフラッシュバックするか、ＮＶＭコントローラ４６０のブロックＩ／Ｏ  ＤＭＡコマンドを介してデータをＮＶＭ４６２に書き込む。レジスタアパーチャ４８２及びメモリアパーチャ４８４の両方を設けることによって、ブロックアドレス可能性処理及びバイトアドレス可能性処理の両方が可能になる。
【００２０】
フロントエンドプロセッサ４６５及びメモリアパーチャ４８４を含むことは、例えば、ブロックアクセスＡＰＩ４２０及びファイルアクセスＡＰＩ４３０に加えて、パーシステントメモリスタック４９０の使用を可能にする。ブロックアクセスＡＰＩ４２０及びファイルアクセスＡＰＩ４３０の動作は、上述した通りである。パーシステントメモリスタック４９０は、例えば、アプリケーション４９１がＮＶＭ４６２に対してゼロコピーアクセスを実行するのを可能にする。すなわち、アプリケーション４９１は、Ｉ／Ｏ処理なし、キューイングなし、並びに、非同期読み出し及び／又は書き込みなしに、メモリマッピング処理４９３を介してロード／ストア処理４９２を実行することができる。
【００２１】
図５は、図３及び図４と連携して、読み出しアクセスシナリオにおいてブロックＩ／Ｏデバイスのバイトアドレス可能性を提供する例示的なフロー図５００である。データ転送コマンド又はメモリアクセス要求は、例えばＰＣＩｅスイッチ３３０等のローカルスイッチを介して、例えばプロセッサ３２０又はＧＰＵ３４０等のプロセッサから例えばＮＶＭ３３４等の宛先デバイスに送信される（ステップ５０５）。一実施形態では、宛先アドレスにデータ転送コマンドを提供される。例えばフロントエンドプロセッサ３５０等のフロントエンドプロセッサは、データ転送コマンドが、ブロックアドレス可能処理を必要とするのか、又は、バイトアドレス可能処理を必要とするのかを判別する（ステップ５１０）。一実施形態では、データ転送コマンドがレジスタアパーチャにあるのか、又は、メモリアパーチャ４８４にあるのかによって、ブロックアドレス可能処理又はバイトアドレス可能処理の必要性が判別される。ブロックアドレス可能処理の場合、フロントエンドプロセッサは、要求されたブロックが、例えばキャッシュ３５２等の関連するキャッシュ内に存在するのかどうかを判別する（ステップ５１５）。要求されたブロックがキャッシュ内に存在する場合、要求されたブロックは、ブロックＩ／Ｏ処理を介して転送される（ステップ５２０）。一実施形態では、ブロックＩ／Ｏ処理は、ブロックＩ／Ｏ  ＤＭＡコマンド処理であってもよい。要求されたブロックがキャッシュ内に存在しない場合、要求されたブロックは、宛先デバイスから読み出され（ステップ５２５）、ブロックＩ／Ｏ処理を介して転送される（ステップ５２０）。一実施形態では、要求されたブロック又は読み出されたブロックは、キャッシュに保存される。一実施形態では、要求されたブロックは、ターゲットデバイスに関係なく、システムメモリに転送される。
【００２２】
バイトアドレス可能処理の場合、フロントエンドプロセッサは、要求されたブロックが関連するキャッシュ内に存在するかどうかを判別する（ステップ５３０）。要求されたバイトがキャッシュ内に存在する場合、要求されたバイトは、ターゲットプロセッサに直接転送される（ステップ５３５）。要求されたバイトがキャッシュ内に存在しない場合、要求されたバイトを含むブロックは、宛先デバイスから読み出される（ステップ５４０）。フロントエンドプロセッサは、要求されたバイトをターゲットプロセッサに転送する（ステップ５３５）。一実施形態では、要求されたブロック又は読み出されたブロックは、キャッシュに保存される。
【００２３】
図６は、図３及び図４と連携して、書き込みアクセスシナリオにおいてブロックＩ／Ｏデバイスのバイトアドレス可能性を提供する例示的なフロー図６００である。データ転送コマンド又はメモリアクセス要求は、例えばＰＣＩｅスイッチ３３０等のローカルスイッチを介して、プロセッサ３２０又はＧＰＵ３４０等のプロセッサから例えばＮＶＭ３３４等の宛先デバイスに送信される（ステップ６０５）。一実施形態では、宛先アドレスにデータ転送コマンドが提供される。例えばフロントエンドプロセッサ３５０等のフロントエンドプロセッサは、データ転送コマンドが、ブロックアドレス可能処理を必要とするのか、又は、バイトアドレス可能処理を必要とするのかを判別する（ステップ６１０）。一実施形態では、データ転送コマンドが、レジスタアパーチャにあるのか、又は、メモリアパーチャ４８４にあるのかによって、ブロックアドレス可能処理又はバイトアドレス可能処理の必要性が判別される。ブロックアドレス可能処理の場合、フロントエンドプロセッサは、要求されたブロックが、例えばキャッシュ３５２等の関連するキャッシュ内に存在するかどうかを判別する（ステップ６１５）。要求されたブロックがキャッシュ内に存在する場合、キャッシュは、データで更新され（ステップ６２０）、データは、ＮＶＭコントローラ３３２のブロックＩ／Ｏ  ＤＭＡコマンドを介して、例えばＮＶＭ３３４等の宛先デバイスにフラッシュバックされる（ステップ６２２）。一実施形態では、キャッシュ内のデータが無効にされ（ステップ６２１）、データは、ＮＶＭコントローラ３３２のブロックＩ／Ｏ  ＤＭＡコマンドを介して宛先デバイス内で更新される（ステップ６２２）。キャッシュの無効化は、様々な技術を用いて実施することができ、図６は例示的なものである。要求されたブロックがキャッシュ内に存在しない場合、データは、ブロックＩ／Ｏ  ＤＭＡコマンドを介して宛先デバイス内で更新される（ステップ６２５）。
【００２４】
バイトアドレス可能処理の場合、フロントエンドプロセッサは、要求されたバイトが関連するキャッシュ内に存在するかどうかを判別する（ステップ６３０）。要求されたバイトがキャッシュ内に存在する場合、キャッシュは、直接（つまり、バイトレベルで）更新され（ステップ６３５）、データは、ＮＶＭコントローラ３３２のブロックＩ／Ｏ  ＤＭＡコマンドを介して、例えばＮＶＭ３３４等の宛先デバイスにフラッシュバックされる（ステップ６３７）。一実施形態では、キャッシュ内のデータが無効にされ（ステップ６３６）、データは、ＮＶＭコントローラ３３２のブロックＩ／Ｏ  ＤＭＡコマンドを介して宛先デバイス内で更新される（ステップ６３７）。要求されたバイトがキャッシュ内に存在しない場合、データは、ブロックＩ／Ｏ  ＤＭＡコマンドを介して宛先デバイス内で更新される（ステップ６４０）。
【００２５】
図７は、１つ以上の開示された実施形態の一部を実施し得る例示的なデバイス７００のブロック図である。デバイス７００は、例えば、ヘッドマウントデバイス、サーバ、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等を含むことができる。デバイス７００は、プロセッサ７０２と、メモリ７０４と、ストレージ７０６と、１つ以上の入力デバイス７０８と、１つ以上の出力デバイス７１０と、を含む。また、デバイス７００は、オプションで入力ドライバ７１２及び出力ドライバ７１４を含むことができる。デバイス７００は、図７に示されていない追加のコンポーネントを含み得ることが理解されるであろう。
【００２６】
プロセッサ７０２は、中央処理装置（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含んでもよく、各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ７０４は、プロセッサ７０２と同じダイ上に配置されてもよいし、プロセッサ７０２とは別に配置されてもよい。メモリ７０４は、揮発性又は不揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ、キャッシュ等）を含むことができる。
【００２７】
ストレージ７０６は、固定又は着脱可能なストレージ（例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等）を含むことができる。入力デバイス７０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含むことができる。出力デバイス７１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／若しくは受信用の無線ローカルエリアネットワークカード）を含むことができる。
【００２８】
入力ドライバ７１２は、プロセッサ７０２及び入力デバイス７０８と通信し、プロセッサ７０２が入力デバイス７０８から入力を受信するのを可能にする。出力ドライバ７１４は、プロセッサ７０２及び出力デバイス７１０と通信し、プロセッサ７０２が出力デバイス７１０に出力を送信するのを可能にする。入力ドライバ７１２及び出力ドライバ７１４がオプションのコンポーネントであることと、入力ドライバ７１２及び出力ドライバ７１４が存在しない場合には、デバイス７００が同様に動作することと、に留意されたい。
【００２９】
概して、データを転送する方法は、プロセッサがブロック入出力（Ｉ／Ｏ）デバイスへのアクセスを必要とする場合に、フロントエンドプロセッサが、ローカルスイッチを介してデータ転送コマンドを受信することを含む。フロントエンドプロセッサは、第１パスを介してデータ転送コマンドを受信した場合にバイトアドレス可能処理を行い、バイトアドレス可能処理の場合に、データ転送コマンドにおいて要求されたバイトがフロントエンドプロセッサに関連するキャッシュ内に存在するかどうかをチェックする。フロントエンドプロセッサは、データ転送コマンドが読み出しである場合には、バイトがキャッシュ内に存在しない場合に、当該バイトを含むブロックをブロックＩ／Ｏデバイスから読み出し、当該バイトを、ローカルスイッチを介してフロントエンドプロセッサからターゲットプロセッサに直接転送する。一実施形態では、プロセッサは、グラフィックス処理ユニット（ＧＰＵ）又は中央処理装置（ＣＰＵ）であり、ＧＰＵ又はＣＰＵのターゲットプロセッサであり、ローカルスイッチは、ＰＣＩｅスイッチ又はルートコンプレックスであり、ブロックＩ／Ｏデバイスは、不揮発性メモリ（ＮＶＭ）デバイスである。一実施形態では、第１パスは、ローカルスイッチのメモリアパーチャでデータ転送コマンドを受信するためのものである。一実施形態では、方法は、データ転送コマンド内の宛先アドレスがメモリアパーチャにあるかどうかを判別する。一実施形態では、方法は、ブロックがブロックＩ／Ｏデバイスから読み出される場合、ブロックをキャッシュに記憶する。一実施形態では、フロントエンドプロセッサは、データ転送コマンドを第２パスを介して受信した場合に、ブロックアドレス可能処理を行う。一実施形態では、第２パスは、ローカルスイッチのレジスタアパーチャでデータ転送コマンドを受信するためのものである。一実施形態では、方法は、データ転送コマンド内の宛先アドレスがレジスタアパーチャにあるかどうかを判別する。一実施形態では、方法は、データ転送コマンドが書き込みである場合には、バイトがキャッシュ内に存在する場合にキャッシュを更新し、データをブロック入出力（Ｉ／Ｏ）デバイスにフラッシュバックする。
【００３０】
概して、データを転送する装置は、少なくとも１つのグラフィックス処理ユニット（ＧＰＵ）と、少なくとも１つのブロック入出力（Ｉ／Ｏ）デバイスと、少なくとも１つのＧＰＵに接続されたローカルスイッチと、ローカルスイッチ及び少なくとも１つのブロックＩ／Ｏデバイスに接続されたフロントエンドプロセッサと、フロントエンドプロセッサに接続されたキャッシュと、を含む。フロントエンドプロセッサは、少なくとも１つのブロックＩ／Ｏデバイスへのアクセスが必要な場合に、データ転送コマンドをＧＰＵから受信し、データ転送コマンドを第１パスを介して受信した場合に、データ転送コマンドをバイトアドレス可能処理し、バイトアドレス可能処理の場合に、データ転送コマンドにおいて要求されたバイトがキャッシュ内に存在するかどうかをチェックする。データ転送コマンドが読み出しである場合、フロントエンドプロセッサは、バイトがキャッシュ内に存在しない場合に、当該バイトを含むブロックを少なくとも１つのブロックＩ／Ｏデバイスから読み出し、当該バイトをターゲットプロセッサに直接転送する。一実施形態では、装置は、ローカルスイッチ内にメモリアパーチャを含み、第１パスは、ローカルスイッチのメモリアパーチャでデータ転送コマンドを受信する。一実施形態では、フロントエンドプロセッサは、データ転送コマンドの宛先アドレスがメモリアパーチャにあるかどうかを判別する。一実施形態では、フロントエンドプロセッサは、ブロックが少なくとも１つのブロックＩ／Ｏデバイスから読み出される場合に、ブロックをキャッシュに記憶する。一実施形態では、フロントエンドプロセッサは、データ転送コマンドを第２パスを介して受信した場合、データ転送コマンドをブロックアドレス可能処理する。一実施形態では、装置は、ローカルスイッチ内にレジスタアパーチャを含み、第２パスは、ローカルスイッチのレジスタアパーチャでデータ転送コマンドを受信する。一実施形態では、フロントエンドプロセッサは、データ転送コマンドの宛先アドレスがレジスタアパーチャにあるかどうかを判別する。一実施形態では、データ転送コマンドが書き込みである場合、フロントエンドプロセッサは、バイトがキャッシュ内に存在する場合に、キャッシュを更新し、データを少なくとも１つのブロック入出力（Ｉ／Ｏ）でバスにフラッシュバックする。
【００３１】
概して、データを転送するシステムは、プロセッサ及びシステムメモリを含むホストプロセッサと、少なくとも１つのソリッドステートグラフィックス（ＳＳＧ）カードと、を含む。各ＳＳＧカードは、少なくとも１つのグラフィックス処理ユニット（ＧＰＵ）と、少なくとも１つのブロック入出力(Ｉ／Ｏ)デバイスと、ホストプロセッサ及び少なくとも１つのＧＰＵに接続されたローカルスイッチと、ローカルスイッチ及び各ブロックＩ／Ｏデバイスに接続されたフロントエンドプロセッサと、フロントエンドプロセッサに接続されたキャッシュと、を含む。フロントエンドプロセッサは、少なくとも１つのブロックＩ／Ｏデバイスへのアクセスが必要な場合に、データ転送コマンドをＧＰＵ又はホストプロセッサから受信し、データ転送コマンドを第１パスを介して受信した場合、データ転送コマンドをバイトアドレス可能処理し、バイトアドレス可能処理の場合に、データ転送コマンドにおいて要求されたバイトがキャッシュ内に存在するかどうかをチェックする。データ転送コマンドが読み出しである場合、フロントエンドプロセッサは、バイトがキャッシュ内に存在しない場合に、当該バイトを含むブロックをブロックＩ／Ｏデバイスから読み出し、当該バイトを、ローカルスイッチを介してターゲットプロセッサに直接転送する。一実施形態では、システムは、ローカルスイッチのメモリアパーチャを含み、第１パスは、ローカルスイッチのメモリアパーチャでデータ転送コマンドを受信し、フロントエンドプロセッサは、データ転送コマンドの宛先アドレスがメモリアパーチャにあるかどうかを判別する。一実施形態では、フロントエンドプロセッサは、データ転送コマンドを第２パスを介して受信した場合に、データ転送コマンドをブロックアドレス可能処理し、ローカルスイッチは、レジスタアパーチャを含み、第２パスは、ローカルスイッチのレジスタアパーチャでデータ転送コマンドを受信する。
【００３２】
概して、処理システムで実行されると、データを転送する方法を処理システムに実行させる命令を含む非一時的なコンピュータ可読記憶媒体であって、方法は、プロセッサが、ブック入出力（Ｉ／Ｏ）デバイスへのアクセスが必要な場合に、フロントエンドプロセッサが、ローカルスイッチを介してデータ転送コマンドを受信するステップと、フロントエンドプロセッサが、データ転送コマンドを第１パスを介して受信した場合に、バイトアドレス可能処理を行うステップと、バイトアドレス可能処理の場合に、データ転送コマンドにおいて要求されたバイトが、フロントエンドプロセッサに関連するキャッシュ内に存在するかどうかをチェックするステップと、データ転送コマンドが読み出しである場合に、バイトがキャッシュ内に存在しない場合には、バイトを含むブロックをブロックＩ／Ｏデバイスから読み出すステップと、当該バイトを、ローカルスイッチを介してフロントエンドプロセッサからターゲットプロセッサに直接転送するステップと、を含む。一実施形態では、第１パスは、ローカルスイッチのメモリアパーチャでデータ転送コマンドを受信し、方法は、データ転送コマンド内の宛先アドレスがメモリアパーチャにあるかどうかを判別するステップと、データ転送コマンドを第２パスを介して受信した場合に、データ転送コマンドをブロックアドレス可能処理するステップと、を含み、第２パスは、ローカルスイッチのレジスタアパーチャでデータ転送コマンドを受信する。一実施形態では、非一時的なコンピュータ可読記憶媒体は、データ転送コマンドが書き込みである場合に、バイトがキャッシュに存在する場合にキャッシュを更新するするステップと、データをブロック入出力（Ｉ／Ｏ）デバイスにフラッシュバックするステップと、を含む。
【００３３】
概して、本明細書で説明する実施形態を限定することなく、非一時的なコンピュータ可読記憶媒体は、処理システムで実行されると、バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法を処理システムに実行させる命令を含む。
【００３４】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素を特定の組み合わせで上記のように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
【００３５】
提供された方法には、汎用コンピュータ、プロセッサ又はプロセッサコアにおける実施が含まれる。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令、及び、ネットリストを含む他の中間データ（このような命令はコンピュータ可読媒体に記憶され得る）の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００３６】
本明細書で提供される方法又はフロー図は、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、ＲＯＭ、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体（ＣＤ−ＲＯＭディスク等）、デジタル多用途ディスク（ＤＶＤ）等が含まれる。
【図１】
2020502694.tif 000003
【図２】
2020502694.tif 000004
【図３】
2020502694.tif 000005
【図４】
2020502694.tif 000006
【図５】
2020502694.tif 000007
【図６】
2020502694.tif 000008
【図７】
2020502694.tif 000009
【国際調査報告】
2020502694.tif 000010
2020502694.tif 000011
2020502694.tif 000012
2020502694.tif 000013