JP3926374B2 - バッファ管理方法およびバッファ管理装置 - Google Patents

バッファ管理方法およびバッファ管理装置 Download PDF

Info

Publication number
JP3926374B2
JP3926374B2 JP2005235580A JP2005235580A JP3926374B2 JP 3926374 B2 JP3926374 B2 JP 3926374B2 JP 2005235580 A JP2005235580 A JP 2005235580A JP 2005235580 A JP2005235580 A JP 2005235580A JP 3926374 B2 JP3926374 B2 JP 3926374B2
Authority
JP
Japan
Prior art keywords
block
pointer
tracking
writing
reading
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.)
Active
Application number
JP2005235580A
Other languages
English (en)
Other versions
JP2007052510A (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.)
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
Priority to JP2005235580A priority Critical patent/JP3926374B2/ja
Priority to PCT/JP2006/310908 priority patent/WO2007020740A1/ja
Priority to EP06756828.7A priority patent/EP1936501B1/en
Priority to US11/996,359 priority patent/US7904618B2/en
Publication of JP2007052510A publication Critical patent/JP2007052510A/ja
Application granted granted Critical
Publication of JP3926374B2 publication Critical patent/JP3926374B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • 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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

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

Description

本発明は、複数の処理主体を有しうるシステムにおける各処理主体間でデータを授受するためのバッファを管理する方法およびバッファ管理装置に関する。
1つのシステムに複数のプロセッサを搭載したマルチプロセッサシステムは、並列に、あるいは協調して処理を実行して処理全体の高速化を図ることができる。並列協調処理にはプロセッサ間のデータの授受が伴い、プロデューサと呼ばれるプロセッサにより生成されたデータは、コンシューマと呼ばれるプロセッサに渡され、コンシューマにより処理される。プロデューサとコンシューマとの間のデータの授受の工夫次第、システム全体の効率が変わってくる。
また、マルチプロセッサシステムに限らず、マルチタスク(プロセス、スレッドなどを含む)環境において、タスク間でデータの授受が行われる。本明細書では、以下の説明において、互いにデータの授受が行われるプロセッサ、タスクなどを処理主体という。マルチタスクの場合おいて、タスクがプロデューサかコンシューマになる。プロセッサ間のデータ授受と同じように、タスク間のデータ授受の工夫次第、システム全体の効率が変わってくる。
本発明は上記事情に鑑みてなされたものであり、その目的は、複数の処理主体を有しうるシステムにおいて、処理主体間でデータを授受するためのバッファを管理して処理効率を向上させることができるバッファ管理技術を提供することにある。
本発明にかかる第1の態様は、複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序で循環使用されるバッファを管理する方法である。この方法は、最も先に書込がなされるブロックに対して、該ブロックを示す先行ポインタと追尾ポインタを設け、使用中、書込完了、読出完了のいずれの状態にあるかをブロックに対応づけて示すブロック状態情報を保持する。そして、最も先に書込がなされるブロックに対する書込の開始後、書込と読出の進行にしたがって、ポインタの位置と、ブロック状態情報を更新する。
ポインタの進行については、2つのポインタが同じ方向に進行し、かつ互いに追い抜かない制約の下で、先行ポインタにより示されるブロックに対する書込の開始後、次のブロックが読出完了状態にある場合に限り、先行ポインタを次のブロックに進める。追尾ポインタにより示されるブロックに対する読出の開始後、次のブロックが書込完了状態にある場合に限り、追尾ポインタを次のブロックに進める。
なお、本発明において、「処理主体」とは、データを処理する主体を意味し、一時的な格納場所からデータを読み出して処理することが可能なもの、または処理したデータを一時的な格納場所に書き込むことが可能なものである。この処理主体は、マルチプロセッサシステムにおける各々のプロセッサに限らず、タスク、プロセス、スレッドなどを含むものである。
以下の説明において、この方法を第1の方法という。
複数の処理主体を有しうるシステムにおいて、各処理主体間のデータ授受にバッファを利用する方法が考えられる。バッファを用いれば、プロデューサは、処理が完了したデータをバッファに書き込み、コンシューマは、バッファからデータを読み出して処理することができるため、システム全体の処理効率の向上を図れる。
このようなバッファの管理において、データを保護するために、1つの処理主体がバッファを使用しているとき、バッファはほかの処理主体により修正されることがないように、バッファをロックする方法が考えられる。しかし、バッファがロックされてしまっては、バッファの中には、プロデューサによる書込が完了したデータがある場合でも、コンシューマはロックが解除されるまでそのデータを読み出すことができない。プロデューサについても同じく、バッファがロックされているときに、バッファの中には、データを書込ことができるブロックがある場合においても、このプロデューサはロックが解除されるまで待たなければならない。複数の処理主体が同時にバッファを使用すること、すなわちマルチアクセスができれば、システムの処理効率が一層向上すると考えられる。
本発明の第1の方法は、所定の順序で循環使用される複数のブロックを有するバッファに対して、安全なマルチアクセスを実現する。この方法は、使用中か、書込完了か、読出完了かのいずれかを示すブロック状態情報を更新しながら保持するとともに、先行ポインタと追尾ポインタが同じ方向に進行し、かつ互いに追い抜かない制約の下で先行ポインタと追尾ポインタを進める。
ここで、ブロック状態情報の保持は、マルチアクセスを実現するうえで大きな利益をもたらす。
先行ポインタについては、先行ポインタにより示されているブロックに対する書込の開始後、次のブロックが読出完了状態にある場合に限り、先行ポインタを次のブロックに進める。ここで、先行ポインタを進行するタイミングは、システムの設計に委ねる。
たとえば、先行ポインタにより示されているブロックに対する書込の開始時に、次のブロックが既に読出完了状態にあれば、書込の開始と共に先行ポインタを次のブロックに進める。その一方、先行ポインタにより示されているブロックに対する書込の開始時に、次のブロックがまだ読出完了状態ではなければ、書込の開始後に、次のブロックが読出完了状態になった時点で先行ポインタを次のブロックに進めるシステムが考えられる。この場合、先行ポインタにより示されるブロックが、読出完了状態と、最後に書込が開始されたブロックが書込中であることを示す使用中状態と、このブロックの書込が完了したことを示す書込完了状態のいずれかにある。次のプロデューサが先行ポインタを見い出して、このブロックが読出完了状態にあるか否かを確認し、読出完了状態にあれば書込を行うことができる。
これに対してより単純なシステムとして、先行ポインタは最後に書込が開始されたブロックを示すようにし、次のプロデューサが先行ポインタを見い出すとともに、先行ポインタにより示されるブロックの次のブロックが読出完了状態にあるか否かを確認し、読出完了状態にあれば、先行ポインタを次のブロックに進めるとともに、次のブロックに対する書込を開始するシステムが考えられる。
いずれのシステムでも、プロデューサによる書込中であっても、他のプロデューサは、先行ポインタと、ブロック状態情報とに基づいて、ほかのブロックの安全な書込を行うことができる。
コンシューマについて同じ状況であり、追尾ポインタとブロック状態情報の併用によって、バッファをロックせずに複数のコンシューマの同時読出が安全にできる。
これによって、処理主体による安全なマルチアクセスを実現することができる。
本発明にかかる第2の態様も、複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序で循環使用されるバッファを管理する方法である。この方法も、安全なマルチアクセスを実現するものであり、以下において、この方法を第2の方法という。
この第2の方法は、プロデューサが書込を行うべきブロックの指定、コンシューマが読出を行うべきブロックの指定については、第1の方法と同じように、先行ポインタと追尾ポインタを用いる。ここで、後述する第2の先行ポインタと第2の追尾ポインタとを区別するために、第1の方法における先行ポインタと追尾ポインタと同じ役割を担う先行ポインタと追尾ポインタを、それぞれ第1の先行ポインタと第1の追尾ポインタと呼ぶ。
第2の方法は、最も先に書込がなされるブロックに対して、該ブロックを示す第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタを設け、書込完了かそれ以外か、読出完了かそれ以外かをブロックに対応づけて示すブロック状態情報を保持する。そして、最も先に書込がなされるブロックに対する書込の開始後、書込と読出の進行にしたがって、ポインタの位置と、ブロック状態情報を更新する。
第2の先行ポインタは、第1の先行ポインタに追従し、それにより示されるブロックに対する書込が終了した後、先に進めるポインタである。
第2の追尾ポインタは、第1の追尾ポインタに追従し、それにより示されるブロックに対する読出が完了した後、先に進めるポインタである。
また、第2の方法において、この4つのポインタは、第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタの順で、進行方向が同じ、かつ互いに追い抜かない制約の下で進められる。
すなわち、この第2の方法によれば、ポインタの進行方向に沿って、第1の追尾ポインタと第2の先行ポインタとの間のブロックは、書込完了状態にあるブロックであり、第1の先行ポインタと第2の追尾ポインタとの間のブロックは、読出完了状態にあるブロックである。
これによって、第1の先行ポインタを先に進める際に、第2の追尾ポインタまでのブロックが書込完了状態にあるブロックであるので、進め先のブロックが書込完了しているか否かを確認する必要がない。同じように、第1の追尾ポインタを先に進める際に、第2の先行ポインタまでのブロックが読出完了状態にあるブロックであるので、進め先のブロックが読出完了しているか否かを確認する必要がない。
すなわち、第1の先行ポインタ、第2の追尾ポインタを用いることによって、書込を行うべきブロックを示すとともに、バッファをロックせずに、読出中のデータを保護することができる。
コンシューマについても同じ状況であり、第1の追尾ポインタ、第2の先行ポインタを用いることによって、コンシューマが読出を行うべきブロックを示すとともに、バッファをロックせずに、書込中のデータを保護することができる。
ここで、第2の先行ポインタと第2の追尾ポインタの進め先について考える。
第2の先行ポインタは、それによって示されるブロックに対する書込の完了後に進められるポインタである。第2の先行ポインタから第1の先行ポインタまでの間、書込中のブロックと、書込が完了したブロックがあり、第1の先行ポインタから離れたブロックほど、書込が早く開始されている。第2の先行ポインタと第1の先行ポインタにより示されるブロックがそれぞれAブロックとFブロックであり、その間には、ポインタの進行方向に沿って配列されているB、C、D、Eの4つのブロックがある場合を例にする。この6つのブロックの書込開始順は、A、B、C、D、E、Fとなっている。
先に書込が開始されたブロックは、先に書込が完了されるとは限らない。たとえば、第2の先行ポインタにより示されるAブロックの書込中に、BブロックとCブロックの書込が完了する場合がある。Aブロックの書込が完了したとき、第2の先行ポインタを次にブロック(Bブロック)に進むだけでは、Cブロックは既に書込が完了したのに、コンシューマによる使用ができない。
そこで、本発明の第2の方法は、ブロック状態情報に含まれ、書込完了か否かを示す情報を保持することによって、Aブロックの書込が完了したとき、書込完了か否かを示す情報を参照して、第2の先行ポインタにより示されるブロック(ここの例ではAブロック)から連続し、かつ書込完了状態にあるブロック(ここの例ではBブロックとCブロック)のうち、第2の先行ポインタから最も離れたブロック(Cブロック)の次のブロック(Dブロック)に進める。これによって、ブロックの書込が開始順通りに完了しない場合においても、第2の先行ポインタを、進めることが可能な範囲内の最も先のブロックに進めることができるので、書込が完了したブロックを早くコンシューマに供することができる。
第2の追尾ポインタにおいても同じであり、読出完了か否かを示す情報を保持することによって、ブロックの読出が開始順通りに完了しない場合においても、第2の追尾ポインタを最も先のブロックに進めることができるので、読出が完了したブロックを早くプロデューサに供することができる。
さらに、書込完了したか否かを示す情報がなければ、プロデューサは、書込が完了しても、処理を終了することができない場合がある。たとえば、上記の例ではBブロックに対する書込を行うプロデューサは、書込が完了しても、第2の先行ポインタを進めるために、Aブロックの書込が完了し、第2の先行ポインタがBブロックに進められてくるまで、処理を終了することができない。Cブロックのプロデューサも同じである。これでは、Bブロック、Cブロックのプロデューサは、書込が完了しても処理済みのデータを手放すことができないので、システムの処理効率が低下する。
ここで、本発明の第2の方法のように、書込完了したか否かを示す情報を設けることによって、書込が完了したプロデューサたとえばBブロックのプロデューサが、書込完了時にこの情報を更新すれば、Aブロックのプロデューサは、情報を参照して第2の先頭ポインタを進めることができるので、Bブロックのプロデューサは、Aブロックの書込完了を待つ必要がなく、書込が完了次第、処理を終了することができる。
読出についても同じ状況である。
以上の説明の通り、本発明の第2の方法も、安全なマルチアクセスを実現することができる。また、書込または読出が開始順通りに完了しなくても、システムの処理効率の低下を防ぐことができる。
なお、以上の構成要素の任意の組合せ、本発明をシステム、プログラム、プログラムを記憶した記憶媒体として表現したものも、本発明の態様としては有効である。
本発明は、マルチプロセッサや、マルチタスクなど、複数の処理主体を有しうるシステムにおける処理主体間のデータの授受において有利である。
図1は、本発明の第1の実施形態となるマルチプロセッサシステム100の構成を示す。マルチプロセッサシステム100は、複数の処理ユニット10A、複数の処理ユニット10Bと、共有メモリ50と有し、各処理ユニットは、共有メモリ50に接続されている。
マルチプロセッサシステムにおいて、各々のプロセッサがそれぞれの処理ユニットに含まれる形で存在する。これらの処理ユニットは主処理ユニットとサブ処理ユニットとに分けることができる。サブ処理ユニットのすべてが同一のアーキテクチャを用いて実現されてもよく、それぞれ異なる構成を有してもよい。主処理ユニットは、サブ処理ユニットに対してローカルに、たとえばサブ処理ユニットと同一のチップ、同一のパッケージ、同一の回路基板、同一の製品に位置してもよいし、サブ処理ユニットに対してリモートに、たとえばバスやインターネットなどの通信ネットワークを介して接続可能な異なる製品に位置してもよい。同様に、サブ処理ユニットは、互いにローカルにまたはリモートに位置してもよい。
図1に示すマルチプロセッサシステム100における複数の処理ユニット10A、処理ユニット10Bには、主処理ユニットが含まれてもよい。
各処理ユニット10Aは、プロセッサ12A、ローカルメモリ14Aを有し、各処理ユニット10Bは、プロセッサ12B、ローカルメモリ14Bを有する。プロセッサ12Aは、ローカルメモリ14Aに対してデータを読み書きすることができ、プロセッサ12Bは、ローカルメモリ14Bに対してデータを読み書きすることができる。
マルチプロセッサシステム100は、ストリームデータの転送に関するシステムであり、各処理ユニット10Aは、所定の転送単位のストリームデータ(以下、単にデータという)を、共有メモリ50に設けられた、後述するバッファ20に書き込む。各処理ユニット10Bは、処理ユニット10Aにより書き込まれたデータを読み出して転送する。ここで、処理ユニット10Aは、データをバッファ20に書き込む側であるので、プロセッサ12Aはプロデューサとなる。処理ユニット10Bは、データを読み出す側になるので、プロセッサ12Bは、コンシューマである。
処理ユニット10Aまたは処理ユニット10Bのうちのいずれか1つは、バッファ20の使用に関して他の処理ユニットに対するサービスユニットの役割を担う。サービスユニットの役割としては、たとえばバッファ20の初期状態の設定や、後述するポインタの初期設置などである。なお、このサービスユニットは、いずれの処理ユニットによって担当されてもよい。処理ユニット10Aまたは処理ユニット10Bのうちに主処理ユニットがある場合には、このサービスユニットは、主処理ユニットによって担当されることが好ましいが、それに限定することがない。
図2は、共有メモリ50を示す。共有メモリ50は、バッファ20と、ビットマップ30を有し、バッファ20に対して、先行ポインタ44と追尾ポインタ48が設けられている。
図3は、バッファ20を示す。バッファ20は、連続した複数のブロックに分けられており、それぞれのブロックは所定の順序たとえば図中矢印Lにより示される順序で順次循環使用される。ここで、最も先に書込がなされるブロックは図3に示す0番のブロックであり、先行ポインタ44と追尾ポインタ48は、各ブロックが循環使用されるときに、0番のブロックより1つ先に使用されるブロック(図中n番のブロック)を初期位置とする。
なお、最も先にどのブロックから書込を開始するか、ポインタの設置、ポインタの初期位置の決定などは、サービスユニットによって行われる。
図4は、初期状態におけるビットマップ30を示す。図示のように、ビットマップ30は、それぞれバッファ20の各ブロックに1ビットを割り当てたビット列30aとビット列30bとを有し、ブロックが使用中(書込中または読出中)か、書込完了か、読出完了かを示すブロック状態情報である。
また、図4に示すように、ビット列30aの各ビットの初期値が1であり、ビット列30bの各ビットの初期値が0である。
図5は、いずれかのプロデューサ12Aは、ストリームデータをバッファ20に書き込むのに当たり、先行ポインタ44を移動する処理を示す図である。このプロデューサ12Aは、まず、バッファ20における先行ポインタ44を検索する。先行ポインタ44は、n番のブロックを示しているので、プロデューサ12Aは、ビット列30aを参照し、n番のブロックの次のブロック、すなわち0番のブロックに対応するブロックの値を確認する。ここで、0番のブロックに対応するビットの値が初期値の1であるので、プロデューサ12Aは、先行ポインタ44を0番のブロックに進めて、0番に対する書込を開始するとともに、ビット列30番における、0番のブロックに対応するビットの値を0に変更する。
このとき、ほかのいずれかのプロデューサ12Aは、書込を行う準備ができた場合、このプロデューサ12Aも、まずバッファ20における先行ポインタ44を検索する。0番目のブロックの位置に先行ポインタ44があるので、このプロデューサは、ビット列30aを参照し、1番目のブロックに対応するビットの値が1であるので、先行ポインタ44を1番目のブロックに進め、1番目のブロックに対して書込を開始するとともに、ビット列30aにおける、1番目のブロックに対応するビットの値を0に変更する。
同じように、書込を行う準備ができたほかののプロデューサ12Aも、先行ポインタ44を2番目のブロックに進め、2番目のブロックに対して書込を開始するとともに、ビット列30aにおける、2番目のブロックに対応するビットの値を0に変更する処理を行うことができる。
また、いずれかのブロックに対する書込が完了すれば、この書込を行ったプロデューサ12Aは、ビット30列における、このブロックに対応するビットの値を1に変更する。ここで、0番と2番のブロックに対する書込が完了し、ビット列30bにおける、0番と2番のブロックに対応するビットの値が1に変更されたとする。
いずれかのコンシューマ12Bは、読出を開始するのに当たり、まず、バッファ20における追尾ポインタ48を検索する。初期状態では、追尾先行ポインタ48は、n番のブロックを示しているので、コンシューマ12Bは、ビット列30bを参照し、n番のブロックの次のブロック、すなわち0番のブロックに対応するブロックの値を確認する。ここで、0番のブロックに対応するビットの値が0であれば、0番のブロックがまだ書込がなされていない初期状態か書込中かを示し、ビットの値が1であれば、0番のブロックが書込が完了されていることを示す。コンシューマ12Bは、ビット列30bにおける、0番のブロックに対応するビットの値が1である場合に限り、追尾ポインタ48を0番ブロックに進め、0番のブロックに対する読出を開始するとともに、ビット列30bにおける、0番のブロックに対応するビットの値を0に変更する。
図6は、このときのバッファ20の状態およびビット列30aと30bを示す。図示のように、この時点において、先行ポインタ44は最後に書込を開始した2番のブロックを示し、追尾ポインタ48は、最後に読出を開始した0番のブロックを示す。0番、1番のブロックは使用中であり、2番のブロックは書込完了状態にある。この状態は、ビット列30aとビット列30bから読み取ることができ、これについては後述する。
その後、プロデューサ12Aとコンシューマ12Bによる書込と読出が繰り返され、書込と読出の進行にしたがって、先行ポインタ44と追尾ポインタ48の位置、ビット列30aとビット列30bは更新される。
ビット列30aの更新について、具体的には、ブロックに対する読出が完了すれば、このブロックのビット値は、読出を行ったコンシューマ12Bにより1にセットされる。そして、このブロックに対する書込が開始すれば、そのビット値は、書込を開始したプロデューサ12Aにより0にリセットされる。
ビット列30bの更新について、具体的には、ブロックに対する書込が完了すれば、このブロックのビット値は、書込を行ったプロデューサ12Aにより1にセットされる。そして、このブロックに対する読出が開始すれば、そのビット値は、読出を開始したプロデューサにより0にリセットされる。
これによって、ビット列30aのビット値とビット列30bのビット値により、図7に示すように、ビットに対応するブロックは、使用中、書込完了、読出完了のいずれの状態にあるかを示すことができる。
また、先行ポインタ44は、最後に書込が開始されたブロックを示し、プロデューサ12Aは、書込をするのにあたって、バッファ20から先行ポインタ44を検索するとともに、ビット列30aを参照して、先行ポインタ44により示されるブロックの次のブロックが読出完了状態にあるか否かを確認する。ビット列30aにおけるこのブロックのビットの値が1であり、すなわちこのブロックが読出完了状態にあれば、先行ポインタ44をこのブロックに進めて書込を開始するとともに、ビット列30aにこのブロックに対応するビットの値を0にリセットする。
追尾ポインタ48は、最後に読出が開始されたブロックを示し、コンシューマ12Bは、読出をするのにあたって、バッファ20から追尾ポインタ48を検索するとともに、ビット列30bを参照し、追尾ポインタ48により示されるブロックの次のブロックが書込完了状態にあるか否かを確認する。ビット列30bにおけるこのブロックのビットの値が1であり、すなわちこのブロックが書込完了状態にあれば、追尾ポインタをこのブロックに進めて読出を開始するとともに、ビット列30bにこのブロックに対応するビットの値を0にリセットする。
なお、プロデューサ12Aとコンシューマ12Bは、2つのポインタが同じ方向に進行し、互いに追いぬかないという制約の下でポインタの進行を行う。
このように、図1に示すマルチプロセッサシステム100によれば、ビットマップ30と2つのポインタとを併用することによって、安全なマルチアクセスを実現することができる。
図8は、発明の第2の実施形態となるマルチプロセッサシステム200の構成を示す。 マルチプロセッサシステム200は、複数の処理ユニット110と、共有メモリ50と有し、各処理ユニット110は、共有メモリ150に接続されている。マルチプロセッサシステム200における複数の処理ユニット110には、主処理ユニットが含まれてもよい。

