(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-15
(45)【発行日】2024-01-23
(54)【発明の名称】情報処理装置、情報処理方法及び情報処理プログラム
(51)【国際特許分類】
G06F 12/06 20060101AFI20240116BHJP
G06F 15/173 20060101ALI20240116BHJP
【FI】
G06F12/06 530C
G06F15/173 665J
(21)【出願番号】P 2022534108
(86)(22)【出願日】2021-07-01
(86)【国際出願番号】 JP2021024911
(87)【国際公開番号】W WO2022004837
(87)【国際公開日】2022-01-06
【審査請求日】2022-12-28
(31)【優先権主張番号】P 2020115307
(32)【優先日】2020-07-03
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100109313
【氏名又は名称】机 昌彦
(74)【代理人】
【識別番号】100149618
【氏名又は名称】北嶋 啓至
(72)【発明者】
【氏名】田山 陽司
【審査官】後藤 彰
(56)【参考文献】
【文献】特開2010-211506(JP,A)
【文献】特開昭64-37654(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/06
G06F 15/173
(57)【特許請求の範囲】
【請求項1】
第1の演算手段と、
前記第1の演算手段と共通の仮想アドレス空間が割り当てられた第2の演算手段と、
前記第1の演算手段が備えるローカルメモリに記憶された第1のページテーブルと、
前記第2の演算手段が備えるローカルメモリに記憶された第2のページテーブルと、
前記第2の演算手段がアクセスした前記第2のページテーブルのページの第1のビットフラグが前記第2の演算手段がアクセスしたページのデータの無効を示す場合には、前記第2の演算手段がアクセスしたページと同一のページ番号のページを含む前記第1のページテーブルの複数のページのデータを一括して前記第2のページテーブルに転送する転送指示を生成するデータ管理手段と、
を備える情報処理装置。
【請求項2】
前記データ管理手段は、一括して転送される前記複数のページを、前記第2の演算手段のメモリアクセスの空間的局所性に基づいて選択する、請求項1に記載された情報処理装置。
【請求項3】
前記データ管理手段は、
前記第2の演算手段がアクセスした前記第2のページテーブルのページの第1のビットフラグが前記第2の演算手段がアクセスした前記ページのデータの無効を示し、
かつ、
前記第2の演算手段がアクセスした前記ページと同一のページ番号の前記第1のページテーブルのページのデータが前記第1の演算手段によって変更されてないことを前記第1のページテーブルの第2のビットフラグが示す場合は、前記転送指示を取り消し、前記第2の演算手段がアクセスした前記ページの第1のビットフラグを前記第2の演算手段がアクセスした前記ページのデータの有効を示すように設定する、請求項1又は2に記載された情報処理装置。
【請求項4】
前記第1の演算手段及び前記第2の演算手段は、それぞれ、アクセスした前記ページの前記第1のビットフラグがデータの有効を示す場合には前記データを用いた処理を行い、前記第1のビットフラグが前記データの無効を示す場合には前記データを用いた処理を行わない、
請求項1乃至3のいずれかに記載された情報処理装置。
【請求項5】
前記データ管理手段は、同一のページ番号の前記第1のページテーブルのページ及び前記第2のページテーブルのページのそれぞれの前記第1のビットフラグの有効及び無効を排他的に設定する、請求項4に記載された情報処理装置。
【請求項6】
前記第1の演算手段及び前記第2の演算手段の一方は中央処理装置(CPU)であり、他方は画像処理装置(GPU)である、請求項1乃至5のいずれかに記載された情報処理装置。
【請求項7】
前記第1の演算手段と前記第2の演算手段との間で転送される転送データを格納するデータ格納手段を備える、請求項1乃至6のいずれかに記載された情報処理装置。
【請求項8】
前記データ管理手段は、前記第1の演算手段の前記ローカルメモリを制御する第1の管理手段と前記第2の演算手段の前記ローカルメモリを制御する第2の管理手段とを含み、前記データ格納手段は、前記第1の管理手段が制御する第1の格納手段と前記第2の管理手段が制御する第2の格納手段とを含み、
前記第1の演算手段と、前記第1の管理手段と、前記第1の格納手段とを備える第1のデバイスと、
前記第2の演算手段と、前記第2の管理手段と、前記第2の格納手段とを備える第2のデバイスと、
を備える、請求項7に記載された情報処理装置。
【請求項9】
共通の仮想アドレス空間が割り当てられた第1の演算手段と第2の演算手段とによって演算を行い、
前記第1の演算手段が備えるローカルメモリに第1のページテーブルを記憶し、
前記第2の演算手段が備えるローカルメモリに第2のページテーブルを記憶し、
前記第2の演算手段がアクセスした前記第2のページテーブルのページの第1のビットフラグが前記第2の演算手段がアクセスしたページのデータの無効を示す場合には、前記第2の演算手段がアクセスしたページと同一のページ番号のページを含む前記第1のページテーブルの複数のページのデータを一括して前記第2のページテーブルに転送する転送指示を生成する、
情報処理方法。
【請求項10】
情報処理装置のコンピュータに、
共通の仮想アドレス空間が割り当てられた第1の演算手段と第2の演算手段とによって演算を行う処理、
前記第1の演算手段が備えるローカルメモリに第1のページテーブルを記憶する処理、
前記第2の演算手段が備えるローカルメモリに第2のページテーブルを記憶する処理、
前記第2の演算手段がアクセスした前記第2のページテーブルのページの第1のビットフラグが前記第2の演算手段がアクセスしたページのデータの無効を示す場合には、前記第2の演算手段がアクセスしたページと同一のページ番号のページを含む前記第1のページテーブルの複数のページのデータを一括して前記第2のページテーブルに転送する転送指示を生成する処理、
を実行させるための情報処理
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理装置及び情報処理方法に関し、特に、複数の演算装置のメモリ間でデータ転送を行う機能を備える情報処理装置、情報処理方法及び情報処理プログラムの記録媒体に関する。
【背景技術】
【0002】
CPU(Central Processing Unit)とGPU(Graphic Processing Unit)とを組み合わせた情報処理装置は、高速な処理が要求されるコンピュータにおいて広く用いられている。CPUは汎用的な演算装置であり、GPUは画像処理などを目的とした並列演算に特化された演算装置である。画像処理に関する演算をGPUが担うことによって、情報処理装置は3次元画像などの複雑な演算を高速に実行できる。GPUは、その高速性を生かして、画像処理のみならず機械学習にも用いられつつある。
【0003】
CPUとその配下のGPUとの間で機能が分担される情報処理装置では、CPUとGPUとがそれぞれ独立したローカルメモリを持つ構成が用いられる。このような構成においてメモリの管理や演算装置の間のデータ転送を効率よく行うためには複雑なプログラミングが必要となる。例えば、配列の中にポインタが含まれているデータをコピーする「ディープコピー」と呼ばれる操作をプログラムが実行する際には、元の配列に加えて配列内のポインタが指しているデータを同時にコピーする必要がある。このような操作を必要とするプログラミングを容易にするために、CPUとGPUとが同一のアドレス空間を使用するコンピュータプラットフォームが知られている。例えば、米国エヌビディア社が開発した、CUDA(登録商標)と呼ばれる並列演算のためのプラットフォームが知られている。CPUとGPUとが同一のアドレス空間を持つプラットフォームを用いることにより、CPUとGPUとを備える情報処理装置のプログラミングの容易化やプログラムの生産性の向上が期待される。
【0004】
本発明に関連して、特許文献1には共有のメインメモリを有するマルチプロセッサシステムに関する技術が記載されている。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、CPUのローカルメモリとGPUのローカルメモリのように、物理的に異なるメモリに確保されたデータをCPU及びGPUの両方から参照するためには、データを一方のローカルメモリから他方のローカルメモリへ転送する必要がある。例えば、CUDAバージョン6以降では、Unified Memoryと呼ばれる、ホストとデバイスとの間のデータ転送機能が用意される。しかし、CPUとGPUと間のデータ転送は一般的には1ページずつ行われるため、データ転送が繰り返し行われる場合には処理速度が低下する場合もある。
(発明の目的)
本発明は、複数の演算装置が使用される情報処理装置において、これらの演算装置間のデータ転送の効率を向上させるための技術を提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の情報処理装置は、
第1の演算手段と、
前記第1の演算手段と共通の仮想アドレス空間が割り当てられた第2の演算手段と、
前記第1の演算手段が備えるローカルメモリに記憶された第1のページテーブルと、
前記第2の演算手段が備えるローカルメモリに記憶された第2のページテーブルと、
前記第2の演算手段がアクセスした前記第2のページテーブルのページの第1のビットフラグが前記第2の演算手段がアクセスしたページのデータの無効を示す場合には、前記第2の演算手段がアクセスしたページと同一のページ番号のページを含む前記第1のページテーブルの複数のページのデータを一括して前記第2のページテーブルに転送する転送指示を生成するデータ管理手段と、を備える。
【0008】
本発明の情報処理方法は、
共通の仮想アドレス空間が割り当てられた第1の演算手段と第2の演算手段とによって演算を行い、
前記第1の演算手段が備えるローカルメモリに第1のページテーブルを記憶し、
前記第2の演算手段が備えるローカルメモリに第2のページテーブルを記憶し、
前記第2の演算手段がアクセスした前記第2のページテーブルのページの第1のビットフラグが前記第2の演算手段がアクセスしたページのデータの無効を示す場合には、前記第2の演算手段がアクセスしたページと同一のページ番号のページを含む前記第1のページテーブルの複数のページのデータを一括して前記第2のページテーブルに転送する転送指示を生成する、
手順を含む。
【0009】
本発明の情報処理プログラムは、情報処理装置のコンピュータに、
共通の仮想アドレス空間が割り当てられた第1の演算手段と第2の演算手段とによって演算を行う処理、
前記第1の演算手段が備えるローカルメモリに第1のページテーブルを記憶する処理、 前記第2の演算手段が備えるローカルメモリに第2のページテーブルを記憶する処理、 前記第2の演算手段がアクセスした前記第2のページテーブルのページの第1のビットフラグが前記第2の演算手段がアクセスしたページのデータの無効を示す場合には、前記第2の演算手段がアクセスしたページと同一のページ番号のページを含む前記第1のページテーブルの複数のページのデータを一括して前記第2のページテーブルに転送する転送指示を生成する処理、
を実行させる。
【発明の効果】
【0010】
本発明の情報処理装置、情報処理方法及び情報処理プログラムは、複数の演算装置が使用される情報処理装置において、演算装置間のデータ転送の効率を向上させることを可能とする。
【図面の簡単な説明】
【0011】
【
図1】第1の実施形態の情報処理装置1の構成例を示すブロック図である。
【
図2】Vビットフラグに応じたページ転送について説明する図である。
【
図3】ホスト100とデバイス200との間での複数ページの一括転送を説明する図である。
【
図4】Cビットフラグを用いたページテーブル11及び21の管理の例を示す図である。
【
図5】情報処理装置1のデータ転送の例を示すフローチャートである。
【
図6】第3の実施形態の情報処理装置500の構成例を示すブロック図である。
【発明を実施するための形態】
【0012】
本発明の実施形態について図面を参照して以下に説明する。図中に示された矢印は信号の向きあるいは処理の順序を例示するものであり、これらの限定を意図しない。また、実施形態及び図面では既出の要素には同一の参照符号を付して、重複する説明は省略する。
【0013】
(第1の実施形態)
図1は、本発明の第1の実施形態の情報処理装置1の構成例を示すブロック図である。
情報処理装置1は、ホスト100とデバイス200とを含むコンピュータである。情報処理装置1は、ホスト100が備えるCPU10とデバイス200が備えるGPU20とを用いた演算処理によって、高い演算能力を発揮する。情報処理装置1は、例えば、CUDAバージョン6から実装されたUnified Memoryアーキテクチャが用いられたコンピュータである。情報処理装置1は、さらに、CPU10及びGPU20の演算を制御する情報を入力する図示されない入力装置や、CPU10及びGPU20の演算結果を出力する図示されない出力装置を備えてもよい。入力装置は例えばキーボードであり出力装置は例えばディスプレイである。演算を制御する情報は、例えばプログラムである。
【0014】
ホスト100は、CPU10及びメモリ等の周辺回路を含む。デバイス200も、GPU20及びメモリ等の周辺回路を含む。GPU20は、CPU10の配下で動作する高速な演算装置である。情報処理装置1は、ホスト100及びデバイス200との間で複数のページを一括して転送することにより、これらの間で頻繁なデータ転送が必要となる場合において、情報処理装置1の処理速度の低下を抑制する。
【0015】
ホスト100は、CPU10、ローカルメモリ101及びデータ管理部13を備える。
CPU10は、ローカルメモリ101上のデータを用いて演算を行う演算手段を担う。ローカルメモリ101はCPU10が使用するデータを記憶するメモリを含む電気回路であり、ページテーブル11及び転送データ領域12を備える。CPU10はローカルメモリ101にアクセスできる。しかし、GPU20はローカルメモリ101にはアクセスできない。
【0016】
ページテーブル11はホスト100で用いられるデータがページ単位で格納されたテーブルである。ページテーブル11はローカルメモリ101に格納される。ページテーブル11は、格納されるページ毎に、PN(Page Number)ビットフラグ、V(Valid)ビットフラグ及びC(Change)ビットフラグを持つ。PNビットフラグはページ番号を示し、CPU10からのポインタアクセス時に参照される。VビットフラグはCPU10からのページアクセスの有効(Vaild)又は無効(Invalid)を示す。Cビットフラグはそのページエントリのデータが更新されているか否かを示す。転送データ領域12は、ホスト100からデバイス200へデータを転送する際に、転送の対象となるデータ(以下、「転送データ」という。)を一時的に保管する領域である。また、転送データ領域12は、デバイス200からホスト100へ転送された転送データを一時的に保管する領域でもある。ホスト100とデバイス200との間は、データバスで接続される。データバスとしてPCI(Peripheral Component Interconnect) Express(PCIe)を用いることができる。ホスト100とデバイス200との間のデータの転送は1ページずつ行われる。1ページのデータ量は、例えば4キロバイトである。
【0017】
データ管理部13は、ホスト100とデバイス200との間のデータ転送を管理する電気回路である。データ管理部13はデバイス200が備えるデータ管理部23と通信可能に接続されている。データ管理部13はデータ管理部23からのデータ転送要求に応じて、転送データをページテーブル11から転送データ領域12へコピーする。その際、データ管理部13は、ページテーブル21のVビットフラグ及びCビットフラグの値を必要に応じて操作する。これらのビットフラグの値の意味、及び、ビットフラグの値に応じた情報処理装置1の動作の例は、本実施形態及び後の実施形態で説明する。なお、データ管理部13及び23は、情報処理装置1の内部で一体化されていてもよい。
【0018】
データ管理部13は、転送データをページテーブル11のページエントリから転送データ領域12へコピーした後、デバイス200の転送データ領域22へ当該転送ページを転送する。転送データの転送には、DMA(Direct Memory Access)転送が用いられてもよい。
【0019】
また、データ管理部13は、CPU10がページテーブル11を参照した際には、参照されたページエントリのVビットフラグおよびCビットフラグの値に応じてデータ転送要求を生成し、生成されたデータ転送要求をデータ管理部23へ送信する。そして、データ管理部13は、その転送要求に応じてデバイス200からホスト100へ転送された転送データを、ページテーブル11の同一のページ番号のページエントリに書き込む。データ管理部13とデータ管理部23との間の命令や応答はデータ転送に用いられるデータバスによって送受信されてもよいし、他の経路によって送受信されてもよい。
【0020】
デバイス200は、GPU20、ローカルメモリ201及びデータ管理部23を備える。GPU20は、ローカルメモリ201上のデータを用いて演算を行う演算手段を担う。
ローカルメモリ201はGPU20が使用するデータを記憶するメモリを含む電気回路であり、ページテーブル21及び転送データ領域22を備える。GPU20はローカルメモリ201にアクセスできる。しかし、CPU10はローカルメモリ201にはアクセスできない。
【0021】
ページテーブル21はデバイス200で用いられるデータがページ単位で格納されたテーブルである。ページテーブル21はローカルメモリ201に格納される。ページテーブル21は、ページテーブル11と同様に、格納されるページ毎に、PNビットフラグ、Vビットフラグ及びCビットフラグを持つ。PNビットフラグはページ番号を示し、GPU20からのポインタアクセス時に参照される。VビットフラグはGPU20からのページアクセスの有効又は無効を示す。Cビットフラグはそのページエントリのデータが更新されているか否かを示す。転送データ領域22は、デバイス200からホスト100へデータを転送する際に、転送データを一時的に保管する領域である。また、転送データ領域22は、ホスト100からデバイス200へ転送された転送データを一時的に保管する領域でもある。
【0022】
データ管理部23は、デバイス200とホスト100との間のデータ転送を管理する電気回路である。データ管理部23はデータ管理部13からのデータ転送要求に応じて、転送データをページテーブル21から転送データ領域22へコピーする。その際、データ管理部23は、ページテーブル21のVビットフラグ及びCビットフラグの値を必要に応じて操作する。
【0023】
データ管理部23は、転送データをページテーブル21のページエントリから転送データ領域22へコピーした後、ホスト100の転送データ領域12へ当該転送ページを転送する。転送データの転送には、DMA転送が用いられてもよい。
【0024】
また、データ管理部23は、GPU20がページテーブル21を参照した際には、参照されたページエントリのVビットフラグおよびCビットフラグの値に応じてデータ転送要求を生成し、生成されたデータ転送要求をデータ管理部13へ送信する。そして、データ管理部23は、その転送要求に応じてホスト100からデバイス200へ転送された転送データを、ページテーブル21の同一のページ番号のページエントリに書き込む。
【0025】
(動作例の説明)
ページテーブル11及び21に付されたVビットフラグに応じた転送データの転送例を説明する。
図2は、情報処理装置1におけるVビットフラグに応じたページ転送について説明する図である。情報処理装置1では、CPU10とGPU20には共通の仮想アドレス空間が割り当てられる。そして、ホスト100ではページテーブル11、デバイス200ではページテーブル21が用いられる。ページテーブル11及び21は、それぞれ、ローカルメモリ101及び201に格納される。
【0026】
ページテーブル11及び21の各ページエントリは、「PN」(ページ番号)、「V」(Vビットフラグ)、「C」(Cビットフラグ)及びPNに対応するアドレス空間のデータで構成される。ページテーブル11及び21において、ページエントリの処理はページテーブルのVビットフラグに応じて切り替えられる。ここで、Vビットフラグは、ページテーブル11及びページテーブル21のそれぞれにおいて、Vビットフラグが付されたページのデータが最新のものであるか(すなわち、そのデータを処理に用いてよいか)どうかを示す。そして、同一のアドレスのページエントリにおいて、Vビットフラグの値は、ページテーブル11及びページテーブル21の一方では「1」(Valid、有効)であり、他方では「0」(Invalid、無効)となるように、排他的に設定される。「有効」は、そのページのデータが最新であるため実行中のプログラムがそのページのデータを参照可能であることを示す。「無効」は、そのページのデータが最新ではないため、実行中のプログラムからの参照が禁止されていることを示す。
【0027】
例えば、ページテーブル11のあるページXのVビットフラグが「1」(有効)であれば、CPU10はページXのデータを読み込んで処理できる。このとき、ページテーブル21のページXのVビットフラグは「0」(無効)であり、GPU20はページテーブル21のページXのデータを使用できない。逆に、ページテーブル21のあるページYのVビットフラグが「1」(有効)であれば、GPU20はページYのデータを読み込んで処理できる。このとき、ページテーブル11のページYのVビットフラグは「0」(無効)であり、CPU10はページテーブル11のページYのデータを使用できない。これは、ローカルメモリ101及び201上の最新のデータは常にどちらか一方のみであるからである。以下では、記載を簡潔にするためにページ番号(Page Number、PN)が1であることを「PN=1」と記載し、他の値の場合や他のビットフラグについてもこれに準じて記載する。
【0028】
図2を参照して、デバイス200において、GPU20が、V=0(無効)であるページテーブル21のページにアクセスした場合について説明する。GPU20がページテーブル21のPN=1のページエントリにアクセスすると(
図2の[1])、割り込みが発生し当該アクセス処理は中断される(
図2の[2])。割り込みの発生は、データ管理部23からデータ管理部13へ通知される。データ管理部23は、GPU20がアクセスしたPN=1のデータをローカルメモリ101からローカルメモリ201へ転送する指示を生成し、生成された指示をデータ管理部13へ送信する。
【0029】
データ管理部13は、データ管理部23からの指示に応じて、ページテーブル11のPN=1のページエントリのVビットフラグをV=1(有効)からV=0(無効)に変更する(
図2の[3])。そして、データ管理部13は、ページテーブル11のPN=1のアドレスをDMA転送の転送元とした転送データの転送を設定する(
図2の[4])。転送データは、転送データ領域12を介してデバイス200の転送データ領域22へDMA転送される(
図2の[5])。
【0030】
最後に、データ管理部23は、ホスト100から転送された転送データをページテーブル21のPN=1のページエントリに格納し(
図2の[6])、ページテーブル21のPN=1のVビットフラグをV=0からV=1に変更する(
図2の[7])。これにより、ページテーブル21のPN=1のページのデータおよびVビットフラグが更新され、GPU20は当初はアクセスできなかったPN=1のデータを使用できるようになる。その結果、GPU20は、割り込みから復帰してPN=1のデータを読み込んで処理を続行できる。
【0031】
このように、GPU20がV=0であるページエントリにアクセスした場合には、ページテーブル11の同一のページ番号のページのデータがホスト100からデバイス200へ転送される。ページテーブル21は、最新のデータであるページテーブル11のデータによって更新されるため、GPU20がアクセスしたページテーブル21のページエントリはV=1に変更される。これにより、GPU20のページテーブル21のデータが最新でない場合も、最新のデータがCPU10のページテーブル11から転送され、GPU20はそのデータを使用できる。
【0032】
同様に、CPU10がV=0であるページエントリにアクセスした場合にも、これに準じた手順によりページテーブル21の同一ページのデータがデバイス200からホスト100へ転送される。そして、CPU10がアクセスしたページテーブル11のページが更新されるため、CPU10は転送されたデータを使用できる。
【0033】
以上のように、ホスト100とデバイス200との間でVビットフラグを用いてページエントリの転送を行うことで、CPU10及びGPU20のプログラムにおけるメモリアクセスの管理が容易になる。その結果、例えばホスト100とデバイス200との間でディープコピーを行うプログラムにおいてデータが最新であるかどうかをプログラム内で考慮する必要がなくなるため、情報処理装置1のプログラミングが容易となる。
【0034】
図2で説明した手順では、ホスト100とデバイス200との間で、データは1ページ毎に自動的に転送される。このため、ホスト100とデバイス200との間でページのデータの転送が頻発する場合には、プログラミング時に転送処理が手作業で最適化されたプログラムと比較して、データの転送効率が低くなる場合がある。そこで、次に、ホスト100とデバイス200との間で複数のページのデータが一括して転送される形態を説明する。複数のページのデータを一括して転送することで、データの転送の頻度の増加が抑制され、情報処理装置1の処理速度の向上が期待される。
【0035】
図3はホスト100とデバイス200との間での複数ページの一括転送を説明する図である。Vビットフラグの値に応じてページのデータを転送する処理は
図2の手順と同様である。すなわち、ホスト100のページテーブル11及びデバイス200のページテーブル21の一方においてV=0(無効)であるページ番号のページエントリへのアクセスが発生した場合には、他方のページから当該一方のページへデータが転送される。
【0036】
図3において、GPU20がページテーブル21のPN=1のページエントリ(PN=1)にアクセスすると(
図3の[1])、V=0(無効)であるため割り込みが発生する(
図3の[2])。割り込みの発生に伴い、データ管理部23からデータ管理部13へデータ転送の指示が送信される。割り込みの発生に応じて、データ管理部13はPN=1のページを含む複数のページエントリのVビットフラグをV=1からV=0に変更する(
図3の[3])。
図3は、PN=1からPN=3の3ページのページエントリにおいて、それぞれのVビットフラグがV=1からV=0に変更される例を示す。その後、データ管理部13は、PN=1からPN=3のページエントリを転送データ領域12から転送データ領域22へDMA転送する(
図3の[4]-[5])。そして、データ管理部23は、転送データをページテーブル21のPN=1からPN=3のページエントリに格納し(
図3の[6])、ページテーブル21のPN=1からPN=3のVビットフラグをV=0からV=1に変更する(
図3の[7])。
【0037】
複数のページのデータが同時に転送されることにより、デバイス200は、GPU20の現在の処理に必要なデータの他に、今後の処理で使用される可能性があるページのデータを予めローカルメモリ201に記憶させることができる。その結果、
図3で説明した手順は、GPU20がページエントリへアクセスした際にページエントリが無効(V=0)である可能性を低減し、ひいてはデータ転送の頻繁な発生による情報処理装置1の性能低下を抑制できる。すなわち、本実施形態の情報処理装置1は、複数の演算装置が使用される情報処理装置において、演算装置間のデータ転送の効率を向上させることができる。
【0038】
図3では、本来必要とされるPN=1のページに加えてPN=2のページ及びPN=3のページが一括して転送される例を説明した。ホスト100からPN=1のページとともに転送されるページの選択については、いくつかの方法が考えられる。GPU20がアクセスしようとしたページ(
図3ではPN=1)と関連性のあるページが、PN=1のページとともに転送されてもよい。より具体的には、GPU20のメモリアクセスの空間的局所性に基づいてPN=1のページの近辺の複数のページから、一括して転送されるページが選択されてもよい。
図3は、メモリアクセスの空間的局所性に基づいてPN=1~PN=3のページが転送される例である。あるいは、データ管理部23はGPU20のメモリアクセスの統計情報を記録する機能を備えてもよい。この場合、データ管理部23はこの統計情報に基づいてPN=1のデータの参照後に参照される可能性が高いページを選択し、選択されたページのデータが一括して転送されるようにDMA転送を設定してもよい。
【0039】
なお、一括して転送されるページの総数は3ページに限られない。また、ページテーブル11においてV=0であるページエントリは、ページテーブル21ではV=1でありGPU20が利用可能であるためホスト100からデバイス200への転送の対象としなくてもよい。
【0040】
(第2の実施形態)
第1の実施形態の
図3では、複数ページ(PN=1からPN=3)を一括してホスト100からデバイス200へ転送する例を説明した。
図3の例では、ホスト100のページテーブル11において、PN=2のページエントリのVビットフラグは、ページのデータがデバイス200へ転送されることに伴いV=0(無効)に変更される。従って、PN=2のページを含む転送データをデバイス200へ転送した後にCPU10がPN=2のページへアクセスすると、ホスト100において割り込みが発生する。そうすると、ホスト100は、デバイス200からPN=2のページを取得する必要がある。
【0041】
この場合、ホスト100から転送されたPN=2のページのデータが転送後にデバイス200において更新されていれば、更新されたPN=2のページをデバイス200からホスト100へ転送する必要がある。しかし、デバイス200において、PN=2のページが転送後に更新されていない場合には、PN=2のページのデータはホスト100にあるPN=2のページのデータと同一である。従って、この場合はPN=2のページをデバイス200からホスト100へ転送する必要はない。
【0042】
そこで、第2の実施形態では、それぞれのページエントリに設けられたCビットフラグを利用する。Cビットフラグは、対応するページエントリがCPU10またはGPU20により更新されたか否かを表す。本実施形態では、Cビットフラグが「0」(C=0)の場合はページエントリが更新されていないことを示し、Cビットフラグが「1」(C=1)の場合はページエントリが更新されたことを示す。
【0043】
図4はCビットフラグを用いたページテーブル11及び21の管理の例を示す図である。
図4ではCビットフラグ及びVビットフラグに応じてページのデータが転送される。Vビットフラグを用いた、データの基本的な転送処理は
図3の手順と同様である。すなわち、デバイス200のページテーブル21においてV=0(無効)であるページエントリへGPU20がアクセスした場合には、ホスト100からデバイス200へ当該ページのデータが転送される。この場合、複数のページが一括して転送される。
【0044】
図4では、
図3の手順の実行によって、PN=1~PN=3のデータがホスト100からコピーされた後の動作例を説明する。
図3の手順の実行により、デバイス200においてPN=1~PN=3のVビットフラグはすべてV=1(有効)となっている。一方、ホスト100においては、PN=1~PN=3のVビットフラグはすべてV=0(無効)である。ここで、CPU10がページテーブル11のPN=2のエントリにアクセスすると(
図4の[1])、V=0であるため割り込みが発生する。割り込みの発生はデータ管理部13からデータ管理部23へデータ転送要求として通知される(
図4の[2])。
【0045】
割り込みの発生に応じて、データ管理部23はページテーブル21のPN=2のCビットフラグの値を確認する(
図4の[3])。PN=2のページエントリにおいてC=0(ページが未更新)であった場合には、デバイス200において、PN=2のページのデータはGPU20によって更新されていない。この場合、デバイス200からホスト100への当該ページの転送は不要であるため、データ管理部23は、PN=2のページのデータの、ホスト100へのDMA転送を設定しない。また、CPU10の割り込みもキャンセルされる(
図4の[4])。
【0046】
ここで、ページテーブル11及び21の、Vビットフラグ及びCビットフラグは適宜更新される(
図4の[5])。すなわち、CPU10がアクセスしたPN=2のページエントリに関して、ページテーブル11のPN=2のページエントリはV=0(無効)からV=1(有効)に変更され、ページテーブル21のPN=2のページエントリはV=1からV=0に変更される。これにより、割り込みから復帰したCPU10は、Vビットフラグの更新後に、ページテーブル11のPN=2のページエントリにアクセスできるようになる。また、ページテーブル21のPN=2のページエントリではC=0が維持されるとともに、ページテーブル11のPN=2のページエントリではC=1に設定される。
【0047】
なお、
図4の[3]においてページテーブル21のPN=2においてC=1(ページが更新済)であった場合には、
図2又は
図3で説明したページテーブル11からページテーブル21へのページの転送に準じた手順が適用できる。すなわち、データ管理部23は、ページテーブル21のPN=2のページのデータをホスト100へDMA転送し、データ管理部13は転送データを用いてページテーブル11のPN=2のページのデータを更新してV=1とする。これにより、CPU10は、GPU20によって更新されたPN=2のページのデータを入手して利用できる。
【0048】
図5は、
図3及び
図4で説明した、情報処理装置1のデータ転送の例を示すフローチャートである。GPU20がPN=1のページエントリへアクセスする(
図5のステップS01)。PN=1においてV=0(無効)の場合は(ステップS02:YES)、ページテーブル11の(すなわちホスト100側の)PN=1を含む複数ページ(PN=1~3)がV=0に設定される(ステップS03)。そして、ホスト100からデバイス200にPN=1~3のページのデータが転送される(ステップS04)。ページテーブル21の(すなわちデバイス200側の)PN=1~3のページエントリは転送データによって更新され、これらのページのVビットフラグはV=1に設定される(ステップS05)。
その後、GPU20はページテーブル21にアクセスし、PN=1のデータにアクセスして処理を続行する(ステップS06)。ここまでの手順は第1の実施形態において
図3で説明した手順である。ステップS02においてデバイス200側のPN=1のページがV=1である場合は(ステップS02:NO)、ページのデータの転送は行われず、GPU20は現在のページのデータを使用して処理を継続する。
【0049】
ステップS06の後は、ホスト100においてCPU10がPN=2のページエントリにアクセスが発生する場合(ステップS07)について記載する。ホスト側のPN=2のページにおいてV=1であると(ステップS08:NO)、CPU10はPN=2のページのデータを用いて処理を実行する(ステップS13)。一方、V=0であると(ステップS08:YES)割り込みが発生し、デバイス200のデータ管理部23はホスト100のデータ管理部13からPN=2のページの転送要求を受ける。ここで、データ管理部23はページテーブル21を参照し、転送要求を受けたページ(PN=2)のCビットフラグを確認する(ステップS09)。
【0050】
ステップS09においてC=0(ページが未更新)であった場合には(ステップS09:NO)、PN=2のページはGPU20によって更新されていない。この場合、デバイス200からホスト100へのPN=2のページの転送は不要であり、転送要求がキャンセルされることでCPU10は処理を続行できる(ステップS11~S13)。この場合、データ管理部23はページテーブル21のPN=2のページをV=0に設定し、C=0は維持する(ステップS11)。また、データ管理部13はページテーブル11のPN=2のページをV=1、C=1に設定する(ステップS12)。従って、割り込みから復帰したCPU10は、PN=2のページにおいてV=1であるためPN=2のページのデータにアクセスし、処理を実行できるようになる(ステップS13)。
【0051】
一方、デバイス200のPN=2のページエントリにおいてC=1(ページが更新済)であった場合は(ステップS09:YES)、GPU20によりPN=2のページが更新されている。この場合には、データ管理部23は、PN=2のページをデバイス200からホスト100へ転送し(ステップS10)、ページテーブル21のPN=2のページエントリをV=0、C=0に設定する(ステップS11)。ホスト100では、データ管理部13がページテーブル11のPN=2のページをV=1、C=1に設定する(ステップS12)。これにより、CPU10は、GPU20によって更新されたPN=2のページエントリを使用して処理を継続する(ステップS13)。
【0052】
このように、CPU10又はGPU20により対象ページが更新されているか否かを示すCビットを新たに設けることで、複数ページが転送される場合において、転送後に更新されていないページの不必要な再転送の発生を抑制できる。その結果、本実施形態の情報処理装置1は、複数の演算装置が使用される情報処理装置において、これらの演算装置間のデータ転送の効率をさらに向上させることができる。
【0053】
(第3の実施形態)
図6は、本発明の第3の実施形態の情報処理装置500の構成例を示すブロック図である。情報処理装置500は、第1の演算部501、第2の演算部502、ローカルメモリ503及び504、並びにデータ管理部505を備える。第1の演算部501及び第2の演算部502は、プログラムによって動作する演算装置であり、例えば一方はCPUであり他方はGPUである。第2の演算部502には、第1の演算部501と共通の仮想アドレス空間が割り当てられる。ローカルメモリ503は第1の演算部501が使用するメモリであり、ローカルメモリ504は第2の演算部が使用するメモリである。ローカルメモリ503は、第1の演算部501が使用するページエントリを、第1のページテーブルとして記憶する。ローカルメモリ504は、第2の演算部502が使用するページエントリを、第2のページテーブルとして記憶する。
【0054】
データ管理部505は、第2の演算部502がアクセスした第2のページテーブルのページにおいて、第1のビットフラグが、第2の演算部502がアクセスしたページのデータが無効であることを示す場合には、転送指示を生成する。転送指示は、第2の演算部502がアクセスしたページと同一のページ番号のページを含む第1のページテーブルの複数のページのデータを一括して第2のページテーブルに転送する指示である。すなわち、第2の演算部502がアクセスしたページエントリのデータが無効である場合には、当該ページと同一のページ番号のページのデータを含む複数のページのデータが一括して第1の演算部501から第2の演算部502に転送される。
【0055】
このような構成により、情報処理装置500は、第2の演算部502がアクセスしたページエントリのデータが第1の演算部501で使用されている場合に、第1の演算部501と第2の演算部502との間のデータ転送の効率を向上させることができる。その理由は、データ管理部505が、複数のページを一括して第1の演算部501から第2の演算部502に転送する指令を生成するからである。これにより、1ページずつデータ転送を行う場合と比較して、データ転送が必要となる状況の発生回数を抑制できる。すなわち、情報処理装置500は、複数の演算装置が使用される情報処理装置において、演算装置間のデータ転送の効率を向上させることができる。
【0056】
以上、実施形態を参照して本発明を説明したが、本発明は上記の実施形態に限定されない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0057】
また、それぞれの実施形態に記載された構成は、必ずしも互いに排他的なものではない。本発明の作用及び効果は、上述の実施形態の全部又は一部を組み合わせた構成によって実現されてもよい。
【0058】
以上の各実施形態に記載された機能及び手順は、CPU10、GPU20又は他の演算装置がプログラムを実行することにより実現されてもよい。プログラムは、有形であり、かつ、一時的でない(tangible and non-transitory)記録媒体に記録される。記録媒体としては半導体メモリ又は固定磁気ディスク装置が用いられるが、これらには限定されない。
【0059】
この出願は、2020年7月3日に出願された日本出願特願2020-115307を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【0060】
1 情報処理装置
10 CPU
20 GPU
11、21 ページテーブル
12、22 転送データ領域
13、23、505 データ管理部
100 ホスト
101、201、503、504 ローカルメモリ
200 デバイス
500 情報処理装置
501 第1の演算部
502 第2の演算部
505 データ管理部