JP3790681B2 - 並列ソフトウェア処理システム - Google Patents

並列ソフトウェア処理システム Download PDF

Info

Publication number
JP3790681B2
JP3790681B2 JP2001185088A JP2001185088A JP3790681B2 JP 3790681 B2 JP3790681 B2 JP 3790681B2 JP 2001185088 A JP2001185088 A JP 2001185088A JP 2001185088 A JP2001185088 A JP 2001185088A JP 3790681 B2 JP3790681 B2 JP 3790681B2
Authority
JP
Japan
Prior art keywords
thread
space
program
plane
memory
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.)
Expired - Fee Related
Application number
JP2001185088A
Other languages
English (en)
Other versions
JP2002073357A (ja
Inventor
ハリー・ジェイ・ビーティー・サード
ピーター・シー・エルメンドルフ
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2002073357A publication Critical patent/JP2002073357A/ja
Application granted granted Critical
Publication of JP3790681B2 publication Critical patent/JP3790681B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Multi Processors (AREA)
  • Memory System (AREA)

Description

【0001】
【発明の属する技術分野】
本発明はコンピュータ処理に関し、詳細には並列のコンピュータ・プログラミングまたは処理に関する。
【0002】
【従来の技術】
関連出願
本出願は、共に本出願の発明者により本願と同日に出願された「High Performance Nonblocking Parallel Storage Manager For Parallel Software」という名称の米国特許出願第09/597,525号(整理番号FIS990318US)および「Method Of Using A Distinct Flow Of Computational Control As A Reusable Data Object」という名称の米国特許出願第09/597,524号(整理番号FIS990319US)に記載され特許請求される主題に関連する。
【0003】
分離した非並列処理を使用する従来技術のコンピューティングでは、プログラムはデータおよび他のサービスをしばしば共用する。図1に示すその一例では、別々のプロセス・メモリ19aおよび19bは異なるメモリ記憶装置に物理的に分離されているか、または同一のメモリ記憶装置内で論理的に分離されており、プロセス全体から見ることのできるデータ項目用のグローバル変数メモリ20aおよび20bと、データ構造用のヒープ・メモリ21aおよび21bと、関数引き数およびローカル・データ項目用のスタック・メモリ23aおよび23bと、必要に応じてヒープ・メモリ・スペースまたはスタック・メモリ・スペースとして利用できるフリー・メモリ・スペース22aおよび22bとを含む。フリー・メモリ・スペースの一部分は、それぞれ別々のプロセス・メモリ19aおよび19b内で動作するプログラムA(24a)およびプログラムB(24b)がともに使用できる共通メモリ22cとして指定することができる。各プログラムAおよびプログラムBは、プロセス・メモリ内で、共通区域22c内で指定されたものだけにアクセスすることができ、プログラム間の他のメモリにはアクセスすることができない。図1のシステムを利用するプログラマは、共通メモリ内のデータ構造へのアクセスが制限されている場合、システムからの支援を比較的わずかしか受けられない。
【0004】
並列処理は、単一のプログラムが、異なるスレッド、すなわちプログラムによって管理される独立した制御の流れを同時に実行できるという点で改良を提供する。複数のスレッドが並列に実行でき、それらのスレッドは疎結合方式あるいは密結合方式で情報を共用することができる。図2に示す並列処理構成の例では、共通グローバル・メモリ120および共通ヒープ・スペース121を有する単一のプロセス・メモリ119が、複数のスタック・スペース123aおよび123bを含み、単一のプログラム124が1つのプログラム・スレッドにつき1つのスタックを用いて複数のスレッドを操作する。図のプロセス・メモリ構造は示すようにスレッド1〜Nをいくつでも操作することができ、それに対応するスタック1〜Nをいくつでも含むことができる。
【0005】
スレッド間の調整されたデータ・アクセスでは、通常、セマフォーやロックなどオペレーティング・システムの支援(ペナルティを伴う)が必要である。しかし典型的な並列処理アプリケーションでは、記憶管理やメモリへのアクセスの調整などのシステム・サービスを使用することによって生じる直列化(serialization)により、しばしば、並列アルゴリズムで達成可能な性能上の利益が大幅に減じてしまう。直列化は、複数のスレッドが、データ・オブジェクトまたは他のシステム資源にアクセスするかあるいはそれを要求する際に発生する。このような競合が発生した場合、1つのスレッドのみがアクセス権を有し、他のすべてのスレッドは第1のスレッドがシステム資源の使用を終えるまでアクセスを拒否される。例えば、図2の構造は、異なるスレッドが同時に同一のデータ構造へのアクセスを試みるとき、プログラムによって操作されている情報を含むヒープ・スペースで衝突が生じる可能性があるので、エラーを起こしやすい。衝突が発生すると、1つまたは複数のスレッドはデータ構造が別のプログラム・スレッドによってアクセスされている間待機しなければならない。
【0006】
現在の慣行では、並列ソフトウェアでのメモリ管理も、複雑さと非効率性が主な欠点となっている領域である。メモリを割り振りあるいは解放するために呼び出しが行われる際に、並列実行の利益が無になり、あるいは順次実行の方が高速になるほどに低下することがある。これは、2つ以上の制御の流れすなわちスレッドが、メモリ領域を獲得しようとあるいは解放しようと試みる際の衝突を防止するために用いなければならない、現在の直列化技術によるものである。これにより並列プログラムの性能が大幅に低下し、プログラム設計および実装における不自然な動作が余儀なくされる。これらの歪みは保守容易性および拡張性を損ない、エラーの原因になる。さらに悪いことにこれらの問題に関するコストのために、開発者は他の点では実現可能な並列の解決策を検討することすら思いとどまりかねない。
【0007】
上記のような並列プログラミングでは、各スレッドに実行すべき作業の特定の単位が一般には並列に割り当てられ、その仕事が終了するとスレッドは存在しなくなる。スレッドを作成し、終了させ、管理するためにはコストがかかる。このコストにはマシン・サイクルの成分とプログラミングの複雑さの成分がある。プログラミングの複雑さの成分は、ソフトウェアを実装し設計する際のエラーの原因になる。スレッドを使用する際の有力なパラダイムは、スレッドとデータを別に扱うというものである。制御フロー(スレッド)がありデータがある。その結果生じる二分化(dichotomy)は、想定される解決策の種類を制限する傾向のある環境と複雑さを生み、その結果実装中にエラーが生じやすくなる。
【0008】
【発明が解決しようとする課題】
したがって、従来技術の課題および欠陥を念頭に置くと、本発明の一目的はエラーが生じにくい並列処理構造を提供することである。
【0009】
本発明の他の目的は、データ構造など共通システム・サービスにアクセスする際に直列化による制限を受けにくい並列処理構造を提供することである。
【0010】
本発明の他の目的は、メモリを割り振りまたは解放する際に直列化による制限を受けにくい並列処理構造を提供することである。
【0011】
本発明の他の目的は、異なるスレッド間の相互作用が少ない並列処理構造を提供することである。
【0012】
本発明の他の目的は、スレッドを作成し管理し終了する際のコストおよびエラーを低減する並列処理構造を提供することである。
【0013】
本発明のその他の目的および利点は、一部は自明であり一部は本明細書から明らかになるであろう。
【0014】
【課題を解決するための手段】
当分野の技術者には明らかである上記および他の目的および利点は、本発明によって達成される。本発明は、第1の態様では、プレーンを備える第1の階層レベルを有する、並列コンピューティング用のコンピュータ・メモリ構造を対象とする。プレーンは、プログラム構造によって管理される独立した制御の流れを表すスレッドと、データ構造用のヒープ部分と、関数引き数のためのスタック部分と、ローカル変数と、プログラム構造のいずれの部分からもアクセスできるグローバル・データとを含む。メモリ構造はさらに、スペースを備える第2の階層レベルを有する。このスペースは2つ以上のプレーンを含み、スペース中の各プレーンはプログラム構造を含んでいる。スペースはさらに、各プレーンの間にプログラム構造からアクセス可能な共通データを含む。
【0015】
メモリ構造はさらに、2つ以上のスペースを備えた第3の階層レベルを有することが好ましい。このスペースは、同一のまたは異なるプログラム構造と、各スペースの間にプログラム構造からアクセスできる共通データを含んでいる。プログラム構造はプログラムのライブラリを備え、さらに各スペース用の関数テーブルを含み、この関数テーブルは各スペース中のライブラリとサービスを交換するように適合されている。
【0016】
関連する態様では、本発明は、媒体中で実施されるコンピュータ可読コードを有するコンピュータ使用可能媒体を備える、並列コンピューティング用のコンピュータ・プログラム製品を提供する。コンピュータ・コードは、コンピュータ・メモリ構造を定義し、上記の第1の階層レベルおよび第2の階層レベルを含み、好ましくは第3の階層レベルも含む。
【0017】
本発明の関連する別の態様は、並列処理方法を提供する。この方法では、まず上記の第1の階層レベルおよび第2の階層レベルを有するコンピュータ・メモリ構造が提供される。この方法は次いで、スペース内の第1プレーン中のプログラム構造によって管理される第1スレッドを使用すること、第1プレーン中のデータおよび各プレーン間の共通データにアクセスすること、スペース内の第2プレーン中のプログラム構造によって管理される第2スレッドを使用すること、ならびに第2プレーン中のデータおよび各プレーン間の共通データにアクセスすることを含む。第1スレッドと第2スレッドは、プログラム構造によって明示的に要求されるとき以外は互いの相互作用を回避する。
【0018】
このプログラム構造はプログラムのライブラリを備え、さらにスペース用の関数テーブルを提供し、この関数テーブルはスペース中のライブラリとサービスを交換するように適合されている。この方法は、第1スレッドおよび第2スレッドを使用して関数テーブルに関数呼び出しを行い、各プレーン間の共通データおよびスペース内の共通データにアクセスすることを含む。2つ以上のスペースを備えた第3の階層レベルがさらに提供され、そのスペースが同一のまたは異なるプログラム構造と、各スペースの間のプログラム構造からアクセス可能な共通データを含むことが好ましい。次いでこの方法は、第1スレッドおよび第2スレッドにより各スペースの間の共通データにアクセスすることを含む。
【0019】
関連する別の態様は、上記の第1、第2の階層レベルおよび好ましくは第3の階層レベルを有するコンピュータ・メモリ構造を使用して、上記の並列処理の方法ステップを実行するためのマシン実行可能な命令のプログラムを有形に実施する、マシン可読のプログラム記憶装置を提供する。
【0020】
別の態様では、本発明は並列処理コンピューティング・システムにおいてメモリを割り振る方法を提供する。この方法では、まず並列処理および第1スレッド、第2スレッドに使用可能なシステム・メモリが提供される。各スレッドは、プログラム構造によって管理される独立した制御の流れを表し、異なるプログラム・タスクを実行する。この方法は、第1スレッドを使用してシステム・メモリからメモリを要求すること、第1スレッドに要求を超える第1のメモリ・プールを割り振り、そのメモリ・プールを第2スレッドと関連付けること、第2スレッドを使用してシステム・メモリからメモリを要求すること、第2スレッドに要求を超える第2のメモリ・プールを割り振り、そのメモリ・プールを第1スレッドと関連付けること、第1スレッドを使用して第2スレッドからさらにメモリを要求すること、ならびにシステム・メモリに要求を行わずに、第2スレッドからの第2メモリ・プールの一部分を第1スレッドに割り振ることを含む。
【0021】
第1メモリ・プールおよび第2メモリ・プールがそれぞれ、システム・メモリが第1スレッドおよび第2スレッドのためにマークしたメモリ部分を含むことが好ましい。この方法は次いで、第1スレッドのためにマークされた第1メモリ・プールの部分を第2スレッドによって解放し、第2スレッドのためにマークされた第2メモリ・プールの部分を第1スレッドに割り振ることを含む。第1スレッドのためにマークされた第2メモリ・プールの部分は、そのようなメモリの所定最小限量が第2スレッドによって解放されるまでは第1スレッドに割り振ることができず、第1スレッドのためにマークされた第2メモリ・プールの部分は、第1スレッドが第2スレッドからさらにメモリを要求するまで第1スレッドに割り振ることができない。第1メモリ・プールおよび第2メモリ・プールがそれぞれ、システム・メモリによって第1スレッドおよび第2スレッドのためにマークされたメモリ部分を含むことが好ましい。この方法は次いで、第1スレッドのために所定時間マークされる第2メモリ・プールの部分を第2スレッドによって解放し、所定時間の経過後に第1スレッドがメモリを要求しない場合は、第1スレッドのためにマークされた第2メモリ・プールの部分を第2スレッドのために再利用する(reclaim)ことを含む。
【0022】
関連する態様では、本発明は、並列処理コンピューティング・システムにおいてメモリを割り振る上記の方法ステップを実行するためのマシン実行可能な命令プログラムを有形に実施する、マシン可読のプログラム記憶装置を提供する。
【0023】
関連する別の態様は、並列処理コンピューティング・システムで使用するためのメモリ構造を提供する。このメモリ構造は、並列処理で使用可能なシステム・メモリと、プログラム構造によって管理される制御の流れを表す第1スレッドの使用のために指定され第1スレッドが使用できる第1のメモリ・プールと、第2スレッドの使用のために指定され第2スレッドが使用できる第2のメモリ・プールとを備える。第2スレッドは、第1スレッドとは無関係にプログラム構造によって管理される制御の流れを表し、第1メモリ・プールおよび第2メモリ・プールはそれぞれ、もう一方のスレッドのためにマークされたメモリ・プールの部分を有する。第1メモリ・プールおよび第2メモリ・プールがそれぞれ、システム・メモリによって第1スレッドおよび第2スレッドのためにマークされたメモリ部分を含むことが好ましい。
【0024】
関連する別の態様は、媒体中で実施されるコンピュータ可読コードを有するコンピュータ使用可能媒体を備える、並列コンピューティング用のコンピュータ・プログラム製品を提供し、そのコンピュータ・コードは上記のコンピュータ・メモリ構造を定義する。
【0025】
本発明の別の態様は、並列処理の方法を提供する。この方法では、まずプログラム構造によって管理される独立した制御の流れを表す第1スレッドが提供され、この第1スレッドは、プログラム構造のために作業を処理する第1の状態と、ディスパッチされず処理すべき作業を待っている第2の状態の2つの状態を有する。また第1スレッドとは別にプログラム構造によって管理される独立した制御の流れを表す第2スレッドが提供される。この方法は、第2スレッドを使用して、第1スレッドが処理すべき作業を準備すること、および第2スレッドが準備した作業を、第1スレッドによる処理のためにキューに入れることを含む。この方法は、第2スレッドが準備した作業がキューに入れられたとき、第1スレッドが処理すべき作業を待っている場合に、第1スレッドをディスパッチし、それを使用してキュー内の作業を処理することを含む。この方法は、第2スレッドが準備した作業がキューに入れられたときに第1スレッドが他の作業を処理中である場合に、第1スレッドを使用して他の作業の処理を完了し、キュー内の作業にアクセスし、キュー内のその作業を処理することを含む。
【0026】
第2スレッドは追加の作業をキューに入れ続けることができ、第1スレッドは前の作業の処理を完了し次第、キュー内の追加の作業を順次処理する。第2スレッドが、第1スレッドのキューに入れられた作業を未完了とマークすることが好ましい。この方法は、第2スレッドが準備した作業がキューに入れられたとき、第1スレッドが他の作業を処理中である場合に、第1スレッドがキュー内の作業の処理を完了したとき、第1スレッドを使用して完了した作業を完了とマークすることを含む。第2スレッドからの後続の作業は、第1スレッドにおける前の作業が完了とマークされるまで待たされる。第1スレッドを再使用して他の作業を処理してもよく、プログラム構造は、第1スレッドが所望量の作業を完了した後にそれを破棄することができる。
【0027】
関連する態様は、i)プログラム構造によって管理される独立した制御の流れを表す第1のスレッドであって、プログラム構造のために作業を処理する第1の状態と、ディスパッチされず処理すべき作業を待っている第2の状態との2つの状態を有する第1スレッドと、ii)第1スレッドとは別にプログラム構造によって管理される独立した制御の流れを表す第2スレッドとを使用して、並列処理の上記の方法ステップを実行するためのマシン実行可能な命令プログラムを有形に実施する、マシン可読のプログラム記憶装置を提供する。
【0028】
【発明の実施の形態】
並列ソフトウェア処理システム
並列処理中にシステム・サービスにアクセスする際の直列化による制限の問題を克服するために、本発明は、プログラマの権限からこれらの問題を暗示的に取り除き並列アプリケーションの大幅な改善をもたらすプログラミング手法を、高級言語の構文で定式化する。本発明は、プログラマをより高性能の解決策に自然に導くのに必要な構造を提供する。詳細には本発明は、様々な態様において、各並列スレッドのデータ・スペースを自然に分離する座標系システムと、スレッドとデータ・スペースを関連付ける方法と、この分離を記述し管理するための高級言語を提供する。以下でさらに述べる構造を組み込んだ本発明のシステムは、その他の点では従来型の、コンピュータ・プログラム記憶装置または半導体チップ、ROMなどのメモリ記憶装置、あるいはディスケットやコンピュータ・ハード・ドライブなどの磁気媒体に記憶することができる。
【0029】
本発明によって作り出される構造では、各スレッドが、それ自体のデータ・スペースすなわち単一のスレッドと関連付けられたメモリ区域を有し、このスペースは、共通であると明示的に宣言された部分を除き他のすべてのデータ・スペースから分離されている。本発明を使用すると、データ・スペースの最小限の明確な相互作用で並列アルゴリズムを設計し実装することが自然に可能になり、それによって、プログラマが並列性の管理に関する専門家でなくとも低コストで高性能の並列性が提供される。
【0030】
本発明の並列構造は、各スレッドごとに1つずつ異なるスタックを提供し、スタックごとに異なる別々のグローバル・メモリ、ヒープ・スペースおよびフリー・ゾーンを有するという外観および機能を提供する。図3に、本明細書中で「プレーン」と呼ぶ、本発明の並列メモリ構造の第1の階層レベルと、2つ以上のプレーンの「スペース」へのグループ化を示す。メモリは別々のプレーン225aおよび225bに再分割される。プレーン225aおよび225bは異なるプレーン・メモリ領域219aおよび219bを有する。プログラム構造224からの1つのスレッドは各プレーンのスタック上で稼動し、複数のスレッド1〜Nは複数のスタック1〜N上でそれぞれ稼動することができる。スレッドは並列コンピューティング・システムで同時に実行されるが、任意の所与の瞬間にプレーン・メモリにアクセスするスレッドはせいぜい1つである。プレーン・メモリ219aおよび219bは、それぞれグローバル・メモリ220aおよび220bと、ヒープ・スペース221aおよび221bと、フリー・スペース222aおよび222bを含み、これらはそれぞれプレーン225a、225bごとに編成され提供される。このとき各プレーンは、スレッド、グローバル・メモリ、ヒープ・メモリ、およびスタック・メモリによって定義されるコンテキストからなる。任意の特定時間にあるコンテキストを使用するのは1つのスレッドだけである。明示的に定義された共通(プレーン)領域222cもあり、これは他の点では分離しているプレーン・メモリ219aおよび219bによって共用される。したがってプログラマから見ると、プレーン・メモリ構造は、図1に示すように別々のプログラムを実行しているという外観および機能を有するが、実際には、共通(プレーン)メモリ222c内のデータ構造がすべて使用可能であり、ヒープ221aおよび221b内の選択されたデータ構造が異なるプレーンにわたってスタック223aおよび223b内の各スレッドにとって使用可能なので、このプレーン・メモリ構造は並列スレッドとして動作する。
【0031】
すべてが単一のプログラム構造の異なるスレッドを並列に実行している、メモリ構造中の複数のプレーンのグループを本明細書中では「スペース」と呼ぶ。プログラムの集まりが、こうしたスペース内で一貫した単一のプログラム構造を作る。スペース230は、本発明の並列処理システムの第2の階層レベルを表す。図4には複数のスペース230、230'、230"が示されており、各スペースは1つまたは複数のプレーン・メモリ構造を含んでいる。各スペースは互いに他のプログラムとは無関係に稼動する、異なるプログラム224、224'、224"を含む。フリー・メモリは、共通(プレーン)メモリの場合と類似の形で、異なるスペース間の共通(スペース)として指定することができる。異なるスペース230、230'、230"間で指定された共通(スペース)メモリを222dで表す。これらの複数のスペースは、本発明の第3の階層レベルを表す。
【0032】
明示的には共通にされないグローバル・メモリ・オブジェクトまたはヒープ・メモリ・オブジェクトは、特定の言語エレメントによって表される。このようなオブジェクトは、すべてのプレーンで同一の言語エレメントによって表されるが、各プレーン内では分離したメモリによってバックアップ(back)される。したがって言語エレメントはスレッドごとに自動的にインスタンス化される。これによりプログラマは、そのようなメモリ・オブジェクトを管理し分離するという厄介な仕事から解放される。本発明のメモリ構成はまた、プレーンとスペースの間で情報を共用するための規律ある手段も提供し、プログラマは規律を提供するという重荷から解放される。
【0033】
図5に示すように、指定スペース中の各プレーンは、コンテキスト(スレッド、ヒープ、スタック、グローバル・データ)および同一のプログラム構造からなり、このプログラム構造は同一の実行可能プログラム・コードを使用する。この同一のプログラム構造が、スペース内の各プレーンに使用される。異なるスペース間では、プログラム構造は同じでも異なってもよい。本明細書では、「コンテキスト」は、各グローバル変数に各スレッドが容易にアクセスできるようにグローバル変数の分離を行う、索引付け構造を指す。本発明のメモリ構造を使用するプログラマは、所望の特定のコンテキストを作成し、そのコンテキストを使用して、共通(プレーン)メモリまたは共通(スペース)メモリの外部にあるその特定のコンテキスト内で動作するプログラムを呼び出す。
【0034】
具体的には、コンテキスト索引付け構造は、各グローバル変数の整数識別を、メモリ・アドレスなど一意の識別にリンクする。例えば図6に示すように、プレーン1内にはグローバル変数G1、G2、G3があり、プレーン2内には別のグローバル変数G1、G2がある。G4(プレーン1、コンテキスト1)、G3'(プレーン2、コンテキスト2)、およびG5(プレーン1、コンテキスト1)、G4'(プレーン2、コンテキスト2)で示したグローバル・データ変数は、スペース内部の共通(プレーン)内にあるように指定される。第1プレーンのコンテキスト1および第2プレーンのコンテキスト2はそれぞれ、索引付け方式を使用して、グローバル変数のそれ自体の整数IDをグローバル変数の一意のIDに変換することができる。図に示すように共通(プレーン)内のG4とG3'、G5とG4'は同じオブジェクトである。
【0035】
図7は、各スペースが共通(スペース)メモリによってリンクされ、それぞれ複数のプレーンおよび共通プログラムを有する、複数のスペースを示す。スペース1はプレーン1およびプレーン2を有し、各プレーンがプログラム1を使用する。スペース2はそれとは異なるプレーン1およびプレーン2を有し、各プレーンが異なるプログラム2を使用する。共通(スペース)メモリは、スペース1およびスペース2それぞれに使用可能である。図8は、図6に類似の形で、各スペースのコンテキストが、異なる索引IDを使用して、共通(スペース)グローバル・データ・オブジェクトG6にどのようにアクセスするかを示している。例えば言語エレメントは、コンテキストが共通(プレーン)または共通(スペース)中のグローバル変数にアクセスできるように、定義または構文を提供することができる。共通(スペース)メモリは、本発明のメモリ構造の異なるスペース中の異なるプログラムが共用できる情報を含むことができる。したがってデータは、特定のプレーンだけからアクセス可能なデフォルト・グローバル・データ・メモリ、スペース内の異なるプレーンにわたってコンテキストからアクセス可能な共通(プレーン)メモリ、あるいは異なるスペースにわたってコンテキストからアクセス可能な共通(スペース)メモリに記憶することができる。図に示すように共通(スペース)内のG6、G5'、G8"、G7'''は同じオブジェクトである。
【0036】
IEEE標準1481−1999に従って作成された交換可能な関数テーブルを、本発明のメモリ構造中でスペースごとに1つずつ作成することが好ましい。関数テーブルを下記の表1および表2に示すが、この関数テーブル中で、特定スペース内で使用される選択された関数名(FCN名)に対する関数ポインタ(FCNポインタ)が確立される。
【表1】
表1
FCNポインタ FCN名
* FCN1
* FCN2
* FCN3
【表2】
表2
FCNポインタ FCN名
* FCN4
* FCN5
* FCN6
【0037】
アプリケーション・プログラムは各スペースにプログラムをロードすることができる。アプリケーション・プログラムおよびロードされたプログラムはそれぞれ関数テーブル交換を実行する。関数テーブル交換は、アプリケーションと特定スペースにロードされたプログラムの間でのサービスの交換を表す。すべての関数呼び出しは、要求されたデータを共通(プレーン)メモリまたは共通(スペース)メモリ内で見つけるためのコンテキスト引き数を有する。コンテキストは索引付け構造がどこに位置するのかを伝える。アプリケーション・プログラムまたはロードされたプログラムによる関数呼び出しは、デフォルト位置と見なされるプレーン内のデータ、または共通(プレーン)もしくは共通(スペース)メモリ位置にあるデータを見つけ出すためのコンテキスト識別を含む。
【0038】
DCL(遅延カルキュレータ言語)は、多くのASIC(特定用途向け集積回路)ベンダーがその技術を記述するために使用している言語である。このDCLのライブラリは、アプリケーションによって動的にロードされる実行可能モジュールである。アプリケーション・ベンダーもASICベンダーも明確なある標準に従っている。DCLおよびこのインタフェース定義はどちらも、本発明による並列処理システムを確立するのに使用することができる。DCLシステム(実行時環境、コンパイラ、およびコンパイルされたそのモジュールからなる)は、せいぜい1つのスレッドしか各コンテキストで実行されないコンテキスト・システムを実装する。コンテキストはアプリケーションまたはライブラリの要求に応じて作成される。新しいコンテキストに対する要求に応答して、DCL実行時環境は各状態変数の別個のコピーを生成する。状態変数としては、ASSIGNステートメント、テーブル、モジュール構造によって生成される変数が含まれる。各状態は状態変数の配列によって表され、その中で各コンテキストがそれ自体の状態変数を有する。システムは新しい各コンテキストごとに、状態変数が既知の値にプリセットされるように、そのコンテキストに対する初期化ステートメントを実行する。
【0039】
DCLの基本動作は、現在のコンテキスト変数(標準構造)がすべてのステートメントに渡されることを必要とする。コンテキスト変数は、制御フロー、データ・スペース、実行が行われるプレーンの完全な記述を提供する。実行時サポート機能は、アプリケーション要求およびDCLプログラムの並列実行をサポートするのに必要とされる適切なメモリ・オブジェクトをトランスペアレントに選択する。DCLを使用すると、ASSIGNステートメントを使ってグローバル変数を生成することができる。これによりコンパイル時にグローバル変数をステートメントのタイプ(ASSIGN)によって識別することができ、グローバル変数に対する更新を単一の関数を通じて集中させることができる。
【0040】
本発明では、各配列エレメントがあるコンテキストと関連付けられるASSIGN変数の結果の配列など、ASSIGNの結果をコンテキストによって分離する。これにより直列化を起こさずにASSIGN変数値を並列に読み取り、書き込むことが可能になる。DCLのTABLEDEFステートメントは情報のテーブルを読み込み、検索する。本発明はこのテーブルを上記のコンテキスト・システムによって分離し、これにより直列化することなくこのテーブルを真の並列方式で読み込み、検索し更新することが可能になる。
【0041】
DCLにより、アプリケーションがサブルールと呼ばれる追加モジュールを既存のシステムに付加することが可能になるが、本発明ではまたあるスペースに付加されたサブルールを別のスペースに付加されたサブルールから分離する。これにより、ロードされる多様なライブラリの独立したビューをアプリケーションが維持することが可能になる。本発明はまた、ライブラリ開発者の要求に応じて同じ状態変数が複数のコンテキストに存在できるようにする構成と、その時点で直列化を強制するための構成も提供する。コンテキストは通常、ライブラリ開発者から明示的に要求される場合以外は、状態変数の独立性を想定している。これにより並列アルゴリズムの開発が非常に容易になり、共通性の必要なポイントだけを調べればよくなる。
【0042】
動作に際して、本発明はあるコンテキストに対するスレッドに関連するすべてのアクティビティを自然に分離することにより利益を達成する。異なるスレッドは異なるコンテキストで動作し、したがって明示的に要求されるとき以外は互いに相互作用しない。これによって並列処理に特有の直列化による制限が取り除かれ、したがって本発明は思考プロセスならびに実際の実装を単純化する。
【0043】
高性能非ブロッキング並列記憶マネジャ
本発明はさらに、スレッド・コンテキストを用いて、並列環境で使用するためのブロッキングのない効率的な記憶管理を提供する。記憶マネジャは使用可能メモリの別々のプールをコンテキストごとに維持し、当該のコンテキストにはそれらのプールのみからのメモリを割り振る。多数のスレッド(上記のようにコンテキストごとに1つのスレッド)がメモリを獲得または解放するために記憶マネジャに同時にアクセスすることができるが、そのほとんどの時間実行はブロックされない。従来技術の慣行では、複数のスレッドが同時にメモリ・エリアの割り振りまたは解放を要求するたびに実行がブロックされるのに対して、本発明では複数のコンテキストが同時にそのメモリ・プールを使い果たし、メモリを割り振るシステム・サービスの呼び出しを行わなければならないときにのみ実行がブロックされる。本発明が、システムからいくつかの大きなメモリ・エリアを獲得し、スレッドの必要に応じてそのメモリ・エリアを分割することが好ましい。スレッドのブロッキングは、そのスレッドのためにいくつかの大きなエリアを得ようと試みている間に別のスレッドもそれ自体の大きなエリアをシステムから得ようとする場合にしか起こらないので、本発明の性能は概して従来方法の性能をはるかに上回る。システムに別の大きな部分を割り振らせるための1つのスレッドの呼び出しによってブロックされる場合も、このシステムではその関連するメモリ・プールの中にメモリ・エリアがある限り、他のスレッドからのメモリ要求を依然処理することができる。通常の状況において並列アプリケーションは実行の部分的ブロッキングしか受けず、それもめったに起こらない可能性が高い。
【0044】
メモリ・エリアの解放に関する問題には2つの側面がある。コンテキストがそれが割り振ったメモリ・エリアだけを解放する場合、解放動作は、そのエリアを必要とするスレッドあるいは他のどのスレッドもブロックせずに進行する。あるコンテキストによって割り振られたメモリ・エリアを別のコンテキストが解放する際に生じる直列化を最小限に抑えるために、「据え置き解放(deferred free)」のリストが作成される。コンテキストがそれが割り振っていないメモリ・エリアを解放するとき、本発明ではそのエリアを「据え置きリスト」に入れる。各コンテキストは据え置きリストのセットを有し、据え置きリストの各セットは他のあらゆるコンテキストに対する据え置きリストを有する。次いでメモリ・エリアは、そのエリアを解放しているコンテキストとそのエリアが一時的に解放される先の他のコンテキストとを識別する据え置きリストに入れられ、実行はブロッキングを起こさずに続行する。これらのリストは、アプリケーション・プログラムが設定できる基準(metric)を超えるまで増大する。基準を超えると他の各コンテキストに対する据え置きリストは、現在それを持つ他の受け取りコンテキストに非ブロッキング方式で転送される。各メモリ・エリアの中にはマークがあり、そのマークはどのコンテキストがそのエリアの割り振りをしたのかを示す。転送が完了すると、転送側のコンテキストはブロッキングを起こさずに受け取り側のコンテキストの既知のスポットにフラグをセットする。
【0045】
コンテキストが、システムにスペースを要求する前にメモリ・エリアを割り振らなければならないとき、そのコンテキストは他のコンテキストからいずれかの据え置き解放を受け取ったかどうかチェックする。受け取っている場合、コンテキストはそのメモリ・エリアを再利用し、システム・サービスを呼び出す代わりにメモリ・エリアからの要求を満たそうと試みる。これによりブロッキングがさらに取り除かれる。
【0046】
コンテキストを受け取ることによる据え置きブロックの再利用は非ブロッキング方式で行われ、ブロッキングを回避するために非同期にすることができる。制御データ構造のレイアウトおよび動作の順序は、処理中に追加されたいくつかの再利用が欠落する可能性があるものの、非同期環境で再利用が成功することを可能にする。欠落したこれらの再利用は失われずに次の再利用期間に回復される。
【0047】
図9に示すように、並列処理で動作する第1スレッドのコンテキスト1は、システム・ヒープ・メモリ300からの最初の要求によりフリー・メモリ310の一部分またはプールを獲得し、その特定のコンテキストのヒープとして機能するメモリ・ブロック310a、310b、310c、310dを備える。複数のコンテキスト1〜Nのうち任意数のコンテキストはそれ自体の分離したメモリ・プールを獲得することができ、スレッドNのコンテキストNはメモリ・ブロック320a、320b、320c、320dとともにそれ自体のメモリ・プール320を獲得する。プール310、320内の各ブロックは、メモリを割り振る前に所定のコンテキスト識別子で事前にマークされる。各メモリ・プール310、320は、システム・ヒープ300に対して最初に行われる要求で必要とされるよりも多くのメモリ・ブロックを有する。図10は未使用メモリ・ブロックの再利用をより詳細に示している。
【0048】
第1の状況では、不必要なメモリ・ブロックを特定のコンテキストが解放し、そのメモリ・ブロックがその同一コンテキストに割り振られたと事前識別されている場合、メモリ・ブロックはその特定のコンテキストが使用できる状態にあるものと単純に識別される。第2の状況では、不必要なメモリ・ブロックを特定のコンテキストが解放し、そのメモリ・ブロックが別の異なるコンテキストから割り振られたと事前識別されている場合、そのメモリ・ブロックは、他の異なるコンテキストに対応する、再利用リスト中の特定コンテキストの同一のメモリ・プールに集められる。図10は、コンテキスト1のメモリ・プール310が不必要なメモリ・ブロック310e〜hを解放する状況を示している。これらのメモリ・ブロック310e〜hは以前にコンテキスト2の識別によってマークされたので、ブロック310e〜hは、コンテキスト2に対応するコンテキスト1再利用リスト312aに残る。再利用リスト312aのブロックのサイズまたは内容がアプリケーション指定の基準を超えると、コンテキスト1はスイッチ314を314bから314aにセットし、コンテキストが再利用リスト312a中のメモリを再利用できることを示す。コンテキスト1はスイッチ313を313bにセットする。したがってコンテキスト2に属するものとしてマークされた後続のフリー・メモリ・ブロックは、コンテキスト2がリスト312a中のメモリを再利用するまで再利用リスト312bに入れられる。コンテキスト2はヒープ・メモリ320を使い果たすと、システム・メモリから入手可能なメモリを探す代わりに、再利用リストが使用可能になっているかを調べ、使用可能なメモリ・ブロック310e〜hを突き止め、次いでそれらを解放しそれ自体のヒープ・メモリ・プール320に組み込む。コンテキスト2は次いでスイッチ314を314bにセットし、コンテキスト2が再利用リストを処理し終わり、現在は別の再利用リストを処理できる状態であることを示す。同様にコンテキスト1がそれ自体のメモリ・プールで使用可能なメモリよりも多くのメモリを要求する際は、コンテキスト2など他のコンテキストによって生成された再利用リストからメモリを探し、使用可能メモリ320e〜hを突き止め、それらを解放しメモリ・プール310に組み込むが、このすべての動作の際にメイン・システム・メモリからメモリを探す必要がない。再利用リスト312bがアプリケーション指定の基準を超えると同様の動作が行われ、コンテキスト1はスイッチ314を314bから314cにセットしてコンテキスト2がリスト312bのメモリを再利用できることを示し、コンテキスト1はスイッチ313を313aにセットして、コンテキスト2が312bのメモリを再利用するまで、コンテキスト2に属するものとしてマークされた後続のフリー・メモリ・ブロックがリスト312a中に置かれるようにする。コンテキスト2が再利用リスト312b中のメモリを再利用するとき、コンテキスト2はスイッチ314を314bにセットして、それがリストの処理をし終わり現在は別の再利用リストを処理できることを示す。本発明は、コンテキストの組ごとに任意数の再利用リストを可能にする。
【0049】
別のコンテキストにマークされた、1つのコンテキストからの使用可能なメモリ・ブロックは、もう一方のコンテキストが追加のメモリ・ブロックを探すまで、実際にはもう一方のコンテキストによって解放されず再利用されないことが好ましい。もう一方のコンテキストが所定の期間後にメモリ・ブロックを再利用しない場合、その1つのコンテキストはそのメモリ・ブロックを使用するために再利用することができ、同時にもう一方のコンテキストの識別をそのブロック上になお保持している。これらはすべて、どちらかのコンテキストがメイン・システム・メモリからメモリを探す前に行うことができる。
【0050】
本発明のこの態様の試験では、並列処理のメモリ・アクセスが従来技術による方法に比べて最大で20.7倍まで高速になることが示された。
【0051】
再利用可能な抽象データ・オブジェクトとしてコンピューティング制御の別個のフローを使用する
コンテキストとデータを別に扱う従来技術と異なり、本発明は並列環境でコンテキストを使用するための新しいパラダイムを実装する。基本的にこの発明ではコンテキストを作成してそれをキャプチャし、それをプログラマの視点からは抽象的であるデータ・オブジェクトにバインドする。このため、スレッド(すなわち制御の流れ)をソフトウェアによりデータ・オブジェクトとして扱うことが可能になる。これにはいくつかの利点がある。1つの利点はスレッドが一度作成され、必要に応じて再使用されることである。これにより、一般的な手法で見られるスレッドの作成および破棄のコストが回避される。別の利点は、スレッドがデータ・オブジェクトであり、したがって制御とデータの間における一般的な二分化を除去し、プログラマに問題に対する解決策を構想するための精神的余裕をより多く与えることである。別の利点は、スレッドがデータ・オブジェクトであるので、従来は不可能だった操作をソフトウェア開発者が利用できることである。この操作には、スレッドを他のデータ・オブジェクトに追加すること(後の実行時に使用するため)、スレッド(制御フロー)をパラメータとして渡すことなどが含まれるがそれだけに制限されるものではない。
【0052】
本発明のこの態様は、その上で待機するスレッドを有する抽象データ・オブジェクトを実装する。従来のデータ・オブジェクトに可能であるように、このデータ・オブジェクトは順に渡され、プログラムのデータ構造に組み込むことができる。要求があると、ソフトウェアは特定の作業をデータ・オブジェクトに割り当て、待機しているスレッドがウェイク・アップしてその作業を行う。作業を実行した後、スレッドはさらなる作業を求めて再び待機する。作業は所望の任意時に、アプリケーションのいずれのセクションからも割り当てることができる。スレッドはアプリケーション・プログラムが破棄を決定するまでは破棄されない。
【0053】
この手法は、スレッドの使用により並列動作を行うことを必要とするソフトウェアの作成を大幅に単純化する。スレッドを抽象化することにより、プログラマの権限から煩瑣な詳細事項が取り除かれる。待機スレッドをデータ・オブジェクトとしてカプセル化することにより、制御フローとデータ間の二分化がブリッジされるので、プログラマはより多くの自由度と広範囲の解決策を得られる。
【0054】
図11は、作業が割り当てられる抽象データ・オブジェクトとして実装されるスレッドの概略流れ図である。第1のスレッドはデータ・オブジェクト(「ボトル」)として指定され、通常これはディスパッチされず、プログラム構造がそれに指定された作業を行うために使用可能ではない。この作業とは、使用される関数、パラメータの収集、結果をどこに置くかという命令など、通常並列処理でスレッドによって実行されるどんな作業単位でもよい。「ボトル」は単一のコンテキストと関連付けられ、他のコンテキストによってのみ起動されそれ自体の作業を実行することができる。本発明では、各ボトルはそれ自体のコンテキストによって起動できないことが好ましい。ボトルには、プログラム構造のために作業を処理する第1の状態と、ディスパッチされず、実行時間を消費しない延期状態で処理する作業を待機している第2の状態の2つの状態しかない。ボトルは、要求された作業が1つまたは複数の他のコンテキストによって入れられる、関連付けられたキュー(Q)を有する。動作において、ボトルは作業要求があるかキューを調べ、キュー内に待機中の作業がある場合ボトルはキューをロックし、作業単位を取り出し、キューをアンロックして要求作業を実行する。要求作業をその作業単位で終了すると、ボトルはその結果を完了とマークし、作業キューを再度チェックする。ボトルは待機作業を順次処理し、作業がキュー内で実行を待っている限り基本的に永久ループで動作する。キューが空の場合、ボトルはデッドロックでディスパッチされない状態に入り、他のいずれのコンテキストが作業をキューに入れ、次いでそのボトルがディスパッチされて作業キューを再度チェックさせられるのを待機する。
【0055】
第1スレッドすなわち「ボトル」スレッドとは別にプログラム構造によって管理される独立した制御の流れを表す第2のスレッドを、図11に「ランチャ」として示す。ランチャは、「ボトル」が処理する作業を準備するために使用される。ランチャは、作業キューをロックし、作業単位を作業キューに入れ、キューをアンロックすることにより、第1の「ボトル」が処理するために作業をキューに入れる。「ボトル」が中断されている場合、ランチャはその「ボトル」をディスパッチさせる。ランチャはボトル・キューに追加作業を引き続き追加することができる。作業をボトル・キューに入れるとき、ランチャはその作業を未完了としてマークする。他のコンテキスト(ボトル・コンテキスト以外の)はいずれも、互いのコンテキストが結果の構造へのアクセス権を有すると想定して、特定の結果が完了しているかをチェックすることができる。
【0056】
したがって、第1スレッドは単一のタスクを完了した後、破棄されずにプログラム構造の要求に応じて再使用される。プログラム構造は、第1スレッドが所望量の作業を完了した後にのみそれを破棄する。
【0057】
本明細書に記載する並列ソフトウェア・システムは、マシン、好ましくは従来型のコンピュータにおいて、従来のコンピュータ可読コードを使用したコンピュータ使用可能な媒体上、半導体チップや読取り専用メモリなど他の点では従来型のプログラム記憶装置、CD−ROMやDVD−ROMなどの光学読取媒体、あるいはディスケットやコンピュータ・ハード・ドライブなどの磁気媒体上で作成し記憶することができる。
【0058】
したがって本発明は、従来技術で使用される構造に比べてエラーの生じにくい並列処理構造を提供する。本発明の並列処理構造は、データ構造など共通システム・サービスにアクセスする際に直列化による制限を受けにくい。またメモリの割り振りおよび解放の際にも直列化による制限を受けにくい。さらに異なるスレッド間の相互作用が少ない。本発明は、スレッドを作成し、管理し、終了する際のコストおよびエラーを低減する並列処理構造を提供する。さらに各スレッドは、ソフトウェアによりデータ・オブジェクトとして扱うことが可能である。
【0059】
まとめとして、本発明の構成に関して以下の事項を開示する。
【0060】
(1)並列コンピューティング用のコンピュータ・メモリ構造において、
プレーンを備える第1の階層レベルであって、前記プレーンが、プログラム構造によって管理される独立した制御の流れを表すスレッドと、データ構造用のヒープ部分と、関数引き数用のスタック部分と、ローカル変数と、前記プログラム構造のいずれの部分からもアクセス可能なグローバル・データとを含む、第1の階層レベルと、
スペースを備える第2の階層レベルであって、前記スペースが2つ以上の前記プレーンを含み、前記スペース内の前記プレーンが前記プログラム構造を含み、前記スペースがさらに各プレーン間で前記プログラム構造からアクセス可能な共通データを含む、第2の階層レベルとを備えるコンピュータ・メモリ構造。
(2)2つ以上の前記スペースを備える第3の階層レベルをさらに備え、前記スペースが、同一のまたは異なるプログラム構造と、各スペース間で前記プログラム構造からアクセス可能な共通データとを含む、上記(1)に記載のメモリ構造。
(3)前記第3の階層レベルが、異なるプログラム構造を備える上記(2)に記載のメモリ構造。
(4)前記第3の階層レベルが、同一のプログラム構造を備える上記(2)に記載のメモリ構造。
(5)前記プログラム構造が、プログラムのライブラリを備え、さらに各スペース用の関数テーブルを含み、前記関数テーブルが、各スペース内のライブラリとサービスを交換するように適合される上記(2)に記載のメモリ構造。
(6)並列コンピューティング用のコンピュータ・メモリ構造において、
プレーンを備える第1の階層レベルであって、前記プレーンが、プログラム構造によって管理される独立した制御の流れを表すスレッドと、データ構造用のヒープ部分と、関数引き数用のスタック部分と、ローカル変数と、前記プログラム構造のいずれの部分からもアクセス可能なグローバル・データとを含む、第1の階層レベルと、
スペースを備える第2の階層レベルであって、前記スペースが2つ以上の前記プレーンを含み、前記スペース内の前記プレーンが前記プログラム構造を含み、前記スペースがさらに各プレーン間で前記プログラム構造からアクセス可能な共通データを含む、第2の階層レベルと、
2つ以上の前記スペースを備える第3の階層レベルであって、前記スペースが、プログラムのライブラリを有する同一のまたは異なるプログラム構造と、各スペース間で前記プログラム構造からアクセス可能な共通データとを含む、第3の階層レベルとを備えるコンピュータ・メモリ構造。
(7)前記第3の階層レベルが、異なるプログラム構造を含む上記(6)に記載のメモリ構造。
(8)前記第3の階層レベルが、同一のプログラム構造を含む上記(6)に記載のメモリ構造。
(9)媒体中で実施されるコンピュータ可読コードを有するコンピュータ使用可能な媒体を備える、並列コンピューティング用のコンピュータ・プログラム製品において、前記コンピュータ・コードが、
プレーンを備える第1の階層レベルであって、前記プレーンが、プログラム構造によって管理される独立した制御の流れを表すスレッドと、データ構造用のヒープ部分と、関数引き数用のスタック部分と、ローカル変数と、前記プログラム構造のいずれの部分からもアクセス可能なグローバル・データとを含む、第1の階層レベルと、
スペースを備える第2の階層レベルであって、前記スペースが2つ以上の前記プレーンを含み、前記スペース中の前記プレーンが前記プログラム構造を含み、前記スペースがさらに各プレーン間で前記プログラム構造からアクセス可能な共通データを含む、第2の階層レベルとを含むコンピュータ・メモリ構造を定義する、コンピュータ・プログラム製品。
(10)前記メモリ構造がさらに、2つ以上の前記スペースを備える第3の階層レベルを含み、前記スペースが、同一または異なるプログラム構造と、各スペース間で前記プログラム構造からアクセス可能な共通データとを含む、上記(9)に記載のコンピュータ・プログラム製品。
(11)並列処理の方法において、
プレーンを備える第1の階層レベルであって、前記プレーンが、プログラム構造によって管理される独立した制御の流れを表すスレッドと、データ構造用のヒープ部分と、関数引き数用のスタック部分と、ローカル変数と、前記プログラム構造のいずれの部分からもアクセス可能なグローバル・データとを含む第1の階層レベルと、スペースを備える第2の階層レベルであって、前記スペースが2つ以上の前記プレーンを含み、前記スペース内の前記プレーンが前記プログラム構造を含み、前記スペースがさらに各プレーン間で前記プログラム構造からアクセス可能な共通データを含む第2の階層レベルとを有するコンピュータ・メモリ構造を提供するステップと、
前記スペース内の第1プレーン内で前記プログラム構造によって管理される第1スレッドを使用し、前記第1プレーン内のデータおよび各プレーン間の共通データにアクセスするステップと、
前記スペース内の第2プレーン内で前記プログラム構造によって管理される第2スレッドを使用し、前記第2プレーン内のデータおよび各プレーン間の共通データにアクセスするステップとを含み、前記プログラム構造によって明示的に要求されたとき以外は前記第1スレッドと前記第2スレッドが互いの相互作用を回避する方法。
(12)前記プログラム構造がプログラムのライブラリを備え、さらに前記スペース用の関数テーブルを提供し、前記関数テーブルが前記スペース内のライブラリとサービスを交換するように適合され、さらに、前記第1スレッドおよび第2スレッドを使用して前記関数テーブルに関数呼び出しを行って、各プレーン間の共通データおよび前記スペース内の共通データにアクセスするステップを含む、上記(11)に記載の方法。
(13)2つ以上の前記スペースを備える第3の階層レベルがさらに提供され、前記スペースが、同一のまたは異なるプログラム構造と、各スペース間でプログラム構造からアクセス可能な共通データとを含み、さらに、前記第1スレッドおよび第2スレッドによって前記各スペース間の共通データにアクセスするステップを含む、上記(11)に記載の方法。
(14)前記プログラム構造がプログラムのライブラリを備え、さらに各スペースのための関数テーブルを提供し、前記関数テーブルが各スペース内の前記ライブラリとサービスを交換するように適合され、さらに、前記第1スレッドおよび第2スレッドを使用して前記関数テーブルに関数呼び出しを行って、各プレーン間の共通データおよび各スペース間の共通データにアクセスするステップを含む、上記(13)に記載の方法。
(15)マシン読取り可能なプログラム記憶装置において、
プレーンを備える第1の階層レベルであって、前記プレーンが、プログラム構造によって管理される独立した制御の流れを表すスレッドと、データ構造用のヒープ部分と、関数引き数用のスタック部分と、ローカル変数と、前記プログラム構造のいずれの部分からもアクセス可能なグローバル・データとを含む第1の階層レベルと、スペースを備える第2の階層レベルであって、前記スペースが2つ以上の前記プレーンを含み、前記スペース内の前記プレーンが前記プログラム構造を含み、前記スペースがさらに各プレーン間のプログラム構造からアクセス可能な共通データを含む、第2の階層レベルとを有するコンピュータ・メモリ構造を使用して、並列処理のための方法ステップを実行するためのマシン実行可能な命令プログラムを有形に実施し、前記方法ステップが、
前記スペース内の第1プレーン内で前記プログラム構造によって管理される第1スレッドを使用して、前記第1プレーン内のデータおよび各プレーン間の共通データにアクセスするステップと、
前記スペース内の第2プレーン内で前記プログラム構造によって管理される第2スレッドを使用して、第2プレーン内のデータおよび各プレーン間の共通データにアクセスするステップとを含み、前記プログラム構造によって明示的に要求されたとき以外は前記第1スレッドと第2スレッドが互いの相互作用を回避するプログラム記憶装置。
(16)前記プログラム構造がプログラムのライブラリを備え、さらに前記スペースのための関数テーブルを提供し、前記関数テーブルが前記スペース内のライブラリとサービスを交換するように適合され、さらに、前記第1スレッドおよび第2スレッドを使用して前記関数テーブルに関数呼び出しを行って、各プレーン間の共通データおよび前記スペース内の共通データにアクセスするステップを含む上記(15)に記載のプログラム記憶装置。
(17)2つ以上の前記スペースを備える第3の階層レベルがさらに提供され、前記スペースが、同一のまたは異なるプログラム構造と、各スペース間で前記プログラム構造からアクセス可能な共通データとを備え、さらに、前記第1スレッドおよび第2スレッドによって前記各スペース間の共通データにアクセスするステップを含む、上記(15)に記載のプログラム記憶装置。
(18)前記プログラム構造がプログラムのライブラリを備え、さらに各スペースのための関数テーブルを提供し、前記関数テーブルが各スペース内のライブラリとサービスを交換するように適合され、さらに、前記第1スレッドおよび第2スレッドを使用して前記関数テーブルに関数呼び出しを行って、各プレーン間の共通データおよび各スペース間の共通データにアクセスするステップを含む、上記(17)に記載のプログラム記憶装置。
【図面の簡単な説明】
【図1】従来技術による、別々のプログラム用のメモリ構造の概略図である。
【図2】従来技術による、並列プログラム用のメモリ構造の概略図である。
【図3】プレーンと呼ばれる本発明の並列メモリ構造の第1の階層レベルと、2つ以上のプレーンのスペースへのグループ化を示す概略図である。
【図4】図3に示した複数スペースを示す、本発明の並列メモリ構造の第2の階層レベルの概略図である。
【図5】プレーン内のデフォルト・グローバル・データおよび共通(プレーン)メモリ内のデータへのアクセスを示す、図3に示したスペースのコンテキストまたは索引付け構造を表す概略図である。
【図6】各グローバル変数の整数識別を一意の識別にリンクする、コンテキスト索引付け構造の概略図である。
【図7】共通(スペース)メモリによってリンクされ、それぞれが複数のプレーンおよび共通プログラムを有する、複数のスペースの概略図である。
【図8】共通(スペース)グローバル・データ・オブジェクトをリンクするコンテキスト索引付け構造の概略図である。
【図9】システム・メモリによって複数のスレッド・コンテキストに割り振られた別々のメモリ・プールの概略図である。
【図10】他のスレッドのためにマークされた不使用のメモリ・ブロックの再利用を示す、図9の別々のメモリ・プールの概略図である。
【図11】作業がそれに割り当てられる抽象データ・オブジェクトとして実装されるスレッドの概略流れ図である。
【符号の説明】
225a プレーン
225b プレーン
230 スペース
230' スペース
230" スペース
310e メモリ・ブロック
310f メモリ・ブロック
310g メモリ・ブロック
310h メモリ・ブロック
313 スイッチ
313a スイッチ
313b スイッチ
314 スイッチ
314a スイッチ
314b スイッチ
314c スイッチ

