Mercurial > hg > Papers > 2014 > masakoha-thesis > final
annotate slide/index.html @ 77:5903492cd498
fix slide
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 26 Feb 2014 20:15:41 +0900 |
parents | e13727d01f7a |
children | 0bf2c2ae2bf6 |
rev | line source |
---|---|
13 | 1 <!DOCTYPE html> |
2 | |
3 <html> | |
4 <head> | |
5 <title>Presentation</title> | |
15
9b071b32e3de
add some files and write slide
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
6 |
13 | 7 <meta charset='utf-8'> |
8 <script | |
9 src='./slides.js'></script> | |
10 </head> | |
11 | |
12 <style> | |
13 /* Your individual styles here, or just use inline styles if that’s | |
14 what you want. */ | |
15 | |
16 </style> | |
17 | |
18 <body style='display: none'> | |
19 <section class='slides layout-regular template-default'> | |
20 | |
21 <!-- | |
22 Your slides (<article>s) go here. Delete or comment out the | |
23 slides below. | |
24 --> | |
25 <article > | |
14 | 26 <h1>Cerium による並列処理向け I/O の設計と実装</h1> |
76 | 27 <h3 class="title">Masataka Kohagura 27th, February</h3> |
13 | 28 <div align="right">担当教官 : 河野 真治</div> |
29 </article> | |
19
36958c5e0b90
add slide pages 8-17
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
30 |
32 | 31 <article> |
76 | 32 <h3>研究概要</h3> |
33 <p> | |
34 当研究室ではCellおよびLinux、 Mac OS X上で動く並列プログラミングフレームワーク、 Ceriumの開発・改良を行っている | |
35 </p> | |
36 <img src='images/resources.png' style="height:200px" align="middle"> | |
13 | 37 <p> |
76 | 38 本研究では |
39 <font color=red> | |
40 <ul> | |
41 <li>ファイル読み込みと文字列検索の分離 | |
42 </li> | |
43 <li>I/O専用の Threadを追加 | |
44 </li> | |
45 </ul> | |
46 </font> | |
13 | 47 </p> |
48 <p> | |
76 | 49 I/0 を含む Task の動作改善を行った |
21 | 50 </p> |
76 | 51 |
52 | |
13 | 53 </article> |
14 | 54 |
27 | 55 |
13 | 56 <article> |
76 | 57 <h3>Cerium Task Manager</h3> |
58 <table border="0" cellpadding="0" cellspacing="0"> | |
59 <tbody> | |
60 <tr> | |
61 <td><img src='images/ceriumtaskmanager.png' style="height:280px"></td> | |
62 <td> | |
63 <ol> | |
64 <li>Taskを生成</li> | |
65 <li>依存関係のチェック</li> | |
66 <li>Schedulerに転送</li> | |
67 <li>並列実行</li> | |
68 </ol> | |
69 </td> | |
70 </tr> | |
71 </tbody> | |
72 </table> | |
73 <p> | |
74 I/O 専用の Thread を用意することにより、読み込みに専念させることができる | |
75 </p> | |
13 | 76 </article> |
15
9b071b32e3de
add some files and write slide
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
77 |
13 | 78 <article> |
26
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
79 <h3>I/O を含む Task の説明</h3> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
80 <br> |
76 | 81 <img src='images/includeIOTask.png' style="height:270px" align="middle"> |
26
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
82 <ol> |
74 | 83 <li>テキストファイルの読み込み後、ファイルをある一定の大きさに分割する</li> |
84 <li>分割したテキストファイルに対して、それぞれ計算を行う</li> | |
26
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
85 <li>計算した結果を集計する</li> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
86 </ol> |
16
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
87 </article> |
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
88 |
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
89 <article> |
33 | 90 <h3>mmap の特徴</h3> |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
91 <table border="0" cellpadding="0" cellspacing="0"> |
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
92 <tbody> |
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
93 <tr> |
31 | 94 <td><img src='images/mmap.png' style="height:350px" align="middle"></td> |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
95 <td> |
26
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
96 <ul> |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
97 <font size = 5> |
33 | 98 <li> |
74 | 99 mmap は、C 及び C++ で使用でき、ファイルを読み込む API である。 |
33 | 100 </li> |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
101 <li> |
74 | 102 code がシンプル <br>(メモリを自分自身で malloc せず、read を書いて読み込まなくていいため) |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
103 </li> |
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
104 </font> |
26
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
105 </ul> |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
106 </td> |
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
107 </tr> |
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
108 </tbody> |
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
109 </table> |
16
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
110 |
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
111 <ul> |
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
112 </ul> |
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
113 </article> |
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
114 |
33 | 115 <article> |
116 <h3>mmapでの実装の問題点</h3> | |
117 <ul> | |
118 <li> | |
74 | 119 mmap でファイルを読み込むと、ファイルはメモリ上に即座に展開されるわけではない。 |
33 | 120 </li> |
121 <li> | |
74 | 122 ファイルがメモリに展開されるタイミングは、そのファイルに対して文字列検索を行うときである。<br><br> |
76 | 123 <font color=red> |
77 | 124 →つまり、文字列検索が行われるときに初めてファイルが読み込まれるので、ファイル読み込みと文字列検索が分離できない。 |
76 | 125 </font> |
33 | 126 </li> |
127 </ul> | |
128 </article> | |
129 | |
130 | |
16
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
131 <article> |
27 | 132 <h3>Blocked Read の設計</h3> |
16
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
133 <br> |
31 | 134 <img src='images/divide_read.png' style="height:250px" align="middle" > |
16
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
135 <br> |
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
136 |
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
137 <ul> |
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
138 <li> |
74 | 139 メモリへの呼び出しを自分で書ける(制御できる) |
16
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
140 </li> |
77 | 141 <li> |
142 Read は 連続で動作する。 | |
143 </li> | |
16
56cd6800acb5
write slide No.11 & add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
144 </ul> |
76 | 145 以後、文字列検索を行う処理を Task と定義する。 |
13 | 146 </article> |
15
9b071b32e3de
add some files and write slide
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
147 |
76 | 148 <article> |
27 | 149 <h3>Blocked Read の実装</h3> |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
150 <br> |
31 | 151 <img src='images/blockread.png' style="height:250px"align="middle"> |
19
36958c5e0b90
add slide pages 8-17
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
152 <br> |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
153 |
25
3385af0bca0f
write block read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
154 <ul> |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
155 <li> |
77 | 156 Task を 1 つずつではなく、ブロック単位で生成して起動する<br> |
74 | 157 (1つずつ生成すると、生成された Task でメモリを圧迫するため) |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
158 </li> |
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
159 <li> |
76 | 160 Blocked Read Task が読み込み終わるまで、Task Blockを待たせる<br> |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
161 </li> |
25
3385af0bca0f
write block read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
24
diff
changeset
|
162 </ul> |
23
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
163 </article> |
a452d8f104bd
divede read rename to Block Read
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
21
diff
changeset
|
164 |
76 | 165 <!-- |
28 | 166 <article class = 'smaller'> |
167 <h3>I/O 専用の therad を追加 (1/2)</h3> | |
168 <br> | |
31 | 169 <img src='images/SPE_ANYblockread.png' style="height:350px"align="middle"> |
170 <ul> | |
171 <li> | |
74 | 172 Task 単位で使用するデバイスをセットすることができる。 |
31 | 173 </li> |
174 <li> | |
74 | 175 SPE_ANY でセットすると、Cerium Task Manager 側で自動的に CPU を割り振る。 |
31 | 176 </li> |
177 <li> | |
74 | 178 自動的に割り振るので、Blocked Read に 他のTask が割り込むおそれがある。 |
31 | 179 </li> |
180 </ul> | |
181 </article> | |
76 | 182 --> |
31 | 183 |
184 | |
76 | 185 <article> |
186 <h3>I/O 専用の therad を追加</h3> | |
31 | 187 <br> |
188 <img src='images/IO_0blockread.png' style="height:350px"> | |
189 <ul> | |
74 | 190 <li>Blocked Read Task が最優先されるので、他の Task に割り込まれなくなる<br> |
31 | 191 </li> |
192 </ul> | |
28 | 193 </article> |
194 | |
195 <article> | |
77 | 196 <h3>I/O 専用の therad を使用しない場合</h3> |
197 <br> | |
198 <img src='images/SPE_ANYblockread.png' style="height:350px"> | |
199 <ul> | |
200 <li>Blocked Read は連続で行われなければならない。<br>しかし、Task が割り振られてしまう可能性がある。 | |
201 </li> | |
202 </ul> | |
203 </article> | |
204 | |
205 <article> | |
76 | 206 <h3>実験環境</h3> |
19
36958c5e0b90
add slide pages 8-17
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
207 <br> |
26
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
208 <ul> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
209 <li> Mac OS X 10.9.1</li> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
210 <li> 2*2.66 GHz 6-Core Intel Xeon</li> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
211 <li> Memory 16GB 1333MHz DDR3</li> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
212 <li> HHD 1TB</li> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
213 <li> file size : 約 10 GB</li> |
74 | 214 <li> ファイルに対して Boyer-Moore String Seaech で文字列検索をかける </li> |
215 <li> ファイルの読み込みから結果までを測定</li> | |
26
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
216 </ul> |
19
36958c5e0b90
add slide pages 8-17
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
217 </article> |
36958c5e0b90
add slide pages 8-17
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
218 |
76 | 219 <article> |
220 <h3>実験結果</h3> | |
77 | 221 <table border="2" cellpadding="0" cellspacing="0"> |
26
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
222 <tbody> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
223 <tr> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
224 <td>read mode</td> |
76 | 225 <td>CPU num</td> |
26
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
226 <td>ave time(s)</td> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
227 </tr> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
228 <tr> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
229 <td>mmap</td> |
76 | 230 <td>2</td> |
231 <td>106.2</td> | |
232 </tr> | |
233 <tr> | |
234 <td bgcolor="#ffffcc">mmap</td> | |
235 <td bgcolor="#ffffcc">12</td> | |
236 <td bgcolor="#ffffcc">154.6</td> | |
26
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
237 </tr> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
238 <tr> |
74 | 239 <td>一括Read</td> |
76 | 240 <td>12</td> |
74 | 241 <td>114.9</td> |
242 </tr> | |
243 <tr> | |
76 | 244 <td>Blocked Read(SPE_ANY)</td> |
245 <td>12</td> | |
74 | 246 <td>106.0</td> |
247 </tr> | |
248 <tr> | |
76 | 249 <td bgcolor="#ffffcc">Blocked Read(IO_0)</td> |
250 <td bgcolor="#ffffcc">(I/0) 1 + (Task) 11</td> | |
251 <td bgcolor="#ffffcc">99.2</td> | |
74 | 252 </tr> |
26
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
253 </tbody> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
254 </table> |
54591c145fec
add experiment result
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
25
diff
changeset
|
255 |
28 | 256 <ul> |
257 <li> | |
76 | 258 Blocked Read & IO_0 が mmap より<font color=red>1.55倍</font>実行速度が向上した。<br> |
28 | 259 </li> |
260 <li> | |
76 | 261 mmap では 1つ1つの Task がファイルの読み込みを行ってしまうため、読み込み回数が多くなり実行速度が遅くなったと考えられる。 |
28 | 262 </li> |
263 </ul> | |
264 </article> | |
265 | |
266 <article> | |
74 | 267 <h3>まとめ</h3> |
28 | 268 <br> |
269 <ul> | |
270 <li> | |
77 | 271 I/O と Task を分離し、同時に動くように改良した。 |
28 | 272 </li> |
273 <li> | |
77 | 274 I/O 専用の Thread の追加 |
275 <li> | |
276 I/O を含む Task をで並列実装するときに mmap では不向きであり、 | |
277 Blocked Read で読み込みを制御したほうが効果的。 | |
278 </li> | |
279 </ul> | |
280 <h3 class="yellow">今後の課題</h3> | |
281 <ul> | |
282 <li> | |
283 Cerium の API として実装 | |
284 </li> | |
285 <li> | |
286 様々な実装の試み<br>(I/O threads を 2つ、分割 mmap・・・) | |
34 | 287 </li> |
288 </ul> | |
289 </article> | |
290 | |
291 <article> | |
292 <h3>Cerium Task の生成の例(1)</h3> | |
28 | 293 <p>(例題) multiply : 2つの数を掛け算するプログラム</p> |
294 <h3 class="yellow">main.cc の記述</h3> | |
295 <pre> | |
296 float* A, B, C; | |
297 // Task の宣言 | |
298 HTaskPtr multiply = manager->create_task(MULTIPLY_TASK); | |
299 // Task を実行する デバイスの設定 | |
300 multiply->set_cpu(SPE_ANY); | |
301 // Task に入力データのアドレスを追加 | |
302 multiply->set_inData(0, (memaddr)A, sizeof(float)*length); | |
303 multiply->set_inData(1, (memaddr)B, sizeof(float)*length); | |
304 // Task に出力データのアドレスを追加 | |
305 multiply->set_outData(0, (memaddr)C, sizeof(float)*length); | |
306 // Task へ値を1つだけ渡す | |
307 multiply->set_param(0,length); | |
308 // Task を TaskList に set する | |
309 multiply->spawn(); </pre> | |
310 </article> | |
311 | |
312 <article> | |
34 | 313 <h3> Cerium Task の生成(2)</h3> |
28 | 314 <br> |
315 <h3 class="yellow">Task の記述</h3> | |
316 <pre> | |
317 static int | |
318 multiply(SchedTask *s,void *rbuf, void *wbuf) | |
319 { | |
320 float *A,*B,*C | |
321 // 登録した inData を取得 | |
322 A = (float*)s->get_input(rbuf,0); | |
323 B = (float*)s->get_input(rbuf,1); | |
324 // 登録した outData を取得 | |
325 C = (float*)s->get_output(wbuf,0); | |
326 // 登録した param を取得 | |
327 long length=(long)s->get_param(0); | |
328 for (int i=0;i < length;i++) { | |
329 C[i] = A[i] * B[i]; | |
330 } | |
331 return 0; | |
332 } </pre> | |
333 </article> | |
334 | |
335 <article> | |
34 | 336 <h3>mmap での I/O の実装</h3> |
28 | 337 <br> |
338 <h3 class="yellow">mmap の記述</h3> | |
339 <pre> | |
340 mmap(SchedTask *s, void *in, void *out) | |
341 { | |
342 // FileReadPtr : File情報などを格納している構造体 | |
343 FileReadPtr fr = (FileReadPtr)in; | |
344 int map = MAP_PRIVATE; | |
345 | |
346 fr->read_text = | |
347 (char*)mmap(NULL,fr->filesize,PROT_READ,map,fr->fd,(off_t)0); | |
348 } | |
349 </pre> | |
350 <ul> | |
351 <li> | |
352 PROT_READ : 読み込み可 | |
353 </li> | |
354 <li> | |
355 MAP_PRIVATE : 読み込んだ領域に対して書き込みが起こると複製し、複製した領域に対して書き込みを行う | |
356 </li> | |
357 </ul> | |
358 </article> | |
359 | |
360 <article class='smaller'> | |
34 | 361 <h3>Block Read の実装(1/2)</h3> |
28 | 362 <br> |
363 <h3 class="yellow">Block Read の実装</h3> | |
364 <pre> | |
365 HTaskPtr t_read = manager->create_task(READ_TASK); | |
366 t_read->set_cpu(read_spe_cpu); | |
367 // 読み出すファイルの格納場所を設定 | |
368 t_read->set_outData(0, | |
369 w->file_mmap + w->task_spawned * w->division_size, | |
370 w->task_blocks * w->division_size); | |
371 // ファイルディスクリプタの受け渡し | |
372 t_read->set_param(0,w->fd); | |
373 // ファイル読み込みの始点 | |
374 t_read->set_param(1,w->task_spawned*w->division_size); | |
375 | |
376 // run_tasks(manager,w, w->task_blocks, t_read, t_next, w->division_size + w->extra_len); | |
377 // ここで、ファイルに対して何らかの計算を掛けるような Task を設定する | |
378 run_tasks(manager,w, w->task_blocks,・・・ ); | |
379 | |
380 // ファイル読み込みの終点 | |
381 t_read->set_param(2,w->task_spawned*w->division_size + w->extra_len); | |
382 | |
383 t_read->spawn(); | |
384 | |
385 </pre> | |
386 </article> | |
387 | |
388 <article> | |
34 | 389 <h3>Block Read の実装(2/2)</h3> |
28 | 390 <br> |
391 <h3 class="yellow"> Block Read の記述</h3> | |
392 <pre> | |
393 static int | |
394 read_task(SchedTask *s, void *rbuf, void *wbuf) | |
395 { | |
396 long fd = (long)s->get_param(0); | |
397 long start_read_position = (long)s->get_param(1); | |
398 long end_read_position = (long)s->get_param(2); | |
399 char *read_text = (char*)s->get_output(wbuf,0); | |
400 long read_size = end_read_position - start_read_position; | |
401 | |
402 pread(fd, read_text, read_size , start_read_position); | |
403 return 0; | |
404 } | |
405 </pre> | |
406 </article> | |
407 | |
19
36958c5e0b90
add slide pages 8-17
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
18
diff
changeset
|
408 |
13 | 409 </body> |
410 </html> |