Mercurial > hg > Papers > 2018 > tobaru-sigos
comparison Slide/prosym.html @ 10:d4e58a38aae7
fix
author | tobaru |
---|---|
date | Tue, 22 May 2018 10:13:39 +0900 |
parents | 5790bdc1d515 |
children | 6fdcb5241bda |
comparison
equal
deleted
inserted
replaced
9:5790bdc1d515 | 10:d4e58a38aae7 |
---|---|
84 | 84 |
85 <div class='slide '> | 85 <div class='slide '> |
86 <!-- === begin markdown block === | 86 <!-- === begin markdown block === |
87 | 87 |
88 generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15] | 88 generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15] |
89 on 2018-05-21 16:36:00 +0900 with Markdown engine kramdown (1.13.2) | 89 on 2018-05-22 10:11:16 +0900 with Markdown engine kramdown (1.13.2) |
90 using options {} | 90 using options {} |
91 --> | 91 --> |
92 | 92 |
93 <!-- _S9SLIDE_ --> | 93 <!-- _S9SLIDE_ --> |
94 <h2 id="gears-os">Gears OS</h2> | 94 <h2 id="gears-os">Gears OS</h2> |
104 | 104 |
105 | 105 |
106 </div> | 106 </div> |
107 <div class='slide '> | 107 <div class='slide '> |
108 <!-- _S9SLIDE_ --> | 108 <!-- _S9SLIDE_ --> |
109 <h2 id="api-">API と実装の分離</h2> | 109 <h2 id="section">スライドの流れ</h2> |
110 <ul> | 110 <ul> |
111 <li>Gears OS は Continuation based C(以下、CbC)によって記述されている。</li> | 111 <li> |
112 <li>CbC は Code Gear と Data Gear の単位でプログラムを記述していて、システムやアプリケーションを作る際に、この2つは柔軟に再利用する必要がある。</li> | 112 <font color="red">Interface</font> |
113 <li>この時に、機能を接続する API と実装の分離が可能であることが望ましい。</li> | 113 </li> |
114 <li>並列API</li> | |
115 <li>CbC</li> | |
116 <li>Gears OS における並列実行</li> | |
117 <li>比較</li> | |
118 <li>今後の課題</li> | |
114 </ul> | 119 </ul> |
115 | 120 |
116 | 121 |
117 </div> | 122 </div> |
118 <div class='slide '> | 123 <div class='slide '> |
129 </div> | 134 </div> |
130 <div class='slide '> | 135 <div class='slide '> |
131 <!-- _S9SLIDE_ --> | 136 <!-- _S9SLIDE_ --> |
132 <h2 id="gears-os--interface">Gears OS の Interface</h2> | 137 <h2 id="gears-os--interface">Gears OS の Interface</h2> |
133 <ul> | 138 <ul> |
134 <li>この時、Code Gear と Deta Gear は Interface と呼ばれるまとまり(モジュール)で記述される。</li> | 139 <li>Code Gear と Deta Gear は Interface と呼ばれるまとまり(モジュール)で記述される。 |
135 <li>Interface 作成時に Code Gear の集合を指定することにより複数の実装を持つことができる。</li> | 140 <ul> |
141 <li>Gears OS のモジュール化</li> | |
142 </ul> | |
143 </li> | |
144 <li>Interface 作成時に Code Gear の集合を指定することにより複数の実装(並列処理)を持つことができる。</li> | |
136 <li>Interface は Data Gear で記述されて、Meta Deta Gear と呼ばれる。</li> | 145 <li>Interface は Data Gear で記述されて、Meta Deta Gear と呼ばれる。</li> |
137 <li>Java などの Class に相当する。</li> | 146 <li>Java などの Class に相当する。</li> |
138 <li>Interface を外から呼び出すための Code Gear 群の型</li> | 147 <li>Data Gear に Interface を呼び出す時に必要となる引数を全て格納する</li> |
139 <li>Interface を呼び出す時に必要となる引数を全て格納する Data Gear</li> | 148 </ul> |
140 <li>実装に使う Code Gear の番号が含まれている。</li> | 149 |
141 <li>Code Gear の番号を変更することによって異なる実装を実現できる</li> | 150 |
142 </ul> | 151 </div> |
143 | 152 <div class='slide '> |
144 | 153 <!-- _S9SLIDE_ --> |
145 </div> | 154 <h2 id="section-1">スライドの流れ</h2> |
146 <div class='slide '> | |
147 <!-- _S9SLIDE_ --> | |
148 <h2 id="api">並列API</h2> | |
149 <ul> | |
150 <li>Geas OS 信頼性を保証するために、モジュールシステムが必要である。</li> | |
151 <li>本研究では、モジュールシステムとその応用である並列APIについて考察する。</li> | |
152 <li>並列APIは継続を基本とした関数型プログラミングと両立する必要があり、ここでは CbC の goto 文を拡張した par goto を導入する。</li> | |
153 </ul> | |
154 | |
155 | |
156 </div> | |
157 <div class='slide '> | |
158 <!-- _S9SLIDE_ --> | |
159 <h2 id="section">スライドの流れ</h2> | |
160 <ul> | 155 <ul> |
161 <li>Interface</li> | 156 <li>Interface</li> |
162 <li> | 157 <li> |
163 <font color="red">CbC</font> | 158 <font color="red">並列API</font> |
164 </li> | 159 </li> |
160 <li>CbC</li> | |
165 <li>Gears OS における並列実行</li> | 161 <li>Gears OS における並列実行</li> |
166 <li>比較</li> | 162 <li>比較</li> |
167 <li>今後の課題</li> | 163 <li>今後の課題</li> |
168 </ul> | 164 </ul> |
169 | 165 |
170 | 166 |
171 </div> | 167 </div> |
172 <div class='slide '> | 168 <div class='slide '> |
173 <!-- _S9SLIDE_ --> | 169 <!-- _S9SLIDE_ --> |
170 <h2 id="api">並列API</h2> | |
171 <ul> | |
172 <li>Geas OS 信頼性を保証(テスト)するために、モジュールシステムが必要である。</li> | |
173 <li>本研究では、モジュールシステムとその応用である並列APIについて考察する。</li> | |
174 <li>並列APIは継続を基本とした関数型プログラミングと両立する必要があり、ここでは CbC の goto 文を拡張した <strong>par goto</strong> を導入する。 | |
175 <ul> | |
176 <li>Interface でモジュール化</li> | |
177 <li>応用として par goto を使って 並列API を実装</li> | |
178 </ul> | |
179 </li> | |
180 </ul> | |
181 | |
182 | |
183 </div> | |
184 <div class='slide '> | |
185 <!-- _S9SLIDE_ --> | |
186 <h2 id="section-2">スライドの流れ</h2> | |
187 <ul> | |
188 <li>Interface</li> | |
189 <li>並列API</li> | |
190 <li> | |
191 <font color="red">CbC</font> | |
192 </li> | |
193 <li>Gears OS における並列実行</li> | |
194 <li>比較</li> | |
195 <li>今後の課題</li> | |
196 </ul> | |
197 | |
198 | |
199 </div> | |
200 <div class='slide '> | |
201 <!-- _S9SLIDE_ --> | |
174 <h2 id="cbc">CbC</h2> | 202 <h2 id="cbc">CbC</h2> |
175 <ul> | 203 <ul> |
176 <li>ノーマルレベルとメタレベルの計算を1つの言語で表現できる言語として、本研究室で設計した CbC を用いる。</li> | 204 <li>ノーマルレベルとメタレベルの計算をまとめて表現できる言語として、本研究室で設計した CbC を用いる。 |
177 <li>ノーマルレベルの計算 | 205 <ul> |
178 <ul> | 206 <li>ノーマルレベルの計算 |
179 <li>コンピュータの計算はプログラミング言語で行われる。</li> | |
180 <li>その部分をノーマルレベルの計算と呼ぶ。</li> | |
181 </ul> | |
182 </li> | |
183 <li>メタレベルの計算 | |
184 <ul> | |
185 <li>コードが実行される際の以下の部分が、メタレベルの計算という。 | |
186 <ul> | 207 <ul> |
187 <li>処理系の詳細や使用する資源</li> | 208 <li>コンピュータの計算はプログラミング言語で行われる。</li> |
188 <li>コードの仕様や型などの部分</li> | 209 <li>その部分をノーマルレベルの計算と呼ぶ。</li> |
189 </ul> | 210 </ul> |
190 </li> | 211 </li> |
212 <li>メタレベルの計算 | |
213 <ul> | |
214 <li>コードが実行される際の以下の部分が、メタレベルの計算という。 | |
215 <ul> | |
216 <li>処理系の詳細や使用する資源</li> | |
217 <li>コードの仕様や型などの部分</li> | |
218 </ul> | |
219 </li> | |
220 </ul> | |
221 </li> | |
191 </ul> | 222 </ul> |
192 </li> | 223 </li> |
193 </ul> | 224 </ul> |
194 | 225 |
195 | 226 |
196 </div> | 227 </div> |
197 <div class='slide '> | 228 <div class='slide '> |
198 <!-- _S9SLIDE_ --> | 229 <!-- _S9SLIDE_ --> |
199 <h2 id="cbc-1">CbC</h2> | 230 <h2 id="cbc-1">CbC</h2> |
200 <ul> | 231 <ul> |
201 <li>CbC を用いることで、ノーマルレベルの計算の信頼性をメタレベルから保証できるようになる。</li> | 232 <li>CbC を用いることで、ノーマルレベルの計算の信頼性をメタレベルから保証できるようになる。 |
202 <li>CbC を用いてCode Gear と Data Gear を導入する。</li> | 233 <ul> |
234 <li>処理の詳細やコードの型を数え上げる事による信頼性の保証</li> | |
235 </ul> | |
236 </li> | |
237 <li>CbC を用いてCode Gear と Data Gear を導入する。 | |
238 <ul> | |
239 <li>Code Gear は並列処理の単位として利用</li> | |
240 <li>Data Gear はデータそのもの</li> | |
241 </ul> | |
242 </li> | |
203 </ul> | 243 </ul> |
204 | 244 |
205 | 245 |
206 </div> | 246 </div> |
207 <div class='slide '> | 247 <div class='slide '> |
225 | 265 |
226 | 266 |
227 </div> | 267 </div> |
228 <div class='slide '> | 268 <div class='slide '> |
229 <!-- _S9SLIDE_ --> | 269 <!-- _S9SLIDE_ --> |
230 <h2 id="section-1">スライドの流れ</h2> | 270 <h2 id="section-3">スライドの流れ</h2> |
231 <ul> | 271 <ul> |
272 <li>Interface</li> | |
273 <li>並列API</li> | |
232 <li>CbC</li> | 274 <li>CbC</li> |
233 <li> | 275 <li> |
234 <font color="red">Gears OS における並列実行</font> | 276 <font color="red">Gears OS における並列実行</font> |
235 </li> | 277 </li> |
236 <li>比較</li> | 278 <li>比較</li> |
278 <h2 id="context">Context</h2> | 320 <h2 id="context">Context</h2> |
279 <ul> | 321 <ul> |
280 <li>1つのスレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。</li> | 322 <li>1つのスレッド内で使われる Interface の Code Gear と Data Gear は Meta Data Gear に格納される。</li> |
281 <li>この Meta Data Gear を Context と呼ぶ。</li> | 323 <li>この Meta Data Gear を Context と呼ぶ。</li> |
282 <li>Context を複製して複数の CPU に割り当てることにより並列実行が可能になる。</li> | 324 <li>Context を複製して複数の CPU に割り当てることにより並列実行が可能になる。</li> |
325 <li>ノーマルレベルでは見る事ができない。</li> | |
283 <li>Context は Task でもある。</li> | 326 <li>Context は Task でもある。</li> |
284 <li>Task は実行する Code Gear と Data Gear を全て持っている。</li> | 327 <li>Task は実行する Code Gear と Data Gear を全て持っている。</li> |
285 </ul> | 328 </ul> |
286 | 329 <div style="text-align: center;"> |
287 | 330 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" /> |
288 </div> | 331 </div> |
289 <div class='slide '> | 332 |
290 <!-- _S9SLIDE_ --> | 333 |
291 <h2 id="par-goto">par goto</h2> | 334 </div> |
292 <ul> | 335 <div class='slide '> |
293 <li>Context の複製には par goto を用いる。</li> | 336 <!-- _S9SLIDE_ --> |
294 <li>他に、入力の同期、タスクスケジューラへの Context の登録が行われる。</li> | 337 <h2 id="taskmanager">TaskManager</h2> |
295 </ul> | 338 <ul> |
339 <li>Task を実行する Worker の生成</li> | |
340 <li>Worker の管理</li> | |
341 <li>Task の送信</li> | |
342 </ul> | |
343 <div style="text-align: center;"> | |
344 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" /> | |
345 </div> | |
346 | |
347 | |
348 </div> | |
349 <div class='slide '> | |
350 <!-- _S9SLIDE_ --> | |
351 <h2 id="worker">Worker</h2> | |
352 <ul> | |
353 <li>TaskQueue から Task である Context を取得</li> | |
354 <li>Task の Code Gear を実行</li> | |
355 <li>Output Data Gear への書き出し</li> | |
356 </ul> | |
357 <div style="text-align: center;"> | |
358 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" /> | |
359 </div> | |
296 | 360 |
297 | 361 |
298 </div> | 362 </div> |
299 <div class='slide '> | 363 <div class='slide '> |
300 <!-- _S9SLIDE_ --> | 364 <!-- _S9SLIDE_ --> |
304 <li>読み込みは複数であってもいい</li> | 368 <li>読み込みは複数であってもいい</li> |
305 <li>Agda 側で、並列実行を Code Gear の順次実行としてシミュレーションするため</li> | 369 <li>Agda 側で、並列実行を Code Gear の順次実行としてシミュレーションするため</li> |
306 <li>このような実行になるように Gears OS の実装を行う</li> | 370 <li>このような実行になるように Gears OS の実装を行う</li> |
307 </ul> | 371 </ul> |
308 | 372 |
309 | 373 <div style="text-align: center;"> |
310 </div> | 374 <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" /> |
311 <div class='slide '> | 375 </div> |
312 <!-- _S9SLIDE_ --> | 376 |
313 <h2 id="exit">__exit</h2> | 377 <h1 id="par-goto">par goto</h1> |
314 <ul lang="c"> | 378 <ul> |
315 <li>複数実行した時に、共有 Data Gear に書き込みを成功したかを確認する(commit)</li> | 379 <li>Context(Task) の複製には par goto を用いる。</li> |
380 <li>他に、入力の同期、タスクスケジューラへの Context の登録が行われる。</li> | |
381 <li>複数実行した時に、共有 Data Gear に書き込みを成功したかを確認(commit)するために __exit を使用する。</li> | |
316 <li>par goto で生成された Task は __exit に継続することで終了する</li> | 382 <li>par goto で生成された Task は __exit に継続することで終了する</li> |
317 <li>GearsOS の Task は Output Data Gear を生成した時点で終了する</li> | 383 <li>GearsOS の Task は Output Data Gear を生成した時点で終了する</li> |
318 <li>そのため、par goto では直接 __exit に継続せず、Output Data Gear への書き出し処理に継続される。</li> | 384 <li>そのため、par goto では直接 __exit に継続せず、Output Data Gear への書き出し処理に継続される。</li> |
319 <li>Code Gear と Data Gear の依存関係をノーマルレベルで記述できるようになる。</li> | 385 </ul> |
320 </ul> | 386 |
321 <pre><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) { | 387 <pre lang="c"><code>__code code1(Integer *integer1, Integer * integer2, Integer *output) { |
322 par goto add(integer1, integer2, output, __exit); | 388 par goto add(integer1, integer2, output, __exit); |
323 goto code2(); | 389 goto code2(); |
324 } | 390 } |
325 </code></pre> | 391 </code></pre> |
326 | 392 |
340 context->task->idgCount = 2; | 406 context->task->idgCount = 2; |
341 context->task->idg = context->task->dataNum; | 407 context->task->idg = context->task->dataNum; |
342 context->task->maxIdg = context->task->idg + 2; | 408 context->task->maxIdg = context->task->idg + 2; |
343 context->task->odg = context->task->maxIdg; | 409 context->task->odg = context->task->maxIdg; |
344 context->task->maxOdg = context->task->odg + 1; | 410 context->task->maxOdg = context->task->odg + 1; |
345 | 411 ... |
346 // create Data Gear Queue | |
347 GET_META(integer1)->wait = createSynchronizedQueue(context); | |
348 GET_META(integer2)->wait = createSynchronizedQueue(context); | |
349 GET_META(integer3)->wait = createSynchronizedQueue(context); | |
350 | |
351 // set Input Data Gear | |
352 context->task->data[context->task->idg+0] = (union Data*)integer1; | |
353 context->task->data[context->task->idg+1] = (union Data*)integer2; | |
354 | |
355 // set Output Data Gear | |
356 context->task->data[context->task->odg+0] = (union Data*)integer3; | |
357 | |
358 | |
359 // set TaskManager->spawns parameter | 412 // set TaskManager->spawns parameter |
360 Gearef(context, TaskManager)->taskList = context->taskList; | 413 Gearef(context, TaskManager)->taskList = context->taskList; |
361 Gearef(context, TaskManager)->next1 = C_code2; | 414 Gearef(context, TaskManager)->next1 = C_code2; |
362 goto parGotoMeta(context, C_code2); | 415 goto parGotoMeta(context, C_code2); |
363 } | 416 } |
365 | 418 |
366 | 419 |
367 </div> | 420 </div> |
368 <div class='slide '> | 421 <div class='slide '> |
369 <!-- _S9SLIDE_ --> | 422 <!-- _S9SLIDE_ --> |
370 <h2 id="section-2">スライドの流れ</h2> | 423 <h2 id="section-4">スライドの流れ</h2> |
371 <ul> | 424 <ul> |
425 <li>Interface</li> | |
426 <li>並列API</li> | |
372 <li>CbC</li> | 427 <li>CbC</li> |
373 <li>Gears OS における並列実行</li> | 428 <li>Gears OS における並列実行</li> |
374 <li> | 429 <li> |
375 <font color="red">比較</font> | 430 <font color="red">比較</font> |
376 </li> | 431 </li> |
402 <li>Model : Dell PowerEdgeR630</li> | 457 <li>Model : Dell PowerEdgeR630</li> |
403 <li>Memory : 768GB</li> | 458 <li>Memory : 768GB</li> |
404 <li>CPU : 2 × 18-Core Intel Xeon 2.30GHz</li> | 459 <li>CPU : 2 × 18-Core Intel Xeon 2.30GHz</li> |
405 </ul> | 460 </ul> |
406 </li> | 461 </li> |
407 <li>CPU 環境 | 462 <li>GPU 環境 |
408 <ul> | 463 <ul> |
409 <li>GPU : GeForce GTX 1070</li> | 464 <li>GPU : GeForce GTX 1070</li> |
410 <li>Cores : 1920</li> | 465 <li>Cores : 1920</li> |
411 <li>ClockSpeed : 1683MHZ</li> | 466 <li>ClockSpeed : 1683MHZ</li> |
412 <li>Memory Size : 8GB GDDR5</li> | 467 <li>Memory Size : 8GB GDDR5</li> |
475 | 530 |
476 | 531 |
477 </div> | 532 </div> |
478 <div class='slide '> | 533 <div class='slide '> |
479 <!-- _S9SLIDE_ --> | 534 <!-- _S9SLIDE_ --> |
480 <h2 id="section-3">評価の考察</h2> | 535 <h2 id="section-5">評価の考察</h2> |
481 <ul> | 536 <ul> |
482 <li>コア数が上がるごとに、処理速度が上がっている。</li> | 537 <li>コア数が上がるごとに、処理速度が上がっている。 |
538 <ul> | |
539 <li>台数効果が見られる</li> | |
540 </ul> | |
541 </li> | |
483 <li>GPUでの実行は 32CPU に比べて約7.2倍の速度向上が見られた。</li> | 542 <li>GPUでの実行は 32CPU に比べて約7.2倍の速度向上が見られた。</li> |
484 <li>通信速度を含めると 16CPU より遅い。</li> | 543 <li>通信速度を含めると 16CPU より遅い。 |
485 </ul> | 544 <ul> |
545 <li>通信速度によるオーバーヘッド</li> | |
546 </ul> | |
547 </li> | |
548 </ul> | |
549 | |
550 <table border="1" align="center" width="50%"> | |
551 <tbody> | |
552 <tr> | |
553 <td style="text-align: center;">Processor</td> | |
554 <td style="text-align: center;">Time(ms)</td> | |
555 </tr> | |
556 <tr> | |
557 <td style="text-align: center;">1 CPU</td> | |
558 <td style="text-align: right;">1181.215</td> | |
559 </tr> | |
560 <tr> | |
561 <td style="text-align: center;">2 CPUs</td> | |
562 <td style="text-align: right;">627.914</td> | |
563 </tr> | |
564 <tr> | |
565 <td style="text-align: center;">4 CPUs</td> | |
566 <td style="text-align: right;">324.059</td> | |
567 </tr> | |
568 <tr> | |
569 <td style="text-align: center;">8 CPUs</td> | |
570 <td style="text-align: right;">159.932</td> | |
571 </tr> | |
572 <tr> | |
573 <td style="text-align: center;">16 CPUs</td> | |
574 <td style="text-align: right;">85.518</td> | |
575 </tr> | |
576 <tr> | |
577 <td style="text-align: center;">32 CPUs</td> | |
578 <td style="text-align: right;">43.496</td> | |
579 </tr> | |
580 <tr> | |
581 <td style="text-align: center;">GPU</td> | |
582 <td style="text-align: right;">127.018</td> | |
583 </tr> | |
584 <tr> | |
585 <td style="text-align: center;">GPU(kernel only)</td> | |
586 <td style="text-align: right;">6.018</td> | |
587 </tr> | |
588 </tbody> | |
589 </table> | |
486 | 590 |
487 | 591 |
488 </div> | 592 </div> |
489 <div class='slide '> | 593 <div class='slide '> |
490 <!-- _S9SLIDE_ --> | 594 <!-- _S9SLIDE_ --> |
500 | 604 |
501 | 605 |
502 </div> | 606 </div> |
503 <div class='slide '> | 607 <div class='slide '> |
504 <!-- _S9SLIDE_ --> | 608 <!-- _S9SLIDE_ --> |
505 <h2 id="section-4">スライドの流れ</h2> | 609 <h2 id="section-6">スライドの流れ</h2> |
506 <ul> | 610 <ul> |
611 <li>Interface</li> | |
612 <li>並列API</li> | |
507 <li>CbC</li> | 613 <li>CbC</li> |
508 <li>Gears OS における並列実行</li> | 614 <li>Gears OS における並列実行</li> |
509 <li>比較</li> | 615 <li>比較</li> |
510 <li> | 616 <li> |
511 <font color="red">今後の課題</font> | 617 <font color="red">今後の課題</font> |
514 | 620 |
515 | 621 |
516 </div> | 622 </div> |
517 <div class='slide '> | 623 <div class='slide '> |
518 <!-- _S9SLIDE_ --> | 624 <!-- _S9SLIDE_ --> |
519 <h2 id="section-5">今後の課題</h2> | 625 <h2 id="section-7">スライドの流れ</h2> |
626 <ul> | |
627 <li>CbC</li> | |
628 <li>Gears OS における並列実行</li> | |
629 <li>比較</li> | |
630 <li> | |
631 <font color="red">今後の課題</font> | |
632 </li> | |
633 </ul> | |
634 | |
635 | |
636 </div> | |
637 <div class='slide '> | |
638 <!-- _S9SLIDE_ --> | |
639 <h2 id="section-8">今後の課題</h2> | |
520 <ul> | 640 <ul> |
521 <li>Go 言語との比較から 1CPU での動作が遅いことがわかった。</li> | 641 <li>Go 言語との比較から 1CPU での動作が遅いことがわかった。</li> |
522 <li>par goto 文を使用することで、Contextを生成し、並列処理を行う。</li> | 642 <li>par goto 文を使用することで、Contextを生成し、並列処理を行う。</li> |
523 <li>しかし、Context はメモリ空間の確保や使用する全ての Code Gear Data Gear の設定をする必要があり、生成に時間がかかってしまう事が原因。</li> | 643 <li>しかし、Context はメモリ空間の確保や使用する全ての Code Gear Data Gear の設定をする必要があり、生成に時間がかかってしまう事が原因。</li> |
524 <li>処理が軽い場合は Context を生成しないようなチューニングが必要である。</li> | 644 <li>処理が軽い場合は Context を生成しないようなチューニングが必要である。</li> |
525 </ul> | 645 </ul> |
646 | |
647 | |
648 </div> | |
649 <div class='slide '> | |
650 <!-- _S9SLIDE_ --> | |
651 <h2 lang="c" id="perl">Perlスクリプトによる変換</h2> | |
652 <pre><code>__code code1(struct Context *context, Integer *integer1, Integer *integer2, Integer *output) { | |
653 // create context | |
654 context->task = NEW(struct Context); | |
655 initContext(context->task); | |
656 | |
657 // set task parameter | |
658 context->task->next = C_add; | |
659 context->task->idgCount = 2; | |
660 context->task->idg = context->task->dataNum; | |
661 context->task->maxIdg = context->task->idg + 2; | |
662 context->task->odg = context->task->maxIdg; | |
663 context->task->maxOdg = context->task->odg + 1; | |
664 | |
665 // create Data Gear Queue | |
666 GET_META(integer1)->wait = createSynchronizedQueue(context); | |
667 GET_META(integer2)->wait = createSynchronizedQueue(context); | |
668 GET_META(integer3)->wait = createSynchronizedQueue(context); | |
669 | |
670 // set Input Data Gear | |
671 context->task->data[context->task->idg+0] = (union Data*)integer1; | |
672 context->task->data[context->task->idg+1] = (union Data*)integer2; | |
673 | |
674 // set Output Data Gear | |
675 context->task->data[context->task->odg+0] = (union Data*)integer3; | |
676 | |
677 // add taskList Element | |
678 struct Element* element; | |
679 element = &ALLOCATE(context, Element)->Element; | |
680 element->data = (union Data*)context->task; | |
681 element->next = context->taskList; | |
682 context->taskList = element; | |
683 | |
684 // set TaskManager->spawns parameter | |
685 Gearef(context, TaskManager)->taskList = context->taskList; | |
686 Gearef(context, TaskManager)->next1 = C_code2; | |
687 goto meta(context, C_code2); | |
688 } | |
689 </code></pre> | |
526 <!-- === end markdown block === --> | 690 <!-- === end markdown block === --> |
527 </div> | 691 </div> |
528 | 692 |
529 | 693 |
530 </div><!-- presentation --> | 694 </div><!-- presentation --> |