JP2007128369A - データ処理システムおよびプログラム - Google Patents

データ処理システムおよびプログラム Download PDF

Info

Publication number
JP2007128369A
JP2007128369A JP2005321572A JP2005321572A JP2007128369A JP 2007128369 A JP2007128369 A JP 2007128369A JP 2005321572 A JP2005321572 A JP 2005321572A JP 2005321572 A JP2005321572 A JP 2005321572A JP 2007128369 A JP2007128369 A JP 2007128369A
Authority
JP
Japan
Prior art keywords
data
block
queue
unit
processing unit
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
JP2005321572A
Other languages
English (en)
Other versions
JP4357473B2 (ja
Inventor
Yasukichi Okawa
保吉 大川
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 JP2005321572A priority Critical patent/JP4357473B2/ja
Priority to US11/590,676 priority patent/US8028284B2/en
Publication of JP2007128369A publication Critical patent/JP2007128369A/ja
Application granted granted Critical
Publication of JP4357473B2 publication Critical patent/JP4357473B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Information Transfer Systems (AREA)

Abstract

【課題】プロセッサ群に含まれる各プロセッサにより協調処理を行うシステムにおいて、プロセッサ群へのデータの転送、またはプロセッサ群からのデータの転送を効率良く行う。
【解決手段】識別子添付部30は、リングバッファである入力キュー20からデータがプロセッサ群40に転送される際に、入力キュー20における、このデータを格納したブロックを示す識別子をタグとしてデータに添付する。プロセッサ群40に含まれるいずれかのプロセッサにより処理されたデータが出力キュー60に転送される際に、ブロック選出部50は、このデータを格納するブロックとして、データに添付されたタグに対応するブロックを出力キュー60の各ブロックから選出する。
【選択図】図2

Description

本発明は、プロセッサ群に含まれる各プロセッサにより協調処理を行うシステムにおいて、プロセッサ群へのデータの転送技術、またはプロセッサ群からのデータの転送技術に関する。
1つのシステムに複数のプロセッサを搭載したマルチプロセッサシステムは、並列に、あるいは協調して処理を実行して処理全体の高速化を図ることができる。複数のプロセッサによる協調処理は、システムにおける一部の処理に適用されるシステムが用いられている。このようなシステムにおいて、協調処理を担う複数のプロセッサ(以下プロセッサ群という)に、たとえばこのプロセッサ群の上流のプロセッサにより生成されたデータを転送する処理、およびこのプロセッサ群の下流のプロセッサに転送する処理が伴う。これらの転送の工夫次第、システムの処理効率が変わってくる。
本発明は上記事情に鑑みてなされたものであり、その目的は、プロセッサ群に含まれる各プロセッサにより協調処理を行うシステムにおいて、プロセッサ群へのデータの転送、またはプロセッサ群からのデータの転送を効率良く行うことができるデータ処理技術を提供することにある。
本発明のある態様は、データ処理システムに関する。このデータ処理システムは、複数のプロセッサと、入力キューと、出力キューと、識別添付部と、ブロック選出部を備える。
入力キューは、所定の配列順位に配列された複数のブロックに分けられ、それぞれのブロックが、複数のプロセッサのいずれかに転送されるデータの転送までの一時的な格納場所として使用され、データの格納がブロックの配列順に、データの転送が格納順に行われる。
出力キューは、入力キューのブロック数と同数であり、かつ入力キューの各ブロックの配列順位と同じ配列順位に配列された複数のブロックに分けられ、それぞれのブロックが、複数のプロセッサのいずれかにより処理されたデータの出力までの一時的な格納場所として使用され、データの出力がブロックの配列順に行われる。
識別添付部は、入力キューから転送されるデータに対して、このデータを格納したブロックの配列順位に対応する識別子を添付する。
ブロック選出部は、出力キューの各ブロックから、プロセッサにより処理されたデータに添付された識別子に対応する配列順位を有するブロックを、このデータを格納するブロックとして選出する。
ブロック選出部は、ブロックの選択後、データに添付された識別子を削除するようにしてもよい。
また、入力キューと出力キューは、リングバッファとして構成されるようにしてもよい。
識別子添付部および/またはブロック選出部は、ライブラリとして構成されるようにしてもよい。
さらに、このデータ処理システムに、入力キューへのデータの格納を制御する格納制御部と、出力キューからデータが出力された総回数をカウントする出力カウンタと、出力カウンタにより得られた総回数を格納制御部に通知する出力回数通知部とを備えてもよい。格納制御部は、入力キューにデータが格納された総回数をカウントする入力カウンタを有し、入力カウンタにより得られた総回数と出力カウンタにより得られた総回数との差が、入力キューのブロック数より小さいことを条件として、入力キューへのデータの格納を許可する。
本発明の別の態様も、データ処理システムに関する。このデータ処理システムは、複数の処理ユニットと、データを生成して、生成したデータを複数の処理ユニットのいずれかに転送する上流処理ユニットと、複数の処理ユニットのいずれかにより処理されたデータを受信する下流処理ユニットとを備える。
上流処理ユニットは、複数のブロックに分けられ、それぞれのブロックが、複数の処理ユニットのいずれかに転送されるデータの転送までの一時的な格納場所として使用される入力キューと、所定の振当規則にしたがって、複数の処理ユニットから、入力キューから転送されるデータの転送先の処理ユニットを順次振り当てる転送先振当部と、転送先振当部により振り当てられた処理ユニットにデータを転送する転送部とを備える。
複数の処理ユニットのそれぞれは、処理したデータを下流処理ユニットに転送する際に、下流処理ユニットにおける、このデータの転送先の場所を示す転送先場所情報を送信する転送先場所情報送信部を備える。
下流処理ユニットは、出力キューと、転送先場所情報保持部と、格納状況情報取得部と、参照先振当部とを備える、
出力キューは、複数のブロックに分けられ、それぞれのブロックが、複数の処理ユニットのいずれかにより転送されたデータの転送先の場所として使用され、このデータが読み出されるまでに一時的に格納する。
転送先場所情報保持部は、複数の処理ユニットのそれぞれに対して設けられ、該処理ユニットから送信されてきた転送先場所情報を保持する。
格納状況情報取得部は、出力キューからデータを読み出す際に必要な、出力キューにおけるデータの格納状況を示す情報を、転送先場所情報保持部を参照して取得する。
参照先振当部は、格納状況情報取得部がいずれの転送先場所情報保持部を参照すべきかを、所定の振当規則にしたがって振り当てる。
また、入力キューと出力キューは、リングバッファとして構成されるようにしてもよい。
転送先振当部と参照先振当部は、ライブラリとして構成されるようにしてもよい。
なお、以上の構成要素の任意の組合せ、本発明を装置、システム、プログラム、プログラムを記憶した記憶媒体として表現したものも、本発明の態様としては有効である。
本発明は、プロセッサ群に含まれる各プロセッサにより協調処理を行うシステムにおいて、プロセッサ群へのデータの転送、またはプロセッサ群からのデータの転送において有利である。
まず、図1に示すようなシステムについて考える。このシステムは、上流処理ユニット、協調処理を行う複数(図示の例では2つ)の処理ユニット、下流処理ユニットから構成される。上流処理ユニットと複数の処理ユニットの間に、入力キューが設けられており、複数の処理ユニットと下流処理ユニットの間に、出力キューが設けられている。
上流処理ユニットは、生成したデータを入力キューに一時的に格納させる。入力キューは、リングバッファとして構成され、図中方向Lに沿った配列順で配列されている。上流処理ユニットは、ブロックの配列順にデータを入力キューに書き込む。入力キューに格納されたデータは、格納順に、上流処理ユニットによりいずれかの処理ユニットに送信されるように、またはいずれかの処理ユニットにより読み出されるように、処理ユニットに転送される。図示の例では、入力キューにおいて、ブロックの配列順にデータA、B、C、Dが書き込まれている。これらのデータは、格納順にいずれかの処理ユニットに転送される。
処理ユニットは、転送されてきたデータを処理し、処理済みのデータを出力キューに転送する。出力キューは入力キューと同じ構成を有する。
ここで、各処理ユニットは同じ速度で処理ができるとは限らない。そのため、先に処理が終了したデータは先に出力キューに書き込まれる。出力キューへのデータの書込がブロックの配列順に行われるので、出力キューにおけるデータの順序は、これらのデータが入力キューに格納された順序と異なってしまうことが起こりうる。
出力キューに格納されたデータは、格納順、すなわちブロックの配列順に読み出されるので、データの順序の変更は、システムにとって不都合である。
図2に示すデータ処理システム100は、本発明者が提案した技術を具現化したものであり、この問題を解決することができる。データ処理システム100は、上流プロセッサ10と、入力キュー20と、識別子添付部30と、プロセッサ群40と、ブロック選出部50と、出力キュー60と、下流プロセッサ70とを有し、上流プロセッサ10と下流プロセッサ70は、共有メモリ80に接続されている。
また、図2などにおいて、様々な処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、CPU、メモリ、その他のLSIで構成することができ、ソフトウェア的には、メモリにロードされた予約管理機能のあるプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
上流プロセッサ10は、マルチスレッドを実行可能であり、各スレッドは、プロセッサ群40に含まれるいずれかのプロセッサにより処理されるデータを生成して入力キュー20に書き込む。また、上流プロセッサ10は、入力キュー20へのデータの書込を制御する格納制御部12を備える。格納制御部12は、上流プロセッサ10が入力キュー20へデータを書き込んだ回数(以下書込総回数という)をカウントする入力カウンタ14を有する。
入力キュー20は、上流プロセッサ10により書き込まれたデータを、このデータがプロセッサ群に読み出されるまでに一時的に格納する。
プロセッサ群40は、複数のプロセッサここでは例として2つのプロセッサ(プロセッサ40A、プロセッサ40B)を含み、これらのプロセッサは、入力キュー20からデータを読み出して処理し、処理済みのデータを出力キュー60に書き込む。
出力キュー60は、プロセッサ群40により処理済みのデータを、このデータが下流プロセッサ70に読み出されるまでに一時的に格納する。
下流プロセッサ70は、出力キュー60からデータを読み出して処理する。また、下流プロセッサ70は、出力キュー60からデータが読み出された回数(以下読出総回数という)をカウントする出力カウンタ72と、出力カウンタ72により得られた読出総回数を共有メモリ80に送信する回数通知部74とを備える。
共有メモリ80は、回数通知部74から送信されてきた読出総回数を更新しながら保持する。
識別子添付部30とブロック選出部50については後述する。
図3は、入力キュー20の構成を示す。入力キュー20は、リングバッファとして構成され、複数ここでは4つのブロックに分けられている。これらのブロックは、20A、20B、20C、20Dの順に配列されている。入力キュー20に対して、ライトポインタ25Aとリードポインタ25Bが設けられている。ライトポインタ25Aは、入力キュー20に格納されたデータのうちの最も新しいデータ、すなわち上流プロセッサ10(具体的には上流プロセッサ10上で実行される各々のスレッド。以下同じ)により最後に書き込んだデータを格納したブロックを示す。リードポインタ25Bは、入力キュー20に格納されたデータのうちの最も古いデータを格納したブロックを示す。ライトポインタ25Aとリードポインタ25Bは、書込と読出にともなってブロックの配列順に沿った方向(図示の例では方向L)に、互いに追い抜かない制約の下で進められる。ライトポインタ25Aの進行は、上流プロセッサ10により行われ、リードポインタ25Bの進行は、プロセッサ群40のうちの、データを読み出すプロセッサにより行われる。
ここでライトポインタ25Aおよびリードポインタ25Bの進行について説明する。ライトポインタ25Aは、次に書込を行うべきのブロックを上流プロセッサ10に指示するものであり、上流プロセッサ10は、ライトポインタ25Aにより示されるブロックに書き込む。
ところで、ライトポインタ25Aにより示されたブロックに、まだプロセッサ群40に転送されていないデータが格納されている場合、または、このブロックに格納されたデータが、プロセッサ群40への転送中である場合において、プロセッサ10が書込を行ってしまうと、前のデータが消えてしまう。そのため、プロセッサ10は、書込に際して、ライトポインタAにより示されるブロックが書込可能な状態にあるか、書込不可能な状態にあるかを確認する必要がある。ここで、「書込可能な状態」は、このブロックに格納されたデータは既に転送された状態を意味し、「書込不可能な状態」は、このブロックに、まだ転送されていないデータが格納されている状態、または、ブロックに格納されたデータが転送中である状態を意味する。
リードポインタ25Bについても同じである。リードポインタ25Bは、次に読出を行うべきのブロックを、入力キュー20からデータを読み出すプロセッサ(プロセッサ群40に含まれるいずれかのプロセッサ)に指示するものであり、このプロセッサは、リードポインタ25Bにより示されるブロックからデータを読み出す。読出に際し、プロセッサは、このブロックが読出可能な状態にあるか、読出不可能な状態にあるかを確認する必要がある。ここで、「読出可能な状態」は、このブロックに、新しいデータが既に書き込まれ、まだ読み出されていない状態を意味し、「読出不可能な状態」は、このブロックにデータがまだデータが書き込まれていない状態、または書込中である状態を示す。
データ処理システム100において、入力キュー20の各ブロックがどのような状態にあるかの把握について、下記のメカニズムを用いる。
入力キュー20の各ブロックの状態を示すブロック状態情報を、書込と読出の進行にともなって更新しながら保持する。このブロック状態情報をたとえば図4の上部に示すビットマップ28を用いる。ビットマップ28には、2つのビット列28aとビット列28bが含まれている。
ビット列28aとビット列28bのそれぞれのビット幅は、入力キュー20のブロック数と同じであり、ここではそれぞれ4ビットとなる。2つのビット列に含まれる各ビットは、入力キュー20の各ブロックとそれぞれ対応する。
ビット列28aは書込側用のビット列であり、初期状態において、各ビットの値が1になっており、各ブロックが「書込可能な状態」にあることを示す。また、これらのビットの値が書込の開始時に「0」にリセットされ、読出の終了時に「1」にセットされる。
ビット列28bは読出側用のビット列であり、初期状態において、各ビットの値が0になっており、各ブロックが「読出不可能な状態」にあることを示す。これらのビット値が書込の終了時に「1」にセットされ、読出の開始時に「0」にリセットされる。
図5は、ビット列28aとビット列28bのビットの値と、該ビットに対応するブロックの状態を示す。
なお、図4の下部に示すように、初期状態において、ライトポインタ25Aとリードポインタ25Bは、入力キュー20の先頭のブロック20Aに配置されている。
上流プロセッサ10は、初期状態における入力キュー20への書込に際し、まずライトポインタ25Aを検索し、ライトポインタ25により示されるブロックの状態を、ビット列28aを参照して確認する。ここで、ライトポインタ25Aがブロック20Aを示しており、ビット列28aにいて、ブロック20Aに対応するビットの値が「1」(ブロック20A:書込可能)になっているため、上流プロセッサ10は、ブロック20Aに対する書込を開始するとともに、ライトポインタ25Aを次のブロック20Bに進める。さらに、読出の開始にともなって、上流プロセッサ10は、ビット列28aにおける、ブロック20Aに対応するビットの値を「1」から「0」にリセットする。
また、上流プロセッサ10は、ブロック20Aに対する書込が終了したとき、ビット列28bにおける、ブロック20Aに対応するビットの値を「0」から「1」にセットする。
この状態において、プロセッサ群40のいずれかのプロセッサは、入力キュー20からデータを読み出すとき、まず、リードポインタ25Bを検索し、リードポインタ25Bにより示されるブロックの状態を、ビット列28bを参照して確認する。ここで、リードポインタ28Bがブロック20Aを示しており、ビット列28bにおいて、ブロック20Aに対応するビットの値が、書込を行った上流プロセッサ10により「1」にセットされているため、読出を行おうとするプロセッサは、ブロック20Aからの読出を開始するとともに、リードポインタ25Bを次のブロックに進める。さらに、読出の開始にともなって、このプロセッサは、ビット列28bにおける、ブロック28Aに対応するビットの値を「1」から「0」にリセットする。
また、このプロセッサは、ブロック20Aからの読出が終了したとき、ビット列28aにおける、ブロック20Aに対応するビットの値を「0」から「1」にセットする。
なお、ライトポインタ25Aとリードポインタ25Bの進行は、同じ方向、かつ互いに追い抜かない制約の下で行われる。
このように、入力キューに対する書込と読出にともなって、ライトポインタ25Aとリードポインタ25Bは進められ、ビット列28aとビット列28bにおけるビットの値は、セットとリセットが繰り返される。
ビットマップ28は、たとえば、上流プロセッサ10とプロセッサ群40からアクセス可能な共有メモリのアトミック領域に設けられ、ビットの更新がアトミック命令によりなされるようにしてもよいし、ライブラリとして実装されるようにしてもよい。
識別子添付部30は、入力キュー20から読み出されるデータに、該データを格納したブロックに対応する識別子を添付する。たとえば、ブロック20A〜ブロック20Dのそれぞれに対応する識別子を1〜4とした場合、ブロック20Aから読み出されるデータには、識別子1が添付される。
図6は、識別子添付部30により識別子が添付されたデータの構造を示す。図示の例では、識別子は、タグとしてデータに添付されている。
なお、ここでは、識別子添付部30は、入力キュー20からデータが読み出される際に識別子を添付しているが、入力キュー20にデータが書き込まれる際にそのデータに対して識別子を添付してもよい。その場合、入力キュー20に格納されたデータは、図6に示す構造で格納されることになる。
プロセッサ群40に含まれるプロセッサは、入力キュー20から読み出したデータを処理し、処理済みのデータを出力キュー60に書き込む。書き込む場所は、ブロック選出部50により選出される。ここで、ブロック選出部50を説明する前に、まず、出力キュー60を説明する。
図7は、出力キュー60の構成を示す。出力キュー60は、入力キュー20と同じようにリングバッファとして構成され、入力キュー20のブロック数と同数の4つのブロックに分けられている。これらのブロックは、入力キュー20のブロックの配列順と同じ配列順に40A、40B、40C、40Dの順に配列されている。出力キュー60に対して、リードポインタ65が設けられている。リードポインタ65は、初期状態においてブロック60Aに配置され、読出にともなってブロックの配列順に沿った方向(図中方向L)に進められる。リードポインタ65の進行は、下流プロセッサ70により行われる。
下流プロセッサ70は、リードポインタ65により示されるブロックのデータを読み出して処理する。この読出にともなって、下流プロセッサ70は、現在位置から次のブロックを示す位置にリードポインタ65を進める。
下流プロセッサ70も、マルチスレッド実行可能であり、出力キュー60からの読出は、それぞれのスレッドにより行われる。各スレッドは読出を行う際に、リードポインタ65により示されるブロックが「読出可能な状態」にあるか否かを知る必要がある。ここで、「読出可能な状態」は、既に書込が終了し、まだ読出が行われていない状態、言い換えれば、「書込中」、「読出中」、「読出完了」のいずれにも該当しない状態を意味する。
この状態を示す情報も、入力キュー20の状態情報と同じように、ビットマップを用いることができる。
図8は、出力キュー60の各ブロックの状態を示すビットマップ68の初期状態を示す。ビットマップ68も、2つのビット列68aとビット列68bを含み、ビット列68aのビットの値は、そのブロックに対して書込が開始されたときに「1」から「0」にリセットされ、読出の終了時に「1」から「0」にリセットされる。ビット列68bのビットの値は、書込の終了時に「0」から「1」にセットされ、読出の開始時に「1」から「0」にリセットされる。
図9は、ビット列68aおよびビット列68bにおけるビットの値と、このビットに対応するブロックの状態との関係を示す。
下流プロセッサ70の各スレッドは、リードポインタ65により示されるブロックが「読出可能」状態にあるときにのみそのブロックの読出をし、読出にともなってリードポインタ65を次のブロックに進める。なお、「読出可能」状態において、図9に示すように、ビット列68aにおいて、そのブロックに対応するビットの値は「1」であり、ビット列68bにおいて、そのブロックに対応するビットの値は「0」である。
このビットマップ68も、入力キュー20のためのビットマップ28と同じように、プロセッサ群40と下流プロセッサ70からアクセス可能な共有メモリのアトミック領域に設けられ、その更新がアトミック命令によりなされるようにしてもよいし、ライブラリとして実行されてもよい。
ここで、ブロック選出部50を説明する。ブロック選出部50は、プロセッサ群40に含まれるいずれかのプロセッサから出力キュー60にデータを書き込む際に、このデータに添付された識別子を参照して、書き込む場所となるブロックを選出する。具体的には、識別子が「1」であれば、この識別子に対応するブロック60Aを、データを書き込むブロックとして選出する。なお、ブロック選出部50は、ブロックの選出後、このブロックに書き込まれるデータに添付された識別子を削除する。
プロセッサ群40のプロセッサは、ブロック選出部50により選出したブロックにデータを書き込む。
格納制御部12は、入力キュー20へデータを書き込む際に、共有メモリ80に保持された読出総回数を参照して制御を行う。具体的には、入力カウンタ14により得られた書込総回数と、共有メモリ80から得た読出総回数との差「(書込総回数−読出総回数)」が、入力キュー20のブロック数(ここでは4)より小さいときにのみ、入力キュー20へのデータの書込を許可する。
図10は、上流プロセッサ10が入力キュー20へ書込を行う際の処理過程を示すフローチャートである。上流プロセッサ10は、入力キュー20への書込に際して、まず、格納制御部12により、共有メモリ80から、下流プロセッサ70の読出総回数を取得する(S10)。格納制御部12は、自身に備えられた入力カウンタ14がカウントした書込総回数からこの読出総回数を引き、得られた値が4より小さいか否かを確認する(S14)。ステップS14が肯定されると(S14:Yes)、格納制御部12は、上流プロセッサ10による書込を許可し、入力キュー20において、ライトポインタ25Aにより示されるブロックにデータが書き込まれる。書込にともなって、格納制御部12の入力カウンタ14は、書込総回数に1を加算して更新する(S18、S20)。
一方、ステップS14が否定されると(S14:No)、格納制御部12は、入力キュー20への書込を禁止する(S30)。
図11は、入力キュー20からのデータの読出から、出力キュー60へのデータの書込までの処理過程を示すフローチャートである。プロセッサ群40に含まれるいずれかのプロセッサにより入力キュー20からデータを読み出す際に、識別子添付部30は、このデータを格納したブロック、すなわちリードポインタ25Bにより示されるブロックに対応する識別子をデータに添付する(S50)。
そして、識別子が添付されたデータは、プロセッサ群40のプロセッサにより読み出されて、処理される(S54、S58)。
プロセッサ群40のプロセッサは、処理したデータを出力キュー60に書き込むが、書き込むブロックは、ブロック選出部50により選出される(S60)。ブロック選出部50は、具体的には、データに添付された識別子を参照し、識別子に対応するブロックを出力キュー60の4つのブロックから選出する。この選出の後、ブロック選出部50は、データに添付された識別子を削除し(S64)、プロセッサ群40のプロセッサは、このデータを、選出されたブロックに書き込む(S70)。
図12は、下流プロセッサ70が出力キュー60からデータを読み出す際の処理過程を示すフローチャートである。下流プロセッサ70は、リードポインタ65により示されるブロックのデータを読み出す(S80)。この読出にともなって、下流プロセッサ70の出力カウンタ72は、読出総回数に1を足して新しい読出総回数を得(S84)、回数通知部74は、新しい読出総回数を共有メモリ80に送信する(S88)。
このように、データ処理システム100によれば、入力キュー20と出力キュー60において、同じ個数のブロックが同じ配列順位で配列されており、入力キュー20から転送されたデータは、入力キュー20における、このデータを格納したブロックの識別子が添付され、プロセッサ群40のいずれかのプロセッサにより処理された後は、出力キュー60における、このデータに添付された識別子に対応するブロックに格納される。そのため、図1に示すようなデータの順序の変更が回避される。
データ処理システム100の格納制御部12による制御は、データ処理システム100にさらなる利益をもたらす。格納制御部12は、入力キュー20と出力キュー60との間に流れるデータの数を、入力キュー20のブロック数より小さいときにのみ、入力キュー20へのデータの格納を許可する。ここで格納制御部12により提供された有利性について説明する。
図13は、図2に示すデータ処理システム100において、格納制御部12を機能させない場合に起こりうる状況を示す。入力キュー20の4つのブロックにそれぞれA、B、C、Dのデータが格納されている状態において、最も先に書き込まれたデータAは、プロセッサ40Aに転送されたとする。入力キュー20は、リングバッファであるので、上流プロセッサ10は、この状態において新しいデータEを生成した場合には、ラップラウンドしてこのデータEを空のブロック(データAが格納されていたブロック)に書き込む。ここでプロセッサ40Bの処理速度がプロセッサ40Aの処理速度より速い場合には、入力キュー20に格納された4つのデータは、B、C、D、Eの順でプロセッサ40Bに転送されることが起こりうる。プロセッサ40Bは、この4つのデータを処理して出力キュー60に転送する際に、この4つのデータは入力キュー20に格納されたときと同じ順位で出力キュー60の4つのブロックにそれぞれ格納される。その後、プロセッサ40Aは、データAの処理を終え、処理済みのデータAを、データEが格納されたブロックに書き込む。このようなことが起きると、データEが消失しまう。
格納制御部12は、結果的に、入力キュー20と出力キュー60との間に流れるデータの数を入力キュー20のブロック数より少ないように制御している。この制御によって、データの順序を保証するとともに、図13に示すようなデータの消失を防ぐことができる。
また、識別子添付部30とブロック選出部50を、ライブラリとして実装することができる。こうすることによって、入力キュー20からデータが転送される際に、および出力キュー60にデータが転送される際にそれぞれ識別子添付部30とブロック選出部50に対応するライブラリを読み込むだけで、図1に示すシステムにおいてもデータの順序保証ができる。
本発明者が提案したこの技術は、複数のプロセッサによる協調処理が階層的に構築されたシステムにも適用することができる。図14は、その一例を示す。このシステムにおいて、入力キュー1と出力キュー1との間、入力キュー2と出力キュー2との間にデータの順序保証を、下記のようにタグを入れ子構造につけることよって実現することができる。
入力キュー1からテータが処理ユニット1および処理ユニット2に転送される際に、このデータを格納したブロックの識別子を第1のタグとして添付する。処理ユニット2により処理済みのデータが、出力キュー1に転送される際に、この第1のタグに対応するブロックにデータを書き込む。処理ユニット1により処理済みのデータが入力キュー2に転送される。入力キュー2からデータが処理ユニット4および処理ユニット5に転送される際に、第1のタグが付けられているデータに、さらに、入力キュー2における、このデータを格納したブロックの識別子を第2のタグとして付ける。処理ユニット4または処理ユニット5から出力キュー2にデータが転送される際に、第2のタグを参照し、第2のタグに対応するブロックにこのデータを書き込む。出力キュー2からデータが処理ユニット3に転送され、処理ユニット3による処理後、出力キュー1に転送される際に、第1のタグを参照して、第1のタグに対応するブロックにこのデータを書き込む。
上述した各システムにおいて、入力キューと出力キューを、上流の処理ユニットと下流の処理ユニットにそれぞれ含まれる態様で実装してもよい。
以下、本発明の第2の実施の形態について説明する。図15は、データ処理システム200を示す。データ処理システム200は、上流処理ユニット110と、処理ユニット群140と、下流処理ユニット160とを有し、上流処理ユニット110と下流処理ユニット160は、共有メモリ190に接続されている。
上流処理ユニット110は、データを生成して、処理ユニット群140のいずれかの処理ユニットに送信する。
処理ユニット群140は、複数の処理ユニットここでは例として2つの処理ユニット(処理ユニット140A、処理ユニット140B)を含み、これらの処理ユニットは、上流処理ユニット110から送信されてきたデータを処理し、処理済みのデータを下流処理ユニット160に送信する。
図16は、上流処理ユニット110の構成を示す。上流処理ユニット110は、プロセッサコア112と、ローカルメモリ114と、プロセッサインタフェース120と、格納制御部134と、転送先振当部136と、識別子添付部138とを有し、ローカルメモリ114は、ソフトウェアにより構成された入力キュー118を含む。
プロセッサコア112は、マルチスレッドを実行可能であり、各スレッドは、生成したデータを入力キュー118に書き込む。
入力キュー118は、図2に示すデータ処理システム100における入力キュー20と同じ構成を有し、ここでその詳細な説明を省略する。
また、格納制御部134と識別子添付部138は、図2に示すデータ処理システム100のおける格納制御部12と識別子添付部30とそれぞれ同じ構成を有する。
転送先振当部136は、所定の振当規則で、処理ユニット群140の各処理ユニットから、上流処理ユニット110がデータを送信する先の処理ユニットを振り当てる。振当規則は、処理ユニット群140の各処理ユニットに送信する順位、回数などを決め、たとえば、「処理ユニット140Aに2回送信後、処理ユニット140Bに1回送信する」などのようなルールを繰り返し適用されるものである。データ処理システム200において、例として2つの処理ユニットに交互1回ずつ送信する振当規則を用いる。
プロセッサインタフェース120は、入力キュー118に格納されたデータを、転送先振当部136により振り当てられた処理ユニットに送信するものであり、その詳細については後述する。
なお、入力キュー118から送信されたデータは、識別子添付部138により、このデータを格納したブロックに対応する識別を添付されている。
図17は、処理ユニット群140に含まれる処理ユニットここでは例として処理ユニット140Aの構成を示す。処理ユニット140Aは、プロセッサコア142と、ローカルメモリ144と、プロセッサインタフェース150、ブロック選出部154とを有し、ローカルメモリ144には、ソフトウェアにより構成された受信キュー146と送信キュー148が含まれる。
プロセッサコア142は、上流処理ユニット110から送信されてきたデータを処理する。
受信キュー146は、上流処理ユニット110から送信されてきたデータを、処理されるまでに一時的に格納するものであり、送信キュー148は、処理済みのデータを下流処理ユニット160に送信する前に一時的に格納するものである。この2つのキューともリングバッファとして構成されている。
プロセッサインタフェース150は、送信キュー148に格納されたデータを下流処理ユニット160に送信し、ブロック選出部154は、図2に示すデータ処理システム100におけるブロック選出部50と同じ機能を有する。
ここで、上流処理ユニット110のプロセッサインタフェース120の詳細について説明する。プロセッサインタフェース120は、入力キュー118に格納されたデータを送信する際に、転送方式としてはたとえばDMA(ダイレクト・メモリ・アクセス)を用いる。プロセッサインタフェース120は、一つのデータを送信するのに当たり、「データ送信」、「送信通知」の2つの処理を順次行う。
「データ送信」は、入力キュー118に格納されたデータを送信する処理であり、たとえばputコマンドを用いて行う。この「データ送信」によって、送信先の処理ユニットのローカルメモリに設けられた受信キュー146にデータが転送される。
「送信通知」は、送信先の処理ユニットに「データを送信した」ことを知らせる信号を送信する処理であり、たとえばsendsigコマンドを用いる。
この2つの処理を実行するコマンドは、プロセッサインタフェース120により発行され、実行されるまでプロセッサインタフェースの120の図示しないDMAキューに格納される。
ここで、送信先の処理ユニットは、「送信通知」処理によって送信されてきた信号を受信すると、データが既に自身の受信キュー146に送信されたとし、受信キュー146からそのデータを読み出すことができるようになる。
ところで、プロセッサインタフェース120のDMAキューに格納されたこの2つの処理を指示するコマンドは、逆の順番で実行される恐れがある。コマンドが逆に実行されると、データが送信される前に「データを送信した」ことを知らせる通知信号が先に送信先の処理ユニットに送信されるというハンドシェイクミスが起きてしまう。
コマンドの実行順序を保証するために、プロセッサインタフェース120は、「送信通知」処理を実行するコマンドに「fence」属性を付けたsendsigfコマンドを用いる。この属性をつけることによって、「データ送信」のためのコマンド「put」が実行されない限り、「送信通知」処理のコマンドが実行されない。これによって、ハンドシェイクミスを防ぐことができる。
プロセッサインタフェース120はこのようにして入力キュー118に格納されたデータを格納順に、処理ユニット群140の処理ユニットの受信キュー146に書き込む。
処理ユニット群140に含まれる処理ユニット140Aと140Bは、それぞれのプロセッサコア142(マルチスレッドの場合にはプロセッサコア142上で動作する各々のスレッド)により、受信キュー146に書き込まれたデータを処理し、処理済みのデータを送信キュー148に書き込む。
プロセッサインタフェース150は、送信キュー148に格納されたデータを下流処理ユニット160に送信する。ここで下流処理ユニット160を説明しながら、プロセッサインタフェース150の詳細を説明する。
図18は、下流処理ユニット160の構成を示す。下流処理ユニット160は、プロセッサコア162と、参照先振当部164と、プロセッサインタフェース166と、ローカルメモリ170と、出力カウンタ182と、回数通知部184とを有し、プロセッサインタフェース166には、レジスタ168が含まれている。
図19は、ローカルメモリ170を示す。ローカルメモリ170には、フラグ受信バッファ172Aとフラグ受信バッファ172B、および出力キュー178が含まれており、これらはソフトウェアにより構成される。
図20は、出力キュー178を示す。出力キュー178は、図2に示すデータ処理システム100における出力キュー60と同じ構成を有し、配列順にブロック178A〜ブロック178Dの4つのブロックに分けられており、それぞれに対応する識別子が1〜4である。また、出力キュー178には、リードポインタ179が設けられている。
フラグ受信バッファ172Aとフラグ受信バッファ172Bは、下流処理ユニット160にデータを送信する処理ユニット140Aと処理ユニット140Bに対応するものである。なお、フラグ受信バッファの数は、下流処理ユニット160にデータを送信する処理ユニットの数と等しく、ここでは2つとなる。フラグ受信バッファ172Aとフラグ受信バッファ172Bは、同じ構成を有し、ここでフラグ受信バッファ172Aを例にして説明する。
図22は、フラグ受信バッファ172Aを示す。フラグ受信バッファ172Aは、リングバッファで構成されたFIFOであり、複数のブロックに分けられている。フラグ受信バッファ172Aには、書込をするためのライトポインタ174と読出をするためのリードポインタ175が設けられている。フラグ受信バッファ172Aへの書込および読出の詳細については後述するが、フラグ受信バッファ172AがリングバッファのFIFOであるため、フラグ受信バッファ172への書込を行う送信側は、フラグ受信バッファ172Aから読出を行う受信側による読出を待たずに次の書込を続けることができる。
ここで処理ユニット群140に含まれる処理ユニット140Aのプロセッサインタフェース150について説明する。プロセッサインタフェース150は、下流処理ユニット160にデータを送信する際に、転送方式としてはたとえばDMAを用いる。プロセッサインタフェース150は、一つのデータを送信するのに当たり、「データ送信」、「フラグデータ送信」「送信通知」の3つの処理を順次行う。
「データ送信」は、送信キュー148に格納されたデータを送信する処理であり、たとえばputコマンドを用いて行う。この「データ送信」によって、下流処理ユニット160のローカルメモリ170に設けられた出力キュー178にデータが転送される。
また、このデータ送信に際して、処理ユニット140Aのブロック選出部154は、データに添付されている識別子を参照して、下流処理ユニット160の出力キュー178の4つのブロックから、書き込む場所となるブロックを選出する。具体的には、識別子が「1」であれば、この識別子に対応するブロック178Aを、データを書き込むブロックとして選出する。なお、ブロック選出部154は、ブロックの選出後、このブロックに書き込まれるデータに添付された識別子を削除する。プロセッサインタフェース150は、ブロック選出部154により選出されたブロックにデータを送信する。
「フラグデータ送信」は、「データ送信」により送信されたデータを格納するブロック、すなわちブロック選出部154により選出したブロックを示すフラグデータを送信する処理であり、putコマンドを用いることができる。出力キュー178は4つのブロックを有するため、このフラグデータは4ビットのデータである。たとえばフラグデータが「0010」であれば、出力キュー178の各ブロックの配列順位に沿って3番目のブロックすなわちブロック178Cにデータを送信したことを意味する。
なお、フラグデータは、送信側の処理ユニットに対して設けられたフラグ受信バッファ送信される。ここで処理ユニット140Aのプロセッサインタフェース150は、フラグデータをフラグ受信バッファ172Aに送信する。
また、プロセッサインタフェース150は、フラグ受信バッファ172Aにおけるライトポインタ174の値を保持しており、フラグデータを送信する際に、ライトポインタ174により示されるブロックにフラグデータを書き込むとともに、ライトポインタ174をブロックの配列方向(図中方向L)に沿って1つ前に進める。
「送信通知」は、下流処理ユニット160に「データを送信した」ことを知らせる信号を送信する処理であり、ここでもハンドシェイクミスを防ぐため、「fence」属性をつけたsendsigfコマンドを用いる。
ここで、プロセッサインタフェース150は、「データを送信した」ことを知らせる信号データとして、自身が属する処理ユニット140Aを示すマスク値を送信する。このマスク値は、下流処理ユニット160がいずれの処理ユニットからデータが送信されてきたかを判別可能にするものであり、たとえば、処理ユニット140Aと処理ユニット140Bのマスク値をそれぞれ「10」と「01」にすることができる。
このマスク値は、下流処理ユニット160のプロセッサインタフェース166に設けられたレジスタ168に送信される。
レジスタ168は、処理ユニット群140に含まれる処理ユニットの数の分だけのビットサイズを有し、ここでは2ビットである。レジスタ168は、いずれかの処理ユニットからマスク値を受信すると、このマスク値に対応するビットを1にセットする。
また、処理ユニット群140に含まれる各処理ユニットのプロセッサインタフェース150は、マスク値を送信する際に、論理ORモードで送信する。これによって、レジスタ168において既に1にセットされたビットが対応する処理ユニットから連続してマスク値を送信されてきた(すなわち、この処理ユニットから下流処理ユニット160にデータを連続送信した)場合においても、この処理ユニットに対応するビットが1に保持される。
さらに、2つの処理ユニット140Aと処理ユニット140Bから同時にマスク値が送信されてきた場合において、マスク値が論理加算されるため、衝突に起因するマスク値の消失を防ぐことができる。
フラグ受信バッファ172Aにフラグデータの送信、およびレジスタ168へのマスク値の送信の目的を説明するために、出力キュー178からのデータの読出に関わる処理を説明する。
プロセッサコア162は、マルチスレッド実行可能であり、これらのスレッドは、出力キュー178からデータを読み出して処理する。出力キュー178からデータを読み出す際に、スレッドは、リードポインタ179により示されるブロックからデータを読み出し、読出の開始とともにリードポインタ179を次のブロックに進める。しかし、リードポインタ179の現在位置のブロックにデータがまだ書き込まれていない場合に読出を行うと、空のデータまたは無効のデータを読み出してしまう結果になる。これを防ぐために、プロセッサコア162は、出力キュー178の各ブロックの状態を示すデータたとえば図21に示すビットマップ176を保持している。このビットマップの各ビットは、出力キュー178の各ブロックにそれぞれ対応し、初期状態においては全てのビット値が「0」になっている。
レジスタ168がマスク値を受信すると、プロセッサコア162にイベントとして通知される。プロセッサコア162は、これに応じて、レジスタ168を参照する。レジスタ168の2ビットのうち、「1」の値にセットされているビットが、該ビットに対応する処理ユニットからデータが送信されたことを示す。ここでたとえば図23に示すように、処理ユニット140Aに対応するビットが「1」にセットされており、処理ユニット140Bに対応するビットが「0」にリセットされている。この場合において、プロセッサコア162は、処理ユニット140Aに対応するフラグ受信バッファ172Aを参照する。
プロセッサコア162は、フラグ受信バッファ172Aの各ブロックのうち、リードポインタ175により示されるブロックに格納されたフラグデータを参照することによって、出力キュー178のいずれのブロックにデータが新たに書き込まれたかを知り、ビットマップ176における、このブロックに対応するビットの値を「1」にセットする。また、プロセッサコア162は、フラグ受信バッファ172Aにおける、参照を行ったブロックに対して、それに格納されたフラグデータを削除するとともに、リードポインタ175を1つ前に進める。プロセッサコア162は、このような参照、ビットマップの更新、フラグデータの削除、リードポインタ175の進行を、ライトポインタ174までのブロックについて順次行う。また、プロセッサコア162は、フラグ受信バッファ172Aにおける、フラグデータが格納されたすべてのブロックに対して参照を行った場合において、レジスタ168における、フラグ受信バッファ172Aに対応するビットの値を「0」にリセットする。なお、フラグデータが格納されたブロックのうち、1つでも参照を行なわなかったブロックが残った場合には、プロセッサコア162は、レジスタ168のビット値を変更しない。
ところで、レジスタ168の2つのビットとも「1」にセットされているときには、プロセッサコア162は、いずれのフラグ受信バッファを参照すべきかについて判断しかねない。このような場合において、下流処理ユニット160の参照先振当部164は、参照すべきフラグ受信バッファをプロセッサコア162に指示する。
参照先振当部164は、所定の振当規則で、2つのフラグ受信バッファから、プロセッサコア162が参照を行うフラグ受信バッファを振り当てる。この振当規則は、システムの設計者に委ねる。ここでは例として、参照先振当部164はラウンドロビン方式で振当を行う。
プロセッサコア162は、参照先振当部164により振り当てられたフラグ受信バッファを参照する。その参照の仕方については、レジスタ168の2ビットのうち、1つのビットのみその値が「1」にセットされている場合と同じである。
このように、プロセッサコア162は、レジスタ168とフラグ受信バッファを参照することによって、出力キュー178についてのビットマップを更新する。
後に、プロセッサコア162上で動作するスレッドは、出力キュー178からデータを読み出す際に、図21に示すビットマップ176を参照して、リードポインタ179により示されるブロックの状態を確認する。具体的には、リードポインタ179により示されたブロックに対応するビット値が「1」である場合に限り読出を行う。なお、スレッドは、読出の開始にともなってリードポインタ179を次のブロックに進めるとともに、ビットマップ176における、このブロックに対応するビットの値を「0」にリセットする。
このように、ビットマップ176を更新しながら保持することにより、プロセッサコア162上で動作するスレッドによる読出が安全にでき、空のデータまたは無効のデータが読み出されることを防ぐことができる。
下流処理ユニット160の出力カウンタ182は、出力キュー178からデータが読み出される度に読出総回数をカウントし、回数通知部184は、出力カウンタ182により得られた読出総回数を共有メモリ190に送信する。
共有メモリ190は、読出総回数を更新しながら保持し、上流処理ユニット110に含まれる格納制御部134に供する。
格納制御部134は、入力キュー118にデータが書き込まれる度に書込総回数をカウントする入力カウンタ(図示せず)を有し、入力カウンタにより得られた書込総回数と、共有メモリ190に保持された読出総回数に基づいて制御を行う。具体的には、書込総回数と、読出総回数との差「(書込総回数−読出総回数)」が、入力キュー118のブロック数(ここでは4)より小さいときにのみ、入力キュー118へのデータの書込を許可する。
このデータ処理システム200において、入力キューからのデータの転送および出力キューへのデータの転送は、データの送信と、データの送信完了を通知する信号の送信を含むいわゆるsignal notification方式で行われている。このような転送方式の転送は、レイテンシが低く、大変優れた技術であるが、送信側と受信側が一対一の場合においてしか適用されない。本実施例では、送信側の上流処理ユニット110に転送先振当部136を、受信側の下流処理ユニット160に参照先振当部164を設けることによって、この技術を「一対多」および「多対一」の転送において実現している。これにより、システム全体の効率向上を図ることができる。
また、図2に示すデータ処理システム100に用いられた、データ順序を保証する技術と、データの消失を防ぐ技術を適用することによって、さらに有利なシステムを実現している。
さらに、データ処理システム200において、入力キュー118、受信キュー146および送信キュー148、出力キュー178を、上流処理ユニット110と、処理ユニット群140の各処理ユニットと、下流処理ユニット160のローカルメモリにそれぞれ実装することによって、DMAでローカルメモリ間において直接データを転送することができ、さらにシステムの効率を高めている。
データ処理システム200は、入力キュー118と出力キュー178は、1つずつしかなく、データ転送ラインが一本しかないが、キューの数を増やして複数の転送ラインを設けてもよい。たとえば、図24に示すシステムのように、2本の転送ラインを設ける。このような複数の転送ラインが設けられたシステムにおいて、同じライン上の入力キューと出力キュー間で転送されるフラグデータに、転送ラインのIDをタグとして添付することによって、異なるラインにおけるキューの同期を単一の通知信号で行うことができる。
なお、データ処理システム100とデータ処理システム200において、共有メモリを利用して読出総回数の通知を行っているが、signal notificationによる直接送信など、下流の処理ユニットまたはプロセッサが上流の処理ユニットまたはプロセッサに読出総回数を通知することができるいかなる方法を用いてもよい。
また、データ処理システム100において、上流プロセッサ10とプロセッサ群40間のデータの送受信および送受信に伴う入力キュー20の管理、プロセッサ群40と下流プロセッサ70間の送受信および送受信に伴う出力キュー60の管理について、signal notificationとフラグデータを用いる方法を適用してもよい。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
本発明の実施の形態によるシステムと比較するためのシステムの例を示す図である。 本発明にかかる第1の実施の形態のデータ処理システムを示す図である。 図2に示すデータ処理システムにおける入力キューを示す図である。 図3に示す入力キューに対する書込および読出に用いるビットマップを示す図である。 図4に示すビットマップのビット値と、入力キューにおけるブロックの状態との関係を示す図である。 図2に示すデータ処理システムにおいて、入力キューから転送されるデータの構造を示す図である。 図2に示すデータ処理システムにおける出力キューを示す図である。 図7に示す出力キューからの読出に用いるビットマップを示す図である。 図8に示すビットマップのビット値と、出力キューにおけるブロックの状態との関係を示す図である。 図2に示すデータ処理システムにおいて、上流プロセッサが入力キューへ書込を行う際の処理過程を示すフローチャートである。 図2に示すデータ処理システムにおいて、入力キューからのデータの読出から、出力キューへのデータの書込までの処理過程を示すフローチャートである。 図2示すデータ処理システムにおいて、出力キューからデータを読み出す処理の過程を示すフローチャートである。 データの消失を説明するための図である。 図2に示すデータ処理システムの技術を適用した別のシステムを示す図である。 本発明にかかる第2の実施の形態のデータ処理システムを示す図である。 図15に示すデータ処理システムにおける上流処理ユニットを示す図である。 図15に示すデータ処理システムにおける処理ユニット群に含まれる処理ユニットを示す図である。 図15に示すデータ処理システムにおける下流処理ユニットを示す図である。 図18に示す下流処理ユニットにおけるローカルメモリを示す図である。 図19に示すローカルメモリに含まれる出力キューを示す図である。 図20に示す出力キューからの読出に用いるビットマップを示す図である。 図19に示すローカルメモリに含まれるフラグ受信バッファを示す図である。 図18に示す下流処理ユニットにおけるプロセッサインタフェース166に含まれるレジスタのビット値と、図22に示すフラグ受信バッファに格納されたフラグデータとの対応する関係を示す図である。 図15に示すデータ処理システムの技術を適用した別のシステムを示す図である。
符号の説明
10 上流プロセッサ、 12 格納制御部、 14 入力カウンタ、 20 入力キュー、 28 ビットマップ、 30 識別子添付部、 40 プロセッサ群、 50 ブロック選出部、 60 出力キュー、 68 ビットマップ、 70 下流プロセッサ、 72 出力カウンタ、74 回数通知部、 80 共有メモリ、 100 データ処理システム、 110 上流処理ユニット、 112 プロセッサコア、 114 ローカルメモリ、 118 入力キュー、 120 プロセッサインタフェース、 134 格納制御部、 136 転送先振当部、 138 識別子添付部、 140 処理ユニット群、 142 プロセッサコア、 144 ローカルメモリ、 146 受信キュー、 148 送信キュー、 150 プロセッサインタフェース、 154 ブロック選出部、 160 下流処理ユニット、 162 プロセッサコア、 164 参照先振当部、 166 プロセッサインタフェース、 168 レジスタ、 170 ローカルメモリ、 172 フラグ受信バッファ、 176 ビットマップ、178 出力キュー、 182 出力カウンタ、 184 回数通知部、 190 共有メモリ。

Claims (13)

  1. 複数のプロセッサと、
    所定の配列順位に配列された2以上の個数のブロックに分けられ、それぞれのブロックが、前記複数のプロセッサのいずれかに転送されるデータの転送までの一時的な格納場所として使用され、データの格納がブロックの配列順に、データの転送が格納順に行われる入力キューと、
    前記所定の配列順位に配列された前記2以上の個数のブロックに分けられ、それぞれのブロックが、前記複数のプロセッサのいずれかにより処理された前記データの出力までの一時的な格納場所として使用され、データの出力がブロックの配列順に行われる出力キューと、
    入力キューから転送されるデータに対して、該データを格納したブロックの配列順位に対応する識別子を添付する識別子添付部と、
    出力キューの各ブロックから、プロセッサにより処理されたデータに添付された識別子に対応する配列順位を有するブロックを、該データを格納するブロックとして選出するブロック選出部とを備えることを特徴とするデータ処理システム。
  2. ブロック選出部は、前記選択後、前記データに添付された識別子を削除することを特徴とする請求項1に記載のデータ処理システム。
  3. 前記入力キューと前記出力キューは、リングバッファとして構成されていることを特徴とする請求項1または2記載のデータ処理システム。
  4. 入力キューへのデータの格納を制御する格納制御部と、
    出力キューからデータが出力された総回数をカウントする出力カウンタと、
    出力カウンタにより得られた総回数を格納制御部に通知する出力回数通知部とをさらに備え、
    格納制御部は、入力キューにデータが格納された総回数をカウントする入力カウンタを有し、
    入力カウンタにより得られた総回数と出力カウンタにより得られた総回数との差が、入力キューのブロック数より小さいことを条件として、入力キューへのデータの格納を許可することを特徴とする請求項3に記載のデータ処理システム。
  5. 複数の処理ユニットと、
    データを生成して、生成したデータを前記複数の処理ユニットのいずれかに転送する上流処理ユニットと、
    前記複数の処理ユニットのいずれかにより処理された前記データを受信する下流処理ユニットとを備え、
    前記上流処理ユニットは、複数のブロックに分けられ、それぞれのブロックが、前記複数の処理ユニットのいずれかに転送される前記データの転送までの一時的な格納場所として使用される入力キューと、
    所定の振当規則にしたがって、前記複数の処理ユニットから、入力キューから転送される前記データの転送先の処理ユニットを順次振り当てる転送先振当部と、
    転送先振当部により振り当てられた処理ユニットに前記データを転送する転送部とを備え、
    それぞれの前記複数の処理ユニットは、処理したデータを前記下流処理ユニットに転送する際に、下流処理ユニットにおける、前記データの転送先の場所を示す転送先場所情報を送信する転送先場所情報送信部を備え、
    前記下流処理ユニットは、複数のブロックに分けられ、それぞれのブロックが、前記複数の処理ユニットのいずれかにより転送された前記データの転送先の場所として使用され、前記データが読み出されるまでに一時的に格納する出力キューと、
    前記複数の処理ユニットのそれぞれに対して設けられた、該処理ユニットから送信されてきた前記転送先場所情報を保持する転送先場所情報保持部と、
    前記出力キューからデータを読み出す際に必要な、前記出力キューにおけるデータの格納状況を示す情報を、前記転送先場所情報保持部を参照して取得する格納状況情報取得部と、
    該格納状況情報取得部がいずれの転送先場所情報保持部を参照すべきかを、所定の振当規則にしたがって振り当てる参照先振当部とを備えることを特徴とするデータ処理システム。
  6. 前記上流処理ユニットと、それぞれの前記複数の処理ユニットと、前記下流処理ユニットは、ローカルメモリを備え、
    前記入力キューは、上流処理ユニットのローカルメモリに構成され、
    それぞれの前記複数の処理ユニットのローカルメモリに、上流処理ユニットから転送されてきたデータを一時的に格納する受信キューと、下流処理ユニットに転送するデータを一時的に格納する送信キューとが構成されており、
    前記出力キューは、下流処理ユニットのローカルメモリに構成され、
    上流処理ユニットと複数の処理ユニット間、および複数の処理ユニットと下流処理ユニット間のデータの転送は、DMA(ダイレクト・アクセス・メモリ)方式で行われることを特徴とする請求項5に記載のデータ処理システム。
  7. 前記入力キューの各ブロックは、所定の配列順で配列されており、データの格納がブロックの配列順に、データの転送が格納順に行われるものであり、
    前記出力キューは、入力キューのブロックの数と同数のブロックに分けられ、各ブロックが前記所定の配列順で配列されており、データの出力がブロックの配列順に行われるものであり、
    前記上流処理ユニットは、入力キューから転送されるデータに対して、該データを格納したブロックの配列順位に対応する識別子を添付する識別子添付部を備え、
    それぞれの前記複数の処理ユニットは、出力キューの各ブロックから、処理ユニットにより処理されたデータに添付された識別子に対応する配列順位を有するブロックを、該データを格納するブロックとして選出するブロック選出部を備えることを特徴とする請求項5または6に記載のデータ処理システム。
  8. 前記入力キューと前記出力キューは、リングバッファとして構成されていることを特徴とする請求項5から7のいずれか1項に記載のデータ処理システム。
  9. 前記上流処理ユニットは、入力キューへのデータの格納を制御する格納制御部を備え、
    前記下流処理ユニットは、出力キューからデータが読み出された総回数をカウントする出力カウンタと、出力カウンタにより得られた総回数を格納制御部に通知する出力回数通知部とを備え、
    格納制御部は、入力キューにデータが格納された総回数をカウントする入力カウンタを有し、
    入力カウンタにより得られた総回数と出力カウンタにより得られた総回数との差が、入力キューのブロック数より小さいことを条件として、入力キューへのデータの格納を許可することを特徴とする請求項8に記載のデータ処理システム。
  10. 複数のプロセッサと、
    所定の配列順位に配列された2以上の個数のブロックに分けられ、それぞれのブロックが、前記複数のプロセッサのいずれかに転送されるデータの転送までの一時的な格納場所として使用され、データの格納がブロックの配列順に、データの転送が格納順に行われる入力キューと、
    前記所定の配列順位に配列された前記2以上の個数のブロックに分けられ、それぞれのブロックが、前記複数のプロセッサのいずれかにより処理された前記データの出力までの一時的な格納場所として使用され、データの出力がブロックの配列順に行われる出力キューとを備えるデータ処理システムにおいて、
    入力キューから転送されるデータに対して、該データを格納したブロックの配列順位に対応する識別子を添付する手順と、
    出力キューの各ブロックから、プロセッサにより処理されたデータに添付された識別子に対応する配列順位を有するブロックを、該データを格納するブロックとして選出するブロック手順とをコンピュータに実行せしめることを特徴とするプログラム。
  11. 前記入力キューと前記出力キューは、リングバッファとして構成されていることを特徴とする請求項10に記載のプログラム。
  12. 複数の処理ユニットと、
    データを生成して、生成したデータを前記複数の処理ユニットのいずれかに転送する上流処理ユニットと、
    前記複数の処理ユニットのいずれかにより処理された前記データを受信する下流処理ユニットとを備え、
    前記上流処理ユニットは、複数のブロックに分けられ、それぞれのブロックが、前記複数の処理ユニットのいずれかに転送される前記データの転送までの一時的な格納場所として使用される入力キューと、
    前記複数の処理ユニットのいずれかに前記データを転送する転送部とを備え、
    それぞれの前記複数の処理ユニットは、処理したデータを前記下流処理ユニットに転送する際に、下流処理ユニットにおける、前記データの転送先の場所を示す転送先場所情報を送信する転送先場所情報送信部を備え、
    前記下流処理ユニットは、複数のブロックに分けられ、それぞれのブロックが、前記複数の処理ユニットのいずれかにより転送された前記データの転送先の場所として使用され、前記データが読み出されるまでに一時的に格納する出力キューと、
    前記複数の処理ユニットのそれぞれに対して設けられた、該処理ユニットから送信されてきた前記転送先場所情報を保持する転送先場所情報保持部と、
    前記出力キューからデータを読み出す際に必要な、前記出力キューにおけるデータの格納状況を示す情報を、前記転送先場所情報保持部を参照して取得する格納状況情報取得部とを備えるデータ処理システムにおいて、
    所定の振当規則にしたがって、前記複数の処理ユニットから、入力キューから転送されるデータの転送先の処理ユニットを前記上流処理ユニットの前記転送部に順次振り当てる手順と、
    前記下流処理ユニットの格納状況情報取得部がいずれの転送先場所情報保持部を参照すべきかを、所定の振当規則にしたがって振り当てる手順とをコンピュータに実行せしめることを特徴とするプログラム。
  13. 前記入力キューと前記出力キューは、リングバッファとして構成されていることを特徴とする請求項12に記載のプログラム。
JP2005321572A 2005-11-04 2005-11-04 データ処理システムおよびプログラム Expired - Fee Related JP4357473B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005321572A JP4357473B2 (ja) 2005-11-04 2005-11-04 データ処理システムおよびプログラム
US11/590,676 US8028284B2 (en) 2005-11-04 2006-10-31 Data processing system and program for transferring data

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005321572A JP4357473B2 (ja) 2005-11-04 2005-11-04 データ処理システムおよびプログラム

Publications (2)

Publication Number Publication Date
JP2007128369A true JP2007128369A (ja) 2007-05-24
JP4357473B2 JP4357473B2 (ja) 2009-11-04

Family

ID=38005147

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005321572A Expired - Fee Related JP4357473B2 (ja) 2005-11-04 2005-11-04 データ処理システムおよびプログラム

Country Status (2)

Country Link
US (1) US8028284B2 (ja)
JP (1) JP4357473B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013058108A (ja) * 2011-09-08 2013-03-28 Fujitsu Ltd タグ管理装置およびタグ管理プログラム
WO2015198395A1 (ja) * 2014-06-24 2015-12-30 株式会社日立製作所 並列計算装置及びその制御方法
JP2017507438A (ja) * 2013-12-31 2017-03-16 エルメス−コム エッセ・エレ・エレ・エッセ Usbディスクを介して制御を交換するための方法、およびその実現を可能にする関連装置

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7802062B2 (en) * 2007-09-28 2010-09-21 Microsoft Corporation Non-blocking variable size recyclable buffer management
JP5588180B2 (ja) * 2010-01-15 2014-09-10 キヤノン株式会社 パターン識別装置及びその制御方法
EP2388707B1 (en) * 2010-05-20 2014-03-26 STMicroelectronics (Grenoble 2) SAS Interconnection method and device, for example for systems-on-chip
JP5888336B2 (ja) * 2011-10-06 2016-03-22 富士通株式会社 データ処理方法、分散処理システムおよびプログラム
US9137173B2 (en) * 2012-06-19 2015-09-15 Advanced Micro Devices, Inc. Devices and methods for interconnecting server nodes
US9395924B2 (en) * 2013-01-22 2016-07-19 Seagate Technology Llc Management of and region selection for writes to non-volatile memory
US9942324B2 (en) * 2015-08-05 2018-04-10 Futurewei Technologies, Inc. Rebalancing and elastic storage scheme with elastic named distributed circular buffers
US10331445B2 (en) * 2017-05-24 2019-06-25 Microsoft Technology Licensing, Llc Multifunction vector processor circuits

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6330582B1 (en) * 1994-03-21 2001-12-11 International Business Machines Corporation Apparatus and method enabling a client to control transaction message traffic between server and client processes
US5872951A (en) * 1996-07-26 1999-02-16 Advanced Micro Design, Inc. Reorder buffer having a future file for storing speculative instruction execution results
JPH10240700A (ja) 1997-02-28 1998-09-11 Hitachi Ltd グラフィックス並列処理装置
US6163839A (en) * 1998-09-30 2000-12-19 Intel Corporation Non-stalling circular counterflow pipeline processor with reorder buffer
US7844799B2 (en) * 2000-12-23 2010-11-30 International Business Machines Corporation Method and system for pipeline reduction
US20030065906A1 (en) * 2001-09-28 2003-04-03 Rakvic Ryan N. ASAP instruction caching
US7243354B1 (en) * 2002-04-08 2007-07-10 3Com Corporation System and method for efficiently processing information in a multithread environment
US7415540B2 (en) * 2002-12-31 2008-08-19 Intel Corporation Scheduling processing threads
US7370129B2 (en) * 2004-12-15 2008-05-06 Microsoft Corporation Retry strategies for use in a streaming environment

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013058108A (ja) * 2011-09-08 2013-03-28 Fujitsu Ltd タグ管理装置およびタグ管理プログラム
JP2017507438A (ja) * 2013-12-31 2017-03-16 エルメス−コム エッセ・エレ・エレ・エッセ Usbディスクを介して制御を交換するための方法、およびその実現を可能にする関連装置
WO2015198395A1 (ja) * 2014-06-24 2015-12-30 株式会社日立製作所 並列計算装置及びその制御方法

Also Published As

Publication number Publication date
US8028284B2 (en) 2011-09-27
US20070106844A1 (en) 2007-05-10
JP4357473B2 (ja) 2009-11-04

Similar Documents

Publication Publication Date Title
JP4357473B2 (ja) データ処理システムおよびプログラム
JP4042945B2 (ja) 共用資源を非同期的に更新するためのインターフェース・システムおよび方法
JP3926374B2 (ja) バッファ管理方法およびバッファ管理装置
US20210019185A1 (en) Compute task state encapsulation
JP2006301894A (ja) マルチプロセッサシステム、及びマルチプロセッサシステムのメッセージ伝達方法
JP2008065713A (ja) マルチプロセッサシステム及び割込み制御方法
JP2006309512A (ja) マルチプロセッサシステム、及びマルチプロセッサシステムのメッセージ伝達方法
JP2006127463A (ja) 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム
US10198365B2 (en) Information processing system, method and medium
US6330625B1 (en) System for initiating multiple read operation requests to multiple copies of a data item and identifying a first one of the requests as having the fastest response time
JP2012043031A (ja) 共有キャッシュメモリ装置
US20120185672A1 (en) Local-only synchronizing operations
JP4814653B2 (ja) リオーダリング装置
CN111290983A (zh) Usb传输设备及传输方法
JP5419134B2 (ja) ベクトルプロセッサ及びベクトル命令発行方法
JPWO2008149657A1 (ja) 入出力制御システム、入出力制御方法、及び、入出力制御プログラム
JP4789269B2 (ja) ベクトル処理装置及びベクトル処理方法
JP2007047968A (ja) マルチプロセッサシステム
EP4068094A1 (en) Lock-free ring buffer
JP5776813B2 (ja) マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法および制御プログラム
CN115801814A (zh) 一种基于串口双fifo缓冲区结构的数据传输方法、系统及存储介质
JP4170330B2 (ja) 情報処理装置
EP2085886A1 (en) Memory management device applied to shared-memory multiprocessor
US11010318B2 (en) Method and apparatus for efficient and flexible direct memory access
WO2007049543A1 (ja) 演算装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080215

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080219

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080418

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090324

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090518

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090609

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090713

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090804

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

Free format text: PAYMENT UNTIL: 20120814

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4357473

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

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20130814

Year of fee payment: 4

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

LAPS Cancellation because of no payment of annual fees