Claims (18)

  1. プレーンを備える第1の階層レベルであって、前記プレーンが、プログラム構造によって管理される独立した制御の流れを表すスレッドと、データ構造用のヒープ部分と、関数引き数用のスタック部分と、ローカル変数と、前記プログラム構造のいずれの部分からもアクセス可能なグローバル・データとを含む、第1の階層レベルと、
    スペースを備える第2の階層レベルであって、前記スペースが2つ以上の前記プレーンを含み、前記スペース内の前記プレーンが前記プログラム構造を含み、前記スペースがさらに各プレーン間で前記プログラム構造からアクセス可能な共通データを含む、第2の階層レベルとを備える、
    並列コンピューティング用のコンピュータ・メモリ構造からなるコンピュータ・メモリ
  2. 2つ以上の前記スペースを備える第3の階層レベルをさらに備え、前記スペースが、同一のまたは異なるプログラム構造と、各スペース間で前記プログラム構造からアクセス可能な共通データとを含む、請求項1に記載のメモ
  3. 前記第3の階層レベルが、異なるプログラム構造を備える請求項2に記載のメモ
  4. 前記第3の階層レベルが、同一のプログラム構造を備える請求項2に記載のメモ
  5. 前記プログラム構造が、プログラムのライブラリを備え、さらに各スペース用の関数テーブルを含み、前記関数テーブルが、各スペース内のライブラリとサービスを交換するように適合される請求項2に記載のメモ
  6. プレーンを備える第1の階層レベルであって、前記プレーンが、プログラム構造によって管理される独立した制御の流れを表すスレッドと、データ構造用のヒープ部分と、関数引き数用のスタック部分と、ローカル変数と、前記プログラム構造のいずれの部分からもアクセス可能なグローバル・データとを含む、第1の階層レベルと、
    スペースを備える第2の階層レベルであって、前記スペースが2つ以上の前記プレーンを含み、前記スペース内の前記プレーンが前記プログラム構造を含み、前記スペースがさらに各プレーン間で前記プログラム構造からアクセス可能な共通データを含む、第2の階層レベルと、
    2つ以上の前記スペースを備える第3の階層レベルであって、前記スペースが、プログラムのライブラリを有する同一のまたは異なるプログラム構造と、各スペース間で前記プログラム構造からアクセス可能な共通データとを含む、第3の階層レベルとを備える、
    並列コンピューティング用のコンピュータ・メモリ構造からなるコンピュータ・メモリ。
  7. 前記第3の階層レベルが、異なるプログラム構造を含む請求項6に記載のメモ
  8. 前記第3の階層レベルが、同一のプログラム構造を含む請求項6に記載のメモ
  9. 媒体中に記録されるコンピュータ可読コードを有するコンピュータ使用可能な媒体を備える、並列コンピューティング用のコンピュータ・プログラムにおいて、前記コンピュータ・コードがコンピュータ・メモリ構造を定義し、前記メモリ構造は
    プレーンを備える第1の階層レベルであって、前記プレーンが、プログラム構造によって管理される独立した制御の流れを表すスレッドと、データ構造用のヒープ部分と、関数引き数用のスタック部分と、ローカル変数と、前記プログラム構造のいずれの部分からもアクセス可能なグローバル・データとを含む、第1の階層レベルと、
    スペースを備える第2の階層レベルであって、前記スペースが2つ以上の前記プレーンを含み、前記スペース中の前記プレーンが前記プログラム構造を含み、前記スペースがさらに各プレーン間で前記プログラム構造からアクセス可能な共通データを含む、第2の階層レベルとを含、コンピュータ・プログラム。
  10. 前記メモリ構造がさらに、2つ以上の前記スペースを備える第3の階層レベルを含み、前記スペースが、同一または異なるプログラム構造と、各スペース間で前記プログラム構造からアクセス可能な共通データとを含む、請求項9に記載のコンピュータ・プログラム。
  11. 並列処理の方法において、
    プレーンを備える第1の階層レベルであって、前記プレーンが、プログラム構造によって管理される独立した制御の流れを表すスレッドと、データ構造用のヒープ部分と、関数引き数用のスタック部分と、ローカル変数と、前記プログラム構造のいずれの部分からもアクセス可能なグローバル・データとを含む第1の階層レベルと、スペースを備える第2の階層レベルであって、前記スペースが2つ以上の前記プレーンを含み、前記スペース内の前記プレーンが前記プログラム構造を含み、前記スペースがさらに各プレーン間で前記プログラム構造からアクセス可能な共通データを含む第2の階層レベルとを有するコンピュータ・メモリ構造を提供するステップと、
    前記スペース内の第1プレーン内で前記プログラム構造によって管理される第1スレッドを使用し、前記第1プレーン内のデータおよび各プレーン間の共通データにアクセスするステップと、
    前記スペース内の第2プレーン内で前記プログラム構造によって管理される第2スレッドを使用し、前記第2プレーン内のデータおよび各プレーン間の共通データにアクセスするステップとを含み、前記プログラム構造によって要求されたとき以外は前記第1スレッド及び前記第2スレッドによって前記各プレーン間の共通データがアクセス可能であることを特徴とする、方法。
  12. 前記プログラム構造がプログラムのライブラリを備え、さらに前記スペース用の関数テーブルを提供し、前記関数テーブルが前記スペース内のライブラリとサービスを交換するように適合され、さらに、前記第1スレッドおよび第2スレッドを使用して前記関数テーブルに関数呼び出しを行って、各プレーン間の共通データおよび前記スペース内の共通データにアクセスするステップを含む、請求項11に記載の方法。
  13. 2つ以上の前記スペースを備える第3の階層レベルがさらに提供され、前記スペースが、同一のまたは異なるプログラム構造と、各スペース間でプログラム構造からアクセス可能な共通データとを含み、さらに、前記第1スレッドおよび第2スレッドによって前記各スペース間の共通データにアクセスするステップを含む、請求項11に記載の方法。
  14. 前記プログラム構造がプログラムのライブラリを備え、さらに各スペースのための関数テーブルを提供し、前記関数テーブルが各スペース内の前記ライブラリとサービスを交換するように適合され、さらに、前記第1スレッドおよび第2スレッドを使用して前記関数テーブルに関数呼び出しを行って、各プレーン間の共通データおよび各スペース間の共通データにアクセスするステップを含む、請求項13に記載の方法。
  15. プレーンを備える第1の階層レベルであって、 前記プレーンが、プログラム構造によって管理される独立した制御の流れを表すスレッドと、データ構造用のヒープ部分と、関数引き数用のスタック部分と、ローカル変数と、前記プログラム構造のいずれの部分からもアクセス可能なグローバル・データとを含む第1の階層レベルと、
    スペースを備える第2の階層レベルであって、前記スペースが2つ以上の前記プレーンを含み、前記スペース内の前記プレーンが前記プログラム構造を含み、前記スペースがさらに各プレーン間のプログラム構造からアクセス可能な共通データを含む、第2の階層レベルとを有するコンピュータ・メモリ構造を使用して、
    並列処理のための方法ステップを実行するためのマシン実行可能な命令プログラムを記憶するマシン読取り可能なプログラム記憶装置であって、
    前記方法ステップが、
    前記スペース内の第1プレーン内で前記プログラム構造によって管理される第1スレッドを使用して、前記第1プレーン内のデータおよび各プレーン間の共通データにアクセスするステップと、
    前記スペース内の第2プレーン内で前記プログラム構造によって管理される第2スレッドを使用して、第2プレーン内のデータおよび各プレーン間の共通データにアクセスするステップとを含み、前記プログラム構造によって要求されたとき以外は前記第1スレッド及び前記第2スレッドによって前記各プレーン間の共通データがアクセス可能であることを特徴とする、プログラム記憶装置。
  16. 前記プログラム構造がプログラムのライブラリを備え、さらに前記スペースのための関数テーブルを提供し、前記関数テーブルが前記スペース内のライブラリとサービスを交換するように適合され、さらに、前記第1スレッドおよび第2スレッドを使用して前記関数テーブルに関数呼び出しを行って、各プレーン間の共通データおよび前記スペース内の共通データにアクセスする、請求項15に記載のプログラム記憶装置。
  17. 2つ以上の前記スペースを備える第3の階層レベルがさらに提供され、前記スペースが、同一のまたは異なるプログラム構造と、各スペース間で前記プログラム構造からアクセス可能な共通データとを備え、さらに、前記第1スレッドおよび第2スレッドによって前記各スペース間の共通データにアクセスする、請求項15に記載のプログラム記憶装置。
  18. 前記プログラム構造がプログラムのライブラリを備え、さらに各スペースのための関数テーブルを提供し、前記関数テーブルが各スペース内のライブラリとサービスを交換するように適合され、さらに、前記第1スレッドおよび第2スレッドを使用して前記関数テーブルに関数呼び出しを行って、各プレーン間の共通データおよび各スペース間の共通データにアクセスする、請求項17に記載のプログラム記憶装置。
