Cerium Task Manager
による正規表現の実装
Masataka Kohagura
10th December , 2013
Masataka Kohagura
10th December , 2013
マルチコア CPU を最大限に活かすためには、並列プログラミングによる並列度を向上させなければならないが、実装が難しい。 当研究室では Cerium Libraryを提供することによって並列プログラミングを容易にしているが、ファイル読み込み等のI/O部分に関してはまだ実装されていない。
本研究ではその例題として正規表現を実装し、I/Oの並列化の設計・実装によって既存の正規表現の処理速度、処理効率を上げる。
・検索文字列のハードコーディングの脱却
Task *t_exec = 0; t_exec = task_array->next_task_array(TASK_EXEC,t_exec); t_exec->set_inData(0,w->file_mmap + a*w->division_size, size); t_exec->set_inData(1,w->search_word, w->search_word_len); t_exec->set_inData(2,w->BMskip_table, 256);
unsigned char *i_data = (unsigned char *)s->get_input(rbuf,0); unsigned char *search_word = (unsigned char *)s->get_input(rbuf,1); int *skip_table = (int *)s->get_input(2); s->printf("[in Exec search word = %p\n",search_word);
./regex -file c.txt -cpu 1 -sw doing in TMmain search_word = 0x7fba99c1a090 in run start search_word = 0x7fba99c1a090 in run tasks w->search_word = 0x7fba99c1a090 in Exec search word = 0x99c1a090 zsh: segmentation fault ./regex -file c.txt -cpu 1 -sw doing
unsigned char *i_data = (unsigned char *)s->get_inputAddr(0); unsigned char *search_word = (unsigned char *)s->get_inputAddr(1); int *skip_table = (int *)s->get_inputAddr(2); s->printf("in Exec search_word : %p\n",search_word);
./regex -file c.txt -cpu 1 -sw doing in run_tasks w->search_word Addr: 0x7f989b708280 in Exec search_word Addr : 0x7f989b708280 HIT:27856 Time: 0.042276