JP4267707B2 - データフローアーキテクチャにおけるビットストリングのn−ウェイ処理 - Google Patents

データフローアーキテクチャにおけるビットストリングのn−ウェイ処理 Download PDF

Info

Publication number
JP4267707B2
JP4267707B2 JP53603998A JP53603998A JP4267707B2 JP 4267707 B2 JP4267707 B2 JP 4267707B2 JP 53603998 A JP53603998 A JP 53603998A JP 53603998 A JP53603998 A JP 53603998A JP 4267707 B2 JP4267707 B2 JP 4267707B2
Authority
JP
Japan
Prior art keywords
input
processing element
bit
binary tree
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP53603998A
Other languages
English (en)
Other versions
JP2001512601A (ja
Inventor
ダブリュ. マックール,マイケル
エー. マルキーズ,ジーン
Original Assignee
サンド テクノロジー システムズ インターナショナル,インコーポレイティド
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 サンド テクノロジー システムズ インターナショナル,インコーポレイティド filed Critical サンド テクノロジー システムズ インターナショナル,インコーポレイティド
Publication of JP2001512601A publication Critical patent/JP2001512601A/ja
Application granted granted Critical
Publication of JP4267707B2 publication Critical patent/JP4267707B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Communication Control (AREA)

Description

発明の分野
本発明は、概括的にはコンピュータシステムにおいて複数のビットストリングを処理するための方法とシステムに関し、より特定的には、複数のビットストリングに対するブール“OR”演算の達成に関する。
発明の背景
ビットベクトル(すなわち符号化されたビットストリング)は関係データベース管理システム(“RDBMS”)においてデータベースに格納されるレコード内のデータ項目のインスタンスを表わすために使用される。ビットベクトルはビットストリングすなわち1と0の1次元アレイの符号化された形式を格納する。関係データベース管理システムにおけるデータ格納への従来のアプローチは、データの行および列に組織化されたテーブルの集まりを使用することである。各列は特定のタイプの情報を含み各行は列ごとに異なる情報を有する個々のレコードからなる。列は等しく構造化されたレコードとして連続的に格納される。このレコード指向アプローチは膨大な入力および出力(I/O)要件を負わせ、複雑なインデクス機構を必要とし、容認できる性能レベルを達成するためには反復的なチューニングと脱正規化(denormalization)を必要とする。
これらの問題を実質的に軽減するRDBMSにおけるデータの表現方法は、1998年10月7日出願の国際出願PCT/US88/03528に記述されており、その開示の全体は参照することによりここに組み込まれる。データベースはビットベクトルを使用することによりデータ値をデータベースにおける使用から切り離す列指向アプローチを使って構造化される。情報を連続するレコードとして格納するのでなく、データは列状の組織に格納される。各テーブルを埋めるデータ値はビットベクトルを用いて分離され、各ビットベクトルは列の各々からユニークな値を表わす。各ビットベクトル内では、2進ビット値が所与のレコード(または行)内の列値の発生率を示す。ビットベクトルはRDBMSにおける値を表わすために使われるが他の応用に対して使用することもできる。
あらゆるRDBMSにおけるように個々のデータレコードはクエリーを用いてデータベースに問い合わせることによって所在が確認される。クエリー過程の共通な形式は、1対のビットストリングにブール演算を施してクエリーの条件を満たすデータベースレコードを表わす合成ビットストリングを形成することを含む。
データベースの領域を節約し処理コストを軽減するため、Glaser et al.に発行された米国特許第5,036,457号に開示されるように圧縮され符号化されブール演算に従って処理されるが、これの開示全体が参照することによりここに組み入れられる。符号化された2進ビットストリングが復号され、或いは生のビットストリングが変換されて、一連のビットユニット、すなわちランまたはインパルスのいずれかを記述する圧縮された2進ビット形式になる。ランとは、同一の2進値を持つ1つ以上のビットの連続からなるビットストリングをいう。インパルスとは、同一の2進値を持つ1つ以上のビットの連続からなるビットストリングであってその2進値のビットと反対の2進値を有する終了ビットが続くものをいう。ブール演算がビットユニットすなわち圧縮形式のランまたはインパルスの対に対して実施され繰り返しループ構造を用いて合成ビットユニットが形成される。この方法は、典型的な従来技術において行なわれるように一度に1ビットずつ演算するよりも著しく早い。
1対の圧縮パルスが1対の符号化ビットストリング(すなわちビットベクトル)または1対の変換された生のビットストリングから得られ、より短かい(“最小”と呼ばれる)長さのインパルスが選択される。ブール演算が最小長さのインパルスの多数のビットについて実行されこの最小長さの合成ビットユニットが形成される。このサイクルが残りの最小長さのインパルスについて繰り返される。ブール演算の実行のために必要なトータルの回数は2つの入力ビットベクトルのインパルスの数の合計にほぼ等しく、これは入力ビットベクトルのビット数よりも著しく少ない。
多数の短かいインパルスを有するビットベクトルの処理のための計算のオーバーヘッドは最小長さ法を使うと多くなるが多数の長いインパルスを有するビットベクトルでは大きな問題にはならない。
それ故、不確定の長さの符号化ビットストリングの対に対してブール演算を実行する方法で、各最小長さインパルスについて繰り返しを行なうことによるオーバーヘッドを回避する方法が開発された。この方法は、1995年12月1日に出願された米国特許出願08/586,005号に記述されており、その開示全体が参照することによりここに組み込まれる。“最大”法と呼ばれるこの方法は最小長さのインパルスの代わりに最大長さのインパルスを使用してビットベクトルのブール演算を実行することによりクエリー処理を改善した。
上記に説明した進歩にもかかわらず、大規模なRDBMSにおけるクエリーの処理速度のさらなる改善が要望されている。従来の方法では1度に1対しかビットストリングの演算を行なわない。或るクエリーを解決するのに多数のビットストリングの組み合わせが必要とされそれを例えば1対ずつのOR演算で行なうとき、ビットストリングの処理のために最小または最大法の多数の繰り返しが必要である。例えば、4つのビットストリングA,B,CおよびDがあるとすれば、最初にAとBが対として処理されて合成ビットストリングEが出力される。次にEとCが処理されて合成ビットストリングFを生成する。最後にFとDが処理されて合成ビットストリングを生成する。この合成ビットストリングの生成のためには多数の手続きの呼び出し、文脈切替、及び格納さらには中間的な(そしてそれゆえに一時的な)処理値を表現するために生成されるビットストリングのようなデータ構造の再呼び出しといった形のかなりの処理オーバーヘッドを必要とする。クエリー処理の改良を継続するためには、現在の1対ずつのやり方における処理オーバーヘッドなしで任意の数“N”の並列入力ビットストリングをサポートするシステムと方法が必要である。
発明の概要
本発明の実施例は、複数の入力された符号化ビットストリングまたは変換された生のビットストリングにブール演算を施して1つの合成された符号化ビットストリングまたは生のビットストリングを生成する方法であって、入力された符号化ビットストリングまたは変換された生のビットストリングの対の各々を複数の処理要素の選択された1つにつなぎ、複数の処理要素を接続して複数のレベルを有する2分木を形成し、ここで選択された処理要素は2分木の葉ノードであり、選択された処理要素の出力ビットユニット、すなわち圧縮されたランおよびインパルスは葉ノードよりも低い木レベルにある葉でないノードである中間処理要素へ入力され、中間処理要素の出力圧縮ランおよびインパルスはより低い2分木レベルの他の中間処理要素へ入力され、合成された符号化ビットストリングまたは生のビットストリングは2分木の根ノードである根処理要素から出力され、選択された処理要素へ入力される符号化ビットストリングまたは変換された生のビットストリングにブール演算を施して出力圧縮ランおよびインパルスを生成することによって2分木のすべての葉ノードを処理し、ここで出力圧縮ランおよびインパルスは中間処理要素へ入力される圧縮ランおよびインパルスになり、中間処理要素へ入力される圧縮ランおよびインパルスにブール演算を施して出力圧縮ランおよびインパルスを生成することによって2分木のすべての葉でないノードを処理し、根ノード処理要素へ入力される圧縮ランおよびインパルスにブール演算を施して合成された符号化ビットストリングまたは生のビットストリングを生成することによって2分木の根ノードを処理するステップを具備する方法を含む。
本発明の他の実施例によれば、上記のおよび他の利益は、複数の入力された符号化ビットストリングまたは生のビットストリングにブール演算を施して合成された符号化ビットストリングまたは生のビットストリングを生成するシステムであって、1対の入力された圧縮ランおよびインパルスにブール演算を施して出力圧縮ランおよびインパルスを生成する手段をその各々が具備する複数の処理要素と、入力された符号化ビットストリングまたは変換された生のビットストリングの対の各々を処理要素の選択された1つにつなぐ第1の処理手段と、処理要素を接続して複数のレベルを有する2分木を形成する第2の処理手段であって、選択された処理要素は2分木の葉ノードであり、選択された処理要素の出力圧縮ランおよびインパルスは葉ノードよりも低い2分木レベルの葉でないノードである中間処理要素へ入力され、中間処理要素の出力圧縮ランおよびインパルスはより低い2分木レベルの他の中間処理要素へ入力され、合成された符号化ビットストリングまたは生のビットストリングは2分木の根ノードである根処理要素によって出力されるものと、選択された処理要素へ入力される符号化ビットストリングまたは変換された生のビットストリングに対するブール演算を開始して出力圧縮ランンおよびインパルスを生成することによって2分木のすべての葉ノードを処理し、ここで出力圧縮ランおよびインパルスは中間処理要素へ入力される圧縮ランおよびインパルスになり、中間処理要素へ入力される符号化ビットストリングまたは変換されたビットストリングに対するブール演算を開始して出力圧縮ランおよびインパルスを生成することによって2分木のすべての葉でないノードを処理し、根処理要素へ入力される圧縮ランおよびインパルスに対するブール演算を開始して合成された符号化ビットストリングまたは生のビットストリングを生成することによって2分木の根ノードを処理する第3の処理手段とを具備するシステムによって達成される。
本発明のさらなる利益および新規な特徴は、以下の記述に一部が述べられ、以下の記述を検討することにより当業者に明らかになり、或いは発明の実施により学ばれるであろう。以下の詳細な記述は、発明の実施のために意図された最良の形態の単なる例として発明の好適な実施例のみを記述している。理解されるように、本発明は他の異なる実施が可能であり、そのいくつかの詳細は本発明から逸脱することなく様々の自明な点において変形が可能である。したがって、図面および記述は全くの例であり限定的ではないとみるべきである。
【図面の簡単な説明】
図1は本発明に従ってブール演算を実行するコンピュータプラットフォームを備えたコンピュータシステムの機能ブロック図である。
図2Aはエンコーダ/デコーダを含む図1のコンピュータプラットフォームの機能ブロック図である。
図2Bは変換器を含む図1のコンピュータプラットフォームの機能ブロック図である。
図3Aおよび3Bは、例として、非圧縮ビットストリングおよび圧縮ビットストリングを描いた図である。
図4は生のビットストリング、符号化ビットストリングおよび圧縮インパルスを描いたフローチャートである。
図5Aは本発明のデータフローアーキテクチャモデル内単一ノードの図である。
図5Bは本発明のデータフローアーキテクチャモデル内ノードの2分木の図である。
図6はデータフローマシンの図である。
図7は4個の入力ビットストリングをもったデータフローマシンの図である。
図8は8個の入力ビットストリングをもったデータフローマシンの図である。
図9は6個の入力ビットストリングを持ったデータフローマシンの一例の図である。
図10は本発明の状態遷移図である。
図11A〜11Cは本発明の処理中に使用されるデータ構造の図である。
図12は本発明のソフトウェア設計の呼出しレベルチャートである。
図13はビットベクトルのN−ウェイ処理機能の処理ステップのフローチャートである。
図14は入力ビットストリングを処理要素につなぐ処理ステップのフローチャートである。
図15は処理要素ノードの2分木を接続する処理ステップのフローチャートである。
図16はつながれた入力ビットストリングの組を処理するステップのフローチャートである。
図17は処理要素によって実行される処理のステップのフローチャートである。
図18A〜18Cは処理要素の処理で使用される処理要素データ構造のフィールドおよび他の動作変数を局所化する処理ステップのフローチャートである。
図19は両方の入力が入力終了状態になるまであるいは出力FIFOが満杯となるまで処理要素によって実行される処理ステップのフローチャートである。
図20A〜20Bは演算の準備過程の処理ステップのフローチャートである。
図21は処理要素のA側入力を準備するステップのフローチャートである。
図22は処理要素のB側入力を準備するステップのフローチャートである。
図23は現在の処理要素のA側入力およびB側入力のブール「OR」演算を実行するステップのフローチャートである。
図24は処理要素のフィールドに局所変数の内容を再記憶するステップのフローチャートである。
図25は出力ビットストリングを生成するステップのフローチャートである。
図26は出力ビットベクトルを処理するステップのフローチャートである。
好ましい実施態様の詳細な説明
I.用語集
下記の定義が後に続く記述内容の理解に助けとなる。
「ビットストリング」;2進ビット列(ラン(run)かインパルスかのどちらか)を意味する。
「ビットベクトル」;一連のビット列の符号化形式を意味する。
「ビットユニット」;ビット列の一部の圧縮形式を意味する。
ビットユニットは3つの異った形;ラン、インパルス、エンドオブインプット(end-of-input(EOV))のうちの一つとなる。
「ラン」;同じ2進値(またはジエンダ(gender))が1つまたはそれ以上続くビット列を意味する。
「インパルス」;同一2進値のビット列と反対の2進値を有する終了ビットがその後に続く、同一2進値(あるいはジエンダ)が1個以上続くビット列を意味する。
「特性種別(characteristic type)」;ビットユニットをランかインパルスのいずれかに分類することを示すものを意味する。
「ジエンダ」;ビットユニットの2進値を示すものを意味し、また「極性」として代りに意味される。
「非圧縮形式」;ランかインパルスのいずれかである2進ビットの1次元配列(即ち生のビットストリング)を意味する。
「圧縮形式」;(1)ジエンダ、(2)特性種別、(3)長さおよび(4)エンドオブインプットを示すランまたはインパルスの簡潔な表現を意味する。
「符号化形式」;短縮されたフォーマットで記憶される1個以上続くインパルスを意味する。
II.ハードウェア、ソフトウェアならびにファームウェア実施例
A.コンピュータシステムの説明
図1は本発明に従ってブール演算を実行するコンピュータプラットフォームを備えたコンピュータシステムの機能ブロック図である。コンピュータシステムはプログラマブルプロセッサ2(むしろマイクロプロセッサ)、ディスプレイ2、プロセッサ2へのキーボード入力装置11およびビット列の記憶かバッファリング(buffering)に用いられる外部記憶装置12から構成されている。変換用のハードウェア、ソフトウェアあるいはファームウェアおよびブール演算用のハードウェア、ソフトウェアあるいはファームウェアはプロセッサ2に組込まれたコンピュータプラットフォーム10(仮想線で示される)に収容される。コンピュータプラットフォーム10は、Glaser外による米国特許No.5306457で示されているような、ビットストリングのブール演算の実行に関係する様々な活動を調整する。
一般に、コンピュータプラットフォーム10はプリント回路基板上に組み立てられた汎用プログラマブルコンピュータであり、ここで開示されるような動作を指示するコンピュータプログラムのソフトウェアを備えたパーソナル、ミニおよびメインフレームコンピュータを含むほとんどの標準的なコンピュータシステムの中で、手軽に採用されている。コンピュータプラットフォーム10は集積回路チップ(またはチップセット)上に形成された特定用途コンピュータあるいは、従来の方法かマイクロコードとして読み取られる読み取り専用メモリ(ROM)上に焼き付けられた実行可能コンピュータコードであってもよいことがまた思い描かれる。
B.コンピュータプラットフォームの説明
図2Aはエンコーダ/デコーダを含む図1のコンピュータプラットフォームの機能ブロック図である。さらに具体的には、コンピュータプラットフォーム10は、エンコーダ/デコーダ14、バス15と27によりオプショナルなバッファメモリに相互接続されるオプショナルな2次メモリ16(コンピュータプラットフォーム10の外部に置かれる)、すくなくとも1個のブール論理ユニット(BLU)20、標準プロセッサ25およびシステムコーディネータ26から構成されている。ビットベクトルの符号化/復号化、生のビットストリングの変換、ブール演算の処理および構成部分間のデータ転送の調整に用いられるソフトウェアプログラムがコンピュータプラットフォーム10にロードされると、コンピュータプラットフォーム10は起動され処理可の状態になる。
コンピュータプラットフォーム10の特定の構成部分についての詳細な議論がここで示される。外部記憶装置12は、ビットストリング(符号化および生のビットストリングの両方)の永久またはバッファ記憶装置であり、代表的にはハートディスクである。ビットストリングは、リレーショナルデータベースの組織化されたデータ(関係(relations)のような)、外部の通信手段により取得された組織化されていないデータ、あるいはビットの隣り合った連続によって表わされるその他のどのような種類のデータも代表している。
外部記憶装置12の内容はバス13によってコンピュータプラットフォーム10および符号化ビットストリングを1ビットユニット以上(即ち圧縮インパルス)に分離するエンコーダ/デコーダ14にロードされる。インパルスは本明細書の至る所で、逆極性の終了ビットを持つとして述べられているが、この記述は逆極性の開始ビットを持つインパルスにも同等に適用される。また「極性」と「ジエンダ」という用語が交換可として使用されており単に2進値に適用する。4つの異なった符号化フォーマットのうちの1つへ/からビット列を符号化/復号化するためにエンコーダ/デコーダにより実行されるルーチンがGlaser外による米国特許No.5036457に述べられている。
オプショナルな2次メモリ16は将来のブール演算のためのビットユニットを記憶し、プロセッサに含まれるメモリ構成部分かコンピュータプラットフォーム内部に含まれるメモリ構成部分となる。バッファメモリ18はBLU 20で処理する前か処理後2次メモリに記憶する前に一時的にビットユニットを保持するためのもう一つのメモリ領域である。
一組のBLU 20(図2に示されているのはそのうちの1個のみ)は、インテルコーポレーションから市販で入手可能なペンティアム(PENTTIUM)マイクロプロセッサあるいはディジタルエクイップメントコーポレーションから市販で入手可能なアルファ(ALPHA)マイクロプロセッサのようなマイクロプロセッサ上に(図示はされていない)実施例を実現したBLUを利用して複数のビット列のブール演算を実行する。いくつかのあるいは全てのブール演算がハードウェアでもっと効率的に実現される。しかしながらブール演算が主としてソフトウェアで実現されても、1個のBLU 20は、符号化ビットストリングまたは変換された生のビットストリングのブール演算を実行する現在知られている方法よりも記憶、速度などについてもっと効率的にブール演算を実行できる。
合成ビットユニット、即ち、複数のビットユニットのブール演算実行結果がBLU 20により一度決定されると、合成ビットユニットはバス21により、それらが結合されて圧縮インパルスとされるまで合成ビットユニット(ランであってもよい)を一時的に保持する本質的には一対のバッファである標準プロセッサ25に送られる。圧縮インパルスが標準プロセッサ25で形成されると、前記インパルスはバス23により符号化のためにバッファメモリ18に出力される。
システムコーディネータ26はコンピュータプラットフォーム10上のデータ処理を制御する。バスシステムの動作およびコンピュータプラットフォームの構成部分の動作はシステムコーディネータ26のソフトウェアプログラムにより制御される。システムコーディネータ26から出ている図2の点線はいろいろな構成部分を制御することを示している。
図2Bは変換器を含む図1のコンピュータプラットフォームの機能ブロック図を示す。この実施例は、エンコーダ/デコーダ14が変換器15に置き換えられている以外は、図2Aの実施例と同様に機能する。変換器15は、コンピュータプラットフォーム10でさらに処理するために生のビットストリングを圧縮インパルスに変換する。
III.ビットストリングフォーマット
図3Aと図3Bは、例として非圧縮ビットストリングと圧縮ビットストリングを描いたものである。非圧縮ビットストリングが2進ビット値33として、また2進値化された波形33′として図示されている。2進値は本明細書のいたる所で言及されるが、同じ記述が、交換可能で2進値化された波形に適用される。
A.非圧縮フォーマット
示された2種類のビットストリングパターンはラン34またはインパルス35である。これらは前記したように両方とも生のビットストリングである。
B.圧縮フォーマット
ラン34かインパルス35のような各ビットストリングパターンは圧縮形式でビットストリングを記述している属性5,6,7で表わされる。この圧縮形式は「ビットユニット」として言及される。ビットストリングを非圧縮にする必要なしに、ブール演算が、属性5,6,7を使用して実行される。前記実施例で入力属性は、特性種別rS5;ジエンダgS6;および長さlS7を含む。特性種別rS5「0」か「1」はそのスライス(slice)がそれぞれインパルス35かラン34であることを示している。ジエンダgS6「0」か「1」は終了ビットの前の1個以上連続するビットのジエンダを確認する。長さlS7はビット列に存在するビット数を示す。図3の例はインパルス、即ちrS=0、「1」のジエンダを持った連続したビット即ちgS=1、15ビットの長さをもった、即ちlS=5を示している。
前記実施例は圧縮フォーマット専用で動作するが、本発明は以下のように圧縮することにより生の非圧縮ビットストリングに拡張される。同じジエンダの1個以上連続するビット、即ちラン34をメモリ(図示されていない)に順次読み取り、ラン34と逆のジエンダの1個のビット、即ち終了ビットが読み取られるまで前記連続ビットを計数することにより、それぞれの非圧縮ビットストリング33に対して、各ビットユニット34,35が形成される。ビットストリングの各インパルスが非圧縮から圧縮形式に変換されるように属性5,6,7は作られる。ビット列がインパルス35であり、同じく前記インパルスに対する適切なジエンダがジエンダgS6でありまたビットカウントが長さlS7であることを示すために特性種別rS5に「0」が記憶される。ブール演算が完了したあと、合成ビットユニットはオプショナルに圧縮されていない生のビットストリング33にもどって変換される。
一般に、一対の入力ビットベクトルはスライスAとBを形成し、特性種別rAとrB、ジエンダgAとgBおよび長さlAとlBでそれぞれ構成されており、ここで長さはインパルスの長さであり、また特性種別rAとrBは以下の等式から決定される;
rA=(lA<lB) (1)
rB=(lA<lB) (2)
ここにlAとlBは前記で定義された長さである。スライスAとBの短い方がランとして、長い方がインパルス35としてそれぞれ処理されるべきであることを示すために等式(1)と(2)は[0]か「1」のいずれかに戻り、その戻った値を特性種別rAとrBとして記憶する。長さが等しいことは両方のビットスライスが同じ長さのインパルスであることを示すブール条件〜rA&〜rBによって表わされる。
C.ビットストリングフォーマット間の関係
図4は生のビットストリング、符号化ビットストリングおよび圧縮インパルス(即ちビットユニット)の間の関係を描いたフローチャートである。生のビットストリング(ブロック120)はビットストリング変換器手段121、むしろプロセッサ2によって圧縮インパルス(ブロック122)に変換される。符号化ビットストリング(ブロック123)は復号器手段124、むしろエンコーダ/デコーダ14によって圧縮インパルス(ブロック122)に復号化される。
ブールOR演算125は合成圧縮インパルス(ブロック126)を形成するために複数の圧縮インパルス(ブロック122)について本発明に従って実行される。オプショナルとして、合成圧縮インパルス(ブロック126)はエンコーダ手段127、むしろエンコーダ/デコーダ14によって符号化ビットストリング(ブロック128)に翻訳される。
本発明のデータフローアーキテクチャモデル(以下でさらに述べられる)は、圧縮インパルス122が消費されそして合成圧縮インパルス126が、ブール「OR」演算125を実行する処理要素の2分木配置内に作られる本過程を一般化したものである。データフローアーキテクチャモデルの根ノードはエンコーダ127を使用するノードのみである。データフローアーキテクチャモデルの葉ノードはデコーダ手段124か変換器手段121に必要なノードのみである。データアーキテクチャモデルの内部あるいは中間のノードは圧縮ビットユニットの先入れ先出しバッファ(FIFOs)を使用して通信する。
IV.データフローアーキテクチャモデル
本発明の内部コンピュータ構成はデータフローアーキテクチャに基づいている。データフローは、その機能に必要なデータの有用性によってその機能が決定されるアルゴリズムあるいはマシン(machine)に関係する一般用語である。データフローアルゴリズムは、円弧がデータパスであり、またノードが、入ってくる円弧に到達したデータトークン(data tokens)について実行されるべき演算であるような有向(directed)グラフとして表わされる。
A.処理要素
図5Aは本発明のデータフローアーキテクチャモデル内単一ノードの図である。本発明のノードは処理要素(PE)200と呼ばれる。各PEは2個の入力ビットユニットを受け取り1個の出力ビットユニットを作り出す。本発明のより好ましい実施例では、PEは出力を作り出すために2つの入力のブール「OR」演算を実行するが、他のブール演算あるいは他の処理もまた実行されてもよい。各データフローアーキテクチャモデルの各PEは前記したようにBLUである。入力ビットユニットはA202およびB204と名づけられ、また出力ビットユニットはC206と名づけられる。出力Cは先入れ先出し(FIFO)列(示されていない)に記憶される。入力A202とB204は2個の入カビットストリングかあるいは2個の他のPEからの出力である複数のビットユニットを含んでいる2個のFIFOバッファのいずれかである。
図5Bは本発明のデータフローアーキテクチャモデル内ノードの2分木の図である。示された例では、各PEはPEのネットワークで番号を付された過程となっている。ネットワークは多くの入力ビットストリングから1個の出力ビットストリングを作り出す2分木として構成されている。2分木は、その木の最高レベルで葉ノードを、最低レベルで根ノードを伴う複合レベルを有する。処理要素(PE)1 208はPE1に接続された入力ビットストリングA1 220とB1 212を読み取り、ビットユニットC1 214出力ストリーム(stream)を作り出す。出力ビットユニットC214はFIFO(示されていない)に記憶されそしてPE5 218によってA5 216入力として読みとられる。処理要素2 220はPE2に接続された入力ビットストリングA2 222とB2 224を読み取り、ビットユニットC2 226の出力ストリームを作り出す。出力ビットユニットC2 226は、最初のFIFOとは異ったFIFO(これもまた示されていない)に記憶され、PE5 218によってB5 228入力として読み取られる。ビットユニットC5 230の出力ストリームを作り出すためにA5 216とB5 228により供給される入力FIFOをPE5は読み取る。合成出力ビットストリングC7 232が根ノードPE7 234で生成されるまで、他のPEは同じように入力ビットストリングと出力FIFOに接続される。
番号を付された各過程は同時に生じる。PEの入力FIFOは、そのPEへの入力データを含んでいるので、PEはその出力FIFOに記憶されるべき出力データを作り出すために、入力データの処理を実行する。PEの演算に対する唯一の妨害は入力FIFOのうちのどれか1つが中に何も入っていない時である。ソフトウェアで実行される一つの実施例では、PEが順を追ったやり方で処理され、この最小限の方法が、入力FIFOが空にされる前に出力FIFOが満杯になることを保証しているため、このことは決して起らない。前記最小限の方法を使用すると、結果は常に2つの入力の長さの短い方になることが保証される。このように、一つの入力が短い方の長さのビットストリングの全てを有する場合でさえも、この入力FIFOは出力FIFOが満たされると同時に空にされる。まず葉ノードが、入力ビットストリングが空になるまで、あるいは出力FIFOが満たされるまで、処理される。それからすべての内部ノードが2分木のレベルごとに処理され、それによって、その木の次のレベルへの入力である出力FIFOsをいっぱいに満たす。この処理は2分木の根ノードが処理される、即ちデータが現われるまで続く。
B.データフローアーキテクチャの例
図6は本発明のデータフローアーキテクチャモデルに従うデータフローマシンの図である。データフローマシン250は複数の入力ビットストリングV1 252,V2 254,V3 256,…VN 258を受取り、出力ビットストリングV0 260を作り出す。変換された生のビットストリングか符号化ビットストリングのいずれかから圧縮インパルスを作り出すどのような情報源からの入力でいい。データフローマシンは、従来の方法のように入力ビットストリングの組を繰り返し結合しなければならないということ無しに、出力ビットストリングを作り出す。好ましい実施例では、入力ビットストリングのどのような数「N」も、データフローマシンの入力であり、合成出力ビットストリングが作り出される。
図7は4個の入力ビットストリングをもったデータフローマシンの一例の図である。この簡単な例では、入力ビットストリングV5 262とV6 264はPE8 266への入力であり、また入力ビットストリングV7 268とV8 270はPE9 272への入力である。PE8 266とPE9 272の出力はPE10 274への入力である。PE10 274は合成出力ビットストリングV9 276を作り出す。処理要素PE8 266とPE9 272は葉ノードであり、またPE10 274は根ノードである。この例は、4個の入力ビットストリング、2つのレベル、および3個の処理要素を持った2分木を示している。どのN入力ビットストリングに対してもN−1ノードがあり、2分木はiレベルを有し、ここで2**i−1はその木の中のノード数に等しいということに注意すること。
図8は8個の入力ビットストリングをもったデータフローマシンの一例の図である。この例で入力ビットストリングV10 300とV11 312はPE11 314への入力であり、入力ビットストリングV12 316とV13 318はPE12 320への入力、入力ビットストリングV14 322とV15 324はPE13 326への入力そして入力ビットストリングV16 328とV17 330はPE14 332への入力である。処理要素PE11 314,PE12 320,PE13 326およびPE14 332は2分木の葉ノードである。PE11 314の出力はFIFO F1 334に記憶され、またPE12 320の出力はFIFO F2 336に記憶される。FIFO F1 334とFIFO F2 336のデータはPE15 338への入力となる。同様にPE13 326の出力はFIFO F3 340に記憶されまたPE14 332の出力はFIFO F4 342に記憶される。FIFO F3 340とFIFO F4 342のデータはPE16 344への入力となる。PE15 338とPE16 344は2分木の中間あるいは内部ノードである。PE15 338の出力データはFIFO F5 346に記憶されまたPE16 344の出力データはFIFO F6 348に記憶される。これらのFIFOはPE17 350にデータを供給する。PE17は2分木の根ノードである。PE17 350はFIFO F7 352にデータを出力する。出力ビットストリングV18 354を作るためにデータがFIFO F7 352から取り出される。
図9は6個の入力ビットストリングを持ったデータフローマシンの一例の図である。この例では、入力ビットストリングの数は2の累乗ではない。前の例の様に、入カストリングV18 370とV19 372、およびV20 374とV21 376はそれぞれPE18 378およびPE19 380にどのように接続されるか注意すること。入力ビットストリングV22 382とV23 384はPE20 386に接続される。PE20の出力はFIFO F10 388を通ってPE22 390に結合される。PE18 378とPE19 380からのデータは図に示されているようにPE21 392を通ってPE22 390に流れ込む。PE22 390の出力は出力ビットストリングV24 396として生成するまえにFIFO F12 394に記憶される。
C.データフローアーキテクチャの利点ならびに設計上考慮すべき事項
1個の出力ビットベクトルを作り出すために多くの入力ビットベクトルを処理するデータフローアーキテクチャモデルの使用は、多くの重要な利点を与えるものである。
第一に、ビットベクトルの生成処理を減らし、より高速の演算となる。以前のシステムは中間処理結果を表わすために一時的なビットストリングを生成していた。従って、これらの一時的なビットストリングの記憶の繰返される割り付け(allocation)と、それに続く割り付け解除(deallocation)が必要とされた。これに比べ、本発明は、中間結果が一時的なビットストリングとして出現しないように、あらかじめ決められたメモリ常駐(memory-resident)のFIFOに中間結果をバッファ(buffer)する。
データフローアーキテクチャモデルは、入力ビットストリングの数があらかじめ決められた最大入力数を超える場合に(例えば256個の葉ノードをもった2分木の好ましい実施例として512)一時的なビットストリングを作り出すだけである。512個の入力ビットストリングの各グループはデータフローマシンによって処理されるので、中間結果を保持するために新しい一時的なビットストリングが作り出される。データフローマシンは、すべての入力ビットストリングが処理されるまでこのようにして演算を継続する。そしてそれは、合成出力ビットストリングを作り出すために一時的な中間ビットストリングの結果を集めたものに再びデータフローマシンを通過させる。従ってデータフローモデルは十分に少ない一時的なビットストリングを作り出し、そのため記憶の要求条件は最小となり割り付け/割り付け解除のオーバーヘッド(overhead)は最小化される。
従来のシステムでは多くの入力ビットストリングを含むビットストリング演算を実行するためにメモリ1メガバイト(MB)の分類バッファが割り付けられていた。多くの入力ビットストリングの演算の大多数を扱うためにデータフローマシンを使用することによって、残りの演算に必要な分類バッファの大きさはメモリ512キロバイト(KB)に低減され、実行効果を下げることなく、FIFOにメモリ512KBを供給する。
本発明は、一時的な中間ビットストリングを記憶するのに必要なディスク入力/出力(I/O)動作をほとんど取り除く。一般的に割り付けられたディスクの記憶が一時的な中間ビットストリングの記憶に対する要求を満足しない場合は、外部記憶装置のファイルがその記憶を提供するために拡張される。この拡張はディスクI/O動作如何による。より少ない一時的な中間ビットストリングが必要とされるので、より少ないディスクI/O動作が実行される。
高度に最適化された汎用分類(sorting)アルゴリズム(シエルソート(shell sort)のような)よりも良い、クエリー(query)全体の性能が、ビットストリングの本質的な特性を活用することにより本発明では可能となっている。ほとんどの汎用分類方法は次のような一般的な方法を2つの段階で使用している;1)分類されるファイルに最初のパス(pass)を作り、内部メモリ資源の大きさに関してそれをブロックに分け(スキャン(scan)段階)それからこれらのブロックをメモリ内に分類しそしてディスクにそれらを戻して書き込む;2)さらに数個のパスをファイルに作ることにより分類されたブロックを併合し(merge)、連続的により大きな分類ブロックを作り出していく(併合段階)。
同様の方法が従来のシステムでも使用されていた。まず入力ビットストリングがスキャンされ、それらの内容が分類バッファ内に整数として記憶された。分類バッファは、それが満たされる前に多くの入力ビットストリングがスキャンされるように1MBの大きさであった。分類バッファが満たされると、前記整数値はシエルソートアルゴリズムを使用して分類される。結果の分類表から、中間ビットストリングの結果が作り出された。これらのステップは前記スキャン段階と同等である。すべての入力ビットストリングに関してスキャン段階が完了した後、併合段階が、最終結果のビットストリングが作り出されるまで、組式(pair-wise)ブール演算を行うことにより、中間ビットストリングの結果に関して実行された。
十分に大きな分類バッファで(我々の例では1MB)、このスキャンおよび併合方法は作り出される中間ビットストリングの数を最小にした。アルゴリズムの複雑さがO(n log n)であるので、ここでnは分類バッファ内の要素(element)の数であるが、分類バッファを1MBを超えて大きくすることによりさらに実行の機能を高めることは可能とならなかった。1MBを超えるバッファの大きさに対してnが増加すると、シエルソートアルゴリズムは比例して実行がより長くかかり(n log n)、より少ない中間ビットストリングに併合することにより得られる節約を相殺し、最終的には実行を制限するようになる。nが増加した時、シエルソートアルゴリズムが遅くならなければ、その時は任意に大きな分類バッファが使用され、中間ビットストリングが作り出される必要もない。即ち併合時間はスキャン時間とトレードオフ(trade off)される。分類バッファの大きさ(スキャン段階)と中間ビットストリングの結果を併合するコスト(併合段階)との間で最良のバランスを決定することにより、最適な実行が得られる。
しかしながら、ビットストリングの一つの本質的な特性は、ビットストリングは本来分類されているということである(例えばビット1はビット5に先行し、ビット5はビット8に先行する)。従って入力値の分類はスキャン段階で不要であり、O(n log n)よりも良く動作する、高度に効率的な併合段階の方法が考案されれば、全く削除されてもよい。
本発明はデータフローアーキテクチャでスキャンおよび併合の方法を使用している。データフローマシンは、中間ビットストリングの結果をバッファするFIFOを使用することにより、それによって確実な分類動作を実行するコストを回避して、入力ビットストリングをスキャンし、また本来的に分類されたビットストリングの併合を編成する。この方法は、与えられたメモリ量について(分類バッファ対FIFO)、従来の方法よりも、測定可能なほどの良い性能となる。
本発明の好ましい実施例はGlaser外による米国特許No.5036457号で開示されているような「最小」法を使用しており、その開示内容の全体を参照してここへ組入れられる。最小法は2つのインパルスのうち最短のものを処理要素(PE)に渡す。この方法で、各PEが実行するサイクル数はAおよびBの入力ビットストリング内のインパルス数の合計に等しい。データフローマシンによって処理されるビットストリングの経路長は2分木構成を使用することにより最小となる。データフローマシンを通る1つのビットストリングの経路長は、それが到来するPEの数に等しい。データフローマシンはPEノードの2分木で構成されているので、どの葉ノードから根ノードに至る経路長も常に固定値となる。例えば、16個の葉ノードをもった2分木は、5レベルと5の経路長を有する。
組式に連続的に結合されるPEノードの直線状配置のふるまいは本発明の2分木データ構造と同じく予測できない。とくに根ノードから最も遠く移動させられた大多数のインパルスをもった、即ち最長経路長を持ったビットストリングの時がそうである。データフローマシンに関してのように、各PEのサイクル数は同じに計算されるが、直線状配置については、PEへの2つの入力のうちの1つが前のPEからの出力となる。その後に続くPEのサイクル数は、その前のPEのサイクル数によって効果的に合成される。最も少ないインパルスから最も多いインパルスまでの入力の分類はこの計算上の問題を緩和するのを助けるが、最低限に有益であることを証明している。この直線状のアプローチの性能は16個の入力を有する最大16個のノードで最高となるが、これに対して本発明のデータフローマシンは少なくとも同時に512個のビットストリングを処理する。
全体の性能利得が、データフローアーキテクチャの本来の特性を活用することにより本発明でまた得られる。データフローマシンの好ましい実施例は最小法を使用しているので、入力FIFOが空になる前に出力FIFOが満杯になることは確かである。それ故に空の入力FIFOに対する試験は必要とされない。
PEへの入力のうちの1つが「エンドオブインプット」(EOV)状態に達すると(すべてのビットユニットが処理されたことを意味している)、他の入力が出力ビットユニットとして修正されないで単にそのPEに渡される。本発明は、出力経路Cに、渡されるべき入力データをあらかじめロードし、そしてPEによるさらに続くどの独立した処理も迂回することにより、この特性を利用する。この最適化は入力を「分路(shunting)」と呼ばれる。データフローマシンは、不必要な処理ステップを避けるためにPEのプログラムで特性の処理径路を築くことによって、PEの連続的な演算サイクルに他の入力ビットユニットを渡し続ける。
本発明の好ましい実施例でのPEは入力データのブール「OR」演算のみを処理する。この事実のために、出力Cを組立てる際にある条件に基づくことができる。Cのランおよびジエンダは、他の演算数がジエンダのものでない限り、短い方の入力演算数のランおよびジエンダに等しく、この場合ランビットは1およびジエンダビットは1である。このことは結果Cの組み立てを簡単にしている。
ブール「OR」演算のみが実行されるので、PEを通りぬけるビットユニットは通常インパルスである。通常インパルスであるビットユニットを図1の標準プロセッサ25を使用して結合しようと試みることは結合が不能か、必要でないのでPEサイクルを浪費し、従ってデータフローマシンの性能上のボトルネックとして働く。性能を改善するために、根PEのFIFOが出力ビットストリングを作り出すために読み取られるまで、ビットユニットの結合が遅らせられる。
V.処理アーキテクチャ
図1のシステムで使用されるコンピュータプログラムおよび本発明に基づいて複数のビットストリングにブール「OR」演算を実行するためのコンピュータプログラムによって作り出される過程の構成が図10〜26の図に示される。
一般に、データフロー処理は次のように進行する。データ構造が初期化されたあと、2分木のすべての葉ノードが処理される。この処理はA or Bフラグ(AoB)と呼ばれるブールフラグを使用する。AoBフラグは、PEに接続されている現在の入力ビットストリングがA側入力かB側入力のどちらかを示すために切替えられまたは切り戻される。葉ノードの処理は2つの入力ごとのPEの創出を含んでいる。ソフトウェアの実行では、PEの創出はPEにデータ構造を例示(instantiate)することによって達成される。葉ノードの次の処理は、入力ビットストリングの識別子をAoBでなければ現在のPEのA側に、AoBならば現在のPEのB側に設定することにより、入力ビットストリングをPEに結びつけることを含んでいる。AoBフラグはそれから各入力の結合のあと切替えられる。この処理はすべての葉ノードに対して実行される。
入力ビットストリングの奇数があると、最後の入力ビットストリングが処理されたのち、最後の葉PEのA側VIDは、A or Bが真(true)ならこのPEから切り離される。2分木の残りのノードがそれから接続される。接続は、図5Bのように2分木を形成するために内部PEの入力FIFOとして各出力FIFOを連結することにより行われる。各PEはAおよびB入力ビットユニットを読み取ることにより処理され、入力データのブール「OR」演算を実行し、そしてCビットユニットキュー(queue)があふれるまで、あるいはPEが入力終了の状態になるまで、Cビットユニットキューに出力データを記憶する。2分木の根PEのCビットユニットキューを読み取り、出力ビットストリングを書き込むことによって、合成ビットストリングが作り出される。出力終了状態が根PEに到達した時に「終了(done)」状態が呼出しプログラムに返される。
図10は本発明の状態遷移図である。スタート状態400のあとに、弧404を経由してAをつなぐ状態402にデータフローマシンは移る。Aをつなぐ状態にある間、データフローマシンは「A」側入力をPEにつなぐ。さらに入力ビットストリングが利用可能なら、入力ありの弧406がデータフローマシンをBをつなぐ状態408に移す。Bをつなぐ状態にある間、データフローマシンは「B」側入力をPEにつなぐ。さらに入力ビットストリングがまだ利用可能なら、インプットありの弧410がAをつなぐ状態402に戻って続けられる。Aをつなぐ状態402の間、もはや入力ビットストリングが利用可能でない場合には、データフローマシンは入力なしの弧414を経由して切り離し状態412に移る。それからデータフローマシンはつながれていた奇数番号を付された入力ビットストリングをPEから切り離す。さらに進んだ処理が弧418を経由して木の接続状態416で続く。Bをつなぐ状態408の間、もはや入力ビットストリングが利用可能でないかあるいは2分木の葉の数があらかじめ決められた最大値よりも大きければ、データフローマシンは入力なし0r#Leaf>Leafmaxの弧420を経由して木の接続状態416に移る。
木の接続状態416の間、データフローマシンはすべてのPEを2分木構成に接続する。弧422を経由してPEの処理状態424で処理が続く。この状態の間、データフローマシンは選択されたPEを処理する。処理されるPEの数が、PEのあらかじめ決められた最大値よりも少ない場合は、PE<=PEMAXの弧426はPEの処理状態424に戻って続けられる。2分木のすべてのPEが処理された場合、PE>PEMAXの弧428が出力の生成状態430に続けられる。出力の生成状態430で、データフローマシンはPEの2分木から出力ビットストリングを生成する。出力終了が根PEに届けられていなければ、データフローマシンは継続の弧432を経由してPEの処理状態424に戻って移る。そうでなければ、データフローマシンは弧436を経由して終了状態434に移る。
図11A〜11Cは本発明の処理中に使用されるデータ構造の図である。図11Aは処理要素(PE)444の構成要素を示している。PEは本発明で使用される主要データ構造である。PEはコンピュータのハードウェアあるいはソフトウェアのいずれでも実行されることに注意のこと。コンピュータハードウェアとして実行される場合、データ構造あるいはポインタは使用されない。コンピュータソフトウェアとして実行される場合、PEはデータ構造とポインタで表わされる。以下は、コンピュータソフトウェアで実行されるPEの議論である。PE 444は与えられた入力ビットストリングの組に関するデータフローアーキテクチャモデルの中でそれぞれ論理PEとして生成されるかあるいは具体例をあげて示される。PE 444は、A VID 446ベクトル識別子(ID)、B VID 448ベクトルID、第1のビットユニットキューへのポインタA FIFO 450、第2のビットユニットキューへのポインタB FIFO 452、ビットユニットA454とB456、ビットユニットキューC456およびエンドオブベクトル(EOV)カウンタで構成されている。EOVカウンタは入力終了状態がビットユニットに届けられた時を示す。A VID 446とB VID 448のフィールド(field)は、図5Aに示されるPEモデルの入力A202と入力B204それぞれに対する処理のきっかけを識別しかつ提供する。AおよびB入力は葉ノードのビットユニットかあるいは、内部または中間ノードのビットユニットキューのどちらかである。ビットユニットとビットユニットキューは図11Bと図11Cにそれぞれ記述されている。ある特定のPEへのビットストリング入力が2分木への入力ビットストリングならば(即ちこのPEは葉ノードである)、ビットユニットA454とB456はPEへの入力を意味する。ある特定のPEへのビットストリング入力が他のPEからの出力ならば(即ちこのPEは葉ノードではない)、A FIFO 450とB FIFO 452によって参照されるビットユニットキューはPEへの入力を意味する。A側とB側のビットユニットキューは2分木で「高位の(higher)」PEにより生成される。ビットユニットキューC458は図5Aに示されるようにPEモデルの出力経路C206を意味する。EOVの値460はPEの入力ビットストリングが入力FIFOsで入力データの終了を意味する。
ビットユニット462の要素が図11Bに示される。Vブールフラッグ464は入力終了状態を示す。V464がオンなら、ビットユニットストリームは入力終了状態にあり、そうでなければ、ビットユニットは入力終了状態にない。入力終了状態にある場合は、もはや入力データはPEで利用可能ではない。Rブールフラッグ466は現在のビットユニットがランかインパルスかのどちらであるかを示す。Rがオンなら、ビットユニットはランであり、そうでなければビットユニットはインパルスである。Gブールフラッグ468は現在のビットユニットのジエンダを示す。G468がオンならビットユニットのジエンダは1であり、そうでなければビットユニットのジエンダは0である。長さのフィールド(LEN)470は32ビットか64ビットいずれかのように符号のつかない整数値でビットユニットの長さを指定する。
ビットユニットキュー472の構成要素が図11Cに示されている。ソフトウェアで実行される場合、環状バッファ構成要素472は先入れ先出し(FIFO)の方法でアクセスされるビットユニットのリストである。FIFOのビットユニット数はあらかじめ決められた最大値に設定される(即ち、FIFOの大きさが知られている)。先頭(head)フィールド476はFIFOの先頭エレメント(element)の指標である。末尾(tail)フィールド478はFIFOの末尾エレメントの指標である。カウント(count)フィールド480は現在FIFOにあるビットユニットエレメントの数である。
図10の木の接続状態416にある間、データフローマシンは以下のようにPEのデータ構造を初期化する。各PEが2分木のノードに割り当てられると、A FIFO 450とB FIFO 452の指標は0に設定され、A454,B456およびC458は空いており、そしてEOV 460は偽(false)に設定される。
図12は本発明のソフトウェア設計の呼び出しレベルチャートである。本発明のソフトウェア実施例は、他のプログラム言語が使用されても良いが、図1のプロセッサ2で実行される「C」言語プログラムとして実現されている。好ましい実施例では、この設計は全体のシステム性能を上げるためにコンピュータハードウェアで実現される。図12はこのプログラムの主要動作を示している。データフローマシンが作り出されそしてビットベクトルのN−ウェイセットの処理500の機能を呼び出すことにより処理が達成される。この実施例で、ビットストリングはビットベクトルとして表わされる。ビットベクトルは連続したビットストリングの符号化形式であることを思い出すこと。この機能は図示されているように他の処理を呼び出す。図12に示されたそれぞれの処理は図13〜26で以下に議論される。出力ビットベクトルの処理502の過程は、ビットベクトルのN−ウェイセットの処理500の機能を再帰的(recursively)に呼び出す。
図13はビットベクトルのN−ウェイ処理の機能に関する処理ステップのフローチャートである。この機能は与えられた入力ビットベクトルの組についてブール「OR」演算を実行し、合成出力ビットベクトルを戻す。エントリー(entry)600ののち、入力ビットベクトルのPEへのつなぎ602の過程が呼び出され入力ビットセットの組を処理要素(PE)に接続する。この過程は図14に関して以下にさらに詳細に述べられる。一つのデータフローマシンで処理される入力ビットストリングの数は実行の仕方に依存する。好ましい実施例ではデータフローマシンで処理される入力ビットベクトルの数は512であるが、図1のプロセッサ2の処理能力とメモリ能力に依って他の限界値が設定されてもよい。本発明は、どの入力が現在のPEに接続されているか(即ちA側かB側のいずれか)を追跡し続けるためにA or Bフラグ(AoB)と呼ばれるブールフラグを使用する。AoBフラグは処理が進むに従って切替えられる。すべての入力ビットベクトルが葉ノードにつながれたあと、AoBフラグがオン(真)なら、データフローマシンには奇数個の入力ビットベクトルがあったことになる。余分な入力ビットベクトルは他の入力ビットベクトルとは別に処理されなければならない。従ってテストステップ604でA or Bフラグ(AoB)が、それが真である−入力ビットベクトルが最後のPEで唯一つの入力であることを示している−かどうかを確認するために点検される。A or Bフラグが真に設定されていれば、YESの経路606がステップ608まで取られ、ここでA側入力ベクトルが最後のPEから切り離され、それからステップ610に至りここで入力ビットベクトルは将来の処理のために一時的なデータ構造にセーブ(save)される。
A or Bフラグが設定されなければ、このデータフローマシンには偶数個の入力ビットベクトルがあることになる。従ってNOの経路612がステップ614まで取られる。このステップでデータフローマシンの2分木は、すべてのPEノードを2分木形式で一緒に連結することにより接続される。この過程は図15に関して以下にさらに詳細に述べられる。次に、ステップ616でつながれた入力ビットベクトルが、入力ビットベクトルから入力データを読みとりデータフローマシンでデータを「プッシング(pushing)」することにより処理される。この過程は図16に関してさらに詳細に述べられる。現在のクエリーの一部としてテストステップ618で入力があれば、YESの経路620がステップ602まで戻して取られ、ここでインプットビットベクトルがさらに再初期化されたPEの組に接続され、それによって、一つのデータフローマシンによって処理されることのできる入力ビットベクトルのあらかじめ決められた最大値よりもさらに多くを必要とするクエリーを処理する。もしそうでなければNOの経路622がステップ502まで取られ、そこでデータフローマシンからの出力ベクトルが、合成ビットベクトルを作るために処理される。この過程は図26に関してさらに詳細に以下に述べられる。処理は出口(Exit)626で終了する。
図14は入力ビットベクトルをPEにつなぐ処理ステップのフローチャートである。エントリー628のあと、AoBフラグが真に設定されそしてカウント(Count)と呼ばれるカウンタがステップ630で0に設定される。カウントはデータフローマシンの葉PEの数を表している。AoBフラグはPEのA側かB側を示す。ステップ632で、次の入力ビットベクトル(最初に第1番目のビットベクトル)のベクトルID(VID)が現在の入力データの組から得られる。「排他的論理和(XOR)」は、AoBの値を切替える他の入力として1とAoBで実行される。そしてテストステップ636でAoBフラグが偽(0)なら、NOの経路638がステップ640まで取られる。このステップで、カウントはデータフローマシンで付加されたPEに進むためにインクリメント(increment)される。次に、ステップ642で処理されつつある現在の入力ビットベクトルのVIDは、現在のPEのA側入力のVID(A VID 446)を現在の入力ビットベクトルに設定することにより、この現在のPE(PEの配列のカウント変数により選択される)のA側につながれる。テストステップ644で処理が続く。入力ビットベクトルがまだなお処理されるなら、YESの経路が、その次の入力ビットベクトルのVIDを得るために、図に示されているようにステップ632まで戻って取られる。
テストステップ636でAoBフラグが真なら、YESの経路648がステップ650まで取られる。これはB側入力ビットベクトルがその時つながれるべきであることを意味している。ステップ650で処理されつつある現在の入力ビットベクトルのVIDは、現在PEのB側入力のVID(B VID 448)を現在の入力ビットベクトルのVIDに設定することにより、このPE(PEの配列のカウント変数により選択される)のB側入力につながれる。二つの入力ビットベクトルがこの時現在のPEに接続される。テストステップ652で葉PEの最大値が達せられたかを確認するために点検がなされる。最大値が達せられていれば、YESの経路654が取られこの過程は出口656で終わる。AoBフラグとカウントは呼び出し過程に戻される。カウントは2分木構造の葉ノードの数を保持する。葉PEの最大値が達成されていなければ、NOの経路658が、入力ビットベクトルがさらに処理される必要があるかどうかを確認するために、テストステップ644まで取られる。処理する入力ビットベクトルがもうなければ、NOの経路660が出口656まで取られる。そうでなければ、追加の入力ビットベクトルの処理がステップ632で続く。
図15はPEノードの2分木を接続する処理ステップのフローチャートである。エントリー662で、リミット(Limit)変数が、ステップ664の間カウント変数に記憶されたPEの数の2倍に設定される。リミットは1プラス2分木のPEの総数である。データフローマシンの2分木を表わすPEデータ構造はまず初期化されなければならない。ステップ666で、ループカウンタIが1に設定される。次に、ステップ668で、Iにより選択された現在のPEデータ構造のフィールドが、必要な場合、0と偽に設定することにより初期化される(A VIDとB VIDフィールドを除いて、葉リーフのA VIDとB VIDフィールドが図14で述べられた入力ビットベクトルのPEへのつなぎの過程に設定される)。ループカウンタIがステップ670でインクリメントされる。テストステップ672で、Iがリミットより小さければ、YESの経路674が次のPEを初期化するためにステップ668まで取られる。そうでなければ、すべてのPEが初期化されていれば、NOの経路676が2分木の内部ノードの初期化のためにステップ678まで取られる。このステップで動作変数Nは1に設定され、第1のPEに示す。ステップ680で、ループカウンタIがカウントプラス1に設定される。ループカウンタIはその時2分木の第1の内部(即ち葉でない)ノードを示す。ステップ682で、第1の内部ノードが第1の葉ノードの出力に設定される。Iによって選択されたPEのA FIFO 450をNによって選択されたPEのC458フィールドに設定することにより、これは達成される。動作変数Nはステップ684でインクリメントされる。動作変数Nはこの時第2の葉ノードを参照する。次に、ステップ686で、第1の内部ノードのB側入力が第2の葉ノードの出力に設定される。これは、Iにより選択されたPEのB FIFO 452を、Nにより選択されたPEのC458フィールドに設定することにより達成される。ステップ688でIは次の内部ノードに示すためにインクリメントされる。テストステップ690で、Iがリミットより小さいかを確認するために点検が行われる。即ち、2分木のすべての内部ノードが処理されているかどうか確認される。Iがリミットより小さいなら、YESの経路が、2分木の次の内部ノードを接続するために、ステップ682まで取られる。このようにしてすべての内部ノードがデータフローマシンを表わす2分木を形成するように接続される。その木の根ノードが初期化されている時は、NOの経路694が出口696まで取られる。
図16はつながれた入力ビットベクトルの組を処理するステップのフローチャートである。エントリー700のあと、出力ビットベクトルはステップ702で初期化される。出力ビットベクトルは根ノードのFIFOからの出力データを記憶する。次にPEの処理704がデータフローアプローチを利用して2分木に結びつけられたビットベクトルを処理するために呼び出される。この過程は図17に関して以下でさらに詳細に述べられる。2分木が処理されたあと、出力ビットベクトルが、出力ビットベクトルの生成706の過程を呼び出すことにより生成される。この過程は図25に関して以下でさらに詳細に述べられる。テストステップ708で、出力データ終了が達せられていないなら、C FIFO 458はまだ入力終了状態(EOV C)ではない。従って、NOの経路710がさらに続くPEを処理するためにステップ704まで戻して取られる。EOV Cの状態が達せられたら、YESの経路712がステップ714まで取られる。このステップで、出力ビットベクトルは閉鎖され、このことは2分木の根ノードによりこれ以上の書き込みが止められることを意味している。ステップ716で、入力ビットベクトルは閉鎖され、これ以上の入力データが処理されるのを中止する。それから処理はステップ718で終る。
図17はPEを処理するステップのフローチャートである。エントリー720のあと、指標Iはステップ722で1に設定される。これは、その木の第1の葉PEでPEの処理を開始させる。ステップ724で、処理されるべき現在のPEのポインタが1に指定されてPEに設定される。次に、テストステップ726で、PEのEOVフラグ420を問合わせることによりPEがEOV状態(即ちこのPEにこれ以上の入力がない)かを確認するために点検が行われる。このPEがEOV状態にあれば、YESの経路730がステップ732まで取られ、ここで指標Iはインクリメントされる。このPEがEOV状態になければ、NOの経路734がテストステップ736まで取られる。PEの出力FIFO(C458)がいっぱいなら、YESの経路738がステップ732まで取られ、ここで指標Iがインクリメントされる。そうでなければ、NOの経路740がステップ742まで取られる。このステップで、PEフィールドと変数の局所化(localize)の過程が、PEに局所(local)データ構造をそして次の処理に他の変数を準備するために呼び出される。この過程は図18A〜18Cに関して以下でさらに詳細に述べられる。
ステップ744で、EOVまたはFIFO満杯までPEの処理が、両方の入力がEOV状態となるまで、あるいは出力FIFOが満杯になるまで現在のPEを処理するために呼び出される。この過程は図19に関して以下でさらに詳細に述べられる。次に、ステップ746で、局所値をPEフィールドに戻す過程が局所データを現在のPEのPEデータ構造に戻して記憶するために呼び出される。この過程は図24に関して以下でさらに詳細に述べられる。指標Iはステップ732で処理されるべき次のPEに示すためにインクリメントされる。テストステップ748で、Iがカウントの2倍よりも小さければ(即ちPEの最大値マイナス1)、YESの経路750が、その木で次のPEの処理を開始するためにステップ724まで戻して取られる。そうでなければ、NOの経路752が取られ、処理は出口756で終了する。
図18A〜18Cは、PEの処理で使用されるPEデータ構造のフィールドおよび他の動作変数を局所化する処理ステップのフローチャートである。エントリー758のあと、出力FIFO Cの文脈(context)(先頭指標476、末尾指標478、およびカウントフィールド480)が、ステップ760でCの内容を局所変数に記憶することにより局所化される。テストステップ762で、現在のPEが葉ノードなら、YESの経路764がステップ766まで取られ、ここで入力ベクトル動作変数の文脈がインプット入力ベクトルから設定される。そうでなければ現在のPEはその木の内部ノードであり、NOの経路768がステップ770まで続けられる。このステップで入力ベクトル動作変数は入力FIFOから設定される。処理はいずれの場合でもステップ772で続く。出力データ構造がこの時初期化されなければならない。ステップ722で、C FIFOが現在のPEのAビットユニットに設定される。次に、ステップ744で、Aの長さ(length)(LEN A)をC FIFOの長さに設定し、そしてAのV,RおよびGフラグをそれぞれCに記憶されているV,RおよびGの値に設定することにより、Aの局所変数(local variable)は指定された値となる。次に、ステップ778で、Bの長さ(LEN B)をC FIFOの長さに設定し、そしてBのV,RおよびGフラグを、Cにそれぞれ記憶されているV,RおよびGの値に設定することにより、Bの局所変数は指定された値となる。
ステップ780で、Aの入力終了(EOV)が、Vビットを引き出すことによりAのVフラグに設定される。EOV Aがテストステップ782で設定されると、YESの経路784がステップ786まで取られる。Aの長さ(LEN A)は1に設定される。このことは入力データのB側がPEに渡されて出力FIFOに至るようにさせる。もしそうでなければNOの経路788が図18Cのステップ792まで結合子Bを介して取られる。EOVが設定されると、ステップ786のあと、EOVイベント(event)数を数える変数(EOVEVENTS)がステップ790でインクリメントされる。処理は結合子Bを経由して図18Cに続く。
ステップ792で、Bに関する入力終了(EOV)変数がVビットを引き出すことによりBのVフラグに設定される。EOV Bがテストステップ794で設定されると、YESの経路796がステップ798まで取られる。Bの長さ(LEN B)は1に設定される。これは入力データのA側がPEに渡されて出力FIFOに至るようにさせる。EOVイベント数を数える変数(EOVEVENTS)がステップ800でインクリメントされる。EOV Bがテストセット794で設定されなければ、NOの経路802が取られ、処理は出口804を経由して終了する。
図19は、両方の入力がEOV状態になるまであるいは出力FIFOが満杯となるまでPEによって実行される処理ステップのフローチャートである。エントリーステップ806のあと、EOVイベント数がテストステップ808でテストされる。EOVEVENTSが1より大きければ、このPEではこれ以上の処理は必要なく、従ってYESの経路810が出口812まで取られる。もしそうでなければ、EOVEVENTSは1より小さいか、1に等しくなるから、NOの経路814がステップ816まで取られる。このステップで演算の準備の過程が、A側とB側の入力データを得るために呼び出される。この過程は、図20A〜20Cに関して以下でさらに詳細に述べられる。テストステップ818で、EOVEVENTSが0ならば、処理されるべき入力データが有ることになる。従って、YESの経路820がステップ822に続き、ここで演算の過程が結果のベクトルCを計算するために呼び出される。このプロセスは図23に関して以下でさらに詳細に述べられる。
結果Cは演算の準備の論理により「あらかじめロード(load)される」であることに注意すること。3つの条件のうちの1つがCの内容を決定する。第1の条件は、入力ビットユニットAがEOV状態にある時で、この時入力ビットユニットBが出力として結果のビットユニットCに渡される。第2の条件は、入力ビットユニットBがEOV状態にある時で、この時入力ビットユニットAが出力として結果のビットユニットCに渡される。第3の条件は両方の入力がEOV状態にある時で、この時EOVの代表(representation)が結果のビットユニットCとして渡される。両方の入力がどちらもEOV状態にない時、Cにあらかじめロードされた値は使用されない。
EOVEVENTSがテストステップ818で0より大きかったら、その時NOの経路826がステップ824まで取られる。結果のCはステップ824で出力FIFOに置かれる。YESの経路820が取られた場合、ビットユニットAかビットユニットBの短い方の長さが出力としてPEを通って結果のCに流れ込む。結果のCのランとジエンダは演算の過程により決定される。次に、テストステップ828で、出力FIFOが満杯ならば、YESの経路830が続けられそして処理が出口812で終了する。もしそうでなければ、処理はNOの経路832を経由してテストステップ808まで続く。
図20A〜20Bは演算の準備過程の処理ステップのフローチャートである。エントリー834のあと、Aの長さ(LEN A)がテストステップ836で0に等しければ、YESの経路838がテストステップ840まで取られる。もしそうでなければ、処理は結合子Aを経由して図20Bのテストステップ842で続く。Aの長さが0で現在のPEがテストステップ840で葉ノードであることが確認されると、YESの経路がステップ848まで取られ、もしそうでなければNOの経路850がステップ822まで取られる。ステップ848で、インプットビットストリングAからのビットユニットが得られ葉PEの出力変数Cにロードされる。ステップ852で、入力FIFO Aからのビットユニットが得られ内部PEの出力変数Cにロードされる。次にステップ854で、Aの準備の過程がA側入力データを処理するために呼び出される。この過程は図21に関して以下でさらに詳細に述べられる。演算の準備の処理は図20Bのテストステップ842で続く。
テストステップ842で、Bの長さ(LEN B)が0に等しければ、YESの経路856がテストステップ858まで取られる。もしそうでなければ、処理はテストステップ860で続く。Bの長さが0で、テストステップ858で現在のPEが葉ノードであることが確認された時は、YESの経路がステップ864まで取られ、もしそうでなければ、NOの経路866がステップ868まで取られる。ステップ864で、入力ビットベクトルBからのビットユニットが得られ葉PEの出力変数Cにロードされる。ステップ868で、入力FIFO Bからのビットユニットが得られ、内部PEの出力変数Cにロードされる。次に、ステップ870で、Bの準備の過程がB側入力データを処理するために呼び出される。この過程は図22に関して以下でさらに詳細に述べられる。それから処理は出口872を経由して終了する。
Bの長さがテストステップ842で0でないならば、処理はテストステップ860で続く。このステップでEDV Aフラグが、A入力ビットユニットがベクトル終了状態であるかどうか確認するために点検される。もしそうなら、YESの経路874がステップ876まで取られる。Bの長さ(LEN B)が0に設定されそして処理が出口872で終了する。もしそうでなければ、処理はNOの経路875をたどり出口872で終了する。
図21はA側入力を準備するステップのフローチャートである。エントリー880のあと、局所変数VRG Aがステップ882で、CのV(入力終了)、R(ラン)、およひG(ジエンダ)フラグにロードされる。Aの入力終了フラグ(EOV A)がステップ884で局所変数VRG Aから引き出される。次に、テストステップ886で、Aが入力終了状態にあるかどうか確認するためにテストされる。もしそうならYESの経路888がステップ890まで取られ、ここでEOVEVENTSカウンタが、Aは入力終了であることを示すためにインクリメントされる。そうでなければ、NOの経路892がテストステップ894まで取られる。テストステップ894で、Bの入力終了フラグ(EOV B)が、このPEのB側入力に処理すべきデータがもう無いことを確認するために点検される。もしそうなら、YESの経路が出口898まで取られる。EOV Bが処理すべきデータがまだ残されていることを示せば、NOの経路900がステップ902まで取られる。このステップで、長さA(LEN A)の局所変数がCの長さに設定される。EOV Aが真でないなら、その時NOの経路906が出口898まで取られ、そしてA処理の準備は終了する。そうでなければYESの経路がステップ910まで取られ、ここでCにある長さはB側入力の長さ(LEN B)に設定される。次に、ステップ912で、CのV,RおよびGフラグがVRG B局所変数に設定される。A側入力の長さ(LEN A)はステップ914で1に設定される。これら3つのステップはB側データがPEに渡される原因となる。Aの準備の処理は出口898で終了する。
図22はB側入力を準備するステップのフローチャートである。B側入力を処理するステップは、A側入力を処理する図21で述べられたステップと非常に似ていることに注意すること。エントリー916のあと、局所変数VRG Bがステップ920でCのV(入力終了)、R(ラン)、およびG(ジエンダ)フラグにロードされる。Bの入力終了フラグ(EOV B)がステップ922で局所変数VRG Bから引き出される。次に、Bが入力終了状態にあるかどうか確認するためにテストステップ924でEOV Bがテストされる。もしそうなら、YESの経路926がステップ930まで取られるが、ここでEOVEVENTSカウンタが、入力の1つが入力終了であることを示すために、インクリメントされる。そうでなければ、NOの経路932がテストステップ934まで取られる。テストステップ934で、このPEのA側入力で処理すべきデータがもう無いかを確認するために、Aの入力終了フラグ(EOV A)が点検される。もしそうなら、YESの経路936が出口938まで取られる。EOV Aが処理すべきデータがまだ残されていることを示せば、NOの経路940がステップ942まで取られる。このステップで、Bの長さ(LEN B)の局所変数がCの長さに設定される。EOV Bが入力終了でないなら、NOの経路946が出口938まで取られそしてBの準備の処理が終了する。もしそうでないならYESの経路948がステップ950まで取られ、ここでCにある長さはA側入力の長さ(LEN A)に設定される。次に、ステップ952でCのV,RおよびGフラグはVRG A局所変数に設定される。B側入力の長さ(LEN B)はステップ954で1に設定される。これら3つのステップはA側データがPEに渡される原因となる。最後に、Aの長さ(LEN A)が0に設定されそしてAの準備の処理が出口938で終了する。
図23は、現在の処理要素のA側入力とB側入力のブール「OR」演算を実行するステップのフローチャートである。エントリー958のあと、A側入力の長さ(LEN A)がテストステップ960でB側入力の長さ(LEN B)と比較される。
LEN AがLEN Bより小さければ、経路962がステップ964まで取られ、ここでCにある長さのフィールドがLEN Aに設定される。次にステップ966でLEN AがLEN Bから差し引かれる。ステップ967で、LEN Aは0に設定される。テストステップ968で、ジエンダフラグがVRG B局所変数から差し引かれそして点検される。関数G(x)がxのジエンダビットを引き出す。B側入力がジエンダビットの組を持っているなら、YESの経路970がステップ972まで取られ、ここでCのVRGフィールドがジエンダ1のランを示すために設定される。そうでなければB側はジエンダビットの組を持たないので、NOの経路974がステップ976まで取られる。このステップで、CのVRGフィールドはVRG A局所変数の内容に設定される。処理は出口978を経由して終了する。
テストステップ960に戻って調べ、LEN AがLEN Bより大きければ、経路980がステップ982まで取られ、ここでCの長さフィールドが0に設定される。次に、ステップ984で、LEN BがLEN Aから差し引かれる。ステップ985で、LEN Bが0に設定される。テストステップ986で、ジエンダフラグがVRG A局所変数から引き出されそして点検される。A側入力がジエンダビットの組を持っていれば、YESの経路988がステップ990まで取られ、ここでCのVRGフィールドがジエンダ1のランを示すために設定される。もしそうでなければ、A側はジエンダビットの組を持たないので、NOの経路がステップ994まで取られる。このステップで、CのVRGフィールドはVRG B局所変数の内容に設定される。処理は出口978を経由して終了する。
テストステップ960に戻って調べ、LEN AがLEN Bに等しければ、経路996がステップ998まで取られ、ここでCの長さフィールドがLEN Bに設定される。ステップ1000で、局所変数LEN Aが0に設定される。ステップ1001で、局所変数LEN Bが0に設定される。ステップ1002で、CのVRGフィールドが、表Iで以下に述べられるように関数Sに応じてVRG AとVRG Bのラン/ジエンダの計算を示すために設定される。
Figure 0004267707
A側入力とB側入力が長さで等しい場合、結果Cのランおよびジエンダビット(C.VRGに記憶されているように)は、表に示されているようにA(G(VRG A))のジエンダとB(G(VRG B))の2つの変数の関数である。示されているラン/ジエンダ計算表はGlaser外による米国特許No.5036457で述べられているように最小法(miima method)により与えられるランとジエンダの計算表と合っていることに注意すること。しかしながら、データフローマシンではブール「OR」演算のみが使用される。
図24はPEフィールドに局所変数の内容を再記憶するステップのフローチャートである。エントリー1004のあと、出力FIFOの文脈(先頭指標476、末尾指標478およびカウントフィールド480)がステップ1006で局所変数を使用して設定される。テストステップ1008で現在のPEが葉ノードなら、YESの経路1010がステップ1012まで取られる。もしそうでなければ、現在のPEは内部ノードであり、そしてNOの経路1014がステップ1016まで取られ、ここで入力FIFOの文脈(先頭指標476、末尾指標478、およびカウントフィールド438)が局所変数を使用して設定される。次に、ステップ1012で、Cの長さがLEN Aに設定されまたCのV,RおよびGフラグがVRG Aに設定される。それからCの値がステップ1014で現在のPEのB側にロードされる。処理は出口1020で終了する。
図25は出力ビットベクトルを生成するステップのフローチャートである。エントリー1022のあと、根PEはステップ1024で処理された最後のPEに設定される。このPEはカウントに2−1を乗じた式により指標化(index)される。次に、ステップ1026で、出力FIFOの文脈(先頭指標476、末尾指標478およびカウントフィールド480)が根PEに設定される。テストステップ1028で、出力FIFOが空いていれば、経路1030がステップ1032まで取られる。このステップで出力FIFOの文脈は空きに設定される。Cの入力終了フラグ(EOV C)がステップ1034で局所データ構造Cから引き出されたVフラグの現在値に設定される。変数EOV Cは入力終了状態が出力ビットベクトルに届けられた時を示す。出力ビットベクトルの生成処理がEOV Cの値をステップ1036で呼び出し先(caller)に戻すことにより終了する。テストステップ1028で出力FIFOが空いてなければ、NOの経路1038がステップ1040まで取られる。このステップで、出力FIFOからのビットユニットはCに記憶される。次に、Cのビットユニットはステップ1042で出力ベクトルに記憶される。出力FIFOにさらに出力データがないかを点検するために処理がテストステップ1028に戻って続く。
図26は出力ビットベクトルを処理するステップのフローチャートである。入力ビットユニットの数が、1つのデータフローマシンで1度に処理されるあらかじめ決められた最大入力数よりも大きい場合はデータフローマシンの別の例により余分の入力ビットが処理されなければならないということに注意すること。エントリー1044のあと、テストステップ1046でAoBフラグが点検される。AoBが真なら(即ち1に設定されている)、奇数の入力ビットベクトルがデータフローマシンへの入力である。従って、YESの経路がステップ1050まで取られ、ここで一時的なベクトルが出力ベクトルの組に加えられる。この一時的なベクトルは奇数の入力ビットベクトルを表わしている。AoBフラグが偽ならば、NOの経路1052がたどられる。テストステップ1054で、出力ベクトルが2より大きければ、これらのベクトルについてさらに処理が実行される。従って、経路1056がたどられ、再帰的(recursive)呼出しがビットベクトルのN−ウェイ(way)処理機能に対してなされ、出力ベクトルの現在の組に入力データとして入る。出力ベクトルの数がテストステップ1054で1に等しければ、入力ビットベクトルの完全な組は、一つの出力ビットベクトルとなるように処理される。従って、経路1060が取られ処理が出口1062を経由して終了する。もしそうでなければ、出力ベクトルの数は2に等しい。この場合、経路1064がステップ1066までたどられ、ここで一つの出力ビットベクトルを作り出すために残りの2つのベクトルにブール「OR」演算が実行される。それから処理が出口1062で終了する。
本発明が現在考えられる最善の方法で述べられており、またすべて当業者の能力と熟練の範囲内で、かつこれ以上の発明活動を行うことなく、本発明がいろいろな変更、動作モードおよび実施態様が可能であることは明らかである。従って、特許証によって保護されるべきと意図されることが付け加えられた請求項で述べられる。

