Ceriumによる
正規表現の実装

Masataka Kohagura
29th October , 2013

研究目的

本研究室では、Cell用に作られたCeriumにて並列プログラミングを行なっている。Ceriumにて正規表現を実装し、既存の正規表現との処理速度、処理効率がどれだけ良くなるのかを測定する。

現在は文字列サーチをBM法(Boyer-Moore String Search Algorithm)にて実装している。 I/O部分の読み込みの並列化、及びセミグループという、分割したファイルに対して並列処理をさせるような手法によって、効率化を図る。

今週のしたこと

・cのreadとlseekの動作確認

・新しい例題の作成:fileread readとlseekを使って、Ceriumにて実装

・現在はBM法のI/O部分をfilereadのように書き換えている段階。

readとlseekの動作確認(1)

for(i = 0; i < task_num - 1; i++){
    lseek(fd, i * ONE_TASK_READ_SIZE,SEEK_SET);
    read(fd,text,ONE_TASK_READ_SIZE + EXTRA_LENGTH);
    result_printf(i,text);
}

lseek(fd, i * ONE_TASK_READ_SIZE,SEEK_SET);
read(fd,text,ONE_TASK_READ_SIZE);
result_printf(i,text);
      

・lseekにて i * ONE_TASK_READ_SIZE 分読み込み部分をずらす。
SEEK_SETはファイルの先頭からを示している。

・readにて読み込んだファイルを ONE_TASK_READ_SIZE + EXTRA_LENGTH 分読み込む。

・セミグループを考慮した実装。

readとlseekの動作確認(2)

出力結果

task size:71
task num:11
-------1--------
This is a test f
-----------------

-------2--------
test file that w
-----------------

・・・

-------10--------
 that will be us
-----------------

-------11--------
 be used
l be us
-----------------

fileread

ソースにて

実行結果

% ./fileread -cpu 4 -file c.txt
filesize     : 11524674
one_task_size: 16384
task_num     : 704
0 StartTask 276
[task No. 1]
[task No. 4]
[task No. 3]
[task No. 5]
[task No. 8]
[task No. 2]
[task No. 7]
[task No. 9]
・・・
[task No. 700]
[task No. 694]
[task No. 699]
[task No. 701]
[task No. 704]
[task No. 698]
[task No. 703]
[task No. 702]
Time: 0.007602