実施の形態1
図1は、本実施の形態における情報処理装置の構成例を示している。情報処理装置10は、マイクロプロセッサユニット(MPU)22、グラフィックス処理ユニット(GPU)40、入出力装置(I/O)41、メインメモリ42、補助記憶装置(HDD)44を備え、それぞれがメインバス38を介して接続される。情報処理装置10は、LAN、インターネットなどのネットワークを介して他の情報処理装置との間でデータを送受信できる。
MPU22は、非対称型のマルチプロセッサユニットであり、1つの管理ユニット(PU)24と処理ユニット(SPU)30a、30bを有し、それぞれがMPU22の内部バス36を介して接続される。PU24はOS(Operating System)の処理を行うほか、後述するようにSPU30a、30bとGPU40、I/O41、HDD44、およびネットワークを介して接続した別の情報処理装置とのデータ送受信、処理要求などを仲介する。各SPU30a、30bは、主にアプリケーションプログラムを実行するユニットである。
OSとしての機能は主としてPU24によって実行されるが、その機能の一部は各SPU30a、30bに委譲されていてもよい。たとえば、あらかじめ処理を並列に行うように記述されたスクリプトコードをPU24が解釈して複数のタスクに分解し、各SPU30a、30bは、自らの空き時間においてそれらのタスクから選択したタスクを自律的に処理するようにしてもよい。この場合、本来PU24が担うべきタスクの割り当ておよびスケジューリングといったOSの機能が各SPU30a、30bに委譲されたことになる。そして、SPU30a、30bはメインメモリ42等から必要なプログラムをロードして処理を開始する。
図2は、PU24、SPU30、およびメインメモリ42の詳細な構成を示している。なおSPUは図1に示すとおり、MPU22に複数備えてよいがここでは簡単のためSPU30として1つのみ示している。またそれぞれのユニットは図2に示した機能ブロック以外の機能ブロックを備えていてよいが、ここではその図示を省略している。本実施の形態では、SPU30がタスクの処理中、PU24へ依頼すべき処理が生じた場合に、PU24に対し処理要求を発行する。ここでPU24へ依頼すべき処理とは、PU24にのみ実行が可能な処理や、処理の効率化やスケジューリングの関係でPU24が行うことが好適な処理である。
あるいは、SPU30が処理するタスクの数や使用するリソースの量など、SPU30の処理の負荷を表す量を既知の手法でリアルタイムに検出し、当該負荷が所定のしきい値を超えたら、本来SPU30が行うべきであった処理の一部をPU24に依頼するようにしてもよい。従って要求する処理の内容は限定されないが、例えばGPU40への画像処理依頼、I/O41に対するデータの送受信、メインメモリ42における記憶領域の確保および解放、HDD44に対する書き込みおよび読み出し、ネットワークを介したネットワーク通信などが挙げられる。以後、このような処理を外部依頼処理と呼ぶ。
SPU30が発行した処理要求はメインメモリ42に格納され、それを検出したPU24により当該処理が実行される。処理の結果PU24が取得したデータや返値は、メインメモリ42に格納され、それを検出した処理要求発行元のSPU30が当該結果を取得することにより一連の外部依頼処理が完了する。
PU24は、依頼された処理を実際に行うリクエスト処理部26、メインメモリ42に格納された処理要求を検出するリクエスト受付部27を含む。SPU30は、割り当てられたタスクの処理を行うタスク処理部32、処理要求を発行したり外部依頼処理の結果を取得するリクエスト制御部33、および処理要求の発行や結果の取得に係るプログラム、タスクの実行に必要なプログラムやデータをメインメモリ42から読み出し保存するローカルメモリ34を含む。
メインメモリ42はPU24、SPU30がリクエスト処理部26やタスク処理部32において実行する各タスクを実行するためのプログラムを格納するプログラム格納領域50、SPU30が発行した処理要求を格納するリクエスト格納領域52、およびPU24が行った処理の結果を格納する結果格納領域54を含む。プログラム格納領域50に格納されるプログラムには、SPU30が処理要求の発行や結果の取得を行うために呼び出すライブラリが含まれる。SPU30のリクエスト制御部33およびPU24のリクエスト受付部27は、呼び出されたライブラリによって起動することができる。
図2において様々な処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、CPU、メモリ、その他のLSIで構成することができ、ソフトウェア的には、アクセス制御を行うプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。例えばリクエスト処理部26、リクエスト受付部27、リクエスト制御部33、タスク処理部32はPU24、SPU30のそれぞれにおいて並列に処理されるスレッドであってもよい。
PU24は、SPU30が実行しているタスクにおいて外部依頼処理が生じた場合に、SPU30からの要求に応じてそれらの処理を実施し結果を取得する。取得する結果には、GPU40へ画像処理依頼を行った結果生成された画像データ、HDD44から読み出したデータ、ネットワーク通信の結果得られたデータなどの他、メインメモリ42におけるそれらのデータの格納アドレスや、アクセスの正常・異常終了などを示す返値などのいずれでもよい。
SPU30が実行するアプリケーションプログラムなどでは、メインメモリ42のプログラム格納領域50に格納されたライブラリのうち、上述したPU24の機能に対応するライブラリを呼び出す記述を含めておく。これによりSPU30はPU24の機能を起動させることができる。
SPU30からPU24への処理要求の発行および、PU24からSPU30への処理の結果の送信は、メインメモリ42を介して非同期で行う。SPU30は処理要求を発行した後、それ以外のタスクを継続して行う。これにより、例えば一つまたは複数のSPU30において外部依頼処理が一時期に集中して発生しても、PU24における受け付け待ちによってSPU30の処理が止まってしまうことがなくなる。またSPU30におけるスケジュール上、最も効率のよいタイミングで結果を取得することにより、SPU30におけるタスクのコンテキストの切り替え頻度を抑えることができ、コンテキスト切り替えに要するトータルの時間を軽減することができる。
一方、処理要求に係る割り込み信号をSPU30から受信する場合と比較すると、PU24はそれまで行っていたタスクを中断させたり復帰させたりする必要がなくなり、効率的に複数の処理を遂行することができる。また、SPU30がPU24の機能を直接指定できるライブラリをあらかじめ用意しておくことにより、本体のプログラムを簡略化できる。PU24の機能としてMPU22以外のデバイス、すなわちGPU40、I/O41、メインメモリ42、HDD44などへのアクセスを同様にライブラリとして用意することによって、デバイスの構成に依存しない共通化したプログラム開発が可能となる。
次に、これまで述べた構成によって実現される動作について説明する。図3は各機能ブロックによって外部依頼処理が遂行される手順の例を示すタイムチャートである。なお同図では、各信号の送信に対して適宜発信される応答信号の図示を省略している。まずPU24のリクエスト処理部26は、それまでの処理が完了した場合などに、次の処理要求(以後、リクエストと呼ぶ)の実行が可能であることをリクエスト受付部27に通知することにより、リクエスト格納領域52に新たなリクエストが格納されているか否かを確認する(S10)。それまでにSPU30から新たなリクエストが発行されていない場合、リクエスト処理部26は発行を監視しながら待機状態となる。その間、PU24では別のタスク処理が行われていてよい。
SPU30のリクエスト制御部33は、タスク処理部32において外部依頼処理が生じると、必要な処理の内容に応じてリクエストを発行し、当該リクエストはメインメモリ42のリクエスト格納領域52に格納される(S12)。リクエストには要求する処理の結果を格納する結果格納領域54へのポインタ、要求する処理の内容を表す機能のIDが含まれる。SPU30はリクエストを格納した後、別のタスク処理を行ってよい。
PU24のリクエスト受付部27は、当該リクエストがリクエスト格納領域52に格納されたことを検知すると、それを読み出すなどの受け付け処理を行う(S16)。これによりリクエスト処理部26が要求された処理を開始する。
リクエスト処理部26が要求された処理を完了させたときなどに、リクエスト受付部27は生成されたデータや返値などの結果を、メインメモリ42の結果格納領域54のうち、リクエストに含まれるポインタの示す領域に格納する(S18)。そしてリクエスト受付部27はリクエスト処理部26に当該リクエストの処理完了を通知する(S20)。SPU30のリクエスト制御部33は、要求した処理の結果が結果格納領域54に格納されているか否かを確認し(S22)、格納されていればそれをローカルメモリ34に読み出すなどして取得する(S24)。結果が格納されているか否かは、S22に代わりリクエスト受付部27に対し確認を行ってもよい。PU24のリクエスト処理部26は、S20の処理完了の通知を受信したら、他のタスク処理のスケジュールなどに基づく所望のタイミングで、別のリクエストについてS10のリクエストの確認を適宜行い、以後の処理が繰り返される。
以上の手順によりSPU30は、各自のタスク処理において発生した外部依頼処理をPU24に行わせその結果を取得することができる。
なおS10のリクエストの確認処理より前にリクエスト格納領域52にリクエストが格納されていれば、PU24は待機状態とならずに当該リクエストを受け付けてよい。また、S22の結果の確認処理において、結果格納領域54に結果が格納されていなければ、SPU30は結果が格納されるまで待機状態となっていてよい。その間、SPU30のタスク処理部32は、その他のタスク処理を行うことができる。
上述したのは、1つのSPU30が1つのリクエストを発行した際のSPU30およびPU24の処理手順であったが、複数のSPU30がリクエストを発行しても同様の処理が行われる。すなわちあるSPU30aがリクエストを発行しそれに応じた処理がPU24において行われている間、別のSPU30bがすぐに別のリクエストを発行した場合、後続のリクエストはリクエスト格納領域52に格納される(S30)。そして、PU24で当該リクエストに応じた処理が開始されその結果がリクエスト格納領域52に格納されるまでは、リクエスト発行元のSPU30bのリクエスト制御部33は結果を監視しながら待機する。その間、SPU30bでは他のタスク処理が行われていてよい。
さらに別のSPU30がリクエストを発行した場合も、リクエスト格納領域52にリクエストが複数保存され、それぞれの発行元のSPU30のリクエスト制御部33は、結果格納領域54内の個別の領域に結果が格納されるまで待機する。その間、それぞれのSPU30内では別のタスク処理が行われてよい。
このような状況においてメインメモリ42を効率よく使用するためには、結果格納領域54内のある領域に格納された結果がリクエスト発行元のSPU30によって読み出された後、当該格納領域に別のリクエストの結果が格納できるようにすることが望ましい。このためメインメモリ42にはさらにフラグ格納領域を設けてもよい。図4はメインメモリ42にフラグ格納領域を設けた場合の態様例を模式的に示している。なお同図ではプログラム格納領域50、リクエスト格納領域52の図示を省略している。
同図に示すようにメインメモリ42には、結果格納領域54に加えてフラグ格納領域56が含まれる。フラグ格納領域56は、発行されたリクエストのそれぞれに対応したフラグを表すビット列を格納する領域である。従ってフラグ格納領域56の総ビット数は同時に発行することのできるリクエストの数となる。あるいはリクエストの数に応じてビット数をリアルタイムに増減させてもよい。そして結果格納領域54はフラグ格納領域56の各ビットに対応した個別の領域を有し、それぞれの領域に一のリクエストに対する結果が格納される。図4では、結果格納領域54の個別の領域を矩形で表し、フラグ格納領域56の各ビットとの対応を破線の矢印で示している。
この場合、SPU30が発行するリクエストにはフラグ格納領域56のアドレスと、その中のビット位置が含まれる。例としてフラグが「0」のときは新たなリクエストの結果を格納することができ、フラグが「1」のときは読み出し前の結果が格納されている、とする。このような場合、発行するリクエストには、フラグが「0」のビットのうちいずれかのビット位置を指定する。そしてSPU30のリクエスト制御部33が、結果が格納されているかどうかを確認する際は、リクエストにおいて指定したビット位置のフラグが「1」になるのを確認する。
PU24のリクエスト受付部27は、リクエスト処理部26が処理した結果を、指定されたビット位置に対応した結果格納領域54内の領域に格納するとともに、当該ビット位置のフラグを「1」とする。SPU30のリクエスト制御部33は、フラグが「1」になったのを確認して、対応する結果格納領域54内の領域から結果を取得し、フラグを「0」に戻す。このようにすることで、別のリクエストの発行に際して、以前使用されていた結果格納領域54内の領域をすぐに再利用することができ、メインメモリ42内の領域を節約することができる。
図5は以上述べた情報処理装置10における動作の具体例を示すタイムチャートである。ここではSPU30からのリクエストに応じPU24が「HTTP GET」のメソッドを発行し、ネットワークを介してウェブページのデータを取得する場合について示している。このときリクエスト処理部26では、リクエスト処理の終了とリクエストの有無とを管理するリクエスト管理スレッド、HTTPに係る処理を制御するHTTPモジュール、個々のコールバック処理を実施するコールバックスレッドが遂行される。また結果格納領域54には、メソッドの呼び出し結果を格納するメソッド読み出し用の領域とコールバックにより取得したデータを格納するコールバック用の領域とが用意される。
まずSPU30のリクエスト制御部33は、「HTTP GET」のメソッドにあらかじめ割り振られたID、URIなど必要な情報を含めてリクエストを発行する(S50)。当該リクエストはメインメモリ42のリクエスト格納領域52に格納される。PU24のリクエスト処理部26のリクエスト管理スレッドは、それまでのリクエストが完了した場合などに、リクエスト受付部27に対しリクエストの有無を確認する(S52)。リクエスト受付部27はリクエスト格納領域52に格納されたリクエストを検知し、リクエスト処理部26のHTTPモジュールにリクエストの情報を渡すことにより「HTTP GET」のメソッドを起動させる(S54)。
HTTPモジュールはリクエストの情報に基づきコールバックスレッドを生成する(S56)。正常にスレッドが生成されたら、HTTPモジュールはその旨をリクエスト受付部27に通知する(S58)。なおスレッドが正常に生成されなければエラーを示す返値が返されるが、その後のエラー処理については説明を省略する。リクエスト受付部27は通知された結果をメモリ42の結果格納領域54に用意されたメソッド読出し用の領域に格納し(S60)、リクエスト処理部26のリクエスト管理スレッドに当該リクエストに対する処理の起動が完了した旨を通知する(S62)。その間にリクエスト処理部26のコールバックスレッドは「HTTP GET」をリクエストに指定されたURIに基づき実行している(S64)。
SPU30のリクエスト制御部33は、結果格納領域54のメソッド読出し用の領域に、「HTTP GET」を起動した結果が格納されているか否かを確認し(S66)、格納されていればそれを取得する(S68)。一方、リクエスト処理部26のコールバックスレッドは、S64において実行していた「HTTP GET」のメソッドによって所望のデータを取得できたら、それを結果格納領域54のコールバック用の領域に格納し(S70)、メソッドから抜ける(S72)。
SPU30のリクエスト制御部33は、結果格納領域54のコールバック用の領域に、「HTTP GET」の結果であるデータが格納されているか否かを確認し(S74)、格納されていればそれを取得する(S76)。以上の手順により、SPU30は所望のウェブページのデータを取得することができ、これに基づき処理依頼元であるタスクの処理を続行することができる。
以上述べた本実施の形態によれば、タスク処理の実行主体であるSPUにおいて外部依頼処理の必要が生じた場合、そのアクセス要求を一旦メインメモリに保存する。外部依頼処理の実行主体であるPUは、新たな依頼処理が可能となったときにメインメモリから処理要求を読み出し実行する。これにより、要求が集中してもPUにおける処理の負荷は分散され、SPUから要求される処理以外のタスク、すなわちOSの実行などが滞ることが少なくなる。同様に、外部依頼処理の結果も一旦メインメモリに保存するため、SPUは処理要求を発行してからその処理の結果を取得するまで、当該結果を必要とするタスクを待機状態として別のタスクを進めることができる。結果としてPU、SPUの双方でオーバーヘッドの発生を抑制することができる。
また、あらかじめPUが実施可能な処理の内容を識別する情報を設定しておくことにより、アクセス要求時にはその識別情報を指定するのみでPU側での処理が実施される。これにより、SPUで実行されるプログラムを簡略化することができる。さらに当該識別情報を解釈するプログラムを、処理の種類によらず同等にライブラリとして用意しておくことにより、処理要求に係る処理が抽象化されるため、デバイスの構成など環境に応じたライブラリの設定を行うことにより、アプリケーションプログラムを汎用化させることができる。
またフラグを利用して処理の結果を格納する領域からデータが読み出されたか否かを判断し、読み出された領域に次の処理要求の結果を格納する。これによりメインメモリに多大な領域を確保しなくても本実施の形態を実現することができる。
実施の形態2
実施の形態1は、管理ユニットと処理ユニットとを含む単一のマイクロプロセッサユニットを備えた情報処理装置において、処理ユニットが管理ユニットに処理要求を行う態様であった。処理要求時には、ライブラリを呼び出して機能を指定することにより、要求先での処理を起動させることができ、また、処理要求の発行や処理結果の転送が要求元と要求先とで非同期に行われた。本実施の形態では、複数のマイクロプロセッサユニットがネットワークによって接続されている状態においても同様に、ネットワークを介した処理要求を、ライブラリを呼び出すことにより実現する。この場合の処理要求の発行や処理結果の転送も非同期で行うことにより、各マイクロプロセッサユニットにおけるタスク処理を効率化し、並列性を高める。
図6は本実施の形態における情報処理システムの構成を示している。情報処理システム100は複数のプロセッサ要素(PE)102a、102b、102c、102dを含む。ここでPEの数は4つとしているが、情報処理システム100の用途や規模によって増減させてよい。複数のPE102a、102b、102c、102dはそれぞれ、実施の形態1の図1で示したMPU22、メインメモリ42を含む。PE102a、102b、102c、102dはさらに、GPU、I/O、HDDなどの処理ユニットと、それらを接続する内部バスまたはメインバスを含んでよいが、ここでは図示を省略する。図1で示したように、MPU22は、PU24とSPU30a、30bを含むが、SPU30a、30bの数はPE102a、102b、102c、102dで異なっていてよい。
図6に示す情報処理システム100は一例として、複数のPE102a、102b、102c、102dのうち、2つのPE、すなわちPE102aおよび102bが第1ネットワーク82、第2ネットワーク84、および第3ネットワーク86に、別のPE102cが第2ネットワーク84と第3ネットワーク86に、さらに別のPE102dが第3ネットワーク86のみに接続するネットワーク構成を有する。PE相互の通信は接続したネットワークのいずれかを介して行われる。同図においてネットワークは第1、第2、および第3の3つが示されているが、その数を限定するものではない。第1ネットワーク82、第2ネットワーク84、および第3ネットワーク86は、この順で通信速度が速い一方、接続性が低い。例えば、第1ネットワーク82をPCI(Peripheral Component Interconnect)、InfiniBand、GbE(Gigabit Ethernet (Ethernetは登録商標))によるネットワークとし、第2ネットワーク84はIP(Internet Protocol)による直接通信を行うネットワーク、第3ネットワーク86をNAT(Network Address Translation)を用いたネットワークなどとすることができる。
本実施の形態では、あるPE102a内のSPU30などが他のPE102b、102c、102dに対し処理要求を行う。情報処理システム100のようなマルチコア環境においては通常、それぞれ独立したOSによってタスク処理のスケジュールなどが管理される。このような状況下では、実施の形態1で示した単一のMPU22を備えた情報処理装置10と比較して、処理要求を発行してからその結果が戻るまでの時間を見積もるのが格段に困難となる。
また、PE102aとPE102b、102c、102dとはネットワークを介して処理要求や結果の転送を行うため、処理要求が完了するまでに伝送時間が余計にかかる。さらに、複数のPE102a、102b、102c、102dが共通のネットワークを利用するため、伝送するデータ量に依存してデータの伝送に要する時間も増加し易い。この場合、処理要求や結果の転送を要求元、要求先で同期させると、実施の形態1の場合と比較してさらに待機時間がかかることになる。また通信経路が長いため障害が発生する可能性が高くなる。障害が発生すると、処理要求元、処理要求先の双方で処理されている他のタスクがそのエラー処理によって滞る場合もある。このように、図6に示すようなマルチコア環境においてはさらに、システム全体でオーバーヘッドが発生しやすい。
そこで実施の形態1で示したような非同期の処理要求発行および結果の転送を情報処理システム100に適用することにより、実施の形態1と比べ、さらに顕著な効果を得ることができる。要求する処理は、実施の形態1と同様、要求先のPE102b、102c、102dのいずれかのPU24やSPU30のみが実行可能な処理でもよいし、本来依頼元のSPU30が実行すべき処理であるが、当該SPU30の処理の負荷が所定のしきい値を超えたために他のPE102b、102c、102dのいずれかに要求する処理でもよい。後者の場合、処理要求先のPE102b、102c、102dのいずれかにおけるSPU30などにおいても処理の負荷がしきい値を超えたら、当該PE102b、102c、102dに含まれるPU24がまた別のPEに処理要求を発行することにより、情報処理システムに含まれるプロセッサユニット全体に渡る分散処理が自律的に達成されることになる。
上記のようなネットワーク構成を有する情報処理システム100において、あるPE102aから別のPE102b、102c、102dのいずれかに処理要求を行う場合、実施の形態1において行われた処理に加え、処理要求先のPE102b、102c、102dが接続しているネットワークの種類を取得し、依頼する処理の内容などに応じて適切なネットワークを選択する必要がある。
例えば、図6に示すPE102aからPE102cやPE102dへ処理要求を行う際は、第1ネットワーク82を介すことはできないため、通信可能なネットワークを判別する必要がある。また、PE102aからPE102bへ処理要求を行う際、両者は同じ3種類のネットワークに接続しているが、高速性が要求される処理は第1ネットワーク82を選択し、それほど高速性を要求されない処理は第3ネットワーク86を選択して通信を行うことにより、全体的な処理効率を向上させることができる。
ところが従来の一般的な構成において、あるPE102aのSPU30に他のPE102bなどへ通信を行う必要が生じた場合、所属するPE102a内のPU24が当該通信要求を一旦受け付け、上記のようなネットワークに係る問題を解決して選択したネットワークを介して通信先と通信を確立するなどの処理を行っていた。このような構成に実施の形態1で述べたような非同期の処理要求を適用しても、ネットワークを解決する処理がPU24に集中し、結果的にPU24に負荷がかかり十分な効果が得られない場合がある。本実施の形態では、ネットワークの選択および転送に係る処理をPU24以外に分散させることによりPU24の負荷を軽減し、非同期の処理要求との相乗効果でシステム全体としての処理効率を向上させる。
図7は本実施の形態のPE102aにおけるMPU22の構成を詳細に示している。なお図7、図8において実施の形態1と同様の構成には同じ符号を付し、説明は適宜省略する。本実施の形態では、MPU22にPU24の他、2種類のSPU、すなわちアプリケーションSPU230a、230bおよびシステムSPU231を設ける。アプリケーションSPU230a、230bは実施の形態1におけるSPU30に相当し、主にアプリケーションプログラムを実行する。
アプリケーションSPU230aはタスク処理部32、リクエスト制御部33の他、ネットワークを介して処理要求を発行する際、ネットワークの選択に係る処理を実行するインターフェース選択部101が含まれる。さらにアプリケーションSPU230aのローカルメモリ34には、実施の形態1と同様、プログラムをロードしたり処理に必要なデータを格納する領域(不図示)の他、以前に選択されたネットワークインターフェースを要求する処理の対象ごとに保持するオブジェクトIDルックアサイドバッファ(以後、単にルックアサイドバッファと呼ぶ)104を含む。インターフェース選択部101およびルックアサイドバッファ104の機能については後に詳述する。
アプリケーションSPU230bもアプリケーションSPU230aと同様の構成を有してよいが、本図ではその図示を省略している。また以後の説明ではアプリケーションSPU230aに代表させてその動作を説明する。
本実施の形態で新たに設けられたシステムSPU231は、アプリケーションSPU230aと同様にタスク処理部32を含み、さらに当該タスク処理部32は図示するように第1ネットワーク通信部112を含む。システムSPU231は自らが行うタスク処理として、アプリケーションSPU230aが外部のPEに行う処理要求を、第1ネットワーク通信部112によって転送する。このとき第1ネットワーク通信部112が転送する処理要求は、第1ネットワーク82を介するものに限られる。図6の例では、PE102aからPE102bへの処理要求のうち、高速通信を行なう必要のある処理がこれに相当する。すなわち第1ネットワーク通信部112は第1ネットワーク82へのネットワークインターフェースとして機能する。
なおアプリケーションSPU230a、230bおよびシステムSPU231は同図で示す数に限らない。例えば第1ネットワーク82、第2ネットワーク84、第3ネットワーク86を介した転送をそれぞれ実行する個別のシステムSPUを3つ設けてもよい。また1つのシステムSPU231で2つ以上のネットワークへ転送できるようにしてもよい。さらにシステムSPU231は、タスク処理部32の一タスクとしてネットワークインターフェースの機能を発揮するため、実際にはアプリケーションSPU230aと同一の構成を有していてもよい。すなわち複数のアプリケーションSPU230a、230bなどのうち、一のアプリケーションSPUをシステムSPU231として機能させてもよい。
さらに本実施の形態のPU24は実施の形態1と同様にリクエスト受付部27およびリクエスト処理部26を含むが、リクエスト処理部26は図示するように、通信制御部116、第1ネットワーク通信部118、第2ネットワーク通信部120、および第3ネットワーク通信部122を含む。第1ネットワーク通信部118、第2ネットワーク通信部120、および第3ネットワーク通信部122はいずれも、アプリケーションSPU230aが外部のPEに処理要求を行う際のネットワークインターフェースとして機能する。ここで第1ネットワーク通信部118は第1ネットワーク82を介する転送、第2ネットワーク通信部120は第2ネットワーク84を介する転送、第3ネットワーク通信部122は第3ネットワーク86を介する転送をそれぞれ行う。
通信制御部116は各処理要求の要求先のPEのノードの特定や要求先に接続したネットワークの特定などを行い、処理要求を第1ネットワーク通信部118、第2ネットワーク通信部120、第3ネットワーク通信部122へ振り分けることにより転送処理を制御する。ただし本実施の形態ではPU24におけるネットワークに係る処理を可能な限り省略できるようにすることでPU24の処理の負荷を軽減する。PU24のリクエスト処理部26は、その他、実施の形態1で述べたのと同様に、アプリケーションSPU230aが当該PU24に対して要求した外部依頼処理を実行するタスク処理部114も含む。
本実施の形態におけるシステムSPU231は、PU24が行う上記のネットワークに係る処理より簡易な処理を行う。すなわち、あらかじめ処理要求先のノードの特定がなされ、さらに特定のネットワーク、図7の例では第1ネットワーク82を介して転送するのが適切であることが判明した処理要求のみがシステムSPU231へ送られ、転送される。これにより、システムSPU231は高速かつ転送時間が見積もり可能なリアルタイム通信を実現することが可能となる。一方、PU24はネットワークの特定などを含むネットワークに係る全ての処理を行えるほか、ネットワークに係る処理以外の処理も行う汎用プロセッサとしての機能を有する。
アプリケーションSPU230aのインターフェース選択部101は、PU24の通信制御部116が特定した、処理要求先のPEに接続したネットワークのうち、要求する通信速度に従いネットワークを選択する。さらに、当該ネットワークに対し通信を行えるネットワークインターフェースが複数存在する場合は、リアルタイム通信が必要か否かによってネットワークインターフェースを選択する。
例えば図6において、要求先がPE102cであった場合は、第2ネットワーク84または第3ネットワーク86から一のネットワークが選択されるが、当該ネットワークへ通信を行えるインターフェースは図7においてPU24に含まれるものに限られるため、自ずとPU24内の第2ネットワーク通信部120または第3ネットワーク通信部122がネットワークインターフェースとなる。一方、要求先がPE102bであった場合で第1ネットワーク82を選択した場合は、当該ネットワークへ通信を行えるインターフェースがPU24の第1ネットワーク通信部118とシステムSPU231の第1ネットワーク通信部112との2つ存在するため、そのいずれかを選択する。
選択したネットワークインターフェースは、ローカルメモリ34のルックアサイドバッファ104に格納しておく。これにより、次回に同一の処理対象の処理要求を行う際は、PU24による要求先のPEのノードの特定や要求先に接続したネットワークの特定、およびインターフェース選択部101によるネットワークおよびネットワークインターフェースの選択といった処理を省略することができる。さらにネットワークインターフェースとしてシステムSPU231の第1ネットワーク通信部112を選択する場合は、PU24は転送処理自体をも行わずに済む。これによりPU24の処理の負荷が軽減されるうえ、処理要求の内容に応じてリアルタイム通信、非リアルタイム通信を選択することができる。
図8は本実施の形態のPE102aにおけるメインメモリ42の構成を詳細に示している。メインメモリ42には、実施の形態1で示したプログラム格納領域50、リクエスト格納領域52、結果格納領域54、フラグ格納領域56の他、オブジェクトIDキャッシュを格納するオブジェクトIDキャッシュ格納領域106と、ルーティングテーブルを格納するルーティングテーブル格納領域108とを含む。
アプリケーションSPU230aが外部のPEに対し処理要求を発行する際は、要求する処理対象をソフトウェア上で識別する情報を指定してライブラリを呼び出す。ここで「処理対象」とは、処理の対象をソフトウェア上で何らかの規則により区分けした単位であればよく、いわゆる「オブジェクト」でもよい。「処理対象」は例えばその処理を実現するプログラムコードを記憶したメモリや処理対象のデバイスなど、何らかのハードウェアの単位と対応する。そしてSPU230aは、当該ハードウェアを含むPEに対し処理要求を行うことにより「処理対象」に対する処理を実現させる。以後、処理対象を識別する情報を「オブジェクトID」と呼ぶ。
同ライブラリによって当該処理要求の転送を受け付けたPU24は、ルーティングテーブル格納領域108に格納されたルーティングテーブルを参照して、オブジェクトIDに対応する要求先のPEのノード番号や接続したネットワークの特定を行う。またPU24は、特定した要求先のノード番号をオブジェクトIDと対応づけてオブジェクトIDキャッシュ格納領域106にオブジェクトIDキャッシュとして格納しておく。オブジェクトIDキャッシュにエントリされているオブジェクトIDについては、ノード番号および接続したネットワークが特定済みであるため、以後、それらの情報の特定処理を省略できる。
図9はメインメモリ42のルーティングテーブル格納領域108に格納されるルーティングテーブルのデータ構造の例を示している。ルーティングテーブル130は、ノード番号欄132、ネットワーク欄134、およびローカルノードID欄136を含む。ノード番号欄132には、PE102a、102b、102c、102dのそれぞれに一意に与えられ、かつ位置を表すノード番号が記録される。ネットワーク欄134にはPE102a、102b、102c、102dが接続するネットワークの種類が記録される。複数のネットワークに接続している場合はそれらの全てが記録される。ローカルノードID欄136には、ネットワーク欄134に記録されたネットワークごとに、当該ネットワーク内で各ノードを識別するためのローカルノードIDが記録される。
ルーティングテーブル130は外部記憶装置などにあらかじめ記憶されていたものをメインメモリ42に読み出してもよいし、情報処理システム100の起動時などにそれぞれのPE102b、102c、102dの内部設定を読み出し、構成しなおすようにしてもよい。
上述のとおりPU24の通信制御部116はアプリケーションSPU230aからの処理要求を転送する際、ルーティングテーブル130を参照し、要求先PEへ接続したネットワークを取得する。このとき必要となる要求先PEのノード番号は、要求元のアプリケーションSPU230aが指定したオブジェクトIDに基づき既存の技術で取得する。例えばオブジェクトIDとノード番号との対応を管理している別のPEに問合せを行ったり、その対応をリスト化しておき検索を行ったり、実際に別のPEへ転送し、そこからの転送を経て目的のオブジェクトIDに対応するPEに到達したら当該PEからノードの情報を受け取るようにしたりする。あるいは要求先までの距離などに応じてそれらを組み合わせてもよい。
図10はメインメモリ42のオブジェクトIDキャッシュ格納領域106に格納されるオブジェクトIDキャッシュのデータ構造の例を示している。オブジェクトIDキャッシュ140は、オブジェクトID欄142とノード番号欄144とを含む。オブジェクトID欄142には、過去に発行された処理要求のオブジェクトIDが記録される。ノード番号欄144には、各オブジェクトIDに対応する要求先PEのノード番号が記録される。オブジェクトIDキャッシュ140は、PU24の通信制御部116が上述のように新たなオブジェクトIDに対応する要求先のノード番号を取得するたびに追加される。一定期間、同じオブジェクトIDの処理要求が発生しない場合は上書きされるようにしてもよい。
図11はアプリケーションSPU230aのローカルメモリ34に格納されるルックアサイドバッファ104のデータ構造の例を示している。ルックアサイドバッファ104は、オブジェクトID欄152およびネットワークインターフェース欄154を含む。オブジェクトID欄152には、過去に発行した処理要求のオブジェクトIDが記録される。ネットワークインターフェース欄154には、それぞれの処理要求に対してインターフェース選択部101が選択したネットワークインターフェースを識別する情報が記録される。ルックアサイドバッファ104においても、長期間参照されなかったオブジェクトIDについてはそのエントリを上書きするようにしてもよい。
上述した、オブジェクトIDからの要求先のノードの特定、要求先が接続するネットワークの特定、ネットワークおよびネットワークインターフェースの選択、および処理要求の転送、といった多段階のネットワークに係る処理を同一のライブラリとして提供することにより、アプリケーションSPU230aで処理されるアプリケーションプログラム側では個々のネットワークを抽象化することができ、ライブラリによって自動的に適切なルーティングが行われることになる。アプリケーションSPU230aはアプリケーションのタスク処理において、要求先のPEがネットワーク上のどの位置に存在しているかを考慮することなく、オブジェクトIDを設定してライブラリを呼び出すのみで処理要求を行うことができる。
図12はPE102a内のアプリケーションSPU230aにPE102bへの外部依頼処理が発生した際の、処理要求の転送に係る処理手順を示している。まず外部依頼処理が発生すると(S110)、アプリケーションSPU230aのリクエスト制御部33は、ローカルメモリ34のルックアサイドバッファ104を参照し、要求する処理のオブジェクトIDがエントリされているか否かを確認する(S112)。ここでオブジェクトIDは、以前に当該オブジェクトIDに対応するPEと通信を確立した際に得たものでもよいし、メインメモリ42や情報処理システム100内の共有メモリなどにリストアップされているものから選択するようにしてもよい。オブジェクトIDがルックアサイドバッファ104にエントリされていない状況は、過去に当該オブジェクトIDの処理要求を行わなかった場合、または長期間当該オブジェクトIDが参照されずに上書きされた場合に発生する。
オブジェクトIDがエントリされていない場合(S112のN)、リクエスト制御部33は、メインメモリ42に格納されたオブジェクトIDキャッシュ140に当該オブジェクトIDがエントリされているか否かを確認する(S114)。オブジェクトIDがエントリされていない場合(S114のN)、すなわち過去に同一のオブジェクトIDの処理要求がなされていない場合または長期間参照されずにエントリが上書きされてしまっている場合、リクエスト制御部33はオブジェクトIDを指定してPU24に対し当該処理要求の転送要求を発行する(S120)。この処理は実施の形態1と同様に非同期で行われる。これにより、リクエスト格納領域52には、当該転送要求が格納される。
このとき、転送要求にPU24に対する転送要求であることを識別する情報を含めてもよいし、リクエスト格納領域52に設けたPU24専用の領域に転送要求を格納することでPU24が検出できるようにしてもよい。
PU24のリクエスト受付部27がリクエスト格納領域52に当該転送要求が格納されていることを検出すると、まずPU24のリクエスト処理部26における通信制御部116は、オブジェクトIDに基づき一般的なの手法で処理要求先のPE102bのノード番号を取得する(S122)。そしてメインメモリ42のオブジェクトIDキャッシュ格納領域106に格納されるオブジェクトIDキャッシュに、当該オブジェクトIDと取得したノード番号とを対応づけて記録する(S124)。
次にPU24の通信制御部116は、ルーティングテーブル格納領域108のルーティングテーブル130を参照し、処理要求先のPE102bが接続するネットワークとそのローカルノードIDを取得し(S126)、処理要求の転送を実行する(S132)。S120において、PE102bのノード番号を取得するために処理要求の転送も行ってしまう場合は、S122のオブジェクトIDキャッシュの更新のみ行えばよい。これにより、オブジェクトIDキャッシュ140には当該処理要求のオブジェクトIDがノード番号とともにエントリされる。
以後、同一のオブジェクトIDの処理要求を行う場合は、当該オブジェクトIDがオブジェクトIDキャッシュ140にエントリされている状態(S114のY)となっている。この場合、処理要求元のアプリケーションSPU230aのインターフェース選択部101は、オブジェクトIDキャッシュ140およびルーティングテーブル130を参照して、処理要求先のPE102bが接続しているネットワークを取得したうえで、当該処理要求を転送するのに適切なネットワークおよびネットワークインターフェースを通信速度などに鑑み選択する(S116)。そしてオブジェクトIDと選択したネットワークインターフェースとの対応をルックアサイドバッファ104に書き込む(S118)。
続いて、当初からルックアサイドバッファ104にオブジェクトIDがエントリされていた場合(S112のY)と同様、リクエスト制御部33は選択されたネットワークインターフェースが属するブロックに対し転送要求を発行する(S130)。図7に示した例ではネットワークインターフェースはシステムSPU231またはPU24にあるため、メインメモリ42のリクエスト格納領域52に設けたシステムSPU231またはPU24専用の領域に当該転送要求を格納する。あるいは処理要求にシステムSPU231またはPU24を識別する情報を含める。
システムSPU231またはPU24は、リクエスト格納領域52に転送要求が格納されていることを検出すると、当該転送要求を実行する(S132)。このとき、システムSPU231により転送された処理要求は、要求先のPE102bのシステムSPU231に到達する。PU24により転送された処理要求は、要求先のPE102bのPU24に到達する。これにより、システムSPU231が転送した処理要求については、要求先のPE102bにおいてもPU24が受信処理を行わずに済む。
要求先のPE102bに到達した処理要求は、当該PE102bのアプリケーションSPU230aなどにおいて処理が実行され、必要に応じて同じネットワークを介して結果が返される(S134)。このとき、システムSPU231が転送した処理要求の結果は、要求先のPE102b内のシステムSPU231から要求元のPE102a内のシステムSPU231に返される。これにより、当該処理要求についてはPU24が関与することなく処理要求および処理の結果の取得が完了する。
図13はこれまで述べた機構によって、PE102a内のアプリケーションSPU230aから別のPE102bへ処理要求を行った場合の手順の例を示すタイムチャートである。図6のネットワーク構成においてPE102bは第1ネットワーク82に接続しており、図7においてシステムSPU231は第1ネットワーク82への通信を行う第1ネットワーク通信部112を含んでいるため、図13ではネットワークインターフェースとしてシステムSPU231の第1ネットワーク通信部112が選択され、ルックアサイドバッファ104に記録されているものとする。ただし、本実施の形態はそれに限られず、システムSPU231をPU24に置き換えることもできる。
システムSPU231やアプリケーションSPU230aがリクエストや処理の結果を監視しながら待機状態となる点など、リクエストの発行や受け付けに係る詳細な処理手順は実施の形態1と同様であるため、ここでは図示を省略する。また、アプリケーションSPU230aおよびシステムSPU231内の各機能ブロックはそれぞれアプリケーションSPU230aおよびシステムSPU231で包括的に示している。同様に、要求された処理を行う主体も、要求先であるPE102b内のアプリケーションSPU230aなどであるが、PE102bで包括的に示している。
まず処理要求元のアプリケーションSPU230aは、タスク処理の途中で外部依頼処理が生じると、実施の形態1で説明したようにフラグを確認するなどして、メインメモリ42の結果格納領域54のうち使用する領域を決定するなどの初期化処理を行う(S140)。次にアプリケーションSPU230aは必要な処理の内容に応じてリクエストを発行し、リクエスト格納領域52に格納する(S142)。
リクエストには処理の結果を格納する結果格納領域54へのポインタ、要求する処理の内容を表すID、およびオブジェクトIDが含まれる。処理の内容は、呼び出す関数自身を異ならせることによって区別してもよい。当該リクエストが処理要求先でのデータの加工などであり、要求先へデータを転送する必要がある場合は、メインメモリ42内にリクエスト格納領域52と別に設けたデータ格納領域(不図示)に順次格納していくようにしてもよい。このときリクエストには転送するデータを格納した領域のアドレスやデータサイズなども含める。
PE102aのシステムSPU231は、リクエスト格納領域52に当該リクエストが格納されたことを検知すると、リクエストを転送するための処理を開始し(S144)、当該リクエストを要求先のPE102bに送信する(S146)。処理要求先に転送すべきデータがメインメモリ42のデータ格納領域に格納されている場合は、当該データもRDMAなどによって転送する。
処理要求先がリクエストされた処理を完了した場合など、要求先のPE102bから処理の結果が転送されると(S148)、要求元のPE102a内のシステムSPU231は、その結果をメインメモリ42内の結果格納領域54に格納する(S150)。それと同時に、実施の形態1で説明したフラグ格納領域56のフラグを更新し、結果が格納されたことをアプリケーションSPU230aが認識できるようにする(S152)。アプリケーションSPU230aはフラグ格納領域56のフラグの更新を確認すると、結果格納領域54中、当該フラグに対応する領域から処理結果を取得する(S154)。以上の動作により、ネットワークを介して接続した別のPE102bへ処理要求を行い、その結果を取得することができる。
この場合も実施の形態1と同様、リクエスト発行元のアプリケーションSPU230aやリクエストを転送するシステムSPU231において、リクエストの発行、転送、結果の転送、取得などを非同期で行うため、他のユニットがリクエストに係る処理を遂行している間、アプリケーションSPU230aやシステムSPU231は別のタスクを処理することができ、効率的なスケジューリングが可能となる。また、1度リクエストを発行した要求先に再度リクエストを発行する場合は、アプリケーションSPU230aにおいてネットワークの選択が完結し、さらに要求する処理内容などに応じてシステムSPU231が転送処理を実行するため、PU24が担う処理の数が格段に減少する。結果として、PU24はさらに効率よくOSなどの処理を遂行することができる。
本実施の形態は、実施の形態1で述べたような、単一のMPU22内部で閉じた処理要求の遂行と並列させることが可能である。図14は、PE102a内のアプリケーションSPU230aから別のPE102bへのネットワークを介した処理要求と、同じPE102a内の別のアプリケーションSPU230bへのローカルな処理要求とを並列に遂行する場合の手順の例を示すタイムチャートである。ここでアプリケーションSPU230aは、要求する処理内容や結果取得までの許容時間などに基づき、ネットワークを介した処理要求かローカルな処理要求かを選択し使い分けることにより、状況に適した態様を実現することができる。
なお図14で示した2つのリクエストの発行順序や結果の格納順序は一例であり、実際の状況に応じて変化する。またローカルな処理要求先のアプリケーションSPU230bはPU24としてもよく、この場合は実施の形態1と同様となる。
まず処理要求元のアプリケーションSPU230aは、タスク処理の途中でネットワークを介して外部に依頼する処理が生じると、図13と同様、メインメモリ42の結果格納領域54のうち使用する領域を決定するなどの初期化処理を行い(S160)、リクエスト格納領域52にリクエストを格納する(S162)。PE102aのシステムSPU231は、リクエスト格納領域52に当該リクエストが格納されたことを検知すると、リクエストにおいて指定された処理要求を転送するための処理を開始する(S164)。そしてリクエストやデータを、要求先のPE102bに送信する(S170)。
一方、処理要求元のアプリケーションSPU230aにおいて、今度はPE102a内の別のアプリケーションSPU230bに要求する処理が生じると、アプリケーションSPU230aはメインメモリ42の結果格納領域54のうち、先に発行した、ネットワークを介したリクエストにおいて使用する領域とは別の使用領域を決定して初期化処理を行う(S166)。そしてリクエスト格納領域52にリクエストを格納する(S168)。リクエストの格納場所も当然、先に発行したリクエストとは異なる。処理要求先のアプリケーションSPU230bは、リクエスト格納領域52に当該リクエストが格納されたことを検知すると、リクエストに指定された機能を実現するためのプログラムをメインメモリ42からロードするなどしてアプリケーションSPU230bのスケジューリングに則り処理を開始する(S172)。
要求先のアプリケーションSPU230bは、要求された処理が完了した際などに、結果格納領域54内の、リクエストにおいて指定された領域に結果を格納し(S174)、それと同時に、フラグ格納領域56の対応するフラグを更新する(S176)。要求元のアプリケーションSPU230aはフラグ格納領域56のフラグの更新を確認すると、結果格納領域54の対応する領域から処理結果を取得する(S178)。
一方、ネットワークを介してリクエストを送信した先のPE102bからも処理の結果が転送されると(S171)、要求元のPE102a内のシステムSPU231は、結果格納領域54内の、リクエストにおいて指定された領域にその結果を格納する(S180)。それと同時に、フラグ格納領域56の対応するフラグを更新する(S182)。要求元のアプリケーションSPU230aはフラグ格納領域56のフラグの更新を確認すると、結果格納領域54の対応する領域から処理結果を取得する(S184)。
なお、PE102a内で閉じた処理要求を行う際は、実施の形態1で示した手順そのものを実行すればよく、オブジェクトIDやネットワークの選択に係る処理を行うライブラリを呼び出す必要はない。これにより余分な処理を行うことなく処理時間が短縮できる。
以上の手順によって、ネットワークを介して行う処理要求か、単一のMPU22内部で行われる処理要求かに関わらず、アプリケーションSPU230aは必要に応じてリクエストを発行し、発行後は別のタスクを処理することができる。そしてスケジュール上、効率のよい時点で結果を取得することができる。リクエストを転送するシステムSPU231や要求先のPE102bのアプリケーションSPU230aなどにおいても、効率のよいタイミングでリクエストを取得することができる。さらに要求元のPE102aのPU24は、場合によっては転送処理自体も行う必要がなくなる。
フラグ格納領域56は、リクエストを転送するシステムSPU231またはローカルな処理要求の要求先であるアプリケーションSPU230bが結果を格納する際に更新するものであるため、同一のビット列を共有してもよい。これにより、処理要求元のアプリケーションSPU230aは、ネットワークを介して得られた結果か、同一のPE102a内で得られた結果かを区別することなく、結果の格納を認識することができる。結果として、意図に反して一方の結果の取得が他方より優先されたり、他のタスクより優先されたりすることがなくなり、情報処理システム100全体において高い並列性を実現することができる。フラグ格納領域56のフラグを認識してから結果を取得するまでの手順をあらかじめライブラリ上で設定しておくことにより、結果格納領域54に格納された2つの結果を同時に取得する、格納された順に取得する、など所望の態様を選択できる。
以上述べた本実施の形態によれば、外部依頼処理が発生した場合、当該処理要求の発行および受け付けを、メインメモリにリクエスト格納領域を設けることで非同期に行う。また処理結果の送信および取得を、メインメモリに結果格納領域を設けることで非同期に行う。これにより、処理要求元のアプリケーションSPU、処理要求先のPE内のアプリケーションSPU、処理要求を転送するPUやシステムSPUなどでは、内部のスケジュールに則り、コンテキストスイッチを最小限とするようなタイミングで、処理要求に係る処理を行うことができ、システム全体のオーバーヘッドを軽減できる。また、処理要求元は予め用意されたライブラリを呼び出すことにより、要求する処理の内容を抽象化した形式で指定することができるため、要求元となるアプリケーションプログラムを簡略化でき、デバイス構成に依存しない共通化したプログラム作成が可能となる。同様に、本実施の形態は、各PEが内部で行っているタスク処理の管理方式にも依存せずに実現させることが可能である。
ネットワークを介した処理要求についても、ライブラリによって最適なネットワークおよびネットワークインターフェースの選択を行うため、ネットワークインターフェーススの構成を変化させても、少ない手順で最適なネットワークを介した処理要求が可能となる。一般的なシステムにおいてはネットワーク通信をPUが集中的に管理するため、ネットワークを介してデータを送信する際は、PUにおける処理順待ちなどによって送信開始が遅延することが多い。一方、本実施の形態では、一度処理要求を発行した要求先については、最適なネットワークインターフェースを要求元アプリケーションSPUのローカルメモリに記憶させておくことにより、次回の処理要求発行時にはネットワーク選択に係る処理を省略でき、より短時間で処理要求を送信できる。
また、転送処理の一部を担うシステムSPUを設けることにより、アプリケーションSPUが要求する処理内容などに応じて、転送を依頼する先であるネットワークインターフェースをシステムSPUかPUか選択できる。例えば高速に処理を遂行したい場合はPUを介さずシステムSPUが処理要求の転送を行うことにより、PUでの処理待ち時間などが生じないリアルタイム通信が可能となる。結果としてPUを介した非リアルタイム通信と、PUを介さないリアルタイム通信とを共存させることができ、ネットワークの特性を生かした臨機応変な通信機構を実現できる。またPUが行う転送処理が減り、PUの処理の負荷がさらに軽減される。
ここでシステムSPUをPUとアプリケーションSPUとの中間的位置づけとして設けることにより、PUの処理の負荷を軽減できると同時に、アプリケーションSPUで読み出すべきライブラリのコードの増加を抑えることができ、処理の分散に伴うアプリケーションSPUへの悪影響を抑えることができる。
さらに、情報処理システムにおける要求先のPEの位置や通信を行うネットワークなど低レベルのデバイス層に係るパラメータを、位置に依存しないオブジェクトIDによってユーザレベルで管理する。これにより、ネットワーク通信を行う際に必要な、アプリケーション層からデバイス層まで落とし込む処理を省略することができると同時に、要求元となるアプリケーションプログラムでのネットワークに係る処理を、位置に依存せずに記述することができる。従ってアプリケーションプログラムの作成段階では、それを実行するシステムの構成を考慮せずにオブジェクトIDとライブラリの記述のみでネットワークを介した処理を実現させることができるため、容易に汎用性のある分散処理が可能なプログラムを作成することができる。
また、アプリケーションSPUなどにおいて処理の負荷がしきい値を超えたら処理要求を発行するようにすることで、あるアプリケーションSPUへの負荷の集中を回避する。処理要求先のPEなどでも同様に処理要求を発行することにより、情報処理システムに含まれるプロセッサユニット全体に渡る分散処理が自律的に達成され、より高速な並列処理が可能となる。アプリケーションプログラム上では、処理要求先の指定はオブジェクトIDのみで管理するため、一のオブジェクトIDに対応した実際の要求先を、呼び出されたライブラリ上で変更することが可能である。これにより例えばアプリケーションプログラム上で詳細な設定をせずに、負荷の少ないプロセッサユニットを要求先として自動的に選択することも可能となる。
さらに、ネットワークを介した処理要求と、単一のPE内の別のSPUに対する処理要求とで、同一の機構を利用できるため、単一のMPUを有する装置から、マルチコアの構成を有する情報処理システムへ容易に発展させることができる。また、例えばフラグ格納領域を共通化することにより、ネットワークを介すか否かに関わらず、同様の優先度で結果を受け取ることができるため、位置に依存しない高い並列性を有した処理が可能となる。
以上、本発明を実施例をもとに説明した。この実施例はあくまで例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
例えば、本実施の形態2で示したオブジェクトIDキャッシュを、ライブラリを実行するPUが動的に設定してもよい。 例えば、ある要求先のPEにおいて処理の負荷が増大してきた場合、1つのオブジェクトIDに対応して複数のノードを設定するように変更してもよい。要求元のSPUではリクエストはオブジェクトIDのみで管理され、当該オブジェクトIDは位置に非依存であるため、このように設定を変更しても処理要求は同様に遂行される。これにより、処理の負荷の集中が回避され、より効率のよい処理を実現できる。
一方、オブジェクトIDにノード番号などの位置情報を含めてもよい。この場合は、ルーティングテーブルなどによって要求先のノード番号を取得する処理を省略することができる。この態様は、情報処理システム100においてPEを再構築するなどノードの変更を伴わない環境では有効であり、より低コストで本実施の形態で述べたのと同様の効果を得ることができる。
10 情報処理装置、 22 MPU、 24 PU、 26 リクエスト処理部、 27 リクエスト受付部、 30a SPU、 30b SPU、 32 タスク処理部、 33 リクエスト制御部、 34 ローカルメモリ、 36 内部バス、 38 メインバス、 40 GPU、 41 I/O、 42 メインメモリ、 44 HDD、 50 プログラム格納領域、 52 リクエスト格納領域、 54 結果格納領域、 56 フラグ格納領域、 82 第1ネットワーク、 84 第2ネットワーク、 86 第3ネットワーク、 100 情報処理システム、 101 インターフェース選択部、 102a PE、 102b PE、 104 ルックアサイドバッファ、 106 オブジェクトIDキャッシュ格納領域、 108 ルーティングテーブル格納領域、 112 第1ネットワーク通信部、 114 タスク処理部、 116 通信制御部、 118 第1ネットワーク通信部、 120 第2ネットワーク通信部、 122 第3ネットワーク通信部、 230a アプリケーションSPU、 231 システムSPU。