Claims (40)

  1. データフローアーキテクチャにおける複数の処理要素を有するシステムであって、各葉ノード処理要素は入力データとして2つのビットストリングを引き受け2つの入力ビットストリングにブール演算を施して出力ビットユニットを生成する、システムにおける、複数の入力ビットストリングにブール演算を施して1つの合成ビットストリングを生成する、コンピュータで実現される方法であって、
    入力ビットストリングの対の各々を処理要素の選択された1つにつなぎ、
    処理要素を接続して複数のレベルを有する2分木を形成し、ここで選択された処理要素は2分木の葉ノードであり、選択された処理要素の出力ビットユニットは葉ノードよりも低い2分木レベルにある葉でないノードである中間処理要素へ入力され、中間処理要素の出力ビットユニットはより低い2分木レベルの他の中間処理要素へ入力され、合成ビットストリングは2分木の根ノードである根処理要素から出力され、
    選択された処理要素へ入力されるビットベクトルにブール演算を施すことによって2分木のすべての葉ノードを処理して出力ビットユニットを生成し、ここで出力ビットユニットは中間処理要素へ入力されるビットユニットになり、中間処理要素へ入力されるビットユニットにブール演算を施すことによって2分木のすべての葉でないノードを処理して出力ビットユニットを生成し、根処理要素へ入力されるビットユニットにブール演算を施して合成ビットストリングを生成することによって2分木の根ノードを処理するステップを具備する方法。
  2. 接続するステップは、選択された処理要素からの出力ビットユニットを保持するFIFOを中間処理要素へ、中間処理要素からのものを2分木のより低いレベルの中間処理要素へ、2つの中間処理要素からのものを根ノードへ接続する請求の範囲1の方法。
  3. すべての葉でないノードおよび根ノードの処理は葉でないノードと根ノードに対する入力ビットユニットがFIFOからの入力として利用可能であるとき達成される請求の範囲2の方法。
  4. 入力ビットストリングの数が奇数であるとき、最後の奇数番目の入力ビットストリングをセーブし、ブール演算に従って最後の奇数番目の入力ビットストリングを合成ビットストリングと組み合わせるステップをさらに具備する請求の範囲1の方法。
  5. ブール演算はOR演算である請求の範囲1の方法。
  6. つなぐステップは、
    (A)処理要素の1つを選択し、
    (B)第1の入力ビットストリングを処理要素の選択された1つの第1入力へつなぎ、
    (C)第2の入力ビットストリングを処理要素の選択された1つの第2入力へつなぎ、
    (D)入力ビットストリングの対の各々についてステップ(A)−(C)を繰り返すステップを具備する請求の範囲1の方法。
  7. 接続するステップは、
    (A)処理要素のフィールドを初期化し、
    (B)葉でない処理要素の第1の選択された1つの第1入力を葉でない処理要素の第1の選択された1つのレベルよりも高い2分木レベルの第1処理要素の出力ビットユニットのFIFOにつなぎ、
    (C)葉でない処理要素の第1の選択された1つの第2入力を葉でない処理要素の第1の選択された1つのレベルよりも高い2分木レベルの第2処理要素の出力ビットユニットのFIFOにつなぎ、
    (D)すべての葉でない処理要素についてステップ(B)および(C)を繰り返すステップを具備する請求の範囲2の方法。
  8. 接続するステップは、
    根処理要素の第1入力を根処理要素のレベルよりも高い2分木レベルの処理要素の出力ビットユニットのFIFOにつなぎ、
    根処理要素の第2入力を根処理要素のレベルよりも高い2分木レベルの他の処理要素の出力ビットユニットのFIFOにつなぐステップをさらに具備する請求の範囲7の方法。
  9. すべての葉ノードを処理しすべての葉でないノードを処理し根ノードを処理するステップは、
    (A)2分木に対する合成ビットストリングを初期化し、
    (B)入力の少なくとも一方のデータのすべてが空になるまでまたは選択された処理要素に対する出力ビットユニットを格納するFIFOが満杯になるまで選択された処理要素に対する入力ビットユニットへのブール演算を達成し、
    (C)すべての処理要素についてステップ(B)を繰り返し、
    (D)根ノードの出力ビットユニットを格納するFIFOに格納されているデータを合成ビットストリングへ移動し、
    (E)すべての入力ビットストリングのすべてのデータが処理されるまでステップ(B)−(D)を繰り返すステップを具備する請求の範囲2の方法。
  10. 入力ビットベクトルは、入力データがランであるかインパルスであるかを示すキャラクタタイプとランまたはインパルスの2進値を示すジェンダタイプと入力データ内のビット数を示すレングスを含む属性によって表わされる請求の範囲1の方法。
  11. ランは或る2進値の1つ以上の連続ビットを有するビットストリングである請求の範囲10の方法。
  12. インパルスは、或る2進値の1つ以上の連続ビットを有するビットストリングであって反対の2進値を有する終了ビットが続くものである請求の範囲10の方法。
  13. 複数の入力ビットストリングにブール演算を施して合成ビットストリングを生成するシステムであって、
    1対の入力ビットユニットにブール演算を施して出力ビットユニットを生成する手段をその各々が具備する複数の処理要素と、
    入力ビットストリングの対の各々を処理要素の選択された1つにつなぐ手段と、
    処理要素を接続して複数のレベルを有する2分木を形成する手段であって、選択された処理要素は2分木の葉ノードであり、選択された処理要素の出力ビットユニットは葉ノードよりも低い2分木レベルの葉でないノードである中間処理要素へ入力され、中間処理要素の出力ビットユニットはより低い2分木レベルの他の中間処理要素へ入力され、合成ビットベクトルは2分木の根ノードである根処理要素によって出力されるものと、
    選択された処理要素へ入力されるビットベクトルに対するブール演算を開始することによって2分木のすべての葉ノードを処理して出力ビットユニットを生成し、ここで出力ビットユニットは中間処理要素へ入力されるビットユニットになり、中間処理要素へ入力されるビットユニットに対するブール演算を開始することによって2分木のすべての葉でないノードを処理して出力ビットユニットを生成し、根処理要素へ入力されるビットユニットに対するブール演算を開始して合成ビットストリングを生成することによって2分木の根ノードを処理する手段とを具備するシステム。
  14. 選択された処理要素から中間処理要素へ、中間処理要素から2分木のより低いレベルの中間処理要素へ、及び2つの中間処理要素から根ノードへの出力ビットユニットを保持する複数のFIFOをさらに具備する請求の範囲13のシステム。
  15. 処理手段は、葉でないノードと根ノードに対する入力ビットユニットがFIFOからの入力として利用可能であるときすべての葉でないノードと根ノードの処理を開始する請求の範囲14のシステム。
  16. 入力ビットストリングの数が奇数であるとき、最後の奇数番目の入力ビットストリングをセーブする手段と、
    ブール演算に従って最後の奇数番目の入力ビットストリングを合成ビットストリングと組み合わせる手段とをさらに具備する請求の範囲13のシステム。
  17. ブール演算はOR演算である請求の範囲13のシステム。
  18. つなぐ手段は、
    処理要素の1つを選択する手段と、
    第1の入力ビットストリングを処理要素の選択された1つの第1入力へつなぐ手段と、
    第2の入力ビットストリングを処理要素の選択された1つの第2入力へつなぐ手段とを具備する請求の範囲13のシステム。
  19. 接続手段は、
    処理要素のフィールドを初期化する手段と、
    葉でない処理要素の第1の選択された1つの第1入力を葉でない処理要素の第1の選択された1つのレベルよりも高い2分木レベルの第1処理要素の出力ビットユニットのFIFOにつなぐ手段と、
    葉でない処理要素の第1の選択された1つの第2入力を葉でない処理要素の第1の選択された1つのレベルよりも高い2分木レベルの第2処理要素の出力ビットユニットのFIFOにつなぐ手段とを具備する請求の範囲13のシステム。
  20. 接続手段は、
    根処理要素の第1入力を根処理要素のレベルよりも高い2分木レベルの処理要素の第1の出力ビットユニットのFIFOにつなぐ手段と、
    根処理要素の第2入力を根処理要素のレベルよりも高い2分木レベルの他の処理要素の出力ビットユニットのFIFOにつなぐ手段とをさらに具備する請求の範囲19のシステム。
  21. 処理手段は、
    2分木に対する合成ビットストリングを初期化する手段と、
    選択された処理要素の入力の少なくとも一方のデータのすべてが処理されるまでまたは選択された処理要素に対する出力ビットユニットを格納するFIFOが満杯になるまで選択された処理要素に対する入力ビットユニットへのブール演算の遂行を制御する手段と、
    根ノードの出力ビットユニットを格納するFIFOに格納されているデータを合成ビットストリングへ移動する手段とを具備する請求の範囲14のシステム。
  22. 入力ビットユニットは、入力データがランであるかインパルスであるかを示すキャラクタタイプとランまたはインパルスの2進値を示すジェンダタイプと入力データ内のビット数を示すレングスを含む属性によって表わされる請求の範囲13のシステム。
  23. ランは或る2進値の1つ以上の連続ビットを有するビットベクトルである請求の範囲22のシステム。
  24. インパルスは、或る2進値の1つ以上の連続ビットを有するビットベクトルであって反対の2進値を有する終了ビットが続くものである請求の範囲22のシステム。
  25. データフローアーキテクチャにおける複数の処理要素を有する関係データベース管理システムであって、各処理要素は入力データとして2つの入力ビットベクトルを引き受け2つの入力ビットベクトルにブールOR演算を施して出力ビットベクトルを生成する、システムにおける、関係データベースでの関係の2進表現を生成し、2進表現をビットベクトルに圧縮し、複数の入力ビットベクトルにブールOR演算を施して関係データベースのクエリーを満足する1つの合成ビットベクトルを生成する、コンピュータで実現される方法であって、
    関係データベースでの関係の2進表現を生成し、ここで、該2進表現は符号化された連続した2進ビットのストリングを含み、
    各ストリングを1つ以上の圧縮インパルスに分離し、ここで、1つ以上の圧縮インパルスは一緒になって実質的にストリング全体を構成し、1つ以上の圧縮インパルスの各々は同じ極性の1つ以上の連続ビットのランのストリングであって反対の極性を有する次のビットが続くものを含み、
    該1つ以上の圧縮インパルスの各々を符号化されたインパルスフォーマットの対応するシーケンスに符号化し、ここで、該符号化インパルスフォーマットは入力ビットベクトルを形成し、
    入力ビットベクトルの対の各々を処理要素の選択された1つにつなぎ、
    処理要素を接続して複数のレベルを有する2分木を形成し、ここで選択された処理要素は2分木の葉ノードであり、選択された処理要素の出力ビットユニットは葉ノードよりも低い2分木レベルにある葉でないノードである中間処理要素へ入力され、中間処理要素の出力ビットユニットはより低い2分木レベルの他の中間処理要素へ入力され、合成ビットベクトルは2分木の根ノードである根処理要素から出力され、
    選択された処理要素へ入力されるビットベクトルにブールOR演算を施すことによって2分木のすべての葉ノードを処理して出力ビットユニットを生成し、ここで出力ビットユニットは中間処理要素へ入力されるビットユニットになり、中間処理要素へ入力されるビットユニットにブールOR演算を施すことによって2分木のすべての葉でないノードを処理して出力ビットユニットを生成し、クエリー根処理要素へ入力されるビットユニットにブール演算を施してクエリーを満足する合成ビットベクトルを生成することによって2分木の根ノードを処理するステップを具備する方法。
  26. 接続するステップは、選択された処理要素からの出力ビットユニットを保持するFIFOを中間処理要素へ、中間処理要素からのものを2分木のより低いレベルの中間処理要素へ、2つの中間処理要素からのものを根ノードへ接続する請求の範囲25の方法。
  27. すべての葉でないノードおよび根ノードの処理は葉でないノードと根ノードに対する入力ビットユニットがFIFOからの入力として利用可能であるとき達成される請求の範囲26の方法。
  28. 入力ビットベクトルの数が奇数であるとき、最後の奇数番目の入力ビットベクトルをセーブし、ブール演算に従って最後の奇数番目の入力ビットストリングを合成ビットベクトルと組み合わせるステップをさらに具備する請求の範囲25の方法。
  29. つなぐステップは、
    (A)処理要素の1つを選択し、
    (B)第1の入力ビットベクトルを処理要素の選択された1つの第1入力へつなぎ、
    (C)第2の入力ビットベクトルを処理要素の選択された1つの第2入力へつなぎ、
    (D)入力ビットベクトルの対の各々についてステップ(A)−(C)を繰り返すステップを具備する請求の範囲25の方法。
  30. 接続するステップは、
    (A)処理要素のフィールドを初期化し、
    (B)葉でない処理要素の第1の選択された1つの第1入力を葉でない処理要素の第1の選択された1つのレベルよりも高い2分木レベルの第1処理要素の出力ビットユニットのFIFOにつなぎ、
    (C)葉でない処理要素の第1の選択された1つの第2入力を葉でない処理要素の第1の選択された1つのレベルよりも高い2分木レベルの第2処理要素の出力ビットユニットのFIFOにつなぎ、
    (D)すべての葉でない処理要素についてステップ(B)および(C)を繰り返すステップを具備する請求の範囲25の方法。
  31. 接続するステップは、
    根処理要素の第1入力を根処理要素のレベルよりも高い2分木レベルの処理要素の出力ビットユニットのFIFOにつなぎ、
    根処理要素の第2入力を根処理要素のレベルよりも高い2分木レベルの他の処理要素の出力ビットユニットのFIFOにつなぐステップをさらに具備する請求の範囲30の方法。
  32. すべての葉ノードを処理しすべての葉でないノードを処理し根ノードを処理するステップは、
    (A)2分木に対する合成ビットストリングを初期化し、
    (B)入力の少なくとも一方のデータのすべてが処理されるまでまたは選択された処理要素に対する出力ビットユニットを格納するFIFOが満杯になるまで選択された処理要素に対する入力ビットユニットへのブールOR演算を達成し、
    (C)すべての処理要素についてステップ(B)を繰り返し、
    (D)根ノードの出力ビットユニットを格納するFIFOに格納されているデータを合成ビットストリングへ移動し、
    (E)すべての入力ビットベクトルのすべてのデータが処理されるまでステップ(B)−(D)を繰り返すステップを具備する請求の範囲26の方法。
  33. 関係データベースにおける関係を表わす複数の入力ビットベクトルにブールOR演算を施して関係データベースのクエリーを満足する合成ビットベクトルを生成するシステムであって、
    関係データベースでの関係の2進表現を生成する手段であって、該2進表現は連続した2進ビットのストリングを含むものと、
    各ストリングを1つ以上の圧縮インパルスに分離する手段であって、1つ以上の圧縮インパルスは一緒になって実質的にストリング全体を構成し、1つ以上の圧縮インパルスの各々は同じ極性の1つ以上の連続ビットのランのストリングであって反対の極性を有する次のビットが続くものを含むものと、
    該1つ以上の圧縮インパルスの各々を符号化されたインパルスフォーマットの対応するシーケンスに符号化する手段であって、該符号化インパルスフォーマットはビットベクトルを形成するものと、複数の処理要素であって、各処理要素は1対の入力ビットユニットにブールOR演算を施して出力ビットユニットを生成する手段を具備するものと、
    入力ビットベクトルの対の各々を処理要素の選択された1つにつなぐ手段と、
    処理要素を接続して複数のレベルを有する2分木を形成する手段であって、選択された処理要素は2分木の葉ノードであり、選択された処理要素の出力ビットユニットは葉ノードよりも低い2分木レベルにある葉でないノードである中間処理要素へ入力され、中間処理要素の出力ビットユニットはより低い2分木レベルの他の中間処理要素へ入力され、合成ビットベクトルは2分木の根ノードである根処理要素から出力されるものと、
    選択された処理要素へ入力されるビットベクトルへのブールOR演算を開始することによって2分木のすべての葉ノードを処理して出力ビットユニットを生成する手段であって、出力ビットユニットは中間処理要素へ入力されるビットユニットになり、中間処理要素へ入力されるビットユニットへのブールOR演算を開始することによって2分木のすべての葉でないノードを処理して出力ビットユニットを生成し、クエリー根処理要素へ入力されるビットユニットにブール演算を施してクエリーを満足する合成ビットベクトルを生成することによって2分木の根ノードを処理するものとを具備するシステム。
  34. 選択された処理要素から中間処理要素へ、中間処理要素から2分木のより低いレベルの中間処理要素へ、及び2つの中間処理要素から根ノードへの出力ビットユニットを保持する複数のFIFOをさらに具備する請求の範囲33のシステム。
  35. 処理手段は、葉でないノードと根ノードに対する入力ビットユニットがFIFOからの入力として利用可能であるときすべての葉でないノードと根ノードの処理を開始する請求の範囲34のシステム。
  36. 入力ビットベクトルの数が奇数であるとき、最後の奇数番目の入力ビットストリングをセーブする手段と、
    ブールOR演算に従って最後の奇数番目の入力ビットベクトルを合成ビットベクトルと組み合わせる手段とをさらに具備する請求の範囲33のシステム。
  37. つなぐ手段は、
    処理要素の1つを選択する手段と、
    第1の入力ビットベクトルを処理要素の選択された1つの第1入力へつなぐ手段と、
    第2の入力ビットベクトルを処理要素の選択された1つの第2入力へつなぐ手段とを具備する請求の範囲33のシステム。
  38. 接続手段は、
    処理要素のフィールドを初期化する手段と、
    葉でない処理要素の第1の選択された1つの第1入力を葉でない処理要素の第1の選択された1つのレベルよりも高い2分木レベルの第1処理要素の出力ビットユニットのFIFOにつなぐ手段と、
    葉でない処理要素の第1の選択された1つの第2入力を葉でない処理要素の第1の選択された1つのレベルよりも高い2分木レベルの第2処理要素の出力ビットユニットのFIFOにつなぐ手段とを具備する請求の範囲33のシステム。
  39. 接続手段は、
    根処理要素の第1入力を根処理要素のレベルよりも高い2分木レベルの処理要素の第1の出力ビットユニットのFIFOにつなぐ手段と、
    根処理要素の第2入力を根処理要素のレベルよりも高い2分木レベルの他の処理要素の出力ビットユニットのFIFOにつなぐ手段とをさらに具備する請求の範囲38のシステム。
  40. 処理手段は、
    2分木に対する合成ビットベクトルを初期化する手段と、
    選択された処理要素への入力の少なくとも一方のデータのすべてが処理されるまでまたは選択された処理要素に対する出力ビットユニットを格納するFIFOが満杯になるまで選択された処理要素に対する入力ビットユニットへのブールOR演算の遂行を制御する手段と、
    根ノードの出力ビットユニットを格納するFIFOに格納されているデータを合成ビットベクトルへ移動する手段とを具備する請求の範囲34のシステム。
