Mercurial > hg > Papers > 2014 > masakoha-thesis > final
changeset 24:563a4c69048b
fix slide
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 10 Feb 2014 18:55:56 +0900 |
parents | a452d8f104bd |
children | 3385af0bca0f |
files | slide/images/blockread.graffle slide/index.html |
diffstat | 2 files changed, 54 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/slide/images/blockread.graffle Sun Feb 09 17:14:11 2014 +0900 +++ b/slide/images/blockread.graffle Mon Feb 10 18:55:56 2014 +0900 @@ -1383,7 +1383,7 @@ <key>ExpandedCanvases</key> <array/> <key>Frame</key> - <string>{{-112, -0}, {1300, 878}}</string> + <string>{{2, 0}, {1300, 878}}</string> <key>ListView</key> <true/> <key>OutlineWidth</key> @@ -1397,7 +1397,7 @@ <key>SidebarWidth</key> <integer>120</integer> <key>VisibleRegion</key> - <string>{{30.857142857142858, 21.714285714285715}, {665.71428571428567, 422.28571428571428}}</string> + <string>{{0, 0}, {665.71428571428567, 422.28571428571428}}</string> <key>Zoom</key> <real>1.75</real> <key>ZoomValues</key>
--- a/slide/index.html Sun Feb 09 17:14:11 2014 +0900 +++ b/slide/index.html Mon Feb 10 18:55:56 2014 +0900 @@ -31,7 +31,8 @@ <article class='smaller'> <h3>研究背景と目的</h3> <p> - 近年のCPUのほとんどはマルチコアであり、それらの性能を引き出すためには並列プログラミングが必須となっている。そこで当研究室では Cerium Library の開発を行い、提供することによって並列プログラミングを容易にしている。 + 近年のCPUのほとんどはマルチコアであり、それらの性能を引き出すためには並列プログラミングが必須となっている。 + そこで当研究室では、並列プログラミング用フレームワーク、Cerium Task Manager の開発を行い、提供することによって並列プログラミングを容易にしている。 </p> <p> 先行研究では Task の並列化によって、プログラム全体の処理速度は向上している。しかし、ファイル読み込み等の I/O と Task が並列に動作するようにはされていない。 @@ -45,28 +46,20 @@ </p> </article> - <article > - <h3>Cerium とは</h3> - <p> - </p> - <p> - </p> - <p> - </p> - </article> - <article> - <h3>Cerium の流れ</h3> + <h3>Cerium Task Manager の流れ</h3> <table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td><img src='images/cerium.png' style="height:350px"></td> <td> <ol> - <li>Taskを生成</li> - <li>依存関係のチェック</li> - <li>Schedulerに転送</li> + <font size=5> + <li>Taskを生成後、Task Managerにて Task の管理、依存関係のチェック</li> + <li>TaskList に生成された Task を set </li> + <li>Task を各 Scheduler に転送</li> <li>並列実行</li> + </font> </ol> </td> </tr> @@ -75,21 +68,22 @@ </article> <article> - <h3>Cerium Task の生成(1)</h3> - <br> + <h3>Cerium Task の生成の例(1)</h3> + <p>(例題) multiply : 2つの数を掛け算するプログラム</p> <h3 class="yellow">main.cc の記述</h3> <pre> +float* A, B, C; // Task の宣言 HTaskPtr multiply = manager->create_task(MULTIPLY_TASK); // Task を実行する デバイスの設定 multiply->set_cpu(SPE_ANY); // Task に入力データのアドレスを追加 -multiply->set_inData(0, i_data1, sizeof(float)*length); -multiply->set_inData(1, i_data2, sizeof(float)*length); +multiply->set_inData(0, (memaddr)A, sizeof(float)*length); +multiply->set_inData(1, (memaddr)B, sizeof(float)*length); // Task に出力データのアドレスを追加 -multiply->set_outData(0, o_data1, sizeof(float)*length); +multiply->set_outData(0, (memaddr)C, sizeof(float)*length); // Task へ値を1つだけ渡す -multiply->set_param(0,(long)length); +multiply->set_param(0,length); // Task を TaskList に set する multiply->spawn(); </pre> </article> @@ -102,15 +96,16 @@ static int multiply(SchedTask *s,void *rbuf, void *wbuf) { + float *A,*B,*C // 登録した inData を取得 - float indata1=(float*)s->get_input(rbuf,0); - float indata2=(float*)s->get_input(rbuf,1); + A = (float*)s->get_input(rbuf,0); + B = (float*)s->get_input(rbuf,1); // 登録した outData を取得 - float outdata=(float*)s->get_output(wbuf,0); + C = (float*)s->get_output(wbuf,0); // 登録した param を取得 long length=(long)s->get_param(0); for (int i=0;i < length;i++) { - outdata[i]=indata1[i]*indata2[i]; + C[i] = A[i] * B[i]; } return 0; } </pre> @@ -122,7 +117,6 @@ <ul> <li>mmap での実装</li> <li>Block Read の実装</li> - <li>Cerium の改良(IO_0 の追加)</li> </ul> </article> @@ -255,8 +249,38 @@ </article> --> + + + <article class='smaller'> + <h3>Block Read の実装(1/3)</h3> + <br> + <h3 class="yellow">Block Read の実装</h3> + <pre> +HTaskPtr t_read = manager->create_task(READ_TASK); +t_read->set_cpu(read_spe_cpu); +// 読み出すファイルの格納場所を設定 +t_read->set_outData(0, + w->file_mmap + w->task_spawned * w->division_size, + w->task_blocks * w->division_size); +// ファイルディスクリプタの受け渡し +t_read->set_param(0,w->fd); +// ファイル読み込みの始点 +t_read->set_param(1,w->task_spawned*w->division_size); + +// run_tasks(manager,w, w->task_blocks, t_read, t_next, w->division_size + w->extra_len); +// ここで、ファイルに対して何らかの計算を掛けるような Task を設定する +run_tasks(manager,w, w->task_blocks,・・・ ); + +// ファイル読み込みの終点 +t_read->set_param(2,w->task_spawned*w->division_size + w->extra_len); + +t_read->spawn(); + +</pre> + </article> + <article> - <h3>Block Read の設計(2/2)</h3> + <h3>Block Read の実装(2/3)</h3> <br> <img src='images/blockread.png' style="height:250px"> <br> @@ -275,29 +299,7 @@ <article> - <h3>Block Read の実装(2)</h3> - <br> - <h3 class="yellow">Block Read の実装</h3> - <pre> -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); - -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> - - <article> - <h3>Block Read の実装(3)</h3> + <h3>Block Read の実装(3/3)</h3> <br> <h3 class="yellow"> Block Read の記述</h3> <pre>