• 検索結果がありません。

データベースプロセッサの使用方法

ドキュメント内 電気通信大学大学院 情報理工学研究科 (ページ 30-38)

第 2 章 データベースプロセッサ 7

2.3 データベースプロセッサの使用方法

データベースプロセッサはインデックスなどの情報探しのためのメタデータが不要である.し かも後述するように,データの大きさに関わらず常に一定の時間で必要とする情報を探し出す事 が可能になる.一例を挙げれば,SQLデータベースのSELECT処理をインデックスなしで高速に 実現する事や,AI認証に必要とされるデータ照合や全文検索のビットマップインデックスなどの 検索に好都合である.以下にデータベースプロセッサの代表的な使い方について述べる.

2.3.1 1 ビット演算器によるバイナリデータの比較演算

表2.1はデータベースプロセッサの1ビット演算器によるデータ比較演算の演算式を示す.ここ では4ビット2進数の場合のデータの比較演算つまり,一致,大小,範囲演算を1ビット毎にビッ トシリアルで行う場合の演算式を示したものである.表示するように,10進数は2進数に変換さ れ,何れの場合もMSB(Most Significant Bit)である「8」からLSB(Least Significant Bit)で ある「1」まで割り付けされた「8」,「4」,「2」,「1」の各ビットのアドレスを比較する演算条件に適 合するように選択し,ビットシリアルに論理否定,論理積,論理和する事で,「一致」,「以上」,「未 満」のデータを検出する事が可能である事を示している.表2.1を参考に演算条件を「以下」や

「範囲」にする事も,任意の多数ビットデータの比較の演算条件式も容易に設定する事が出来る.

これらの演算を実施する上で,中間の演算結果を一時退避して記憶する必要がある場合は,例え ばアドレスNを一時演算バッファーとして利用するとよい.更に,次に説明する何れの演算にも 応用する事が出来る.

表 2.1: 1ビット演算器によるバイナリデータの比較演算.

10進数 2進数

比較条件 演算式

8」 「4」 「2」 「1 0

一致 /8/4/2/1

0 0 0 0 以上 N/A

未満 N/A

1

一致 /8/4/21

0 0 0 1 以上 8+4+2+1

未満 /(8+4+2+1) 2

一致 /8/42/1

0 0 1 1 以上 8+4+2

未満 /(8+4+2) 3

一致 /8/421

0 0 1 1 以上 8+4+(21)

未満 /(8+4+(2*1)) 4

一致 /84/2/1

0 1 0 0 以上 8+4

未満 /(8+4) 5

一致 /84/21

0 1 0 1 以上 8+4∗(21)+4∗(2+1) 未満 /(8+4(2+1)+4(2+1)) 6

一致 /842/1

0 1 1 0 以上 8+(421)+(42) 未満 /(8+(421)+(42)) 7

一致 /8421

0 1 1 1 以上 8+(421)

未満 /(8+421) 8

一致 8/4/2/1

1 0 0 0 以上 8

未満 /(8) 9

一致 8/4/21

1 0 0 1 以上 (84)+(82)+(81) 未満 /((84)+(82)+(81)) 10

一致 8/42/1

1 0 1 0 以上 (84)+(82)

未満 /((84)+(82)) 11

一致 8/421 1 0 1 1 以上 (84)+(821)

未満 /((84)+(821)) 12

一致 84/2/1

1 1 0 0 以上 84

未満 /(84) 13

一致 84/21

1 1 0 1 以上 84*(2+1)

未満 /(84*(2+1)) 14

一致 842/1

1 1 1 0 以上 842

未満 /(842) 15

一致 8421

1 1 1 1 以上 N/A

未満 N/A

( / : 論理否定; : 論理積;+ : 論理和)

2.3.2 データ一致比較演算

図2.4はデータベースプロセッサの1ビット演算器によるデータ一致比較演算方法を示す.ここ では2進数8ビットのデータの一致演算の例である.

図 2.4: 1ビット演算器によるデータ一致比較演算.

例えば,アドレス10を最上位ビット(MSB)「128」としてアドレス17を最下位ビット(LSB)

「1」とする8ビットのデータをフィールドに割りつけした場合を考える.8ビットのデータである ので256通りのデータを記憶する事が可能であり,アドレス10からアドレス17の8つのアドレス を適切に選択し演算する事により,256通りのデータの中から完全一致のデータを検出してそのレ コードの番地を出力する事が可能になる.例えば,10進データ値「10」=2進数「00001010」を 完全一致で探す場合,アドレス10を最上位ビット(MSB)「128」としてアドレス17を最下位ビッ ト(LSB)「1」まで8回演算し「00001010」であるデータを検出すればよい.

