Mercurial > hg > Papers > 2014 > masakoha-thesis > final
comparison slide/index.html @ 23:a452d8f104bd
divede read rename to Block Read
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 09 Feb 2014 17:14:11 +0900 |
parents | dd04469c2ae9 |
children | 563a4c69048b |
comparison
equal
deleted
inserted
replaced
22:5358fc3a1d7d | 23:a452d8f104bd |
---|---|
32 <h3>研究背景と目的</h3> | 32 <h3>研究背景と目的</h3> |
33 <p> | 33 <p> |
34 近年のCPUのほとんどはマルチコアであり、それらの性能を引き出すためには並列プログラミングが必須となっている。そこで当研究室では Cerium Library の開発を行い、提供することによって並列プログラミングを容易にしている。 | 34 近年のCPUのほとんどはマルチコアであり、それらの性能を引き出すためには並列プログラミングが必須となっている。そこで当研究室では Cerium Library の開発を行い、提供することによって並列プログラミングを容易にしている。 |
35 </p> | 35 </p> |
36 <p> | 36 <p> |
37 先行研究では Task の並列化によって、プログラム全体の処理速度は向上しているが、ファイル読み込み等の I/O に対して並列に Task が動作するようにはされていない。 | 37 先行研究では Task の並列化によって、プログラム全体の処理速度は向上している。しかし、ファイル読み込み等の I/O と Task が並列に動作するようにはされていない。 |
38 </p> | 38 </p> |
39 <p> | 39 <p> |
40 現状では、ファイルを全て memory に mapping を行ってから Task が走るようになっているので、非常に大きいサイズのファイルを読み込むと、ファイルを memory に mapping するまでの時間がオーバーヘッドになってしまう。 | 40 現状では、ファイルを全て memory に mapping を行ってから Task が走るようになっているので、非常に大きいサイズのファイルを読み込むと、ファイルを memory に mapping するまでの時間がオーバーヘッドになってしまう。 |
41 </p> | 41 </p> |
42 <p> | 42 <p> |
43 本研究では I/O と Task の並列化の設計、実装によってプログラム全体の処理速度、処理効率を上げていく。 | 43 本研究では I/O と Task が並列に動作するような設計、実装によってプログラム全体の |
44 処理速度を上げていく。 | |
44 </p> | 45 </p> |
45 </article> | 46 </article> |
46 | 47 |
47 <article > | 48 <article > |
48 <h3>Cerium とは</h3> | 49 <h3>Cerium とは</h3> |
117 | 118 |
118 <article> | 119 <article> |
119 <h3>並列処理向け I/O の 設計と実装</h3> | 120 <h3>並列処理向け I/O の 設計と実装</h3> |
120 <br> | 121 <br> |
121 <ul> | 122 <ul> |
122 <li>mmap の仕様</li> | 123 <li>mmap での実装</li> |
123 <li>divide read の実装</li> | 124 <li>Block Read の実装</li> |
124 <li>Cerium の改良(IO_0 の追加)</li> | 125 <li>Cerium の改良(IO_0 の追加)</li> |
125 </ul> | 126 </ul> |
126 </article> | 127 </article> |
127 | 128 |
128 <article> | 129 <article> |
161 </pre> | 162 </pre> |
162 </article> | 163 </article> |
163 | 164 |
164 <article> | 165 <article> |
165 <h3>mmap の仕様</h3> | 166 <h3>mmap の仕様</h3> |
166 <br> | 167 <table border="0" cellpadding="0" cellspacing="0"> |
167 <img src='images/mmap.png' style="height:300px"> | 168 <tbody> |
169 <tr> | |
170 <td><img src='images/mmap.png' style="height:350px"></td> | |
171 <td> | |
172 <ol> | |
173 <font size = 5> | |
174 <li> | |
175 code がシンプル (memory を自分自身で malloc せず、read を書いて読み込まなくていいため) | |
176 </li> | |
177 <li> | |
178 memory より大きなファイルは開けない | |
179 </li> | |
180 <li> | |
181 ファイルを一度で memory に対して mapping する | |
182 </li> | |
183 <li> | |
184 read の先読みがOS依存 | |
185 </li> | |
186 </font> | |
187 </ol> | |
188 </td> | |
189 </tr> | |
190 </tbody> | |
191 </table> | |
168 | 192 |
169 <ul> | 193 <ul> |
170 <li> | |
171 code がシンプル (read を書いて読み込まなくていいため) | |
172 </li> | |
173 <li> | |
174 memory より大きなファイルは開けない | |
175 </li> | |
176 <li> | |
177 ファイルを一度で memory に対して mapping する | |
178 </li> | |
179 <li> | |
180 read の先読みがOS依存 | |
181 </li> | |
182 </ul> | 194 </ul> |
183 </article> | 195 </article> |
184 | 196 |
185 <article> | 197 <article> |
186 <h3>divide read の設計</h3> | 198 <h3>Block Read の設計(1/2)</h3> |
187 <br> | 199 <br> |
188 <img src='images/divide_read.png' style="height:250px"> | 200 <img src='images/divide_read.png' style="height:250px"> |
189 <br> | 201 <br> |
190 | 202 |
191 <ul> | 203 <ul> |
242 </ul> | 254 </ul> |
243 </article> | 255 </article> |
244 --> | 256 --> |
245 | 257 |
246 <article> | 258 <article> |
247 <h3>divide read の実装(1)</h3> | 259 <h3>Block Read の設計(2/2)</h3> |
248 <br> | 260 <br> |
249 <h3 class="yellow">divide Read の実装</h3> | 261 <img src='images/blockread.png' style="height:250px"> |
262 <br> | |
263 | |
264 <ol> | |
265 <li> | |
266 </li> | |
267 <li> | |
268 </li> | |
269 <li> | |
270 </li> | |
271 <li> | |
272 </li> | |
273 </ol> | |
274 </article> | |
275 | |
276 | |
277 <article> | |
278 <h3>Block Read の実装(2)</h3> | |
279 <br> | |
280 <h3 class="yellow">Block Read の実装</h3> | |
250 <pre> | 281 <pre> |
251 HTaskPtr t_read = manager->create_task(READ_TASK); | 282 HTaskPtr t_read = manager->create_task(READ_TASK); |
252 t_read->set_cpu(read_spe_cpu); | 283 t_read->set_cpu(read_spe_cpu); |
253 t_read->set_param(0,w->fd); | 284 t_read->set_param(0,w->fd); |
254 t_read->set_param(1,w->task_spawned*w->division_size); | 285 t_read->set_param(1,w->task_spawned*w->division_size); |
264 | 295 |
265 </pre> | 296 </pre> |
266 </article> | 297 </article> |
267 | 298 |
268 <article> | 299 <article> |
269 <h3>divide read の実装(2)</h3> | 300 <h3>Block Read の実装(3)</h3> |
270 <br> | 301 <br> |
271 <h3 class="yellow">divide Read の記述</h3> | 302 <h3 class="yellow"> Block Read の記述</h3> |
272 <pre> | 303 <pre> |
273 static int | 304 static int |
274 read_task(SchedTask *s, void *rbuf, void *wbuf) | 305 read_task(SchedTask *s, void *rbuf, void *wbuf) |
275 { | 306 { |
276 long fd = (long)s->get_param(0); | 307 long fd = (long)s->get_param(0); |