comparison slide/April_25th.html @ 28:32c82211d53e

add slide
author Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
date Mon, 05 May 2014 23:09:26 +0900
parents
children
comparison
equal deleted inserted replaced
27:6c57aef715a0 28:32c82211d53e
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
5 <title>slide</title>
6
7 <!--
8 Notes on CSS media types used:
9
10 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
11 2) screen -> outline mode (display all slides-at-once on screen)
12 3) print -> print (and print preview)
13
14 Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key
15
16 Questions, comments?
17 - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow
18 -->
19
20 <!-- styles -->
21 <style media="screen,projection">
22
23 html,
24 body,
25 .presentation { margin: 0; padding: 0; }
26
27 .slide { display: none;
28 position: absolute;
29 top: 0; left: 0;
30 margin: 0;
31 border: none;
32 padding: 2% 4% 0% 4%; /* css note: order is => top right bottom left */
33 -moz-box-sizing: border-box;
34 -webkit-box-sizing: border-box;
35 box-sizing: border-box;
36 width: 100%; height: 100%; /* css note: lets use border-box; no need to add padding+border to get to 100% */
37 overflow-x: hidden; overflow-y: auto;
38 z-index: 2;
39 }
40
41 .slide.current { display: block; } /* only display current slide in projection mode */
42
43 .slide .stepcurrent { color: black; }
44 .slide .step { color: silver; } /* or hide next steps e.g. .step { visibility: hidden; } */
45
46 .slide {
47 /*
48 background-image: -webkit-linear-gradient(top, blue, aqua, blue, aqua);
49 background-image: -moz-linear-gradient(top, blue, aqua, blue, aqua);
50 */
51 }
52 </style>
53
54 <style media="screen">
55 .slide { border-top: 1px solid #888; }
56 .slide:first-child { border: none; }
57 </style>
58
59 <style media="print">
60 .slide { page-break-inside: avoid; }
61 .slide h1 { page-break-after: avoid; }
62 .slide ul { page-break-inside: avoid; }
63 </style>
64
65
66 <!-- add js lib (jquery) -->
67 <script src="js/jquery-1.7.min.js"></script>
68
69 <!-- S6 JS -->
70 <script src="js/jquery.slideshow.js"></script>
71 <script src="js/jquery.slideshow.counter.js"></script>
72 <script src="js/jquery.slideshow.controls.js"></script>
73 <script>
74 $(document).ready( function() {
75 Slideshow.init();
76
77 // Example 2: Start Off in Outline Mode
78 // Slideshow.init( { mode: 'outline' } );
79
80 // Example 3: Use Custom Transition
81 // Slideshow.transition = transitionScrollUp;
82 // Slideshow.init();
83
84 // Example 4: Start Off in Autoplay Mode with Custom Transition
85 // Slideshow.transition = transitionScrollUp;
86 // Slideshow.init( { mode: 'autoplay' } );
87 } );
88 </script>
89
90 </head>
91 <body>
92
93
94 <div class="presentation">
95
96 <div class='slide cover'>
97 <table width="90%" height="90%" border="0" align="center">
98 <tr>
99 <td><div align="center">
100 <h1>Cerium による並列処理向け I/O の設計と実装</h1>
101 </div>
102 </td>
103 </tr>
104 <tr>
105 <td><div align="right">
106 <name>琉球大学大学院 古波倉 正隆,河野 真治</name>
107 </div></td>
108 </tr>
109 </tr>
110 </table>
111 </div>
112
113
114
115 <div id="cover">
116
117 <h3>I/Oを含むアプリケーションの並列化</h3>
118 I/O を含む Task は ディスクかの読み込む時間がかかる。<br>
119 -> <font color = red>I/O をどうにか速くできないか?</font>
120 <p>
121 Cerium : <br>
122 CellおよびLinux、 Mac OS X 上で動く並列プログラミングフレームワーク
123 </p>
124 <img src='images/resources.png' style="height:170px" align="middle">
125 <ul>
126 <li><font color=red>ファイル読み込みとアプリケーションの分離</font> </li>
127 <li><font color=red>I/O専用の Threadを追加</font></li>
128 </ul>
129 mmap 実装と比較して1.5倍の速度を得た
130
131 </div>
132
133 <div id="cover">
134
135 <h3>Cerium Task Manager の構造</h3>
136 <table border="0" cellpadding="0" cellspacing="0">
137 <tbody>
138 <tr>
139 <td><img src='images/ceriumtaskmanager.png' style="height:280px"></td>
140 <td>
141 <ol>
142 <li>Taskを生成</li>
143 <li>依存関係のチェック</li>
144 <li>Schedulerに転送</li>
145 <li>並列実行</li>
146 </ol>
147 </td>
148 </tr>
149 </tbody>
150 </table>
151 <p>
152 ファイルを読みながら、Word Count や grep などを<br>
153 並列実行したい
154 </p>
155 <p>
156 計算よりも読み込みを優先しなければならない。読み込みで待ちが入ってしまうので、IO Thread を追加
157 </p>
158
159 </div>
160 <!-- add slides here; example -->
161
162 <div class='cover'>
163 <h3>Block 単位の読み込みと並列計算</h3>
164 <br>
165 <img src='images/includeIOTask.png' style="height:270px" align="middle">
166 <ol>
167 <li>ファイルをある一定の大きさで読み込む</li>
168 <li>読み込んだテキストファイルに対して、それぞれ計算を行う</li>
169 <li>計算した結果を集計する</li>
170 </ol>
171 </div>
172
173
174 <div class='cover'>
175 <h3>mmap の特徴</h3>
176 従来では mmap を使って読み込んでいた
177 <table border="0" cellpadding="0" cellspacing="0">
178 <tbody>
179 <tr>
180 <td><img src='images/mmap.png' style="height:350px" align="middle"></td>
181 <td>
182 <ul>
183 <font size = 5>
184 <li>
185 mmap は、ファイルを直接メモリ空間に map する。<br>
186 アクセスされたメモリ部分を OS が自動的に読み込む。<br>
187 </li>
188 <li>
189 code がシンプルだが、読み込み終わるまで待たされる。 <br>
190 </li>
191 </font>
192 </ul>
193 </td>
194 </tr>
195 </tbody>
196 </table>
197 </div>
198
199
200 <div class='cover'>
201 <h3>読み込みながら計算を行う</h3>
202 <br>
203 <img src='images/divide_read.png' style="height:250px" align="middle" >
204 <br>
205
206 <ul>
207 <li> Read は 連続で動作しファイルを読み込む </li>
208 <li> Read の待ちは CPU を消費しない </li>
209 <li> 読み込み終わったブロックに対して、<br>並列 Task を起動する </li>
210 </ul>
211 </div>
212
213
214 <div class='cover'>
215 <h3>Blocked Read の実装</h3>
216 <br>
217 <img src='images/blockread.png' style="height:250px"align="middle">
218 <br>
219
220 <ul>
221 <li>
222 Task を一度に生成するとメモリを圧迫する。<br>
223 Block 単位で徐々に起動していく。
224 </li>
225 <li>
226 Blocked Read Task が読み込み終わるまで、<br>Task Blockを待たせる
227 </li>
228 <li>
229 待ち合わせには Cerium の wait for を使用する。
230 </li>
231 </ul>
232 </div>
233
234 <div class='cover'>
235 <h3>I/O 専用 thread での Blocked Read の実装</h3>
236 <br>
237 <img src='images/IO_0blockread.png' style="height:350px">
238 <ul>
239 <li>priority が最優先されるので、Blocked Read Task に割り込みが行われなくなる<br>
240 <li>pthread_setschedparam にて実装<br>
241 </li>
242 </ul>
243 </div>
244
245 <div class="cover">
246 <h3>I/O 専用の thread を使用しない場合</h3>
247 <br>
248 <img src='images/SPE_ANYblockread.png' style="height:350px">
249 <ul>
250 <li>Blocked Read は連続で行われなければならない。<br>しかし、Task が割り振られてしまう可能性がある。 </li>
251 </ul>
252 </div>
253
254 <div class='cover'>
255 <h3>実験環境</h3>
256 <br>
257 <ul>
258 <li> Mac OS X 10.9.1</li>
259 <li> 2*2.66 GHz 6-Core Intel Xeon</li>
260 <li> Memory 16GB 1333MHz DDR3</li>
261 <li> HHD 1TB</li>
262 <li> file size : 約 10 GB</li>
263 <li> ファイルに対して Boyer-Moore String Seaech で文字列検索をかける </li>
264 <li> ファイルの読み込みから結果までを測定</li>
265 </ul>
266 </div>
267
268
269 <div class='cover'>
270 <table border="2" cellpadding="0" cellspacing="0">
271 <tbody>
272 <tr>
273 <td>read mode</td>
274 <td>CPU num</td>
275 <td>ave time(s)</td>
276 </tr>
277 <tr>
278 <td>mmap</td>
279 <td>2</td>
280 <td>106.2</td>
281 </tr>
282 <tr>
283 <td bgcolor="#ffffcc">mmap</td>
284 <td bgcolor="#ffffcc">12</td>
285 <td bgcolor="#ffffcc">154.6</td>
286 </tr>
287 <tr>
288 <td>一括Read</td>
289 <td>12</td>
290 <td>114.9</td>
291 </tr>
292 <tr>
293 <td>Blocked Read(SPE_ANY)</td>
294 <td>12</td>
295 <td>106.0</td>
296 </tr>
297 <tr>
298 <td bgcolor="#ffffcc">Blocked Read(IO_0)</td>
299 <td bgcolor="#ffffcc">(IO) 1 + (Task) 11</td>
300 <td bgcolor="#ffffcc">99.2</td>
301 </tr>
302 </tbody>
303 </table>
304
305 <ul>
306 <li> Blocked Read & IO_0 が mmap より<font color=red>1.55倍</font>速度が向上<br> </li>
307 <li> Blocked Read を IO 専用 thread で実装すると、<font color=red>6%</font>改善<br> </li>
308 <!--
309 <li> mmap では 1つ1つの Task がファイルの読み込みを行ってしまうため、読み込み回数が多くなり実行速度が遅くなったと考えられる。 </li>
310
311 -->
312 <li> mmap で並列の Task で走らせると 1つ1つの Task がファイルを読み込み、ランダムアクセスとなって<br>しまうため速度が遅くなってしまう。</li>
313 </ul>
314 </div>
315
316
317 <div class='cover'>
318 <h3>まとめ</h3>
319 <ul>
320 <li> I/O と Task を分離し、同時に動くように改良した。 </li>
321 <li> I/O 専用の Thread の追加 </li>
322 <li>
323 I/O を含む Task をで並列実装するときに mmap では不向きであり、
324 Blocked Read で読み込みを制御したほうが効果的。
325 </li>
326 </ul>
327 <h3 class="yellow">今後の課題</h3>
328 <ul>
329 <li> Cerium の API として実装 </li>
330 <li>
331 様々な実装の試み<br>(I/O threads を 2つ、分割 mmap・・・)
332 </li>
333 <li>
334 grepの実装
335 </li>
336 </ul>
337 </div>
338
339 <div class='cover'>
340 </div>
341
342 <div class="cover">
343 </div>
344
345 <div class='cover'>
346 </div>
347
348
349 <div class='cover'>
350 </div>
351
352
353 <div class='cover'>
354 </div>
355
356 <div class='cover'>
357 </div>
358
359 <div class="cover">
360 </div>
361
362 </div> <!-- presentation -->
363 </body>
364 </html>