図の下方に示す通り,本例ではMSBのアドレス10から「128」,「64」,「32」,「16」,「8」,「4」,

「2」,「1」の順に演算を行っている.この際,2進数「00001010」の「0」の桁の場合は論理否定,

「1」の桁の場合は正論理で,8回の論理積演算(勝ち抜き演算)を繰り返し,勝ち残った13およ び25の2つのレコードが10進データ値「10」として検出される.本例の場合,最後まで勝ち残っ たレコード13,25が10進データ値「10」,2進数データ値「00001010」である.以上のような1 ビット演算を繰り返す事により任意の値のデータ値を検出する事が出来る.

2.3.3 データ大小比較(範囲比較)演算

図2.5はデータベースプロセッサ1ビット演算器によるデータ大小比較演算方法を示す.

図 2.5: 1ビット演算器によるデータ大小比較演算.

これまでの説明は,10進データ値「10」の完全一致を求めるものであったが,10進データ値

「10」以上を探す場合,図に示す通りMSBのアドレス10からアドレス13まで4回アドレスの論 理和を取る事により,10進データ値が「16」以上のレコードをまとめて検出する事が出来る.更 に下位4ビットのアドレスの15と16の論理和と,アドレス14を論理積演算する事により,10進 データ値「10」以上「16」未満を求め,先ほどの10進データ値が「16」以上のレコードと論理和 をとる事により,10進データ値「10」以上のデータ値のレコードを検出する事が出来る.

ここではレコード2,3,· · ·nが10進データ値「10」以上である.更に図に示す通り,10進 データ値「10」以上のデータ値のレコードを否定すれば「10」未満つまり「9」以下のレコードが 検出される.本例の場合,レコード1,8,14が10進データ値「10」未満である.その他のデータ 値や範囲検索も以上と同様な1ビット演算を繰り返し行えばよい.またデータの長さ(通常のメ モリの場合はデータの幅に相当)は2のべき乗数以外の9ビットや10ビット,17ビットや33ビッ トにする場合でも極めて単純であり,必ずしもアドレスが連続されている必要もない.つまりこ のデータベースプロセッサは,ある/なしの1ビットデータから256ビットなど,任意のデータ の長さのデータをレコード内のフィールドデータとして割り付けする事が出来る.

例えば,個人情報などの場合「氏名」,「住所」,「勤務先」,「生年月日」,「身長」,「体重」,「性別」

などデータの長さは様々であり,必要最低限のデータの長さを割り付けし,必要なデータが格納 されているアドレスだけ演算させ,必要のないアドレスは演算させないように出来る(無駄なメ モリアクセスを避ける事が出来る)事が大きな特徴である.

2.3.4 カウント演算

図2.6はデータベースプロセッサの1ビット演算器による加算カウント演算方法を示す.ここで は,レコードデータの加算カウントの例を示すものであり,2進数,4ビットデータの加算カウン トを実行するためのアドレス,レコードの割り付けの例を示している.図の上段の初期状態に示 す通り,「8」,「4」,「2」,「1」の4ビットデータはアドレスXからアドレスX+3番地までカウン トデータが割り付けられ,左側のレコードより初期値として,「0,8,1,15,7,3,5,〜10」の 10進数によるカウントデータが書き込まれている.1ビット演算器の演算結果(勝ち残り)が左 側のレコードより「0,1,0,1,1,1,0〜1」である場合,現在のカウントデータに以上の1ビッ ト演算器(REG)の演算結果(勝ち残り)を加算し,加算演算結果として「0,9,1,0,8,4,5,

〜11」を求める場合の考え方を示す.1ビット演算を繰り返し加算処理を行う場合,加算結果の桁

上げ(Carry)アドレスと1ビット演算器結果を一時記憶するバッファーアドレスをワークエリア

として利用する事により,カウンタ機能を実現する事が出来る.

ここでは,アドレスX+4を1ビット演算器バッファー,アドレスX+5〜アドレスX+8を 各ビットのキャリーデータとしている.初期状態ではこれらのアドレスはクリアし,オール「0」 状態としておく.以下に,以上割り付けされたカウントデータ並びにワークアドレスを利用して 加算カウントを行う場合の例を示す.

