(57)【特許請求の範囲】
【請求項１】
並列的に動作する複数のプロセッサをそなえ、
該複数のプロセッサに、
単一の処理の対象となるデータの塊（以下、チャンクという）を分割した複数の部分集合（以下、サブチャンクという）をそれぞれ格納するプロセッサの集合（以下、ソースデータプロセッサ群という）と、
該ソースデータプロセッサ群に属する各プロセッサに格納された該サブチャンクを構成する、個々に独立して処理を受けることが可能な複数のデータ項目（以下、エンティティという）を、該ソースデータプロセッサ群に属する各プロセッサから転送されて一旦格納するプロセッサの集合（ターゲットデータプロセッサ群；以下、第１プロセッサ群という）と、
該ソースデータプロセッサ群から転送されて該第１プロセッサ群に格納されたデータを、該第１プロセッサ群から送付され、送付されたデータに対する前記処理を実行する第２プロセッサ群とを含み、
該第２プロセッサ群が前記処理を実行するのに先立ち、前記処理の対象となるデータを該ソースデータプロセッサ群から該第１プロセッサ群に属する各プロセッサに分散して格納し、該第１プロセッサ群に属する各プロセッサにおいて格納されたデータを所定規則に従って少なくとも一つのデータグループに予めグルーピングする並列プロセッサ装置であって、
該ソースデータプロセッサ群に属する各プロセッサは、個々に独立して前記サブチャンクを構成する各エンティティに対して所定の評価関数を適用し、各エンティティに対応する該所定の評価関数の出力値を得てから、当該出力値を付加したエンティティを該第１プロセッサ群に属するプロセッサの一つに転送する一方、
該第１プロセッサ群に属する各プロセッサは、該ソースデータプロセッサ群に属する各プロセッサからのエンティティを受理すると、当該エンティティに付加された該所定の評価関数の出力値を参照し、受理したエンティティを、付加された出力値毎に分類して格納するものであり、
該ソースデータプロセッサ群に属する各プロセッサが、該第１プロセッサ群に属する各プロセッサの識別子を第１指定要素とし前記所定の評価関数の出力値を第２指定要素とし、該第１指定要素の識別子をもつプロセッサに該第２指定要素の出力値をもつエンティティをいくつ転送したかを示すカウント値を保持する転送宛先プロセッサ決定用テーブルをそなえ、
該ソースデータプロセッサ群に属する各プロセッサは、転送すべきエンティティに対応する該所定の評価関数の出力値を得ると、前記転送宛先プロセッサ決定用テーブルにおいて当該出力値に対応するカウント値を参照し、当該出力値をもつエンティティを該第１プロセッサ群に属する各プロセッサに対して既にいくつ転送したかを把握し、そのカウント値の最も小さいプロセッサを当該エンティティの転送宛先に決定するとともに、当該カウント値を１だけ増加させることを
特徴とする、並列プロセッサ装置。
【請求項２】
並列的に動作する複数のプロセッサをそなえ、
該複数のプロセッサに、
単一の処理の対象となるデータの塊（以下、チャンクという）を分割した複数の部分集合（以下、サブチャンクという）をそれぞれ格納するプロセッサの集合（以下、ソースデータプロセッサ群という）と、
該ソースデータプロセッサ群に属する各プロセッサに格納された該サブチャンクを構成する、個々に独立して処理を受けることが可能な複数のデータ項目（以下、エンティティという）を、該ソースデータプロセッサ群に属する各プロセッサから転送されて一旦格納するプロセッサの集合（ターゲットデータプロセッサ群；以下、第１プロセッサ群という）と、
該ソースデータプロセッサ群から転送されて該第１プロセッサ群に格納されたデータを、該第１プロセッサ群から送付され、送付されたデータに対する前記処理を実行する第２プロセッサ群とを含み、
該第２プロセッサ群が前記処理を実行するのに先立ち、前記処理の対象となるデータを該ソースデータプロセッサ群から該第１プロセッサ群に属する各プロセッサに分散して格納し、該第１プロセッサ群に属する各プロセッサにおいて格納されたデータを所定規則に従って少なくとも一つのデータグループに予めグルーピングする並列プロセッサ装置であって、
該ソースデータプロセッサ群に属する各プロセッサは、個々に独立して前記サブチャンクを構成する各エンティティに対して所定の評価関数を適用し、各エンティティに対応する該所定の評価関数の出力値を得てから、当該出力値を付加したエンティティを該第１プロセッサ群に属するプロセッサの一つに転送するもので、該第１プロセッサ群に属する全てのプロセッサに１対１に対応して転送対象エンティティを順次蓄積しうる待ち行列機構と、該待ち行列機構に蓄積される該転送対象エンティティの数を検出する蓄積数検出手段とを有して構成される一方、
該第１プロセッサ群に属する各プロセッサは、該ソースデータプロセッサ群に属する各プロセッサからエンティティ受信可能な状態になると、該ソースデータプロセッサ群に属する全てのプロセッサに対して等しい頻度で送信開始指示を送付し、該ソースデータプロセッサ群に属する各プロセッサからのエンティティを受理すると、当該エンティティに付加された該所定の評価関数の出力値を参照し、受理したエンティティを、付加された出力値毎に分類して格納するものであり、
該ソースデータプロセッサ群に属する各プロセッサが、該第１プロセッサ群に属する各プロセッサの識別子を第１指定要素とし前記所定の評価関数の出力値を第２指定要素とし、該第１指定要素の識別子をもつプロセッサに該第２指定要素の出力値をもつエンティティをいくつ転送したかを示すカウント値を保持する転送宛先プロセッサ決定用テーブルをそなえ、
該ソースデータプロセッサ群に属する各プロセッサは、転送すべきエンティティに対応する該所定の評価関数の出力値を得ると、前記転送宛先プロセッサ決定用テーブルにおいて当該出力値に対応するカウント値を参照し、当該出力値をもつエンティティを該第１プロセッサ群に属する各プロセッサに対して既にいくつ転送したかを把握し、そのカウント値の最も小さいプロセッサを当該エンティティの転送宛先に決定するとともに、当該カウント値を、該時点で該蓄積数検出手段により検出された該待ち行列機構内の転送対象エンティティ数に１を加算した値、もしくは、この加算値に０以外の定数を乗算した値だけ増加させることを
特徴とする、並列プロセッサ装置。
【請求項３】
該ソースデータプロセッサ群に属する各プロセッサから該第１プロセッサ群に属する各プロセッサへのエンティティ転送単位が、複数のエンティティの集合体であることを特徴とする、請求項１または請求項２に記載の並列プロセッサ装置。
【請求項４】
並列的に動作する複数のプロセッサをそなえ、
該複数のプロセッサに、
単一の処理の対象となるデータの塊（以下、チャンクという）を分割した複数の部分集合（以下、サブチャンクという）をそれぞれ格納するプロセッサの集合（以下、ソースデータプロセッサ群という）と、
該ソースデータプロセッサ群に属する各プロセッサに格納された該サブチャンクを構成する、個々に独立して処理を受けることが可能な複数のデータ項目（以下、エンティティという）を、該ソースデータプロセッサ群に属する各プロセッサから転送されて一旦格納するプロセッサの集合（ターゲットデータプロセッサ群；以下、第１プロセッサ群という）と、
該ソースデータプロセッサ群から転送されて該第１プロセッサ群に格納されたデータを、該第１プロセッサ群から送付され、送付されたデータに対する前記処理を実行する第２プロセッサ群とを含み、
該第２プロセッサ群が前記処理を実行するのに先立ち、前記処理の対象となるデータを該ソースデータプロセッサ群から該第１プロセッサ群に属する各プロセッサに分散して格納し、該第１プロセッサ群に属する各プロセッサにおいて格納されたデータを所定規則に従って少なくとも一つのデータグループに予めグルーピングする並列プロセッサ装置であって、
該ソースデータプロセッサ群に属する各プロセッサは、個々に独立して前記サブチャンクを構成する各エンティティに対して所定の評価関数を適用し、各エンティティに対応する該所定の評価関数の出力値を得てから、当該出力値を付加した複数のエンティティを一つの転送単位として該第１プロセッサ群に属するプロセッサの一つに転送するもので、該第１プロセッサ群に属する全てのプロセッサに１対１に対応して転送対象エンティティを順次蓄積しうる待ち行列機構と、該待ち行列機構に蓄積される該転送対象エンティティのデータ量を検出する蓄積データ量検出手段とを有して構成される一方、
該第１プロセッサ群に属する各プロセッサは、該ソースデータプロセッサ群に属する各プロセッサからエンティティ受信可能な状態になると、該ソースデータプロセッサ群に属する全てのプロセッサに対して等しい頻度で送信開始指示を送付し、該ソースデータプロセッサ群に属する各プロセッサからのエンティティを受理すると、当該エンティティに付加された該所定の評価関数の出力値を参照し、受理したエンティティを、付加された出力値毎に分類して格納するものであり、
該ソースデータプロセッサ群に属する各プロセッサが、該第１プロセッサ群に属する各プロセッサの識別子を第１指定要素とし前記所定の評価関数の出力値を第２指定要素とし、該第１指定要素の識別子をもつプロセッサに該第２指定要素の出力値をもつエンティティをどれだけ転送したかを示すデータ量を保持する転送宛先プロセッサ決定用テーブルをそなえ、
該ソースデータプロセッサ群に属する各プロセッサは、転送すべきエンティティに対応する該所定の評価関数の出力値を得ると、前記転送宛先プロセッサ決定用テーブルにおいて当該出力値に対応するデータ量を参照し、当該出力値をもつエンティティを該第１プロセッサ群に属する各プロセッサに対して既にどれだけ転送したかを把握し、そのデータ量の最も小さいプロセッサを当該エンティティの転送宛先に決定するとともに、当該データ量を、該時点で該蓄積数検出手段により検出された該待ち行列機構内の転送対象エンティティのデータ量と現在処理中のエンティティのデータ量とを加算した値、もしくは、この加算値に０以外の定数を乗算した値だけ増加させることを
特徴とする、並列プロセッサ装置。
【請求項５】
該第１プロセッサ群に属する各プロセッサは、自プロセッサにおけるグルーピング結果を該複数のプロセッサに含まれる管理用プロセッサに通知するものであり、
該管理用プロセッサは、該第１プロセッサ群に属する各プロセッサからの通知を受け、該第１プロセッサ群に属する各プロセッサに格納されているデータグループを記憶するものであり、
該第２プロセッサ群に属する各プロセッサは、上記データグループについて新たな処理を開始できる状況になると、該管理用プロセッサに対してデータグループの割当を依頼するものであり、
該管理用プロセッサは、該第２プロセッサ群に属する各プロセッサからデータグループの割当依頼を受けると、当該割当依頼を行なったプロセッサに対し、未割当のデータグループの割当を行ない、
該第１プロセッサ群に属する各プロセッサは、該管理用プロセッサによるデータ割当に従い、該第２プロセッサ群に属する各プロセッサに対して該当するデータグループの全データを送付することを特徴とする、請求項１〜請求項４のいずれか一項に記載の並列プロセッサ装置。
【請求項６】
該第１プロセッサ群に属する各プロセッサは、自プロセッサにおけるグルーピング結果として各データグループの識別子と容量とを該複数のプロセッサに含まれる管理用プロセッサに通知するものであり、
該管理用プロセッサは、該第１プロセッサ群に属する各プロセッサからの通知を受け、該第１プロセッサ群に属する各プロセッサに格納されているデータグループの容量を各データグループについて積算し、該第１プロセッサ群全体について各データグループの容量を各データグループの識別子とともに記憶するものであり、
該第２プロセッサ群に属する各プロセッサは、上記データグループについて新たな処理を開始できる状況になると、該管理用プロセッサに対してデータグループの割当を依頼するものであり、
該管理用プロセッサは、該第２プロセッサ群に属する各プロセッサからデータグループの割当依頼を受けると、当該割当依頼を行なったプロセッサに対し、記憶しているデータグループのうち容量の大きいものから順に割当を行ない、
該第１プロセッサ群に属する各プロセッサは、該管理用プロセッサによるデータ割当に従い、該第２プロセッサ群に属する各プロセッサに対して該当するデータグループの全データを送付することを特徴とする、請求項１〜請求項４のいずれか一項に記載の並列プロセッサ装置。
【発明の詳細な説明】
【０００１】
（目次）
産業上の利用分野
従来の技術（図３６〜図４９）
発明が解決しようとする課題（図３６〜図４９）
課題を解決するための手段
作用
実施例
（ａ）第１実施例の説明（図１〜図８）
（ｂ）第２実施例の説明（図９〜図１７）
（ｃ）第３実施例の説明（図１８〜図２０）
（ｄ）第４実施例の説明（図２１〜図２３）
（ｅ）第５実施例の説明（図２４〜図２９）
（ｆ）第６実施例の説明（図３０〜図３５）
発明の効果
【０００２】
【産業上の利用分野】
本発明は、並列的に動作する複数のプロセッサをそなえてなる並列プロセッサ装置に関する。
特に、本発明は、システムが複数の業務を同時並列に行ない、且つ、一つの業務にシステムの部分集合である複数のプロセッサが参加する、いわゆるＭＩＭＤ（Multiple Instruction Multiple Data） 型のシステム（並列プロセッサ装置）における、各プロセッサ間通信および処理実行アルゴリズムに関連する技術である。
【０００３】
【従来の技術】
一般に、プロセッサ数がかなり多い並列プロセッサシステムでは、全てのプロセッサが磁気ディスク記憶装置等の入出力装置（以下、Ｉ／Ｏ装置という）を直接共用することが困難であり、Ｉ／Ｏ装置をプロセッサ間で共用せず、プロセッサ間でデータ交換をＩ／Ｏバスとは別の通信機構、例えばバス構造や通信ネットワーク機構を経由して行なう必要が生じる。本発明もまた、１つのＩ／Ｏ装置が複数のプロセッサから動的共用はされない形態を想定した技術である（ただし、後述する本発明のシステムやプロセッサは、１つのＩ／Ｏ装置が複数のプロセッサから共用される形態でも使用することもできる）。
【０００４】
また、プロセッサ数がかなり多い並列プロセッサシステムでは、ある業務による処理対象である一連のデータ群、例えばＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  ＤａｔａＢａｓｅ）システムにおける１テーブル（リレーション）は、１つのプロセッサのみの配下におかれず、複数のプロセッサが並列的にそのテーブル内のデータを読み出すことにより性能改善を目的として、複数のプロセッサ配下のＩ／Ｏ装置に分割して格納されることが多い。
【０００５】
このような環境で、例えばＲＤＢ処理（Relational Algebra: 関係代数） の一つの選択〔Selection;条件に合致したテーブルの行＝タプル(Tuple；エンティティ，レコードと同意) の抽出〕は、これら対象テーブルを分割格納したプロセッサ群〔以下、本発明では、このプロセッサ群に属するプロセッサをＳ−ＤＰｒ(Source Data Processor)と呼ぶ〕がそれぞれデータを読み出しながらタプル選択を行なえば完了する。
【０００６】
一方、同じ関係代数でも複数のテーブル間の結合である等価結合（ＥｑｕｉｖａｌｅｎｔＪｏｉｎ；同業者には自明の技術であるので、詳細説明は省略）では、Ｓ−ＤＰｒ側のみでは処理は終了しない。結合されるべき２つのテーブルのＳ−ＤＰｒ集合が一致するとは限らず、たとえ集合が一致しても結合されるべきタプル対が全て同一のＳ−ＤＰｒに格納されているとは保証されないからである。
【０００７】
等価結合のようにデータとデータ（ＲＤＢではタプルとタプル）の突き合わせ処理が必要なものを多数のプロセッサで実現する場合、全てのデータ相互の突き合わせを本当に実行（いわゆるＣａｒｔｅｓｉａｎ  Ｐｒｏｄｕｃｔ  処理）  してから条件に合致する組み合わせを選択する方式もあるが、これは処理量がデータ数の自乗に比例して増加し、プロセッサ間の通信頻度が高くなるために並列プロセッサシステムには向かない。プロセッサ演算性能はプロセッサ台数に比例して増加するが、同時に通信頻度も増加してしまい性能向上が見込めなくなる。
【０００８】
これに代わる方式として、ハッシュ結合（Ｈａｓｈ  Ｊｏｉｎ）と呼ばれる等価結合処理方式がある。これは、等価結合の結合キーの値により予めＳ−ＤＰｒ側でタプル群を分類しておき、その分類により作成された各タプル集合（以下、チャンクもしくはバケットと呼ぶ）をそれぞれ１つのプロセッサに転送して、各プロセッサの内部で突き合わせ処理を行なわせるものである。等価結合は結合キーの値が等しいタプル同士の結合を行なう処理であるから、値による分類によって異なるバケットに分類されたタプル間の結合の可能性は無い。
【０００９】
これにより、プロセッサ間で転送されるデータ量はデータの１乗のみ比例し、処理量を激減させることができる。このようなハッシュ結合処理方式の概念も既知のものである。
ただし、ハッシュ結合による等価結合方式でも並列プロセッサシステムの潜在的性能をうまく引き出すことができない要因が存在する。
【００１０】
その要因は、以下の５種類のスキュー（各プロセッサに対する負荷の偏り）として知られ、これらのスキューのために特定のプロセッサに相対的な負荷が集中し、これがボトルネックとなりシステム全体の処理終了時間が延びてしまう。
（Ａ１）初期分布のスキュー
Ｓ−ＤＰｒに分割格納されているデータ量が、そもそも各Ｓ−ＤＰｒ間で異なることにより、タプルの読み出し時間そのものがＳ−ＤＰｒ間でばらつく現象をいう。
【００１１】
（Ａ２）選択率のスキュー
通常、等価結合は、選択（Ｓｅｌｅｃｔｉｏｎ）によって結合対象のタプルを絞り込みながら実行される。この選択は、Ｓ−ＤＰｒによるタプルの読み出し／分類と同時に行なわれる。この選択を通過するタプル数の大小は、転送処理頻度の大小であり、Ｓ−ＤＰｒ間での処理負荷のばらつきを生む。
【００１２】
（Ａ３）再配置のスキュー
結合キーの値による分類は、具体的には通常ハッシュ関数などの評価関数をこの結合キーに対して適用し、その出力を転送先のプロセッサ番号として使用するなどして行なわれる。この評価関数は、現実世界のデータを完全に等量にこれら転送先プロセッサ間で分割することはできない。このため、転送先プロセッサに送付されるタプル数間にバラつきが発生し、転送先プロセッサの処理量に差が出てしまう。
【００１３】
（Ａ４）生成率のスキュー
同一数のタプルが転送先プロセッサに送付されたとしても、そのタプル群の中に結合条件を満たすタプル対がどれだけあるかは不明であり、評価関数による分類とデータの性質との関連に起因する偏りが、結合成立の率、つまり結果タプルの生成率に大きな差を生む可能性がある。結果タプルの生成率の大小は格納処理頻度の大小になるから、転送先プロセッサ間の処理量に差が生じてしまう。
【００１４】
（Ａ５）ＭＩＭＤのスキュー
いずれのプロセッサでも複数の互いに独立な業務を同時並列に実行している可能性があり、しかも業務の質も数も異なっている可能性がある。つまり、ある業務から見て、同一種であるべきプロセッサがその業務に費やすことのできる演算性能・転送性能・Ｉ／Ｏ性能は互いに大きく異なりうる。当然、最も多忙で小さな性能しかその業務に割り振ることのできないプロセッサに、同量の負荷を与えたしまっては処理時間が伸びてしまうことになる。
【００１５】
上述のような各スキューを解消するための手段としては、従来、次のようなものが挙げられる。
（Ｂ１）初期分布のスキューの解消手段
タプル単位でラウンドロビン（Ｒｏｕｎｄ  Ｒｏｂｉｎ）によるＳ−ＤＰｒ間分配を行なうなどして、リレーションの初期格納時にＳ−ＤＰｒの格納データ容量がどのテーブルに対しても等しくなるように制御する。
【００１６】
（Ｂ２）選択率のスキューの解消手段
本質的に回避できないスキューであり、現状、対策は提案されていない。
（Ｂ３）再配置のスキューの解消手段
直接、バケットを「突き合わせを行なうプロセッサ」に集めるのではなく、一度、所定のプロセッサ集合〔以下、本発明では、このプロセッサ集合に属するプロセッサをＴ−ＤＰｒ（Ｔａｒｇｅｔ  Ｄａｔａ  Ｐｒｏｃｅｓｓｏｒ）と呼ぶ〕に均等分配する。つまり、あるバケットの部分集合をサブバケット（サブチャンク）と呼ぶことにすれば、各Ｔ−ＤＰｒに送付されたサブバケットはそれが属するバケットが同じならばＴ−ＤＰｒ間でできるだけ均等になるように分配する。
【００１７】
この後、Ｔ−ＤＰｒ群への前データの分配が終了した時点で各バケットのサイズを調べ、バケットをいくつか組み合わせて「突き合わせを行なうプロセッサ」台数個のほぼ大きさの等しいバケット群に再構成する。これを「バケットサイズチューニング」処理と呼ぶ。このために、Ｓ−ＤＰｒで行なわれる評価関数適用の時点で生成されるバケット数は「突き合わせを行なうプロセッサ」台数の数倍程度生成するようにしておく。
【００１８】
サイズの調整を受けたバケットデータは各「突き合わせを行なうプロセッサ」に集められ、通常の等価結合処理と同様、プロセッサ内部での突き合わせが行なわれる。この段階の転送処理では、どのＴ−ＤＰｒにもほぼ等しい容量のタプル群がほぼ等しい分布で存在するので、初期分布／選択率（選択処理がない）／再配置のスキューとも存在しない。
【００１９】
上述のように１段階だけ余分に転送処理を行なう技術は、一見余計な転送やＩ／Ｏ処理を増加させ性能を犠牲にしているようであるが、現実世界の再配置のスキューは、プロセッサ間負荷を数倍のオーダでばらつかせてしまい、より悪影響があることが判っている。この技術の詳細は「中村・喜連川他、〔スーパデータベースコンピュータ（ＳＤＣ）上での平坦化ハッシュジョインの評価〕並列シンポジウムＪＳＰＰ’９２」他に記述され、公知のものである。
【００２０】
以下では、この方式を「バケット平坦化方式」と略称する。また、「バケット平坦化処理」という言葉を、Ｓ−ＤＰｒからデータを読み出した後、Ｔ−ＤＰｒに全バケットを均等に分割格納するまで（サブバケットの容量情報を収集してバケットサイズチューニングを実際に行なう処理の前）のために使用する。
（Ｂ４）生成率のスキューの解消手段
既知の技術で生成率のスキューに効果的に対応できるものはない。ただし、後述する本発明の技術は生成率のスキューに対応することができる。
【００２１】
（Ｂ５）ＭＩＭＤのスキューの解消手段
Ｓ−ＤＰｒのＭＩＭＤのスキューは、選択率のスキューと同様、本質的に回避できないスキューであり、現状、方式的な対策は提案されていない。ただし、Ｓ−ＤＰｒとしての資源割り当てはそれ以外の動作に対する資源割り当てよりも優先して行ない、Ｓ−ＤＰｒのＭＩＭＤのスキューを具体的に縮小することは既存技術の枠内で実現でき、大きな問題とはならない。
【００２２】
Ｓ−ＤＰｒ以外の動作に関するＭＩＭＤのスキューに対して効果的に対応できる既知技術はない。ただし、後述する本発明の技術はＴ−ＤＰｒの動作に関するＭＩＭＤのスキューを低減することができる。
以下に、図３６〜図４９により、既存の技術について説明する。
図３６は、並列プロセッサシステムで等価結合（Ｅｑｕｉｖａｌｅｎｔ  Ｊｏｉｎ）を、「バケット平坦化方式」を使用したハッシュ結合（Ｈａｓｈ  Ｊｏｉｎ）により実行するための既存技術を示すブロック図である。
【００２３】
なお、以下に説明する既存の技術は、「Ｍ．Ｋｉｔｓｕｒｅｇａｗａ，Ｓ．Ｈｉｒａｎｏ，Ｍ．Ｈａｒａｄａ，Ｍ．Ｎａｋａｍｕｒａ，Ｍ．Ｔａｋａｇｉ．Ｔｈｅ  Ｓｕｐｅｒ  Ｄａｔａｂａｓｅ  Ｃｏｍｐｕｔｅｒ（ＳＤＣ）：Ｓｙｓｔｅｍ  Ａｒｃｈｉｔｅｃｔｕｒｅ，Ａｌｇｏｒｉｔｈｍ  ａｎｄ  Ｐｒｅｌｉｍｉｎａｒｙ  Ｅｖａｌｕａｔｉｏｎ．Ｉｎ  Ｐｒｏｃ．ｏｆ  ｔｈｅ  ２５ｔｈ  Ｈａｗａｉｉ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｓｙｓｔｅｍ  Ｓｃｉｅｎｃｅｓ  ｐｐ．３０８−３１９（ＨＩＣＳＳ−２５），１９９２．１」、および、「田村、中村、喜連川、高木。スーパーデータベースコンピュータ（ＳＤＣ）のバケット平坦化ネットワークにおける縮退動作支援アルゴリズムとその評価：ＳＷＯＰＰ  ９２．  日向難サマーワークショップ、情報処理学会、計算機アーキテクチャ研究会Ｖｏｌ．１９５，Ｎｏ．１６  １１９−１２６，１９９２」から引用した基本技術に基づくものである。
【００２４】
また、以下に示す動作は、等価結合全体の動作ではなく、従来技術と本発明との差である「バケット平坦化処理」の部分のみに関するものである。
図３６において、１００は複数のプロセッサ１００Ａ，１００Ｂ，…，１００Ｃからなるプロセッサ群で、このプロセッサ群１００に属する各プロセッサ１００Ａ〜１００Ｃは、データをＩ／Ｏ装置から読み出し、必要な選択処理および分類処理を行なって、分類結果（バケットＩＤ）および業務の識別子をタプルに付加してネットワーク機構２００に送付するもの、つまり前述したＳ−ＤＰｒである。
【００２５】
ここで、ネットワーク機構２００は、Ｓ−ＤＰｒ群１００から投入された個々のタプルに対して自律的に送付先を決定する機能をもつインテリジェントなもので、例えば図３７，図３８にて後述するように構成されている。
３００は複数のプロセッサ３００Ａ，３００Ｂ，…，３００Ｃからなるプロセッサ群で、このプロセッサ群３００に属する各プロセッサ３００Ａ〜３００Ｃは、ネットワーク機構２００からタプルデータとこれに付加されたバケットＩＤや業務識別子とを受理し、各バケットＩＤ毎の受理タプル数の計数を行なった上、各自のＩ／Ｏ装置（後述）にバケットＩＤ毎に分類／格納するもの、つまり前述したＴ−ＤＰｒである。
【００２６】
なお、物理的には、各Ｔ−ＤＰｒ１００Ａ〜１００Ｃと各Ｓ−ＤＰｒ３００Ａ〜３００Ｃとは同一のプロセッサである場合もありうるが、ここでは説明のために送受信プロセッサはあたかも常に別プロセッサであるかのように図示および説明する。
図３７はネットワーク機構２００の内部構造を示すブロック図で、この図３７に示すネットワーク機構２００は、２入力２出力のスイッチングユニット２０１〜２１２がΩ網と呼ばれる結合トポロジで相互に結合されて構成され、８台のＳ−ＤＰｒと８台のＴ−ＤＰｒとを結合して相互に通信可能にする８入力８出力のスイッチング機構となっている。
【００２７】
図３８はスイッチングユニット２０１〜２１２の内部構造を示すブロック図である。この図３８において、２６０，２６１は各スイッチングユニット２０１〜２１２への入力線、２６２，２６３は各スイッチングユニット２０１〜２１２からの出力線である。２２０，２２１はそれぞれ入力線２６０，２６１を通じて入力されたタプルを保持する入力レジスタ、２２４，２２５はそれぞれ出力線２６２，２６３を通じて出力されるべきタプルを保持する出力レジスタである。２２２，２２３はそれぞれ入力レジスタ２２０，２２１に格納されたデータのうちいずれか一方を選択して出力レジスタ２２４，２２５に投入するセレクタ回路である。
【００２８】
２３０は各スイッチングユニット２０１〜２１２の動作を決定する演算回路、２４０はこの演算回路２３０の動作上必要な情報を保持するメモリである。このメモリ２４０には、当該スイッチングユニット２０１〜２１２を経由してタプル転送を行なう可能性のある各業務に対応して作業テーブル２５０〜２５２が格納されている。図３８に示す例では、当該スイッチングユニット２０１〜２１２を経由してタプル転送を行なう可能性のある業務が３つであるものと仮定する。
【００２９】
２６４は図示しない制御プロセッサから各２０１〜２１２への入力線で、業務開始に先立ち、この入力線２６４を通じて、各スイチイングユニット２０１〜２１２の出力線２６２および２６３を経由してそれぞれ到達することのできる各業務にとってのＴ−ＤＰｒの数が、図３９に示すように、制御プロセッサから各テーブル２５０〜２５２のフィールド２８０，２８１に記入されるようになっている。
【００３０】
図３９は、上述したメモリ２４０に格納される作業テーブル２５０〜２５２の内容を示す図で、この図３９において、２７０〜２７９は各業務で使用されるバケットＩＤに対応して設けられる符号（±）付き計数値を保持するフィールドで、これらのフィールド２７０〜２７９における値は、業務開始に先立って“０”にリセットされるようになっている。また、フィールド２８０および２８１には、前述の通り、２本の出力線２６２および２６３に対応して、それぞれの出力線２６２，２６３から到達することのできる、各業務にとってのＴ−ＤＰｒの数が保持される。
【００３１】
図４０は、各スイッチングユニット２０１〜２１２の入出力データ（転送データ）の論理的フォーマットを示す図で、この図４０において、２９０は当該転送データの転送モード等を示す制御情報フィールドで、少なくとも以下の情報▲１▼および▲２▼を保持するものである。
▲１▼転送モード：本説明がその対象とする「バケット平坦化」のために各スイッチングユニット２０１〜２１２があるタプルの転送方向を自ら決定するモード（バケット平坦化モード）と、動作上の指示情報を送ったりここで注目する種類の業務ではない場合など特定のプロセッサ間の通信のために送受信を行なうモード（通常モード）とのいずれがこの転送データに対して適用されるべきかを指定する。
【００３２】
▲２▼フォーマット情報：バケットＩＤなどの後述するフィールドはバケット平坦化処理でこそ必要だが他の一般のメッセージ送付では必要ない場合もある。このように転送データのフォーマットに何種類かあることが想像され、その内どの形態（フォーマット）が使用されるかがこのフィールドに記述される。
また、図４０において、２９１は当該転送データの発信源であるＳ−ＤＰｒのプロセッサ識別子を保持するフィールドで、このフィールド２９１は、転送モードが通常モードである時、各スイッチングユニット２０１〜２１２のスイッチング方向の決定に使用されるが、通常モードの動作詳細は同業者には自明であるので、その説明は省略する。
【００３３】
２９２は当該転送データの送信先であるＴ−ＤＰｒのプロセッサ識別子を保持するフィールドで、このフィールド２９２は、上記転送モードが通常モードである時のみ有効となる。これも説明は省略する。
２９３は当該転送データがいずれの業務のために転送されようとしているのかを示す業務識別子を保持するフィールドである。このフィールド２９３は、通常モードでは障害発生時にはエラー回復のために使用され、ここで説明しようとするバケット平坦化モードでは、各スイッチングユニット２０１〜２１２が内部の作業テーブル２５０〜２５２のいずれを使用してスイッチング方向を決定すべきかを設定するために使用される。
【００３４】
２９４はバケットＩＤを保持するフィールドで、このフィールド２９４は、バケット平坦化モードでのみ使用される。
２９５はタプルデータを保持するフィールドである。
図４１は、各Ｓ−ＤＰｒ１００Ａ〜１００Ｃの内部のハードウエア構成を示すブロック図である。後述する通り、各Ｔ−ＤＰｒ３００Ａ〜３００Ｃのハードウエア構成も、この図４１に示すものと全く同じであり、物理的には同一のプロセッサが同時に同一業務または別業務についてＳ−ＤＰｒかつＴ−ＤＰｒであることも許される。
【００３５】
図４１において、１０１は各Ｓ−ＤＰｒ１００Ａ〜１００Ｃの内部にあってＳ−ＤＰｒ処理を統括・実行するマイクロプロセッサ、１０２は処理データおよびマイクロプロセッサ１０１を駆動するソフトウェアコードを格納する主記憶部である。
１０３は前述のネットワーク機構２００から入力線１１４を通じて送付されたデータを受理する入力ポート回路で、この入力ポート回路１０３は、少なくともデータ入力があったことをマイクロプロセッサ１０１に通知する機能と、マイクロプロセッサ１０１の指示に従って入力したデータを主記憶部１０２中のマイクロプロセッサ１０１が指定したアドレスに格納する機能とを有している。従来技術の、しかも本説明の範囲では、各Ｓ−ＤＰｒ１００Ａ〜１００Ｃの動作についてこの入力ポート回路１０３が動作することはない。
【００３６】
１０４は出力線１１５を通じ前述のネットワーク機構２００に対してデータを送出する出力ポート回路で、この出力ポート回路１０４は、マイクロプロセッサ１０１の指示に従って、マイクロプロセッサ１０１が指定したアドレスから、既にマイクロプロセッサ１０１により前述の図４０の形状に整形されたデータを読み出し、これをネットワーク機構２００に送出する機能を有している。
【００３７】
１０５〜１０７はＩ／Ｏバス駆動回路で、これらのＩ／Ｏバス駆動回路１０５〜１０７は、それぞれ、Ｉ／Ｏバス１１１〜１１３を経由してＩ／Ｏ装置１０８〜１１０を駆動するもので、Ｉ／Ｏ装置１０８〜１１０がＩ／Ｏバス１１１〜１１３を経由してＩ／Ｏ処理終了を報告するためのＩ／Ｏ割り込みを通知してきた時に割り込みをマイクロプロセッサ１０１に対して発生する機能や、マイクロプロセッサ１０１が指定した主記憶部１０２内の領域と各Ｉ／Ｏ装置１０８〜１１０とのデータ授受を実行する機能を有している。
【００３８】
１１６は図示しない制御プロセッサからの入力線で、この入力線１１６は、マイクロプロセッサ１０１への割り込み信号線およびデータ授受バスから構成されて、マイクロプロセッサ１０１の状態を外部からモニタしたり、マイクロプロセッサ１０１に対して業務実行に必要なデータ（例えば後述するタプル選択のための条件を記述した情報）を与えたり、業務実行の開始を指示したりするために使用されるものである。
【００３９】
図４２は、各Ｔ−ＤＰｒ３００Ａ〜３００Ｃの内部のハードウエア構成を示すブロック図で、一見して判る通り各Ｓ−ＤＰｒ１００Ａ〜１００Ｃとほぼ同じ構成となっている。つまり、図４２において符号３０１〜３１６を付して示される構成要素は、それぞれ図４１により前述した符号１０１〜１１６を付した構成要素とほぼ同じものである。唯一の差異は、入力ポート回路３０３および出力ポート回路３０４の内、本説明の範囲かつ各Ｔ−ＤＰｒ３００Ａ〜３００Ｃとしての動作の範囲では入力ポート回路３０３のみが使用され出力ポート回路３０４が使用されることはない点である。
【００４０】
以上の構成要素を使用して、従来技術では次に述べるアルゴリズムにより処理を行なう。まず、各Ｓ−ＤＰｒ１００Ａ〜１００Ｃの動作アルゴリズムを、図４３を参照しながら説明する。
（Ｃ１）各Ｓ−ＤＰｒ１００Ａ〜１００Ｃのマイクロプロセッサ１０１は、このＳ−ＤＰｒ１００Ａ〜１００Ｃに結合されているＩ／Ｏ装置１０８〜１１０のファイルディレクトリ（Ｆｉｌｅ  Ｄｉｒｅｃｔｏｒｙ）１０２Ａを参照して当該業務の処理対象であるテーブルの格納位置を入手し、該領域からデータを読み出すことを、Ｉ／Ｏバス駆動装置１０５〜１０７の適当なものに指示する（ステップ１０１Ａ；“Ｉｓｓｕｅ  Ｒｅａｄ  Ｒｅｑｕｅｓｔ”）  。この指示には、対象となるＩ／Ｏ装置１０８〜１１０の識別子，装置内の格納アドレス，読み出しデータの主記憶部１０２内の格納アドレス〔図４３中のＩ／Ｏバッファ１０２Ｂのアドレス〕が含まれている。
【００４１】
（Ｃ２）Ｉ／Ｏ処理が終了すると、マイクロプロセッサ１０１は、Ｉ／Ｏバッファ領域１０２Ｂ中に格納されたデータに対して、図示しない制御プロセッサから入力線１１６を経由して予め伝達された選択条件（Ｃｏｎｄｉｔｉｏｎ  ｆｏｒ  ＳＥＬＥＣＴ）１０２Ｃにより記述される、タプル内における以後の処理に必要なフィールドの選択・抽出〔即ち関係代数でいうリストリクション（Ｒｅｓｔｒｉｃｔｉｏｎ）とプロジェクション（Ｐｒｏｊｅｃｔｉｏｎ）〕を実行する（ステップ１０１Ｂ）。なお、上述の選択条件１０２Ｃは、例えばＳＱＬのような記述言語で記述されてもよいし、もっと低いレベルの言語であってもよいし、あるいは、マイクロプロセッサ１０１で走行するプログラムそのものであってもよい。詳細は技術の本質に関係ないので、その説明は省略する。
【００４２】
（Ｃ３）上記処理で抽出された個々のタプルに対して、マイクロプロセッサ１０１は、次にハッシュ処理を行ない（ステップ１０１Ｃ；“Ｈａｓｈ”）、このタプルが属するバケットのＩＤを決定する。
（Ｃ４）マイクロプロセッサ１０１は、バケットＩＤ，業務（タスク）ＩＤ，および当該Ｓ−ＤＰｒ１００Ａ〜１００Ｃの物理識別子に基づいて、図４０に示したフォーマットの出力データを生成する（ステップ１０１Ｄ；“Ｆｏｒｍ  Ｓｅｎｄ  Ｄａｔａ”）。この時、転送データの転送モードを指定するための制御情報フィールド２９０には「バケット平坦化モード」がセットされる。これにより、通常モードではなくなるため、宛先（受信側）プロセッサの識別子は無効となる。
【００４３】
（Ｃ５）マイクロプロセッサ１０１は、生成した出力データ（Ｓｅｎｄ  Ｄａｔａ）のアドレスを出力ポート回路１０４に対し出力要求として発行・伝達することにより、その出力データのネットワーク機構２００への出力を指示する（ステップ１０１Ｅ；“Ｉｓｓｕｅ  Ｓｅｎｄ  Ｒｅｑｕｅｓｔ”）。
（Ｃ６）以上の動作を、当該Ｓ−ＤＰｒ１００Ａ〜１００Ｃに結合されているＩ／Ｏ装置１０８〜１１０に格納されている処理対象テーブル中の全てのタプルを読み出し終わるまで繰り返し、図示しない制御プロセッサに対して処理の終了を報告する。
【００４４】
次に、図３６〜図３８に示すネットワーク機構２００内の各スイッチングユニット２０１〜２１２の動作を説明する。
（Ｄ１）例えば、スイッチングユニット２０１の一方の入力レジスタ２２０に前段のＳ−ＤＰｒ１００Ａ〜１００Ｃから転送データが到着すると、その事象は演算回路２３０に通知される。なお、スイッチングユニット２０１〜２０４の前段はＳ−ＤＰｒ１００であるが、スイッチングユニット２０５〜２１２の前段は他のスイッチングユニットである。前段が、Ｓ−ＤＰｒ１００Ａ〜１００Ｃであっても他のスイッチングユニットであっても、転送データが各スイッチングユニット２０１〜２１２に到着すると、その事象は演算回路２３０に通知される。
【００４５】
（Ｄ２）演算回路２３０は、入力レジスタ２２０から、転送データの一部（図４０のフィールド２９０〜２９４）を読み出す。
（Ｄ３）演算回路２３０は、フィールド２９０の転送モードを指定する値からこの転送データが「バケット平坦化モード」により転送されるべきことを知る。（Ｄ４）演算回路２３０は、フィールド２９３の値により内部の作業テーブル２５０〜２５２のいずれを使用すべきかを特定する。ここでは、例えば作業テーブル２５０に特定されたものとする。
【００４６】
（Ｄ５）演算回路２３０は、作業テーブル２５０内で符号付き計数値を保持するフィールド２７０〜２７９のうち、転送データのフィールド２９４の値をカウンタ識別子としてアクセスされる１つのカウンタフィールドを特定する。ここでは、例えばフィールド２７０に特定されたものとする。
（Ｄ６）カウンタフィールド２７０には符合付き計数値が格納されており、演算回路２３０は、その計数値とフィールド２８０に保持される数とを加算した値と、その計数値からフィールドカウンタ２８１に保持される数を減算した値とのいずれの絶対値が小さいかを判断する。
【００４７】
（Ｄ７）もしカウンタ２８０の数を加算した値の絶対値の方が小さいならば、この転送データは出力線２６３側に出力されるべきであり、演算回路２３０は、フィールド２７０の内容にフィールド２８０の数を加算してフィールド２７０に格納した後、セレクタ回路２２３に指示を出力して入力レジスタ２２０の内容を出力レジスタ２２５に格納させ、出力線２６３を経由して次段のスイッチングユニットあるいはＴ−ＤＰｒ３００Ａ〜３００Ｃに対してデータを送出する。
【００４８】
（Ｄ８）もしカウンタ２８１の数を減算いた値の絶対値の方が小さいならば、この転送データは出力線２６２側に出力されるべきであり、演算回路２３０は、フィールド２７０の内容からカウンタ２８１の数を減算してフィールド２７０に格納した後、セレクタ回路２２２に指示を出力してレジスタ２２０の内容を出力レジスタ２２４に格納させ、出力線２６２を経由してレジスタ２２０の次段のスイッチングユニットあるいはＴ−ＤＰｒ３００Ａ〜３００Ｃに対してデータを送出する。
【００４９】
（Ｄ９）もしカウンタ２８０の数を加算した値の絶対値とカウンタ２８１の数を減算した値の絶対値とが等しい時には、演算回路２３０は、出力線２６２と２６３のどちらを選択してもよい。
（Ｄ１０）ただし、全てのケースで、演算回路２３０は、「フィールド２８０の値が“０”であるなら出力線２６２に出力してはならない」および「フィールド２８１の値が“０”であるなら出力線２６３に出力してはならない」というルールを守らねばならない。
【００５０】
（Ｄ１１）２本の入力線２６０，２６１があるため、上記論理で出力線２６２が一方の入力のためにビジーである時、他方の入力線はこの出力線２６２を使用できないことがある。勿論、上記引用した論文では、この問題を解決する手段を提示しているが、ここでは簡単のためにこのような場合はいずれかの入力に関する処理が出力線２６２が使用可能な状態になるまで待たされるものとする。この簡略化は従来技術と本発明との差に関係ない。
【００５１】
（Ｄ１２）容易に理解できる通り、各スイッチングユニット２０１〜２１２による局所的な平坦化が上記アルゴリズムにより行なわれ、ネットワーク全体としてＴ−ＤＰｒ３００Ａ〜３００Ｃ間のバケット平坦化分布が達成されることになる。
次に、各Ｔ−ＤＰｒ３００Ａ〜３００Ｃの動作アルゴリズムを、図４４を参照しながら説明する。
【００５２】
（Ｅ１）各Ｔ−ＤＰｒ３００Ａ〜３００Ｃの入力ポート回路３０３にネットワーク機構２００から１タプルに相当する転送データ（Ｒｅｃｅｉｖｅ  Ｄａｔａ）が到達すると、入力ポート回路３０３は、その転送データを主記憶部３０２の特定アドレスに格納してから、その転送データの到着をマイクロプロセッサ３０１に伝達する。
【００５３】
（Ｅ２）マイクロプロセッサ３０１は、転送データのフィールド２９０，２９３，２９４にアクセスし、バケット平坦化処理のために、いずれの業務のいずれのバケットＩＤのタプルが到着したかを知る。そして、マイクロプロセッサ３０１は、バケット平坦化処理にＴ−ＤＰｒ３００として参加する各業務の各バケットＩＤに対し幾つのタプルが到着したかをカウントし、そのカウント値をフィールド３０２Ａ〜３０２Ｃに保持する（ステップ３０１Ａ；“Ｃｏｕｎｔ  Ｂｕｃｋｅｔ  Ｓｉｚｅ  ”）。この情報（カウント値）は、本説明が対象とする「バケット平坦化処理」の後「バケットサイズチューニング」時に使用される。
【００５４】
（Ｅ３）マイクロプロセッサ３０１は、当該転送データのフィールド２９３および２９４から当該転送データ内のタプルがいずれの業務のいずれのバケットに属するかを知り、同一業務の同一バケットＩＤをもつタプルをＩ／Ｏ処理に備えて同一メモリブロック内（例えば図４４ではＩ／Ｏバッファ３０２Ｄ〜３０２Ｆ）に蓄積する（ステップ３０１Ｂ；“Ｂｌｏｃｋｉｎｇ  Ｔｕｐｌｅｓ  ”）。
【００５５】
このような蓄積を行なう理由は、通常、Ｉ／Ｏ処理の単位（Ｆｉｘｅｄ  Ｂｌｏｃｋ  Ａｒｃｈｉｔｅｃｔｕｒｅによる磁気ディスクについてはセクタと呼ばれる単位）は固定長であり、この単位よりも小さい単位でＩ／Ｏ処理を行なうと「セレクタ単位読み出し→セクタ内データの部分変更→セクタ単位書き込み」というシーケンスになってオーバーヘッドが大きいため、このセクタを超える大きさ（さらにはＩ／Ｏ処理オーバーヘッド）を相対的に小さなものにするために固定数のセクタより成るかなり大きなブロック単位で入出力を行なうことが好ましいためである。前述したように、この後、バケットサイズチューニング、さらには、変更された１バケットに属するタプル群を同一の「突き合わせを行なうプロセッサ」に転送する処理が行なわれるため、同一バケットに属するタプル群はできるだけ物理的にも同一箇所（各Ｉ／Ｏバッファ３０２Ｄ〜３０２Ｆ）に格納したい。
【００５６】
（Ｅ４）上記蓄積処理によりＩ／Ｏ処理の単位として使用されるある容量以上のタプル数がある業務のあるバケットＩＤに対するブロック（各Ｉ／Ｏバッファ３０２Ｄ〜３０２Ｆ）内に蓄積されると、マイクロプロセッサ３０１は、Ｉ／Ｏ装置３０８〜３１０のうちどれを利用するべきかを、ファイルディレクトリ（Ｆｉｌｅ  Ｄｉｒｅｃｔｏｒｙ）３０２Ｇを参照して決定してから（ステップ３０１Ｃ；“Ｆｏｒｍ  Ｉ／Ｏ  Ｒｅｑｕｅｓｔ”）、このブロックに関するＩ／Ｏ書き込み要求を生成し（ステップ３０１Ｄ；“Ｉｓｓｕｅ  Ｗｒｉｔｅ  Ｒｅｑｕｅｓｔ  ”）、そのブロックを、Ｉ／Ｏバス駆動回路３０５〜３０７のうち適切なものに対して発行することにより、ステップ３０１Ｃで決定されたＩ／Ｏ装置３０８〜３１０のいずれかに書き込む。
【００５７】
ところで、次に、図４５〜図４９により、上記「突き合わせ処理」部分についての既存技術の概要を説明する。
図４５はその「突き合わせ処理」を実行するための既存技術を示すブロック図で、この図４５において、２００は図３６〜図３８により前述したものと同様に構成されたネットワーク機構で、このネットワーク機構２００により、全てのプロセッサ相互通信が同時に可能になっている。
【００５８】
また、３００も図３６により前述したプロセッサ群で、このプロセッサ群３００は、複数（図４５では３台）のプロセッサ３００Ａ〜３００Ｃを有している。各プロセッサ３００Ａ〜３００Ｃ内の二次記憶装置（Ｉ／Ｏ装置）３２０Ａ〜３２０Ｃには、図４３，図４４にて前述した手順で、ハッシュ関数により既にグループ分割されたサブバケット１０００〜１００２；１０１０〜１０１２；１０２０〜１０２３が格納されているものとする。
【００５９】
ここで、各サブバケットを示す符号においては、一の位をバケット識別子とし、十の位を、そのサブバケットが格納されているプロセッサ群３００の構成要素である各プロセッサ３００Ａ〜３００Ｃの識別子とする。つまり、サブバケットの種類としては識別子“０”〜“３”の４種類が存在するとともに、プロセッサ３００Ａ〜３００Ｃの識別子がそれぞれ“０”〜“２”となっている。
【００６０】
また、図４５に示す例では、前述した通り、バケット種類は４種類あり、識別子“０”〜“２”のサブバケットは全て等しく全てのプロセッサ３００Ａ〜３００Ｃに存在するが、識別子“３”のバケットはプロセッサ３００Ｃのみに存在している。
図４５において、４０は複数（図４５では３台）のプロセッサ４０Ａ，４０Ｂ，４０Ｃからなるプロセッサ群で、このプロセッサ群４０に属する各プロセッサ４０Ａ〜４０Ｃは、上述した「突き合わせを行なうプロセッサ」であり、各プロセッサ４０Ａ〜４０Ｃには、二次記憶装置（Ｉ／Ｏ装置）４２Ａ〜４２Ｃがそなえられている。
【００６１】
また、５０は主記憶部上のバケット割当テーブル（Ｂｕｃｋｅｔ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ；図４６参照）に基づき図４６にて後述する手順に従ってプロセッサ群３００からプロセッサ群４０へのバケット転送割当を決定・管理するための任意のプロセッサである。
なお、上述したプロセッサ３００Ａ〜３００Ｃ，４０Ａ〜４０Ｃや５０は、図３６に示したプロセッサ１００Ａ〜１００Ｃも含めて、同一のプロセッサである場合もありうるが、ここでは説明のために各プロセッサはあたかも常に別プロセッサであるかのように図示および説明する。
【００６２】
従来技術では、「突き合わせ処理」の最初に、プロセッサ群３００を構成するプロセッサ３００Ａ〜３００Ｃそれぞれが、ネットワーク機構２００を介して自身の内部に存在するサブバケットのバケット識別子をプロセッサ５０に送る。その識別子を受信したプロセッサ５０は、プロセッサ群３００全体として何種類のサブバケットが存在し、またどのようなバケット識別子のサブバケットが存在するのかをその情報に基づいて知る。
【００６３】
この直後に、プロセッサ５０は、「どのバケットがどのプロセッサ群４０の構成要素たるプロセッサ４０Ａ〜４０Ｃにより処理されるべきか」を決定してしまい、ネットワーク機構２００を通じて、プロセッサ群３００とプロセッサ群４０との全てのプロセッサ３００Ａ〜３００Ｃ，４０Ａ〜４０Ｃにその決定結果を同報する。
【００６４】
以後、プロセッサ群４０の各プロセッサ４０Ａ〜４０Ｃは、自身に割り当てられたバケットデータの送信をプロセッサ群３００全体に対して指示し、あるバケットのデータが全てこれに対応するプロセッサ群４０の構成要素のあるプロセッサ４０Ａ〜４０Ｃに送付されると、このバケットに対するプロセッサ内部での結合（Ｊｏｉｎ）演算が開始される。プロセッサ内部での結合演算の詳細については、本説明に直接関係せず、また同業者には自明のものであるので、その説明は省略する。
【００６５】
次に、図４６にてバケット割当テーブル（Ｂｕｃｋｅｔ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ）の概略フォーマット例について説明した後、図４７〜図４９に示すフローチャートに従って、各プロセッサ５０，３００Ａ〜３００Ｃ，４０Ａ〜４０Ｃの従来動作をより詳細に説明する。
図４６は、プロセッサ５０に保持されるバケット割当テーブルの概略フォーマット例を示すもので、この図４６に示すテーブルは、プロセッサ３００Ａ〜３００Ｃから存在が報告された１バケットについて１行（１Ｒｏｗ）を費やす構造になっている。
【００６６】
図４６に示すテーブルにおいて、各行の第１カラム（Ｃｏｌｕｍｎ）には、その行に対応するバケットのバケット識別子が格納される。このバケット識別子は、各バケットを特定するために、全てのプロセッサ３００Ａ〜３００Ｃ，４０Ａ〜４０Ｃ，５０で使用される。
また、各行の第２カラムには、プロセッサ３００Ａ〜３００Ｃのいずれにそのバケットの部分集合であるサブバケットが存在するかが記述され、そのバケットの存在を報告してきたプロセッサ群が網羅されている。この第２カラムとしては、例えば、各プロセッサ３００Ａ〜３００Ｃ毎に１ビットを割り当てたビットマップが用いられる。
【００６７】
さらに、各行の第３カラムには、初期化直後は「いずれのプロセッサにも割り当てられていない」ことを示す値が記入されるべきであり、割当処理が行なわれた後はこのバケットが割り当てられたプロセッサ４０Ａ〜４０Ｃのいずれかのプロセッサ識別子が記入される。
図４７は、プロセッサ５００の動作概要を説明するためのフローチャート（ステップＳ５００〜Ｓ５０５）である。
【００６８】
この図４７に示すように、プロセッサ５００は、動作を開始すると、まず、図４６に示したバケット割当テーブルの内容を初期化する（ステップＳ５００）。この初期化処理は、予想されるバケット数を記述できるだけの充分な容量のテーブル領域を確保し、その全ての行（各バケットに対応）を無効化するものである。
【００６９】
そして、プロセッサ５００は、各プロセッサ３００Ａ〜３００Ｃから、どのようなバケットが生成されたかについての報告が行なわれるのを待ち（ステップＳ５０１）、報告を受けると、その内容をバケット割当テーブルに格納する（ステップＳ５０２）。
これらのステップＳ５０１，Ｓ５０２による処理動作は、プロセッサ３００Ａ〜３００Ｃの全てから報告がなされるまで繰り返し実行される（ステップＳ５０３）。
【００７０】
全てのプロセッサ３００Ａ〜３００Ｃから、生成されたバケットについての報告が行なわれると、プロセッサ５００は、それらのバケットとプロセッサ４０Ａ〜４０Ｃとの対応関係を一括して割り当ててしまう（ステップＳ５０４）。例えば、各プロセッサ４０Ａ〜４０Ｃに割り当てられるバケット個数が同じになるように、バケットの割当を決定する。
【００７１】
プロセッサ５０は、ステップＳ５０４で決定された割当の内容をプロセッサ３００Ａ〜３００Ｃおよび４０Ａ〜４０Ｃに同報する（ステップＳ５０５）。
以後、プロセッサ３００Ａ〜３００Ｂとプロセッサ４０Ａ〜４０Ｃとの間のデータ転送に対して、プロセッサ５０が関与する義務はなく、プロセッサ５０としての作業は、以上で終了する。
【００７２】
図４８は、プロセッサ３００Ａ〜３００Ｃの動作概要を説明するためのフローチャート（ステップＳ５１０〜Ｓ５１３）である。
この図４８に示すように、各プロセッサ３００Ａ〜３００Ｃは、動作を開始すると、まず、二次記憶装置３２０Ａ〜３２０Ｃにおけるサブバケットの存在を認識することにより、バケット生成処理を行なう（ステップＳ５１０）。
【００７３】
このバケット生成処理により、どのようなバケットが自身の内部に存在するかを確認すると、各プロセッサ３００Ａ〜３００Ｃは、プロセッサ５０に対してその確認情報を報告する（ステップＳ５１１）。
この後、各プロセッサ３００Ａ〜３００Ｃは、プロセッサ５０からのバケットと各プロセッサ４０Ａ〜４０Ｃとの対応関係の割当結果の通知（図４７のステップＳ５０５の処理）を待つ（ステップＳ５１２）。
【００７４】
そして、プロセッサ５０から割当結果を通知されると、プロセッサ４０Ａ〜４０Ｃとの間でネットワーク機構２００を介して適当な同期を確立し、自身の内部に格納されたバケットデータを各プロセッサ４０Ａ〜４０Ｃへ転送する（ステップＳ５１３）。このとき、どのバケットデータをどのプロセッサ４０Ａ〜４０Ｃへ転送するかについては、ステップＳ５１２でプロセッサ５０から通知された割当情報に従う。
【００７５】
図４９は、プロセッサ４０Ａ〜４０Ｃの動作概要を説明するためのフローチャート（ステップＳ５２０〜Ｓ５２２）である。
この図４９に示すように、各プロセッサ４０Ａ〜４０Ｃは、動作を開始すると、まず、プロセッサ５０からのバケットと各プロセッサ４０Ａ〜４０Ｃとの対応関係の割当結果の通知（図４７のステップＳ５０５の処理）を待つ（ステップＳ５２０）。このステップＳ５２０により、少なくとも自身に割り当てられた全てのバケットの識別子が受信されるものとする。
【００７６】
この後、各プロセッサ４０Ａ〜４０Ｃは、各プロセッサ３００Ａ〜３００Ｃに対して自身に割り当てられたバケットの送付を指示し、そのバケットデータを全て受信する（ステップＳ５２１）。そして、各プロセッサ４０Ａ〜４０Ｃは、ステップＳ５２１にて受信されたデータに対して、ＤＢＭＳ処理〔例えば結合（Ｊｏｉｎ）処理〕を実行する（ステップＳ５２２）。
【００７７】
【発明が解決しようとする課題】
しかしながら、図３６〜図４４により説明した従来技術では、以下の項目（Ｆ１）〜（Ｆ３）のような課題がある。
（Ｆ１）ネットワーク部分（ネットワーク機構２００）のハードウエア物量が大きい。
【００７８】
▲１▼ネットワーク物量は、プロセッサ台数ｎに対してｎ  ｌｏｇｎオーダで増加する（レジスタ領域の容量は総計ｎ２ｌｏｇｎオーダで増加する）。
▲２▼このようなネットワーク物量のうち、問題となるのはレジスタ領域（単なるメモリで実現できるから問題にならない）を除く部分であり、可変長タプルを取り扱うことができるようなスイッチングユニット２０１〜２１２をこのオーダで準備することは困難である。現在、ＶＬＳＩを使用しワイアードロジックによりこのオーダで作成することは勿論可能であるが、プロセッサ側もマイクロプロセッサベースで作成されるため、ネットワーク機構２００の物量がプロセッサ側の物量を上回りかねないことになる。
【００７９】
（Ｆ２）生成率のスキュー，ＭＩＭＤのスキューには全く対応できない。
▲１▼上述した既存技術は、各スイッチングユニット２０１〜２１２での配分に関する重み付け（フィールド２８０，２８１への値記入）が業務開始時のみで行なわれ、かつＴ−ＤＰｒの台数のみをカウントして行なわれている。つまり、「全てのＴ−ＤＰｒの入力データ量を等しくすること」しか狙っていない。
【００８０】
▲２▼これに対して、生成率のスキュー，ＭＩＭＤのスキューは「Ｔ−ＤＰｒの入力データ量が均等であっても発生する負荷の偏り」であって、上記既存技術はこれらスキューに対して無力である。
▲３▼また、ＭＩＭＤ環境では「負荷の偏りの補正」は他業務開始・終了が動的に発生するため、これに対応して動的な手法で行なわれねばならず、業務開始時のみに負荷調整値（フィールド２８０，２８１に記入される重み付け値など）を決定していたのでは不十分である。
【００８１】
（Ｆ３）プロセッサ間タプルデータ転送のオーバーヘッドが大きい。
▲１▼上記既存技術は、論理的な平坦化処理対象（つまりタプル）が物理的なネットワーク内でのルーティング制御対象と一致しているため、あくまでプロセッサ間の物理転送単位が１タプルであることを要求する。
▲２▼一般に、１回の転送処理に要するプロセッサ側処理量はかなり大きいため、複数タプル群を一括して転送単位とできないこの方式ではプロセッサ側の転送処理オーバーヘッドがかなり大きなものとなってしまう。
【００８２】
一方、図４５〜図４９により説明した従来技術では、プロセッサ５０によるバケットとプロセッサとの対応関係の決定が上記「突き合わせ」処理開始時にスタティックに行なわれることに起因して、以下のような課題が生じている。
生成率のスキューがどの程度になるかは「突き合わせ」処理を行なう前には予測することができない。従って、既存技術の方式では、生成率のスキューを低減することは全く不可能である。
【００８３】
また、「突き合わせ」処理に関するＭＩＭＤのスキューとは、つまり上述したプロセッサ群４０に属するプロセッサ４０Ａ〜４０Ｃの一部が他の業務を行なっていたり、一部のプロセッサにおいてこの業務を行なっている間に新たな業務が投入されたり終了したりして、この業務を実行する上での速度が大幅に上下し、このためプロセッサ群４０に属するプロセッサ４０Ａ〜４０Ｃの当該業務に関する演算速度と負荷との間の関係が崩れることである。
【００８４】
理想的な負荷−演算性能関係とは、どのプロセッサでもこれらの比がほぼ一定であることであるが、従来技術では、各プロセッサの「演算速度」に関する情報を収集していないし、また「突き合わせ」処理の開始時にいくらプロセッサの演算速度の情報を収集してもこれらは他業務の開始・終了でいくらでも動的に変化するものであり、かつ業務の開始や終了に関する予測を完全に行なうことは不可能である。
【００８５】
このため、図４５〜図４９に示した従来技術では、生成率のスキューやプロセッサ群４０のＭＩＭＤのスキューを低減することはできず、システム演算性能が理想的なものから比べて大幅に低下してしまう。
本発明は、このような課題に鑑み創案されたもので、以下のような目的を果たすものである。
【００８６】
つまり、上記既存技術で問題になるのはメモリ以外の論理演算回路の物量であり、メモリは今日の技術ではかなりの大容量を容易に実装できるので問題になることは少ない。本発明の第１の目的は、メモリ容量を除く部分のハード回路量（ハード物量）の低減をはかった並列プロセッサ装置を提供することである。
また、前述の通り、バケット平坦処理はそもそも再配置のスキューを低減するために提案されているが、本発明の第２の目的は、これに加えて、生成率のスキューおよびＴ−ＤＰｒ側のＭＩＭＤのスキューへの対応を可能にした並列プロセッサ装置を提供することである。
【００８７】
さらに、本発明の第３の目的は、複数タプルを一括して一度のプロセッサ間転送処理により送受信可能にして、プロセッサ間データ転送処理のオーバーヘッドを相対的に縮小できるようにした並列プロセッサ装置を提供することである。
またさらに、本発明の第４の目的は、「突き合わせ」等の処理に際してのＭＩＭＤのスキューおよび生成率のスキューに確実に対応可能な並列プロセッサ装置を提供することである。
【００８８】
【課題を解決するための手段】
上記目的を達成するために、本発明の並列プロセッサ装置（請求項１〜６）は、少なくとも、後述するＳ−ＤＰｒ集合（以下、ソースデータプロセッサ群という場合がある）およびＴ−ＤＰｒ集合（以下、ターゲットデータプロセッサ群もしくは第１プロセッサ群という場合がある）と、ソースデータプロセッサ群から転送されて第１プロセッサ群に格納されたデータを、第１プロセッサ群から送付され、送付されたデータに対する処理を実行する第２プロセッサ群とを含み、この第２プロセッサ群が前記処理を実行するのに先立ち、前記処理の対象となるデータをソースデータプロセッサ群から第１プロセッサ群に属する各プロセッサに分散して格納し、第１プロセッサ群に属する各プロセッサにおいて格納されたデータを所定規則に従って少なくとも一つのデータグループに予めグルーピングするものである。そして、本発明の各並列プロセッサ装置（請求項１〜６）は以下の特徴を有している。
１．まず、本発明の並列プロセッサ装置（請求項１）は、並列的に動作する複数のプロセッサをそなえて構成される並列プロセッサ装置であって、以下の特徴を有している。
【００８９】
（ａ）単一の処理（以下「処理単位」）の対象となるデータの塊（以下「チャンク」）があり、このチャンクが、上記複数の個々のプロセッサ（実際には各プロセッサに接続されたＩ／Ｏ装置群）にその部分集合（以下「サブチャンク」）に分割されて格納されている。
（ｂ）サブチャンクは、さらに個々に独立して処理を受けることが可能なデータ項目（以下「エンティティ」）複数個からなる。
【００９０】
（ｃ）「ある評価関数の適用結果（出力値）によりエンティティ群を分類し、個々の出力値に対応したエンティティ集合を得る」場合に、下記(1)〜(5)のアルゴリズムを採用する。
(1)処理対象であるチャンクの部分集合であるサブチャンクを、Ｉ／Ｏ装置にもつプロセッサ集合をＳ−ＤＰｒ(Source Data Processors)集合と仮称するとともに、その集合に属するプロセッサをＳ−ＤＰｒと仮称する。
【００９１】
(2)Ｓ−ＤＰｒ集合とは必ずしも構成要素（プロセッサ）が一致してもしなくても良いプロセッサ集合をＴ−ＤＰｒ(Target Data Processors)集合と仮称するとともに、その集合に属するプロセッサをＴ−ＤＰｒと仮称する。
(3)各Ｓ−ＤＰｒは、独立してサブチャクをＩ／Ｏ装置から読み出し、これに含まれる個々のエンティティに対して上記評価関数を適用してこのエンティティに対応する出力値を得る。
【００９２】
(4)各Ｓ−ＤＰｒは、エンティティをＴ−ＤＰｒを一つ選択してこれに転送するものとする。この時、転送するエンティティに上記評価関数の出力値を付加して送る。
(5)Ｔ−ＤＰｒは、受理したエンティティを配下のＩ／Ｏ装置に格納する。この時、上記エンティティに付加して送付された評価関数の出力値が等しいエンティティ群は、後にまとめて取り出すことが可能なように分類して格納する。
【００９３】
（ｄ）個々に上記条件（ａ）〜（ｃ）を満足する複数個の業務が、それぞれＳ−ＤＰｒ集合とＴ−ＤＰｒ集合を使用して動作しており、且つ、これら異なる業務が使用するプロセッサ集合は、その要素たるプロセッサが必ずしも排反の関係にあることが保証されない。
（ｅ）そして、上述の（ｃ）の項目(4)に示した送付先Ｔ−ＤＰｒを決定するアルゴリズムとして下記(1)〜(3)を採用する。
【００９４】
(1)各Ｓ−ＤＰｒは、「Ｔ−ＤＰｒの識別子（第１指定要素）」および「評価関数出力値（第２指定要素）」の２者を添字としてアクセス可能な２次元配列を転送宛先プロセッサ決定用テーブルとして有している。このテーブルには、「対応する識別子」をもつＴ−ＤＰｒに「対応する評価関数出力値」をもつエンティティをいくつ転送したかを示すカウント値が、２次元配列要素として保持されている。
【００９５】
(2)各Ｓ−ＤＰｒは、上記評価関数の出力値があるエンティティに対して判明すると、上記転送宛先プロセッサ決定用テーブルの一方の軸座標（座標軸Ｘとする）として該評価関数出力値を使用することにより、他方の軸方向（座標軸Ｙとする）に含まれる全ての配列要素（カウント値）を抽出し、これら全ての値を相互に比較し、最も小さなカウント値をもつ配列要素のＹ座標（Ｔ−ＤＰｒ識別子に対応する）から転送先のＴ−ＤＰｒを特定して転送を行なう。
【００９６】
(3)転送先のＴ−ＤＰｒが決定されると、Ｓ−ＤＰｒは、上記「当該Ｔ−ＤＰｒおよび当該評価関数出力値」に対応する配列要素の内容（カウント値）を１だけインクリメントする。
２．また、本発明の並列プロセッサ装置（請求項２）は、項目１．にて上述した並列プロセッサ装置とほぼ同様に構成されるが、下記機構上の特徴を有している。
【００９７】
（ａ）Ｓ−ＤＰｒ間で、同一チャンクに属するサブチャンクデータの格納量は互いにほぼ等しくなるように分布させる。
（ｂ）ある一つの業務についての、あるＳ−ＤＰｒからあるＴ−ＤＰｒへのエンティティ転送に際して、以下▲１▼〜▲４▼のアルゴリズムを採用する。
▲１▼各Ｓ−ＤＰｒ内に、当該業務に対して全てのＴ−ＤＰｒに１対１に対応し、エンティティをその構成要素とする待ち行列機構が準備される。つまり、この待ち行列機構は、１対のＳ−ＤＰｒ：Ｔ−ＤＰｒ通信関係に対して、この通信関係を使用する業務個数分だけＳ−ＤＰｒ内に作成される。
【００９８】
▲２▼各Ｔ−ＤＰｒは、当該業務に関するあるＳ−ＤＰｒからの受信が可能な状態になると、このＳ−ＤＰｒに対して送信開始指示を行なうように構成されている。
▲３▼「あるＴ−ＤＰｒがある業務についてこの業務に関するＳ−ＤＰｒ群の任意のものに対して送信開始指示を行なう事象」は、当該Ｔ−ＤＰｒ内における、当該業務についてのＴ−ＤＰｒとしての処理の進捗状況と比例した頻度で行なわれる。
【００９９】
▲４▼Ｔ−ＤＰｒは、ある業務に関する上記送信開始指示を、当該業務にＳ−ＤＰｒとして参加するすべてのプロセッサに対して等しい頻度で送付する。
（ｃ）各Ｓ−ＤＰｒは、当該業務に関するＴ−ＤＰｒ集合の中の任意のＴ−ＤＰｒに対して自身内部に作成される上記待ち行列機構内に現在どれだけの数の転送対象エンティティが蓄積されているかを知る蓄積数検出手段を有している。
【０１００】
（ｄ）そして、あるエンティティが送付されるべきＴ−ＤＰｒを決定するＳ−ＤＰｒ内アルゴリズムとして、下記▲１▼〜▲３▼を採用する。
▲１▼各Ｓ−ＤＰｒは、「Ｔ−ＤＰｒの識別子（第１指定要素）」および「評価関数出力値（第２指定要素）」の２者を添字としてアクセス可能な２次元配列を転送宛先プロセッサ決定用テーブルとして有している。このテーブルには、「対応する識別子」をもつＴ−ＤＰｒに「対応する評価関数出力値」をもつエンティティをいくつ転送したかを示すカウント値が、２次元配列要素として保持されている。
【０１０１】
▲２▼各Ｓ−ＤＰｒは、上記評価関数の出力値があるエンティティに対して判明すると、上記転送宛先プロセッサ決定用テーブルの一方の軸座標（座標軸Ｘとする）として該評価関数出力値を使用することにより、他方の軸方向（座標軸Ｙとする）に含まれる全ての配列要素（カウント値）を抽出し、これら全ての値を相互に比較し、最も小さなカウント値をもつ配列要素のＹ座標（Ｔ−ＤＰｒ識別子に対応する）から転送先のＴ−ＤＰｒを特定して転送を行なう。
【０１０２】
▲３▼転送先のＴ−ＤＰｒが決定されると、Ｓ−ＤＰｒは、上記「当該Ｔ−ＤＰｒおよび当該評価関数出力値」に対応する配列要素の内容（カウント値）を、該時点で該業務およびＴ−ＤＰｒに対する上記待ち行列構造内に蓄積されている転送対象エンティティ数（上記蓄積数検出手段による検出数）に１を加算した値、あるいは、この加算値に０以外の定数を乗算した値だけインクリメントする。
【０１０３】
３．上述した項目１．および２．の並列プロセッサ装置において、Ｓ−ＤＰｒからＴ−ＤＰｒへの転送単位は、複数のエンティティの集合体としてもよい（請求項３）。このとき、その転送単位は、上記評価関数の適用結果である出力値が互いに異なることが許される複数エンティティの集合体である。
そして、前述した通り、各Ｓ−ＤＰｒでは、転送時に同一の転送単位に含まれる個々のエンティティに対して上記評価関数の出力値が付与され、各Ｔ−ＤＰｒは、その転送単位を受理すると、個々のエンティティに付与された上記評価関数出力値を参照することにより個別のエンティティを評価関数出力値別に分離・分類するようになっている。
【０１０４】
４．さらに、本発明の並列プロセッサ装置（請求項４）は、上述した項目２．および項目３．の機能を有する並列プロセッサ装置において、あるエンティティが送付されるべきＴ−ＤＰｒを決定するＳ−ＤＰｒ内アルゴリズムとして、下記(1)〜(4)を採用している。
(1)各Ｓ−ＤＰｒは、項目２．にて前述した蓄積数検出手段の代わりに、当該業務に関するＴ−ＤＰｒ集合の中の任意のＴ−ＤＰｒに対して自身内部に作成される上記待ち行列機構内に現在どれだけのデータ量の転送対象エンティティが蓄積されているかを知る蓄積データ量検出手段を有している。
【０１０５】
(2)各Ｓ−ＤＰｒは、「Ｔ−ＤＰｒの識別子（第１指定要素）」および「評価関数出力値（第２指定要素）」の２者を添字としてアクセス可能な２次元配列を転送宛先プロセッサ決定用テーブルとして有している。このテーブルには、「対応する識別子」をもつＴ−ＤＰｒに「対応する評価関数出力値」をもつエンティティをどれだけ転送したかを示すデータ量が、２次元配列要素として保持されている。
【０１０６】
(3)各Ｓ−ＤＰｒは、上記評価関数の出力値があるエンティティに対して判明すると、上記転送宛先プロセッサ決定用テーブルの一方の軸座標（座標軸Ｘとする）として該評価関数出力値を使用することにより、他方の軸方向（座標軸Ｙとする）に含まれる全ての配列要素（データ量）を抽出し、これら全ての値を相互に比較し、最も小さなデータ量をもつ配列要素のＹ座標（Ｔ−ＤＰｒ識別子に対応する）から転送先のＴ−ＤＰｒを特定して転送を行なう。
【０１０７】
(4)転送先のＴ−ＤＰｒが決定されると、Ｓ−ＤＰｒは、上記「当該Ｔ−ＤＰｒおよび当該評価関数出力値」に対応する配列要素の内容（データ量）を、該時点で該業務およびＴ−ＤＰｒに対する上記待ち行列構造内に蓄積されている転送対象エンティティデータ量（上記蓄積データ量検出手段による検出結果）と現在処理中のエンティティのデータ量とを加算した値、あるいは、この加算値に０以外の定数を乗算した値だけインクリメントする。
【０１０８】
５．上述した並列プロセッサ装置では、複数のプロセッサが一つの業務に参加し全体として当該業務を実行すべく、当該業務における処理対象のデータが、上記複数のプロセッサに含まれる第１プロセッサ群（Ｔ−ＤＰｒ集合）に分散して格納され、この第１プロセッサ群に格納されたデータが、上記複数のプロセッサに含まれる第２プロセッサ群に対して送付され、当該データに対する処理が第２プロセッサ群にて実行される。
【０１０９】
なお、データは、所定規則に従ってグルーピングを受けることが可能であって、該グルーピングを受けた後のあるデータグループが全て上記第２プロセッサ群に属する一つのプロセッサに送付された場合、このプロセッサは、そのデータグループの処理を行なうに際して、他のプロセッサと交信する必要がない。
このとき、上述した項目１．〜項目４．にて上述した並列プロセッサ装置において、下記(1)〜(7)の要件が満たされるように構成してもよい（請求項５）。
【０１１０】
(1)予め上記第１プロセッサ群に属する各プロセッサは、自プロセッサに格納されているデータに対してのみ上記グルーピングを行なう。
(2)上記第１プロセッサ群に属する各プロセッサは、上記複数のプロセッサに含まれる任意の一プロセッサ（以下、管理用プロセッサＡという；上記第１プロセッサ群または上記第２プロセッサ群に属するものであっても、あるいはいずれにも属さないものであっても良い）にどのようなグループが生成されたかを通知する。
【０１１１】
(3)上記管理用プロセッサＡは、上記第１プロセッサ群内にどのようなグループが格納されているかを記憶する。
(4)上記第２プロセッサ群に属する各プロセッサは、「上記データグループの新たな処理を開始できる状況」になると、上記管理用プロセッサＡに対してデータグループの割当を依頼する。
【０１１２】
(5)上記管理用プロセッサＡは、データグループを、割当を依頼してきた第２プロセッサ群に属するプロセッサ（以下、プロセッサＢ）に割り当てると、以後このデータグループを他のプロセッサには割り当てない。
(6)上記第１プロセッサ群に属する各プロセッサ群は、上記管理用プロセッサＡによる割当に従い、上記プロセッサＢに対して、自身に格納されたデータのうち該当するデータグループに含まれる全てのデータを送付する。
【０１１３】
(7)上記プロセッサＢは、該当するデータの全てを受信すると、当該データグループの処理を開始する。この処理が終了した時、再びプロセッサＢは「上記データグループの新たな処理を開始できる状況」となる。
６．また、項目１．〜項目４．にて上述した並列プロセッサ装置において、下記(1)〜(3)の特徴をそなえてもよい（請求項６）。
【０１１４】
(1)上記項目５．の(2)において、上記第１プロセッサ群に属する各プロセッサが、管理用プロセッサＡに対し、グルーピング結果として各データグループの識別子と容量とをを通知する。
(2)上記項目５．の(3)において、上記管理用プロセッサＡが、上記第１プロセッサ群に属する各プロセッサから送付された容量を各データグループについて積算し、上記第１プロセッサ群全体について各データグループの大きさ（容量）を各データグループの識別子とともに記憶する。
【０１１５】
(3)上記項目５．の(5)において、上記管理用プロセッサＡが、上記第２プロセッサ群に属する各プロセッサからデータグループの割当依頼を受けると、当該割当依頼を行なったプロセッサに対し、記憶しているデータグループのうち容量の大きなものから順に割り当てを行なう。
【０１１６】
【作用】
「ネットワーク自身に平坦化分配機能を持たせる」こと、「多段網ネットワークを構成する個々のスイッチングユニットが局所的な平坦化作業を行なうことにより全体として全てのＴ−ＤＰｒおよびチャンク（バケット）に対して平坦化が行なわれる」ことが、前述した既存技術の基本発想であるが、上述した本発明の並列プロセッサ装置は、これを採用せず、「ネットワークに特殊な機能を期待しない」こと、「各Ｓ−ＤＰｒが送出したデータに関するＴ−ＤＰｒ負荷（エンティティ）が全て等しくなるように局所的な平坦化を行なうことにより、全体として全てのＴ−ＤＰｒおよびバケットに対して平坦化が行なわれる」ことを基本発想とする。
【０１１７】
「ネットワークに特殊な機能を期待しない」以上、本発明のネットワークの機能としては、例えば前述したネットワーク機構（図３６の符号２００参照）の説明中で言うところの「通常モード」による通信機能のみが提供されれば十分である。従って、本発明の並列プロセッサ装置では、プロセッサ間のデータ授受を行なう機構はプロセッサ間のいわゆる「全点対全点通信」が可能でありさえすればよく、ネットワーク機構自体に対して、上記の多段網であってもバス結合であっても特別な機構やトポロジを期待しない。
【０１１８】
その代わりに、本発明では、チャンクの平坦化作業を全てＳ−ＤＰｒおよびＴ−ＤＰｒの各プロセッサ側で行なう。前述のように、その基本発想は「あるＳ−ＤＰｒから送出されたデータについて、全てのＴ−ＤＰｒ間の負荷が等しくなることを当該Ｓ−ＤＰｒ内部で保証する」ことである。この時、「Ｔ−ＤＰｒの負荷」をどのように定義するかにより、ＭＩＭＤのスキューと生成率のスキューに対応するか否かが分かれる。
【０１１９】
上述した本発明の並列プロセッサ装置（請求項１）では、「必要なハード物量（メモリ除く）が小さいバケット平坦化処理の実現方式」のうちＴ−ＤＰｒの負荷につき既存技術と同じく「Ｔ−ＤＰｒへの入力データ総量」のみに着目し、転送宛先プロセッサ決定用テーブルを用いてこれを均等化している。
また、本発明の並列プロセッサ装置（請求項２）では、Ｔ−ＤＰｒの負荷につき生成率のスキューやＭＩＭＤのスキューをも考慮し、転送宛先プロセッサ決定用テーブルにおいてＴ−ＤＰｒ入力量を動的に調整することにより、「作業を行なうために必要なＴ−ＤＰｒ処理時間」を均等化することができる。
【０１２０】
さらに、上述した並列プロセッサ装置においては、プロセッサ間転送単位が個々のエンティティ（タプル）である必要はなくなるため、受信側Ｔ−ＤＰｒが同一であるならば異なる評価関数出力値（バケットＩＤ）をもつエンティティ群（タプル群）を送信側のＳ−ＤＰｒでまとめてしまい、これを転送単位とすることにより、プロセッサ間データ転送のためのオーバヘッドを小さくすることができる（請求項３）。
【０１２１】
ただし、Ｔ−ＤＰｒの負荷の調整を行なうために、転送宛先プロセッサ決定用テーブルにおいて「各Ｔ−ＤＰｒに入力されるタプル数を増減する」方式と、「各Ｔ−ＤＰｒに入力される各エンティティのデータ量（タプル長）の和を増減する」方式とが考えられる。
上記既存技術ではタプル数を増減している訳だが、前述のようにプロセッサ間の転送単位がエンティティ群となる場合、１回の転送単位は、転送されるエンティティ群のデータ量総和が適当な固定値になるように設定されることが予想される。
【０１２２】
請求項２記載の並列プロセッサ装置は、「各Ｔ−ＤＰｒからＳ−ＤＰｒ群に対して等しい頻度でデータ受信試行が行なわれる」ことを骨子としており、１度の送受信作業で転送される単位が、上記のように固定エンティティ数（固定タプル数）ではなくそのデータ量総和が固定になるように設定されるならば、上述のようにプロセッサ間転送単位をエンティティ群とすることは、当然、「各Ｔ−ＤＰｒに入力されるエンティティのデータ量の和を増減する」方式を採用していることと同義である。
【０１２３】
これは、請求項２に係る発明で記述する、Ｓ−ＤＰｒ側で転送宛先プロセッサ決定用テーブルを用いて「注目するエンティティをあるＴ−ＤＰｒに送付した場合そのＴ−ＤＰｒの負荷はどのようになるか」を判定する方式に反映されるべきだが、しかしこれを反映しなければ全く動作しないというものでもない。
つまり、非常に多いタプル数を扱うならば、どのチャンク／Ｔ−ＤＰｒでも平均的なエンティティのデータ量（タプル長）はほぼ同じになることが予想され、エンティティ数ベースの負荷調整は、エンティティのデータ量総和ベースの負荷調整と同じ結果になることが期待できる。即ち、このようなケースでは上記反映の必要はあまりないと予想できる。
【０１２４】
これに対して、それ程タプル数が多くない場合には、やはり上記反映を行なっておいた方が負荷の平坦化はより確実に実行することができる。従って、請求項４に係る発明の並列プロセッサ装置では、プロセッサ間転送単位をエンティティ群とし、さらに請求項２に係る発明の「Ｔ−ＤＰｒの負荷を予測する方式」を上記議論にあわせて修正し、エンティティのデータ量総和ベースの負荷調整を行なうようにしてる。
【０１２５】
一方、請求項５記載の並列プロセッサ装置では、管理用プロセッサＡにより、第１プロセッサ群に属する各プロセッサに格納されているデータグループが記憶・管理されており、第２プロセッサ群に属するプロセッサＢが第１プロセッサ群に格納されるデータグループについて新たな処理を開始できる状況になると、このプロセッサＢから管理用プロセッサＡに対してデータグループの割当が依頼される。
【０１２６】
この割当依頼を受けた管理用プロセッサＡにより、プロセッサＢに対し、未割当のデータグループの割当が行なわれ、そのデータ割当に従って、第１プロセッサ群に属する各プロセッサからプロセッサＢに対し、該当するデータグループに含まれる全てのデータが送付される。この後、プロセッサＢにより、当該データグループに対する処理が開始される。
【０１２７】
また、請求項６記載の並列プロセッサ装置では、管理用プロセッサＡにおいて、第１プロセッサ群に属する各プロセッサに格納されているデータグループの容量が各データグループについて積算され、第１プロセッサ群全体について各データグループの容量が各データグループの識別子とともに記憶・管理されており、第２プロセッサ群に属するプロセッサＢが第１プロセッサ群に格納されるデータグループについて新たな処理を開始できる状況になると、このプロセッサＢから管理用プロセッサＡに対してデータグループの割当が依頼される。
【０１２８】
この割当依頼を受けた管理用プロセッサＡにより、プロセッサＢに対し、記憶しているデータグループのうち容量の大きいものから順に割当が行なわれる。そして、そのデータ割当に従って、第１プロセッサ群に属する各プロセッサからプロセッサＢに対し、該当するデータグループの全データが送付された後、プロセッサＢにより、当該データグループに対する処理が開始される。
【０１２９】
【実施例】
以下、図面を参照して本発明の実施例を説明する。
（ａ）第１実施例の説明
（ａ１）第１実施例において必要な構成要件
第１実施例は、第１発明の並列プロセッサ装置にかかる技術で、この第１実施例で必要な構成要件は、下記（１）  〜（３）  の通りである。
【０１３０】
（１）  各Ｓ−ＤＰｒに、「どのＴ−ＤＰｒに、どのバケット（チャンク）に属するタプル（エンティティ）を、いくつ送出したか」が記述される「Ｓ−ＤＰｒでの局所平坦化を実現するための２次元テーブル」（転送宛先プロセッサ決定用テーブル）が設けられる。
（２）  各Ｓ−ＤＰｒは、あるタプルのバケットＩＤ（当該タプルに対して所定評価関数を適用した際の出力値）が確立すると、そのバケットＩＤをもつ転送宛先プロセッサ決定用テーブルの要素（カウント値）を全て抽出し、その要素の中で最も小さな値をもつ要素に対応するＴ−ＤＰｒを、当該タプルの転送宛先として決定する。
【０１３１】
（３）  この後、タプル転送を行なったＳ−ＤＰｒは、転送宛先プロセッサ決定用テーブル上の当該バケットＩＤと当該転送宛先Ｔ−ＤＰｒとに対応する要素（カウント値）に１を加算する。
（ａ２）第１実施例の正当性の説明
上述のような構成要件をもつ第１実施例では、あるＳ−ＤＰｒから送出されるタプル数が、各バケットＩＤ毎に、全てのＴ−ＤＰｒについてほぼ等しくなる理由は明らかであるため、その詳細な説明は省略する。
【０１３２】
各Ｓ−ＤＰｒを見たとき、Ｔ−ＤＰｒ側に送付するタプル数は、同一バケットＩＤに対してたかだか１しか違わない。従って、システム全体でＴ−ＤＰｒ間の受信タプル数はたかだかＳ−ＤＰｒ台数しか違わない。この数は、一般にタプル総数やバケットサイズに比べて十分に小さく、Ｔ−ＤＰｒの入力タプル数によってＴ−ＤＰｒの負荷を計る限り負荷の平坦化は十分に達成される。
【０１３３】
（ａ３）第１実施例の実装形態の説明
図１は本発明の第１実施例としての並列プロセッサ装置の全体構成を示すブロック図で、この図１において、４００は複数のＳ−ＤＰｒ４００Ａ，４００Ｂ，…，４００ＣからなるＳ−ＤＰｒ群、６００はＳ−ＤＰｒ群４００に属するＳ−ＤＰｒ４００Ａ〜４００Ｃのうちの任意のものから後述するＴ−ＤＰｒの任意のものへデータ送信を行ないうるネットワーク機構、７００は複数のＴ−ＤＰｒ７００Ａ，７００Ｂ，…，７００ＣからなるＴ−ＤＰｒ群である。
【０１３４】
また、図２は第１実施例におけるＳ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図で、この図２を一見して分かる通り、各Ｓ−ＤＰｒ４００Ａ〜４００Ｃのハードウエア構成は、図４１に示した既存技術のものとほぼ同様である。
ただし、本実施例の各Ｓ−ＤＰｒ４００Ａ〜４００Ｃと既存技術の各Ｓ−ＤＰｒ１００Ａ〜１００Ｃとの主要な相違点は、本発明を実現するために主記憶部４０２中に転送宛先プロセッサ決定用テーブル４２０がそなえられていることである。
【０１３５】
また、図６にて後述する通り、各Ｔ−ＤＰｒ７００Ａ〜７００Ｃのハードウエア構成も、各Ｓ−ＤＰｒ４００Ａ〜４００Ｃ側のみに転送宛先プロセッサ決定用テーブル４２０が存在すること以外は、各Ｓ−ＤＰｒ４００Ａ〜４００Ｃのハードウエア構成と同じであり、物理的には同一のプロセッサが同時に同一業務または別業務についてＳ−ＤＰｒかつＴ−ＤＰｒであることが許される。
【０１３６】
図２において、４０１は各Ｓ−ＤＰｒ４００Ａ〜４００Ｃの内部にあってＳ−ＤＰｒ処理を統括・実行するマイクロプロセッサ、４０２は処理データおよびマイクロプロセッサ４０１を駆動するソフトウェアコードを格納する主記憶部である。
４０３は前述のネットワーク機構６００から送付されたデータを受理する入力ポート回路で、この入力ポート回路４０３は、入出力線４１４を経由してネットワーク機構６００に結合されるほか、少なくとも自プロセッサ宛のメッセージまたはデータ入力があったことをマイクロプロセッサ４０１に通知する機能と、マイクロプロセッサ４０１の指示に従って入力したデータを主記憶部４０２中のマイクロプロセッサ４０１が指定したアドレスに格納する機能とを有している。
【０１３７】
ここで、第１実施例に関する本発明の範囲で、各Ｓ−ＤＰｒ４００Ａ〜４００Ｃ内における入力ポート回路４０３がマイクロプロセッサ４０１から見て動作することはないが、後述するように、第１実施例ではネットワーク機構６００が共通バス構造（図４にて後述）であることを仮定したため、自Ｓ−ＤＰｒ宛でないメッセージあるいはデータもこの入力ポート回路４０３に送付される。
【０１３８】
従って、本実施例の入力ポート回路４０３は、送信データ中の宛先プロセッサ識別子フィールドに自らアクセスして自Ｓ−ＤＰｒ宛であるか否かを判定し、自Ｓ−ＤＰｒ宛でないならばそのデータを破棄する機能も有している。なお、マイクロプロセッサ４０３に対して自Ｓ−ＤＰｒの識別子を通知する作業は、例えばシステム立ち上げ時に、後述する入力線４１６を経由して図示しない制御プロセッサからマイクロプロセッサ４０１を経由して行なわれるようになっている。
【０１３９】
４０４は入出力線４１４を通じネットワーク機構６００に対してデータを送出する出力ポート回路で、この出力ポート回路４０４は、マイクロプロセッサ４０１の指示に従って、マイクロプロセッサ４０１が指定したアドレスから、既にマイクロプロセッサ４０１により後述する形状に整形されたデータを読み出し、これをネットワーク機構６００に送出する機能を有している。
【０１４０】
４０５〜４０７はＩ／Ｏバス駆動回路で、これらのＩ／Ｏバス駆動回路１０５〜１０７は、それぞれ、Ｉ／Ｏバス４１１〜４１３を経由してＩ／Ｏ装置４０８〜４１０を駆動するもので、Ｉ／Ｏ装置４０８〜４１０がＩ／Ｏバス４１１〜４１３を経由してＩ／Ｏ処理終了を報告するためのＩ／Ｏ割り込みを通知してきた時に割り込みをマイクロプロセッサ４０１に対して発生する機能のほか、マイクロプロセッサ４０１が発行したＩ／ＯコマンドをＩ／Ｏ装置４０８〜４１０に送付する機能や、さらにマイクロプロセッサ４０１が指定した主記憶部４０２内の領域と各Ｉ／Ｏ装置４０８〜４１０とのデータ授受を実行する機能を有している。
【０１４１】
４１６は図示しない制御プロセッサからの入力線で、この入力線４１６は、マイクロプロセッサ４０１への割り込み信号線およびデータ授受バスから構成されて、前述のごとく各Ｓ−ＤＰｒ４００Ａ〜４００Ｃの識別子を通知したり、マイクロプロセッサ４０１の状態を外部からモニタしたり、マイクロプロセッサ４０１に対して業務実行に必要なデータ（例えば後述するタプル選択のための条件を記述した情報）を与えたり、業務実行の開始を指示したりするために使用されるものである。
【０１４２】
４２０は前述した本実施例において必要な構成要件である転送宛先プロセッサ決定用テーブルで、その具体的な構成例が図３に示される。
この図３に示す転送宛先プロセッサ決定用テーブル４２０では、各列（カラム：Ｃｏｌｕｍｎ）  が当該業務に関するＴ−ＤＰｒ７００Ａ〜７００Ｃの個々の識別子（第１指定要素）に対応し、各行（Ｒｏｗ）が当該業務に関するバケットＩＤ（ハッシュ関数等の所定評価関数の出力値；第２指定要素）に対応する。
【０１４３】
この転送宛先プロセッサ決定用テーブル４２０は、各Ｓ−ＤＰｒ４００Ａ〜４００Ｃ内に１業務当たり１個存在し、当該業務に関して各Ｓ−ＤＰｒ４００Ａ〜４００Ｃから送出されるデータにつきＴ−ＤＰｒ７００Ａ〜７００Ｃ間での入力調整を行なうためのものである。従って、もし、あるプロセッサが複数の業務につきＳ−ＤＰｒとして動作しており、それぞれの業務が「バケット平坦化処理」である時、一つのＳ−ＤＰｒ内部に転送宛先プロセッサ決定用テーブル４２０は複数個存在する。
【０１４４】
図３に示す転送宛先プロセッサ決定用テーブル４２０では、０番目のカラム（カラム０）がこの業務に参加している識別子“０７”のＴ−ＤＰｒに対応しており、以下、同様に、第１カラムが識別子“０Ａ”のＴ−ＤＰｒ、第２カラムが識別子“０２”のＴ−ＤＰｒ（以下略）に対応している。このようなカラムとプロセッサ識別子との対応関係が主記憶部４０２上の変換１次元リスト４２１として準備される。
【０１４５】
なお、本実施例の範囲内で転送宛先プロセッサ決定用テーブル４２０のカラム数は各Ｔ−ＤＰｒ７００Ａ，７００Ｂ，…，７００Ｃに対応していれば良く、その並び順に対して特に要求はない。カラム識別子とＴ−ＤＰｒのプロセッサ識別子との相互変換の手法についても本発明による要求は特になく、リスト４２１の存在は、本発明における必須構成要件ではない。リスト４２１は、テーブル４２０のカラム識別子によりアクセスされて、対応するプロセッサ識別子を与えるものである。
【０１４６】
図４は第１実施例におけるプロセッサ間通信機構（ネットワーク機構６００）の構成例を示す図であり、この第１実施例では、図４に示すように、既存技術との差を明確にするため、ネットワーク機構６００は、単なる共通バス６０１によるプロセッサ間結合により構成されるものとする。
この第１実施例では、バケット平坦化のためのインテリジェンスは、全てプロセッサ（Ｓ−ＤＰｒ４００Ａ〜４００Ｃ，Ｔ−ＤＰｒ７００Ａ〜７００Ｃ）側に置く。このため、プロセッサ間結合機構としてのネットワーク機構６００は、多段網等の特定のトポロジや機能が期待されることなく、物量などの要求に対して最適なハードウエア構成を採用することができる。
【０１４７】
ここで、共通バス６０１は、各プロセッサ４００Ａ〜４００Ｃ，７００Ａ〜７００Ｃから送出されたデータ内容は、全てのプロセッサ４００Ａ〜４００Ｃ，７００Ａ〜７００Ｃに対して同報される。そして、前述した通り、各プロセッサ４００Ａ〜４００Ｃ，７００Ａ〜７００Ｃ（入力ポート回路４０３，７０３）は、その同報データの中の宛先プロセッサ識別子フィールドを参照し、自プロセッサ宛でないデータを破棄している。なお、共通バスベースのプロセッサ間結合機構については同業者にとって自明であるので詳細な説明は行なわない。
【０１４８】
図５は第１実施例におけるプロセッサ間で送受されるデータのフォーマットを示す図で、この図５において、５００は制御情報フィールドで、この制御情報フィールド５００には、既存技術とは異なり、ネットワーク機構６００に対して平坦化処理のための特別な動作を命ずるための情報は含まれていない。
また、５０１は宛先プロセッサ識別子を格納するフィールドで、このフィールド５０１に格納される宛先プロセッサ識別子を各プロセッサ４００Ａ〜４００Ｃ，７００Ａ〜７００Ｃの入力ポート回路４０３，７０３にて参照することにより、自プロセッサ宛の送信データであるか否かが判定されるようになっている。
【０１４９】
５０２は送信元プロセッサのプロセッサ識別子を格納されるフィールドで、このフィールド５０２に格納されるプロセッサ識別子は、障害発生時以外使用されないものである。
５０３は当該データがいずれの業務のために送信されたものであるかを示す情報を格納するフィールド、５０４はバケットＩＤを格納するフィールド、５０５はタプルデータを格納するフィールドである。
【０１５０】
図６は第１実施例におけるＴ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図であり、前述した通り、図６に示す第１実施例の各Ｔ−ＤＰｒ７００Ａ〜７００Ｃは、図２に示した各Ｓ−ＤＰｒ４００Ａ〜４００Ｃと同様に構成されて、Ｓ−ＤＰｒの機能とＴ−ＤＰｒの機能とを一つのプロセッサで兼ねることが可能になっている。
【０１５１】
また、図６において符号７０１〜７１４，７１６を付して示される構成要素は、それぞれ図２により前述した符号４０１〜４１４，４１６を付した構成要素とほぼ同じものである。
ただし、各Ｔ−ＤＰｒ７００Ａ〜７００Ｃが各Ｓ−ＤＰｒ４００Ａ〜４００Ｃと異なる点は、転送宛先プロセッサ決定用テーブル４２０を主記憶部７０２上に有していない点と、入力ポート回路７０３がマイクロプロセッサ７０１から見て動作することがある一方で出力ポート回路７０４が使用されることがない点との２つである。
【０１５２】
次に、上述のごとく構成された第１実施例の装置における各Ｓ−ＤＰｒ４００Ａ〜４００Ｃの動作アルゴリズムを、図７を参照しながら説明する。
（１）  各Ｓ−ＤＰｒ４００Ａ〜４００Ｃのマイクロプロセッサ４０１は、このＳ−ＤＰｒ４００Ａ〜４００Ｃに結合されているＩ／Ｏ装置４０８〜４１０のファイルディレクトリ（Ｆｉｌｅ  Ｄｉｒｅｃｔｏｒｙ）４０２Ａを参照して当該業務の処理対象であるテーブルの格納位置を入手し、該領域からデータを読み出すことを、Ｉ／Ｏバス駆動装置４０５〜４０７の適当なものに指示する（ステップ４０１Ａ；“Ｉｓｓｕｅ  Ｒｅａｄ  Ｒｅｑｕｅｓｔ”）  。この指示には、対象となるＩ／Ｏ装置４０８〜４１０の識別子，装置内の格納アドレス，読み出しデータの主記憶部４０２内の格納アドレス〔図７中のＩ／Ｏバッファ４０２Ｂのアドレス〕が含まれている。
【０１５３】
（２）  Ｉ／Ｏ処理が終了すると、マイクロプロセッサ４０１は、Ｉ／Ｏバッファ領域４０２Ｂ中に格納されたデータに対して、図示しない制御プロセッサから入力線４１６を経由して予め伝達された選択条件（Ｃｏｎｄｉｔｉｏｎ  ｆｏｒ  ＳＥＬＥＣＴ）４０２Ｃにより記述される、タプル内における以後の処理に必要なフィールドの選択・抽出〔即ち関係代数でいうリストリクション（Ｒｅｓｔｒｉｃｔｉｏｎ）とプロジェクション（Ｐｒｏｊｅｃｔｉｏｎ）〕を実行する（ステップ４０１Ｂ）。なお、上述の選択条件４０２Ｃは、例えばＳＱＬのような記述言語で記述されてもよいし、もっと低いレベルの言語であってもよいし、あるいは、マイクロプロセッサ４０１で走行するプログラムそのものであってもよい。詳細は技術の本質に関係ないので、その説明は省略する。
【０１５４】
（３）  上記処理で抽出された個々のタプルに対して、マイクロプロセッサ４０１は、次にハッシュ処理を行ない（ステップ４０１Ｃ；“Ｈａｓｈ”）、このタプルが属するバケットのＩＤ（所定評価関数の出力値）を決定する。
以上の（１）  〜（３）  の動作は、図４３により説明した既存技術の動作と全く同様である。
【０１５５】
（４）  バケットＩＤの決定後、マイクロプロセッサ４０１は、転送宛先プロセッサ決定用テーブル４２０の参照すべき行をバケットＩＤにより決定し、その行の中で最も小さな欄（最も小さなカウント値を記入されている欄）を求める。図３に示す例で説明すると、バケットＩＤが“５”である時、第５行（先頭行はバケットＩＤ“０”に対応する第０行とする）が参照すべき行であり、その内容が図３に示すようなものであったとすると、最も小さな値“１５”を記入されている第３列（同様に先頭列は第０列とする）が選択され、変換１次元リスト４２１により列番号がプロセッサＩＤに変換されて宛先プロセッサ（Ｔ−ＤＰｒ）の識別子“１Ｆ”（ヘキサデシマル）が得られる（ステップ４０１Ｄ；“Ｓｃａｎ  Ｒｏｗ  ＆Ｆｉｘ  Ｔ−ＤＰｒ”）。
【０１５６】
（５）  マイクロプロセッサ４０１は、上記処理により特定されたテーブル４２０の第５行第３列の内容を１だけインクリメントし、その内容を“１５”から“１６”に変更する（ステップ４０１Ｅ；“Ｉｎｃｒｅｍｅｎｔ  Ｔａｂｌｅ  ４２０  ”）。つまり、テーブル４２０の内容は、各列に対応するＴ−ＤＰｒ（７００Ａ〜７００Ｃ）に各行に対応するバケットＩＤをもつタプルデータをいくつ転送したか表すものとなっている。上記処理により、Ｔ−ＤＰｒ群７００に属するどのＴ−ＤＰｒ７００Ａ〜７００Ｃに対しても、各Ｓ−ＤＰｒ４００Ａ〜４００Ｃから送出されたデータに関しては、あるバケットＩＤをもつタプルはほぼ等しい個数（±１の誤差範囲）だけ転送される。
【０１５７】
（６）  次に、マイクロプロセッサ４０１は、当該Ｓ−ＤＰｒ４００Ａ〜４００Ｃのプロセッサ識別子，業務識別子（タスクＩＤ），バケットＩＤ，上記宛先Ｔ−ＤＰｒのプロセッサ識別子およびタプルデータから、送出されるべき転送データを図５に示したフォーマットで主記憶部４０２内に作成する（ステップ４０１Ｆ；“Ｆｏｒｍ  Ｓｅｎｄ  Ｄａｔａ”）。
【０１５８】
（７）  そして、マイクロプロセッサ４０１は、主記憶部４０２中の転送データの先頭アドレスを示して出力ポート回路４０４に対して出力処理を指示する（ステップ４０１Ｇ；“Ｉｓｓｕｅ  Ｓｅｎｄ  Ｒｅｑｕｅｓｔ”）。
（８）  以上の動作を、当該Ｓ−ＤＰｒ４００Ａ〜４００Ｃに結合されているＩ／Ｏ装置４０８〜４１０に格納されている処理対象テーブル中の全てのタプルを読み出し終わるまで繰り返し、図示しない制御プロセッサに対して処理の終了を報告する。
【０１５９】
次に、上述のごとく構成された第１実施例の装置における各Ｔ−ＤＰｒ７００Ａ〜７００Ｃの動作アルゴリズムを、図８に示す。この図８に示すように、本実施例の各Ｔ−ＤＰｒ７００Ａ〜７００Ｃの動作アルゴリズムは、図４４にて示した既存技術におけるＴ−ＤＰｒ側動作アルゴリズムと同じである。
異なる点は、入力ポート回路７０３が自プロセッサ宛の転送データの到着を確認してマイクロプロセッサ７０１に通知するというインテリジェンスをもたなければならない点のみである。
【０１６０】
つまり、入力ポート回路７０３が自プロセッサ宛の転送データの到着を確認した後、既存技術と全く同様の動作アルゴリズムで、各Ｔ−ＤＰｒ７００Ａ〜７００Ｃは動作することになるので、その詳細な説明は省略する〔詳細については図４４による説明、項目（Ｅ１）〜（Ｅ４）参照〕。
なお、図８において符号７０２Ａ〜７０２Ｇを付して示される構成要素は、それぞれ図４４により前述した符号３０２Ａ〜３０２Ｇを付した構成要素と全く同じものであり、図８におけるステップ７０１Ａ〜７０１Ｄによる処理は、それぞれ図４４におけるステップ３０１Ａ〜３０１Ｄによる処理と全く同じである。
【０１６１】
このように、本発明の第１実施例の並列プロセッサ装置によれば、以下のような効果が得られる。
主要な効果は、ネットワーク機構６００の部分のハードウェア物量の低減である。既存技術では、上記の通り多段網による構成が必須であり、かつスイッチングユニットに要求されるインテリジェンスがかなり高いものであるため、当然、物量が増大する。これに対して、上述した通り、第１実施例の並列プロセッサ装置では、多段網であろうが共通バスであろうが、ネットワーク機構６００に関して特に特別な機構や機能を必要としなくなる。
【０１６２】
特に、問題になるのは必要な作業メモリとしてのメモリ以外の論理回路物量である。メモリ量については、上述した通り既存技術ではスイッチングユニット内のレジスタ領域の容量和がプロセッサ台数ｎに対してｎ２  ｌｏｇ  ｎオーダであるのに対して、本実施例における代替物である転送宛先プロセッサ決定用テーブル４２０の容量和はｎ３  オーダであり、むしろ拡大している。しかし、現在メモリの容量に対するコストは十分に低く、一方、論理回路は開発コストも含めて考えると同量のトランジスタ数ではメモリとは比較にならない程高いコストになる。
【０１６３】
例えば、既存技術ではスイッチングユニット内にＳ−ＤＰｒ／Ｔ−ＤＰｒと同じ種類のマイクロプロセッサを使用する可能性すらあり、この場合には全体のコスト（システムコスト）は少なくともプロセッサ側コストの（１＋ｌｏｇ  ｎ）倍となる。ｎが数百のオーダである時、この値はシステムコストがプロセッサ側コストの６〜７倍以上となる可能性があることを示唆している。
【０１６４】
一方、ｎが数百の程度になっても、転送宛先プロセッサ決定用テーブル４２０の容量は１プロセッサ内では精々数ＭＢのオーダであり、これはコストで言えば高性能プロセッサチップ１個にも満たない。つまり、本実施例によれば、追加されるシステムコストはプロセッサ側の元々のコストに達せず、コスト上の有利点は明らかである。
【０１６５】
（ｂ）第２実施例の説明
（ｂ１）第２実施例において必要な構成要件
第２実施例は、第２発明の並列プロセッサ装置にかかる技術で、この第２実施例で必要な構成要件は、下記（１）  〜（９）  の通りである。
（１）  上記第１実施例と同様に、Ｔ−ＤＰｒの識別子およびバケットＩＤによりその要素（カウント値）が決定されるカウンタテーブル（転送宛先プロセッサ決定用テーブル）が、Ｓ−ＤＰｒ内に関連する業務単位に設けられる。
【０１６６】
（２）  Ｓ−ＤＰｒ内には、ある業務についての送信先Ｔ−ＤＰｒ個々に対応して送信データをそのエントリとする待ち行列機構（転送キュー）が一つずつ作成される。各転送キューの管理アルゴリズムについて、特にＦＩＦＯ型メモリが採用される必要はないが、原則として途中離脱のない、キュー長の定常期待値については、各転送キューがＦＩＦＯ型メモリで管理された場合と同じ値になる制御アルゴリズムが採用されなけばならない。
【０１６７】
（３）  各転送キューについて「未だ転送されていないタプルの数」を同一Ｓ−ＤＰｒ処理のために行なわれる「転送宛先プロセッサを決定する処理」に対して通知する機構〔各転送キューに蓄積される転送対象エンティティ（タプル）の数を検出する蓄積数検出手段〕が準備される。
（４）  「転送宛先プロセッサを決定する処理」は、１タプルのハッシュ値（バケットＩＤ）が決定すると、上記転送宛先プロセッサ決定用テーブル中のこのバケットＩＤにより、アクセスできる各要素（各Ｔ−ＤＰｒに対応する）の中で最も現在の値が小さい要素を探し、これに対応するＴ−ＤＰｒをこのタプルが送付されるべき宛先プロセッサに決定する。
【０１６８】
（５）  この後、Ｓ−ＤＰｒは、転送宛先プロセッサ決定用テーブル上の当該バケットＩＤおよび当該転送宛先Ｔ−ＤＰｒとに対応する要素に対して、当該業務および当該Ｔ−ＤＰｒに対応する転送キューに内に現在蓄積されている「未だ転送されていないタプルの数」に１（該時点で転送宛先が決定したタプルの分）を加算した値にさらに０以外の正の整数を乗算した値を加算する。
【０１６９】
（６）  Ｓ−ＤＰｒからＴ−ＤＰｒへのデータ転送が実際に行なわれるトリガは、Ｔ−ＤＰｒ側から与えられる。つまり、各Ｔ−ＤＰｒは、各Ｓ−ＤＰｒに対して「１単位（第２実施例では１タプル）の送信を行なえ」という趣旨のトリガ信号を発行することができる。このトリガ信号を受理したＳ−ＤＰｒは、送信すべきデータ（当該業務および当該Ｔ−ＤＰｒのためのデータであって、且つ、上記転送キュー中に存在する未だ転送されていないデータ）が存在するならばＴ−ＤＰｒからの指示に従って、当該Ｓ−ＤＰｒから当該Ｔ−ＤＰｒに対して１単位のデータを送信する。送信後、当該Ｓ−ＤＰｒは、対応する転送キュー中に存在する「未だ転送されていないデータの数」を転送された１タプル分減少させる。
【０１７０】
（７）  もし、上記トリガ信号が送付された時、当該Ｓ−ＤＰｒ中に当該Ｔ−ＤＰｒに対する未転送データが存在しないならば、当該Ｓ−ＤＰｒは、「転送されるべき転送データが現在存在しない」旨の応答を当該Ｔ−ＤＰｒに応答してデータ転送を行なわない。
（８）  Ｔ−ＤＰｒ（正確には該業務についてＴ−ＤＰｒとしての動作が指示されている物理プロセッサ）中の当該業務のＴ−ＤＰｒとしての動作を行なうプロセスは、当該業務に関するＳ−ＤＰｒ群に属する各Ｓ−ＤＰｒに対し、等しい頻度で上記転送処理のためのトリガ信号を送付する。
【０１７１】
（９）  Ｔ−ＤＰｒからＳ−ＤＰｒ群への上記トリガ信号の発行は、Ｔ−ＤＰｒ側処理の進捗上新たなるデータを入力することが可能な状況になった時点で行なわれる。つまり、Ｔ−ＤＰｒとしての処理速度と上記トリガ信号の発行頻度とはある程度長い時間で見れば比例する。
（ｂ２）第２実施例の正当性の説明
上述のような構成要件をもつ第２実施例では、各Ｔ−ＤＰｒが各Ｓ−ＤＰｒに対して均等に上記トリガ信号を送付し、この頻度がある程度長い時間で見れば該Ｔ−ＤＰｒの動作速度（該業務およびＴ−ＤＰｒとしての処理速度）に比例するならば、あるＳ−ＤＰｒから見て上記トリガ信号の到来する頻度は、各Ｔ−ＤＰｒの動作速度、あるいは、当該業務のＴ−ＤＰｒとしての演算性能に比例することになる。
【０１７２】
Ｓ−ＤＰｒが業務毎かつＴ−ＤＰｒ毎に対応して作成する待ち行列機構（転送キュー）の長さは、各転送キューヘのタプル投入頻度を上記トリガ信号が対応するＴ−ＤＰｒから当該業務のために送付される頻度で割った値ρにより、ほぼρ／（１−ρ）で近似することができる。
もし、Ｓ−ＤＰｒ側の宛先決定アルゴリズムが「どのＴ−ＤＰｒに対しても単一業務ついては等しい待ち行列長になるように制御する」というものであるならば、ρ０  ／（ρ０  −１）＝ρ１  ／（１−ρ１  ）が成立し、０≦ρ０  ，ρ１  ≦１であるから、即ちρ０  ＝ρ１  ということになる。これは「転送キューへのタプル投入頻度と該転送キューに対応するＴ−ＤＰｒの処理性能が比例する」ことを意味する。
【０１７３】
ただし、待ち行列長の瞬間的な値は必ずしも上記Ｔ−ＤＰｒの演算性能に比例しない。ある業務に関するＳ−ＤＰｒ側プロセスの走行タイミングとＴ−ＤＰｒ側プロセスの走行タイミングとがずれただけで簡単に待ち行列長が伸びてしまうからである。待ち行列の評価も時間軸上の平均が必要で、待ち行列長を加算した値が等しくなるように制御することにより、これを達成することができる。
【０１７４】
転送キューへのタプル投入頻度は、即ち該Ｓ−ＤＰｒからＴ−ＤＰｒへの送信頻度であり、これがＴ−ＤＰｒ側の処理性能と比例するということは、Ｓ−ＤＰｒから各Ｔ−ＤＰｒへの送信量がＴ−ＤＰｒ側の処理性能に比例した配分になっているということである。Ｔ−ＤＰｒ側の処理性能は、Ｔ−ＤＰｒのＭＩＭＤのスキューや生成率のスキューを加味した総合性能で評価されるから、本発明の目的の一つである「生成率のスキューおよびＴ−ＤＰｒ側のＭＩＭＤのスキューへの対応を可能にすること」が実現されることになる。
【０１７５】
（ｂ３）第２実施例の実装形態の説明
図９は本発明の第２実施例としての並列プロセッサ装置の全体構成を示すブロック図で、この図９において、８００は複数のＳ−ＤＰｒ８００Ａ，８００Ｂ，…，８００ＣからなるＳ−ＤＰｒ群、６００は第１実施例と全く同様構成のものでＳ−ＤＰｒ群８００に属するＳ−ＤＰｒ８００Ａ〜８００Ｃのうちの任意のものから後述するＴ−ＤＰｒの任意のものへデータ送信を行ないうるネットワーク機構、９００は複数のＴ−ＤＰｒ９００Ａ，９００Ｂ，…，９００ＣからなるＴ−ＤＰｒ群である。
【０１７６】
また、図１０は第２実施例におけるＳ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図で、この図１０に示す通り、各Ｓ−ＤＰｒ８００Ａ〜８００Ｃのハードウエア構成は、符号８３０〜８３２を付した構成要素を除けば、図２に示した第１実施例のものと同様である。つまり、図１０において符号８０１〜８１４，８１６，８２０を付して示される構成要素は、それぞれ図２により前述した符号４０１〜４１４，４１６，４２０を付した構成要素と同じものである。
【０１７７】
以下に、第２実施例の各Ｓ−ＤＰｒ８００Ａ〜８００Ｃの構成について、第１実施例と異なる点のみを説明する。
入力ポート回路８０３は、第２実施例においてはマイクロプロセッサ８０１から見て動作している。つまり、Ｔ−ＤＰｒ９００Ａ〜９００Ｃ側からの送信トリガ信号が入力ポート回路８０３に投入されると、この入力ポート回路８０３は、その内容を後述するアルゴリズムに従ってマイクロプロセッサ８０１に伝達する。
【０１７８】
また、転送宛先プロセッサ決定用テーブル８２０、および、このテーブル８２０の列の識別子をＴ−ＤＰｒのプロセッサ識別子に変換する変換１次元リスト（第２実施例では図示せず）の構成自体は、第１実施例のテーブル４２０およびリスト４２１と同様であるが、テーブル８２０の内容の更新アルゴリズムについては後述するように差がある。
【０１７９】
そして、第２実施例の各Ｓ−ＤＰｒ８００Ａ〜８００Ｃの主記憶部８０２上には、ある一つ業務についての送信先Ｔ−ＤＰｒ９００Ａ〜９００Ｃ個々に対応して送信データ（タプル）をそのエントリとする転送キュー（待ち行列機構）８３０〜８３２がそなえられている。
図１１は第２実施例における転送キューの構造の一例を示す図で、この図１１に示す転送キューの構造は、第２実施例における転送単位（図５に示した第１実施例のものと同じ転送単位）を双方向のポインタで結合したものとする。この構造は、各転送キュー８３０〜８３２に共通のものであり、個々の業務およびＴ−ＤＰｒ９００Ａ〜９００Ｃに対応してこれらの転送キュー（待ち行列構造）が１つ作成されている。
【０１８０】
この例では、一度、転送キュー８３０〜８３２に投入された転送データ（ＳｅｎｄＤａｔａ）８４０が転送されずに転送キュー８３０〜８３２の途中からデキューされることはないものとする。
また、新たに転送データ８４０が各転送キュー８３０〜８３２にエンキューされる場合、その転送データ８４０は、このリスト構造末尾に接続され、図１１に示すキュー長（Ｑｕｅｕｅ  Ｌｅｎｇｔｈ）フィールド８４１の内容に１だけ加算される。一方、新たに転送データ８４０が各転送キュー８３０〜８３２からデキューされる場合、その転送データ８４０は、このリスト構造の先頭からデキューされ、図１１に示すキュー長フィールド８４１の内容から１だけ減算される。
【０１８１】
上述した「未だ転送されていないデータの数」（未転送データ量，未転送タプル数）とは、キュー長フィールド８４１に保持される値であり、このフィールド８４１の値を読み取ることにより、各Ｓ−ＤＰｒ８００Ａ〜８００Ｃとしての処理を行なうプロセス（マイクロプロセッサ８０１）は、この業務および各Ｔ−ＤＰｒ９００Ａ〜９００Ｃに対する未転送のデータの数を知ることができる。
【０１８２】
従って、上記プロセス（マイクロプロセッサ８０１）から読み取ることが可能にキュー長フィールド８４１を作成することにより、前述した蓄積数検出手段〔各転送キュー８３０〜８３２に蓄積される転送対象エンティティ（タプル）の数を検出するもの〕が構成されることになる。
なお、図１１において、８４２は各転送キュー８３０〜８３２の先頭位置を示すポインタ(Top of Queue Pointer)、８４３は各転送キュー８３０〜８３２の末尾位置を示すポインタ（Bottom of Queue Pointer）、８４４は各転送データ８４０に付され前のエントリ位置を示すポインタ(Previous Entry Pointer)、８４５は各転送データ８４０に付され次のエントリ位置を示すポインタ(Next Entry Pointer)、８４６は各転送データ８４０に付されその転送データ８４０についてのバイト数（Byte Count of Send Data）を保持するフィールドである。
【０１８３】
図１２は第２実施例におけるＴ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図で、この図１２に示す通り、各Ｔ−ＤＰｒ９００Ａ〜９００Ｃのハードウエア構成は、符号９２２〜９２３を付した構成要素を除けば、図６に示した第１実施例のものと同様である。つまり、図１２において符号９０１〜９１４，９１６を付して示される構成要素は、それぞれ図６により前述した符号７０１〜７１４，７１６を付した構成要素と同じものである。従って、第２実施例においても、Ｓ−ＤＰｒの機能とＴ−ＤＰｒの機能とを一つのプロセッサで兼ねることが可能になっている。
【０１８４】
以下に、第２実施例の各Ｔ−ＤＰｒ９００Ａ〜９００Ｃの構成について、第１実施例と異なる点のみを説明する。
出力ポート回路９０４は、前述の送信トリガ信号を各Ｓ−ＤＰｒ８００Ａ〜８００Ｃへ送付するためにマイクロプロセッサ９０１からの指示で動作するようになっている。
【０１８５】
また、全てのＳ−ＤＰｒ８００Ａ〜８００Ｃに対して等しい頻度で上記送信トリガ信号を送付するために、この第２実施例では、ラウンドロビン方式で送信トリガ信号を送付する対象（Ｓ−ＤＰｒ８００Ａ〜８００Ｃ）を決定するものとする。
そこで、第２実施例の各Ｔ−ＤＰｒ９００Ａ〜９００Ｃの主記憶部９０２上には、ラウンドロビン方式を実現するために、ラウンドロビンポインタ９２２と、Ｓ−ＤＰｒ内の相対機番を物理プロセッサの絶対識別子に変換するための１次元テーブル９２３とがそなえられ、ラウンドロビンポインタ９２２が、１次元テーブル９２３上の位置を順次指し示し、このラウンドロビンポインタ９２２による指示位置の相対機番に対応したＳ−ＤＰｒ９００Ａ〜９００Ｃへ、上記送信トリガ信号が送付されるようになっている。
【０１８６】
これらのラウンドロビンポインタ９２２および１次元テーブル９２３の詳細な構造の例を図１３に示す。この図１３に示すように、第２実施例では、１次元テーブル９２３は、ラウンドロビンポインタ９２２の内容によりアクセスされ、Ｓ−ＤＰｒ内の相対番号を物理プロセッサの識別子に変換するようになっている。ここで、１次元テーブル９２３には、当該業務に参加するＳ−ＤＰｒ８００Ａ〜８００Ｃの台数分、例えばｎ台分の物理プロセッサの識別子がそれぞれ識別子フィールド９２３−０〜９２３−（ｎ─１）に保持されるとともに、その台数情報（ｔｈｅ  Ｎｕｍｂｅｒ  ｏｆ  Ｓ−ＤＰｒｓ）が台数情報フィールド９２３Ａに保持されている。
【０１８７】
また、ラウンドロビンポインタ９２２の示す値は、送信トリガ信号をＳ−ＤＰｒへ送付する都度、１ずつインクリメントされ、台数情報フィールド９２３Ａに保持される値ｎに応じて、“０”から“ｎ−１”まで増加すると、再び“０”に戻るようになっている。
次に、上述のごとく構成された第２実施例の装置における各Ｓ−ＤＰｒ８００Ａ〜８００Ｃの動作アルゴリズムを、図１４および図１５を参照しながら説明する。
【０１８８】
（１）  図１４は、各Ｓ−ＤＰｒ８００Ａ〜８００Ｃが、自プロセッサ配下のＩ／Ｏ装置８０８〜８１０からタプルデータを読み出し、そのタプルデータを転送するために、転送キュー８３０〜８３２のいずれかに投入するまでの処理の流れを示している。第２実施例では、この処理と実際の転送処理とは、非同期的に実行され、独立した処理となる。
【０１８９】
(2) 各Ｓ−ＤＰｒ８００Ａ〜８００Ｃの動作は、ハッシュ処理を行ないバケットＩＤを求める所までは、前述の既存技術の場合の例と同じである。
(3) さらに、転送宛先プロセッサ決定用テーブル８２０を使用して宛先プロセッサ（Ｔ−ＤＰｒ）を決定する論理も第１実施例のために使用したものと同じである。つまり、図１４において符号８０２Ａ〜８０２Ｃを付して示される構成要素は、それぞれ図７により前述した符号４０２Ａ〜４０２Ｃを付した構成要素と全く同じものであり、図１４におけるステップ８０１Ａ〜８０１Ｄによる処理は、それぞれ図７におけるステップ４０１Ａ〜４０１Ｄによる処理と全く同じである。
【０１９０】
(4) マイクロプロセッサ８０１は、以上の処理により特定されたテーブル８２０の特定要素の値に対して、上記処理により決定された宛先Ｔ−ＤＰｒに対応する転送キュー（ここでは符号８３０を対象とする）のキュー長フィールド８４１の値に１を加えたもの（１を加える理由は、この後、この宛先決定処理の直接の対象である１タプルをエンキューするから）を加算して更新する（ステップ８０１Ｅ；“Update Table 820”）。
【０１９１】
前述した通り、このような更新処理を行なうことにより、転送宛先プロセッサ決定用テーブル８２０の各要素の値は、対応するＴ−ＤＰｒ９００Ａ〜９００Ｃの演算性能に比例した重み付けを加えられた上で、どのバケットＩＤに関してどれだけの負荷を各Ｔ−ＤＰｒ９００Ａ〜９００Ｃに対して与えたかを概ね示す指標となる。そして、本実施例では、このような転送宛先プロセッサ決定用テーブル８２０の各要素の値が、あるバケットＩＤ内で、どのＴ−ＤＰｒについてもできるだけ等しくなるように制御されることになる。
【０１９２】
(5) なお、転送データフォーマットは、図５に示した第１実施例のものと同一であり、その転送データの作成作業も第１実施例の説明で記述したものと同じである（ステップ８０１Ｆ；“Form Send Data”）。
(6) そして、マイクロプロセッサ８０１は、特定された宛先Ｔ−ＤＰｒに対応した転送キュー８３０にこの転送データをエンキューする（ステップ８０１Ｇ；“Enqueue Send Data ”）。以後、実際にこの転送データがＴ−ＤＰｒ９００Ａ〜９００Ｃに送信される作業は、各Ｔ−ＤＰｒ９００Ａ〜９００Ｃ側から上記送信トリガ信号が送付されるのを待ち、そのトリガ信号が到着して初めて行なわれる。
【０１９３】
（７）  実際に転送データをＳ−ＤＰｒ８００Ａ〜８００Ｃ側からＴ−ＤＰｒ９００Ａ〜９００Ｃ側へ送付する処理手順が、図１５に示されている。Ｔ−ＤＰｒ９００Ａ〜９００Ｃ側から送信処理開始を指示する上記トリガ信号（Ｔｒｉｇｇｅｒ  Ｓｉｇｎａｌ）が送信されてくると、入力ポート回路８０３は、そのトリガ信号の到着をマイクロプロセッサ８０１に対して割り込みにより伝達する。マイクロプロセッサ８０１の取込み許可応答により、入力ポート回路８０３は、マイクロプロセッサ８０１が示した主記憶部８０２上のアドレスに、トリガ信号としての電文１１００Ａを格納する。図１６に、このトリガ信号のための電文１１００Ａのフォーマットの一例を示す。
【０１９４】
（８）  図１６において、１１００は符号２９０，５００を付して前述したものと同様の制御情報フィールドで、この制御情報フィールド１１００に、転送データが以下に示すフォーマットであることが記述される。１１０１は宛先Ｓ−ＤＰｒ（つまり、ここで注目しているプロセッサ）の物理プロセッサ識別子を保持するフィールド、１１０２は発信者であるＴ−ＤＰｒ９００Ａ〜９００Ｃの物理プロセッサ識別子を保持するフィールド、１１０３は各Ｔ−ＤＰｒ９００Ａ〜９００Ｃ上で走行するソフトウェアが記入した電文内容で上記トリガ信号たることを示す内容が記述されるフィールドである。この第２実施例では、１つのトリガ信号に対して固定個数（例えば１タプル）の送信単位しか転送しないので、図１６に示す電文フォーマットには、転送されるべきデータ個数あるいは長さを指示するフィールドは設けられていない。
【０１９５】
（９）  マイクロプロセッサ８０１は、主記憶部８０２に格納された電文１１００Ａのフィールド１１０３を参照することにより、この電文１１００Ａが送信トリガ信号であることを知り、同様にフィールド１１０２を参照することにより送信が行なわれるべき対象の宛先Ｔ−ＤＰｒ識別子を知る。
（１０）マイクロプロセッサ８０１は、送信トリガ信号の送信元であるＴ−ＤＰｒに対応する転送キュー８３０（または８３１，８３２）を参照し、そのキュー長フィールド８４１の値が“０”であるか否かを判断する。もし“０”であった場合、マイクロプロセッサ８０１は、「送信すべきデータがないために即時終了とする」旨の電文を作成し、これを送信トリガ信号の送信元Ｔ−ＤＰｒに返送する。この電文のフォーマットは図１６に示したものと同様であるが、フィールド１１０３内部に上記趣旨を記述したコードが記入されるものとする。
【０１９６】
（１１）もし送信トリガ信号が送付された時点で対応する転送キュー８３０内に未送信データが蓄積されていた場合、つまり、キュー長フィールド８４１の値が“０”でなかった場合、マイクロプロセッサ８０１により、１タプル分に相当する転送データが転送キュー８３０からデキューされ、その転送データが送信トリガ信号の送信元Ｔ−ＤＰｒに送付される。
【０１９７】
即ち、マイクロプロセッサ８０１は転送キュー８３０の先頭から１エントリ（１タプル）をデキューし（ステップ８０１Ｉ；“Ｄｅｑｕｅｕｅ  １  Ｔｕｐｌｅ  ”）、その先頭アドレスと長さとを出力ポート回路８０４に伝達することにより、デキューされた転送データの送出を指示する（ステップ８０１Ｊ；“Ｉｓｓｕｅ  Ｓｅｎｄ  Ｒｅｑｕｅｓｔ”）。そして、出力ポート回路８０４は、その転送データを主記憶部８０２から取り出して、送信トリガ信号の送信元Ｔ−ＤＰｒへ送出する。
【０１９８】
なお、デキュー処理は図１１により説明した通りであるので、その詳細な説明はここでは省略する。また、Ｔ−ＤＰｒ識別子から転送宛先の物理プロセッサＩＤへの変換処理は、第１実施例と同様に、転送宛先プロセッサ決定用テーブル８２０に付属するリスト構造（図示せず）により行なわれるので、その詳細な説明は省略する。
【０１９９】
次に、上述のごとく構成された第２実施例の装置における各Ｔ−ＤＰｒ９００Ａ〜９００Ｃの動作アルゴリズムを、図１７に示す。
（１）  Ｓ−ＤＰｒ８００Ａ〜８００Ｃからデータが送付された後の各Ｔ−ＤＰｒ９００Ａ〜９００Ｃの動作は、図８にて説明した第１実施例の動作つまりは図４４にて説明した既存技術の動作と同様であるので、その説明は省略する。
【０２００】
（２）  この第２本実施例では、各Ｔ−ＤＰｒ９００Ａ〜９００Ｃのマイクロプロセッサ９０１（Ｔ−ＤＰｒとしての機能を実現するプロセス）は、自プロセッサが新たなデータを受理できる状況になると、主記憶部９０２のラウンドロビンポインタ９２２にアクセスし、次にデータ送信のためのトリガ信号を送付する対象であるＳ−ＤＰｒの相対機番を知り、その相対機番に対応するＳ−ＤＰｒを送信トリガ信号送付先として選択する（ステップ９０１Ａ；“Ｓｅｌｅｃｔ  Ｓ−ＤＰｒ  ｔｏ  ｂｅｔｒｉｇｇｅｒｅｄ”）。
【０２０１】
（３）  この後、マイクロプロセッサ９０１は、ポインタ９２２の示す値を１だけインクリメントして更新する（ステップ９０１Ｂ；“Ｕｐｄａｔｅ  Ｒｏｕｎｄ  Ｒｏｂｉｎ  Ｐｏｉｎｔｅｒ”）。このポインタ９２２の示す値は、前述した通り、テーブル９２３内部にあるＳ−ＤＰｒ台数（台数情報フィールド９２３Ａの値）ｎから１を減算した値“ｎ−１”と等しくなると、次にはマイクロプロセッサ９０１により“０”にリセットされる。
【０２０２】
（４）  一方、マイクロプロセッサ９０１は、ラウンドロビンポインタ９２２の示す値からトリガ信号送付先の相対機番を選択すると、テーブル９２３にアクセスしてその相対機番をＳ−ＤＰｒの物理プロセッサ識別子に変換してから（ステップ９０１Ｃ；“Ｃｏｎｖｅｒｔ  Ｓ−ＤＰｒ  ＩＤ  ｔｏ  Ｐｈｙｓｉｃａｌ  Ｐｒｏｃｅｓｓｏｒ  ＩＤ  ”）、図１６に示した構成による上記トリガ信号のための送信データ（電文）を作成し（ステップ９０１Ｄ；“Ｆｏｒｍ  Ｓｅｎｄ  Ｄａｔａ”）、その電文を、選択されたＳ−ＤＰｒに対して送付する（ステップ９０１Ｅ；“Ｉｓｓｕｅ  Ｓｅｎｄ  Ｒｅｑｕｅｓｔ”）。なお、この送付処理の詳細は上記各例と同様であるので、その説明は省略する。
【０２０３】
このように、本発明の第２実施例の並列プロセッサ装置によれば、以下のような効果が得られる。
主要な効果は、任意の理由によるＴ−ＤＰｒ９００Ａ〜９００Ｃの性能の差に対して、統計的手法ではあるもののこれを相殺する方向に自動的かつ動的に調整が行なわれることである。発明者が行なったミュレーションでは、このことによる性能向上率は、勿論動作環境やデータおよびハッシュ関数への依存性はあるものの数十％から数百％にも及ぶことが確認された。
【０２０４】
なお、上述の記載で「任意の理由」としているが、当然、本発明では、ＭＩＭＤのスキューや生成率のスキューを主要な対象と想定している。しかし、これ以外にも障害発生によるＴ−ＤＰｒ９００Ａ〜９００Ｃ側の縮退運転発生やＤＡＳＤフラグメンテーションを原因とする性能低下など、全ての理由に対して、本実施例は原理的に有効である。
【０２０５】
（ｃ）第３実施例の説明
（ｃ１）第３実施例において必要な構成要件
第３実施例は、第２実施例と同様構成の並列プロセッサ装置において、Ｓ−ＤＰｒからＴ−ＤＰｒへの転送単位を複数のタプルデータの集合体としたもので、この第３実施例で必要な構成要件は、下記（１）  〜（３）  の通りである。
【０２０６】
（１）  上記第２実施例において、Ｓ−ＤＰｒ８００Ａ〜８００ＣからＴ−ＤＰｒ９００Ａ〜９００Ｃへの１転送処理において転送されるタプル数を複数個とする。この値は、少なくともあるＳ−ＤＰｒから見てどのＴ−ＤＰｒ９００Ａ〜９００Ｃに対しても等しい値でなければならない。
（２）  上記一度の転送処理で転送されるタプル個数をｍとすると、これらｍ個のタプルをもつタプル群は、上記第２実施例に示した転送対象のＴ−ＤＰｒ９００Ａ〜９００Ｃ毎に対応して作成される各転送キュー８３０〜８３２において、先頭からｍ個のタプルデータに対応する。
【０２０７】
（３）  あるＳ−ＤＰｒにおいて、あるＴ−ＤＰｒに対応する転送キュー内に上記ｍ個（第３実施例により１度に転送されるべきタプルの個数）のタプルが蓄積されていない場合に、もしこのＴ−ＤＰｒから上記トリガ信号が送付された時には、当該Ｓ−ＤＰｒは「転送を行なうに十分な量の転送データが蓄積されていない」旨の応答をＴ−ＤＰｒに行なって、データ転送は行なわない。
【０２０８】
（ｃ２）第３実施例の正当性の説明
上述のような構成要件をもつ第３実施例では、既存技術では平坦化処理を行なう単位は１タプル単位になっている。その理由は、ネットワーク機構（図３６の符号２００参照）においてバケットＩＤを見て動的にスイッチング方向を決定するため、少なくとも転送単位内でバケットＩＤは全て等しくなければならず、かつ複数の同じバケットＩＤのタプルをブロッキングして転送することは以下のデメリットをもつからである。
【０２０９】
（１）  同一のバケットＩＤをもつタプルを複数個集めるために幾つのタプルを読まねばならないかは平均期待値のみ定まるもののバラツキのある事象である。これを行なうことによりブロッキングのための主記憶バッファを準備しなければならなくなる。
（２）  同様に上記のようなバラツキのある事象について固定個数のタプルを集めないと転送できないとすると、固定個数のタプルがどのバケットＩＤに対しても集まらず転送が開始できない時間が大幅に増加する可能性がある。一方、転送が開始されると連続して転送が可能となる場合もあり、ネットワーク上の負荷が時間的に大幅に変動する要素が増加する。
【０２１０】
（３）  入出力レジスタは転送単位を全て格納する大きさが必要であるから、ブロッキングして転送することは全てのスイッチングユニット（図３７，図３８の符号２０１〜２１２参照）における物量の増加を意味する。
従って、このような既存技術においては、転送のためのオーバヘッドが多少大きくとも１タプル単位での転送が必要であった。
【０２１１】
一方、上述した第２実施例において、転送対象のＴ−ＤＰｒ９００Ａ〜９００Ｃに対応する転送キュー８３０〜８３２内では、異なるバケットＩＤをもつタプル群が任意の順序で並び得る。もし、これらを一括して転送したとしても個々のタプルに既にバケットＩＤを添付している以上、タプル群を受理した側のＴ−ＤＰｒＴ−ＤＰｒ９００Ａ〜９００Ｃで増加する処理はたかだかこれらのタプルをブロッキングされた状態から分解するのみであって、処理の増加はほとんどなく、且つプロセッサ間の転送に対する悪影響も少ない。追加されるべきブロッキングバッファも不要である。ただし、Ｔ−ＤＰｒ９００Ａ〜９００Ｃからのトリガ信号に対して「送信すべきデータがない」という判断が「タプルの有無」から「一定個数のタプルが蓄積されているか」に変わるのみである。
【０２１２】
勿論、物量増加は、転送キュー８３０〜８３２の平均容量，各プロセッサ８００Ａ〜８００Ｃ，９００Ａ〜９００Ｃの入力ポート回路８０３，９０３および出力ポート回路８０４，９０４中のバッファ容量などに発生するが、その物量増加は既存技術の場合と比較して少なくとも１／ｌｏｇ  ｎ以下である。ネットワーク機構６００に対する負荷増減の悪影響も小さい。従って、転送処理オーバヘッドを小さくすることができる効果を享受することが可能である。
【０２１３】
（ｂ３）第３実施例の実装形態の説明
この第３実施例の並列プロセッサ装置の全体構成は、図９に示した第２実施例のものと全く同様であるので、その説明は省略する。第３実施例と第２実施例とで異なる点は、各Ｓ−ＤＰｒ８００Ａ〜８００Ｃおよび各Ｔ−ＤＰｒ９００Ａ〜９００Ｃの内部構成にあるので、以下、図１８，図１９を参照しながら、各Ｓ−ＤＰｒ８００Ａ〜８００Ｃおよび各Ｔ−ＤＰｒ９００Ａ〜９００Ｃの内部構成について説明する。
【０２１４】
図１８は本発明の第３実施例としての並列プロセッサ装置におけるＳ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図で、この第３実施例における各Ｓ−ＤＰｒ８００Ａ〜８００Ｃも、図１０に示した第２実施例のものとほぼ同様に構成されているが、第３実施例では、主記憶部８０２に送信バッファ８５０が新たに追加されている点のみが異なっている。なお、図１８中、図１０にて記載した符号と同一の符号は同一部分を示しているので、その説明は省略する。
【０２１５】
ここで、送信バッファ８５０は、上述した一括転送処理によりＴ−ＤＰｒへ転送されるべき複数のタプルからなる転送データ（タプル群）を作成・格納するためのものである。
この送信バッファ８５０の領域は、各Ｔ−ＤＰｒ９００Ａ〜９００Ｃから送信トリガ信号が当該Ｓ−ＤＰｒに送付され、当該Ｓ−ＤＰｒ側でこれに応えてデータ送信を行なうことが決定された時点で、マイクロプロセッサ８０１により主記憶部８０２内に取得される。
【０２１６】
そして、マイクロプロセッサ８０１が、転送キュー８３０〜８３２のうち転送先Ｔ−ＤＰｒに対応するものから、上記予め定まった個数のタプルをデキューして送信バッファ８５０内に格納することにより送信データが作成されるようになっている。
また、マイクロプロセッサ８０１は、送信バッファ８５０内に作成された転送データ（タプル群）の送信時に、送信バッファ８５０の先頭アドレスと容量とを出力ポート回路８０４に伝達し、これを送出させる。
【０２１７】
一方、図１９は本発明の第３実施例としての並列プロセッサ装置におけるＴ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図で、この第３実施例における各Ｔ−ＤＰｒ９００Ａ〜９００Ｃも、図１２に示した第２実施例のものとほぼ同様に構成されているが、第３実施例では、主記憶部９０２に受信バッファ９５０が新たに追加されている点のみが異なっている。なお、図１９中、図１２にて記載した符号と同一の符号は同一部分を示しているので、その説明は省略する。
【０２１８】
ここで、受信バッファ９５０は、上記一括転送処理により各Ｓ−ＤＰｒ８００Ａ〜８００Ｃから転送されてきた複数のタプル（タプル群）を格納するためのものである。
この受信バッファ９５０の領域は、各Ｔ−ＤＰｒ９００Ａ〜９００Ｃから各Ｓ−ＤＰｒ８００Ａ〜８００Ｃに対して転送を指示する送信トリガ信号を送信する時に、マイクロプロセッサ９０１により取得されて主記憶部９０２上に準備される。
【０２１９】
そして、Ｓ−ＤＰｒ側からの転送データが当該Ｔ−ＤＰｒに到着した時点で、マイクロプロセッサ９０１がそのアドレスを入力ポート回路９０３に指示することにより、複数のタプルをその内に含む転送データを格納するようになっている。
図２０は、第３実施例における転送データフォーマットの一例を説明するための図であり、この図２０に示すものと同様のフォーマットにより、各Ｓ−ＤＰｒ８００Ａ〜８００Ｃ側の送信バッファ８５０、および、各Ｔ−ＤＰｒ９００Ａ〜９００Ｃ側の受信バッファ９５０が作成されるものとする。
【０２２０】
図２０において、２１００は通信のための制御情報フィールドであり、符号２９０，５００，１１００を付して前述したものと同様に転送データのフォーマットを記述するものである。
また、２１０１はこの転送データの発信源であるＳ−ＤＰｒのプロセッサ識別子を保持するフィールド、２１０２はこの転送データの送信先であるＴ−ＤＰｒのプロセッサ識別子を保持するフィールド、２１０３はこの転送データがいずれの業務のために転送されようとしているのかを示す業務識別子を保持するフィールド、２１０４は以下の転送されるべきデータ本体の容量値を保持するフィールドである。このフィールド２１０４に保持される容量値は、このフィールド２１０４直後のデータから以後の全てのデータのバイト数とする。
【０２２１】
さらに、２１１０〜２１３０は個々のタプルに対応するデータを保持するフィールドである。各フィールド２１１０〜２１３０における各タプルに対応するデータのフォーマットをフィールド２１１０を例にとって説明すると、そのフィールド２１１０には、バケットＩＤを保持するフィールド２１１１と、タプルデータ部分の長さを保持するフィールド２１１２と、実際のタプルデータを保持するフィールド２１１３とがある。
【０２２２】
次に、上述のごとく構成された第３実施例の装置における各Ｓ−ＤＰｒ８００Ａ〜８００Ｃの動作アルゴリズムを説明する。第３実施例の各Ｓ−ＤＰｒ８００Ａ〜８００Ｃでは、送信部分の制御が一部異なるだけであるので、詳細な図示は省略し、第２実施例と異なる部分についてのみ説明する。
あるＴ−ＤＰｒ９００Ａ〜９００Ｃから前述のトリガ信号が送付されたＳ−ＤＰｒは、予め定められた個数のタプルが、転送を要求したＴ−ＤＰｒに対応する転送キュー８３０〜８３２に蓄積されているならば転送を行ない、そうでなければ「転送を行なうに十分な量の転送データが蓄積されていない」旨の応答をＴ−ＤＰｒに行なって、データ転送は行なわない。
【０２２３】
データ転送時には、当該Ｓ−ＤＰｒのマイクロプロセッサ８０１は、送信バッファ８５０を主記憶部８０２上に作成し、予め定められた個数のタプル群を上記転送要求を発生したＴ−ＤＰｒに対応する転送キュー８３０〜８３２からデキューし、図２０に示したフォーマットの転送データを送信バッファ８５０中に作成する。
【０２２４】
送信バッファ８５０中に転送データを作成する作業が終了すると、マイクロプロセッサ８０１は、送信バッファ８５０の先頭アドレスと容量を出力ポート回路８０４に通知して転送を行なう。
そして、転送が終了すると、マイクロプロセッサ８０１は、主記憶部８０２上の送信バッファ８５０を解放する。
【０２２５】
さらに、上述のごとく構成された第３実施例の装置における各Ｔ−ＤＰｒ９００Ａ〜９００Ｃの動作アルゴリズムを説明する。第３実施例の各Ｔ−ＤＰｒ９００Ａ〜９００Ｃでは、受信部分の制御が一部異なるだけであるので図示は省略し、第２実施例と異なる部分についてのみ説明する。
Ｔ−ＤＰｒ９００Ａ〜９００Ｃは、送信トリガ信号を送付する際に受信バッファ９５０を主記憶部９０２上に作成する。この時、受信バッファ９５０は、予想されるタプル対応の転送データの最大長と予め定められた転送タプル数との積だけの容量を考慮して確保される。この後、マイクロプロセッサ９０１は、トリガ信号の送出を出力ポート回路９０４に指示する。
【０２２６】
Ｓ−ＤＰｒ８００Ａ〜８００Ｃからのデータ送信が送信トリガ信号の送付に対応して行なわれると、マイクロプロセッサ９０１は、入力ポート回路９０３に対して受信バッファ９５０の先頭アドレスを指定することによりデータの格納を指示する。
そして、マイクロプロセッサ９０１は、受信バッファ９５０に含まれる個々のタプルに対応するデータに対して、第１実施例や第２実施例において個別のタプルに対応するデータが転送された場合と同様に、計数，分類および格納作業を行なう。
【０２２７】
このように、本発明の第３実施例の並列プロセッサ装置によれば、以下のような効果が得られる。
主要な効果は、バケット平坦化処理を行ないながら、プロセッサ８００Ａ〜８００Ｃ，９００Ａ〜９００Ｃ間のデータ転送に付随するプロセッサの動作オーバヘッドを減少させることである。このことは既存技術では実現できないことは上述した通りである。
【０２２８】
（ｄ）第４実施例の説明
（ｄ１）第４実施例において必要な構成要件
第４実施例は、第３発明の並列プロセッサ装置にかかる技術で、この第４実施例で必要な構成要件は、下記（１）  〜（４）  の通りである。
（１）  第２実施例と同様構成の装置において、Ｓ−ＤＰｒからＴ−ＤＰｒへの一度の転送処理において転送されるデータ量は固定の容量値Ａを上限、固定の容量値Ｂを下限として可能な限り多いタプル（相当）により構成されるデータ量とする。この容量値Ａ，Ｂは、少なくとも、あるＳ−ＤＰｒから見てどのＴ−ＤＰｒに対しても等しい値でなければならない。
【０２２９】
（２）  上記一度の転送処理で転送されるタプル群は、上記容量条件を満たす範囲で、第２実施例で示した転送対象のＴ−ＤＰｒに対応して作成される転送キューの、第２実施例における転送の順序で先頭から抽出される。
（３）  あるＳ−ＤＰｒにおいて、あるＴ−ＤＰｒに対応する転送キュー内に容量総和が上記容量値Ｂを上回る転送量になるタプルが蓄積されていない時、このＴ−ＤＰｒから送信トリガ信号が送付された時、当該Ｓ−ＤＰｒは「転送を行なうに十分な量の転送データが蓄積されていない」旨の応答をＴ−ＤＰｒに行なって、データ転送は行なわない。
【０２３０】
（４）  第２実施例において、転送宛先プロセッサ決定用テーブルの個別要素の加算値は、転送宛先となるＴ−ＤＰｒに対応する転送キュー中に現在蓄積されているタプル（あるいはこのタプルに対応する転送データ）の総容量に、現在転送宛先を決定しようとしているタプルの長さ（あるいはこのタプルに対応する転送データの長さ）を加算したものとする。
【０２３１】
（ｄ２）第４実施例の正当性の説明
上述のような構成要件をもつ第４実施例では、前述した等価結合（ＥｑｕｉｖａｌｅｎｔＪｏｉｎ）のような大量のデータを扱う処理では、処理負荷は単に処理されるべきタプル数で決定されるのではなく、それらタプルのデータ量の和により決まる場合がある。どちらがより支配的な要因かはプロセッサ上で動作するソフトウェアの実装などに依存する。
【０２３２】
このため、もしあるシステムでタプル数ではなくタプルデータ量の和がより強く処理負荷を支配する要因であったならば、上記Ｓ−ＤＰｒで行なわれるべき負荷の調整作業の負荷指標も「送ったタプル数」ではなく「送ったデータ量」になるべきである。
また、実装上もバッファの取得や管理は、転送量そのものが固定長であった場合の方が第３実施例にて記述した「タプル数が固定」の場合よりも容易になる。第３実施例では、少なくともＴ−ＤＰｒの受信バッファ（図１８の符号８５０参照）は「タプルの最大長×送信タプル数」だけの容量を必要とする。タプルの平均長と最大長とでは通常数十倍の容量差を発生しうるから、取得された送信バッファを有効に使用することは一般に難しい。これに対して、転送されるデータ量がある範囲内にあることが保証されているならば、送信バッファは常にその使用効率が保証されることになる。
【０２３３】
このように利点の多い「データ量ベースの均等化」を実現するためには、第３実施例と比較して以下の２点が変更されなければならない。
（１）  データ転送は、上限および下限の決定された「一定の範囲内の容量」を１回の単位として行なわれる。
（２）  負荷の評価のための指標、つまり転送宛先プロセッサ決定用テーブルに積算される値は、第３実施例の「転送キュー中のタプル数に１を加えたもの」から、「転送キュー中のタプル容量に現在処理しているタプルの容量を加算したもの」あるいはこれに意味的には等価な「転送キュー中のタプル容量と処理しているタプルに対応する転送データの容量との総和」に変更される。
【０２３４】
（ｄ３）第４実施例の実装形態の説明
この第４実施例の並列プロセッサ装置の全体構成は、図９に示した第２実施例のものと全く同様であるので、その説明は省略する。
また、この第４実施例におけるＳ−ＤＰｒおよびＴ−ＤＰｒは、それぞれ図２１および図２３に示すごとく、図１８および図１９に示した第３実施例におけるＳ−ＤＰｒおよびＴ−ＤＰｒとほぼ同様に構成されている。
【０２３５】
まず、図２１は本発明の第４実施例としての並列プロセッサ装置におけるＳ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図で、この図２１に示すように、第４実施例におけるＳ−ＤＰｒ１２００も、後述する点を除き、図１８に示した第３実施例における各Ｓ−ＤＰｒ８００Ａ〜８００Ｃとほぼ同様に構成されている。
【０２３６】
なお、図２１において符号１２０１〜１２１４，１２１６，１２２０，１２３０〜１２３２，１２５０を付して示される構成要素は、それぞれ図１８により前述した符号８０１〜８１４，８１６，８２０，８３０〜８３２，８５０を付した構成要素とほぼ同じものであるので、その詳細な説明は省略する。
さて、第４実施例のＳ−ＤＰｒ１２００では、送信バッファ１２５０の取得タイミングは、第３実施例における送信バッファ８５０のタイミングと同様であるが、マイクロプロセッサ１２０１は、この送信バッファ１２５０に関する上述した下限容量値および上限容量値を満たす個数だけのタプル（もしくはこれに相当する転送データ）をデキューし、送信バッファ１２５０内に格納して送信データを作成する。このときの転送データフォーマットも第３実施例のものと同じである。ただ、この第４実施例では、その容量（主記憶部１２０２上に取得された送信バッファ１２５０の容量）が、必ず上述した下限容量値と上限容量値との間に入っている。
【０２３７】
図２２は第４実施例の転送キュー１２３０〜１２３２の構造の一例を示す図である。この図２２により、第４実施例と第３実施例との主要な差の一つである転送キュー１２３０〜１２３２の構造（待ち行列構造）を具体的に説明する。
第２実施例や第３実施例に示した転送キュー構造と、第４実施例の転送キュー構造との相違点は、個々の転送データのバイトカウントの総和（Ｓｕｍ  ｏｆ  Ｂｙｔｅ  Ｃｏｕｎｔ  ｏｆ  Ｓｅｎｄ  Ｄａｔａ）を保持する転送データ量フィールド１２４７が各転送キュー１２３０〜１２３２のアンカー情報内に追加されている点である。
【０２３８】
このフィールド１２４７は、個々のタプル（これに対応する転送データ）がエンキューされる度にその転送データの長さだけ増加し、また個々のタプル（これに対応する転送データ）がデキューされる度にその転送データの長さだけ減算される。
従って、第４実施例においては、マイクロプロセッサ１２０１から読み取ることが可能に転送データ量フィールド１２４７を作成することにより、前述した蓄積データ量検出手段〔各転送キュー１２３０〜１２３２に蓄積される転送対象エンティティ（タプル）のデータ量を検出するもの〕が構成されることになる。
【０２３９】
なお、図２２において符号１２４０〜１２４６を付して示される構成要素は、それぞれ図１１により前述した符号８４０〜８４６を付した構成要素とほぼ同じものであるので、その詳細な説明は省略する。
一方、図２３は本発明の第４実施例としての並列プロセッサ装置におけるＴ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図で、この図２３に示すように、第４実施例におけるＴ−ＤＰｒ１３００も、後述する点を除き、図１９に示した第３実施例における各Ｔ−ＤＰｒ９００Ａ〜９００Ｃとほぼ同様に構成されている。
【０２４０】
なお、図２３において符号１３０１〜１３１４，１３１６，１３２２，１３２３，１３５０を付して示される構成要素は、それぞれ図１９により前述した符号９０１〜９１４，９１６，９２２，９２３，９５０を付した構成要素とほぼ同じものであるので、その詳細な説明は省略する。
第４実施例のＴ−ＤＰｒ１３００では、受信バッファ１３５０の取得や解放のタイミングは、第３実施例における受信バッファ９５０のタイミングと同様であるが、その容量は、セッサ１２０１は、第３実施例の受信バッファ９４０のように「タプルの最大長×転送されるタプル数（固定値）」ではなく、上記転送データの上限容量値に設定すればよい。
【０２４１】
次に、上述のごとく構成された第４実施例の装置におけるＳ−ＤＰｒ１２００の動作アルゴリズムを、第３実施例と異なる部分についてのみ説明する。
Ｓ−ＤＰｒ１２００の１タプルの宛先を決定する動作については、バケットＩＤを求め、且つ、このバケットＩＤに基づいて転送宛先プロセッサ決定用テーブル１２２０上の行または列を定め、この１次元配列中で最も値の小さな要素に対応するＴ−ＤＰｒをタプルデータの転送先とすることは、上述した第３実施例と同じである。
【０２４２】
ただし、第４実施例では、転送宛先であるＴ−ＤＰｒが決定した後、転送宛先プロセッサ決定用テーブル１２２０の上記要素に対して、マイクロプロセッサ１２０１は、「該Ｔ−ＤＰｒに対応する転送キュー（待ち行列構造）の転送データ量フィールド１２４７の値と、図２０に示した各フィールド２１１２（各タプルデータの長さ）のバイト数を加算した値（つまり現在処理中のタプルに対応する転送データの長さ）と」を加算しなければならない。
【０２４３】
あるＴ−ＤＰｒから前述のトリガ信号が送付されたＳ−ＤＰｒ１２００のマイクロプロセッサ１２０１は、当該Ｔ−ＤＰｒに対応する転送キュー１２３０〜１２３２の転送データ量フィールド１２４７の値を参照し、この値が転送データ量の下限値を下回る場合には「転送を行なうに十分な量の転送データが蓄積されていない」旨の応答を当該Ｔ−ＤＰｒに行なって、データ転送は行なわない。
【０２４４】
もし、転送データ量フィールド１２４７の値が転送データ量の下限値以上であるならば、マイクロプロセッサ１２０１は、送信バッファ１２５０を主記憶部１２０２上に取得する。このとき、その送信バッファ１２５０の容量は転送データ量の上限値とする。
そして、マイクロプロセッサ１２０１は、当該Ｔ−ＤＰｒに対応する転送キュー１２３０〜１２３２から送信バッファ１２５０の中にタプル（あるいはこのタプルに対応する転送データ）を一つずつデキューし、この送信バッファ１２５０に送信データを作成していく。
【０２４５】
このとき、新たなタプル（あるいはこのタプルに対応する転送データ）の追加が、転送データ量の上限値を超えさせてしまうことを検出すると、マイクロプロセッサ１２０１は、このタプルのデキューを抑止し、転送データ作成の終了を認識する。
なお、マイクロプロセッサ１２０１は、転送キュー１２３０〜１２３２から１タプル（もしくはこれに対応する転送データ）をデキューする都度、転送データ量フィールド１２４７の値から、デキューされた転送データの長さを減算してゆく。
【０２４６】
さらに、上述のごとく構成された第４実施例の装置におけるＴ−ＤＰｒ１３００の動作アルゴリズムを、第３実施例と異なる部分についてのみ説明する。
第４実施例のＴ−ＤＰｒ１３００も、第３実施例の場合と同様に、Ｓ−ＤＰｒ１２００へ送信トリガ信号を送付する際に受信バッファ１３５０を主記憶部１３０２上に作成するが、このとき、第４実施例では、その受信バッファ１３５０の容量が転送データの上限容量値に設定される点のみが、第３実施例と異なっている。
【０２４７】
このように、本発明の第４実施例の並列プロセッサ装置によれば、Ｔ−ＤＰｒ１３００の負荷が主として入力されたタプルデータのバイト容量に比例すると考えられる時、第３実施例よりもより良くＴ−ＤＰｒ１３００の負荷の均等化を実現することができる。
（ｅ）第５実施例の説明
第５実施例は、第４発明の並列プロセッサ装置にかかる技術で、上述した「突き合わせ処理」部分に適用されるものである。
【０２４８】
そして、図２４は本発明の第５実施例としての並列プロセッサ装置の全体構成を示すブロック図で、この図２４において、１４００は複数のプロセッサ１４００Ａ，１４００Ｂ，…，１４００Ｃからなる第１プロセッサ群、１５００は複数のプロセッサ１５００Ａ，１５００Ｂ，…，１５００Ｃからなる第２プロセッサ群である。
【０２４９】
ここで、第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃには、所定業務における処理対象のデータ（バケット）が分散して格納されており、この第１プロセッサ群１４００は、第１〜第４実施例で前述したようにバケット平坦化処理を受けたＴ−ＤＰｒ群に対応するものである。つまり、処理対象のデータは、ハッシュ関数（所定規則）に従って、第１プロセッサ群１４００上に予めグルーピングされている。
【０２５０】
また、各プロセッサ１４００Ａ〜１４００Ｃは、自プロセッサにおけるグルーピング結果を後述する管理用プロセッサ１６００に通知する機能を有してほか、後述する管理用プロセッサ１６００によるデータ割当に従い、第２プロセッサ群１５００に属する各プロセッサ１５００Ａ〜１５００Ｃに対して該当するバケット（データグループ）の全データを送付する機能も有している。
【０２５１】
第２プロセッサ群１５００に属する各プロセッサ１５００Ａ〜１５００Ｃは、第１プロセッサ群１４００に格納されたバケットを送付されて、当該バケットに対する処理（本実施例では「突き合わせ処理」）を実行するものである。また、各プロセッサ１５００Ａ〜１５００Ｃは、第１プロセッサ群１４００に格納されたバケットについて新たな処理を開始できる状況になると、後述する管理用プロセッサ１６００に対してバケットの割当を依頼する機能を有している。
【０２５２】
一方、図２４において、６００は第１〜第４実施例にて前述したものと全く同様のネットワーク機構であり、このネットワーク機構６００により、第１プロセッサ群１４００に属するプロセッサ１４００Ａ〜１４００Ｃうちの任意のものから、第２プロセッサ群１５００に属するプロセッサ１５００Ａ〜１５００Ｃうちの任意のものへデータ送信を行なえるようになっている。
【０２５３】
また、１６００は管理用プロセッサで、この管理用プロセッサ１６００は、第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃからの通知を受けて各プロセッサ１４００Ａ〜１４００Ｃに格納されているバケットを記憶する第１の機能と、第２プロセッサ群１５００に属する各プロセッサ１５００Ａ〜１５００Ｃからバケット（データグループ）の割当依頼を受けると当該割当依頼を行なったプロセッサに対して未割当のバケットの割当を行なう第２の機能とを有している。
【０２５４】
そして、管理用プロセッサ１６００の主記憶部上には、上記第１の機能および第２の機能を果たすために、バケットと第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃとの対応関係を記述するバケット割当テーブル（Ｂｕｃｋｅｔ−Ａｌｌｏｃａｔｉｏｎ−Ｔａｂｌｅ；図２５参照）１６０１と、第２プロセッサ群１５００に属する各プロセッサ１５００Ａ〜１５００Ｃの状態（未走行状態，走行状態，終了状態等）を記述する状態管理テーブル（Ｓｔａｔｅ−Ｃｏｎｔｒｏｌ−Ｔａｂｌｅ；図２６参照）１６０２とがそなえられている。
【０２５５】
ここで、図２５はバケット割当テーブル１６０１の概要を説明するための図であり、この図２５に示すテーブル１６０１は、プロセッサ１４００Ａ〜１４００Ｃから存在が報告されたバケット１つについて１行（１Ｒｏｗ）を費やす構造になっている。
そして、図２５に示すように、各行の第１カラム（Ｃｏｌｕｍｎ）には、その行に対応するバケットのバケット識別子が格納される。このバケット識別子は、各バケットを特定するために、全てのプロセッサ１４００Ａ〜１４００Ｃ，１５００Ａ〜１５００Ｃ，１６００で使用される。
【０２５６】
また、各行の第２カラムには、プロセッサ１４００Ａ〜１４００Ｃのいずれにそのバケットの部分集合であるサブバケットが存在するかが記述され、そのバケットの存在を報告してきたプロセッサ群が網羅されている。この第２カラムとしては、例えば、各プロセッサ１４００Ａ〜１４００Ｃ毎に１ビットを割り当てたビットマップが用いられる。
【０２５７】
さらに、各行の第３カラムには、初期化直後は「いずれのプロセッサにも割り当てられていない」ことを示す値が記入されるべきであり、割当処理が行なわれた後はこのバケットが割り当てられたプロセッサ１５００Ａ〜１５００Ｃのいずれかのプロセッサ識別子が記入される。図４６に示す既存技術のテーブルでは、プロセッサ識別子の記入が実際のバケット移動に先立って一斉に行なわれていたのに対して、この実施例では、プロセッサ識別子は、プロセッサ１５００Ａ〜１５００Ｃの処理進行と並行して動的にテーブル１６０１に記入されている。
【０２５８】
一方、図２６は状態管理テーブル１６０２の概要を説明するための図であり、この図２６に示すテーブル１６０２は、各プロセッサ１５００Ａ〜１５００Ｃに対応して１行を費やす構造となっている。
そして、図２６に示すように、各行の第１カラムには、その行に対応するプロセッサ１５００Ａ〜１５００Ｃの識別子が格納される。
【０２５９】
また、各行の第２カラムには、その行に対応するプロセッサ１５００Ａ〜１５００Ｃに対して現在割り当てられているバケットの有無、および、割当バケットが有る場合には、そのバケット識別子が記入される。なお、割り当てられているバケットが無い場合には、無効な識別子が記入されている。
さらに、各行の第３カラムには、その行に対応するプロセッサ１５００Ａ〜１５００Ｃが、現在、「未走行状態（Ｒｅａｄｙ  Ｓｔａｔｅ）」，「停止状態（Ｆｉｎｉｓｈｅｄ  Ｓｔａｔｅ）」，「走行状態（Ｒｕｎｎｉｎｇ  Ｓｔａｔｅ）」のいずれにあるかが記入される。
【０２６０】
なお、プロセッサ１４００Ａ〜１４００Ｃ，１５００Ａ〜１５００Ｃ，１６００のハードウエア構成は、いずれも、第１〜第４実施例にて説明したＳ−ＤＰｒやＴ−ＤＰｒと同じであり、物理的には同一のプロセッサが同時に同一業務または別業務について、第１プロセッサ群１４００，第２プロセッサ群１５００，管理用プロセッサ１６００のうちの少なくとも２つを兼ねても構わない。
【０２６１】
次に、上述のごとく構成された第５実施例の装置全体の動作の流れを説明すると、第５実施例でも、図４５〜図４９にて説明した既存技術と同様に、第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃは、自プロセッサの二次記憶装置内に存在するサブバケット群のバケットＩＤを管理用プロセッサ１６００に送付するが、この管理用プロセッサ１６００は、バケットと第２プロセッサ群１５００に属するプロセッサ１５００Ａ〜１５００Ｃとの対応関係をこの時点では決定しない。
【０２６２】
そして、第２プロセッサ群１５００に属するプロセッサ１５００Ａ〜１５００Ｃは、新たなバケットの処理が開始できる状況（つまり、それ以前に行なっていたバケットの自プロセッサ内部での結合演算処理が終了したか、あるいは、管理用プロセッサ１６００に対してサブバケットに関する情報を送付し終わった）になると、管理用プロセッサ１６００に対して「バケットの割当」をメッセージＡとして要求する。
【０２６３】
管理用プロセッサ１６００は、第１プロセッサ群１４００の全てのプロセッサ１４００Ａ〜１４００Ｃからサブバケットに関する情報を受理し終わると、第２プロセッサ群１５００からの要求に応じてバケットの割当を開始する。
ここで、バケットの割当とは、管理用プロセッサ１６００にその存在が通知されたバケットＩＤの一つを選択し、そのバケットの処理を上記「バケットの割当」要求を送付してきた第２プロセッサ群１５００に属するプロセッサ１５００Ａ〜１５００Ｃに委託することである。一度、委託先のプロセッサが決定したバケットは、以後、割当の対象にはならない。
【０２６４】
この第５実施例では、割当は、管理用プロセッサ１６００から第２プロセッサ群１５００に属するプロセッサ１５００Ａ〜１５００Ｃに対して割当が成立したこと、および、割り当てられたバケットＩＤを含むメッセージＢをネットワーク機構６００を経由して送付することによりなされるものとする。
この後、割当のための上記メッセージＢを受理した第２プロセッサ群１５００に属するプロセッサ１５００Ａ〜１５００Ｃは、自ら、第１プロセッサ群１４００を構成する全てのプロセッサ１４００Ａ〜１４００Ｃに対して該バケットＩＤをもつサブバケットに属する全てのデータを自プロセッサに送付させる旨の指示メッセージＣを同報する。
【０２６５】
上記指示メッセージＣを受理した第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃは、自プロセッサの配下の二次記憶装置に格納されている対応するデータを全て第２プロセッサ群１５００に属する上記指示メッセージ送付元のプロセッサに対して送付する。
第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃは、バケットデータを全て転送すると、転送終了報告のメッセージＤを上記指示メッセージ送付元のプロセッサに送付する。
【０２６６】
そして、上記指示メッセージ送付元のプロセッサは、第１プロセッサ群１４００に属する全てのプロセッサ１４００Ａ〜１４００Ｃから上記メッセージＤを受理すると、受信したデータの総和（つまりバケット）に対してプロセッサ内部でのハッシュ結合処理等のＤＢＭＳ処理を行なう。
このプロセッサ内部での処理が終了すると、上記指示メッセージ送付元のプロセッサは、再び「新たなバケットの処理が開始できる状態」になり、管理用プロセッサ１６００に対して新たなバケットの割当を要請するためにメッセージＡを送付する。
【０２６７】
管理用プロセッサ１６００において割り当てされるべきバケットが無い場合には、処理終了を指示するメッセージＥが、上記メッセージＡに対する回答として管理用プロセッサ１６００から第２プロセッサ群１５００に属する上記メッセージＡの送付元プロセッサへ送付される。
そして、管理用プロセッサ１６００は、第２プロセッサ群１５００に属する全てのプロセッサ１５００Ａ〜１５００Ｃに対して処理終了メッセージＥを発行すると、全処理の終了を認識し、第１プロセッサ群１４００に属する全てのプロセッサ１４００Ａ〜１４００Ｃ処理終了メッセージＥを同報する。
【０２６８】
次に、第５実施例における各プロセッサ１６００，１４００Ａ〜１４００Ｃ，１５００Ａ〜１５００Ｃの動作概要を、図２７〜図２９に示すフローチャートに従ってより詳細に説明する。
まず、図２７は第５実施例における管理用プロセッサ１６００の動作を説明するためのフローチャート（ステップＳ６００〜Ｓ６１２）であり、この図２７に示すように、管理用プロセッサ１６００は、動作を開始すると、まず、バケット割当テーブル１６０１の内容を初期化する（ステップＳ６００）。その初期化処理の内容は、予想されるバケット数を記述するだけの充分な容量のテーブル領域を主記憶部上に確保し、その全ての行（各バケットに対応）を無効化することである。
【０２６９】
バケット割当テーブル１６０１の初期化後、管理用プロセッサ１６００は、各プロセッサ１４００Ａ〜１４００Ｃから、どのようなバケットが生成されたかについての報告が行なわれるのを待ち（ステップＳ６０１）、報告を受けると、その内容をバケット割当テーブル１６０１に格納する（ステップＳ６０２）。
これらのステップＳ６０１，Ｓ６０２による処理動作は、プロセッサ１４００Ａ〜１４００Ｃの全てから報告がなされるまで繰り返し実行される（ステップＳ６０３）。
【０２７０】
全てのプロセッサ１４００Ａ〜１４００Ｃからバケット生成についての報告がなされると、次に、管理用プロセッサ１６００は、各プロセッサ１５００Ａ〜１５００Ｃのための状態管理テーブル１６０２の内容を初期化する（ステップＳ６０４）。
その初期化処理の内容は、プロセッサ１５００Ａ〜１５００Ｃの情報を格納するのに充分な容量のテーブル領域を主記憶部上に確保し、図２６を参照して言うならば、その全ての行（各プロセッサ１５００Ａ〜１５００Ｃに対応）に対してプロセッサ識別子（第１カラム）を記入し、第３カラムのプロセッサ状態に、「未走行状態」を表すコードを記入し、さらに、第２カラムに「いずれのバケットも割り当てられていない」ことを意味するコードを記入することである。
【０２７１】
状態管理テーブル１６０２の初期化後、管理用プロセッサ１６００は、各プロセッサ１５００Ａ〜１５００Ｃから、新たなバケットの割当を要求するメッセージが到着するのを待ち受け（ステップＳ６０５）、そのメッセージが到着すると、未だいずれのプロセッサ１５００Ａ〜１５００Ｃにも割り当てられていないバケットが存在するか否かをチェックする（ステップＳ６０６）。
【０２７２】
未割当のバケットが存在する場合、管理用プロセッサ１６００は、バケット割当テーブル１６０１の第３カラムを縦方向にスキャンすることにより、いずれのプロセッサ１５００Ａ〜１５００Ｃに対しても未だ割り当てられていないバケットを探索し（ステップＳ６０７）、ステップＳ６０５で割当要求を送付してきたプロセッサ１５００Ａ〜１５００Ｃのうちの一つに対して、ステップＳ６０７で探索されたバケットのバケットＩＤを送付する（ステップＳ６０８）。
【０２７３】
この後、管理用プロセッサ１６００は、バケット割当テーブル１６０１に、ステップＳ６０７で選択されたバケットがステップＳ６０５で割当要求を送付してきたプロセッサ１５００Ａ〜１５００Ｃの一つに割り当てられたことを記入するとともに、状態管理テーブル１６０２に、プロセッサ１５００Ａ〜１５００Ｃの一つが「走行状態」になり上記バケットを割り当てられたことを記入してから（ステップＳ６０９）、ステップＳ６０５の処理に戻る。
【０２７４】
一方、ステップＳ６０６で全てのバケットが割当済であると判定された場合、管理用プロセッサ１６００は、ステップＳ６０５で割当要求を送付してきたプロセッサ１５００Ａ〜１５００Ｃの一つに対して、「割当可能なバケットが残っていないので処理を終了せよ」という内容のメッセージを送付する（ステップＳ６１０）。
【０２７５】
そして、管理用プロセッサ１６００は、上記終了指示を送付されたプロセッサ１５００Ａ〜１５００Ｃの一つが「停止状態」に入ったことを状態管理テーブル１６０２に記入してから（ステップＳ６１１）、全てのプロセッサ１５００Ａ〜１５００Ｃが「停止状態」に入ったか否かを判定する（ステップＳ６１２）。
もし、未だ「走行状態」にあるプロセッサが存在するならば、ステップＳ６０５の処理に戻る一方、全てのプロセッサ１５００Ａ〜１５００Ｃが「停止状態」に入ったならば、全処理の終了が認識され、管理用プロセッサ１６００は処理を終了する。
【０２７６】
図２８は第５実施例における第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃの動作を説明するためのフローチャート（ステップＳ６２０〜Ｓ６２４）であり、この図２８に示すように、各プロセッサ１４００Ａ〜１４００Ｃは、動作を開始すると、まず、各プロセッサ１４００Ａ〜１４００Ｃが格納するサブバケットのバケットＩＤを認識することにより、自プロセッサ（二次記憶装置）内におけるバケット種類を確認する（ステップＳ６２０）。
【０２７７】
このステップＳ６２０における各プロセッサ１４００Ａ〜１４００Ｃの状態は、例えば、第１〜第４実施例で前述したようにハッシュ関数（所定規則）に従ってバケットを分類・格納したＴ−ＤＰｒの状態と同一であり、図２８のステップＳ６２０には、「各プロセッサの記憶装置内にバケットを作成する」という一般的な記載がなされている。
【０２７８】
この後、各プロセッサ１４００Ａ〜１４００Ｃは、ステップＳ６２０で得られたバケットに関する情報を管理用プロセッサ１６００に送付し（ステップＳ６２１）、第２プロセッサ群１５００に属するプロセッサ１５００Ａ〜１５００Ｃから、バケットＩＤを伴った送付要求メッセージが送付されてくるのを待ち受ける状態になる（ステップＳ６２２）。
【０２７９】
そして、各プロセッサ１４００Ａ〜１４００Ｃは、ステップＳ６２２でプロセッサ１５００Ａ〜１５００Ｃからの送付要求メッセージを受理すると、そのバケット送付要求に従って、該要求に記述されたバケット識別子をもつ自プロセッサ内部のサブバケットを要求元のプロセッサ１５００Ａ〜１５００Ｃに送付する（ステップＳ６２３）。
【０２８０】
サブバケットの送付後、各プロセッサ１４００Ａ〜１４００Ｃは、自プロセッサ内部の全てのサブバケットを送付し終わったか否かを判定し（ステップＳ６２４）、もし未だ送付されていないサブバケットが存在するならば、ステップＳ６２２の処理に戻る一方、全てのサブバケットが送付され終わっていれば、処理を終了する。
【０２８１】
図２９は第５実施例における第２プロセッサ群１５００に属する各プロセッサ１５００Ａ〜１５００Ｃの動作を説明するためのフローチャート（ステップＳ６３０〜Ｓ６３５）であり、この図２９に示すように、各プロセッサ１５００Ａ〜１５００Ｃは、動作を開始すると、まず、現在新たなバケットの受理と処理とが可能な状況であるから、管理用プロセッサ１６００に対して新たなバケットの割当を要求するメッセージを送付し（ステップＳ６３０）、管理用プロセッサ１６００から、割当要求に対する応答が送付されてくるのを待ち受ける状態になる（ステップＳ６３１）。
【０２８２】
そして、各プロセッサ１５００Ａ〜１５００Ｃは、ステップＳ６３１で管理用プロセッサ１６００からの応答を受理すると、その応答が「処理の終了指示」であるか否かを判定し（ステップＳ６３２）、もし、その応答が「処理の終了指示」であるならば処理を終了する。
一方、ステップＳ６３２でその応答が「処理の終了指示」ではないと判定された場合には、その応答（メッセージ）の内容は、バケットの割当であるから、各プロセッサ１５００Ａ〜１５００Ｃは、管理用プロセッサ１６００からのバケット割当メッセージに記載されていたバケットＩＤを使用して、第１プロセッサ群１４００に属するプロセッサ１４００Ａ〜１４００Ｃに対し、該バケット（正確にはプロセッサ１４００Ａ〜１４００Ｃに格納されているバケットＩＤが一致するサブバケット群）を自プロセッサに送付する旨の要求メッセージを同報送付する（ステップＳ６３３）。
【０２８３】
そして、各プロセッサ１５００Ａ〜１５００Ｃは、上記要求メッセージの応答として、割り当てられたバケットをプロセッサ１４００Ａ〜１４００Ｃから受理し（ステップＳ６３４）、受理したバケットデータに対してＤＢＭＳ処理〔例えばハッシュ結合（Ｈａｓｈ  Ｊｏｉｎ）  処理等〕を実行した後（ステップＳ６３５）、ステップＳ６３０に戻る。このステップＳ６３０へ戻った時点で、各プロセッサ１５００Ａ〜１５００Ｃは、新たなバケットの処理が開始できる状況になる。
【０２８４】
このように、本発明の第５実施例の並列プロセッサ装置によれば、第２プロセッサ群１５００に属するあるプロセッサがＭＩＭＤのスキューおよび生成率のスキューにより極めて早くバケットの処理を終了した場合、即時、他のバケットの処理のためにこのプロセッサの演算性能が使用されることになり、システム全体の等該業務のために割り当てられた演算性能が無駄にならない。
【０２８５】
一方、第２プロセッサ群１５００に属するあるプロセッサがＭＩＭＤのスキューおよび生成率のスキューにより予想より極めて長い処理時間を要した場合でも、第２プロセッサ群１５００に属する他のプロセッサがその分の処理を引き受けることになるので、システム性能に対する影響を低く抑えることができる。
（ｆ）第６実施例の説明
第６実施例は、第５発明の並列プロセッサ装置にかかる技術で、第５実施例と同様、上述した「突き合わせ処理」部分に適用されるものである。
【０２８６】
そして、図３０は本発明の第５実施例としての並列プロセッサ装置の全体構成を示すブロック図で、この図３０に示すように、第６実施例の装置も図２４に示した第５実施例の装置とほぼ同様に構成されている。この第６実施例では、第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃにおける若干の機能と、符号１７００を付して示す管理用プロセッサの機能とが、第５実施例のものと異なっているだけで、他の部分の構成は第５実施例のものと全く同様である。同様構成の部分の説明は、ここでは省略する。
【０２８７】
第６実施例における第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃは、自プロセッサにおけるグルーピング結果を後述する管理用プロセッサ１７００に通知する際に、バケットＩＤ（各データグループの識別子）とともにその容量を通知する機能を有している。
また、第６実施例の管理用プロセッサ１７００は、第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃからの通知を受けると、その通知に含まれる容量を各バケットついて積算し、第１プロセッサ群１４００全体について各バケットの大きさ（容量）を各バケットＩＤとともに記憶する第１の機能と、第２プロセッサ群１５００に属する各プロセッサ１５００Ａ〜１５００Ｃからバケットの割当依頼を受けると、当該割当依頼を行なったプロセッサに対して、記憶しているバケットで未割当のもののうち容量の大きなものから順に割り当てを行なう第２の機能とを有している。
【０２８８】
そして、管理用プロセッサ１７００の主記憶部上には、上記第１の機能および第２の機能を果たすためにバケットと第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃとの対応関係を記述するバケット割当テーブル（Ｂｕｃｋｅｔ−Ａｌｌｏｃａｔｉｏｎ−Ｔａｂｌｅ；図３１参照）１７０１と、第２プロセッサ群１５００に属する各プロセッサ１５００Ａ〜１５００Ｃの状態（未走行状態，走行状態，終了状態等）を記述する状態管理テーブル（Ｓｔａｔｅ−Ｃｏｎｔｒｏｌ−Ｔａｂｌｅ；図３２参照）１７０２とがそなえられている。
【０２８９】
ここで、図３１はバケット割当テーブル１７０１の概要を説明するための図であり、この図３１に示すように、第６実施例のテーブル１７０１も図２５に示した第５実施例のものとほぼ同様の構造を有しているが、この第６実施例のテーブル１７０１には、第５実施例と同様の構造に、さらに第４カラムが追加されている。
【０２９０】
この第４カラムには、その行に対応するバケットの容量が格納される。この第４カラムは、管理用プロセッサ１６００において、「プロセッサ未割当状態にあるバケット群のうち、最も容量の大きいものを、第２プロセッサ群１５００に属するプロセッサ１５００Ａ〜１５００Ｃに対する次の割当処理の対象とする」という第２の機能を実現するために使用される。なお、第４カラムの初期値は“０”に設定される。
【０２９１】
また、図３２は状態管理テーブル１７０２の概要を説明するための図であり、この図３２に示すように、第７実施例のテーブル１７０２は図２６に示した第５実施例のものと全く同様の構造を有しているので、その説明は省略する。
次に、上述のごとく構成された第６実施例の装置全体の動作の流れを説明すると、第６実施例の装置も、図２４〜図２９にて説明した第５実施例とほぼ同様に動作するので、ここでは、第５実施例との相違点についてのみ説明する。
【０２９２】
つまり、第６実施例では、第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃは、自プロセッサの二次記憶装置に格納される各サブバケットにつき、その識別子（バケットＩＤ）とともにその容量を管理用プロセッサ１６００に送付している。
また、管理用プロセッサ１６００は、第５実施例と同様に如何なる識別子をもつバケットが第１プロセッサ群１４００内に存在するかを管理する他に、それぞれのバケットの容量を、第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃが送付してきたサブバケットの容量をバケットＩＤ別に積算することにより管理・記憶している。
【０２９３】
そして、管理用プロセッサ１６００は、上記「バケットの割当要求」のメッセージＡが第２プロセッサ群１５００から送付され、且つ「バケットの割当」が可能な状況（可能となる条件は第５実施例と同様）にある時、バケット割当テーブル１７０１を参照して、第２プロセッサ群１５００に属するプロセッサ１５００Ａ〜１５００Ｃにも未だ割り当てられていないバケットのうち、記憶された各バケットの容量の大きなものから順に割当を行なう。
【０２９４】
その他の動作は、第５実施例の場合と同じある。
次に、第６実施例における各プロセッサ１７００，１４００Ａ〜１４００Ｃ，１５００Ａ〜１５００Ｃの動作概要を、図３３〜図３５に示すフローチャートに従ってより詳細に説明する。
まず、図３３は第６実施例における管理用プロセッサ１６００の動作を説明するためのフローチャート（ステップＳ７００〜Ｓ７１３）であり、この図３３に示すように、管理用プロセッサ１７００も、第５実施例の管理用プロセッサ１６００とほぼ同様の動作を行ない、図３３におけるステップＳ７００〜Ｓ７１２の処理は、それぞれ図２７に示したステップＳ６００〜Ｓ６１２の処理に対応しているので、以下の説明では、第５実施例の動作と異なる部分のみ記述する。
【０２９５】
この第６実施例の管理用プロセッサ１７００は、ステップＳ７００におけるバケット割当テーブル１７０１の内容の初期化に際して、第５実施例のステップＳ６００と同様の処理を行なうとともに、追加された第４カラムの初期値を全て“０”に設定する。
また、ステップＳ７０１において管理用プロセッサ１７００待ち受ける、第１プロセッサ群１４００に属するプロセッサ１４００Ａ〜１４００Ｃからのメッセージには、第５実施例では、バケットＩＤのみが記載されていればよかった（バケットの存在のみを認識できればよかった）のに対して、この第６実施例では、バケットＩＤに加えて各サブバケットの容量が記載されている。
【０２９６】
そして、ステップＳ７０２において、管理用プロセッサ１７００は、ステップＳ７０１で第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃから受理したメッセージ内に示される全てのサブバケットに対して、バケット割当テーブル１７０１の同一バケットに対応する行の第３カラムに、そのバケットのデータがメッセージ送信元プロセッサに存在することを記入し、さらに第４カラムの値に、そのサブバケット容量を加算する作業を行なう。
【０２９７】
上述のごとく第４カラムに処理を行なう点が、第６実施例と第５実施例との大きな相違点である。これにより、各バケットのプロセッサ１４００Ａ〜１４００Ｃ内での積算容量が、バケット割当テーブル１７０１の第４カラムに生成されることになる。
なお、ステップＳ７０２において、もし、当該バケットＩＤを第１カラムにもつ行が存在しなかった場合、管理用プロセッサ１７００は、そのバケットＩＤのための新たな行を取得し、その第３カラムに「いずれのプロセッサ１４００Ａ〜１４００Ｃにもそのバケットは存在しない」ことを示す情報、および、第４カラムに“０”を設定する。
【０２９８】
さて、本実施例でも、これらのステップＳ７０１，Ｓ７０２による処理動作は、プロセッサ１４００Ａ〜１４００Ｃの全てから報告がなされるまで繰り返し実行されるが（ステップＳ７０３）、この第６実施例では、全てのプロセッサ１４００Ａ〜１４００Ｃからバケット生成についての報告がなされると、次に、管理用プロセッサ１７００は、第５実施例のステップＳ６０４と同様のステップＳ７０４の処理を行なう前に、新たに追加されたステップＳ７１３の処理を実行している。
【０２９９】
このステップＳ７１３では、バケット割当テーブル１７０１の行が、第４カラムのバケット容量により昇順または降順にソートして並び替えられる。別に物理的な配置を置き換える必要はなく、例えばバケット割当テーブル１７０１内に行間のポインタを格納するカラムを追加するなどして、ポインタによる順列の表示で並替を行なう。このステップＳ７１３におけるソート処理は、後述するステップＳ７０７において、「未割当のバケットで最もバケット容量の大きいものを選択する」ことを目的に行なわれるものである。
【０３００】
そして、ステップＳ７０７において、管理用プロセッサ１７００は、上述した通り、第２プロセッサ群１５００に属するプロセッサ１５００Ａ〜１５００Ｃのいずれにも未だ割り当てが行なわれていないバケットで、最もバケット容量が大きいものを選択する。一方、第５実施例では、全てのバケットが唯一つのプロセッサに最終的に割り当てられるならば、どのバケットがどの順序で選択されても構わなかったが、この点が、バケット容量の大きい順で割当を行なう第６実施例との大きく異なる点である。
【０３０１】
図３４は第６実施例における第１プロセッサ群１４００に属する各プロセッサ１４００Ａ〜１４００Ｃの動作を説明するためのフローチャート（ステップＳ７２０〜Ｓ７２４）であり、この図３４に示すように、各プロセッサ１４００Ａ〜１４００Ｃも、第５実施例のものとほぼ同様の動作を行ない、図３４におけるステップＳ７２０〜Ｓ７２４の処理は、それぞれ図２８に示したステップＳ６２０〜Ｓ６２４の処理に対応しているので、以下の説明では、第５実施例の動作と異なる部分のみ記述する。
【０３０２】
この第６実施例の各プロセッサ１４００Ａ〜１４００Ｃの動作と、第５実施例のものと相違点は、図３３によっても前述した通り、第６実施例の各プロセッサ１４００Ａ〜１４００Ｃが、ステップＳ７２１で、自プロセッサ内部に格納されているサブバケットの存在を認識すると、それら全てのバケットＩＤとサブバケット容量とを対にして管理用プロセッサ１７００に送付する点のみである。これに対し、第５実施例では、バケットＩＤのみを送付すればよかった。
【０３０３】
図３５は第６実施例における第２プロセッサ群１５００に属する各プロセッサ１５００Ａ〜１５００Ｃの動作を説明するためのフローチャート（ステップＳ７３０〜Ｓ７３５）であり、この図３５に示すように、各プロセッサ１５００Ａ〜１５００Ｃは、第５実施例のものと全く同様の動作を行ない、図３５におけるステップＳ７３０〜Ｓ７３５の処理は、それぞれ図２９に示したステップＳ６３０〜Ｓ６３５の処理に完全に対応しているので、その説明は省略する。
【０３０４】
このように、本発明の第６実施例の並列プロセッサ装置による効果を以下に説明する。
この第６実施例の装置は、ＭＩＭＤのスキューや生成率のスキューが「最後のバケット」において特に大き場合の影響を低減しようとするものである。
あるバケットに対してＭＩＭＤのスキューや生成率のスキューが与える悪影響の大きさ（尺度は該バケットの処理にかかる時間が予想からどれだけ伸びたか）は、当然、バケットのデータ量と正の相関をもつと予想される。
【０３０５】
もし、処理の初期に大きなスキュー値が発生したとしても、第５実施例の装置では、その分の演算性能を他のプロセッサが提供するからシステム性能への影響を最小に抑えることができる。しかし、このことは「スキューにより性能低下したプロセッサが本来処理すべきだったバケットを他のプロセッサにまかせることができる」からこそ可能である。
【０３０６】
つまり、もし最後のバケットにつき極めて大きなスキューが発生して処理時間が遅延したとしても、この遅延を補償することはできない。
そこで、第６実施例では、「最後のバケット」に関して大きなスキューが発生してもバケットの大きさそのものが小さいならばシステム性能に対する影響が十分小さくなることを利用して、第５実施例の装置をさらに改善している。
【０３０７】
【発明の効果】
以上詳述したように、本発明の並列プロセッサ装置（請求項１）によれば、多段網であろうが共通バスであろうが、ネットワーク機構に関して特に特別な機構や機能を必要としなくなり、メモリ容量を除く部分のハード回路量を大幅に低減することができ、装置構成に要するコストを大幅に削減することができる。
【０３０８】
また、本発明の並列プロセッサ装置（請求項２）によれば、任意理由によるＴ−ＤＰｒの性能の差を相殺する方向に自動的かつ動的に調整が行なわれ既知技術では対処できなかった「生成率のスキュー」および「Ｔ−ＤＰｒ動作に関するＭＩＭＤのスキュー」が大幅に低減される。
このとき、プロセッサ間転送単位をエンティティ群とすることで、チャンクの平坦化処理を行ないながら、プロセッサ間のデータ転送に付随するプロセッサの動作オーバヘッドを確実に減少させることできる（請求項３）。
【０３０９】
さらに、本発明の並列プロセッサ装置（請求項４）によれば、Ｔ−ＤＰｒの負荷が主として入力されたエンティティのデータ量に比例する場合、より良くＴ−ＤＰｒの負荷の均等化を実現することができる。
ここで、「生成率のスキュー」および「Ｔ−ＤＰｒ動作に関するＭＩＭＤのスキュー」は容易にプロセッサ間負荷を数倍のオーダでバラつかせ、従って理想的なシステム性能から見て実効性能を数分の１（最も遅いプロセッサでの処理終了までシステム全体の処理は終わらない）に落としてしまうことが判っているが、上述した本発明の並列プロセッサ装置によれば、シミレーションの結果、かなり広範囲のケースに対して、実効性能を数倍改善しほぼ理想性能を達成できることが明確である。また、本発明の並列プロセッサ装置によれば、チャンク（バケット）の平坦化を極めて安価で且つ効率良く行なうことができる。
【０３１０】
なお、請求項５記載の並列プロセッサ装置によれば、第２プロセッサ群に属するプロセッサが、ＭＩＭＤのスキューおよび生成率のスキューにより極めて早く、あるデータグループ（バケット，チャンク）に対する処理を終了した場合、他のデータグループの処理のために、即時、そのプロセッサの演算性能が使用されることになり、システム全体の業務のために割り当てられた演算性能が無駄にならない。
【０３１１】
逆に、第２プロセッサ群に属するプロセッサが、ＭＩＭＤのスキューおよび生成率のスキューにより予想より極めて長い処理時間を要した場合でも、他のプロセッサがその分の処理を引き受けることになり、システム性能に対する影響を低く抑えることができる。
従って、突き合わせ等の処理に際してのＭＩＭＤのスキューおよび生成率のスキューに確実に対応することができる。
【０３１２】
また、請求項６記載の並列プロセッサ装置によれば、上述した請求項５記載の並列プロセッサ装置と同様の効果を得られるが、特に、本装置によれば、データ量の大きいデータグループから順に割当を行なうことで、万一、最後に割り当てたデータグループについて大きなスキューが発生したとしても、データグループの大きさそのものが小さければ、システム性能に対する影響が十分に小さくなるので、ＭＩＭＤのスキューおよび生成率のスキューに、より確実に対応できる効果がある。
【図面の簡単な説明】
【図１】本発明の第１実施例としての並列プロセッサ装置の全体構成を示すブロック図である。
【図２】第１実施例におけるＳ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図である。
【図３】第１実施例における転送宛先プロセッサ決定用テーブルの具体的な構成例を示す図である。
【図４】第１実施例におけるプロセッサ間通信機構の構成例を示す図である。
【図５】第１実施例におけるプロセッサ間で送受されるデータのフォーマットを示す図である。
【図６】第１実施例におけるＴ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図である。
【図７】第１実施例におけるＳ−ＤＰｒの動作アルゴリズムを説明するための図である。
【図８】第１実施例におけるＴ−ＤＰｒの動作アルゴリズムを説明するための図である。
【図９】本発明の第２実施例としての並列プロセッサ装置の全体構成を示すブロック図である。
【図１０】第２実施例におけるＳ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図である。
【図１１】第２実施例における転送キューの構造の一例を示す図である。
【図１２】第２実施例におけるＴ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図である。
【図１３】第２実施例のＴ−ＤＰｒにおいてラウンドロビン方式での送信トリガ信号の送付を実現するためのポインタおよび一次元テーブルの詳細な構造の例を示す図である。
【図１４】第２実施例におけるＳ−ＤＰｒの動作アルゴリズムを説明するための図である。
【図１５】第２実施例におけるＳ−ＤＰｒの動作アルゴリズムを説明するための図である。
【図１６】第２実施例におけるＴ−ＤＰｒからのトリガ信号のための電文フォーマットの一例を示す図である。
【図１７】第２実施例におけるＴ−ＤＰｒの動作アルゴリズムを説明するための図である。
【図１８】本発明の第３実施例としての並列プロセッサ装置におけるＳ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図である。
【図１９】本発明の第３実施例としての並列プロセッサ装置におけるＴ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図である。
【図２０】第３実施例における転送データフォーマットの一例を説明するための図である。
【図２１】本発明の第４実施例としての並列プロセッサ装置におけるＳ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図である。
【図２２】第４実施例における転送キューの構造の一例を示す図である。
【図２３】本発明の第４実施例としての並列プロセッサ装置におけるＴ−ＤＰｒの内部ハードウェア構成を概略的に示すブロック図である。
【図２４】本発明の第５実施例としての並列プロセッサ装置の全体構成を示すブロック図である。
【図２５】第５実施例におけるバケット割当テーブルの概要を説明するための図である。
【図２６】第５実施例における状態管理テーブルを説明するための図である。
【図２７】第５実施例における管理用プロセッサの動作を説明するためのフローチャートである。
【図２８】第５実施例における第１プロセッサ群に属する各プロセッサの動作を説明するためのフローチャートである。
【図２９】第５実施例における第２プロセッサ群に属する各プロセッサの動作を説明するためのフローチャートである。
【図３０】本発明の第６実施例としての並列プロセッサ装置の全体構成を示すブロック図である。
【図３１】第６実施例におけるバケット割当テーブルの概要を説明するための図である。
【図３２】第６実施例における状態管理テーブルを説明するための図である。
【図３３】第６実施例における管理用プロセッサの動作を説明するためのフローチャートである。
【図３４】第６実施例における第１プロセッサ群に属するプロセッサの動作を説明するためのフローチャートである。
【図３５】第６実施例における第２プロセッサ群に属するプロセッサの動作を説明するためのフローチャートである。
【図３６】従来の並列プロセッサ装置の全体構成を示すブロック図である。
【図３７】従来の並列プロセッサ装置におけるネットワーク機構の内部構造を示すブロック図である。
【図３８】図３７に示すネットワーク機構を構成する各スイッチングユニットの内部構造を示すブロック図である。
【図３９】各スイッチングユニットにおける作業テーブルの内容を示す図である。
【図４０】各スイッチングユニットの入出力データの論理的フォーマットを示す図である。
【図４１】従来の並列プロセッサ装置におけるＳ−ＤＰｒの内部ハードウエア構成を示すブロック図である。
【図４２】従来の並列プロセッサ装置におけるＴ−ＤＰｒの内部ハードウエア構成を示すブロック図である。
【図４３】従来の並列プロセッサ装置におけるＳ−ＤＰｒの動作アルゴリズムを説明するための図である。
【図４４】従来の並列プロセッサ装置におけるＴ−ＤＰｒの動作アルゴリズムを説明するための図である。
【図４５】従来の並列プロセッサ装置の他例の全体構成を示すブロック図である。
【図４６】従来の並列プロセッサ装置の他例におけるバケット割当テーブルの概略フォーマット例を示す図である。
【図４７】従来の並列プロセッサ装置の他例の動作概要を説明するためのフローチャートである。
【図４８】従来の並列プロセッサ装置の他例の動作概要を説明するためのフローチャートである。
【図４９】従来の並列プロセッサ装置の他例の動作概要を説明するためのフローチャートである。
【符号の説明】
４００  ソースデータプロセッサ群
４００Ａ〜４００Ｃ  ソースデータプロセッサ（Ｓ−ＤＰｒ）
４０１  マイクロプロセッサ
４０２  主記憶部
４０３  入力ポート回路
４０４  出力ポート回路
４０５〜４０７  Ｉ／Ｏ駆動回路
４０８〜４１０  Ｉ／Ｏ装置
４１１〜４１３  Ｉ／Ｏバス
４１４  入出力線
４１６  入力線
４２０  転送宛先プロセッサ決定用テーブル
４２１  変換１次元リスト
６００  ネットワーク機構
６０１  共通バス
７００  ターゲットデータプロセッサ群
７００Ａ〜７００Ｃ  ターゲットデータプロセッサ（Ｔ−ＤＰｒ）
７０１  マイクロプロセッサ
７０２  主記憶部
７０３  入力ポート回路
７０４  出力ポート回路
７０５〜７０７  Ｉ／Ｏ駆動回路
７０８〜７１０  Ｉ／Ｏ装置
７１１〜７１３  Ｉ／Ｏバス
７１４  入出力線
７１６  入力線
８００  ソースデータプロセッサ群
８００Ａ〜８００Ｃ  ソースデータプロセッサ（Ｓ−ＤＰｒ）
８０１  マイクロプロセッサ
８０２  主記憶部
８０３  入力ポート回路
８０４  出力ポート回路
８０５〜８０７  Ｉ／Ｏ駆動回路
８０８〜８１０  Ｉ／Ｏ装置
８１１〜８１３  Ｉ／Ｏバス
８１４  入出力線
８１６  入力線
８２０  転送宛先プロセッサ決定用テーブル
８３０〜８３２  転送キュー（待ち行列機構）
８４０  転送データ
８４１  キュー長フィールド（蓄積数検出手段）
８５０  送信バッファ
９００  ターゲットデータプロセッサ群
９００Ａ〜９００Ｃ  ターゲットデータプロセッサ（Ｔ−ＤＰｒ）
９０１  マイクロプロセッサ
９０２  主記憶部
９０３  入力ポート回路
９０４  出力ポート回路
９０５〜９０７  Ｉ／Ｏ駆動回路
９０８〜９１０  Ｉ／Ｏ装置
９１１〜９１３  Ｉ／Ｏバス
９１４  入出力線
９１６  入力線
９２２  ラウンドロビンポインタ
９２３  １次元テーブル
９２３Ａ  台数情報フィールド
９２３−０〜９２３−（ｎ−１）  識別子フィールド
９５０  受信バッファ
１２００  ソースデータプロセッサ（Ｓ−ＤＰｒ）
１２０１  マイクロプロセッサ
１２０２  主記憶部
１２０３  入力ポート回路
１２０４  出力ポート回路
１２０５〜１２０７  Ｉ／Ｏ駆動回路
１２０８〜１２１０  Ｉ／Ｏ装置
１２１１〜１２１３  Ｉ／Ｏバス
１２１４  入出力線
１２１６  入力線
１２２０  転送宛先プロセッサ決定用テーブル
１２３０〜１２３２  転送キュー（待ち行列機構）
１２４０  転送データ
１２４１  キュー長フィールド（蓄積数検出手段）
１２５０  送信バッファ
１２４７  転送データ量フィールド（蓄積データ量検出手段）
１３００  ターゲットデータプロセッサ（Ｔ−ＤＰｒ）
１３０１  マイクロプロセッサ
１３０２  主記憶部
１３０３  入力ポート回路
１３０４  出力ポート回路
１３０５〜１３０７  Ｉ／Ｏ駆動回路
１３０８〜１３１０  Ｉ／Ｏ装置
１３１１〜１３１３  Ｉ／Ｏバス
１３１４  入出力線
１３１６  入力線
１３２２  ラウンドロビンポインタ
１３２３  １次元テーブル
１３５０  受信バッファ
１４００  第１プロセッサ群
１４００Ａ〜１４００Ｃ  プロセッサ
１５００  第２プロセッサ群
１５００Ａ〜１５００Ｃ  プロセッサ
１６００，１７００  管理用プロセッサ
１６０１，１７０１  バケット割当テーブル
１６０２，１７０２  状態管理テーブル
【図１】
0003560662.tif 000002
【図２】
0003560662.tif 000003
【図３】
0003560662.tif 000004
【図４】
0003560662.tif 000005
【図５】
0003560662.tif 000006
【図６】
0003560662.tif 000007
【図７】
0003560662.tif 000008
【図８】
0003560662.tif 000009
【図９】
0003560662.tif 000010
【図１０】
0003560662.tif 000011
【図１１】
0003560662.tif 000012
【図１２】
0003560662.tif 000013
【図１３】
0003560662.tif 000014
【図１４】
0003560662.tif 000015
【図１５】
0003560662.tif 000016
【図１６】
0003560662.tif 000017
【図１７】
0003560662.tif 000018
【図１８】
0003560662.tif 000019
【図１９】
0003560662.tif 000020
【図２０】
0003560662.tif 000021
【図２１】
0003560662.tif 000022
【図２２】
0003560662.tif 000023
【図２３】
0003560662.tif 000024
【図２４】
0003560662.tif 000025
【図２５】
0003560662.tif 000026
【図２６】
0003560662.tif 000027
【図２７】
0003560662.tif 000028
【図２８】
0003560662.tif 000029
【図２９】
0003560662.tif 000030
【図３０】
0003560662.tif 000031
【図３１】
0003560662.tif 000032
【図３２】
0003560662.tif 000033
【図３３】
0003560662.tif 000034
【図３４】
0003560662.tif 000035
【図３５】
0003560662.tif 000036
【図３６】
0003560662.tif 000037
【図３７】
0003560662.tif 000038
【図３８】
0003560662.tif 000039
【図３９】
0003560662.tif 000040
【図４０】
0003560662.tif 000041
【図４１】
0003560662.tif 000042
【図４２】
0003560662.tif 000043
【図４３】
0003560662.tif 000044
【図４４】
0003560662.tif 000045
【図４５】
0003560662.tif 000046
【図４６】
0003560662.tif 000047
【図４７】
0003560662.tif 000048
【図４８】
0003560662.tif 000049
【図４９】
0003560662.tif 000050