各処理ユニット110は、プロセッサ112、ローカルメモリ114を有する。プロセッサ112は、ローカルメモリ114に対してデータを読み書きすることができる。
マルチプロセッサシステム200は、各処理ユニット110が並列に処理を行い、それぞれのプロセッサ112は、処理したデータを、後述するバッファ120に書き込むとともに、書き込んだ後には、バッファ120から、ほかの処理ユニット110により書き込まれたデータを自分のローカルメモリ114にコピーして処理を行う。すなわち、処理ユニット110に含まれるプロセッサ112は、プロデューサとコンシューマのいずれにもなりうる。以下の説明において、同じプロセッサでも、データを書き込む側であるか読み出す側であるかによって、それをプロデューサまたはコンシューマという。
処理ユニット110うちのいずれか1つは、バッファ120の使用に関して他の処理ユニットに対するサービスユニットの役割を担う。サービスユニットの役割としては、たとえばバッファ120の初期状態の設定や、後述するポインタの初期設置などである。なお、このサービスユニットは、いずれの処理ユニットによって担当されてもよい。処理ユニット110のうちに主処理ユニットがある場合には、このサービスユニットは、主処理ユニットによって担当されることが好ましいが、それに限定することがない。
図9は、共有メモリ150を示す。共有メモリ150は、バッファ120と、ビット列130aおよびビット列130bを有し、バッファ120に対して、第1の先行ポインタ144、第2の先行ポインタ145、第1の追尾ポインタ148、第2の追尾ポインタ149が設けられている。なお、ビット列130aは、同時にアクセス可能なプロデューサの数の分のビット幅を有し、ビット列130bは、同時にアクセス可能なコンシューマの数の分のビット幅を有する。ここで、例として、8つの処理ユニット110があるとする。それぞれのプロセッサ112はプロデューサとコンシューマのいずれにもなりうるので、ここで、ビット列130aとビット列130bのビット幅は8ビットとなる。
図10は、バッファ120を示す。バッファ120は、連続した複数のブロックに分けられており、それぞれのブロックは所定の順序たとえば図中矢印Lにより示される順序で順次循環使用される。ここで、最も先に書込がなされるブロックは図10に示す0番のブロックであり、すべてのポインタは、各ブロックが循環使用されるときに、0番のブロックより1つ先に使用されるブロック(図中n番のブロック)を初期位置とする。
なお、最も先にどのブロックから書込を開始するか、ポインタの設置、ポインタの初期位置の決定などは、サービスユニットによって行われる。
ビット列130aの各ビットは、その値が1であるときに、該ビットに対応するブロックが書込完了状態にあることを示し、その値が0であるときに、該ビットに対応するブロックが書込完了状態以外の状態にあることを示す。
ビット列130bの各ビットは、その値が1であるときに、該ビットに対応するブロックが読出完了状態にあることを示し、その値が0であるときに、該ビットに対応するブロックが読出完了状態以外の状態にあることを示す。
図11は、初期状態におけるビット列130aとビット列130bを示す。図示のように、2つのビット列とも、初期状態において各ビットの値が0となっている。
図12は、いずれかの処理ユニット110により書込を開始する前に、サービスユニットが行う処理を示す図である。図示のように、サービスユニットは、いずれかの処理ユニットがデータをバッファ120に書き込むのに先立って、第1の先行ポインタ144と第2の先行ポインタ145を初期位置のn番ブロックから、先頭の0番のブロックに移動するとともに、ビット列130aの各ビットは、0番のブロックから7番のブロックまで計8個のブロックに割り当てる。
ここで、いずれかのプロデューサ112は、データの書込を行うために、まず、バッファ120における第1の先行ポインタ144を検索する。この場合、第1の先行ポインタ144が0番のブロックを示しているので、プロデューサ112は、自分のローカルメモリ114から0番のブロックにデータをコピーすることによって、書込を行う。また、0番のブロックに対する書込の開始に伴って、このプロデューサ112は、第1の先行ポインタ144を次のブロック、すなわち1番のブロックに進める。
このとき、ほかのいずれかのプロデューサ112は、書込を行う準備ができた場合、このプロデューサ112も、まずバッファ120における第1の先行ポインタ144を検索する。1番目のブロックの位置に第1の先行ポインタ144があるので、このプロデューサ112は1番目のブロックに対して書込を開始するとともに、第1の先行ポインタ144を次のブロック、すなわち2番のブロックに進める。このときの各ポインタの位置、ビット列130aの各ビットの値は、図13に示す。第1の先行ポインタ144は、2番のブロックにあり、第2の先行ポインタ145は、0番のブロックにある。ビット列130aの各ビットの値は、0のままであり、0番のブロックから7番のブロックまで、書込が完了したブロックがないことを示している。
0番のブロックに対する書込が完了した際に、書込を行ったプロデューサ112は、第2の先行ポインタ145を進める。その進め先については後述する。また、第2の先行ポインタ145を進めるとともに、ビット列130aを、進め先のブロックから連続した8個のブロックに割り当てる。
サービスユニットは、ビット列130aにおいて、0番のブロックのビットの値が1にセットされると、第1の追尾ポインタ148と第2の追尾ポインタ149を0番のブロックに移動するとともに、ビット列130bの各ビットは、0番のブロックから7番のブロックまで計8個のブロックに割り当てる。これをもって、バッファ120の管理は各処理ユニットに任せられる。
その後、プロデューサ112とコンシューマ112による書込と読出が繰り返され、書込と読出の進行にしたがって、4つのポインタの位置、ビット列130aとビット列130bは更新される。なお、以下の説明において、プロデューサ112とコンシューマ112は、4つのポインタの進行方向が同じであり、第1の先行ポインタ144、第2の先行ポインタ145,第1の追尾ポインタ148、第2の追尾ポインタ149の順で互いに追い抜かない制約の下でポインタを進めるようにしている。
プロデューサ112は、データの書込を行うのにあたって、バッファ120において第1の先行ポインタ144を検索して、第1の先行ポインタ144により示されるブロックに対して書込を行う。また、書込の開始に伴って、第1の先行ポインタ144を次のブロックに進める。
第2の先行ポインタ145により示されるブロック以外のブロックに対する書込が終了したとき、この書込を行ったプロデューサ112は、ビット列130aにおいて、対応するビットの値を1にセットして処理を終了する。
コンシューマ112は、データの読出を行うのにあたって、バッファ120において第1の追尾ポインタ148を検索して、第1の追尾ポインタ148により示されるブロックに対して読出を行う。また、読出の開始に伴って、第1の追尾ポインタ148を次のブロックに進める。
第2の追尾ポインタ149により示されるブロック以外のブロックに対する読出が終了したとき、この読出を行ったコンシューマ112は、ビット列130bにおいて、対応するビットの値を1にセットして処理を終了する。
第2の先行ポインタ145は、このポインタにより示されるブロックの書込の終了後に進められるポインタであり、第2の追尾ポインタ149は、このポインタにより示されるブロックの読出の終了後に進められるポインタである。ここで、図14の状態を例にして、第2の追尾ポインタ149により示されるブロックの読出が終了時に、コンシューマ112が行う処理について説明する。
図14の例では、第1の先行ポインタ144は、9番のブロックまでに進められており、第2の先行ポインタ145は、17番のブロックまでに進められている。第1の追尾ポインタ148は、15番のブロックまでに進められており、14番までのブロックに対して読出が開始されていることを示す。第2の追尾ポインタ149は、11番のブロックまでに進められており、10番までのブロックの読出が完了されていることを示す。
ここで、11番から14番までの4つのブロックは、既に読出が開始されているが、いずれもまだ完了していないとする。ビット列130bは、11番からの8つのブロックに対して割り当てられており、すべてのビットの値が0である。ビット列130bは、第2の追尾ポインタ149の進め先を決定するためのものであり、第2の追尾ポインタは第1の追尾ポインタ148を追い抜くことがないので、第1の追尾ポインタより先のブロックのビットについては値を全部0にする。
11番から14番までの4つのブロックは、読出の開始順が11、12、13、14となっている。しかし、終了順は必ずしも開始順通りではない。ここで、読出の終了順を13、12、11、14に仮定する。
11番、12番、14番のブロックの読出中に、13番のブロックに対する読出が完了すると、読出を行ったコンシューマ112は、ビット列130bにおける、13番のブロックに対応するビット(この例では3番のビット)の値を1にセットして処理を終了する。
12番のブロックのコンシューマ112も、読出が完了すると、ビット列130bにおける、12番のブロックに対応するビット(ここでは2番のビット)の値を1にセットして処理を終了する。
その後、11番のブロックの読出が完了する。11番のブロックが第2の追尾ポインタ149により示されているので、11番の読出を行ったコンシューマ112は、ビット列130bにおける、11番に対応するビット(1番のビット)の値を1にセットするとともに、第2の追尾ポインタの進め先を決めて進める。
このときのビット列130bの各ビットは、図15に示すように、読出が完了したブロック、11番、12番、13番の3つのブロックに対応するビットの値は1であり、そのほかのビットの値は0である。
進め先を決めるのにあたって、コンシューマ112は、アトミックコマンドたとえばclzを用いて、ビット列130bの先頭ビットを起点として、1の値が続いたビットの数を求める。図15に示す例では、3という結果が得られる。コンシューマ112は、得られた結果の分、第2の追尾ポインタ149を進める。図14に示す例では、第2の追尾ポインタ149は、11番のブロックから14番のブロックに進められる。
さらに、このコンシューマ112は、第2の追尾ポインタ149を進めた後に、ビット列130bを、第2の追尾ポインタ149の現在位置からの8個のブロックに割り当て、処理を終了する。
すなわち、第2の追尾ポインタ149により示されるブロックの読出の完了時、読出を行ったコンシューマ112は、ビット列132bにおける、このブロックに対応するビットの値を1にセットするとともに、第2の追尾ポインタ149により示されるブロックから連続し、かつ読出完了状態にあるブロックのうち、第2の追尾ポインタから最も離れたブロックの次のブロックに第2の追尾ポインタ149を進める。そして、ビット列130bを、第2の追尾ポインタ149の現在位置からの8個のブロックに割り当てる。
図16は、このときにおけるポインタの位置、ビット列130bを示している。第2の追尾ポインタ149は14番のブロックに進められており、ビット列130bは、14番からの8つのブロックに対して割り当てられている。
第2の先行ポインタ145についても同じである。第2の先行ポインタ145により示されるブロックの書込の完了時、書込を行ったプロデューサ112は、ビット列132aにおける、このブロックに対応するビットの値を1にセットするとともに、第2の先行ポインタ145により示されるブロックから連続し、かつ書込完了状態にあるブロックのうち、第2の先行ポインタ145から最も離れたブロックの次のブロックに第2の先行ポインタ145を進める。そして、ビット列130aを、第2の先行ポインタ145の現在位置からの8個のブロックに割り当てて処理を終了する。
このように、図8に示すマルチプロセッサシステム200によれば、4つのポインタと2つのビット列を用い、書込と読出の進行にしたがって、ポインタの位置とビット列を更新する。これによって、バッファをロックせずに、安全なマルチアクセスを実現している。さらに、書込または読出の完了順は開始順通りに完了しない場合でも、システムの効率低下を防ぐことができる。
また、書込が完了したかそれ以外かを示す情報(ビット列130a)を、第2の先行ポインタ145から連続した8個のブロックに対してのみ保持することによって、第2の先行ポインタ145を進める際に必要な情報を提供することができるとともに、ビット列130aのビット幅を減らすことができる。ビット列130bについても同じである。これも、システムの処理効率の向上に貢献する。
さらに、第2の先行ポインタ145を進める際に、ビット列130aのみを必要とし、第2の追尾ポインタ149を進める際に、ビット列130bのみを必要とする。ここで、ビット列130aとビット列130bとを別々に保持することによって、第2の先行ポインタ145を進める際に、プロデューサは、ビット列130aのみを有する領域を参照し、第2の追尾ポインタ149を進める際に、コンシューマは、ビット列130bのみを有する領域を参照することになるので、処理が簡単である。
なお、この第2の実施形態に用いられたバッファの管理方法は、図8に示すようなマルチプロセッサシステムにのみならず、図1に示すようなストリームデータを転送するためのマルチプロセッサシステムなど、プロセッサ間でデータを授受するいかなるマルチプロセッサシステムに適用してもよい。
図17は、本発明の第3の実施形態となるマルチプロセッサシステム300を示す。
マルチプロセッサシステム300は、複数の処理ユニット210と、共有メモリ250と有し、各処理ユニット210は、共有メモリ250に接続されている。マルチプロセッサシステム300における複数の処理ユニット210には、主処理ユニットが含まれてもよい。
各処理ユニット210は、プロセッサ212、ローカルメモリ214を有する。プロセッサ212は、ローカルメモリ214に対してデータを読み書きすることができる。
マルチプロセッサシステム300は、各処理ユニット210が並列に処理を行い、それぞれのプロセッサ212は、処理したデータを、後述するバッファ220に書き込むとともに、書き込んだ後には、バッファ220から、ほかの処理ユニット210により書き込まれたデータを自分のローカルメモリ214にコピーして処理を行う。すなわち、処理ユニット210に含まれるプロセッサ212は、プロデューサとコンシューマのいずれにもなりうる。以下の説明において、同じプロセッサでも、データを書き込む側であるか読み出す側であるかによって、それをプロデューサまたはコンシューマという。
処理ユニット210うちのいずれか1つは、バッファ220の使用に関して他の処理ユニットに対するサービスユニットの役割を担う。サービスユニットの役割としては、たとえばバッファ220の初期状態の設定や、後述するビット列のの初期設置などである。なお、このサービスユニットは、いずれの処理ユニットによって担当されてもよい。処理ユニット210のうちに主処理ユニットがある場合には、このサービスユニットは、主処理ユニットによって担当されることが好ましいが、それに限定することがない。
図18は、共有メモリ250を示す。共有メモリ250は、バッファ220と、ビット列230と、ポインタキュー240とを有する。
バッファ220は、連続した複数のブロックに分けられており、各ブロックに対して識別子(ここではブロック番号)が付与されている。
ビット列230は、バッファ220に含まれるブロックの数の分のビット幅を有し、各ビットは、それぞれのブロックに対応している。なお、すべてのビットの初期値が0である。
ポインタキュー240は、書込が完了したブロックの番号を、書込完了順に保持する。初期状態では、空になっている。
いずれかのプロデューサ212は、書込を開始したいときに、書込をしてもいいブロックとして、ビット列230のうち、値が0であるビットに対応するブロックを選出し、このブロックに対して書込を開始する。ブロックに対する書込の開始に伴って、プロデューサ212は、ビット列230における、このブロックに対応するビットの値を1にセットする。
書込が終了すると、プロデューサ212は、書込が終了したブロックの番号をポインタキュー240に入れて、処理を終了する。
コンシューマ212は、読出を開始したいときに、ポインタキュー240を参照し、最も先に書込が完了したブロックの番号を、ポインタキュー240から削除するとともに、この番号に対応するブロックからデータを読み出す。読出が完了すると、ビット列230における、このブロックに対応するビットの値を0にリセットする。
すなわち、ビット列230は、各ブロックが読出完了状態にあるかそれ以外の状態にあるかを示し、ポインタキュー240にあるか否かは、書込完了状態にあるかそれ以外の状態にあるかを示しており、書込完了状態にあるブロックが複数ある場合には完了順も示す。
このように、マルチプロセッサシステム300も、安全なマルチアクセスを実現している。
もちろん、第3の実施形態に用いられたバッファの管理方法も、図17に示すようなマルチプロセッサシステムにのみならず、図1に示すようなストリームデータを転送するためのマルチプロセッサシステムなど、プロセッサ間でデータを授受するいかなるマルチプロセッサシステムに適用してもよい。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
たとえば、図1および図8に示す実施形態のマルチプロセッサシステムにおいて、各ビット列を共有メモリ上のアトミック領域に更新しながら保持することによって、同じく共有メモリ上のバッファの同期を行うするようにしているが、これらのビット列の機能をライブラリとして実装し、バッファを、プロデューサ側のローカルメモリに実装したり、コンシューマ側のローカルメモリに実装するようにしてもよい。
さらに、プロデューサが必要とする情報と、コンシューマが必要とする情報とは異なることに着目し、共有メモリを用いない実装形態を実現してもよい。たとえば、図1に示す実施形態のシステムにおいて、プロデューサが必要とする情報は、読出が完了したか否かを示す情報(図1に示す実施形態においてはビット列30a)と、先行ポインタであり、コンシューマが必要とする情報は、書込が完了したか否かを示す情報(図1に示す実施形態においてはビット列30b)と、追尾ポインタである。そのため、先行ポインタと追尾ポインタは、プロデューサとコンシューマ間で共有する必要がない。プロデューサとコンシューマはひとつずつ存在する場合において、共有する必要のある情報について、プロデューサ、コンシューマのそれぞれがメッセージパッシングの手法を用いて他者に必要な情報を互いに送信しあうことによって共有することができる。具体的には、プロデューサは、書込が完了すれば、書込完了情報を更新してコンシューマに送信し、コンシューマは、受信した情報と、自分が保持している書込完了情報とをたとえばビット列にORしていくことで蓄積するように更新する。読出完了情報についても同じであり、読出が完了したコンシューマは、読出完了情報を更新してプロデューサに送信し、プロデューサは、受信した情報と、自分が保持している読出完了情報とをたとえばORコマンドによって更新する。このような実装態様によって、ビット列の保持に共有メモリを用いずにバッファの同期を実現することができる。
また、上述した実施形態において、例としてプロセッサを処理主体とし、システムとしてはマルチプロセッサシステムとなっているが、本発明によるバッファ管理技術は、処理主体をタスク(プロセス、スレッドなどを含む)としたいかなるマルチタスクシステムにも適用することができる。
本発明にかかる第1の実施形態のマルチプロセッサシステムを示す図である。 図1に示すマルチプロセッサシステムの共有メモリを示す図である。 図2に示す共有メモリに設けられたバッファの初期状態を示す図である。 図2に示す共有メモリに保持されているビットマップの初期状態を示す図である。 ポインタの進行を説明するための図である。 ポインタの進行およびビットマップ情報の更新を説明するための図である。 ビットマップの各ビットのビット値とブロック状態の関係を示す図である。 本発明にかかる第2の実施形態のマルチプロセッサシステムを示す図である。 図8に示すマルチプロセッサシステムの共有メモリを示す図である。 図9に示す共有メモリに設けられたバッファの初期状態を示す図である。 図9に示す共有メモリに保持されている2つのビット列の初期状態を示す図である。 ポインタの進行およびビット列の更新を説明するための図(その1) ポインタの進行およびビット列の更新を説明するための図(その2) 第2の追尾ポインタにより示されるブロックの読出の完了後、第2の追尾ポインタの進め先の決定、およびビット列の更新を説明するための図である。 第2の追尾ポインタにより示されるブロックの読出の完了後に更新されたビット列を示す図である。 第2の追尾ポインタが進められた後のバッファの状態とビット列を示す図である。 本発明の第3の実施形態のマルチプロセッサシステムを示す図である。 図17に示すマルチプロセッサシステムの共有メモリを示す図である。
符号の説明
10A 処理ユニット、 10B 処理ユニット、 12A プロデューサ、 12B コンシューマ、 14A ローカルメモリ、 14B ローカルメモリ 20 バッファ、 30 ビットマップ、 44 先行ポインタ、 48 追尾ポインタ、 50 共有メモリ、 100 マルチプロセッサシステム、 110 処理ユニット、 112 プロセッサ、 114 ローカルメモリ、 120 バッファ、 130a ビット列、 130b ビット列、 144 第1の先行ポインタ、 145 第2の先行ポインタ、 148 第1の追尾ポインタ、 149 第2の追尾ポインタ、 150 共有メモリ、 200 マルチプロセッサシステム、 210 処理ユニット、 212 プロセッサ、 214 ローカルメモリ、 220 バッファ、 230 ビット列、 240 ポインタキュー、 250 共有メモリ。