JP2001185088A 2000-06-20 2001-06-19 並列ソフトウェア処理システム Expired - Fee Related JP3790681B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/597523 2000-06-20
US09/597,523 US6832378B1 (en) 2000-06-20 2000-06-20 Parallel software processing system

Publications (2)

Publication Number Publication Date
JP2002073357A JP2002073357A (ja) 2002-03-12
JP3790681B2 true JP3790681B2 (ja) 2006-06-28

Family

ID=24391880

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001185088A Expired - Fee Related JP3790681B2 (ja) 2000-06-20 2001-06-19 並列ソフトウェア処理システム

Country Status (5)

Country Link
US (1) US6832378B1 (ja)
JP (1) JP3790681B2 (ja)
KR (1) KR100488836B1 (ja)
CN (1) CN1148649C (ja)
TW (1) TW505855B (ja)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3600189B2 (ja) * 2001-06-19 2004-12-08 松下電器産業株式会社 パケット送受信装置及びパケット伝送方法
US7069556B2 (en) * 2001-09-27 2006-06-27 Intel Corporation Method and apparatus for implementing a parallel construct comprised of a single task
US7284107B2 (en) * 2004-04-30 2007-10-16 Microsoft Corporation Special-use heaps
US7823158B2 (en) * 2005-08-18 2010-10-26 International Business Machines Corporation Adaptive scheduling and management of work processing in a target context in resource contention
US7831317B2 (en) * 2005-11-14 2010-11-09 Rockwell Automation Technologies, Inc. Distributed historian architecture
US7526617B2 (en) * 2005-12-29 2009-04-28 Sap Ag System and method for memory management using memory windows
US7743087B1 (en) 2006-03-22 2010-06-22 The Math Works, Inc. Partitioning distributed arrays according to criterion and functions applied to the distributed arrays
US7865885B2 (en) * 2006-09-27 2011-01-04 Intel Corporation Using transactional memory for precise exception handling in aggressive dynamic binary optimizations
WO2008098070A1 (en) 2007-02-06 2008-08-14 Mba Sciences, Inc. A resource tracking method and apparatus
MX2009012134A (es) 2007-05-11 2009-11-25 Echostar Technologies Llc Aparato para controlar la ejecucion de un procesador en un ambiente seguro.
CN102362256B (zh) * 2010-04-13 2014-07-30 华为技术有限公司 处理公共数据结构的方法及装置
US8601013B2 (en) 2010-06-10 2013-12-03 Micron Technology, Inc. Analyzing data using a hierarchical structure
US9489183B2 (en) * 2010-10-12 2016-11-08 Microsoft Technology Licensing, Llc Tile communication operator
US9430204B2 (en) 2010-11-19 2016-08-30 Microsoft Technology Licensing, Llc Read-only communication operator
US9507568B2 (en) 2010-12-09 2016-11-29 Microsoft Technology Licensing, Llc Nested communication operator
US9395957B2 (en) 2010-12-22 2016-07-19 Microsoft Technology Licensing, Llc Agile communication operator
US8726256B2 (en) 2011-01-25 2014-05-13 Micron Technology, Inc. Unrolling quantifications to control in-degree and/or out-degree of automaton
US8788991B2 (en) 2011-01-25 2014-07-22 Micron Technology, Inc. State grouping for element utilization
EP2668574B1 (en) 2011-01-25 2021-11-24 Micron Technology, INC. Utilizing special purpose elements to implement a fsm
KR101640295B1 (ko) 2011-01-25 2016-07-15 마이크론 테크놀로지, 인크. 정규 표현을 컴파일하기 위한 방법 및 장치
CN102508704A (zh) * 2011-11-10 2012-06-20 上海市共进通信技术有限公司 计算机软件系统中实现任务分解和并行处理控制的方法
EP3065051A1 (en) * 2015-03-05 2016-09-07 Ingo Josopait Flow control for language-embedded programming in general-purpose computing on graphics processing units
US11775543B1 (en) * 2022-04-19 2023-10-03 Sap Se Heapsort in a parallel processing framework

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06100981B2 (ja) * 1983-12-28 1994-12-12 株式会社日立製作所 記憶階層制御方式
US5353418A (en) 1989-05-26 1994-10-04 Massachusetts Institute Of Technology System storing thread descriptor identifying one of plural threads of computation in storage only when all data for operating on thread is ready and independently of resultant imperative processing of thread
DE69023499T2 (de) * 1990-09-03 1996-06-20 Ibm Rechner mit erweitertem virtuellem Speicher.
US5129080A (en) 1990-10-17 1992-07-07 International Business Machines Corporation Method and system increasing the operational availability of a system of computer programs operating in a distributed system of computers
US5386525A (en) 1991-10-29 1995-01-31 Pacific Bell System for providing application programs with direct addressability into a shared dataspace
JPH05151064A (ja) * 1991-11-29 1993-06-18 Yokogawa Electric Corp 密結合マルチプロセツサシステム
US5640584A (en) * 1994-12-12 1997-06-17 Ncr Corporation Virtual processor method and apparatus for enhancing parallelism and availability in computer systems
JP3348367B2 (ja) * 1995-12-06 2002-11-20 富士通株式会社 多重アクセス方法および多重アクセスキャッシュメモリ装置
US5928323A (en) 1996-05-30 1999-07-27 Sun Microsystems, Inc. Apparatus and method for dynamically generating information with server-side software objects
US6058460A (en) * 1996-06-28 2000-05-02 Sun Microsystems, Inc. Memory allocation in a multithreaded environment
EP0825544A1 (en) 1996-08-23 1998-02-25 The Pharmacy Fund Inc. Computerized healthcare accounts receivable purchasing, collections, securitization and management system
US5937194A (en) 1997-03-12 1999-08-10 International Business Machines Corporation Method of, system for, and article of manufacture for providing a generic reduction object for data parallelism
US6067604A (en) 1997-08-11 2000-05-23 Compaq Computer Corporation Space-time memory
GB9717715D0 (en) 1997-08-22 1997-10-29 Philips Electronics Nv Data processor with localised memory reclamation
JP3794119B2 (ja) 1997-08-29 2006-07-05 ソニー株式会社 データ処理方法、記録媒体及びデータ処理装置
EP0909094A1 (en) 1997-10-07 1999-04-14 CANAL+ Société Anonyme Multithread data processor
US6397299B1 (en) * 1998-01-21 2002-05-28 Micron Technology, Inc. Reduced latency memory configuration method using non-cacheable memory physically distinct from main memory
US6209066B1 (en) * 1998-06-30 2001-03-27 Sun Microsystems, Inc. Method and apparatus for memory allocation in a multi-threaded virtual machine
US6349363B2 (en) * 1998-12-08 2002-02-19 Intel Corporation Multi-section cache with different attributes for each section
US6473833B1 (en) * 1999-07-30 2002-10-29 International Business Machines Corporation Integrated cache and directory structure for multi-level caches

Also Published As

Publication number Publication date
JP2002073357A (ja) 2002-03-12
KR20020000107A (ko) 2002-01-04
TW505855B (en) 2002-10-11
CN1148649C (zh) 2004-05-05
CN1330314A (zh) 2002-01-09
US6832378B1 (en) 2004-12-14
KR100488836B1 (ko) 2005-05-11

Similar Documents

Publication Publication Date Title
JP3745652B2 (ja) 並列処理コンピューティング・システムにおいてメモリを割り振るための方法
JP3790681B2 (ja) 並列ソフトウェア処理システム
JP4398116B2 (ja) 計算制御の別個のフローを再使用可能な抽象データ・オブジェクトとして使用する方法
US6173442B1 (en) Busy-wait-free synchronization
US7451146B2 (en) Almost non-blocking linked stack implementation
US6738974B1 (en) Apparatus and method for system resource object deallocation in a multi-threaded environment
EP2284703B1 (en) Scheduling of tasks in a parallel computer system according to defined policies
US20030188300A1 (en) Parallel processing system design and architecture
US6738846B1 (en) Cooperative processing of tasks in a multi-threaded computing system
US20070044104A1 (en) Adaptive scheduling and management of work processing in a target context in resource contention
EP0695993A2 (en) System and method for interprocess communication
JP4489958B2 (ja) イベントベースシステムの同時処理
Barton-Davis et al. Adding Scheduler Activations to Mach 3.0.
EP0689139A2 (en) Anonymous reply port method and apparatus for a microkernel data processing system
EP0689137A2 (en) Message control structure registration method and apparatus for a microkernel data processing system
Aparicio Rivera Real time rust on multi-core microcontrollers
US20030225817A1 (en) Concurrent execution of kernel work and non-kernel work in operating systems with single-threaded kernel
Gurevich The M-Machine operating system
JP2004086921A (ja) マルチプロセッサシステムおよびマルチプロセッサシステムにおいてタスクを実行する方法
Holtkamp Thread Migration with Active Threads
JPH0423137A (ja) スレツド生成方式及び並列処理方式
Tandon Block-1 An Overview and Process Management
JPH02178747A (ja) 仮想記憶計算システムのメモリ管理方式

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050201

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20050421

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20050426

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050630

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050802

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051025

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: 20060314

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060403

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20090407

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20100407

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20110407

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20110407

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20120407

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20130407

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20130407

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20140407

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees