JP2005322232A - タスクの移動に関するシステムおよび方法 - Google Patents

タスクの移動に関するシステムおよび方法 Download PDF

Info

Publication number
JP2005322232A
JP2005322232A JP2005130463A JP2005130463A JP2005322232A JP 2005322232 A JP2005322232 A JP 2005322232A JP 2005130463 A JP2005130463 A JP 2005130463A JP 2005130463 A JP2005130463 A JP 2005130463A JP 2005322232 A JP2005322232 A JP 2005322232A
Authority
JP
Japan
Prior art keywords
instruction
address
value
memory
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2005130463A
Other languages
English (en)
Other versions
JP4015159B2 (ja
Inventor
Tatsuya Iwamoto
達也 岩本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Publication of JP2005322232A publication Critical patent/JP2005322232A/ja
Application granted granted Critical
Publication of JP4015159B2 publication Critical patent/JP4015159B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • G06F9/4486Formation of subprogram jump address

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】マルチプロセッサシステム間でタスクが移動する場合、メモリ番地は移動させられる可能性がある。このため、分岐アドレス等が物理的に一定番地とならない。
【解決手段】命令群、静的データおよび動的に生成されるデータが、異なるメモリやプロセッサに、そのポインタ値を変更することなく移動できるように、命令群、静的データおよび動的に生成されたデータのアドレスに対するポインタを保持するための方法やシステムを提供する。これにより、たとえば分岐命令はターゲットオフセット値のみ保持し、実際の物理アドレスはグローバルベースアドレス値との加算により得られる。
【選択図】図6

Description

本出願は、米国特許出願第10/838,050号(発明の名称:「タスクの移動に関するシステムおよび方法」、2004年5月3日出願)に関連し、その優先権を主張する。
プロセッサで実行される典型的なプログラムは、さまざまな目的でメモリを使用する。たとえば、プログラムそのものを構成する命令を保持するためである。あるいは、静的データ、すなわち、プログラムにより供給されるデータを保持することである。たとえば、レーシングゲームの静的データであれば、レース場(Race Track)のレイアウト情報などである。
更に別の目的は、プログラムの実行時に生成されるデータを保持することである。このような、動的データ(Dynamically Allocated Data)とかヒープ(Heap)とよばれるタイプのデータは、通常、プログラムの作成前には特定されない情報を保持する。たとえば、ゲームにおいて、プレーヤーは、仮想的な車をその特性を決めながら作ることができる。車の特性や車の数は、どちらもプレーヤーによって実際にプログラムが実行されるまでは決まらないので、こういった情報は前もって保持しておくことはできない。したがって、こういったデータは、プログラムの実行中に生成される。
また、メモリの別の目的は、プログラムによって使われるスタックを保持することである。スタックはさまざまな目的で使われる。たとえば、プログラムは通常さまざまなルーチンをもっているので、プログラムの実行態様によっては、さまざまな順序で各ルーチンが実行される。あるスタックは、プロセッサが実行中のルーチンからメインのルーチンに戻れるように、ルーチンの実行順序を監視する。同様に、あるスタックは、あるルーチンによって新しいデータが生成され使用されているときに、一時的にそれとは別のルーチンに関連するデータを保持するためにつかわれる。
以上からあきらかなようにプログラムの効率的な実行のためには、全ての情報がどこにあるかをプロセッサが知る必要がある。プロセッサの処理がある命令から別の命令に移るとき、プロセッサは次の命令のありかをつきとめることができなければならない。同様に、静的データ(Statically Allocated Data)や動的データ(Dynamically Allocated Data)、スタックのを見つけることができなければならない。
このような理由から、通常、プログラムはアドレス指定可能なメモリ(Addressable Memory)を使用する。アドレス指定可能なメモリは、なんらかの識別子、通常は、「アドレス」とよばれる数値、を有するユニット単位で記憶領域を管理する。これにより、プログラムはアドレスに基づいて命令やデータをみつけることができる。したがって、プロセッサがたとえば、”Jump 100”といった命令を受け取ったときには、プロセッサはアドレス100の命令を読み出して実行する。
プログラムがアドレスを使ってデータアクセスする場合、プログラムはしばしばメモリのどこにそれらが保持されているかを前もって正確に知ることができないという難点が生じる。たとえば、プログラムとそのデータが最後に実行されたときにはアドレス1000〜2000に保持されていたとしても、プログラムが次に実行されるときにそれらのアドレスで正しいとは保証されない。おなじプログラムが次にロードされときには、アドレス3500〜4500に保持されるかもしれない。
このため、プログラムの中には、位置独立コード(PIC:Position Independent Code)を使用するものもある。PICでは、プログラムにおけるジャンプ命令はジャンプ先の命令が存在する現実の物理アドレスを示さない。代わりに、相対アドレスとして知られる別の値を使用する。相対アドレスは、ジャンプ先の命令の物理アドレスを計算したり、決定するために使われる。この場合、たとえば、”Jump 100”という命令は、メモリのアドレス100に保持されている命令へのジャンプという意味ではない。それはプログラムの先頭の物理アドレスから100アドレス分先にある命令という意味である。
PICを使用するシステムは、相対アドレスをさまざまな方法で物理アドレスに変換する。たとえば、物理アドレスは、プログラムがメモリにロードされたときに決定される。この場合、プログラムがメモリにロードされたときに、相対アドレスは物理アドレスに変換される。そして、プログラムの実行中にジャンプ命令があらわれたときには、プロセッサはプロセッサのレジスタの一つに保持されているベースアドレスに相対アドレスを加算することにより物理アドレスを計算する。
PICシステムの難点は、マルチプロセッサシステムのニーズに対しては適切なアドレッシングではないことである。マルチプロセッサシステムにおいては、複数のサブプロセッサが所望の処理結果を実現するために並列に(少なくとも、協働して)処理できる。マルチプロセッサシステムは、通常は、実行されるべきプログラムをあるプロセッサから別のプロセッサに移す機能を有する。
マルチプロセッサシステムにおいては、プログラムがあるプロセッサから別のプロセッサに移されるとき、そのプログラムが実行中であることもある。PICシステムは、そのような実行中の移動という目的に沿うものではない。PICプログラムが一旦メモリにロードされると、その物理アドレスは既知とされる。したがって、プログラムがロードされ実行されたあとに生成されるデータを指し示すアドレスポインタは、概して、物理アドレス位置を指し示すことになる。それゆえ、実行中のPICプログラムに関連する情報すべてを別のメモリ位置に移動させることは困難である。このようなプログラムは、移動に関連した割込処理を受けやすいものである。
したがって、(静的なデータを含めた)プログラムと動的に生成されたデータを異なるプロセッサやアドレス位置に移動させるための、より好適なシステムおよび方法が必要である。
本発明のある態様は、タスク処理方法である。
この方法は、アドレス指定可能なメモリに命令を保持するステップと、命令が保持されているアドレスに関連するベース値を設定するステップと、ターゲット命令にジャンプするための命令であって、パラメータ値を含むジャンプ命令を取得するステップと、命令が保持されているメモリにおけるルーチンにジャンプすることによって、ジャンプ命令を実行するステップと、を備え、このルーチンは、(a)パラメータ値とベース値に基づいてターゲット命令のアドレスを特定するステップと、(b)ターゲット命令の物理アドレスにジャンプするステップと、を含む。
ジャンプ命令は、条件付きの、または、条件付きでないジャンプ命令であってもよい。この方法は、1以上の命令の物理アドレス位置に応じたベース値をレジスタに格納するステップを含んでもよい。また、命令と、命令の実行に応じて生成される動的データおよび他のデータを含むタスクイメージを取得するステップを含んでもよい。このとき、ベース値はタスクイメージの最小物理アドレスに応じた値であってもよい。この方法は、命令を別のメモリ位置に移動できるかを示すマスク値を保持するステップと、メモリに保持されているルーチンにジャンプしてターゲット命令のアドレスを特定する処理の実行中においては、タスクイメージを移動させるための割込要求を抑止し、メモリに保持されているルーチンにジャンプしてターゲット命令のアドレスを特定する処理が終了した後に、割込要求に対する抑止を解除するステップを含んでもよい。また、パラメータ値にベース値を加算することによってターゲット命令のアドレスを特定するステップを含んでもよい。
本発明の別の態様も、タスク処理方法である。
この方法は、ターゲットルーチンへのパラメータ値付きのジャンプ命令、ターゲットルーチンにおけるリターン命令、ターゲットルーチンの実行後に続いて実行されるべき命令を含む命令群をアドレス指定可能なメモリに保持するステップと、命令群が保持されているアドレスに関連する第1のベース値を設定するステップと、第1のベース値とジャンプ命令のアドレスに基づいてリターンオフセットを特定し、リターンオフセットを保持し、パラメータ値と第1のベース値に基づいてターゲットルーチンのアドレスを特定し、ターゲットルーチンのアドレスにジャンプすることにより、ジャンプ命令を実行するステップと、命令群が保持されているアドレスを変更し、変更後のアドレスに関連する第2のベース値を保持するステップと、命令群のアドレスが変更された後に、リターンオフセットと第2のベース値に基づいて次の命令のアドレスを特定し、そのアドレスにジャンプすることによりリターン命令を処理するステップと、を含む。
この方法は、更に、ジャンプ命令のアドレスからベース値を減算することによりリターンオフセットを特定し、ジャンプ名利の処理中においては、命令が保持されているアドレスの変更を抑止してもよい。
この方法は、第1および第2のベース値とは異なる第1のデータベース値を設定するステップと、第1のデータベース値からのオフセットとしてデータを指し示すためのポインタを含む動的データを、命令の実行に応じて生成するステップと、ポインタの値を維持しつつ動的データのアドレスを変更するステップと、変更後のアドレスに関連する第2のデータベース値を保持するステップと、動的データのアドレスが変更された後に、ポインタの値と第2データベース値に基づいてデータのアドレスを特定することにより、データアクセス命令を実行するステップと、を含んでもよい。
本発明の、更に別の態様は、タスク処理システムである。
このシステムは、複数のサブプロセッシングユニットと、サブプロセッシングユニットによって実行可能な命令と、各サブプロセッシングユニットごとに対応してグローバルベース値を保持するグローバルベースアドレスレジスタと、命令に応じてサブプロセッシングユニットによりアクセスされ、命令の実行前からその値が保持される静的データと、命令に応じてサブプロセッシングユニットによりアクセスされ、命令の実行前にはその値が保持されない動的データと、ジャンプ先の命令の物理アドレスとは独立したパラメータ付きのジャンプ命令と、アクセス対象となるデータの物理アドレスとは独立したパラメータ値付きのデータポインタと、を備え、ジャンプ命令とデータポインタはそれぞれのパラメータ値およびグローバルアドレス値に基づいてアドレスを解決され、それらのパラメータ値を維持しつつグローバルベース値を変更することによって、あるプロセッサから別のプロセッサに命令を移動させる。
このシステムは、好ましくは、ジャンプ先のルーチンが実行された後に戻るべきアドレスに関連する値を保持するリターンアドレスレジスタを備えてもよい。このシステムは、また、命令のメモリアドレスが変更可能であるかを示す割込マスク値を含んでもよい。命令は、サブプロセッシングユニットに一意に対応づけられたローカルメモリに保持されてもよい。また、動的データはヒープやスタックを含んでもよい。好ましくは、少なくともデータアクセス命令におけるパラメータとなるポインタが保持されており、少なくとも、ポインタのいくつかは、動的データ内に保持されてもよい。命令の実行に応じて生成される全てのデータポインタは、アクセス対象となるデータの物理アドレスとは独立したパラメータ値を含んでもよい。
本発明の更に別の態様は、タスク処理方法である。
この方法は、第1のプロセッサによりアクセス可能であって、アドレス指定可能メモリに、第1の命令サブセットと、第1の命令サブセットによって生成されたデータにアクセスする第2の命令サブセットを含む命令群を保持するステップと、命令群が保持されている物理アドレスに応じた第1のベース値を保持するステップと、ターゲットとなるべき動的データへのポインタを含む動的データを、第1のプロセッサが第1の命令サブセットの実行によって生成するステップと、第1のベース値とポインタの値に基づいてターゲットデータの物理アドレスを特定することにより、第1のプロセッサがそのターゲットとなるべき動的データにアクセスするステップと、第1の命令サブセットが実行された後に、ポインタの値を変更することなく第2のプロセッサによってアクセス可能で、アドレス指定可能メモリに命令と動的データを保持させるステップと、第2のプロセッサが第2の命令サブセットを実行し、第2のベース値とポインタの値に基づいてターゲットとなるべき動的データにアクセスするステップと、を備える。
本発明の更に別の態様は、タスク処理システムである。
このシステムは、アドレス指定可能メモリに保持された命令と、命令が保持されているアドレスに応じたベース値を保持するメモリと、ターゲット命令にジャンプするための命令であって、パラメータ値を含むジャンプ命令を保持するメモリと、命令が保持されているメモリにおけるルーチンにジャンプすることによりジャンプ命令を実行する手段と、を備え、そのルーチンは、(a)パラメータ値とベース値に基づいてターゲット命令のアドレスを特定するステップと、(b)ターゲット命令の物理アドレスにジャンプするステップと、を含む。
このシステムは、ベース値を保持するレジスタを含んでもよい。ベース値は、1以上の命令の物理アドレス位置に応じた値であってもよい。また、命令と、命令の実行によって生成される動的データ、その他のデータを含むタスクイメージを更に備えてもよい。ここで、ベース値は、タスクイメージの最小物理アドレスに応じた値であってもよい。更に、命令を別のメモリ位置へ移動できるかを示すマスク値を含んでもよい。加えて、メモリに保持されているルーチンにジャンプして、ターゲット命令のアドレスを特定する処理が終了した後には、割込要求についてのマスク値を変更する手段を備えてもよい。
本発明の更に別の態様は、タスク処理システムである。
このシステムは、ターゲットルーチンに対するパラメータ値付きのジャンプ命令、ターゲットルーチンにおけるリターン命令、ターゲットルーチンの実行後に続いて実行されるべき命令を含み、アドレス指定可能メモリに保持される命令群と、命令群が保持されているアドレスに関連する第1のベース値を設定する手段と、第1のベース値とジャンプ命令のアドレスに基づいてリターンオフセットを特定し、リターンオフセットを保持し、パラメータ値と第1のベース値に基づいてターゲットルーチンのアドレスを特定し、ターゲットルーチンのアドレスにジャンプすることにより、ジャンプ命令を実行する手段と、命令群が保持されているアドレスを変更し、変更後のアドレスに関連する第2のベース値を保持する手段と、を備え、命令群のアドレスが変更された後に、リターンオフセットと第2のベース値に基づいて次の命令のアドレスを特定し、そのアドレスにジャンプことによってリターン命令を実行する。
このシステムの、リターンオフセットは、ジャンプ命令のアドレスから第1のベース値を減算することにより特定されてもよい。ジャンプ命令の実行中においては、命令群が保持されているアドレスの変更を抑止する手段を更に備え、そのための手段は、命令群のアドレスを変更するための割込要求を抑止する手段を含んでもよい。このシステムは、また、第1および第2のベース値とは異なる第1のデータベース値を設定する手段と、第1のデータベース値からのオフセットとして保持されるデータポインタを含む動的データを、命令群の実行に応じて生成する手段と、ポインタの値を維持しつつ動的データのアドレスを変更する手段と、変更後のアドレスに関連する第2のデータベース値を保持する手段と、動的データのアドレスが変更された後に、ポインタの値と第2のデータベース値に基づいてデータのアドレスを特定することにより、データアクセス命令を実行する手段と、を更に備えてもよい。
本発明の更に別の態様は、タスク処理システムである。
このシステムは、第1プロセッサと、第1プロセッサに関連づけられた第1メモリと、第1メモリにロードされたときのタスクイメージの物理アドレスに応じた値を保持する第1ベースレジスタと、第2プロセッサと、第2プロセッサに関連づけられた第2メモリと、第2のメモリにロードされたときのタスクイメージの物理アドレスに応じた値を保持する第2ベースレジスタと、パラメータ付きのジャンプ命令、パラメータ付きのデータアクセス命令、第1プロセッサによる命令群の実行前に生成される静的データ、第1プロセッサによる命令群の実行に応じて生成され、命令やデータの位置に応じたパラメータとスタックを含むヒープと、を含むタスクイメージと、ジャンプ命令とデータアクセス命令の実行に応じて実行されるルーチンであって、命令の実行やデータアクセスを行うプロセッサに関連づけられたレジスタの値と、ジャンプ命令やデータアクセス命令のパラメータに基づいて物理アドレスを特定するアドレス解決ルーチンと、を備え、第1メモリに保持されているタスクイメージは、割込要求に応じて、パラメータの値も含めて第1メモリか第2メモリにコピーされる。
このシステムは、割込要求に応じて、第1メモリから第2メモリにタスクイメージをパラメータの値も含めてコピーする第3プロセッサを備えてもよい。
このシステムは、割込要求に応じて第1メモリから第2メモリにタスクイメージをコピーできるか否か示すマスク値を保持する割込マスクレジスタを備えてもよい。割込要求は、アドレス解決ルーチンの少なくとも一部によって抑止されてもよい。また、アドレス解決ルーチンは、第1または第2プロセッサにいずれがジャンプ命令を実行しているかに応じた第1または第2のベースレジスタのいずれかの値と、ジャンプ命令のアドレスに基づいて、リターンオフセットを計算するための命令を更に備えてもよい。たとえば、このシステムは、リターン命令に応じて、ジャンプ命令の後に実行されるべき命令の物理アドレスを特定するために実行される、リターンアドレスを解決するためにルーチンを含み、このルーチンは、第1または第2プロセッサのいずれがリターン命令を実行しているかに応じた第1または第2ベースアドレスレジスタのいずれかの値と、リターンオフセットに基づいてその物理アドレスを特定してもよい。
この発明のその他の特徴や優位性は、図を含めた記載から当業者に明らかとなるであろう。
なお、説明のため、図面によって好適な形態を示すが、この発明が示されている内容に厳密に限定されるものでないことは当業者には理解されるところである。
図1は、本実施例におけるマルチプロセッサシステム100を示す。図面における符号は部材(elements)を指し示している。マルチプロセッサシステム100は、DRAMのような共有メモリ106とバス108を介して連結されている複数の(数は任意である)プロセッサ102を含む。共有DRAMメモリ106は、必須構成ではない(そのため、図では点線で示している)。実際、1以上のプロセッシングユニット102は、それぞれ専用のメモリ(図示せず)を使うことにより、共有メモリ106を不要としてもよい。
プロセッサ群102のうちの1つ、たとえば、プロセッシングユニット102Aはメインプロセッシングユニットであってもよい。プロセッシングユニット102B、102C、102Dなどのような残りのプロセッシングユニット102は、サブプロセッシングユニット(SPU)であってよい。これらのプロセッシングユニット102は、既知のコンピュータアーキテクチャにて実装されればよい。全てのプロセッシングユニット102が同じアーキテクチャで実装される必要はない。実際には、これらのプロセッシングユニット102は、異種または同種のアーキテクチャにより構成されている。制御に際し、サブプロセッシングユニット102B〜Dがデータやアプリケーションを並列かつ独立して処理できるように、メインプロセッシングユニット102Aは、サブプロセッシングユニット102B〜Dによるデータやアプリケーションの処理をスケジューリングして協調させることが望ましい。
メインプロセッシングユニット102Aは、同じチップ、同じパッケージ、同じ回路ボード、同じ製品などのように、サブプロセッシングユニット102B〜Dに対して「ローカルに」配置されてもよい。一方、メインプロセッシングユニット102Aは、バスやインターネットのような通信ネットワークなどを介した異なる製品において、サブプロセッシングユニット102B〜Dに対して「リモートに」配置されてもよい。同様に、サブプロセッシングユニット102B〜Dも、互いにローカルまたはリモートに位置してもよい。
サブプロセッシングユニット102B〜Dは、ハードプロセッサエラー(Hard Processor Error)を生じる可能性がある。ここでいうハードプロセッサエラーとは、たとえば、OS(Operating System)のシステムエラーやカーネルエラーなどを伴わない回復可能なエラーである。メインプロセッシングユニット102Aは、(エラーの発生より前に)最初からサブプロセッシングユニット102B〜Dにより実行されてきたプロセッサタスクを再実行させることなく、プロセッサタスクの実行を継続させる管理機能を持つことが望ましい。メインプロセッシングユニット102Aの管理機能は、1以上のサブプロセッシングユニット102B〜Dにおいて回復可能なエラーが発生したときにも、リアルタイム(かつ/または、マルチメディア)処理という目的が果たされるように制御されることが好ましい。
管理機能としては、更に、各サブプロセッシングユニット102B〜Dに割り当てられるプロセッサタスク(かつ/または、それらのタスクによるプロセッサの処理負荷)をモニタする機能がある。メインプロセッシングユニット102Aは、サブプロセッシングユニットのいずれかにおける処理上のエラーも検出する。検出されると、そのサブプロセッシングユニットに割り当てられていたプロセッサタスクは1以上のサブプロセッシングユニットに再配分される。この再配分は、プロセッサタスクを実行しているプロセッサユニットの処理負荷と、サブプロセッシングユニット群における処理負荷とに基づいてなされる。本発明のこれらの点を含めた詳細は、更に後述する。
好適なコンピュータアーキテクチャとして、マルチプロセッシングコンピュータシステムの全てのプロセッサは、共通の計算モジュール(すなわち、セル(Cell))から構成される。この共通の計算モジュールは、一貫して整合した構造をもつ。同一の命令セットアーキテクチャを使うことが好ましい。マルチプロセッシングコンピュータシステムは、1以上のクライアント端末、サーバ、PC、携帯型コンピュータ、ゲーム機、PDA、セットトップボックス、特定機能コンピュータ(Appliance)、デジタルテレビ、その他コンピュータプロセッサを使うデバイスによって構成される。
プロセッサエレメント(PE)は、基本となる処理モジュールである。図2は、これについて参照されるべきものである。すなわち、図2は、基本的な処理モジュールであるプロセッサエレメント(PE)200のブロック図である。同図に示すように、PE200は、I/Oインタフェース202、プロセッシングユニット(PU)204、ダイレクトメモリアクセスコントローラ(DMAC)206、複数のサブプロセッシングユニット208、すなわち、サブプロセッシングユニット208A、サブプロセッシングユニット208B、サブプロセッシングユニット208C、サブプロセッシングユニット208Dを含む。ローカルの(すなわち、内部的な)PEバス212は、データやアプリケーションをPU204、サブプロセッシングユニット208、DMAC206、メモリインタフェース210間で伝送する。ローカルPEバス212は、従来型の構造をもつ。たとえば、パケット交換ネットワークとして実装できる。パケット交換ネットワークとして実装する場合、更なるハードウェアが必要となるが、利用可能な帯域幅を広げることができる。
PE200は、デジタル論理を実装するためのさまざまなやり方で構成できる。PE200は、シリコン基盤上にCMOS型の単一集積回路として構成されることが好ましい。一方、基盤の材質は、ガリウム砒素、ガリウム−アルミニウム−砒素、さまざまな不純物を加えたその他いわゆるIII−B混合物を含む。PE200は、超伝導素子、たとえば、高速単一磁束量子(RSFQ:Rapid Single-Flux-Quantum)論理を使って実装されてもよい。
PE200は、広帯域のメモリ通信線216を介してDRAM214と緊密に連携する。DRAM214は、PE200のメインメモリとして機能する。DRAM214は、ダイナミックランダムアクセスメモリであることが好ましいが、DRAM214は、たとえば、SRAM(Static Randam Access Memory)、MRAM(Magnetic Randam Access Memory)、光メモリ(Optical Memory)、ホログラフィックメモリ(Holographic Memory)などの他の手段によって実装されてもよい。DMAC206とメモリインタフェース210は、PE200のDRAM214、サブプロセッシングユニット208、PU204の間のデータ伝送を実現する。DMAC206、および/または、メモリインタフェース210は、サブプロセッシングユニット208とPU204に対して、一体に、あるいは、分離して配置されてもよい。実際には、図示するような分離構成ではなくて、DMAC206の機能、および/または、メモリインタフェース210の機能は、1以上の(好ましくは全ての)サブプロセッシングユニット208、PU204と一体として構成される。
PU204は、たとえば、データやアプリケーションを単体でも処理できる標準的なプロセッサである。制御時において、PU204は、サブプロセッシングユニット群によるデータやアプリケーションの処理をスケジューリングすることにより協調させる。サブプロセッシングユニットは、1つの命令で複数のデータを扱うSIMD(Single Instruction/Multiple Data)型のプロセッサであることが好ましい。PU204の制御の下、サブプロセッシングユニットは、これらのデータやアプリケーションを並列かつ独立して処理する。DMAC206は、共有DRAM214に保持されているデータやアプリケーションに対するPU204やサブプロセッシングユニット208のアクセスを制御する。PU204は、サブプロセッシングユニット群208の1つとして実装される。その上で、サブプロセッシングユニット群208によるデータやアプリケーションの処理をスケジューリングして協調させるメインプロセッシングユニットの役割を果たす。
このモジュール構造によれば、特定のコンピュータシステムによって使用されるPE200の数は、システムに要求される処理能力次第である。たとえば、サーバは、4つのPE200を使用する。ワークステーションは2つ、PDAは1つのPE200を使用する。PE200において、あるソフトウェアセルの処理を割り当てられるサブプロセッシングユニットの数は、そのセルにおけるプログラムやデータの複雑さや規模による。別の構成として、PEは、複数のPUを含んでもよい。また、各PUは、1以上のSPUを含んでもよい。
図3は、サブプロセッシングユニット208の好適な構成と機能を示す図である。サブプロセッシングユニット208は、ローカルメモリ250、レジスタ252、1以上の浮動小数点演算ユニット254、1以上の整数演算ユニット256を含む。各サブプロセッシングユニット208は、それぞれ固有のローカルメモリ250を持つことが望ましい。要求される処理能力に応じて、浮動小数点演算ユニット254や整数演算ユニット256の数が増減されればよい。好適には、ローカルメモリ250は、256キロバイト分のストレージであり、レジスタ252の容量は128×128ビットである。浮動小数点演算ユニット254は、1秒あたり320億回の浮動小数点演算を実行できる速度(32GFLOPS)で制御され、整数演算ユニット256は、1秒当たり320億回の演算が実行できる速度(32GOPS)で制御される。
ローカルメモリ250は、キャッシュメモリであってもよいし、なくてもよい。ローカルメモリ250は、SRAMとして形成されることが好ましい。PU204は、PU204を契機とするダイレクトメモリアクセスに対するキャッシュコヒーレンシ維持をサポートできるとよい。キャッシュコヒーレンシ維持のサポートは、サブプロセッシングユニット208を契機とするダイレクトメモリアクセスや、外部のデバイス、から/へ、のアクセスについては特に必要ではない。
サブプロセッシングユニット208は、更に、サブプロセッシングユニット208間でデータやアプリケーションを送受するためのバスインタフェース(I/F)258を含む。好適には、バスインタフェース258はDMAC206と連結される。DMAC206は、図示されているようにサブプロセッシングユニット208内に配置されてもよいし、図2で示したように外部の配置とされてもよい。そのことを示すために、DMAC206は同図では点線で囲われている。バス268Aと268Bは、それぞれ、バスインタフェース258とローカルメモリ250をDMAC206に連結する。バス268Aと268Bは、256ビットの帯域幅を持つことが望ましい。
サブプロセッシングユニット208は、更に内部バス260、262および264を含む。好ましくは、バス260は256ビットの帯域幅であり、ローカルメモリ250とレジスタ252の間の通信を担当する。バス262と264は、それぞれレジスタ252と浮動小数点演算ユニット254、レジスタ252と整数演算ユニット256の間の通信を担当する。好ましくは、バス264と262の帯域幅は、レジスタ252から浮動小数点演算ユニット254や整数演算ユニット256に対しては384ビットであり、浮動小数点演算ユニット254や整数演算ユニット256からレジスタ252に対するバス264と262の帯域幅は128ビットである。浮動小数点演算ユニット254や整数演算ユニット256からレジスタ252に対する帯域幅よりも、レジスタ252からこれらのユニットに対するバスの帯域幅を大きくとるのは、処理中にレジスタ252からより多くのデータが流れ出やすくするためにである。各演算に必要とされる最大データサイズは3ワードである。各演算の結果を格納するのに必要なデータサイズは、通常は1ワードである。
この発明と関連して使用されるマルチプロセッサシステムに関する追加情報は、米国特許出願6526491号に記載されている。この出願では、マルチプロセッサシステムに関するその他の内容が具体的に述べられている。
タスクがプロセッサにより実行されるとき、タスクは通常、ローカルメモリ250にロードされる。タスクは、命令やデータの保持も含めたさまざまな目的でメモリを使用する。このような特定のタスクに関連する命令やデータは、図4に示すような4つのカテゴリに分類される。なお、すべてのタスクが4つのカテゴリに関連するわけではなく、タスクによるメモリ使用が必ず4つのカテゴリのいずれかに分類されるというわけでもない。説明を簡単にするためにメモリにおける連続かつ隣接するエリアが使用されるものとして、カテゴリが図示されているが、メモリにおいて占有される領域は必ずしも連続しなくともよい。メモリにおける特定のエリアは、2つのカテゴリに分類される。たとえば、命令群は、ヒープ領域にスタックを生成する。図4は、タスクに関するメモリ管理の可能かつ典型的な単なる一例を示しているにすぎない。カテゴリに関する記載は、本発明の範囲をなんら制限するものではない。
第1カテゴリ610は、タスクに関連して実行される命令群を含む。これらの命令群は、数式演算やメモリにおけるデータ移動などの各種制御を実行するための命令を含むグループである。説明のために、この「プログラムカテゴリ」は、1000〜1999までのメモリアドレスを占有するとする。
一例として、これらの命令の1つは、分岐ジャンプスタブ(Branch-Jump-Stub)命令700である。ジャンプ命令でなければ、プログラム命令群610は通常、シーケンシャルに実行される。分岐、または、ジャンプ命令は、非シーケンシャルにて、プロセッサに命令を実行させる。同様に、分岐ジャンプスタブ命令700は、プロセッサにより実行されるべき次の命令や、命令セット(以下、「ターゲットルーチン」とよぶ)を特定するための情報を含んでいる。分岐ジャンプスタブ命令は、条件付き命令であってもいいし、条件付き命令でなくてもよい。分岐ジャンプスタブ命令は、実行対象となる次の命令の物理アドレス自体を特定はしない。代わりに、分岐ジャンプスタブ命令は、ターゲットオフセット値となるパラメータを特定する。ターゲットオフセットは、次に実行される命令の物理アドレスを特定するために、別の命令において使用される。分岐処理とオフセット値の計算は、SPUによって実行されることが好ましい。特に、必須ではないが整数演算ユニットによって実行されることが望ましい。
分岐ジャンプスタブ命令がターゲットとする物理アドレスは、物理アドレス解決のためのレジスタ252のうちの一つに保持されている値にターゲットオフセット値を加算することによって算出されてもよい。図5に示すグローバルベースレジスタ800が、そのような目的で使用されてもよい。グローバルアドレス値は、命令や、静的データ、動的データを含めたタスクイメージの最小物理アドレス値であってもよい。この場合、グローバルベースレジスタ800は、命令群610や以下に示すその関連データを含めたタスクイメージの最小物理アドレスであるグローバルベースアドレス値1000を図示のように保持してもよい。
第2カテゴリ620は、静的データ(Statically Allocated Data)を含む。説明のため、静的データのカテゴリは、2000〜2999までのアドレスのメモリを占有するとする。静的データとは、一般的には、命令群610によって使用され、実行前に既知のデータである。
反対に、ヒープ630は、動的データ(Dynamically Allocated Data)を含む。メモリの一部には、タスクの実行により生成されるデータが割り当てられる。説明のため、ヒープは、3000〜3999までのアドレスのメモリを占有するとする。
別のカテゴリはスタック640である。ヒープ630と同様、スタックもタスク実行時に生成される情報を格納するために使用される。ただし、スタックは、主として、サブルーチンの呼び出しに関連したデータを保持するために使用される。スタックは、関数に渡されるパラメータ値やリターン値を保持するが、同様に他のデータも保持することができる。説明のため、1以上のスタックは、4000〜4999までのアドレスのメモリを占有するとする。
図5に示すように、1以上のレジスタ252が、本発明の一実施例に関連して使用される。典型的には、ジャンプアドレスレジスタは、ジャンプ先の命令の絶対的または相対的アドレスを格納するために使用される。しかし、このシステムにおいては、ジャンプレジスタ810は、ターゲットオフセット値を保持するために使用される。リターンアドレスレジスタ830は、分岐ジャンプスタブ命令から戻ったあとに実行を再開すべき位置の物理アドレスを特定するための情報を格納する。割込マスクレジスタ820は、割込マスク値を格納する。割込マスク値は、SPU208がタスクイメージ680を別のSPUに、すなわち、メモリ250内の別位置に移動させるための割込要求を処理できる状態にあるかを示す。グローバルベースアドレスレジスタ800の目的については、更に、以下に示す。レジスタ群はレジスタバンク252に属するとして示したが、その値は、SPUや、命令を実行したりデータアクセスするその他のプロセッサによってアクセス可能なメモリ位置に保持されてもよい。
本実施例に関連したさまざまな制御について説明する。まず、分岐ジャンプスタブ命令700の実行から説明する。その制御は、図7等に関連して図示される。図4の例に基づいて説明するならば、分岐ジャンプスタブ命令700がメモリ250のアドレス1400にロードされたとき、SPUは、命令に関連する一連のステップを実行する。そのステップの内容は、ROMやローカルメモリ250、プロセッサによりアクセス可能なその他のメモリのスタブルーチンの中に格納される。一方、これらのステップのいくつかは、ROMに保持され、リマインダがローカルメモリ250に格納されてもよい。たとえば、(分岐ジャンプスタブ命令700やリターンジャンプスタブ命令720のような)命令が、スタブ、すなわち、ベースアドレスに関連するオフセット調整ルーチン(分岐ジャンプスタブルーチン670やリターンジャンプスタブルーチン671のようなものであるが、後述する)へのジャンプを実行したときに、命令はタスクコードに符号化される。一方、このルーチンはそのタスクコードとは独立したサブルーチンとして符号化されてもよい。後述の例は説明のためのものであり、本発明の範囲をこれに限る趣旨ではない。
プロセッサが分岐ジャンプスタブ命令を実行するとき、最初にジャンプアドレスレジスタ810にターゲットオフセット値600が格納される。次に、割込の発生に応じてタスクイメージ680を別のSPU208、すなわち別のメモリ位置に移動させないように割込マスクレジスタ820に値がセットされる。(もし、「マスク中」に割込が発生したときには、少なくともマスクがはずされるまで、プロセッサは割込を受け付けない。)
それから、プロセッサは、分岐ジャンプスタブ命令がジャンプ先とすべきターゲットルーチンではなく、分岐ジャンプスタブ命令に関連する追加的なステップを提供する命令セットに処理をジャンプさせる。図4に示すように、これらの命令は分岐ジャンプスタブルーチン670として、ローカルメモリ250に格納される。分岐ジャンプスタブルーチンは、ローカルメモリ250のアドレス500のように常に同一の固定物理アドレスに格納されることが好ましい。
分岐ジャンプスタブルーチン670は、分岐ジャンプスタブ命令によってターゲットとされるルーチンから戻るときに使われるリターンオフセットを計算する。本実施例において、リターンオフセットはグローバルベースアドレス値と、分岐ジャンプスタブ命令のアドレスに続く命令に基づいて計算される。たとえば、リターンオフセットは、以下の式によて計算されてもよい。
リターンオフセット=(分岐ジャンプスタブ命令のアドレス)−(グローバルベースアドレス値)+1
図4に示すサンプル値を使うと、リターンオフセットは、1400−1000+1により401となる。リターンオフセット値は、リターンアドレスレジスタ830に保持される。
後に説明するが、リターンオフセット値がリターンアドレスレジスタ830に一旦保持されると、タスクイメージ680を安全に別のメモリ位置に移動できる。したがって、割込マスクレジスタ830の値は、そのような割込に対するマスクがはずされたことを示す値に変換される。
割込マスクがはずされると、ターゲットオフセットとグローバルベースアドレス値に基づいてアドレスを計算し、それをレジスタに格納し、レジスタに格納されたアドレスにジャンプすることにより、分岐ジャンプスタブルーチンは、プロセッサの処理をターゲットルーチン710にジャンプさせる。ターゲットルーチンの物理的なターゲットアドレスは、好ましくは、グローバルベースアドレス値にターゲットオフセットを加算することにより計算されるとよい。したがって、この場合、分岐ジャンプスタブルーチンにおける最後の命令は、この物理的なターゲットアドレスを計算して、そのアドレスにある命令にジャンプする命令である。図4のサンプルデータに基づくと、ターゲットルーチン710の物理アドレスは、600+1000により1600として特定される。それから、ターゲットルーチン710の命令が実行される。
ジャンプアドレスレジスタにターゲットオフセットを格納し、割込マスクをセットし、分岐スタブルーチンにジャンプする各ステップは、従来の典型的な分岐命令を置き換えたり、補ったりするものであるといえる。SPUは、分岐ジャンプスタブ命令を取得するとこれらのステップを自動的に実行する。別例として、各ステップは個々にタスクコードに符号化されてもよい。
ターゲットルーチンがサブルーチンであれば、ターゲットルーチンにおける最後の命令は、リターンジャンプスタブ命令720であるとよい。リターンジャンプスタブ命令に関連する制御については、図8に関連して説明する。分岐ジャンプスタブ命令と同様にリターンジャンプスタブ命令720は、実行されるべき次の命令の物理アドレスを計算するルーチン671にプロセッサの処理をジャンプさせる。分岐ジャンプスタブルーチン670はターゲットルーチンの物理アドレスを計算するが、リターンジャンプスタブルーチン671は、ターゲットルーチン710の実行が完了しているのでリターン先の命令の物理アドレスを計算する。リターンジャンプスタブ命令は、プロセッサがターゲットルーチンにジャンプしたときに実行していたタスクにおけるリターン先を示すようななんのパラメータも受け付けないことが好ましい。反対に、リターンジャンプスタブ命令は、追加的にアドレスに関する情報を提供するためのパラメータを含んでもよい。
リターンジャンプスタブルーチン671へのジャンプ前において、リターンジャンプスタブ命令720に出くわすと、プロセッサはタスクイメージ680が別のメモリ位置に移動されないように割込マスクをセットする。リターンジャンプスタブルーチンは、メモリ250に保持されるものとして図4に示されているが、分岐ジャンプスタブルーチンのように、リターンジャンプスタブルーチンも、その全部または一部が、ROMや、SPU280がメモリ250における追加的な命令にアクセスすることなくリターンジャンプスタブルーチンを実行できるような他のメモリに格納されてもよい。
割込の有効無効の切り替えは、分岐ジャンプスタブ命令やリターンジャンプスタブ命令のような分岐命令のオプションとして実行されることが好ましい。そのためには、割込マスクのセットや除去、分岐といった処理はコンテキストスイッチ(Context Switch)からレジュームするためのアトミック命令(Atomic Instruction)としてオプショナルに提供されるとよい。この場合、マスクや割込に関連する処理は、ジャンプ処理と同時、または、その処理前後同時的に実行される。マスク除去処理は次の命令(レジュームに際して実行される命令)が実行される前に実行されることが好ましい。更に、割込マスクは分岐呼び出しの前に実行することもできる。
本実施例として、割込マスク処理やリターンスタブルーチンにジャンプするステップは、通常のリターン命令に代えて、あるいは、つけ加えた形で実行されてもよい。SPUはリターンジャンプスタブ命令を取得すると、これらのステップを自動的に実行してもよい。別例として、各ステップは個々にタスクコードに符号化されてもよい。
リターンジャンプスタブルーチン670は、物理的なリターンアドレスを計算する。この物理的なリターンアドレスは、リターン命令に関連する分岐ジャンプスタブ命令の後に実行されるべき命令を特定するものであることが好ましい。本実施例においては、リターンジャンプスタブルーチンは、プロセッサに次式によって物理的なリターンアドレスを計算させる。
物理的なリターンアドレス=リターンオフセット+グローバルベースアドレス値
図4に示したサンプル値を用いると、物理的なリターンアドレスは401+1000により1401となる。
いったん、物理的なリターンアドレスが計算されると、タスクイメージ680を他のメモリ位置に動かせるように割込マスクが除去される。タスク処理は、好ましくは割込マスクの除去と同時に、その物理アドレスにおける命令にジャンプする。
静的データ620は、オフセットの使用によって同様にアクセスされる。たとえば、静的データ620は、”Move Ax,Offset”といった形のデータ移動命令によってアクセスされる。ここで、Axは、データが移動されるべきレジスタを示す。そして、Offsetは、データの物理アドレスを特定するためのオフセット値を示す。命令群のときのように、静的データ620にアクセスするためのオフセットは、物理アドレスを特定するためにグローバルベースアドレス値に加算されてもよい。SPUの1以上のロード命令やストア命令は、レジスタの値にオフセットパラメータの加算することによりアドレッシングを実行してもよい。このような方法は、多くのRISCアーキテクチャにおいて知られている。
ヒープ630は配列を含み、ポインタによってアクセスされる。本実施例において、ヒープ630に関連する配列やポインタは、オフセットを使用してアクセスされる。実際には、ヒープそのものにおけるポインタも含め、すべてのポインタは、ポインタオフセットとして保持される。図4に含まれるサンプル情報によれば、ヒープ630は、さまざまなデータオブジェクト635−637を含んでいる。たとえば、レース場の車に関する、色やレース場における位置といった情報である。タスク命令群610は、まず、ポインタを含む配列631に対してアクセスすることにより、車の情報にアクセスする。各ポインタは、データオブジェクトの一つを指し示している。
ヒープ630の配列631は、配列要素のポジションに加えて上述したようなオフセットの使用によってアクセスされる。本実施例においては、配列要素の物理アドレスは、グローバルベースアドレスレジスタの値を配列のポジションを指し示す命令610のオフセットに加算し、更に、目的の配列要素を加算することにより特定される。図4のサンプルデータの場合、MOVE命令705は、配列631の第2要素632にアクセスしている。このとき、MOVE命令705は、グローバルアドレス値1000を、MOVE命令に格納されるオフセット値2005に加算し、目的の配列要素2を加算することによって、物理アドレス3007を特定している。この場合、この情報は、レジスタおよびインデックス値およびそれらの合計を取得するアドレッシング命令によってアクセスされることになる。より複雑なアドレッシングをする場合には、(たとえば、配列や構造体などの)アドレスを計算するために更なる処理が必要となる。
配列631からポインタが引き出されると、そのポインタによってヒープ630のデータにアクセスできるようになる。ただし、ポインタは物理アドレスを指し示すのではない。むしろ、ヒープ630における、あるいは、ヒープ630に対する各ポインタは、グローバルベースアドレス値に基づくオフセット値として保持されることが望ましい。たとえば、ポインタ632がヒープ630のデータにアクセスするために使用されるときには、ポインタのターゲットとなる物理アドレスは、ポインタに保持される値2200をグローバルベースアドレス値1000に加算することにより計算される。これにより、配列631における2番目の車についての物理アドレス3200が特定される。
同様に、スタック640における、または、スタック640に対するポインタも、オフセットとして保持される。たとえば、スタックは車のデータ635−637を示すポインタを含んでもよい。このようなポインタもオフセットとして保持される。
全てのカテゴリのデータが隣接するとすれば、必要なグローバルオフセットレジスタは1つである。一方、メモリ管理特性を改善するために別々のセクションにおけるタスクイメージをそれぞれのセクションのためのグローバルベースアドレスによって、保持したりロードすることもできる。たとえば、ヒープが異なるベースアドレスによって管理される場合、ヒープデータに対するポインタを管理するためにヒープアドレスレジスタが提供されてもよい。一方、多くのベースアドレスが存在する場合においてより複雑なアクセス処理するための管理プログラムが提供されてもよい。
本実施例においては、タスクイメージ内におけるアドレスポインタを一切変更することなく、タスクの実行中においてその動的データも含めたタスクイメージの全てを容易に移動させることができる。図6は、SPU280AからSPU280Bにタスクイメージを移動させる様子を示している。全てのタスクイメージのアドレスは、グローバルベースアドレス値に対するオフセットとして保持されるので、命令610、静的に配されたデータ620、ヒープ630またはスタック640に含まれるアドレスに関する情報を変更する必要がない。タスクイメージデータは、どのような他のアドレス空間に対してもコピーできる。
図6に示す例によれば、命令群やデータは、SPU280Aのアドレス空間1000〜1399から、SPU280Bのアドレス空間5000〜5399にコピーされている。ここでは、SPU280AのアドレスXにあるものがSPU280BのアドレスX+4000に移されている。タスクイメージデータに含まれる何らの情報も変化させる必要がない。
タスクの命令群やデータが移動される前後において、移動先となるSPU28のグローバルベースアドレス値は、新しく移動されるタスクイメージの最小アドレスとなる様にセットされる。たとえば、SPU280Bのグローバルベースレジスタ800の値は、5000に変更される。
タスクイメージが移動されるとき、ジャンプアドレスレジスタとリターンアドレスレジスタの値もSPU280AからSPU280Bに移動されてもよい。このような移動方法によれば、たとえタスクイメージの移動時において、タスクがターゲットルーチンから、または、ターゲットルーチンへジャンプするとしても、データ変化なしにタスクイメージを移動させることができる。
専用のジャンプアドレスレジスタを提供するアーキテクチャは必要とされなくてもよい。本実施例におけるシステムは、ジャンプ先のさまざまなアドレスを保持するために一般的なレジスタを用いることによって実装できる。
したがって、タスクが実行中であっても、タスクやデータに含まれるアドレス情報を変化させることなく、すべての命令やデータをシームレスに、別のプロセッサに移動できる。プログラムが制御を再開するときに、唯一必要な変化はたった一つのレジスタのグローバルベース値を変更することである。このとき、ジャンプ及びリターンアドレスレジスタの値も変更されてもよい。全てのレジスタの値はプリエンプト時に保持されるプロセッサ状態(Processor Context)の一部であってもよい。
この発明は、仮想メモリを取り扱えないハードウェアやプロセッサにおいても実現可能である。これは、特に、SPUが小さなローカルメモリを持ち、ソフトウェアによるメモリ管理を要求するからである。
例示した制御は、先述の順番で実行される必要はない。実行順序については柔軟に考えられる。たとえば、リターンオフセットは、ターゲットルーチンの物理アドレスが計算される前後いずれにおいても計算することができる。
たとえば、「含む」、「保有する」、「のような」、「たとえば」、「からなる」といったような言葉の使用は、「それに限らず含む」という意味であり、反対の意味にならない限り広く解釈し、一般的な意味に解してはならない。これらの単語に続く用語についても同様である。複数のものという意味は少なくとも二つのものであることを意味し、一つのものというものはそういった複数のものとなる可能性を排除するものである。
先述の様々な態様の多くは、相互に排他的なものではなく、特有の効果を発揮するために様々な組み合わせが可能である。先述したような各特徴点のこういった、あるいは、それ以外のバリエーションやコンビネーションは請求項の範囲からみた発明から離れることなく実現できる。実施例についての記載は、請求項の範囲によって特定される本発明の範囲というよりも、例示として解釈されるべきである。
本実施例において、マルチプロセッサシステムの構造を示す図である。 本実施例において、プロセッサエレメント(PE)の構造を示す図である。 本実施例において、サブプロセッシングユニット(SPU)の構造を示す図である。 本実施例において、メモリの値のサンプルを示す模式図である。 本実施例において、レジスタの値を示す模式図である。 本実施例において、異なるSPUにタスクイメージを移動する態様を説明するための模式図である。 本実施例において、分岐ジャンプスタブ命令の処理過程を示すフローチャートである。 本実施例におけて、リターンジャンプスタブ命令の処理過程を示すフローチャートである。

Claims (37)

  1. アドレス指定可能なメモリに命令を保持するステップと、
    命令が保持されているアドレスに関連するベース値を設定するステップと、
    ターゲット命令にジャンプするための命令であって、パラメータ値を含むジャンプ命令を取得するステップと、
    命令が保持されているメモリにおけるルーチンにジャンプすることによって、前記ジャンプ命令を実行するステップと、を備え、
    前記ルーチンは、
    (a)前記パラメータ値と前記ベース値に基づいて前記ターゲット命令のアドレスを特定するステップと、
    (b)前記ターゲット命令の物理アドレスにジャンプするステップと、
    を含むことを特徴とするタスク処理方法。
  2. 前記ジャンプ命令は、条件付き命令であることを特徴とする請求項1に記載のタスク処理方法。
  3. 前記ジャンプ命令は、条件付きでない命令であることを特徴とする請求項1に記載のタスク処理方法。
  4. 前記ベース値はレジスタに保持され、1以上の命令の物理アドレス位置に応じた値であることを特徴とする請求項1から3のいずれかに記載のタスク処理方法。
  5. 命令と、その命令の実行によって生成される動的データを含むタスクイメージを取得するステップを更に備え、
    前記ベース値は、そのタスクイメージの最小物理アドレスに応じた値であることを特徴とする請求項4に記載のタスク処理方法。
  6. 命令を別のメモリ位置へ移動できるかを示すマスク値を保持するステップを更に備えることを特徴とする請求項1から5のいずれかに記載のタスク処理方法。
  7. メモリに保持されているルーチンにジャンプして前記ターゲット命令のアドレスを特定する処理の実行中においては、タスクイメージを移動させるための割込要求を抑止するステップを更に含むことを特徴とする請求項1から6のいずれかに記載のタスク処理方法。
  8. メモリに保持されているルーチンにジャンプして前記ターゲット命令のアドレスを特定する処理が終了した後に、前記割込要求に対する抑止を解除するステップを更に含むことを特徴とする請求項7に記載のタスク処理方法。
  9. 前記ターゲット命令のアドレスは前記パラメータ値と前記ベース値を加算することにより特定されることを特徴とする請求項1から8のいずれかに記載のタスク処理方法。
  10. ターゲットルーチンに対するパラメータ値付きのジャンプ命令、前記ターゲットルーチンにおけるリターン命令、前記ターゲットルーチンの実行後に続いて実行されるべき命令、を含む命令群をアドレス指定可能なメモリに保持するステップと、
    前記命令群が保持されているアドレスに関連する第1のベース値を設定するステップと、
    前記第1のベース値と前記ジャンプ命令のアドレスに基づいてリターンオフセットを特定し、前記リターンオフセットを保持し、前記パラメータ値と前記第1のベース値に基づいて前記ターゲットルーチンのアドレスを特定し、前記ターゲットルーチンのアドレスにジャンプすることにより、前記ジャンプ命令を処理するステップと、
    前記命令群が保持されているアドレスを変更し、変更後のアドレスに関連する第2のベース値を保持するステップと、
    前記命令群のアドレスが変更された後に、前記リターンオフセットと前記第2のベース値に基づいて次の命令のアドレスを特定し、そのアドレスにジャンプすることによって前記リターン命令を実行するステップと、
    を備えることを特徴とするタスク処理方法。
  11. 前記リターンオフセットは、前記ジャンプ命令のアドレスから前記第1のベース値を減算することにより、特定されることを特徴とする請求項10に記載のタスク処理方法。
  12. 前記ジャンプ命令を処理中においては、命令が保持されているアドレスの変更を抑止するステップを更に備えることを特徴とする請求項10または11に記載のタスク処理方法。
  13. アドレスの変更を抑止するために、命令のアドレス位置を変更させるための割込要求を抑止することを特徴とする請求項12に記載のタスク処理方法。
  14. 前記第1および第2のベース値とは異なる第1のデータベース値を設定するステップと、
    前記第1のデータベース値からのオフセットとしてデータを指し示すためのポインタを含む動的データを、命令の実行に応じて生成するステップと、
    前記ポインタの値を維持しつつ動的データのアドレスを変更するステップと、
    変更後のアドレスに関連する第2のデータベース値を保持するステップと、
    前記動的データのアドレスが変更された後に、前記ポインタ値と前記第2のデータベース値に基づいてデータのアドレスを特定することにより、データアクセス命令を実行するステップと、
    を更に備えることを特徴とする請求項10から13のいずれかに記載のタスク処理方法。
  15. 複数のプロセッシングユニットと、
    前記プロセッシングユニットによって実行可能な命令と、
    各プロセッシングユニットごとに対応してグローバルベース値を保持するグローバルベースアドレスレジスタと、
    命令に応じてプロセッシングユニットによりアクセスされ、命令の実行前からその値が保持される静的データと、
    命令に応じてプロセッシングユニットによってアクセスされ、命令の実行前にはその値が保持されない動的データと、
    ジャンプ先の命令の物理アドレスとは独立したパラメータ値付きのジャンプ命令と、
    アクセス対象となるデータの物理アドレスとは独立したパラメータ値を持つデータポインタと、を備え、
    前記ジャンプ命令と前記データポインタはそれぞれのパラメータ値とグローバルアドレス値に基づいてアドレスを解決され、
    それらのパラメータ値を維持しつつグローバルベース値を変更することによって、あるプロセッシングユニットから別のプロセッシングユニットに命令を移動させることを特徴とするタスク処理システム。
  16. ジャンプ先のルーチンが実行された後に戻るべきアドレスに関連する値を保持するリターンアドレスレジスタを更に備えることを特徴とする請求項15に記載のタスク処理システム。
  17. 命令のメモリアドレスが変更可能であるかを示す割込マスク値を更に備えることを特徴とする請求項15または16に記載のタスク処理システム。
  18. 命令は、サブプロセッシングユニットに一意に対応づけられたローカルメモリに保持されることを特徴とする請求項15から17のいずれかに記載のタスク処理システム。
  19. 前記動的データは、ヒープとスタック含むことを特徴とする請求項15から18のいずれかに記載のタスク処理システム。
  20. 少なくともデータアクセス命令におけるパラメータとなるポインタが保持されており、少なくともポインタのいくつかは動的データ内に保持されることを特徴とする請求項15から19のいずれかに記載のタスク処理システム。
  21. 命令の実行に応じて生成される全てのデータポインタは、アクセス対象となるデータの物理アドレスとは独立したパラメータ値であることを特徴とする請求項20に記載のタスク処理システム。
  22. 第1の命令サブセットと、前記第1の命令サブセットによって生成されたデータにアクセスする第2の命令サブセットを持つ命令群を、第1のプロセッサによってアクセス可能であって、アドレス指定可能なメモリに保持するステップと、
    前記命令群が保持されている物理アドレスに応じた第1のベース値を保持するステップと、
    ターゲットとなるべき動的データへのポインタを含む動的データを、前記第1のプロセッサが、第1の命令サブセットの実行に応じて生成するステップと、
    第1のベース値とポインタの値に基づいてターゲットデータの物理アドレスを特定することにより、前記第1のプロセッサがそのターゲットとなるべき動的データにアクセスするステップと、
    第1の命令サブセットが実行された後に、ポインタの値を維持したままで、第2のプロセッサによってアクセス可能であって、アドレス指定可能なメモリに、命令と動的データを保持させるステップと、
    第2のプロセッサが第2の命令サブセットを実行し、第2のベース値とポインタの値に基づいてターゲットとなるべき動的データにアクセスするステップと、
    備えることを特徴とするタスク処理方法。
  23. アドレス指定可能なメモリに保持された命令と、
    命令が保持されているアドレスに応じたベース値を保持するメモリと、
    ターゲット命令にジャンプするための命令であって、パラメータ値を含むジャンプ命令を保持するメモリと、
    命令が保持されているメモリにおけるルーチンにジャンプすることによって、前記ジャンプ命令を実行する手段と、を備え
    前記ルーチンは、
    (a)前記パラメータ値と前記ベース値に基づいて前記ターゲット命令のアドレスを特定するステップと、
    (b)前記ターゲット命令の物理アドレスにジャンプするステップと、
    を含むことを特徴とするタスク処理システム。
  24. 前記ベース値はレジスタに保持され、1以上の命令の物理アドレス位置に応じた値であることを特徴とする請求項23に記載のタスク処理システム。
  25. 命令と、命令の実行によって生成される動的データを含むタスクイメージを更に備え、
    前記ベース値は、そのタスクイメージの最小物理アドレスに応じた値であることを特徴とする請求項23または24に記載のタスク処理システム。
  26. 命令を別のメモリ位置へ移動できるかを示すマスク値を更に備えることを特徴とする請求項23から25のいずれかに記載のタスク処理システム。
  27. メモリに保持されているルーチンにジャンプして前記ターゲット命令のアドレスを特定する処理が終了した後に、割込要求ついてのマスク値を変更する手段を更に含むことを特徴とする請求項26に記載のタスク処理システム。
  28. ターゲットルーチンに対するパラメータ値付きのジャンプ命令、前記ターゲットルーチンにおけるリターン命令、前記ターゲットルーチンの実行後に続いて実行されるべき命令、を含み、アドレス指定可能なメモリに保持される命令群と、
    前記命令群が保持されているアドレスに関連する第1のベース値を設定する手段と、
    前記第1のベース値と前記ジャンプ命令のアドレスに基づいてリターンオフセットを特定し、前記リターンオフセットを保持し、前記パラメータ値と前記第1のベース値に基づいて前記ターゲットルーチンのアドレスを特定し、前記ターゲットルーチンのアドレスにジャンプすることにより、前記ジャンプ命令を実行する手段と、
    前記命令群が保持されているアドレスを変更し、変更後のアドレスに関連する第2のベース値を保持する手段と、を備え、
    前記命令群のアドレスが変更された後に、前記リターンオフセットと前記第2のベース値に基づいて次の命令のアドレス位置を特定し、そのアドレスにジャンプすることによって前記リターン命令を実行することを特徴とするタスク処理システム。
  29. 前記リターンオフセットは、前記ジャンプ命令のアドレスから前記第1のベース値を減算することにより特定されることを特徴とする請求項28に記載のタスク処理システム。
  30. ジャンプ命令の実行中においては前記命令群が保持されているアドレスの変更を抑止する手段を更に備えることを特徴とする請求項28または29に記載のタスク処理システム。
  31. 前記抑止する手段は、前記命令群のアドレスを変更するための割込要求を抑止する手段を含むことを特徴とする請求項30に記載のタスク処理システム。
  32. 前記第1および第2のベース値とは異なる第1のデータベース値を設定する手段と、
    前記第1のデータベース値からのオフセットとして保持されるデータポインタを含む動的データを、前記命令群の実行に応じて生成する手段と、
    前記ポインタの値を維持しつつ動的データのアドレスを変更する手段と、
    変更後のアドレスに関連する第2のデータベース値を保持する手段と、
    前記動的データのアドレスが変更された後に、前記ポインタの値と前記第2のデータベース値に基づいてデータのアドレスを特定することにより、データアクセス命令を実行する手段と、
    を更に備えることを特徴とする請求項28または29に記載のタスク処理システム。
  33. 第1プロセッサと、
    前記第1プロセッサに関連づけられた第1メモリと、
    前記第1メモリにロードされたときのタスクイメージの物理アドレスに応じた値を保持する第1ベースレジスタと、
    第2プロセッサと、
    前記第2プロセッサに関連づけられた第2メモリと、
    前記第2メモリにロードされたときのタスクイメージの物理アドレスに応じた値を保持する第2ベースレジスタと、
    パラメータ付きのジャンプ命令、パラメータ付きのデータアクセス命令、前記第1プロセッサによる命令群の実行前に生成される静的データ、前記第1プロセッサによる命令群の実行に応じて生成され、命令やデータの位置に応じたパラメータとスタックを含むヒープと、を含むタスクイメージと、
    ジャンプ命令とデータアクセス命令の実行に応じて実行されるルーチンであって、命令の実行やデータアクセスを行うプロセッサに関連づけられたレジスタの値と、ジャンプ命令やデータアクセス命令のパラメータに基づいて物理アドレスを特定するアドレス解決ルーチンと、を備え、
    前記第1メモリに保持されているタスクイメージは、割込要求に応じて、パラメータの値も含めて前記第1メモリか前記ら第2メモリにコピーされることを特徴とするタスク処理システム。
  34. 割込要求に応じて前記第1メモリから前記第2メモリへタスクイメージをコピーできるか否かを示すマスク値を保持する割込マスクレジスタを更に備え、
    割込要求は、アドレス解決ルーチンの少なくとも一部によって抑止されることを特徴とする請求項33に記載のタスク処理システム。
  35. アドレス解決ルーチンは、第1または第2プロセッサのいずれがジャンプ命令を実行しているかに応じた前記第1または第2ベースレジスタのいずれかの値と、ジャンプ命令のアドレスに基づいて、リターンオフセットを計算するための命令を更に備え、
    リターンアドレスを解決するためのルーチンは、リターン命令に応じて、ジャンプ命令のあとに実行されるべき命令の物理アドレスを特定するために実行され、第1または第2プロセッサのいずれがリターン命令を実行しているかに応じた第1または第2ベースレジスタのいずれかの値と、リターンオフセットに基づいてその物理アドレスを特定することを特徴とする請求項33または34に記載のタスク処理システム。
  36. 割込要求に応じて、前記第1メモリから前記第2メモリにタスクイメージをコピーする第3プロセッサを更に備えることを特徴とする請求項33から35のいずれかに記載のタスク処理システム。
  37. 第3プロセッサは、プロセッシングユニットであり、第1および第2プロセッサはサブプロセッサであることを特徴とする請求項36に記載のタスク処理システム。
JP2005130463A 2004-05-03 2005-04-27 タスクの移動に関するシステムおよび方法 Active JP4015159B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/838,050 US7437536B2 (en) 2004-05-03 2004-05-03 Systems and methods for task migration

Publications (2)

Publication Number Publication Date
JP2005322232A true JP2005322232A (ja) 2005-11-17
JP4015159B2 JP4015159B2 (ja) 2007-11-28

Family

ID=35240713

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005130463A Active JP4015159B2 (ja) 2004-05-03 2005-04-27 タスクの移動に関するシステムおよび方法

Country Status (4)

Country Link
US (1) US7437536B2 (ja)
EP (1) EP1620800B1 (ja)
JP (1) JP4015159B2 (ja)
WO (1) WO2005106662A1 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009075948A (ja) * 2007-09-21 2009-04-09 Mitsubishi Electric Corp マルチコアプロセッサ
KR20110083243A (ko) * 2010-01-14 2011-07-20 삼성전자주식회사 태스크 이동 시스템 및 그 방법
JP2014010661A (ja) * 2012-06-29 2014-01-20 Fujitsu Ltd 分岐アドレス管理プログラム、方法、及び装置
US11794340B2 (en) 2019-12-10 2023-10-24 Fanuc Corporation Robot controller

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7730456B2 (en) * 2004-05-19 2010-06-01 Sony Computer Entertainment Inc. Methods and apparatus for handling processing errors in a multi-processing system
US7855672B1 (en) * 2004-08-19 2010-12-21 Ixys Ch Gmbh Compressed codeset database format for remote control devices
US7788668B2 (en) * 2005-06-09 2010-08-31 Lockheed Martin Corporation System and method for implementing distributed priority inheritance
US7450131B2 (en) * 2005-09-30 2008-11-11 Intel Corporation Memory layout for re-ordering instructions using pointers
US7934063B2 (en) * 2007-03-29 2011-04-26 International Business Machines Corporation Invoking externally assisted calls from an isolated environment
JP5214537B2 (ja) * 2009-05-25 2013-06-19 株式会社東芝 マルチプロセッサシステム
KR101697937B1 (ko) * 2010-01-08 2017-02-01 삼성전자주식회사 멀티프로세서 시스템에서 동적 태스크 마이그레이션을 위한 방법 및 시스템
US20120198458A1 (en) * 2010-12-16 2012-08-02 Advanced Micro Devices, Inc. Methods and Systems for Synchronous Operation of a Processing Device
US8782645B2 (en) * 2011-05-11 2014-07-15 Advanced Micro Devices, Inc. Automatic load balancing for heterogeneous cores
US8683468B2 (en) * 2011-05-16 2014-03-25 Advanced Micro Devices, Inc. Automatic kernel migration for heterogeneous cores
US20140223062A1 (en) * 2013-02-01 2014-08-07 International Business Machines Corporation Non-authorized transaction processing in a multiprocessing environment
US9569613B2 (en) * 2014-12-23 2017-02-14 Intel Corporation Techniques for enforcing control flow integrity using binary translation
US10491524B2 (en) 2017-11-07 2019-11-26 Advanced Micro Devices, Inc. Load balancing scheme

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5189733A (en) * 1989-08-22 1993-02-23 Borland International, Inc. Application program memory management system
EP0416767A3 (en) * 1989-09-08 1992-04-29 Digital Equipment Corporation Position independent code location system
CA2045790A1 (en) 1990-06-29 1991-12-30 Richard Lee Sites Branch prediction in high-performance processor
US5539911A (en) 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
US5835743A (en) * 1994-06-30 1998-11-10 Sun Microsystems, Inc. Application binary interface and method of interfacing binary application program to digital computer
US5655132A (en) * 1994-08-08 1997-08-05 Rockwell International Corporation Register file with multi-tasking support
JP3639366B2 (ja) 1995-11-29 2005-04-20 富士通株式会社 アドレス空間共有システム
US5797014A (en) * 1995-12-14 1998-08-18 International Business Machines Corporation Method for reducing processor cycles used for global offset table address computation in a position independent shared library
JP3658072B2 (ja) 1996-02-07 2005-06-08 株式会社ルネサステクノロジ データ処理装置およびデータ処理方法
WO1999009472A1 (en) 1997-08-18 1999-02-25 Koninklijke Philips Electronics N.V. Data processing device with relative jump instruction
US6625718B1 (en) * 1998-02-05 2003-09-23 Avaya Technology Corp. Pointers that are relative to their own present locations
US6345276B1 (en) * 1998-09-18 2002-02-05 Microsoft Corporation Representing base pointers in a shared memory heap
US6324689B1 (en) * 1998-09-30 2001-11-27 Compaq Computer Corporation Mechanism for re-writing an executable having mixed code and data
EP1139222A1 (en) * 2000-03-31 2001-10-04 Texas Instruments Incorporated Prefetch for TLB cache
US6728962B1 (en) * 2000-06-28 2004-04-27 Emc Corporation Context swapping in multitasking kernel
GB0029115D0 (en) * 2000-11-29 2001-01-10 Sgs Thomson Microelectronics Assembling an object code module
US6526491B2 (en) 2001-03-22 2003-02-25 Sony Corporation Entertainment Inc. Memory protection system and method for computer architecture for broadband networks
US7086049B2 (en) * 2002-02-26 2006-08-01 International Business Machines Corporation Background code update for embedded systems

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009075948A (ja) * 2007-09-21 2009-04-09 Mitsubishi Electric Corp マルチコアプロセッサ
KR20110083243A (ko) * 2010-01-14 2011-07-20 삼성전자주식회사 태스크 이동 시스템 및 그 방법
KR101662030B1 (ko) 2010-01-14 2016-10-14 삼성전자주식회사 태스크 이동 시스템 및 그 방법
JP2014010661A (ja) * 2012-06-29 2014-01-20 Fujitsu Ltd 分岐アドレス管理プログラム、方法、及び装置
US11794340B2 (en) 2019-12-10 2023-10-24 Fanuc Corporation Robot controller
JP7409852B2 (ja) 2019-12-10 2024-01-09 ファナック株式会社 ロボット制御装置

Also Published As

Publication number Publication date
EP1620800B1 (en) 2019-03-27
US20050251667A1 (en) 2005-11-10
US7437536B2 (en) 2008-10-14
JP4015159B2 (ja) 2007-11-28
EP1620800A4 (en) 2011-09-28
WO2005106662A1 (en) 2005-11-10
EP1620800A1 (en) 2006-02-01

Similar Documents

Publication Publication Date Title
JP4015159B2 (ja) タスクの移動に関するシステムおよび方法
US8079035B2 (en) Data structure and management techniques for local user-level thread data
JP5668014B2 (ja) プロセッサにおけるタスクおよびデータ管理
JP5366552B2 (ja) 集中特化したマルチタスク及びマルチフロー処理をリアルタイム実行する手法及びシステム
US20100268862A1 (en) Reconfigurable processor and method of reconfiguring the same
TWI457759B (zh) 用於處理分頁錯誤的方法和裝置以及非暫時性的電腦可讀取媒體
JP2007122305A (ja) 仮想計算機システム
EP3128415B1 (en) Computing device, process control method, and process control program
JPH11505652A (ja) 単一アドレス空間内の保護ドメイン
JP2006259821A (ja) 並列計算機の同期方法及びプログラム
CN105051680A (zh) 使用硬件指针的simd核心中的发散分支解决方案
JP2011118743A (ja) ベクトル型計算機及びベクトル型計算機の命令制御方法
JP2006323824A (ja) プロセッサシステム内においてスタックを分離して管理する方法および装置
JP2008234490A (ja) 情報処理装置および情報処理方法
KR20130018742A (ko) 가비지 콜렉션을 위한 gpu 서포트
US20140189713A1 (en) Apparatus and method for invocation of a multi threaded accelerator
JP2006216060A (ja) データ処理方法およびデータ処理システム
CN105074657A (zh) 并行管道中的发散分支的硬件和软件解决方案
WO2016124259A1 (en) System and method for memory synchronization of a multi-core system
JP2008234491A (ja) 情報処理装置および情報処理方法
KR20230121884A (ko) 어드레스 매핑 인식 태스킹 메커니즘
JPWO2010024071A1 (ja) キャッシュメモリ、そのシステム、その利用方法及びその利用プログラム
JP5035227B2 (ja) 情報処理装置、プログラムの起動制御方法、及び起動制御プログラム
US7617380B2 (en) System and method for synchronizing translation lookaside buffer access in a multithread processor
WO2005106647A1 (en) Methods and apparatus for indexed register access

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070626

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070821

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20070911

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070912

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100921

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4015159

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100921

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110921

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120921

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130921

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250