JP53603998A 1997-02-18 1998-02-18 データフローアーキテクチャにおけるビットストリングのn−ウェイ処理 Expired - Fee Related JP4267707B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/801,317 1997-02-18
US08/801,317 US5974411A (en) 1997-02-18 1997-02-18 N-way processing of bit strings in a dataflow architecture
PCT/US1998/004796 WO1998036349A1 (en) 1997-02-18 1998-02-18 N-way processing of bit strings in a dataflow architecture

Publications (2)

Publication Number Publication Date
JP2001512601A JP2001512601A (ja) 2001-08-21
JP4267707B2 true JP4267707B2 (ja) 2009-05-27

Family

ID=25180781

Family Applications (1)

Application Number Title Priority Date Filing Date
JP53603998A Expired - Fee Related JP4267707B2 (ja) 1997-02-18 1998-02-18 データフローアーキテクチャにおけるビットストリングのn−ウェイ処理

Country Status (7)

Country Link
US (1) US5974411A (ja)
EP (1) EP0961966B1 (ja)
JP (1) JP4267707B2 (ja)
AU (1) AU744570B2 (ja)
CA (1) CA2281103C (ja)
DE (1) DE69820230T2 (ja)
WO (1) WO1998036349A1 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6681218B1 (en) * 1999-11-04 2004-01-20 International Business Machines Corporation System for managing RDBM fragmentations
US6735595B2 (en) 2000-11-29 2004-05-11 Hewlett-Packard Development Company, L.P. Data structure and storage and retrieval method supporting ordinality based searching and data retrieval
US20060129933A1 (en) * 2000-12-19 2006-06-15 Sparkpoint Software, Inc. System and method for multimedia authoring and playback
US20040039934A1 (en) * 2000-12-19 2004-02-26 Land Michael Z. System and method for multimedia authoring and playback
WO2002050657A1 (en) * 2000-12-19 2002-06-27 Coolernet, Inc. System and method for multimedia authoring and playback
US6816856B2 (en) 2001-06-04 2004-11-09 Hewlett-Packard Development Company, L.P. System for and method of data compression in a valueless digital tree representing a bitset
US6785687B2 (en) * 2001-06-04 2004-08-31 Hewlett-Packard Development Company, L.P. System for and method of efficient, expandable storage and retrieval of small datasets
US6654760B2 (en) * 2001-06-04 2003-11-25 Hewlett-Packard Development Company, L.P. System and method of providing a cache-efficient, hybrid, compressed digital tree with wide dynamic ranges and simple interface requiring no configuration or tuning
US6671694B2 (en) 2001-06-04 2003-12-30 Hewlett-Packard Development Company, L.P. System for and method of cache-efficient digital tree with rich pointers
SE0300742D0 (sv) * 2003-03-17 2003-03-17 Flow Computing Ab Data Flow Machine
US7716250B1 (en) * 2005-05-27 2010-05-11 Microsoft Corporation Erasure coding and group computations using rooted binary and ternary trees
US7467155B2 (en) * 2005-07-12 2008-12-16 Sand Technology Systems International, Inc. Method and apparatus for representation of unstructured data
US8244718B2 (en) * 2006-08-25 2012-08-14 Teradata Us, Inc. Methods and systems for hardware acceleration of database operations and queries
US7966343B2 (en) 2008-04-07 2011-06-21 Teradata Us, Inc. Accessing data in a column store database based on hardware compatible data structures
US8862625B2 (en) 2008-04-07 2014-10-14 Teradata Us, Inc. Accessing data in a column store database based on hardware compatible indexing and replicated reordered columns
US9424315B2 (en) 2007-08-27 2016-08-23 Teradata Us, Inc. Methods and systems for run-time scheduling database operations that are executed in hardware
US8458129B2 (en) 2008-06-23 2013-06-04 Teradata Us, Inc. Methods and systems for real-time continuous updates

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2619940A1 (fr) * 1987-08-26 1989-03-03 Centre Nat Rech Scient Circuit arborescent a architecture en pipe-line cloisonnable
US5036457A (en) * 1987-09-24 1991-07-30 Nucleus International Corporation Bit string compressor with boolean operation processing capability
ATE180932T1 (de) * 1987-09-24 1999-06-15 Sand Technology Systems Int Bitfolgekompressor geeignet für boolesche operationen
US5146221A (en) * 1989-01-13 1992-09-08 Stac, Inc. Data compression apparatus and method
US5550540A (en) * 1992-11-12 1996-08-27 Internatioal Business Machines Corporation Distributed coding and prediction by use of contexts
US5502439A (en) * 1994-05-16 1996-03-26 The United States Of America As Represented By The United States Department Of Energy Method for compression of binary data
US5664172A (en) * 1994-07-19 1997-09-02 Oracle Corporation Range-based query optimizer
US5608396A (en) * 1995-02-28 1997-03-04 International Business Machines Corporation Efficient Ziv-Lempel LZI data compression system using variable code fields
US5659737A (en) * 1995-08-01 1997-08-19 Oracle Corporation Methods and apparatus for data compression that preserves order by using failure greater than and failure less than tokens
US5610603A (en) * 1995-09-28 1997-03-11 International Business Machines Corporation Sort order preservation method used with a static compression dictionary having consecutively numbered children of a parent