Claims (25)

  1. 複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序でブロック単位で循環使用されるバッファを管理する方法であって、
    前記プロデューサによる書込中、書込完了、前記コンシューマによる読出中、読出完了のいずれの状態にあるかをブロックに対応づけて示すブロック状態情報を更新しながら保持し、
    前記所定の順序で最も先に書込がなされるブロックに対して、該ブロックを示す先行ポインタと追尾ポインタを設け、
    2つのポインタが同じ方向に進行し、かつ互いに追い抜かない制約の下で、
    先行ポインタにより示されるブロックに対する書込の開始後、次のブロックが読出完了状態にある場合に限り、先行ポインタを次のブロックに進め、
    追尾ポインタにより示されるブロックに対する読出の開始後、次のブロックが書込完了状態にある場合に限り、追尾ポインタを次のブロックに進め
    前記プロデューサは前記先行ポインタに基づきデータの書込を行うブロックを決定し、前記コンシューマは前記追尾ポインタに基づきデータの読出を行うブロックを決定することを特徴とするバッファ管理方法。
  2. 前記プロデューサは必要に応じて前記先行ポインタを参照して、前記バッファに含まれ他のプロデューサが書込み中のブロックと異なるブロックに書込みを行い、前記コンシューマは必要に応じて前記追尾ポインタを参照して、前記バッファに含まれ他のコンシューマが読出し中のブロックと異なるブロックから読出しを行うことを特徴とする請求項1に記載のバッファ管理方法。
  3. 前記先行ポインタおよび前記追尾ポインタを、前記プロデューサおよび前記コンシューマがアクセス可能な共有メモリに保持せしめることを特徴とする請求項1または2に記載のバッファ管理方法。
  4. 複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序で循環使用されるバッファを管理する方法であって、
    書込完了かそれ以外かをブロックに対応づけて示す書込完否情報と、読出完了かそれ以外かをブロックに対応づけて示す読出完否情報とを含むブロック状態情報を更新しながら保持し、
    前記所定の順序で最も先に書込がなされるブロックに対して、該ブロックを示す第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタを設け、 すべてのポインタの進行方向が同じであり、かつ第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタの順で互いに追い抜かない制約の下で、
    ブロックに対する書込の開始後、該ブロックを示す第1の先行ポインタを次のブロックに進め、
    第2の先行ポインタにより示されるブロックの書込の完了後、第2の先行ポインタにより示されるブロックから連続し、かつ書込完了状態にあるブロックのうち、第2の先行ポインタから最も離れたブロックの次のブロックに第2の先行ポインタを進め、
    ブロックに対する読出の開始後、該ブロックを示す第1の追尾ポインタを次のブロックに進め、
    第2の追尾ポインタにより示されるブロックの読出の完了後、第2の追尾ポインタにより示されるブロックから連続し、かつ読出完了状態にあるブロックのうち、第2の追尾ポインタから最も離れたブロックの次のブロックに第2の追尾ポインタを進めることを特徴とするバッファ管理方法。
  5. 書込完否情報を、バッファに同時にアクセス可能なプロデューサの分の、第2の先行ポインタにより示されるブロックを起点として連続したブロックのみに対して持ち、
    読出完否情報を、バッファに同時にアクセス可能なコンシューマの分の、第2の追尾ポインタにより示されるブロックを起点として連続したブロックのみに対して持つことを特徴とする請求項記載のバッファ管理方法。
  6. 複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序で循環使用されるバッファを管理する方法であって、
    書込完了かそれ以外かをブロックに対応づけて示す書込完否情報と、読出完了かそれ以外かをブロックに対応づけて示す読出完否情報とを含むブロック状態情報を更新しながら保持し、
    前記所定の順序で最も先に書込がなされるブロックに対して、該ブロックを示す第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタを設け、 すべてのポインタの進行方向が同じであり、かつ第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタの順で互いに追い抜かない制約の下で、
    前記第1の先行ポインタにより示されるブロックに対する書込の開始後、前記第1の先行ポインタを次のブロックに進め、
    前記第2の先行ポインタにより示されるブロックに対する書込の完了後、前記第2の先行ポインタを先のブロックに進め、
    前記第1の追尾ポインタにより示されるブロックに対する読出の開始後、前記第1の追尾ポインタを次のブロックに進め、
    前記第2の追尾ポインタにより示されるブロックに対する読出の完了後、前記第2の追尾ポインタを先のブロックに進めることを特徴とするバッファ管理方法。
  7. 前記処理主体は、プロセッサであり、
    ブロック状態情報の更新および/またはポインタの進行は、書込または読出を行うプロセッサ、あるいは書込または読出を行ったプロセッサにより行われることを特徴とする請求項1からのいずれか1項記載のバッファ管理方法。
  8. ブロック状態情報を、各ブロックについて2ビットを割り当てたビットマップとして保持し、
    不可分操作によってビットマップの更新を行うことを特徴とする請求項1からのいずれか1項記載のバッファ管理方法。
  9. 複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序でブロック単位で循環使用されるバッファを管理する装置であって、
    前記プロデューサによる書込中、書込完了、前記コンシューマによる読出中、読出完了のいずれの状態にあるかをブロックに対応づけて示すブロック状態情報を保持するブロック状態情報保持部と、
    ブロック状態情報を、書込と読出の進行に伴って更新するブロック状態更新部と、
    前記所定の順序で最も先に書込がなされるブロックに対して、該ブロックを示す先行ポインタと追尾ポインタを設けるポインタ設置部と、
    2つのポインタが同じ方向に進行し、かつ互いに追い抜かない制約の下で、
    先行ポインタにより示されるブロックに対する書込の開始後、次のブロックが読出完了状態にある場合に限り、先行ポインタを次のブロックに進め、
    追尾ポインタにより示されるブロックに対する読出の開始後、次のブロックが書込完了状態にある場合に限り、追尾ポインタを次のブロックに進めるポインタ進行部と
    前記先行ポインタに基づき前記プロデューサによってデータの書込が行われるブロックを決定し、前記追尾ポインタに基づき前記コンシューマによってデータの読出が行われるブロックを決定するブロック決定部と、を有することを特徴とするバッファ管理装置。
  10. 前記ブロック決定部は、前記バッファに含まれ他のプロデューサが書込中のブロックと異なるブロックを、書込を行うブロックとして決定し、前記バッファに含まれ他のコンシューマが読出し中のブロックと異なるブロックを、読出を行うブロックとして決定することを特徴とする請求項9に記載のバッファ管理装置。
  11. 前記先行ポインタおよび前記追尾ポインタは前記プロデューサおよび前記コンシューマがアクセス可能な共有メモリに保持されることを特徴とする請求項9または10に記載のバッファ管理装置。
  12. 複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序で循環使用されるバッファを管理する装置であって、
    書込完了かそれ以外かをブロックに対応づけて示す書込完否情報と、読出完了かそれ以外かをブロックに対応づけて示す読出完否情報とを含むブロック状態情報を保持するブロック状態情報保持部と、
    ブロック状態情報を更新するブロック状態情報更新部と、
    前記所定の順序で最も先に書込がなされるブロックに対して、該ブロックを示す第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタを設けるポインタ設置部と、
    すべてのポインタの進行方向が同じであり、かつ第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタの順で互いに追い抜かない制約の下で、
    ブロックに対する書込の開始後、該ブロックを示す第1の先行ポインタを次のブロックに進め、
    第2の先行ポインタにより示されるブロックの書込の完了後、第2の先行ポインタにより示されるブロックから連続し、かつ書込完了状態にあるブロックのうち、第2の先行ポインタから最も離れたブロックの次のブロックに第2の先行ポインタを進め、
    ブロックに対する読出の開始後、該ブロックを示す第1の追尾ポインタを次のブロックに進め、
    第2の追尾ポインタにより示されるブロックの読出の完了後、第2の追尾ポインタにより示されるブロックから連続し、かつ読出完了状態にあるブロックのうち、第2の追尾ポインタから最も離れたブロックの次のブロックに第2の追尾ポインタを進めるポインタ進行部とを有することを特徴とするバッファ管理装置。
  13. 前記ブロック状態情報保持部は、バッファに同時にアクセス可能なプロデューサの分の、第2の先行ポインタにより示されるブロックを起点として連続したブロックのみに対して書込完否情報を保持し、
    バッファに同時にアクセス可能なコンシューマの分の、第2の追尾ポインタにより示されるブロックを起点として連続したブロックのみに対して読出完否情報を保持することを特徴とする請求項12に記載のバッファ管理装置。
  14. 複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序で循環使用されるバッファを管理する装置であって、
    書込完了かそれ以外かをブロックに対応づけて示す書込完否情報と、読出完了かそれ以外かをブロックに対応づけて示す読出完否情報とを含むブロック状態情報を保持するブロック状態情報保持部と、
    ブロック状態情報を更新するブロック状態情報更新部と、
    前記所定の順序で最も先に書込がなされるブロックに対して、該ブロックを示す第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタを設けるポインタ設置部と、
    すべてのポインタの進行方向が同じであり、かつ第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタの順で互いに追い抜かない制約の下で、
    前記第1の先行ポインタにより示されるブロックに対する書込の開始後、前記第1の先行ポインタを次のブロックに進め、
    前記第2の先行ポインタにより示されるブロックに対する書込の完了後、前記第2の先行ポインタを先のブロックに進め、
    前記第1の追尾ポインタにより示されるブロックに対する読出の開始後、前記第1の追尾ポインタを次のブロックに進め、
    前記第2の追尾ポインタにより示されるブロックに対する読出の完了後、前記第2の追尾ポインタを先のブロックに進めるポインタ進行部と、を有することを特徴とするバッファ管理装置。
  15. 前記処理主体は、プロセッサであり、
    前記ブロック状態情報更新部および/または前記ポインタ進行部は、書込または読出を行うプロセッサ、あるいは書込または読出を行ったプロセッサにより構成されることを特徴とする請求項から14のいずれか1項記載のバッファ管理装置。
  16. 前記ブロック状態情報保持部は、ブロック状態情報として、各ブロックについて2ビットを割り当てたビットマップ保持し、
    前記ブロック状態更新部は、不可分操作によってビットマップの更新を行うことを特徴とする請求項から15のいずれか1項記載のバッファ管理装置。
  17. 複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序でブロック単位で循環使用されるバッファを管理するためのプログラムであって、
    前記プロデューサによる書込中、書込完了、前記コンシューマによる読出中、読出完了のいずれの状態にあるかをブロックに対応づけてなり、書込と読出の進行に伴って更新されるブロック状態情報を保持する機能と、
    前記所定の順序で最も先に書込がなされるブロックに対して、該ブロックを示す先行ポインタと追尾ポインタを設ける機能と、
    2つのポインタが同じ方向に進行し、かつ互いに追い抜かない制約の下で、
    先行ポインタにより示されるブロックに対する書込の開始後、次のブロックが読出完了状態にある場合に限り、先行ポインタを次のブロックに進め、
    追尾ポインタにより示されるブロックに対する読出の開始後、次のブロックが書込完了状態にある場合に限り、追尾ポインタを次のブロックに進める機能と
    前記先行ポインタに基づき前記プロデューサによってデータの書込が行われるブロックを決定し、前記追尾ポインタに基づき前記コンシューマによってデータの読出が行われるブロックを決定する機能と、
    をコンピュータに実行せしめることを特徴とするプログラム。
  18. 前記決定する機能は、前記バッファに含まれ他のプロデューサが書込中のブロックと異なるブロックを、書込を行うブロックとして決定し、前記バッファに含まれ他のコンシューマが読出し中のブロックと異なるブロックを、読出を行うブロックとして決定することを特徴とする請求項17に記載のプログラム。
  19. 前記先行ポインタおよび前記追尾ポインタを保持するメモリへの、前記プロデューサおよび前記コンシューマからのアクセスを受け付ける機能をさらにコンピュータに実行せしめることを特徴とする請求項17または18に記載のプログラム。
  20. 複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序で循環使用されるバッファを管理するためのプログラムであって、
    書込完了かそれ以外か、読出完了かそれ以外かをブロックに対応づけてなり、書込と読出の進行に伴って更新されるブロック状態情報を保持する機能と、
    前記所定の順序で最も先に書込がなされるブロックに対して、該ブロックを示す第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタを設ける機能と、
    すべてのポインタの進行方向が同じであり、かつ第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタの順で互いに追い抜かない制約の下で、
    ブロックに対する書込の開始後、該ブロックを示す第1の先行ポインタを次のブロックに進め、
    第2の先行ポインタにより示されるブロックの書込の完了後、第2の先行ポインタにより示されるブロックから連続し、かつ書込完了状態にあるブロックのうち、第2の先行ポインタから最も離れたブロックの次のブロックに第2の先行ポインタを進め、
    ブロックに対する読出の開始後、該ブロックを示す第1の追尾ポインタを次のブロックに進め、
    第2の追尾ポインタにより示されるブロックの読出の完了後、第2の追尾ポインタにより示されるブロックから連続し、かつ読出完了状態にあるブロックのうち、第2の追尾ポインタから最も離れたブロックの次のブロックに第2の追尾ポインタを進める機能とをコンピュータ実行せしめることを特徴とするプログラム。
  21. 複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序で循環使用されるバッファを管理するためのプログラムであって、
    書込完了かそれ以外か、読出完了かそれ以外かをブロックに対応づけてなり、書込と読出の進行に伴って更新されるブロック状態情報を保持する機能と、
    前記所定の順序で最も先に書込がなされるブロックに対して、該ブロックを示す第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタを設ける機能と、
    すべてのポインタの進行方向が同じであり、かつ第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタの順で互いに追い抜かない制約の下で、
    前記第1の先行ポインタにより示されるブロックに対する書込の開始後、前記第1の先行ポインタを次のブロックに進め、
    前記第2の先行ポインタにより示されるブロックに対する書込の完了後、前記第2の先行ポインタを先のブロックに進め、
    前記第1の追尾ポインタにより示されるブロックに対する読出の開始後、前記第1の追尾ポインタを次のブロックに進め、
    前記第2の追尾ポインタにより示されるブロックに対する読出の完了後、前記第2の追尾ポインタを先のブロックに進める機能とをコンピュータ実行せしめることを特徴とするプログラム。
  22. 複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序でブロック単位で循環使用されるバッファを管理するためのプログラムを記憶した記憶媒体であって、
    前記プログラムは、
    前記プロデューサによる書込中、書込完了、前記コンシューマによる読出中、読出完了のいずれの状態にあるかをブロックに対応づけてなり、書込と読出の進行に伴って更新されるブロック状態情報を保持する機能と、
    前記所定の順序で最も先に書込がなされるブロックに対して、該ブロックを示す先行ポインタと追尾ポインタを設ける機能と、
    2つのポインタが同じ方向に進行し、かつ互いに追い抜かない制約の下で、
    先行ポインタにより示されるブロックに対する書込の開始後、次のブロックが読出完了状態にある場合に限り、先行ポインタを次のブロックに進め、
    追尾ポインタにより示されるブロックに対する読出の開始後、次のブロックが書込完了状態にある場合に限り、追尾ポインタを次のブロックに進める機能と
    前記先行ポインタに基づき前記プロデューサによってデータの書込が行われるブロックを決定し、前記追尾ポインタに基づき前記コンシューマによってデータの読出が行われるブロックを決定する機能と、をコンピュータに実行せしめることを特徴とする記憶媒体。
  23. 前記決定する機能は、前記バッファに含まれ他のプロデューサが書込中のブロックと異なるブロックを、書込を行うブロックとして決定し、前記バッファに含まれ他のコンシューマが読出し中のブロックと異なるブロックを、読出を行うブロックとして決定することを特徴とする請求項22に記載の記憶媒体。
  24. 前記先行ポインタおよび前記追尾ポインタを保持するメモリへの、前記プロデューサおよび前記コンシューマからのアクセスを受け付ける機能をさらにコンピュータに実行せしめることを特徴とする請求項22または23に記載の記憶媒体。
  25. 複数のブロックに分けられ、それぞれのブロックが各処理主体間で転送されるデータの一時的な格納場所として、データを書き込む側の処理主体であるプロデューサと、プロデューサにより書き込まれたデータを読み出す側の処理主体であるコンシューマとによって所定の順序で循環使用されるバッファを管理するためのプログラムを記憶した記憶媒体であって、
    前記プログラムは、
    書込完了かそれ以外か、読出完了かそれ以外かをブロックに対応づけてなり、書込と読出の進行に伴って更新されるブロック状態情報を保持する機能と、
    前記所定の順序で最も先に書込がなされるブロックに対して、該ブロックを示す第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタを設ける機能と、
    すべてのポインタの進行方向が同じであり、かつ第1の先行ポインタ、第2の先行ポインタ、第1の追尾ポインタ、第2の追尾ポインタの順で互いに追い抜かない制約の下で、
    ブロックに対する書込の開始後、該ブロックを示す第1の先行ポインタを次のブロックに進め、
    第2の先行ポインタにより示されるブロックの書込の完了後、第2の先行ポインタにより示されるブロックから連続し、かつ書込完了状態にあるブロックのうち、第2の先行ポインタから最も離れたブロックの次のブロックに第2の先行ポインタを進め、
    ブロックに対する読出の開始後、該ブロックを示す第1の追尾ポインタを次のブロックに進め、
    第2の追尾ポインタにより示されるブロックの読出の完了後、第2の追尾ポインタにより示されるブロックから連続し、かつ読出完了状態にあるブロックのうち、第2の追尾ポインタから最も離れたブロックの次のブロックに第2の追尾ポインタを進める機能とをコンピュータ実行せしめることを特徴とする記憶媒体。
JP2005235580A 2005-08-15 2005-08-15 バッファ管理方法およびバッファ管理装置 Active JP3926374B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2005235580A JP3926374B2 (ja) 2005-08-15 2005-08-15 バッファ管理方法およびバッファ管理装置
PCT/JP2006/310908 WO2007020740A1 (ja) 2005-08-15 2006-05-31 バッファ管理方法およびバッファ管理装置
EP06756828.7A EP1936501B1 (en) 2005-08-15 2006-05-31 Buffer management method and buffer management device
US11/996,359 US7904618B2 (en) 2005-08-15 2006-05-31 Buffer managing method and buffer managing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005235580A JP3926374B2 (ja) 2005-08-15 2005-08-15 バッファ管理方法およびバッファ管理装置

Publications (2)

Publication Number Publication Date
JP2007052510A JP2007052510A (ja) 2007-03-01
JP3926374B2 true JP3926374B2 (ja) 2007-06-06

Family

ID=37757409

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005235580A Active JP3926374B2 (ja) 2005-08-15 2005-08-15 バッファ管理方法およびバッファ管理装置

Country Status (4)

Country Link
US (1) US7904618B2 (ja)
EP (1) EP1936501B1 (ja)
JP (1) JP3926374B2 (ja)
WO (1) WO2007020740A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5132612B2 (ja) * 2009-03-12 2013-01-30 日本電信電話株式会社 データ転送方法および装置
US20110296437A1 (en) * 2010-05-28 2011-12-01 Devendra Raut Method and apparatus for lockless communication between cores in a multi-core processor
JP5738618B2 (ja) * 2011-02-08 2015-06-24 オリンパス株式会社 データ処理装置
CN107078788B (zh) * 2014-11-06 2020-06-30 康普技术有限责任公司 电信系统中下行链路数据的高速捕获和分析
US10223301B2 (en) * 2016-11-29 2019-03-05 International Business Machines Corporation Pre-allocating memory buffers by physical processor and using a bitmap metadata in a control program
US10235310B2 (en) 2016-11-29 2019-03-19 International Business Machines Corporation Deallocation of memory buffer in multiprocessor systems
CN111465919A (zh) * 2017-12-28 2020-07-28 深圳市大疆创新科技有限公司 用于支持可移动平台环境中的低延迟的系统和方法
US10691374B2 (en) * 2018-07-24 2020-06-23 Salesforce.Com, Inc. Repeatable stream access by multiple components
CN110874273B (zh) * 2018-08-31 2023-06-13 阿里巴巴集团控股有限公司 一种数据处理方法及装置
JP2020154805A (ja) * 2019-03-20 2020-09-24 キオクシア株式会社 マルチプロセッサシステム及び共有メモリの制御方法
EP3742748B1 (en) 2019-05-21 2021-07-21 Siemens Gamesa Renewable Energy A/S Method and transfer device for transferring data blocks
CN115437798A (zh) * 2021-06-23 2022-12-06 北京车和家信息技术有限公司 共享内存的数据处理方法、装置、设备和介质
JP2023087414A (ja) * 2021-12-13 2023-06-23 株式会社オートネットワーク技術研究所 車載制御装置、制御方法及びコンピュータプログラム

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69230204T2 (de) * 1991-08-16 2000-02-10 Fujitsu Ltd., Kawasaki Pufferspeicher und Verwaltungsverfahren dafür
JP3406983B2 (ja) * 1994-09-16 2003-05-19 日本電信電話株式会社 プロセス間メッセージ通信方法
US5867734A (en) * 1994-11-21 1999-02-02 Intel Corporation Multiple-reader multiple-writer queue for a computer system
JPH08241186A (ja) * 1995-03-07 1996-09-17 Fujitsu Ltd バッファメモリ管理ユニット及びバッファメモリ管理方法
US6073190A (en) * 1997-07-18 2000-06-06 Micron Electronics, Inc. System for dynamic buffer allocation comprising control logic for controlling a first address buffer and a first data buffer as a matched pair
US6173307B1 (en) * 1998-08-20 2001-01-09 Intel Corporation Multiple-reader multiple-writer queue for a computer system
US6381659B2 (en) * 1999-01-19 2002-04-30 Maxtor Corporation Method and circuit for controlling a first-in-first-out (FIFO) buffer using a bank of FIFO address registers capturing and saving beginning and ending write-pointer addresses
US6304924B1 (en) * 1999-02-02 2001-10-16 International Business Machines Corporation Two lock-free, constant-space, multiple-(impure)-reader, single-writer structures
US6874062B1 (en) * 2000-02-22 2005-03-29 Unisys Corporation System and method for utilizing a hierarchical bitmap structure for locating a set of contiguous ordered search items having a common attribute
JP2001251375A (ja) * 2000-03-06 2001-09-14 Sony Corp 伝送方法、伝送システム、入力装置、出力装置及び伝送制御装置
US6925506B1 (en) * 2000-09-29 2005-08-02 Cypress Semiconductor Corp. Architecture for implementing virtual multiqueue fifos
KR100358178B1 (ko) * 2000-12-27 2002-10-25 한국전자통신연구원 공유메모리 스위치에서의 멀티캐스팅 장치 및 그 방법
US7457894B2 (en) 2001-08-29 2008-11-25 Nxp B.V. Synchronization of non-sequential moving pointers
US7689623B1 (en) * 2002-04-08 2010-03-30 Syncsort Incorporated Method for performing an external (disk-based) sort of a large data file which takes advantage of “presorted” data already present in the input
US7170628B2 (en) * 2002-12-20 2007-01-30 Texas Instruments Incorporated Efficient processing of images in printers
US7302457B2 (en) * 2003-11-12 2007-11-27 Hewlett-Packard Development Company, L.P. Method and apparatus for providing random bits
US7386688B2 (en) * 2004-07-29 2008-06-10 Hewlett-Packard Development Company, L.P. Communication among partitioned devices
US7650386B2 (en) * 2004-07-29 2010-01-19 Hewlett-Packard Development Company, L.P. Communication among partitioned devices

