Mercurial > hg > Papers > 2014 > masakoha-thesis > final
diff slide/index.html @ 21:dd04469c2ae9
fix
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 07 Feb 2014 13:03:53 +0900 (2014-02-07) |
parents | 7b4609c77ac1 |
children | a452d8f104bd |
line wrap: on
line diff
--- a/slide/index.html Sat Feb 01 00:12:46 2014 +0900 +++ b/slide/index.html Fri Feb 07 13:03:53 2014 +0900 @@ -28,7 +28,7 @@ <div align="right">担当教官 : 河野 真治</div> </article> - <article > + <article class='smaller'> <h3>研究背景と目的</h3> <p> 近年のCPUのほとんどはマルチコアであり、それらの性能を引き出すためには並列プログラミングが必須となっている。そこで当研究室では Cerium Library の開発を行い、提供することによって並列プログラミングを容易にしている。 @@ -37,6 +37,9 @@ 先行研究では Task の並列化によって、プログラム全体の処理速度は向上しているが、ファイル読み込み等の I/O に対して並列に Task が動作するようにはされていない。 </p> <p> + 現状では、ファイルを全て memory に mapping を行ってから Task が走るようになっているので、非常に大きいサイズのファイルを読み込むと、ファイルを memory に mapping するまでの時間がオーバーヘッドになってしまう。 + </p> + <p> 本研究では I/O と Task の並列化の設計、実装によってプログラム全体の処理速度、処理効率を上げていく。 </p> </article> @@ -171,6 +174,9 @@ memory より大きなファイルは開けない </li> <li> + ファイルを一度で memory に対して mapping する + </li> + <li> read の先読みがOS依存 </li> </ul> @@ -242,23 +248,20 @@ <br> <h3 class="yellow">divide Read の実装</h3> <pre> -// 生成するTaskが何番目か -read->set_param(0,(long)w->read_task_number); -// 1つの Read Task で読み込む量 -read->set_param(1,(long)w->read_division_size); -// read_left_size : 残り読み込み量 -if(w->read_left_size <= w->read_division_size){ - read->set_param(2,(long)w->read_left_size); -}else{ - read->set_param(2,(long)w->read_division_size); -} -// ファイルディスクリプタを渡す -read->set_param(3,(long)w->fd); +HTaskPtr t_read = manager->create_task(READ_TASK); +t_read->set_cpu(read_spe_cpu); +t_read->set_param(0,w->fd); +t_read->set_param(1,w->task_spawned*w->division_size); +t_read->set_outData(0, w->file_mmap + w->task_spawned * w->division_size, + w->task_blocks * w->division_size); -//生成するTaskが何番目か -read->set_outData - (0,w->file_mmap + w->read_task_number*w->read_division_size, - w->read_division_size); +run_tasks(manager,w, w->task_blocks, t_read, t_next, + w->division_size + w->extra_len); + +t_read->set_param(2,w->task_spawned*w->division_size + w->extra_len); + +t_read->spawn(); + </pre> </article> @@ -270,15 +273,13 @@ static int read_task(SchedTask *s, void *rbuf, void *wbuf) { - long task_number = (long)s->get_param(0); - long division_size = (long)s->get_param(1); - long read_size = (long)s->get_param(2); - long fd = (long)s->get_param(3); + long fd = (long)s->get_param(0); + long start_read_position = (long)s->get_param(1); + long end_read_position = (long)s->get_param(2); + char *read_text = (char*)s->get_output(wbuf,0); + long read_size = end_read_position - start_read_position; - char *read_text = (char*)s->get_output(wbuf,0); - - pread(fd, read_text, (long)read_size , division_size*task_number); - + pread(fd, read_text, read_size , start_read_position); return 0; } </pre> @@ -303,7 +304,10 @@ さらなる 並列処理向け I/O の動作を改善 </li> <li> - 動作の軽いソフトウェアシンセサイザーを Cerium で実装 + 分散バージョン I/0 の設計と実装 + </li> + <li> + I/O を利用した、マルチコアソフトウェアシンセサイザーを設計 </li> </ul>