Also Published As

Publication number Publication date
JP2001512601A (ja) 2001-08-21
WO1998036349A1 (en) 1998-08-20
AU744570B2 (en) 2002-02-28
CA2281103A1 (en) 1998-08-20
CA2281103C (en) 2006-09-05
DE69820230T2 (de) 2004-09-02
DE69820230D1 (de) 2004-01-15
AU6699298A (en) 1998-09-08
EP0961966A1 (en) 1999-12-08
EP0961966B1 (en) 2003-12-03
US5974411A (en) 1999-10-26

Similar Documents

Publication Publication Date Title
JP4267707B2 (ja) データフローアーキテクチャにおけるビットストリングのn−ウェイ処理
Wu Notes on design and implementation of compressed bit vectors
EP2450809B1 (en) Method for extracting information from a database
US10901948B2 (en) Query predicate evaluation and computation for hierarchically compressed data
CN1552032B (zh) 数据库
US6334123B1 (en) Index relational processor
US6829695B1 (en) Enhanced boolean processor with parallel input
JP3309031B2 (ja) 短ブロックのデータを圧縮、伸長するための方法、及び装置
EP0650264A1 (en) Byte aligned data compression
WO2015084864A1 (en) Systems and methods of modeling object networks
US6507877B1 (en) Asynchronous concurrent dual-stream FIFO
US6535150B1 (en) Method and apparatus for implementing run-length compression
CN115982311B (zh) 一种链表的生成方法、装置、终端设备及存储介质
JPH01297723A (ja) ソート処理装置
CN110349635A (zh) 一种基因测序数据质量分数的并行压缩方法
EP0912922A1 (en) Method and system for performing a boolean operation on bit strings using a maximal bit slice
JP3514874B2 (ja) フリーテキスト検索システム
Blom et al. Compressed and distributed file formats for labeled transition systems
JP2006073035A (ja) 電子化文書検索システム、検索装置、および記録媒体
JPH11282880A (ja) 電子化文書検索システムおよび記憶媒体
JP2001134573A (ja) 類似データ検索方法,類似データ検索装置,および類似データ検索用プログラム記録媒体
CA2239157C (en) Method and system for performing a boolean operation on bit strings using a maximal bit slice
WO2001018742A2 (en) Index relational processor
Ayadi et al. A Binary Decision Diagram to discover low threshold support frequent itemsets
JP2004062898A (ja) 相関のあるデータ組み合わせの数え上げ方式

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050218

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080507

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20080731

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20080908

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081107

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

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

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20120227

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20130227

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20140227

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees