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

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

▶ エーティーアイ・テクノロジーズ・ユーエルシーの特許一覧

特開2023-15243バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法及び装置
<>
  • 特開-バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法及び装置 図1
  • 特開-バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法及び装置 図2
  • 特開-バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法及び装置 図3
  • 特開-バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法及び装置 図4
  • 特開-バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法及び装置 図5
  • 特開-バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法及び装置 図6
  • 特開-バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法及び装置 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023015243
(43)【公開日】2023-01-31
(54)【発明の名称】バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法及び装置
(51)【国際特許分類】
   G06F 13/12 20060101AFI20230124BHJP
   G06F 13/42 20060101ALI20230124BHJP
   G06F 13/36 20060101ALI20230124BHJP
【FI】
G06F13/12 340G
G06F13/42 310
G06F13/36 310E
【審査請求】有
【請求項の数】23
【出願形態】OL
(21)【出願番号】P 2022179600
(22)【出願日】2022-11-09
(62)【分割の表示】P 2019534182の分割
【原出願日】2017-12-06
(31)【優先権主張番号】15/389,811
(32)【優先日】2016-12-23
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】508301087
【氏名又は名称】エーティーアイ・テクノロジーズ・ユーエルシー
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ゴンシエン ジェフリー チェン
(57)【要約】      (修正有)
【課題】ブロックアドレス可能I/O、バイトアドレス可能I/O並びにホストプロセッサ、GPU及び任意の他のPCIe(Peripheral Component Interconnect Express)互換デバイスによるバイトアドレス可能メモリへのダイレクトアクセスを可能とする。
【解決手段】ソリッドステートグラフィックス(SSG)カード310において、PCIeスイッチに接続されたフロントエンドプロセッサは、バイトアドレス可能性をエミュレートするために、ブロックアドレス可能I/Oデバイスへのフロントエンドインタフェースとして機能する。例えばグラフィックス処理ユニット(GPU)等のPCIeデバイスは、フロントエンドプロセッサを介して、ブロックアドレス可能I/Oデバイスから必要なバイトに直接アクセスすることができる。
【選択図】図3
【特許請求の範囲】
【請求項1】
データを転送する方法であって、
フロントエンドプロセッサが、ローカルスイッチを介して、ブロックアドレス可能なアクセスを指定してブロックアドレス可能入出力デバイス(ブロックI/Oデバイス)のデータブロックを読み出すための第1コマンドをプロセッサから受信することと、
前記第1コマンドを受信したことに応じて、前記データブロックを、前記ブロックI/Oデバイスのブロックアドレス可能メモリから、ブロックより小さいチャンクでアドレス可能な第2メモリ位置にコピーすることと、
前記フロントエンドプロセッサが、前記ローカルスイッチを介して、ブロックより小さいチャンクによるアクセスを指定して前記ブロックI/Oデバイスのデータにアクセスするための第2コマンドを前記プロセッサから受信することと、
前記第2コマンドを受信したことに応じて、前記データが前記第2メモリ位置に記憶された前記データブロックに含まれていることを判別することと、
前記第2コマンドに従って、ブロックより小さいチャンクで前記第2メモリ位置の前記データにアクセスすることと、を含む、
方法。
【請求項2】
前記プロセッサは、グラフィックス処理ユニット(GPU)又は中央処理装置(CPU)であり、前記ローカルスイッチは、PCIe(Peripheral Component Interconnect Express)スイッチ又はルートコンプレックスであり、前記ブロックI/Oデバイスは、不揮発性メモリ(NVM)デバイスである、
請求項1の方法。
【請求項3】
前記第2コマンドは、前記ローカルスイッチのメモリアパーチャで受信される、
請求項1の方法。
【請求項4】
前記第2コマンドは読み出しコマンドを含み、
前記第2コマンドに従って、前記第2メモリ位置の前記データにアクセスすることは、前記データをターゲットプロセッサに転送することを含む、
請求項1の方法。
【請求項5】
前記第2コマンドは書き込みコマンドを含み、
前記第2コマンドに従って、前記第2メモリ位置の前記データにアクセスすることは、前記第2メモリ位置の前記データを更新することと、前記データを前記ブロックアドレス可能メモリにフラッシュすることと、を含む、
請求項1の方法。
【請求項6】
前記フロントエンドプロセッサが、前記ローカルスイッチを介して、前記第2メモリ位置に記憶されていない第2データブロックに書き込みするための第3コマンドを受信することと、
前記第3コマンドに応じて、前記第2メモリ位置ではなく前記ブロックI/Oデバイスのデータブロックに書き込みすることと、を含む、
請求項1の方法。
【請求項7】
前記第1コマンドは、前記ローカルスイッチのレジスタアパーチャで受信される、
請求項1の方法。
【請求項8】
前記フロントエンドプロセッサが、前記ローカルスイッチを介して、前記第2メモリ位置に記憶されていない第2データに書き込みするための第3コマンドを受信することと、
前記第3コマンドに応じて、前記第2メモリ位置ではなく前記ブロックI/Oデバイスの前記第2データに書き込みすることと、を含む、
請求項1の方法。
【請求項9】
前記フロントエンドプロセッサが、前記ローカルスイッチを介して、前記第2メモリ位置に記憶されていない第2データを読み出すための第3コマンドを受信することと、
前記第3コマンドに応じて、前記第2メモリ位置ではなく前記ブロックI/Oデバイスから第2データを取得することと、を含む、
請求項1の方法。
【請求項10】
データを転送する装置であって、
少なくとも1つのグラフィックス処理ユニット(GPU)と、
少なくとも1つのブロックアドレス可能入出力デバイス(ブロックI/Oデバイス)と、
前記少なくとも1つのGPUに接続されたローカルスイッチと、
前記ローカルスイッチ及び前記少なくとも1つのブロックI/Oデバイスに接続されたフロントエンドプロセッサと、
前記フロントエンドプロセッサに接続された第2メモリ位置であって、ブロックより小さいチャンクでアドレス可能な第2メモリ位置と、を備え、
前記フロントエンドプロセッサは、
ブロックアドレス可能なアクセスを指定して前記少なくとも1つのブロックI/Oデバイスのうち何れかのブロックI/Oデバイスのデータブロックを読み出すための第1コマンドを前記GPUから受信することと、
前記第1コマンドを受信したことに応じて、前記データブロックを、前記ブロックI/Oデバイスのブロックアドレス可能メモリから前記第2メモリ位置にコピーすることと、
前記フロントエンドプロセッサにおいて、前記ローカルスイッチを介して、ブロックより小さいチャンクによるアクセスを指定して前記ブロックI/Oデバイスのデータにアクセスするための第2コマンドをプロセッサから受信することと、
前記第2コマンドを受信したことに応じて、前記データが前記第2メモリ位置に記憶された前記データブロックに含まれていることを判別することと、
前記第2コマンドに従って、ブロックより小さいチャンクで前記第2メモリ位置の前記データにアクセスすることと、
を行うように構成されている、
装置。
【請求項11】
前記ローカルスイッチ内のメモリアパーチャであって、前記第2コマンドは、前記メモリアパーチャで受信される、メモリアパーチャを備える、
請求項10の装置。
【請求項12】
前記第2コマンドは読み出しコマンドを含み、
前記第2コマンドに従って、前記第2メモリ位置の前記データにアクセスすることは、前記データをターゲットプロセッサに転送することを含む、
請求項10の装置。
【請求項13】
前記第2コマンドは書き込みコマンドを含み、
前記第2コマンドに従って、前記第2メモリ位置の前記データにアクセスすることは、前記第2メモリ位置の前記データを更新することと、前記データを前記ブロックアドレス可能メモリにフラッシュすることと、を含む、
請求項10の装置。
【請求項14】
前記フロントエンドプロセッサは、
前記フロントエンドプロセッサにおいて、前記ローカルスイッチを介して、前記第2メモリ位置に記憶されていない第2データブロックに書き込みするための第3コマンドを受信することと、
前記第3コマンドに応じて、前記第2メモリ位置ではなく前記ブロックI/Oデバイスのデータブロックに書き込みすることと、
を行うようにさらに構成されている、
請求項10の装置。
【請求項15】
前記ローカルスイッチのレジスタアパーチャであって、前記第1コマンドは、前記レジスタアパーチャで受信される、レジスタアパーチャを備える、
請求項10の装置。
【請求項16】
前記フロントエンドプロセッサは、
前記フロントエンドプロセッサにおいて、前記ローカルスイッチを介して、前記第2メモリ位置に記憶されていない、ブロックよりも小さい第2データに書き込みするための第3コマンドを受信することと、
前記第3コマンドに応じて、前記第2メモリ位置ではなく前記ブロックI/Oデバイスの前記第2データに書き込みすることと、
を行うようにさらに構成されている、
請求項10の装置。
【請求項17】
前記フロントエンドプロセッサは、
前記フロントエンドプロセッサにおいて、前記ローカルスイッチを介して、前記第2メモリ位置に記憶されていない、ブロックよりも小さい第2データを読み出すための第3コマンドを受信することと、
前記第3コマンドに応じて、前記第2メモリ位置ではなく前記ブロックI/Oデバイスから第2データを取得することと、
を行うようにさらに構成されている、
請求項10の装置。
【請求項18】
データを転送するシステムであって、
プロセッサ及びシステムメモリを含むホストプロセッサと、
少なくとも1つのソリッドステートグラフィックス(SSG)カードと、を備え、
各SSGカードは、
少なくとも1つのグラフィックス処理ユニット(GPU)と、
少なくとも1つのブロックアドレス可能入出力デバイス(ブロックI/Oデバイス)と、
前記ホストプロセッサ及び前記少なくとも1つのGPUに接続されたローカルスイッチと、
前記ローカルスイッチ及び各ブロックI/Oデバイスに接続されたフロントエンドプロセッサと、
前記フロントエンドプロセッサに接続された第2メモリ位置であって、ブロックより小さいチャンクでアドレス可能な第2メモリ位置と、を備え、
前記フロントエンドプロセッサは、
ブロックアドレス可能なアクセスを指定して前記少なくとも1つのブロックI/Oデバイスのうち何れかのブロックI/Oデバイスのデータブロックを読み出すための第1コマンドを前記GPU又は前記ホストプロセッサから受信することと、
前記第1コマンドを受信したことに応じて、前記データブロックを、前記ブロックI/Oデバイスのブロックアドレス可能メモリから前記第2メモリ位置にコピーすることと、
前記フロントエンドプロセッサにおいて、前記ローカルスイッチを介して、ブロックより小さいチャンクによるアクセスを指定して前記ブロックI/Oデバイスのデータにアクセスするための第2コマンドを前記GPU又は前記ホストプロセッサから受信することと、
前記第2コマンドを受信したことに応じて、前記データが前記第2メモリ位置に記憶された前記データブロックに含まれていることを判別することと、
前記第2コマンドに従って、ブロックより小さいチャンクで前記第2メモリ位置の前記データにアクセスすることと、
を行うように構成されている、
システム。
【請求項19】
前記ローカルスイッチのメモリアパーチャを備え、
前記第2コマンドは、前記メモリアパーチャで受信される、
請求項18のシステム。
【請求項20】
前記第2コマンドは読み出しコマンドを含み、
前記第2コマンドに従って、前記第2メモリ位置の前記データにアクセスすることは、前記データをターゲットプロセッサに転送することを含む、
請求項18のシステム。
【請求項21】
処理システムで実行されると、データを転送する方法を前記処理システムに実行させる命令を含むコンピュータ可読記憶媒体であって、
前記方法は、
フロントエンドプロセッサが、ローカルスイッチを介して、ブロックアドレス可能なアクセスを指定してブロックアドレス可能入出力デバイス(ブロックI/Oデバイス)のデータブロックを読み出すための第1コマンドをプロセッサから受信することと、
前記第1コマンドを受信したことに応じて、前記データブロックを、前記ブロックI/Oデバイスのブロックアドレス可能メモリから、ブロックより小さいチャンクでアドレス可能な第2メモリ位置にコピーすることと、
前記フロントエンドプロセッサが、前記ローカルスイッチを介して、ブロックより小さいチャンクによるアクセスを指定して前記ブロックI/Oデバイスのデータにアクセスするための第2コマンドを前記プロセッサから受信することと、
前記第2コマンドを受信したことに応じて、前記データが前記第2メモリ位置に記憶された前記データブロックに含まれていることを判別することと、
前記第2コマンドに従って、ブロックより小さいチャンクで前記第2メモリ位置の前記データにアクセスすることと、を含む、
コンピュータ可読記憶媒体。
【請求項22】
前記第2コマンドは、前記ローカルスイッチのメモリアパーチャで受信される、
請求項21のコンピュータ可読記憶媒体。
【請求項23】
前記第2コマンドは読み出しコマンドを含み、
前記第2コマンドに従って、前記第2メモリ位置の前記データにアクセスすることは、前記データをターゲットプロセッサに転送することを含む、
請求項21のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2016年12月23日に出願された米国特許出願第15/389,811号の利益を主張するものであり、この内容は参照により本明細書に完全に記載されているものとして援用される。
【背景技術】
【0002】
グラフィックス処理ユニット(GPU)は、名目上、GPUで実行される動作をサービスするために、或る量のローカルメモリ又は専用メモリ(以下、ローカルと呼ぶ)で構成される場合がある。例えば、ローカルメモリは、ダイナミックランダムアクセスメモリとすることができる。また、そのローカルメモリ等のバイトアドレス可能デバイスを有するGPUは、一種のブロックアドレス可能メモリである不揮発性メモリ(NVM)にアクセスすることができる。GPU又は特定のアプリケーションがNVMとローカルメモリとの間のデータ転送を必要とする場合、ホストコンピューティングシステム上で動作するオペレーティングシステム(OS)、ディスプレイドライバ、デバイスドライバ、又は、同様のハードウェア/ソフトウェアエンティティは、通常、データ転送プロセスを制御又は管理する。このデータ転送プロセスは、2ホッププロセス(つまり、最初にNVMからシステムメモリに、次にシステムメモリからローカルメモリに)が必要である。特に、NVMデータは、最初に、NMVコントローラのブロック入出力(I/O)転送メカニズムを介して、システムメモリに転送されなければならない。次に、GPUは、ローカルメモリのデータにアクセスすることができる。これには、少なくともシステムメモリの使用が含まれ、トラフィック及び輻輳が増加する。
【0003】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0004】
図1】特定の実施形態による、ホストコンピューティングシステム及びソリッドステートグラフィックス(SSG)カードを有する処理システムを示す図である。
図2】一般的なソフトウェアスタック及びハードウェアアーキテクチャを示す図である。
図3】特定の実施形態による、ホストコンピューティングシステム及びソリッドステートグラフィックス(SSG)カードを有する処理システムを示す図である。
図4】特定の実施形態による、ソフトウェアスタック及びハードウェアアーキテクチャを示す図である。
図5】特定の実施形態による、図3及び図4の処理システムを使用するフロー図である。
図6】特定の実施形態による、図3及び図4の処理システムを使用するフロー図である。
図7】1つ以上の開示された実施形態を実施し得る例示的なデバイスのブロック図である。
【発明を実施するための形態】
【0005】
本願は、2016年12月23日に出願された米国特許出願第15/389,596号の「Method and Apparatus for Connecting Direct Access From Non-Volatile Memory to Local Memory」という名称の同時係属出願、2016年12月23日に出願された米国特許出願第15/389,747号の「Method and Apparatus for Connecting Non-volatile Memory locally to GPU through a Local Switch」という名称の同時係続出願、及び、2016年12月23日に出願された米国特許出願第15/389,908号の「Method and Apparatus for Integration of Non-volatile Memory」という名称の同時係属出願に関連しており、これらは、言及することによって完全に記載されているかのように援用される。
【0006】
本明細書では、ブロックアドレス可能入出力(I/O)デバイス(例えば、不揮発性メモリ(NVM)、及び、コントローラ又は他の同様に使用されるデバイス等)をバイトアドレス可能メモリとしてアクセスする方法及びシステムについて説明する。例えばPCIe(Peripheral Component Interconnect Express)ルートコンプレックス及びスイッチ(まとめてPCIeスイッチ)等の高速シリアルコンピュータ拡張バスに接続されたフロントエンドプロセッサは、バイトアドレス可能性をエミュレートするために、ブロックアドレス可能I/Oデバイスへのフロントエンドインタフェースとして機能する。例えばグラフィックス処理ユニット(GPU)又は他のPCIe互換デバイス等のPCIeデバイスは、フロントエンドプロセッサを介して、ブロックアドレス可能I/Oデバイスから必要なバイトにダイレクトアクセスする。すなわち、PCIe互換デバイスは、システムメモリ及びホストプロセッサを介することなく、ブロックアドレス可能I/Oデバイスからデータにアクセスすることができる。これは、ホストプロセッサの関与を回避し、システムメモリコピーを実行する必要がないため、帯域幅を節約するという意味でGPUの性能が向上する。
【0007】
さらに、フロントエンドプロセッサは、アクセスされたブロックを記憶するためにキャッシュを使用するので、速度が向上し、レイテンシを減少させる。これにより、ブロックへのその後のアクセス時にブロック全体を転送する必要がなくなるので、利用可能な帯域幅及び容量が増加する。一実施形態では、システムは、ブロックアドレス可能I/Oと、バイトアドレス可能I/Oと、ホストプロセッサ、GPU及び任意の他のPCIe互換デバイスによるバイトアドレス可能メモリへのダイレクトアクセスをサポートするこれらのハイブリッドと、を含むことができる。図示及び説明のために、NVM及びNVMコントローラという用語は、本明細書及び特許請求の範囲を限定することなく、ブロックアドレス可能I/Oデバイスの一例として使用される。
【0008】
図1は、特定の実施形態による、例示的な処理システム100を示す図である。処理システム100は、1つ以上のソリッドステートグラフィックス(SSG)カード110に接続されたホストコンピューティングシステム105を含むことができる。ホストコンピューティングシステム105は、1つ以上の中央処理装置(CPU)122とL2キャッシュ124とを含むプロセッサ120を含む。プロセッサ120は、例えばダイナミックランダムアクセスメモリ(DRAM)等のシステムメモリ126、及び、当業者に知られている他のコンポーネントに接続されるか通信する(まとめて「接続される」)ことができる。
【0009】
概して、各SSGカード110は、プロセッサ120とインタフェースするための例えばPCIe(Peripheral Component Interconnect Express)スイッチ(PCIeスイッチ)130等の高速シリアルコンピュータ拡張バスを含むが、これに限定されない。PCIeスイッチ130は、例示目的で示されており、他の電気インタフェース又は通信インタフェースを使用することができる。各SSGカード110は、関連するNVM134及びPCIeスイッチ130を介して接続された1つ以上のGPU140にアクセスするために、例えばNVMe(NVM Express)又は不揮発性メモリホストコントローラインタフェース仕様(NVMHCI)デバイス等の1つ以上の不揮発性メモリ(NVM)コントローラ132をさらに含む。各GPU140は、L2キャッシュ142に接続することができ、メモリアーキテクチャにローカルに接続することができ、当該メモリアーキテクチャは、例えば、ローカルメモリ144、高帯域幅メモリ(HBM)、DDR4(double data rate fourth-generation synchronous dynamic random- access memory)、GDDR5(double data rate type five synchronous graphics random access memory)、ハイブリッドメモリキューブ、又は、例えば関連するコントローラと共に同様に使用される他のメモリとすることができる。図示及び説明のために、ローカルメモリという用語は、本明細書及び特許請求の範囲を限定することなく、メモリアーキテクチャの一例として使用される。各NVMコントローラ132は、関連するNVM134を管理し、アクセスすることができ、特に、ホストコンピューティングシステム105又はGPU140からの入力コマンドをデコードすることができる。この構成は例示的であり、他の構成も、本明細書及び特許請求の範囲内で実施することができる。
【0010】
図2は、例えば図1の処理システム100等の処理システムのソフトウェア相互運用性を示す図である。図2は、単純化された処理システム205を使用して、ソフトウェアスタック200を使用するソフトウェア及びハードウェアの相互運用性を示している。処理システム205は、システムメモリ252に接続されたCPU250と、NVM264に接続されたNVMコントローラ262と、ローカルメモリ272に接続されたGPU270と、を含み、これら全ては、PCIeスイッチ280を介して接続されている。
【0011】
ソフトウェアスタック200の機能は当業者には周知であり、以下は代表的且つ例示的な例である。概して、ソフトウェアスタック200は、CPU250上で動作する。ソフトウェアスタック200は、管理スタック210と、ブロックアクセスAPI(application program interface)220と、ファイルアクセスAPI230と、ファイルシステム240と、NVMデバイスドライバ245と、例えばオペレーティングシステム(OS)(図示省略)等の他のソフトウェアコンポーネントと、を含むが、これらに限定されない。管理スタック210は、システム管理ツールを提供し、ファイルシステム240を制御及び構成し、ボリュームをフォーマットし、他の同様の機能を実行するのに使用される管理ユーザインタフェース(UI)212及び管理ライブラリ214を含む。ブロックアクセスAPI220及びファイルアクセスAPI230は、入出力(I/O)API又はアクセスAPIである。ブロックアクセスAPI220は、アプリケーション222によって使用され、標準ローデバイスアクセスプロトコル(standard raw device access protocol)224を介して、例えば2K、4K、8K、16K、64K、128K等の様々なブロックサイズのメモリにアクセスする。ファイルアクセスAPI230は、標準ファイルAPI234を介してファイルシステム240にアクセスするために、アプリケーション232によって使用される。これは、例えばNFS(Network File System)又はSMB(Server Message Block)等の様々なアクセスプロトコルを使用して実行することができる。ブロックアクセスAPI220及びファイルアクセスAPI230の両方は、例えばNVMデバイスドライバ245等のデバイスドライバを使用して、例えばNVM264等のメモリにアクセスする。
【0012】
ソフトウェアスタック200のI/O API又はファイルアクセスAPIによってアクセス動作が行われる例では、ファイルが開かれ、ファイルハンドルが生成されて、関数呼び出しのためにファイルを識別する。次に、ファイルハンドル用のファイルマッピングハンドル又はオブジェクトが生成される。これにより、CPU250がアクセスするファイルのサイズに対して仮想アドレス(VA)範囲又は空間が割り当てられる。ファイルは、割り当てられたVA空間にマッピングされる。アクセスの場合、VA空間は、CPU250からの関連するロードコマンド又はストアコマンドによってヒットされる。VA空間は、メモリの一部に物理的にマッピングされていないので、ロードコマンド又はストアコマンドは障害を発生させる。OSは、障害を見つけ、例えばNVMデバイスドライバ245を呼び出して、例えば、ブロックI/Oダイレクトメモリアクセス(DMA)コマンドをNVMコントローラ262に発行する。要求されたデータは、(データパス290によって示すように)NVM264からシステムメモリ252にコピーされる。OSは、システムメモリ252の一部を、障害が発生し、CPU250によるアクセスをブロック解除(unblock)した割り当てVA空間にマッピングする。図示するように、アプリケーション222又はアプリケーション232は、基本的なアクセスメカニズムを認識していない。OSは、例えばNVMコントローラ262及びNVM264等のブロックI/Oデバイスによって提供されるブロックI/O DMAコマンドを利用して、アクセスを実現する基本的な作業を実行する。
【0013】
ハードウェアの観点から、CPU250は、(レジスタインタフェースである)ブロックI/Oプログラミングインタフェースを使用して、例えば4キロバイトの単位でデータのブロックをシステムメモリ252にコピーするDMAコマンドを発行する。これは、NVMコントローラ262のブロックI/O DMAコマンドを使用してデータをコピーし、システムメモリ252に送る、例えばNVMデバイスドライバ245等のデバイスドライバを使用して達成される。次に、CPU250は、システムメモリ252からのデータにアクセスすることができる。GPU270は、例えばPCIe等の相互接続バスを介して、システムメモリ252からのデータにアクセスすることができる。或いは、データのコピーが、最初に(データパス292によって示すように)システムメモリ252からローカルメモリ272にコピーされる。次に、GPU270は、ローカルメモリ272からのデータにアクセスすることができる。
【0014】
上記は、一般的なメモリマッピングファイルI/Oメカニズム又はブロックI/Oアクセスモデルを説明している。一般的なメモリマップファイルI/Oメカニズムでは、GPU270がデータにアクセスする前に、一連のステップを順次完了する必要がある。特に、データは、コピーされ、システムメモリ252に記憶され、再びコピーされ、最終的にローカルメモリ272に記憶される。この間、GPU270は進行することができず、停止状態にある。問題として、GPU270は、NVM264にダイレクトアクセスすることができない。この問題に対する1つの潜在的な解決策は、バイトアドレス可能メモリマップデバイスである不揮発性デュアルインラインメモリモジュール(NVDIMM)を使用することである。しかしながら、NVDIMMがサポートされるのは、CPUに接続され、PCIeデバイスであるGPUに接続されていないダイナミックランダムアクセスメモリ(DRAM)インタフェースだけである。したがって、この提案された解決策は、ダイレクトアクセスを提供するのに不十分である。
【0015】
図3は、特定の実施形態による、ブロックI/Oデバイスへのダイレクトアクセスを提供する例示的な処理システム300を示す図である。処理システム300は、1つ以上のSSGカード310に接続されたホストコンピューティングシステム305を含むことができる。ホストコンピューティングシステム305は、1つ以上のCPU322とL2キャッシュ324とを含むプロセッサ320を含む。プロセッサ320は、例えばDRAM等のシステムメモリ326、及び、当業者に知られている他のコンポーネントに接続することができる。
【0016】
概して、各SSGカード310は、プロセッサ320とインタフェースするためのPCIeスイッチ330を含む。PCIeスイッチ330は、例示目的で示されており、他の電気インタフェース又は通信インタフェースを使用することができる。各SSGカード310は、関連するNVM334及びPCIeスイッチ330を介して接続される1つ以上のGPU340にアクセスするための例えばNVMeデバイス又はNVMHCIデバイス等の1つ以上のNVMコントローラ332を含む。各GPU340は、L2キャッシュ342に接続することができ、ローカルメモリ344にローカルに接続することができる。各SSGカード310は、PCIeスイッチ330と同じ場所に配置され、PCIeスイッチ330に接続され、1つ以上のNVMコントローラ332の各々にさらに接続されるフロントエンドプロセッサ350を含む。キャッシュ352は、フロントエンドプロセッサ350に接続されている。フロントエンドプロセッサ350は、マイクロプロセッサ、組み込み型マイクロプロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、又は、PCIeバス上でバイトアドレス可能性をエミュレートするためにNVMコントローラ332及びNVM334へのフロントエンドインタフェースとして機能する同様のデバイスであってもよい。特に、図4に関してさらに説明するように、フロントエンドプロセッサ350は、ホストコンピューティングシステム305又はGPU340からの入力コマンドをデコードし、NVMコントローラ332及びNVM334から要求されたバイトを読み出し、バイトをCPU322又はGPU340に直接転送する。一実施形態では、CPU322又はGPU340によるアクセスのために、バイトをL2キャッシュ324又はL2キャッシュ342に転送することができる。この構成は例示的なものであり、他の構成も、本明細書及び特許請求の範囲内で実施することができる。
【0017】
図4は、例えば図3の処理システム300等の処理システムのソフトウェア相互運用性を示す図である。図4は、単純化された処理システム405を使用して、ソフトウェアスタック400を使用するソフトウェア及びハードウェアの相互運用性を示している。概して、ソフトウェアスタック400は、CPU450上で動作する。ソフトウェアスタック400は、管理スタック410と、ブロックアクセスAPI420と、ファイルアクセスAPI430と、ファイルシステム440と、NVMデバイスドライバ445と、例えばOS(図示省略)等の他のソフトウェアコンポーネントと、を含むが、これらに限定されない。管理スタック410は、システム管理ツールを提供し、ファイルシステム440を制御及び構成し、ボリュームをフォーマットし、他の同様の機能を実行するのに使用される管理ユーザインタフェース(UI)412及び管理ライブラリ414を含む。ブロックアクセスAPI420及びファイルアクセスAPI430は、入出力(I/O)API又はアクセスAPIである。ブロックアクセスAPI420は、アプリケーション422によって使用され、標準ローデバイスアクセスプロトコル424を介して、例えば2K、4K、8K、16K、64K、128K等の様々なブロックサイズのメモリにアクセスする。ファイルアクセスAPI430は、標準ファイルAPI434を介してファイルアクセス440にアクセスするために、アプリケーション432によって使用される。
【0018】
処理システム405は、システムメモリ452に接続されたCPU450と、NVM462に接続されたNVMコントローラ460と、ローカルメモリ472に接続されたGPU470と、を含み、これら全ては、PCIeスイッチ480を介して接続されている。処理システム405は、フロントエンドプロセッサ465をさらに含む。一実施形態では、フロントエンドプロセッサ465は、宛先メモリアドレスへのDMAデータ転送を開始することを意味するPCIeマスタ、及び、別のデバイスメモリアクセス要求に応じることを意味するPCIeスレーブの両方とすることができる。一実施形態では、フロントエンドプロセッサ465は、スレーブ要求を維持するために設けることができるキャッシュ467に接続されている。フロントエンドプロセッサ465は、レジスタアパーチャ482及びメモリアパーチャ484を介してPCIeスイッチ480と同じ場所に配置され、接続されている。レジスタアパーチャ482及びメモリアパーチャ484は、(ベースアドレスレジスタ(BAR)としても知られる)PCIeセマンティックスの下で定義され、例えばGPU470等のピアPCIeデバイスやCPU450が、標準PCIeアクセスサイクルを使用して、例えばNVMコントローラ460及びNVM462等のターゲットPCIeデバイスにアクセスできるようにする。
【0019】
概して、データ転送コマンドが、レジスタアパーチャ482又はメモリアパーチャ484の何れかに該当するPCIe宛先アドレス(例えば、GPU470又はCPU450から受信される)を有する場合、データ転送コマンドは、フロントエンドプロセッサ465に転送される。PCIe宛先アドレスがレジスタアパーチャ482にある場合、フロントエンドプロセッサ465は、上述したようにNVMコントローラ460のブロックI/O DMAコマンドを介してブロックアドレス可能処理を実行する。PCIe宛先アドレスがメモリアパーチャ484にある場合、フロントエンドプロセッサ465は、バイトアドレス可能処理を実行する。一実施形態では、フロントエンドプロセッサ465は、例えば、読み出しアクセス及び書き込みアクセスのために動作することができる。読み出しアクセスの実施形態では、フロントエンドプロセッサ465は、(要求されたバイトが以前に要求されたブロックに存在する場合に)キャッシュ467からデータバイトを読み出すか、NVMコントローラ460のブロックI/O DMAコマンドを介してNVM462からデータブロックを読み出す。読み出されたデータブロックは、キャッシュ467に記憶され、要求されたバイトは、(データパス495によって示すように)CPU450又は(データパス496によって示すように)GPU470に転送される。書き込みアクセスの実施形態では、フロントエンドプロセッサ465は、データバイトをキャッシュ467に書き込み、(要求されたバイトがキャッシュ467に存在する場合に)NVMコントローラ460のブロックI/O DMAコマンドを介してデータをNVM462にフラッシュバックするか、NVMコントローラ460のブロックI/O DMAコマンドを介してデータをNVM462に書き込む。レジスタアパーチャ482及びメモリアパーチャ484の両方を設けることによって、ブロックアドレス可能性処理及びバイトアドレス可能性処理の両方が可能になる。
【0020】
フロントエンドプロセッサ465及びメモリアパーチャ484を含むことは、例えば、ブロックアクセスAPI420及びファイルアクセスAPI430に加えて、パーシステントメモリスタック490の使用を可能にする。ブロックアクセスAPI420及びファイルアクセスAPI430の動作は、上述した通りである。パーシステントメモリスタック490は、例えば、アプリケーション491がNVM462に対してゼロコピーアクセスを実行するのを可能にする。すなわち、アプリケーション491は、I/O処理なし、キューイングなし、並びに、非同期読み出し及び/又は書き込みなしに、メモリマッピング処理493を介してロード/ストア処理492を実行することができる。
【0021】
図5は、図3及び図4と連携して、読み出しアクセスシナリオにおいてブロックI/Oデバイスのバイトアドレス可能性を提供する例示的なフロー図500である。データ転送コマンド又はメモリアクセス要求は、例えばPCIeスイッチ330等のローカルスイッチを介して、例えばプロセッサ320又はGPU340等のプロセッサから例えばNVM334等の宛先デバイスに送信される(ステップ505)。一実施形態では、宛先アドレスにデータ転送コマンドを提供される。例えばフロントエンドプロセッサ350等のフロントエンドプロセッサは、データ転送コマンドが、ブロックアドレス可能処理を必要とするのか、又は、バイトアドレス可能処理を必要とするのかを判別する(ステップ510)。一実施形態では、データ転送コマンドがレジスタアパーチャにあるのか、又は、メモリアパーチャ484にあるのかによって、ブロックアドレス可能処理又はバイトアドレス可能処理の必要性が判別される。ブロックアドレス可能処理の場合、フロントエンドプロセッサは、要求されたブロックが、例えばキャッシュ352等の関連するキャッシュ内に存在するのかどうかを判別する(ステップ515)。要求されたブロックがキャッシュ内に存在する場合、要求されたブロックは、ブロックI/O処理を介して転送される(ステップ520)。一実施形態では、ブロックI/O処理は、ブロックI/O DMAコマンド処理であってもよい。要求されたブロックがキャッシュ内に存在しない場合、要求されたブロックは、宛先デバイスから読み出され(ステップ525)、ブロックI/O処理を介して転送される(ステップ520)。一実施形態では、要求されたブロック又は読み出されたブロックは、キャッシュに保存される。一実施形態では、要求されたブロックは、ターゲットデバイスに関係なく、システムメモリに転送される。
【0022】
バイトアドレス可能処理の場合、フロントエンドプロセッサは、要求されたブロックが関連するキャッシュ内に存在するかどうかを判別する(ステップ530)。要求されたバイトがキャッシュ内に存在する場合、要求されたバイトは、ターゲットプロセッサに直接転送される(ステップ535)。要求されたバイトがキャッシュ内に存在しない場合、要求されたバイトを含むブロックは、宛先デバイスから読み出される(ステップ540)。フロントエンドプロセッサは、要求されたバイトをターゲットプロセッサに転送する(ステップ535)。一実施形態では、要求されたブロック又は読み出されたブロックは、キャッシュに保存される。
【0023】
図6は、図3及び図4と連携して、書き込みアクセスシナリオにおいてブロックI/Oデバイスのバイトアドレス可能性を提供する例示的なフロー図600である。データ転送コマンド又はメモリアクセス要求は、例えばPCIeスイッチ330等のローカルスイッチを介して、プロセッサ320又はGPU340等のプロセッサから例えばNVM334等の宛先デバイスに送信される(ステップ605)。一実施形態では、宛先アドレスにデータ転送コマンドが提供される。例えばフロントエンドプロセッサ350等のフロントエンドプロセッサは、データ転送コマンドが、ブロックアドレス可能処理を必要とするのか、又は、バイトアドレス可能処理を必要とするのかを判別する(ステップ610)。一実施形態では、データ転送コマンドが、レジスタアパーチャにあるのか、又は、メモリアパーチャ484にあるのかによって、ブロックアドレス可能処理又はバイトアドレス可能処理の必要性が判別される。ブロックアドレス可能処理の場合、フロントエンドプロセッサは、要求されたブロックが、例えばキャッシュ352等の関連するキャッシュ内に存在するかどうかを判別する(ステップ615)。要求されたブロックがキャッシュ内に存在する場合、キャッシュは、データで更新され(ステップ620)、データは、NVMコントローラ332のブロックI/O DMAコマンドを介して、例えばNVM334等の宛先デバイスにフラッシュバックされる(ステップ622)。一実施形態では、キャッシュ内のデータが無効にされ(ステップ621)、データは、NVMコントローラ332のブロックI/O DMAコマンドを介して宛先デバイス内で更新される(ステップ622)。キャッシュの無効化は、様々な技術を用いて実施することができ、図6は例示的なものである。要求されたブロックがキャッシュ内に存在しない場合、データは、ブロックI/O DMAコマンドを介して宛先デバイス内で更新される(ステップ625)。
【0024】
バイトアドレス可能処理の場合、フロントエンドプロセッサは、要求されたバイトが関連するキャッシュ内に存在するかどうかを判別する(ステップ630)。要求されたバイトがキャッシュ内に存在する場合、キャッシュは、直接(つまり、バイトレベルで)更新され(ステップ635)、データは、NVMコントローラ332のブロックI/O DMAコマンドを介して、例えばNVM334等の宛先デバイスにフラッシュバックされる(ステップ637)。一実施形態では、キャッシュ内のデータが無効にされ(ステップ636)、データは、NVMコントローラ332のブロックI/O DMAコマンドを介して宛先デバイス内で更新される(ステップ637)。要求されたバイトがキャッシュ内に存在しない場合、データは、ブロックI/O DMAコマンドを介して宛先デバイス内で更新される(ステップ640)。
【0025】
図7は、1つ以上の開示された実施形態の一部を実施し得る例示的なデバイス700のブロック図である。デバイス700は、例えば、ヘッドマウントデバイス、サーバ、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータ等を含むことができる。デバイス700は、プロセッサ702と、メモリ704と、ストレージ706と、1つ以上の入力デバイス708と、1つ以上の出力デバイス710と、を含む。また、デバイス700は、オプションで入力ドライバ712及び出力ドライバ714を含むことができる。デバイス700は、図7に示されていない追加のコンポーネントを含み得ることが理解されるであろう。
【0026】
プロセッサ702は、中央処理装置(CPU)、グラフィックス処理ユニット(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含んでもよく、各プロセッサコアは、CPU又はGPUであってもよい。メモリ704は、プロセッサ702と同じダイ上に配置されてもよいし、プロセッサ702とは別に配置されてもよい。メモリ704は、揮発性又は不揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM、キャッシュ等)を含むことができる。
【0027】
ストレージ706は、固定又は着脱可能なストレージ(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等)を含むことができる。入力デバイス708は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリクススキャナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含むことができる。出力デバイス710は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信用の無線ローカルエリアネットワークカード)を含むことができる。
【0028】
入力ドライバ712は、プロセッサ702及び入力デバイス708と通信し、プロセッサ702が入力デバイス708から入力を受信するのを可能にする。出力ドライバ714は、プロセッサ702及び出力デバイス710と通信し、プロセッサ702が出力デバイス710に出力を送信するのを可能にする。入力ドライバ712及び出力ドライバ714がオプションのコンポーネントであることと、入力ドライバ712及び出力ドライバ714が存在しない場合には、デバイス700が同様に動作することと、に留意されたい。
【0029】
概して、データを転送する方法は、プロセッサがブロック入出力(I/O)デバイスへのアクセスを必要とする場合に、フロントエンドプロセッサが、ローカルスイッチを介してデータ転送コマンドを受信することを含む。フロントエンドプロセッサは、第1パスを介してデータ転送コマンドを受信した場合にバイトアドレス可能処理を行い、バイトアドレス可能処理の場合に、データ転送コマンドにおいて要求されたバイトがフロントエンドプロセッサに関連するキャッシュ内に存在するかどうかをチェックする。フロントエンドプロセッサは、データ転送コマンドが読み出しである場合には、バイトがキャッシュ内に存在しない場合に、当該バイトを含むブロックをブロックI/Oデバイスから読み出し、当該バイトを、ローカルスイッチを介してフロントエンドプロセッサからターゲットプロセッサに直接転送する。一実施形態では、プロセッサは、グラフィックス処理ユニット(GPU)又は中央処理装置(CPU)であり、GPU又はCPUのターゲットプロセッサであり、ローカルスイッチは、PCIeスイッチ又はルートコンプレックスであり、ブロックI/Oデバイスは、不揮発性メモリ(NVM)デバイスである。一実施形態では、第1パスは、ローカルスイッチのメモリアパーチャでデータ転送コマンドを受信するためのものである。一実施形態では、方法は、データ転送コマンド内の宛先アドレスがメモリアパーチャにあるかどうかを判別する。一実施形態では、方法は、ブロックがブロックI/Oデバイスから読み出される場合、ブロックをキャッシュに記憶する。一実施形態では、フロントエンドプロセッサは、データ転送コマンドを第2パスを介して受信した場合に、ブロックアドレス可能処理を行う。一実施形態では、第2パスは、ローカルスイッチのレジスタアパーチャでデータ転送コマンドを受信するためのものである。一実施形態では、方法は、データ転送コマンド内の宛先アドレスがレジスタアパーチャにあるかどうかを判別する。一実施形態では、方法は、データ転送コマンドが書き込みである場合には、バイトがキャッシュ内に存在する場合にキャッシュを更新し、データをブロック入出力(I/O)デバイスにフラッシュバックする。
【0030】
概して、データを転送する装置は、少なくとも1つのグラフィックス処理ユニット(GPU)と、少なくとも1つのブロック入出力(I/O)デバイスと、少なくとも1つのGPUに接続されたローカルスイッチと、ローカルスイッチ及び少なくとも1つのブロックI/Oデバイスに接続されたフロントエンドプロセッサと、フロントエンドプロセッサに接続されたキャッシュと、を含む。フロントエンドプロセッサは、少なくとも1つのブロックI/Oデバイスへのアクセスが必要な場合に、データ転送コマンドをGPUから受信し、データ転送コマンドを第1パスを介して受信した場合に、データ転送コマンドをバイトアドレス可能処理し、バイトアドレス可能処理の場合に、データ転送コマンドにおいて要求されたバイトがキャッシュ内に存在するかどうかをチェックする。データ転送コマンドが読み出しである場合、フロントエンドプロセッサは、バイトがキャッシュ内に存在しない場合に、当該バイトを含むブロックを少なくとも1つのブロックI/Oデバイスから読み出し、当該バイトをターゲットプロセッサに直接転送する。一実施形態では、装置は、ローカルスイッチ内にメモリアパーチャを含み、第1パスは、ローカルスイッチのメモリアパーチャでデータ転送コマンドを受信する。一実施形態では、フロントエンドプロセッサは、データ転送コマンドの宛先アドレスがメモリアパーチャにあるかどうかを判別する。一実施形態では、フロントエンドプロセッサは、ブロックが少なくとも1つのブロックI/Oデバイスから読み出される場合に、ブロックをキャッシュに記憶する。一実施形態では、フロントエンドプロセッサは、データ転送コマンドを第2パスを介して受信した場合、データ転送コマンドをブロックアドレス可能処理する。一実施形態では、装置は、ローカルスイッチ内にレジスタアパーチャを含み、第2パスは、ローカルスイッチのレジスタアパーチャでデータ転送コマンドを受信する。一実施形態では、フロントエンドプロセッサは、データ転送コマンドの宛先アドレスがレジスタアパーチャにあるかどうかを判別する。一実施形態では、データ転送コマンドが書き込みである場合、フロントエンドプロセッサは、バイトがキャッシュ内に存在する場合に、キャッシュを更新し、データを少なくとも1つのブロック入出力(I/O)でバスにフラッシュバックする。
【0031】
概して、データを転送するシステムは、プロセッサ及びシステムメモリを含むホストプロセッサと、少なくとも1つのソリッドステートグラフィックス(SSG)カードと、を含む。各SSGカードは、少なくとも1つのグラフィックス処理ユニット(GPU)と、少なくとも1つのブロック入出力(I/O)デバイスと、ホストプロセッサ及び少なくとも1つのGPUに接続されたローカルスイッチと、ローカルスイッチ及び各ブロックI/Oデバイスに接続されたフロントエンドプロセッサと、フロントエンドプロセッサに接続されたキャッシュと、を含む。フロントエンドプロセッサは、少なくとも1つのブロックI/Oデバイスへのアクセスが必要な場合に、データ転送コマンドをGPU又はホストプロセッサから受信し、データ転送コマンドを第1パスを介して受信した場合、データ転送コマンドをバイトアドレス可能処理し、バイトアドレス可能処理の場合に、データ転送コマンドにおいて要求されたバイトがキャッシュ内に存在するかどうかをチェックする。データ転送コマンドが読み出しである場合、フロントエンドプロセッサは、バイトがキャッシュ内に存在しない場合に、当該バイトを含むブロックをブロックI/Oデバイスから読み出し、当該バイトを、ローカルスイッチを介してターゲットプロセッサに直接転送する。一実施形態では、システムは、ローカルスイッチのメモリアパーチャを含み、第1パスは、ローカルスイッチのメモリアパーチャでデータ転送コマンドを受信し、フロントエンドプロセッサは、データ転送コマンドの宛先アドレスがメモリアパーチャにあるかどうかを判別する。一実施形態では、フロントエンドプロセッサは、データ転送コマンドを第2パスを介して受信した場合に、データ転送コマンドをブロックアドレス可能処理し、ローカルスイッチは、レジスタアパーチャを含み、第2パスは、ローカルスイッチのレジスタアパーチャでデータ転送コマンドを受信する。
【0032】
概して、処理システムで実行されると、データを転送する方法を処理システムに実行させる命令を含む非一時的なコンピュータ可読記憶媒体であって、方法は、プロセッサが、ブック入出力(I/O)デバイスへのアクセスが必要な場合に、フロントエンドプロセッサが、ローカルスイッチを介してデータ転送コマンドを受信するステップと、フロントエンドプロセッサが、データ転送コマンドを第1パスを介して受信した場合に、バイトアドレス可能処理を行うステップと、バイトアドレス可能処理の場合に、データ転送コマンドにおいて要求されたバイトが、フロントエンドプロセッサに関連するキャッシュ内に存在するかどうかをチェックするステップと、データ転送コマンドが読み出しである場合に、バイトがキャッシュ内に存在しない場合には、バイトを含むブロックをブロックI/Oデバイスから読み出すステップと、当該バイトを、ローカルスイッチを介してフロントエンドプロセッサからターゲットプロセッサに直接転送するステップと、を含む。一実施形態では、第1パスは、ローカルスイッチのメモリアパーチャでデータ転送コマンドを受信し、方法は、データ転送コマンド内の宛先アドレスがメモリアパーチャにあるかどうかを判別するステップと、データ転送コマンドを第2パスを介して受信した場合に、データ転送コマンドをブロックアドレス可能処理するステップと、を含み、第2パスは、ローカルスイッチのレジスタアパーチャでデータ転送コマンドを受信する。一実施形態では、非一時的なコンピュータ可読記憶媒体は、データ転送コマンドが書き込みである場合に、バイトがキャッシュに存在する場合にキャッシュを更新するするステップと、データをブロック入出力(I/O)デバイスにフラッシュバックするステップと、を含む。
【0033】
概して、本明細書で説明する実施形態を限定することなく、非一時的なコンピュータ可読記憶媒体は、処理システムで実行されると、バイトアドレス可能メモリとして不揮発性メモリにアクセスする方法を処理システムに実行させる命令を含む。
【0034】
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素を特定の組み合わせで上記のように説明されているが、各機能又は要素は、他の機能や要素なしに単独で使用されてもよいし、他の機能や要素を伴って若しくは伴わずに様々な組み合わせで使用されてもよい。
【0035】
提供された方法には、汎用コンピュータ、プロセッサ又はプロセッサコアにおける実施が含まれる。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令、及び、ネットリストを含む他の中間データ(このような命令はコンピュータ可読媒体に記憶され得る)の結果を使用して製造プロセスを構成することによって製造されてもよい。このような処理の結果は、本実施形態の態様を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【0036】
本明細書で提供される方法又はフロー図は、汎用コンピュータ若しくはプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、ROM、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、光学媒体(CD-ROMディスク等)、デジタル多用途ディスク(DVD)等が含まれる。
図1
図2
図3
図4
図5
図6
図7