Also Published As

Publication number Publication date
EP1936501A4 (en) 2009-11-11
US7904618B2 (en) 2011-03-08
EP1936501B1 (en) 2018-08-08
WO2007020740A1 (ja) 2007-02-22
JP2007052510A (ja) 2007-03-01
EP1936501A1 (en) 2008-06-25
US20090043927A1 (en) 2009-02-12

Similar Documents

Publication Publication Date Title
JP3926374B2 (ja) バッファ管理方法およびバッファ管理装置
JP6549663B2 (ja) ミドルウェアマシン環境においてマルチノードアプリケーションのためのメッセージキューを提供および管理するためのシステムおよび方法
TWI639118B (zh) 有不同執行優先程度的計算任務的排程和管理
US8028284B2 (en) Data processing system and program for transferring data
US7630388B2 (en) Software defined FIFO memory for storing a set of data from a stream of source data
TWI503750B (zh) 運算任務狀態的封裝
TW201351290A (zh) 處理任務的工作分配控制
KR100895536B1 (ko) 데이터 전송 방법, 시스템 및 컴퓨터 판독가능 매체
JP2006309512A (ja) マルチプロセッサシステム、及びマルチプロセッサシステムのメッセージ伝達方法
US20050182748A1 (en) File system control apparatus
KR20210133257A (ko) 링 버퍼 업데이트들의 핸들링
US20120185672A1 (en) Local-only synchronizing operations
JPH11312141A (ja) バス・ブリッジ
KR102332523B1 (ko) 연산 처리 장치 및 방법
JP2009217721A (ja) マルチプロセッサシステムにおけるデータ同期方法及びマルチプロセッサシステム
JP2003271574A (ja) 共有メモリ型マルチプロセッサシステムにおけるデータ通信方法
CN104142802A (zh) 存储器控制设备和方法
EP0797803B1 (en) Chunk chaining for a vector processor
JP2006079463A (ja) 時系列データ記録用バッファ管理方法、装置、システムおよびプログラム
JP4170330B2 (ja) 情報処理装置
JP2010182199A (ja) ジョブスケジューリングシステム、方法、及びプログラム
JP7080698B2 (ja) 情報処理装置
JP4599438B2 (ja) パイプライン処理装置、パイプライン処理方法及びパイプライン制御プログラム
JP2010026575A (ja) スケジューリング方法およびスケジューリング装置並びにマルチプロセッサシステム
US11782615B2 (en) Information processing system, non-transitory computer-readable recording medium having stored therein storage controlling program, and storage controller

Legal Events

Date Code Title Description
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: 20070227

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070227

R150 Certificate of patent or registration of utility model

Ref document number: 3926374

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

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20110309

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

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20120309

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

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20130309

Year of fee payment: 6

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

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20140309

Year of fee payment: 7

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