Mercurial > hg > Papers > 2014 > masakoha-thesis > final
changeset 67:2817add546be
fix
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 24 Feb 2014 14:18:43 +0900 |
parents | dd1755633a9f |
children | 9c5f2ffbeb4e |
files | paper/chapter6.tex paper/fig/blockread.graffle paper/thesis-paper.pdf preliminary/final-thesis.pdf preliminary/final-thesis.tex |
diffstat | 5 files changed, 57 insertions(+), 62 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter6.tex Mon Feb 24 12:34:41 2014 +0900 +++ b/paper/chapter6.tex Mon Feb 24 14:18:43 2014 +0900 @@ -3,21 +3,18 @@ \section{まとめ} -・ 本研究では、ファイル読み込みを含む並列処理の動作の改善をおこなった - -・ ファイルを mmap で読み込むと、Task 1つ1つを起動するごとに読み込み、Taskの計算を動かすことになるので、IO の 回数がとても多くなる。 - -・ そこで、mmap を使用せずにファイルを読み込み、かつ、IOと Task が同時に動作するような処理を記述 -・ Broked Read を実装して、IO と Task の分離 +本研究では、I/Oを含む Task の並列処理の動作の改善を行った。 +ファイルを mmap でメモリを確保すると、文字列検索を行う Task が読み込みを行い、それが終了後に検索が行われる。 +読み込みが各 Task それぞれに割り当てられてしまうので、すべての Task が読み込み待ちとなってしまう。 +それを解決する方法として、読み込みを行う Task と文字列検索を行う Task を分けるように Blocked Read の設計と実装を行った。 -・ IO 専用の CPU Type を追加して、そのCPUを使用することで、読み込みに専念させることができる。 +Blocked Read である程度の大きさを読み込んだら Task が順次起動するように実装したが、それだけだと順次読み込んでいる Blocked Read に Task が割り込まれてしまう。 +そのようなことが起こらないように、Cerium Task Manager に新しいデバイスの設定 IO\_0 というタイプを追加した。このデバイスは、他のデバイス設定よりも priority を高く設定しているので、このタイプ以外で起動する Task に割り込まれることが起こらなくなる。 -・ その結果、初回での計測は 約33パーの動作改善につながり、I/O と mmap に並列度が加わった。 +これらを実装した結果、本研究では mmap で実装したときよりも 36 \% の動作改善が見られた。 \section{今後の課題} -・ 実メモリ以上のファイルを取り扱えるようにする - -・ 2回目以降の実行時にも、キャッシュから読み込まれるようにする - -・ Cerium の API としてまとめる +\subsection{実メモリ以上のファイルの取り扱い} +\subsection{Blocked Read で読み込んだファイルがキャッシュに残らない} +\subsection{Blocked Read を Cerium API化}
--- a/paper/fig/blockread.graffle Mon Feb 24 12:34:41 2014 +0900 +++ b/paper/fig/blockread.graffle Mon Feb 24 14:18:43 2014 +0900 @@ -26,7 +26,7 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2014-02-24 03:31:31 +0000</string> + <string>2014-02-24 05:15:37 +0000</string> <key>Modifier</key> <string>masataka kohagura</string> <key>NotesVisible</key> @@ -1729,7 +1729,7 @@ {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\fs24 \cf0 file mapping}</string> +\f0\fs24 \cf0 File Read}</string> <key>VerticalPad</key> <integer>0</integer> </dict> @@ -28303,8 +28303,8 @@ <integer>553</integer> <key>Points</key> <array> - <string>{132.36103293874669, 232.07150599490603}</string> - <string>{132.36106559200582, 248.50654822205897}</string> + <string>{132.36103293874675, 232.07150599490603}</string> + <string>{132.36106559200596, 248.50654822205897}</string> </array> <key>Style</key> <dict> @@ -28340,8 +28340,8 @@ <integer>552</integer> <key>Points</key> <array> - <string>{157.72335141816674, 232.07150597754608}</string> - <string>{157.72338344326971, 248.5065476340697}</string> + <string>{157.72335141816612, 232.07150597754608}</string> + <string>{157.72338344326772, 248.5065476340697}</string> </array> <key>Style</key> <dict> @@ -28377,8 +28377,8 @@ <integer>551</integer> <key>Points</key> <array> - <string>{183.08567164429874, 232.0715095184045}</string> - <string>{183.08570428262695, 248.50654826977546}</string> + <string>{183.08567164429857, 232.0715095184045}</string> + <string>{183.08570428262638, 248.50654826977546}</string> </array> <key>Style</key> <dict> @@ -36865,8 +36865,8 @@ <integer>51</integer> <key>Points</key> <array> - <string>{121.35529867678233, 177.31362450979645}</string> - <string>{123.14836393558373, 203.20488774565121}</string> + <string>{121.35434215276572, 177.31362670908658}</string> + <string>{123.14575009932759, 203.20489374014423}</string> </array> <key>Style</key> <dict> @@ -36963,8 +36963,8 @@ <integer>48</integer> <key>Points</key> <array> - <string>{124.30640165693954, 233.09257366778326}</string> - <string>{124.55971056087196, 262.83334056894927}</string> + <string>{124.30637664506185, 233.0925736678013}</string> + <string>{124.55963577309348, 262.8333405700418}</string> </array> <key>Style</key> <dict> @@ -37110,8 +37110,8 @@ <integer>40</integer> <key>Points</key> <array> - <string>{403.5863991978253, 292.35182894773737}</string> - <string>{403.62477166669379, 316.7221909412558}</string> + <string>{403.59289020841152, 292.35182857021192}</string> + <string>{403.6418477655335, 316.72218932894879}</string> </array> <key>Style</key> <dict> @@ -37292,8 +37292,8 @@ <integer>30</integer> <key>Points</key> <array> - <string>{403.57591434412035, 233.46295574501795}</string> - <string>{403.60123034511452, 262.46294188856001}</string> + <string>{403.5643771433887, 233.46295594411487}</string> + <string>{403.56730498095732, 262.46294028383636}</string> </array> <key>Style</key> <dict> @@ -37327,8 +37327,8 @@ <integer>29</integer> <key>Points</key> <array> - <string>{271.81245197291719, 233.09259180137556}</string> - <string>{271.81249762961949, 262.46295832778645}</string> + <string>{271.81243657594177, 233.09259180137556}</string> + <string>{271.81245197291719, 262.46295832778645}</string> </array> <key>Style</key> <dict> @@ -37418,8 +37418,8 @@ <integer>26</integer> <key>Points</key> <array> - <string>{322.4174582106013, 218.29040318839327}</string> - <string>{352.95783888363394, 218.37625539501053}</string> + <string>{322.4174582106013, 218.29040315674928}</string> + <string>{352.95783888363394, 218.37625534426928}</string> </array> <key>Style</key> <dict> @@ -37537,8 +37537,8 @@ <integer>15</integer> <key>Points</key> <array> - <string>{221.22318776784829, 136.39856705583315}</string> - <string>{167.05098451030736, 150.34218939720037}</string> + <string>{221.22318776784829, 136.39856705594281}</string> + <string>{167.05098451030736, 150.34218939743715}</string> </array> <key>Style</key> <dict> @@ -37572,8 +37572,8 @@ <integer>14</integer> <key>Points</key> <array> - <string>{360.67781839710358, 149.66489213873658}</string> - <string>{314.68235821446439, 137.15881274645372}</string> + <string>{360.67787266681347, 149.64415580712384}</string> + <string>{314.68246627969279, 137.1176656241316}</string> </array> <key>Style</key> <dict> @@ -37607,8 +37607,8 @@ <integer>13</integer> <key>Points</key> <array> - <string>{407.38600199105798, 87.907400689454633}</string> - <string>{407.30374035062249, 147.42593983242921}</string> + <string>{407.4058231760082, 87.907401162723886}</string> + <string>{407.40250244300876, 147.42592797779255}</string> </array> <key>Style</key> <dict> @@ -38144,8 +38144,8 @@ <integer>40</integer> <key>Points</key> <array> - <string>{403.59382811493339, 292.35182848951348}</string> - <string>{403.64431514489542, 316.72218912963075}</string> + <string>{403.59396363602571, 292.35182848870994}</string> + <string>{403.6446716642937, 316.72218908966272}</string> </array> <key>Style</key> <dict> @@ -38326,8 +38326,8 @@ <integer>30</integer> <key>Points</key> <array> - <string>{403.56304284685962, 233.46295594362414}</string> - <string>{403.5633814561657, 262.46294025488294}</string> + <string>{403.56288853323679, 233.46295594362397}</string> + <string>{403.56292769396885, 262.46294025487464}</string> </array> <key>Style</key> <dict> @@ -38452,8 +38452,8 @@ <integer>26</integer> <key>Points</key> <array> - <string>{322.4174582106013, 218.29040314444234}</string> - <string>{352.95783888363394, 218.37625532453504}</string> + <string>{322.4174582106013, 218.29040313965595}</string> + <string>{352.95783888363394, 218.37625531686001}</string> </array> <key>Style</key> <dict> @@ -38571,8 +38571,8 @@ <integer>15</integer> <key>Points</key> <array> - <string>{221.22318776784829, 136.39856705596634}</string> - <string>{167.05098451030736, 150.34218939748794}</string> + <string>{221.22318776784829, 136.3985670559714}</string> + <string>{167.05098451030736, 150.34218939749883}</string> </array> <key>Style</key> <dict> @@ -38606,8 +38606,8 @@ <integer>14</integer> <key>Points</key> <array> - <string>{360.67788647489022, 149.63888940375787}</string> - <string>{314.68249365772874, 137.10721546307607}</string> + <string>{360.6778899855093, 149.63755189528572}</string> + <string>{314.68250063891441, 137.10456144123449}</string> </array> <key>Style</key> <dict> @@ -38641,8 +38641,8 @@ <integer>13</integer> <key>Points</key> <array> - <string>{407.40662155379846, 87.907401162756742}</string> - <string>{407.40648048194021, 147.42592798173524}</string> + <string>{407.40664071342786, 87.907401162756742}</string> + <string>{407.40664071342786, 147.42592798173553}</string> </array> <key>Style</key> <dict> @@ -39102,11 +39102,11 @@ <key>WindowInfo</key> <dict> <key>CurrentSheet</key> - <integer>19</integer> + <integer>1</integer> <key>ExpandedCanvases</key> <array/> <key>Frame</key> - <string>{{923, 1296}, {1184, 874}}</string> + <string>{{614, 1111}, {1184, 874}}</string> <key>ListView</key> <true/> <key>OutlineWidth</key> @@ -39120,9 +39120,9 @@ <key>SidebarWidth</key> <integer>120</integer> <key>VisibleRegion</key> - <string>{{-108.99999999999999, 0}, {777.03702331406942, 544.44443482920974}}</string> + <string>{{-20, 0}, {599.42857142857144, 420}}</string> <key>Zoom</key> - <real>1.3500000238418579</real> + <real>1.75</real> <key>ZoomValues</key> <array> <array>
--- a/preliminary/final-thesis.tex Mon Feb 24 12:34:41 2014 +0900 +++ b/preliminary/final-thesis.tex Mon Feb 24 14:18:43 2014 +0900 @@ -58,12 +58,10 @@ \label{fig:includeio} \end{figure} -先行研究では、File Readの部分は mmap 関数を使用して実装していた。mmap 関数での実装の場合はコードの記述が容易である。 - \section{並列処理向け I/O の設計と実装} \subsection{mmap での実装の問題点} - +先行研究では mmap によるファイルの読み込みを行っていた。 mmap でファイルを読み込むタイミングは、mmap 関数が呼ばれたときではなく、mmap した領域に対して何らかのアクセスをしたときに初めてファイルが読み込まれる。 つまり、分割された Task は文字列検索をすぐに行うのではなく、文字列検索を行おうとした時に初めてファイルが格納される。 Task は複数一斉に実行されることが望ましいが、mmap だとそれぞれの Task で読み込みが起こってしまうので、I/O ネックによる Task の待ちが発生する。 @@ -89,10 +87,10 @@ \subsection{I/O 専用 thread の実装} Cerium Task Manager では Task 単位で CPU Type の設定を変更することができる。 -SPE\_ANY という CPU Type を設定すると、Cerium Task Manager 側が自動的に CPU を割り振ってくれる。 -しかし、今回の実装でこのCPU Type を使用してしまうと、Blocked Read Task の隙間時間に Task が割り振られてしまう問題がある。 -その問題を解決するために、IO\_0 という CPU Type を新しく実装した。 -IO\_0 は他の CPU Type よりも priority を高く設定しているので、他の Task に割り込まれることがないようにした。 +SPE\_ANY という Type を設定すると、Cerium Task Manager 側が自動的に CPU を割り振ってくれる。 +しかし、今回の実装でこの Type を使用してしまうと、Blocked Read Task の隙間時間に Task が割り振られてしまう問題がある。 +その問題を解決するために、IO\_0 という Type を新しく実装した。 +IO\_0 は他の Type よりも priority を高く設定しているので、他の Task に割り込まれることがないようにした。 (図\ref{fig:io0}) %% %(図\ref{fig:speany})