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-&gt;task-&gt;idgCount = 2; 406 context-&gt;task-&gt;idgCount = 2;
341 context-&gt;task-&gt;idg = context-&gt;task-&gt;dataNum; 407 context-&gt;task-&gt;idg = context-&gt;task-&gt;dataNum;
342 context-&gt;task-&gt;maxIdg = context-&gt;task-&gt;idg + 2; 408 context-&gt;task-&gt;maxIdg = context-&gt;task-&gt;idg + 2;
343 context-&gt;task-&gt;odg = context-&gt;task-&gt;maxIdg; 409 context-&gt;task-&gt;odg = context-&gt;task-&gt;maxIdg;
344 context-&gt;task-&gt;maxOdg = context-&gt;task-&gt;odg + 1; 410 context-&gt;task-&gt;maxOdg = context-&gt;task-&gt;odg + 1;
345 411 ...
346 // create Data Gear Queue
347 GET_META(integer1)-&gt;wait = createSynchronizedQueue(context);
348 GET_META(integer2)-&gt;wait = createSynchronizedQueue(context);
349 GET_META(integer3)-&gt;wait = createSynchronizedQueue(context);
350
351 // set Input Data Gear
352 context-&gt;task-&gt;data[context-&gt;task-&gt;idg+0] = (union Data*)integer1;
353 context-&gt;task-&gt;data[context-&gt;task-&gt;idg+1] = (union Data*)integer2;
354
355 // set Output Data Gear
356 context-&gt;task-&gt;data[context-&gt;task-&gt;odg+0] = (union Data*)integer3;
357
358
359 // set TaskManager-&gt;spawns parameter 412 // set TaskManager-&gt;spawns parameter
360 Gearef(context, TaskManager)-&gt;taskList = context-&gt;taskList; 413 Gearef(context, TaskManager)-&gt;taskList = context-&gt;taskList;
361 Gearef(context, TaskManager)-&gt;next1 = C_code2; 414 Gearef(context, TaskManager)-&gt;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-&gt;task = NEW(struct Context);
655 initContext(context-&gt;task);
656
657 // set task parameter
658 context-&gt;task-&gt;next = C_add;
659 context-&gt;task-&gt;idgCount = 2;
660 context-&gt;task-&gt;idg = context-&gt;task-&gt;dataNum;
661 context-&gt;task-&gt;maxIdg = context-&gt;task-&gt;idg + 2;
662 context-&gt;task-&gt;odg = context-&gt;task-&gt;maxIdg;
663 context-&gt;task-&gt;maxOdg = context-&gt;task-&gt;odg + 1;
664
665 // create Data Gear Queue
666 GET_META(integer1)-&gt;wait = createSynchronizedQueue(context);
667 GET_META(integer2)-&gt;wait = createSynchronizedQueue(context);
668 GET_META(integer3)-&gt;wait = createSynchronizedQueue(context);
669
670 // set Input Data Gear
671 context-&gt;task-&gt;data[context-&gt;task-&gt;idg+0] = (union Data*)integer1;
672 context-&gt;task-&gt;data[context-&gt;task-&gt;idg+1] = (union Data*)integer2;
673
674 // set Output Data Gear
675 context-&gt;task-&gt;data[context-&gt;task-&gt;odg+0] = (union Data*)integer3;
676
677 // add taskList Element
678 struct Element* element;
679 element = &amp;ALLOCATE(context, Element)-&gt;Element;
680 element-&gt;data = (union Data*)context-&gt;task;
681 element-&gt;next = context-&gt;taskList;
682 context-&gt;taskList = element;
683
684 // set TaskManager-&gt;spawns parameter
685 Gearef(context, TaskManager)-&gt;taskList = context-&gt;taskList;
686 Gearef(context, TaskManager)-&gt;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 -->