図の上から順番に,初期状態,「1」の桁のビット演算,「2」の桁のビット演算,「4」の桁のビット 演算,「8」の桁のビット演算,演算結果が示されている.

ステップ1: 1ビット論理演算器の内容を1ビット演算器バッファー,アドレスX+4に退 避させておく.1ビット演算器(REG)の内容は変化しない.

ステップ2: カウントデータの「1」の桁のビット,アドレスX+3の内容を代入し,1ビッ ト演算器(REG)の演算結果と論理積演算させる.演算結果データは「1」の桁のビットの キャリーデータである.

ステップ3: このキャリーデータをアドレスX+8に代入する.

ステップ4: 1ビット演算器バッファーであるアドレスX+4から,初期状態(加算値)の 1ビット演算器のデータを代入する.

図 2.6: 1ビット演算器によるデータの加算演算.

ステップ5: 代入された加算値と,カウントデータの「1」の桁,アドレスX+3を代入し排 他論理和演算(XOR)を行う.この演算結果は,「1」の桁の演算結果となる.

ステップ6: アドレスX+3にこの結果を「1」の桁の新データとして書き込み,「1」の桁の ビット演算が完了する.

以降同様にステップ7からステップ24まで,「2」の桁のビット演算,「4」の桁のビット演算,「8」 の桁のビット演算を繰り返し,「2」,「4」,「8」の桁のデータを書き換える.

図の最下段にはカウントデータが更新され「0,9,1,0,8,4,5,〜11」となっている事が示 されており,1ビット演算により加算カウントが正常に実現されている事が示されている.4ビッ トデータの場合,以上の24ステップであるが,8ビットデータの場合はその倍の48ステップであ り,16ビットデータであれば96ステップ必要である.

以上のように1ビット演算は一見非効率的であるように思えるが,数千,数万,100万レコード というように超並列の場合,演算効率は高く高速になる.以上のカウント演算は,何らかの検索 照合処理演算の後に連続して活用すると極めて効率的である.例えば,インターネットの検索回 数をカウントする検索ランキングのように,レコードデータの検索演算の完了後,ヒットしたレ コードの検索ランキングカウンタをそれぞれ1カウントアップするように利用すれば,データベー スプロセッサ内で自動的にカウンターを更新出来るので好都合である.これらのカウンタの値は,

大小比較や範囲比較,最大・最小の対象となるレコードを高速に読み出す事が可能である事は言 うまでもない.検索ランキングに限らず,顔認識や静脈認証などの複数の特徴の識別結果の多数 決判定など各種データの多数決演算,クラス決定演算など多様な自己完結型の演算が可能となる.

2.3.5 ビットマップインデックス検索

これまでメモリ一体型プロセッサは,情報を探すためのメタデータが要らない事が特徴の一つ として説明しているが,既に出来上がっているインデックスや作成したインデックスを効率的に 検索する事も可能である.図2.7はデータベースプロセッサの1ビット演算器によるビットマップ インデックス検索演算方法を示す.

ビットマップインデックス検索演算は,インターネット検索,特許検索,全文検索など様々な用 途がある.通常文字列情報は,キーワードだけの検索とキーワードとブール演算式のその双方を 条件指定する方法の2通りがある.ここでは,特許文献の検索のように例えば「情報処理」,「情報 検索」,「情報照合」,「CPU」などのキーワードと,論理積,論理和,論理否定の演算を可能にし た検索キーワードと演算式の双方を与える事によりレコードの絞り込みが行われ,これらのキー ワードと論理演算条件に合致する文献(レコード)があるかないか,あればどの文献(レコード)

にあるかを判定するインデックス検索を対象とする.以下にこのデータベースプロセッサを用い て,文献検索などビットマップインデックス検索に利用した例を説明する.

この場合,1からNまでのアドレスには,「情報処理」,「情報検索」,「情報照合」,「CPU」など の文献中に存在する語彙の有無をビットマップインデックスとして割り付けし,1レコードを1文 献に対応させる.つまり,1つの文献中に,「情報処理」,「情報検索」,「情報照合」,「CPU」などの 文字が1つでもあれば,対応するメモリセル(フィールド)に「1」を書き込んで,文献毎に登録 をしておく(「0」は省略されている.以降同様).従ってこの場合,N個の語彙(インデックス)

と,n冊の文献(nレコード)がデータベースとして登録されている事になる.

ドキュメント内 電気通信大学大学院 情報理工学研究科 (ページ 30-38)