# HG changeset patch # User Masataka Kohagura # Date 1386664409 -32400 # Node ID 6f538bc4614bb2e34c53b5c1aceb7dcb709deb26 # Parent 815e0fac48a3d74eade37fd3458cd76349972e89 add 10th December slide diff -r 815e0fac48a3 -r 6f538bc4614b Dec-2013/10th.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Dec-2013/10th.html Tue Dec 10 17:33:29 2013 +0900 @@ -0,0 +1,183 @@ + + + + + + + slide + + + + + + + + + +
+ + + +
+

+ Cerium Task Manager +
+ による正規表現の実装 +

+

+ Masataka Kohagura +
+ 10th December , 2013 +

+
+ +
+

+ 研究目的 +

+

+ マルチコア CPU を最大限に活かすためには、並列プログラミングによる並列度を向上させなければならないが、実装が難しい。 + 当研究室では Cerium Libraryを提供することによって並列プログラミングを容易にしているが、ファイル読み込み等のI/O部分に関してはまだ実装されていない。 +

+

+ 本研究ではその例題として正規表現を実装し、I/Oの並列化の設計・実装によって既存の正規表現の処理速度、処理効率を上げる。 +

+ +
+ +
+

+ 今週のしたこと +

+

+ ・検索文字列のハードコーディングの脱却
+

+
+ + + + +
+ +

+ main.cc:run_tasks内部(Taskへのデータ渡し) +

+
+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);
+
+ +

+ ppe/Exec.cc(Task内でのデータの受取) +

+
+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
+
+ +
    +
  • + search_word のアドレスが上の桁から落ちている。skip_table(intの配列)でもセグフォが発生するので、skip_tableももしかしたらアドレスが同じように落ちているんじゃ・・・ +
  • +
+
+ + +
+

+ ppe/Exec.ccの修正 +

+
+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
+
+
  • + get_inputAddrだと正しくアドレスを受け渡しすることができた。 +
  • +
    + +
    +

    これからのすること

    +
      +
    • + シンヤさんのRegenのソース読み&実装 +
    • +
    • + 並列I/Oの実装
      + (例題:filereadにてI/Oの分割読み込みのプログラムを実装) +
    • +
    +
    + + + diff -r 815e0fac48a3 -r 6f538bc4614b Dec-2013/19th.html --- a/Dec-2013/19th.html Tue Dec 10 15:46:51 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,193 +0,0 @@ - - - - - - - 2013-11-19 - - - - - - - - - -
    - - - -
    -

    - Cerium Task Manager -
    - による正規表現の実装 -

    -

    - Masataka Kohagura -
    - 19th November , 2013 -

    -
    - -
    -

    - 研究目的 -

    -

    - マルチコア CPU を最大限に活かすためには、並列プログラミングによる並列度を向上させなければならないが、実装が難しい。 - 当研究室では Cerium Libraryを提供することによって並列プログラミングを容易にしているが、ファイル読み込み等のI/O部分に関してはまだ実装されていない。 -

    -

    - 本研究ではその例題として正規表現を実装し、I/Oの並列化の設計・実装によって既存の正規表現の処理速度、処理効率を上げる。 -

    -
    - -
    -

    - 今週のしたこと -

    -

    - ・検索文字列のハードコーディングの脱却
    -(set_inData,get_input絡みでバグ??) -

    -
    - - - - -
    -

    - WordCount.h -

    -
    -typedef struct wordCount {
    -    struct wordCount *self;
    -    int size;             // remaining file size
    -    int division_size;    // for each word count task
    -    (中略)
    -    unsigned char *search_word;
    -    int search_word_len;
    -    HTaskPtr t_print;
    -} WordCount;
    -
    -
    - -
    -

    - main.cc(task生成部分) -

    -
    -run_tasks(SchedTask *manager,…)
    -{
    -    …
    -    if(size != w->size){ //最後のタスクかどうかの判定
    -        t_exec[k]->set_param(0,&set_one_task_length + EXTRA_LENGTH);
    -        t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size+EXTRA_LENGTH);
    -        t_exec[k]->set_inData(1,w->search_word, w->search_word_len); 
    -    }else{
    -        t_exec[k]->set_param(0,&set_one_task_length);
    -        t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size);
    -        t_exec[k]->set_inData(1,w->search_word, w->search_word_len); 
    -    }
    -    …
    -}
    -
    - -
    - - -
    -

    - main.cc(task生成部分) -

    -
    -run_tasks(SchedTask *manager,…)
    -{
    -    …
    -    if(size != w->size){ //最後のタスクかどうかの判定
    -        t_exec[k]->set_param(0,&set_one_task_length + EXTRA_LENGTH);
    -        t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size+EXTRA_LENGTH);
    -        t_exec[k]->set_inData(1,w->search_word, w->search_word_len); 
    -    }else{
    -        t_exec[k]->set_param(0,&set_one_task_length);
    -        t_exec[k]->set_inData(0,w->file_mmap + a*w->division_size, size);
    -        t_exec[k]->set_inData(1,w->search_word, w->search_word_len); 
    -    }
    -    …
    -}
    -
    - -
    - -
    -

    - 問題点 -

    -
  • - 複数の文字列をタスクに渡そうとすると、最初に渡す文字列に関しては渡せるが、後に渡す文字列がうまく渡らない。 -
  • -

    Exec.cc(get_input)

    -
    -run(SchedTask *s, void *rbuf, void *wbuf)
    -{
    -    unsigned char *i_data = (unsigned char *)s->get_input(rbuf,0);
    -    unsigned char *search_word = (unsigned char*)s->get_input(rbuf,1);
    -        …
    -    s->printf("[i_data]\n%s\n",i_data);
    -    s->printf("[search_word]\n%s\n",search_word);
    -
    -    return 0;
    -}
    -
    - -

    result

    -
    -(lldb) p i_data
    -(unsigned char *) $2 = 0x000000010202ca00 "aaa bbb …"
    -(lldb) p search_word
    -(unsigned char *) $3 = 0x000000010202ca00 "aaa bbb …"
    -
    -
  • 文字列を複数受け取ろうとすると、index(1)のアドレスがindex(0)のアドレスと同じ場所を示す
  • -
  • この時のi_data sizeは8byte、search_word sizeは6Byteである。
  • -
  • i_data size = search_word sizeにしても同様
  • - -
    - - - diff -r 815e0fac48a3 -r 6f538bc4614b io-2012-slides.googlecode.com/git/.DS_Store Binary file io-2012-slides.googlecode.com/git/.DS_Store has changed diff -r 815e0fac48a3 -r 6f538bc4614b io-2012-slides.googlecode.com/git/.gitignore --- a/io-2012-slides.googlecode.com/git/.gitignore Tue Dec 10 15:46:51 2013 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -# Compiled source # -################### -*.com -*.class -*.dll -*.exe -*.o -*.so -*.pyc -*.min.css -#*.min.js -.sass-cache/* - -# Packages # -############ -# it's better to unpack these files and commit the raw source -# git has its own built in compression methods -*.7z -*.dmg -*.gz -*.iso -*.rar -*.tar -*.zip - -# Logs and databases # -###################### -*.log -*.sql -*.sqlite - -# OS generated files # -###################### -.DS_Store* -ehthumbs.db -Icon? -Thumbs.db -*~ \ No newline at end of file