(57)【要約】【課題】ユーザプログラムの制御に基づくデータ転送を、ＣＰＵコアの処理とは非同期な処理として実現する。【解決手段】プロセッサ１００は、ユーザプログラムを実行するＣＰＵコア１０と、データ転送装置５０とを備える。ＣＰＵコア１０は、ユーザプログラムからの要求であって、そのユーザプログラムに対して割り当てられたメモリ空間における転送元および転送先の仮想アドレスを指定する転送要求を、メインメモリ３００の所定領域に記憶させる。データ転送装置５０は、メインメモリ３００の所定領域を参照して、ＣＰＵコア１０の処理とは非同期に転送要求を取得し、その転送要求において指定された仮想アドレスに対する物理アドレスを特定し、転送元の物理アドレスが示す記憶領域の原本データを、転送先の仮想アドレスまたは物理アドレスに対応づけられたキャッシュメモリ２０の記憶領域に転記する。【選択図】図１
2010061220.tif 000002
【特許請求の範囲】
【請求項１】
特定の記憶領域のデータを別の記憶領域へ転送する装置であって、
ＣＰＵコアにおいて実行されるユーザプログラムからの要求であって、前記ユーザプログラムに対して割り当てられたメモリ空間における転送元および転送先の仮想アドレスを少なくとも指定する転送要求を、前記メモリ空間の所定領域を介して、前記ＣＰＵコアの処理とは非同期に取得する取得部と、
前記転送要求において指定された仮想アドレスに対応する物理アドレスを特定する特定部と、
前記特定部において特定された転送元の物理アドレスが示す記憶領域の原本データを、転送先の仮想アドレスまたは物理アドレスが示す記憶領域に転記する転記部と、
を備えることを特徴とするデータ転送装置。
【請求項２】
前記転記部は、キャッシュメモリにおける記憶領域であって、前記転送先の仮想アドレスまたは物理アドレスに対応づけられた記憶領域に前記原本データを転記することを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
前記転記部は、前記キャッシュメモリにおける記憶領域のうち当該データ転送装置以外からのアクセスが制限される記憶領域であって、前記転送先の仮想アドレスまたは物理アドレスに対応づけられた記憶領域に前記原本データを転記することを特徴とする請求項２に記載のデータ転送装置。
【請求項４】
前記取得部は、前記ＣＰＵコアにおいて実行される複数のユーザプログラムからの転送要求を取得すべきとき、各ユーザプログラムに対して割り当てられた異なるメモリ空間について、各メモリ空間の所定領域に対する参照を時分割で実行し、各ユーザプログラムからの転送要求を取得することを特徴とする請求項１から３のいずれかに記載のデータ転送装置。
【請求項５】
前記取得部は、前記ＣＰＵコアにおいて実行中のユーザプログラムについて、そのユーザプログラムに対して割り当てられたメモリ空間の所定領域を優先して参照し、そのユーザプログラムからの転送要求を優先して取得することを特徴とする請求項４に記載のデータ転送装置。
【請求項６】
前記転送要求には、その転送要求を他の転送要求と対応づけて前記転記部に処理させるための転記ＩＤが含まれ、
前記転記部は、特定の転記ＩＤを含む複数の転送要求について、各転送要求をその要求順序にしたがって順次処理することを特徴とする請求項１から５のいずれかに記載のデータ転送装置。
【請求項７】
前記転記部により前記原本データが転記されたとき、前記転送要求の処理が終了したことを前記ユーザプログラムに対して通知するための転送済通知を、前記ユーザプログラムを実行するＣＰＵコアにおいて非同期に取得させるために、前記メモリ空間の所定領域に記憶させる通知部をさらに備えることを特徴とする請求項１から６のいずれかに記載のデータ転送装置。
【請求項８】
前記転送要求には、その転送要求を他の転送要求と対応づけて前記通知部に処理させるための通知ＩＤが含まれ、
前記通知部は、特定の通知ＩＤを含む複数の転送要求が前記転記部において全て処理されたとき、前記通知ＩＤに関する処理が終了したことを示す通知を前記転送済通知として前記メモリ空間の所定領域に記憶させることを特徴とする請求項７に記載のデータ転送装置。
【請求項９】
特定の記憶領域のデータを別の記憶領域へ転送する方法であって、
ＣＰＵコアにおいて実行されるユーザプログラムからの要求であって、前記ユーザプログラムに対して割り当てられたメモリ空間における転送元および転送先の仮想アドレスを少なくとも指定する転送要求を、前記メモリ空間の所定領域を介して、前記ＣＰＵコアの処理とは非同期に取得するステップと、
前記転送要求において指定された仮想アドレスに対応する物理アドレスを特定するステップと、
前記特定するステップにおいて特定された転送元の物理アドレスが示す記憶領域の原本データを、転送先の仮想アドレスまたは物理アドレスが示す記憶領域に転記するステップと、
を備えることを特徴とするデータ転送方法。
【請求項１０】
ユーザプログラムを実行するＣＰＵコアと、
特定の記憶領域のデータを別の記憶領域へ転送するデータ転送装置と、
を備え、
前記ＣＰＵコアは、前記ユーザプログラムからの要求であって、前記ユーザプログラムに対して割り当てられたメモリ空間における転送元および転送先の仮想アドレスを少なくとも指定する転送要求を、前記メモリ空間の所定領域に記憶させ、
前記データ転送装置は、
前記メモリ空間の所定領域を参照して、前記ＣＰＵコアの処理とは非同期に前記転送要求を取得する取得部と、
前記転送要求において指定された仮想アドレスに対応する物理アドレスを特定する特定部と、
前記特定部において特定された転送元の物理アドレスが示す記憶領域の原本データを、転送先の仮想アドレスまたは物理アドレスが示す記憶領域に転記する転記部とを有することを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データ処理技術に関し、特に、データ転送技術に関する。
【背景技術】
【０００２】
ゲーム機を始めとするマルチメディア端末では、画像データや音声データを頻繁にメモリに読み書きする必要がある。そこで、ＣＰＵ（Central Processing Unit）の負荷を軽減するため、メモリと外部の入出力装置との間のデータ転送はＤＭＡ（Direct Memory Access）転送によって行われることが多い。ＤＭＡ転送は、ＣＰＵを介することなく、メモリと入出力装置間でデータの受け渡しを高速に実行する方法である。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ＤＭＡ転送は、ＣＰＵがその必要性を判断し、ＤＭＡコントローラに指示を出すことにより実行される。すなわち、このＣＰＵにより実行されるユーザプログラム、例えばマルチメディア端末のユーザにより作成されたプログラムによってＤＭＡ転送を直接的に制御することはできなかった。また、文字列コピーのような一般的なデータ転送については、演算回路等を含むＣＰＵコアがユーザプログラムの要求に応じて主体的に実行するため、ＣＰＵコアに比較的大きな負荷をかけることがあった。
【０００４】
本発明は、こうした課題に鑑みてなされたものであり、その主たる目的は、ユーザプログラムの制御に基づくデータ転送を、ＣＰＵコアの処理とは非同期な処理として実現する技術を提供することである。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、本発明のある態様のデータ転送装置は、特定の記憶領域のデータを別の記憶領域へ転送する装置であって、ＣＰＵコアにおいて実行されるユーザプログラムからの要求であって、ユーザプログラムに対して割り当てられたメモリ空間における転送元および転送先の仮想アドレスを少なくとも指定する転送要求を、メモリ空間の所定領域を介して、ＣＰＵコアの処理とは非同期に取得する取得部と、転送要求において指定された仮想アドレスに対応する物理アドレスを特定する特定部と、特定部において特定された転送元の物理アドレスが示す記憶領域の原本データを、転送先の仮想アドレスまたは物理アドレスが示す記憶領域に転記する転記部と、を備える。
【０００６】
本発明の別の態様は、データ転送方法である。この方法は、特定の記憶領域のデータを別の記憶領域へ転送する方法であって、ＣＰＵコアにおいて実行されるユーザプログラムからの要求であって、ユーザプログラムに対して割り当てられたメモリ空間における転送元および転送先の仮想アドレスを少なくとも指定する転送要求を、メモリ空間の所定領域を介して、ＣＰＵコアの処理とは非同期に取得するステップと、転送要求において指定された仮想アドレスに対応する物理アドレスを特定するステップと、特定するステップにおいて特定された転送元の物理アドレスが示す記憶領域の原本データを、転送先の仮想アドレスまたは物理アドレスが示す記憶領域に転記するステップと、を備える。
【０００７】
本発明のさらに別の態様は、プロセッサである。このプロセッサは、ユーザプログラムを実行するＣＰＵコアと、特定の記憶領域のデータを別の記憶領域へ転送するデータ転送装置と、を備える。ＣＰＵコアは、ユーザプログラムからの要求であって、ユーザプログラムに対して割り当てられたメモリ空間における転送元および転送先の仮想アドレスを少なくとも指定する転送要求を、メモリ空間の所定領域に記憶させ、データ転送装置は、メモリ空間の所定領域を参照して、ＣＰＵコアの処理とは非同期に転送要求を取得する取得部と、転送要求において指定された仮想アドレスに対応する物理アドレスを特定する特定部と、特定部において特定された転送元の物理アドレスが示す記憶領域の原本データを、転送先の仮想アドレスまたは物理アドレスが示す記憶領域に転記する転記部とを有する。
【０００８】
なお、以上の構成要素の任意の組合せ、本発明の表現を装置、方法、システム、プログラム、プログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【０００９】
本発明によれば、ユーザプログラムの制御に基づくデータ転送を、ＣＰＵコアの処理とは非同期な処理として実現できる。
【発明を実施するための最良の形態】
【００１０】
図１は、本発明の実施の形態である情報処理装置１０００のハードウェア構成を示す。情報処理装置１０００は、プロセッサ１００とメインメモリ３００とを備え、これらは外部バス２００を介して相互に接続される。プロセッサ１００は、情報処理装置１０００の全体を制御するとともに、外部記憶装置や記録媒体からメインメモリ３００にロードされたプログラムにしたがって、各種の処理を実行する。メインメモリ３００には、プロセッサ１００が各種の処理を実行する上で必要となるデータなども適宜記憶される。なお、情報処理装置１０００には、情報処理装置１０００を効率よく利用するための機能および環境を提供して当該装置の全体を統括的に制御するＯＳ（Operating System）がインストールされ、実行されている。
【００１１】
プロセッサ１００は、マルチコアプロセッサであり、２つのＣＰＵコア１０と、キャッシュメモリ２０と、メモリインタフェース４０と、データ転送装置５０とを有する。これらの構成要素は、各構成要素から他の構成要素に送出されるデータのコヒーレンスを維持可能な内部バス３０を介して相互に接続される。プロセッサ１００では、これらの構成要素が１チップ上に一体化して形成されている。また、プロセッサ１００に集積されるＣＰＵコア１０、キャッシュメモリ２０、データ転送装置５０の個数に制限はなく、マルチコアプロセッサの性能要件等に応じて適宜決定されればよい。
【００１２】
ＣＰＵコア１０は、ユーザプログラムに記載された命令を実行するための演算装置や各種レジスタを含む。キャッシュメモリ２０は、メインメモリ３００に記憶されたデータの一部を、公知のキャッシュアルゴリズムにしたがって一時的にキャッシュし、ＣＰＵコア１０に対して高速のデータアクセスを提供する。メモリインタフェース４０は、プロセッサ１００の各構成要素がメインメモリ３００にアクセスするためのインタフェース機能を提供する。
【００１３】
ＣＰＵコア１０は、必要とするデータがキャッシュメモリ２０に存在するときは、そのデータをキャッシュメモリ２０から取得する。必要とするデータがキャッシュメモリ２０に存在しなければ、メモリインタフェース４０を介して、そのデータをメインメモリ３００から取得する。
【００１４】
データ転送装置５０は、ＣＰＵコア１０で実行されるユーザプログラムからの要求（以下、適宜「転送要求」ともいう）に応じて、ＣＰＵコア１０の処理とは非同期に、転送要求に応じたデータ転送を実行する。本実施の形態のデータ転送装置５０は、メインメモリ３００に記憶されたデータのうち、転送要求において指定されたデータをキャッシュメモリ２０に転送する。
【００１５】
図２は、転送要求のデータ構造を示す。図２（ａ）は基本的な転送要求（以下、適宜「基本転送要求」ともいう）のデータ構造を示している。基本転送要求では、ユーザプログラムに対して割り当てられたメモリ空間（以下、「ユーザメモリ空間」ともいう）における転送元および転送先の先頭位置を示す仮想アドレス（以下、適宜「転送元仮想アドレス」、「転送先仮想アドレス」ともいう）が指定される。さらに、転送元仮想アドレスの位置から転送すべきデータ量を示す「データサイズ」も指定される。
【００１６】
本実施の形態における「仮想アドレス」は、ＯＳにより提供される仮想記憶上の特定位置を指定する情報である。なお、仮想記憶は、情報処理装置１０００内外のメモリ等の記憶手段の物理的な記憶領域の一部同士を論理的に結合させ、ユーザプログラム等には連続的な記憶領域として見せるための、記憶領域管理手段である。
【００１７】
図２（ｂ）は、基本転送要求を拡張した転送要求（以下、適宜「拡張転送要求」ともいう）の構造を示している。拡張転送要求では、データ転送装置５０において転送要求を識別するための付加情報（以下、適宜「タグ」ともいう）が基本転送要求のデータ構造に追加して指定される。以下、単に「転送要求」と呼ぶ場合には、基本転送要求および拡張転送要求の両方が含まれる。
【００１８】
図３は、図１の情報処理装置１０００の論理的な機能構成を示す。同図において実線で示す各ブロックは、ハードウェア的には、素子や電子回路、機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
【００１９】
ＣＰＵコア１０は、ＣＰＵスレッド１２を有する。ＣＰＵスレッド１２は、第１のユーザプログラム１４および第２のユーザプログラム１６の実行主体であり、典型的にはハードウェアスレッドである。１つのＣＰＵコア１０上で複数のＣＰＵスレッド１２が生成されてもよい。ＣＰＵスレッド１２は、ユーザプログラムの実行にあたり、このユーザプログラムに割り当てられたユーザメモリ空間の後述するリクエストキューに対して、このユーザプログラムから発行された転送要求をエンキューする。また、このユーザプログラムに割り当てられたユーザメモリ空間の後述するリプライキューから、データ転送の完了を示す通知をデキューする。
【００２０】
図３の第１のユーザプログラム１４および第２のユーザプログラム１６は、ＣＰＵスレッド１２における実行単位を示しており、例えばプロセスやユーザスレッドである。一のユーザプログラムに関する複数のユーザスレッドが時分割に実行されてもよい、すなわちマルチスレッドで実行されてもよいのはもちろんである。
【００２１】
キャッシュメモリ２０は、その記憶領域の一部に専用記憶部２２を有する。専用記憶部２２は、データ転送装置５０以外のアクセスが制限された記憶領域である。ここでは、専用記憶部２２に対して、ＣＰＵスレッド１２はアクセスできず、後述するデータ転送スレッド５２にのみアクセスが許容されることとする。
【００２２】
メインメモリ３００は、カーネルメモリ空間３１０と、第１のユーザメモリ空間３２０と、第２のユーザメモリ空間３３０とを有する。カーネルメモリ空間３１０は、ＯＳに割り当てられたメモリ空間である。第１のユーザメモリ空間３２０および第２のユーザメモリ空間３３０のそれぞれは、第１のユーザプログラム１４および第２のユーザプログラム１６のそれぞれに対して割り当てられたメモリ空間である。以下、単にユーザメモリ空間と呼ぶ場合、第１のユーザメモリ空間３２０および第２のユーザメモリ空間３３０の両方が含まれる。
【００２３】
第１のユーザメモリ空間３２０は、リクエストキュー３２２およびリプライキュー３２４を含む。これらは、ＦＩＦＯ（First-In First-Out）型の記憶領域である。リクエストキュー３２２には、第１のユーザプログラム１４からの転送要求がＣＰＵスレッド１２によってエンキューされる。リクエストキュー３２２は、後述するデータ転送スレッド５２によってデキューされるまで、その転送要求を保持する。リプライキュー３２４には、転送要求に応じて実行されたデータ転送の完了を示す通知（以下、適宜「転送済通知」ともいう）がデータ転送スレッド５２によってエンキューされる。リプライキュー３２４は、ＣＰＵスレッド１２によってデキューされるまで、その転送済通知を保持する。
【００２４】
なお、第１のユーザプログラム１４がマルチスレッドで実行されるときには、第１のユーザメモリ空間３２０におけるリクエストキューおよびリプライキューの組が複数存在してもよい。また、第１のユーザプログラム１４の各スレッドと、リクエストキューおよびリプライキューの各組は、１対１で対応づけられてもよく、Ｎ対１で対応づけられてもよい。
【００２５】
第２のユーザメモリ空間３３０もまた、リクエストキュー３３２およびリプライキュー３３４を含み、これらはそれぞれリクエストキュー３２２およびリプライキュー３２４と同様である。以下、単に「リクエストキュー」と呼ぶ場合、リクエストキュー３２２およびリクエストキュー３３２が含まれ、単に「リプライキュー」と呼ぶ場合、リプライキュー３２４およびリプライキュー３３４が含まれる。また、単に「キュー」と呼ぶ場合には、リクエストキューおよびリプライキューが含まれる。
【００２６】
カーネルメモリ空間３１０は、現在情報記憶部３１２およびキュー情報記憶部３１４を含む。現在情報記憶部３１２には、ＣＰＵスレッド１２が現在実行中のユーザプログラムに対応づけられたキューのアドレスが保持される。キュー情報記憶部３１４には、ＣＰＵスレッド１２にて実行される１以上のユーザプログラムのそれぞれに対応づけられたキューのアドレスが保持される。ＣＰＵコア１０は、ユーザプログラムの実行に際して、キュー情報記憶部３１４を参照して、そのユーザプログラムに対応づけられたキューのアドレスを特定し、そのアドレスを現在情報記憶部３１２に記憶させる。
【００２７】
データ転送装置５０は、データ転送スレッド５２を有する。データ転送スレッド５２は、データ転送処理の実行主体であり、典型的にはハードウェアスレッドである。データ転送スレッド５２は、ＣＰＵスレッド１２と対応づけて生成される。すなわち、ＣＰＵスレッド１２が複数存在するときには、それぞれのＣＰＵスレッド１２に対応づけられた複数のデータ転送スレッド５２が生成される。データ転送スレッド５２は、取得部５４と、特定部５６と、転記部５８と、通知部６０とを含む。
【００２８】
取得部５４は、現在情報記憶部３１２を参照して、ＣＰＵスレッド１２が現在実行中のユーザプログラムに対応づけられたリクエストキューのアドレスを取得し、そのリクエストキューを参照して転送要求を取得する。
【００２９】
そのリクエストキューに転送要求が存在しないとき、取得部５４は、キュー情報記憶部３１４を参照して、ＣＰＵスレッド１２にて実行される１以上のユーザプログラムのそれぞれに対応づけられたキューのアドレスを取得する。続いて、それぞれのリクエストキューに対する参照を時分割で実行して転送要求を取得する。すなわち、取得部５４は、ＣＰＵスレッド１２が現在実行中のユーザプログラムからの転送要求を優先して取得し、そのユーザプログラムからの転送要求を取得しないときに、他のユーザプログラムからの転送要求を取得する。
【００３０】
特定部５６は、ユーザメモリ空間における仮想アドレスをメインメモリ３００における物理アドレスに変換するためのアドレス変換テーブル、例えばＴＬＢ（Translation Lookaside Buffer）を保持する。特定部５６は、このアドレス変換テーブルを参照して、転送要求において転送元および転送先を指定した仮想アドレスから物理アドレスを特定する。以下、転送元仮想アドレスに対応する物理アドレスと、転送先仮想アドレスに対応する物理アドレスとを、それぞれ、「転送元物理アドレス」および「転送先物理アドレス」と適宜呼ぶこととする。
【００３１】
転記部５８は、メインメモリ３００における転送元物理アドレスから転送要求にて指定されたデータサイズ分のデータを転記対象の原本データとして特定し、転送先物理アドレスに対応づけられた記憶領域に原本データを転記する。本実施の形態では、キャッシュメモリ２０の専用記憶部２２にアクセスして、転送先物理アドレスに対応づけられた記憶領域に原本データを転記する。変形例としては、転送先物理アドレスが示すメインメモリ３００の記憶領域そのものに原本データを転記してもよい。
【００３２】
転記部５８は、原本データをキャッシュメモリ２０の特定領域にキャッシュインさせるにあたり、その特定領域に既に記憶されたデータを、その特定領域に対応するメインメモリ３００の記憶領域へ待避、すなわちキャッシュアウトさせてもよい。これにより、キャッシュメモリ２０とメインメモリ３００とに記憶されるデータの整合性を維持できる。特に、キャッシュメモリ２０とメインメモリ３００とのデータ更新が非同期であるとき、例えばデータ更新方式がライトバック方式であるときには、事前にキャッシュアウトさせることが好ましい。
【００３３】
転送要求が拡張転送要求であり、そのタグ情報として、転記部５８において一の拡張転送要求を他の拡張転送要求と対応づけるための識別情報である転記ＩＤが含まれる場合の処理を説明する。このとき、転記部５８は同一の転記ＩＤが含まれる複数の拡張転送要求を同一グループの転送要求として取り扱う。具体的には、これらの拡張転送要求の要求順序、すなわちリクエストキューにエンキューされた順序を維持して、これらの拡張転送要求を順次処理する。
【００３４】
例えば、取得部５４がこれらの拡張転送要求を同時に取得するときでも、転記部５８はこれらの拡張転送要求のそれぞれをリクエストキューに並んだ順序にしたがって図示しない転記待ちキューにエンキューしておき、転記処理の実行時に順次デキューしてもよい。また、一の拡張転送要求に関する処理がメインメモリ３００の入出力待ちとなったときでも、その拡張転送要求に関する処理が完了するまでは他の拡張転送要求に関する処理を実行しない。これにより、要求順序にしたがった順次処理が実現される。
【００３５】
通知部６０は、転記部５８により原本データが転記されたとき、転送要求の処理が終了したことをユーザプログラムに対して通知するための転送済通知を、そのユーザプログラムに対して割り当てられたユーザメモリ空間のリプライキューにエンキューする。例えば、リクエストキュー３２２からデキューされた転送要求に応じたデータ転送が終了したときには、そのデータ転送に関する転送済通知をリプライキュー３２４にエンキューする。
【００３６】
転送要求が拡張転送要求であり、そのタグ情報として、通知部６０において一の拡張転送要求を他の拡張転送要求と対応づけるための識別情報である通知ＩＤが含まれる場合の処理を説明する。このとき、通知部６０は同一の通知ＩＤが含まれる複数の拡張転送要求を同一グループの転送要求として取り扱う。具体的には、これらの拡張転送要求のそれぞれが終了したときに、リクエストキューおよび図示しない転記待ちキューを参照して、その通知ＩＤを有する拡張転送要求が残存するか否かを検出する。通知部６０は、通知ＩＤが含まれる拡張転送要求の全てが処理されたと判定したとき、その通知ＩＤに関する処理が終了したことを示す通知（以下、適宜「グループ処理済通知」ともいう）をリプライキューにエンキューする。
【００３７】
通知部６０は、同一の通知ＩＤを含む拡張転送要求それぞれに対する個別の転送済通知に代えて、グループ処理済通知だけをエンキューしてもよい。または、個別の転送済通知に加えて、すなわち最後の転送済通知の後にグループ処理済通知をさらにエンキューしてもよい。本実施の形態では、前者の態様であることとする。
【００３８】
以上の構成による動作を以下説明する。
図４は、図１の情報処理装置１０００の動作を示すフローチャートである。ユーザプログラムを実行するＣＰＵスレッド１２は、ユーザプログラムからの転送要求をユーザメモリ空間のリクエストキューにエンキューする（Ｓ１０）。データ転送スレッド５２の取得部５４は、現在情報記憶部３１２およびキュー情報記憶部３１４を参照してキューのアドレスを特定する。取得部５４は、ＣＰＵスレッド１２において処理中のユーザプログラムに対応づけられたリクエストキューを優先して参照し、また、他のリクエストキューも時分割で参照し、各リクエストキューに保持された転送要求をデキューする（Ｓ１２）。
【００３９】
特定部５６は、転送要求で指定された転送元仮想アドレスおよび転送先仮想アドレスに対応する転送元物理アドレスおよび転送先物理アドレスを特定する（Ｓ１４）。転送要求に転記ＩＤの設定がないとき（Ｓ１６のＮ）、転記部５８は、転送元物理アドレスが示すメインメモリ３００の原本データを、転送先物理アドレスに対応づけられたキャッシュメモリ２０の専用記憶部２２に転記する（Ｓ１８）。転送要求に転記ＩＤが設定されているとき（Ｓ１６のＹ）、転記部５８は、その転記ＩＤが設定された複数の転送要求について、各転送要求の要求順序にしたがって原本データを転記する（Ｓ２０）。
【００４０】
転送要求に通知ＩＤの設定がないとき（Ｓ２２のＮ）、通知部６０は、ユーザメモリ空間のリプライキューに転送済通知をエンキューする（Ｓ２４）。ＣＰＵスレッド１２は、そのリプライキューから転送済通知をデキューし（Ｓ２６）、ユーザプログラムにデータ転送の終了が通知される。
【００４１】
通知部６０は、転送要求に通知ＩＤが設定されており（Ｓ２２のＹ）、かつ、その通知ＩＤで識別されるグループの転送要求が全て処理されたことを検出したとき（Ｓ２８のＹ）、リプライキューにグループ処理済通知をエンキューする（Ｓ３０）。ＣＰＵスレッド１２は、そのリプライキューからグループ処理済通知をデキューし（Ｓ３２）、その通知ＩＤが設定された転送要求に関する処理の終了がユーザプログラムに通知される。その通知ＩＤで識別されるグループにおいて、いずれかの転送要求が未処理であるとき（Ｓ２８のＮ）、Ｓ１２の処理に戻る。
【００４２】
プロセッサ１００によれば、ユーザプログラムの指示に基づくデータ転送を、そのユーザプログラムを実行するＣＰＵコア１０とは非同期に実行できる。ＣＰＵコア１０は、リクエストキューに転送要求をエンキューすれば、要求したデータ転送の終了を待つことなく、他の処理を実行できる。これにより、プロセッサ１００のスループットを向上できる。言い換えれば、ユーザプログラムは、必要なデータ転送をＣＰＵコアに負荷をかけることなく実行させることができる。
【００４３】
また、転送要求をエンキューおよびデキューする際にＯＳが介在しないため、ＣＰＵコア１０とデータ転送装置５０との間で転送要求を高速に受け渡しできる。また、一のユーザプログラムからの転送要求はそのユーザプログラムのユーザメモリ空間に記憶される。これにより、不正な転送要求があっても、その影響はその転送要求を実行したユーザプログラムのユーザメモリ空間に限定され、その影響が他に伝播することを防止できる。また、仮想アドレスから物理アドレスへの変換処理もデータ転送装置５０で実行されるため、ＣＰＵコア１０の処理負荷を軽減できる。
【００４４】
また、プロセッサ１００によれば、ユーザプログラムからの指示に基づき、メインメモリ３００の原本データをキャッシュメモリ２０の専用記憶部２２に転送できる。これにより、ＣＰＵコア１０はユーザプログラムの処理において必要なデータに高速にアクセスできるようになる。言い換えれば、ユーザプログラムの開発者は、ユーザプログラムを介して、必要なデータのキャッシュインを制御でき、ユーザプログラムの実行速度の高速化を図ることができる。
【００４５】
また、転記部５８によりキャッシュインされたデータが専用記憶部２２に保持されることにより、キャッシュメモリ２０にアクセスする他の主体からの影響を排除できる。例えば、ＣＰＵコア１０の別の処理においてストリーミングデータが取得されるときでも、その影響によってユーザプログラムが必要とするデータがキャッシュアウトしてしまうこと、言い換えればキャッシュポリューションを防止できる。
【００４６】
さらに、データ転送装置５０では、ＣＰＵコア１０により実行中のユーザプログラムからの転送要求が優先して処理される。これにより、実行中のユーザプログラムが必要とするデータが優先してキャッシュメモリ２０に転送されるため、実行中のユーザプログラムの処理速度を優先して向上できる。一方で、実行中のユーザプログラムからの要求がないときには、時分割にリクエストキューが参照されて要求処理が取得されるため、ＣＰＵコア１０により実行中でないユーザプログラムからのデータ転送も適宜実行される。
【００４７】
さらにまた、プロセッサ１００によれば、データ転送装置５０においてキャッシュメモリ２０へのデータ転送が終了したことを、ユーザプログラムにおいて検出できる。したがって、ユーザプログラムの開発者は、転送済通知やグループ処理済通知を検出した後は、必要なデータがキャッシュメモリ２０に存在すること、言い換えればキャッシュアウト・キャッシュインのコストが不要であることを前提としてプログラムコードを記述できる。
【００４８】
例えば、あるデータに対する繰り返しアクセスが必要な処理に先立って、そのデータを指定する転送要求を実行し、転送済通知を待つ間はそのデータを必要としない別の処理を実行する。そして、転送済通知検出後にそのデータを必要とする処理を実行するようにコードを記述することで、キャッシュメモリ２０を最大限に活用した、高速に実行されるユーザプログラムを作成できる。
【００４９】
さらにまた、転送要求に転記ＩＤおよび／または通知ＩＤを付加することにより、転記部５８および／または通知部６０の動作を制御できる。転記ＩＤを付加した複数の転送要求を発行したユーザプログラムでは、これら複数の転送要求のそれぞれが要求順序にしたがって実行されることを前提とする処理を実行できる。例えば、ユーザプログラムからアクセスすべきデータの順序が規定されているとき、各データへのアクセス速度を順次向上できる。また、通知ＩＤを付加した複数の転送要求を発行したユーザプログラムでは、グループ処理済通知を受信したとき、その通知ＩＤに関連づけた複数のデータ転送が全て完了したことを前提とする処理を実行できる。例えば、ユーザプログラムから同時にアクセスすべき複数のデータがあるとき、ユーザアドレス空間に分散したこれらのデータをキャッシュインさせ、各データに対するアクセス速度を向上できる。
【００５０】
以上、本発明を実施の形態をもとに説明した。この実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００５１】
変形例を説明する。上記の実施の形態では、データ転送スレッド５２の転記部５８は、メインメモリ３００の転送先物理アドレスに基づいてキャッシュメモリ２０の記憶領域にアクセスした。変形例として、キャッシュメモリ２０の記憶領域に仮想アドレスでアクセス可能なときには、転記部５８は転送先仮想アドレスに基づいてキャッシュメモリ２０の記憶領域にアクセスしてもよい。この場合、特定部５６において転送先仮想アドレスに対応する転送先物理アドレスを特定する処理は不要となる。
【００５２】
別の変形例を説明する。転送要求には、データ転送の内容を指定するための転送種別がさらに含まれてもよい。様々な処理種別を指定できることで、ユーザプログラムによるデータ転送制御の幅が広がる。言い換えれば、ユーザプログラムの開発者は様々な処理種別を使い分け、また組み合わせることで、高い実行速度を実現するユーザプログラムや、キャッシュメモリの内容を柔軟に変更するユーザプログラムを作成できる。
【００５３】
以下、転送種別の例を示す。
転送種別「１」：
メインメモリ３００内のデータ転送であって、転送元仮想アドレスに基づいて特定される記憶領域から転送先仮想アドレスに基づいて特定される記憶領域へのデータ転送処理が指定される。転送要求では、転送元仮想アドレスおよび転送先仮想アドレスが少なくとも指定される。なお、実施の形態と同様にデータサイズがさらに指定されてもよい。以下の転送種別についても同様である。
【００５４】
転送種別「２」：
実施の形態で説明した処理、すなわち転送元と転送先の両方が指定されたキャッシュイン処理が指定される。転送要求では、転送元仮想アドレスおよび転送先仮想アドレスが少なくとも指定される。
【００５５】
転送種別「３」：
メインメモリ３００の特定の記憶領域からその記憶領域に対応づけられたキャッシュメモリ２０の記憶領域に対するデータ転送、すなわちあらかじめ対応づけられた記憶領域間でのキャッシュイン処理が指定される。転送要求では、その特定の記憶領域を指定するための仮想アドレスが少なくとも指定される。データ転送装置５０の特定部５６は、その仮想アドレスに対応する物理アドレスを特定する。転記部５８は、その物理アドレスが示すメインメモリ３００の記憶領域からその仮想アドレスまたは物理アドレスに対応づけられたキャッシュメモリ２０の記憶領域へデータを転記する。
【００５６】
転送種別「４」：
処理種別「２」と反対の処理、すなわち転送元と転送先の両方が指定されたキャッシュアウト処理が指定される。転送要求では、転送元仮想アドレスおよび転送先仮想アドレスが少なくとも指定される。データ転送装置５０の特定部５６は、その仮想アドレスに対応する物理アドレスを特定する。転記部５８は、転送元仮想アドレスまたは転送元物理アドレスに対応づけられたキャッシュメモリ２０の記憶領域から転送先物理アドレスが示すメインメモリ３００の記憶領域へデータを転記する。
【００５７】
転送種別「５」：
処理種別「３」と反対の処理、すなわちあらかじめ対応づけられた記憶領域間でのキャッシュアウト処理が指定される。転送要求では、特定の記憶領域を指定するための仮想アドレスが少なくとも指定される。データ転送装置５０の特定部５６は、その仮想アドレスに対応する物理アドレスを特定する。転記部５８は、その仮想アドレスまたは物理アドレスに対応づけられたキャッシュメモリ２０の記憶領域からその物理アドレスが示すメインメモリ３００の記憶領域へデータを転記する。
【００５８】
キャッシュメモリ２０の記憶容量はメインメモリ３００より小さいため、キャッシュメモリ２０の一の記憶領域に対してメインメモリ３００の複数の記憶領域が対応づけられる。したがって、キャッシュメモリ２０とメインメモリ３００との整合性維持のために、転記部５８によるキャッシュイン処理に先立って、キャッシュアウト処理が必要な場合がある。その結果、データ転送までの時間が比較的長くなることがある。処理種別「２」、［３］を要求する前に、処理種別「４」［５］を要求することで、処理種別「２」、［３］に伴うキャッシュアウト処理は不要になる。この結果、処理種別「２」［３］に基づくキャッシュイン処理の完了に要する時間が短縮される。例えば、処理種別［４］の転送元仮想アドレス、処理種別［５］の仮想アドレスが、後続の処理種別［２］の転送先仮想アドレス、処理種別［３］の仮想アドレスとして指定されてもよい。
【００５９】
さらに別の変形例を説明する。本発明の技術思想は、ハードディスクやＵＳＢ（Universal Serial Bus）メモリ等の外部記憶装置とメインメモリ３００間、外部記憶装置とキャッシュメモリ２０間のデータ転送においても適用可能である。すなわち、このようなデータ転送についても、ユーザプログラムの制御に基づいて、ＣＰＵコアの処理とは非同期に実行できる。
【００６０】
請求項に記載の各構成要件が果たすべき機能は、実施の形態および変形例において示された各構成要素の単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。
【図面の簡単な説明】
【００６１】
【図１】本発明の実施の形態である情報処理装置のハードウェア構成を示す図である。
【図２】転送要求のデータ構造を示す図である。
【図３】図１の情報処理装置の論理的な機能構成を示す図である。
【図４】図１の情報処理装置の動作を示すフローチャートである。
【符号の説明】
【００６２】
１０  ＣＰＵコア、  １２  ＣＰＵスレッド、  １４  第１のユーザプログラム、  １６  第２のユーザプログラム、  ２０  キャッシュメモリ、  ２２  専用記憶部、  ３０  内部バス、  ４０  メモリインタフェース、  ５０  データ転送装置、  ５２  データ転送スレッド、  ５４  取得部、  ５６  特定部、  ５８  転記部、  ６０  通知部、  １００  プロセッサ、  ２００  外部バス、  ３００  メインメモリ、  ３１０  カーネルメモリ空間、  ３１２  現在情報記憶部、  ３１４  キュー情報記憶部、  ３２０  第１のユーザメモリ空間、  ３２２  リクエストキュー、  ３２４  リプライキュー、  ３３０  第２のユーザメモリ空間、  ３３２  リクエストキュー、  ３３４  リプライキュー、  １０００  情報処理装置。
【図１】
2010061220.tif 000003
【図２】
2010061220.tif 000004
【図３】
2010061220.tif 000005
【図４】
2010061220.tif 000006