Ceriumによる
正規表現マッチャの実装

Masataka Kohagura
6th July , 2013

研究目的

本研究室では、Cell用に作られたCeriumにて並列プログラミングを行なっている。様々な例題を実装することにより、どのような問題でも並列処理ができることを証明する。

現在は文字列サーチを実装している段階で、ボイヤームーア法を実装している。 セミグループという、分割したファイルに対して並列処理をさせるような手法によって、既存の文字列サーチと処理速度を比較し、どれだけ速く、どれだけ効率よくなるのかを測定する。

様々な並列処理のプログラムを実装することでプログラムに慣れ、

今週のしたこと

・regex_masのバグ取り ("doing"という単語が本来は27856個存在するはずだが、このプログラムだと27854個と2個不足した状態で出力された。)

・時間測定

main.ccの修正

修正前

t_exec[k]->set_param(0,(memaddr)offset);
t_exec[k]->set_param(1,(memaddr)set_one_task_length);
if(size != w->size){
    t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size+EXTRA_LENGTH);
}else{
    t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size);
}   
t_exec[k]->set_outData(0,w->o_data + a*w->out_size, w->division_out_size);
      

修正後

t_exec[k]->set_param(0,(memaddr)offset);
if(size != w->size){
    t_exec[k]->set_param(1,(memaddr)set_one_task_length+EXTRA_LENGTH);
    t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size+EXTRA_LENGTH);
}else{
    t_exec[k]->set_param(1,(memaddr)set_one_task_length);
    t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size);
}   
t_exec[k]->set_outData(0,w->o_data + a*w->out_size, w->division_out_size);
      

時間測定(参考程度に)

mac pro上での測定

Cerium APIでの計測

cpu_numtime(ms)
138.752
219.347
410.028
85.393
104.502
114.198-5.977
125.585

・10回ほど手動で実行して、それの中央値をとっているだけ。

・現在集計スクリプトを作成中。

・cpu_num = 11のとき実行するたんびにバラバラになる。