annotate slide/blank.html @ 64:4c245ed4e61a

io thread slide
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Wed, 18 Feb 2015 02:10:50 +0900
parents 3a35d13818e5
children a41beec3553e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
58
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 <!DOCTYPE html>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 <html>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 <head>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 <meta charset='utf-8'>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 <title>Seminar</title>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 <!--
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 Notes on CSS media types used:
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 2) screen -> outline mode (display all slides-at-once on screen)
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 3) print -> print (and print preview)
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 Questions, comments?
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 -->
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 <!-- style sheet links -->
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 <link rel="stylesheet/less" href="themes/blank/projection.css.less" media="screen,projection">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 <link rel="stylesheet/less" href="themes/blank/screen.css.less" media="screen">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 <link rel="stylesheet/less" href="themes/blank/print.css.less" media="print">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 <link rel="stylesheet/less" href="blank.css.less" media="screen,projection">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 <!-- Notes about less css support
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 - all less stylesheets (*.css.less) need to get listed/loaded first (before the less.js script)
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 - find more info about less.js online @ http://lesscss.org
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 ***** NOTE:
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 less.js browser script currently won’t work if you’re using Google Chrome
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 and the path to your page starts with "file:///" due to a known Chrome issue.
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 (In the developer/js console you will see:
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 XMLHttpRequest cannot load file:///../s6/shared/projection.css.less.
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 Cross origin requests are only supported for HTTP.)
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 -->
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 <!-- add js libs (less, jquery) -->
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 <script src="js/less-1.1.4.min.js"></script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 <script src="js/jquery-1.7.min.js"></script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 <!-- S6 JS -->
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 <script src="js/jquery.slideshow.js"></script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 <script src="js/jquery.slideshow.counter.js"></script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 <script src="js/jquery.slideshow.controls.js"></script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 <script src="js/jquery.slideshow.footer.js"></script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 <script src="js/jquery.slideshow.autoplay.js"></script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 <script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 $(document).ready( function() {
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 Slideshow.init();
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 // Example 2: Start Off in Outline Mode
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 // Slideshow.init( { mode: 'outline' } );
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 // Example 3: Use Custom Transition
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 // Slideshow.transition = transitionScrollUp;
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 // Slideshow.init();
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 // Example 4: Start Off in Autoplay Mode with Custom Transition
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 // Slideshow.transition = transitionScrollUp;
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 // Slideshow.init( { mode: 'autoplay' } );
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 } );
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 </script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 <!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 <!--[if IE]>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 <script src="js/jquery.microsoft.js"></script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 <![endif]-->
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 </head>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 <body>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 <div class="layout">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 <div id="header"></div>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 <div id="footer">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 <div align="right">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 <img src="images/concurrency.png" width="200">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 </div>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 </div>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 </div>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 <div class="presentation">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 <!-- add slides here; example -->
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 <div class='slide cover'>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 <table width="90%" height="90%" border="0" align="center">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 <tr>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 <td><div align="center">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 <h1><font color="#808db5">マルチプラットフォーム対応<br>並列プログラミングフレームワーク</font></h1>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 </div></td>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 </tr>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 <tr>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 <td><div align="left">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 Yuhi TOMARI
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 <script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 var date = new Date();
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 var year = date.getFullYear();
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 var month = date.getMonth();
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 var day = date.getDate();
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 var monthList = new Array("January","February","March","April","May","June",
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 "July","August","September","October","November","December");
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 document.write(monthList[month]+" "+day+", "+year);
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 </script>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:300%;height:0.2em;">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 </div></td>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 </tr>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 </table>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 </div>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 <div class='slide'>
61
1eea0dd50676 create index
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
116 <h2>マルチプラットフォームなフレームワークにおける並列プログラミング 1/2</h2>
63
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
117 <p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
118 消費電力や発熱、クロックの限界といった問題から CPU の性能を上げることによる処理性能の向上は難しい。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
119 マルチコア CPU や GPU を含んだヘテロジニアス構成が主流になっている。
58
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 クロックの性能を上げるのではなく、コア数を増やす事でパフォーマンスを向上させている。
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 </p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 <p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 マルチコア CPU や GPU といった<font color="red">マルチコアプラットフォーム</font>なアーキテクチャ上で
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 リソースを有効活用するには、それぞれのプラットフォームに最適な形でプログラムを並列に動作させる必要がある。
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 </p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 <p>しかしこれらのチューニングは複雑で、コーディング時に毎回行うと複雑さや拡張性の問題がある。</p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 </div>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 <div class='slide'>
61
1eea0dd50676 create index
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
131 <h2>マルチプラットフォームなフレームワークにおける並列プログラミング 2/2</h2>
58
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 <p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 そういった問題を解決するため、本研究では並列プログラミングフレームワーク、 Cerium の開発を行った。
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 異なるプラットフォーム上で最適なチューニングを行うため、以下の実装を行った。
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 </p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 <ul>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 <li>パイプライニングによる Task の並列実行</li>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 <li>OpenCL、CUDA を用いた GPGPU 対応</li>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 <li>データ並列実行</li>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 <li>並列処理むけのI/O</li>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 </ul>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 <p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 Sort、WordCount、FFT といった例題を元に、これら Cerium の並列実行機構が
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 マルチプラットフォームにおける並列プログラミングで有効に作用することを示す。
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 </p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 </div>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 <div class='slide'>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 <h2>並列プログラミングフレームワーク Cerium</h2>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 <p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 Cerium は Linux、MacOSX 上で動作する汎用計算用の並列プログラミングフレームワークである。
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 </p>
63
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
153 <div align="center">
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
154 <img src="./images/cerium_image.png" width="700">
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
155 </div>
58
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 <p>Cerium を用いることでマルチコア CPU と GPU において Scheduling を含めたプログラミングを可能となる。</p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 </div>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
158
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 <div class='slide'>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
160 <h2>Cerium における Task の生成</h2>
58
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 <p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 Cerium TaskManager では処理の単位を Task としてプログラムを記述していく。
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 関数やサブルーチンを Task として扱い、Task に各種パラメタを設定した後に並列実行される。
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 Input データの各要素同士を乗算し、 Output に格納する Multiply という例題がある。
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 Multiply の例題を元に Cerium で Task が生成される様子を以下に示す。
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 </p>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 <pre class="code">
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 void
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 multiply_init(TaskManager *manager, float *i_data1,
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 float *i_data2, float *o_data) {
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
172
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 // create task
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 HTask* multiply = manager->create_task(MULTIPLY_TASK);
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 multiply->set_cpu(spe_cpu);
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
176
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 // set indata
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 multiply->set_inData(0, i_data1, sizeof(float) * length);
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 multiply->set_inData(1, i_data2, sizeof(float) * length);
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
180
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 // set outdata
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 multiply->set_outData(0, o_data, sizeof(float) * length);
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
183
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 // set parameter
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 multiply−>set_param(0,(long)length);
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
186
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 // set device
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 multiply->set_cpu(SPE_ANY);
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
189
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 // spawn task
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 multiply−>spawn();
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 }
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 </pre>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 </div>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 <div class='slide'>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
197 <h2>Cerium における Task の記述</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
198 <p>Device 側で実行される Task の記述を示す。</p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
199 <pre class="code">
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
200 static int
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
201 run(SchedTask ∗s) {
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
202 float ∗i_data1 = (float∗)s−>get_input(0); // get input
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
203 float ∗i_data2 = (float∗)s−>get_input(1); // get output
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
204 float ∗o_data = (float∗)s−>get_output(0); // get parameter
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
205 long length = (long)s−>get_param(0);
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
206
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
207 // calculate
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
208 for (int i=0; i&lt;length; i++) {
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
209 o_data[i] = i_data1[i] ∗ i_data2[i];
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
210 }
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
211 return 0;
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
212 }
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
213 </pre>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
214 <p>Host 側では Task を生成する際に様々なパラメタを設定しており、
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
215 Task にはそれを取得する API が用意されている。</p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
216 <table border="0" >
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
217 <tr bgcolor="palegreen">
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
218 <th align="center">API</th><th align="center">content</th>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
219 </tr>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
220
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
221 <tr bgcolor="dbffa3">
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
222 <th align="left" >get_input</th><th align="left">入力データのアドレスを取得</th>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
223 </tr>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
224 <tr bgcolor="palegreen">
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
225 <th align="left">get_output</th><th align="left">出力先データのアドレスを取得</th>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
226 </tr>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
227 <tr bgcolor="dbffa3">
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
228 <th align="left">get_param</th><th align="left">パラメータを取得</th>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
229 </tr>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
230 </table>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
231 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
232
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
233 <div class='slide'>
63
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
234 <h2>Task の依存関係の記述</h2>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
235 <p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
236 並列処理を行う場合、Task を大量に生成する場合がある。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
237 そういった場合において一括で Task を生成/実行してしまうと並列度が落ちてしまう。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
238 これは生成しただけで Task そのものがメモリを圧迫してしまっていることが原因となる。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
239 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
240 <p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
241 そういった 例題において、Task は一定数ずつ徐々に生成/実行する必要がある。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
242 ということは、Block 間で依存関係を設定する必要がある。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
243 依存関係について Cerium の Bitonic Sort を例題に考える。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
244 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
245 </div>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
246
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
247
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
248 <div class='slide'>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
249 <h2>Bitonic Sort の例題</h2>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
250 <p>Bitonic Sort は配列の分割を行い、分割した部分に対して Sort を行う。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
251 分割後の Sort には QuickSort を使用している。Bitonic Sort は2つの Sort を行う。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
252 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
253 <ul>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
254 <li>使用する CPU 数を元に分割数を算出し、分割した箇所に対して Sort する(fsort)
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
255 <li>Block の中間から次の Block の中間までを Sort する(bsort)
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
256 </ul>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
257 <p>この2つの Sort を分割数分繰り返している</p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
258 </div>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
259
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
260 <div class='slide'>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
261 <h2>Bitonic Sort の例題</h2>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
262 <div align="center">
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
263 <img src="./images/fsort_bsort.png" width="850">
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
264 </div>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
265 </div>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
266
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
267 <div class='slide'>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
268 <h2>Task 間の依存関係</h2>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
269 <p>Bitonic Sort を行う際、依存関係として bsort は fsort の結果に対して sort を行い、
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
270 fsort は前の Stage の bsort に対して Sort を行う必要がある
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
271 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
272 <p>よって、BitonicSort のような大量に Task を生成する例題を並列実行する場合、
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
273 「例題の性質としての依存関係」と「Task を徐々に生成するための依存関係」
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
274 の二種類の依存関係を記述する必要がある。</p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
275 </div>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
276
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
277 <div class='slide'>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
278 <h2>依存関係の記述</h2>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
279 <p>例題独自の依存関係</p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
280 <pre class="code" align="left">static int
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
281 sort_start(SchedTask *manager, void *d, void *e)
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
282 {
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
283 Sort *s = (Sort*)manager->get_param(0);
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
284 long half_num = s->split_num-1;
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
285
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
286 for (int i = 0; i < s->split_num-1; i++) {
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
287 s->fsort[i] = manager->create_task(QUICK_SORT,(memaddr)&s->data[i*block_num],
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
288 sizeof(Data)*block_num,
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
289 (memaddr)&s->data[i*block_num],
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
290 sizeof(Data)*block_num);
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
291
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
292 s->fsort[i]->wait_for(s->bsort[i-1]);
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
293 }
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
294 ~省略~
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
295 </pre>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
296 </div>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
297 <div class='slide'>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
298 <h2>依存関係の記述</h2>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
299 <p>Task を徐々に生成するための依存関係</p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
300 <pre class="code" align="left">
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
301 // recursive Task
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
302 HTaskPtr restart = manager->create_task(SortSimple,0,0,0,0);
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
303 restart->set_param(0,(memaddr)s);
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
304 restart->wait_for(s->fsort[0]);
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
305 for (int i = 0; i < s->split_num; i++) {
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
306 s->fsort[i]->spawn();
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
307 }
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
308 restart->spawn();
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
309 return 0;
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
310 }
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
311 </pre>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
312 </div>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
313
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
314 <div class='slide'>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
315 <h2>TaskManager の構成</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
316 <div align="center">
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
317 <img src='images/createtask.png' width="700">
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
318 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
319 <ul>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
320 <li>TaskManagerと各Threadsの間には Syncronized な Mail Queueがある。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
321 <li>依存関係の解決された Task は TaskManager から Mail Queue に送られる。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
322 <li>Task に設定された CPUType に対応した Threads が Mail Queue から Task を取得し、並列実行していく。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
323 </ul>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
324 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
325
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
326 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
327 <h2>マルチコア CPU 上での並列実行</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
328 <div align="center">
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
329 <img src="images/pipeline.png" width="600">
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
330 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
331 <p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
332 Cerium は Cell 上で動作するフレームワークであったが MacOSX、Linux 上での並列実行に対応させた。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
333 </p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
334 <p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
335 マルチコア CPU 上での並列実行は、Synchronized Queue とパイプラインによって実現されている。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
336 TaskManager で依存関係を解決された Task は Scheduler に送信され、
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
337 Scheduler が持っているパイプラインの機構に沿って並列に実行する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
338 </p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
339 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
340
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
341 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
342 <h2>マルチコア CPU におけるパイプラインの実装</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
343 <table>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
344 <tr>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
345 <th>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
346 <pre class="code" align="left">void
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
347 Scheduler::run(SchedTaskBase* task1) {
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
348 SchedTaskBase* task2 = new SchedNop();
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
349 SchedTaskBase* task3 = new SchedNop();
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
350
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
351 // main loop
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
352 do {
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
353
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
354 task1->read();
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
355 task2->exec();
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
356 task3->write();
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
357
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
358 delete task3;
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
359
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
360 task3 = task2;
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
361 task2 = task1;
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
362 task1 = task1->next(this, 0);
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
363
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
364 } while (task1);
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
365
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
366 delete task3;
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
367 delete task2;
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
368 }</pre>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
369 </th>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
370 <th align="left">
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
371 <p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
372 Cerium の Task は SchedTask と呼ばれるデータ構造で表現されている。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
373 SchedTask は read/exec/write のメソッドを持っており、
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
374 パイプラインの各ステージで段階的に実行される。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
375 </p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
376 <p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
377 引数として TaskList を受け取り、List 内の Task をパイプライン実行する。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
378 task3 が write を担当しており、write が終わった Task は終了となる。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
379 </p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
380 <p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
381 終了した task は delete して良い。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
382 task3=task2、task2=task1 と SchedTask をずらして行き、TaskList から 次の Task を読み込む。
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
383 </p>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
384 </th>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
385 </tr>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
386 </table>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
387 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
388
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
389 <div class='slide'>
63
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
390 <h2>マルチコア CPU におけるデータ並列</h2>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
391 <p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
392 Cerium はタスク並列による実行のみを行っていた。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
393 並列化を行う問題によってはデータ並列を行った方が良い場合がある。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
394 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
395 <p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
396 タスク並列は1つのデータに対して異なる処理方法を適用し、それぞれ独立して実行させるものである。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
397 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
398
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
399 <p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
400 データ並列は多くのデータを1つのタスクに与え、データごとに独立した処理を行わせる手法である。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
401 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
402 <p>処理対象となるデータが充分な数のサブセットへ分割可能な場合、データ並列が有効となる。</p>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
403 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
404
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
405 <div class='slide'>
63
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
406 <h2>iterate API</h2>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
407 <p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
408 データ並列による実行を行う場合、一つの記述から複数のTaskを生成する必要がある。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
409 生成した各TaskにIDとinput/output dataを割り当てる「iterate」というAPIを実装した。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
410 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
411
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
412 <table>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
413 <tr>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
414 <td>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
415 <img src="images/iterate.png" height="450"></img>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
416 </td>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
417 <td>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
418 <ul>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
419 <li>1つの記述から複数のTaskを生成する</li>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
420 <li>生成した複数のTaskにIDとInput/Output Dataを割り当てる</li>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
421 </ul>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
422 この例だと、Taskの持つidとTaskに割り当てられるデータは
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
423 1対1で対応している。id=割り当てられたdataのindexとなっている。<br><br>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
424 並列プログラミングだと、並列化部分が全て同一の Task であるという場合は少なくない。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
425 iterate API ならループで回すような処理をする必要が無く、容易な Syntax で記述できる。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
426 </td>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
427 </tr></table>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
428 </div>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
429
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
430 <div class='slide'>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
431 <h2>マルチコア CPU によるデータ並列実行</h2>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
432 <p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
433 マルチコア CPU においてデータ並列実行する場合、以下のように記述する。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
434 例題として 2つの input のデータの積を output データに格納して返す例題、multiply を用いた。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
435 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
436 <pre class="code">
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
437 static int
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
438 run(SchedTask *s, void *rbuf, void *wbuf) {
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
439 float *indata1, *indata2, *outdata;
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
440
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
441 indata1 = (float*)s->get_input(rbuf, 0);
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
442 indata2 = (float*)s->get_input(rbuf, 0);
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
443 outdata = (float*)s->get_output(wbuf, 0);
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
444
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
445 long id = (long)s->get_param(0);
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
446 outdata[id] = indata1[id] * indata2[id];
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
447 return 0;
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
448 }
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
449 </pre>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
450 <p>get_param によって自分の担当する index を取得し、担当範囲のみを計算する。</p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
451 <p>データ並列実行する場合、各Task に Input/Outpu を設定するのではなく、
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
452 全ての Task でデータを共有する。共有したデータの自分の担当する箇所にのみ計算を行う。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
453 そのため少ないコピーにおさえることができる。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
454 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
455 </div>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
456
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
457
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
458 <div class='slide'>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
459 <h2>DMA 転送</h2>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
460 <p>Cerium は DMA 転送をサポートしている。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
461 DMA とは CPU を介さずに周辺装置とメモリ間でデータ転送を行う転送方式である。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
462 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
463 <p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
464 DMA は prefetch と呼ばれる転送先読みの機能がある。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
465 DMA の転送効率を向上させるために送信データを予め取り込んでおく機能である。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
466 prefetch による転送機能を追加した。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
467 </p>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
468 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
469
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
470 <div class='slide'>
61
1eea0dd50676 create index
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 60
diff changeset
471 <h2>GPU 上での並列実行</h2>
63
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
472 <p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
473 GPU 上での並列実行をサポートするフレームワークとして、OpenCL と CUDA が挙げられる。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
474 これらのフレームワークを用いて Cerium に GPU 上で 並列実行する機能を加えた。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
475 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
476 <p>
64
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
477 TaskManager から受け取った Task やデータをOpenCL、CUDA の API を介して GPU に転送する機構、
63
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
478 GpuScheduler と CudaScheduler を実装した。
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
479 </p>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
480 <div align="center">
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
481 <img src="./images/gpu_image.png" width="600">
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
482 </div>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
483 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
484
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
485 <div class='slide'>
63
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
486 <h2>フレームワークを用いた GPU の制御</h2>
64
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
487 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
488 GpuScheduler、CudaScheduler ではそれぞれのフレームワークを用いて GPU の制御を行っている。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
489 行われていることは以下の3つに分けられる。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
490 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
491 <ul>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
492 <li>Host から Device へのデータ転送
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
493 <li>kernel の実行
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
494 <li>Device から Host へのデータ転送
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
495 </ul>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
496 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
497 CommandQueue と呼ばれる機構を用いてこういった GPU を制御するための処理を行っていく。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
498 CommandQueue に命令を起こるためのしくみで、制御は全てこの Queue を介して行われる。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
499 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
500 <p>これらはRead, Exec、Write に対応する。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
501 GPGPU 用の Scheduler でもパイプラインを構成する。</p>
63
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
502 </div>
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
503
3a35d13818e5 multicore cpu
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 61
diff changeset
504 <div class='slide'>
64
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
505 <h2>GPGPU におけるパイプラインの実装(Read)</h2>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
506 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
507 GpuScheduler では SchedTask を用いてない。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
508 メインループでは2つの CommandQueue を保持し、GPU の制御命令を二段のパイプラインで実行していく。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
509 TaskList から Task を取り出し、Task から実行する kernel やパラメタを生成し、
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
510 各種フレームワークの API を通して GPU のメモリに転送される。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
511 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
512
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
513 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
514 全ての Task が終了すると SynchronizedQueue を通してTaskManager に終了を通知する。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
515 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
516
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
517 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
518 Scheduler の内部で Platform や DeviceID の取得、
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
519 kernel の build や load といった API を使用するための初期化も行っており、
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
520 並列化したい処理のみに集中できる。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
521 </p>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
522 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
523
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
524 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
525 <h2>GPGPU におけるデータ並列</h2>
64
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
526 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
527 マルチコア CPU と同様に、GPGPU に関してもデータ並列実行をサポートした。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
528 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
529 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
530 GPU 上でデータ並列実行する際も iterate API によりデータ並列用の Task を生成できる。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
531 生成部分の記述はマルチコア CPU と同じ形式で記述できる。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
532 また、Task 自体の記述もほぼ同じ形式となる。以下に Task の例を示す。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
533 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
534
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
535 <table>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
536 <tr align="left">
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
537 <th>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
538 <pre class="code">
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
539 __kernel void // OpenCL
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
540 multiply(__global const long *params,
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
541 __global const float *input1,
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
542 __global const float *input2,
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
543 __global const float *output) {
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
544
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
545 long id = get_global_id(0);
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
546
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
547 output[id] = input1[id] * input2[id];
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
548 }
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
549 </pre>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
550 </th>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
551 <th>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
552 <pre class="code">
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
553 __global__ void // CUDA
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
554 multiply(__global const long *params,
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
555 __global const float *input1,
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
556 __global const float *input2,
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
557 __global const float *output) {
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
558
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
559 int id = blockIdx.x * blockDim.x + threadIdx.x;
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
560
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
561 output[id] = input1[id] * input2[id];
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
562 }
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
563 </pre>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
564 </th>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
565 </tr>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
566 </table>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
567 </div>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
568
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
569 <div class='slide'>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
570 <h2>並列処理向け I/O</h2>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
571 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
572 ファイルの読み込みなどの I/O を含むプログラムは、
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
573 読み込み時間が Task のと比較してオーバーヘッドになることが多い。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
574 プログラムの並列化を行ったとしても I/O がボトルネックになってしまうと処理は高速にならない。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
575 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
576 <p>並列計算と同時に動作する、並列 I/O の実装を行った。</p>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
577 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
578
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
579 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
580 <h2>Cerium の I/O(mmap による読み込み)</h2>
64
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
581 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
582 Cerium ではファイルの読み込みを mmap で行っていた。</p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
583 <ul>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
584 <li>mmap はまず仮想メモリにファイルをマッピングする。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
585 <li>マッピングしたメモリ空間にアクセスがあったら OS が読み込みを行う。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
586 <li>mmap は並列に動作せず、逐次処理
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
587 <li>読み込みが OS 依存となり、環境に左右されやすい
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
588 <p>並列に動作する I/O の機構が必要である</p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
589 </div>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
590
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
591
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
592 <div class='slide'>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
593 <h2>WordCount</h2>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
594 <p>サイズの大きいファイルを読み込む例題、WordCount を元に並列 I/O について考える。</p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
595 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
596 WordCount は Input としてファイルを受け取り、ファイルの単語数と行数を集計して表示する例題である。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
597 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
598 <table>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
599 <tr><th><img src="./images/wordcount.png" width="600"></th>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
600 <th align="left">
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
601 <ul>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
602 <li>input ファイルを一定の大きさ分割する
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
603 <li>読み込んだテキストファイルに対してそれぞれ並列に計算を行う
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
604 <li>PrintTask が計算結果を集計して出力する
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
605 </ul>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
606 </th>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
607 </tr>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
608 </table>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
609 </div>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
610
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
611 <div class='slide'>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
612 <h2>BlockedRead による I/O の並列化</h2>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
613 <p>ファイルを読み込んで、読み込んだファイルに対して並列実行を行う場合、ファイルを分割して処理を行う。</p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
614 <p>よって読み込みの処理自体を分割し、ある程度の大きさ(Block)ごとに読み込みと Task の実行を行う。</p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
615 <p>読み込みの処理自体を分割して行う。これを BlockedRead と呼ぶ。</p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
616 </p>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
617 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
618
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
619 <div class='slide'>
64
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
620 <h2>BlockedRead を用いた WordCount</h2>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
621 <div align="center">
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
622 <img src="./images/blockedread.png" width="600">
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
623 </div>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
624 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
625 BlockedRead を用いて WordCount を行う際、読み込み用の Task と
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
626 読み込んだファイルに対して処理を行う Task の2つを生成する。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
627 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
628 <p>ファイルを分割して読み込み、
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
629 読み込んだファイルに対して WordCount を行う一定数のTask(BlockedTask)を割り当てる。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
630 Task には依存関係を設定する必要があり、図のTask n+1 はTask nを待つ必要がある。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
631 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
632 <p>まだ読み込みが終了していない領域に割り当てられた Task が起動してしまう事を防ぐためである。</p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
633 <p>この wait によるロックはオーバーヘッドとなるため、なるべく発生しないことが望ましい。</p>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
634 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
635
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
636 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
637 <h2>I/O 専用のThread</h2>
64
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
638 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
639 BlockedRead の依存関係による wait はなるべく発生しないことが望ましい。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
640 そのため、BlockedRead は連続で Task の起動を行う必要がある。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
641 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
642 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
643 Cerium には SPE_ANY という Thread があり、この Thread で Task の実行を行うと自動で実行するコアを割り振る。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
644 しかし、SPE_ANY で BlockedRead を実行すると BlockedRead 間に別の Task が割り込んでしまう場合がある。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
645 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
646 <div align="center">
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
647 <img src="./images/speblockedread.png" width="700">
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
648 </div>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
649 <p>TaskBlock の依存関係によっては wait がかかってしまう。そこで、I/O 専用の Thread を作成した。</p>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
650 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
651
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
652 <div class='slide'>
64
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
653 <h2>I/O 専用のThread</h2>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
654 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
655 IO 専用の Thread を作成したが、それだけでは問題は解決しない場合がある。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
656 IO thread 内では割り込みが生じる可能性はないが、thread レベルで割り込みが起きる可能性がある。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
657 IO thread-SPE_ANY-IO Thread のような実行順序となる場合である。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
658 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
659 <div align="center">
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
660 <img src="./images/iothread.png" width="700">
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
661 </div>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
662 <p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
663 そのため、pthread_getschedparam() という POSIX スレッドの API を用いて IO Thread の priority を高く設定した。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
664 IO Thread は必ず連続で行われることになる。
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
665 </p>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
666 </div>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
667
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
668 <div class='slide'>
4c245ed4e61a io thread slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
669 <h2>-</h2>
60
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
670 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
671
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
672 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
673 <h2>実験に利用する例題-WordCount-</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
674 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
675
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
676 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
677 <h2>実験に利用する例題-FFT-</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
678 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
679
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
680 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
681 <h2>実験環境</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
682 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
683
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
684 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
685 <h2>マルチコア CPU による並列実行のベンチマーク</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
686 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
687
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
688 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
689 <h2>DMA の prefecth に関するベンチマーク </h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
690 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
691
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
692 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
693 <h2>GPGPU のベンチマーク</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
694 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
695
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
696 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
697 <h2>データ並列実行のベンチマーク</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
698 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
699
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
700 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
701 <h2>GPGPU のベンチマーク</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
702 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
703
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
704 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
705 <h2>FFT による GPGPU のベンチマーク</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
706 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
707
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
708 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
709 <h2>BlockedRead による並列 I/O のベンチマーク</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
710 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
711
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
712 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
713 <h2>まとめ</h2>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
714 </div>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
715
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
716 <div class='slide'>
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents: 58
diff changeset
717 <h2>今後の課題</h2>
58
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
718 </div>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
719
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
720 </div> <!-- presentation -->
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
721 </bodypp>
8057614d5b77 add slide
Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
722 </html>